xref: /dragonfly/contrib/gcc-4.7/gcc/cp/decl.c (revision 67640b13)
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
4    Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com)
6 
7 This file is part of GCC.
8 
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13 
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22 
23 
24 /* Process declarations and symbol lookup for C++ front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27 
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30 
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-iterator.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "intl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "tm_p.h"
46 #include "target.h"
47 #include "c-family/c-common.h"
48 #include "c-family/c-objc.h"
49 #include "c-family/c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "pointer-set.h"
55 #include "splay-tree.h"
56 #include "plugin.h"
57 
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60   BSP_VAR,    /* variable */
61   BSP_PARM,   /* parameter */
62   BSP_TYPE,   /* type */
63   BSP_FIELD   /* field */
64 };
65 
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
68 
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76 			 int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static tree build_library_fn_1 (tree, enum tree_code, tree);
81 static int member_function_or_else (tree, tree, enum overload_flags);
82 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83 			    int);
84 static void check_for_uninitialized_const_var (tree);
85 static hashval_t typename_hash (const void *);
86 static int typename_compare (const void *, const void *);
87 static tree local_variable_p_walkfn (tree *, int *, void *);
88 static tree record_builtin_java_type (const char *, int);
89 static const char *tag_name (enum tag_types);
90 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static tree check_initializer (tree, tree, int, VEC(tree,gc) **);
95 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96 static void save_function_data (tree);
97 static void copy_type_enum (tree , tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static void record_key_method_defined (tree);
103 static tree create_array_type_for_decl (tree, tree, tree);
104 static tree get_atexit_node (void);
105 static tree get_dso_handle_node (void);
106 static tree start_cleanup_fn (void);
107 static void end_cleanup_fn (void);
108 static tree cp_make_fname_decl (location_t, tree, int);
109 static void initialize_predefined_identifiers (void);
110 static tree check_special_function_return_type
111 	(special_function_kind, tree, tree);
112 static tree push_cp_library_fn (enum tree_code, tree);
113 static tree build_cp_library_fn (tree, enum tree_code, tree);
114 static void store_parm_decls (tree);
115 static void initialize_local_var (tree, tree);
116 static void expand_static_init (tree, tree);
117 
118 /* The following symbols are subsumed in the cp_global_trees array, and
119    listed here individually for documentation purposes.
120 
121    C++ extensions
122 	tree wchar_decl_node;
123 
124 	tree vtable_entry_type;
125 	tree delta_type_node;
126 	tree __t_desc_type_node;
127 
128 	tree class_type_node;
129 	tree unknown_type_node;
130 
131    Array type `vtable_entry_type[]'
132 
133 	tree vtbl_type_node;
134 	tree vtbl_ptr_type_node;
135 
136    Namespaces,
137 
138 	tree std_node;
139 	tree abi_node;
140 
141    A FUNCTION_DECL which can call `abort'.  Not necessarily the
142    one that the user will declare, but sufficient to be called
143    by routines that want to abort the program.
144 
145 	tree abort_fndecl;
146 
147    The FUNCTION_DECL for the default `::operator delete'.
148 
149 	tree global_delete_fndecl;
150 
151    Used by RTTI
152 	tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153 	tree tinfo_var_id;  */
154 
155 tree cp_global_trees[CPTI_MAX];
156 
157 /* Indicates that there is a type value in some namespace, although
158    that is not necessarily in scope at the moment.  */
159 
160 tree global_type_node;
161 
162 /* The node that holds the "name" of the global scope.  */
163 tree global_scope_name;
164 
165 #define local_names cp_function_chain->x_local_names
166 
167 /* A list of objects which have constructors or destructors
168    which reside in the global scope.  The decl is stored in
169    the TREE_VALUE slot and the initializer is stored
170    in the TREE_PURPOSE slot.  */
171 tree static_aggregates;
172 
173 /* -- end of C++ */
174 
175 /* A node for the integer constant 2.  */
176 
177 tree integer_two_node;
178 
179 /* Used only for jumps to as-yet undefined labels, since jumps to
180    defined labels can have their validity checked immediately.  */
181 
182 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
183   struct named_label_use_entry *next;
184   /* The binding level to which this entry is *currently* attached.
185      This is initially the binding level in which the goto appeared,
186      but is modified as scopes are closed.  */
187   cp_binding_level *binding_level;
188   /* The head of the names list that was current when the goto appeared,
189      or the inner scope popped.  These are the decls that will *not* be
190      skipped when jumping to the label.  */
191   tree names_in_scope;
192   /* The location of the goto, for error reporting.  */
193   location_t o_goto_locus;
194   /* True if an OpenMP structured block scope has been closed since
195      the goto appeared.  This means that the branch from the label will
196      illegally exit an OpenMP scope.  */
197   bool in_omp_scope;
198 };
199 
200 /* A list of all LABEL_DECLs in the function that have names.  Here so
201    we can clear out their names' definitions at the end of the
202    function, and so we can check the validity of jumps to these labels.  */
203 
204 struct GTY(()) named_label_entry {
205   /* The decl itself.  */
206   tree label_decl;
207 
208   /* The binding level to which the label is *currently* attached.
209      This is initially set to the binding level in which the label
210      is defined, but is modified as scopes are closed.  */
211   cp_binding_level *binding_level;
212   /* The head of the names list that was current when the label was
213      defined, or the inner scope popped.  These are the decls that will
214      be skipped when jumping to the label.  */
215   tree names_in_scope;
216   /* A vector of all decls from all binding levels that would be
217      crossed by a backward branch to the label.  */
218   VEC(tree,gc) *bad_decls;
219 
220   /* A list of uses of the label, before the label is defined.  */
221   struct named_label_use_entry *uses;
222 
223   /* The following bits are set after the label is defined, and are
224      updated as scopes are popped.  They indicate that a backward jump
225      to the label will illegally enter a scope of the given flavor.  */
226   bool in_try_scope;
227   bool in_catch_scope;
228   bool in_omp_scope;
229 };
230 
231 #define named_labels cp_function_chain->x_named_labels
232 
233 /* The number of function bodies which we are currently processing.
234    (Zero if we are at namespace scope, one inside the body of a
235    function, two inside the body of a function in a local class, etc.)  */
236 int function_depth;
237 
238 /* To avoid unwanted recursion, finish_function defers all mark_used calls
239    encountered during its execution until it finishes.  */
240 bool defer_mark_used_calls;
241 VEC(tree, gc) *deferred_mark_used_calls;
242 
243 /* States indicating how grokdeclarator() should handle declspecs marked
244    with __attribute__((deprecated)).  An object declared as
245    __attribute__((deprecated)) suppresses warnings of uses of other
246    deprecated items.  */
247 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248 
249 
250 /* A list of VAR_DECLs whose type was incomplete at the time the
251    variable was declared.  */
252 
253 typedef struct GTY(()) incomplete_var_d {
254   tree decl;
255   tree incomplete_type;
256 } incomplete_var;
257 
258 DEF_VEC_O(incomplete_var);
259 DEF_VEC_ALLOC_O(incomplete_var,gc);
260 
261 static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
262 
263 /* Returns the kind of template specialization we are currently
264    processing, given that it's declaration contained N_CLASS_SCOPES
265    explicit scope qualifications.  */
266 
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
269 {
270   int n_template_parm_scopes = 0;
271   int seen_specialization_p = 0;
272   int innermost_specialization_p = 0;
273   cp_binding_level *b;
274 
275   /* Scan through the template parameter scopes.  */
276   for (b = current_binding_level;
277        b->kind == sk_template_parms;
278        b = b->level_chain)
279     {
280       /* If we see a specialization scope inside a parameter scope,
281 	 then something is wrong.  That corresponds to a declaration
282 	 like:
283 
284 	    template <class T> template <> ...
285 
286 	 which is always invalid since [temp.expl.spec] forbids the
287 	 specialization of a class member template if the enclosing
288 	 class templates are not explicitly specialized as well.  */
289       if (b->explicit_spec_p)
290 	{
291 	  if (n_template_parm_scopes == 0)
292 	    innermost_specialization_p = 1;
293 	  else
294 	    seen_specialization_p = 1;
295 	}
296       else if (seen_specialization_p == 1)
297 	return tsk_invalid_member_spec;
298 
299       ++n_template_parm_scopes;
300     }
301 
302   /* Handle explicit instantiations.  */
303   if (processing_explicit_instantiation)
304     {
305       if (n_template_parm_scopes != 0)
306 	/* We've seen a template parameter list during an explicit
307 	   instantiation.  For example:
308 
309 	     template <class T> template void f(int);
310 
311 	   This is erroneous.  */
312 	return tsk_invalid_expl_inst;
313       else
314 	return tsk_expl_inst;
315     }
316 
317   if (n_template_parm_scopes < n_class_scopes)
318     /* We've not seen enough template headers to match all the
319        specialized classes present.  For example:
320 
321 	 template <class T> void R<T>::S<T>::f(int);
322 
323        This is invalid; there needs to be one set of template
324        parameters for each class.  */
325     return tsk_insufficient_parms;
326   else if (n_template_parm_scopes == n_class_scopes)
327     /* We're processing a non-template declaration (even though it may
328        be a member of a template class.)  For example:
329 
330 	 template <class T> void S<T>::f(int);
331 
332        The `class T' matches the `S<T>', leaving no template headers
333        corresponding to the `f'.  */
334     return tsk_none;
335   else if (n_template_parm_scopes > n_class_scopes + 1)
336     /* We've got too many template headers.  For example:
337 
338 	 template <> template <class T> void f (T);
339 
340        There need to be more enclosing classes.  */
341     return tsk_excessive_parms;
342   else
343     /* This must be a template.  It's of the form:
344 
345 	 template <class T> template <class U> void S<T>::f(U);
346 
347        This is a specialization if the innermost level was a
348        specialization; otherwise it's just a definition of the
349        template.  */
350     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351 }
352 
353 /* Exit the current scope.  */
354 
355 void
356 finish_scope (void)
357 {
358   poplevel (0, 0, 0);
359 }
360 
361 /* When a label goes out of scope, check to see if that label was used
362    in a valid manner, and issue any appropriate warnings or errors.  */
363 
364 static void
365 pop_label (tree label, tree old_value)
366 {
367   if (!processing_template_decl)
368     {
369       if (DECL_INITIAL (label) == NULL_TREE)
370 	{
371 	  location_t location;
372 
373 	  error ("label %q+D used but not defined", label);
374 	  location = input_location; /* FIXME want (input_filename, (line)0) */
375 	  /* Avoid crashing later.  */
376 	  define_label (location, DECL_NAME (label));
377 	}
378       else
379 	warn_for_unused_label (label);
380     }
381 
382   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 }
384 
385 /* At the end of a function, all labels declared within the function
386    go out of scope.  BLOCK is the top-level block for the
387    function.  */
388 
389 static int
390 pop_labels_1 (void **slot, void *data)
391 {
392   struct named_label_entry *ent = (struct named_label_entry *) *slot;
393   tree block = (tree) data;
394 
395   pop_label (ent->label_decl, NULL_TREE);
396 
397   /* Put the labels into the "variables" of the top-level block,
398      so debugger can see them.  */
399   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400   BLOCK_VARS (block) = ent->label_decl;
401 
402   htab_clear_slot (named_labels, slot);
403 
404   return 1;
405 }
406 
407 static void
408 pop_labels (tree block)
409 {
410   if (named_labels)
411     {
412       htab_traverse (named_labels, pop_labels_1, block);
413       named_labels = NULL;
414     }
415 }
416 
417 /* At the end of a block with local labels, restore the outer definition.  */
418 
419 static void
420 pop_local_label (tree label, tree old_value)
421 {
422   struct named_label_entry dummy;
423   void **slot;
424 
425   pop_label (label, old_value);
426 
427   dummy.label_decl = label;
428   slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429   htab_clear_slot (named_labels, slot);
430 }
431 
432 /* The following two routines are used to interface to Objective-C++.
433    The binding level is purposely treated as an opaque type.  */
434 
435 void *
436 objc_get_current_scope (void)
437 {
438   return current_binding_level;
439 }
440 
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442    variables get marked 'volatile' so as to not be clobbered by
443    _setjmp()/_longjmp() calls.  All variables in the current scope,
444    as well as parent scopes up to (but not including) ENCLOSING_BLK
445    shall be thusly marked.  */
446 
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
449 {
450   cp_binding_level *scope;
451 
452   for (scope = current_binding_level;
453        scope && scope != enclosing_blk;
454        scope = scope->level_chain)
455     {
456       tree decl;
457 
458       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459 	objc_volatilize_decl (decl);
460 
461       /* Do not climb up past the current function.  */
462       if (scope->kind == sk_function_parms)
463 	break;
464     }
465 }
466 
467 /* Update data for defined and undefined labels when leaving a scope.  */
468 
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
471 {
472   struct named_label_entry *ent = (struct named_label_entry *) *slot;
473   cp_binding_level *bl = (cp_binding_level *) data;
474   cp_binding_level *obl = bl->level_chain;
475 
476   if (ent->binding_level == bl)
477     {
478       tree decl;
479 
480       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481 	 TREE_LISTs representing OVERLOADs, so be careful.  */
482       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483 						     ? DECL_CHAIN (decl)
484 						     : TREE_CHAIN (decl)))
485 	if (decl_jump_unsafe (decl))
486 	  VEC_safe_push (tree, gc, ent->bad_decls, decl);
487 
488       ent->binding_level = obl;
489       ent->names_in_scope = obl->names;
490       switch (bl->kind)
491 	{
492 	case sk_try:
493 	  ent->in_try_scope = true;
494 	  break;
495 	case sk_catch:
496 	  ent->in_catch_scope = true;
497 	  break;
498 	case sk_omp:
499 	  ent->in_omp_scope = true;
500 	  break;
501 	default:
502 	  break;
503 	}
504     }
505   else if (ent->uses)
506     {
507       struct named_label_use_entry *use;
508 
509       for (use = ent->uses; use ; use = use->next)
510 	if (use->binding_level == bl)
511 	  {
512 	    use->binding_level = obl;
513 	    use->names_in_scope = obl->names;
514 	    if (bl->kind == sk_omp)
515 	      use->in_omp_scope = true;
516 	  }
517     }
518 
519   return 1;
520 }
521 
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523    when errors were reported, except for -Werror-unused-but-set-*.  */
524 static int unused_but_set_errorcount;
525 
526 /* Exit a binding level.
527    Pop the level off, and restore the state of the identifier-decl mappings
528    that were in effect when this level was entered.
529 
530    If KEEP == 1, this level had explicit declarations, so
531    and create a "block" (a BLOCK node) for the level
532    to record its declarations and subblocks for symbol table output.
533 
534    If FUNCTIONBODY is nonzero, this level is the body of a function,
535    so create a block as if KEEP were set and also clear out all
536    label names.
537 
538    If REVERSE is nonzero, reverse the order of decls before putting
539    them into the BLOCK.  */
540 
541 tree
542 poplevel (int keep, int reverse, int functionbody)
543 {
544   tree link;
545   /* The chain of decls was accumulated in reverse order.
546      Put it into forward order, just for cleanliness.  */
547   tree decls;
548   tree subblocks;
549   tree block;
550   tree decl;
551   int leaving_for_scope;
552   scope_kind kind;
553   unsigned ix;
554   cp_label_binding *label_bind;
555 
556   timevar_start (TV_NAME_LOOKUP);
557  restart:
558 
559   block = NULL_TREE;
560 
561   gcc_assert (current_binding_level->kind != sk_class);
562 
563   if (current_binding_level->kind == sk_cleanup)
564     functionbody = 0;
565   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
566 
567   gcc_assert (!VEC_length(cp_class_binding,
568 			  current_binding_level->class_shadowed));
569 
570   /* We used to use KEEP == 2 to indicate that the new block should go
571      at the beginning of the list of blocks at this binding level,
572      rather than the end.  This hack is no longer used.  */
573   gcc_assert (keep == 0 || keep == 1);
574 
575   if (current_binding_level->keep)
576     keep = 1;
577 
578   /* Any uses of undefined labels, and any defined labels, now operate
579      under constraints of next binding contour.  */
580   if (cfun && !functionbody && named_labels)
581     htab_traverse (named_labels, poplevel_named_label_1,
582 		   current_binding_level);
583 
584   /* Get the decls in the order they were written.
585      Usually current_binding_level->names is in reverse order.
586      But parameter decls were previously put in forward order.  */
587 
588   if (reverse)
589     current_binding_level->names
590       = decls = nreverse (current_binding_level->names);
591   else
592     decls = current_binding_level->names;
593 
594   /* If there were any declarations or structure tags in that level,
595      or if this level is a function body,
596      create a BLOCK to record them for the life of this function.  */
597   block = NULL_TREE;
598   if (keep == 1 || functionbody)
599     block = make_node (BLOCK);
600   if (block != NULL_TREE)
601     {
602       BLOCK_VARS (block) = decls;
603       BLOCK_SUBBLOCKS (block) = subblocks;
604     }
605 
606   /* In each subblock, record that this is its superior.  */
607   if (keep >= 0)
608     for (link = subblocks; link; link = BLOCK_CHAIN (link))
609       BLOCK_SUPERCONTEXT (link) = block;
610 
611   /* We still support the old for-scope rules, whereby the variables
612      in a for-init statement were in scope after the for-statement
613      ended.  We only use the new rules if flag_new_for_scope is
614      nonzero.  */
615   leaving_for_scope
616     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617 
618   /* Before we remove the declarations first check for unused variables.  */
619   if ((warn_unused_variable || warn_unused_but_set_variable)
620       && !processing_template_decl)
621     for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
622       if (TREE_CODE (decl) == VAR_DECL
623 	  && (! TREE_USED (decl) || !DECL_READ_P (decl))
624 	  && ! DECL_IN_SYSTEM_HEADER (decl)
625 	  && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
626 	{
627 	  if (! TREE_USED (decl))
628 	    warning (OPT_Wunused_variable, "unused variable %q+D", decl);
629 	  else if (DECL_CONTEXT (decl) == current_function_decl
630 		   && TREE_TYPE (decl) != error_mark_node
631 		   && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
632 		   && errorcount == unused_but_set_errorcount
633 		   && (!CLASS_TYPE_P (TREE_TYPE (decl))
634 		       || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
635 	    {
636 	      warning (OPT_Wunused_but_set_variable,
637 		       "variable %q+D set but not used", decl);
638 	      unused_but_set_errorcount = errorcount;
639 	    }
640 	}
641 
642   /* Remove declarations for all the DECLs in this level.  */
643   for (link = decls; link; link = TREE_CHAIN (link))
644     {
645       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
646 	  /* It's hard to make this ARM compatibility hack play nicely with
647 	     lambdas, and it really isn't necessary in C++11 mode.  */
648 	  && cxx_dialect < cxx0x
649 	  && DECL_NAME (link))
650 	{
651 	  tree name = DECL_NAME (link);
652 	  cxx_binding *ob;
653 	  tree ns_binding;
654 
655 	  ob = outer_binding (name,
656 			      IDENTIFIER_BINDING (name),
657 			      /*class_p=*/true);
658 	  if (!ob)
659 	    ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
660 	  else
661 	    ns_binding = NULL_TREE;
662 
663 	  if (ob && ob->scope == current_binding_level->level_chain)
664 	    /* We have something like:
665 
666 		 int i;
667 		 for (int i; ;);
668 
669 	       and we are leaving the `for' scope.  There's no reason to
670 	       keep the binding of the inner `i' in this case.  */
671 	    pop_binding (name, link);
672 	  else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
673 		   || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
674 	    /* Here, we have something like:
675 
676 		 typedef int I;
677 
678 		 void f () {
679 		   for (int I; ;);
680 		 }
681 
682 	       We must pop the for-scope binding so we know what's a
683 	       type and what isn't.  */
684 	    pop_binding (name, link);
685 	  else
686 	    {
687 	      /* Mark this VAR_DECL as dead so that we can tell we left it
688 		 there only for backward compatibility.  */
689 	      DECL_DEAD_FOR_LOCAL (link) = 1;
690 
691 	      /* Keep track of what should have happened when we
692 		 popped the binding.  */
693 	      if (ob && ob->value)
694 		{
695 		  SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
696 		  DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
697 		}
698 
699 	      /* Add it to the list of dead variables in the next
700 		 outermost binding to that we can remove these when we
701 		 leave that binding.  */
702 	      VEC_safe_push (tree, gc,
703 			     current_binding_level->level_chain->dead_vars_from_for,
704 			     link);
705 
706 	      /* Although we don't pop the cxx_binding, we do clear
707 		 its SCOPE since the scope is going away now.  */
708 	      IDENTIFIER_BINDING (name)->scope
709 		= current_binding_level->level_chain;
710 	    }
711 	}
712       else
713 	{
714 	  tree name;
715 
716 	  /* Remove the binding.  */
717 	  decl = link;
718 
719 	  if (TREE_CODE (decl) == TREE_LIST)
720 	    decl = TREE_VALUE (decl);
721 	  name = decl;
722 
723 	  if (TREE_CODE (name) == OVERLOAD)
724 	    name = OVL_FUNCTION (name);
725 
726 	  gcc_assert (DECL_P (name));
727 	  pop_binding (DECL_NAME (name), decl);
728 	}
729     }
730 
731   /* Remove declarations for any `for' variables from inner scopes
732      that we kept around.  */
733   FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
734 			    ix, decl)
735     pop_binding (DECL_NAME (decl), decl);
736 
737   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
738   for (link = current_binding_level->type_shadowed;
739        link; link = TREE_CHAIN (link))
740     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741 
742   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
743   FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
744 			    current_binding_level->shadowed_labels,
745 			    ix, label_bind)
746     pop_local_label (label_bind->label, label_bind->prev_value);
747 
748   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
749      list if a `using' declaration put them there.  The debugging
750      back ends won't understand OVERLOAD, so we remove them here.
751      Because the BLOCK_VARS are (temporarily) shared with
752      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
753      popped all the bindings.  */
754   if (block)
755     {
756       tree* d;
757 
758       for (d = &BLOCK_VARS (block); *d; )
759 	{
760 	  if (TREE_CODE (*d) == TREE_LIST)
761 	    *d = TREE_CHAIN (*d);
762 	  else
763 	    d = &DECL_CHAIN (*d);
764 	}
765     }
766 
767   /* If the level being exited is the top level of a function,
768      check over all the labels.  */
769   if (functionbody)
770     {
771       /* Since this is the top level block of a function, the vars are
772 	 the function's parameters.  Don't leave them in the BLOCK
773 	 because they are found in the FUNCTION_DECL instead.  */
774       BLOCK_VARS (block) = 0;
775       pop_labels (block);
776     }
777 
778   kind = current_binding_level->kind;
779   if (kind == sk_cleanup)
780     {
781       tree stmt;
782 
783       /* If this is a temporary binding created for a cleanup, then we'll
784 	 have pushed a statement list level.  Pop that, create a new
785 	 BIND_EXPR for the block, and insert it into the stream.  */
786       stmt = pop_stmt_list (current_binding_level->statement_list);
787       stmt = c_build_bind_expr (input_location, block, stmt);
788       add_stmt (stmt);
789     }
790 
791   leave_scope ();
792   if (functionbody)
793     {
794       /* The current function is being defined, so its DECL_INITIAL
795 	 should be error_mark_node.  */
796       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
797       DECL_INITIAL (current_function_decl) = block;
798     }
799   else if (block)
800     current_binding_level->blocks
801       = block_chainon (current_binding_level->blocks, block);
802 
803   /* If we did not make a block for the level just exited,
804      any blocks made for inner levels
805      (since they cannot be recorded as subblocks in that level)
806      must be carried forward so they will later become subblocks
807      of something else.  */
808   else if (subblocks)
809     current_binding_level->blocks
810       = block_chainon (current_binding_level->blocks, subblocks);
811 
812   /* Each and every BLOCK node created here in `poplevel' is important
813      (e.g. for proper debugging information) so if we created one
814      earlier, mark it as "used".  */
815   if (block)
816     TREE_USED (block) = 1;
817 
818   /* All temporary bindings created for cleanups are popped silently.  */
819   if (kind == sk_cleanup)
820     goto restart;
821 
822   timevar_stop (TV_NAME_LOOKUP);
823   return block;
824 }
825 
826 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
827    itself, calling F for each.  The DATA is passed to F as well.  */
828 
829 static int
830 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
831 {
832   int result = 0;
833   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
834 
835   result |= (*f) (name_space, data);
836 
837   for (; current; current = DECL_CHAIN (current))
838     result |= walk_namespaces_r (current, f, data);
839 
840   return result;
841 }
842 
843 /* Walk all the namespaces, calling F for each.  The DATA is passed to
844    F as well.  */
845 
846 int
847 walk_namespaces (walk_namespaces_fn f, void* data)
848 {
849   return walk_namespaces_r (global_namespace, f, data);
850 }
851 
852 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
853    DATA is non-NULL, this is the last time we will call
854    wrapup_global_declarations for this NAMESPACE.  */
855 
856 int
857 wrapup_globals_for_namespace (tree name_space, void* data)
858 {
859   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
860   VEC(tree,gc) *statics = level->static_decls;
861   tree *vec = VEC_address (tree, statics);
862   int len = VEC_length (tree, statics);
863   int last_time = (data != 0);
864 
865   if (last_time)
866     {
867       check_global_declarations (vec, len);
868       emit_debug_global_declarations (vec, len);
869       return 0;
870     }
871 
872   /* Write out any globals that need to be output.  */
873   return wrapup_global_declarations (vec, len);
874 }
875 
876 
877 /* In C++, you don't have to write `struct S' to refer to `S'; you
878    can just use `S'.  We accomplish this by creating a TYPE_DECL as
879    if the user had written `typedef struct S S'.  Create and return
880    the TYPE_DECL for TYPE.  */
881 
882 tree
883 create_implicit_typedef (tree name, tree type)
884 {
885   tree decl;
886 
887   decl = build_decl (input_location, TYPE_DECL, name, type);
888   DECL_ARTIFICIAL (decl) = 1;
889   /* There are other implicit type declarations, like the one *within*
890      a class that allows you to write `S::S'.  We must distinguish
891      amongst these.  */
892   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
893   TYPE_NAME (type) = decl;
894   TYPE_STUB_DECL (type) = decl;
895 
896   return decl;
897 }
898 
899 /* Remember a local name for name-mangling purposes.  */
900 
901 static void
902 push_local_name (tree decl)
903 {
904   size_t i, nelts;
905   tree t, name;
906 
907   timevar_start (TV_NAME_LOOKUP);
908 
909   name = DECL_NAME (decl);
910 
911   nelts = VEC_length (tree, local_names);
912   for (i = 0; i < nelts; i++)
913     {
914       t = VEC_index (tree, local_names, i);
915       if (DECL_NAME (t) == name)
916 	{
917 	  if (!DECL_LANG_SPECIFIC (decl))
918 	    retrofit_lang_decl (decl);
919 	  DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
920 	  if (DECL_DISCRIMINATOR_SET_P (t))
921 	    DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922 	  else
923 	    DECL_DISCRIMINATOR (decl) = 1;
924 
925 	  VEC_replace (tree, local_names, i, decl);
926 	  timevar_stop (TV_NAME_LOOKUP);
927 	  return;
928 	}
929     }
930 
931   VEC_safe_push (tree, gc, local_names, decl);
932   timevar_stop (TV_NAME_LOOKUP);
933 }
934 
935 /* Subroutine of duplicate_decls: return truthvalue of whether
936    or not types of these decls match.
937 
938    For C++, we must compare the parameter list so that `int' can match
939    `int&' in a parameter position, but `int&' is not confused with
940    `const int&'.  */
941 
942 int
943 decls_match (tree newdecl, tree olddecl)
944 {
945   int types_match;
946 
947   if (newdecl == olddecl)
948     return 1;
949 
950   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951     /* If the two DECLs are not even the same kind of thing, we're not
952        interested in their types.  */
953     return 0;
954 
955   gcc_assert (DECL_P (newdecl));
956 
957   if (TREE_CODE (newdecl) == FUNCTION_DECL)
958     {
959       tree f1 = TREE_TYPE (newdecl);
960       tree f2 = TREE_TYPE (olddecl);
961       tree p1 = TYPE_ARG_TYPES (f1);
962       tree p2 = TYPE_ARG_TYPES (f2);
963 
964       /* Specializations of different templates are different functions
965 	 even if they have the same type.  */
966       tree t1 = (DECL_USE_TEMPLATE (newdecl)
967 		 ? DECL_TI_TEMPLATE (newdecl)
968 		 : NULL_TREE);
969       tree t2 = (DECL_USE_TEMPLATE (olddecl)
970 		 ? DECL_TI_TEMPLATE (olddecl)
971 		 : NULL_TREE);
972       if (t1 != t2)
973 	return 0;
974 
975       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
976 	  && ! (DECL_EXTERN_C_P (newdecl)
977 		&& DECL_EXTERN_C_P (olddecl)))
978 	return 0;
979 
980 #ifdef NO_IMPLICIT_EXTERN_C
981       /* A new declaration doesn't match a built-in one unless it
982 	 is also extern "C".  */
983       if (DECL_IS_BUILTIN (olddecl)
984 	  && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
985 	return 0;
986 #endif
987 
988       if (TREE_CODE (f1) != TREE_CODE (f2))
989 	return 0;
990 
991       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
992 	{
993 	  if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
994 	      && (DECL_BUILT_IN (olddecl)
995 #ifndef NO_IMPLICIT_EXTERN_C
996 		  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
997 		  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998 #endif
999 	      ))
1000 	    {
1001 	      types_match = self_promoting_args_p (p1);
1002 	      if (p1 == void_list_node)
1003 		TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1004 	    }
1005 #ifndef NO_IMPLICIT_EXTERN_C
1006 	  else if (!prototype_p (f1)
1007 		   && (DECL_EXTERN_C_P (olddecl)
1008 		       && DECL_IN_SYSTEM_HEADER (olddecl)
1009 		       && !DECL_CLASS_SCOPE_P (olddecl))
1010 		   && (DECL_EXTERN_C_P (newdecl)
1011 		       && DECL_IN_SYSTEM_HEADER (newdecl)
1012 		       && !DECL_CLASS_SCOPE_P (newdecl)))
1013 	    {
1014 	      types_match = self_promoting_args_p (p2);
1015 	      TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016 	    }
1017 #endif
1018 	  else
1019 	    types_match =
1020 	      compparms (p1, p2)
1021 	      && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1022 	          || comp_type_attributes (TREE_TYPE (newdecl),
1023 					   TREE_TYPE (olddecl)) != 0);
1024 	}
1025       else
1026 	types_match = 0;
1027     }
1028   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1029     {
1030       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1031 	  != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1032 	return 0;
1033 
1034       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1035 				DECL_TEMPLATE_PARMS (olddecl)))
1036 	return 0;
1037 
1038       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1039 	types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1040 				   TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1041       else
1042 	types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1043 				   DECL_TEMPLATE_RESULT (newdecl));
1044     }
1045   else
1046     {
1047       /* Need to check scope for variable declaration (VAR_DECL).
1048 	 For typedef (TYPE_DECL), scope is ignored.  */
1049       if (TREE_CODE (newdecl) == VAR_DECL
1050 	  && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1051 	  /* [dcl.link]
1052 	     Two declarations for an object with C language linkage
1053 	     with the same name (ignoring the namespace that qualify
1054 	     it) that appear in different namespace scopes refer to
1055 	     the same object.  */
1056 	  && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1057 	return 0;
1058 
1059       if (TREE_TYPE (newdecl) == error_mark_node)
1060 	types_match = TREE_TYPE (olddecl) == error_mark_node;
1061       else if (TREE_TYPE (olddecl) == NULL_TREE)
1062 	types_match = TREE_TYPE (newdecl) == NULL_TREE;
1063       else if (TREE_TYPE (newdecl) == NULL_TREE)
1064 	types_match = 0;
1065       else
1066 	types_match = comptypes (TREE_TYPE (newdecl),
1067 				 TREE_TYPE (olddecl),
1068 				 COMPARE_REDECLARATION);
1069     }
1070 
1071   return types_match;
1072 }
1073 
1074 /* If NEWDECL is `static' and an `extern' was seen previously,
1075    warn about it.  OLDDECL is the previous declaration.
1076 
1077    Note that this does not apply to the C++ case of declaring
1078    a variable `extern const' and then later `const'.
1079 
1080    Don't complain about built-in functions, since they are beyond
1081    the user's control.  */
1082 
1083 void
1084 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1085 {
1086   if (TREE_CODE (newdecl) == TYPE_DECL
1087       || TREE_CODE (newdecl) == TEMPLATE_DECL
1088       || TREE_CODE (newdecl) == CONST_DECL
1089       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1090     return;
1091 
1092   /* Don't get confused by static member functions; that's a different
1093      use of `static'.  */
1094   if (TREE_CODE (newdecl) == FUNCTION_DECL
1095       && DECL_STATIC_FUNCTION_P (newdecl))
1096     return;
1097 
1098   /* If the old declaration was `static', or the new one isn't, then
1099      everything is OK.  */
1100   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1101     return;
1102 
1103   /* It's OK to declare a builtin function as `static'.  */
1104   if (TREE_CODE (olddecl) == FUNCTION_DECL
1105       && DECL_ARTIFICIAL (olddecl))
1106     return;
1107 
1108   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1109   permerror (input_location, "previous declaration of %q+D", olddecl);
1110 }
1111 
1112 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1113    function templates.  If their exception specifications do not
1114    match, issue a diagnostic.  */
1115 
1116 static void
1117 check_redeclaration_exception_specification (tree new_decl,
1118 					     tree old_decl)
1119 {
1120   tree new_type;
1121   tree old_type;
1122   tree new_exceptions;
1123   tree old_exceptions;
1124 
1125   new_type = TREE_TYPE (new_decl);
1126   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1127   old_type = TREE_TYPE (old_decl);
1128   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1129 
1130   /* [except.spec]
1131 
1132      If any declaration of a function has an exception-specification,
1133      all declarations, including the definition and an explicit
1134      specialization, of that function shall have an
1135      exception-specification with the same set of type-ids.  */
1136   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1137       && ! DECL_IS_BUILTIN (old_decl)
1138       && flag_exceptions
1139       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1140     {
1141       error ("declaration of %qF has a different exception specifier",
1142 	     new_decl);
1143       error ("from previous declaration %q+F", old_decl);
1144     }
1145 }
1146 
1147 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1148    Otherwise issue diagnostics.  */
1149 
1150 static bool
1151 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1152 {
1153   old_decl = STRIP_TEMPLATE (old_decl);
1154   new_decl = STRIP_TEMPLATE (new_decl);
1155   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1156       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1157     return true;
1158   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1159       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1160     return true;
1161   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1162     {
1163       /* Hide a built-in declaration.  */
1164       DECL_DECLARED_CONSTEXPR_P (old_decl)
1165 	= DECL_DECLARED_CONSTEXPR_P (new_decl);
1166       return true;
1167     }
1168   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1169   error ("from previous declaration %q+D", old_decl);
1170   return false;
1171 }
1172 
1173 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)			\
1174 			  && lookup_attribute ("gnu_inline",		\
1175 					       DECL_ATTRIBUTES (fn)))
1176 
1177 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1178    If the redeclaration is invalid, a diagnostic is issued, and the
1179    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1180 
1181    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1182    returned.
1183 
1184    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1185 
1186 tree
1187 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1188 {
1189   unsigned olddecl_uid = DECL_UID (olddecl);
1190   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1191   int new_defines_function = 0;
1192   tree new_template_info;
1193 
1194   if (newdecl == olddecl)
1195     return olddecl;
1196 
1197   types_match = decls_match (newdecl, olddecl);
1198 
1199   /* If either the type of the new decl or the type of the old decl is an
1200      error_mark_node, then that implies that we have already issued an
1201      error (earlier) for some bogus type specification, and in that case,
1202      it is rather pointless to harass the user with yet more error message
1203      about the same declaration, so just pretend the types match here.  */
1204   if (TREE_TYPE (newdecl) == error_mark_node
1205       || TREE_TYPE (olddecl) == error_mark_node)
1206     return error_mark_node;
1207 
1208   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1209       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1210     {
1211       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1212 	  && TREE_CODE (olddecl) != TEMPLATE_DECL
1213 	  && check_raw_literal_operator (olddecl))
1214 	error ("literal operator template %q+D conflicts with"
1215 	       " raw literal operator %qD", newdecl, olddecl);
1216       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1217 	       && TREE_CODE (olddecl) == TEMPLATE_DECL
1218 	       && check_raw_literal_operator (newdecl))
1219 	error ("raw literal operator %q+D conflicts with"
1220 	       " literal operator template %qD", newdecl, olddecl);
1221     }
1222 
1223   if (DECL_P (olddecl)
1224       && TREE_CODE (newdecl) == FUNCTION_DECL
1225       && TREE_CODE (olddecl) == FUNCTION_DECL
1226       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1227     {
1228       if (DECL_DECLARED_INLINE_P (newdecl)
1229 	  && DECL_UNINLINABLE (newdecl)
1230 	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231 	/* Already warned elsewhere.  */;
1232       else if (DECL_DECLARED_INLINE_P (olddecl)
1233 	       && DECL_UNINLINABLE (olddecl)
1234 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1235 	/* Already warned.  */;
1236       else if (DECL_DECLARED_INLINE_P (newdecl)
1237 	       && DECL_UNINLINABLE (olddecl)
1238 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1239 	{
1240 	  warning (OPT_Wattributes, "function %q+D redeclared as inline",
1241 		   newdecl);
1242 	  warning (OPT_Wattributes, "previous declaration of %q+D "
1243 		   "with attribute noinline", olddecl);
1244 	}
1245       else if (DECL_DECLARED_INLINE_P (olddecl)
1246 	       && DECL_UNINLINABLE (newdecl)
1247 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1248 	{
1249 	  warning (OPT_Wattributes, "function %q+D redeclared with "
1250 		   "attribute noinline", newdecl);
1251 	  warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1252 		   olddecl);
1253 	}
1254     }
1255 
1256   /* Check for redeclaration and other discrepancies.  */
1257   if (TREE_CODE (olddecl) == FUNCTION_DECL
1258       && DECL_ARTIFICIAL (olddecl))
1259     {
1260       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1261       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1262 	{
1263 	  /* Avoid warnings redeclaring built-ins which have not been
1264 	     explicitly declared.  */
1265 	  if (DECL_ANTICIPATED (olddecl))
1266 	    return NULL_TREE;
1267 
1268 	  /* If you declare a built-in or predefined function name as static,
1269 	     the old definition is overridden, but optionally warn this was a
1270 	     bad choice of name.  */
1271 	  if (! TREE_PUBLIC (newdecl))
1272 	    {
1273 	      warning (OPT_Wshadow,
1274                        DECL_BUILT_IN (olddecl)
1275                        ? G_("shadowing built-in function %q#D")
1276                        : G_("shadowing library function %q#D"), olddecl);
1277 	      /* Discard the old built-in function.  */
1278 	      return NULL_TREE;
1279 	    }
1280 	  /* If the built-in is not ansi, then programs can override
1281 	     it even globally without an error.  */
1282 	  else if (! DECL_BUILT_IN (olddecl))
1283 	    warning (0, "library function %q#D redeclared as non-function %q#D",
1284 		     olddecl, newdecl);
1285 	  else
1286 	    {
1287 	      error ("declaration of %q#D", newdecl);
1288 	      error ("conflicts with built-in declaration %q#D",
1289 		     olddecl);
1290 	    }
1291 	  return NULL_TREE;
1292 	}
1293       else if (!types_match)
1294 	{
1295 	  /* Avoid warnings redeclaring built-ins which have not been
1296 	     explicitly declared.  */
1297 	  if (DECL_ANTICIPATED (olddecl))
1298 	    {
1299 	      /* Deal with fileptr_type_node.  FILE type is not known
1300 		 at the time we create the builtins.  */
1301 	      tree t1, t2;
1302 
1303 	      for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1304 		   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1305 		   t1 || t2;
1306 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1307 		if (!t1 || !t2)
1308 		  break;
1309 		else if (TREE_VALUE (t2) == fileptr_type_node)
1310 		  {
1311 		    tree t = TREE_VALUE (t1);
1312 
1313 		    if (TREE_CODE (t) == POINTER_TYPE
1314 			&& TYPE_NAME (TREE_TYPE (t))
1315 			&& DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1316 			   == get_identifier ("FILE")
1317 			&& compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1318 		      {
1319 			tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1320 
1321 			TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1322 			  = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1323 			types_match = decls_match (newdecl, olddecl);
1324 			if (types_match)
1325 			  return duplicate_decls (newdecl, olddecl,
1326 						  newdecl_is_friend);
1327 			TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1328 		      }
1329 		  }
1330 		else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1331 		  break;
1332 	    }
1333 	  else if ((DECL_EXTERN_C_P (newdecl)
1334 		    && DECL_EXTERN_C_P (olddecl))
1335 		   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336 				 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1337 	    {
1338 	      /* A near match; override the builtin.  */
1339 
1340 	      if (TREE_PUBLIC (newdecl))
1341 		{
1342 		  warning (0, "new declaration %q#D", newdecl);
1343 		  warning (0, "ambiguates built-in declaration %q#D",
1344 			   olddecl);
1345 		}
1346 	      else
1347 		warning (OPT_Wshadow,
1348                          DECL_BUILT_IN (olddecl)
1349                          ? G_("shadowing built-in function %q#D")
1350                          : G_("shadowing library function %q#D"), olddecl);
1351 	    }
1352 	  else
1353 	    /* Discard the old built-in function.  */
1354 	    return NULL_TREE;
1355 
1356 	  /* Replace the old RTL to avoid problems with inlining.  */
1357 	  COPY_DECL_RTL (newdecl, olddecl);
1358 	}
1359       /* Even if the types match, prefer the new declarations type for
1360 	 built-ins which have not been explicitly declared, for
1361 	 exception lists, etc...  */
1362       else if (DECL_IS_BUILTIN (olddecl))
1363 	{
1364 	  tree type = TREE_TYPE (newdecl);
1365 	  tree attribs = (*targetm.merge_type_attributes)
1366 	    (TREE_TYPE (olddecl), type);
1367 
1368 	  type = cp_build_type_attribute_variant (type, attribs);
1369 	  TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1370 	}
1371 
1372       /* If a function is explicitly declared "throw ()", propagate that to
1373 	 the corresponding builtin.  */
1374       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1375 	  && DECL_ANTICIPATED (olddecl)
1376 	  && TREE_NOTHROW (newdecl)
1377 	  && !TREE_NOTHROW (olddecl))
1378 	{
1379 	  enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1380 	  tree tmpdecl = builtin_decl_explicit (fncode);
1381 	  if (tmpdecl && tmpdecl != olddecl && types_match)
1382 	    TREE_NOTHROW (tmpdecl)  = 1;
1383 	}
1384 
1385       /* Whether or not the builtin can throw exceptions has no
1386 	 bearing on this declarator.  */
1387       TREE_NOTHROW (olddecl) = 0;
1388 
1389       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1390 	{
1391 	  /* If a builtin function is redeclared as `static', merge
1392 	     the declarations, but make the original one static.  */
1393 	  DECL_THIS_STATIC (olddecl) = 1;
1394 	  TREE_PUBLIC (olddecl) = 0;
1395 
1396 	  /* Make the old declaration consistent with the new one so
1397 	     that all remnants of the builtin-ness of this function
1398 	     will be banished.  */
1399 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1400 	  COPY_DECL_RTL (newdecl, olddecl);
1401 	}
1402     }
1403   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1404     {
1405       /* C++ Standard, 3.3, clause 4:
1406 	 "[Note: a namespace name or a class template name must be unique
1407 	 in its declarative region (7.3.2, clause 14). ]"  */
1408       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1409 	  && TREE_CODE (newdecl) != NAMESPACE_DECL
1410 	  && (TREE_CODE (olddecl) != TEMPLATE_DECL
1411 	      || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1412 	  && (TREE_CODE (newdecl) != TEMPLATE_DECL
1413 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1414 	{
1415 	  if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1416 	       && TREE_CODE (newdecl) != TYPE_DECL)
1417 	      || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1418 		  && TREE_CODE (olddecl) != TYPE_DECL))
1419 	    {
1420 	      /* We do nothing special here, because C++ does such nasty
1421 		 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1422 		 get shadowed, and know that if we need to find a TYPE_DECL
1423 		 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1424 		 slot of the identifier.  */
1425 	      return NULL_TREE;
1426 	    }
1427 
1428 	    if ((TREE_CODE (newdecl) == FUNCTION_DECL
1429 		 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1430 		|| (TREE_CODE (olddecl) == FUNCTION_DECL
1431 		    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1432 	      return NULL_TREE;
1433 	}
1434 
1435       error ("%q#D redeclared as different kind of symbol", newdecl);
1436       if (TREE_CODE (olddecl) == TREE_LIST)
1437 	olddecl = TREE_VALUE (olddecl);
1438       error ("previous declaration of %q+#D", olddecl);
1439 
1440       return error_mark_node;
1441     }
1442   else if (!types_match)
1443     {
1444       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1445 	/* These are certainly not duplicate declarations; they're
1446 	   from different scopes.  */
1447 	return NULL_TREE;
1448 
1449       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1450 	{
1451 	  /* The name of a class template may not be declared to refer to
1452 	     any other template, class, function, object, namespace, value,
1453 	     or type in the same scope.  */
1454 	  if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1455 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1456 	    {
1457 	      error ("declaration of template %q#D", newdecl);
1458 	      error ("conflicts with previous declaration %q+#D", olddecl);
1459 	    }
1460 	  else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1461 		   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1462 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1463 				 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1464 		   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1465 					   DECL_TEMPLATE_PARMS (olddecl))
1466 		   /* Template functions can be disambiguated by
1467 		      return type.  */
1468 		   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1469 				   TREE_TYPE (TREE_TYPE (olddecl))))
1470 	    {
1471 	      error ("new declaration %q#D", newdecl);
1472 	      error ("ambiguates old declaration %q+#D", olddecl);
1473 	    }
1474 	  return NULL_TREE;
1475 	}
1476       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1477 	{
1478 	  if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1479 	    {
1480 	      error ("declaration of C function %q#D conflicts with",
1481 		     newdecl);
1482 	      error ("previous declaration %q+#D here", olddecl);
1483 	      return NULL_TREE;
1484 	    }
1485 	  else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1486 			      TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1487 	    {
1488 	      error ("new declaration %q#D", newdecl);
1489 	      error ("ambiguates old declaration %q+#D", olddecl);
1490               return error_mark_node;
1491 	    }
1492 	  else
1493 	    return NULL_TREE;
1494 	}
1495       else
1496 	{
1497 	  error ("conflicting declaration %q#D", newdecl);
1498 	  error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1499 	  return error_mark_node;
1500 	}
1501     }
1502   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1503 	    && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1504 		 && (!DECL_TEMPLATE_INFO (newdecl)
1505 		     || (DECL_TI_TEMPLATE (newdecl)
1506 			 != DECL_TI_TEMPLATE (olddecl))))
1507 		|| (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1508 		    && (!DECL_TEMPLATE_INFO (olddecl)
1509 			|| (DECL_TI_TEMPLATE (olddecl)
1510 			    != DECL_TI_TEMPLATE (newdecl))))))
1511     /* It's OK to have a template specialization and a non-template
1512        with the same type, or to have specializations of two
1513        different templates with the same type.  Note that if one is a
1514        specialization, and the other is an instantiation of the same
1515        template, that we do not exit at this point.  That situation
1516        can occur if we instantiate a template class, and then
1517        specialize one of its methods.  This situation is valid, but
1518        the declarations must be merged in the usual way.  */
1519     return NULL_TREE;
1520   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1521 	   && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1522 		&& !DECL_USE_TEMPLATE (newdecl))
1523 	       || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1524 		   && !DECL_USE_TEMPLATE (olddecl))))
1525     /* One of the declarations is a template instantiation, and the
1526        other is not a template at all.  That's OK.  */
1527     return NULL_TREE;
1528   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1529     {
1530       /* In [namespace.alias] we have:
1531 
1532 	   In a declarative region, a namespace-alias-definition can be
1533 	   used to redefine a namespace-alias declared in that declarative
1534 	   region to refer only to the namespace to which it already
1535 	   refers.
1536 
1537 	 Therefore, if we encounter a second alias directive for the same
1538 	 alias, we can just ignore the second directive.  */
1539       if (DECL_NAMESPACE_ALIAS (newdecl)
1540 	  && (DECL_NAMESPACE_ALIAS (newdecl)
1541 	      == DECL_NAMESPACE_ALIAS (olddecl)))
1542 	return olddecl;
1543       /* [namespace.alias]
1544 
1545 	 A namespace-name or namespace-alias shall not be declared as
1546 	 the name of any other entity in the same declarative region.
1547 	 A namespace-name defined at global scope shall not be
1548 	 declared as the name of any other entity in any global scope
1549 	 of the program.  */
1550       error ("declaration of namespace %qD conflicts with", newdecl);
1551       error ("previous declaration of namespace %q+D here", olddecl);
1552       return error_mark_node;
1553     }
1554   else
1555     {
1556       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1557       if (errmsg)
1558 	{
1559 	  error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1560 	  if (DECL_NAME (olddecl) != NULL_TREE)
1561 	    error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1562 		   ? G_("%q+#D previously defined here")
1563 		   : G_("%q+#D previously declared here"), olddecl);
1564 	  return error_mark_node;
1565 	}
1566       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1567 	       && DECL_INITIAL (olddecl) != NULL_TREE
1568 	       && !prototype_p (TREE_TYPE (olddecl))
1569 	       && prototype_p (TREE_TYPE (newdecl)))
1570 	{
1571 	  /* Prototype decl follows defn w/o prototype.  */
1572 	  warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1573 	  warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1574 		      "follows non-prototype definition here");
1575 	}
1576       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1577 		|| TREE_CODE (olddecl) == VAR_DECL)
1578 	       && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1579 	{
1580 	  /* [dcl.link]
1581 	     If two declarations of the same function or object
1582 	     specify different linkage-specifications ..., the program
1583 	     is ill-formed.... Except for functions with C++ linkage,
1584 	     a function declaration without a linkage specification
1585 	     shall not precede the first linkage specification for
1586 	     that function.  A function can be declared without a
1587 	     linkage specification after an explicit linkage
1588 	     specification has been seen; the linkage explicitly
1589 	     specified in the earlier declaration is not affected by
1590 	     such a function declaration.
1591 
1592 	     DR 563 raises the question why the restrictions on
1593 	     functions should not also apply to objects.  Older
1594 	     versions of G++ silently ignore the linkage-specification
1595 	     for this example:
1596 
1597 	       namespace N {
1598                  extern int i;
1599    	         extern "C" int i;
1600                }
1601 
1602              which is clearly wrong.  Therefore, we now treat objects
1603 	     like functions.  */
1604 	  if (current_lang_depth () == 0)
1605 	    {
1606 	      /* There is no explicit linkage-specification, so we use
1607 		 the linkage from the previous declaration.  */
1608 	      if (!DECL_LANG_SPECIFIC (newdecl))
1609 		retrofit_lang_decl (newdecl);
1610 	      SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1611 	    }
1612 	  else
1613 	    {
1614 	      error ("previous declaration of %q+#D with %qL linkage",
1615 		     olddecl, DECL_LANGUAGE (olddecl));
1616 	      error ("conflicts with new declaration with %qL linkage",
1617 		     DECL_LANGUAGE (newdecl));
1618 	    }
1619 	}
1620 
1621       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1622 	;
1623       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1624 	{
1625 	  tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1626 	  tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1627 	  int i = 1;
1628 
1629 	  if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1630 	    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1631 
1632 	  for (; t1 && t1 != void_list_node;
1633 	       t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1634 	    if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1635 	      {
1636 		if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1637 					   TREE_PURPOSE (t2)))
1638 		  {
1639 		    permerror (input_location, "default argument given for parameter %d of %q#D",
1640 			       i, newdecl);
1641 		    permerror (input_location, "after previous specification in %q+#D", olddecl);
1642 		  }
1643 		else
1644 		  {
1645 		    error ("default argument given for parameter %d of %q#D",
1646 			   i, newdecl);
1647 		    error ("after previous specification in %q+#D",
1648 				 olddecl);
1649 		  }
1650 	      }
1651 	}
1652     }
1653 
1654   /* Do not merge an implicit typedef with an explicit one.  In:
1655 
1656        class A;
1657        ...
1658        typedef class A A __attribute__ ((foo));
1659 
1660      the attribute should apply only to the typedef.  */
1661   if (TREE_CODE (olddecl) == TYPE_DECL
1662       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1663 	  || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1664     return NULL_TREE;
1665 
1666   /* If new decl is `static' and an `extern' was seen previously,
1667      warn about it.  */
1668   warn_extern_redeclared_static (newdecl, olddecl);
1669 
1670   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1671     return error_mark_node;
1672 
1673   /* We have committed to returning 1 at this point.  */
1674   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1675     {
1676       /* Now that functions must hold information normally held
1677 	 by field decls, there is extra work to do so that
1678 	 declaration information does not get destroyed during
1679 	 definition.  */
1680       if (DECL_VINDEX (olddecl))
1681 	DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1682       if (DECL_CONTEXT (olddecl))
1683 	DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1684       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1685       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1686       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1687       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1688       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1689       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1690       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1691 	SET_OVERLOADED_OPERATOR_CODE
1692 	  (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1693       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1694 
1695       /* Optionally warn about more than one declaration for the same
1696 	 name, but don't warn about a function declaration followed by a
1697 	 definition.  */
1698       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1699 	  && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1700 	  /* Don't warn about extern decl followed by definition.  */
1701 	  && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1702 	  /* Don't warn about friends, let add_friend take care of it.  */
1703 	  && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1704 	  /* Don't warn about declaration followed by specialization.  */
1705 	  && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1706 	      || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1707 	{
1708 	  warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1709 	  warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1710 	}
1711 
1712       if (DECL_DELETED_FN (newdecl))
1713 	{
1714 	  error ("deleted definition of %qD", newdecl);
1715 	  error ("after previous declaration %q+D", olddecl);
1716 	}
1717       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1718     }
1719 
1720   /* Deal with C++: must preserve virtual function table size.  */
1721   if (TREE_CODE (olddecl) == TYPE_DECL)
1722     {
1723       tree newtype = TREE_TYPE (newdecl);
1724       tree oldtype = TREE_TYPE (olddecl);
1725 
1726       if (newtype != error_mark_node && oldtype != error_mark_node
1727 	  && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1728 	CLASSTYPE_FRIEND_CLASSES (newtype)
1729 	  = CLASSTYPE_FRIEND_CLASSES (oldtype);
1730 
1731       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1732     }
1733 
1734   /* Copy all the DECL_... slots specified in the new decl
1735      except for any that we copy here from the old type.  */
1736   DECL_ATTRIBUTES (newdecl)
1737     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1738 
1739   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1740     {
1741       tree old_result;
1742       tree new_result;
1743       old_result = DECL_TEMPLATE_RESULT (olddecl);
1744       new_result = DECL_TEMPLATE_RESULT (newdecl);
1745       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1746       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1747 	= chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1748 		   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1749 
1750       DECL_ATTRIBUTES (old_result)
1751 	= (*targetm.merge_decl_attributes) (old_result, new_result);
1752 
1753       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1754 	{
1755 	  if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1756 	      && DECL_INITIAL (new_result))
1757 	    {
1758 	      if (DECL_INITIAL (old_result))
1759 		DECL_UNINLINABLE (old_result) = 1;
1760 	      else
1761 		DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1762 	      DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1763 	      DECL_NOT_REALLY_EXTERN (old_result)
1764 		= DECL_NOT_REALLY_EXTERN (new_result);
1765 	      DECL_INTERFACE_KNOWN (old_result)
1766 		= DECL_INTERFACE_KNOWN (new_result);
1767 	      DECL_DECLARED_INLINE_P (old_result)
1768 		= DECL_DECLARED_INLINE_P (new_result);
1769 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1770 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1771 
1772 	    }
1773 	  else
1774 	    {
1775 	      DECL_DECLARED_INLINE_P (old_result)
1776 		|= DECL_DECLARED_INLINE_P (new_result);
1777 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1778 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1779 	      check_redeclaration_exception_specification (newdecl, olddecl);
1780 	    }
1781 	}
1782 
1783       /* If the new declaration is a definition, update the file and
1784 	 line information on the declaration, and also make
1785 	 the old declaration the same definition.  */
1786       if (DECL_INITIAL (new_result) != NULL_TREE)
1787 	{
1788 	  DECL_SOURCE_LOCATION (olddecl)
1789 	    = DECL_SOURCE_LOCATION (old_result)
1790 	    = DECL_SOURCE_LOCATION (newdecl);
1791 	  DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1792 	  if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1793 	    {
1794 	      tree parm;
1795 	      DECL_ARGUMENTS (old_result)
1796 		= DECL_ARGUMENTS (new_result);
1797 	      for (parm = DECL_ARGUMENTS (old_result); parm;
1798 		   parm = DECL_CHAIN (parm))
1799 		DECL_CONTEXT (parm) = old_result;
1800 	    }
1801 	}
1802 
1803       return olddecl;
1804     }
1805 
1806   if (types_match)
1807     {
1808       /* Automatically handles default parameters.  */
1809       tree oldtype = TREE_TYPE (olddecl);
1810       tree newtype;
1811 
1812       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 	maybe_instantiate_noexcept (olddecl);
1814 
1815       /* Merge the data types specified in the two decls.  */
1816       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1817 
1818       /* For typedefs use the old type, as the new type's DECL_NAME points
1819 	 at newdecl, which will be ggc_freed.  */
1820       if (TREE_CODE (newdecl) == TYPE_DECL)
1821 	newtype = oldtype;
1822 
1823       if (TREE_CODE (newdecl) == VAR_DECL)
1824 	{
1825 	  DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1826 	  DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1827 	  DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1828 	    |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1829 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1830 	    |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1831 
1832 	  /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1833 	  if (DECL_LANG_SPECIFIC (olddecl)
1834 	      && CP_DECL_THREADPRIVATE_P (olddecl))
1835 	    {
1836 	      /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1837 	      if (!DECL_LANG_SPECIFIC (newdecl))
1838 		retrofit_lang_decl (newdecl);
1839 
1840 	      DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1841 	      CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1842 	    }
1843 	}
1844 
1845       /* Do this after calling `merge_types' so that default
1846 	 parameters don't confuse us.  */
1847       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1848 	check_redeclaration_exception_specification (newdecl, olddecl);
1849       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1850 
1851       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852 	check_default_args (newdecl);
1853 
1854       /* Lay the type out, unless already done.  */
1855       if (! same_type_p (newtype, oldtype)
1856 	  && TREE_TYPE (newdecl) != error_mark_node
1857 	  && !(processing_template_decl && uses_template_parms (newdecl)))
1858 	layout_type (TREE_TYPE (newdecl));
1859 
1860       if ((TREE_CODE (newdecl) == VAR_DECL
1861 	   || TREE_CODE (newdecl) == PARM_DECL
1862 	   || TREE_CODE (newdecl) == RESULT_DECL
1863 	   || TREE_CODE (newdecl) == FIELD_DECL
1864 	   || TREE_CODE (newdecl) == TYPE_DECL)
1865 	  && !(processing_template_decl && uses_template_parms (newdecl)))
1866 	layout_decl (newdecl, 0);
1867 
1868       /* Merge the type qualifiers.  */
1869       if (TREE_READONLY (newdecl))
1870 	TREE_READONLY (olddecl) = 1;
1871       if (TREE_THIS_VOLATILE (newdecl))
1872 	TREE_THIS_VOLATILE (olddecl) = 1;
1873       if (TREE_NOTHROW (newdecl))
1874 	TREE_NOTHROW (olddecl) = 1;
1875 
1876       /* Merge deprecatedness.  */
1877       if (TREE_DEPRECATED (newdecl))
1878 	TREE_DEPRECATED (olddecl) = 1;
1879 
1880       /* Preserve function specific target and optimization options */
1881       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1882 	{
1883 	  if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1884 	      && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1885 	    DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1886 	      = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1887 
1888 	  if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1889 	      && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1890 	    DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1891 	      = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1892 	}
1893 
1894       /* Merge the initialization information.  */
1895       if (DECL_INITIAL (newdecl) == NULL_TREE
1896 	  && DECL_INITIAL (olddecl) != NULL_TREE)
1897 	{
1898 	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1899 	  DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1900 	  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1901 	    {
1902 	      DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1903 	      DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1904 	    }
1905 	}
1906 
1907       /* Merge the section attribute.
1908 	 We want to issue an error if the sections conflict but that must be
1909 	 done later in decl_attributes since we are called before attributes
1910 	 are assigned.  */
1911       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1912 	DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1913 
1914       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1915 	{
1916 	  DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1917 	    |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1918 	  DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1919 	  TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1920 	  TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1921 	  DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1922 	  DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1923 	  DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1924 	  TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1925 	  DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1926 	    |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1927 	  /* Keep the old RTL.  */
1928 	  COPY_DECL_RTL (olddecl, newdecl);
1929 	}
1930       else if (TREE_CODE (newdecl) == VAR_DECL
1931 	       && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1932 	{
1933 	  /* Keep the old RTL.  We cannot keep the old RTL if the old
1934 	     declaration was for an incomplete object and the new
1935 	     declaration is not since many attributes of the RTL will
1936 	     change.  */
1937 	  COPY_DECL_RTL (olddecl, newdecl);
1938 	}
1939     }
1940   /* If cannot merge, then use the new type and qualifiers,
1941      and don't preserve the old rtl.  */
1942   else
1943     {
1944       /* Clean out any memory we had of the old declaration.  */
1945       tree oldstatic = value_member (olddecl, static_aggregates);
1946       if (oldstatic)
1947 	TREE_VALUE (oldstatic) = error_mark_node;
1948 
1949       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1950       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1951       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1952       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1953     }
1954 
1955   /* Merge the storage class information.  */
1956   merge_weak (newdecl, olddecl);
1957 
1958   if (DECL_ONE_ONLY (olddecl))
1959     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1960 
1961   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1962   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1963   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1964   if (! DECL_EXTERNAL (olddecl))
1965     DECL_EXTERNAL (newdecl) = 0;
1966 
1967   new_template_info = NULL_TREE;
1968   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1969     {
1970       bool new_redefines_gnu_inline = false;
1971 
1972       if (new_defines_function
1973 	  && ((DECL_INTERFACE_KNOWN (olddecl)
1974 	       && TREE_CODE (olddecl) == FUNCTION_DECL)
1975 	      || (TREE_CODE (olddecl) == TEMPLATE_DECL
1976 		  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1977 		      == FUNCTION_DECL))))
1978 	{
1979 	  tree fn = olddecl;
1980 
1981 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
1982 	    fn = DECL_TEMPLATE_RESULT (olddecl);
1983 
1984 	  new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1985 	}
1986 
1987       if (!new_redefines_gnu_inline)
1988 	{
1989 	  DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1990 	  DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1991 	  DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1992 	}
1993       DECL_TEMPLATE_INSTANTIATED (newdecl)
1994 	|= DECL_TEMPLATE_INSTANTIATED (olddecl);
1995       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1996 
1997       /* If the OLDDECL is an instantiation and/or specialization,
1998 	 then the NEWDECL must be too.  But, it may not yet be marked
1999 	 as such if the caller has created NEWDECL, but has not yet
2000 	 figured out that it is a redeclaration.  */
2001       if (!DECL_USE_TEMPLATE (newdecl))
2002 	DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2003 
2004       /* Don't really know how much of the language-specific
2005 	 values we should copy from old to new.  */
2006       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2007       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2008       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2009 	|= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2010 
2011       if (LANG_DECL_HAS_MIN (newdecl))
2012 	{
2013 	  DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2014 	    DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2015 	  if (DECL_TEMPLATE_INFO (newdecl))
2016 	    new_template_info = DECL_TEMPLATE_INFO (newdecl);
2017 	  DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2018 	}
2019       /* Only functions have these fields.  */
2020       if (TREE_CODE (newdecl) == FUNCTION_DECL
2021 	  || DECL_FUNCTION_TEMPLATE_P (newdecl))
2022 	{
2023 	  DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2024 	  olddecl_friend = DECL_FRIEND_P (olddecl);
2025 	  hidden_friend = (DECL_ANTICIPATED (olddecl)
2026 			   && DECL_HIDDEN_FRIEND_P (olddecl)
2027 			   && newdecl_is_friend);
2028 	  DECL_BEFRIENDING_CLASSES (newdecl)
2029 	    = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2030 		       DECL_BEFRIENDING_CLASSES (olddecl));
2031 	  /* DECL_THUNKS is only valid for virtual functions,
2032 	     otherwise it is a DECL_FRIEND_CONTEXT.  */
2033 	  if (DECL_VIRTUAL_P (newdecl))
2034 	    DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2035 	}
2036       /* Only variables have this field.  */
2037       else if (TREE_CODE (newdecl) == VAR_DECL
2038 	       && VAR_HAD_UNKNOWN_BOUND (olddecl))
2039 	SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2040     }
2041 
2042   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2043     {
2044       tree parm;
2045 
2046       /* Merge parameter attributes. */
2047       tree oldarg, newarg;
2048       for (oldarg = DECL_ARGUMENTS(olddecl),
2049                newarg = DECL_ARGUMENTS(newdecl);
2050            oldarg && newarg;
2051            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2052           DECL_ATTRIBUTES (newarg)
2053               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2054           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2055       }
2056 
2057       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2058 	  && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2059 	{
2060 	  /* If newdecl is not a specialization, then it is not a
2061 	     template-related function at all.  And that means that we
2062 	     should have exited above, returning 0.  */
2063 	  gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2064 
2065 	  if (DECL_ODR_USED (olddecl))
2066 	    /* From [temp.expl.spec]:
2067 
2068 	       If a template, a member template or the member of a class
2069 	       template is explicitly specialized then that
2070 	       specialization shall be declared before the first use of
2071 	       that specialization that would cause an implicit
2072 	       instantiation to take place, in every translation unit in
2073 	       which such a use occurs.  */
2074 	    error ("explicit specialization of %qD after first use",
2075 		      olddecl);
2076 
2077 	  SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2078 
2079 	  /* Don't propagate visibility from the template to the
2080 	     specialization here.  We'll do that in determine_visibility if
2081 	     appropriate.  */
2082 	  DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2083 
2084 	  /* [temp.expl.spec/14] We don't inline explicit specialization
2085 	     just because the primary template says so.  */
2086 
2087 	  /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2088 	     the always_inline attribute.  */
2089 	  if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090 	      && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2091 	    {
2092 	      if (DECL_DECLARED_INLINE_P (newdecl))
2093 		DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2094 	      else
2095 		DECL_ATTRIBUTES (newdecl)
2096 		  = remove_attribute ("always_inline",
2097 				      DECL_ATTRIBUTES (newdecl));
2098 	    }
2099 	}
2100       else if (new_defines_function && DECL_INITIAL (olddecl))
2101 	{
2102 	  /* Never inline re-defined extern inline functions.
2103 	     FIXME: this could be better handled by keeping both
2104 	     function as separate declarations.  */
2105 	  DECL_UNINLINABLE (newdecl) = 1;
2106 	}
2107       else
2108 	{
2109 	  if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2110 	    DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2111 
2112 	  DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2113 
2114 	  DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2115 	    = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2116 
2117 	  DECL_DISREGARD_INLINE_LIMITS (newdecl)
2118 	    = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2119 	    = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2120 	       || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2121 	}
2122 
2123       /* Preserve abstractness on cloned [cd]tors.  */
2124       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2125 
2126       /* Update newdecl's parms to point at olddecl.  */
2127       for (parm = DECL_ARGUMENTS (newdecl); parm;
2128 	   parm = DECL_CHAIN (parm))
2129 	DECL_CONTEXT (parm) = olddecl;
2130 
2131       if (! types_match)
2132 	{
2133 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2134 	  COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2135 	  COPY_DECL_RTL (newdecl, olddecl);
2136 	}
2137       if (! types_match || new_defines_function)
2138 	{
2139 	  /* These need to be copied so that the names are available.
2140 	     Note that if the types do match, we'll preserve inline
2141 	     info and other bits, but if not, we won't.  */
2142 	  DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2143 	  DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2144 	}
2145       if (new_defines_function)
2146 	/* If defining a function declared with other language
2147 	   linkage, use the previously declared language linkage.  */
2148 	SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2149       else if (types_match)
2150 	{
2151 	  /* If redeclaring a builtin function, and not a definition,
2152 	     it stays built in.  */
2153 	  if (DECL_BUILT_IN (olddecl))
2154 	    {
2155 	      DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2156 	      DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2157 	      /* If we're keeping the built-in definition, keep the rtl,
2158 		 regardless of declaration matches.  */
2159 	      COPY_DECL_RTL (olddecl, newdecl);
2160 	      if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2161 		{
2162 		  enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2163 		  switch (fncode)
2164 		    {
2165 		      /* If a compatible prototype of these builtin functions
2166 			 is seen, assume the runtime implements it with the
2167 			 expected semantics.  */
2168 		    case BUILT_IN_STPCPY:
2169 		      if (builtin_decl_explicit_p (fncode))
2170 			set_builtin_decl_implicit_p (fncode, true);
2171 		      break;
2172 		    default:
2173 		      break;
2174 		    }
2175 		}
2176 	    }
2177 
2178 	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2179 	  /* Don't clear out the arguments if we're just redeclaring a
2180 	     function.  */
2181 	  if (DECL_ARGUMENTS (olddecl))
2182 	    DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2183 	}
2184     }
2185   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2186     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2187 
2188   /* Now preserve various other info from the definition.  */
2189   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2190   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2191   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2192   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2193 
2194   /* Warn about conflicting visibility specifications.  */
2195   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2196       && DECL_VISIBILITY_SPECIFIED (newdecl)
2197       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2198     {
2199       warning_at (input_location, OPT_Wattributes,
2200 		  "%q+D: visibility attribute ignored because it", newdecl);
2201       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2202 		  "conflicts with previous declaration here");
2203     }
2204   /* Choose the declaration which specified visibility.  */
2205   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2206     {
2207       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2208       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2209     }
2210   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2211      so keep this behavior.  */
2212   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2213     {
2214       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2215       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2216     }
2217   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2218   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2219     {
2220       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2221       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2222     }
2223   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2224   if (TREE_CODE (newdecl) == FIELD_DECL)
2225     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2226 
2227   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2228      with that from NEWDECL below.  */
2229   if (DECL_LANG_SPECIFIC (olddecl))
2230     {
2231       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2232 		  != DECL_LANG_SPECIFIC (newdecl));
2233       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2234     }
2235 
2236   /* Merge the USED information.  */
2237   if (TREE_USED (olddecl))
2238     TREE_USED (newdecl) = 1;
2239   else if (TREE_USED (newdecl))
2240     TREE_USED (olddecl) = 1;
2241   if (TREE_CODE (newdecl) == VAR_DECL)
2242     {
2243       if (DECL_READ_P (olddecl))
2244 	DECL_READ_P (newdecl) = 1;
2245       else if (DECL_READ_P (newdecl))
2246 	DECL_READ_P (olddecl) = 1;
2247     }
2248   if (DECL_PRESERVE_P (olddecl))
2249     DECL_PRESERVE_P (newdecl) = 1;
2250   else if (DECL_PRESERVE_P (newdecl))
2251     DECL_PRESERVE_P (olddecl) = 1;
2252 
2253   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2254     {
2255       int function_size;
2256 
2257       function_size = sizeof (struct tree_decl_common);
2258 
2259       memcpy ((char *) olddecl + sizeof (struct tree_common),
2260 	      (char *) newdecl + sizeof (struct tree_common),
2261 	      function_size - sizeof (struct tree_common));
2262 
2263       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2264 	      (char *) newdecl + sizeof (struct tree_decl_common),
2265 	      sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2266       if (new_template_info)
2267 	/* If newdecl is a template instantiation, it is possible that
2268 	   the following sequence of events has occurred:
2269 
2270 	   o A friend function was declared in a class template.  The
2271 	   class template was instantiated.
2272 
2273 	   o The instantiation of the friend declaration was
2274 	   recorded on the instantiation list, and is newdecl.
2275 
2276 	   o Later, however, instantiate_class_template called pushdecl
2277 	   on the newdecl to perform name injection.  But, pushdecl in
2278 	   turn called duplicate_decls when it discovered that another
2279 	   declaration of a global function with the same name already
2280 	   existed.
2281 
2282 	   o Here, in duplicate_decls, we decided to clobber newdecl.
2283 
2284 	   If we're going to do that, we'd better make sure that
2285 	   olddecl, and not newdecl, is on the list of
2286 	   instantiations so that if we try to do the instantiation
2287 	   again we won't get the clobbered declaration.  */
2288 	reregister_specialization (newdecl,
2289 				   new_template_info,
2290 				   olddecl);
2291     }
2292   else
2293     {
2294       size_t size = tree_code_size (TREE_CODE (olddecl));
2295       memcpy ((char *) olddecl + sizeof (struct tree_common),
2296 	      (char *) newdecl + sizeof (struct tree_common),
2297 	      sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2298       switch (TREE_CODE (olddecl))
2299 	{
2300 	case LABEL_DECL:
2301 	case VAR_DECL:
2302 	case RESULT_DECL:
2303 	case PARM_DECL:
2304 	case FIELD_DECL:
2305 	case TYPE_DECL:
2306 	case CONST_DECL:
2307 	  {
2308 	    memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2309 		    (char *) newdecl + sizeof (struct tree_decl_common),
2310 		    size - sizeof (struct tree_decl_common)
2311 		    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2312 	  }
2313 	  break;
2314 	default:
2315 	  memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2316 		  (char *) newdecl + sizeof (struct tree_decl_common),
2317 		  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2318 		  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2319 	  break;
2320 	}
2321     }
2322   DECL_UID (olddecl) = olddecl_uid;
2323   if (olddecl_friend)
2324     DECL_FRIEND_P (olddecl) = 1;
2325   if (hidden_friend)
2326     {
2327       DECL_ANTICIPATED (olddecl) = 1;
2328       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2329     }
2330 
2331   /* NEWDECL contains the merged attribute lists.
2332      Update OLDDECL to be the same.  */
2333   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2334 
2335   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2336     so that encode_section_info has a chance to look at the new decl
2337     flags and attributes.  */
2338   if (DECL_RTL_SET_P (olddecl)
2339       && (TREE_CODE (olddecl) == FUNCTION_DECL
2340 	  || (TREE_CODE (olddecl) == VAR_DECL
2341 	      && TREE_STATIC (olddecl))))
2342     make_decl_rtl (olddecl);
2343 
2344   /* The NEWDECL will no longer be needed.  Because every out-of-class
2345      declaration of a member results in a call to duplicate_decls,
2346      freeing these nodes represents in a significant savings.  */
2347   ggc_free (newdecl);
2348 
2349   return olddecl;
2350 }
2351 
2352 /* Return zero if the declaration NEWDECL is valid
2353    when the declaration OLDDECL (assumed to be for the same name)
2354    has already been seen.
2355    Otherwise return an error message format string with a %s
2356    where the identifier should go.  */
2357 
2358 static const char *
2359 redeclaration_error_message (tree newdecl, tree olddecl)
2360 {
2361   if (TREE_CODE (newdecl) == TYPE_DECL)
2362     {
2363       /* Because C++ can put things into name space for free,
2364 	 constructs like "typedef struct foo { ... } foo"
2365 	 would look like an erroneous redeclaration.  */
2366       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2367 	return NULL;
2368       else
2369 	return G_("redefinition of %q#D");
2370     }
2371   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2372     {
2373       /* If this is a pure function, its olddecl will actually be
2374 	 the original initialization to `0' (which we force to call
2375 	 abort()).  Don't complain about redefinition in this case.  */
2376       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2377 	  && DECL_INITIAL (olddecl) == NULL_TREE)
2378 	return NULL;
2379 
2380       /* If both functions come from different namespaces, this is not
2381 	 a redeclaration - this is a conflict with a used function.  */
2382       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2383 	  && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2384 	  && ! decls_match (olddecl, newdecl))
2385 	return G_("%qD conflicts with used function");
2386 
2387       /* We'll complain about linkage mismatches in
2388 	 warn_extern_redeclared_static.  */
2389 
2390       /* Defining the same name twice is no good.  */
2391       if (DECL_INITIAL (olddecl) != NULL_TREE
2392 	  && DECL_INITIAL (newdecl) != NULL_TREE)
2393 	{
2394 	  if (DECL_NAME (olddecl) == NULL_TREE)
2395 	    return G_("%q#D not declared in class");
2396 	  else if (!GNU_INLINE_P (olddecl)
2397 		   || GNU_INLINE_P (newdecl))
2398 	    return G_("redefinition of %q#D");
2399 	}
2400 
2401       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2402 	{
2403 	  bool olda = GNU_INLINE_P (olddecl);
2404 	  bool newa = GNU_INLINE_P (newdecl);
2405 
2406 	  if (olda != newa)
2407 	    {
2408 	      if (newa)
2409 		return G_("%q+D redeclared inline with "
2410 			  "%<gnu_inline%> attribute");
2411 	      else
2412 		return G_("%q+D redeclared inline without "
2413 			  "%<gnu_inline%> attribute");
2414 	    }
2415 	}
2416 
2417       return NULL;
2418     }
2419   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2420     {
2421       tree nt, ot;
2422 
2423       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2424 	{
2425 	  if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2426 	      && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2427 	    return G_("redefinition of %q#D");
2428 	  return NULL;
2429 	}
2430 
2431       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2432 	  || (DECL_TEMPLATE_RESULT (newdecl)
2433 	      == DECL_TEMPLATE_RESULT (olddecl)))
2434 	return NULL;
2435 
2436       nt = DECL_TEMPLATE_RESULT (newdecl);
2437       if (DECL_TEMPLATE_INFO (nt))
2438 	nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2439       ot = DECL_TEMPLATE_RESULT (olddecl);
2440       if (DECL_TEMPLATE_INFO (ot))
2441 	ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2442       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2443 	  && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2444 	return G_("redefinition of %q#D");
2445 
2446       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2447 	{
2448 	  bool olda = GNU_INLINE_P (ot);
2449 	  bool newa = GNU_INLINE_P (nt);
2450 
2451 	  if (olda != newa)
2452 	    {
2453 	      if (newa)
2454 		return G_("%q+D redeclared inline with "
2455 			  "%<gnu_inline%> attribute");
2456 	      else
2457 		return G_("%q+D redeclared inline without "
2458 		     	  "%<gnu_inline%> attribute");
2459 	    }
2460 	}
2461 
2462       /* Core issue #226 (C++0x):
2463 
2464            If a friend function template declaration specifies a
2465            default template-argument, that declaration shall be a
2466            definition and shall be the only declaration of the
2467            function template in the translation unit.  */
2468       if ((cxx_dialect != cxx98)
2469           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2470           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2471                                        /*is_primary=*/1, /*is_partial=*/0,
2472                                        /*is_friend_decl=*/2))
2473         return G_("redeclaration of friend %q#D "
2474 	 	  "may not have default template arguments");
2475 
2476       return NULL;
2477     }
2478   else if (TREE_CODE (newdecl) == VAR_DECL
2479 	   && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2480 	   && (! DECL_LANG_SPECIFIC (olddecl)
2481 	       || ! CP_DECL_THREADPRIVATE_P (olddecl)
2482 	       || DECL_THREAD_LOCAL_P (newdecl)))
2483     {
2484       /* Only variables can be thread-local, and all declarations must
2485 	 agree on this property.  */
2486       if (DECL_THREAD_LOCAL_P (newdecl))
2487 	return G_("thread-local declaration of %q#D follows "
2488 	          "non-thread-local declaration");
2489       else
2490 	return G_("non-thread-local declaration of %q#D follows "
2491 	          "thread-local declaration");
2492     }
2493   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2494     {
2495       /* The objects have been declared at namespace scope.  If either
2496 	 is a member of an anonymous union, then this is an invalid
2497 	 redeclaration.  For example:
2498 
2499 	   int i;
2500 	   union { int i; };
2501 
2502 	   is invalid.  */
2503       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2504 	  || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2505 	return G_("redeclaration of %q#D");
2506       /* If at least one declaration is a reference, there is no
2507 	 conflict.  For example:
2508 
2509 	   int i = 3;
2510 	   extern int i;
2511 
2512 	 is valid.  */
2513       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2514 	return NULL;
2515       /* Reject two definitions.  */
2516       return G_("redefinition of %q#D");
2517     }
2518   else
2519     {
2520       /* Objects declared with block scope:  */
2521       /* Reject two definitions, and reject a definition
2522 	 together with an external reference.  */
2523       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2524 	return G_("redeclaration of %q#D");
2525       return NULL;
2526     }
2527 }
2528 
2529 /* Hash and equality functions for the named_label table.  */
2530 
2531 static hashval_t
2532 named_label_entry_hash (const void *data)
2533 {
2534   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2535   return DECL_UID (ent->label_decl);
2536 }
2537 
2538 static int
2539 named_label_entry_eq (const void *a, const void *b)
2540 {
2541   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2542   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2543   return ent_a->label_decl == ent_b->label_decl;
2544 }
2545 
2546 /* Create a new label, named ID.  */
2547 
2548 static tree
2549 make_label_decl (tree id, int local_p)
2550 {
2551   struct named_label_entry *ent;
2552   void **slot;
2553   tree decl;
2554 
2555   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2556 
2557   DECL_CONTEXT (decl) = current_function_decl;
2558   DECL_MODE (decl) = VOIDmode;
2559   C_DECLARED_LABEL_FLAG (decl) = local_p;
2560 
2561   /* Say where one reference is to the label, for the sake of the
2562      error if it is not defined.  */
2563   DECL_SOURCE_LOCATION (decl) = input_location;
2564 
2565   /* Record the fact that this identifier is bound to this label.  */
2566   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2567 
2568   /* Create the label htab for the function on demand.  */
2569   if (!named_labels)
2570     named_labels = htab_create_ggc (13, named_label_entry_hash,
2571 				    named_label_entry_eq, NULL);
2572 
2573   /* Record this label on the list of labels used in this function.
2574      We do this before calling make_label_decl so that we get the
2575      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2576   ent = ggc_alloc_cleared_named_label_entry ();
2577   ent->label_decl = decl;
2578 
2579   slot = htab_find_slot (named_labels, ent, INSERT);
2580   gcc_assert (*slot == NULL);
2581   *slot = ent;
2582 
2583   return decl;
2584 }
2585 
2586 /* Look for a label named ID in the current function.  If one cannot
2587    be found, create one.  (We keep track of used, but undefined,
2588    labels, and complain about them at the end of a function.)  */
2589 
2590 static tree
2591 lookup_label_1 (tree id)
2592 {
2593   tree decl;
2594 
2595   /* You can't use labels at global scope.  */
2596   if (current_function_decl == NULL_TREE)
2597     {
2598       error ("label %qE referenced outside of any function", id);
2599       return NULL_TREE;
2600     }
2601 
2602   /* See if we've already got this label.  */
2603   decl = IDENTIFIER_LABEL_VALUE (id);
2604   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2605     return decl;
2606 
2607   decl = make_label_decl (id, /*local_p=*/0);
2608   return decl;
2609 }
2610 
2611 /* Wrapper for lookup_label_1.  */
2612 
2613 tree
2614 lookup_label (tree id)
2615 {
2616   tree ret;
2617   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2618   ret = lookup_label_1 (id);
2619   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2620   return ret;
2621 }
2622 
2623 /* Declare a local label named ID.  */
2624 
2625 tree
2626 declare_local_label (tree id)
2627 {
2628   tree decl;
2629   cp_label_binding *bind;
2630 
2631   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2632      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2633   bind = VEC_safe_push (cp_label_binding, gc,
2634 			current_binding_level->shadowed_labels, NULL);
2635   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2636 
2637   decl = make_label_decl (id, /*local_p=*/1);
2638   bind->label = decl;
2639 
2640   return decl;
2641 }
2642 
2643 /* Returns nonzero if it is ill-formed to jump past the declaration of
2644    DECL.  Returns 2 if it's also a real problem.  */
2645 
2646 static int
2647 decl_jump_unsafe (tree decl)
2648 {
2649   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2650      with automatic storage duration is not in scope to a point where it is
2651      in scope is ill-formed unless the variable has scalar type, class type
2652      with a trivial default constructor and a trivial destructor, a
2653      cv-qualified version of one of these types, or an array of one of the
2654      preceding types and is declared without an initializer (8.5).  */
2655   tree type = TREE_TYPE (decl);
2656 
2657   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2658       || type == error_mark_node)
2659     return 0;
2660 
2661   type = strip_array_types (type);
2662 
2663   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2664       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2665     return 2;
2666 
2667   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2668     return 1;
2669 
2670   return 0;
2671 }
2672 
2673 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2674 
2675 static void
2676 identify_goto (tree decl, const location_t *locus)
2677 {
2678   if (decl)
2679     permerror (input_location, "jump to label %qD", decl);
2680   else
2681     permerror (input_location, "jump to case label");
2682   if (locus)
2683     permerror (*locus, "  from here");
2684 }
2685 
2686 /* Check that a single previously seen jump to a newly defined label
2687    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2688    the jump context; NAMES are the names in scope in LEVEL at the jump
2689    context; LOCUS is the source position of the jump or 0.  Returns
2690    true if all is well.  */
2691 
2692 static bool
2693 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2694 		       bool exited_omp, const location_t *locus)
2695 {
2696   cp_binding_level *b;
2697   bool identified = false, saw_eh = false, saw_omp = false;
2698 
2699   if (exited_omp)
2700     {
2701       identify_goto (decl, locus);
2702       error ("  exits OpenMP structured block");
2703       identified = saw_omp = true;
2704     }
2705 
2706   for (b = current_binding_level; b ; b = b->level_chain)
2707     {
2708       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2709 
2710       for (new_decls = b->names; new_decls != old_decls;
2711 	   new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2712 			: TREE_CHAIN (new_decls)))
2713 	{
2714 	  int problem = decl_jump_unsafe (new_decls);
2715 	  if (! problem)
2716 	    continue;
2717 
2718 	  if (!identified)
2719 	    {
2720 	      identify_goto (decl, locus);
2721 	      identified = true;
2722 	    }
2723 	  if (problem > 1)
2724 	    error ("  crosses initialization of %q+#D", new_decls);
2725 	  else
2726 	    permerror (input_location, "  enters scope of %q+#D which has "
2727 		       "non-trivial destructor", new_decls);
2728 	}
2729 
2730       if (b == level)
2731 	break;
2732       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2733 	{
2734 	  if (!identified)
2735 	    {
2736 	      identify_goto (decl, locus);
2737 	      identified = true;
2738 	    }
2739 	  if (b->kind == sk_try)
2740 	    error ("  enters try block");
2741 	  else
2742 	    error ("  enters catch block");
2743 	  saw_eh = true;
2744 	}
2745       if (b->kind == sk_omp && !saw_omp)
2746 	{
2747 	  if (!identified)
2748 	    {
2749 	      identify_goto (decl, locus);
2750 	      identified = true;
2751 	    }
2752 	  error ("  enters OpenMP structured block");
2753 	  saw_omp = true;
2754 	}
2755     }
2756 
2757   return !identified;
2758 }
2759 
2760 static void
2761 check_previous_goto (tree decl, struct named_label_use_entry *use)
2762 {
2763   check_previous_goto_1 (decl, use->binding_level,
2764 			 use->names_in_scope, use->in_omp_scope,
2765 			 &use->o_goto_locus);
2766 }
2767 
2768 static bool
2769 check_switch_goto (cp_binding_level* level)
2770 {
2771   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2772 }
2773 
2774 /* Check that a new jump to a label DECL is OK.  Called by
2775    finish_goto_stmt.  */
2776 
2777 void
2778 check_goto (tree decl)
2779 {
2780   struct named_label_entry *ent, dummy;
2781   bool saw_catch = false, identified = false;
2782   tree bad;
2783   unsigned ix;
2784 
2785   /* We can't know where a computed goto is jumping.
2786      So we assume that it's OK.  */
2787   if (TREE_CODE (decl) != LABEL_DECL)
2788     return;
2789 
2790   /* We didn't record any information about this label when we created it,
2791      and there's not much point since it's trivial to analyze as a return.  */
2792   if (decl == cdtor_label)
2793     return;
2794 
2795   dummy.label_decl = decl;
2796   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2797   gcc_assert (ent != NULL);
2798 
2799   /* If the label hasn't been defined yet, defer checking.  */
2800   if (! DECL_INITIAL (decl))
2801     {
2802       struct named_label_use_entry *new_use;
2803 
2804       /* Don't bother creating another use if the last goto had the
2805 	 same data, and will therefore create the same set of errors.  */
2806       if (ent->uses
2807 	  && ent->uses->names_in_scope == current_binding_level->names)
2808 	return;
2809 
2810       new_use = ggc_alloc_named_label_use_entry ();
2811       new_use->binding_level = current_binding_level;
2812       new_use->names_in_scope = current_binding_level->names;
2813       new_use->o_goto_locus = input_location;
2814       new_use->in_omp_scope = false;
2815 
2816       new_use->next = ent->uses;
2817       ent->uses = new_use;
2818       return;
2819     }
2820 
2821   if (ent->in_try_scope || ent->in_catch_scope
2822       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2823     {
2824       permerror (input_location, "jump to label %q+D", decl);
2825       permerror (input_location, "  from here");
2826       identified = true;
2827     }
2828 
2829   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2830     {
2831       int u = decl_jump_unsafe (bad);
2832 
2833       if (u > 1 && DECL_ARTIFICIAL (bad))
2834 	{
2835 	  /* Can't skip init of __exception_info.  */
2836 	  error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2837 	  saw_catch = true;
2838 	}
2839       else if (u > 1)
2840 	error ("  skips initialization of %q+#D", bad);
2841       else
2842 	permerror (input_location, "  enters scope of %q+#D which has "
2843 		   "non-trivial destructor", bad);
2844     }
2845 
2846   if (ent->in_try_scope)
2847     error ("  enters try block");
2848   else if (ent->in_catch_scope && !saw_catch)
2849     error ("  enters catch block");
2850 
2851   if (ent->in_omp_scope)
2852     error ("  enters OpenMP structured block");
2853   else if (flag_openmp)
2854     {
2855       cp_binding_level *b;
2856       for (b = current_binding_level; b ; b = b->level_chain)
2857 	{
2858 	  if (b == ent->binding_level)
2859 	    break;
2860 	  if (b->kind == sk_omp)
2861 	    {
2862 	      if (!identified)
2863 		{
2864 		  permerror (input_location, "jump to label %q+D", decl);
2865 		  permerror (input_location, "  from here");
2866 		  identified = true;
2867 		}
2868 	      error ("  exits OpenMP structured block");
2869 	      break;
2870 	    }
2871 	}
2872     }
2873 }
2874 
2875 /* Check that a return is ok wrt OpenMP structured blocks.
2876    Called by finish_return_stmt.  Returns true if all is well.  */
2877 
2878 bool
2879 check_omp_return (void)
2880 {
2881   cp_binding_level *b;
2882   for (b = current_binding_level; b ; b = b->level_chain)
2883     if (b->kind == sk_omp)
2884       {
2885 	error ("invalid exit from OpenMP structured block");
2886 	return false;
2887       }
2888     else if (b->kind == sk_function_parms)
2889       break;
2890   return true;
2891 }
2892 
2893 /* Define a label, specifying the location in the source file.
2894    Return the LABEL_DECL node for the label.  */
2895 
2896 static tree
2897 define_label_1 (location_t location, tree name)
2898 {
2899   struct named_label_entry *ent, dummy;
2900   cp_binding_level *p;
2901   tree decl;
2902 
2903   decl = lookup_label (name);
2904 
2905   dummy.label_decl = decl;
2906   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2907   gcc_assert (ent != NULL);
2908 
2909   /* After labels, make any new cleanups in the function go into their
2910      own new (temporary) binding contour.  */
2911   for (p = current_binding_level;
2912        p->kind != sk_function_parms;
2913        p = p->level_chain)
2914     p->more_cleanups_ok = 0;
2915 
2916   if (name == get_identifier ("wchar_t"))
2917     permerror (input_location, "label named wchar_t");
2918 
2919   if (DECL_INITIAL (decl) != NULL_TREE)
2920     {
2921       error ("duplicate label %qD", decl);
2922       return error_mark_node;
2923     }
2924   else
2925     {
2926       struct named_label_use_entry *use;
2927 
2928       /* Mark label as having been defined.  */
2929       DECL_INITIAL (decl) = error_mark_node;
2930       /* Say where in the source.  */
2931       DECL_SOURCE_LOCATION (decl) = location;
2932 
2933       ent->binding_level = current_binding_level;
2934       ent->names_in_scope = current_binding_level->names;
2935 
2936       for (use = ent->uses; use ; use = use->next)
2937 	check_previous_goto (decl, use);
2938       ent->uses = NULL;
2939     }
2940 
2941   return decl;
2942 }
2943 
2944 /* Wrapper for define_label_1.  */
2945 
2946 tree
2947 define_label (location_t location, tree name)
2948 {
2949   tree ret;
2950   bool running = timevar_cond_start (TV_NAME_LOOKUP);
2951   ret = define_label_1 (location, name);
2952   timevar_cond_stop (TV_NAME_LOOKUP, running);
2953   return ret;
2954 }
2955 
2956 
2957 struct cp_switch
2958 {
2959   cp_binding_level *level;
2960   struct cp_switch *next;
2961   /* The SWITCH_STMT being built.  */
2962   tree switch_stmt;
2963   /* A splay-tree mapping the low element of a case range to the high
2964      element, or NULL_TREE if there is no high element.  Used to
2965      determine whether or not a new case label duplicates an old case
2966      label.  We need a tree, rather than simply a hash table, because
2967      of the GNU case range extension.  */
2968   splay_tree cases;
2969 };
2970 
2971 /* A stack of the currently active switch statements.  The innermost
2972    switch statement is on the top of the stack.  There is no need to
2973    mark the stack for garbage collection because it is only active
2974    during the processing of the body of a function, and we never
2975    collect at that point.  */
2976 
2977 static struct cp_switch *switch_stack;
2978 
2979 /* Called right after a switch-statement condition is parsed.
2980    SWITCH_STMT is the switch statement being parsed.  */
2981 
2982 void
2983 push_switch (tree switch_stmt)
2984 {
2985   struct cp_switch *p = XNEW (struct cp_switch);
2986   p->level = current_binding_level;
2987   p->next = switch_stack;
2988   p->switch_stmt = switch_stmt;
2989   p->cases = splay_tree_new (case_compare, NULL, NULL);
2990   switch_stack = p;
2991 }
2992 
2993 void
2994 pop_switch (void)
2995 {
2996   struct cp_switch *cs = switch_stack;
2997   location_t switch_location;
2998 
2999   /* Emit warnings as needed.  */
3000   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3001   if (!processing_template_decl)
3002     c_do_switch_warnings (cs->cases, switch_location,
3003 			  SWITCH_STMT_TYPE (cs->switch_stmt),
3004 			  SWITCH_STMT_COND (cs->switch_stmt));
3005 
3006   splay_tree_delete (cs->cases);
3007   switch_stack = switch_stack->next;
3008   free (cs);
3009 }
3010 
3011 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3012    condition.  Note that if TYPE and VALUE are already integral we don't
3013    really do the conversion because the language-independent
3014    warning/optimization code will work better that way.  */
3015 
3016 static tree
3017 case_conversion (tree type, tree value)
3018 {
3019   if (value == NULL_TREE)
3020     return value;
3021 
3022   if (cxx_dialect >= cxx0x
3023       && (SCOPED_ENUM_P (type)
3024 	  || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3025     {
3026       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3027 	type = type_promotes_to (type);
3028       value = perform_implicit_conversion (type, value, tf_warning_or_error);
3029     }
3030   return cxx_constant_value (value);
3031 }
3032 
3033 /* Note that we've seen a definition of a case label, and complain if this
3034    is a bad place for one.  */
3035 
3036 tree
3037 finish_case_label (location_t loc, tree low_value, tree high_value)
3038 {
3039   tree cond, r;
3040   cp_binding_level *p;
3041   tree type;
3042 
3043   if (processing_template_decl)
3044     {
3045       tree label;
3046 
3047       /* For templates, just add the case label; we'll do semantic
3048 	 analysis at instantiation-time.  */
3049       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3050       return add_stmt (build_case_label (low_value, high_value, label));
3051     }
3052 
3053   /* Find the condition on which this switch statement depends.  */
3054   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3055   if (cond && TREE_CODE (cond) == TREE_LIST)
3056     cond = TREE_VALUE (cond);
3057 
3058   if (!check_switch_goto (switch_stack->level))
3059     return error_mark_node;
3060 
3061   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3062 
3063   low_value = case_conversion (type, low_value);
3064   high_value = case_conversion (type, high_value);
3065 
3066   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3067 			low_value, high_value);
3068 
3069   /* After labels, make any new cleanups in the function go into their
3070      own new (temporary) binding contour.  */
3071   for (p = current_binding_level;
3072        p->kind != sk_function_parms;
3073        p = p->level_chain)
3074     p->more_cleanups_ok = 0;
3075 
3076   return r;
3077 }
3078 
3079 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3080 
3081 static hashval_t
3082 typename_hash (const void* k)
3083 {
3084   hashval_t hash;
3085   const_tree const t = (const_tree) k;
3086 
3087   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3088 	  ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3089 
3090   return hash;
3091 }
3092 
3093 typedef struct typename_info {
3094   tree scope;
3095   tree name;
3096   tree template_id;
3097   bool enum_p;
3098   bool class_p;
3099 } typename_info;
3100 
3101 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3102    really of type `typename_info*'  */
3103 
3104 static int
3105 typename_compare (const void * k1, const void * k2)
3106 {
3107   const_tree const t1 = (const_tree) k1;
3108   const typename_info *const t2 = (const typename_info *) k2;
3109 
3110   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3111 	  && TYPE_CONTEXT (t1) == t2->scope
3112 	  && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3113 	  && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3114 	  && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3115 }
3116 
3117 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3118    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3119 
3120    Returns the new TYPENAME_TYPE.  */
3121 
3122 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3123 
3124 static tree
3125 build_typename_type (tree context, tree name, tree fullname,
3126 		     enum tag_types tag_type)
3127 {
3128   tree t;
3129   tree d;
3130   typename_info ti;
3131   void **e;
3132   hashval_t hash;
3133 
3134   if (typename_htab == NULL)
3135     typename_htab = htab_create_ggc (61, &typename_hash,
3136 				     &typename_compare, NULL);
3137 
3138   ti.scope = FROB_CONTEXT (context);
3139   ti.name = name;
3140   ti.template_id = fullname;
3141   ti.enum_p = tag_type == enum_type;
3142   ti.class_p = (tag_type == class_type
3143 		|| tag_type == record_type
3144 		|| tag_type == union_type);
3145   hash =  (htab_hash_pointer (ti.scope)
3146 	   ^ htab_hash_pointer (ti.name));
3147 
3148   /* See if we already have this type.  */
3149   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3150   if (*e)
3151     t = (tree) *e;
3152   else
3153     {
3154       /* Build the TYPENAME_TYPE.  */
3155       t = cxx_make_type (TYPENAME_TYPE);
3156       TYPE_CONTEXT (t) = ti.scope;
3157       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3158       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3159       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3160 
3161       /* Build the corresponding TYPE_DECL.  */
3162       d = build_decl (input_location, TYPE_DECL, name, t);
3163       TYPE_NAME (TREE_TYPE (d)) = d;
3164       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3165       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3166       DECL_ARTIFICIAL (d) = 1;
3167 
3168       /* Store it in the hash table.  */
3169       *e = t;
3170 
3171       /* TYPENAME_TYPEs must always be compared structurally, because
3172 	 they may or may not resolve down to another type depending on
3173 	 the currently open classes. */
3174       SET_TYPE_STRUCTURAL_EQUALITY (t);
3175     }
3176 
3177   return t;
3178 }
3179 
3180 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3181    provided to name the type.  Returns an appropriate type, unless an
3182    error occurs, in which case error_mark_node is returned.  If we
3183    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3184    return that, rather than the _TYPE it corresponds to, in other
3185    cases we look through the type decl.  If TF_ERROR is set, complain
3186    about errors, otherwise be quiet.  */
3187 
3188 tree
3189 make_typename_type (tree context, tree name, enum tag_types tag_type,
3190 		    tsubst_flags_t complain)
3191 {
3192   tree fullname;
3193   tree t;
3194   bool want_template;
3195 
3196   if (name == error_mark_node
3197       || context == NULL_TREE
3198       || context == error_mark_node)
3199     return error_mark_node;
3200 
3201   if (TYPE_P (name))
3202     {
3203       if (!(TYPE_LANG_SPECIFIC (name)
3204 	    && (CLASSTYPE_IS_TEMPLATE (name)
3205 		|| CLASSTYPE_USE_TEMPLATE (name))))
3206 	name = TYPE_IDENTIFIER (name);
3207       else
3208 	/* Create a TEMPLATE_ID_EXPR for the type.  */
3209 	name = build_nt (TEMPLATE_ID_EXPR,
3210 			 CLASSTYPE_TI_TEMPLATE (name),
3211 			 CLASSTYPE_TI_ARGS (name));
3212     }
3213   else if (TREE_CODE (name) == TYPE_DECL)
3214     name = DECL_NAME (name);
3215 
3216   fullname = name;
3217 
3218   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3219     {
3220       name = TREE_OPERAND (name, 0);
3221       if (TREE_CODE (name) == TEMPLATE_DECL)
3222 	name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3223       else if (TREE_CODE (name) == OVERLOAD)
3224 	{
3225 	  error ("%qD is not a type", name);
3226 	  return error_mark_node;
3227 	}
3228     }
3229   if (TREE_CODE (name) == TEMPLATE_DECL)
3230     {
3231       error ("%qD used without template parameters", name);
3232       return error_mark_node;
3233     }
3234   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3235   gcc_assert (TYPE_P (context));
3236 
3237   if (!MAYBE_CLASS_TYPE_P (context))
3238     {
3239       if (complain & tf_error)
3240 	error ("%q#T is not a class", context);
3241       return error_mark_node;
3242     }
3243 
3244   /* When the CONTEXT is a dependent type,  NAME could refer to a
3245      dependent base class of CONTEXT.  But look inside it anyway
3246      if CONTEXT is a currently open scope, in case it refers to a
3247      member of the current instantiation or a non-dependent base;
3248      lookup will stop when we hit a dependent base.  */
3249   if (!dependent_scope_p (context))
3250     /* We should only set WANT_TYPE when we're a nested typename type.
3251        Then we can give better diagnostics if we find a non-type.  */
3252     t = lookup_field (context, name, 2, /*want_type=*/true);
3253   else
3254     t = NULL_TREE;
3255 
3256   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3257     return build_typename_type (context, name, fullname, tag_type);
3258 
3259   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3260 
3261   if (!t)
3262     {
3263       if (complain & tf_error)
3264 	error (want_template ? G_("no class template named %q#T in %q#T")
3265 	       : G_("no type named %q#T in %q#T"), name, context);
3266       return error_mark_node;
3267     }
3268 
3269   /* Pull out the template from an injected-class-name (or multiple).  */
3270   if (want_template)
3271     t = maybe_get_template_decl_from_type_decl (t);
3272 
3273   if (TREE_CODE (t) == TREE_LIST)
3274     {
3275       if (complain & tf_error)
3276 	{
3277 	  error ("lookup of %qT in %qT is ambiguous", name, context);
3278 	  print_candidates (t);
3279 	}
3280       return error_mark_node;
3281     }
3282 
3283   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3284     {
3285       if (complain & tf_error)
3286 	error ("%<typename %T::%D%> names %q#T, which is not a class template",
3287 	       context, name, t);
3288       return error_mark_node;
3289     }
3290   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3291     {
3292       if (complain & tf_error)
3293 	error ("%<typename %T::%D%> names %q#T, which is not a type",
3294 	       context, name, t);
3295       return error_mark_node;
3296     }
3297 
3298   if (complain & tf_error)
3299     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3300 
3301   /* If we are currently parsing a template and if T is a typedef accessed
3302      through CONTEXT then we need to remember and check access of T at
3303      template instantiation time.  */
3304   add_typedef_to_current_template_for_access_check (t, context, input_location);
3305 
3306   if (want_template)
3307     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3308 				  NULL_TREE, context,
3309 				  /*entering_scope=*/0,
3310 				  tf_warning_or_error | tf_user);
3311 
3312   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3313     t = TREE_TYPE (t);
3314 
3315   return t;
3316 }
3317 
3318 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3319    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3320    in which case error_mark_node is returned.
3321 
3322    If PARM_LIST is non-NULL, also make sure that the template parameter
3323    list of TEMPLATE_DECL matches.
3324 
3325    If COMPLAIN zero, don't complain about any errors that occur.  */
3326 
3327 tree
3328 make_unbound_class_template (tree context, tree name, tree parm_list,
3329 			     tsubst_flags_t complain)
3330 {
3331   tree t;
3332   tree d;
3333 
3334   if (TYPE_P (name))
3335     name = TYPE_IDENTIFIER (name);
3336   else if (DECL_P (name))
3337     name = DECL_NAME (name);
3338   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3339 
3340   if (!dependent_type_p (context)
3341       || currently_open_class (context))
3342     {
3343       tree tmpl = NULL_TREE;
3344 
3345       if (MAYBE_CLASS_TYPE_P (context))
3346 	tmpl = lookup_field (context, name, 0, false);
3347 
3348       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3349 	tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3350 
3351       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3352 	{
3353 	  if (complain & tf_error)
3354 	    error ("no class template named %q#T in %q#T", name, context);
3355 	  return error_mark_node;
3356 	}
3357 
3358       if (parm_list
3359 	  && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3360 	{
3361 	  if (complain & tf_error)
3362 	    {
3363 	      error ("template parameters do not match template");
3364 	      error ("%q+D declared here", tmpl);
3365 	    }
3366 	  return error_mark_node;
3367 	}
3368 
3369       if (complain & tf_error)
3370 	perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3371 
3372       return tmpl;
3373     }
3374 
3375   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3376   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3377   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3378   TREE_TYPE (t) = NULL_TREE;
3379   SET_TYPE_STRUCTURAL_EQUALITY (t);
3380 
3381   /* Build the corresponding TEMPLATE_DECL.  */
3382   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3383   TYPE_NAME (TREE_TYPE (d)) = d;
3384   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3385   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3386   DECL_ARTIFICIAL (d) = 1;
3387   DECL_TEMPLATE_PARMS (d) = parm_list;
3388 
3389   return t;
3390 }
3391 
3392 
3393 
3394 /* Push the declarations of builtin types into the namespace.
3395    RID_INDEX is the index of the builtin type in the array
3396    RID_POINTERS.  NAME is the name used when looking up the builtin
3397    type.  TYPE is the _TYPE node for the builtin type.  */
3398 
3399 void
3400 record_builtin_type (enum rid rid_index,
3401 		     const char* name,
3402 		     tree type)
3403 {
3404   tree rname = NULL_TREE, tname = NULL_TREE;
3405   tree tdecl = NULL_TREE;
3406 
3407   if ((int) rid_index < (int) RID_MAX)
3408     rname = ridpointers[(int) rid_index];
3409   if (name)
3410     tname = get_identifier (name);
3411 
3412   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3413      eliminated.  Built-in types should not be looked up name; their
3414      names are keywords that the parser can recognize.  However, there
3415      is code in c-common.c that uses identifier_global_value to look
3416      up built-in types by name.  */
3417   if (tname)
3418     {
3419       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3420       DECL_ARTIFICIAL (tdecl) = 1;
3421       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3422     }
3423   if (rname)
3424     {
3425       if (!tdecl)
3426 	{
3427 	  tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3428 	  DECL_ARTIFICIAL (tdecl) = 1;
3429 	}
3430       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3431     }
3432 
3433   if (!TYPE_NAME (type))
3434     TYPE_NAME (type) = tdecl;
3435 
3436   if (tdecl)
3437     debug_hooks->type_decl (tdecl, 0);
3438 }
3439 
3440 /* Record one of the standard Java types.
3441  * Declare it as having the given NAME.
3442  * If SIZE > 0, it is the size of one of the integral types;
3443  * otherwise it is the negative of the size of one of the other types.  */
3444 
3445 static tree
3446 record_builtin_java_type (const char* name, int size)
3447 {
3448   tree type, decl;
3449   if (size > 0)
3450     {
3451       type = build_nonstandard_integer_type (size, 0);
3452       type = build_distinct_type_copy (type);
3453     }
3454   else if (size > -32)
3455     {
3456       tree stype;
3457       /* "__java_char" or ""__java_boolean".  */
3458       type = build_nonstandard_integer_type (-size, 1);
3459       type = build_distinct_type_copy (type);
3460       /* Get the signed type cached and attached to the unsigned type,
3461 	 so it doesn't get garbage-collected at "random" times,
3462 	 causing potential codegen differences out of different UIDs
3463 	 and different alias set numbers.  */
3464       stype = build_nonstandard_integer_type (-size, 0);
3465       stype = build_distinct_type_copy (stype);
3466       TREE_CHAIN (type) = stype;
3467       /*if (size == -1)	TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3468     }
3469   else
3470     { /* "__java_float" or ""__java_double".  */
3471       type = make_node (REAL_TYPE);
3472       TYPE_PRECISION (type) = - size;
3473       layout_type (type);
3474     }
3475   record_builtin_type (RID_MAX, name, type);
3476   decl = TYPE_NAME (type);
3477 
3478   /* Suppress generate debug symbol entries for these types,
3479      since for normal C++ they are just clutter.
3480      However, push_lang_context undoes this if extern "Java" is seen.  */
3481   DECL_IGNORED_P (decl) = 1;
3482 
3483   TYPE_FOR_JAVA (type) = 1;
3484   return type;
3485 }
3486 
3487 /* Push a type into the namespace so that the back ends ignore it.  */
3488 
3489 static void
3490 record_unknown_type (tree type, const char* name)
3491 {
3492   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3493 				    TYPE_DECL, get_identifier (name), type));
3494   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3495   DECL_IGNORED_P (decl) = 1;
3496   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3497   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3498   TYPE_ALIGN (type) = 1;
3499   TYPE_USER_ALIGN (type) = 0;
3500   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3501 }
3502 
3503 /* A string for which we should create an IDENTIFIER_NODE at
3504    startup.  */
3505 
3506 typedef struct predefined_identifier
3507 {
3508   /* The name of the identifier.  */
3509   const char *const name;
3510   /* The place where the IDENTIFIER_NODE should be stored.  */
3511   tree *const node;
3512   /* Nonzero if this is the name of a constructor or destructor.  */
3513   const int ctor_or_dtor_p;
3514 } predefined_identifier;
3515 
3516 /* Create all the predefined identifiers.  */
3517 
3518 static void
3519 initialize_predefined_identifiers (void)
3520 {
3521   const predefined_identifier *pid;
3522 
3523   /* A table of identifiers to create at startup.  */
3524   static const predefined_identifier predefined_identifiers[] = {
3525     { "C++", &lang_name_cplusplus, 0 },
3526     { "C", &lang_name_c, 0 },
3527     { "Java", &lang_name_java, 0 },
3528     /* Some of these names have a trailing space so that it is
3529        impossible for them to conflict with names written by users.  */
3530     { "__ct ", &ctor_identifier, 1 },
3531     { "__base_ctor ", &base_ctor_identifier, 1 },
3532     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3533     { "__dt ", &dtor_identifier, 1 },
3534     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3535     { "__base_dtor ", &base_dtor_identifier, 1 },
3536     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3537     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3538     { "nelts", &nelts_identifier, 0 },
3539     { THIS_NAME, &this_identifier, 0 },
3540     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3541     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3542     { "_vptr", &vptr_identifier, 0 },
3543     { "__vtt_parm", &vtt_parm_identifier, 0 },
3544     { "::", &global_scope_name, 0 },
3545     { "std", &std_identifier, 0 },
3546     { NULL, NULL, 0 }
3547   };
3548 
3549   for (pid = predefined_identifiers; pid->name; ++pid)
3550     {
3551       *pid->node = get_identifier (pid->name);
3552       if (pid->ctor_or_dtor_p)
3553 	IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3554     }
3555 }
3556 
3557 /* Create the predefined scalar types of C,
3558    and some nodes representing standard constants (0, 1, (void *)0).
3559    Initialize the global binding level.
3560    Make definitions for built-in primitive functions.  */
3561 
3562 void
3563 cxx_init_decl_processing (void)
3564 {
3565   tree void_ftype;
3566   tree void_ftype_ptr;
3567 
3568   /* Create all the identifiers we need.  */
3569   initialize_predefined_identifiers ();
3570 
3571   /* Create the global variables.  */
3572   push_to_top_level ();
3573 
3574   current_function_decl = NULL_TREE;
3575   current_binding_level = NULL;
3576   /* Enter the global namespace.  */
3577   gcc_assert (global_namespace == NULL_TREE);
3578   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3579 				      void_type_node);
3580   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3581   TREE_PUBLIC (global_namespace) = 1;
3582   begin_scope (sk_namespace, global_namespace);
3583 
3584   if (flag_visibility_ms_compat)
3585     default_visibility = VISIBILITY_HIDDEN;
3586 
3587   /* Initially, C.  */
3588   current_lang_name = lang_name_c;
3589 
3590   /* Create the `std' namespace.  */
3591   push_namespace (std_identifier);
3592   std_node = current_namespace;
3593   pop_namespace ();
3594 
3595   c_common_nodes_and_builtins ();
3596 
3597   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3598   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3599   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3600   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3601   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3602   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3603   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3604   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3605 
3606   integer_two_node = build_int_cst (NULL_TREE, 2);
3607 
3608   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3609   truthvalue_type_node = boolean_type_node;
3610   truthvalue_false_node = boolean_false_node;
3611   truthvalue_true_node = boolean_true_node;
3612 
3613   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3614   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3615   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3616 
3617 #if 0
3618   record_builtin_type (RID_MAX, NULL, string_type_node);
3619 #endif
3620 
3621   delta_type_node = ptrdiff_type_node;
3622   vtable_index_type = ptrdiff_type_node;
3623 
3624   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3625   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3626   void_ftype_ptr = build_function_type_list (void_type_node,
3627 					     ptr_type_node, NULL_TREE);
3628   void_ftype_ptr
3629     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3630 
3631   /* C++ extensions */
3632 
3633   unknown_type_node = make_node (LANG_TYPE);
3634   record_unknown_type (unknown_type_node, "unknown type");
3635 
3636   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3637   TREE_TYPE (unknown_type_node) = unknown_type_node;
3638 
3639   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3640      result.  */
3641   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3642   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3643 
3644   init_list_type_node = make_node (LANG_TYPE);
3645   record_unknown_type (init_list_type_node, "init list");
3646 
3647   dependent_lambda_return_type_node = make_node (LANG_TYPE);
3648   record_unknown_type (dependent_lambda_return_type_node,
3649 		       "undeduced lambda return type");
3650 
3651   {
3652     /* Make sure we get a unique function type, so we can give
3653        its pointer type a name.  (This wins for gdb.) */
3654     tree vfunc_type = make_node (FUNCTION_TYPE);
3655     TREE_TYPE (vfunc_type) = integer_type_node;
3656     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3657     layout_type (vfunc_type);
3658 
3659     vtable_entry_type = build_pointer_type (vfunc_type);
3660   }
3661   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3662 
3663   vtbl_type_node
3664     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3665   layout_type (vtbl_type_node);
3666   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3667   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3668   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3669   layout_type (vtbl_ptr_type_node);
3670   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3671 
3672   push_namespace (get_identifier ("__cxxabiv1"));
3673   abi_node = current_namespace;
3674   pop_namespace ();
3675 
3676   global_type_node = make_node (LANG_TYPE);
3677   record_unknown_type (global_type_node, "global type");
3678 
3679   /* Now, C++.  */
3680   current_lang_name = lang_name_cplusplus;
3681 
3682   {
3683     tree newattrs, extvisattr;
3684     tree newtype, deltype;
3685     tree ptr_ftype_sizetype;
3686     tree new_eh_spec;
3687 
3688     ptr_ftype_sizetype
3689       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3690     if (cxx_dialect == cxx98)
3691       {
3692 	tree bad_alloc_id;
3693 	tree bad_alloc_type_node;
3694 	tree bad_alloc_decl;
3695 
3696 	push_namespace (std_identifier);
3697 	bad_alloc_id = get_identifier ("bad_alloc");
3698 	bad_alloc_type_node = make_class_type (RECORD_TYPE);
3699 	TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3700 	bad_alloc_decl
3701 	  = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3702 	DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3703 	pop_namespace ();
3704 
3705 	new_eh_spec
3706 	  = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3707       }
3708     else
3709       new_eh_spec = noexcept_false_spec;
3710 
3711     /* Ensure attribs.c is initialized.  */
3712     init_attributes ();
3713     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3714 				  NULL_TREE);
3715     newattrs = tree_cons (get_identifier ("alloc_size"),
3716 			  build_tree_list (NULL_TREE, integer_one_node),
3717 			  extvisattr);
3718     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3719     newtype = build_exception_variant (newtype, new_eh_spec);
3720     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3721     deltype = build_exception_variant (deltype, empty_except_spec);
3722     push_cp_library_fn (NEW_EXPR, newtype);
3723     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3724     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3725     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3726 
3727     nullptr_type_node = make_node (NULLPTR_TYPE);
3728     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3729     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3730     TYPE_UNSIGNED (nullptr_type_node) = 1;
3731     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3732     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3733     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3734     nullptr_node = build_int_cst (nullptr_type_node, 0);
3735   }
3736 
3737   abort_fndecl
3738     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3739 
3740   /* Perform other language dependent initializations.  */
3741   init_class_processing ();
3742   init_rtti_processing ();
3743   init_template_processing ();
3744 
3745   if (flag_exceptions)
3746     init_exception_processing ();
3747 
3748   if (! supports_one_only ())
3749     flag_weak = 0;
3750 
3751   make_fname_decl = cp_make_fname_decl;
3752   start_fname_decls ();
3753 
3754   /* Show we use EH for cleanups.  */
3755   if (flag_exceptions)
3756     using_eh_for_cleanups ();
3757 }
3758 
3759 /* Generate an initializer for a function naming variable from
3760    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3761    filled in with the type of the init.  */
3762 
3763 tree
3764 cp_fname_init (const char* name, tree *type_p)
3765 {
3766   tree domain = NULL_TREE;
3767   tree type;
3768   tree init = NULL_TREE;
3769   size_t length = 0;
3770 
3771   if (name)
3772     {
3773       length = strlen (name);
3774       domain = build_index_type (size_int (length));
3775       init = build_string (length + 1, name);
3776     }
3777 
3778   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3779   type = build_cplus_array_type (type, domain);
3780 
3781   *type_p = type;
3782 
3783   if (init)
3784     TREE_TYPE (init) = type;
3785   else
3786     init = error_mark_node;
3787 
3788   return init;
3789 }
3790 
3791 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3792    the decl, LOC is the location to give the decl, NAME is the
3793    initialization string and TYPE_DEP indicates whether NAME depended
3794    on the type of the function. We make use of that to detect
3795    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3796    at the point of first use, so we mustn't push the decl now.  */
3797 
3798 static tree
3799 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3800 {
3801   const char *const name = (type_dep && processing_template_decl
3802 			    ? NULL : fname_as_string (type_dep));
3803   tree type;
3804   tree init = cp_fname_init (name, &type);
3805   tree decl = build_decl (loc, VAR_DECL, id, type);
3806 
3807   if (name)
3808     free (CONST_CAST (char *, name));
3809 
3810   /* As we're using pushdecl_with_scope, we must set the context.  */
3811   DECL_CONTEXT (decl) = current_function_decl;
3812   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3813 
3814   TREE_STATIC (decl) = 1;
3815   TREE_READONLY (decl) = 1;
3816   DECL_ARTIFICIAL (decl) = 1;
3817 
3818   TREE_USED (decl) = 1;
3819 
3820   if (current_function_decl)
3821     {
3822       cp_binding_level *b = current_binding_level;
3823       if (b->kind == sk_function_parms)
3824 	return error_mark_node;
3825       while (b->level_chain->kind != sk_function_parms)
3826 	b = b->level_chain;
3827       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3828       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3829 		      LOOKUP_ONLYCONVERTING);
3830     }
3831   else
3832     {
3833       DECL_THIS_STATIC (decl) = true;
3834       pushdecl_top_level_and_finish (decl, init);
3835     }
3836 
3837   return decl;
3838 }
3839 
3840 static tree
3841 builtin_function_1 (tree decl, tree context, bool is_global)
3842 {
3843   tree          id = DECL_NAME (decl);
3844   const char *name = IDENTIFIER_POINTER (id);
3845 
3846   retrofit_lang_decl (decl);
3847 
3848   DECL_ARTIFICIAL (decl) = 1;
3849   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3850   SET_DECL_LANGUAGE (decl, lang_c);
3851   /* Runtime library routines are, by definition, available in an
3852      external shared object.  */
3853   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3854   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3855 
3856   DECL_CONTEXT (decl) = context;
3857 
3858   if (is_global)
3859     pushdecl_top_level (decl);
3860   else
3861     pushdecl (decl);
3862 
3863   /* A function in the user's namespace should have an explicit
3864      declaration before it is used.  Mark the built-in function as
3865      anticipated but not actually declared.  */
3866   if (name[0] != '_' || name[1] != '_')
3867     DECL_ANTICIPATED (decl) = 1;
3868   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3869     {
3870       size_t len = strlen (name);
3871 
3872       /* Treat __*_chk fortification functions as anticipated as well,
3873 	 unless they are __builtin_*.  */
3874       if (len > strlen ("___chk")
3875 	  && memcmp (name + len - strlen ("_chk"),
3876 		     "_chk", strlen ("_chk") + 1) == 0)
3877 	DECL_ANTICIPATED (decl) = 1;
3878     }
3879 
3880   return decl;
3881 }
3882 
3883 tree
3884 cxx_builtin_function (tree decl)
3885 {
3886   tree          id = DECL_NAME (decl);
3887   const char *name = IDENTIFIER_POINTER (id);
3888   /* All builtins that don't begin with an '_' should additionally
3889      go in the 'std' namespace.  */
3890   if (name[0] != '_')
3891     {
3892       tree decl2 = copy_node(decl);
3893       push_namespace (std_identifier);
3894       builtin_function_1 (decl2, std_node, false);
3895       pop_namespace ();
3896     }
3897 
3898   return builtin_function_1 (decl, NULL_TREE, false);
3899 }
3900 
3901 /* Like cxx_builtin_function, but guarantee the function is added to the global
3902    scope.  This is to allow function specific options to add new machine
3903    dependent builtins when the target ISA changes via attribute((target(...)))
3904    which saves space on program startup if the program does not use non-generic
3905    ISAs.  */
3906 
3907 tree
3908 cxx_builtin_function_ext_scope (tree decl)
3909 {
3910 
3911   tree          id = DECL_NAME (decl);
3912   const char *name = IDENTIFIER_POINTER (id);
3913   /* All builtins that don't begin with an '_' should additionally
3914      go in the 'std' namespace.  */
3915   if (name[0] != '_')
3916     {
3917       tree decl2 = copy_node(decl);
3918       push_namespace (std_identifier);
3919       builtin_function_1 (decl2, std_node, true);
3920       pop_namespace ();
3921     }
3922 
3923   return builtin_function_1 (decl, NULL_TREE, true);
3924 }
3925 
3926 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3927    function.  Not called directly.  */
3928 
3929 static tree
3930 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3931 {
3932   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3933   DECL_EXTERNAL (fn) = 1;
3934   TREE_PUBLIC (fn) = 1;
3935   DECL_ARTIFICIAL (fn) = 1;
3936   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3937   SET_DECL_LANGUAGE (fn, lang_c);
3938   /* Runtime library routines are, by definition, available in an
3939      external shared object.  */
3940   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3941   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3942   return fn;
3943 }
3944 
3945 /* Returns the _DECL for a library function with C linkage.
3946    We assume that such functions never throw; if this is incorrect,
3947    callers should unset TREE_NOTHROW.  */
3948 
3949 static tree
3950 build_library_fn (tree name, tree type)
3951 {
3952   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3953   TREE_NOTHROW (fn) = 1;
3954   return fn;
3955 }
3956 
3957 /* Returns the _DECL for a library function with C++ linkage.  */
3958 
3959 static tree
3960 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3961 {
3962   tree fn = build_library_fn_1 (name, operator_code, type);
3963   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3964   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3965   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3966   return fn;
3967 }
3968 
3969 /* Like build_library_fn, but takes a C string instead of an
3970    IDENTIFIER_NODE.  */
3971 
3972 tree
3973 build_library_fn_ptr (const char* name, tree type)
3974 {
3975   return build_library_fn (get_identifier (name), type);
3976 }
3977 
3978 /* Like build_cp_library_fn, but takes a C string instead of an
3979    IDENTIFIER_NODE.  */
3980 
3981 tree
3982 build_cp_library_fn_ptr (const char* name, tree type)
3983 {
3984   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3985 }
3986 
3987 /* Like build_library_fn, but also pushes the function so that we will
3988    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3989    may throw exceptions listed in RAISES.  */
3990 
3991 tree
3992 push_library_fn (tree name, tree type, tree raises)
3993 {
3994   tree fn;
3995 
3996   if (raises)
3997     type = build_exception_variant (type, raises);
3998 
3999   fn = build_library_fn (name, type);
4000   pushdecl_top_level (fn);
4001   return fn;
4002 }
4003 
4004 /* Like build_cp_library_fn, but also pushes the function so that it
4005    will be found by normal lookup.  */
4006 
4007 static tree
4008 push_cp_library_fn (enum tree_code operator_code, tree type)
4009 {
4010   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4011 				 operator_code,
4012 				 type);
4013   pushdecl (fn);
4014   if (flag_tm)
4015     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4016   return fn;
4017 }
4018 
4019 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4020    a FUNCTION_TYPE.  */
4021 
4022 tree
4023 push_void_library_fn (tree name, tree parmtypes)
4024 {
4025   tree type = build_function_type (void_type_node, parmtypes);
4026   return push_library_fn (name, type, NULL_TREE);
4027 }
4028 
4029 /* Like push_library_fn, but also note that this function throws
4030    and does not return.  Used for __throw_foo and the like.  */
4031 
4032 tree
4033 push_throw_library_fn (tree name, tree type)
4034 {
4035   tree fn = push_library_fn (name, type, NULL_TREE);
4036   TREE_THIS_VOLATILE (fn) = 1;
4037   TREE_NOTHROW (fn) = 0;
4038   return fn;
4039 }
4040 
4041 /* When we call finish_struct for an anonymous union, we create
4042    default copy constructors and such.  But, an anonymous union
4043    shouldn't have such things; this function undoes the damage to the
4044    anonymous union type T.
4045 
4046    (The reason that we create the synthesized methods is that we don't
4047    distinguish `union { int i; }' from `typedef union { int i; } U'.
4048    The first is an anonymous union; the second is just an ordinary
4049    union type.)  */
4050 
4051 void
4052 fixup_anonymous_aggr (tree t)
4053 {
4054   tree *q;
4055 
4056   /* Wipe out memory of synthesized methods.  */
4057   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4058   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4059   TYPE_HAS_COPY_CTOR (t) = 0;
4060   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4061   TYPE_HAS_COPY_ASSIGN (t) = 0;
4062   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4063 
4064   /* Splice the implicitly generated functions out of the TYPE_METHODS
4065      list.  */
4066   q = &TYPE_METHODS (t);
4067   while (*q)
4068     {
4069       if (DECL_ARTIFICIAL (*q))
4070 	*q = TREE_CHAIN (*q);
4071       else
4072 	q = &DECL_CHAIN (*q);
4073     }
4074 
4075   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4076   if (TYPE_METHODS (t))
4077     {
4078       tree decl = TYPE_MAIN_DECL (t);
4079 
4080       if (TREE_CODE (t) != UNION_TYPE)
4081 	error_at (DECL_SOURCE_LOCATION (decl),
4082 		  "an anonymous struct cannot have function members");
4083       else
4084 	error_at (DECL_SOURCE_LOCATION (decl),
4085 		  "an anonymous union cannot have function members");
4086     }
4087 
4088   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4089      assignment operators (because they cannot have these methods themselves).
4090      For anonymous unions this is already checked because they are not allowed
4091      in any union, otherwise we have to check it.  */
4092   if (TREE_CODE (t) != UNION_TYPE)
4093     {
4094       tree field, type;
4095 
4096       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4097 	if (TREE_CODE (field) == FIELD_DECL)
4098 	  {
4099 	    type = TREE_TYPE (field);
4100 	    if (CLASS_TYPE_P (type))
4101 	      {
4102 		if (TYPE_NEEDS_CONSTRUCTING (type))
4103 		  error ("member %q+#D with constructor not allowed "
4104 			 "in anonymous aggregate", field);
4105 		if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4106 		  error ("member %q+#D with destructor not allowed "
4107 			 "in anonymous aggregate", field);
4108 		if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4109 		  error ("member %q+#D with copy assignment operator "
4110 			 "not allowed in anonymous aggregate", field);
4111 	      }
4112 	  }
4113     }
4114 }
4115 
4116 /* Make sure that a declaration with no declarator is well-formed, i.e.
4117    just declares a tagged type or anonymous union.
4118 
4119    Returns the type declared; or NULL_TREE if none.  */
4120 
4121 tree
4122 check_tag_decl (cp_decl_specifier_seq *declspecs)
4123 {
4124   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4125   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4126   /* If a class, struct, or enum type is declared by the DECLSPECS
4127      (i.e, if a class-specifier, enum-specifier, or non-typename
4128      elaborated-type-specifier appears in the DECLSPECS),
4129      DECLARED_TYPE is set to the corresponding type.  */
4130   tree declared_type = NULL_TREE;
4131   bool error_p = false;
4132 
4133   if (declspecs->multiple_types_p)
4134     error ("multiple types in one declaration");
4135   else if (declspecs->redefined_builtin_type)
4136     {
4137       if (!in_system_header)
4138 	permerror (input_location, "redeclaration of C++ built-in type %qT",
4139 		   declspecs->redefined_builtin_type);
4140       return NULL_TREE;
4141     }
4142 
4143   if (declspecs->type
4144       && TYPE_P (declspecs->type)
4145       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4146 	   && MAYBE_CLASS_TYPE_P (declspecs->type))
4147 	  || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4148     declared_type = declspecs->type;
4149   else if (declspecs->type == error_mark_node)
4150     error_p = true;
4151   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4152     permerror (input_location, "declaration does not declare anything");
4153   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4154     {
4155       error ("%<auto%> can only be specified for variables "
4156 	     "or function declarations");
4157       return error_mark_node;
4158     }
4159   /* Check for an anonymous union.  */
4160   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4161 	   && TYPE_ANONYMOUS_P (declared_type))
4162     {
4163       /* 7/3 In a simple-declaration, the optional init-declarator-list
4164 	 can be omitted only when declaring a class (clause 9) or
4165 	 enumeration (7.2), that is, when the decl-specifier-seq contains
4166 	 either a class-specifier, an elaborated-type-specifier with
4167 	 a class-key (9.1), or an enum-specifier.  In these cases and
4168 	 whenever a class-specifier or enum-specifier is present in the
4169 	 decl-specifier-seq, the identifiers in these specifiers are among
4170 	 the names being declared by the declaration (as class-name,
4171 	 enum-names, or enumerators, depending on the syntax).  In such
4172 	 cases, and except for the declaration of an unnamed bit-field (9.6),
4173 	 the decl-specifier-seq shall introduce one or more names into the
4174 	 program, or shall redeclare a name introduced by a previous
4175 	 declaration.  [Example:
4176 	     enum { };			// ill-formed
4177 	     typedef class { };		// ill-formed
4178 	 --end example]  */
4179       if (saw_typedef)
4180 	{
4181 	  error ("missing type-name in typedef-declaration");
4182 	  return NULL_TREE;
4183 	}
4184       /* Anonymous unions are objects, so they can have specifiers.  */;
4185       SET_ANON_AGGR_TYPE_P (declared_type);
4186 
4187       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4188 	pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4189     }
4190 
4191   else
4192     {
4193       if (declspecs->specs[(int)ds_inline]
4194 	  || declspecs->specs[(int)ds_virtual])
4195 	error ("%qs can only be specified for functions",
4196 	       declspecs->specs[(int)ds_inline]
4197 	       ? "inline" : "virtual");
4198       else if (saw_friend
4199 	       && (!current_class_type
4200 		   || current_scope () != current_class_type))
4201 	error ("%<friend%> can only be specified inside a class");
4202       else if (declspecs->specs[(int)ds_explicit])
4203 	error ("%<explicit%> can only be specified for constructors");
4204       else if (declspecs->storage_class)
4205 	error ("a storage class can only be specified for objects "
4206 	       "and functions");
4207       else if (declspecs->specs[(int)ds_const]
4208 	       || declspecs->specs[(int)ds_volatile]
4209 	       || declspecs->specs[(int)ds_restrict]
4210 	       || declspecs->specs[(int)ds_thread])
4211 	error ("qualifiers can only be specified for objects "
4212 	       "and functions");
4213       else if (saw_typedef)
4214 	warning (0, "%<typedef%> was ignored in this declaration");
4215       else if (declspecs->specs[(int) ds_constexpr])
4216         error ("%<constexpr%> cannot be used for type declarations");
4217     }
4218 
4219   if (declspecs->attributes && declared_type)
4220     {
4221       location_t loc = input_location;
4222       if (!CLASS_TYPE_P (declared_type)
4223 	  || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4224 	/* For a non-template class, use the name location; for a template
4225 	   class (an explicit instantiation), use the current location.  */
4226 	input_location = location_of (declared_type);
4227       warning (0, "attribute ignored in declaration of %q#T", declared_type);
4228       warning (0, "attribute for %q#T must follow the %qs keyword",
4229 	       declared_type, class_key_or_enum_as_string (declared_type));
4230       input_location = loc;
4231     }
4232 
4233   return declared_type;
4234 }
4235 
4236 /* Called when a declaration is seen that contains no names to declare.
4237    If its type is a reference to a structure, union or enum inherited
4238    from a containing scope, shadow that tag name for the current scope
4239    with a forward reference.
4240    If its type defines a new named structure or union
4241    or defines an enum, it is valid but we need not do anything here.
4242    Otherwise, it is an error.
4243 
4244    C++: may have to grok the declspecs to learn about static,
4245    complain for anonymous unions.
4246 
4247    Returns the TYPE declared -- or NULL_TREE if none.  */
4248 
4249 tree
4250 shadow_tag (cp_decl_specifier_seq *declspecs)
4251 {
4252   tree t = check_tag_decl (declspecs);
4253 
4254   if (!t)
4255     return NULL_TREE;
4256 
4257   if (maybe_process_partial_specialization (t) == error_mark_node)
4258     return NULL_TREE;
4259 
4260   /* This is where the variables in an anonymous union are
4261      declared.  An anonymous union declaration looks like:
4262      union { ... } ;
4263      because there is no declarator after the union, the parser
4264      sends that declaration here.  */
4265   if (ANON_AGGR_TYPE_P (t))
4266     {
4267       fixup_anonymous_aggr (t);
4268 
4269       if (TYPE_FIELDS (t))
4270 	{
4271 	  tree decl = grokdeclarator (/*declarator=*/NULL,
4272 				      declspecs, NORMAL, 0, NULL);
4273 	  finish_anon_union (decl);
4274 	}
4275     }
4276 
4277   return t;
4278 }
4279 
4280 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4281 
4282 tree
4283 groktypename (cp_decl_specifier_seq *type_specifiers,
4284 	      const cp_declarator *declarator,
4285 	      bool is_template_arg)
4286 {
4287   tree attrs;
4288   tree type;
4289   enum decl_context context
4290     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4291   attrs = type_specifiers->attributes;
4292   type_specifiers->attributes = NULL_TREE;
4293   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4294   if (attrs && type != error_mark_node)
4295     {
4296       if (CLASS_TYPE_P (type))
4297 	warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4298 		 "outside of definition", type);
4299       else if (MAYBE_CLASS_TYPE_P (type))
4300 	/* A template type parameter or other dependent type.  */
4301 	warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4302 		 "type %qT without an associated declaration", type);
4303       else
4304 	cplus_decl_attributes (&type, attrs, 0);
4305     }
4306   return type;
4307 }
4308 
4309 /* Process a DECLARATOR for a function-scope variable declaration,
4310    namespace-scope variable declaration, or function declaration.
4311    (Function definitions go through start_function; class member
4312    declarations appearing in the body of the class go through
4313    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4314    If an error occurs, the error_mark_node is returned instead.
4315 
4316    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4317    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4318    for an explicitly defaulted function, or SD_DELETED for an explicitly
4319    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4320    implicitly initialized via a default constructor.  ATTRIBUTES and
4321    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4322 
4323    The scope represented by the context of the returned DECL is pushed
4324    (if it is not the global namespace) and is assigned to
4325    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4326    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4327 
4328 tree
4329 start_decl (const cp_declarator *declarator,
4330 	    cp_decl_specifier_seq *declspecs,
4331 	    int initialized,
4332 	    tree attributes,
4333 	    tree prefix_attributes,
4334 	    tree *pushed_scope_p)
4335 {
4336   tree decl;
4337   tree context;
4338   bool was_public;
4339   int flags;
4340   bool alias;
4341 
4342   *pushed_scope_p = NULL_TREE;
4343 
4344   /* An object declared as __attribute__((deprecated)) suppresses
4345      warnings of uses of other deprecated items.  */
4346   if (lookup_attribute ("deprecated", attributes))
4347     deprecated_state = DEPRECATED_SUPPRESS;
4348 
4349   attributes = chainon (attributes, prefix_attributes);
4350 
4351   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4352 			 &attributes);
4353 
4354   deprecated_state = DEPRECATED_NORMAL;
4355 
4356   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4357       || decl == error_mark_node)
4358     return error_mark_node;
4359 
4360   context = CP_DECL_CONTEXT (decl);
4361   if (context != global_namespace)
4362     *pushed_scope_p = push_scope (context);
4363 
4364   if (initialized)
4365     /* Is it valid for this decl to have an initializer at all?
4366        If not, set INITIALIZED to zero, which will indirectly
4367        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4368     switch (TREE_CODE (decl))
4369       {
4370       case TYPE_DECL:
4371 	error ("typedef %qD is initialized (use decltype instead)", decl);
4372 	return error_mark_node;
4373 
4374       case FUNCTION_DECL:
4375 	if (initialized == SD_DELETED)
4376 	  /* We'll handle the rest of the semantics later, but we need to
4377 	     set this now so it's visible to duplicate_decls.  */
4378 	  DECL_DELETED_FN (decl) = 1;
4379 	break;
4380 
4381       default:
4382 	break;
4383       }
4384 
4385   if (initialized)
4386     {
4387       if (! toplevel_bindings_p ()
4388 	  && DECL_EXTERNAL (decl))
4389 	warning (0, "declaration of %q#D has %<extern%> and is initialized",
4390 		 decl);
4391       DECL_EXTERNAL (decl) = 0;
4392       if (toplevel_bindings_p ())
4393 	TREE_STATIC (decl) = 1;
4394     }
4395   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4396 
4397   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4398     record_key_method_defined (decl);
4399 
4400   /* If this is a typedef that names the class for linkage purposes
4401      (7.1.3p8), apply any attributes directly to the type.  */
4402   if (TREE_CODE (decl) == TYPE_DECL
4403       && TAGGED_TYPE_P (TREE_TYPE (decl))
4404       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4405     flags = ATTR_FLAG_TYPE_IN_PLACE;
4406   else
4407     flags = 0;
4408 
4409   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4410   cplus_decl_attributes (&decl, attributes, flags);
4411 
4412   /* Dllimported symbols cannot be defined.  Static data members (which
4413      can be initialized in-class and dllimported) go through grokfield,
4414      not here, so we don't need to exclude those decls when checking for
4415      a definition.  */
4416   if (initialized && DECL_DLLIMPORT_P (decl))
4417     {
4418       error ("definition of %q#D is marked %<dllimport%>", decl);
4419       DECL_DLLIMPORT_P (decl) = 0;
4420     }
4421 
4422   /* If #pragma weak was used, mark the decl weak now.  */
4423   if (!processing_template_decl)
4424     maybe_apply_pragma_weak (decl);
4425 
4426   if (TREE_CODE (decl) == FUNCTION_DECL
4427       && DECL_DECLARED_INLINE_P (decl)
4428       && DECL_UNINLINABLE (decl)
4429       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4430     warning (0, "inline function %q+D given attribute noinline", decl);
4431 
4432   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4433     {
4434       if (TREE_CODE (decl) == VAR_DECL)
4435 	{
4436 	  tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4437 	  if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4438 	    error ("%q#D is not a static member of %q#T", decl, context);
4439 	  else
4440 	    {
4441 	      if (DECL_CONTEXT (field) != context)
4442 		{
4443 		  if (!same_type_p (DECL_CONTEXT (field), context))
4444 		    permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4445 			       "to be defined as %<%T::%D%>",
4446 			       DECL_CONTEXT (field), DECL_NAME (decl),
4447 			       context, DECL_NAME (decl));
4448 		  DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4449 		}
4450 	      if (processing_specialization
4451 		  && template_class_depth (context) == 0
4452 		  && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4453 		error ("template header not allowed in member definition "
4454 		       "of explicitly specialized class");
4455 	      /* Static data member are tricky; an in-class initialization
4456 		 still doesn't provide a definition, so the in-class
4457 		 declaration will have DECL_EXTERNAL set, but will have an
4458 		 initialization.  Thus, duplicate_decls won't warn
4459 		 about this situation, and so we check here.  */
4460 	      if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4461 		error ("duplicate initialization of %qD", decl);
4462 	      if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4463 		decl = field;
4464               if (declspecs->specs[(int) ds_constexpr]
4465                   && !DECL_DECLARED_CONSTEXPR_P (field))
4466                 error ("%qD declared %<constexpr%> outside its class", field);
4467 	    }
4468 	}
4469       else
4470 	{
4471 	  tree field = check_classfn (context, decl,
4472 				      (processing_template_decl
4473 				       > template_class_depth (context))
4474 				      ? current_template_parms
4475 				      : NULL_TREE);
4476 	  if (field && field != error_mark_node
4477 	      && duplicate_decls (decl, field,
4478 				 /*newdecl_is_friend=*/false))
4479 	    decl = field;
4480 	}
4481 
4482       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4483       DECL_IN_AGGR_P (decl) = 0;
4484       /* Do not mark DECL as an explicit specialization if it was not
4485 	 already marked as an instantiation; a declaration should
4486 	 never be marked as a specialization unless we know what
4487 	 template is being specialized.  */
4488       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4489 	{
4490 	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4491 
4492 	  /* [temp.expl.spec] An explicit specialization of a static data
4493 	     member of a template is a definition if the declaration
4494 	     includes an initializer; otherwise, it is a declaration.
4495 
4496 	     We check for processing_specialization so this only applies
4497 	     to the new specialization syntax.  */
4498 	  if (!initialized && processing_specialization)
4499 	    DECL_EXTERNAL (decl) = 1;
4500 	}
4501 
4502       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4503 	  /* Aliases are definitions. */
4504 	  && !alias)
4505 	permerror (input_location, "declaration of %q#D outside of class is not definition",
4506 		   decl);
4507     }
4508 
4509   was_public = TREE_PUBLIC (decl);
4510 
4511   /* Enter this declaration into the symbol table.  */
4512   decl = maybe_push_decl (decl);
4513 
4514   if (processing_template_decl)
4515     decl = push_template_decl (decl);
4516   if (decl == error_mark_node)
4517     return error_mark_node;
4518 
4519   /* Tell the back end to use or not use .common as appropriate.  If we say
4520      -fconserve-space, we want this to save .data space, at the expense of
4521      wrong semantics.  If we say -fno-conserve-space, we want this to
4522      produce errors about redefs; to do this we force variables into the
4523      data segment.  */
4524   if (flag_conserve_space
4525       && TREE_CODE (decl) == VAR_DECL
4526       && TREE_PUBLIC (decl)
4527       && !DECL_THREAD_LOCAL_P (decl)
4528       && !have_global_bss_p ())
4529     DECL_COMMON (decl) = 1;
4530 
4531   if (TREE_CODE (decl) == VAR_DECL
4532       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4533       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4534     {
4535       /* This is a const variable with implicit 'static'.  Set
4536 	 DECL_THIS_STATIC so we can tell it from variables that are
4537 	 !TREE_PUBLIC because of the anonymous namespace.  */
4538       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4539       DECL_THIS_STATIC (decl) = 1;
4540     }
4541 
4542   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4543     start_decl_1 (decl, initialized);
4544 
4545   return decl;
4546 }
4547 
4548 /* Process the declaration of a variable DECL.  INITIALIZED is true
4549    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4550    variable is initialized via an implicitly-called constructor.)
4551    This function must be called for ordinary variables (including, for
4552    example, implicit instantiations of templates), but must not be
4553    called for template declarations.  */
4554 
4555 void
4556 start_decl_1 (tree decl, bool initialized)
4557 {
4558   tree type;
4559   bool complete_p;
4560   bool aggregate_definition_p;
4561 
4562   gcc_assert (!processing_template_decl);
4563 
4564   if (error_operand_p (decl))
4565     return;
4566 
4567   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4568 
4569   type = TREE_TYPE (decl);
4570   complete_p = COMPLETE_TYPE_P (type);
4571   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4572 
4573   /* If an explicit initializer is present, or if this is a definition
4574      of an aggregate, then we need a complete type at this point.
4575      (Scalars are always complete types, so there is nothing to
4576      check.)  This code just sets COMPLETE_P; errors (if necessary)
4577      are issued below.  */
4578   if ((initialized || aggregate_definition_p)
4579       && !complete_p
4580       && COMPLETE_TYPE_P (complete_type (type)))
4581     {
4582       complete_p = true;
4583       /* We will not yet have set TREE_READONLY on DECL if the type
4584 	 was "const", but incomplete, before this point.  But, now, we
4585 	 have a complete type, so we can try again.  */
4586       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4587     }
4588 
4589   if (initialized)
4590     /* Is it valid for this decl to have an initializer at all?  */
4591     {
4592       /* Don't allow initializations for incomplete types except for
4593 	 arrays which might be completed by the initialization.  */
4594       if (complete_p)
4595 	;			/* A complete type is ok.  */
4596       else if (type_uses_auto (type))
4597 	; 			/* An auto type is ok.  */
4598       else if (TREE_CODE (type) != ARRAY_TYPE)
4599 	{
4600 	  error ("variable %q#D has initializer but incomplete type", decl);
4601 	  type = TREE_TYPE (decl) = error_mark_node;
4602 	}
4603       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4604 	{
4605 	  if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4606 	    error ("elements of array %q#D have incomplete type", decl);
4607 	  /* else we already gave an error in start_decl.  */
4608 	}
4609     }
4610   else if (aggregate_definition_p && !complete_p)
4611     {
4612       if (type_uses_auto (type))
4613 	error ("declaration of %q#D has no initializer", decl);
4614       else
4615 	error ("aggregate %q#D has incomplete type and cannot be defined",
4616 	       decl);
4617       /* Change the type so that assemble_variable will give
4618 	 DECL an rtl we can live with: (mem (const_int 0)).  */
4619       type = TREE_TYPE (decl) = error_mark_node;
4620     }
4621 
4622   /* Create a new scope to hold this declaration if necessary.
4623      Whether or not a new scope is necessary cannot be determined
4624      until after the type has been completed; if the type is a
4625      specialization of a class template it is not until after
4626      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4627      will be set correctly.  */
4628   maybe_push_cleanup_level (type);
4629 }
4630 
4631 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4632    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4633    but will be set to a new CLEANUP_STMT if a temporary is created
4634    that must be destroyed subsequently.
4635 
4636    Returns an initializer expression to use to initialize DECL, or
4637    NULL if the initialization can be performed statically.
4638 
4639    Quotes on semantics can be found in ARM 8.4.3.  */
4640 
4641 static tree
4642 grok_reference_init (tree decl, tree type, tree init, int flags)
4643 {
4644   if (init == NULL_TREE)
4645     {
4646       if ((DECL_LANG_SPECIFIC (decl) == 0
4647 	   || DECL_IN_AGGR_P (decl) == 0)
4648 	  && ! DECL_THIS_EXTERN (decl))
4649 	error ("%qD declared as reference but not initialized", decl);
4650       return NULL_TREE;
4651     }
4652 
4653   if (TREE_CODE (init) == TREE_LIST)
4654     init = build_x_compound_expr_from_list (init, ELK_INIT,
4655 					    tf_warning_or_error);
4656 
4657   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4658       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4659     /* Note: default conversion is only called in very special cases.  */
4660     init = decay_conversion (init);
4661 
4662   /* Convert INIT to the reference type TYPE.  This may involve the
4663      creation of a temporary, whose lifetime must be the same as that
4664      of the reference.  If so, a DECL_EXPR for the temporary will be
4665      added just after the DECL_EXPR for DECL.  That's why we don't set
4666      DECL_INITIAL for local references (instead assigning to them
4667      explicitly); we need to allow the temporary to be initialized
4668      first.  */
4669   return initialize_reference (type, init, flags,
4670 			       tf_warning_or_error);
4671 }
4672 
4673 /* Designated initializers in arrays are not supported in GNU C++.
4674    The parser cannot detect this error since it does not know whether
4675    a given brace-enclosed initializer is for a class type or for an
4676    array.  This function checks that CE does not use a designated
4677    initializer.  If it does, an error is issued.  Returns true if CE
4678    is valid, i.e., does not have a designated initializer.  */
4679 
4680 static bool
4681 check_array_designated_initializer (const constructor_elt *ce,
4682 				    unsigned HOST_WIDE_INT index)
4683 {
4684   /* Designated initializers for array elements are not supported.  */
4685   if (ce->index)
4686     {
4687       /* The parser only allows identifiers as designated
4688 	 initializers.  */
4689       if (ce->index == error_mark_node)
4690 	error ("name used in a GNU-style designated "
4691 	       "initializer for an array");
4692       else if (TREE_CODE (ce->index) == INTEGER_CST)
4693 	{
4694 	  /* A C99 designator is OK if it matches the current index.  */
4695 	  if (TREE_INT_CST_LOW (ce->index) == index)
4696 	    return true;
4697 	  else
4698 	    sorry ("non-trivial designated initializers not supported");
4699 	}
4700       else
4701 	{
4702 	  gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4703 	  error ("name %qD used in a GNU-style designated "
4704 		 "initializer for an array", ce->index);
4705 	}
4706       return false;
4707     }
4708 
4709   return true;
4710 }
4711 
4712 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4713    array until we finish parsing the initializer.  If that's the
4714    situation we're in, update DECL accordingly.  */
4715 
4716 static void
4717 maybe_deduce_size_from_array_init (tree decl, tree init)
4718 {
4719   tree type = TREE_TYPE (decl);
4720 
4721   if (TREE_CODE (type) == ARRAY_TYPE
4722       && TYPE_DOMAIN (type) == NULL_TREE
4723       && TREE_CODE (decl) != TYPE_DECL)
4724     {
4725       /* do_default is really a C-ism to deal with tentative definitions.
4726 	 But let's leave it here to ease the eventual merge.  */
4727       int do_default = !DECL_EXTERNAL (decl);
4728       tree initializer = init ? init : DECL_INITIAL (decl);
4729       int failure = 0;
4730 
4731       /* Check that there are no designated initializers in INIT, as
4732 	 those are not supported in GNU C++, and as the middle-end
4733 	 will crash if presented with a non-numeric designated
4734 	 initializer.  */
4735       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4736 	{
4737 	  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4738 	  constructor_elt *ce;
4739 	  HOST_WIDE_INT i;
4740 	  FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4741 	    if (!check_array_designated_initializer (ce, i))
4742 	      failure = 1;
4743 	}
4744 
4745       if (!failure)
4746 	{
4747 	  failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4748 					    do_default);
4749 	  if (failure == 1)
4750 	    {
4751 	      error ("initializer fails to determine size of %qD", decl);
4752 	      TREE_TYPE (decl) = error_mark_node;
4753 	    }
4754 	  else if (failure == 2)
4755 	    {
4756 	      if (do_default)
4757 		{
4758 		  error ("array size missing in %qD", decl);
4759 		  TREE_TYPE (decl) = error_mark_node;
4760 		}
4761 	      /* If a `static' var's size isn't known, make it extern as
4762 		 well as static, so it does not get allocated.  If it's not
4763 		 `static', then don't mark it extern; finish_incomplete_decl
4764 		 will give it a default size and it will get allocated.  */
4765 	      else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4766 		DECL_EXTERNAL (decl) = 1;
4767 	    }
4768 	  else if (failure == 3)
4769 	    {
4770 	      error ("zero-size array %qD", decl);
4771 	      TREE_TYPE (decl) = error_mark_node;
4772 	    }
4773 	}
4774 
4775       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4776 
4777       relayout_decl (decl);
4778     }
4779 }
4780 
4781 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4782    any appropriate error messages regarding the layout.  */
4783 
4784 static void
4785 layout_var_decl (tree decl)
4786 {
4787   tree type;
4788 
4789   type = TREE_TYPE (decl);
4790   if (type == error_mark_node)
4791     return;
4792 
4793   /* If we haven't already layed out this declaration, do so now.
4794      Note that we must not call complete type for an external object
4795      because it's type might involve templates that we are not
4796      supposed to instantiate yet.  (And it's perfectly valid to say
4797      `extern X x' for some incomplete type `X'.)  */
4798   if (!DECL_EXTERNAL (decl))
4799     complete_type (type);
4800   if (!DECL_SIZE (decl)
4801       && TREE_TYPE (decl) != error_mark_node
4802       && (COMPLETE_TYPE_P (type)
4803 	  || (TREE_CODE (type) == ARRAY_TYPE
4804 	      && !TYPE_DOMAIN (type)
4805 	      && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4806     layout_decl (decl, 0);
4807 
4808   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4809     {
4810       /* An automatic variable with an incomplete type: that is an error.
4811 	 Don't talk about array types here, since we took care of that
4812 	 message in grokdeclarator.  */
4813       error ("storage size of %qD isn%'t known", decl);
4814       TREE_TYPE (decl) = error_mark_node;
4815     }
4816 #if 0
4817   /* Keep this code around in case we later want to control debug info
4818      based on whether a type is "used".  (jason 1999-11-11) */
4819 
4820   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4821     /* Let debugger know it should output info for this type.  */
4822     note_debug_info_needed (ttype);
4823 
4824   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4825     note_debug_info_needed (DECL_CONTEXT (decl));
4826 #endif
4827 
4828   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4829       && DECL_SIZE (decl) != NULL_TREE
4830       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4831     {
4832       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4833 	constant_expression_warning (DECL_SIZE (decl));
4834       else
4835 	{
4836 	  error ("storage size of %qD isn%'t constant", decl);
4837 	  TREE_TYPE (decl) = error_mark_node;
4838 	}
4839     }
4840 }
4841 
4842 /* If a local static variable is declared in an inline function, or if
4843    we have a weak definition, we must endeavor to create only one
4844    instance of the variable at link-time.  */
4845 
4846 void
4847 maybe_commonize_var (tree decl)
4848 {
4849   /* Static data in a function with comdat linkage also has comdat
4850      linkage.  */
4851   if (TREE_STATIC (decl)
4852       /* Don't mess with __FUNCTION__.  */
4853       && ! DECL_ARTIFICIAL (decl)
4854       && DECL_FUNCTION_SCOPE_P (decl)
4855       && vague_linkage_p (DECL_CONTEXT (decl)))
4856     {
4857       if (flag_weak)
4858 	{
4859 	  /* With weak symbols, we simply make the variable COMDAT;
4860 	     that will cause copies in multiple translations units to
4861 	     be merged.  */
4862 	  comdat_linkage (decl);
4863 	}
4864       else
4865 	{
4866 	  if (DECL_INITIAL (decl) == NULL_TREE
4867 	      || DECL_INITIAL (decl) == error_mark_node)
4868 	    {
4869 	      /* Without weak symbols, we can use COMMON to merge
4870 		 uninitialized variables.  */
4871 	      TREE_PUBLIC (decl) = 1;
4872 	      DECL_COMMON (decl) = 1;
4873 	    }
4874 	  else
4875 	    {
4876 	      /* While for initialized variables, we must use internal
4877 		 linkage -- which means that multiple copies will not
4878 		 be merged.  */
4879 	      TREE_PUBLIC (decl) = 0;
4880 	      DECL_COMMON (decl) = 0;
4881 	      warning_at (input_location, 0,
4882 			  "sorry: semantics of inline function static "
4883 			  "data %q+#D are wrong (you%'ll wind up "
4884 			  "with multiple copies)", decl);
4885 	      warning_at (DECL_SOURCE_LOCATION (decl), 0,
4886 			  "  you can work around this by removing "
4887 			  "the initializer");
4888 	    }
4889 	}
4890     }
4891   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4892     /* Set it up again; we might have set DECL_INITIAL since the last
4893        time.  */
4894     comdat_linkage (decl);
4895 }
4896 
4897 /* Issue an error message if DECL is an uninitialized const variable.  */
4898 
4899 static void
4900 check_for_uninitialized_const_var (tree decl)
4901 {
4902   tree type = strip_array_types (TREE_TYPE (decl));
4903 
4904   /* ``Unless explicitly declared extern, a const object does not have
4905      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4906      7.1.6 */
4907   if (TREE_CODE (decl) == VAR_DECL
4908       && TREE_CODE (type) != REFERENCE_TYPE
4909       && CP_TYPE_CONST_P (type)
4910       && !DECL_INITIAL (decl))
4911     {
4912       tree field = default_init_uninitialized_part (type);
4913       if (!field)
4914 	return;
4915 
4916       permerror (DECL_SOURCE_LOCATION (decl),
4917 		 "uninitialized const %qD", decl);
4918 
4919       if (CLASS_TYPE_P (type))
4920 	{
4921 	  tree defaulted_ctor;
4922 
4923 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4924 		  "%q#T has no user-provided default constructor", type);
4925 	  defaulted_ctor = in_class_defaulted_default_constructor (type);
4926 	  if (defaulted_ctor)
4927 	    inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4928 		    "constructor is not user-provided because it is "
4929 		    "explicitly defaulted in the class body");
4930 	  inform (0, "and the implicitly-defined constructor does not "
4931 		  "initialize %q+#D", field);
4932 	}
4933     }
4934 }
4935 
4936 /* Structure holding the current initializer being processed by reshape_init.
4937    CUR is a pointer to the current element being processed, END is a pointer
4938    after the last element present in the initializer.  */
4939 typedef struct reshape_iterator_t
4940 {
4941   constructor_elt *cur;
4942   constructor_elt *end;
4943 } reshape_iter;
4944 
4945 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4946 
4947 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4948    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4949    initialized.  If there are no more such fields, the return value
4950    will be NULL.  */
4951 
4952 tree
4953 next_initializable_field (tree field)
4954 {
4955   while (field
4956 	 && (TREE_CODE (field) != FIELD_DECL
4957 	     || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4958 	     || DECL_ARTIFICIAL (field)))
4959     field = DECL_CHAIN (field);
4960 
4961   return field;
4962 }
4963 
4964 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4965    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4966    INTEGER_CST representing the size of the array minus one (the maximum index),
4967    or NULL_TREE if the array was declared without specifying the size. D is
4968    the iterator within the constructor.  */
4969 
4970 static tree
4971 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4972 		      tsubst_flags_t complain)
4973 {
4974   tree new_init;
4975   bool sized_array_p = (max_index != NULL_TREE);
4976   unsigned HOST_WIDE_INT max_index_cst = 0;
4977   unsigned HOST_WIDE_INT index;
4978 
4979   /* The initializer for an array is always a CONSTRUCTOR.  */
4980   new_init = build_constructor (init_list_type_node, NULL);
4981 
4982   if (sized_array_p)
4983     {
4984       /* Minus 1 is used for zero sized arrays.  */
4985       if (integer_all_onesp (max_index))
4986 	return new_init;
4987 
4988       if (host_integerp (max_index, 1))
4989 	max_index_cst = tree_low_cst (max_index, 1);
4990       /* sizetype is sign extended, not zero extended.  */
4991       else
4992 	max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4993 				      1);
4994     }
4995 
4996   /* Loop until there are no more initializers.  */
4997   for (index = 0;
4998        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4999        ++index)
5000     {
5001       tree elt_init;
5002 
5003       check_array_designated_initializer (d->cur, index);
5004       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5005 				 complain);
5006       if (elt_init == error_mark_node)
5007 	return error_mark_node;
5008       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5009 			      size_int (index), elt_init);
5010       if (!TREE_CONSTANT (elt_init))
5011 	TREE_CONSTANT (new_init) = false;
5012     }
5013 
5014   return new_init;
5015 }
5016 
5017 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5018    Parameters are the same of reshape_init_r.  */
5019 
5020 static tree
5021 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5022 {
5023   tree max_index = NULL_TREE;
5024 
5025   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5026 
5027   if (TYPE_DOMAIN (type))
5028     max_index = array_type_nelts (type);
5029 
5030   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5031 }
5032 
5033 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5034    Parameters are the same of reshape_init_r.  */
5035 
5036 static tree
5037 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5038 {
5039   tree max_index = NULL_TREE;
5040 
5041   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5042 
5043   if (COMPOUND_LITERAL_P (d->cur->value))
5044     {
5045       tree value = d->cur->value;
5046       if (!same_type_p (TREE_TYPE (value), type))
5047 	{
5048 	  if (complain & tf_error)
5049 	    error ("invalid type %qT as initializer for a vector of type %qT",
5050 		   TREE_TYPE (d->cur->value), type);
5051 	  value = error_mark_node;
5052 	}
5053       ++d->cur;
5054       return value;
5055     }
5056 
5057   /* For a vector, we initialize it as an array of the appropriate size.  */
5058   if (TREE_CODE (type) == VECTOR_TYPE)
5059     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5060 
5061   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5062 }
5063 
5064 /* Subroutine of reshape_init_r, processes the initializers for classes
5065    or union. Parameters are the same of reshape_init_r.  */
5066 
5067 static tree
5068 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5069 		    tsubst_flags_t complain)
5070 {
5071   tree field;
5072   tree new_init;
5073 
5074   gcc_assert (CLASS_TYPE_P (type));
5075 
5076   /* The initializer for a class is always a CONSTRUCTOR.  */
5077   new_init = build_constructor (init_list_type_node, NULL);
5078   field = next_initializable_field (TYPE_FIELDS (type));
5079 
5080   if (!field)
5081     {
5082       /* [dcl.init.aggr]
5083 
5084 	An initializer for an aggregate member that is an
5085 	empty class shall have the form of an empty
5086 	initializer-list {}.  */
5087       if (!first_initializer_p)
5088 	{
5089 	  if (complain & tf_error)
5090 	    error ("initializer for %qT must be brace-enclosed", type);
5091 	  return error_mark_node;
5092 	}
5093       return new_init;
5094     }
5095 
5096   /* Loop through the initializable fields, gathering initializers.  */
5097   while (d->cur != d->end)
5098     {
5099       tree field_init;
5100 
5101       /* Handle designated initializers, as an extension.  */
5102       if (d->cur->index)
5103 	{
5104 	  if (TREE_CODE (d->cur->index) == INTEGER_CST)
5105 	    {
5106 	      if (complain & tf_error)
5107 		error ("%<[%E] =%> used in a GNU-style designated initializer"
5108 		       " for class %qT", d->cur->index, type);
5109 	      return error_mark_node;
5110 	    }
5111 
5112 	  field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5113 
5114 	  if (!field || TREE_CODE (field) != FIELD_DECL)
5115 	    {
5116 	      if (complain & tf_error)
5117 		error ("%qT has no non-static data member named %qD", type,
5118 		       d->cur->index);
5119 	      return error_mark_node;
5120 	    }
5121 	}
5122 
5123       /* If we processed all the member of the class, we are done.  */
5124       if (!field)
5125 	break;
5126 
5127       field_init = reshape_init_r (TREE_TYPE (field), d,
5128 				   /*first_initializer_p=*/false, complain);
5129       if (field_init == error_mark_node)
5130 	return error_mark_node;
5131 
5132       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5133 
5134       /* [dcl.init.aggr]
5135 
5136 	When a union  is  initialized with a brace-enclosed
5137 	initializer, the braces shall only contain an
5138 	initializer for the first member of the union.  */
5139       if (TREE_CODE (type) == UNION_TYPE)
5140 	break;
5141 
5142       field = next_initializable_field (DECL_CHAIN (field));
5143     }
5144 
5145   return new_init;
5146 }
5147 
5148 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5149    designators are not valid; either complain or return true to indicate
5150    that reshape_init_r should return error_mark_node.  */
5151 
5152 static bool
5153 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5154 {
5155   if (d->cur->index)
5156     {
5157       if (complain & tf_error)
5158 	error ("C99 designator %qE outside aggregate initializer",
5159 	       d->cur->index);
5160       else
5161 	return true;
5162     }
5163   return false;
5164 }
5165 
5166 /* Subroutine of reshape_init, which processes a single initializer (part of
5167    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5168    iterator within the CONSTRUCTOR which points to the initializer to process.
5169    FIRST_INITIALIZER_P is true if this is the first initializer of the
5170    outermost CONSTRUCTOR node.  */
5171 
5172 static tree
5173 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5174 		tsubst_flags_t complain)
5175 {
5176   tree init = d->cur->value;
5177 
5178   if (error_operand_p (init))
5179     return error_mark_node;
5180 
5181   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5182       && has_designator_problem (d, complain))
5183     return error_mark_node;
5184 
5185   if (TREE_CODE (type) == COMPLEX_TYPE)
5186     {
5187       /* A complex type can be initialized from one or two initializers,
5188 	 but braces are not elided.  */
5189       d->cur++;
5190       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5191 	{
5192 	  if (CONSTRUCTOR_NELTS (init) > 2)
5193 	    {
5194 	      if (complain & tf_error)
5195 		error ("too many initializers for %qT", type);
5196 	      else
5197 		return error_mark_node;
5198 	    }
5199 	}
5200       else if (first_initializer_p && d->cur != d->end)
5201 	{
5202 	  VEC(constructor_elt, gc) *v = 0;
5203 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5204 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5205 	  if (has_designator_problem (d, complain))
5206 	    return error_mark_node;
5207 	  d->cur++;
5208 	  init = build_constructor (init_list_type_node, v);
5209 	}
5210       return init;
5211     }
5212 
5213   /* A non-aggregate type is always initialized with a single
5214      initializer.  */
5215   if (!CP_AGGREGATE_TYPE_P (type))
5216     {
5217       /* It is invalid to initialize a non-aggregate type with a
5218 	 brace-enclosed initializer before C++0x.
5219 	 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5220 	 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5221 	 a CONSTRUCTOR (with a record type).  */
5222       if (TREE_CODE (init) == CONSTRUCTOR
5223 	  && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5224 	{
5225 	  if (SCALAR_TYPE_P (type))
5226 	    {
5227 	      if (complain & tf_error)
5228 		error ("braces around scalar initializer for type %qT", type);
5229 	      init = error_mark_node;
5230 	    }
5231 	  else
5232 	    maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5233 	}
5234 
5235       d->cur++;
5236       return init;
5237     }
5238 
5239   /* [dcl.init.aggr]
5240 
5241      All implicit type conversions (clause _conv_) are considered when
5242      initializing the aggregate member with an initializer from an
5243      initializer-list.  If the initializer can initialize a member,
5244      the member is initialized.  Otherwise, if the member is itself a
5245      non-empty subaggregate, brace elision is assumed and the
5246      initializer is considered for the initialization of the first
5247      member of the subaggregate.  */
5248   if (TREE_CODE (init) != CONSTRUCTOR
5249       /* But don't try this for the first initializer, since that would be
5250 	 looking through the outermost braces; A a2 = { a1 }; is not a
5251 	 valid aggregate initialization.  */
5252       && !first_initializer_p
5253       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5254 	  || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5255     {
5256       d->cur++;
5257       return init;
5258     }
5259 
5260   /* [dcl.init.string]
5261 
5262       A char array (whether plain char, signed char, or unsigned char)
5263       can be initialized by a string-literal (optionally enclosed in
5264       braces); a wchar_t array can be initialized by a wide
5265       string-literal (optionally enclosed in braces).  */
5266   if (TREE_CODE (type) == ARRAY_TYPE
5267       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5268     {
5269       tree str_init = init;
5270 
5271       /* Strip one level of braces if and only if they enclose a single
5272 	 element (as allowed by [dcl.init.string]).  */
5273       if (!first_initializer_p
5274 	  && TREE_CODE (str_init) == CONSTRUCTOR
5275 	  && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5276 	{
5277 	  str_init = VEC_index (constructor_elt,
5278 				CONSTRUCTOR_ELTS (str_init), 0)->value;
5279 	}
5280 
5281       /* If it's a string literal, then it's the initializer for the array
5282 	 as a whole. Otherwise, continue with normal initialization for
5283 	 array types (one value per array element).  */
5284       if (TREE_CODE (str_init) == STRING_CST)
5285 	{
5286 	  if (has_designator_problem (d, complain))
5287 	    return error_mark_node;
5288 	  d->cur++;
5289 	  return str_init;
5290 	}
5291     }
5292 
5293   /* The following cases are about aggregates. If we are not within a full
5294      initializer already, and there is not a CONSTRUCTOR, it means that there
5295      is a missing set of braces (that is, we are processing the case for
5296      which reshape_init exists).  */
5297   if (!first_initializer_p)
5298     {
5299       if (TREE_CODE (init) == CONSTRUCTOR)
5300 	{
5301 	  if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5302 	    /* There is no need to reshape pointer-to-member function
5303 	       initializers, as they are always constructed correctly
5304 	       by the front end.  */
5305            ;
5306 	  else if (COMPOUND_LITERAL_P (init))
5307 	  /* For a nested compound literal, there is no need to reshape since
5308 	     brace elision is not allowed. Even if we decided to allow it,
5309 	     we should add a call to reshape_init in finish_compound_literal,
5310 	     before calling digest_init, so changing this code would still
5311 	     not be necessary.  */
5312 	    gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5313 	  else
5314 	    {
5315 	      ++d->cur;
5316 	      gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5317 	      return reshape_init (type, init, complain);
5318 	    }
5319 	}
5320 
5321       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5322 	       type);
5323     }
5324 
5325   /* Dispatch to specialized routines.  */
5326   if (CLASS_TYPE_P (type))
5327     return reshape_init_class (type, d, first_initializer_p, complain);
5328   else if (TREE_CODE (type) == ARRAY_TYPE)
5329     return reshape_init_array (type, d, complain);
5330   else if (TREE_CODE (type) == VECTOR_TYPE)
5331     return reshape_init_vector (type, d, complain);
5332   else
5333     gcc_unreachable();
5334 }
5335 
5336 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5337    brace-enclosed aggregate initializer.
5338 
5339    INIT is the CONSTRUCTOR containing the list of initializers describing
5340    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5341    It may not presently match the shape of the TYPE; for example:
5342 
5343      struct S { int a; int b; };
5344      struct S a[] = { 1, 2, 3, 4 };
5345 
5346    Here INIT will hold a VEC of four elements, rather than a
5347    VEC of two elements, each itself a VEC of two elements.  This
5348    routine transforms INIT from the former form into the latter.  The
5349    revised CONSTRUCTOR node is returned.  */
5350 
5351 tree
5352 reshape_init (tree type, tree init, tsubst_flags_t complain)
5353 {
5354   VEC(constructor_elt, gc) *v;
5355   reshape_iter d;
5356   tree new_init;
5357 
5358   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5359 
5360   v = CONSTRUCTOR_ELTS (init);
5361 
5362   /* An empty constructor does not need reshaping, and it is always a valid
5363      initializer.  */
5364   if (VEC_empty (constructor_elt, v))
5365     return init;
5366 
5367   /* Recurse on this CONSTRUCTOR.  */
5368   d.cur = VEC_index (constructor_elt, v, 0);
5369   d.end = d.cur + VEC_length (constructor_elt, v);
5370 
5371   new_init = reshape_init_r (type, &d, true, complain);
5372   if (new_init == error_mark_node)
5373     return error_mark_node;
5374 
5375   /* Make sure all the element of the constructor were used. Otherwise,
5376      issue an error about exceeding initializers.  */
5377   if (d.cur != d.end)
5378     {
5379       if (complain & tf_error)
5380 	error ("too many initializers for %qT", type);
5381       else
5382 	return error_mark_node;
5383     }
5384 
5385   return new_init;
5386 }
5387 
5388 /* Verify array initializer.  Returns true if errors have been reported.  */
5389 
5390 bool
5391 check_array_initializer (tree decl, tree type, tree init)
5392 {
5393   tree element_type = TREE_TYPE (type);
5394 
5395   /* The array type itself need not be complete, because the
5396      initializer may tell us how many elements are in the array.
5397      But, the elements of the array must be complete.  */
5398   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5399     {
5400       if (decl)
5401 	error ("elements of array %q#D have incomplete type", decl);
5402       else
5403 	error ("elements of array %q#T have incomplete type", type);
5404       return true;
5405     }
5406   /* It is not valid to initialize a VLA.  */
5407   if (init
5408       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5409 	  || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5410     {
5411       if (decl)
5412 	error ("variable-sized object %qD may not be initialized", decl);
5413       else
5414 	error ("variable-sized compound literal");
5415       return true;
5416     }
5417   return false;
5418 }
5419 
5420 /* Subroutine of check_initializer; args are passed down from that function.
5421    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5422 
5423 static tree
5424 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5425 
5426 {
5427   gcc_assert (stmts_are_full_exprs_p ());
5428   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5429 }
5430 
5431 /* Verify INIT (the initializer for DECL), and record the
5432    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5433    grok_reference_init.
5434 
5435    If the return value is non-NULL, it is an expression that must be
5436    evaluated dynamically to initialize DECL.  */
5437 
5438 static tree
5439 check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5440 {
5441   tree type = TREE_TYPE (decl);
5442   tree init_code = NULL;
5443   tree extra_init = NULL_TREE;
5444   tree core_type;
5445 
5446   /* Things that are going to be initialized need to have complete
5447      type.  */
5448   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5449 
5450   if (DECL_HAS_VALUE_EXPR_P (decl))
5451     {
5452       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5453 	 it doesn't have storage to be initialized.  */
5454       gcc_assert (init == NULL_TREE);
5455       return NULL_TREE;
5456     }
5457 
5458   if (type == error_mark_node)
5459     /* We will have already complained.  */
5460     return NULL_TREE;
5461 
5462   if (TREE_CODE (type) == ARRAY_TYPE)
5463     {
5464       if (check_array_initializer (decl, type, init))
5465 	return NULL_TREE;
5466     }
5467   else if (!COMPLETE_TYPE_P (type))
5468     {
5469       error ("%q#D has incomplete type", decl);
5470       TREE_TYPE (decl) = error_mark_node;
5471       return NULL_TREE;
5472     }
5473   else
5474     /* There is no way to make a variable-sized class type in GNU C++.  */
5475     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5476 
5477   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5478     {
5479       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5480       if (SCALAR_TYPE_P (type))
5481 	{
5482 	  if (init_len == 0)
5483 	    {
5484 	      maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5485 	      init = build_zero_init (type, NULL_TREE, false);
5486 	    }
5487 	  else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5488 	    {
5489 	      error ("scalar object %qD requires one element in initializer",
5490 		     decl);
5491 	      TREE_TYPE (decl) = error_mark_node;
5492 	      return NULL_TREE;
5493 	    }
5494 	}
5495     }
5496 
5497   if (TREE_CODE (decl) == CONST_DECL)
5498     {
5499       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5500 
5501       DECL_INITIAL (decl) = init;
5502 
5503       gcc_assert (init != NULL_TREE);
5504       init = NULL_TREE;
5505     }
5506   else if (!init && DECL_REALLY_EXTERN (decl))
5507     ;
5508   else if (init || type_build_ctor_call (type)
5509 	   || TREE_CODE (type) == REFERENCE_TYPE)
5510     {
5511       if (TREE_CODE (type) == REFERENCE_TYPE)
5512 	{
5513 	  init = grok_reference_init (decl, type, init, flags);
5514 	  flags |= LOOKUP_ALREADY_DIGESTED;
5515 	}
5516       else if (!init)
5517 	check_for_uninitialized_const_var (decl);
5518       /* Do not reshape constructors of vectors (they don't need to be
5519 	 reshaped.  */
5520       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5521 	{
5522 	  if (is_std_init_list (type))
5523 	    {
5524 	      init = perform_implicit_conversion (type, init,
5525 						  tf_warning_or_error);
5526 	      flags |= LOOKUP_ALREADY_DIGESTED;
5527 	    }
5528 	  else if (TYPE_NON_AGGREGATE_CLASS (type))
5529 	    {
5530 	      /* Don't reshape if the class has constructors.  */
5531 	      if (cxx_dialect == cxx98)
5532 		error ("in C++98 %qD must be initialized by constructor, "
5533 		       "not by %<{...}%>",
5534 		       decl);
5535 	    }
5536 	  else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5537 	    {
5538 	      error ("opaque vector types cannot be initialized");
5539 	      init = error_mark_node;
5540 	    }
5541 	  else
5542 	    {
5543 	      init = reshape_init (type, init, tf_warning_or_error);
5544 	      if (SCALAR_TYPE_P (type))
5545 		check_narrowing (type, init);
5546 	    }
5547 	}
5548 
5549       /* If DECL has an array type without a specific bound, deduce the
5550 	 array size from the initializer.  */
5551       maybe_deduce_size_from_array_init (decl, init);
5552       type = TREE_TYPE (decl);
5553       if (type == error_mark_node)
5554 	return NULL_TREE;
5555 
5556       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5557 	  && !(flags & LOOKUP_ALREADY_DIGESTED)
5558 	  && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5559 	       && CP_AGGREGATE_TYPE_P (type)
5560 	       && (CLASS_TYPE_P (type)
5561 		   || type_has_extended_temps (type))))
5562 	{
5563 	  init_code = build_aggr_init_full_exprs (decl, init, flags);
5564 
5565 	  /* If this is a constexpr initializer, expand_default_init will
5566 	     have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5567 	     case, pull the initializer back out and pass it down into
5568 	     store_init_value.  */
5569 	  while (TREE_CODE (init_code) == EXPR_STMT
5570 		 || TREE_CODE (init_code) == CONVERT_EXPR)
5571 	    init_code = TREE_OPERAND (init_code, 0);
5572 	  if (TREE_CODE (init_code) == INIT_EXPR)
5573 	    {
5574 	      init = TREE_OPERAND (init_code, 1);
5575 	      init_code = NULL_TREE;
5576 	      /* Don't call digest_init; it's unnecessary and will complain
5577 		 about aggregate initialization of non-aggregate classes.  */
5578 	      flags |= LOOKUP_ALREADY_DIGESTED;
5579 	    }
5580 	  else if (DECL_DECLARED_CONSTEXPR_P (decl))
5581 	    {
5582 	      /* Declared constexpr, but no suitable initializer; massage
5583 		 init appropriately so we can pass it into store_init_value
5584 		 for the error.  */
5585 	      if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5586 		init = finish_compound_literal (type, init,
5587 						tf_warning_or_error);
5588 	      else if (CLASS_TYPE_P (type)
5589 		       && (!init || TREE_CODE (init) == TREE_LIST))
5590 		{
5591 		  init = build_functional_cast (type, init, tf_none);
5592 		  if (init != error_mark_node)
5593 		    TARGET_EXPR_DIRECT_INIT_P (init) = true;
5594 		}
5595 	      init_code = NULL_TREE;
5596 	    }
5597 	  else
5598 	    init = NULL_TREE;
5599 	}
5600 
5601       if (init && TREE_CODE (init) != TREE_VEC)
5602 	{
5603 	  /* In aggregate initialization of a variable, each element
5604 	     initialization is a full-expression because there is no
5605 	     enclosing expression.  */
5606 	  gcc_assert (stmts_are_full_exprs_p ());
5607 
5608 	  init_code = store_init_value (decl, init, cleanups, flags);
5609 
5610 	  if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5611 	      && DECL_INITIAL (decl)
5612 	      && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5613 	      && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5614 	    warning (0, "array %qD initialized by parenthesized string literal %qE",
5615 		     decl, DECL_INITIAL (decl));
5616 	  init = NULL;
5617 	}
5618     }
5619   else
5620     {
5621       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5622 	  && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5623 	      || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5624 	diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5625 						  /*complain=*/true);
5626 
5627       check_for_uninitialized_const_var (decl);
5628     }
5629 
5630   if (init && init != error_mark_node)
5631     init_code = build2 (INIT_EXPR, type, decl, init);
5632 
5633   if (extra_init)
5634     init_code = add_stmt_to_compound (extra_init, init_code);
5635 
5636   if (init_code && DECL_IN_AGGR_P (decl))
5637     {
5638       static int explained = 0;
5639 
5640       if (cxx_dialect < cxx0x)
5641 	error ("initializer invalid for static member with constructor");
5642       else
5643 	error ("non-constant in-class initialization invalid for static "
5644 	       "member %qD", decl);
5645       if (!explained)
5646 	{
5647 	  error ("(an out of class initialization is required)");
5648 	  explained = 1;
5649 	}
5650     }
5651 
5652   return init_code;
5653 }
5654 
5655 /* If DECL is not a local variable, give it RTL.  */
5656 
5657 static void
5658 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5659 {
5660   int toplev = toplevel_bindings_p ();
5661   int defer_p;
5662   const char *filename;
5663 
5664   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5665   if (asmspec)
5666     {
5667       /* The `register' keyword, when used together with an
5668 	 asm-specification, indicates that the variable should be
5669 	 placed in a particular register.  */
5670       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5671 	{
5672 	  set_user_assembler_name (decl, asmspec);
5673 	  DECL_HARD_REGISTER (decl) = 1;
5674 	}
5675       else
5676 	{
5677 	  if (TREE_CODE (decl) == FUNCTION_DECL
5678 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5679 	    set_builtin_user_assembler_name (decl, asmspec);
5680 	  set_user_assembler_name (decl, asmspec);
5681 	}
5682     }
5683 
5684   /* Handle non-variables up front.  */
5685   if (TREE_CODE (decl) != VAR_DECL)
5686     {
5687       rest_of_decl_compilation (decl, toplev, at_eof);
5688       return;
5689     }
5690 
5691   /* If we see a class member here, it should be a static data
5692      member.  */
5693   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5694     {
5695       gcc_assert (TREE_STATIC (decl));
5696       /* An in-class declaration of a static data member should be
5697 	 external; it is only a declaration, and not a definition.  */
5698       if (init == NULL_TREE)
5699 	gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5700     }
5701 
5702   /* We don't create any RTL for local variables.  */
5703   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5704     return;
5705 
5706   /* We defer emission of local statics until the corresponding
5707      DECL_EXPR is expanded.  */
5708   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5709 
5710   /* We try to defer namespace-scope static constants so that they are
5711      not emitted into the object file unnecessarily.  */
5712   filename = input_filename;
5713   if (!DECL_VIRTUAL_P (decl)
5714       && TREE_READONLY (decl)
5715       && DECL_INITIAL (decl) != NULL_TREE
5716       && DECL_INITIAL (decl) != error_mark_node
5717       && filename != NULL
5718       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5719       && toplev
5720       && !TREE_PUBLIC (decl))
5721     {
5722       /* Fool with the linkage of static consts according to #pragma
5723 	 interface.  */
5724       struct c_fileinfo *finfo = get_fileinfo (filename);
5725       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5726 	{
5727 	  TREE_PUBLIC (decl) = 1;
5728 	  DECL_EXTERNAL (decl) = finfo->interface_only;
5729 	}
5730 
5731       defer_p = 1;
5732     }
5733   /* Likewise for template instantiations.  */
5734   else if (DECL_LANG_SPECIFIC (decl)
5735 	   && DECL_IMPLICIT_INSTANTIATION (decl))
5736     defer_p = 1;
5737 
5738   /* If we're not deferring, go ahead and assemble the variable.  */
5739   if (!defer_p)
5740     rest_of_decl_compilation (decl, toplev, at_eof);
5741 }
5742 
5743 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5744 
5745 static tree
5746 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5747 {
5748   /* Stop at types or full-expression boundaries.  */
5749   if (TYPE_P (*stmt_p)
5750       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5751     {
5752       *walk_subtrees = 0;
5753       return NULL_TREE;
5754     }
5755 
5756   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5757     {
5758       tree guard = (tree)data;
5759       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5760 
5761       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5762       /* Tell honor_protect_cleanup_actions to handle this as a separate
5763 	 cleanup.  */
5764       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5765 
5766       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5767     }
5768 
5769   return NULL_TREE;
5770 }
5771 
5772 /* We're initializing a local variable which has a cleanup GUARD.  If there
5773    are any temporaries used in the initializer INIT of this variable, we
5774    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5775    variable will be cleaned up properly if one of them throws.
5776 
5777    Unfortunately, there's no way to express this properly in terms of
5778    nesting, as the regions for the temporaries overlap the region for the
5779    variable itself; if there are two temporaries, the variable needs to be
5780    the first thing destroyed if either of them throws.  However, we only
5781    want to run the variable's cleanup if it actually got constructed.  So
5782    we need to guard the temporary cleanups with the variable's cleanup if
5783    they are run on the normal path, but not if they are run on the
5784    exceptional path.  We implement this by telling
5785    honor_protect_cleanup_actions to strip the variable cleanup from the
5786    exceptional path.  */
5787 
5788 static void
5789 wrap_temporary_cleanups (tree init, tree guard)
5790 {
5791   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5792 }
5793 
5794 /* Generate code to initialize DECL (a local variable).  */
5795 
5796 static void
5797 initialize_local_var (tree decl, tree init)
5798 {
5799   tree type = TREE_TYPE (decl);
5800   tree cleanup;
5801   int already_used;
5802 
5803   gcc_assert (TREE_CODE (decl) == VAR_DECL
5804 	      || TREE_CODE (decl) == RESULT_DECL);
5805   gcc_assert (!TREE_STATIC (decl));
5806 
5807   if (DECL_SIZE (decl) == NULL_TREE)
5808     {
5809       /* If we used it already as memory, it must stay in memory.  */
5810       DECL_INITIAL (decl) = NULL_TREE;
5811       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5812       return;
5813     }
5814 
5815   if (type == error_mark_node)
5816     return;
5817 
5818   /* Compute and store the initial value.  */
5819   already_used = TREE_USED (decl) || TREE_USED (type);
5820   if (TREE_USED (type))
5821     DECL_READ_P (decl) = 1;
5822 
5823   /* Generate a cleanup, if necessary.  */
5824   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5825 
5826   /* Perform the initialization.  */
5827   if (init)
5828     {
5829       if (TREE_CODE (init) == INIT_EXPR
5830 	  && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5831 	{
5832 	  /* Stick simple initializers in DECL_INITIAL so that
5833 	     -Wno-init-self works (c++/34772).  */
5834 	  gcc_assert (TREE_OPERAND (init, 0) == decl);
5835 	  DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5836 	}
5837       else
5838 	{
5839 	  int saved_stmts_are_full_exprs_p;
5840 
5841 	  /* If we're only initializing a single object, guard the
5842 	     destructors of any temporaries used in its initializer with
5843 	     its destructor.  This isn't right for arrays because each
5844 	     element initialization is a full-expression.  */
5845 	  if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5846 	    wrap_temporary_cleanups (init, cleanup);
5847 
5848 	  gcc_assert (building_stmt_list_p ());
5849 	  saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5850 	  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5851 	  finish_expr_stmt (init);
5852 	  current_stmt_tree ()->stmts_are_full_exprs_p =
5853 	    saved_stmts_are_full_exprs_p;
5854 	}
5855     }
5856 
5857   /* Set this to 0 so we can tell whether an aggregate which was
5858      initialized was ever used.  Don't do this if it has a
5859      destructor, so we don't complain about the 'resource
5860      allocation is initialization' idiom.  Now set
5861      attribute((unused)) on types so decls of that type will be
5862      marked used. (see TREE_USED, above.)  */
5863   if (TYPE_NEEDS_CONSTRUCTING (type)
5864       && ! already_used
5865       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5866       && DECL_NAME (decl))
5867     TREE_USED (decl) = 0;
5868   else if (already_used)
5869     TREE_USED (decl) = 1;
5870 
5871   if (cleanup)
5872     finish_decl_cleanup (decl, cleanup);
5873 }
5874 
5875 /* DECL is a VAR_DECL for a compiler-generated variable with static
5876    storage duration (like a virtual table) whose initializer is a
5877    compile-time constant.  Initialize the variable and provide it to the
5878    back end.  */
5879 
5880 void
5881 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5882 {
5883   tree init;
5884   gcc_assert (DECL_ARTIFICIAL (decl));
5885   init = build_constructor (TREE_TYPE (decl), v);
5886   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5887   DECL_INITIAL (decl) = init;
5888   DECL_INITIALIZED_P (decl) = 1;
5889   determine_visibility (decl);
5890   layout_var_decl (decl);
5891   maybe_commonize_var (decl);
5892   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5893 }
5894 
5895 /* INIT is the initializer for a variable, as represented by the
5896    parser.  Returns true iff INIT is type-dependent.  */
5897 
5898 static bool
5899 type_dependent_init_p (tree init)
5900 {
5901   if (TREE_CODE (init) == TREE_LIST)
5902     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5903     return any_type_dependent_elements_p (init);
5904   else if (TREE_CODE (init) == CONSTRUCTOR)
5905   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5906     {
5907       VEC(constructor_elt, gc) *elts;
5908       size_t nelts;
5909       size_t i;
5910 
5911       elts = CONSTRUCTOR_ELTS (init);
5912       nelts = VEC_length (constructor_elt, elts);
5913       for (i = 0; i < nelts; ++i)
5914 	if (type_dependent_init_p (VEC_index (constructor_elt,
5915 					      elts, i)->value))
5916 	  return true;
5917     }
5918   else
5919     /* It must be a simple expression, e.g., int i = 3;  */
5920     return type_dependent_expression_p (init);
5921 
5922   return false;
5923 }
5924 
5925 /* INIT is the initializer for a variable, as represented by the
5926    parser.  Returns true iff INIT is value-dependent.  */
5927 
5928 static bool
5929 value_dependent_init_p (tree init)
5930 {
5931   if (TREE_CODE (init) == TREE_LIST)
5932     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5933     return any_value_dependent_elements_p (init);
5934   else if (TREE_CODE (init) == CONSTRUCTOR)
5935   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5936     {
5937       VEC(constructor_elt, gc) *elts;
5938       size_t nelts;
5939       size_t i;
5940 
5941       elts = CONSTRUCTOR_ELTS (init);
5942       nelts = VEC_length (constructor_elt, elts);
5943       for (i = 0; i < nelts; ++i)
5944 	if (value_dependent_init_p (VEC_index (constructor_elt,
5945 					       elts, i)->value))
5946 	  return true;
5947     }
5948   else
5949     /* It must be a simple expression, e.g., int i = 3;  */
5950     return value_dependent_expression_p (init);
5951 
5952   return false;
5953 }
5954 
5955 /* Finish processing of a declaration;
5956    install its line number and initial value.
5957    If the length of an array type is not known before,
5958    it must be determined now, from the initial value, or it is an error.
5959 
5960    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5961    true, then INIT is an integral constant expression.
5962 
5963    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5964    if the (init) syntax was used.  */
5965 
5966 void
5967 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5968 		tree asmspec_tree, int flags)
5969 {
5970   tree type;
5971   VEC(tree,gc) *cleanups = NULL;
5972   const char *asmspec = NULL;
5973   int was_readonly = 0;
5974   bool var_definition_p = false;
5975   tree auto_node;
5976 
5977   if (decl == error_mark_node)
5978     return;
5979   else if (! decl)
5980     {
5981       if (init)
5982 	error ("assignment (not initialization) in declaration");
5983       return;
5984     }
5985 
5986   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5987   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5988   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5989 
5990   type = TREE_TYPE (decl);
5991   if (type == error_mark_node)
5992     return;
5993 
5994   /* If a name was specified, get the string.  */
5995   if (at_namespace_scope_p ())
5996     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5997   if (asmspec_tree && asmspec_tree != error_mark_node)
5998     asmspec = TREE_STRING_POINTER (asmspec_tree);
5999 
6000   if (current_class_type
6001       && CP_DECL_CONTEXT (decl) == current_class_type
6002       && TYPE_BEING_DEFINED (current_class_type)
6003       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6004       && (DECL_INITIAL (decl) || init))
6005     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6006 
6007   auto_node = type_uses_auto (type);
6008   if (auto_node)
6009     {
6010       tree d_init;
6011       if (init == NULL_TREE)
6012 	{
6013 	  error ("declaration of %q#D has no initializer", decl);
6014 	  TREE_TYPE (decl) = error_mark_node;
6015 	  return;
6016 	}
6017       d_init = init;
6018       if (TREE_CODE (d_init) == TREE_LIST)
6019 	d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6020 						  tf_warning_or_error);
6021       d_init = resolve_nondeduced_context (d_init);
6022       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6023 						   auto_node);
6024       if (type == error_mark_node)
6025 	return;
6026     }
6027 
6028   if (!ensure_literal_type_for_constexpr_object (decl))
6029     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6030 
6031   if (TREE_CODE (decl) == VAR_DECL
6032       && DECL_CLASS_SCOPE_P (decl)
6033       && DECL_INITIALIZED_IN_CLASS_P (decl))
6034     check_static_variable_definition (decl, type);
6035 
6036   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6037     {
6038       tree clone;
6039       if (init == ridpointers[(int)RID_DELETE])
6040 	{
6041 	  /* FIXME check this is 1st decl.  */
6042 	  DECL_DELETED_FN (decl) = 1;
6043 	  DECL_DECLARED_INLINE_P (decl) = 1;
6044 	  DECL_INITIAL (decl) = error_mark_node;
6045 	  FOR_EACH_CLONE (clone, decl)
6046 	    {
6047 	      DECL_DELETED_FN (clone) = 1;
6048 	      DECL_DECLARED_INLINE_P (clone) = 1;
6049 	      DECL_INITIAL (clone) = error_mark_node;
6050 	    }
6051 	  init = NULL_TREE;
6052 	}
6053       else if (init == ridpointers[(int)RID_DEFAULT])
6054 	{
6055 	  if (defaultable_fn_check (decl))
6056 	    DECL_DEFAULTED_FN (decl) = 1;
6057 	  else
6058 	    DECL_INITIAL (decl) = NULL_TREE;
6059 	}
6060     }
6061 
6062   if (init && TREE_CODE (decl) == VAR_DECL)
6063     {
6064       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6065       /* If DECL is a reference, then we want to know whether init is a
6066 	 reference constant; init_const_expr_p as passed tells us whether
6067 	 it's an rvalue constant.  */
6068       if (TREE_CODE (type) == REFERENCE_TYPE)
6069 	init_const_expr_p = potential_constant_expression (init);
6070       if (init_const_expr_p)
6071 	{
6072 	  /* Set these flags now for templates.  We'll update the flags in
6073 	     store_init_value for instantiations.  */
6074 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6075 	  if (decl_maybe_constant_var_p (decl))
6076 	    TREE_CONSTANT (decl) = 1;
6077 	}
6078     }
6079 
6080   if (processing_template_decl)
6081     {
6082       bool type_dependent_p;
6083 
6084       /* Add this declaration to the statement-tree.  */
6085       if (at_function_scope_p ())
6086 	add_decl_expr (decl);
6087 
6088       type_dependent_p = dependent_type_p (type);
6089 
6090       if (check_for_bare_parameter_packs (init))
6091 	{
6092 	  init = NULL_TREE;
6093 	  DECL_INITIAL (decl) = NULL_TREE;
6094 	}
6095 
6096       /* Generally, initializers in templates are expanded when the
6097 	 template is instantiated.  But, if DECL is a variable constant
6098 	 then it can be used in future constant expressions, so its value
6099 	 must be available. */
6100 
6101       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6102 	/* We can't do anything if the decl has dependent type.  */;
6103       else if (init
6104 	       && init_const_expr_p
6105 	       && !type_dependent_p
6106 	       && decl_maybe_constant_var_p (decl)
6107 	       && !type_dependent_init_p (init)
6108 	       && !value_dependent_init_p (init))
6109 	{
6110 	  /* This variable seems to be a non-dependent constant, so process
6111 	     its initializer.  If check_initializer returns non-null the
6112 	     initialization wasn't constant after all.  */
6113 	  tree init_code;
6114 	  cleanups = make_tree_vector ();
6115 	  init_code = check_initializer (decl, init, flags, &cleanups);
6116 	  if (init_code == NULL_TREE)
6117 	    init = NULL_TREE;
6118 	  release_tree_vector (cleanups);
6119 	}
6120       else if (!DECL_PRETTY_FUNCTION_P (decl))
6121 	/* Deduce array size even if the initializer is dependent.  */
6122 	maybe_deduce_size_from_array_init (decl, init);
6123 
6124       if (init)
6125 	DECL_INITIAL (decl) = init;
6126       return;
6127     }
6128 
6129   /* Just store non-static data member initializers for later.  */
6130   if (init && TREE_CODE (decl) == FIELD_DECL)
6131     DECL_INITIAL (decl) = init;
6132 
6133   /* Take care of TYPE_DECLs up front.  */
6134   if (TREE_CODE (decl) == TYPE_DECL)
6135     {
6136       if (type != error_mark_node
6137 	  && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6138 	{
6139 	  if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6140 	    warning (0, "shadowing previous type declaration of %q#D", decl);
6141 	  set_identifier_type_value (DECL_NAME (decl), decl);
6142 	}
6143 
6144       /* If we have installed this as the canonical typedef for this
6145 	 type, and that type has not been defined yet, delay emitting
6146 	 the debug information for it, as we will emit it later.  */
6147       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6148 	  && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6149 	TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6150 
6151       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6152 				at_eof);
6153       return;
6154     }
6155 
6156   /* A reference will be modified here, as it is initialized.  */
6157   if (! DECL_EXTERNAL (decl)
6158       && TREE_READONLY (decl)
6159       && TREE_CODE (type) == REFERENCE_TYPE)
6160     {
6161       was_readonly = 1;
6162       TREE_READONLY (decl) = 0;
6163     }
6164 
6165   if (TREE_CODE (decl) == VAR_DECL)
6166     {
6167       /* Only variables with trivial initialization and destruction can
6168 	 have thread-local storage.  */
6169       if (DECL_THREAD_LOCAL_P (decl)
6170 	  && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6171 	      || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6172 	error ("%qD cannot be thread-local because it has non-trivial "
6173 	       "type %qT", decl, TREE_TYPE (decl));
6174       /* If this is a local variable that will need a mangled name,
6175 	 register it now.  We must do this before processing the
6176 	 initializer for the variable, since the initialization might
6177 	 require a guard variable, and since the mangled name of the
6178 	 guard variable will depend on the mangled name of this
6179 	 variable.  */
6180       if (DECL_FUNCTION_SCOPE_P (decl)
6181 	  && TREE_STATIC (decl)
6182 	  && !DECL_ARTIFICIAL (decl))
6183 	{
6184 	  push_local_name (decl);
6185 	  if (DECL_CONSTRUCTOR_P (current_function_decl)
6186 	      || DECL_DESTRUCTOR_P (current_function_decl))
6187 	    /* Normally local_decls is populated during GIMPLE lowering,
6188 	       but [cd]tors are never actually compiled directly.  We need
6189 	       to put statics on the list so we can deal with the label
6190 	       address extension.  */
6191 	    add_local_decl (cfun, decl);
6192 	}
6193 
6194       /* Convert the initializer to the type of DECL, if we have not
6195 	 already initialized DECL.  */
6196       if (!DECL_INITIALIZED_P (decl)
6197 	  /* If !DECL_EXTERNAL then DECL is being defined.  In the
6198 	     case of a static data member initialized inside the
6199 	     class-specifier, there can be an initializer even if DECL
6200 	     is *not* defined.  */
6201 	  && (!DECL_EXTERNAL (decl) || init))
6202 	{
6203 	  if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6204 	    {
6205 	      tree jclass
6206 		= IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6207 	      /* Allow libjava/prims.cc define primitive classes.  */
6208 	      if (init != NULL_TREE
6209 		  || jclass == NULL_TREE
6210 		  || TREE_CODE (jclass) != TYPE_DECL
6211 		  || !POINTER_TYPE_P (TREE_TYPE (jclass))
6212 		  || !same_type_ignoring_top_level_qualifiers_p
6213 					(type, TREE_TYPE (TREE_TYPE (jclass))))
6214 		error ("Java object %qD not allocated with %<new%>", decl);
6215 	      init = NULL_TREE;
6216 	    }
6217 	  cleanups = make_tree_vector ();
6218 	  init = check_initializer (decl, init, flags, &cleanups);
6219 	  /* Thread-local storage cannot be dynamically initialized.  */
6220 	  if (DECL_THREAD_LOCAL_P (decl) && init)
6221 	    {
6222 	      error ("%qD is thread-local and so cannot be dynamically "
6223 		     "initialized", decl);
6224 	      init = NULL_TREE;
6225 	    }
6226 
6227 	  /* Check that the initializer for a static data member was a
6228 	     constant.  Although we check in the parser that the
6229 	     initializer is an integral constant expression, we do not
6230 	     simplify division-by-zero at the point at which it
6231 	     occurs.  Therefore, in:
6232 
6233 	       struct S { static const int i = 7 / 0; };
6234 
6235 	     we issue an error at this point.  It would
6236 	     probably be better to forbid division by zero in
6237 	     integral constant expressions.  */
6238 	  if (DECL_EXTERNAL (decl) && init)
6239 	    {
6240 	      error ("%qD cannot be initialized by a non-constant expression"
6241 		     " when being declared", decl);
6242 	      DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6243 	      init = NULL_TREE;
6244 	    }
6245 
6246 	  /* Handle:
6247 
6248 	     [dcl.init]
6249 
6250 	     The memory occupied by any object of static storage
6251 	     duration is zero-initialized at program startup before
6252 	     any other initialization takes place.
6253 
6254 	     We cannot create an appropriate initializer until after
6255 	     the type of DECL is finalized.  If DECL_INITIAL is set,
6256 	     then the DECL is statically initialized, and any
6257 	     necessary zero-initialization has already been performed.  */
6258 	  if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6259 	    DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6260 						   /*nelts=*/NULL_TREE,
6261 						   /*static_storage_p=*/true);
6262 	  /* Remember that the initialization for this variable has
6263 	     taken place.  */
6264 	  DECL_INITIALIZED_P (decl) = 1;
6265 	  /* This declaration is the definition of this variable,
6266 	     unless we are initializing a static data member within
6267 	     the class specifier.  */
6268 	  if (!DECL_EXTERNAL (decl))
6269 	    var_definition_p = true;
6270 	}
6271       /* If the variable has an array type, lay out the type, even if
6272 	 there is no initializer.  It is valid to index through the
6273 	 array, and we must get TYPE_ALIGN set correctly on the array
6274 	 type.  */
6275       else if (TREE_CODE (type) == ARRAY_TYPE)
6276 	layout_type (type);
6277 
6278       if (TREE_STATIC (decl)
6279 	  && !at_function_scope_p ()
6280 	  && current_function_decl == NULL)
6281 	/* So decl is a global variable or a static member of a
6282 	   non local class. Record the types it uses
6283 	   so that we can decide later to emit debug info for them.  */
6284 	record_types_used_by_current_var_decl (decl);
6285     }
6286   else if (TREE_CODE (decl) == FIELD_DECL
6287 	   && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6288     error ("non-static data member %qD has Java class type", decl);
6289 
6290   /* Add this declaration to the statement-tree.  This needs to happen
6291      after the call to check_initializer so that the DECL_EXPR for a
6292      reference temp is added before the DECL_EXPR for the reference itself.  */
6293   if (DECL_FUNCTION_SCOPE_P (decl))
6294     add_decl_expr (decl);
6295 
6296   /* Let the middle end know about variables and functions -- but not
6297      static data members in uninstantiated class templates.  */
6298   if (TREE_CODE (decl) == VAR_DECL
6299       || TREE_CODE (decl) == FUNCTION_DECL)
6300     {
6301       if (TREE_CODE (decl) == VAR_DECL)
6302 	{
6303 	  layout_var_decl (decl);
6304 	  maybe_commonize_var (decl);
6305 	}
6306 
6307       /* This needs to happen after the linkage is set. */
6308       determine_visibility (decl);
6309 
6310       if (var_definition_p && TREE_STATIC (decl))
6311 	{
6312 	  /* If a TREE_READONLY variable needs initialization
6313 	     at runtime, it is no longer readonly and we need to
6314 	     avoid MEM_READONLY_P being set on RTL created for it.  */
6315 	  if (init)
6316 	    {
6317 	      if (TREE_READONLY (decl))
6318 		TREE_READONLY (decl) = 0;
6319 	      was_readonly = 0;
6320 	    }
6321 	  else if (was_readonly)
6322 	    TREE_READONLY (decl) = 1;
6323 
6324 	  /* Likewise if it needs destruction.  */
6325 	  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6326 	    TREE_READONLY (decl) = 0;
6327 	}
6328 
6329       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6330 
6331       /* Check for abstractness of the type. Notice that there is no
6332 	 need to strip array types here since the check for those types
6333 	 is already done within create_array_type_for_decl.  */
6334       if (TREE_CODE (type) == FUNCTION_TYPE
6335 	  || TREE_CODE (type) == METHOD_TYPE)
6336 	abstract_virtuals_error (decl, TREE_TYPE (type));
6337       else
6338 	abstract_virtuals_error (decl, type);
6339 
6340       if (TREE_TYPE (decl) == error_mark_node)
6341 	/* No initialization required.  */
6342 	;
6343       else if (TREE_CODE (decl) == FUNCTION_DECL)
6344 	{
6345 	  if (init)
6346 	    {
6347 	      if (init == ridpointers[(int)RID_DEFAULT])
6348 		{
6349 		  /* An out-of-class default definition is defined at
6350 		     the point where it is explicitly defaulted.  */
6351 		  if (DECL_DELETED_FN (decl))
6352 		    maybe_explain_implicit_delete (decl);
6353 		  else if (DECL_INITIAL (decl) == error_mark_node)
6354 		    synthesize_method (decl);
6355 		}
6356 	      else
6357 		error ("function %q#D is initialized like a variable", decl);
6358 	    }
6359 	  /* else no initialization required.  */
6360 	}
6361       else if (DECL_EXTERNAL (decl)
6362 	       && ! (DECL_LANG_SPECIFIC (decl)
6363 		     && DECL_NOT_REALLY_EXTERN (decl)))
6364 	{
6365 	  if (init)
6366 	    DECL_INITIAL (decl) = init;
6367 	}
6368       /* A variable definition.  */
6369       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6370 	/* Initialize the local variable.  */
6371 	initialize_local_var (decl, init);
6372 
6373       /* If a variable is defined, and then a subsequent
6374 	 definition with external linkage is encountered, we will
6375 	 get here twice for the same variable.  We want to avoid
6376 	 calling expand_static_init more than once.  For variables
6377 	 that are not static data members, we can call
6378 	 expand_static_init only when we actually process the
6379 	 initializer.  It is not legal to redeclare a static data
6380 	 member, so this issue does not arise in that case.  */
6381       else if (var_definition_p && TREE_STATIC (decl))
6382 	expand_static_init (decl, init);
6383     }
6384 
6385   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6386      reference, insert it in the statement-tree now.  */
6387   if (cleanups)
6388     {
6389       unsigned i; tree t;
6390       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6391 	push_cleanup (decl, t, false);
6392       release_tree_vector (cleanups);
6393     }
6394 
6395   if (was_readonly)
6396     TREE_READONLY (decl) = 1;
6397 
6398   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6399 }
6400 
6401 /* Returns a declaration for a VAR_DECL as if:
6402 
6403      extern "C" TYPE NAME;
6404 
6405    had been seen.  Used to create compiler-generated global
6406    variables.  */
6407 
6408 static tree
6409 declare_global_var (tree name, tree type)
6410 {
6411   tree decl;
6412 
6413   push_to_top_level ();
6414   decl = build_decl (input_location, VAR_DECL, name, type);
6415   TREE_PUBLIC (decl) = 1;
6416   DECL_EXTERNAL (decl) = 1;
6417   DECL_ARTIFICIAL (decl) = 1;
6418   /* If the user has explicitly declared this variable (perhaps
6419      because the code we are compiling is part of a low-level runtime
6420      library), then it is possible that our declaration will be merged
6421      with theirs by pushdecl.  */
6422   decl = pushdecl (decl);
6423   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6424   pop_from_top_level ();
6425 
6426   return decl;
6427 }
6428 
6429 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6430    if "__cxa_atexit" is not being used) corresponding to the function
6431    to be called when the program exits.  */
6432 
6433 static tree
6434 get_atexit_fn_ptr_type (void)
6435 {
6436   tree fn_type;
6437 
6438   if (!atexit_fn_ptr_type_node)
6439     {
6440       tree arg_type;
6441       if (flag_use_cxa_atexit
6442 	  && !targetm.cxx.use_atexit_for_cxa_atexit ())
6443 	/* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6444 	arg_type = ptr_type_node;
6445       else
6446 	/* The parameter to "atexit" is "void (*)(void)".  */
6447 	arg_type = NULL_TREE;
6448 
6449       fn_type = build_function_type_list (void_type_node,
6450 					  arg_type, NULL_TREE);
6451       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6452     }
6453 
6454   return atexit_fn_ptr_type_node;
6455 }
6456 
6457 /* Returns a pointer to the `atexit' function.  Note that if
6458    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6459    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6460 
6461 static tree
6462 get_atexit_node (void)
6463 {
6464   tree atexit_fndecl;
6465   tree fn_type;
6466   tree fn_ptr_type;
6467   const char *name;
6468   bool use_aeabi_atexit;
6469 
6470   if (atexit_node)
6471     return atexit_node;
6472 
6473   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6474     {
6475       /* The declaration for `__cxa_atexit' is:
6476 
6477 	   int __cxa_atexit (void (*)(void *), void *, void *)
6478 
6479 	 We build up the argument types and then the function type
6480 	 itself.  */
6481       tree argtype0, argtype1, argtype2;
6482 
6483       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6484       /* First, build the pointer-to-function type for the first
6485 	 argument.  */
6486       fn_ptr_type = get_atexit_fn_ptr_type ();
6487       /* Then, build the rest of the argument types.  */
6488       argtype2 = ptr_type_node;
6489       if (use_aeabi_atexit)
6490 	{
6491 	  argtype1 = fn_ptr_type;
6492 	  argtype0 = ptr_type_node;
6493 	}
6494       else
6495 	{
6496 	  argtype1 = ptr_type_node;
6497 	  argtype0 = fn_ptr_type;
6498 	}
6499       /* And the final __cxa_atexit type.  */
6500       fn_type = build_function_type_list (integer_type_node,
6501 					  argtype0, argtype1, argtype2,
6502 					  NULL_TREE);
6503       fn_ptr_type = build_pointer_type (fn_type);
6504       if (use_aeabi_atexit)
6505 	name = "__aeabi_atexit";
6506       else
6507 	name = "__cxa_atexit";
6508     }
6509   else
6510     {
6511       /* The declaration for `atexit' is:
6512 
6513 	   int atexit (void (*)());
6514 
6515 	 We build up the argument types and then the function type
6516 	 itself.  */
6517       fn_ptr_type = get_atexit_fn_ptr_type ();
6518       /* Build the final atexit type.  */
6519       fn_type = build_function_type_list (integer_type_node,
6520 					  fn_ptr_type, NULL_TREE);
6521       name = "atexit";
6522     }
6523 
6524   /* Now, build the function declaration.  */
6525   push_lang_context (lang_name_c);
6526   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6527   mark_used (atexit_fndecl);
6528   pop_lang_context ();
6529   atexit_node = decay_conversion (atexit_fndecl);
6530 
6531   return atexit_node;
6532 }
6533 
6534 /* Returns the __dso_handle VAR_DECL.  */
6535 
6536 static tree
6537 get_dso_handle_node (void)
6538 {
6539   if (dso_handle_node)
6540     return dso_handle_node;
6541 
6542   /* Declare the variable.  */
6543   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6544 					ptr_type_node);
6545 
6546 #ifdef HAVE_GAS_HIDDEN
6547   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6548   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6549 #endif
6550 
6551   return dso_handle_node;
6552 }
6553 
6554 /* Begin a new function with internal linkage whose job will be simply
6555    to destroy some particular variable.  */
6556 
6557 static GTY(()) int start_cleanup_cnt;
6558 
6559 static tree
6560 start_cleanup_fn (void)
6561 {
6562   char name[32];
6563   tree fntype;
6564   tree fndecl;
6565   bool use_cxa_atexit = flag_use_cxa_atexit
6566 			&& !targetm.cxx.use_atexit_for_cxa_atexit ();
6567 
6568   push_to_top_level ();
6569 
6570   /* No need to mangle this.  */
6571   push_lang_context (lang_name_c);
6572 
6573   /* Build the name of the function.  */
6574   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6575   /* Build the function declaration.  */
6576   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6577   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6578   /* It's a function with internal linkage, generated by the
6579      compiler.  */
6580   TREE_PUBLIC (fndecl) = 0;
6581   DECL_ARTIFICIAL (fndecl) = 1;
6582   /* Make the function `inline' so that it is only emitted if it is
6583      actually needed.  It is unlikely that it will be inlined, since
6584      it is only called via a function pointer, but we avoid unnecessary
6585      emissions this way.  */
6586   DECL_DECLARED_INLINE_P (fndecl) = 1;
6587   DECL_INTERFACE_KNOWN (fndecl) = 1;
6588   /* Build the parameter.  */
6589   if (use_cxa_atexit)
6590     {
6591       tree parmdecl;
6592 
6593       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6594       DECL_CONTEXT (parmdecl) = fndecl;
6595       TREE_USED (parmdecl) = 1;
6596       DECL_READ_P (parmdecl) = 1;
6597       DECL_ARGUMENTS (fndecl) = parmdecl;
6598     }
6599 
6600   pushdecl (fndecl);
6601   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6602 
6603   pop_lang_context ();
6604 
6605   return current_function_decl;
6606 }
6607 
6608 /* Finish the cleanup function begun by start_cleanup_fn.  */
6609 
6610 static void
6611 end_cleanup_fn (void)
6612 {
6613   expand_or_defer_fn (finish_function (0));
6614 
6615   pop_from_top_level ();
6616 }
6617 
6618 /* Generate code to handle the destruction of DECL, an object with
6619    static storage duration.  */
6620 
6621 tree
6622 register_dtor_fn (tree decl)
6623 {
6624   tree cleanup;
6625   tree compound_stmt;
6626   tree fcall;
6627   tree type;
6628   bool use_dtor;
6629   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6630 
6631   type = TREE_TYPE (decl);
6632   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6633     return void_zero_node;
6634 
6635   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6636      a class object, we can just pass the destructor to
6637      "__cxa_atexit"; we don't have to build a temporary function to do
6638      the cleanup.  */
6639   use_dtor = (flag_use_cxa_atexit
6640 	      && !targetm.cxx.use_atexit_for_cxa_atexit ()
6641 	      && CLASS_TYPE_P (type));
6642   if (use_dtor)
6643     {
6644       int idx;
6645 
6646       /* Find the destructor.  */
6647       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6648       gcc_assert (idx >= 0);
6649       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6650       /* Make sure it is accessible.  */
6651       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6652     }
6653   else
6654     {
6655       /* Call build_cleanup before we enter the anonymous function so
6656 	 that any access checks will be done relative to the current
6657 	 scope, rather than the scope of the anonymous function.  */
6658       build_cleanup (decl);
6659 
6660       /* Now start the function.  */
6661       cleanup = start_cleanup_fn ();
6662 
6663       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6664 	 to the original function, rather than the anonymous one.  That
6665 	 will make the back end think that nested functions are in use,
6666 	 which causes confusion.  */
6667       push_deferring_access_checks (dk_no_check);
6668       fcall = build_cleanup (decl);
6669       pop_deferring_access_checks ();
6670 
6671       /* Create the body of the anonymous function.  */
6672       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6673       finish_expr_stmt (fcall);
6674       finish_compound_stmt (compound_stmt);
6675       end_cleanup_fn ();
6676     }
6677 
6678   /* Call atexit with the cleanup function.  */
6679   mark_used (cleanup);
6680   cleanup = build_address (cleanup);
6681   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6682     {
6683       tree addr;
6684 
6685       if (use_dtor)
6686 	{
6687 	  /* We must convert CLEANUP to the type that "__cxa_atexit"
6688 	     expects.  */
6689 	  cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6690 	  /* "__cxa_atexit" will pass the address of DECL to the
6691 	     cleanup function.  */
6692 	  mark_used (decl);
6693 	  addr = build_address (decl);
6694 	  /* The declared type of the parameter to "__cxa_atexit" is
6695 	     "void *".  For plain "T*", we could just let the
6696 	     machinery in cp_build_function_call convert it -- but if the
6697 	     type is "cv-qualified T *", then we need to convert it
6698 	     before passing it in, to avoid spurious errors.  */
6699 	  addr = build_nop (ptr_type_node, addr);
6700 	}
6701       else
6702 	/* Since the cleanup functions we build ignore the address
6703 	   they're given, there's no reason to pass the actual address
6704 	   in, and, in general, it's cheaper to pass NULL than any
6705 	   other value.  */
6706 	addr = null_pointer_node;
6707       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6708 				 tf_warning_or_error);
6709       if (targetm.cxx.use_aeabi_atexit ())
6710 	{
6711 	  arg1 = cleanup;
6712 	  arg0 = addr;
6713 	}
6714       else
6715 	{
6716 	  arg1 = addr;
6717 	  arg0 = cleanup;
6718 	}
6719     }
6720   else
6721     arg0 = cleanup;
6722   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6723 				      arg0, arg1, arg2, NULL_TREE);
6724 }
6725 
6726 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6727    is its initializer.  Generate code to handle the construction
6728    and destruction of DECL.  */
6729 
6730 static void
6731 expand_static_init (tree decl, tree init)
6732 {
6733   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6734   gcc_assert (TREE_STATIC (decl));
6735 
6736   /* Some variables require no dynamic initialization.  */
6737   if (!init
6738       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6739     return;
6740 
6741   if (DECL_FUNCTION_SCOPE_P (decl))
6742     {
6743       /* Emit code to perform this initialization but once.  */
6744       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6745       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6746       tree guard, guard_addr;
6747       tree flag, begin;
6748 
6749       /* Emit code to perform this initialization but once.  This code
6750 	 looks like:
6751 
6752 	   static <type> guard;
6753 	   if (!guard.first_byte) {
6754 	     if (__cxa_guard_acquire (&guard)) {
6755 	       bool flag = false;
6756 	       try {
6757 		 // Do initialization.
6758 		 flag = true; __cxa_guard_release (&guard);
6759 		 // Register variable for destruction at end of program.
6760 	       } catch {
6761 		 if (!flag) __cxa_guard_abort (&guard);
6762 	       }
6763 	   }
6764 
6765 	 Note that the `flag' variable is only set to 1 *after* the
6766 	 initialization is complete.  This ensures that an exception,
6767 	 thrown during the construction, will cause the variable to
6768 	 reinitialized when we pass through this code again, as per:
6769 
6770 	   [stmt.dcl]
6771 
6772 	   If the initialization exits by throwing an exception, the
6773 	   initialization is not complete, so it will be tried again
6774 	   the next time control enters the declaration.
6775 
6776 	 This process should be thread-safe, too; multiple threads
6777 	 should not be able to initialize the variable more than
6778 	 once.  */
6779 
6780       /* Create the guard variable.  */
6781       guard = get_guard (decl);
6782 
6783       /* This optimization isn't safe on targets with relaxed memory
6784 	 consistency.  On such targets we force synchronization in
6785 	 __cxa_guard_acquire.  */
6786       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6787 	{
6788 	  /* Begin the conditional initialization.  */
6789 	  if_stmt = begin_if_stmt ();
6790 	  finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6791 	  then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6792 	}
6793 
6794       if (flag_threadsafe_statics)
6795 	{
6796 	  tree vfntype = NULL_TREE;
6797 	  tree acquire_name, release_name, abort_name;
6798 	  tree acquire_fn, release_fn, abort_fn;
6799 	  guard_addr = build_address (guard);
6800 
6801 	  acquire_name = get_identifier ("__cxa_guard_acquire");
6802 	  release_name = get_identifier ("__cxa_guard_release");
6803 	  abort_name = get_identifier ("__cxa_guard_abort");
6804 	  acquire_fn = identifier_global_value (acquire_name);
6805 	  release_fn = identifier_global_value (release_name);
6806 	  abort_fn = identifier_global_value (abort_name);
6807 	  if (!acquire_fn)
6808 	    acquire_fn = push_library_fn
6809 	      (acquire_name, build_function_type_list (integer_type_node,
6810 						       TREE_TYPE (guard_addr),
6811 						       NULL_TREE),
6812 	       NULL_TREE);
6813 	  if (!release_fn || !abort_fn)
6814 	    vfntype = build_function_type_list (void_type_node,
6815 						TREE_TYPE (guard_addr),
6816 						NULL_TREE);
6817 	  if (!release_fn)
6818 	    release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6819 	  if (!abort_fn)
6820 	    abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6821 
6822 	  inner_if_stmt = begin_if_stmt ();
6823 	  finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6824 			       inner_if_stmt);
6825 
6826 	  inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6827 	  begin = get_target_expr (boolean_false_node);
6828 	  flag = TARGET_EXPR_SLOT (begin);
6829 
6830 	  TARGET_EXPR_CLEANUP (begin)
6831 	    = build3 (COND_EXPR, void_type_node, flag,
6832 		      void_zero_node,
6833 		      build_call_n (abort_fn, 1, guard_addr));
6834 	  CLEANUP_EH_ONLY (begin) = 1;
6835 
6836 	  /* Do the initialization itself.  */
6837 	  init = add_stmt_to_compound (begin, init);
6838 	  init = add_stmt_to_compound
6839 	    (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6840 	  init = add_stmt_to_compound
6841 	    (init, build_call_n (release_fn, 1, guard_addr));
6842 	}
6843       else
6844 	init = add_stmt_to_compound (init, set_guard (guard));
6845 
6846       /* Use atexit to register a function for destroying this static
6847 	 variable.  */
6848       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6849 
6850       finish_expr_stmt (init);
6851 
6852       if (flag_threadsafe_statics)
6853 	{
6854 	  finish_compound_stmt (inner_then_clause);
6855 	  finish_then_clause (inner_if_stmt);
6856 	  finish_if_stmt (inner_if_stmt);
6857 	}
6858 
6859       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6860 	{
6861 	  finish_compound_stmt (then_clause);
6862 	  finish_then_clause (if_stmt);
6863 	  finish_if_stmt (if_stmt);
6864 	}
6865     }
6866   else
6867     static_aggregates = tree_cons (init, decl, static_aggregates);
6868 }
6869 
6870 
6871 /* Make TYPE a complete type based on INITIAL_VALUE.
6872    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6873    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6874    3 if the initializer list is empty (in pedantic mode). */
6875 
6876 int
6877 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6878 {
6879   int failure;
6880   tree type, elt_type;
6881 
6882   if (initial_value)
6883     {
6884       unsigned HOST_WIDE_INT i;
6885       tree value;
6886 
6887       /* An array of character type can be initialized from a
6888 	 brace-enclosed string constant.
6889 
6890 	 FIXME: this code is duplicated from reshape_init. Probably
6891 	 we should just call reshape_init here?  */
6892       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6893 	  && TREE_CODE (initial_value) == CONSTRUCTOR
6894 	  && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6895 	{
6896 	  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6897 	  tree value = VEC_index (constructor_elt, v, 0)->value;
6898 
6899 	  if (TREE_CODE (value) == STRING_CST
6900 	      && VEC_length (constructor_elt, v) == 1)
6901 	    initial_value = value;
6902 	}
6903 
6904       /* If any of the elements are parameter packs, we can't actually
6905 	 complete this type now because the array size is dependent.  */
6906       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6907 	{
6908 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6909 				      i, value)
6910 	    {
6911 	      if (PACK_EXPANSION_P (value))
6912 		return 0;
6913 	    }
6914 	}
6915     }
6916 
6917   failure = complete_array_type (ptype, initial_value, do_default);
6918 
6919   /* We can create the array before the element type is complete, which
6920      means that we didn't have these two bits set in the original type
6921      either.  In completing the type, we are expected to propagate these
6922      bits.  See also complete_type which does the same thing for arrays
6923      of fixed size.  */
6924   type = *ptype;
6925   if (TYPE_DOMAIN (type))
6926     {
6927       elt_type = TREE_TYPE (type);
6928       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6929       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6930 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6931     }
6932 
6933   return failure;
6934 }
6935 
6936 /* As above, but either give an error or reject zero-size arrays, depending
6937    on COMPLAIN.  */
6938 
6939 int
6940 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6941 				 bool do_default, tsubst_flags_t complain)
6942 {
6943   int failure;
6944   bool sfinae = !(complain & tf_error);
6945   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6946   if (sfinae)
6947     ++pedantic;
6948   failure = cp_complete_array_type (ptype, initial_value, do_default);
6949   if (sfinae)
6950     --pedantic;
6951   if (failure)
6952     {
6953       if (sfinae)
6954 	/* Not an error.  */;
6955       else if (failure == 1)
6956 	error ("initializer fails to determine size of %qT", *ptype);
6957       else if (failure == 2)
6958 	{
6959 	  if (do_default)
6960 	    error ("array size missing in %qT", *ptype);
6961 	}
6962       else if (failure == 3)
6963 	error ("zero-size array %qT", *ptype);
6964       *ptype = error_mark_node;
6965     }
6966   return failure;
6967 }
6968 
6969 /* Return zero if something is declared to be a member of type
6970    CTYPE when in the context of CUR_TYPE.  STRING is the error
6971    message to print in that case.  Otherwise, quietly return 1.  */
6972 
6973 static int
6974 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6975 {
6976   if (ctype && ctype != cur_type)
6977     {
6978       if (flags == DTOR_FLAG)
6979 	error ("destructor for alien class %qT cannot be a member", ctype);
6980       else
6981 	error ("constructor for alien class %qT cannot be a member", ctype);
6982       return 0;
6983     }
6984   return 1;
6985 }
6986 
6987 /* Subroutine of `grokdeclarator'.  */
6988 
6989 /* Generate errors possibly applicable for a given set of specifiers.
6990    This is for ARM $7.1.2.  */
6991 
6992 static void
6993 bad_specifiers (tree object,
6994 		enum bad_spec_place type,
6995 		int virtualp,
6996 		int quals,
6997 		int inlinep,
6998 		int friendp,
6999 		int raises)
7000 {
7001   switch (type)
7002     {
7003       case BSP_VAR:
7004 	if (virtualp)
7005 	  error ("%qD declared as a %<virtual%> variable", object);
7006 	if (inlinep)
7007 	  error ("%qD declared as an %<inline%> variable", object);
7008 	if (quals)
7009 	  error ("%<const%> and %<volatile%> function specifiers on "
7010 	         "%qD invalid in variable declaration", object);
7011 	break;
7012       case BSP_PARM:
7013 	if (virtualp)
7014 	  error ("%qD declared as a %<virtual%> parameter", object);
7015 	if (inlinep)
7016 	  error ("%qD declared as an %<inline%> parameter", object);
7017 	if (quals)
7018 	  error ("%<const%> and %<volatile%> function specifiers on "
7019 	  	 "%qD invalid in parameter declaration", object);
7020 	break;
7021       case BSP_TYPE:
7022 	if (virtualp)
7023 	  error ("%qD declared as a %<virtual%> type", object);
7024 	if (inlinep)
7025 	  error ("%qD declared as an %<inline%> type", object);
7026 	if (quals)
7027 	  error ("%<const%> and %<volatile%> function specifiers on "
7028 	  	 "%qD invalid in type declaration", object);
7029 	break;
7030       case BSP_FIELD:
7031 	if (virtualp)
7032 	  error ("%qD declared as a %<virtual%> field", object);
7033 	if (inlinep)
7034 	  error ("%qD declared as an %<inline%> field", object);
7035 	if (quals)
7036 	  error ("%<const%> and %<volatile%> function specifiers on "
7037 	  	 "%qD invalid in field declaration", object);
7038 	break;
7039       default:
7040         gcc_unreachable();
7041     }
7042   if (friendp)
7043     error ("%q+D declared as a friend", object);
7044   if (raises
7045       && (TREE_CODE (object) == TYPE_DECL
7046 	  || (!TYPE_PTRFN_P (TREE_TYPE (object))
7047 	      && !TYPE_REFFN_P (TREE_TYPE (object))
7048 	      && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7049     error ("%q+D declared with an exception specification", object);
7050 }
7051 
7052 /* DECL is a member function or static data member and is presently
7053    being defined.  Check that the definition is taking place in a
7054    valid namespace.  */
7055 
7056 static void
7057 check_class_member_definition_namespace (tree decl)
7058 {
7059   /* These checks only apply to member functions and static data
7060      members.  */
7061   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7062 	      || TREE_CODE (decl) == VAR_DECL);
7063   /* We check for problems with specializations in pt.c in
7064      check_specialization_namespace, where we can issue better
7065      diagnostics.  */
7066   if (processing_specialization)
7067     return;
7068   /* There are no restrictions on the placement of
7069      explicit instantiations.  */
7070   if (processing_explicit_instantiation)
7071     return;
7072   /* [class.mfct]
7073 
7074      A member function definition that appears outside of the
7075      class definition shall appear in a namespace scope enclosing
7076      the class definition.
7077 
7078      [class.static.data]
7079 
7080      The definition for a static data member shall appear in a
7081      namespace scope enclosing the member's class definition.  */
7082   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7083     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7084 	       decl, DECL_CONTEXT (decl));
7085 }
7086 
7087 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7088    METHOD_TYPE for a non-static member function; QUALS are the
7089    cv-qualifiers that apply to the function.  */
7090 
7091 tree
7092 build_this_parm (tree type, cp_cv_quals quals)
7093 {
7094   tree this_type;
7095   tree qual_type;
7096   tree parm;
7097   cp_cv_quals this_quals;
7098 
7099   if (CLASS_TYPE_P (type))
7100     {
7101       this_type
7102 	= cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7103       this_type = build_pointer_type (this_type);
7104     }
7105   else
7106     this_type = type_of_this_parm (type);
7107   /* The `this' parameter is implicitly `const'; it cannot be
7108      assigned to.  */
7109   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7110   qual_type = cp_build_qualified_type (this_type, this_quals);
7111   parm = build_artificial_parm (this_identifier, qual_type);
7112   cp_apply_type_quals_to_decl (this_quals, parm);
7113   return parm;
7114 }
7115 
7116 /* DECL is a static member function.  Complain if it was declared
7117    with function-cv-quals.  */
7118 
7119 static void
7120 check_static_quals (tree decl, cp_cv_quals quals)
7121 {
7122   if (quals != TYPE_UNQUALIFIED)
7123     error ("static member function %q#D declared with type qualifiers",
7124 	   decl);
7125 }
7126 
7127 /* CTYPE is class type, or null if non-class.
7128    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7129    or METHOD_TYPE.
7130    DECLARATOR is the function's name.
7131    PARMS is a chain of PARM_DECLs for the function.
7132    VIRTUALP is truthvalue of whether the function is virtual or not.
7133    FLAGS are to be passed through to `grokclassfn'.
7134    QUALS are qualifiers indicating whether the function is `const'
7135    or `volatile'.
7136    RAISES is a list of exceptions that this function can raise.
7137    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7138    not look, and -1 if we should not call `grokclassfn' at all.
7139 
7140    SFK is the kind of special function (if any) for the new function.
7141 
7142    Returns `NULL_TREE' if something goes wrong, after issuing
7143    applicable error messages.  */
7144 
7145 static tree
7146 grokfndecl (tree ctype,
7147 	    tree type,
7148 	    tree declarator,
7149 	    tree parms,
7150 	    tree orig_declarator,
7151 	    int virtualp,
7152 	    enum overload_flags flags,
7153 	    cp_cv_quals quals,
7154 	    tree raises,
7155 	    int check,
7156 	    int friendp,
7157 	    int publicp,
7158 	    int inlinep,
7159 	    special_function_kind sfk,
7160 	    bool funcdef_flag,
7161 	    int template_count,
7162 	    tree in_namespace,
7163 	    tree* attrlist,
7164 	    location_t location)
7165 {
7166   tree decl;
7167   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7168   tree t;
7169 
7170   if (raises)
7171     type = build_exception_variant (type, raises);
7172 
7173   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7174 
7175   /* If we have an explicit location, use it, otherwise use whatever
7176      build_lang_decl used (probably input_location).  */
7177   if (location != UNKNOWN_LOCATION)
7178     DECL_SOURCE_LOCATION (decl) = location;
7179 
7180   if (TREE_CODE (type) == METHOD_TYPE)
7181     {
7182       tree parm;
7183       parm = build_this_parm (type, quals);
7184       DECL_CHAIN (parm) = parms;
7185       parms = parm;
7186     }
7187   DECL_ARGUMENTS (decl) = parms;
7188   for (t = parms; t; t = DECL_CHAIN (t))
7189     DECL_CONTEXT (t) = decl;
7190   /* Propagate volatile out from type to decl.  */
7191   if (TYPE_VOLATILE (type))
7192     TREE_THIS_VOLATILE (decl) = 1;
7193 
7194   /* Setup decl according to sfk.  */
7195   switch (sfk)
7196     {
7197     case sfk_constructor:
7198     case sfk_copy_constructor:
7199     case sfk_move_constructor:
7200       DECL_CONSTRUCTOR_P (decl) = 1;
7201       break;
7202     case sfk_destructor:
7203       DECL_DESTRUCTOR_P (decl) = 1;
7204       break;
7205     default:
7206       break;
7207     }
7208 
7209   /* If pointers to member functions use the least significant bit to
7210      indicate whether a function is virtual, ensure a pointer
7211      to this function will have that bit clear.  */
7212   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7213       && TREE_CODE (type) == METHOD_TYPE
7214       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7215     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7216 
7217   if (friendp
7218       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7219     {
7220       if (funcdef_flag)
7221 	error
7222 	  ("defining explicit specialization %qD in friend declaration",
7223 	   orig_declarator);
7224       else
7225 	{
7226 	  tree fns = TREE_OPERAND (orig_declarator, 0);
7227 	  tree args = TREE_OPERAND (orig_declarator, 1);
7228 
7229 	  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7230 	    {
7231 	      /* Something like `template <class T> friend void f<T>()'.  */
7232 	      error ("invalid use of template-id %qD in declaration "
7233 		     "of primary template",
7234 		     orig_declarator);
7235 	      return NULL_TREE;
7236 	    }
7237 
7238 
7239 	  /* A friend declaration of the form friend void f<>().  Record
7240 	     the information in the TEMPLATE_ID_EXPR.  */
7241 	  SET_DECL_IMPLICIT_INSTANTIATION (decl);
7242 
7243 	  if (TREE_CODE (fns) == COMPONENT_REF)
7244 	    {
7245 	      /* Due to bison parser ickiness, we will have already looked
7246 		 up an operator_name or PFUNCNAME within the current class
7247 		 (see template_id in parse.y). If the current class contains
7248 		 such a name, we'll get a COMPONENT_REF here. Undo that.  */
7249 
7250 	      gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7251 			  == current_class_type);
7252 	      fns = TREE_OPERAND (fns, 1);
7253 	    }
7254 	  gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7255 		      || TREE_CODE (fns) == OVERLOAD);
7256 	  DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7257 
7258 	  for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7259 	    if (TREE_PURPOSE (t)
7260 		&& TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7261 	    {
7262 	      error ("default arguments are not allowed in declaration "
7263 		     "of friend template specialization %qD",
7264 		     decl);
7265 	      return NULL_TREE;
7266 	    }
7267 
7268 	  if (inlinep)
7269 	    {
7270 	      error ("%<inline%> is not allowed in declaration of friend "
7271 		     "template specialization %qD",
7272 		     decl);
7273 	      return NULL_TREE;
7274 	    }
7275 	}
7276     }
7277 
7278   /* If this decl has namespace scope, set that up.  */
7279   if (in_namespace)
7280     set_decl_namespace (decl, in_namespace, friendp);
7281   else if (!ctype)
7282     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7283 
7284   /* `main' and builtins have implicit 'C' linkage.  */
7285   if ((MAIN_NAME_P (declarator)
7286        || (IDENTIFIER_LENGTH (declarator) > 10
7287 	   && IDENTIFIER_POINTER (declarator)[0] == '_'
7288 	   && IDENTIFIER_POINTER (declarator)[1] == '_'
7289 	   && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7290       && current_lang_name == lang_name_cplusplus
7291       && ctype == NULL_TREE
7292       && DECL_FILE_SCOPE_P (decl))
7293     SET_DECL_LANGUAGE (decl, lang_c);
7294 
7295   /* Should probably propagate const out from type to decl I bet (mrs).  */
7296   if (staticp)
7297     {
7298       DECL_STATIC_FUNCTION_P (decl) = 1;
7299       DECL_CONTEXT (decl) = ctype;
7300     }
7301 
7302   if (ctype)
7303     {
7304       DECL_CONTEXT (decl) = ctype;
7305       if (funcdef_flag)
7306 	check_class_member_definition_namespace (decl);
7307     }
7308 
7309   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7310     {
7311       if (processing_template_decl)
7312 	error ("cannot declare %<::main%> to be a template");
7313       if (inlinep)
7314 	error ("cannot declare %<::main%> to be inline");
7315       if (!publicp)
7316 	error ("cannot declare %<::main%> to be static");
7317       inlinep = 0;
7318       publicp = 1;
7319     }
7320 
7321   /* Members of anonymous types and local classes have no linkage; make
7322      them internal.  If a typedef is made later, this will be changed.  */
7323   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7324 		|| decl_function_context (TYPE_MAIN_DECL (ctype))))
7325     publicp = 0;
7326 
7327   if (publicp && cxx_dialect == cxx98)
7328     {
7329       /* [basic.link]: A name with no linkage (notably, the name of a class
7330 	 or enumeration declared in a local scope) shall not be used to
7331 	 declare an entity with linkage.
7332 
7333 	 DR 757 relaxes this restriction for C++0x.  */
7334       t = no_linkage_check (TREE_TYPE (decl),
7335 			    /*relaxed_p=*/false);
7336       if (t)
7337 	{
7338 	  if (TYPE_ANONYMOUS_P (t))
7339 	    {
7340 	      if (DECL_EXTERN_C_P (decl))
7341 		/* Allow this; it's pretty common in C.  */;
7342 	      else
7343 		{
7344 		  permerror (input_location, "anonymous type with no linkage "
7345 			     "used to declare function %q#D with linkage",
7346 			     decl);
7347 		  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7348 		    permerror (input_location, "%q+#D does not refer to the unqualified "
7349 			       "type, so it is not used for linkage",
7350 			       TYPE_NAME (t));
7351 		}
7352 	    }
7353 	  else
7354 	    permerror (input_location, "type %qT with no linkage used to "
7355 		       "declare function %q#D with linkage", t, decl);
7356 	}
7357     }
7358 
7359   TREE_PUBLIC (decl) = publicp;
7360   if (! publicp)
7361     {
7362       DECL_INTERFACE_KNOWN (decl) = 1;
7363       DECL_NOT_REALLY_EXTERN (decl) = 1;
7364     }
7365 
7366   /* If the declaration was declared inline, mark it as such.  */
7367   if (inlinep)
7368     DECL_DECLARED_INLINE_P (decl) = 1;
7369   if (inlinep & 2)
7370     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7371 
7372   DECL_EXTERNAL (decl) = 1;
7373   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7374     {
7375       error (ctype
7376              ? G_("static member function %qD cannot have cv-qualifier")
7377              : G_("non-member function %qD cannot have cv-qualifier"),
7378 	     decl);
7379       quals = TYPE_UNQUALIFIED;
7380     }
7381 
7382   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7383       && !grok_op_properties (decl, /*complain=*/true))
7384     return NULL_TREE;
7385   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7386     {
7387       bool long_long_unsigned_p;
7388       bool long_double_p;
7389       const char *suffix = NULL;
7390       /* [over.literal]/6: Literal operators shall not have C linkage. */
7391       if (DECL_LANGUAGE (decl) == lang_c)
7392 	{
7393 	  error ("literal operator with C linkage");
7394 	  return NULL_TREE;
7395 	}
7396 
7397       if (DECL_NAMESPACE_SCOPE_P (decl))
7398 	{
7399 	  if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7400 					    &long_double_p))
7401 	    {
7402 	      error ("%qD has invalid argument list", decl);
7403 	      return NULL_TREE;
7404 	    }
7405 
7406 	  suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7407 	  if (long_long_unsigned_p)
7408 	    {
7409 	      if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7410 		warning (0, "integer suffix %<%s%>"
7411 			    " shadowed by implementation", suffix);
7412 	    }
7413 	  else if (long_double_p)
7414 	    {
7415 	      if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7416 		warning (0, "floating point suffix %<%s%>"
7417 			    " shadowed by implementation", suffix);
7418 	    }
7419 	}
7420       else
7421 	{
7422 	  error ("%qD must be a non-member function", decl);
7423 	  return NULL_TREE;
7424 	}
7425     }
7426 
7427   if (funcdef_flag)
7428     /* Make the init_value nonzero so pushdecl knows this is not
7429        tentative.  error_mark_node is replaced later with the BLOCK.  */
7430     DECL_INITIAL (decl) = error_mark_node;
7431 
7432   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7433     TREE_NOTHROW (decl) = 1;
7434 
7435   /* Caller will do the rest of this.  */
7436   if (check < 0)
7437     return decl;
7438 
7439   if (ctype != NULL_TREE)
7440     grokclassfn (ctype, decl, flags);
7441 
7442   decl = check_explicit_specialization (orig_declarator, decl,
7443 					template_count,
7444 					2 * funcdef_flag +
7445 					4 * (friendp != 0));
7446   if (decl == error_mark_node)
7447     return NULL_TREE;
7448 
7449   if (DECL_STATIC_FUNCTION_P (decl))
7450     check_static_quals (decl, quals);
7451 
7452   if (attrlist)
7453     {
7454       cplus_decl_attributes (&decl, *attrlist, 0);
7455       *attrlist = NULL_TREE;
7456     }
7457 
7458   /* Check main's type after attributes have been applied.  */
7459   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7460     {
7461       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7462 			integer_type_node))
7463 	{
7464 	  tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7465 	  tree newtype;
7466 	  error ("%<::main%> must return %<int%>");
7467 	  newtype = build_function_type (integer_type_node, oldtypeargs);
7468 	  TREE_TYPE (decl) = newtype;
7469 	}
7470       if (warn_main)
7471 	check_main_parameter_types (decl);
7472     }
7473 
7474   if (ctype != NULL_TREE
7475       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7476       && check)
7477     {
7478       tree old_decl = check_classfn (ctype, decl,
7479 				     (processing_template_decl
7480 				      > template_class_depth (ctype))
7481 				     ? current_template_parms
7482 				     : NULL_TREE);
7483 
7484       if (old_decl == error_mark_node)
7485 	return NULL_TREE;
7486 
7487       if (old_decl)
7488 	{
7489 	  tree ok;
7490 	  tree pushed_scope;
7491 
7492 	  if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7493 	    /* Because grokfndecl is always supposed to return a
7494 	       FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7495 	       here.  We depend on our callers to figure out that its
7496 	       really a template that's being returned.  */
7497 	    old_decl = DECL_TEMPLATE_RESULT (old_decl);
7498 
7499 	  if (DECL_STATIC_FUNCTION_P (old_decl)
7500 	      && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7501 	    {
7502 	      /* Remove the `this' parm added by grokclassfn.  */
7503 	      revert_static_member_fn (decl);
7504 	      check_static_quals (decl, quals);
7505 	    }
7506 	  if (DECL_ARTIFICIAL (old_decl))
7507 	    {
7508 	      error ("definition of implicitly-declared %qD", old_decl);
7509 	      return NULL_TREE;
7510 	    }
7511 	  else if (DECL_DEFAULTED_FN (old_decl))
7512 	    {
7513 	      error ("definition of explicitly-defaulted %q+D", decl);
7514 	      error ("%q+#D explicitly defaulted here", old_decl);
7515 	      return NULL_TREE;
7516 	    }
7517 
7518 	  /* Since we've smashed OLD_DECL to its
7519 	     DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7520 	  if (TREE_CODE (decl) == TEMPLATE_DECL)
7521 	    decl = DECL_TEMPLATE_RESULT (decl);
7522 
7523 	  /* Attempt to merge the declarations.  This can fail, in
7524 	     the case of some invalid specialization declarations.  */
7525 	  pushed_scope = push_scope (ctype);
7526 	  ok = duplicate_decls (decl, old_decl, friendp);
7527 	  if (pushed_scope)
7528 	    pop_scope (pushed_scope);
7529 	  if (!ok)
7530 	    {
7531 	      error ("no %q#D member function declared in class %qT",
7532 		     decl, ctype);
7533 	      return NULL_TREE;
7534 	    }
7535 	  return old_decl;
7536 	}
7537     }
7538 
7539   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7540     return NULL_TREE;
7541 
7542   if (ctype == NULL_TREE || check)
7543     return decl;
7544 
7545   if (virtualp)
7546     DECL_VIRTUAL_P (decl) = 1;
7547 
7548   return decl;
7549 }
7550 
7551 /* decl is a FUNCTION_DECL.
7552    specifiers are the parsed virt-specifiers.
7553 
7554    Set flags to reflect the virt-specifiers.
7555 
7556    Returns decl.  */
7557 
7558 static tree
7559 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7560 {
7561   if (decl == NULL_TREE)
7562     return decl;
7563   if (specifiers & VIRT_SPEC_OVERRIDE)
7564     DECL_OVERRIDE_P (decl) = 1;
7565   if (specifiers & VIRT_SPEC_FINAL)
7566     DECL_FINAL_P (decl) = 1;
7567   return decl;
7568 }
7569 
7570 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7571    the linkage that DECL will receive in the object file.  */
7572 
7573 static void
7574 set_linkage_for_static_data_member (tree decl)
7575 {
7576   /* A static data member always has static storage duration and
7577      external linkage.  Note that static data members are forbidden in
7578      local classes -- the only situation in which a class has
7579      non-external linkage.  */
7580   TREE_PUBLIC (decl) = 1;
7581   TREE_STATIC (decl) = 1;
7582   /* For non-template classes, static data members are always put
7583      out in exactly those files where they are defined, just as
7584      with ordinary namespace-scope variables.  */
7585   if (!processing_template_decl)
7586     DECL_INTERFACE_KNOWN (decl) = 1;
7587 }
7588 
7589 /* Create a VAR_DECL named NAME with the indicated TYPE.
7590 
7591    If SCOPE is non-NULL, it is the class type or namespace containing
7592    the variable.  If SCOPE is NULL, the variable should is created in
7593    the innermost enclosings scope.  */
7594 
7595 static tree
7596 grokvardecl (tree type,
7597 	     tree name,
7598 	     const cp_decl_specifier_seq *declspecs,
7599 	     int initialized,
7600 	     int constp,
7601 	     tree scope)
7602 {
7603   tree decl;
7604   tree explicit_scope;
7605 
7606   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7607 
7608   /* Compute the scope in which to place the variable, but remember
7609      whether or not that scope was explicitly specified by the user.   */
7610   explicit_scope = scope;
7611   if (!scope)
7612     {
7613       /* An explicit "extern" specifier indicates a namespace-scope
7614 	 variable.  */
7615       if (declspecs->storage_class == sc_extern)
7616 	scope = current_decl_namespace ();
7617       else if (!at_function_scope_p ())
7618 	scope = current_scope ();
7619     }
7620 
7621   if (scope
7622       && (/* If the variable is a namespace-scope variable declared in a
7623 	     template, we need DECL_LANG_SPECIFIC.  */
7624 	  (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7625 	  /* Similarly for namespace-scope variables with language linkage
7626 	     other than C++.  */
7627 	  || (TREE_CODE (scope) == NAMESPACE_DECL
7628 	      && current_lang_name != lang_name_cplusplus)
7629 	  /* Similarly for static data members.  */
7630 	  || TYPE_P (scope)))
7631     decl = build_lang_decl (VAR_DECL, name, type);
7632   else
7633     decl = build_decl (input_location, VAR_DECL, name, type);
7634 
7635   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7636     set_decl_namespace (decl, explicit_scope, 0);
7637   else
7638     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7639 
7640   if (declspecs->storage_class == sc_extern)
7641     {
7642       DECL_THIS_EXTERN (decl) = 1;
7643       DECL_EXTERNAL (decl) = !initialized;
7644     }
7645 
7646   if (DECL_CLASS_SCOPE_P (decl))
7647     {
7648       set_linkage_for_static_data_member (decl);
7649       /* This function is only called with out-of-class definitions.  */
7650       DECL_EXTERNAL (decl) = 0;
7651       check_class_member_definition_namespace (decl);
7652     }
7653   /* At top level, either `static' or no s.c. makes a definition
7654      (perhaps tentative), and absence of `static' makes it public.  */
7655   else if (toplevel_bindings_p ())
7656     {
7657       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7658 			    && (DECL_THIS_EXTERN (decl) || ! constp));
7659       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7660     }
7661   /* Not at top level, only `static' makes a static definition.  */
7662   else
7663     {
7664       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7665       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7666     }
7667 
7668   if (declspecs->specs[(int)ds_thread])
7669     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7670 
7671   /* If the type of the decl has no linkage, make sure that we'll
7672      notice that in mark_used.  */
7673   if (cxx_dialect > cxx98
7674       && decl_linkage (decl) != lk_none
7675       && DECL_LANG_SPECIFIC (decl) == NULL
7676       && !DECL_EXTERN_C_P (decl)
7677       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7678     retrofit_lang_decl (decl);
7679 
7680   if (TREE_PUBLIC (decl))
7681     {
7682       /* [basic.link]: A name with no linkage (notably, the name of a class
7683 	 or enumeration declared in a local scope) shall not be used to
7684 	 declare an entity with linkage.
7685 
7686 	 DR 757 relaxes this restriction for C++0x.  */
7687       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7688 		: no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7689       if (t)
7690 	{
7691 	  if (TYPE_ANONYMOUS_P (t))
7692 	    {
7693 	      if (DECL_EXTERN_C_P (decl))
7694 		/* Allow this; it's pretty common in C.  */
7695 		;
7696 	      else
7697 		{
7698 		  /* DRs 132, 319 and 389 seem to indicate types with
7699 		     no linkage can only be used to declare extern "C"
7700 		     entities.  Since it's not always an error in the
7701 		     ISO C++ 90 Standard, we only issue a warning.  */
7702 		  warning (0, "anonymous type with no linkage used to declare "
7703 			   "variable %q#D with linkage", decl);
7704 		  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7705 		    warning (0, "%q+#D does not refer to the unqualified "
7706 			     "type, so it is not used for linkage",
7707 			     TYPE_NAME (t));
7708 		}
7709 	    }
7710 	  else
7711 	    warning (0, "type %qT with no linkage used to declare variable "
7712 		     "%q#D with linkage", t, decl);
7713 	}
7714     }
7715   else
7716     DECL_INTERFACE_KNOWN (decl) = 1;
7717 
7718   return decl;
7719 }
7720 
7721 /* Create and return a canonical pointer to member function type, for
7722    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7723 
7724 tree
7725 build_ptrmemfunc_type (tree type)
7726 {
7727   tree field, fields;
7728   tree t;
7729   tree unqualified_variant = NULL_TREE;
7730 
7731   if (type == error_mark_node)
7732     return type;
7733 
7734   /* If a canonical type already exists for this type, use it.  We use
7735      this method instead of type_hash_canon, because it only does a
7736      simple equality check on the list of field members.  */
7737 
7738   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7739     return t;
7740 
7741   /* Make sure that we always have the unqualified pointer-to-member
7742      type first.  */
7743   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7744     unqualified_variant
7745       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7746 
7747   t = make_class_type (RECORD_TYPE);
7748   xref_basetypes (t, NULL_TREE);
7749 
7750   /* Let the front end know this is a pointer to member function...  */
7751   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7752   /* ... and not really a class type.  */
7753   SET_CLASS_TYPE_P (t, 0);
7754 
7755   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7756   fields = field;
7757 
7758   field = build_decl (input_location, FIELD_DECL, delta_identifier,
7759 		      delta_type_node);
7760   DECL_CHAIN (field) = fields;
7761   fields = field;
7762 
7763   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7764 
7765   /* Zap out the name so that the back end will give us the debugging
7766      information for this anonymous RECORD_TYPE.  */
7767   TYPE_NAME (t) = NULL_TREE;
7768 
7769   /* If this is not the unqualified form of this pointer-to-member
7770      type, set the TYPE_MAIN_VARIANT for this type to be the
7771      unqualified type.  Since they are actually RECORD_TYPEs that are
7772      not variants of each other, we must do this manually.
7773      As we just built a new type there is no need to do yet another copy.  */
7774   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7775     {
7776       int type_quals = cp_type_quals (type);
7777       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7778       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7779       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7780       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7781       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7782       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7783       TREE_TYPE (TYPE_BINFO (t)) = t;
7784     }
7785 
7786   /* Cache this pointer-to-member type so that we can find it again
7787      later.  */
7788   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7789 
7790   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7791     SET_TYPE_STRUCTURAL_EQUALITY (t);
7792   else if (TYPE_CANONICAL (type) != type)
7793     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7794 
7795   return t;
7796 }
7797 
7798 /* Create and return a pointer to data member type.  */
7799 
7800 tree
7801 build_ptrmem_type (tree class_type, tree member_type)
7802 {
7803   if (TREE_CODE (member_type) == METHOD_TYPE)
7804     {
7805       cp_cv_quals quals = type_memfn_quals (member_type);
7806       member_type = build_memfn_type (member_type, class_type, quals);
7807       return build_ptrmemfunc_type (build_pointer_type (member_type));
7808     }
7809   else
7810     {
7811       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7812       return build_offset_type (class_type, member_type);
7813     }
7814 }
7815 
7816 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7817    Check to see that the definition is valid.  Issue appropriate error
7818    messages.  Return 1 if the definition is particularly bad, or 0
7819    otherwise.  */
7820 
7821 static int
7822 check_static_variable_definition (tree decl, tree type)
7823 {
7824   /* Can't check yet if we don't know the type.  */
7825   if (dependent_type_p (type))
7826     return 0;
7827   /* If DECL is declared constexpr, we'll do the appropriate checks
7828      in check_initializer.  */
7829   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7830     return 0;
7831   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7832     {
7833       if (!COMPLETE_TYPE_P (type))
7834 	error ("in-class initialization of static data member %q#D of "
7835 	       "incomplete type", decl);
7836       else if (literal_type_p (type))
7837 	permerror (input_location,
7838 		   "%<constexpr%> needed for in-class initialization of "
7839 		   "static data member %q#D of non-integral type", decl);
7840       else
7841 	error ("in-class initialization of static data member %q#D of "
7842 	       "non-literal type", decl);
7843       return 1;
7844     }
7845 
7846   /* Motion 10 at San Diego: If a static const integral data member is
7847      initialized with an integral constant expression, the initializer
7848      may appear either in the declaration (within the class), or in
7849      the definition, but not both.  If it appears in the class, the
7850      member is a member constant.  The file-scope definition is always
7851      required.  */
7852   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7853     {
7854       error ("invalid in-class initialization of static data member "
7855 	     "of non-integral type %qT",
7856 	     type);
7857       return 1;
7858     }
7859   else if (!CP_TYPE_CONST_P (type))
7860     error ("ISO C++ forbids in-class initialization of non-const "
7861 	   "static member %qD",
7862 	   decl);
7863   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7864     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7865 	     "%qD of non-integral type %qT", decl, type);
7866 
7867   return 0;
7868 }
7869 
7870 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7871    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7872    expressions out into temporary variables so that walk_tree doesn't
7873    step into them (c++/15764).  */
7874 
7875 static tree
7876 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7877 {
7878   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7879   tree expr = *expr_p;
7880   if (TREE_CODE (expr) == SAVE_EXPR)
7881     {
7882       tree op = TREE_OPERAND (expr, 0);
7883       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7884       if (TREE_SIDE_EFFECTS (op))
7885 	TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7886       *walk_subtrees = 0;
7887     }
7888   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7889     *walk_subtrees = 0;
7890   return NULL;
7891 }
7892 
7893 /* Entry point for the above.  */
7894 
7895 static void
7896 stabilize_vla_size (tree size)
7897 {
7898   struct pointer_set_t *pset = pointer_set_create ();
7899   /* Break out any function calls into temporary variables.  */
7900   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7901 }
7902 
7903 /* Given the SIZE (i.e., number of elements) in an array, compute an
7904    appropriate index type for the array.  If non-NULL, NAME is the
7905    name of the thing being declared.  */
7906 
7907 tree
7908 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7909 {
7910   tree type;
7911   tree itype;
7912   tree osize = size;
7913   tree abi_1_itype = NULL_TREE;
7914 
7915   if (error_operand_p (size))
7916     return error_mark_node;
7917 
7918   type = TREE_TYPE (size);
7919   /* type_dependent_expression_p? */
7920   if (!dependent_type_p (type))
7921     {
7922       mark_rvalue_use (size);
7923 
7924       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7925 	  && TREE_SIDE_EFFECTS (size))
7926 	/* In C++98, we mark a non-constant array bound with a magic
7927 	   NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7928       else
7929 	{
7930 	  size = fold_non_dependent_expr (size);
7931 
7932 	  if (CLASS_TYPE_P (type)
7933 	      && CLASSTYPE_LITERAL_P (type))
7934 	    {
7935 	      size = build_expr_type_conversion (WANT_INT, size, true);
7936 	      if (!size)
7937 		{
7938 		  if (!(complain & tf_error))
7939 		    return error_mark_node;
7940 		  if (name)
7941 		    error ("size of array %qD has non-integral type %qT",
7942 			   name, type);
7943 		  else
7944 		    error ("size of array has non-integral type %qT", type);
7945 		  size = integer_one_node;
7946 		}
7947 	      if (size == error_mark_node)
7948 		return error_mark_node;
7949 	      type = TREE_TYPE (size);
7950 	      /* We didn't support this case in GCC 3.2, so don't bother
7951 		 trying to model it now in ABI v1.  */
7952 	      abi_1_itype = error_mark_node;
7953 	    }
7954 
7955 	  size = maybe_constant_value (size);
7956 	  if (!TREE_CONSTANT (size))
7957 	    size = osize;
7958 	}
7959 
7960       if (error_operand_p (size))
7961 	return error_mark_node;
7962 
7963       /* The array bound must be an integer type.  */
7964       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7965 	{
7966 	  if (!(complain & tf_error))
7967 	    return error_mark_node;
7968 	  if (name)
7969 	    error ("size of array %qD has non-integral type %qT", name, type);
7970 	  else
7971 	    error ("size of array has non-integral type %qT", type);
7972 	  size = integer_one_node;
7973 	  type = TREE_TYPE (size);
7974 	}
7975     }
7976 
7977   /* A type is dependent if it is...an array type constructed from any
7978      dependent type or whose size is specified by a constant expression
7979      that is value-dependent.  */
7980   /* We can only call value_dependent_expression_p on integral constant
7981      expressions; treat non-constant expressions as dependent, too.  */
7982   if (processing_template_decl
7983       && (dependent_type_p (type)
7984 	  || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7985     {
7986       /* We cannot do any checking for a SIZE that isn't known to be
7987 	 constant. Just build the index type and mark that it requires
7988 	 structural equality checks.  */
7989       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7990 					   size, integer_one_node));
7991       TYPE_DEPENDENT_P (itype) = 1;
7992       TYPE_DEPENDENT_P_VALID (itype) = 1;
7993       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7994       return itype;
7995     }
7996 
7997   if (!abi_version_at_least (2) && processing_template_decl
7998       && abi_1_itype == NULL_TREE)
7999     /* For abi-1, we handled all instances in templates the same way,
8000        even when they were non-dependent. This affects the manglings
8001        produced.  So, we do the normal checking for non-dependent
8002        sizes, but at the end we'll return the same type that abi-1
8003        would have, but with TYPE_CANONICAL set to the "right"
8004        value that the current ABI would provide. */
8005     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8006 					       osize, integer_one_node));
8007 
8008   /* Normally, the array-bound will be a constant.  */
8009   if (TREE_CODE (size) == INTEGER_CST)
8010     {
8011       /* Check to see if the array bound overflowed.  Make that an
8012 	 error, no matter how generous we're being.  */
8013       constant_expression_error (size);
8014 
8015       /* An array must have a positive number of elements.  */
8016       if (INT_CST_LT (size, integer_zero_node))
8017 	{
8018 	  if (!(complain & tf_error))
8019 	    return error_mark_node;
8020 	  if (name)
8021 	    error ("size of array %qD is negative", name);
8022 	  else
8023 	    error ("size of array is negative");
8024 	  size = integer_one_node;
8025 	}
8026       /* As an extension we allow zero-sized arrays.  */
8027       else if (integer_zerop (size))
8028 	{
8029 	  if (!(complain & tf_error))
8030 	    /* We must fail if performing argument deduction (as
8031 	       indicated by the state of complain), so that
8032 	       another substitution can be found.  */
8033 	    return error_mark_node;
8034 	  else if (in_system_header)
8035 	    /* Allow them in system headers because glibc uses them.  */;
8036 	  else if (name)
8037 	    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8038 	  else
8039 	    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8040 	}
8041     }
8042   else if (TREE_CONSTANT (size)
8043 	   /* We don't allow VLAs at non-function scopes, or during
8044 	      tentative template substitution.  */
8045 	   || !at_function_scope_p () || !(complain & tf_error))
8046     {
8047       if (!(complain & tf_error))
8048 	return error_mark_node;
8049       /* `(int) &fn' is not a valid array bound.  */
8050       if (name)
8051 	error ("size of array %qD is not an integral constant-expression",
8052 	       name);
8053       else
8054 	error ("size of array is not an integral constant-expression");
8055       size = integer_one_node;
8056     }
8057   else if (pedantic && warn_vla != 0)
8058     {
8059       if (name)
8060 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8061       else
8062 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8063     }
8064   else if (warn_vla > 0)
8065     {
8066       if (name)
8067 	warning (OPT_Wvla,
8068                  "variable length array %qD is used", name);
8069       else
8070 	warning (OPT_Wvla,
8071                  "variable length array is used");
8072     }
8073 
8074   if (processing_template_decl && !TREE_CONSTANT (size))
8075     /* A variable sized array.  */
8076     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8077   else
8078     {
8079       HOST_WIDE_INT saved_processing_template_decl;
8080 
8081       /* Compute the index of the largest element in the array.  It is
8082 	 one less than the number of elements in the array.  We save
8083 	 and restore PROCESSING_TEMPLATE_DECL so that computations in
8084 	 cp_build_binary_op will be appropriately folded.  */
8085       saved_processing_template_decl = processing_template_decl;
8086       processing_template_decl = 0;
8087       itype = cp_build_binary_op (input_location,
8088 				  MINUS_EXPR,
8089 				  cp_convert (ssizetype, size),
8090 				  cp_convert (ssizetype, integer_one_node),
8091 				  tf_warning_or_error);
8092       itype = fold (itype);
8093       processing_template_decl = saved_processing_template_decl;
8094 
8095       if (!TREE_CONSTANT (itype))
8096 	/* A variable sized array.  */
8097 	itype = variable_size (itype);
8098       /* Make sure that there was no overflow when creating to a signed
8099 	 index type.  (For example, on a 32-bit machine, an array with
8100 	 size 2^32 - 1 is too big.)  */
8101       else if (TREE_CODE (itype) == INTEGER_CST
8102 	       && TREE_OVERFLOW (itype))
8103 	{
8104 	  if (!(complain & tf_error))
8105 	    return error_mark_node;
8106 	  error ("overflow in array dimension");
8107 	  TREE_OVERFLOW (itype) = 0;
8108 	}
8109     }
8110 
8111   /* Create and return the appropriate index type.  */
8112   if (abi_1_itype && abi_1_itype != error_mark_node)
8113     {
8114       tree t = build_index_type (itype);
8115       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8116       itype = abi_1_itype;
8117     }
8118   else
8119     itype = build_index_type (itype);
8120 
8121   /* If the index type were dependent, we would have returned early, so
8122      remember that it isn't.  */
8123   TYPE_DEPENDENT_P (itype) = 0;
8124   TYPE_DEPENDENT_P_VALID (itype) = 1;
8125   return itype;
8126 }
8127 
8128 /* Returns the scope (if any) in which the entity declared by
8129    DECLARATOR will be located.  If the entity was declared with an
8130    unqualified name, NULL_TREE is returned.  */
8131 
8132 tree
8133 get_scope_of_declarator (const cp_declarator *declarator)
8134 {
8135   while (declarator && declarator->kind != cdk_id)
8136     declarator = declarator->declarator;
8137 
8138   /* If the declarator-id is a SCOPE_REF, the scope in which the
8139      declaration occurs is the first operand.  */
8140   if (declarator
8141       && declarator->u.id.qualifying_scope)
8142     return declarator->u.id.qualifying_scope;
8143 
8144   /* Otherwise, the declarator is not a qualified name; the entity will
8145      be declared in the current scope.  */
8146   return NULL_TREE;
8147 }
8148 
8149 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8150    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8151    with this type.  */
8152 
8153 static tree
8154 create_array_type_for_decl (tree name, tree type, tree size)
8155 {
8156   tree itype = NULL_TREE;
8157 
8158   /* If things have already gone awry, bail now.  */
8159   if (type == error_mark_node || size == error_mark_node)
8160     return error_mark_node;
8161 
8162   /* 8.3.4/1: If the type of the identifier of D contains the auto
8163      type-specifier, the program is ill-formed.  */
8164   if (pedantic && type_uses_auto (type))
8165     pedwarn (input_location, OPT_pedantic,
8166 	     "declaration of %qD as array of %<auto%>", name);
8167 
8168   /* If there are some types which cannot be array elements,
8169      issue an error-message and return.  */
8170   switch (TREE_CODE (type))
8171     {
8172     case VOID_TYPE:
8173       if (name)
8174         error ("declaration of %qD as array of void", name);
8175       else
8176         error ("creating array of void");
8177       return error_mark_node;
8178 
8179     case FUNCTION_TYPE:
8180       if (name)
8181         error ("declaration of %qD as array of functions", name);
8182       else
8183         error ("creating array of functions");
8184       return error_mark_node;
8185 
8186     case REFERENCE_TYPE:
8187       if (name)
8188         error ("declaration of %qD as array of references", name);
8189       else
8190         error ("creating array of references");
8191       return error_mark_node;
8192 
8193     case METHOD_TYPE:
8194       if (name)
8195         error ("declaration of %qD as array of function members", name);
8196       else
8197         error ("creating array of function members");
8198       return error_mark_node;
8199 
8200     default:
8201       break;
8202     }
8203 
8204   /* [dcl.array]
8205 
8206      The constant expressions that specify the bounds of the arrays
8207      can be omitted only for the first member of the sequence.  */
8208   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8209     {
8210       if (name)
8211 	error ("declaration of %qD as multidimensional array must "
8212 	       "have bounds for all dimensions except the first",
8213 	       name);
8214       else
8215 	error ("multidimensional array must have bounds for all "
8216 	       "dimensions except the first");
8217 
8218       return error_mark_node;
8219     }
8220 
8221   /* Figure out the index type for the array.  */
8222   if (size)
8223     itype = compute_array_index_type (name, size, tf_warning_or_error);
8224 
8225   /* [dcl.array]
8226      T is called the array element type; this type shall not be [...] an
8227      abstract class type.  */
8228   abstract_virtuals_error (name, type);
8229 
8230   return build_cplus_array_type (type, itype);
8231 }
8232 
8233 /* Check that it's OK to declare a function with the indicated TYPE.
8234    SFK indicates the kind of special function (if any) that this
8235    function is.  OPTYPE is the type given in a conversion operator
8236    declaration, or the class type for a constructor/destructor.
8237    Returns the actual return type of the function; that
8238    may be different than TYPE if an error occurs, or for certain
8239    special functions.  */
8240 
8241 static tree
8242 check_special_function_return_type (special_function_kind sfk,
8243 				    tree type,
8244 				    tree optype)
8245 {
8246   switch (sfk)
8247     {
8248     case sfk_constructor:
8249       if (type)
8250 	error ("return type specification for constructor invalid");
8251 
8252       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8253 	type = build_pointer_type (optype);
8254       else
8255 	type = void_type_node;
8256       break;
8257 
8258     case sfk_destructor:
8259       if (type)
8260 	error ("return type specification for destructor invalid");
8261       /* We can't use the proper return type here because we run into
8262 	 problems with ambiguous bases and covariant returns.
8263 	 Java classes are left unchanged because (void *) isn't a valid
8264 	 Java type, and we don't want to change the Java ABI.  */
8265       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8266 	type = build_pointer_type (void_type_node);
8267       else
8268 	type = void_type_node;
8269       break;
8270 
8271     case sfk_conversion:
8272       if (type)
8273 	error ("return type specified for %<operator %T%>",  optype);
8274       type = optype;
8275       break;
8276 
8277     default:
8278       gcc_unreachable ();
8279     }
8280 
8281   return type;
8282 }
8283 
8284 /* A variable or data member (whose unqualified name is IDENTIFIER)
8285    has been declared with the indicated TYPE.  If the TYPE is not
8286    acceptable, issue an error message and return a type to use for
8287    error-recovery purposes.  */
8288 
8289 tree
8290 check_var_type (tree identifier, tree type)
8291 {
8292   if (VOID_TYPE_P (type))
8293     {
8294       if (!identifier)
8295 	error ("unnamed variable or field declared void");
8296       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8297 	{
8298 	  gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8299 	  error ("variable or field %qE declared void", identifier);
8300 	}
8301       else
8302 	error ("variable or field declared void");
8303       type = error_mark_node;
8304     }
8305 
8306   return type;
8307 }
8308 
8309 /* Functions for adjusting the visibility of a tagged type and its nested
8310    types when it gets a name for linkage purposes from a typedef.  */
8311 
8312 static void bt_reset_linkage (binding_entry, void *);
8313 static void
8314 reset_type_linkage (tree type)
8315 {
8316   set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8317   if (CLASS_TYPE_P (type))
8318     binding_table_foreach (CLASSTYPE_NESTED_UTDS (type), bt_reset_linkage, NULL);
8319 }
8320 static void
8321 bt_reset_linkage (binding_entry b, void *data ATTRIBUTE_UNUSED)
8322 {
8323   reset_type_linkage (b->type);
8324 }
8325 
8326 /* Given declspecs and a declarator (abstract or otherwise), determine
8327    the name and type of the object declared and construct a DECL node
8328    for it.
8329 
8330    DECLSPECS points to the representation of declaration-specifier
8331    sequence that precedes declarator.
8332 
8333    DECL_CONTEXT says which syntactic context this declaration is in:
8334      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8335      FUNCDEF for a function definition.  Like NORMAL but a few different
8336       error messages in each case.  Return value may be zero meaning
8337       this definition is too screwy to try to parse.
8338      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8339       handle member functions (which have FIELD context).
8340       Return value may be zero meaning this definition is too screwy to
8341       try to parse.
8342      PARM for a parameter declaration (either within a function prototype
8343       or before a function body).  Make a PARM_DECL, or return void_type_node.
8344      TPARM for a template parameter declaration.
8345      CATCHPARM for a parameter declaration before a catch clause.
8346      TYPENAME if for a typename (in a cast or sizeof).
8347       Don't make a DECL node; just return the ..._TYPE node.
8348      FIELD for a struct or union field; make a FIELD_DECL.
8349      BITFIELD for a field with specified width.
8350 
8351    INITIALIZED is as for start_decl.
8352 
8353    ATTRLIST is a pointer to the list of attributes, which may be NULL
8354    if there are none; *ATTRLIST may be modified if attributes from inside
8355    the declarator should be applied to the declaration.
8356 
8357    When this function is called, scoping variables (such as
8358    CURRENT_CLASS_TYPE) should reflect the scope in which the
8359    declaration occurs, not the scope in which the new declaration will
8360    be placed.  For example, on:
8361 
8362      void S::f() { ... }
8363 
8364    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8365    should not be `S'.
8366 
8367    Returns a DECL (if a declarator is present), a TYPE (if there is no
8368    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8369    error occurs. */
8370 
8371 tree
8372 grokdeclarator (const cp_declarator *declarator,
8373 		const cp_decl_specifier_seq *declspecs,
8374 		enum decl_context decl_context,
8375 		int initialized,
8376 		tree* attrlist)
8377 {
8378   tree type = NULL_TREE;
8379   int longlong = 0;
8380   int explicit_int128 = 0;
8381   int virtualp, explicitp, friendp, inlinep, staticp;
8382   int explicit_int = 0;
8383   int explicit_char = 0;
8384   int defaulted_int = 0;
8385   tree dependent_name = NULL_TREE;
8386 
8387   tree typedef_decl = NULL_TREE;
8388   const char *name = NULL;
8389   tree typedef_type = NULL_TREE;
8390   /* True if this declarator is a function definition.  */
8391   bool funcdef_flag = false;
8392   cp_declarator_kind innermost_code = cdk_error;
8393   int bitfield = 0;
8394 #if 0
8395   /* See the code below that used this.  */
8396   tree decl_attr = NULL_TREE;
8397 #endif
8398 
8399   /* Keep track of what sort of function is being processed
8400      so that we can warn about default return values, or explicit
8401      return values which do not match prescribed defaults.  */
8402   special_function_kind sfk = sfk_none;
8403 
8404   tree dname = NULL_TREE;
8405   tree ctor_return_type = NULL_TREE;
8406   enum overload_flags flags = NO_SPECIAL;
8407   /* cv-qualifiers that apply to the declarator, for a declaration of
8408      a member function.  */
8409   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8410   /* virt-specifiers that apply to the declarator, for a declaration of
8411      a member function.  */
8412   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8413   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8414   int type_quals;
8415   tree raises = NULL_TREE;
8416   int template_count = 0;
8417   tree returned_attrs = NULL_TREE;
8418   tree parms = NULL_TREE;
8419   const cp_declarator *id_declarator;
8420   /* The unqualified name of the declarator; either an
8421      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8422   tree unqualified_id;
8423   /* The class type, if any, in which this entity is located,
8424      or NULL_TREE if none.  Note that this value may be different from
8425      the current class type; for example if an attempt is made to declare
8426      "A::f" inside "B", this value will be "A".  */
8427   tree ctype = current_class_type;
8428   /* The NAMESPACE_DECL for the namespace in which this entity is
8429      located.  If an unqualified name is used to declare the entity,
8430      this value will be NULL_TREE, even if the entity is located at
8431      namespace scope.  */
8432   tree in_namespace = NULL_TREE;
8433   cp_storage_class storage_class;
8434   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8435   bool type_was_error_mark_node = false;
8436   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8437   bool template_type_arg = false;
8438   bool template_parm_flag = false;
8439   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8440   const char *errmsg;
8441 
8442   signed_p = declspecs->specs[(int)ds_signed];
8443   unsigned_p = declspecs->specs[(int)ds_unsigned];
8444   short_p = declspecs->specs[(int)ds_short];
8445   long_p = declspecs->specs[(int)ds_long];
8446   longlong = declspecs->specs[(int)ds_long] >= 2;
8447   explicit_int128 = declspecs->explicit_int128_p;
8448   thread_p = declspecs->specs[(int)ds_thread];
8449 
8450   if (decl_context == FUNCDEF)
8451     funcdef_flag = true, decl_context = NORMAL;
8452   else if (decl_context == MEMFUNCDEF)
8453     funcdef_flag = true, decl_context = FIELD;
8454   else if (decl_context == BITFIELD)
8455     bitfield = 1, decl_context = FIELD;
8456   else if (decl_context == TEMPLATE_TYPE_ARG)
8457     template_type_arg = true, decl_context = TYPENAME;
8458   else if (decl_context == TPARM)
8459     template_parm_flag = true, decl_context = PARM;
8460 
8461   if (initialized > 1)
8462     funcdef_flag = true;
8463 
8464   /* Look inside a declarator for the name being declared
8465      and get it as a string, for an error message.  */
8466   for (id_declarator = declarator;
8467        id_declarator;
8468        id_declarator = id_declarator->declarator)
8469     {
8470       if (id_declarator->kind != cdk_id)
8471 	innermost_code = id_declarator->kind;
8472 
8473       switch (id_declarator->kind)
8474 	{
8475 	case cdk_function:
8476 	  if (id_declarator->declarator
8477 	      && id_declarator->declarator->kind == cdk_id)
8478 	    {
8479 	      sfk = id_declarator->declarator->u.id.sfk;
8480 	      if (sfk == sfk_destructor)
8481 		flags = DTOR_FLAG;
8482 	    }
8483 	  break;
8484 
8485 	case cdk_id:
8486 	  {
8487 	    tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8488 	    tree decl = id_declarator->u.id.unqualified_name;
8489 	    if (!decl)
8490 	      break;
8491 	    if (qualifying_scope)
8492 	      {
8493 		if (at_function_scope_p ())
8494 		  {
8495 		    /* [dcl.meaning]
8496 
8497 		       A declarator-id shall not be qualified except
8498 		       for ...
8499 
8500 		       None of the cases are permitted in block
8501 		       scope.  */
8502 		    if (qualifying_scope == global_namespace)
8503 		      error ("invalid use of qualified-name %<::%D%>",
8504 			     decl);
8505 		    else if (TYPE_P (qualifying_scope))
8506 		      error ("invalid use of qualified-name %<%T::%D%>",
8507 			     qualifying_scope, decl);
8508 		    else
8509 		      error ("invalid use of qualified-name %<%D::%D%>",
8510 			     qualifying_scope, decl);
8511 		    return error_mark_node;
8512 		  }
8513 		else if (TYPE_P (qualifying_scope))
8514 		  {
8515 		    ctype = qualifying_scope;
8516 		    if (!MAYBE_CLASS_TYPE_P (ctype))
8517 		      {
8518 			error ("%q#T is not a class or a namespace", ctype);
8519 			ctype = NULL_TREE;
8520 		      }
8521 		    else if (innermost_code != cdk_function
8522 			     && current_class_type
8523 			     && !UNIQUELY_DERIVED_FROM_P (ctype,
8524 							  current_class_type))
8525 		      {
8526 			error ("type %qT is not derived from type %qT",
8527 			       ctype, current_class_type);
8528 			return error_mark_node;
8529 		      }
8530 		  }
8531 		else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8532 		  in_namespace = qualifying_scope;
8533 	      }
8534 	    switch (TREE_CODE (decl))
8535 	      {
8536 	      case BIT_NOT_EXPR:
8537 		{
8538 		  tree type;
8539 
8540 		  if (innermost_code != cdk_function)
8541 		    {
8542 		      error ("declaration of %qD as non-function", decl);
8543 		      return error_mark_node;
8544 		    }
8545 		  else if (!qualifying_scope
8546 			   && !(current_class_type && at_class_scope_p ()))
8547 		    {
8548 		      error ("declaration of %qD as non-member", decl);
8549 		      return error_mark_node;
8550 		    }
8551 
8552 		  type = TREE_OPERAND (decl, 0);
8553 		  if (TYPE_P (type))
8554 		    type = constructor_name (type);
8555 		  name = identifier_to_locale (IDENTIFIER_POINTER (type));
8556 		  dname = decl;
8557 		}
8558 		break;
8559 
8560 	      case TEMPLATE_ID_EXPR:
8561 		{
8562 		  tree fns = TREE_OPERAND (decl, 0);
8563 
8564 		  dname = fns;
8565 		  if (TREE_CODE (dname) != IDENTIFIER_NODE)
8566 		    {
8567 		      gcc_assert (is_overloaded_fn (dname));
8568 		      dname = DECL_NAME (get_first_fn (dname));
8569 		    }
8570 		}
8571 		/* Fall through.  */
8572 
8573 	      case IDENTIFIER_NODE:
8574 		if (TREE_CODE (decl) == IDENTIFIER_NODE)
8575 		  dname = decl;
8576 
8577 		if (C_IS_RESERVED_WORD (dname))
8578 		  {
8579 		    error ("declarator-id missing; using reserved word %qD",
8580 			   dname);
8581 		    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8582 		  }
8583 		else if (!IDENTIFIER_TYPENAME_P (dname))
8584 		  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8585 		else
8586 		  {
8587 		    gcc_assert (flags == NO_SPECIAL);
8588 		    flags = TYPENAME_FLAG;
8589 		    ctor_return_type = TREE_TYPE (dname);
8590 		    sfk = sfk_conversion;
8591 		    if (is_typename_at_global_scope (dname))
8592 		      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8593 		    else
8594 		      name = "<invalid operator>";
8595 		  }
8596 		break;
8597 
8598 	      default:
8599 		gcc_unreachable ();
8600 	      }
8601 	    break;
8602 	  }
8603 
8604 	case cdk_array:
8605 	case cdk_pointer:
8606 	case cdk_reference:
8607 	case cdk_ptrmem:
8608 	  break;
8609 
8610 	case cdk_error:
8611 	  return error_mark_node;
8612 
8613 	default:
8614 	  gcc_unreachable ();
8615 	}
8616       if (id_declarator->kind == cdk_id)
8617 	break;
8618     }
8619 
8620   /* [dcl.fct.edf]
8621 
8622      The declarator in a function-definition shall have the form
8623      D1 ( parameter-declaration-clause) ...  */
8624   if (funcdef_flag && innermost_code != cdk_function)
8625     {
8626       error ("function definition does not declare parameters");
8627       return error_mark_node;
8628     }
8629 
8630   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8631       && innermost_code != cdk_function
8632       && ! (ctype && !declspecs->any_specifiers_p))
8633     {
8634       error ("declaration of %qD as non-function", dname);
8635       return error_mark_node;
8636     }
8637 
8638   if (dname
8639       && TREE_CODE (dname) == IDENTIFIER_NODE
8640       && UDLIT_OPER_P (dname)
8641       && innermost_code != cdk_function)
8642     {
8643       error ("declaration of %qD as non-function", dname);
8644       return error_mark_node;
8645     }
8646 
8647   if (dname && IDENTIFIER_OPNAME_P (dname))
8648     {
8649       if (declspecs->specs[(int)ds_typedef])
8650 	{
8651 	  error ("declaration of %qD as %<typedef%>", dname);
8652 	  return error_mark_node;
8653 	}
8654       else if (decl_context == PARM || decl_context == CATCHPARM)
8655 	{
8656 	  error ("declaration of %qD as parameter", dname);
8657 	  return error_mark_node;
8658 	}
8659     }
8660 
8661   /* Anything declared one level down from the top level
8662      must be one of the parameters of a function
8663      (because the body is at least two levels down).  */
8664 
8665   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8666      by not allowing C++ class definitions to specify their parameters
8667      with xdecls (must be spec.d in the parmlist).
8668 
8669      Since we now wait to push a class scope until we are sure that
8670      we are in a legitimate method context, we must set oldcname
8671      explicitly (since current_class_name is not yet alive).
8672 
8673      We also want to avoid calling this a PARM if it is in a namespace.  */
8674 
8675   if (decl_context == NORMAL && !toplevel_bindings_p ())
8676     {
8677       cp_binding_level *b = current_binding_level;
8678       current_binding_level = b->level_chain;
8679       if (current_binding_level != 0 && toplevel_bindings_p ())
8680 	decl_context = PARM;
8681       current_binding_level = b;
8682     }
8683 
8684   if (name == NULL)
8685     name = decl_context == PARM ? "parameter" : "type name";
8686 
8687   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8688     {
8689       error ("%<constexpr%> cannot appear in a typedef declaration");
8690       return error_mark_node;
8691     }
8692 
8693   /* If there were multiple types specified in the decl-specifier-seq,
8694      issue an error message.  */
8695   if (declspecs->multiple_types_p)
8696     {
8697       error ("two or more data types in declaration of %qs", name);
8698       return error_mark_node;
8699     }
8700 
8701   if (declspecs->conflicting_specifiers_p)
8702     {
8703       error ("conflicting specifiers in declaration of %qs", name);
8704       return error_mark_node;
8705     }
8706 
8707   /* Extract the basic type from the decl-specifier-seq.  */
8708   type = declspecs->type;
8709   if (type == error_mark_node)
8710     {
8711       type = NULL_TREE;
8712       type_was_error_mark_node = true;
8713     }
8714   /* If the entire declaration is itself tagged as deprecated then
8715      suppress reports of deprecated items.  */
8716   if (type && TREE_DEPRECATED (type)
8717       && deprecated_state != DEPRECATED_SUPPRESS)
8718     warn_deprecated_use (type, NULL_TREE);
8719   if (type && TREE_CODE (type) == TYPE_DECL)
8720     {
8721       typedef_decl = type;
8722       type = TREE_TYPE (typedef_decl);
8723       if (TREE_DEPRECATED (type)
8724 	  && DECL_ARTIFICIAL (typedef_decl)
8725 	  && deprecated_state != DEPRECATED_SUPPRESS)
8726 	warn_deprecated_use (type, NULL_TREE);
8727     }
8728   /* No type at all: default to `int', and set DEFAULTED_INT
8729      because it was not a user-defined typedef.  */
8730   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8731     {
8732       /* These imply 'int'.  */
8733       type = integer_type_node;
8734       defaulted_int = 1;
8735     }
8736   /* Gather flags.  */
8737   explicit_int = declspecs->explicit_int_p;
8738   explicit_char = declspecs->explicit_char_p;
8739 
8740 #if 0
8741   /* See the code below that used this.  */
8742   if (typedef_decl)
8743     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8744 #endif
8745   typedef_type = type;
8746 
8747 
8748   if (sfk != sfk_conversion)
8749     ctor_return_type = ctype;
8750 
8751   if (sfk != sfk_none)
8752     type = check_special_function_return_type (sfk, type,
8753 					       ctor_return_type);
8754   else if (type == NULL_TREE)
8755     {
8756       int is_main;
8757 
8758       explicit_int = -1;
8759 
8760       /* We handle `main' specially here, because 'main () { }' is so
8761 	 common.  With no options, it is allowed.  With -Wreturn-type,
8762 	 it is a warning.  It is only an error with -pedantic-errors.  */
8763       is_main = (funcdef_flag
8764 		 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8765 		 && MAIN_NAME_P (dname)
8766 		 && ctype == NULL_TREE
8767 		 && in_namespace == NULL_TREE
8768 		 && current_namespace == global_namespace);
8769 
8770       if (type_was_error_mark_node)
8771 	/* We've already issued an error, don't complain more.  */;
8772       else if (in_system_header || flag_ms_extensions)
8773 	/* Allow it, sigh.  */;
8774       else if (! is_main)
8775 	permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8776       else if (pedantic)
8777 	pedwarn (input_location, OPT_pedantic,
8778 		 "ISO C++ forbids declaration of %qs with no type", name);
8779       else
8780 	warning (OPT_Wreturn_type,
8781                  "ISO C++ forbids declaration of %qs with no type", name);
8782 
8783       type = integer_type_node;
8784     }
8785 
8786   ctype = NULL_TREE;
8787 
8788   if (explicit_int128)
8789     {
8790       if (int128_integer_type_node == NULL_TREE)
8791 	{
8792 	  error ("%<__int128%> is not supported by this target");
8793 	  explicit_int128 = false;
8794 	}
8795       else if (pedantic && ! in_system_header)
8796 	pedwarn (input_location, OPT_pedantic,
8797 		 "ISO C++ does not support %<__int128%> for %qs", name);
8798     }
8799 
8800   /* Now process the modifiers that were specified
8801      and check for invalid combinations.  */
8802 
8803   /* Long double is a special combination.  */
8804   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8805     {
8806       long_p = false;
8807       type = cp_build_qualified_type (long_double_type_node,
8808 				      cp_type_quals (type));
8809     }
8810 
8811   /* Check all other uses of type modifiers.  */
8812 
8813   if (unsigned_p || signed_p || long_p || short_p)
8814     {
8815       int ok = 0;
8816 
8817       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8818 	error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8819       else if (signed_p && unsigned_p)
8820 	error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8821       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8822 	error ("%<long long%> invalid for %qs", name);
8823       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8824 	error ("%<long%> invalid for %qs", name);
8825       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8826 	error ("%<short%> invalid for %qs", name);
8827       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8828 	error ("%<long%> or %<short%> invalid for %qs", name);
8829       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8830 	error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8831       else if ((long_p || short_p) && explicit_char)
8832 	error ("%<long%> or %<short%> specified with char for %qs", name);
8833       else if (long_p && short_p)
8834 	error ("%<long%> and %<short%> specified together for %qs", name);
8835       else if (type == char16_type_node || type == char32_type_node)
8836 	{
8837 	  if (signed_p || unsigned_p)
8838 	    error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8839 	  else if (short_p || long_p)
8840 	    error ("%<short%> or %<long%> invalid for %qs", name);
8841 	}
8842       else
8843 	{
8844 	  ok = 1;
8845 	  if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8846 	    {
8847 	      pedwarn (input_location, OPT_pedantic,
8848 		       "long, short, signed or unsigned used invalidly for %qs",
8849 		       name);
8850 	      if (flag_pedantic_errors)
8851 		ok = 0;
8852 	    }
8853 	}
8854 
8855       /* Discard the type modifiers if they are invalid.  */
8856       if (! ok)
8857 	{
8858 	  unsigned_p = false;
8859 	  signed_p = false;
8860 	  long_p = false;
8861 	  short_p = false;
8862 	  longlong = 0;
8863 	}
8864     }
8865 
8866   /* Decide whether an integer type is signed or not.
8867      Optionally treat bitfields as signed by default.  */
8868   if (unsigned_p
8869       /* [class.bit]
8870 
8871 	 It is implementation-defined whether a plain (neither
8872 	 explicitly signed or unsigned) char, short, int, or long
8873 	 bit-field is signed or unsigned.
8874 
8875 	 Naturally, we extend this to long long as well.  Note that
8876 	 this does not include wchar_t.  */
8877       || (bitfield && !flag_signed_bitfields
8878 	  && !signed_p
8879 	  /* A typedef for plain `int' without `signed' can be
8880 	     controlled just like plain `int', but a typedef for
8881 	     `signed int' cannot be so controlled.  */
8882 	  && !(typedef_decl
8883 	       && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8884 	  && TREE_CODE (type) == INTEGER_TYPE
8885 	  && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8886     {
8887       if (explicit_int128)
8888 	type = int128_unsigned_type_node;
8889       else if (longlong)
8890 	type = long_long_unsigned_type_node;
8891       else if (long_p)
8892 	type = long_unsigned_type_node;
8893       else if (short_p)
8894 	type = short_unsigned_type_node;
8895       else if (type == char_type_node)
8896 	type = unsigned_char_type_node;
8897       else if (typedef_decl)
8898 	type = unsigned_type_for (type);
8899       else
8900 	type = unsigned_type_node;
8901     }
8902   else if (signed_p && type == char_type_node)
8903     type = signed_char_type_node;
8904   else if (explicit_int128)
8905     type = int128_integer_type_node;
8906   else if (longlong)
8907     type = long_long_integer_type_node;
8908   else if (long_p)
8909     type = long_integer_type_node;
8910   else if (short_p)
8911     type = short_integer_type_node;
8912 
8913   if (declspecs->specs[(int)ds_complex])
8914     {
8915       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8916 	error ("complex invalid for %qs", name);
8917       /* If we just have "complex", it is equivalent to
8918 	 "complex double", but if any modifiers at all are specified it is
8919 	 the complex form of TYPE.  E.g, "complex short" is
8920 	 "complex short int".  */
8921       else if (defaulted_int && ! longlong && ! explicit_int128
8922 	       && ! (long_p || short_p || signed_p || unsigned_p))
8923 	type = complex_double_type_node;
8924       else if (type == integer_type_node)
8925 	type = complex_integer_type_node;
8926       else if (type == float_type_node)
8927 	type = complex_float_type_node;
8928       else if (type == double_type_node)
8929 	type = complex_double_type_node;
8930       else if (type == long_double_type_node)
8931 	type = complex_long_double_type_node;
8932       else
8933 	type = build_complex_type (type);
8934     }
8935 
8936   type_quals = TYPE_UNQUALIFIED;
8937   if (declspecs->specs[(int)ds_const])
8938     type_quals |= TYPE_QUAL_CONST;
8939   if (declspecs->specs[(int)ds_volatile])
8940     type_quals |= TYPE_QUAL_VOLATILE;
8941   if (declspecs->specs[(int)ds_restrict])
8942     type_quals |= TYPE_QUAL_RESTRICT;
8943   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8944     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8945 	   ctor_return_type);
8946 
8947   type_quals |= cp_type_quals (type);
8948   type = cp_build_qualified_type_real
8949     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8950 			 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8951   /* We might have ignored or rejected some of the qualifiers.  */
8952   type_quals = cp_type_quals (type);
8953 
8954   staticp = 0;
8955   inlinep = !! declspecs->specs[(int)ds_inline];
8956   virtualp = !! declspecs->specs[(int)ds_virtual];
8957   explicitp = !! declspecs->specs[(int)ds_explicit];
8958 
8959   storage_class = declspecs->storage_class;
8960   if (storage_class == sc_static)
8961     staticp = 1 + (decl_context == FIELD);
8962 
8963   if (virtualp && staticp == 2)
8964     {
8965       error ("member %qD cannot be declared both virtual and static", dname);
8966       storage_class = sc_none;
8967       staticp = 0;
8968     }
8969   friendp = !! declspecs->specs[(int)ds_friend];
8970 
8971   if (dependent_name && !friendp)
8972     {
8973       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8974       return error_mark_node;
8975     }
8976 
8977   /* Issue errors about use of storage classes for parameters.  */
8978   if (decl_context == PARM)
8979     {
8980       if (declspecs->specs[(int)ds_typedef])
8981 	{
8982 	  error ("typedef declaration invalid in parameter declaration");
8983 	  return error_mark_node;
8984 	}
8985       else if (template_parm_flag && storage_class != sc_none)
8986 	{
8987 	  error ("storage class specified for template parameter %qs", name);
8988 	  return error_mark_node;
8989 	}
8990       else if (storage_class == sc_static
8991 	       || storage_class == sc_extern
8992 	       || thread_p)
8993 	error ("storage class specifiers invalid in parameter declarations");
8994 
8995       /* Function parameters cannot be constexpr.  If we saw one, moan
8996          and pretend it wasn't there.  */
8997       if (constexpr_p)
8998         {
8999           error ("a parameter cannot be declared %<constexpr%>");
9000           constexpr_p = 0;
9001         }
9002     }
9003 
9004   /* Give error if `virtual' is used outside of class declaration.  */
9005   if (virtualp
9006       && (current_class_name == NULL_TREE || decl_context != FIELD))
9007     {
9008       error ("%<virtual%> outside class declaration");
9009       virtualp = 0;
9010     }
9011 
9012   /* Static anonymous unions are dealt with here.  */
9013   if (staticp && decl_context == TYPENAME
9014       && declspecs->type
9015       && ANON_AGGR_TYPE_P (declspecs->type))
9016     decl_context = FIELD;
9017 
9018   /* Warn about storage classes that are invalid for certain
9019      kinds of declarations (parameters, typenames, etc.).  */
9020   if (thread_p
9021       && ((storage_class
9022 	   && storage_class != sc_extern
9023 	   && storage_class != sc_static)
9024 	  || declspecs->specs[(int)ds_typedef]))
9025     {
9026       error ("multiple storage classes in declaration of %qs", name);
9027       thread_p = false;
9028     }
9029   if (decl_context != NORMAL
9030       && ((storage_class != sc_none
9031 	   && storage_class != sc_mutable)
9032 	  || thread_p))
9033     {
9034       if ((decl_context == PARM || decl_context == CATCHPARM)
9035 	  && (storage_class == sc_register
9036 	      || storage_class == sc_auto))
9037 	;
9038       else if (declspecs->specs[(int)ds_typedef])
9039 	;
9040       else if (decl_context == FIELD
9041 	       /* C++ allows static class elements.  */
9042 	       && storage_class == sc_static)
9043 	/* C++ also allows inlines and signed and unsigned elements,
9044 	   but in those cases we don't come in here.  */
9045 	;
9046       else
9047 	{
9048 	  if (decl_context == FIELD)
9049 	    error ("storage class specified for %qs", name);
9050 	  else
9051 	    {
9052 	      if (decl_context == PARM || decl_context == CATCHPARM)
9053 		error ("storage class specified for parameter %qs", name);
9054 	      else
9055 		error ("storage class specified for typename");
9056 	    }
9057 	  if (storage_class == sc_register
9058 	      || storage_class == sc_auto
9059 	      || storage_class == sc_extern
9060 	      || thread_p)
9061 	    storage_class = sc_none;
9062 	}
9063     }
9064   else if (storage_class == sc_extern && funcdef_flag
9065 	   && ! toplevel_bindings_p ())
9066     error ("nested function %qs declared %<extern%>", name);
9067   else if (toplevel_bindings_p ())
9068     {
9069       if (storage_class == sc_auto)
9070 	error ("top-level declaration of %qs specifies %<auto%>", name);
9071     }
9072   else if (thread_p
9073 	   && storage_class != sc_extern
9074 	   && storage_class != sc_static)
9075     {
9076       error ("function-scope %qs implicitly auto and declared %<__thread%>",
9077 	     name);
9078       thread_p = false;
9079     }
9080 
9081   if (storage_class && friendp)
9082     {
9083       error ("storage class specifiers invalid in friend function declarations");
9084       storage_class = sc_none;
9085       staticp = 0;
9086     }
9087 
9088   if (!id_declarator)
9089     unqualified_id = NULL_TREE;
9090   else
9091     {
9092       unqualified_id = id_declarator->u.id.unqualified_name;
9093       switch (TREE_CODE (unqualified_id))
9094 	{
9095 	case BIT_NOT_EXPR:
9096 	  unqualified_id = TREE_OPERAND (unqualified_id, 0);
9097 	  if (TYPE_P (unqualified_id))
9098 	    unqualified_id = constructor_name (unqualified_id);
9099 	  break;
9100 
9101 	case IDENTIFIER_NODE:
9102 	case TEMPLATE_ID_EXPR:
9103 	  break;
9104 
9105 	default:
9106 	  gcc_unreachable ();
9107 	}
9108     }
9109 
9110   /* Determine the type of the entity declared by recurring on the
9111      declarator.  */
9112   for (; declarator; declarator = declarator->declarator)
9113     {
9114       const cp_declarator *inner_declarator;
9115       tree attrs;
9116 
9117       if (type == error_mark_node)
9118 	return error_mark_node;
9119 
9120       attrs = declarator->attributes;
9121       if (attrs)
9122 	{
9123 	  int attr_flags;
9124 
9125 	  attr_flags = 0;
9126 	  if (declarator == NULL || declarator->kind == cdk_id)
9127 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9128 	  if (declarator->kind == cdk_function)
9129 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9130 	  if (declarator->kind == cdk_array)
9131 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9132 	  returned_attrs = decl_attributes (&type,
9133 					    chainon (returned_attrs, attrs),
9134 					    attr_flags);
9135 	}
9136 
9137       if (declarator->kind == cdk_id)
9138 	break;
9139 
9140       inner_declarator = declarator->declarator;
9141 
9142       switch (declarator->kind)
9143 	{
9144 	case cdk_array:
9145 	  type = create_array_type_for_decl (dname, type,
9146 					     declarator->u.array.bounds);
9147 	  break;
9148 
9149 	case cdk_function:
9150 	  {
9151 	    tree arg_types;
9152 	    int funcdecl_p;
9153 
9154 	    /* Declaring a function type.
9155 	       Make sure we have a valid type for the function to return.  */
9156 
9157 	    if (type_quals != TYPE_UNQUALIFIED)
9158 	      {
9159 		if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9160 		  warning (OPT_Wignored_qualifiers,
9161 			   "type qualifiers ignored on function return type");
9162 		/* We now know that the TYPE_QUALS don't apply to the
9163 		   decl, but to its return type.  */
9164 		type_quals = TYPE_UNQUALIFIED;
9165 	      }
9166 	    errmsg = targetm.invalid_return_type (type);
9167 	    if (errmsg)
9168 	      {
9169 		error (errmsg);
9170 		type = integer_type_node;
9171 	      }
9172 
9173 	    /* Error about some types functions can't return.  */
9174 
9175 	    if (TREE_CODE (type) == FUNCTION_TYPE)
9176 	      {
9177 		error ("%qs declared as function returning a function", name);
9178 		return error_mark_node;
9179 	      }
9180 	    if (TREE_CODE (type) == ARRAY_TYPE)
9181 	      {
9182 		error ("%qs declared as function returning an array", name);
9183 		return error_mark_node;
9184 	      }
9185 
9186 	    /* Pick up type qualifiers which should be applied to `this'.  */
9187 	    memfn_quals = declarator->u.function.qualifiers;
9188 	    /* Pick up virt-specifiers.  */
9189             virt_specifiers = declarator->u.function.virt_specifiers;
9190 	    /* Pick up the exception specifications.  */
9191 	    raises = declarator->u.function.exception_specification;
9192 	    /* If the exception-specification is ill-formed, let's pretend
9193 	       there wasn't one.  */
9194 	    if (raises == error_mark_node)
9195 	      raises = NULL_TREE;
9196 
9197 	    /* Say it's a definition only for the CALL_EXPR
9198 	       closest to the identifier.  */
9199 	    funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9200 
9201 	    /* Handle a late-specified return type.  */
9202 	    if (funcdecl_p)
9203 	      {
9204 		if (type_uses_auto (type))
9205 		  {
9206 		    if (!declarator->u.function.late_return_type)
9207 		      {
9208 			error ("%qs function uses %<auto%> type specifier without"
9209 			       " trailing return type", name);
9210 			return error_mark_node;
9211 		      }
9212 		    else if (!is_auto (type))
9213 		      {
9214 			error ("%qs function with trailing return type has"
9215 			       " %qT as its type rather than plain %<auto%>",
9216 			       name, type);
9217 			return error_mark_node;
9218 		      }
9219 		  }
9220 		else if (declarator->u.function.late_return_type)
9221 		  {
9222 		    if (cxx_dialect < cxx0x)
9223 		      /* Not using maybe_warn_cpp0x because this should
9224 			 always be an error.  */
9225 		      error ("trailing return type only available with "
9226 			     "-std=c++11 or -std=gnu++11");
9227 		    else
9228 		      error ("%qs function with trailing return type not "
9229 			     "declared with %<auto%> type specifier", name);
9230 		    return error_mark_node;
9231 		  }
9232 	      }
9233 	    type = splice_late_return_type
9234 	      (type, declarator->u.function.late_return_type);
9235 	    if (type == error_mark_node)
9236 	      return error_mark_node;
9237 
9238 	    if (ctype == NULL_TREE
9239 		&& decl_context == FIELD
9240 		&& funcdecl_p
9241 		&& (friendp == 0 || dname == current_class_name))
9242 	      ctype = current_class_type;
9243 
9244 	    if (ctype && (sfk == sfk_constructor
9245 			  || sfk == sfk_destructor))
9246 	      {
9247 		/* We are within a class's scope. If our declarator name
9248 		   is the same as the class name, and we are defining
9249 		   a function, then it is a constructor/destructor, and
9250 		   therefore returns a void type.  */
9251 
9252 		/* ISO C++ 12.4/2.  A destructor may not be declared
9253 		   const or volatile.  A destructor may not be
9254 		   static.
9255 
9256 		   ISO C++ 12.1.  A constructor may not be declared
9257 		   const or volatile.  A constructor may not be
9258 		   virtual.  A constructor may not be static.  */
9259 		if (staticp == 2)
9260 		  error ((flags == DTOR_FLAG)
9261 			 ? G_("destructor cannot be static member function")
9262 			 : G_("constructor cannot be static member function"));
9263 		if (memfn_quals)
9264 		  {
9265 		    error ((flags == DTOR_FLAG)
9266 			   ? G_("destructors may not be cv-qualified")
9267 			   : G_("constructors may not be cv-qualified"));
9268 		    memfn_quals = TYPE_UNQUALIFIED;
9269 		  }
9270 
9271 		if (decl_context == FIELD
9272 		    && !member_function_or_else (ctype,
9273 						 current_class_type,
9274 						 flags))
9275 		  return error_mark_node;
9276 
9277 		if (flags != DTOR_FLAG)
9278 		  {
9279 		    /* It's a constructor.  */
9280 		    if (explicitp == 1)
9281 		      explicitp = 2;
9282 		    if (virtualp)
9283 		      {
9284 			permerror (input_location, "constructors cannot be declared virtual");
9285 			virtualp = 0;
9286 		      }
9287 		    if (decl_context == FIELD
9288 			&& sfk != sfk_constructor)
9289 		      return error_mark_node;
9290 		  }
9291 		if (decl_context == FIELD)
9292 		  staticp = 0;
9293 	      }
9294 	    else if (friendp)
9295 	      {
9296 		if (initialized)
9297 		  error ("can%'t initialize friend function %qs", name);
9298 		if (virtualp)
9299 		  {
9300 		    /* Cannot be both friend and virtual.  */
9301 		    error ("virtual functions cannot be friends");
9302 		    friendp = 0;
9303 		  }
9304 		if (decl_context == NORMAL)
9305 		  error ("friend declaration not in class definition");
9306 		if (current_function_decl && funcdef_flag)
9307 		  error ("can%'t define friend function %qs in a local "
9308 			 "class definition",
9309 			 name);
9310 	      }
9311 	    else if (ctype && sfk == sfk_conversion)
9312 	      {
9313 		if (explicitp == 1)
9314 		  {
9315 		    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9316 		    explicitp = 2;
9317 		  }
9318 	      }
9319 
9320 	    arg_types = grokparms (declarator->u.function.parameters,
9321 				   &parms);
9322 
9323 	    if (inner_declarator
9324 		&& inner_declarator->kind == cdk_id
9325 		&& inner_declarator->u.id.sfk == sfk_destructor
9326 		&& arg_types != void_list_node)
9327 	      {
9328 		error ("destructors may not have parameters");
9329 		arg_types = void_list_node;
9330 		parms = NULL_TREE;
9331 	      }
9332 
9333 	    type = build_function_type (type, arg_types);
9334 	  }
9335 	  break;
9336 
9337 	case cdk_pointer:
9338 	case cdk_reference:
9339 	case cdk_ptrmem:
9340 	  /* Filter out pointers-to-references and references-to-references.
9341 	     We can get these if a TYPE_DECL is used.  */
9342 
9343 	  if (TREE_CODE (type) == REFERENCE_TYPE)
9344 	    {
9345 	      if (declarator->kind != cdk_reference)
9346 		{
9347 		  error ("cannot declare pointer to %q#T", type);
9348 		  type = TREE_TYPE (type);
9349 		}
9350 
9351 	      /* In C++0x, we allow reference to reference declarations
9352 		 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9353 		 and template type arguments [14.3.1/4 temp.arg.type]. The
9354 		 check for direct reference to reference declarations, which
9355 		 are still forbidden, occurs below. Reasoning behind the change
9356 		 can be found in DR106, DR540, and the rvalue reference
9357 		 proposals. */
9358 	      else if (cxx_dialect == cxx98)
9359 		{
9360 		  error ("cannot declare reference to %q#T", type);
9361 		  type = TREE_TYPE (type);
9362 		}
9363 	    }
9364 	  else if (VOID_TYPE_P (type))
9365 	    {
9366 	      if (declarator->kind == cdk_reference)
9367 		error ("cannot declare reference to %q#T", type);
9368 	      else if (declarator->kind == cdk_ptrmem)
9369 		error ("cannot declare pointer to %q#T member", type);
9370 	    }
9371 
9372 	  /* We now know that the TYPE_QUALS don't apply to the decl,
9373 	     but to the target of the pointer.  */
9374 	  type_quals = TYPE_UNQUALIFIED;
9375 
9376 	  if (declarator->kind == cdk_ptrmem
9377 	      && (TREE_CODE (type) == FUNCTION_TYPE
9378 		  || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9379 	    {
9380 	      memfn_quals |= type_memfn_quals (type);
9381 	      type = build_memfn_type (type,
9382 				       declarator->u.pointer.class_type,
9383 				       memfn_quals);
9384 	      if (type == error_mark_node)
9385 		return error_mark_node;
9386 	      memfn_quals = TYPE_UNQUALIFIED;
9387 	    }
9388 
9389 	  if (TREE_CODE (type) == FUNCTION_TYPE
9390 	      && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9391             error (declarator->kind == cdk_reference
9392                    ? G_("cannot declare reference to qualified function type %qT")
9393                    : G_("cannot declare pointer to qualified function type %qT"),
9394 		   type);
9395 
9396 	  /* When the pointed-to type involves components of variable size,
9397 	     care must be taken to ensure that the size evaluation code is
9398 	     emitted early enough to dominate all the possible later uses
9399 	     and late enough for the variables on which it depends to have
9400 	     been assigned.
9401 
9402 	     This is expected to happen automatically when the pointed-to
9403 	     type has a name/declaration of it's own, but special attention
9404 	     is required if the type is anonymous.
9405 
9406 	     We handle the NORMAL and FIELD contexts here by inserting a
9407 	     dummy statement that just evaluates the size at a safe point
9408 	     and ensures it is not deferred until e.g. within a deeper
9409 	     conditional context (c++/43555).
9410 
9411 	     We expect nothing to be needed here for PARM or TYPENAME.
9412 	     Evaluating the size at this point for TYPENAME would
9413 	     actually be incorrect, as we might be in the middle of an
9414 	     expression with side effects on the pointed-to type size
9415 	     "arguments" prior to the pointer declaration point and the
9416 	     size evaluation could end up prior to the side effects.  */
9417 
9418 	  if (!TYPE_NAME (type)
9419 	      && (decl_context == NORMAL || decl_context == FIELD)
9420 	      && at_function_scope_p ()
9421 	      && variably_modified_type_p (type, NULL_TREE))
9422 	    {
9423 	      /* First break out any side-effects.  */
9424 	      stabilize_vla_size (TYPE_SIZE (type));
9425 	      /* And then force evaluation of the SAVE_EXPR.  */
9426 	      finish_expr_stmt (TYPE_SIZE (type));
9427 	    }
9428 
9429 	  if (declarator->kind == cdk_reference)
9430 	    {
9431 	      /* In C++0x, the type we are creating a reference to might be
9432 		 a typedef which is itself a reference type. In that case,
9433 		 we follow the reference collapsing rules in
9434 		 [7.1.3/8 dcl.typedef] to create the final reference type:
9435 
9436 		 "If a typedef TD names a type that is a reference to a type
9437 		 T, an attempt to create the type 'lvalue reference to cv TD'
9438 		 creates the type 'lvalue reference to T,' while an attempt
9439 		 to create the type "rvalue reference to cv TD' creates the
9440 		 type TD."
9441               */
9442 	      if (VOID_TYPE_P (type))
9443 		/* We already gave an error.  */;
9444 	      else if (TREE_CODE (type) == REFERENCE_TYPE)
9445 		{
9446 		  if (declarator->u.reference.rvalue_ref)
9447 		    /* Leave type alone.  */;
9448 		  else
9449 		    type = cp_build_reference_type (TREE_TYPE (type), false);
9450 		}
9451 	      else
9452 		type = cp_build_reference_type
9453 		  (type, declarator->u.reference.rvalue_ref);
9454 
9455 	      /* In C++0x, we need this check for direct reference to
9456 		 reference declarations, which are forbidden by
9457 		 [8.3.2/5 dcl.ref]. Reference to reference declarations
9458 		 are only allowed indirectly through typedefs and template
9459 		 type arguments. Example:
9460 
9461 		   void foo(int & &);      // invalid ref-to-ref decl
9462 
9463 		   typedef int & int_ref;
9464 		   void foo(int_ref &);    // valid ref-to-ref decl
9465 	      */
9466 	      if (inner_declarator && inner_declarator->kind == cdk_reference)
9467 		error ("cannot declare reference to %q#T, which is not "
9468 		       "a typedef or a template type argument", type);
9469 	    }
9470 	  else if (TREE_CODE (type) == METHOD_TYPE)
9471 	    type = build_ptrmemfunc_type (build_pointer_type (type));
9472 	  else if (declarator->kind == cdk_ptrmem)
9473 	    {
9474 	      gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9475 			  != NAMESPACE_DECL);
9476 	      if (declarator->u.pointer.class_type == error_mark_node)
9477 		/* We will already have complained.  */
9478 		type = error_mark_node;
9479 	      else
9480 		type = build_ptrmem_type (declarator->u.pointer.class_type,
9481 					  type);
9482 	    }
9483 	  else
9484 	    type = build_pointer_type (type);
9485 
9486 	  /* Process a list of type modifier keywords (such as
9487 	     const or volatile) that were given inside the `*' or `&'.  */
9488 
9489 	  if (declarator->u.pointer.qualifiers)
9490 	    {
9491 	      type
9492 		= cp_build_qualified_type (type,
9493 					   declarator->u.pointer.qualifiers);
9494 	      type_quals = cp_type_quals (type);
9495 	    }
9496 	  ctype = NULL_TREE;
9497 	  break;
9498 
9499 	case cdk_error:
9500 	  break;
9501 
9502 	default:
9503 	  gcc_unreachable ();
9504 	}
9505     }
9506 
9507   /* We need to stabilize side-effects in VLA sizes for regular array
9508      declarations too, not just pointers to arrays.  */
9509   if (type != error_mark_node && !TYPE_NAME (type)
9510       && (decl_context == NORMAL || decl_context == FIELD)
9511       && at_function_scope_p ()
9512       && variably_modified_type_p (type, NULL_TREE))
9513     stabilize_vla_size (TYPE_SIZE (type));
9514 
9515   /* A `constexpr' specifier used in an object declaration declares
9516      the object as `const'.  */
9517   if (constexpr_p && innermost_code != cdk_function)
9518     {
9519       if (type_quals & TYPE_QUAL_VOLATILE)
9520         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9521       if (TREE_CODE (type) != REFERENCE_TYPE)
9522 	{
9523 	  type_quals |= TYPE_QUAL_CONST;
9524 	  type = cp_build_qualified_type (type, type_quals);
9525 	}
9526     }
9527 
9528   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9529       && TREE_CODE (type) != FUNCTION_TYPE
9530       && TREE_CODE (type) != METHOD_TYPE)
9531     {
9532       error ("template-id %qD used as a declarator",
9533 	     unqualified_id);
9534       unqualified_id = dname;
9535     }
9536 
9537   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9538      qualified with a class-name, turn it into a METHOD_TYPE, unless
9539      we know that the function is static.  We take advantage of this
9540      opportunity to do other processing that pertains to entities
9541      explicitly declared to be class members.  Note that if DECLARATOR
9542      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9543      would not have exited the loop above.  */
9544   if (declarator
9545       && declarator->u.id.qualifying_scope
9546       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9547     {
9548       tree t;
9549 
9550       ctype = declarator->u.id.qualifying_scope;
9551       ctype = TYPE_MAIN_VARIANT (ctype);
9552       t = ctype;
9553       while (t != NULL_TREE && CLASS_TYPE_P (t))
9554 	{
9555 	  /* You're supposed to have one `template <...>' for every
9556 	     template class, but you don't need one for a full
9557 	     specialization.  For example:
9558 
9559 	       template <class T> struct S{};
9560 	       template <> struct S<int> { void f(); };
9561 	       void S<int>::f () {}
9562 
9563 	     is correct; there shouldn't be a `template <>' for the
9564 	     definition of `S<int>::f'.  */
9565 	  if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9566 	      && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9567 	    /* T is an explicit (not partial) specialization.  All
9568 	       containing classes must therefore also be explicitly
9569 	       specialized.  */
9570 	    break;
9571 	  if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9572 	      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9573 	    template_count += 1;
9574 
9575 	  t = TYPE_MAIN_DECL (t);
9576 	  t = DECL_CONTEXT (t);
9577 	}
9578 
9579       if (ctype == current_class_type)
9580 	{
9581 	  if (friendp)
9582 	    {
9583 	      permerror (input_location, "member functions are implicitly friends of their class");
9584 	      friendp = 0;
9585 	    }
9586 	  else
9587 	    permerror (declarator->id_loc,
9588 			  "extra qualification %<%T::%> on member %qs",
9589 			  ctype, name);
9590 	}
9591       else if (/* If the qualifying type is already complete, then we
9592 		  can skip the following checks.  */
9593 	       !COMPLETE_TYPE_P (ctype)
9594 	       && (/* If the function is being defined, then
9595 		      qualifying type must certainly be complete.  */
9596 		   funcdef_flag
9597 		   /* A friend declaration of "T::f" is OK, even if
9598 		      "T" is a template parameter.  But, if this
9599 		      function is not a friend, the qualifying type
9600 		      must be a class.  */
9601 		   || (!friendp && !CLASS_TYPE_P (ctype))
9602 		   /* For a declaration, the type need not be
9603 		      complete, if either it is dependent (since there
9604 		      is no meaningful definition of complete in that
9605 		      case) or the qualifying class is currently being
9606 		      defined.  */
9607 		   || !(dependent_type_p (ctype)
9608 			|| currently_open_class (ctype)))
9609 	       /* Check that the qualifying type is complete.  */
9610 	       && !complete_type_or_else (ctype, NULL_TREE))
9611 	return error_mark_node;
9612       else if (TREE_CODE (type) == FUNCTION_TYPE)
9613 	{
9614 	  if (current_class_type
9615 	      && (!friendp || funcdef_flag))
9616 	    {
9617 	      error (funcdef_flag
9618 		     ? G_("cannot define member function %<%T::%s%> "
9619 			  "within %<%T%>")
9620 		     : G_("cannot declare member function %<%T::%s%> "
9621 			  "within %<%T%>"),
9622 		     ctype, name, current_class_type);
9623 	      return error_mark_node;
9624 	    }
9625 	}
9626       else if (declspecs->specs[(int)ds_typedef]
9627 	       && current_class_type)
9628 	{
9629 	  error ("cannot declare member %<%T::%s%> within %qT",
9630 		 ctype, name, current_class_type);
9631 	  return error_mark_node;
9632 	}
9633     }
9634 
9635   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9636     ctype = current_class_type;
9637 
9638   /* Now TYPE has the actual type.  */
9639 
9640   if (returned_attrs)
9641     {
9642       if (attrlist)
9643 	*attrlist = chainon (returned_attrs, *attrlist);
9644       else
9645 	attrlist = &returned_attrs;
9646     }
9647 
9648   /* Handle parameter packs. */
9649   if (parameter_pack_p)
9650     {
9651       if (decl_context == PARM)
9652         /* Turn the type into a pack expansion.*/
9653         type = make_pack_expansion (type);
9654       else
9655         error ("non-parameter %qs cannot be a parameter pack", name);
9656     }
9657 
9658   /* Did array size calculations overflow?  */
9659 
9660   if (TREE_CODE (type) == ARRAY_TYPE
9661       && COMPLETE_TYPE_P (type)
9662       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9663       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9664     {
9665       error ("size of array %qs is too large", name);
9666       /* If we proceed with the array type as it is, we'll eventually
9667 	 crash in tree_low_cst().  */
9668       type = error_mark_node;
9669     }
9670 
9671   if ((decl_context == FIELD || decl_context == PARM)
9672       && !processing_template_decl
9673       && variably_modified_type_p (type, NULL_TREE))
9674     {
9675       if (decl_context == FIELD)
9676 	error ("data member may not have variably modified type %qT", type);
9677       else
9678 	error ("parameter may not have variably modified type %qT", type);
9679       type = error_mark_node;
9680     }
9681 
9682   if (explicitp == 1 || (explicitp && friendp))
9683     {
9684       /* [dcl.fct.spec] The explicit specifier shall only be used in
9685 	 declarations of constructors within a class definition.  */
9686       error ("only declarations of constructors can be %<explicit%>");
9687       explicitp = 0;
9688     }
9689 
9690   if (storage_class == sc_mutable)
9691     {
9692       if (decl_context != FIELD || friendp)
9693 	{
9694 	  error ("non-member %qs cannot be declared %<mutable%>", name);
9695 	  storage_class = sc_none;
9696 	}
9697       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9698 	{
9699 	  error ("non-object member %qs cannot be declared %<mutable%>", name);
9700 	  storage_class = sc_none;
9701 	}
9702       else if (TREE_CODE (type) == FUNCTION_TYPE
9703 	       || TREE_CODE (type) == METHOD_TYPE)
9704 	{
9705 	  error ("function %qs cannot be declared %<mutable%>", name);
9706 	  storage_class = sc_none;
9707 	}
9708       else if (staticp)
9709 	{
9710 	  error ("static %qs cannot be declared %<mutable%>", name);
9711 	  storage_class = sc_none;
9712 	}
9713       else if (type_quals & TYPE_QUAL_CONST)
9714 	{
9715 	  error ("const %qs cannot be declared %<mutable%>", name);
9716 	  storage_class = sc_none;
9717 	}
9718       else if (TREE_CODE (type) == REFERENCE_TYPE)
9719 	{
9720 	  permerror (input_location, "reference %qs cannot be declared "
9721 	             "%<mutable%>", name);
9722 	  storage_class = sc_none;
9723 	}
9724     }
9725 
9726   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9727   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9728     {
9729       tree decl;
9730 
9731       /* Note that the grammar rejects storage classes
9732 	 in typenames, fields or parameters.  */
9733       if (current_lang_name == lang_name_java)
9734 	TYPE_FOR_JAVA (type) = 1;
9735 
9736       /* This declaration:
9737 
9738 	   typedef void f(int) const;
9739 
9740 	 declares a function type which is not a member of any
9741 	 particular class, but which is cv-qualified; for
9742 	 example "f S::*" declares a pointer to a const-qualified
9743 	 member function of S.  We record the cv-qualification in the
9744 	 function type.  */
9745       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9746         {
9747           type = apply_memfn_quals (type, memfn_quals);
9748 
9749           /* We have now dealt with these qualifiers.  */
9750           memfn_quals = TYPE_UNQUALIFIED;
9751         }
9752 
9753       if (type_uses_auto (type))
9754 	{
9755 	  error ("typedef declared %<auto%>");
9756 	  type = error_mark_node;
9757 	}
9758 
9759       if (decl_context == FIELD)
9760 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9761       else
9762 	decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9763       if (id_declarator && declarator->u.id.qualifying_scope) {
9764 	error_at (DECL_SOURCE_LOCATION (decl),
9765 		  "typedef name may not be a nested-name-specifier");
9766 	TREE_TYPE (decl) = error_mark_node;
9767       }
9768 
9769       if (decl_context != FIELD)
9770 	{
9771 	  if (!current_function_decl)
9772 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9773 	  else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9774 		   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9775 		       (current_function_decl)))
9776 	    /* The TYPE_DECL is "abstract" because there will be
9777 	       clones of this constructor/destructor, and there will
9778 	       be copies of this TYPE_DECL generated in those
9779 	       clones.  */
9780 	    DECL_ABSTRACT (decl) = 1;
9781 	}
9782       else if (constructor_name_p (unqualified_id, current_class_type))
9783 	permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9784 		   "as enclosing class",
9785 		   unqualified_id);
9786 
9787       /* If the user declares "typedef struct {...} foo" then the
9788 	 struct will have an anonymous name.  Fill that name in now.
9789 	 Nothing can refer to it, so nothing needs know about the name
9790 	 change.  */
9791       if (type != error_mark_node
9792 	  && unqualified_id
9793 	  && TYPE_NAME (type)
9794 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9795 	  && TYPE_ANONYMOUS_P (type)
9796 	  && declspecs->type_definition_p
9797 	  && cp_type_quals (type) == TYPE_UNQUALIFIED)
9798 	{
9799 	  tree t;
9800 
9801 	  /* Replace the anonymous name with the real name everywhere.  */
9802 	  for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9803 	    {
9804 	      if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9805 		/* We do not rename the debug info representing the
9806 		   anonymous tagged type because the standard says in
9807 		   [dcl.typedef] that the naming applies only for
9808 		   linkage purposes.  */
9809 		/*debug_hooks->set_name (t, decl);*/
9810 		TYPE_NAME (t) = decl;
9811   	    }
9812 
9813 	  if (TYPE_LANG_SPECIFIC (type))
9814 	    TYPE_WAS_ANONYMOUS (type) = 1;
9815 
9816 	  /* If this is a typedef within a template class, the nested
9817 	     type is a (non-primary) template.  The name for the
9818 	     template needs updating as well.  */
9819 	  if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9820 	    DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9821 	      = TYPE_IDENTIFIER (type);
9822 
9823 	  /* Adjust linkage now that we aren't anonymous anymore.  */
9824 	  reset_type_linkage (type);
9825 
9826 	  /* FIXME remangle member functions; member functions of a
9827 	     type with external linkage have external linkage.  */
9828 	}
9829 
9830       if (signed_p
9831 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9832 	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9833 
9834       bad_specifiers (decl, BSP_TYPE, virtualp,
9835 		      memfn_quals != TYPE_UNQUALIFIED,
9836 		      inlinep, friendp, raises != NULL_TREE);
9837 
9838       if (declspecs->specs[(int)ds_alias])
9839 	/* Acknowledge that this was written:
9840 	     `using analias = atype;'.  */
9841 	TYPE_DECL_ALIAS_P (decl) = 1;
9842 
9843       return decl;
9844     }
9845 
9846   /* Detect the case of an array type of unspecified size
9847      which came, as such, direct from a typedef name.
9848      We must copy the type, so that the array's domain can be
9849      individually set by the object's initializer.  */
9850 
9851   if (type && typedef_type
9852       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9853       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9854     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9855 
9856   /* Detect where we're using a typedef of function type to declare a
9857      function. PARMS will not be set, so we must create it now.  */
9858 
9859   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9860     {
9861       tree decls = NULL_TREE;
9862       tree args;
9863 
9864       for (args = TYPE_ARG_TYPES (type);
9865 	   args && args != void_list_node;
9866 	   args = TREE_CHAIN (args))
9867 	{
9868 	  tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9869 
9870 	  DECL_CHAIN (decl) = decls;
9871 	  decls = decl;
9872 	}
9873 
9874       parms = nreverse (decls);
9875 
9876       if (decl_context != TYPENAME)
9877 	{
9878 	  /* A cv-qualifier-seq shall only be part of the function type
9879 	     for a non-static member function. [8.3.5/4 dcl.fct] */
9880 	  if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9881 	      && (current_class_type == NULL_TREE || staticp) )
9882 	    {
9883 	      error (staticp
9884                      ? G_("qualified function types cannot be used to "
9885                           "declare static member functions")
9886                      : G_("qualified function types cannot be used to "
9887                           "declare free functions"));
9888 	      type = TYPE_MAIN_VARIANT (type);
9889 	    }
9890 
9891 	  /* The qualifiers on the function type become the qualifiers on
9892 	     the non-static member function. */
9893 	  memfn_quals |= type_memfn_quals (type);
9894 	  type_quals = TYPE_UNQUALIFIED;
9895 	}
9896     }
9897 
9898   /* If this is a type name (such as, in a cast or sizeof),
9899      compute the type and return it now.  */
9900 
9901   if (decl_context == TYPENAME)
9902     {
9903       /* Note that the grammar rejects storage classes
9904 	 in typenames, fields or parameters.  */
9905       if (type_quals != TYPE_UNQUALIFIED)
9906 	type_quals = TYPE_UNQUALIFIED;
9907 
9908       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9909       if (friendp)
9910 	{
9911 	  if (type_quals != TYPE_UNQUALIFIED)
9912 	    {
9913 	      error ("type qualifiers specified for friend class declaration");
9914 	      type_quals = TYPE_UNQUALIFIED;
9915 	    }
9916 	  if (inlinep)
9917 	    {
9918 	      error ("%<inline%> specified for friend class declaration");
9919 	      inlinep = 0;
9920 	    }
9921 
9922 	  if (!current_aggr)
9923 	    {
9924 	      /* Don't allow friend declaration without a class-key.  */
9925 	      if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9926 		permerror (input_location, "template parameters cannot be friends");
9927 	      else if (TREE_CODE (type) == TYPENAME_TYPE)
9928 		permerror (input_location, "friend declaration requires class-key, "
9929 			   "i.e. %<friend class %T::%D%>",
9930 			   TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9931 	      else
9932 		permerror (input_location, "friend declaration requires class-key, "
9933 			   "i.e. %<friend %#T%>",
9934 			   type);
9935 	    }
9936 
9937 	  /* Only try to do this stuff if we didn't already give up.  */
9938 	  if (type != integer_type_node)
9939 	    {
9940 	      /* A friendly class?  */
9941 	      if (current_class_type)
9942 		make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9943 				   /*complain=*/true);
9944 	      else
9945 		error ("trying to make class %qT a friend of global scope",
9946 		       type);
9947 
9948 	      type = void_type_node;
9949 	    }
9950 	}
9951       else if (memfn_quals)
9952 	{
9953 	  if (ctype == NULL_TREE
9954 	      && TREE_CODE (type) == METHOD_TYPE)
9955 	    ctype = TYPE_METHOD_BASETYPE (type);
9956 
9957 	  if (ctype)
9958 	    type = build_memfn_type (type, ctype, memfn_quals);
9959 	  /* Core issue #547: need to allow this in template type args.  */
9960 	  else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9961 	    type = apply_memfn_quals (type, memfn_quals);
9962 	  else
9963 	    error ("invalid qualifiers on non-member function type");
9964 	}
9965 
9966       return type;
9967     }
9968   else if (unqualified_id == NULL_TREE && decl_context != PARM
9969 	   && decl_context != CATCHPARM
9970 	   && TREE_CODE (type) != UNION_TYPE
9971 	   && ! bitfield)
9972     {
9973       error ("abstract declarator %qT used as declaration", type);
9974       return error_mark_node;
9975     }
9976 
9977   /* Only functions may be declared using an operator-function-id.  */
9978   if (unqualified_id
9979       && IDENTIFIER_OPNAME_P (unqualified_id)
9980       && TREE_CODE (type) != FUNCTION_TYPE
9981       && TREE_CODE (type) != METHOD_TYPE)
9982     {
9983       error ("declaration of %qD as non-function", unqualified_id);
9984       return error_mark_node;
9985     }
9986 
9987   /* We don't check parameter types here because we can emit a better
9988      error message later.  */
9989   if (decl_context != PARM)
9990     {
9991       type = check_var_type (unqualified_id, type);
9992       if (type == error_mark_node)
9993         return error_mark_node;
9994     }
9995 
9996   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9997      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9998 
9999   if (decl_context == PARM || decl_context == CATCHPARM)
10000     {
10001       if (ctype || in_namespace)
10002 	error ("cannot use %<::%> in parameter declaration");
10003 
10004       if (type_uses_auto (type))
10005 	{
10006 	  error ("parameter declared %<auto%>");
10007 	  type = error_mark_node;
10008 	}
10009 
10010       /* A parameter declared as an array of T is really a pointer to T.
10011 	 One declared as a function is really a pointer to a function.
10012 	 One declared as a member is really a pointer to member.  */
10013 
10014       if (TREE_CODE (type) == ARRAY_TYPE)
10015 	{
10016 	  /* Transfer const-ness of array into that of type pointed to.  */
10017 	  type = build_pointer_type (TREE_TYPE (type));
10018 	  type_quals = TYPE_UNQUALIFIED;
10019 	}
10020       else if (TREE_CODE (type) == FUNCTION_TYPE)
10021 	type = build_pointer_type (type);
10022     }
10023 
10024   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10025       && !NEW_DELETE_OPNAME_P (unqualified_id))
10026     {
10027       cp_cv_quals real_quals = memfn_quals;
10028       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10029 	real_quals |= TYPE_QUAL_CONST;
10030       type = build_memfn_type (type, ctype, real_quals);
10031     }
10032 
10033   {
10034     tree decl;
10035 
10036     if (decl_context == PARM)
10037       {
10038 	decl = cp_build_parm_decl (unqualified_id, type);
10039 
10040 	bad_specifiers (decl, BSP_PARM, virtualp,
10041 			memfn_quals != TYPE_UNQUALIFIED,
10042 			inlinep, friendp, raises != NULL_TREE);
10043       }
10044     else if (decl_context == FIELD)
10045       {
10046 	if (!staticp && type_uses_auto (type))
10047 	  {
10048 	    error ("non-static data member declared %<auto%>");
10049 	    type = error_mark_node;
10050 	  }
10051 
10052 	/* The C99 flexible array extension.  */
10053 	if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10054 	    && TYPE_DOMAIN (type) == NULL_TREE)
10055 	  {
10056 	    tree itype = compute_array_index_type (dname, integer_zero_node,
10057 						   tf_warning_or_error);
10058 	    type = build_cplus_array_type (TREE_TYPE (type), itype);
10059 	  }
10060 
10061 	if (type == error_mark_node)
10062 	  {
10063 	    /* Happens when declaring arrays of sizes which
10064 	       are error_mark_node, for example.  */
10065 	    decl = NULL_TREE;
10066 	  }
10067 	else if (in_namespace && !friendp)
10068 	  {
10069 	    /* Something like struct S { int N::j; };  */
10070 	    error ("invalid use of %<::%>");
10071 	    return error_mark_node;
10072 	  }
10073 	else if (TREE_CODE (type) == FUNCTION_TYPE
10074 		 || TREE_CODE (type) == METHOD_TYPE)
10075 	  {
10076 	    int publicp = 0;
10077 	    tree function_context;
10078 
10079 	    if (friendp == 0)
10080 	      {
10081 		/* This should never happen in pure C++ (the check
10082 		   could be an assert).  It could happen in
10083 		   Objective-C++ if someone writes invalid code that
10084 		   uses a function declaration for an instance
10085 		   variable or property (instance variables and
10086 		   properties are parsed as FIELD_DECLs, but they are
10087 		   part of an Objective-C class, not a C++ class).
10088 		   That code is invalid and is caught by this
10089 		   check.  */
10090 		if (!ctype)
10091 		  {
10092 		    error ("declaration of function %qD in invalid context",
10093 			   unqualified_id);
10094 		    return error_mark_node;
10095 		  }
10096 
10097 		/* ``A union may [ ... ] not [ have ] virtual functions.''
10098 		   ARM 9.5 */
10099 		if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10100 		  {
10101 		    error ("function %qD declared virtual inside a union",
10102 			   unqualified_id);
10103 		    return error_mark_node;
10104 		  }
10105 
10106 		if (NEW_DELETE_OPNAME_P (unqualified_id))
10107 		  {
10108 		    if (virtualp)
10109 		      {
10110 			error ("%qD cannot be declared virtual, since it "
10111 			       "is always static",
10112 			       unqualified_id);
10113 			virtualp = 0;
10114 		      }
10115 		  }
10116 	      }
10117 
10118 	    /* Check that the name used for a destructor makes sense.  */
10119 	    if (sfk == sfk_destructor)
10120 	      {
10121 		tree uqname = id_declarator->u.id.unqualified_name;
10122 
10123 		if (!ctype)
10124 		  {
10125 		    gcc_assert (friendp);
10126 		    error ("expected qualified name in friend declaration "
10127 			   "for destructor %qD", uqname);
10128 		    return error_mark_node;
10129 		  }
10130 
10131 		if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10132 		  {
10133 		    error ("declaration of %qD as member of %qT",
10134 			   uqname, ctype);
10135 		    return error_mark_node;
10136 		  }
10137                 if (constexpr_p)
10138                   {
10139                     error ("a destructor cannot be %<constexpr%>");
10140                     return error_mark_node;
10141                   }
10142 	      }
10143 	    else if (sfk == sfk_constructor && friendp && !ctype)
10144 	      {
10145 		error ("expected qualified name in friend declaration "
10146 		       "for constructor %qD",
10147 		       id_declarator->u.id.unqualified_name);
10148 		return error_mark_node;
10149 	      }
10150 
10151 	    /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10152 	    function_context = (ctype != NULL_TREE) ?
10153 	      decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10154 	    publicp = (! friendp || ! staticp)
10155 	      && function_context == NULL_TREE;
10156 	    decl = grokfndecl (ctype, type,
10157 			       TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10158 			       ? unqualified_id : dname,
10159 			       parms,
10160 			       unqualified_id,
10161 			       virtualp, flags, memfn_quals, raises,
10162 			       friendp ? -1 : 0, friendp, publicp,
10163                                inlinep | (2 * constexpr_p),
10164 			       sfk,
10165 			       funcdef_flag, template_count, in_namespace,
10166 			       attrlist, declarator->id_loc);
10167             decl = set_virt_specifiers (decl, virt_specifiers);
10168 	    if (decl == NULL_TREE)
10169 	      return error_mark_node;
10170 #if 0
10171 	    /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10172 	    /* The decl and setting of decl_attr is also turned off.  */
10173 	    decl = build_decl_attribute_variant (decl, decl_attr);
10174 #endif
10175 
10176 	    /* [class.conv.ctor]
10177 
10178 	       A constructor declared without the function-specifier
10179 	       explicit that can be called with a single parameter
10180 	       specifies a conversion from the type of its first
10181 	       parameter to the type of its class.  Such a constructor
10182 	       is called a converting constructor.  */
10183 	    if (explicitp == 2)
10184 	      DECL_NONCONVERTING_P (decl) = 1;
10185 	  }
10186 	else if (!staticp && !dependent_type_p (type)
10187 		 && !COMPLETE_TYPE_P (complete_type (type))
10188 		 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10189 	  {
10190 	    if (unqualified_id)
10191 	      error ("field %qD has incomplete type", unqualified_id);
10192 	    else
10193 	      error ("name %qT has incomplete type", type);
10194 
10195 	    /* If we're instantiating a template, tell them which
10196 	       instantiation made the field's type be incomplete.  */
10197 	    if (current_class_type
10198 		&& TYPE_NAME (current_class_type)
10199 		&& IDENTIFIER_TEMPLATE (current_class_name)
10200 		&& declspecs->type
10201 		&& declspecs->type == type)
10202 	      error ("  in instantiation of template %qT",
10203 		     current_class_type);
10204 
10205 	    return error_mark_node;
10206 	  }
10207 	else
10208 	  {
10209 	    if (friendp)
10210 	      {
10211 		error ("%qE is neither function nor member function; "
10212 		       "cannot be declared friend", unqualified_id);
10213 		friendp = 0;
10214 	      }
10215 	    decl = NULL_TREE;
10216 	  }
10217 
10218 	if (friendp)
10219 	  {
10220 	    /* Friends are treated specially.  */
10221 	    if (ctype == current_class_type)
10222 	      ;  /* We already issued a permerror.  */
10223 	    else if (decl && DECL_NAME (decl))
10224 	      {
10225 		if (template_class_depth (current_class_type) == 0)
10226 		  {
10227 		    decl = check_explicit_specialization
10228 		      (unqualified_id, decl, template_count,
10229 		       2 * funcdef_flag + 4);
10230 		    if (decl == error_mark_node)
10231 		      return error_mark_node;
10232 		  }
10233 
10234 		decl = do_friend (ctype, unqualified_id, decl,
10235 				  *attrlist, flags,
10236 				  funcdef_flag);
10237 		return decl;
10238 	      }
10239 	    else
10240 	      return error_mark_node;
10241 	  }
10242 
10243 	/* Structure field.  It may not be a function, except for C++.  */
10244 
10245 	if (decl == NULL_TREE)
10246 	  {
10247 	    if (staticp)
10248 	      {
10249 		/* C++ allows static class members.  All other work
10250 		   for this is done by grokfield.  */
10251 		decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10252 		set_linkage_for_static_data_member (decl);
10253 		/* Even if there is an in-class initialization, DECL
10254 		   is considered undefined until an out-of-class
10255 		   definition is provided.  */
10256 		DECL_EXTERNAL (decl) = 1;
10257 
10258 		if (thread_p)
10259 		  DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10260 
10261 		if (constexpr_p && !initialized)
10262 		  {
10263 		    error ("constexpr static data member %qD must have an "
10264 			   "initializer", decl);
10265 		    constexpr_p = false;
10266 		  }
10267 	      }
10268 	    else
10269 	      {
10270                 if (constexpr_p)
10271 		  {
10272 		    error ("non-static data member %qE declared %<constexpr%>",
10273 			   unqualified_id);
10274 		    constexpr_p = false;
10275 		  }
10276 		decl = build_decl (input_location,
10277 				   FIELD_DECL, unqualified_id, type);
10278 		DECL_NONADDRESSABLE_P (decl) = bitfield;
10279 		if (bitfield && !unqualified_id)
10280 		  TREE_NO_WARNING (decl) = 1;
10281 
10282 		if (storage_class == sc_mutable)
10283 		  {
10284 		    DECL_MUTABLE_P (decl) = 1;
10285 		    storage_class = sc_none;
10286 		  }
10287 
10288 		if (initialized)
10289 		  {
10290 		    /* An attempt is being made to initialize a non-static
10291 		       member.  This is new in C++11.  */
10292 		    maybe_warn_cpp0x (CPP0X_NSDMI);
10293 
10294 		    /* If this has been parsed with static storage class, but
10295 		       errors forced staticp to be cleared, ensure NSDMI is
10296 		       not present.  */
10297 		    if (declspecs->storage_class == sc_static)
10298 		      DECL_INITIAL (decl) = error_mark_node;
10299 		  }
10300 	      }
10301 
10302 	    bad_specifiers (decl, BSP_FIELD, virtualp,
10303 			    memfn_quals != TYPE_UNQUALIFIED,
10304 			    inlinep, friendp, raises != NULL_TREE);
10305 	  }
10306       }
10307     else if (TREE_CODE (type) == FUNCTION_TYPE
10308 	     || TREE_CODE (type) == METHOD_TYPE)
10309       {
10310 	tree original_name;
10311 	int publicp = 0;
10312 
10313 	if (!unqualified_id)
10314 	  return error_mark_node;
10315 
10316 	if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10317 	  original_name = dname;
10318 	else
10319 	  original_name = unqualified_id;
10320 
10321 	if (storage_class == sc_auto)
10322 	  error ("storage class %<auto%> invalid for function %qs", name);
10323 	else if (storage_class == sc_register)
10324 	  error ("storage class %<register%> invalid for function %qs", name);
10325 	else if (thread_p)
10326 	  error ("storage class %<__thread%> invalid for function %qs", name);
10327 
10328         if (virt_specifiers)
10329           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10330 	/* Function declaration not at top level.
10331 	   Storage classes other than `extern' are not allowed
10332 	   and `extern' makes no difference.  */
10333 	if (! toplevel_bindings_p ()
10334 	    && (storage_class == sc_static
10335 		|| declspecs->specs[(int)ds_inline])
10336 	    && pedantic)
10337 	  {
10338 	    if (storage_class == sc_static)
10339 	      pedwarn (input_location, OPT_pedantic,
10340 		       "%<static%> specified invalid for function %qs "
10341 		       "declared out of global scope", name);
10342 	    else
10343 	      pedwarn (input_location, OPT_pedantic,
10344 		       "%<inline%> specifier invalid for function %qs "
10345 		       "declared out of global scope", name);
10346 	  }
10347 
10348 	if (ctype == NULL_TREE)
10349 	  {
10350 	    if (virtualp)
10351 	      {
10352 		error ("virtual non-class function %qs", name);
10353 		virtualp = 0;
10354 	      }
10355 	    else if (sfk == sfk_constructor
10356 		     || sfk == sfk_destructor)
10357 	      {
10358 		error (funcdef_flag
10359 		       ? G_("%qs defined in a non-class scope")
10360 		       : G_("%qs declared in a non-class scope"), name);
10361 		sfk = sfk_none;
10362 	      }
10363 	  }
10364 
10365 	/* Record presence of `static'.  */
10366 	publicp = (ctype != NULL_TREE
10367 		   || storage_class == sc_extern
10368 		   || storage_class != sc_static);
10369 
10370 	decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10371 			   virtualp, flags, memfn_quals, raises,
10372 			   1, friendp,
10373 			   publicp, inlinep | (2 * constexpr_p), sfk,
10374                            funcdef_flag,
10375 			   template_count, in_namespace, attrlist,
10376 			   declarator->id_loc);
10377 	if (decl == NULL_TREE)
10378 	  return error_mark_node;
10379 
10380 	if (staticp == 1)
10381 	  {
10382 	    int invalid_static = 0;
10383 
10384 	    /* Don't allow a static member function in a class, and forbid
10385 	       declaring main to be static.  */
10386 	    if (TREE_CODE (type) == METHOD_TYPE)
10387 	      {
10388 		permerror (input_location, "cannot declare member function %qD to have "
10389 			   "static linkage", decl);
10390 		invalid_static = 1;
10391 	      }
10392 	    else if (current_function_decl)
10393 	      {
10394 		/* FIXME need arm citation */
10395 		error ("cannot declare static function inside another function");
10396 		invalid_static = 1;
10397 	      }
10398 
10399 	    if (invalid_static)
10400 	      {
10401 		staticp = 0;
10402 		storage_class = sc_none;
10403 	      }
10404 	  }
10405       }
10406     else
10407       {
10408 	/* It's a variable.  */
10409 
10410 	/* An uninitialized decl with `extern' is a reference.  */
10411 	decl = grokvardecl (type, unqualified_id,
10412 			    declspecs,
10413 			    initialized,
10414 			    (type_quals & TYPE_QUAL_CONST) != 0,
10415 			    ctype ? ctype : in_namespace);
10416 	bad_specifiers (decl, BSP_VAR, virtualp,
10417 			memfn_quals != TYPE_UNQUALIFIED,
10418 			inlinep, friendp, raises != NULL_TREE);
10419 
10420 	if (ctype)
10421 	  {
10422 	    DECL_CONTEXT (decl) = ctype;
10423 	    if (staticp == 1)
10424 	      {
10425 		permerror (input_location, "%<static%> may not be used when defining "
10426 			   "(as opposed to declaring) a static data member");
10427 		staticp = 0;
10428 		storage_class = sc_none;
10429 	      }
10430 	    if (storage_class == sc_register && TREE_STATIC (decl))
10431 	      {
10432 		error ("static member %qD declared %<register%>", decl);
10433 		storage_class = sc_none;
10434 	      }
10435 	    if (storage_class == sc_extern && pedantic)
10436 	      {
10437 		pedwarn (input_location, OPT_pedantic,
10438 			 "cannot explicitly declare member %q#D to have "
10439 			 "extern linkage", decl);
10440 		storage_class = sc_none;
10441 	      }
10442 	  }
10443 	else if (constexpr_p && DECL_EXTERNAL (decl))
10444 	  {
10445 	    error ("declaration of constexpr variable %qD is not a definition",
10446 		   decl);
10447 	    constexpr_p = false;
10448 	  }
10449       }
10450 
10451     if (storage_class == sc_extern && initialized && !funcdef_flag)
10452       {
10453 	if (toplevel_bindings_p ())
10454 	  {
10455 	    /* It's common practice (and completely valid) to have a const
10456 	       be initialized and declared extern.  */
10457 	    if (!(type_quals & TYPE_QUAL_CONST))
10458 	      warning (0, "%qs initialized and declared %<extern%>", name);
10459 	  }
10460 	else
10461 	  {
10462 	    error ("%qs has both %<extern%> and initializer", name);
10463 	    return error_mark_node;
10464 	  }
10465       }
10466 
10467     /* Record `register' declaration for warnings on &
10468        and in case doing stupid register allocation.  */
10469 
10470     if (storage_class == sc_register)
10471       DECL_REGISTER (decl) = 1;
10472     else if (storage_class == sc_extern)
10473       DECL_THIS_EXTERN (decl) = 1;
10474     else if (storage_class == sc_static)
10475       DECL_THIS_STATIC (decl) = 1;
10476 
10477     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10478     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10479       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10480 
10481     /* Record constancy and volatility on the DECL itself .  There's
10482        no need to do this when processing a template; we'll do this
10483        for the instantiated declaration based on the type of DECL.  */
10484     if (!processing_template_decl)
10485       cp_apply_type_quals_to_decl (type_quals, decl);
10486 
10487     return decl;
10488   }
10489 }
10490 
10491 /* Subroutine of start_function.  Ensure that each of the parameter
10492    types (as listed in PARMS) is complete, as is required for a
10493    function definition.  */
10494 
10495 static void
10496 require_complete_types_for_parms (tree parms)
10497 {
10498   for (; parms; parms = DECL_CHAIN (parms))
10499     {
10500       if (dependent_type_p (TREE_TYPE (parms)))
10501 	continue;
10502       if (!VOID_TYPE_P (TREE_TYPE (parms))
10503 	  && complete_type_or_else (TREE_TYPE (parms), parms))
10504 	{
10505 	  relayout_decl (parms);
10506 	  DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10507 	}
10508       else
10509 	/* grokparms or complete_type_or_else will have already issued
10510 	   an error.  */
10511 	TREE_TYPE (parms) = error_mark_node;
10512     }
10513 }
10514 
10515 /* Returns nonzero if T is a local variable.  */
10516 
10517 int
10518 local_variable_p (const_tree t)
10519 {
10520   if ((TREE_CODE (t) == VAR_DECL
10521        /* A VAR_DECL with a context that is a _TYPE is a static data
10522 	  member.  */
10523        && !TYPE_P (CP_DECL_CONTEXT (t))
10524        /* Any other non-local variable must be at namespace scope.  */
10525        && !DECL_NAMESPACE_SCOPE_P (t))
10526       || (TREE_CODE (t) == PARM_DECL))
10527     return 1;
10528 
10529   return 0;
10530 }
10531 
10532 /* Like local_variable_p, but suitable for use as a tree-walking
10533    function.  */
10534 
10535 static tree
10536 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10537 			 void *data ATTRIBUTE_UNUSED)
10538 {
10539   if (local_variable_p (*tp)
10540       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
10541     return *tp;
10542   else if (TYPE_P (*tp))
10543     *walk_subtrees = 0;
10544 
10545   return NULL_TREE;
10546 }
10547 
10548 /* Check that ARG, which is a default-argument expression for a
10549    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10550    something goes wrong.  DECL may also be a _TYPE node, rather than a
10551    DECL, if there is no DECL available.  */
10552 
10553 tree
10554 check_default_argument (tree decl, tree arg)
10555 {
10556   tree var;
10557   tree decl_type;
10558 
10559   if (TREE_CODE (arg) == DEFAULT_ARG)
10560     /* We get a DEFAULT_ARG when looking at an in-class declaration
10561        with a default argument.  Ignore the argument for now; we'll
10562        deal with it after the class is complete.  */
10563     return arg;
10564 
10565   if (TYPE_P (decl))
10566     {
10567       decl_type = decl;
10568       decl = NULL_TREE;
10569     }
10570   else
10571     decl_type = TREE_TYPE (decl);
10572 
10573   if (arg == error_mark_node
10574       || decl == error_mark_node
10575       || TREE_TYPE (arg) == error_mark_node
10576       || decl_type == error_mark_node)
10577     /* Something already went wrong.  There's no need to check
10578        further.  */
10579     return error_mark_node;
10580 
10581   /* [dcl.fct.default]
10582 
10583      A default argument expression is implicitly converted to the
10584      parameter type.  */
10585   if (!TREE_TYPE (arg)
10586       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10587     {
10588       if (decl)
10589 	error ("default argument for %q#D has type %qT",
10590 	       decl, TREE_TYPE (arg));
10591       else
10592 	error ("default argument for parameter of type %qT has type %qT",
10593 	       decl_type, TREE_TYPE (arg));
10594 
10595       return error_mark_node;
10596     }
10597 
10598   if (warn_zero_as_null_pointer_constant
10599       && c_inhibit_evaluation_warnings == 0
10600       && (TYPE_PTR_P (decl_type) || TYPE_PTR_TO_MEMBER_P (decl_type))
10601       && null_ptr_cst_p (arg)
10602       && !NULLPTR_TYPE_P (TREE_TYPE (arg)))
10603     {
10604       warning (OPT_Wzero_as_null_pointer_constant,
10605 	       "zero as null pointer constant");
10606       return nullptr_node;
10607     }
10608 
10609   /* [dcl.fct.default]
10610 
10611      Local variables shall not be used in default argument
10612      expressions.
10613 
10614      The keyword `this' shall not be used in a default argument of a
10615      member function.  */
10616   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10617   if (var)
10618     {
10619       if (DECL_NAME (var) == this_identifier)
10620 	permerror (input_location, "default argument %qE uses %qD", arg, var);
10621       else
10622 	error ("default argument %qE uses local variable %qD", arg, var);
10623       return error_mark_node;
10624     }
10625 
10626   /* All is well.  */
10627   return arg;
10628 }
10629 
10630 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10631 
10632 static tree
10633 type_is_deprecated (tree type)
10634 {
10635   enum tree_code code;
10636   if (TREE_DEPRECATED (type))
10637     return type;
10638   if (TYPE_NAME (type)
10639       && TREE_DEPRECATED (TYPE_NAME (type)))
10640     return type;
10641 
10642   /* Do warn about using typedefs to a deprecated class.  */
10643   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10644     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10645 
10646   code = TREE_CODE (type);
10647 
10648   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10649       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10650       || code == METHOD_TYPE || code == ARRAY_TYPE)
10651     return type_is_deprecated (TREE_TYPE (type));
10652 
10653   if (TYPE_PTRMEMFUNC_P (type))
10654     return type_is_deprecated
10655       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10656 
10657   return NULL_TREE;
10658 }
10659 
10660 /* Decode the list of parameter types for a function type.
10661    Given the list of things declared inside the parens,
10662    return a list of types.
10663 
10664    If this parameter does not end with an ellipsis, we append
10665    void_list_node.
10666 
10667    *PARMS is set to the chain of PARM_DECLs created.  */
10668 
10669 static tree
10670 grokparms (tree parmlist, tree *parms)
10671 {
10672   tree result = NULL_TREE;
10673   tree decls = NULL_TREE;
10674   tree parm;
10675   int any_error = 0;
10676 
10677   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10678     {
10679       tree type = NULL_TREE;
10680       tree init = TREE_PURPOSE (parm);
10681       tree decl = TREE_VALUE (parm);
10682       const char *errmsg;
10683 
10684       if (parm == void_list_node)
10685 	break;
10686 
10687       if (! decl || TREE_TYPE (decl) == error_mark_node)
10688 	continue;
10689 
10690       type = TREE_TYPE (decl);
10691       if (VOID_TYPE_P (type))
10692 	{
10693 	  if (same_type_p (type, void_type_node)
10694 	      && DECL_SELF_REFERENCE_P (type)
10695 	      && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10696 	    /* this is a parmlist of `(void)', which is ok.  */
10697 	    break;
10698 	  cxx_incomplete_type_error (decl, type);
10699 	  /* It's not a good idea to actually create parameters of
10700 	     type `void'; other parts of the compiler assume that a
10701 	     void type terminates the parameter list.  */
10702 	  type = error_mark_node;
10703 	  TREE_TYPE (decl) = error_mark_node;
10704 	}
10705 
10706       if (type != error_mark_node
10707 	  && TYPE_FOR_JAVA (type)
10708 	  && MAYBE_CLASS_TYPE_P (type))
10709 	{
10710 	  error ("parameter %qD has Java class type", decl);
10711 	  type = error_mark_node;
10712 	  TREE_TYPE (decl) = error_mark_node;
10713 	  init = NULL_TREE;
10714 	}
10715 
10716       if (type != error_mark_node
10717 	  && (errmsg = targetm.invalid_parameter_type (type)))
10718 	{
10719 	  error (errmsg);
10720 	  type = error_mark_node;
10721 	  TREE_TYPE (decl) = error_mark_node;
10722 	}
10723 
10724       if (type != error_mark_node)
10725 	{
10726 	  if (deprecated_state != DEPRECATED_SUPPRESS)
10727 	    {
10728 	      tree deptype = type_is_deprecated (type);
10729 	      if (deptype)
10730 		warn_deprecated_use (deptype, NULL_TREE);
10731 	    }
10732 
10733 	  /* Top-level qualifiers on the parameters are
10734 	     ignored for function types.  */
10735 	  type = cp_build_qualified_type (type, 0);
10736 	  if (TREE_CODE (type) == METHOD_TYPE)
10737 	    {
10738 	      error ("parameter %qD invalidly declared method type", decl);
10739 	      type = build_pointer_type (type);
10740 	      TREE_TYPE (decl) = type;
10741 	    }
10742 	  else if (abstract_virtuals_error (decl, type))
10743 	    any_error = 1;  /* Seems like a good idea.  */
10744 	  else if (POINTER_TYPE_P (type))
10745 	    {
10746 	      /* [dcl.fct]/6, parameter types cannot contain pointers
10747 		 (references) to arrays of unknown bound.  */
10748 	      tree t = TREE_TYPE (type);
10749 	      int ptr = TYPE_PTR_P (type);
10750 
10751 	      while (1)
10752 		{
10753 		  if (TYPE_PTR_P (t))
10754 		    ptr = 1;
10755 		  else if (TREE_CODE (t) != ARRAY_TYPE)
10756 		    break;
10757 		  else if (!TYPE_DOMAIN (t))
10758 		    break;
10759 		  t = TREE_TYPE (t);
10760 		}
10761 	      if (TREE_CODE (t) == ARRAY_TYPE)
10762 		error (ptr
10763                        ? G_("parameter %qD includes pointer to array of "
10764                             "unknown bound %qT")
10765                        : G_("parameter %qD includes reference to array of "
10766                             "unknown bound %qT"),
10767                        decl, t);
10768 	    }
10769 
10770 	  if (any_error)
10771 	    init = NULL_TREE;
10772 	  else if (init && !processing_template_decl)
10773 	    init = check_default_argument (decl, init);
10774 	}
10775 
10776       DECL_CHAIN (decl) = decls;
10777       decls = decl;
10778       result = tree_cons (init, type, result);
10779     }
10780   decls = nreverse (decls);
10781   result = nreverse (result);
10782   if (parm)
10783     result = chainon (result, void_list_node);
10784   *parms = decls;
10785 
10786   return result;
10787 }
10788 
10789 
10790 /* D is a constructor or overloaded `operator='.
10791 
10792    Let T be the class in which D is declared. Then, this function
10793    returns:
10794 
10795    -1 if D's is an ill-formed constructor or copy assignment operator
10796       whose first parameter is of type `T'.
10797    0  if D is not a copy constructor or copy assignment
10798       operator.
10799    1  if D is a copy constructor or copy assignment operator whose
10800       first parameter is a reference to non-const qualified T.
10801    2  if D is a copy constructor or copy assignment operator whose
10802       first parameter is a reference to const qualified T.
10803 
10804    This function can be used as a predicate. Positive values indicate
10805    a copy constructor and nonzero values indicate a copy assignment
10806    operator.  */
10807 
10808 int
10809 copy_fn_p (const_tree d)
10810 {
10811   tree args;
10812   tree arg_type;
10813   int result = 1;
10814 
10815   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10816 
10817   if (TREE_CODE (d) == TEMPLATE_DECL
10818       || (DECL_TEMPLATE_INFO (d)
10819 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10820     /* Instantiations of template member functions are never copy
10821        functions.  Note that member functions of templated classes are
10822        represented as template functions internally, and we must
10823        accept those as copy functions.  */
10824     return 0;
10825 
10826   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10827   if (!args)
10828     return 0;
10829 
10830   arg_type = TREE_VALUE (args);
10831   if (arg_type == error_mark_node)
10832     return 0;
10833 
10834   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10835     {
10836       /* Pass by value copy assignment operator.  */
10837       result = -1;
10838     }
10839   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10840 	   && !TYPE_REF_IS_RVALUE (arg_type)
10841 	   && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10842     {
10843       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10844 	result = 2;
10845     }
10846   else
10847     return 0;
10848 
10849   args = TREE_CHAIN (args);
10850 
10851   if (args && args != void_list_node && !TREE_PURPOSE (args))
10852     /* There are more non-optional args.  */
10853     return 0;
10854 
10855   return result;
10856 }
10857 
10858 /* D is a constructor or overloaded `operator='.
10859 
10860    Let T be the class in which D is declared. Then, this function
10861    returns true when D is a move constructor or move assignment
10862    operator, false otherwise.  */
10863 
10864 bool
10865 move_fn_p (const_tree d)
10866 {
10867   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10868 
10869   if (cxx_dialect == cxx98)
10870     /* There are no move constructors if we are in C++98 mode.  */
10871     return false;
10872 
10873   if (TREE_CODE (d) == TEMPLATE_DECL
10874       || (DECL_TEMPLATE_INFO (d)
10875          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10876     /* Instantiations of template member functions are never move
10877        functions.  Note that member functions of templated classes are
10878        represented as template functions internally, and we must
10879        accept those as move functions.  */
10880     return 0;
10881 
10882   return move_signature_fn_p (d);
10883 }
10884 
10885 /* D is a constructor or overloaded `operator='.
10886 
10887    Then, this function returns true when D has the same signature as a move
10888    constructor or move assignment operator (because either it is such a
10889    ctor/op= or it is a template specialization with the same signature),
10890    false otherwise.  */
10891 
10892 bool
10893 move_signature_fn_p (const_tree d)
10894 {
10895   tree args;
10896   tree arg_type;
10897   bool result = false;
10898 
10899   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10900   if (!args)
10901     return 0;
10902 
10903   arg_type = TREE_VALUE (args);
10904   if (arg_type == error_mark_node)
10905     return 0;
10906 
10907   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10908       && TYPE_REF_IS_RVALUE (arg_type)
10909       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10910                       DECL_CONTEXT (d)))
10911     result = true;
10912 
10913   args = TREE_CHAIN (args);
10914 
10915   if (args && args != void_list_node && !TREE_PURPOSE (args))
10916     /* There are more non-optional args.  */
10917     return false;
10918 
10919   return result;
10920 }
10921 
10922 /* Remember any special properties of member function DECL.  */
10923 
10924 void
10925 grok_special_member_properties (tree decl)
10926 {
10927   tree class_type;
10928 
10929   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10930     return;
10931 
10932   class_type = DECL_CONTEXT (decl);
10933   if (DECL_CONSTRUCTOR_P (decl))
10934     {
10935       int ctor = copy_fn_p (decl);
10936 
10937       if (!DECL_ARTIFICIAL (decl))
10938 	TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10939 
10940       if (ctor > 0)
10941 	{
10942 	  /* [class.copy]
10943 
10944 	     A non-template constructor for class X is a copy
10945 	     constructor if its first parameter is of type X&, const
10946 	     X&, volatile X& or const volatile X&, and either there
10947 	     are no other parameters or else all other parameters have
10948 	     default arguments.  */
10949 	  TYPE_HAS_COPY_CTOR (class_type) = 1;
10950 	  if (user_provided_p (decl))
10951 	    TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10952 	  if (ctor > 1)
10953 	    TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10954 	}
10955       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10956 	{
10957 	  TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10958 	  if (user_provided_p (decl))
10959 	    TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10960 	}
10961       else if (move_fn_p (decl) && user_provided_p (decl))
10962 	TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10963       else if (is_list_ctor (decl))
10964 	TYPE_HAS_LIST_CTOR (class_type) = 1;
10965 
10966       if (DECL_DECLARED_CONSTEXPR_P (decl)
10967 	  && !copy_fn_p (decl) && !move_fn_p (decl))
10968 	TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10969     }
10970   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10971     {
10972       /* [class.copy]
10973 
10974 	 A non-template assignment operator for class X is a copy
10975 	 assignment operator if its parameter is of type X, X&, const
10976 	 X&, volatile X& or const volatile X&.  */
10977 
10978       int assop = copy_fn_p (decl);
10979 
10980       if (assop)
10981 	{
10982 	  TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10983 	  if (user_provided_p (decl))
10984 	    TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10985 	  if (assop != 1)
10986 	    TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10987 	}
10988       else if (move_fn_p (decl) && user_provided_p (decl))
10989 	TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10990     }
10991   /* Destructors are handled in check_methods.  */
10992 }
10993 
10994 /* Check a constructor DECL has the correct form.  Complains
10995    if the class has a constructor of the form X(X).  */
10996 
10997 int
10998 grok_ctor_properties (const_tree ctype, const_tree decl)
10999 {
11000   int ctor_parm = copy_fn_p (decl);
11001 
11002   if (ctor_parm < 0)
11003     {
11004       /* [class.copy]
11005 
11006 	 A declaration of a constructor for a class X is ill-formed if
11007 	 its first parameter is of type (optionally cv-qualified) X
11008 	 and either there are no other parameters or else all other
11009 	 parameters have default arguments.
11010 
11011 	 We *don't* complain about member template instantiations that
11012 	 have this form, though; they can occur as we try to decide
11013 	 what constructor to use during overload resolution.  Since
11014 	 overload resolution will never prefer such a constructor to
11015 	 the non-template copy constructor (which is either explicitly
11016 	 or implicitly defined), there's no need to worry about their
11017 	 existence.  Theoretically, they should never even be
11018 	 instantiated, but that's hard to forestall.  */
11019       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11020 		ctype, ctype);
11021       return 0;
11022     }
11023 
11024   return 1;
11025 }
11026 
11027 /* An operator with this code is unary, but can also be binary.  */
11028 
11029 static int
11030 ambi_op_p (enum tree_code code)
11031 {
11032   return (code == INDIRECT_REF
11033 	  || code == ADDR_EXPR
11034 	  || code == UNARY_PLUS_EXPR
11035 	  || code == NEGATE_EXPR
11036 	  || code == PREINCREMENT_EXPR
11037 	  || code == PREDECREMENT_EXPR);
11038 }
11039 
11040 /* An operator with this name can only be unary.  */
11041 
11042 static int
11043 unary_op_p (enum tree_code code)
11044 {
11045   return (code == TRUTH_NOT_EXPR
11046 	  || code == BIT_NOT_EXPR
11047 	  || code == COMPONENT_REF
11048 	  || code == TYPE_EXPR);
11049 }
11050 
11051 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11052    errors are issued for invalid declarations.  */
11053 
11054 bool
11055 grok_op_properties (tree decl, bool complain)
11056 {
11057   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11058   tree argtype;
11059   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11060   tree name = DECL_NAME (decl);
11061   enum tree_code operator_code;
11062   int arity;
11063   bool ellipsis_p;
11064   tree class_type;
11065 
11066   /* Count the number of arguments and check for ellipsis.  */
11067   for (argtype = argtypes, arity = 0;
11068        argtype && argtype != void_list_node;
11069        argtype = TREE_CHAIN (argtype))
11070     ++arity;
11071   ellipsis_p = !argtype;
11072 
11073   class_type = DECL_CONTEXT (decl);
11074   if (class_type && !CLASS_TYPE_P (class_type))
11075     class_type = NULL_TREE;
11076 
11077   if (DECL_CONV_FN_P (decl))
11078     operator_code = TYPE_EXPR;
11079   else
11080     do
11081       {
11082 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)	\
11083 	if (ansi_opname (CODE) == name)				\
11084 	  {							\
11085 	    operator_code = (CODE);				\
11086 	    break;						\
11087 	  }							\
11088 	else if (ansi_assopname (CODE) == name)			\
11089 	  {							\
11090 	    operator_code = (CODE);				\
11091 	    DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;		\
11092 	    break;						\
11093 	  }
11094 
11095 #include "operators.def"
11096 #undef DEF_OPERATOR
11097 
11098 	gcc_unreachable ();
11099       }
11100     while (0);
11101   gcc_assert (operator_code != MAX_TREE_CODES);
11102   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11103 
11104   if (class_type)
11105     switch (operator_code)
11106       {
11107       case NEW_EXPR:
11108 	TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11109 	break;
11110 
11111       case DELETE_EXPR:
11112 	TYPE_GETS_DELETE (class_type) |= 1;
11113 	break;
11114 
11115       case VEC_NEW_EXPR:
11116 	TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11117 	break;
11118 
11119       case VEC_DELETE_EXPR:
11120 	TYPE_GETS_DELETE (class_type) |= 2;
11121 	break;
11122 
11123       default:
11124 	break;
11125       }
11126 
11127     /* [basic.std.dynamic.allocation]/1:
11128 
11129        A program is ill-formed if an allocation function is declared
11130        in a namespace scope other than global scope or declared static
11131        in global scope.
11132 
11133        The same also holds true for deallocation functions.  */
11134   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11135       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11136     {
11137       if (DECL_NAMESPACE_SCOPE_P (decl))
11138 	{
11139 	  if (CP_DECL_CONTEXT (decl) != global_namespace)
11140 	    {
11141 	      error ("%qD may not be declared within a namespace", decl);
11142 	      return false;
11143 	    }
11144 	  else if (!TREE_PUBLIC (decl))
11145 	    {
11146 	      error ("%qD may not be declared as static", decl);
11147 	      return false;
11148 	    }
11149 	}
11150     }
11151 
11152   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11153     {
11154       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11155       DECL_IS_OPERATOR_NEW (decl) = 1;
11156     }
11157   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11158     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11159   else
11160     {
11161       /* An operator function must either be a non-static member function
11162 	 or have at least one parameter of a class, a reference to a class,
11163 	 an enumeration, or a reference to an enumeration.  13.4.0.6 */
11164       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11165 	{
11166 	  if (operator_code == TYPE_EXPR
11167 	      || operator_code == CALL_EXPR
11168 	      || operator_code == COMPONENT_REF
11169 	      || operator_code == ARRAY_REF
11170 	      || operator_code == NOP_EXPR)
11171 	    {
11172 	      error ("%qD must be a nonstatic member function", decl);
11173 	      return false;
11174 	    }
11175 	  else
11176 	    {
11177 	      tree p;
11178 
11179 	      if (DECL_STATIC_FUNCTION_P (decl))
11180 		{
11181 		  error ("%qD must be either a non-static member "
11182 			 "function or a non-member function", decl);
11183 		  return false;
11184 		}
11185 
11186 	      for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11187 		{
11188 		  tree arg = non_reference (TREE_VALUE (p));
11189 		  if (arg == error_mark_node)
11190 		    return false;
11191 
11192 		  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11193 		     because these checks are performed even on
11194 		     template functions.  */
11195 		  if (MAYBE_CLASS_TYPE_P (arg)
11196 		      || TREE_CODE (arg) == ENUMERAL_TYPE)
11197 		    break;
11198 		}
11199 
11200 	      if (!p || p == void_list_node)
11201 		{
11202 		  if (complain)
11203 		    error ("%qD must have an argument of class or "
11204 			   "enumerated type", decl);
11205 		  return false;
11206 		}
11207 	    }
11208 	}
11209 
11210       /* There are no restrictions on the arguments to an overloaded
11211 	 "operator ()".  */
11212       if (operator_code == CALL_EXPR)
11213 	return true;
11214 
11215       /* Warn about conversion operators that will never be used.  */
11216       if (IDENTIFIER_TYPENAME_P (name)
11217 	  && ! DECL_TEMPLATE_INFO (decl)
11218 	  && warn_conversion
11219 	  /* Warn only declaring the function; there is no need to
11220 	     warn again about out-of-class definitions.  */
11221 	  && class_type == current_class_type)
11222 	{
11223 	  tree t = TREE_TYPE (name);
11224 	  int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11225 
11226 	  if (ref)
11227 	    t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11228 
11229 	  if (TREE_CODE (t) == VOID_TYPE)
11230             warning (OPT_Wconversion,
11231                      ref
11232                      ? G_("conversion to a reference to void "
11233                           "will never use a type conversion operator")
11234                      : G_("conversion to void "
11235                           "will never use a type conversion operator"));
11236 	  else if (class_type)
11237 	    {
11238 	      if (t == class_type)
11239                 warning (OPT_Wconversion,
11240                      ref
11241                      ? G_("conversion to a reference to the same type "
11242                           "will never use a type conversion operator")
11243                      : G_("conversion to the same type "
11244                           "will never use a type conversion operator"));
11245 	      /* Don't force t to be complete here.  */
11246 	      else if (MAYBE_CLASS_TYPE_P (t)
11247 		       && COMPLETE_TYPE_P (t)
11248 		       && DERIVED_FROM_P (t, class_type))
11249                  warning (OPT_Wconversion,
11250                           ref
11251                           ? G_("conversion to a reference to a base class "
11252                                "will never use a type conversion operator")
11253                           : G_("conversion to a base class "
11254                                "will never use a type conversion operator"));
11255 	    }
11256 
11257 	}
11258 
11259       if (operator_code == COND_EXPR)
11260 	{
11261 	  /* 13.4.0.3 */
11262 	  error ("ISO C++ prohibits overloading operator ?:");
11263 	  return false;
11264 	}
11265       else if (ellipsis_p)
11266 	{
11267 	  error ("%qD must not have variable number of arguments", decl);
11268 	  return false;
11269 	}
11270       else if (ambi_op_p (operator_code))
11271 	{
11272 	  if (arity == 1)
11273 	    /* We pick the one-argument operator codes by default, so
11274 	       we don't have to change anything.  */
11275 	    ;
11276 	  else if (arity == 2)
11277 	    {
11278 	      /* If we thought this was a unary operator, we now know
11279 		 it to be a binary operator.  */
11280 	      switch (operator_code)
11281 		{
11282 		case INDIRECT_REF:
11283 		  operator_code = MULT_EXPR;
11284 		  break;
11285 
11286 		case ADDR_EXPR:
11287 		  operator_code = BIT_AND_EXPR;
11288 		  break;
11289 
11290 		case UNARY_PLUS_EXPR:
11291 		  operator_code = PLUS_EXPR;
11292 		  break;
11293 
11294 		case NEGATE_EXPR:
11295 		  operator_code = MINUS_EXPR;
11296 		  break;
11297 
11298 		case PREINCREMENT_EXPR:
11299 		  operator_code = POSTINCREMENT_EXPR;
11300 		  break;
11301 
11302 		case PREDECREMENT_EXPR:
11303 		  operator_code = POSTDECREMENT_EXPR;
11304 		  break;
11305 
11306 		default:
11307 		  gcc_unreachable ();
11308 		}
11309 
11310 	      SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11311 
11312 	      if ((operator_code == POSTINCREMENT_EXPR
11313 		   || operator_code == POSTDECREMENT_EXPR)
11314 		  && ! processing_template_decl
11315 		  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11316 		{
11317 		  if (methodp)
11318 		    error ("postfix %qD must take %<int%> as its argument",
11319 			   decl);
11320 		  else
11321 		    error ("postfix %qD must take %<int%> as its second "
11322 			   "argument", decl);
11323 		  return false;
11324 		}
11325 	    }
11326 	  else
11327 	    {
11328 	      if (methodp)
11329 		error ("%qD must take either zero or one argument", decl);
11330 	      else
11331 		error ("%qD must take either one or two arguments", decl);
11332 	      return false;
11333 	    }
11334 
11335 	  /* More Effective C++ rule 6.  */
11336 	  if (warn_ecpp
11337 	      && (operator_code == POSTINCREMENT_EXPR
11338 		  || operator_code == POSTDECREMENT_EXPR
11339 		  || operator_code == PREINCREMENT_EXPR
11340 		  || operator_code == PREDECREMENT_EXPR))
11341 	    {
11342 	      tree arg = TREE_VALUE (argtypes);
11343 	      tree ret = TREE_TYPE (TREE_TYPE (decl));
11344 	      if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11345 		arg = TREE_TYPE (arg);
11346 	      arg = TYPE_MAIN_VARIANT (arg);
11347 	      if (operator_code == PREINCREMENT_EXPR
11348 		  || operator_code == PREDECREMENT_EXPR)
11349 		{
11350 		  if (TREE_CODE (ret) != REFERENCE_TYPE
11351 		      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11352 				       arg))
11353 		    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11354 			     build_reference_type (arg));
11355 		}
11356 	      else
11357 		{
11358 		  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11359 		    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11360 		}
11361 	    }
11362 	}
11363       else if (unary_op_p (operator_code))
11364 	{
11365 	  if (arity != 1)
11366 	    {
11367 	      if (methodp)
11368 		error ("%qD must take %<void%>", decl);
11369 	      else
11370 		error ("%qD must take exactly one argument", decl);
11371 	      return false;
11372 	    }
11373 	}
11374       else /* if (binary_op_p (operator_code)) */
11375 	{
11376 	  if (arity != 2)
11377 	    {
11378 	      if (methodp)
11379 		error ("%qD must take exactly one argument", decl);
11380 	      else
11381 		error ("%qD must take exactly two arguments", decl);
11382 	      return false;
11383 	    }
11384 
11385 	  /* More Effective C++ rule 7.  */
11386 	  if (warn_ecpp
11387 	      && (operator_code == TRUTH_ANDIF_EXPR
11388 		  || operator_code == TRUTH_ORIF_EXPR
11389 		  || operator_code == COMPOUND_EXPR))
11390 	    warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11391 		     decl);
11392 	}
11393 
11394       /* Effective C++ rule 23.  */
11395       if (warn_ecpp
11396 	  && arity == 2
11397 	  && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11398 	  && (operator_code == PLUS_EXPR
11399 	      || operator_code == MINUS_EXPR
11400 	      || operator_code == TRUNC_DIV_EXPR
11401 	      || operator_code == MULT_EXPR
11402 	      || operator_code == TRUNC_MOD_EXPR)
11403 	  && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11404 	warning (OPT_Weffc__, "%qD should return by value", decl);
11405 
11406       /* [over.oper]/8 */
11407       for (; argtypes && argtypes != void_list_node;
11408 	  argtypes = TREE_CHAIN (argtypes))
11409 	if (TREE_PURPOSE (argtypes))
11410 	  {
11411 	    TREE_PURPOSE (argtypes) = NULL_TREE;
11412 	    if (operator_code == POSTINCREMENT_EXPR
11413 		|| operator_code == POSTDECREMENT_EXPR)
11414 	      {
11415 		pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
11416 			 decl);
11417 	      }
11418 	    else
11419 	      {
11420 		error ("%qD cannot have default arguments", decl);
11421 		return false;
11422 	      }
11423 	  }
11424     }
11425   return true;
11426 }
11427 
11428 /* Return a string giving the keyword associate with CODE.  */
11429 
11430 static const char *
11431 tag_name (enum tag_types code)
11432 {
11433   switch (code)
11434     {
11435     case record_type:
11436       return "struct";
11437     case class_type:
11438       return "class";
11439     case union_type:
11440       return "union";
11441     case enum_type:
11442       return "enum";
11443     case typename_type:
11444       return "typename";
11445     default:
11446       gcc_unreachable ();
11447     }
11448 }
11449 
11450 /* Name lookup in an elaborated-type-specifier (after the keyword
11451    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11452    elaborated-type-specifier is invalid, issue a diagnostic and return
11453    error_mark_node; otherwise, return the *_TYPE to which it referred.
11454    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11455 
11456 tree
11457 check_elaborated_type_specifier (enum tag_types tag_code,
11458 				 tree decl,
11459 				 bool allow_template_p)
11460 {
11461   tree type;
11462 
11463   /* In the case of:
11464 
11465        struct S { struct S *p; };
11466 
11467      name lookup will find the TYPE_DECL for the implicit "S::S"
11468      typedef.  Adjust for that here.  */
11469   if (DECL_SELF_REFERENCE_P (decl))
11470     decl = TYPE_NAME (TREE_TYPE (decl));
11471 
11472   type = TREE_TYPE (decl);
11473 
11474   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11475      is false for this case as well.  */
11476   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11477     {
11478       error ("using template type parameter %qT after %qs",
11479 	     type, tag_name (tag_code));
11480       return error_mark_node;
11481     }
11482   /* Accept bound template template parameters.  */
11483   else if (allow_template_p
11484 	   && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11485     ;
11486   /*   [dcl.type.elab]
11487 
11488        If the identifier resolves to a typedef-name or the
11489        simple-template-id resolves to an alias template
11490        specialization, the elaborated-type-specifier is ill-formed.
11491 
11492      In other words, the only legitimate declaration to use in the
11493      elaborated type specifier is the implicit typedef created when
11494      the type is declared.  */
11495   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11496 	   && !DECL_SELF_REFERENCE_P (decl)
11497 	   && tag_code != typename_type)
11498     {
11499       if (alias_template_specialization_p (type))
11500 	error ("using alias template specialization %qT after %qs",
11501 	       type, tag_name (tag_code));
11502       else
11503 	error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11504       inform (DECL_SOURCE_LOCATION (decl),
11505 	      "%qD has a previous declaration here", decl);
11506       return error_mark_node;
11507     }
11508   else if (TREE_CODE (type) != RECORD_TYPE
11509 	   && TREE_CODE (type) != UNION_TYPE
11510 	   && tag_code != enum_type
11511 	   && tag_code != typename_type)
11512     {
11513       error ("%qT referred to as %qs", type, tag_name (tag_code));
11514       error ("%q+T has a previous declaration here", type);
11515       return error_mark_node;
11516     }
11517   else if (TREE_CODE (type) != ENUMERAL_TYPE
11518 	   && tag_code == enum_type)
11519     {
11520       error ("%qT referred to as enum", type);
11521       error ("%q+T has a previous declaration here", type);
11522       return error_mark_node;
11523     }
11524   else if (!allow_template_p
11525 	   && TREE_CODE (type) == RECORD_TYPE
11526 	   && CLASSTYPE_IS_TEMPLATE (type))
11527     {
11528       /* If a class template appears as elaborated type specifier
11529 	 without a template header such as:
11530 
11531 	   template <class T> class C {};
11532 	   void f(class C);		// No template header here
11533 
11534 	 then the required template argument is missing.  */
11535       error ("template argument required for %<%s %T%>",
11536 	     tag_name (tag_code),
11537 	     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11538       return error_mark_node;
11539     }
11540 
11541   return type;
11542 }
11543 
11544 /* Lookup NAME in elaborate type specifier in scope according to
11545    SCOPE and issue diagnostics if necessary.
11546    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11547    found, and ERROR_MARK_NODE for type error.  */
11548 
11549 static tree
11550 lookup_and_check_tag (enum tag_types tag_code, tree name,
11551 		      tag_scope scope, bool template_header_p)
11552 {
11553   tree t;
11554   tree decl;
11555   if (scope == ts_global)
11556     {
11557       /* First try ordinary name lookup, ignoring hidden class name
11558 	 injected via friend declaration.  */
11559       decl = lookup_name_prefer_type (name, 2);
11560       /* If that fails, the name will be placed in the smallest
11561 	 non-class, non-function-prototype scope according to 3.3.1/5.
11562 	 We may already have a hidden name declared as friend in this
11563 	 scope.  So lookup again but not ignoring hidden names.
11564 	 If we find one, that name will be made visible rather than
11565 	 creating a new tag.  */
11566       if (!decl)
11567 	decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11568     }
11569   else
11570     decl = lookup_type_scope (name, scope);
11571 
11572   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11573     decl = DECL_TEMPLATE_RESULT (decl);
11574 
11575   if (decl && TREE_CODE (decl) == TYPE_DECL)
11576     {
11577       /* Look for invalid nested type:
11578 	   class C {
11579 	     class C {};
11580 	   };  */
11581       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11582 	{
11583 	  error ("%qD has the same name as the class in which it is "
11584 		 "declared",
11585 		 decl);
11586 	  return error_mark_node;
11587 	}
11588 
11589       /* Two cases we need to consider when deciding if a class
11590 	 template is allowed as an elaborated type specifier:
11591 	 1. It is a self reference to its own class.
11592 	 2. It comes with a template header.
11593 
11594 	 For example:
11595 
11596 	   template <class T> class C {
11597 	     class C *c1;		// DECL_SELF_REFERENCE_P is true
11598 	     class D;
11599 	   };
11600 	   template <class U> class C; // template_header_p is true
11601 	   template <class T> class C<T>::D {
11602 	     class C *c2;		// DECL_SELF_REFERENCE_P is true
11603 	   };  */
11604 
11605       t = check_elaborated_type_specifier (tag_code,
11606 					   decl,
11607 					   template_header_p
11608 					   | DECL_SELF_REFERENCE_P (decl));
11609       return t;
11610     }
11611   else if (decl && TREE_CODE (decl) == TREE_LIST)
11612     {
11613       error ("reference to %qD is ambiguous", name);
11614       print_candidates (decl);
11615       return error_mark_node;
11616     }
11617   else
11618     return NULL_TREE;
11619 }
11620 
11621 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11622    Define the tag as a forward-reference if it is not defined.
11623 
11624    If a declaration is given, process it here, and report an error if
11625    multiple declarations are not identical.
11626 
11627    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11628    the current frame for the name (since C++ allows new names in any
11629    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11630    declaration.  Only look beginning from the current scope outward up
11631    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11632 
11633    TEMPLATE_HEADER_P is true when this declaration is preceded by
11634    a set of template parameters.  */
11635 
11636 static tree
11637 xref_tag_1 (enum tag_types tag_code, tree name,
11638             tag_scope scope, bool template_header_p)
11639 {
11640   enum tree_code code;
11641   tree t;
11642   tree context = NULL_TREE;
11643 
11644   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11645 
11646   switch (tag_code)
11647     {
11648     case record_type:
11649     case class_type:
11650       code = RECORD_TYPE;
11651       break;
11652     case union_type:
11653       code = UNION_TYPE;
11654       break;
11655     case enum_type:
11656       code = ENUMERAL_TYPE;
11657       break;
11658     default:
11659       gcc_unreachable ();
11660     }
11661 
11662   /* In case of anonymous name, xref_tag is only called to
11663      make type node and push name.  Name lookup is not required.  */
11664   if (ANON_AGGRNAME_P (name))
11665     t = NULL_TREE;
11666   else
11667     t = lookup_and_check_tag  (tag_code, name,
11668 			       scope, template_header_p);
11669 
11670   if (t == error_mark_node)
11671     return error_mark_node;
11672 
11673   if (scope != ts_current && t && current_class_type
11674       && template_class_depth (current_class_type)
11675       && template_header_p)
11676     {
11677       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11678 	 definition of this tag.  Since, in addition, we are currently
11679 	 processing a (member) template declaration of a template
11680 	 class, we must be very careful; consider:
11681 
11682 	   template <class X>
11683 	   struct S1
11684 
11685 	   template <class U>
11686 	   struct S2
11687 	   { template <class V>
11688 	   friend struct S1; };
11689 
11690 	 Here, the S2::S1 declaration should not be confused with the
11691 	 outer declaration.  In particular, the inner version should
11692 	 have a template parameter of level 2, not level 1.  This
11693 	 would be particularly important if the member declaration
11694 	 were instead:
11695 
11696 	   template <class V = U> friend struct S1;
11697 
11698 	 say, when we should tsubst into `U' when instantiating
11699 	 S2.  On the other hand, when presented with:
11700 
11701 	   template <class T>
11702 	   struct S1 {
11703 	     template <class U>
11704 	     struct S2 {};
11705 	     template <class U>
11706 	     friend struct S2;
11707 	   };
11708 
11709 	 we must find the inner binding eventually.  We
11710 	 accomplish this by making sure that the new type we
11711 	 create to represent this declaration has the right
11712 	 TYPE_CONTEXT.  */
11713       context = TYPE_CONTEXT (t);
11714       t = NULL_TREE;
11715     }
11716 
11717   if (! t)
11718     {
11719       /* If no such tag is yet defined, create a forward-reference node
11720 	 and record it as the "definition".
11721 	 When a real declaration of this type is found,
11722 	 the forward-reference will be altered into a real type.  */
11723       if (code == ENUMERAL_TYPE)
11724 	{
11725 	  error ("use of enum %q#D without previous declaration", name);
11726 	  return error_mark_node;
11727 	}
11728       else
11729 	{
11730 	  t = make_class_type (code);
11731 	  TYPE_CONTEXT (t) = context;
11732 	  t = pushtag (name, t, scope);
11733 	}
11734     }
11735   else
11736     {
11737       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11738         {
11739 	  if (!redeclare_class_template (t, current_template_parms))
11740             return error_mark_node;
11741         }
11742       else if (!processing_template_decl
11743 	       && CLASS_TYPE_P (t)
11744 	       && CLASSTYPE_IS_TEMPLATE (t))
11745 	{
11746 	  error ("redeclaration of %qT as a non-template", t);
11747 	  error ("previous declaration %q+D", t);
11748 	  return error_mark_node;
11749 	}
11750 
11751       /* Make injected friend class visible.  */
11752       if (scope != ts_within_enclosing_non_class
11753 	  && hidden_name_p (TYPE_NAME (t)))
11754 	{
11755 	  DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11756 	  DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11757 
11758 	  if (TYPE_TEMPLATE_INFO (t))
11759 	    {
11760 	      DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11761 	      DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11762 	    }
11763 	}
11764     }
11765 
11766   return t;
11767 }
11768 
11769 /* Wrapper for xref_tag_1.  */
11770 
11771 tree
11772 xref_tag (enum tag_types tag_code, tree name,
11773           tag_scope scope, bool template_header_p)
11774 {
11775   tree ret;
11776   bool subtime;
11777   subtime = timevar_cond_start (TV_NAME_LOOKUP);
11778   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11779   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11780   return ret;
11781 }
11782 
11783 
11784 tree
11785 xref_tag_from_type (tree old, tree id, tag_scope scope)
11786 {
11787   enum tag_types tag_kind;
11788 
11789   if (TREE_CODE (old) == RECORD_TYPE)
11790     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11791   else
11792     tag_kind  = union_type;
11793 
11794   if (id == NULL_TREE)
11795     id = TYPE_IDENTIFIER (old);
11796 
11797   return xref_tag (tag_kind, id, scope, false);
11798 }
11799 
11800 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11801    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11802    access_* node, and the TREE_VALUE is the type of the base-class.
11803    Non-NULL TREE_TYPE indicates virtual inheritance.
11804 
11805    Returns true if the binfo hierarchy was successfully created,
11806    false if an error was detected. */
11807 
11808 bool
11809 xref_basetypes (tree ref, tree base_list)
11810 {
11811   tree *basep;
11812   tree binfo, base_binfo;
11813   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11814   unsigned max_bases = 0;  /* Maximum direct bases.  */
11815   int i;
11816   tree default_access;
11817   tree igo_prev; /* Track Inheritance Graph Order.  */
11818 
11819   if (ref == error_mark_node)
11820     return false;
11821 
11822   /* The base of a derived class is private by default, all others are
11823      public.  */
11824   default_access = (TREE_CODE (ref) == RECORD_TYPE
11825 		    && CLASSTYPE_DECLARED_CLASS (ref)
11826 		    ? access_private_node : access_public_node);
11827 
11828   /* First, make sure that any templates in base-classes are
11829      instantiated.  This ensures that if we call ourselves recursively
11830      we do not get confused about which classes are marked and which
11831      are not.  */
11832   basep = &base_list;
11833   while (*basep)
11834     {
11835       tree basetype = TREE_VALUE (*basep);
11836 
11837       if (!(processing_template_decl && uses_template_parms (basetype))
11838 	  && !complete_type_or_else (basetype, NULL))
11839 	/* An incomplete type.  Remove it from the list.  */
11840 	*basep = TREE_CHAIN (*basep);
11841       else
11842 	{
11843 	  max_bases++;
11844 	  if (TREE_TYPE (*basep))
11845 	    max_vbases++;
11846 	  if (CLASS_TYPE_P (basetype))
11847 	    max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11848 	  basep = &TREE_CHAIN (*basep);
11849 	}
11850     }
11851 
11852   TYPE_MARKED_P (ref) = 1;
11853 
11854   /* The binfo slot should be empty, unless this is an (ill-formed)
11855      redefinition.  */
11856   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11857     {
11858       error ("redefinition of %q#T", ref);
11859       return false;
11860     }
11861 
11862   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11863 
11864   binfo = make_tree_binfo (max_bases);
11865 
11866   TYPE_BINFO (ref) = binfo;
11867   BINFO_OFFSET (binfo) = size_zero_node;
11868   BINFO_TYPE (binfo) = ref;
11869 
11870   /* Apply base-class info set up to the variants of this type.  */
11871   fixup_type_variants (ref);
11872 
11873   if (max_bases)
11874     {
11875       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11876       /* An aggregate cannot have baseclasses.  */
11877       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11878 
11879       if (TREE_CODE (ref) == UNION_TYPE)
11880         {
11881 	  error ("derived union %qT invalid", ref);
11882           return false;
11883         }
11884     }
11885 
11886   if (max_bases > 1)
11887     {
11888       if (TYPE_FOR_JAVA (ref))
11889         {
11890 	  error ("Java class %qT cannot have multiple bases", ref);
11891           return false;
11892         }
11893     }
11894 
11895   if (max_vbases)
11896     {
11897       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11898 
11899       if (TYPE_FOR_JAVA (ref))
11900         {
11901 	  error ("Java class %qT cannot have virtual bases", ref);
11902           return false;
11903         }
11904     }
11905 
11906   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11907     {
11908       tree access = TREE_PURPOSE (base_list);
11909       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11910       tree basetype = TREE_VALUE (base_list);
11911 
11912       if (access == access_default_node)
11913 	access = default_access;
11914 
11915       if (PACK_EXPANSION_P (basetype))
11916         basetype = PACK_EXPANSION_PATTERN (basetype);
11917       if (TREE_CODE (basetype) == TYPE_DECL)
11918 	basetype = TREE_TYPE (basetype);
11919       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11920 	{
11921 	  error ("base type %qT fails to be a struct or class type",
11922 		 basetype);
11923 	  return false;
11924 	}
11925 
11926       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11927 	TYPE_FOR_JAVA (ref) = 1;
11928 
11929       base_binfo = NULL_TREE;
11930       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11931 	{
11932 	  base_binfo = TYPE_BINFO (basetype);
11933 	  /* The original basetype could have been a typedef'd type.  */
11934 	  basetype = BINFO_TYPE (base_binfo);
11935 
11936 	  /* Inherit flags from the base.  */
11937 	  TYPE_HAS_NEW_OPERATOR (ref)
11938 	    |= TYPE_HAS_NEW_OPERATOR (basetype);
11939 	  TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11940 	    |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11941 	  TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11942 	  TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11943 	  CLASSTYPE_DIAMOND_SHAPED_P (ref)
11944 	    |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11945 	  CLASSTYPE_REPEATED_BASE_P (ref)
11946 	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
11947 	}
11948 
11949       /* We must do this test after we've seen through a typedef
11950 	 type.  */
11951       if (TYPE_MARKED_P (basetype))
11952 	{
11953 	  if (basetype == ref)
11954 	    error ("recursive type %qT undefined", basetype);
11955 	  else
11956 	    error ("duplicate base type %qT invalid", basetype);
11957 	  return false;
11958 	}
11959 
11960       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11961         /* Regenerate the pack expansion for the bases. */
11962         basetype = make_pack_expansion (basetype);
11963 
11964       TYPE_MARKED_P (basetype) = 1;
11965 
11966       base_binfo = copy_binfo (base_binfo, basetype, ref,
11967 			       &igo_prev, via_virtual);
11968       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11969 	BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11970 
11971       BINFO_BASE_APPEND (binfo, base_binfo);
11972       BINFO_BASE_ACCESS_APPEND (binfo, access);
11973     }
11974 
11975   if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11976     /* If we didn't get max_vbases vbases, we must have shared at
11977        least one of them, and are therefore diamond shaped.  */
11978     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11979 
11980   /* Unmark all the types.  */
11981   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11982     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11983   TYPE_MARKED_P (ref) = 0;
11984 
11985   /* Now see if we have a repeated base type.  */
11986   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11987     {
11988       for (base_binfo = binfo; base_binfo;
11989 	   base_binfo = TREE_CHAIN (base_binfo))
11990 	{
11991 	  if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11992 	    {
11993 	      CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11994 	      break;
11995 	    }
11996 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11997 	}
11998       for (base_binfo = binfo; base_binfo;
11999 	   base_binfo = TREE_CHAIN (base_binfo))
12000 	if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12001 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12002 	else
12003 	  break;
12004     }
12005 
12006   return true;
12007 }
12008 
12009 
12010 /* Copies the enum-related properties from type SRC to type DST.
12011    Used with the underlying type of an enum and the enum itself.  */
12012 static void
12013 copy_type_enum (tree dst, tree src)
12014 {
12015   tree t;
12016   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12017     {
12018       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12019       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12020       TYPE_SIZE (t) = TYPE_SIZE (src);
12021       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12022       SET_TYPE_MODE (dst, TYPE_MODE (src));
12023       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12024       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12025       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12026       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12027     }
12028 }
12029 
12030 /* Begin compiling the definition of an enumeration type.
12031    NAME is its name,
12032 
12033    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12034 
12035    UNDERLYING_TYPE is the type that will be used as the storage for
12036    the enumeration type. This should be NULL_TREE if no storage type
12037    was specified.
12038 
12039    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12040 
12041    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12042 
12043    Returns the type object, as yet incomplete.
12044    Also records info about it so that build_enumerator
12045    may be used to declare the individual values as they are read.  */
12046 
12047 tree
12048 start_enum (tree name, tree enumtype, tree underlying_type,
12049 	    bool scoped_enum_p, bool *is_new)
12050 {
12051   tree prevtype = NULL_TREE;
12052   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12053 
12054   if (is_new)
12055     *is_new = false;
12056   /* [C++0x dcl.enum]p5:
12057 
12058     If not explicitly specified, the underlying type of a scoped
12059     enumeration type is int.  */
12060   if (!underlying_type && scoped_enum_p)
12061     underlying_type = integer_type_node;
12062 
12063   if (underlying_type)
12064     underlying_type = cv_unqualified (underlying_type);
12065 
12066   /* If this is the real definition for a previous forward reference,
12067      fill in the contents in the same object that used to be the
12068      forward reference.  */
12069   if (!enumtype)
12070     enumtype = lookup_and_check_tag (enum_type, name,
12071 				     /*tag_scope=*/ts_current,
12072 				     /*template_header_p=*/false);
12073 
12074   /* In case of a template_decl, the only check that should be deferred
12075      to instantiation time is the comparison of underlying types.  */
12076   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12077     {
12078       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12079 	{
12080 	  error_at (input_location, "scoped/unscoped mismatch "
12081 		    "in enum %q#T", enumtype);
12082 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12083 		    "previous definition here");
12084 	  enumtype = error_mark_node;
12085 	}
12086       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12087 	{
12088 	  error_at (input_location, "underlying type mismatch "
12089 		    "in enum %q#T", enumtype);
12090 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12091 		    "previous definition here");
12092 	  enumtype = error_mark_node;
12093 	}
12094       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12095 	       && !dependent_type_p (underlying_type)
12096 	       && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12097 	       && !same_type_p (underlying_type,
12098 				ENUM_UNDERLYING_TYPE (enumtype)))
12099 	{
12100 	  error_at (input_location, "different underlying type "
12101 		    "in enum %q#T", enumtype);
12102 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12103 		    "previous definition here");
12104 	  underlying_type = NULL_TREE;
12105 	}
12106     }
12107 
12108   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12109       || processing_template_decl)
12110     {
12111       /* In case of error, make a dummy enum to allow parsing to
12112 	 continue.  */
12113       if (enumtype == error_mark_node)
12114 	{
12115 	  name = make_anon_name ();
12116 	  enumtype = NULL_TREE;
12117 	}
12118 
12119       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12120          of an opaque enum, or an opaque enum of an already defined
12121 	 enumeration (C++0x only).
12122 	 In any other case, it'll be NULL_TREE. */
12123       if (!enumtype)
12124 	{
12125 	  if (is_new)
12126 	    *is_new = true;
12127 	}
12128       prevtype = enumtype;
12129 
12130       /* Do not push the decl more than once, unless we need to
12131 	 compare underlying types at instantiation time */
12132       if (!enumtype
12133 	  || TREE_CODE (enumtype) != ENUMERAL_TYPE
12134 	  || (underlying_type
12135 	      && dependent_type_p (underlying_type))
12136 	  || (ENUM_UNDERLYING_TYPE (enumtype)
12137 	      && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12138 	{
12139 	  enumtype = cxx_make_type (ENUMERAL_TYPE);
12140 	  enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12141 	}
12142       else
12143 	  enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12144 			       false);
12145 
12146       if (enumtype == error_mark_node)
12147 	return error_mark_node;
12148 
12149       /* The enum is considered opaque until the opening '{' of the
12150 	 enumerator list.  */
12151       SET_OPAQUE_ENUM_P (enumtype, true);
12152       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12153     }
12154 
12155   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12156 
12157   if (underlying_type)
12158     {
12159       if (CP_INTEGRAL_TYPE_P (underlying_type))
12160         {
12161 	  copy_type_enum (enumtype, underlying_type);
12162           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12163         }
12164       else if (dependent_type_p (underlying_type))
12165 	ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12166       else
12167         error ("underlying type %<%T%> of %<%T%> must be an integral type",
12168                underlying_type, enumtype);
12169     }
12170 
12171   /* If into a template class, the returned enum is always the first
12172      declaration (opaque or not) seen. This way all the references to
12173      this type will be to the same declaration. The following ones are used
12174      only to check for definition errors.  */
12175   if (prevtype && processing_template_decl)
12176     return prevtype;
12177   else
12178     return enumtype;
12179 }
12180 
12181 /* After processing and defining all the values of an enumeration type,
12182    install their decls in the enumeration type.
12183    ENUMTYPE is the type object.  */
12184 
12185 void
12186 finish_enum_value_list (tree enumtype)
12187 {
12188   tree values;
12189   tree underlying_type;
12190   tree decl;
12191   tree value;
12192   tree minnode, maxnode;
12193   tree t;
12194 
12195   bool fixed_underlying_type_p
12196     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12197 
12198   /* We built up the VALUES in reverse order.  */
12199   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12200 
12201   /* For an enum defined in a template, just set the type of the values;
12202      all further processing is postponed until the template is
12203      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12204      works.  */
12205   if (processing_template_decl)
12206     {
12207       for (values = TYPE_VALUES (enumtype);
12208 	   values;
12209 	   values = TREE_CHAIN (values))
12210 	TREE_TYPE (TREE_VALUE (values)) = enumtype;
12211       return;
12212     }
12213 
12214   /* Determine the minimum and maximum values of the enumerators.  */
12215   if (TYPE_VALUES (enumtype))
12216     {
12217       minnode = maxnode = NULL_TREE;
12218 
12219       for (values = TYPE_VALUES (enumtype);
12220 	   values;
12221 	   values = TREE_CHAIN (values))
12222 	{
12223 	  decl = TREE_VALUE (values);
12224 
12225 	  /* [dcl.enum]: Following the closing brace of an enum-specifier,
12226 	     each enumerator has the type of its enumeration.  Prior to the
12227 	     closing brace, the type of each enumerator is the type of its
12228 	     initializing value.  */
12229 	  TREE_TYPE (decl) = enumtype;
12230 
12231 	  /* Update the minimum and maximum values, if appropriate.  */
12232 	  value = DECL_INITIAL (decl);
12233 	  if (value == error_mark_node)
12234 	    value = integer_zero_node;
12235 	  /* Figure out what the minimum and maximum values of the
12236 	     enumerators are.  */
12237 	  if (!minnode)
12238 	    minnode = maxnode = value;
12239 	  else if (tree_int_cst_lt (maxnode, value))
12240 	    maxnode = value;
12241 	  else if (tree_int_cst_lt (value, minnode))
12242 	    minnode = value;
12243 	}
12244     }
12245   else
12246     /* [dcl.enum]
12247 
12248        If the enumerator-list is empty, the underlying type is as if
12249        the enumeration had a single enumerator with value 0.  */
12250     minnode = maxnode = integer_zero_node;
12251 
12252   if (!fixed_underlying_type_p)
12253     {
12254       /* Compute the number of bits require to represent all values of the
12255 	 enumeration.  We must do this before the type of MINNODE and
12256 	 MAXNODE are transformed, since tree_int_cst_min_precision relies
12257 	 on the TREE_TYPE of the value it is passed.  */
12258       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12259       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12260       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12261       int precision = MAX (lowprec, highprec);
12262       unsigned int itk;
12263       bool use_short_enum;
12264 
12265       /* Determine the underlying type of the enumeration.
12266 
12267          [dcl.enum]
12268 
12269          The underlying type of an enumeration is an integral type that
12270          can represent all the enumerator values defined in the
12271          enumeration.  It is implementation-defined which integral type is
12272          used as the underlying type for an enumeration except that the
12273          underlying type shall not be larger than int unless the value of
12274          an enumerator cannot fit in an int or unsigned int.
12275 
12276          We use "int" or an "unsigned int" as the underlying type, even if
12277          a smaller integral type would work, unless the user has
12278          explicitly requested that we use the smallest possible type.  The
12279          user can request that for all enumerations with a command line
12280          flag, or for just one enumeration with an attribute.  */
12281 
12282       use_short_enum = flag_short_enums
12283         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12284 
12285       for (itk = (use_short_enum ? itk_char : itk_int);
12286            itk != itk_none;
12287            itk++)
12288         {
12289           underlying_type = integer_types[itk];
12290           if (underlying_type != NULL_TREE
12291 	      && TYPE_PRECISION (underlying_type) >= precision
12292               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12293             break;
12294         }
12295       if (itk == itk_none)
12296         {
12297           /* DR 377
12298 
12299              IF no integral type can represent all the enumerator values, the
12300              enumeration is ill-formed.  */
12301           error ("no integral type can represent all of the enumerator values "
12302                  "for %qT", enumtype);
12303           precision = TYPE_PRECISION (long_long_integer_type_node);
12304           underlying_type = integer_types[itk_unsigned_long_long];
12305         }
12306 
12307       /* [dcl.enum]
12308 
12309          The value of sizeof() applied to an enumeration type, an object
12310          of an enumeration type, or an enumerator, is the value of sizeof()
12311          applied to the underlying type.  */
12312       copy_type_enum (enumtype, underlying_type);
12313 
12314       /* Compute the minimum and maximum values for the type.
12315 
12316 	 [dcl.enum]
12317 
12318 	 For an enumeration where emin is the smallest enumerator and emax
12319 	 is the largest, the values of the enumeration are the values of the
12320 	 underlying type in the range bmin to bmax, where bmin and bmax are,
12321 	 respectively, the smallest and largest values of the smallest bit-
12322 	 field that can store emin and emax.  */
12323 
12324       /* The middle-end currently assumes that types with TYPE_PRECISION
12325 	 narrower than their underlying type are suitably zero or sign
12326 	 extended to fill their mode.  Similarly, it assumes that the front
12327 	 end assures that a value of a particular type must be within
12328 	 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12329 
12330 	 We used to set these fields based on bmin and bmax, but that led
12331 	 to invalid assumptions like optimizing away bounds checking.  So
12332 	 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12333 	 TYPE_MAX_VALUE to the values for the mode above and only restrict
12334 	 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12335       ENUM_UNDERLYING_TYPE (enumtype)
12336 	= build_distinct_type_copy (underlying_type);
12337       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12338       set_min_and_max_values_for_integral_type
12339         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12340 
12341       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12342       if (flag_strict_enums)
12343 	set_min_and_max_values_for_integral_type (enumtype, precision,
12344 						  unsignedp);
12345     }
12346   else
12347     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12348 
12349   /* Convert each of the enumerators to the type of the underlying
12350      type of the enumeration.  */
12351   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12352     {
12353       location_t saved_location;
12354 
12355       decl = TREE_VALUE (values);
12356       saved_location = input_location;
12357       input_location = DECL_SOURCE_LOCATION (decl);
12358       if (fixed_underlying_type_p)
12359         /* If the enumeration type has a fixed underlying type, we
12360            already checked all of the enumerator values.  */
12361         value = DECL_INITIAL (decl);
12362       else
12363         value = perform_implicit_conversion (underlying_type,
12364                                              DECL_INITIAL (decl),
12365                                              tf_warning_or_error);
12366       input_location = saved_location;
12367 
12368       /* Do not clobber shared ints.  */
12369       value = copy_node (value);
12370 
12371       TREE_TYPE (value) = enumtype;
12372       DECL_INITIAL (decl) = value;
12373     }
12374 
12375   /* Fix up all variant types of this enum type.  */
12376   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12377     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12378 
12379   if (at_class_scope_p ()
12380       && COMPLETE_TYPE_P (current_class_type)
12381       && UNSCOPED_ENUM_P (enumtype))
12382     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12383 						       current_class_type);
12384 
12385   /* Finish debugging output for this type.  */
12386   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12387 }
12388 
12389 /* Finishes the enum type. This is called only the first time an
12390    enumeration is seen, be it opaque or odinary.
12391    ENUMTYPE is the type object.  */
12392 
12393 void
12394 finish_enum (tree enumtype)
12395 {
12396   if (processing_template_decl)
12397     {
12398       if (at_function_scope_p ())
12399 	add_stmt (build_min (TAG_DEFN, enumtype));
12400       return;
12401     }
12402 
12403   /* If this is a forward declaration, there should not be any variants,
12404      though we can get a variant in the middle of an enum-specifier with
12405      wacky code like 'enum E { e = sizeof(const E*) };'  */
12406   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12407 	      && (TYPE_VALUES (enumtype)
12408 		  || !TYPE_NEXT_VARIANT (enumtype)));
12409 }
12410 
12411 /* Build and install a CONST_DECL for an enumeration constant of the
12412    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12413    LOC is the location of NAME.
12414    Assignment of sequential values by default is handled here.  */
12415 
12416 void
12417 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12418 {
12419   tree decl;
12420   tree context;
12421   tree type;
12422 
12423   /* If the VALUE was erroneous, pretend it wasn't there; that will
12424      result in the enum being assigned the next value in sequence.  */
12425   if (value == error_mark_node)
12426     value = NULL_TREE;
12427 
12428   /* Remove no-op casts from the value.  */
12429   if (value)
12430     STRIP_TYPE_NOPS (value);
12431 
12432   if (! processing_template_decl)
12433     {
12434       /* Validate and default VALUE.  */
12435       if (value != NULL_TREE)
12436 	{
12437 	  value = cxx_constant_value (value);
12438 
12439 	  if (TREE_CODE (value) != INTEGER_CST
12440 	      || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12441 	    {
12442 	      error ("enumerator value for %qD is not an integer constant",
12443 		     name);
12444 	      value = NULL_TREE;
12445 	    }
12446 	}
12447 
12448       /* Default based on previous value.  */
12449       if (value == NULL_TREE)
12450 	{
12451 	  if (TYPE_VALUES (enumtype))
12452 	    {
12453 	      HOST_WIDE_INT hi;
12454 	      unsigned HOST_WIDE_INT lo;
12455 	      tree prev_value;
12456 	      bool overflowed;
12457 
12458 	      /* C++03 7.2/4: If no initializer is specified for the first
12459 		 enumerator, the type is an unspecified integral
12460 		 type. Otherwise the type is the same as the type of the
12461 		 initializing value of the preceding enumerator unless the
12462 		 incremented value is not representable in that type, in
12463 		 which case the type is an unspecified integral type
12464 		 sufficient to contain the incremented value.  */
12465 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12466 	      if (error_operand_p (prev_value))
12467 		value = error_mark_node;
12468 	      else
12469 		{
12470 		  overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12471 					   TREE_INT_CST_HIGH (prev_value),
12472 					   1, 0, &lo, &hi);
12473 		  if (!overflowed)
12474 		    {
12475 		      double_int di;
12476 		      tree type = TREE_TYPE (prev_value);
12477 		      bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12478 		      di.low = lo; di.high = hi;
12479 		      if (!double_int_fits_to_tree_p (type, di))
12480 			{
12481 			  unsigned int itk;
12482 			  for (itk = itk_int; itk != itk_none; itk++)
12483 			    {
12484 			      type = integer_types[itk];
12485 			      if (type != NULL_TREE
12486 				  && (pos || !TYPE_UNSIGNED (type))
12487 				  && double_int_fits_to_tree_p (type, di))
12488 				break;
12489 			    }
12490 			  if (type && cxx_dialect < cxx0x
12491 			      && itk > itk_unsigned_long)
12492 			    pedwarn (input_location, OPT_Wlong_long, pos ? "\
12493 incremented enumerator value is too large for %<unsigned long%>" :  "\
12494 incremented enumerator value is too large for %<long%>");
12495 			}
12496 		      if (type == NULL_TREE)
12497 			overflowed = true;
12498 		      else
12499 			value = double_int_to_tree (type, di);
12500 		    }
12501 
12502 		  if (overflowed)
12503 		    {
12504 		      error ("overflow in enumeration values at %qD", name);
12505 		      value = error_mark_node;
12506 		    }
12507 		}
12508 	    }
12509 	  else
12510 	    value = integer_zero_node;
12511 	}
12512 
12513       /* Remove no-op casts from the value.  */
12514       STRIP_TYPE_NOPS (value);
12515 
12516       /* If the underlying type of the enum is fixed, check whether
12517          the enumerator values fits in the underlying type.  If it
12518          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12519       if (ENUM_UNDERLYING_TYPE (enumtype)
12520           && value
12521           && TREE_CODE (value) == INTEGER_CST
12522           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12523         {
12524           error ("enumerator value %E is too large for underlying type %<%T%>",
12525                  value, ENUM_UNDERLYING_TYPE (enumtype));
12526 
12527           /* Silently convert the value so that we can continue.  */
12528           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12529                                                value, tf_none);
12530         }
12531     }
12532 
12533   /* C++ associates enums with global, function, or class declarations.  */
12534   context = current_scope ();
12535 
12536   /* Build the actual enumeration constant.  Note that the enumeration
12537      constants have the underlying type of the enum (if it is fixed)
12538      or the type of their initializer (if the underlying type of the
12539      enum is not fixed):
12540 
12541       [ C++0x dcl.enum ]
12542 
12543         If the underlying type is fixed, the type of each enumerator
12544         prior to the closing brace is the underlying type; if the
12545         initializing value of an enumerator cannot be represented by
12546         the underlying type, the program is ill-formed. If the
12547         underlying type is not fixed, the type of each enumerator is
12548         the type of its initializing value.
12549 
12550     If the underlying type is not fixed, it will be computed by
12551     finish_enum and we will reset the type of this enumerator.  Of
12552     course, if we're processing a template, there may be no value.  */
12553   type = value ? TREE_TYPE (value) : NULL_TREE;
12554 
12555   if (context && context == current_class_type)
12556     /* This enum declaration is local to the class.  We need the full
12557        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12558     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12559   else
12560     /* It's a global enum, or it's local to a function.  (Note local to
12561        a function could mean local to a class method.  */
12562     decl = build_decl (loc, CONST_DECL, name, type);
12563 
12564   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12565   TREE_CONSTANT (decl) = 1;
12566   TREE_READONLY (decl) = 1;
12567   DECL_INITIAL (decl) = value;
12568 
12569   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12570     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12571        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12572        things like `S::i' later.)  */
12573     finish_member_declaration (decl);
12574   else
12575     pushdecl (decl);
12576 
12577   /* Add this enumeration constant to the list for this type.  */
12578   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12579 }
12580 
12581 /* Look for an enumerator with the given NAME within the enumeration
12582    type ENUMTYPE.  This routine is used primarily for qualified name
12583    lookup into an enumerator in C++0x, e.g.,
12584 
12585      enum class Color { Red, Green, Blue };
12586 
12587      Color color = Color::Red;
12588 
12589    Returns the value corresponding to the enumerator, or
12590    NULL_TREE if no such enumerator was found.  */
12591 tree
12592 lookup_enumerator (tree enumtype, tree name)
12593 {
12594   tree e;
12595   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12596 
12597   e = purpose_member (name, TYPE_VALUES (enumtype));
12598   return e? TREE_VALUE (e) : NULL_TREE;
12599 }
12600 
12601 
12602 /* We're defining DECL.  Make sure that its type is OK.  */
12603 
12604 static void
12605 check_function_type (tree decl, tree current_function_parms)
12606 {
12607   tree fntype = TREE_TYPE (decl);
12608   tree return_type = complete_type (TREE_TYPE (fntype));
12609 
12610   /* In a function definition, arg types must be complete.  */
12611   require_complete_types_for_parms (current_function_parms);
12612 
12613   if (dependent_type_p (return_type))
12614     return;
12615   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12616       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12617     {
12618       tree args = TYPE_ARG_TYPES (fntype);
12619 
12620       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12621 	error ("return type %q#T is incomplete", return_type);
12622       else
12623 	error ("return type has Java class type %q#T", return_type);
12624 
12625       /* Make it return void instead.  */
12626       if (TREE_CODE (fntype) == METHOD_TYPE)
12627 	fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12628 					     void_type_node,
12629 					     TREE_CHAIN (args));
12630       else
12631 	fntype = build_function_type (void_type_node, args);
12632       fntype
12633 	= build_exception_variant (fntype,
12634 				   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12635       fntype = (cp_build_type_attribute_variant
12636 		(fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12637       TREE_TYPE (decl) = fntype;
12638     }
12639   else
12640     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12641 }
12642 
12643 /* Create the FUNCTION_DECL for a function definition.
12644    DECLSPECS and DECLARATOR are the parts of the declaration;
12645    they describe the function's name and the type it returns,
12646    but twisted together in a fashion that parallels the syntax of C.
12647 
12648    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12649    DECLARATOR is really the DECL for the function we are about to
12650    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12651    indicating that the function is an inline defined in-class.
12652 
12653    This function creates a binding context for the function body
12654    as well as setting up the FUNCTION_DECL in current_function_decl.
12655 
12656    For C++, we must first check whether that datum makes any sense.
12657    For example, "class A local_a(1,2);" means that variable local_a
12658    is an aggregate of type A, which should have a constructor
12659    applied to it with the argument list [1, 2].
12660 
12661    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12662    or may be a BLOCK if the function has been defined previously
12663    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12664    error_mark_node if the function has never been defined, or
12665    a BLOCK if the function has been defined somewhere.  */
12666 
12667 void
12668 start_preparsed_function (tree decl1, tree attrs, int flags)
12669 {
12670   tree ctype = NULL_TREE;
12671   tree fntype;
12672   tree restype;
12673   int doing_friend = 0;
12674   cp_binding_level *bl;
12675   tree current_function_parms;
12676   struct c_fileinfo *finfo
12677     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12678   bool honor_interface;
12679 
12680   /* Sanity check.  */
12681   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12682   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12683 
12684   fntype = TREE_TYPE (decl1);
12685   if (TREE_CODE (fntype) == METHOD_TYPE)
12686     ctype = TYPE_METHOD_BASETYPE (fntype);
12687 
12688   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12689      the (lexical) scope of the class in which it is defined.  */
12690   if (!ctype && DECL_FRIEND_P (decl1))
12691     {
12692       ctype = DECL_FRIEND_CONTEXT (decl1);
12693 
12694       /* CTYPE could be null here if we're dealing with a template;
12695 	 for example, `inline friend float foo()' inside a template
12696 	 will have no CTYPE set.  */
12697       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12698 	ctype = NULL_TREE;
12699       else
12700 	doing_friend = 1;
12701     }
12702 
12703   if (DECL_DECLARED_INLINE_P (decl1)
12704       && lookup_attribute ("noinline", attrs))
12705     warning (0, "inline function %q+D given attribute noinline", decl1);
12706 
12707   /* Handle gnu_inline attribute.  */
12708   if (GNU_INLINE_P (decl1))
12709     {
12710       DECL_EXTERNAL (decl1) = 1;
12711       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12712       DECL_INTERFACE_KNOWN (decl1) = 1;
12713       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12714     }
12715 
12716   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12717     /* This is a constructor, we must ensure that any default args
12718        introduced by this definition are propagated to the clones
12719        now. The clones are used directly in overload resolution.  */
12720     adjust_clone_args (decl1);
12721 
12722   /* Sometimes we don't notice that a function is a static member, and
12723      build a METHOD_TYPE for it.  Fix that up now.  */
12724   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12725 		&& TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12726 
12727   /* Set up current_class_type, and enter the scope of the class, if
12728      appropriate.  */
12729   if (ctype)
12730     push_nested_class (ctype);
12731   else if (DECL_STATIC_FUNCTION_P (decl1))
12732     push_nested_class (DECL_CONTEXT (decl1));
12733 
12734   /* Now that we have entered the scope of the class, we must restore
12735      the bindings for any template parameters surrounding DECL1, if it
12736      is an inline member template.  (Order is important; consider the
12737      case where a template parameter has the same name as a field of
12738      the class.)  It is not until after this point that
12739      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12740   if (flags & SF_INCLASS_INLINE)
12741     maybe_begin_member_template_processing (decl1);
12742 
12743   /* Effective C++ rule 15.  */
12744   if (warn_ecpp
12745       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12746       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12747     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12748 
12749   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12750      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12751   if (!DECL_INITIAL (decl1))
12752     DECL_INITIAL (decl1) = error_mark_node;
12753 
12754   /* This function exists in static storage.
12755      (This does not mean `static' in the C sense!)  */
12756   TREE_STATIC (decl1) = 1;
12757 
12758   /* We must call push_template_decl after current_class_type is set
12759      up.  (If we are processing inline definitions after exiting a
12760      class scope, current_class_type will be NULL_TREE until set above
12761      by push_nested_class.)  */
12762   if (processing_template_decl)
12763     {
12764       /* FIXME: Handle error_mark_node more gracefully.  */
12765       tree newdecl1 = push_template_decl (decl1);
12766       if (newdecl1 != error_mark_node)
12767 	decl1 = newdecl1;
12768     }
12769 
12770   /* We are now in the scope of the function being defined.  */
12771   current_function_decl = decl1;
12772 
12773   /* Save the parm names or decls from this function's declarator
12774      where store_parm_decls will find them.  */
12775   current_function_parms = DECL_ARGUMENTS (decl1);
12776 
12777   /* Make sure the parameter and return types are reasonable.  When
12778      you declare a function, these types can be incomplete, but they
12779      must be complete when you define the function.  */
12780   check_function_type (decl1, current_function_parms);
12781 
12782   /* Build the return declaration for the function.  */
12783   restype = TREE_TYPE (fntype);
12784   if (DECL_RESULT (decl1) == NULL_TREE)
12785     {
12786       tree resdecl;
12787 
12788       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12789       DECL_ARTIFICIAL (resdecl) = 1;
12790       DECL_IGNORED_P (resdecl) = 1;
12791       DECL_RESULT (decl1) = resdecl;
12792 
12793       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12794     }
12795 
12796   /* Let the user know we're compiling this function.  */
12797   announce_function (decl1);
12798 
12799   /* Record the decl so that the function name is defined.
12800      If we already have a decl for this name, and it is a FUNCTION_DECL,
12801      use the old decl.  */
12802   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12803     {
12804       /* A specialization is not used to guide overload resolution.  */
12805       if (!DECL_FUNCTION_MEMBER_P (decl1)
12806 	  && !(DECL_USE_TEMPLATE (decl1) &&
12807 	       PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12808 	{
12809 	  tree olddecl = pushdecl (decl1);
12810 
12811 	  if (olddecl == error_mark_node)
12812 	    /* If something went wrong when registering the declaration,
12813 	       use DECL1; we have to have a FUNCTION_DECL to use when
12814 	       parsing the body of the function.  */
12815 	    ;
12816 	  else
12817 	    {
12818 	      /* Otherwise, OLDDECL is either a previous declaration
12819 		 of the same function or DECL1 itself.  */
12820 
12821 	      if (warn_missing_declarations
12822 		  && olddecl == decl1
12823 		  && !DECL_MAIN_P (decl1)
12824 		  && TREE_PUBLIC (decl1)
12825 		  && !DECL_DECLARED_INLINE_P (decl1))
12826 		{
12827 		  tree context;
12828 
12829 		  /* Check whether DECL1 is in an anonymous
12830 		     namespace.  */
12831 		  for (context = DECL_CONTEXT (decl1);
12832 		       context;
12833 		       context = DECL_CONTEXT (context))
12834 		    {
12835 		      if (TREE_CODE (context) == NAMESPACE_DECL
12836 			  && DECL_NAME (context) == NULL_TREE)
12837 			break;
12838 		    }
12839 
12840 		  if (context == NULL)
12841 		    warning (OPT_Wmissing_declarations,
12842 			     "no previous declaration for %q+D", decl1);
12843 		}
12844 
12845 	      decl1 = olddecl;
12846 	    }
12847 	}
12848       else
12849 	{
12850 	  /* We need to set the DECL_CONTEXT.  */
12851 	  if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12852 	    DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12853 	}
12854       fntype = TREE_TYPE (decl1);
12855 
12856       /* If #pragma weak applies, mark the decl appropriately now.
12857 	 The pragma only applies to global functions.  Because
12858 	 determining whether or not the #pragma applies involves
12859 	 computing the mangled name for the declaration, we cannot
12860 	 apply the pragma until after we have merged this declaration
12861 	 with any previous declarations; if the original declaration
12862 	 has a linkage specification, that specification applies to
12863 	 the definition as well, and may affect the mangled name.  */
12864       if (DECL_FILE_SCOPE_P (decl1))
12865 	maybe_apply_pragma_weak (decl1);
12866     }
12867 
12868   /* Reset this in case the call to pushdecl changed it.  */
12869   current_function_decl = decl1;
12870 
12871   gcc_assert (DECL_INITIAL (decl1));
12872 
12873   /* This function may already have been parsed, in which case just
12874      return; our caller will skip over the body without parsing.  */
12875   if (DECL_INITIAL (decl1) != error_mark_node)
12876     return;
12877 
12878   /* Initialize RTL machinery.  We cannot do this until
12879      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12880      even when processing a template; this is how we get
12881      CFUN set up, and our per-function variables initialized.
12882      FIXME factor out the non-RTL stuff.  */
12883   bl = current_binding_level;
12884   allocate_struct_function (decl1, processing_template_decl);
12885 
12886   /* Initialize the language data structures.  Whenever we start
12887      a new function, we destroy temporaries in the usual way.  */
12888   cfun->language = ggc_alloc_cleared_language_function ();
12889   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12890   current_binding_level = bl;
12891 
12892   /* Start the statement-tree, start the tree now.  */
12893   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12894 
12895   /* If we are (erroneously) defining a function that we have already
12896      defined before, wipe out what we knew before.  */
12897   if (!DECL_PENDING_INLINE_P (decl1))
12898     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12899 
12900   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12901     {
12902       /* We know that this was set up by `grokclassfn'.  We do not
12903 	 wait until `store_parm_decls', since evil parse errors may
12904 	 never get us to that point.  Here we keep the consistency
12905 	 between `current_class_type' and `current_class_ptr'.  */
12906       tree t = DECL_ARGUMENTS (decl1);
12907 
12908       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12909       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12910 
12911       cp_function_chain->x_current_class_ref
12912 	= cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12913       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12914       cp_function_chain->x_current_class_ptr = t;
12915 
12916       /* Constructors and destructors need to know whether they're "in
12917 	 charge" of initializing virtual base classes.  */
12918       t = DECL_CHAIN (t);
12919       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12920 	{
12921 	  current_in_charge_parm = t;
12922 	  t = DECL_CHAIN (t);
12923 	}
12924       if (DECL_HAS_VTT_PARM_P (decl1))
12925 	{
12926 	  gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12927 	  current_vtt_parm = t;
12928 	}
12929     }
12930 
12931   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12932 		     /* Implicitly-defined methods (like the
12933 			destructor for a class in which no destructor
12934 			is explicitly declared) must not be defined
12935 			until their definition is needed.  So, we
12936 			ignore interface specifications for
12937 			compiler-generated functions.  */
12938 		     && !DECL_ARTIFICIAL (decl1));
12939 
12940   if (processing_template_decl)
12941     /* Don't mess with interface flags.  */;
12942   else if (DECL_INTERFACE_KNOWN (decl1))
12943     {
12944       tree ctx = decl_function_context (decl1);
12945 
12946       if (DECL_NOT_REALLY_EXTERN (decl1))
12947 	DECL_EXTERNAL (decl1) = 0;
12948 
12949       if (ctx != NULL_TREE && vague_linkage_p (ctx))
12950 	/* This is a function in a local class in an extern inline
12951 	   or template function.  */
12952 	comdat_linkage (decl1);
12953     }
12954   /* If this function belongs to an interface, it is public.
12955      If it belongs to someone else's interface, it is also external.
12956      This only affects inlines and template instantiations.  */
12957   else if (!finfo->interface_unknown && honor_interface)
12958     {
12959       if (DECL_DECLARED_INLINE_P (decl1)
12960 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
12961 	{
12962 	  DECL_EXTERNAL (decl1)
12963 	    = (finfo->interface_only
12964 	       || (DECL_DECLARED_INLINE_P (decl1)
12965 		   && ! flag_implement_inlines
12966 		   && !DECL_VINDEX (decl1)));
12967 
12968 	  /* For WIN32 we also want to put these in linkonce sections.  */
12969 	  maybe_make_one_only (decl1);
12970 	}
12971       else
12972 	DECL_EXTERNAL (decl1) = 0;
12973       DECL_INTERFACE_KNOWN (decl1) = 1;
12974       /* If this function is in an interface implemented in this file,
12975 	 make sure that the back end knows to emit this function
12976 	 here.  */
12977       if (!DECL_EXTERNAL (decl1))
12978 	mark_needed (decl1);
12979     }
12980   else if (finfo->interface_unknown && finfo->interface_only
12981 	   && honor_interface)
12982     {
12983       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12984 	 interface, we will have both finfo->interface_unknown and
12985 	 finfo->interface_only set.  In that case, we don't want to
12986 	 use the normal heuristics because someone will supply a
12987 	 #pragma implementation elsewhere, and deducing it here would
12988 	 produce a conflict.  */
12989       comdat_linkage (decl1);
12990       DECL_EXTERNAL (decl1) = 0;
12991       DECL_INTERFACE_KNOWN (decl1) = 1;
12992       DECL_DEFER_OUTPUT (decl1) = 1;
12993     }
12994   else
12995     {
12996       /* This is a definition, not a reference.
12997 	 So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12998       if (!GNU_INLINE_P (decl1))
12999 	DECL_EXTERNAL (decl1) = 0;
13000 
13001       if ((DECL_DECLARED_INLINE_P (decl1)
13002 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
13003 	  && ! DECL_INTERFACE_KNOWN (decl1))
13004 	DECL_DEFER_OUTPUT (decl1) = 1;
13005       else
13006 	DECL_INTERFACE_KNOWN (decl1) = 1;
13007     }
13008 
13009   /* Determine the ELF visibility attribute for the function.  We must not
13010      do this before calling "pushdecl", as we must allow "duplicate_decls"
13011      to merge any attributes appropriately.  We also need to wait until
13012      linkage is set.  */
13013   if (!DECL_CLONED_FUNCTION_P (decl1))
13014     determine_visibility (decl1);
13015 
13016   begin_scope (sk_function_parms, decl1);
13017 
13018   ++function_depth;
13019 
13020   if (DECL_DESTRUCTOR_P (decl1)
13021       || (DECL_CONSTRUCTOR_P (decl1)
13022 	  && targetm.cxx.cdtor_returns_this ()))
13023     {
13024       cdtor_label = build_decl (input_location,
13025 				LABEL_DECL, NULL_TREE, NULL_TREE);
13026       DECL_CONTEXT (cdtor_label) = current_function_decl;
13027     }
13028 
13029   start_fname_decls ();
13030 
13031   store_parm_decls (current_function_parms);
13032 }
13033 
13034 
13035 /* Like start_preparsed_function, except that instead of a
13036    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13037 
13038    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13039    (it defines a datum instead), we return 0, which tells
13040    yyparse to report a parse error.  */
13041 
13042 int
13043 start_function (cp_decl_specifier_seq *declspecs,
13044 		const cp_declarator *declarator,
13045 		tree attrs)
13046 {
13047   tree decl1;
13048 
13049   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13050   if (decl1 == error_mark_node)
13051     return 0;
13052   /* If the declarator is not suitable for a function definition,
13053      cause a syntax error.  */
13054   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13055     {
13056       error ("invalid function declaration");
13057       return 0;
13058     }
13059 
13060   if (DECL_MAIN_P (decl1))
13061     /* main must return int.  grokfndecl should have corrected it
13062        (and issued a diagnostic) if the user got it wrong.  */
13063     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13064 			     integer_type_node));
13065 
13066   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13067 
13068   return 1;
13069 }
13070 
13071 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13072    FN.  */
13073 
13074 static bool
13075 use_eh_spec_block (tree fn)
13076 {
13077   return (flag_exceptions && flag_enforce_eh_specs
13078 	  && !processing_template_decl
13079 	  && !type_throw_all_p (TREE_TYPE (fn))
13080 	  /* We insert the EH_SPEC_BLOCK only in the original
13081 	     function; then, it is copied automatically to the
13082 	     clones.  */
13083 	  && !DECL_CLONED_FUNCTION_P (fn)
13084 	  /* Implicitly-generated constructors and destructors have
13085 	     exception specifications.  However, those specifications
13086 	     are the union of the possible exceptions specified by the
13087 	     constructors/destructors for bases and members, so no
13088 	     unallowed exception will ever reach this function.  By
13089 	     not creating the EH_SPEC_BLOCK we save a little memory,
13090 	     and we avoid spurious warnings about unreachable
13091 	     code.  */
13092 	  && !DECL_DEFAULTED_FN (fn));
13093 }
13094 
13095 /* Store the parameter declarations into the current function declaration.
13096    This is called after parsing the parameter declarations, before
13097    digesting the body of the function.
13098 
13099    Also install to binding contour return value identifier, if any.  */
13100 
13101 static void
13102 store_parm_decls (tree current_function_parms)
13103 {
13104   tree fndecl = current_function_decl;
13105   tree parm;
13106 
13107   /* This is a chain of any other decls that came in among the parm
13108      declarations.  If a parm is declared with  enum {foo, bar} x;
13109      then CONST_DECLs for foo and bar are put here.  */
13110   tree nonparms = NULL_TREE;
13111 
13112   if (current_function_parms)
13113     {
13114       /* This case is when the function was defined with an ANSI prototype.
13115 	 The parms already have decls, so we need not do anything here
13116 	 except record them as in effect
13117 	 and complain if any redundant old-style parm decls were written.  */
13118 
13119       tree specparms = current_function_parms;
13120       tree next;
13121 
13122       /* Must clear this because it might contain TYPE_DECLs declared
13123 	     at class level.  */
13124       current_binding_level->names = NULL;
13125 
13126       /* If we're doing semantic analysis, then we'll call pushdecl
13127 	     for each of these.  We must do them in reverse order so that
13128 	     they end in the correct forward order.  */
13129       specparms = nreverse (specparms);
13130 
13131       for (parm = specparms; parm; parm = next)
13132 	{
13133 	  next = DECL_CHAIN (parm);
13134 	  if (TREE_CODE (parm) == PARM_DECL)
13135 	    {
13136 	      if (DECL_NAME (parm) == NULL_TREE
13137 		  || TREE_CODE (parm) != VOID_TYPE)
13138 		pushdecl (parm);
13139 	      else
13140 		error ("parameter %qD declared void", parm);
13141 	    }
13142 	  else
13143 	    {
13144 	      /* If we find an enum constant or a type tag,
13145 		 put it aside for the moment.  */
13146 	      TREE_CHAIN (parm) = NULL_TREE;
13147 	      nonparms = chainon (nonparms, parm);
13148 	    }
13149 	}
13150 
13151       /* Get the decls in their original chain order and record in the
13152 	 function.  This is all and only the PARM_DECLs that were
13153 	 pushed into scope by the loop above.  */
13154       DECL_ARGUMENTS (fndecl) = getdecls ();
13155     }
13156   else
13157     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13158 
13159   /* Now store the final chain of decls for the arguments
13160      as the decl-chain of the current lexical scope.
13161      Put the enumerators in as well, at the front so that
13162      DECL_ARGUMENTS is not modified.  */
13163   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13164 
13165   if (use_eh_spec_block (current_function_decl))
13166     current_eh_spec_block = begin_eh_spec_block ();
13167 }
13168 
13169 
13170 /* We have finished doing semantic analysis on DECL, but have not yet
13171    generated RTL for its body.  Save away our current state, so that
13172    when we want to generate RTL later we know what to do.  */
13173 
13174 static void
13175 save_function_data (tree decl)
13176 {
13177   struct language_function *f;
13178 
13179   /* Save the language-specific per-function data so that we can
13180      get it back when we really expand this function.  */
13181   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13182 
13183   /* Make a copy.  */
13184   f = ggc_alloc_language_function ();
13185   memcpy (f, cp_function_chain, sizeof (struct language_function));
13186   DECL_SAVED_FUNCTION_DATA (decl) = f;
13187 
13188   /* Clear out the bits we don't need.  */
13189   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13190   f->bindings = NULL;
13191   f->x_local_names = NULL;
13192   f->base.local_typedefs = NULL;
13193 }
13194 
13195 
13196 /* Set the return value of the constructor (if present).  */
13197 
13198 static void
13199 finish_constructor_body (void)
13200 {
13201   tree val;
13202   tree exprstmt;
13203 
13204   if (targetm.cxx.cdtor_returns_this ()
13205       && (! TYPE_FOR_JAVA (current_class_type)))
13206     {
13207       /* Any return from a constructor will end up here.  */
13208       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13209 
13210       val = DECL_ARGUMENTS (current_function_decl);
13211       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13212 		    DECL_RESULT (current_function_decl), val);
13213       /* Return the address of the object.  */
13214       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13215       add_stmt (exprstmt);
13216     }
13217 }
13218 
13219 /* Do all the processing for the beginning of a destructor; set up the
13220    vtable pointers and cleanups for bases and members.  */
13221 
13222 static void
13223 begin_destructor_body (void)
13224 {
13225   tree compound_stmt;
13226 
13227   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13228      issued an error message.  We still want to try to process the
13229      body of the function, but initialize_vtbl_ptrs will crash if
13230      TYPE_BINFO is NULL.  */
13231   if (COMPLETE_TYPE_P (current_class_type))
13232     {
13233       compound_stmt = begin_compound_stmt (0);
13234       /* Make all virtual function table pointers in non-virtual base
13235 	 classes point to CURRENT_CLASS_TYPE's virtual function
13236 	 tables.  */
13237       initialize_vtbl_ptrs (current_class_ptr);
13238       finish_compound_stmt (compound_stmt);
13239 
13240       /* And insert cleanups for our bases and members so that they
13241 	 will be properly destroyed if we throw.  */
13242       push_base_cleanups ();
13243     }
13244 }
13245 
13246 /* At the end of every destructor we generate code to delete the object if
13247    necessary.  Do that now.  */
13248 
13249 static void
13250 finish_destructor_body (void)
13251 {
13252   tree exprstmt;
13253 
13254   /* Any return from a destructor will end up here; that way all base
13255      and member cleanups will be run when the function returns.  */
13256   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13257 
13258   /* In a virtual destructor, we must call delete.  */
13259   if (DECL_VIRTUAL_P (current_function_decl))
13260     {
13261       tree if_stmt;
13262       tree virtual_size = cxx_sizeof (current_class_type);
13263 
13264       /* [class.dtor]
13265 
13266       At the point of definition of a virtual destructor (including
13267       an implicit definition), non-placement operator delete shall
13268       be looked up in the scope of the destructor's class and if
13269       found shall be accessible and unambiguous.  */
13270       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13271 				      virtual_size,
13272 				      /*global_p=*/false,
13273 				      /*placement=*/NULL_TREE,
13274 				      /*alloc_fn=*/NULL_TREE);
13275 
13276       if_stmt = begin_if_stmt ();
13277       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13278 				   current_in_charge_parm,
13279 				   integer_one_node),
13280 			   if_stmt);
13281       finish_expr_stmt (exprstmt);
13282       finish_then_clause (if_stmt);
13283       finish_if_stmt (if_stmt);
13284     }
13285 
13286   if (targetm.cxx.cdtor_returns_this ())
13287     {
13288       tree val;
13289 
13290       val = DECL_ARGUMENTS (current_function_decl);
13291       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13292 		    DECL_RESULT (current_function_decl), val);
13293       /* Return the address of the object.  */
13294       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13295       add_stmt (exprstmt);
13296     }
13297 }
13298 
13299 /* Do the necessary processing for the beginning of a function body, which
13300    in this case includes member-initializers, but not the catch clauses of
13301    a function-try-block.  Currently, this means opening a binding level
13302    for the member-initializers (in a ctor), member cleanups (in a dtor),
13303    and capture proxies (in a lambda operator()).  */
13304 
13305 tree
13306 begin_function_body (void)
13307 {
13308   tree stmt;
13309 
13310   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13311     return NULL_TREE;
13312 
13313   if (processing_template_decl)
13314     /* Do nothing now.  */;
13315   else
13316     /* Always keep the BLOCK node associated with the outermost pair of
13317        curly braces of a function.  These are needed for correct
13318        operation of dwarfout.c.  */
13319     keep_next_level (true);
13320 
13321   stmt = begin_compound_stmt (BCS_FN_BODY);
13322 
13323   if (processing_template_decl)
13324     /* Do nothing now.  */;
13325   else if (DECL_DESTRUCTOR_P (current_function_decl))
13326     begin_destructor_body ();
13327 
13328   return stmt;
13329 }
13330 
13331 /* Do the processing for the end of a function body.  Currently, this means
13332    closing out the cleanups for fully-constructed bases and members, and in
13333    the case of the destructor, deleting the object if desired.  Again, this
13334    is only meaningful for [cd]tors, since they are the only functions where
13335    there is a significant distinction between the main body and any
13336    function catch clauses.  Handling, say, main() return semantics here
13337    would be wrong, as flowing off the end of a function catch clause for
13338    main() would also need to return 0.  */
13339 
13340 void
13341 finish_function_body (tree compstmt)
13342 {
13343   if (compstmt == NULL_TREE)
13344     return;
13345 
13346   /* Close the block.  */
13347   finish_compound_stmt (compstmt);
13348 
13349   if (processing_template_decl)
13350     /* Do nothing now.  */;
13351   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13352     finish_constructor_body ();
13353   else if (DECL_DESTRUCTOR_P (current_function_decl))
13354     finish_destructor_body ();
13355 }
13356 
13357 /* Given a function, returns the BLOCK corresponding to the outermost level
13358    of curly braces, skipping the artificial block created for constructor
13359    initializers.  */
13360 
13361 tree
13362 outer_curly_brace_block (tree fndecl)
13363 {
13364   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13365   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13366     /* Skip the artificial function body block.  */
13367     block = BLOCK_SUBBLOCKS (block);
13368   return block;
13369 }
13370 
13371 /* If FNDECL is a class's key method, add the class to the list of
13372    keyed classes that should be emitted.  */
13373 
13374 static void
13375 record_key_method_defined (tree fndecl)
13376 {
13377   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13378       && DECL_VIRTUAL_P (fndecl)
13379       && !processing_template_decl)
13380     {
13381       tree fnclass = DECL_CONTEXT (fndecl);
13382       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13383 	keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13384     }
13385 }
13386 
13387 /* Subroutine of finish_function.
13388    Save the body of constexpr functions for possible
13389    future compile time evaluation.  */
13390 
13391 static void
13392 maybe_save_function_definition (tree fun)
13393 {
13394   if (!processing_template_decl
13395       && DECL_DECLARED_CONSTEXPR_P (fun)
13396       && !DECL_CLONED_FUNCTION_P (fun))
13397     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13398 }
13399 
13400 /* Finish up a function declaration and compile that function
13401    all the way to assembler language output.  The free the storage
13402    for the function definition.
13403 
13404    FLAGS is a bitwise or of the following values:
13405      2 - INCLASS_INLINE
13406        We just finished processing the body of an in-class inline
13407        function definition.  (This processing will have taken place
13408        after the class definition is complete.)  */
13409 
13410 tree
13411 finish_function (int flags)
13412 {
13413   tree fndecl = current_function_decl;
13414   tree fntype, ctype = NULL_TREE;
13415   int inclass_inline = (flags & 2) != 0;
13416 
13417   /* When we get some parse errors, we can end up without a
13418      current_function_decl, so cope.  */
13419   if (fndecl == NULL_TREE)
13420     return error_mark_node;
13421 
13422   if (c_dialect_objc ())
13423     objc_finish_function ();
13424 
13425   gcc_assert (!defer_mark_used_calls);
13426   defer_mark_used_calls = true;
13427 
13428   record_key_method_defined (fndecl);
13429 
13430   fntype = TREE_TYPE (fndecl);
13431 
13432   /*  TREE_READONLY (fndecl) = 1;
13433       This caused &foo to be of type ptr-to-const-function
13434       which then got a warning when stored in a ptr-to-function variable.  */
13435 
13436   gcc_assert (building_stmt_list_p ());
13437   /* The current function is being defined, so its DECL_INITIAL should
13438      be set, and unless there's a multiple definition, it should be
13439      error_mark_node.  */
13440   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13441 
13442   /* For a cloned function, we've already got all the code we need;
13443      there's no need to add any extra bits.  */
13444   if (!DECL_CLONED_FUNCTION_P (fndecl))
13445     {
13446       if (DECL_MAIN_P (current_function_decl))
13447 	{
13448 	  /* Make it so that `main' always returns 0 by default (or
13449 	     1 for VMS).  */
13450 #if VMS_TARGET
13451 	  finish_return_stmt (integer_one_node);
13452 #else
13453 	  finish_return_stmt (integer_zero_node);
13454 #endif
13455 	}
13456 
13457       if (use_eh_spec_block (current_function_decl))
13458 	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13459 			      (TREE_TYPE (current_function_decl)),
13460 			      current_eh_spec_block);
13461     }
13462 
13463   /* If we're saving up tree structure, tie off the function now.  */
13464   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13465 
13466   finish_fname_decls ();
13467 
13468   /* If this function can't throw any exceptions, remember that.  */
13469   if (!processing_template_decl
13470       && !cp_function_chain->can_throw
13471       && !flag_non_call_exceptions
13472       && !decl_replaceable_p (fndecl))
13473     TREE_NOTHROW (fndecl) = 1;
13474 
13475   /* This must come after expand_function_end because cleanups might
13476      have declarations (from inline functions) that need to go into
13477      this function's blocks.  */
13478 
13479   /* If the current binding level isn't the outermost binding level
13480      for this function, either there is a bug, or we have experienced
13481      syntax errors and the statement tree is malformed.  */
13482   if (current_binding_level->kind != sk_function_parms)
13483     {
13484       /* Make sure we have already experienced errors.  */
13485       gcc_assert (errorcount);
13486 
13487       /* Throw away the broken statement tree and extra binding
13488 	 levels.  */
13489       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13490 
13491       while (current_binding_level->kind != sk_function_parms)
13492 	{
13493 	  if (current_binding_level->kind == sk_class)
13494 	    pop_nested_class ();
13495 	  else
13496 	    poplevel (0, 0, 0);
13497 	}
13498     }
13499   poplevel (1, 0, 1);
13500 
13501   /* Statements should always be full-expressions at the outermost set
13502      of curly braces for a function.  */
13503   gcc_assert (stmts_are_full_exprs_p ());
13504 
13505   /* Save constexpr function body before it gets munged by
13506      the NRV transformation.   */
13507   maybe_save_function_definition (fndecl);
13508 
13509   /* Set up the named return value optimization, if we can.  Candidate
13510      variables are selected in check_return_expr.  */
13511   if (current_function_return_value)
13512     {
13513       tree r = current_function_return_value;
13514       tree outer;
13515 
13516       if (r != error_mark_node
13517 	  /* This is only worth doing for fns that return in memory--and
13518 	     simpler, since we don't have to worry about promoted modes.  */
13519 	  && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13520 	  /* Only allow this for variables declared in the outer scope of
13521 	     the function so we know that their lifetime always ends with a
13522 	     return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13523 	     we were to do this optimization in tree-ssa.  */
13524 	  && (outer = outer_curly_brace_block (fndecl))
13525 	  && chain_member (r, BLOCK_VARS (outer)))
13526 	finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13527 
13528       current_function_return_value = NULL_TREE;
13529     }
13530 
13531   /* Remember that we were in class scope.  */
13532   if (current_class_name)
13533     ctype = current_class_type;
13534 
13535   /* Must mark the RESULT_DECL as being in this function.  */
13536   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13537 
13538   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13539      to the FUNCTION_DECL node itself.  */
13540   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13541 
13542   /* Save away current state, if appropriate.  */
13543   if (!processing_template_decl)
13544     save_function_data (fndecl);
13545 
13546   /* Complain if there's just no return statement.  */
13547   if (warn_return_type
13548       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13549       && !dependent_type_p (TREE_TYPE (fntype))
13550       && !current_function_returns_value && !current_function_returns_null
13551       /* Don't complain if we abort or throw.  */
13552       && !current_function_returns_abnormally
13553       /* Don't complain if we are declared noreturn.  */
13554       && !TREE_THIS_VOLATILE (fndecl)
13555       && !DECL_NAME (DECL_RESULT (fndecl))
13556       && !TREE_NO_WARNING (fndecl)
13557       /* Structor return values (if any) are set by the compiler.  */
13558       && !DECL_CONSTRUCTOR_P (fndecl)
13559       && !DECL_DESTRUCTOR_P (fndecl))
13560     {
13561       warning (OPT_Wreturn_type,
13562  	       "no return statement in function returning non-void");
13563       TREE_NO_WARNING (fndecl) = 1;
13564     }
13565 
13566   /* Store the end of the function, so that we get good line number
13567      info for the epilogue.  */
13568   cfun->function_end_locus = input_location;
13569 
13570   /* Complain about parameters that are only set, but never otherwise used.  */
13571   if (warn_unused_but_set_parameter
13572       && !processing_template_decl
13573       && errorcount == unused_but_set_errorcount
13574       && !DECL_CLONED_FUNCTION_P (fndecl))
13575     {
13576       tree decl;
13577 
13578       for (decl = DECL_ARGUMENTS (fndecl);
13579 	   decl;
13580 	   decl = DECL_CHAIN (decl))
13581 	if (TREE_USED (decl)
13582 	    && TREE_CODE (decl) == PARM_DECL
13583 	    && !DECL_READ_P (decl)
13584 	    && DECL_NAME (decl)
13585 	    && !DECL_ARTIFICIAL (decl)
13586 	    && !TREE_NO_WARNING (decl)
13587 	    && !DECL_IN_SYSTEM_HEADER (decl)
13588 	    && TREE_TYPE (decl) != error_mark_node
13589 	    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13590 	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
13591 	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13592 	  warning (OPT_Wunused_but_set_parameter,
13593 		   "parameter %q+D set but not used", decl);
13594       unused_but_set_errorcount = errorcount;
13595     }
13596 
13597   /* Complain about locally defined typedefs that are not used in this
13598      function.  */
13599   maybe_warn_unused_local_typedefs ();
13600 
13601   /* Genericize before inlining.  */
13602   if (!processing_template_decl)
13603     {
13604       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13605       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13606       cp_genericize (fndecl);
13607       /* Clear out the bits we don't need.  */
13608       f->x_current_class_ptr = NULL;
13609       f->x_current_class_ref = NULL;
13610       f->x_eh_spec_block = NULL;
13611       f->x_in_charge_parm = NULL;
13612       f->x_vtt_parm = NULL;
13613       f->x_return_value = NULL;
13614       f->bindings = NULL;
13615       f->extern_decl_map = NULL;
13616     }
13617   /* Clear out the bits we don't need.  */
13618   local_names = NULL;
13619 
13620   /* We're leaving the context of this function, so zap cfun.  It's still in
13621      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13622   set_cfun (NULL);
13623   current_function_decl = NULL;
13624 
13625   /* If this is an in-class inline definition, we may have to pop the
13626      bindings for the template parameters that we added in
13627      maybe_begin_member_template_processing when start_function was
13628      called.  */
13629   if (inclass_inline)
13630     maybe_end_member_template_processing ();
13631 
13632   /* Leave the scope of the class.  */
13633   if (ctype)
13634     pop_nested_class ();
13635 
13636   --function_depth;
13637 
13638   /* Clean up.  */
13639   current_function_decl = NULL_TREE;
13640 
13641   defer_mark_used_calls = false;
13642   if (deferred_mark_used_calls)
13643     {
13644       unsigned int i;
13645       tree decl;
13646 
13647       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13648 	mark_used (decl);
13649       VEC_free (tree, gc, deferred_mark_used_calls);
13650     }
13651 
13652   return fndecl;
13653 }
13654 
13655 /* Create the FUNCTION_DECL for a function definition.
13656    DECLSPECS and DECLARATOR are the parts of the declaration;
13657    they describe the return type and the name of the function,
13658    but twisted together in a fashion that parallels the syntax of C.
13659 
13660    This function creates a binding context for the function body
13661    as well as setting up the FUNCTION_DECL in current_function_decl.
13662 
13663    Returns a FUNCTION_DECL on success.
13664 
13665    If the DECLARATOR is not suitable for a function (it defines a datum
13666    instead), we return 0, which tells yyparse to report a parse error.
13667 
13668    May return void_type_node indicating that this method is actually
13669    a friend.  See grokfield for more details.
13670 
13671    Came here with a `.pushlevel' .
13672 
13673    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13674    CHANGES TO CODE IN `grokfield'.  */
13675 
13676 tree
13677 grokmethod (cp_decl_specifier_seq *declspecs,
13678 	    const cp_declarator *declarator, tree attrlist)
13679 {
13680   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13681 				&attrlist);
13682 
13683   if (fndecl == error_mark_node)
13684     return error_mark_node;
13685 
13686   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13687     {
13688       error ("invalid member function declaration");
13689       return error_mark_node;
13690     }
13691 
13692   if (attrlist)
13693     cplus_decl_attributes (&fndecl, attrlist, 0);
13694 
13695   /* Pass friends other than inline friend functions back.  */
13696   if (fndecl == void_type_node)
13697     return fndecl;
13698 
13699   if (DECL_IN_AGGR_P (fndecl))
13700     {
13701       if (DECL_CLASS_SCOPE_P (fndecl))
13702 	error ("%qD is already defined in class %qT", fndecl,
13703 	       DECL_CONTEXT (fndecl));
13704       return error_mark_node;
13705     }
13706 
13707   check_template_shadow (fndecl);
13708 
13709   DECL_DECLARED_INLINE_P (fndecl) = 1;
13710   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13711 
13712   /* We process method specializations in finish_struct_1.  */
13713   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13714     {
13715       fndecl = push_template_decl (fndecl);
13716       if (fndecl == error_mark_node)
13717 	return fndecl;
13718     }
13719 
13720   if (! DECL_FRIEND_P (fndecl))
13721     {
13722       if (DECL_CHAIN (fndecl))
13723 	{
13724 	  fndecl = copy_node (fndecl);
13725 	  TREE_CHAIN (fndecl) = NULL_TREE;
13726 	}
13727     }
13728 
13729   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13730 
13731   DECL_IN_AGGR_P (fndecl) = 1;
13732   return fndecl;
13733 }
13734 
13735 
13736 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13737    we can lay it out later, when and if its type becomes complete.  */
13738 
13739 void
13740 maybe_register_incomplete_var (tree var)
13741 {
13742   gcc_assert (TREE_CODE (var) == VAR_DECL);
13743 
13744   /* Keep track of variables with incomplete types.  */
13745   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13746       && DECL_EXTERNAL (var))
13747     {
13748       tree inner_type = TREE_TYPE (var);
13749 
13750       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13751 	inner_type = TREE_TYPE (inner_type);
13752       inner_type = TYPE_MAIN_VARIANT (inner_type);
13753 
13754       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13755 	  /* RTTI TD entries are created while defining the type_info.  */
13756 	  || (TYPE_LANG_SPECIFIC (inner_type)
13757 	      && TYPE_BEING_DEFINED (inner_type)))
13758 	{
13759 	  incomplete_var *iv
13760 	    = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13761 	  iv->decl = var;
13762 	  iv->incomplete_type = inner_type;
13763 	}
13764     }
13765 }
13766 
13767 /* Called when a class type (given by TYPE) is defined.  If there are
13768    any existing VAR_DECLs whose type has been completed by this
13769    declaration, update them now.  */
13770 
13771 void
13772 complete_vars (tree type)
13773 {
13774   unsigned ix;
13775   incomplete_var *iv;
13776 
13777   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13778     {
13779       if (same_type_p (type, iv->incomplete_type))
13780 	{
13781 	  tree var = iv->decl;
13782 	  tree type = TREE_TYPE (var);
13783 	  /* Complete the type of the variable.  The VAR_DECL itself
13784 	     will be laid out in expand_expr.  */
13785 	  complete_type (type);
13786 	  cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13787 	  /* Remove this entry from the list.  */
13788 	  VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13789 	}
13790       else
13791 	ix++;
13792     }
13793 
13794   /* Check for pending declarations which may have abstract type.  */
13795   complete_type_check_abstract (type);
13796 }
13797 
13798 /* If DECL is of a type which needs a cleanup, build and return an
13799    expression to perform that cleanup here.  Return NULL_TREE if no
13800    cleanup need be done.  */
13801 
13802 tree
13803 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13804 {
13805   tree type;
13806   tree attr;
13807   tree cleanup;
13808 
13809   /* Assume no cleanup is required.  */
13810   cleanup = NULL_TREE;
13811 
13812   if (error_operand_p (decl))
13813     return cleanup;
13814 
13815   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13816      before the destructor since the destructor is what actually
13817      terminates the lifetime of the object.  */
13818   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13819   if (attr)
13820     {
13821       tree id;
13822       tree fn;
13823       tree arg;
13824 
13825       /* Get the name specified by the user for the cleanup function.  */
13826       id = TREE_VALUE (TREE_VALUE (attr));
13827       /* Look up the name to find the cleanup function to call.  It is
13828 	 important to use lookup_name here because that is what is
13829 	 used in c-common.c:handle_cleanup_attribute when performing
13830 	 initial checks on the attribute.  Note that those checks
13831 	 include ensuring that the function found is not an overloaded
13832 	 function, or an object with an overloaded call operator,
13833 	 etc.; we can rely on the fact that the function found is an
13834 	 ordinary FUNCTION_DECL.  */
13835       fn = lookup_name (id);
13836       arg = build_address (decl);
13837       mark_used (decl);
13838       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13839       if (cleanup == error_mark_node)
13840 	return error_mark_node;
13841     }
13842   /* Handle ordinary C++ destructors.  */
13843   type = TREE_TYPE (decl);
13844   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13845     {
13846       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13847       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13848 			 && CLASSTYPE_VBASECLASSES (type));
13849       tree addr;
13850       tree call;
13851 
13852       if (TREE_CODE (type) == ARRAY_TYPE)
13853 	addr = decl;
13854       else
13855 	addr = build_address (decl);
13856 
13857       /* Optimize for space over speed here.  */
13858       if (!has_vbases || flag_expensive_optimizations)
13859 	flags |= LOOKUP_NONVIRTUAL;
13860 
13861       call = build_delete (TREE_TYPE (addr), addr,
13862 			   sfk_complete_destructor, flags, 0, complain);
13863       if (call == error_mark_node)
13864 	cleanup = error_mark_node;
13865       else if (cleanup)
13866 	cleanup = cp_build_compound_expr (cleanup, call, complain);
13867       else
13868 	cleanup = call;
13869     }
13870 
13871   /* build_delete sets the location of the destructor call to the
13872      current location, even though the destructor is going to be
13873      called later, at the end of the current scope.  This can lead to
13874      a "jumpy" behaviour for users of debuggers when they step around
13875      the end of the block.  So let's unset the location of the
13876      destructor call instead.  */
13877   if (cleanup != NULL && EXPR_P (cleanup))
13878     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13879   return cleanup;
13880 }
13881 
13882 
13883 /* When a stmt has been parsed, this function is called.  */
13884 
13885 void
13886 finish_stmt (void)
13887 {
13888 }
13889 
13890 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13891    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13892    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13893 
13894 tree
13895 static_fn_type (tree memfntype)
13896 {
13897   tree fntype;
13898   tree args;
13899 
13900   if (TYPE_PTRMEMFUNC_P (memfntype))
13901     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13902   if (POINTER_TYPE_P (memfntype)
13903       || TREE_CODE (memfntype) == FUNCTION_DECL)
13904     memfntype = TREE_TYPE (memfntype);
13905   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13906     return memfntype;
13907   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13908   args = TYPE_ARG_TYPES (memfntype);
13909   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13910   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13911   fntype = (cp_build_type_attribute_variant
13912 	    (fntype, TYPE_ATTRIBUTES (memfntype)));
13913   fntype = (build_exception_variant
13914 	    (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13915   return fntype;
13916 }
13917 
13918 /* DECL was originally constructed as a non-static member function,
13919    but turned out to be static.  Update it accordingly.  */
13920 
13921 void
13922 revert_static_member_fn (tree decl)
13923 {
13924   tree stype = static_fn_type (decl);
13925   cp_cv_quals quals = type_memfn_quals (stype);
13926 
13927   if (quals != TYPE_UNQUALIFIED)
13928     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13929 
13930   TREE_TYPE (decl) = stype;
13931 
13932   if (DECL_ARGUMENTS (decl))
13933     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13934   DECL_STATIC_FUNCTION_P (decl) = 1;
13935 }
13936 
13937 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13938    one of the language-independent trees.  */
13939 
13940 enum cp_tree_node_structure_enum
13941 cp_tree_node_structure (union lang_tree_node * t)
13942 {
13943   switch (TREE_CODE (&t->generic))
13944     {
13945     case DEFAULT_ARG:		return TS_CP_DEFAULT_ARG;
13946     case DEFERRED_NOEXCEPT:	return TS_CP_DEFERRED_NOEXCEPT;
13947     case IDENTIFIER_NODE:	return TS_CP_IDENTIFIER;
13948     case OVERLOAD:		return TS_CP_OVERLOAD;
13949     case TEMPLATE_PARM_INDEX:	return TS_CP_TPI;
13950     case PTRMEM_CST:		return TS_CP_PTRMEM;
13951     case BASELINK:		return TS_CP_BASELINK;
13952     case STATIC_ASSERT:		return TS_CP_STATIC_ASSERT;
13953     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13954     case TRAIT_EXPR:		return TS_CP_TRAIT_EXPR;
13955     case LAMBDA_EXPR:		return TS_CP_LAMBDA_EXPR;
13956     case TEMPLATE_INFO:		return TS_CP_TEMPLATE_INFO;
13957     case USERDEF_LITERAL:	return TS_CP_USERDEF_LITERAL;
13958     default:			return TS_CP_GENERIC;
13959     }
13960 }
13961 
13962 /* Build the void_list_node (void_type_node having been created).  */
13963 tree
13964 build_void_list_node (void)
13965 {
13966   tree t = build_tree_list (NULL_TREE, void_type_node);
13967   return t;
13968 }
13969 
13970 bool
13971 cp_missing_noreturn_ok_p (tree decl)
13972 {
13973   /* A missing noreturn is ok for the `main' function.  */
13974   return DECL_MAIN_P (decl);
13975 }
13976 
13977 /* Return the COMDAT group into which DECL should be placed.  */
13978 
13979 tree
13980 cxx_comdat_group (tree decl)
13981 {
13982   tree name;
13983 
13984   /* Virtual tables, construction virtual tables, and virtual table
13985      tables all go in a single COMDAT group, named after the primary
13986      virtual table.  */
13987   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13988     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13989   /* For all other DECLs, the COMDAT group is the mangled name of the
13990      declaration itself.  */
13991   else
13992     {
13993       while (DECL_THUNK_P (decl))
13994 	{
13995 	  /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13996 	     into the same section as the target function.  In that case
13997 	     we must return target's name.  */
13998 	  tree target = THUNK_TARGET (decl);
13999 	  if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14000 	      && DECL_SECTION_NAME (target) != NULL
14001 	      && DECL_ONE_ONLY (target))
14002 	    decl = target;
14003 	  else
14004 	    break;
14005 	}
14006       name = DECL_ASSEMBLER_NAME (decl);
14007     }
14008 
14009   return name;
14010 }
14011 
14012 #include "gt-cp-decl.h"
14013