xref: /dragonfly/contrib/gcc-4.7/gcc/cp/decl.c (revision 25a2db75)
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_LANG_SPECIFIC (t))
921 	    DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922 	  else
923 	    DECL_DISCRIMINATOR (decl) = 1;
924 
925 	  VEC_replace (tree, local_names, i, decl);
926 	  timevar_stop (TV_NAME_LOOKUP);
927 	  return;
928 	}
929     }
930 
931   VEC_safe_push (tree, gc, local_names, decl);
932   timevar_stop (TV_NAME_LOOKUP);
933 }
934 
935 /* Subroutine of duplicate_decls: return truthvalue of whether
936    or not types of these decls match.
937 
938    For C++, we must compare the parameter list so that `int' can match
939    `int&' in a parameter position, but `int&' is not confused with
940    `const int&'.  */
941 
942 int
943 decls_match (tree newdecl, tree olddecl)
944 {
945   int types_match;
946 
947   if (newdecl == olddecl)
948     return 1;
949 
950   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951     /* If the two DECLs are not even the same kind of thing, we're not
952        interested in their types.  */
953     return 0;
954 
955   gcc_assert (DECL_P (newdecl));
956 
957   if (TREE_CODE (newdecl) == FUNCTION_DECL)
958     {
959       tree f1 = TREE_TYPE (newdecl);
960       tree f2 = TREE_TYPE (olddecl);
961       tree p1 = TYPE_ARG_TYPES (f1);
962       tree p2 = TYPE_ARG_TYPES (f2);
963 
964       /* Specializations of different templates are different functions
965 	 even if they have the same type.  */
966       tree t1 = (DECL_USE_TEMPLATE (newdecl)
967 		 ? DECL_TI_TEMPLATE (newdecl)
968 		 : NULL_TREE);
969       tree t2 = (DECL_USE_TEMPLATE (olddecl)
970 		 ? DECL_TI_TEMPLATE (olddecl)
971 		 : NULL_TREE);
972       if (t1 != t2)
973 	return 0;
974 
975       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
976 	  && ! (DECL_EXTERN_C_P (newdecl)
977 		&& DECL_EXTERN_C_P (olddecl)))
978 	return 0;
979 
980 #ifdef NO_IMPLICIT_EXTERN_C
981       /* A new declaration doesn't match a built-in one unless it
982 	 is also extern "C".  */
983       if (DECL_IS_BUILTIN (olddecl)
984 	  && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
985 	return 0;
986 #endif
987 
988       if (TREE_CODE (f1) != TREE_CODE (f2))
989 	return 0;
990 
991       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
992 	{
993 	  if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
994 	      && (DECL_BUILT_IN (olddecl)
995 #ifndef NO_IMPLICIT_EXTERN_C
996 		  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
997 		  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998 #endif
999 	      ))
1000 	    {
1001 	      types_match = self_promoting_args_p (p1);
1002 	      if (p1 == void_list_node)
1003 		TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1004 	    }
1005 #ifndef NO_IMPLICIT_EXTERN_C
1006 	  else if (!prototype_p (f1)
1007 		   && (DECL_EXTERN_C_P (olddecl)
1008 		       && DECL_IN_SYSTEM_HEADER (olddecl)
1009 		       && !DECL_CLASS_SCOPE_P (olddecl))
1010 		   && (DECL_EXTERN_C_P (newdecl)
1011 		       && DECL_IN_SYSTEM_HEADER (newdecl)
1012 		       && !DECL_CLASS_SCOPE_P (newdecl)))
1013 	    {
1014 	      types_match = self_promoting_args_p (p2);
1015 	      TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016 	    }
1017 #endif
1018 	  else
1019 	    types_match =
1020 	      compparms (p1, p2)
1021 	      && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1022 	          || comp_type_attributes (TREE_TYPE (newdecl),
1023 					   TREE_TYPE (olddecl)) != 0);
1024 	}
1025       else
1026 	types_match = 0;
1027     }
1028   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1029     {
1030       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1031 	  != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1032 	return 0;
1033 
1034       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1035 				DECL_TEMPLATE_PARMS (olddecl)))
1036 	return 0;
1037 
1038       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1039 	types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1040 				   TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1041       else
1042 	types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1043 				   DECL_TEMPLATE_RESULT (newdecl));
1044     }
1045   else
1046     {
1047       /* Need to check scope for variable declaration (VAR_DECL).
1048 	 For typedef (TYPE_DECL), scope is ignored.  */
1049       if (TREE_CODE (newdecl) == VAR_DECL
1050 	  && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1051 	  /* [dcl.link]
1052 	     Two declarations for an object with C language linkage
1053 	     with the same name (ignoring the namespace that qualify
1054 	     it) that appear in different namespace scopes refer to
1055 	     the same object.  */
1056 	  && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1057 	return 0;
1058 
1059       if (TREE_TYPE (newdecl) == error_mark_node)
1060 	types_match = TREE_TYPE (olddecl) == error_mark_node;
1061       else if (TREE_TYPE (olddecl) == NULL_TREE)
1062 	types_match = TREE_TYPE (newdecl) == NULL_TREE;
1063       else if (TREE_TYPE (newdecl) == NULL_TREE)
1064 	types_match = 0;
1065       else
1066 	types_match = comptypes (TREE_TYPE (newdecl),
1067 				 TREE_TYPE (olddecl),
1068 				 COMPARE_REDECLARATION);
1069     }
1070 
1071   return types_match;
1072 }
1073 
1074 /* If NEWDECL is `static' and an `extern' was seen previously,
1075    warn about it.  OLDDECL is the previous declaration.
1076 
1077    Note that this does not apply to the C++ case of declaring
1078    a variable `extern const' and then later `const'.
1079 
1080    Don't complain about built-in functions, since they are beyond
1081    the user's control.  */
1082 
1083 void
1084 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1085 {
1086   if (TREE_CODE (newdecl) == TYPE_DECL
1087       || TREE_CODE (newdecl) == TEMPLATE_DECL
1088       || TREE_CODE (newdecl) == CONST_DECL
1089       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1090     return;
1091 
1092   /* Don't get confused by static member functions; that's a different
1093      use of `static'.  */
1094   if (TREE_CODE (newdecl) == FUNCTION_DECL
1095       && DECL_STATIC_FUNCTION_P (newdecl))
1096     return;
1097 
1098   /* If the old declaration was `static', or the new one isn't, then
1099      everything is OK.  */
1100   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1101     return;
1102 
1103   /* It's OK to declare a builtin function as `static'.  */
1104   if (TREE_CODE (olddecl) == FUNCTION_DECL
1105       && DECL_ARTIFICIAL (olddecl))
1106     return;
1107 
1108   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1109   permerror (input_location, "previous declaration of %q+D", olddecl);
1110 }
1111 
1112 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1113    function templates.  If their exception specifications do not
1114    match, issue a diagnostic.  */
1115 
1116 static void
1117 check_redeclaration_exception_specification (tree new_decl,
1118 					     tree old_decl)
1119 {
1120   tree new_type;
1121   tree old_type;
1122   tree new_exceptions;
1123   tree old_exceptions;
1124 
1125   new_type = TREE_TYPE (new_decl);
1126   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1127   old_type = TREE_TYPE (old_decl);
1128   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1129 
1130   /* [except.spec]
1131 
1132      If any declaration of a function has an exception-specification,
1133      all declarations, including the definition and an explicit
1134      specialization, of that function shall have an
1135      exception-specification with the same set of type-ids.  */
1136   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1137       && ! DECL_IS_BUILTIN (old_decl)
1138       && flag_exceptions
1139       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1140     {
1141       error ("declaration of %qF has a different exception specifier",
1142 	     new_decl);
1143       error ("from previous declaration %q+F", old_decl);
1144     }
1145 }
1146 
1147 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1148    Otherwise issue diagnostics.  */
1149 
1150 static bool
1151 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1152 {
1153   old_decl = STRIP_TEMPLATE (old_decl);
1154   new_decl = STRIP_TEMPLATE (new_decl);
1155   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1156       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1157     return true;
1158   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1159       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1160     return true;
1161   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1162     {
1163       /* Hide a built-in declaration.  */
1164       DECL_DECLARED_CONSTEXPR_P (old_decl)
1165 	= DECL_DECLARED_CONSTEXPR_P (new_decl);
1166       return true;
1167     }
1168   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1169   error ("from previous declaration %q+D", old_decl);
1170   return false;
1171 }
1172 
1173 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)			\
1174 			  && lookup_attribute ("gnu_inline",		\
1175 					       DECL_ATTRIBUTES (fn)))
1176 
1177 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1178    If the redeclaration is invalid, a diagnostic is issued, and the
1179    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1180 
1181    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1182    returned.
1183 
1184    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1185 
1186 tree
1187 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1188 {
1189   unsigned olddecl_uid = DECL_UID (olddecl);
1190   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1191   int new_defines_function = 0;
1192   tree new_template_info;
1193 
1194   if (newdecl == olddecl)
1195     return olddecl;
1196 
1197   types_match = decls_match (newdecl, olddecl);
1198 
1199   /* If either the type of the new decl or the type of the old decl is an
1200      error_mark_node, then that implies that we have already issued an
1201      error (earlier) for some bogus type specification, and in that case,
1202      it is rather pointless to harass the user with yet more error message
1203      about the same declaration, so just pretend the types match here.  */
1204   if (TREE_TYPE (newdecl) == error_mark_node
1205       || TREE_TYPE (olddecl) == error_mark_node)
1206     return error_mark_node;
1207 
1208   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1209       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1210     {
1211       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1212 	  && TREE_CODE (olddecl) != TEMPLATE_DECL
1213 	  && check_raw_literal_operator (olddecl))
1214 	error ("literal operator template %q+D conflicts with"
1215 	       " raw literal operator %qD", newdecl, olddecl);
1216       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1217 	       && TREE_CODE (olddecl) == TEMPLATE_DECL
1218 	       && check_raw_literal_operator (newdecl))
1219 	error ("raw literal operator %q+D conflicts with"
1220 	       " literal operator template %qD", newdecl, olddecl);
1221     }
1222 
1223   if (DECL_P (olddecl)
1224       && TREE_CODE (newdecl) == FUNCTION_DECL
1225       && TREE_CODE (olddecl) == FUNCTION_DECL
1226       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1227     {
1228       if (DECL_DECLARED_INLINE_P (newdecl)
1229 	  && DECL_UNINLINABLE (newdecl)
1230 	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231 	/* Already warned elsewhere.  */;
1232       else if (DECL_DECLARED_INLINE_P (olddecl)
1233 	       && DECL_UNINLINABLE (olddecl)
1234 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1235 	/* Already warned.  */;
1236       else if (DECL_DECLARED_INLINE_P (newdecl)
1237 	       && DECL_UNINLINABLE (olddecl)
1238 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1239 	{
1240 	  warning (OPT_Wattributes, "function %q+D redeclared as inline",
1241 		   newdecl);
1242 	  warning (OPT_Wattributes, "previous declaration of %q+D "
1243 		   "with attribute noinline", olddecl);
1244 	}
1245       else if (DECL_DECLARED_INLINE_P (olddecl)
1246 	       && DECL_UNINLINABLE (newdecl)
1247 	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1248 	{
1249 	  warning (OPT_Wattributes, "function %q+D redeclared with "
1250 		   "attribute noinline", newdecl);
1251 	  warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1252 		   olddecl);
1253 	}
1254     }
1255 
1256   /* Check for redeclaration and other discrepancies.  */
1257   if (TREE_CODE (olddecl) == FUNCTION_DECL
1258       && DECL_ARTIFICIAL (olddecl))
1259     {
1260       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1261       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1262 	{
1263 	  /* Avoid warnings redeclaring built-ins which have not been
1264 	     explicitly declared.  */
1265 	  if (DECL_ANTICIPATED (olddecl))
1266 	    return NULL_TREE;
1267 
1268 	  /* If you declare a built-in or predefined function name as static,
1269 	     the old definition is overridden, but optionally warn this was a
1270 	     bad choice of name.  */
1271 	  if (! TREE_PUBLIC (newdecl))
1272 	    {
1273 	      warning (OPT_Wshadow,
1274                        DECL_BUILT_IN (olddecl)
1275                        ? G_("shadowing built-in function %q#D")
1276                        : G_("shadowing library function %q#D"), olddecl);
1277 	      /* Discard the old built-in function.  */
1278 	      return NULL_TREE;
1279 	    }
1280 	  /* If the built-in is not ansi, then programs can override
1281 	     it even globally without an error.  */
1282 	  else if (! DECL_BUILT_IN (olddecl))
1283 	    warning (0, "library function %q#D redeclared as non-function %q#D",
1284 		     olddecl, newdecl);
1285 	  else
1286 	    {
1287 	      error ("declaration of %q#D", newdecl);
1288 	      error ("conflicts with built-in declaration %q#D",
1289 		     olddecl);
1290 	    }
1291 	  return NULL_TREE;
1292 	}
1293       else if (!types_match)
1294 	{
1295 	  /* Avoid warnings redeclaring built-ins which have not been
1296 	     explicitly declared.  */
1297 	  if (DECL_ANTICIPATED (olddecl))
1298 	    {
1299 	      /* Deal with fileptr_type_node.  FILE type is not known
1300 		 at the time we create the builtins.  */
1301 	      tree t1, t2;
1302 
1303 	      for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1304 		   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1305 		   t1 || t2;
1306 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1307 		if (!t1 || !t2)
1308 		  break;
1309 		else if (TREE_VALUE (t2) == fileptr_type_node)
1310 		  {
1311 		    tree t = TREE_VALUE (t1);
1312 
1313 		    if (TREE_CODE (t) == POINTER_TYPE
1314 			&& TYPE_NAME (TREE_TYPE (t))
1315 			&& DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1316 			   == get_identifier ("FILE")
1317 			&& compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1318 		      {
1319 			tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1320 
1321 			TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1322 			  = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1323 			types_match = decls_match (newdecl, olddecl);
1324 			if (types_match)
1325 			  return duplicate_decls (newdecl, olddecl,
1326 						  newdecl_is_friend);
1327 			TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1328 		      }
1329 		  }
1330 		else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1331 		  break;
1332 	    }
1333 	  else if ((DECL_EXTERN_C_P (newdecl)
1334 		    && DECL_EXTERN_C_P (olddecl))
1335 		   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336 				 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1337 	    {
1338 	      /* A near match; override the builtin.  */
1339 
1340 	      if (TREE_PUBLIC (newdecl))
1341 		{
1342 		  warning (0, "new declaration %q#D", newdecl);
1343 		  warning (0, "ambiguates built-in declaration %q#D",
1344 			   olddecl);
1345 		}
1346 	      else
1347 		warning (OPT_Wshadow,
1348                          DECL_BUILT_IN (olddecl)
1349                          ? G_("shadowing built-in function %q#D")
1350                          : G_("shadowing library function %q#D"), olddecl);
1351 	    }
1352 	  else
1353 	    /* Discard the old built-in function.  */
1354 	    return NULL_TREE;
1355 
1356 	  /* Replace the old RTL to avoid problems with inlining.  */
1357 	  COPY_DECL_RTL (newdecl, olddecl);
1358 	}
1359       /* Even if the types match, prefer the new declarations type for
1360 	 built-ins which have not been explicitly declared, for
1361 	 exception lists, etc...  */
1362       else if (DECL_IS_BUILTIN (olddecl))
1363 	{
1364 	  tree type = TREE_TYPE (newdecl);
1365 	  tree attribs = (*targetm.merge_type_attributes)
1366 	    (TREE_TYPE (olddecl), type);
1367 
1368 	  type = cp_build_type_attribute_variant (type, attribs);
1369 	  TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1370 	}
1371 
1372       /* If a function is explicitly declared "throw ()", propagate that to
1373 	 the corresponding builtin.  */
1374       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1375 	  && DECL_ANTICIPATED (olddecl)
1376 	  && TREE_NOTHROW (newdecl)
1377 	  && !TREE_NOTHROW (olddecl))
1378 	{
1379 	  enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1380 	  tree tmpdecl = builtin_decl_explicit (fncode);
1381 	  if (tmpdecl && tmpdecl != olddecl && types_match)
1382 	    TREE_NOTHROW (tmpdecl)  = 1;
1383 	}
1384 
1385       /* Whether or not the builtin can throw exceptions has no
1386 	 bearing on this declarator.  */
1387       TREE_NOTHROW (olddecl) = 0;
1388 
1389       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1390 	{
1391 	  /* If a builtin function is redeclared as `static', merge
1392 	     the declarations, but make the original one static.  */
1393 	  DECL_THIS_STATIC (olddecl) = 1;
1394 	  TREE_PUBLIC (olddecl) = 0;
1395 
1396 	  /* Make the old declaration consistent with the new one so
1397 	     that all remnants of the builtin-ness of this function
1398 	     will be banished.  */
1399 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1400 	  COPY_DECL_RTL (newdecl, olddecl);
1401 	}
1402     }
1403   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1404     {
1405       /* C++ Standard, 3.3, clause 4:
1406 	 "[Note: a namespace name or a class template name must be unique
1407 	 in its declarative region (7.3.2, clause 14). ]"  */
1408       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1409 	  && TREE_CODE (newdecl) != NAMESPACE_DECL
1410 	  && (TREE_CODE (olddecl) != TEMPLATE_DECL
1411 	      || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1412 	  && (TREE_CODE (newdecl) != TEMPLATE_DECL
1413 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1414 	{
1415 	  if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1416 	       && TREE_CODE (newdecl) != TYPE_DECL)
1417 	      || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1418 		  && TREE_CODE (olddecl) != TYPE_DECL))
1419 	    {
1420 	      /* We do nothing special here, because C++ does such nasty
1421 		 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1422 		 get shadowed, and know that if we need to find a TYPE_DECL
1423 		 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1424 		 slot of the identifier.  */
1425 	      return NULL_TREE;
1426 	    }
1427 
1428 	    if ((TREE_CODE (newdecl) == FUNCTION_DECL
1429 		 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1430 		|| (TREE_CODE (olddecl) == FUNCTION_DECL
1431 		    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1432 	      return NULL_TREE;
1433 	}
1434 
1435       error ("%q#D redeclared as different kind of symbol", newdecl);
1436       if (TREE_CODE (olddecl) == TREE_LIST)
1437 	olddecl = TREE_VALUE (olddecl);
1438       error ("previous declaration of %q+#D", olddecl);
1439 
1440       return error_mark_node;
1441     }
1442   else if (!types_match)
1443     {
1444       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1445 	/* These are certainly not duplicate declarations; they're
1446 	   from different scopes.  */
1447 	return NULL_TREE;
1448 
1449       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1450 	{
1451 	  /* The name of a class template may not be declared to refer to
1452 	     any other template, class, function, object, namespace, value,
1453 	     or type in the same scope.  */
1454 	  if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1455 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1456 	    {
1457 	      error ("declaration of template %q#D", newdecl);
1458 	      error ("conflicts with previous declaration %q+#D", olddecl);
1459 	    }
1460 	  else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1461 		   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1462 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1463 				 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1464 		   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1465 					   DECL_TEMPLATE_PARMS (olddecl))
1466 		   /* Template functions can be disambiguated by
1467 		      return type.  */
1468 		   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1469 				   TREE_TYPE (TREE_TYPE (olddecl))))
1470 	    {
1471 	      error ("new declaration %q#D", newdecl);
1472 	      error ("ambiguates old declaration %q+#D", olddecl);
1473 	    }
1474 	  return NULL_TREE;
1475 	}
1476       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1477 	{
1478 	  if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1479 	    {
1480 	      error ("declaration of C function %q#D conflicts with",
1481 		     newdecl);
1482 	      error ("previous declaration %q+#D here", olddecl);
1483 	      return NULL_TREE;
1484 	    }
1485 	  else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1486 			      TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1487 	    {
1488 	      error ("new declaration %q#D", newdecl);
1489 	      error ("ambiguates old declaration %q+#D", olddecl);
1490               return error_mark_node;
1491 	    }
1492 	  else
1493 	    return NULL_TREE;
1494 	}
1495       else
1496 	{
1497 	  error ("conflicting declaration %q#D", newdecl);
1498 	  error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1499 	  return error_mark_node;
1500 	}
1501     }
1502   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1503 	    && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1504 		 && (!DECL_TEMPLATE_INFO (newdecl)
1505 		     || (DECL_TI_TEMPLATE (newdecl)
1506 			 != DECL_TI_TEMPLATE (olddecl))))
1507 		|| (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1508 		    && (!DECL_TEMPLATE_INFO (olddecl)
1509 			|| (DECL_TI_TEMPLATE (olddecl)
1510 			    != DECL_TI_TEMPLATE (newdecl))))))
1511     /* It's OK to have a template specialization and a non-template
1512        with the same type, or to have specializations of two
1513        different templates with the same type.  Note that if one is a
1514        specialization, and the other is an instantiation of the same
1515        template, that we do not exit at this point.  That situation
1516        can occur if we instantiate a template class, and then
1517        specialize one of its methods.  This situation is valid, but
1518        the declarations must be merged in the usual way.  */
1519     return NULL_TREE;
1520   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1521 	   && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1522 		&& !DECL_USE_TEMPLATE (newdecl))
1523 	       || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1524 		   && !DECL_USE_TEMPLATE (olddecl))))
1525     /* One of the declarations is a template instantiation, and the
1526        other is not a template at all.  That's OK.  */
1527     return NULL_TREE;
1528   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1529     {
1530       /* In [namespace.alias] we have:
1531 
1532 	   In a declarative region, a namespace-alias-definition can be
1533 	   used to redefine a namespace-alias declared in that declarative
1534 	   region to refer only to the namespace to which it already
1535 	   refers.
1536 
1537 	 Therefore, if we encounter a second alias directive for the same
1538 	 alias, we can just ignore the second directive.  */
1539       if (DECL_NAMESPACE_ALIAS (newdecl)
1540 	  && (DECL_NAMESPACE_ALIAS (newdecl)
1541 	      == DECL_NAMESPACE_ALIAS (olddecl)))
1542 	return olddecl;
1543       /* [namespace.alias]
1544 
1545 	 A namespace-name or namespace-alias shall not be declared as
1546 	 the name of any other entity in the same declarative region.
1547 	 A namespace-name defined at global scope shall not be
1548 	 declared as the name of any other entity in any global scope
1549 	 of the program.  */
1550       error ("declaration of namespace %qD conflicts with", newdecl);
1551       error ("previous declaration of namespace %q+D here", olddecl);
1552       return error_mark_node;
1553     }
1554   else
1555     {
1556       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1557       if (errmsg)
1558 	{
1559 	  error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1560 	  if (DECL_NAME (olddecl) != NULL_TREE)
1561 	    error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1562 		   ? G_("%q+#D previously defined here")
1563 		   : G_("%q+#D previously declared here"), olddecl);
1564 	  return error_mark_node;
1565 	}
1566       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1567 	       && DECL_INITIAL (olddecl) != NULL_TREE
1568 	       && !prototype_p (TREE_TYPE (olddecl))
1569 	       && prototype_p (TREE_TYPE (newdecl)))
1570 	{
1571 	  /* Prototype decl follows defn w/o prototype.  */
1572 	  warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1573 	  warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1574 		      "follows non-prototype definition here");
1575 	}
1576       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1577 		|| TREE_CODE (olddecl) == VAR_DECL)
1578 	       && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1579 	{
1580 	  /* [dcl.link]
1581 	     If two declarations of the same function or object
1582 	     specify different linkage-specifications ..., the program
1583 	     is ill-formed.... Except for functions with C++ linkage,
1584 	     a function declaration without a linkage specification
1585 	     shall not precede the first linkage specification for
1586 	     that function.  A function can be declared without a
1587 	     linkage specification after an explicit linkage
1588 	     specification has been seen; the linkage explicitly
1589 	     specified in the earlier declaration is not affected by
1590 	     such a function declaration.
1591 
1592 	     DR 563 raises the question why the restrictions on
1593 	     functions should not also apply to objects.  Older
1594 	     versions of G++ silently ignore the linkage-specification
1595 	     for this example:
1596 
1597 	       namespace N {
1598                  extern int i;
1599    	         extern "C" int i;
1600                }
1601 
1602              which is clearly wrong.  Therefore, we now treat objects
1603 	     like functions.  */
1604 	  if (current_lang_depth () == 0)
1605 	    {
1606 	      /* There is no explicit linkage-specification, so we use
1607 		 the linkage from the previous declaration.  */
1608 	      if (!DECL_LANG_SPECIFIC (newdecl))
1609 		retrofit_lang_decl (newdecl);
1610 	      SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1611 	    }
1612 	  else
1613 	    {
1614 	      error ("previous declaration of %q+#D with %qL linkage",
1615 		     olddecl, DECL_LANGUAGE (olddecl));
1616 	      error ("conflicts with new declaration with %qL linkage",
1617 		     DECL_LANGUAGE (newdecl));
1618 	    }
1619 	}
1620 
1621       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1622 	;
1623       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1624 	{
1625 	  tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1626 	  tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1627 	  int i = 1;
1628 
1629 	  if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1630 	    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1631 
1632 	  for (; t1 && t1 != void_list_node;
1633 	       t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1634 	    if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1635 	      {
1636 		if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1637 					   TREE_PURPOSE (t2)))
1638 		  {
1639 		    permerror (input_location, "default argument given for parameter %d of %q#D",
1640 			       i, newdecl);
1641 		    permerror (input_location, "after previous specification in %q+#D", olddecl);
1642 		  }
1643 		else
1644 		  {
1645 		    error ("default argument given for parameter %d of %q#D",
1646 			   i, newdecl);
1647 		    error ("after previous specification in %q+#D",
1648 				 olddecl);
1649 		  }
1650 	      }
1651 	}
1652     }
1653 
1654   /* Do not merge an implicit typedef with an explicit one.  In:
1655 
1656        class A;
1657        ...
1658        typedef class A A __attribute__ ((foo));
1659 
1660      the attribute should apply only to the typedef.  */
1661   if (TREE_CODE (olddecl) == TYPE_DECL
1662       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1663 	  || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1664     return NULL_TREE;
1665 
1666   /* If new decl is `static' and an `extern' was seen previously,
1667      warn about it.  */
1668   warn_extern_redeclared_static (newdecl, olddecl);
1669 
1670   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1671     return error_mark_node;
1672 
1673   /* We have committed to returning 1 at this point.  */
1674   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1675     {
1676       /* Now that functions must hold information normally held
1677 	 by field decls, there is extra work to do so that
1678 	 declaration information does not get destroyed during
1679 	 definition.  */
1680       if (DECL_VINDEX (olddecl))
1681 	DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1682       if (DECL_CONTEXT (olddecl))
1683 	DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1684       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1685       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1686       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1687       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1688       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1689       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1690       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1691 	SET_OVERLOADED_OPERATOR_CODE
1692 	  (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1693       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1694 
1695       /* Optionally warn about more than one declaration for the same
1696 	 name, but don't warn about a function declaration followed by a
1697 	 definition.  */
1698       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1699 	  && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1700 	  /* Don't warn about extern decl followed by definition.  */
1701 	  && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1702 	  /* Don't warn about friends, let add_friend take care of it.  */
1703 	  && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1704 	  /* Don't warn about declaration followed by specialization.  */
1705 	  && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1706 	      || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1707 	{
1708 	  warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1709 	  warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1710 	}
1711 
1712       if (DECL_DELETED_FN (newdecl))
1713 	{
1714 	  error ("deleted definition of %qD", newdecl);
1715 	  error ("after previous declaration %q+D", olddecl);
1716 	}
1717       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1718     }
1719 
1720   /* Deal with C++: must preserve virtual function table size.  */
1721   if (TREE_CODE (olddecl) == TYPE_DECL)
1722     {
1723       tree newtype = TREE_TYPE (newdecl);
1724       tree oldtype = TREE_TYPE (olddecl);
1725 
1726       if (newtype != error_mark_node && oldtype != error_mark_node
1727 	  && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1728 	CLASSTYPE_FRIEND_CLASSES (newtype)
1729 	  = CLASSTYPE_FRIEND_CLASSES (oldtype);
1730 
1731       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1732     }
1733 
1734   /* Copy all the DECL_... slots specified in the new decl
1735      except for any that we copy here from the old type.  */
1736   DECL_ATTRIBUTES (newdecl)
1737     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1738 
1739   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1740     {
1741       tree old_result;
1742       tree new_result;
1743       old_result = DECL_TEMPLATE_RESULT (olddecl);
1744       new_result = DECL_TEMPLATE_RESULT (newdecl);
1745       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1746       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1747 	= chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1748 		   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1749 
1750       DECL_ATTRIBUTES (old_result)
1751 	= (*targetm.merge_decl_attributes) (old_result, new_result);
1752 
1753       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1754 	{
1755 	  if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1756 	      && DECL_INITIAL (new_result))
1757 	    {
1758 	      if (DECL_INITIAL (old_result))
1759 		DECL_UNINLINABLE (old_result) = 1;
1760 	      else
1761 		DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1762 	      DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1763 	      DECL_NOT_REALLY_EXTERN (old_result)
1764 		= DECL_NOT_REALLY_EXTERN (new_result);
1765 	      DECL_INTERFACE_KNOWN (old_result)
1766 		= DECL_INTERFACE_KNOWN (new_result);
1767 	      DECL_DECLARED_INLINE_P (old_result)
1768 		= DECL_DECLARED_INLINE_P (new_result);
1769 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1770 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1771 
1772 	    }
1773 	  else
1774 	    {
1775 	      DECL_DECLARED_INLINE_P (old_result)
1776 		|= DECL_DECLARED_INLINE_P (new_result);
1777 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
1778 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1779 	      check_redeclaration_exception_specification (newdecl, olddecl);
1780 	    }
1781 	}
1782 
1783       /* If the new declaration is a definition, update the file and
1784 	 line information on the declaration, and also make
1785 	 the old declaration the same definition.  */
1786       if (DECL_INITIAL (new_result) != NULL_TREE)
1787 	{
1788 	  DECL_SOURCE_LOCATION (olddecl)
1789 	    = DECL_SOURCE_LOCATION (old_result)
1790 	    = DECL_SOURCE_LOCATION (newdecl);
1791 	  DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1792 	  if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1793 	    {
1794 	      tree parm;
1795 	      DECL_ARGUMENTS (old_result)
1796 		= DECL_ARGUMENTS (new_result);
1797 	      for (parm = DECL_ARGUMENTS (old_result); parm;
1798 		   parm = DECL_CHAIN (parm))
1799 		DECL_CONTEXT (parm) = old_result;
1800 	    }
1801 	}
1802 
1803       return olddecl;
1804     }
1805 
1806   if (types_match)
1807     {
1808       /* Automatically handles default parameters.  */
1809       tree oldtype = TREE_TYPE (olddecl);
1810       tree newtype;
1811 
1812       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813 	maybe_instantiate_noexcept (olddecl);
1814 
1815       /* Merge the data types specified in the two decls.  */
1816       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1817 
1818       /* If merge_types produces a non-typedef type, just use the old type.  */
1819       if (TREE_CODE (newdecl) == TYPE_DECL
1820 	  && newtype == DECL_ORIGINAL_TYPE (newdecl))
1821 	newtype = oldtype;
1822 
1823       if (TREE_CODE (newdecl) == VAR_DECL)
1824 	{
1825 	  DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1826 	  DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1827 	  DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1828 	    |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1829 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1830 	    |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1831 
1832 	  /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1833 	  if (DECL_LANG_SPECIFIC (olddecl)
1834 	      && CP_DECL_THREADPRIVATE_P (olddecl))
1835 	    {
1836 	      /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1837 	      if (!DECL_LANG_SPECIFIC (newdecl))
1838 		retrofit_lang_decl (newdecl);
1839 
1840 	      DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1841 	      CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1842 	    }
1843 	}
1844 
1845       /* Do this after calling `merge_types' so that default
1846 	 parameters don't confuse us.  */
1847       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1848 	check_redeclaration_exception_specification (newdecl, olddecl);
1849       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1850 
1851       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852 	check_default_args (newdecl);
1853 
1854       /* Lay the type out, unless already done.  */
1855       if (! same_type_p (newtype, oldtype)
1856 	  && TREE_TYPE (newdecl) != error_mark_node
1857 	  && !(processing_template_decl && uses_template_parms (newdecl)))
1858 	layout_type (TREE_TYPE (newdecl));
1859 
1860       if ((TREE_CODE (newdecl) == VAR_DECL
1861 	   || TREE_CODE (newdecl) == PARM_DECL
1862 	   || TREE_CODE (newdecl) == RESULT_DECL
1863 	   || TREE_CODE (newdecl) == FIELD_DECL
1864 	   || TREE_CODE (newdecl) == TYPE_DECL)
1865 	  && !(processing_template_decl && uses_template_parms (newdecl)))
1866 	layout_decl (newdecl, 0);
1867 
1868       /* Merge the type qualifiers.  */
1869       if (TREE_READONLY (newdecl))
1870 	TREE_READONLY (olddecl) = 1;
1871       if (TREE_THIS_VOLATILE (newdecl))
1872 	TREE_THIS_VOLATILE (olddecl) = 1;
1873       if (TREE_NOTHROW (newdecl))
1874 	TREE_NOTHROW (olddecl) = 1;
1875 
1876       /* Merge deprecatedness.  */
1877       if (TREE_DEPRECATED (newdecl))
1878 	TREE_DEPRECATED (olddecl) = 1;
1879 
1880       /* Preserve function specific target and optimization options */
1881       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1882 	{
1883 	  if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1884 	      && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1885 	    DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1886 	      = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1887 
1888 	  if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1889 	      && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1890 	    DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1891 	      = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1892 	}
1893 
1894       /* Merge the initialization information.  */
1895       if (DECL_INITIAL (newdecl) == NULL_TREE
1896 	  && DECL_INITIAL (olddecl) != NULL_TREE)
1897 	{
1898 	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1899 	  DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1900 	  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1901 	    {
1902 	      DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1903 	      DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1904 	    }
1905 	}
1906 
1907       /* Merge the section attribute.
1908 	 We want to issue an error if the sections conflict but that must be
1909 	 done later in decl_attributes since we are called before attributes
1910 	 are assigned.  */
1911       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1912 	DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1913 
1914       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1915 	{
1916 	  DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1917 	    |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1918 	  DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1919 	  TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1920 	  TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1921 	  DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1922 	  DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1923 	  DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1924 	  TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1925 	  DECL_LOOPING_CONST_OR_PURE_P (newdecl)
1926 	    |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1927 	  /* Keep the old RTL.  */
1928 	  COPY_DECL_RTL (olddecl, newdecl);
1929 	}
1930       else if (TREE_CODE (newdecl) == VAR_DECL
1931 	       && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1932 	{
1933 	  /* Keep the old RTL.  We cannot keep the old RTL if the old
1934 	     declaration was for an incomplete object and the new
1935 	     declaration is not since many attributes of the RTL will
1936 	     change.  */
1937 	  COPY_DECL_RTL (olddecl, newdecl);
1938 	}
1939     }
1940   /* If cannot merge, then use the new type and qualifiers,
1941      and don't preserve the old rtl.  */
1942   else
1943     {
1944       /* Clean out any memory we had of the old declaration.  */
1945       tree oldstatic = value_member (olddecl, static_aggregates);
1946       if (oldstatic)
1947 	TREE_VALUE (oldstatic) = error_mark_node;
1948 
1949       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1950       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1951       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1952       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1953     }
1954 
1955   /* Merge the storage class information.  */
1956   merge_weak (newdecl, olddecl);
1957 
1958   if (DECL_ONE_ONLY (olddecl))
1959     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1960 
1961   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1962   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1963   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1964   if (! DECL_EXTERNAL (olddecl))
1965     DECL_EXTERNAL (newdecl) = 0;
1966 
1967   new_template_info = NULL_TREE;
1968   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1969     {
1970       bool new_redefines_gnu_inline = false;
1971 
1972       if (new_defines_function
1973 	  && ((DECL_INTERFACE_KNOWN (olddecl)
1974 	       && TREE_CODE (olddecl) == FUNCTION_DECL)
1975 	      || (TREE_CODE (olddecl) == TEMPLATE_DECL
1976 		  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1977 		      == FUNCTION_DECL))))
1978 	{
1979 	  tree fn = olddecl;
1980 
1981 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
1982 	    fn = DECL_TEMPLATE_RESULT (olddecl);
1983 
1984 	  new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1985 	}
1986 
1987       if (!new_redefines_gnu_inline)
1988 	{
1989 	  DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1990 	  DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1991 	  DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1992 	}
1993       DECL_TEMPLATE_INSTANTIATED (newdecl)
1994 	|= DECL_TEMPLATE_INSTANTIATED (olddecl);
1995       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1996 
1997       /* If the OLDDECL is an instantiation and/or specialization,
1998 	 then the NEWDECL must be too.  But, it may not yet be marked
1999 	 as such if the caller has created NEWDECL, but has not yet
2000 	 figured out that it is a redeclaration.  */
2001       if (!DECL_USE_TEMPLATE (newdecl))
2002 	DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2003 
2004       /* Don't really know how much of the language-specific
2005 	 values we should copy from old to new.  */
2006       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2007       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2008       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2009 	|= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2010 
2011       if (LANG_DECL_HAS_MIN (newdecl))
2012 	{
2013 	  DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2014 	    DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2015 	  if (DECL_TEMPLATE_INFO (newdecl))
2016 	    new_template_info = DECL_TEMPLATE_INFO (newdecl);
2017 	  DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2018 	}
2019       /* Only functions have these fields.  */
2020       if (TREE_CODE (newdecl) == FUNCTION_DECL
2021 	  || DECL_FUNCTION_TEMPLATE_P (newdecl))
2022 	{
2023 	  DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2024 	  olddecl_friend = DECL_FRIEND_P (olddecl);
2025 	  hidden_friend = (DECL_ANTICIPATED (olddecl)
2026 			   && DECL_HIDDEN_FRIEND_P (olddecl)
2027 			   && newdecl_is_friend);
2028 	  DECL_BEFRIENDING_CLASSES (newdecl)
2029 	    = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2030 		       DECL_BEFRIENDING_CLASSES (olddecl));
2031 	  /* DECL_THUNKS is only valid for virtual functions,
2032 	     otherwise it is a DECL_FRIEND_CONTEXT.  */
2033 	  if (DECL_VIRTUAL_P (newdecl))
2034 	    DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2035 	}
2036       /* Only variables have this field.  */
2037       else if (TREE_CODE (newdecl) == VAR_DECL
2038 	       && VAR_HAD_UNKNOWN_BOUND (olddecl))
2039 	SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2040     }
2041 
2042   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2043     {
2044       tree parm;
2045 
2046       /* Merge parameter attributes. */
2047       tree oldarg, newarg;
2048       for (oldarg = DECL_ARGUMENTS(olddecl),
2049                newarg = DECL_ARGUMENTS(newdecl);
2050            oldarg && newarg;
2051            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2052           DECL_ATTRIBUTES (newarg)
2053               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2054           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2055       }
2056 
2057       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2058 	  && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2059 	{
2060 	  /* If newdecl is not a specialization, then it is not a
2061 	     template-related function at all.  And that means that we
2062 	     should have exited above, returning 0.  */
2063 	  gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2064 
2065 	  if (DECL_ODR_USED (olddecl))
2066 	    /* From [temp.expl.spec]:
2067 
2068 	       If a template, a member template or the member of a class
2069 	       template is explicitly specialized then that
2070 	       specialization shall be declared before the first use of
2071 	       that specialization that would cause an implicit
2072 	       instantiation to take place, in every translation unit in
2073 	       which such a use occurs.  */
2074 	    error ("explicit specialization of %qD after first use",
2075 		      olddecl);
2076 
2077 	  SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2078 
2079 	  /* Don't propagate visibility from the template to the
2080 	     specialization here.  We'll do that in determine_visibility if
2081 	     appropriate.  */
2082 	  DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2083 
2084 	  /* [temp.expl.spec/14] We don't inline explicit specialization
2085 	     just because the primary template says so.  */
2086 
2087 	  /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2088 	     the always_inline attribute.  */
2089 	  if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090 	      && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2091 	    {
2092 	      if (DECL_DECLARED_INLINE_P (newdecl))
2093 		DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2094 	      else
2095 		DECL_ATTRIBUTES (newdecl)
2096 		  = remove_attribute ("always_inline",
2097 				      DECL_ATTRIBUTES (newdecl));
2098 	    }
2099 	}
2100       else if (new_defines_function && DECL_INITIAL (olddecl))
2101 	{
2102 	  /* Never inline re-defined extern inline functions.
2103 	     FIXME: this could be better handled by keeping both
2104 	     function as separate declarations.  */
2105 	  DECL_UNINLINABLE (newdecl) = 1;
2106 	}
2107       else
2108 	{
2109 	  if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2110 	    DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2111 
2112 	  DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2113 
2114 	  DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2115 	    = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2116 
2117 	  DECL_DISREGARD_INLINE_LIMITS (newdecl)
2118 	    = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2119 	    = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2120 	       || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2121 	}
2122 
2123       /* Preserve abstractness on cloned [cd]tors.  */
2124       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2125 
2126       /* Update newdecl's parms to point at olddecl.  */
2127       for (parm = DECL_ARGUMENTS (newdecl); parm;
2128 	   parm = DECL_CHAIN (parm))
2129 	DECL_CONTEXT (parm) = olddecl;
2130 
2131       if (! types_match)
2132 	{
2133 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2134 	  COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2135 	  COPY_DECL_RTL (newdecl, olddecl);
2136 	}
2137       if (! types_match || new_defines_function)
2138 	{
2139 	  /* These need to be copied so that the names are available.
2140 	     Note that if the types do match, we'll preserve inline
2141 	     info and other bits, but if not, we won't.  */
2142 	  DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2143 	  DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2144 	}
2145       if (new_defines_function)
2146 	/* If defining a function declared with other language
2147 	   linkage, use the previously declared language linkage.  */
2148 	SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2149       else if (types_match)
2150 	{
2151 	  /* If redeclaring a builtin function, and not a definition,
2152 	     it stays built in.  */
2153 	  if (DECL_BUILT_IN (olddecl))
2154 	    {
2155 	      DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2156 	      DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2157 	      /* If we're keeping the built-in definition, keep the rtl,
2158 		 regardless of declaration matches.  */
2159 	      COPY_DECL_RTL (olddecl, newdecl);
2160 	      if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2161 		{
2162 		  enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2163 		  switch (fncode)
2164 		    {
2165 		      /* If a compatible prototype of these builtin functions
2166 			 is seen, assume the runtime implements it with the
2167 			 expected semantics.  */
2168 		    case BUILT_IN_STPCPY:
2169 		      if (builtin_decl_explicit_p (fncode))
2170 			set_builtin_decl_implicit_p (fncode, true);
2171 		      break;
2172 		    default:
2173 		      break;
2174 		    }
2175 		}
2176 	    }
2177 
2178 	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2179 	  /* Don't clear out the arguments if we're just redeclaring a
2180 	     function.  */
2181 	  if (DECL_ARGUMENTS (olddecl))
2182 	    DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2183 	}
2184     }
2185   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2186     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2187 
2188   /* Now preserve various other info from the definition.  */
2189   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2190   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2191   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2192   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2193 
2194   /* Warn about conflicting visibility specifications.  */
2195   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2196       && DECL_VISIBILITY_SPECIFIED (newdecl)
2197       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2198     {
2199       warning_at (input_location, OPT_Wattributes,
2200 		  "%q+D: visibility attribute ignored because it", newdecl);
2201       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2202 		  "conflicts with previous declaration here");
2203     }
2204   /* Choose the declaration which specified visibility.  */
2205   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2206     {
2207       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2208       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2209     }
2210   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2211      so keep this behavior.  */
2212   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2213     {
2214       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2215       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2216     }
2217   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2218   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2219     {
2220       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2221       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2222     }
2223   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2224   if (TREE_CODE (newdecl) == FIELD_DECL)
2225     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2226 
2227   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2228      with that from NEWDECL below.  */
2229   if (DECL_LANG_SPECIFIC (olddecl))
2230     {
2231       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2232 		  != DECL_LANG_SPECIFIC (newdecl));
2233       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2234     }
2235 
2236   /* Merge the USED information.  */
2237   if (TREE_USED (olddecl))
2238     TREE_USED (newdecl) = 1;
2239   else if (TREE_USED (newdecl))
2240     TREE_USED (olddecl) = 1;
2241   if (TREE_CODE (newdecl) == VAR_DECL)
2242     {
2243       if (DECL_READ_P (olddecl))
2244 	DECL_READ_P (newdecl) = 1;
2245       else if (DECL_READ_P (newdecl))
2246 	DECL_READ_P (olddecl) = 1;
2247     }
2248   if (DECL_PRESERVE_P (olddecl))
2249     DECL_PRESERVE_P (newdecl) = 1;
2250   else if (DECL_PRESERVE_P (newdecl))
2251     DECL_PRESERVE_P (olddecl) = 1;
2252 
2253   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2254     {
2255       int function_size;
2256 
2257       function_size = sizeof (struct tree_decl_common);
2258 
2259       memcpy ((char *) olddecl + sizeof (struct tree_common),
2260 	      (char *) newdecl + sizeof (struct tree_common),
2261 	      function_size - sizeof (struct tree_common));
2262 
2263       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2264 	      (char *) newdecl + sizeof (struct tree_decl_common),
2265 	      sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2266       if (new_template_info)
2267 	/* If newdecl is a template instantiation, it is possible that
2268 	   the following sequence of events has occurred:
2269 
2270 	   o A friend function was declared in a class template.  The
2271 	   class template was instantiated.
2272 
2273 	   o The instantiation of the friend declaration was
2274 	   recorded on the instantiation list, and is newdecl.
2275 
2276 	   o Later, however, instantiate_class_template called pushdecl
2277 	   on the newdecl to perform name injection.  But, pushdecl in
2278 	   turn called duplicate_decls when it discovered that another
2279 	   declaration of a global function with the same name already
2280 	   existed.
2281 
2282 	   o Here, in duplicate_decls, we decided to clobber newdecl.
2283 
2284 	   If we're going to do that, we'd better make sure that
2285 	   olddecl, and not newdecl, is on the list of
2286 	   instantiations so that if we try to do the instantiation
2287 	   again we won't get the clobbered declaration.  */
2288 	reregister_specialization (newdecl,
2289 				   new_template_info,
2290 				   olddecl);
2291     }
2292   else
2293     {
2294       size_t size = tree_code_size (TREE_CODE (olddecl));
2295       memcpy ((char *) olddecl + sizeof (struct tree_common),
2296 	      (char *) newdecl + sizeof (struct tree_common),
2297 	      sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2298       switch (TREE_CODE (olddecl))
2299 	{
2300 	case LABEL_DECL:
2301 	case VAR_DECL:
2302 	case RESULT_DECL:
2303 	case PARM_DECL:
2304 	case FIELD_DECL:
2305 	case TYPE_DECL:
2306 	case CONST_DECL:
2307 	  {
2308 	    memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2309 		    (char *) newdecl + sizeof (struct tree_decl_common),
2310 		    size - sizeof (struct tree_decl_common)
2311 		    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2312 	  }
2313 	  break;
2314 	default:
2315 	  memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2316 		  (char *) newdecl + sizeof (struct tree_decl_common),
2317 		  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2318 		  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2319 	  break;
2320 	}
2321     }
2322   DECL_UID (olddecl) = olddecl_uid;
2323   if (olddecl_friend)
2324     DECL_FRIEND_P (olddecl) = 1;
2325   if (hidden_friend)
2326     {
2327       DECL_ANTICIPATED (olddecl) = 1;
2328       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2329     }
2330 
2331   /* NEWDECL contains the merged attribute lists.
2332      Update OLDDECL to be the same.  */
2333   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2334 
2335   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2336     so that encode_section_info has a chance to look at the new decl
2337     flags and attributes.  */
2338   if (DECL_RTL_SET_P (olddecl)
2339       && (TREE_CODE (olddecl) == FUNCTION_DECL
2340 	  || (TREE_CODE (olddecl) == VAR_DECL
2341 	      && TREE_STATIC (olddecl))))
2342     make_decl_rtl (olddecl);
2343 
2344   /* The NEWDECL will no longer be needed.  Because every out-of-class
2345      declaration of a member results in a call to duplicate_decls,
2346      freeing these nodes represents in a significant savings.  */
2347   ggc_free (newdecl);
2348 
2349   return olddecl;
2350 }
2351 
2352 /* Return zero if the declaration NEWDECL is valid
2353    when the declaration OLDDECL (assumed to be for the same name)
2354    has already been seen.
2355    Otherwise return an error message format string with a %s
2356    where the identifier should go.  */
2357 
2358 static const char *
2359 redeclaration_error_message (tree newdecl, tree olddecl)
2360 {
2361   if (TREE_CODE (newdecl) == TYPE_DECL)
2362     {
2363       /* Because C++ can put things into name space for free,
2364 	 constructs like "typedef struct foo { ... } foo"
2365 	 would look like an erroneous redeclaration.  */
2366       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2367 	return NULL;
2368       else
2369 	return G_("redefinition of %q#D");
2370     }
2371   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2372     {
2373       /* If this is a pure function, its olddecl will actually be
2374 	 the original initialization to `0' (which we force to call
2375 	 abort()).  Don't complain about redefinition in this case.  */
2376       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2377 	  && DECL_INITIAL (olddecl) == NULL_TREE)
2378 	return NULL;
2379 
2380       /* If both functions come from different namespaces, this is not
2381 	 a redeclaration - this is a conflict with a used function.  */
2382       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2383 	  && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2384 	  && ! decls_match (olddecl, newdecl))
2385 	return G_("%qD conflicts with used function");
2386 
2387       /* We'll complain about linkage mismatches in
2388 	 warn_extern_redeclared_static.  */
2389 
2390       /* Defining the same name twice is no good.  */
2391       if (DECL_INITIAL (olddecl) != NULL_TREE
2392 	  && DECL_INITIAL (newdecl) != NULL_TREE)
2393 	{
2394 	  if (DECL_NAME (olddecl) == NULL_TREE)
2395 	    return G_("%q#D not declared in class");
2396 	  else if (!GNU_INLINE_P (olddecl)
2397 		   || GNU_INLINE_P (newdecl))
2398 	    return G_("redefinition of %q#D");
2399 	}
2400 
2401       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2402 	{
2403 	  bool olda = GNU_INLINE_P (olddecl);
2404 	  bool newa = GNU_INLINE_P (newdecl);
2405 
2406 	  if (olda != newa)
2407 	    {
2408 	      if (newa)
2409 		return G_("%q+D redeclared inline with "
2410 			  "%<gnu_inline%> attribute");
2411 	      else
2412 		return G_("%q+D redeclared inline without "
2413 			  "%<gnu_inline%> attribute");
2414 	    }
2415 	}
2416 
2417       return NULL;
2418     }
2419   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2420     {
2421       tree nt, ot;
2422 
2423       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2424 	{
2425 	  if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2426 	      && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2427 	    return G_("redefinition of %q#D");
2428 	  return NULL;
2429 	}
2430 
2431       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2432 	  || (DECL_TEMPLATE_RESULT (newdecl)
2433 	      == DECL_TEMPLATE_RESULT (olddecl)))
2434 	return NULL;
2435 
2436       nt = DECL_TEMPLATE_RESULT (newdecl);
2437       if (DECL_TEMPLATE_INFO (nt))
2438 	nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2439       ot = DECL_TEMPLATE_RESULT (olddecl);
2440       if (DECL_TEMPLATE_INFO (ot))
2441 	ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2442       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2443 	  && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2444 	return G_("redefinition of %q#D");
2445 
2446       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2447 	{
2448 	  bool olda = GNU_INLINE_P (ot);
2449 	  bool newa = GNU_INLINE_P (nt);
2450 
2451 	  if (olda != newa)
2452 	    {
2453 	      if (newa)
2454 		return G_("%q+D redeclared inline with "
2455 			  "%<gnu_inline%> attribute");
2456 	      else
2457 		return G_("%q+D redeclared inline without "
2458 		     	  "%<gnu_inline%> attribute");
2459 	    }
2460 	}
2461 
2462       /* Core issue #226 (C++0x):
2463 
2464            If a friend function template declaration specifies a
2465            default template-argument, that declaration shall be a
2466            definition and shall be the only declaration of the
2467            function template in the translation unit.  */
2468       if ((cxx_dialect != cxx98)
2469           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2470           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2471                                        /*is_primary=*/1, /*is_partial=*/0,
2472                                        /*is_friend_decl=*/2))
2473         return G_("redeclaration of friend %q#D "
2474 	 	  "may not have default template arguments");
2475 
2476       return NULL;
2477     }
2478   else if (TREE_CODE (newdecl) == VAR_DECL
2479 	   && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2480 	   && (! DECL_LANG_SPECIFIC (olddecl)
2481 	       || ! CP_DECL_THREADPRIVATE_P (olddecl)
2482 	       || DECL_THREAD_LOCAL_P (newdecl)))
2483     {
2484       /* Only variables can be thread-local, and all declarations must
2485 	 agree on this property.  */
2486       if (DECL_THREAD_LOCAL_P (newdecl))
2487 	return G_("thread-local declaration of %q#D follows "
2488 	          "non-thread-local declaration");
2489       else
2490 	return G_("non-thread-local declaration of %q#D follows "
2491 	          "thread-local declaration");
2492     }
2493   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2494     {
2495       /* The objects have been declared at namespace scope.  If either
2496 	 is a member of an anonymous union, then this is an invalid
2497 	 redeclaration.  For example:
2498 
2499 	   int i;
2500 	   union { int i; };
2501 
2502 	   is invalid.  */
2503       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2504 	  || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2505 	return G_("redeclaration of %q#D");
2506       /* If at least one declaration is a reference, there is no
2507 	 conflict.  For example:
2508 
2509 	   int i = 3;
2510 	   extern int i;
2511 
2512 	 is valid.  */
2513       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2514 	return NULL;
2515       /* Reject two definitions.  */
2516       return G_("redefinition of %q#D");
2517     }
2518   else
2519     {
2520       /* Objects declared with block scope:  */
2521       /* Reject two definitions, and reject a definition
2522 	 together with an external reference.  */
2523       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2524 	return G_("redeclaration of %q#D");
2525       return NULL;
2526     }
2527 }
2528 
2529 /* Hash and equality functions for the named_label table.  */
2530 
2531 static hashval_t
2532 named_label_entry_hash (const void *data)
2533 {
2534   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2535   return DECL_UID (ent->label_decl);
2536 }
2537 
2538 static int
2539 named_label_entry_eq (const void *a, const void *b)
2540 {
2541   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2542   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2543   return ent_a->label_decl == ent_b->label_decl;
2544 }
2545 
2546 /* Create a new label, named ID.  */
2547 
2548 static tree
2549 make_label_decl (tree id, int local_p)
2550 {
2551   struct named_label_entry *ent;
2552   void **slot;
2553   tree decl;
2554 
2555   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2556 
2557   DECL_CONTEXT (decl) = current_function_decl;
2558   DECL_MODE (decl) = VOIDmode;
2559   C_DECLARED_LABEL_FLAG (decl) = local_p;
2560 
2561   /* Say where one reference is to the label, for the sake of the
2562      error if it is not defined.  */
2563   DECL_SOURCE_LOCATION (decl) = input_location;
2564 
2565   /* Record the fact that this identifier is bound to this label.  */
2566   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2567 
2568   /* Create the label htab for the function on demand.  */
2569   if (!named_labels)
2570     named_labels = htab_create_ggc (13, named_label_entry_hash,
2571 				    named_label_entry_eq, NULL);
2572 
2573   /* Record this label on the list of labels used in this function.
2574      We do this before calling make_label_decl so that we get the
2575      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2576   ent = ggc_alloc_cleared_named_label_entry ();
2577   ent->label_decl = decl;
2578 
2579   slot = htab_find_slot (named_labels, ent, INSERT);
2580   gcc_assert (*slot == NULL);
2581   *slot = ent;
2582 
2583   return decl;
2584 }
2585 
2586 /* Look for a label named ID in the current function.  If one cannot
2587    be found, create one.  (We keep track of used, but undefined,
2588    labels, and complain about them at the end of a function.)  */
2589 
2590 static tree
2591 lookup_label_1 (tree id)
2592 {
2593   tree decl;
2594 
2595   /* You can't use labels at global scope.  */
2596   if (current_function_decl == NULL_TREE)
2597     {
2598       error ("label %qE referenced outside of any function", id);
2599       return NULL_TREE;
2600     }
2601 
2602   /* See if we've already got this label.  */
2603   decl = IDENTIFIER_LABEL_VALUE (id);
2604   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2605     return decl;
2606 
2607   decl = make_label_decl (id, /*local_p=*/0);
2608   return decl;
2609 }
2610 
2611 /* Wrapper for lookup_label_1.  */
2612 
2613 tree
2614 lookup_label (tree id)
2615 {
2616   tree ret;
2617   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2618   ret = lookup_label_1 (id);
2619   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2620   return ret;
2621 }
2622 
2623 /* Declare a local label named ID.  */
2624 
2625 tree
2626 declare_local_label (tree id)
2627 {
2628   tree decl;
2629   cp_label_binding *bind;
2630 
2631   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2632      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2633   bind = VEC_safe_push (cp_label_binding, gc,
2634 			current_binding_level->shadowed_labels, NULL);
2635   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2636 
2637   decl = make_label_decl (id, /*local_p=*/1);
2638   bind->label = decl;
2639 
2640   return decl;
2641 }
2642 
2643 /* Returns nonzero if it is ill-formed to jump past the declaration of
2644    DECL.  Returns 2 if it's also a real problem.  */
2645 
2646 static int
2647 decl_jump_unsafe (tree decl)
2648 {
2649   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2650      with automatic storage duration is not in scope to a point where it is
2651      in scope is ill-formed unless the variable has scalar type, class type
2652      with a trivial default constructor and a trivial destructor, a
2653      cv-qualified version of one of these types, or an array of one of the
2654      preceding types and is declared without an initializer (8.5).  */
2655   tree type = TREE_TYPE (decl);
2656 
2657   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2658       || type == error_mark_node)
2659     return 0;
2660 
2661   type = strip_array_types (type);
2662 
2663   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2664       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2665     return 2;
2666 
2667   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2668     return 1;
2669 
2670   return 0;
2671 }
2672 
2673 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2674 
2675 static void
2676 identify_goto (tree decl, const location_t *locus)
2677 {
2678   if (decl)
2679     permerror (input_location, "jump to label %qD", decl);
2680   else
2681     permerror (input_location, "jump to case label");
2682   if (locus)
2683     permerror (*locus, "  from here");
2684 }
2685 
2686 /* Check that a single previously seen jump to a newly defined label
2687    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2688    the jump context; NAMES are the names in scope in LEVEL at the jump
2689    context; LOCUS is the source position of the jump or 0.  Returns
2690    true if all is well.  */
2691 
2692 static bool
2693 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2694 		       bool exited_omp, const location_t *locus)
2695 {
2696   cp_binding_level *b;
2697   bool identified = false, saw_eh = false, saw_omp = false;
2698 
2699   if (exited_omp)
2700     {
2701       identify_goto (decl, locus);
2702       error ("  exits OpenMP structured block");
2703       identified = saw_omp = true;
2704     }
2705 
2706   for (b = current_binding_level; b ; b = b->level_chain)
2707     {
2708       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2709 
2710       for (new_decls = b->names; new_decls != old_decls;
2711 	   new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2712 			: TREE_CHAIN (new_decls)))
2713 	{
2714 	  int problem = decl_jump_unsafe (new_decls);
2715 	  if (! problem)
2716 	    continue;
2717 
2718 	  if (!identified)
2719 	    {
2720 	      identify_goto (decl, locus);
2721 	      identified = true;
2722 	    }
2723 	  if (problem > 1)
2724 	    error ("  crosses initialization of %q+#D", new_decls);
2725 	  else
2726 	    permerror (input_location, "  enters scope of %q+#D which has "
2727 		       "non-trivial destructor", new_decls);
2728 	}
2729 
2730       if (b == level)
2731 	break;
2732       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2733 	{
2734 	  if (!identified)
2735 	    {
2736 	      identify_goto (decl, locus);
2737 	      identified = true;
2738 	    }
2739 	  if (b->kind == sk_try)
2740 	    error ("  enters try block");
2741 	  else
2742 	    error ("  enters catch block");
2743 	  saw_eh = true;
2744 	}
2745       if (b->kind == sk_omp && !saw_omp)
2746 	{
2747 	  if (!identified)
2748 	    {
2749 	      identify_goto (decl, locus);
2750 	      identified = true;
2751 	    }
2752 	  error ("  enters OpenMP structured block");
2753 	  saw_omp = true;
2754 	}
2755     }
2756 
2757   return !identified;
2758 }
2759 
2760 static void
2761 check_previous_goto (tree decl, struct named_label_use_entry *use)
2762 {
2763   check_previous_goto_1 (decl, use->binding_level,
2764 			 use->names_in_scope, use->in_omp_scope,
2765 			 &use->o_goto_locus);
2766 }
2767 
2768 static bool
2769 check_switch_goto (cp_binding_level* level)
2770 {
2771   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2772 }
2773 
2774 /* Check that a new jump to a label DECL is OK.  Called by
2775    finish_goto_stmt.  */
2776 
2777 void
2778 check_goto (tree decl)
2779 {
2780   struct named_label_entry *ent, dummy;
2781   bool saw_catch = false, identified = false;
2782   tree bad;
2783   unsigned ix;
2784 
2785   /* We can't know where a computed goto is jumping.
2786      So we assume that it's OK.  */
2787   if (TREE_CODE (decl) != LABEL_DECL)
2788     return;
2789 
2790   /* We didn't record any information about this label when we created it,
2791      and there's not much point since it's trivial to analyze as a return.  */
2792   if (decl == cdtor_label)
2793     return;
2794 
2795   dummy.label_decl = decl;
2796   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2797   gcc_assert (ent != NULL);
2798 
2799   /* If the label hasn't been defined yet, defer checking.  */
2800   if (! DECL_INITIAL (decl))
2801     {
2802       struct named_label_use_entry *new_use;
2803 
2804       /* Don't bother creating another use if the last goto had the
2805 	 same data, and will therefore create the same set of errors.  */
2806       if (ent->uses
2807 	  && ent->uses->names_in_scope == current_binding_level->names)
2808 	return;
2809 
2810       new_use = ggc_alloc_named_label_use_entry ();
2811       new_use->binding_level = current_binding_level;
2812       new_use->names_in_scope = current_binding_level->names;
2813       new_use->o_goto_locus = input_location;
2814       new_use->in_omp_scope = false;
2815 
2816       new_use->next = ent->uses;
2817       ent->uses = new_use;
2818       return;
2819     }
2820 
2821   if (ent->in_try_scope || ent->in_catch_scope
2822       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2823     {
2824       permerror (input_location, "jump to label %q+D", decl);
2825       permerror (input_location, "  from here");
2826       identified = true;
2827     }
2828 
2829   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2830     {
2831       int u = decl_jump_unsafe (bad);
2832 
2833       if (u > 1 && DECL_ARTIFICIAL (bad))
2834 	{
2835 	  /* Can't skip init of __exception_info.  */
2836 	  error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2837 	  saw_catch = true;
2838 	}
2839       else if (u > 1)
2840 	error ("  skips initialization of %q+#D", bad);
2841       else
2842 	permerror (input_location, "  enters scope of %q+#D which has "
2843 		   "non-trivial destructor", bad);
2844     }
2845 
2846   if (ent->in_try_scope)
2847     error ("  enters try block");
2848   else if (ent->in_catch_scope && !saw_catch)
2849     error ("  enters catch block");
2850 
2851   if (ent->in_omp_scope)
2852     error ("  enters OpenMP structured block");
2853   else if (flag_openmp)
2854     {
2855       cp_binding_level *b;
2856       for (b = current_binding_level; b ; b = b->level_chain)
2857 	{
2858 	  if (b == ent->binding_level)
2859 	    break;
2860 	  if (b->kind == sk_omp)
2861 	    {
2862 	      if (!identified)
2863 		{
2864 		  permerror (input_location, "jump to label %q+D", decl);
2865 		  permerror (input_location, "  from here");
2866 		  identified = true;
2867 		}
2868 	      error ("  exits OpenMP structured block");
2869 	      break;
2870 	    }
2871 	}
2872     }
2873 }
2874 
2875 /* Check that a return is ok wrt OpenMP structured blocks.
2876    Called by finish_return_stmt.  Returns true if all is well.  */
2877 
2878 bool
2879 check_omp_return (void)
2880 {
2881   cp_binding_level *b;
2882   for (b = current_binding_level; b ; b = b->level_chain)
2883     if (b->kind == sk_omp)
2884       {
2885 	error ("invalid exit from OpenMP structured block");
2886 	return false;
2887       }
2888     else if (b->kind == sk_function_parms)
2889       break;
2890   return true;
2891 }
2892 
2893 /* Define a label, specifying the location in the source file.
2894    Return the LABEL_DECL node for the label.  */
2895 
2896 static tree
2897 define_label_1 (location_t location, tree name)
2898 {
2899   struct named_label_entry *ent, dummy;
2900   cp_binding_level *p;
2901   tree decl;
2902 
2903   decl = lookup_label (name);
2904 
2905   dummy.label_decl = decl;
2906   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2907   gcc_assert (ent != NULL);
2908 
2909   /* After labels, make any new cleanups in the function go into their
2910      own new (temporary) binding contour.  */
2911   for (p = current_binding_level;
2912        p->kind != sk_function_parms;
2913        p = p->level_chain)
2914     p->more_cleanups_ok = 0;
2915 
2916   if (name == get_identifier ("wchar_t"))
2917     permerror (input_location, "label named wchar_t");
2918 
2919   if (DECL_INITIAL (decl) != NULL_TREE)
2920     {
2921       error ("duplicate label %qD", decl);
2922       return error_mark_node;
2923     }
2924   else
2925     {
2926       struct named_label_use_entry *use;
2927 
2928       /* Mark label as having been defined.  */
2929       DECL_INITIAL (decl) = error_mark_node;
2930       /* Say where in the source.  */
2931       DECL_SOURCE_LOCATION (decl) = location;
2932 
2933       ent->binding_level = current_binding_level;
2934       ent->names_in_scope = current_binding_level->names;
2935 
2936       for (use = ent->uses; use ; use = use->next)
2937 	check_previous_goto (decl, use);
2938       ent->uses = NULL;
2939     }
2940 
2941   return decl;
2942 }
2943 
2944 /* Wrapper for define_label_1.  */
2945 
2946 tree
2947 define_label (location_t location, tree name)
2948 {
2949   tree ret;
2950   bool running = timevar_cond_start (TV_NAME_LOOKUP);
2951   ret = define_label_1 (location, name);
2952   timevar_cond_stop (TV_NAME_LOOKUP, running);
2953   return ret;
2954 }
2955 
2956 
2957 struct cp_switch
2958 {
2959   cp_binding_level *level;
2960   struct cp_switch *next;
2961   /* The SWITCH_STMT being built.  */
2962   tree switch_stmt;
2963   /* A splay-tree mapping the low element of a case range to the high
2964      element, or NULL_TREE if there is no high element.  Used to
2965      determine whether or not a new case label duplicates an old case
2966      label.  We need a tree, rather than simply a hash table, because
2967      of the GNU case range extension.  */
2968   splay_tree cases;
2969 };
2970 
2971 /* A stack of the currently active switch statements.  The innermost
2972    switch statement is on the top of the stack.  There is no need to
2973    mark the stack for garbage collection because it is only active
2974    during the processing of the body of a function, and we never
2975    collect at that point.  */
2976 
2977 static struct cp_switch *switch_stack;
2978 
2979 /* Called right after a switch-statement condition is parsed.
2980    SWITCH_STMT is the switch statement being parsed.  */
2981 
2982 void
2983 push_switch (tree switch_stmt)
2984 {
2985   struct cp_switch *p = XNEW (struct cp_switch);
2986   p->level = current_binding_level;
2987   p->next = switch_stack;
2988   p->switch_stmt = switch_stmt;
2989   p->cases = splay_tree_new (case_compare, NULL, NULL);
2990   switch_stack = p;
2991 }
2992 
2993 void
2994 pop_switch (void)
2995 {
2996   struct cp_switch *cs = switch_stack;
2997   location_t switch_location;
2998 
2999   /* Emit warnings as needed.  */
3000   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3001   if (!processing_template_decl)
3002     c_do_switch_warnings (cs->cases, switch_location,
3003 			  SWITCH_STMT_TYPE (cs->switch_stmt),
3004 			  SWITCH_STMT_COND (cs->switch_stmt));
3005 
3006   splay_tree_delete (cs->cases);
3007   switch_stack = switch_stack->next;
3008   free (cs);
3009 }
3010 
3011 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3012    condition.  Note that if TYPE and VALUE are already integral we don't
3013    really do the conversion because the language-independent
3014    warning/optimization code will work better that way.  */
3015 
3016 static tree
3017 case_conversion (tree type, tree value)
3018 {
3019   if (value == NULL_TREE)
3020     return value;
3021 
3022   if (cxx_dialect >= cxx0x
3023       && (SCOPED_ENUM_P (type)
3024 	  || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3025     {
3026       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3027 	type = type_promotes_to (type);
3028       value = perform_implicit_conversion (type, value, tf_warning_or_error);
3029     }
3030   return cxx_constant_value (value);
3031 }
3032 
3033 /* Note that we've seen a definition of a case label, and complain if this
3034    is a bad place for one.  */
3035 
3036 tree
3037 finish_case_label (location_t loc, tree low_value, tree high_value)
3038 {
3039   tree cond, r;
3040   cp_binding_level *p;
3041   tree type;
3042 
3043   if (processing_template_decl)
3044     {
3045       tree label;
3046 
3047       /* For templates, just add the case label; we'll do semantic
3048 	 analysis at instantiation-time.  */
3049       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3050       return add_stmt (build_case_label (low_value, high_value, label));
3051     }
3052 
3053   /* Find the condition on which this switch statement depends.  */
3054   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3055   if (cond && TREE_CODE (cond) == TREE_LIST)
3056     cond = TREE_VALUE (cond);
3057 
3058   if (!check_switch_goto (switch_stack->level))
3059     return error_mark_node;
3060 
3061   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3062 
3063   low_value = case_conversion (type, low_value);
3064   high_value = case_conversion (type, high_value);
3065 
3066   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3067 			low_value, high_value);
3068 
3069   /* After labels, make any new cleanups in the function go into their
3070      own new (temporary) binding contour.  */
3071   for (p = current_binding_level;
3072        p->kind != sk_function_parms;
3073        p = p->level_chain)
3074     p->more_cleanups_ok = 0;
3075 
3076   return r;
3077 }
3078 
3079 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3080 
3081 static hashval_t
3082 typename_hash (const void* k)
3083 {
3084   hashval_t hash;
3085   const_tree const t = (const_tree) k;
3086 
3087   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3088 	  ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3089 
3090   return hash;
3091 }
3092 
3093 typedef struct typename_info {
3094   tree scope;
3095   tree name;
3096   tree template_id;
3097   bool enum_p;
3098   bool class_p;
3099 } typename_info;
3100 
3101 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3102    really of type `typename_info*'  */
3103 
3104 static int
3105 typename_compare (const void * k1, const void * k2)
3106 {
3107   const_tree const t1 = (const_tree) k1;
3108   const typename_info *const t2 = (const typename_info *) k2;
3109 
3110   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3111 	  && TYPE_CONTEXT (t1) == t2->scope
3112 	  && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3113 	  && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3114 	  && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3115 }
3116 
3117 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3118    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3119 
3120    Returns the new TYPENAME_TYPE.  */
3121 
3122 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3123 
3124 static tree
3125 build_typename_type (tree context, tree name, tree fullname,
3126 		     enum tag_types tag_type)
3127 {
3128   tree t;
3129   tree d;
3130   typename_info ti;
3131   void **e;
3132   hashval_t hash;
3133 
3134   if (typename_htab == NULL)
3135     typename_htab = htab_create_ggc (61, &typename_hash,
3136 				     &typename_compare, NULL);
3137 
3138   ti.scope = FROB_CONTEXT (context);
3139   ti.name = name;
3140   ti.template_id = fullname;
3141   ti.enum_p = tag_type == enum_type;
3142   ti.class_p = (tag_type == class_type
3143 		|| tag_type == record_type
3144 		|| tag_type == union_type);
3145   hash =  (htab_hash_pointer (ti.scope)
3146 	   ^ htab_hash_pointer (ti.name));
3147 
3148   /* See if we already have this type.  */
3149   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3150   if (*e)
3151     t = (tree) *e;
3152   else
3153     {
3154       /* Build the TYPENAME_TYPE.  */
3155       t = cxx_make_type (TYPENAME_TYPE);
3156       TYPE_CONTEXT (t) = ti.scope;
3157       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3158       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3159       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3160 
3161       /* Build the corresponding TYPE_DECL.  */
3162       d = build_decl (input_location, TYPE_DECL, name, t);
3163       TYPE_NAME (TREE_TYPE (d)) = d;
3164       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3165       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3166       DECL_ARTIFICIAL (d) = 1;
3167 
3168       /* Store it in the hash table.  */
3169       *e = t;
3170 
3171       /* TYPENAME_TYPEs must always be compared structurally, because
3172 	 they may or may not resolve down to another type depending on
3173 	 the currently open classes. */
3174       SET_TYPE_STRUCTURAL_EQUALITY (t);
3175     }
3176 
3177   return t;
3178 }
3179 
3180 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3181    provided to name the type.  Returns an appropriate type, unless an
3182    error occurs, in which case error_mark_node is returned.  If we
3183    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3184    return that, rather than the _TYPE it corresponds to, in other
3185    cases we look through the type decl.  If TF_ERROR is set, complain
3186    about errors, otherwise be quiet.  */
3187 
3188 tree
3189 make_typename_type (tree context, tree name, enum tag_types tag_type,
3190 		    tsubst_flags_t complain)
3191 {
3192   tree fullname;
3193   tree t;
3194   bool want_template;
3195 
3196   if (name == error_mark_node
3197       || context == NULL_TREE
3198       || context == error_mark_node)
3199     return error_mark_node;
3200 
3201   if (TYPE_P (name))
3202     {
3203       if (!(TYPE_LANG_SPECIFIC (name)
3204 	    && (CLASSTYPE_IS_TEMPLATE (name)
3205 		|| CLASSTYPE_USE_TEMPLATE (name))))
3206 	name = TYPE_IDENTIFIER (name);
3207       else
3208 	/* Create a TEMPLATE_ID_EXPR for the type.  */
3209 	name = build_nt (TEMPLATE_ID_EXPR,
3210 			 CLASSTYPE_TI_TEMPLATE (name),
3211 			 CLASSTYPE_TI_ARGS (name));
3212     }
3213   else if (TREE_CODE (name) == TYPE_DECL)
3214     name = DECL_NAME (name);
3215 
3216   fullname = name;
3217 
3218   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3219     {
3220       name = TREE_OPERAND (name, 0);
3221       if (TREE_CODE (name) == TEMPLATE_DECL)
3222 	name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3223       else if (TREE_CODE (name) == OVERLOAD)
3224 	{
3225 	  error ("%qD is not a type", name);
3226 	  return error_mark_node;
3227 	}
3228     }
3229   if (TREE_CODE (name) == TEMPLATE_DECL)
3230     {
3231       error ("%qD used without template parameters", name);
3232       return error_mark_node;
3233     }
3234   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3235   gcc_assert (TYPE_P (context));
3236 
3237   if (!MAYBE_CLASS_TYPE_P (context))
3238     {
3239       if (complain & tf_error)
3240 	error ("%q#T is not a class", context);
3241       return error_mark_node;
3242     }
3243 
3244   /* When the CONTEXT is a dependent type,  NAME could refer to a
3245      dependent base class of CONTEXT.  But look inside it anyway
3246      if CONTEXT is a currently open scope, in case it refers to a
3247      member of the current instantiation or a non-dependent base;
3248      lookup will stop when we hit a dependent base.  */
3249   if (!dependent_scope_p (context))
3250     /* We should only set WANT_TYPE when we're a nested typename type.
3251        Then we can give better diagnostics if we find a non-type.  */
3252     t = lookup_field (context, name, 2, /*want_type=*/true);
3253   else
3254     t = NULL_TREE;
3255 
3256   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3257     return build_typename_type (context, name, fullname, tag_type);
3258 
3259   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3260 
3261   if (!t)
3262     {
3263       if (complain & tf_error)
3264 	error (want_template ? G_("no class template named %q#T in %q#T")
3265 	       : G_("no type named %q#T in %q#T"), name, context);
3266       return error_mark_node;
3267     }
3268 
3269   /* Pull out the template from an injected-class-name (or multiple).  */
3270   if (want_template)
3271     t = maybe_get_template_decl_from_type_decl (t);
3272 
3273   if (TREE_CODE (t) == TREE_LIST)
3274     {
3275       if (complain & tf_error)
3276 	{
3277 	  error ("lookup of %qT in %qT is ambiguous", name, context);
3278 	  print_candidates (t);
3279 	}
3280       return error_mark_node;
3281     }
3282 
3283   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3284     {
3285       if (complain & tf_error)
3286 	error ("%<typename %T::%D%> names %q#T, which is not a class template",
3287 	       context, name, t);
3288       return error_mark_node;
3289     }
3290   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3291     {
3292       if (complain & tf_error)
3293 	error ("%<typename %T::%D%> names %q#T, which is not a type",
3294 	       context, name, t);
3295       return error_mark_node;
3296     }
3297 
3298   if (complain & tf_error)
3299     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3300 
3301   /* If we are currently parsing a template and if T is a typedef accessed
3302      through CONTEXT then we need to remember and check access of T at
3303      template instantiation time.  */
3304   add_typedef_to_current_template_for_access_check (t, context, input_location);
3305 
3306   if (want_template)
3307     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3308 				  NULL_TREE, context,
3309 				  /*entering_scope=*/0,
3310 				  tf_warning_or_error | tf_user);
3311 
3312   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3313     t = TREE_TYPE (t);
3314 
3315   return t;
3316 }
3317 
3318 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3319    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3320    in which case error_mark_node is returned.
3321 
3322    If PARM_LIST is non-NULL, also make sure that the template parameter
3323    list of TEMPLATE_DECL matches.
3324 
3325    If COMPLAIN zero, don't complain about any errors that occur.  */
3326 
3327 tree
3328 make_unbound_class_template (tree context, tree name, tree parm_list,
3329 			     tsubst_flags_t complain)
3330 {
3331   tree t;
3332   tree d;
3333 
3334   if (TYPE_P (name))
3335     name = TYPE_IDENTIFIER (name);
3336   else if (DECL_P (name))
3337     name = DECL_NAME (name);
3338   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3339 
3340   if (!dependent_type_p (context)
3341       || currently_open_class (context))
3342     {
3343       tree tmpl = NULL_TREE;
3344 
3345       if (MAYBE_CLASS_TYPE_P (context))
3346 	tmpl = lookup_field (context, name, 0, false);
3347 
3348       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3349 	tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3350 
3351       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3352 	{
3353 	  if (complain & tf_error)
3354 	    error ("no class template named %q#T in %q#T", name, context);
3355 	  return error_mark_node;
3356 	}
3357 
3358       if (parm_list
3359 	  && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3360 	{
3361 	  if (complain & tf_error)
3362 	    {
3363 	      error ("template parameters do not match template");
3364 	      error ("%q+D declared here", tmpl);
3365 	    }
3366 	  return error_mark_node;
3367 	}
3368 
3369       if (complain & tf_error)
3370 	perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3371 
3372       return tmpl;
3373     }
3374 
3375   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3376   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3377   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3378   TREE_TYPE (t) = NULL_TREE;
3379   SET_TYPE_STRUCTURAL_EQUALITY (t);
3380 
3381   /* Build the corresponding TEMPLATE_DECL.  */
3382   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3383   TYPE_NAME (TREE_TYPE (d)) = d;
3384   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3385   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3386   DECL_ARTIFICIAL (d) = 1;
3387   DECL_TEMPLATE_PARMS (d) = parm_list;
3388 
3389   return t;
3390 }
3391 
3392 
3393 
3394 /* Push the declarations of builtin types into the namespace.
3395    RID_INDEX is the index of the builtin type in the array
3396    RID_POINTERS.  NAME is the name used when looking up the builtin
3397    type.  TYPE is the _TYPE node for the builtin type.  */
3398 
3399 void
3400 record_builtin_type (enum rid rid_index,
3401 		     const char* name,
3402 		     tree type)
3403 {
3404   tree rname = NULL_TREE, tname = NULL_TREE;
3405   tree tdecl = NULL_TREE;
3406 
3407   if ((int) rid_index < (int) RID_MAX)
3408     rname = ridpointers[(int) rid_index];
3409   if (name)
3410     tname = get_identifier (name);
3411 
3412   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3413      eliminated.  Built-in types should not be looked up name; their
3414      names are keywords that the parser can recognize.  However, there
3415      is code in c-common.c that uses identifier_global_value to look
3416      up built-in types by name.  */
3417   if (tname)
3418     {
3419       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3420       DECL_ARTIFICIAL (tdecl) = 1;
3421       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3422     }
3423   if (rname)
3424     {
3425       if (!tdecl)
3426 	{
3427 	  tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3428 	  DECL_ARTIFICIAL (tdecl) = 1;
3429 	}
3430       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3431     }
3432 
3433   if (!TYPE_NAME (type))
3434     TYPE_NAME (type) = tdecl;
3435 
3436   if (tdecl)
3437     debug_hooks->type_decl (tdecl, 0);
3438 }
3439 
3440 /* Record one of the standard Java types.
3441  * Declare it as having the given NAME.
3442  * If SIZE > 0, it is the size of one of the integral types;
3443  * otherwise it is the negative of the size of one of the other types.  */
3444 
3445 static tree
3446 record_builtin_java_type (const char* name, int size)
3447 {
3448   tree type, decl;
3449   if (size > 0)
3450     {
3451       type = build_nonstandard_integer_type (size, 0);
3452       type = build_distinct_type_copy (type);
3453     }
3454   else if (size > -32)
3455     {
3456       tree stype;
3457       /* "__java_char" or ""__java_boolean".  */
3458       type = build_nonstandard_integer_type (-size, 1);
3459       type = build_distinct_type_copy (type);
3460       /* Get the signed type cached and attached to the unsigned type,
3461 	 so it doesn't get garbage-collected at "random" times,
3462 	 causing potential codegen differences out of different UIDs
3463 	 and different alias set numbers.  */
3464       stype = build_nonstandard_integer_type (-size, 0);
3465       stype = build_distinct_type_copy (stype);
3466       TREE_CHAIN (type) = stype;
3467       /*if (size == -1)	TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3468     }
3469   else
3470     { /* "__java_float" or ""__java_double".  */
3471       type = make_node (REAL_TYPE);
3472       TYPE_PRECISION (type) = - size;
3473       layout_type (type);
3474     }
3475   record_builtin_type (RID_MAX, name, type);
3476   decl = TYPE_NAME (type);
3477 
3478   /* Suppress generate debug symbol entries for these types,
3479      since for normal C++ they are just clutter.
3480      However, push_lang_context undoes this if extern "Java" is seen.  */
3481   DECL_IGNORED_P (decl) = 1;
3482 
3483   TYPE_FOR_JAVA (type) = 1;
3484   return type;
3485 }
3486 
3487 /* Push a type into the namespace so that the back ends ignore it.  */
3488 
3489 static void
3490 record_unknown_type (tree type, const char* name)
3491 {
3492   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3493 				    TYPE_DECL, get_identifier (name), type));
3494   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3495   DECL_IGNORED_P (decl) = 1;
3496   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3497   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3498   TYPE_ALIGN (type) = 1;
3499   TYPE_USER_ALIGN (type) = 0;
3500   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3501 }
3502 
3503 /* A string for which we should create an IDENTIFIER_NODE at
3504    startup.  */
3505 
3506 typedef struct predefined_identifier
3507 {
3508   /* The name of the identifier.  */
3509   const char *const name;
3510   /* The place where the IDENTIFIER_NODE should be stored.  */
3511   tree *const node;
3512   /* Nonzero if this is the name of a constructor or destructor.  */
3513   const int ctor_or_dtor_p;
3514 } predefined_identifier;
3515 
3516 /* Create all the predefined identifiers.  */
3517 
3518 static void
3519 initialize_predefined_identifiers (void)
3520 {
3521   const predefined_identifier *pid;
3522 
3523   /* A table of identifiers to create at startup.  */
3524   static const predefined_identifier predefined_identifiers[] = {
3525     { "C++", &lang_name_cplusplus, 0 },
3526     { "C", &lang_name_c, 0 },
3527     { "Java", &lang_name_java, 0 },
3528     /* Some of these names have a trailing space so that it is
3529        impossible for them to conflict with names written by users.  */
3530     { "__ct ", &ctor_identifier, 1 },
3531     { "__base_ctor ", &base_ctor_identifier, 1 },
3532     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3533     { "__dt ", &dtor_identifier, 1 },
3534     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3535     { "__base_dtor ", &base_dtor_identifier, 1 },
3536     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3537     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3538     { "nelts", &nelts_identifier, 0 },
3539     { THIS_NAME, &this_identifier, 0 },
3540     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3541     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3542     { "_vptr", &vptr_identifier, 0 },
3543     { "__vtt_parm", &vtt_parm_identifier, 0 },
3544     { "::", &global_scope_name, 0 },
3545     { "std", &std_identifier, 0 },
3546     { NULL, NULL, 0 }
3547   };
3548 
3549   for (pid = predefined_identifiers; pid->name; ++pid)
3550     {
3551       *pid->node = get_identifier (pid->name);
3552       if (pid->ctor_or_dtor_p)
3553 	IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3554     }
3555 }
3556 
3557 /* Create the predefined scalar types of C,
3558    and some nodes representing standard constants (0, 1, (void *)0).
3559    Initialize the global binding level.
3560    Make definitions for built-in primitive functions.  */
3561 
3562 void
3563 cxx_init_decl_processing (void)
3564 {
3565   tree void_ftype;
3566   tree void_ftype_ptr;
3567 
3568   /* Create all the identifiers we need.  */
3569   initialize_predefined_identifiers ();
3570 
3571   /* Create the global variables.  */
3572   push_to_top_level ();
3573 
3574   current_function_decl = NULL_TREE;
3575   current_binding_level = NULL;
3576   /* Enter the global namespace.  */
3577   gcc_assert (global_namespace == NULL_TREE);
3578   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3579 				      void_type_node);
3580   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3581   TREE_PUBLIC (global_namespace) = 1;
3582   begin_scope (sk_namespace, global_namespace);
3583 
3584   if (flag_visibility_ms_compat)
3585     default_visibility = VISIBILITY_HIDDEN;
3586 
3587   /* Initially, C.  */
3588   current_lang_name = lang_name_c;
3589 
3590   /* Create the `std' namespace.  */
3591   push_namespace (std_identifier);
3592   std_node = current_namespace;
3593   pop_namespace ();
3594 
3595   c_common_nodes_and_builtins ();
3596 
3597   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3598   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3599   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3600   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3601   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3602   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3603   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3604   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3605 
3606   integer_two_node = build_int_cst (NULL_TREE, 2);
3607 
3608   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3609   truthvalue_type_node = boolean_type_node;
3610   truthvalue_false_node = boolean_false_node;
3611   truthvalue_true_node = boolean_true_node;
3612 
3613   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3614   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3615   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3616 
3617 #if 0
3618   record_builtin_type (RID_MAX, NULL, string_type_node);
3619 #endif
3620 
3621   delta_type_node = ptrdiff_type_node;
3622   vtable_index_type = ptrdiff_type_node;
3623 
3624   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3625   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3626   void_ftype_ptr = build_function_type_list (void_type_node,
3627 					     ptr_type_node, NULL_TREE);
3628   void_ftype_ptr
3629     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3630 
3631   /* C++ extensions */
3632 
3633   unknown_type_node = make_node (LANG_TYPE);
3634   record_unknown_type (unknown_type_node, "unknown type");
3635 
3636   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3637   TREE_TYPE (unknown_type_node) = unknown_type_node;
3638 
3639   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3640      result.  */
3641   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3642   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3643 
3644   init_list_type_node = make_node (LANG_TYPE);
3645   record_unknown_type (init_list_type_node, "init list");
3646 
3647   dependent_lambda_return_type_node = make_node (LANG_TYPE);
3648   record_unknown_type (dependent_lambda_return_type_node,
3649 		       "undeduced lambda return type");
3650 
3651   {
3652     /* Make sure we get a unique function type, so we can give
3653        its pointer type a name.  (This wins for gdb.) */
3654     tree vfunc_type = make_node (FUNCTION_TYPE);
3655     TREE_TYPE (vfunc_type) = integer_type_node;
3656     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3657     layout_type (vfunc_type);
3658 
3659     vtable_entry_type = build_pointer_type (vfunc_type);
3660   }
3661   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3662 
3663   vtbl_type_node
3664     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3665   layout_type (vtbl_type_node);
3666   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3667   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3668   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3669   layout_type (vtbl_ptr_type_node);
3670   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3671 
3672   push_namespace (get_identifier ("__cxxabiv1"));
3673   abi_node = current_namespace;
3674   pop_namespace ();
3675 
3676   global_type_node = make_node (LANG_TYPE);
3677   record_unknown_type (global_type_node, "global type");
3678 
3679   /* Now, C++.  */
3680   current_lang_name = lang_name_cplusplus;
3681 
3682   {
3683     tree newattrs, extvisattr;
3684     tree newtype, deltype;
3685     tree ptr_ftype_sizetype;
3686     tree new_eh_spec;
3687 
3688     ptr_ftype_sizetype
3689       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3690     if (cxx_dialect == cxx98)
3691       {
3692 	tree bad_alloc_id;
3693 	tree bad_alloc_type_node;
3694 	tree bad_alloc_decl;
3695 
3696 	push_namespace (std_identifier);
3697 	bad_alloc_id = get_identifier ("bad_alloc");
3698 	bad_alloc_type_node = make_class_type (RECORD_TYPE);
3699 	TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3700 	bad_alloc_decl
3701 	  = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3702 	DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3703 	pop_namespace ();
3704 
3705 	new_eh_spec
3706 	  = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3707       }
3708     else
3709       new_eh_spec = noexcept_false_spec;
3710 
3711     /* Ensure attribs.c is initialized.  */
3712     init_attributes ();
3713     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3714 				  NULL_TREE);
3715     newattrs = tree_cons (get_identifier ("alloc_size"),
3716 			  build_tree_list (NULL_TREE, integer_one_node),
3717 			  extvisattr);
3718     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3719     newtype = build_exception_variant (newtype, new_eh_spec);
3720     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3721     deltype = build_exception_variant (deltype, empty_except_spec);
3722     push_cp_library_fn (NEW_EXPR, newtype);
3723     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3724     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3725     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3726 
3727     nullptr_type_node = make_node (NULLPTR_TYPE);
3728     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3729     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3730     TYPE_UNSIGNED (nullptr_type_node) = 1;
3731     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3732     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3733     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3734     nullptr_node = build_int_cst (nullptr_type_node, 0);
3735   }
3736 
3737   abort_fndecl
3738     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3739 
3740   /* Perform other language dependent initializations.  */
3741   init_class_processing ();
3742   init_rtti_processing ();
3743   init_template_processing ();
3744 
3745   if (flag_exceptions)
3746     init_exception_processing ();
3747 
3748   if (! supports_one_only ())
3749     flag_weak = 0;
3750 
3751   make_fname_decl = cp_make_fname_decl;
3752   start_fname_decls ();
3753 
3754   /* Show we use EH for cleanups.  */
3755   if (flag_exceptions)
3756     using_eh_for_cleanups ();
3757 }
3758 
3759 /* Generate an initializer for a function naming variable from
3760    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3761    filled in with the type of the init.  */
3762 
3763 tree
3764 cp_fname_init (const char* name, tree *type_p)
3765 {
3766   tree domain = NULL_TREE;
3767   tree type;
3768   tree init = NULL_TREE;
3769   size_t length = 0;
3770 
3771   if (name)
3772     {
3773       length = strlen (name);
3774       domain = build_index_type (size_int (length));
3775       init = build_string (length + 1, name);
3776     }
3777 
3778   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3779   type = build_cplus_array_type (type, domain);
3780 
3781   *type_p = type;
3782 
3783   if (init)
3784     TREE_TYPE (init) = type;
3785   else
3786     init = error_mark_node;
3787 
3788   return init;
3789 }
3790 
3791 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3792    the decl, LOC is the location to give the decl, NAME is the
3793    initialization string and TYPE_DEP indicates whether NAME depended
3794    on the type of the function. We make use of that to detect
3795    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3796    at the point of first use, so we mustn't push the decl now.  */
3797 
3798 static tree
3799 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3800 {
3801   const char *const name = (type_dep && processing_template_decl
3802 			    ? NULL : fname_as_string (type_dep));
3803   tree type;
3804   tree init = cp_fname_init (name, &type);
3805   tree decl = build_decl (loc, VAR_DECL, id, type);
3806 
3807   if (name)
3808     free (CONST_CAST (char *, name));
3809 
3810   /* As we're using pushdecl_with_scope, we must set the context.  */
3811   DECL_CONTEXT (decl) = current_function_decl;
3812   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3813 
3814   TREE_STATIC (decl) = 1;
3815   TREE_READONLY (decl) = 1;
3816   DECL_ARTIFICIAL (decl) = 1;
3817 
3818   TREE_USED (decl) = 1;
3819 
3820   if (current_function_decl)
3821     {
3822       cp_binding_level *b = current_binding_level;
3823       if (b->kind == sk_function_parms)
3824 	return error_mark_node;
3825       while (b->level_chain->kind != sk_function_parms)
3826 	b = b->level_chain;
3827       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3828       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3829 		      LOOKUP_ONLYCONVERTING);
3830     }
3831   else
3832     {
3833       DECL_THIS_STATIC (decl) = true;
3834       pushdecl_top_level_and_finish (decl, init);
3835     }
3836 
3837   return decl;
3838 }
3839 
3840 static tree
3841 builtin_function_1 (tree decl, tree context, bool is_global)
3842 {
3843   tree          id = DECL_NAME (decl);
3844   const char *name = IDENTIFIER_POINTER (id);
3845 
3846   retrofit_lang_decl (decl);
3847 
3848   DECL_ARTIFICIAL (decl) = 1;
3849   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3850   SET_DECL_LANGUAGE (decl, lang_c);
3851   /* Runtime library routines are, by definition, available in an
3852      external shared object.  */
3853   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3854   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3855 
3856   DECL_CONTEXT (decl) = context;
3857 
3858   if (is_global)
3859     pushdecl_top_level (decl);
3860   else
3861     pushdecl (decl);
3862 
3863   /* A function in the user's namespace should have an explicit
3864      declaration before it is used.  Mark the built-in function as
3865      anticipated but not actually declared.  */
3866   if (name[0] != '_' || name[1] != '_')
3867     DECL_ANTICIPATED (decl) = 1;
3868   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3869     {
3870       size_t len = strlen (name);
3871 
3872       /* Treat __*_chk fortification functions as anticipated as well,
3873 	 unless they are __builtin_*.  */
3874       if (len > strlen ("___chk")
3875 	  && memcmp (name + len - strlen ("_chk"),
3876 		     "_chk", strlen ("_chk") + 1) == 0)
3877 	DECL_ANTICIPATED (decl) = 1;
3878     }
3879 
3880   return decl;
3881 }
3882 
3883 tree
3884 cxx_builtin_function (tree decl)
3885 {
3886   tree          id = DECL_NAME (decl);
3887   const char *name = IDENTIFIER_POINTER (id);
3888   /* All builtins that don't begin with an '_' should additionally
3889      go in the 'std' namespace.  */
3890   if (name[0] != '_')
3891     {
3892       tree decl2 = copy_node(decl);
3893       push_namespace (std_identifier);
3894       builtin_function_1 (decl2, std_node, false);
3895       pop_namespace ();
3896     }
3897 
3898   return builtin_function_1 (decl, NULL_TREE, false);
3899 }
3900 
3901 /* Like cxx_builtin_function, but guarantee the function is added to the global
3902    scope.  This is to allow function specific options to add new machine
3903    dependent builtins when the target ISA changes via attribute((target(...)))
3904    which saves space on program startup if the program does not use non-generic
3905    ISAs.  */
3906 
3907 tree
3908 cxx_builtin_function_ext_scope (tree decl)
3909 {
3910 
3911   tree          id = DECL_NAME (decl);
3912   const char *name = IDENTIFIER_POINTER (id);
3913   /* All builtins that don't begin with an '_' should additionally
3914      go in the 'std' namespace.  */
3915   if (name[0] != '_')
3916     {
3917       tree decl2 = copy_node(decl);
3918       push_namespace (std_identifier);
3919       builtin_function_1 (decl2, std_node, true);
3920       pop_namespace ();
3921     }
3922 
3923   return builtin_function_1 (decl, NULL_TREE, true);
3924 }
3925 
3926 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3927    function.  Not called directly.  */
3928 
3929 static tree
3930 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3931 {
3932   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3933   DECL_EXTERNAL (fn) = 1;
3934   TREE_PUBLIC (fn) = 1;
3935   DECL_ARTIFICIAL (fn) = 1;
3936   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3937   SET_DECL_LANGUAGE (fn, lang_c);
3938   /* Runtime library routines are, by definition, available in an
3939      external shared object.  */
3940   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3941   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3942   return fn;
3943 }
3944 
3945 /* Returns the _DECL for a library function with C linkage.
3946    We assume that such functions never throw; if this is incorrect,
3947    callers should unset TREE_NOTHROW.  */
3948 
3949 static tree
3950 build_library_fn (tree name, tree type)
3951 {
3952   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3953   TREE_NOTHROW (fn) = 1;
3954   return fn;
3955 }
3956 
3957 /* Returns the _DECL for a library function with C++ linkage.  */
3958 
3959 static tree
3960 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3961 {
3962   tree fn = build_library_fn_1 (name, operator_code, type);
3963   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3964   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3965   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3966   return fn;
3967 }
3968 
3969 /* Like build_library_fn, but takes a C string instead of an
3970    IDENTIFIER_NODE.  */
3971 
3972 tree
3973 build_library_fn_ptr (const char* name, tree type)
3974 {
3975   return build_library_fn (get_identifier (name), type);
3976 }
3977 
3978 /* Like build_cp_library_fn, but takes a C string instead of an
3979    IDENTIFIER_NODE.  */
3980 
3981 tree
3982 build_cp_library_fn_ptr (const char* name, tree type)
3983 {
3984   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3985 }
3986 
3987 /* Like build_library_fn, but also pushes the function so that we will
3988    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3989    may throw exceptions listed in RAISES.  */
3990 
3991 tree
3992 push_library_fn (tree name, tree type, tree raises)
3993 {
3994   tree fn;
3995 
3996   if (raises)
3997     type = build_exception_variant (type, raises);
3998 
3999   fn = build_library_fn (name, type);
4000   pushdecl_top_level (fn);
4001   return fn;
4002 }
4003 
4004 /* Like build_cp_library_fn, but also pushes the function so that it
4005    will be found by normal lookup.  */
4006 
4007 static tree
4008 push_cp_library_fn (enum tree_code operator_code, tree type)
4009 {
4010   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4011 				 operator_code,
4012 				 type);
4013   pushdecl (fn);
4014   if (flag_tm)
4015     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4016   return fn;
4017 }
4018 
4019 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4020    a FUNCTION_TYPE.  */
4021 
4022 tree
4023 push_void_library_fn (tree name, tree parmtypes)
4024 {
4025   tree type = build_function_type (void_type_node, parmtypes);
4026   return push_library_fn (name, type, NULL_TREE);
4027 }
4028 
4029 /* Like push_library_fn, but also note that this function throws
4030    and does not return.  Used for __throw_foo and the like.  */
4031 
4032 tree
4033 push_throw_library_fn (tree name, tree type)
4034 {
4035   tree fn = push_library_fn (name, type, NULL_TREE);
4036   TREE_THIS_VOLATILE (fn) = 1;
4037   TREE_NOTHROW (fn) = 0;
4038   return fn;
4039 }
4040 
4041 /* When we call finish_struct for an anonymous union, we create
4042    default copy constructors and such.  But, an anonymous union
4043    shouldn't have such things; this function undoes the damage to the
4044    anonymous union type T.
4045 
4046    (The reason that we create the synthesized methods is that we don't
4047    distinguish `union { int i; }' from `typedef union { int i; } U'.
4048    The first is an anonymous union; the second is just an ordinary
4049    union type.)  */
4050 
4051 void
4052 fixup_anonymous_aggr (tree t)
4053 {
4054   tree *q;
4055 
4056   /* Wipe out memory of synthesized methods.  */
4057   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4058   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4059   TYPE_HAS_COPY_CTOR (t) = 0;
4060   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4061   TYPE_HAS_COPY_ASSIGN (t) = 0;
4062   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4063 
4064   /* Splice the implicitly generated functions out of the TYPE_METHODS
4065      list.  */
4066   q = &TYPE_METHODS (t);
4067   while (*q)
4068     {
4069       if (DECL_ARTIFICIAL (*q))
4070 	*q = TREE_CHAIN (*q);
4071       else
4072 	q = &DECL_CHAIN (*q);
4073     }
4074 
4075   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4076   if (TYPE_METHODS (t))
4077     {
4078       tree decl = TYPE_MAIN_DECL (t);
4079 
4080       if (TREE_CODE (t) != UNION_TYPE)
4081 	error_at (DECL_SOURCE_LOCATION (decl),
4082 		  "an anonymous struct cannot have function members");
4083       else
4084 	error_at (DECL_SOURCE_LOCATION (decl),
4085 		  "an anonymous union cannot have function members");
4086     }
4087 
4088   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4089      assignment operators (because they cannot have these methods themselves).
4090      For anonymous unions this is already checked because they are not allowed
4091      in any union, otherwise we have to check it.  */
4092   if (TREE_CODE (t) != UNION_TYPE)
4093     {
4094       tree field, type;
4095 
4096       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4097 	if (TREE_CODE (field) == FIELD_DECL)
4098 	  {
4099 	    type = TREE_TYPE (field);
4100 	    if (CLASS_TYPE_P (type))
4101 	      {
4102 		if (TYPE_NEEDS_CONSTRUCTING (type))
4103 		  error ("member %q+#D with constructor not allowed "
4104 			 "in anonymous aggregate", field);
4105 		if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4106 		  error ("member %q+#D with destructor not allowed "
4107 			 "in anonymous aggregate", field);
4108 		if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4109 		  error ("member %q+#D with copy assignment operator "
4110 			 "not allowed in anonymous aggregate", field);
4111 	      }
4112 	  }
4113     }
4114 }
4115 
4116 /* Make sure that a declaration with no declarator is well-formed, i.e.
4117    just declares a tagged type or anonymous union.
4118 
4119    Returns the type declared; or NULL_TREE if none.  */
4120 
4121 tree
4122 check_tag_decl (cp_decl_specifier_seq *declspecs)
4123 {
4124   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4125   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4126   /* If a class, struct, or enum type is declared by the DECLSPECS
4127      (i.e, if a class-specifier, enum-specifier, or non-typename
4128      elaborated-type-specifier appears in the DECLSPECS),
4129      DECLARED_TYPE is set to the corresponding type.  */
4130   tree declared_type = NULL_TREE;
4131   bool error_p = false;
4132 
4133   if (declspecs->multiple_types_p)
4134     error ("multiple types in one declaration");
4135   else if (declspecs->redefined_builtin_type)
4136     {
4137       if (!in_system_header)
4138 	permerror (input_location, "redeclaration of C++ built-in type %qT",
4139 		   declspecs->redefined_builtin_type);
4140       return NULL_TREE;
4141     }
4142 
4143   if (declspecs->type
4144       && TYPE_P (declspecs->type)
4145       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4146 	   && MAYBE_CLASS_TYPE_P (declspecs->type))
4147 	  || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4148     declared_type = declspecs->type;
4149   else if (declspecs->type == error_mark_node)
4150     error_p = true;
4151   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4152     permerror (input_location, "declaration does not declare anything");
4153   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4154     {
4155       error ("%<auto%> can only be specified for variables "
4156 	     "or function declarations");
4157       return error_mark_node;
4158     }
4159   /* Check for an anonymous union.  */
4160   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4161 	   && TYPE_ANONYMOUS_P (declared_type))
4162     {
4163       /* 7/3 In a simple-declaration, the optional init-declarator-list
4164 	 can be omitted only when declaring a class (clause 9) or
4165 	 enumeration (7.2), that is, when the decl-specifier-seq contains
4166 	 either a class-specifier, an elaborated-type-specifier with
4167 	 a class-key (9.1), or an enum-specifier.  In these cases and
4168 	 whenever a class-specifier or enum-specifier is present in the
4169 	 decl-specifier-seq, the identifiers in these specifiers are among
4170 	 the names being declared by the declaration (as class-name,
4171 	 enum-names, or enumerators, depending on the syntax).  In such
4172 	 cases, and except for the declaration of an unnamed bit-field (9.6),
4173 	 the decl-specifier-seq shall introduce one or more names into the
4174 	 program, or shall redeclare a name introduced by a previous
4175 	 declaration.  [Example:
4176 	     enum { };			// ill-formed
4177 	     typedef class { };		// ill-formed
4178 	 --end example]  */
4179       if (saw_typedef)
4180 	{
4181 	  error ("missing type-name in typedef-declaration");
4182 	  return NULL_TREE;
4183 	}
4184       /* Anonymous unions are objects, so they can have specifiers.  */;
4185       SET_ANON_AGGR_TYPE_P (declared_type);
4186 
4187       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4188 	pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4189     }
4190 
4191   else
4192     {
4193       if (declspecs->specs[(int)ds_inline]
4194 	  || declspecs->specs[(int)ds_virtual])
4195 	error ("%qs can only be specified for functions",
4196 	       declspecs->specs[(int)ds_inline]
4197 	       ? "inline" : "virtual");
4198       else if (saw_friend
4199 	       && (!current_class_type
4200 		   || current_scope () != current_class_type))
4201 	error ("%<friend%> can only be specified inside a class");
4202       else if (declspecs->specs[(int)ds_explicit])
4203 	error ("%<explicit%> can only be specified for constructors");
4204       else if (declspecs->storage_class)
4205 	error ("a storage class can only be specified for objects "
4206 	       "and functions");
4207       else if (declspecs->specs[(int)ds_const]
4208 	       || declspecs->specs[(int)ds_volatile]
4209 	       || declspecs->specs[(int)ds_restrict]
4210 	       || declspecs->specs[(int)ds_thread])
4211 	error ("qualifiers can only be specified for objects "
4212 	       "and functions");
4213       else if (saw_typedef)
4214 	warning (0, "%<typedef%> was ignored in this declaration");
4215       else if (declspecs->specs[(int) ds_constexpr])
4216         error ("%<constexpr%> cannot be used for type declarations");
4217     }
4218 
4219   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 	{
5561 	  init_code = build_aggr_init_full_exprs (decl, init, flags);
5562 
5563 	  /* If this is a constexpr initializer, expand_default_init will
5564 	     have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5565 	     case, pull the initializer back out and pass it down into
5566 	     store_init_value.  */
5567 	  while (TREE_CODE (init_code) == EXPR_STMT
5568 		 || TREE_CODE (init_code) == CONVERT_EXPR)
5569 	    init_code = TREE_OPERAND (init_code, 0);
5570 	  if (TREE_CODE (init_code) == INIT_EXPR)
5571 	    {
5572 	      init = TREE_OPERAND (init_code, 1);
5573 	      init_code = NULL_TREE;
5574 	      /* Don't call digest_init; it's unnecessary and will complain
5575 		 about aggregate initialization of non-aggregate classes.  */
5576 	      flags |= LOOKUP_ALREADY_DIGESTED;
5577 	    }
5578 	  else if (DECL_DECLARED_CONSTEXPR_P (decl))
5579 	    {
5580 	      /* Declared constexpr, but no suitable initializer; massage
5581 		 init appropriately so we can pass it into store_init_value
5582 		 for the error.  */
5583 	      if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5584 		init = finish_compound_literal (type, init,
5585 						tf_warning_or_error);
5586 	      else if (CLASS_TYPE_P (type)
5587 		       && (!init || TREE_CODE (init) == TREE_LIST))
5588 		{
5589 		  init = build_functional_cast (type, init, tf_none);
5590 		  if (init != error_mark_node)
5591 		    TARGET_EXPR_DIRECT_INIT_P (init) = true;
5592 		}
5593 	      init_code = NULL_TREE;
5594 	    }
5595 	  else
5596 	    init = NULL_TREE;
5597 	}
5598 
5599       if (init && TREE_CODE (init) != TREE_VEC)
5600 	{
5601 	  /* In aggregate initialization of a variable, each element
5602 	     initialization is a full-expression because there is no
5603 	     enclosing expression.  */
5604 	  gcc_assert (stmts_are_full_exprs_p ());
5605 
5606 	  init_code = store_init_value (decl, init, cleanups, flags);
5607 
5608 	  if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5609 	      && DECL_INITIAL (decl)
5610 	      && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5611 	      && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5612 	    warning (0, "array %qD initialized by parenthesized string literal %qE",
5613 		     decl, DECL_INITIAL (decl));
5614 	  init = NULL;
5615 	}
5616     }
5617   else
5618     {
5619       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5620 	  && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5621 	      || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5622 	diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5623 						  /*complain=*/true);
5624 
5625       check_for_uninitialized_const_var (decl);
5626     }
5627 
5628   if (init && init != error_mark_node)
5629     init_code = build2 (INIT_EXPR, type, decl, init);
5630 
5631   if (extra_init)
5632     init_code = add_stmt_to_compound (extra_init, init_code);
5633 
5634   if (init_code && DECL_IN_AGGR_P (decl))
5635     {
5636       static int explained = 0;
5637 
5638       if (cxx_dialect < cxx0x)
5639 	error ("initializer invalid for static member with constructor");
5640       else
5641 	error ("non-constant in-class initialization invalid for static "
5642 	       "member %qD", decl);
5643       if (!explained)
5644 	{
5645 	  error ("(an out of class initialization is required)");
5646 	  explained = 1;
5647 	}
5648     }
5649 
5650   return init_code;
5651 }
5652 
5653 /* If DECL is not a local variable, give it RTL.  */
5654 
5655 static void
5656 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5657 {
5658   int toplev = toplevel_bindings_p ();
5659   int defer_p;
5660   const char *filename;
5661 
5662   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5663   if (asmspec)
5664     {
5665       /* The `register' keyword, when used together with an
5666 	 asm-specification, indicates that the variable should be
5667 	 placed in a particular register.  */
5668       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5669 	{
5670 	  set_user_assembler_name (decl, asmspec);
5671 	  DECL_HARD_REGISTER (decl) = 1;
5672 	}
5673       else
5674 	{
5675 	  if (TREE_CODE (decl) == FUNCTION_DECL
5676 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5677 	    set_builtin_user_assembler_name (decl, asmspec);
5678 	  set_user_assembler_name (decl, asmspec);
5679 	}
5680     }
5681 
5682   /* Handle non-variables up front.  */
5683   if (TREE_CODE (decl) != VAR_DECL)
5684     {
5685       rest_of_decl_compilation (decl, toplev, at_eof);
5686       return;
5687     }
5688 
5689   /* If we see a class member here, it should be a static data
5690      member.  */
5691   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5692     {
5693       gcc_assert (TREE_STATIC (decl));
5694       /* An in-class declaration of a static data member should be
5695 	 external; it is only a declaration, and not a definition.  */
5696       if (init == NULL_TREE)
5697 	gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5698     }
5699 
5700   /* We don't create any RTL for local variables.  */
5701   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5702     return;
5703 
5704   /* We defer emission of local statics until the corresponding
5705      DECL_EXPR is expanded.  */
5706   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5707 
5708   /* We try to defer namespace-scope static constants so that they are
5709      not emitted into the object file unnecessarily.  */
5710   filename = input_filename;
5711   if (!DECL_VIRTUAL_P (decl)
5712       && TREE_READONLY (decl)
5713       && DECL_INITIAL (decl) != NULL_TREE
5714       && DECL_INITIAL (decl) != error_mark_node
5715       && filename != NULL
5716       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5717       && toplev
5718       && !TREE_PUBLIC (decl))
5719     {
5720       /* Fool with the linkage of static consts according to #pragma
5721 	 interface.  */
5722       struct c_fileinfo *finfo = get_fileinfo (filename);
5723       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5724 	{
5725 	  TREE_PUBLIC (decl) = 1;
5726 	  DECL_EXTERNAL (decl) = finfo->interface_only;
5727 	}
5728 
5729       defer_p = 1;
5730     }
5731   /* Likewise for template instantiations.  */
5732   else if (DECL_LANG_SPECIFIC (decl)
5733 	   && DECL_IMPLICIT_INSTANTIATION (decl))
5734     defer_p = 1;
5735 
5736   /* If we're not deferring, go ahead and assemble the variable.  */
5737   if (!defer_p)
5738     rest_of_decl_compilation (decl, toplev, at_eof);
5739 }
5740 
5741 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5742 
5743 static tree
5744 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5745 {
5746   /* Stop at types or full-expression boundaries.  */
5747   if (TYPE_P (*stmt_p)
5748       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5749     {
5750       *walk_subtrees = 0;
5751       return NULL_TREE;
5752     }
5753 
5754   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5755     {
5756       tree guard = (tree)data;
5757       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5758 
5759       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5760       /* Tell honor_protect_cleanup_actions to handle this as a separate
5761 	 cleanup.  */
5762       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5763 
5764       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5765     }
5766 
5767   return NULL_TREE;
5768 }
5769 
5770 /* We're initializing a local variable which has a cleanup GUARD.  If there
5771    are any temporaries used in the initializer INIT of this variable, we
5772    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5773    variable will be cleaned up properly if one of them throws.
5774 
5775    Unfortunately, there's no way to express this properly in terms of
5776    nesting, as the regions for the temporaries overlap the region for the
5777    variable itself; if there are two temporaries, the variable needs to be
5778    the first thing destroyed if either of them throws.  However, we only
5779    want to run the variable's cleanup if it actually got constructed.  So
5780    we need to guard the temporary cleanups with the variable's cleanup if
5781    they are run on the normal path, but not if they are run on the
5782    exceptional path.  We implement this by telling
5783    honor_protect_cleanup_actions to strip the variable cleanup from the
5784    exceptional path.  */
5785 
5786 static void
5787 wrap_temporary_cleanups (tree init, tree guard)
5788 {
5789   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5790 }
5791 
5792 /* Generate code to initialize DECL (a local variable).  */
5793 
5794 static void
5795 initialize_local_var (tree decl, tree init)
5796 {
5797   tree type = TREE_TYPE (decl);
5798   tree cleanup;
5799   int already_used;
5800 
5801   gcc_assert (TREE_CODE (decl) == VAR_DECL
5802 	      || TREE_CODE (decl) == RESULT_DECL);
5803   gcc_assert (!TREE_STATIC (decl));
5804 
5805   if (DECL_SIZE (decl) == NULL_TREE)
5806     {
5807       /* If we used it already as memory, it must stay in memory.  */
5808       DECL_INITIAL (decl) = NULL_TREE;
5809       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5810       return;
5811     }
5812 
5813   if (type == error_mark_node)
5814     return;
5815 
5816   /* Compute and store the initial value.  */
5817   already_used = TREE_USED (decl) || TREE_USED (type);
5818   if (TREE_USED (type))
5819     DECL_READ_P (decl) = 1;
5820 
5821   /* Generate a cleanup, if necessary.  */
5822   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5823 
5824   /* Perform the initialization.  */
5825   if (init)
5826     {
5827       if (TREE_CODE (init) == INIT_EXPR
5828 	  && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5829 	{
5830 	  /* Stick simple initializers in DECL_INITIAL so that
5831 	     -Wno-init-self works (c++/34772).  */
5832 	  gcc_assert (TREE_OPERAND (init, 0) == decl);
5833 	  DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5834 	}
5835       else
5836 	{
5837 	  int saved_stmts_are_full_exprs_p;
5838 
5839 	  /* If we're only initializing a single object, guard the
5840 	     destructors of any temporaries used in its initializer with
5841 	     its destructor.  This isn't right for arrays because each
5842 	     element initialization is a full-expression.  */
5843 	  if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5844 	    wrap_temporary_cleanups (init, cleanup);
5845 
5846 	  gcc_assert (building_stmt_list_p ());
5847 	  saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5848 	  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5849 	  finish_expr_stmt (init);
5850 	  current_stmt_tree ()->stmts_are_full_exprs_p =
5851 	    saved_stmts_are_full_exprs_p;
5852 	}
5853     }
5854 
5855   /* Set this to 0 so we can tell whether an aggregate which was
5856      initialized was ever used.  Don't do this if it has a
5857      destructor, so we don't complain about the 'resource
5858      allocation is initialization' idiom.  Now set
5859      attribute((unused)) on types so decls of that type will be
5860      marked used. (see TREE_USED, above.)  */
5861   if (TYPE_NEEDS_CONSTRUCTING (type)
5862       && ! already_used
5863       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5864       && DECL_NAME (decl))
5865     TREE_USED (decl) = 0;
5866   else if (already_used)
5867     TREE_USED (decl) = 1;
5868 
5869   if (cleanup)
5870     finish_decl_cleanup (decl, cleanup);
5871 }
5872 
5873 /* DECL is a VAR_DECL for a compiler-generated variable with static
5874    storage duration (like a virtual table) whose initializer is a
5875    compile-time constant.  Initialize the variable and provide it to the
5876    back end.  */
5877 
5878 void
5879 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5880 {
5881   tree init;
5882   gcc_assert (DECL_ARTIFICIAL (decl));
5883   init = build_constructor (TREE_TYPE (decl), v);
5884   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5885   DECL_INITIAL (decl) = init;
5886   DECL_INITIALIZED_P (decl) = 1;
5887   determine_visibility (decl);
5888   layout_var_decl (decl);
5889   maybe_commonize_var (decl);
5890   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5891 }
5892 
5893 /* INIT is the initializer for a variable, as represented by the
5894    parser.  Returns true iff INIT is type-dependent.  */
5895 
5896 static bool
5897 type_dependent_init_p (tree init)
5898 {
5899   if (TREE_CODE (init) == TREE_LIST)
5900     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5901     return any_type_dependent_elements_p (init);
5902   else if (TREE_CODE (init) == CONSTRUCTOR)
5903   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5904     {
5905       VEC(constructor_elt, gc) *elts;
5906       size_t nelts;
5907       size_t i;
5908 
5909       elts = CONSTRUCTOR_ELTS (init);
5910       nelts = VEC_length (constructor_elt, elts);
5911       for (i = 0; i < nelts; ++i)
5912 	if (type_dependent_init_p (VEC_index (constructor_elt,
5913 					      elts, i)->value))
5914 	  return true;
5915     }
5916   else
5917     /* It must be a simple expression, e.g., int i = 3;  */
5918     return type_dependent_expression_p (init);
5919 
5920   return false;
5921 }
5922 
5923 /* INIT is the initializer for a variable, as represented by the
5924    parser.  Returns true iff INIT is value-dependent.  */
5925 
5926 static bool
5927 value_dependent_init_p (tree init)
5928 {
5929   if (TREE_CODE (init) == TREE_LIST)
5930     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5931     return any_value_dependent_elements_p (init);
5932   else if (TREE_CODE (init) == CONSTRUCTOR)
5933   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5934     {
5935       VEC(constructor_elt, gc) *elts;
5936       size_t nelts;
5937       size_t i;
5938 
5939       elts = CONSTRUCTOR_ELTS (init);
5940       nelts = VEC_length (constructor_elt, elts);
5941       for (i = 0; i < nelts; ++i)
5942 	if (value_dependent_init_p (VEC_index (constructor_elt,
5943 					       elts, i)->value))
5944 	  return true;
5945     }
5946   else
5947     /* It must be a simple expression, e.g., int i = 3;  */
5948     return value_dependent_expression_p (init);
5949 
5950   return false;
5951 }
5952 
5953 /* Finish processing of a declaration;
5954    install its line number and initial value.
5955    If the length of an array type is not known before,
5956    it must be determined now, from the initial value, or it is an error.
5957 
5958    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5959    true, then INIT is an integral constant expression.
5960 
5961    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5962    if the (init) syntax was used.  */
5963 
5964 void
5965 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5966 		tree asmspec_tree, int flags)
5967 {
5968   tree type;
5969   VEC(tree,gc) *cleanups = NULL;
5970   const char *asmspec = NULL;
5971   int was_readonly = 0;
5972   bool var_definition_p = false;
5973   tree auto_node;
5974 
5975   if (decl == error_mark_node)
5976     return;
5977   else if (! decl)
5978     {
5979       if (init)
5980 	error ("assignment (not initialization) in declaration");
5981       return;
5982     }
5983 
5984   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5985   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5986   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5987 
5988   type = TREE_TYPE (decl);
5989   if (type == error_mark_node)
5990     return;
5991 
5992   /* If a name was specified, get the string.  */
5993   if (at_namespace_scope_p ())
5994     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5995   if (asmspec_tree && asmspec_tree != error_mark_node)
5996     asmspec = TREE_STRING_POINTER (asmspec_tree);
5997 
5998   if (current_class_type
5999       && CP_DECL_CONTEXT (decl) == current_class_type
6000       && TYPE_BEING_DEFINED (current_class_type)
6001       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6002       && (DECL_INITIAL (decl) || init))
6003     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6004 
6005   auto_node = type_uses_auto (type);
6006   if (auto_node)
6007     {
6008       tree d_init;
6009       if (init == NULL_TREE)
6010 	{
6011 	  error ("declaration of %q#D has no initializer", decl);
6012 	  TREE_TYPE (decl) = error_mark_node;
6013 	  return;
6014 	}
6015       d_init = init;
6016       if (TREE_CODE (d_init) == TREE_LIST)
6017 	d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6018 						  tf_warning_or_error);
6019       d_init = resolve_nondeduced_context (d_init);
6020       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6021 						   auto_node);
6022       if (type == error_mark_node)
6023 	return;
6024     }
6025 
6026   if (!ensure_literal_type_for_constexpr_object (decl))
6027     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6028 
6029   if (TREE_CODE (decl) == VAR_DECL
6030       && DECL_CLASS_SCOPE_P (decl)
6031       && DECL_INITIALIZED_IN_CLASS_P (decl))
6032     check_static_variable_definition (decl, type);
6033 
6034   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6035     {
6036       tree clone;
6037       if (init == ridpointers[(int)RID_DELETE])
6038 	{
6039 	  /* FIXME check this is 1st decl.  */
6040 	  DECL_DELETED_FN (decl) = 1;
6041 	  DECL_DECLARED_INLINE_P (decl) = 1;
6042 	  DECL_INITIAL (decl) = error_mark_node;
6043 	  FOR_EACH_CLONE (clone, decl)
6044 	    {
6045 	      DECL_DELETED_FN (clone) = 1;
6046 	      DECL_DECLARED_INLINE_P (clone) = 1;
6047 	      DECL_INITIAL (clone) = error_mark_node;
6048 	    }
6049 	  init = NULL_TREE;
6050 	}
6051       else if (init == ridpointers[(int)RID_DEFAULT])
6052 	{
6053 	  if (defaultable_fn_check (decl))
6054 	    DECL_DEFAULTED_FN (decl) = 1;
6055 	  else
6056 	    DECL_INITIAL (decl) = NULL_TREE;
6057 	}
6058     }
6059 
6060   if (init && TREE_CODE (decl) == VAR_DECL)
6061     {
6062       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6063       /* If DECL is a reference, then we want to know whether init is a
6064 	 reference constant; init_const_expr_p as passed tells us whether
6065 	 it's an rvalue constant.  */
6066       if (TREE_CODE (type) == REFERENCE_TYPE)
6067 	init_const_expr_p = potential_constant_expression (init);
6068       if (init_const_expr_p)
6069 	{
6070 	  /* Set these flags now for templates.  We'll update the flags in
6071 	     store_init_value for instantiations.  */
6072 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6073 	  if (decl_maybe_constant_var_p (decl))
6074 	    TREE_CONSTANT (decl) = 1;
6075 	}
6076     }
6077 
6078   if (processing_template_decl)
6079     {
6080       bool type_dependent_p;
6081 
6082       /* Add this declaration to the statement-tree.  */
6083       if (at_function_scope_p ())
6084 	add_decl_expr (decl);
6085 
6086       type_dependent_p = dependent_type_p (type);
6087 
6088       if (check_for_bare_parameter_packs (init))
6089 	{
6090 	  init = NULL_TREE;
6091 	  DECL_INITIAL (decl) = NULL_TREE;
6092 	}
6093 
6094       /* Generally, initializers in templates are expanded when the
6095 	 template is instantiated.  But, if DECL is a variable constant
6096 	 then it can be used in future constant expressions, so its value
6097 	 must be available. */
6098 
6099       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6100 	/* We can't do anything if the decl has dependent type.  */;
6101       else if (init
6102 	       && init_const_expr_p
6103 	       && !type_dependent_p
6104 	       && decl_maybe_constant_var_p (decl)
6105 	       && !type_dependent_init_p (init)
6106 	       && !value_dependent_init_p (init))
6107 	{
6108 	  /* This variable seems to be a non-dependent constant, so process
6109 	     its initializer.  If check_initializer returns non-null the
6110 	     initialization wasn't constant after all.  */
6111 	  tree init_code;
6112 	  cleanups = make_tree_vector ();
6113 	  init_code = check_initializer (decl, init, flags, &cleanups);
6114 	  if (init_code == NULL_TREE)
6115 	    init = NULL_TREE;
6116 	  release_tree_vector (cleanups);
6117 	}
6118       else if (!DECL_PRETTY_FUNCTION_P (decl))
6119 	/* Deduce array size even if the initializer is dependent.  */
6120 	maybe_deduce_size_from_array_init (decl, init);
6121 
6122       if (init)
6123 	DECL_INITIAL (decl) = init;
6124       return;
6125     }
6126 
6127   /* Just store non-static data member initializers for later.  */
6128   if (init && TREE_CODE (decl) == FIELD_DECL)
6129     DECL_INITIAL (decl) = init;
6130 
6131   /* Take care of TYPE_DECLs up front.  */
6132   if (TREE_CODE (decl) == TYPE_DECL)
6133     {
6134       if (type != error_mark_node
6135 	  && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6136 	{
6137 	  if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6138 	    warning (0, "shadowing previous type declaration of %q#D", decl);
6139 	  set_identifier_type_value (DECL_NAME (decl), decl);
6140 	}
6141 
6142       /* If we have installed this as the canonical typedef for this
6143 	 type, and that type has not been defined yet, delay emitting
6144 	 the debug information for it, as we will emit it later.  */
6145       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6146 	  && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6147 	TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6148 
6149       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6150 				at_eof);
6151       return;
6152     }
6153 
6154   /* A reference will be modified here, as it is initialized.  */
6155   if (! DECL_EXTERNAL (decl)
6156       && TREE_READONLY (decl)
6157       && TREE_CODE (type) == REFERENCE_TYPE)
6158     {
6159       was_readonly = 1;
6160       TREE_READONLY (decl) = 0;
6161     }
6162 
6163   if (TREE_CODE (decl) == VAR_DECL)
6164     {
6165       /* Only variables with trivial initialization and destruction can
6166 	 have thread-local storage.  */
6167       if (DECL_THREAD_LOCAL_P (decl)
6168 	  && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6169 	      || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6170 	error ("%qD cannot be thread-local because it has non-trivial "
6171 	       "type %qT", decl, TREE_TYPE (decl));
6172       /* If this is a local variable that will need a mangled name,
6173 	 register it now.  We must do this before processing the
6174 	 initializer for the variable, since the initialization might
6175 	 require a guard variable, and since the mangled name of the
6176 	 guard variable will depend on the mangled name of this
6177 	 variable.  */
6178       if (DECL_FUNCTION_SCOPE_P (decl)
6179 	  && TREE_STATIC (decl)
6180 	  && !DECL_ARTIFICIAL (decl))
6181 	{
6182 	  push_local_name (decl);
6183 	  if (DECL_CONSTRUCTOR_P (current_function_decl)
6184 	      || DECL_DESTRUCTOR_P (current_function_decl))
6185 	    /* Normally local_decls is populated during GIMPLE lowering,
6186 	       but [cd]tors are never actually compiled directly.  We need
6187 	       to put statics on the list so we can deal with the label
6188 	       address extension.  */
6189 	    add_local_decl (cfun, decl);
6190 	}
6191 
6192       /* Convert the initializer to the type of DECL, if we have not
6193 	 already initialized DECL.  */
6194       if (!DECL_INITIALIZED_P (decl)
6195 	  /* If !DECL_EXTERNAL then DECL is being defined.  In the
6196 	     case of a static data member initialized inside the
6197 	     class-specifier, there can be an initializer even if DECL
6198 	     is *not* defined.  */
6199 	  && (!DECL_EXTERNAL (decl) || init))
6200 	{
6201 	  if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6202 	    {
6203 	      tree jclass
6204 		= IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6205 	      /* Allow libjava/prims.cc define primitive classes.  */
6206 	      if (init != NULL_TREE
6207 		  || jclass == NULL_TREE
6208 		  || TREE_CODE (jclass) != TYPE_DECL
6209 		  || !POINTER_TYPE_P (TREE_TYPE (jclass))
6210 		  || !same_type_ignoring_top_level_qualifiers_p
6211 					(type, TREE_TYPE (TREE_TYPE (jclass))))
6212 		error ("Java object %qD not allocated with %<new%>", decl);
6213 	      init = NULL_TREE;
6214 	    }
6215 	  cleanups = make_tree_vector ();
6216 	  init = check_initializer (decl, init, flags, &cleanups);
6217 	  /* Thread-local storage cannot be dynamically initialized.  */
6218 	  if (DECL_THREAD_LOCAL_P (decl) && init)
6219 	    {
6220 	      error ("%qD is thread-local and so cannot be dynamically "
6221 		     "initialized", decl);
6222 	      init = NULL_TREE;
6223 	    }
6224 
6225 	  /* Check that the initializer for a static data member was a
6226 	     constant.  Although we check in the parser that the
6227 	     initializer is an integral constant expression, we do not
6228 	     simplify division-by-zero at the point at which it
6229 	     occurs.  Therefore, in:
6230 
6231 	       struct S { static const int i = 7 / 0; };
6232 
6233 	     we issue an error at this point.  It would
6234 	     probably be better to forbid division by zero in
6235 	     integral constant expressions.  */
6236 	  if (DECL_EXTERNAL (decl) && init)
6237 	    {
6238 	      error ("%qD cannot be initialized by a non-constant expression"
6239 		     " when being declared", decl);
6240 	      DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6241 	      init = NULL_TREE;
6242 	    }
6243 
6244 	  /* Handle:
6245 
6246 	     [dcl.init]
6247 
6248 	     The memory occupied by any object of static storage
6249 	     duration is zero-initialized at program startup before
6250 	     any other initialization takes place.
6251 
6252 	     We cannot create an appropriate initializer until after
6253 	     the type of DECL is finalized.  If DECL_INITIAL is set,
6254 	     then the DECL is statically initialized, and any
6255 	     necessary zero-initialization has already been performed.  */
6256 	  if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6257 	    DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6258 						   /*nelts=*/NULL_TREE,
6259 						   /*static_storage_p=*/true);
6260 	  /* Remember that the initialization for this variable has
6261 	     taken place.  */
6262 	  DECL_INITIALIZED_P (decl) = 1;
6263 	  /* This declaration is the definition of this variable,
6264 	     unless we are initializing a static data member within
6265 	     the class specifier.  */
6266 	  if (!DECL_EXTERNAL (decl))
6267 	    var_definition_p = true;
6268 	}
6269       /* If the variable has an array type, lay out the type, even if
6270 	 there is no initializer.  It is valid to index through the
6271 	 array, and we must get TYPE_ALIGN set correctly on the array
6272 	 type.  */
6273       else if (TREE_CODE (type) == ARRAY_TYPE)
6274 	layout_type (type);
6275 
6276       if (TREE_STATIC (decl)
6277 	  && !at_function_scope_p ()
6278 	  && current_function_decl == NULL)
6279 	/* So decl is a global variable or a static member of a
6280 	   non local class. Record the types it uses
6281 	   so that we can decide later to emit debug info for them.  */
6282 	record_types_used_by_current_var_decl (decl);
6283     }
6284   else if (TREE_CODE (decl) == FIELD_DECL
6285 	   && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6286     error ("non-static data member %qD has Java class type", decl);
6287 
6288   /* Add this declaration to the statement-tree.  This needs to happen
6289      after the call to check_initializer so that the DECL_EXPR for a
6290      reference temp is added before the DECL_EXPR for the reference itself.  */
6291   if (DECL_FUNCTION_SCOPE_P (decl))
6292     add_decl_expr (decl);
6293 
6294   /* Let the middle end know about variables and functions -- but not
6295      static data members in uninstantiated class templates.  */
6296   if (TREE_CODE (decl) == VAR_DECL
6297       || TREE_CODE (decl) == FUNCTION_DECL)
6298     {
6299       if (TREE_CODE (decl) == VAR_DECL)
6300 	{
6301 	  layout_var_decl (decl);
6302 	  maybe_commonize_var (decl);
6303 	}
6304 
6305       /* This needs to happen after the linkage is set. */
6306       determine_visibility (decl);
6307 
6308       if (var_definition_p && TREE_STATIC (decl))
6309 	{
6310 	  /* If a TREE_READONLY variable needs initialization
6311 	     at runtime, it is no longer readonly and we need to
6312 	     avoid MEM_READONLY_P being set on RTL created for it.  */
6313 	  if (init)
6314 	    {
6315 	      if (TREE_READONLY (decl))
6316 		TREE_READONLY (decl) = 0;
6317 	      was_readonly = 0;
6318 	    }
6319 	  else if (was_readonly)
6320 	    TREE_READONLY (decl) = 1;
6321 	}
6322 
6323       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6324 
6325       /* Check for abstractness of the type. Notice that there is no
6326 	 need to strip array types here since the check for those types
6327 	 is already done within create_array_type_for_decl.  */
6328       if (TREE_CODE (type) == FUNCTION_TYPE
6329 	  || TREE_CODE (type) == METHOD_TYPE)
6330 	abstract_virtuals_error (decl, TREE_TYPE (type));
6331       else
6332 	abstract_virtuals_error (decl, type);
6333 
6334       if (TREE_TYPE (decl) == error_mark_node)
6335 	/* No initialization required.  */
6336 	;
6337       else if (TREE_CODE (decl) == FUNCTION_DECL)
6338 	{
6339 	  if (init)
6340 	    {
6341 	      if (init == ridpointers[(int)RID_DEFAULT])
6342 		{
6343 		  /* An out-of-class default definition is defined at
6344 		     the point where it is explicitly defaulted.  */
6345 		  if (DECL_DELETED_FN (decl))
6346 		    maybe_explain_implicit_delete (decl);
6347 		  else if (DECL_INITIAL (decl) == error_mark_node)
6348 		    synthesize_method (decl);
6349 		}
6350 	      else
6351 		error ("function %q#D is initialized like a variable", decl);
6352 	    }
6353 	  /* else no initialization required.  */
6354 	}
6355       else if (DECL_EXTERNAL (decl)
6356 	       && ! (DECL_LANG_SPECIFIC (decl)
6357 		     && DECL_NOT_REALLY_EXTERN (decl)))
6358 	{
6359 	  if (init)
6360 	    DECL_INITIAL (decl) = init;
6361 	}
6362       /* A variable definition.  */
6363       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6364 	/* Initialize the local variable.  */
6365 	initialize_local_var (decl, init);
6366 
6367       /* If a variable is defined, and then a subsequent
6368 	 definition with external linkage is encountered, we will
6369 	 get here twice for the same variable.  We want to avoid
6370 	 calling expand_static_init more than once.  For variables
6371 	 that are not static data members, we can call
6372 	 expand_static_init only when we actually process the
6373 	 initializer.  It is not legal to redeclare a static data
6374 	 member, so this issue does not arise in that case.  */
6375       else if (var_definition_p && TREE_STATIC (decl))
6376 	expand_static_init (decl, init);
6377     }
6378 
6379   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6380      reference, insert it in the statement-tree now.  */
6381   if (cleanups)
6382     {
6383       unsigned i; tree t;
6384       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6385 	push_cleanup (decl, t, false);
6386       release_tree_vector (cleanups);
6387     }
6388 
6389   if (was_readonly)
6390     TREE_READONLY (decl) = 1;
6391 
6392   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6393 }
6394 
6395 /* Returns a declaration for a VAR_DECL as if:
6396 
6397      extern "C" TYPE NAME;
6398 
6399    had been seen.  Used to create compiler-generated global
6400    variables.  */
6401 
6402 static tree
6403 declare_global_var (tree name, tree type)
6404 {
6405   tree decl;
6406 
6407   push_to_top_level ();
6408   decl = build_decl (input_location, VAR_DECL, name, type);
6409   TREE_PUBLIC (decl) = 1;
6410   DECL_EXTERNAL (decl) = 1;
6411   DECL_ARTIFICIAL (decl) = 1;
6412   /* If the user has explicitly declared this variable (perhaps
6413      because the code we are compiling is part of a low-level runtime
6414      library), then it is possible that our declaration will be merged
6415      with theirs by pushdecl.  */
6416   decl = pushdecl (decl);
6417   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6418   pop_from_top_level ();
6419 
6420   return decl;
6421 }
6422 
6423 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6424    if "__cxa_atexit" is not being used) corresponding to the function
6425    to be called when the program exits.  */
6426 
6427 static tree
6428 get_atexit_fn_ptr_type (void)
6429 {
6430   tree fn_type;
6431 
6432   if (!atexit_fn_ptr_type_node)
6433     {
6434       tree arg_type;
6435       if (flag_use_cxa_atexit
6436 	  && !targetm.cxx.use_atexit_for_cxa_atexit ())
6437 	/* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6438 	arg_type = ptr_type_node;
6439       else
6440 	/* The parameter to "atexit" is "void (*)(void)".  */
6441 	arg_type = NULL_TREE;
6442 
6443       fn_type = build_function_type_list (void_type_node,
6444 					  arg_type, NULL_TREE);
6445       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6446     }
6447 
6448   return atexit_fn_ptr_type_node;
6449 }
6450 
6451 /* Returns a pointer to the `atexit' function.  Note that if
6452    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6453    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6454 
6455 static tree
6456 get_atexit_node (void)
6457 {
6458   tree atexit_fndecl;
6459   tree fn_type;
6460   tree fn_ptr_type;
6461   const char *name;
6462   bool use_aeabi_atexit;
6463 
6464   if (atexit_node)
6465     return atexit_node;
6466 
6467   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6468     {
6469       /* The declaration for `__cxa_atexit' is:
6470 
6471 	   int __cxa_atexit (void (*)(void *), void *, void *)
6472 
6473 	 We build up the argument types and then the function type
6474 	 itself.  */
6475       tree argtype0, argtype1, argtype2;
6476 
6477       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6478       /* First, build the pointer-to-function type for the first
6479 	 argument.  */
6480       fn_ptr_type = get_atexit_fn_ptr_type ();
6481       /* Then, build the rest of the argument types.  */
6482       argtype2 = ptr_type_node;
6483       if (use_aeabi_atexit)
6484 	{
6485 	  argtype1 = fn_ptr_type;
6486 	  argtype0 = ptr_type_node;
6487 	}
6488       else
6489 	{
6490 	  argtype1 = ptr_type_node;
6491 	  argtype0 = fn_ptr_type;
6492 	}
6493       /* And the final __cxa_atexit type.  */
6494       fn_type = build_function_type_list (integer_type_node,
6495 					  argtype0, argtype1, argtype2,
6496 					  NULL_TREE);
6497       fn_ptr_type = build_pointer_type (fn_type);
6498       if (use_aeabi_atexit)
6499 	name = "__aeabi_atexit";
6500       else
6501 	name = "__cxa_atexit";
6502     }
6503   else
6504     {
6505       /* The declaration for `atexit' is:
6506 
6507 	   int atexit (void (*)());
6508 
6509 	 We build up the argument types and then the function type
6510 	 itself.  */
6511       fn_ptr_type = get_atexit_fn_ptr_type ();
6512       /* Build the final atexit type.  */
6513       fn_type = build_function_type_list (integer_type_node,
6514 					  fn_ptr_type, NULL_TREE);
6515       name = "atexit";
6516     }
6517 
6518   /* Now, build the function declaration.  */
6519   push_lang_context (lang_name_c);
6520   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6521   mark_used (atexit_fndecl);
6522   pop_lang_context ();
6523   atexit_node = decay_conversion (atexit_fndecl);
6524 
6525   return atexit_node;
6526 }
6527 
6528 /* Returns the __dso_handle VAR_DECL.  */
6529 
6530 static tree
6531 get_dso_handle_node (void)
6532 {
6533   if (dso_handle_node)
6534     return dso_handle_node;
6535 
6536   /* Declare the variable.  */
6537   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6538 					ptr_type_node);
6539 
6540 #ifdef HAVE_GAS_HIDDEN
6541   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6542   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6543 #endif
6544 
6545   return dso_handle_node;
6546 }
6547 
6548 /* Begin a new function with internal linkage whose job will be simply
6549    to destroy some particular variable.  */
6550 
6551 static GTY(()) int start_cleanup_cnt;
6552 
6553 static tree
6554 start_cleanup_fn (void)
6555 {
6556   char name[32];
6557   tree fntype;
6558   tree fndecl;
6559   bool use_cxa_atexit = flag_use_cxa_atexit
6560 			&& !targetm.cxx.use_atexit_for_cxa_atexit ();
6561 
6562   push_to_top_level ();
6563 
6564   /* No need to mangle this.  */
6565   push_lang_context (lang_name_c);
6566 
6567   /* Build the name of the function.  */
6568   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6569   /* Build the function declaration.  */
6570   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6571   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6572   /* It's a function with internal linkage, generated by the
6573      compiler.  */
6574   TREE_PUBLIC (fndecl) = 0;
6575   DECL_ARTIFICIAL (fndecl) = 1;
6576   /* Make the function `inline' so that it is only emitted if it is
6577      actually needed.  It is unlikely that it will be inlined, since
6578      it is only called via a function pointer, but we avoid unnecessary
6579      emissions this way.  */
6580   DECL_DECLARED_INLINE_P (fndecl) = 1;
6581   DECL_INTERFACE_KNOWN (fndecl) = 1;
6582   /* Build the parameter.  */
6583   if (use_cxa_atexit)
6584     {
6585       tree parmdecl;
6586 
6587       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6588       DECL_CONTEXT (parmdecl) = fndecl;
6589       TREE_USED (parmdecl) = 1;
6590       DECL_READ_P (parmdecl) = 1;
6591       DECL_ARGUMENTS (fndecl) = parmdecl;
6592     }
6593 
6594   pushdecl (fndecl);
6595   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6596 
6597   pop_lang_context ();
6598 
6599   return current_function_decl;
6600 }
6601 
6602 /* Finish the cleanup function begun by start_cleanup_fn.  */
6603 
6604 static void
6605 end_cleanup_fn (void)
6606 {
6607   expand_or_defer_fn (finish_function (0));
6608 
6609   pop_from_top_level ();
6610 }
6611 
6612 /* Generate code to handle the destruction of DECL, an object with
6613    static storage duration.  */
6614 
6615 tree
6616 register_dtor_fn (tree decl)
6617 {
6618   tree cleanup;
6619   tree compound_stmt;
6620   tree fcall;
6621   tree type;
6622   bool use_dtor;
6623   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6624 
6625   type = TREE_TYPE (decl);
6626   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6627     return void_zero_node;
6628 
6629   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6630      a class object, we can just pass the destructor to
6631      "__cxa_atexit"; we don't have to build a temporary function to do
6632      the cleanup.  */
6633   use_dtor = (flag_use_cxa_atexit
6634 	      && !targetm.cxx.use_atexit_for_cxa_atexit ()
6635 	      && CLASS_TYPE_P (type));
6636   if (use_dtor)
6637     {
6638       int idx;
6639 
6640       /* Find the destructor.  */
6641       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6642       gcc_assert (idx >= 0);
6643       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6644       /* Make sure it is accessible.  */
6645       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6646     }
6647   else
6648     {
6649       /* Call build_cleanup before we enter the anonymous function so
6650 	 that any access checks will be done relative to the current
6651 	 scope, rather than the scope of the anonymous function.  */
6652       build_cleanup (decl);
6653 
6654       /* Now start the function.  */
6655       cleanup = start_cleanup_fn ();
6656 
6657       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6658 	 to the original function, rather than the anonymous one.  That
6659 	 will make the back end think that nested functions are in use,
6660 	 which causes confusion.  */
6661       push_deferring_access_checks (dk_no_check);
6662       fcall = build_cleanup (decl);
6663       pop_deferring_access_checks ();
6664 
6665       /* Create the body of the anonymous function.  */
6666       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6667       finish_expr_stmt (fcall);
6668       finish_compound_stmt (compound_stmt);
6669       end_cleanup_fn ();
6670     }
6671 
6672   /* Call atexit with the cleanup function.  */
6673   mark_used (cleanup);
6674   cleanup = build_address (cleanup);
6675   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6676     {
6677       tree addr;
6678 
6679       if (use_dtor)
6680 	{
6681 	  /* We must convert CLEANUP to the type that "__cxa_atexit"
6682 	     expects.  */
6683 	  cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6684 	  /* "__cxa_atexit" will pass the address of DECL to the
6685 	     cleanup function.  */
6686 	  mark_used (decl);
6687 	  addr = build_address (decl);
6688 	  /* The declared type of the parameter to "__cxa_atexit" is
6689 	     "void *".  For plain "T*", we could just let the
6690 	     machinery in cp_build_function_call convert it -- but if the
6691 	     type is "cv-qualified T *", then we need to convert it
6692 	     before passing it in, to avoid spurious errors.  */
6693 	  addr = build_nop (ptr_type_node, addr);
6694 	}
6695       else
6696 	/* Since the cleanup functions we build ignore the address
6697 	   they're given, there's no reason to pass the actual address
6698 	   in, and, in general, it's cheaper to pass NULL than any
6699 	   other value.  */
6700 	addr = null_pointer_node;
6701       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6702 				 tf_warning_or_error);
6703       if (targetm.cxx.use_aeabi_atexit ())
6704 	{
6705 	  arg1 = cleanup;
6706 	  arg0 = addr;
6707 	}
6708       else
6709 	{
6710 	  arg1 = addr;
6711 	  arg0 = cleanup;
6712 	}
6713     }
6714   else
6715     arg0 = cleanup;
6716   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6717 				      arg0, arg1, arg2, NULL_TREE);
6718 }
6719 
6720 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6721    is its initializer.  Generate code to handle the construction
6722    and destruction of DECL.  */
6723 
6724 static void
6725 expand_static_init (tree decl, tree init)
6726 {
6727   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6728   gcc_assert (TREE_STATIC (decl));
6729 
6730   /* Some variables require no dynamic initialization.  */
6731   if (!init
6732       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6733     return;
6734 
6735   if (DECL_FUNCTION_SCOPE_P (decl))
6736     {
6737       /* Emit code to perform this initialization but once.  */
6738       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6739       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6740       tree guard, guard_addr;
6741       tree flag, begin;
6742 
6743       /* Emit code to perform this initialization but once.  This code
6744 	 looks like:
6745 
6746 	   static <type> guard;
6747 	   if (!guard.first_byte) {
6748 	     if (__cxa_guard_acquire (&guard)) {
6749 	       bool flag = false;
6750 	       try {
6751 		 // Do initialization.
6752 		 flag = true; __cxa_guard_release (&guard);
6753 		 // Register variable for destruction at end of program.
6754 	       } catch {
6755 		 if (!flag) __cxa_guard_abort (&guard);
6756 	       }
6757 	   }
6758 
6759 	 Note that the `flag' variable is only set to 1 *after* the
6760 	 initialization is complete.  This ensures that an exception,
6761 	 thrown during the construction, will cause the variable to
6762 	 reinitialized when we pass through this code again, as per:
6763 
6764 	   [stmt.dcl]
6765 
6766 	   If the initialization exits by throwing an exception, the
6767 	   initialization is not complete, so it will be tried again
6768 	   the next time control enters the declaration.
6769 
6770 	 This process should be thread-safe, too; multiple threads
6771 	 should not be able to initialize the variable more than
6772 	 once.  */
6773 
6774       /* Create the guard variable.  */
6775       guard = get_guard (decl);
6776 
6777       /* This optimization isn't safe on targets with relaxed memory
6778 	 consistency.  On such targets we force synchronization in
6779 	 __cxa_guard_acquire.  */
6780       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6781 	{
6782 	  /* Begin the conditional initialization.  */
6783 	  if_stmt = begin_if_stmt ();
6784 	  finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6785 	  then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6786 	}
6787 
6788       if (flag_threadsafe_statics)
6789 	{
6790 	  tree vfntype = NULL_TREE;
6791 	  tree acquire_name, release_name, abort_name;
6792 	  tree acquire_fn, release_fn, abort_fn;
6793 	  guard_addr = build_address (guard);
6794 
6795 	  acquire_name = get_identifier ("__cxa_guard_acquire");
6796 	  release_name = get_identifier ("__cxa_guard_release");
6797 	  abort_name = get_identifier ("__cxa_guard_abort");
6798 	  acquire_fn = identifier_global_value (acquire_name);
6799 	  release_fn = identifier_global_value (release_name);
6800 	  abort_fn = identifier_global_value (abort_name);
6801 	  if (!acquire_fn)
6802 	    acquire_fn = push_library_fn
6803 	      (acquire_name, build_function_type_list (integer_type_node,
6804 						       TREE_TYPE (guard_addr),
6805 						       NULL_TREE),
6806 	       NULL_TREE);
6807 	  if (!release_fn || !abort_fn)
6808 	    vfntype = build_function_type_list (void_type_node,
6809 						TREE_TYPE (guard_addr),
6810 						NULL_TREE);
6811 	  if (!release_fn)
6812 	    release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6813 	  if (!abort_fn)
6814 	    abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6815 
6816 	  inner_if_stmt = begin_if_stmt ();
6817 	  finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6818 			       inner_if_stmt);
6819 
6820 	  inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6821 	  begin = get_target_expr (boolean_false_node);
6822 	  flag = TARGET_EXPR_SLOT (begin);
6823 
6824 	  TARGET_EXPR_CLEANUP (begin)
6825 	    = build3 (COND_EXPR, void_type_node, flag,
6826 		      void_zero_node,
6827 		      build_call_n (abort_fn, 1, guard_addr));
6828 	  CLEANUP_EH_ONLY (begin) = 1;
6829 
6830 	  /* Do the initialization itself.  */
6831 	  init = add_stmt_to_compound (begin, init);
6832 	  init = add_stmt_to_compound
6833 	    (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6834 	  init = add_stmt_to_compound
6835 	    (init, build_call_n (release_fn, 1, guard_addr));
6836 	}
6837       else
6838 	init = add_stmt_to_compound (init, set_guard (guard));
6839 
6840       /* Use atexit to register a function for destroying this static
6841 	 variable.  */
6842       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6843 
6844       finish_expr_stmt (init);
6845 
6846       if (flag_threadsafe_statics)
6847 	{
6848 	  finish_compound_stmt (inner_then_clause);
6849 	  finish_then_clause (inner_if_stmt);
6850 	  finish_if_stmt (inner_if_stmt);
6851 	}
6852 
6853       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6854 	{
6855 	  finish_compound_stmt (then_clause);
6856 	  finish_then_clause (if_stmt);
6857 	  finish_if_stmt (if_stmt);
6858 	}
6859     }
6860   else
6861     static_aggregates = tree_cons (init, decl, static_aggregates);
6862 }
6863 
6864 
6865 /* Make TYPE a complete type based on INITIAL_VALUE.
6866    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6867    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6868    3 if the initializer list is empty (in pedantic mode). */
6869 
6870 int
6871 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6872 {
6873   int failure;
6874   tree type, elt_type;
6875 
6876   if (initial_value)
6877     {
6878       unsigned HOST_WIDE_INT i;
6879       tree value;
6880 
6881       /* An array of character type can be initialized from a
6882 	 brace-enclosed string constant.
6883 
6884 	 FIXME: this code is duplicated from reshape_init. Probably
6885 	 we should just call reshape_init here?  */
6886       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6887 	  && TREE_CODE (initial_value) == CONSTRUCTOR
6888 	  && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6889 	{
6890 	  VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6891 	  tree value = VEC_index (constructor_elt, v, 0)->value;
6892 
6893 	  if (TREE_CODE (value) == STRING_CST
6894 	      && VEC_length (constructor_elt, v) == 1)
6895 	    initial_value = value;
6896 	}
6897 
6898       /* If any of the elements are parameter packs, we can't actually
6899 	 complete this type now because the array size is dependent.  */
6900       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6901 	{
6902 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
6903 				      i, value)
6904 	    {
6905 	      if (PACK_EXPANSION_P (value))
6906 		return 0;
6907 	    }
6908 	}
6909     }
6910 
6911   failure = complete_array_type (ptype, initial_value, do_default);
6912 
6913   /* We can create the array before the element type is complete, which
6914      means that we didn't have these two bits set in the original type
6915      either.  In completing the type, we are expected to propagate these
6916      bits.  See also complete_type which does the same thing for arrays
6917      of fixed size.  */
6918   type = *ptype;
6919   if (TYPE_DOMAIN (type))
6920     {
6921       elt_type = TREE_TYPE (type);
6922       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6923       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6924 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6925     }
6926 
6927   return failure;
6928 }
6929 
6930 /* As above, but either give an error or reject zero-size arrays, depending
6931    on COMPLAIN.  */
6932 
6933 int
6934 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6935 				 bool do_default, tsubst_flags_t complain)
6936 {
6937   int failure;
6938   bool sfinae = !(complain & tf_error);
6939   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6940   if (sfinae)
6941     ++pedantic;
6942   failure = cp_complete_array_type (ptype, initial_value, do_default);
6943   if (sfinae)
6944     --pedantic;
6945   if (failure)
6946     {
6947       if (sfinae)
6948 	/* Not an error.  */;
6949       else if (failure == 1)
6950 	error ("initializer fails to determine size of %qT", *ptype);
6951       else if (failure == 2)
6952 	{
6953 	  if (do_default)
6954 	    error ("array size missing in %qT", *ptype);
6955 	}
6956       else if (failure == 3)
6957 	error ("zero-size array %qT", *ptype);
6958       *ptype = error_mark_node;
6959     }
6960   return failure;
6961 }
6962 
6963 /* Return zero if something is declared to be a member of type
6964    CTYPE when in the context of CUR_TYPE.  STRING is the error
6965    message to print in that case.  Otherwise, quietly return 1.  */
6966 
6967 static int
6968 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6969 {
6970   if (ctype && ctype != cur_type)
6971     {
6972       if (flags == DTOR_FLAG)
6973 	error ("destructor for alien class %qT cannot be a member", ctype);
6974       else
6975 	error ("constructor for alien class %qT cannot be a member", ctype);
6976       return 0;
6977     }
6978   return 1;
6979 }
6980 
6981 /* Subroutine of `grokdeclarator'.  */
6982 
6983 /* Generate errors possibly applicable for a given set of specifiers.
6984    This is for ARM $7.1.2.  */
6985 
6986 static void
6987 bad_specifiers (tree object,
6988 		enum bad_spec_place type,
6989 		int virtualp,
6990 		int quals,
6991 		int inlinep,
6992 		int friendp,
6993 		int raises)
6994 {
6995   switch (type)
6996     {
6997       case BSP_VAR:
6998 	if (virtualp)
6999 	  error ("%qD declared as a %<virtual%> variable", object);
7000 	if (inlinep)
7001 	  error ("%qD declared as an %<inline%> variable", object);
7002 	if (quals)
7003 	  error ("%<const%> and %<volatile%> function specifiers on "
7004 	         "%qD invalid in variable declaration", object);
7005 	break;
7006       case BSP_PARM:
7007 	if (virtualp)
7008 	  error ("%qD declared as a %<virtual%> parameter", object);
7009 	if (inlinep)
7010 	  error ("%qD declared as an %<inline%> parameter", object);
7011 	if (quals)
7012 	  error ("%<const%> and %<volatile%> function specifiers on "
7013 	  	 "%qD invalid in parameter declaration", object);
7014 	break;
7015       case BSP_TYPE:
7016 	if (virtualp)
7017 	  error ("%qD declared as a %<virtual%> type", object);
7018 	if (inlinep)
7019 	  error ("%qD declared as an %<inline%> type", object);
7020 	if (quals)
7021 	  error ("%<const%> and %<volatile%> function specifiers on "
7022 	  	 "%qD invalid in type declaration", object);
7023 	break;
7024       case BSP_FIELD:
7025 	if (virtualp)
7026 	  error ("%qD declared as a %<virtual%> field", object);
7027 	if (inlinep)
7028 	  error ("%qD declared as an %<inline%> field", object);
7029 	if (quals)
7030 	  error ("%<const%> and %<volatile%> function specifiers on "
7031 	  	 "%qD invalid in field declaration", object);
7032 	break;
7033       default:
7034         gcc_unreachable();
7035     }
7036   if (friendp)
7037     error ("%q+D declared as a friend", object);
7038   if (raises
7039       && (TREE_CODE (object) == TYPE_DECL
7040 	  || (!TYPE_PTRFN_P (TREE_TYPE (object))
7041 	      && !TYPE_REFFN_P (TREE_TYPE (object))
7042 	      && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7043     error ("%q+D declared with an exception specification", object);
7044 }
7045 
7046 /* DECL is a member function or static data member and is presently
7047    being defined.  Check that the definition is taking place in a
7048    valid namespace.  */
7049 
7050 static void
7051 check_class_member_definition_namespace (tree decl)
7052 {
7053   /* These checks only apply to member functions and static data
7054      members.  */
7055   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7056 	      || TREE_CODE (decl) == VAR_DECL);
7057   /* We check for problems with specializations in pt.c in
7058      check_specialization_namespace, where we can issue better
7059      diagnostics.  */
7060   if (processing_specialization)
7061     return;
7062   /* There are no restrictions on the placement of
7063      explicit instantiations.  */
7064   if (processing_explicit_instantiation)
7065     return;
7066   /* [class.mfct]
7067 
7068      A member function definition that appears outside of the
7069      class definition shall appear in a namespace scope enclosing
7070      the class definition.
7071 
7072      [class.static.data]
7073 
7074      The definition for a static data member shall appear in a
7075      namespace scope enclosing the member's class definition.  */
7076   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7077     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7078 	       decl, DECL_CONTEXT (decl));
7079 }
7080 
7081 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7082    METHOD_TYPE for a non-static member function; QUALS are the
7083    cv-qualifiers that apply to the function.  */
7084 
7085 tree
7086 build_this_parm (tree type, cp_cv_quals quals)
7087 {
7088   tree this_type;
7089   tree qual_type;
7090   tree parm;
7091   cp_cv_quals this_quals;
7092 
7093   if (CLASS_TYPE_P (type))
7094     {
7095       this_type
7096 	= cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7097       this_type = build_pointer_type (this_type);
7098     }
7099   else
7100     this_type = type_of_this_parm (type);
7101   /* The `this' parameter is implicitly `const'; it cannot be
7102      assigned to.  */
7103   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7104   qual_type = cp_build_qualified_type (this_type, this_quals);
7105   parm = build_artificial_parm (this_identifier, qual_type);
7106   cp_apply_type_quals_to_decl (this_quals, parm);
7107   return parm;
7108 }
7109 
7110 /* DECL is a static member function.  Complain if it was declared
7111    with function-cv-quals.  */
7112 
7113 static void
7114 check_static_quals (tree decl, cp_cv_quals quals)
7115 {
7116   if (quals != TYPE_UNQUALIFIED)
7117     error ("static member function %q#D declared with type qualifiers",
7118 	   decl);
7119 }
7120 
7121 /* CTYPE is class type, or null if non-class.
7122    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7123    or METHOD_TYPE.
7124    DECLARATOR is the function's name.
7125    PARMS is a chain of PARM_DECLs for the function.
7126    VIRTUALP is truthvalue of whether the function is virtual or not.
7127    FLAGS are to be passed through to `grokclassfn'.
7128    QUALS are qualifiers indicating whether the function is `const'
7129    or `volatile'.
7130    RAISES is a list of exceptions that this function can raise.
7131    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7132    not look, and -1 if we should not call `grokclassfn' at all.
7133 
7134    SFK is the kind of special function (if any) for the new function.
7135 
7136    Returns `NULL_TREE' if something goes wrong, after issuing
7137    applicable error messages.  */
7138 
7139 static tree
7140 grokfndecl (tree ctype,
7141 	    tree type,
7142 	    tree declarator,
7143 	    tree parms,
7144 	    tree orig_declarator,
7145 	    int virtualp,
7146 	    enum overload_flags flags,
7147 	    cp_cv_quals quals,
7148 	    tree raises,
7149 	    int check,
7150 	    int friendp,
7151 	    int publicp,
7152 	    int inlinep,
7153 	    special_function_kind sfk,
7154 	    bool funcdef_flag,
7155 	    int template_count,
7156 	    tree in_namespace,
7157 	    tree* attrlist,
7158 	    location_t location)
7159 {
7160   tree decl;
7161   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7162   tree t;
7163 
7164   if (raises)
7165     type = build_exception_variant (type, raises);
7166 
7167   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7168 
7169   /* If we have an explicit location, use it, otherwise use whatever
7170      build_lang_decl used (probably input_location).  */
7171   if (location != UNKNOWN_LOCATION)
7172     DECL_SOURCE_LOCATION (decl) = location;
7173 
7174   if (TREE_CODE (type) == METHOD_TYPE)
7175     {
7176       tree parm;
7177       parm = build_this_parm (type, quals);
7178       DECL_CHAIN (parm) = parms;
7179       parms = parm;
7180     }
7181   DECL_ARGUMENTS (decl) = parms;
7182   for (t = parms; t; t = DECL_CHAIN (t))
7183     DECL_CONTEXT (t) = decl;
7184   /* Propagate volatile out from type to decl.  */
7185   if (TYPE_VOLATILE (type))
7186     TREE_THIS_VOLATILE (decl) = 1;
7187 
7188   /* Setup decl according to sfk.  */
7189   switch (sfk)
7190     {
7191     case sfk_constructor:
7192     case sfk_copy_constructor:
7193     case sfk_move_constructor:
7194       DECL_CONSTRUCTOR_P (decl) = 1;
7195       break;
7196     case sfk_destructor:
7197       DECL_DESTRUCTOR_P (decl) = 1;
7198       break;
7199     default:
7200       break;
7201     }
7202 
7203   /* If pointers to member functions use the least significant bit to
7204      indicate whether a function is virtual, ensure a pointer
7205      to this function will have that bit clear.  */
7206   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7207       && TREE_CODE (type) == METHOD_TYPE
7208       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7209     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7210 
7211   if (friendp
7212       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7213     {
7214       if (funcdef_flag)
7215 	error
7216 	  ("defining explicit specialization %qD in friend declaration",
7217 	   orig_declarator);
7218       else
7219 	{
7220 	  tree fns = TREE_OPERAND (orig_declarator, 0);
7221 	  tree args = TREE_OPERAND (orig_declarator, 1);
7222 
7223 	  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7224 	    {
7225 	      /* Something like `template <class T> friend void f<T>()'.  */
7226 	      error ("invalid use of template-id %qD in declaration "
7227 		     "of primary template",
7228 		     orig_declarator);
7229 	      return NULL_TREE;
7230 	    }
7231 
7232 
7233 	  /* A friend declaration of the form friend void f<>().  Record
7234 	     the information in the TEMPLATE_ID_EXPR.  */
7235 	  SET_DECL_IMPLICIT_INSTANTIATION (decl);
7236 
7237 	  if (TREE_CODE (fns) == COMPONENT_REF)
7238 	    {
7239 	      /* Due to bison parser ickiness, we will have already looked
7240 		 up an operator_name or PFUNCNAME within the current class
7241 		 (see template_id in parse.y). If the current class contains
7242 		 such a name, we'll get a COMPONENT_REF here. Undo that.  */
7243 
7244 	      gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7245 			  == current_class_type);
7246 	      fns = TREE_OPERAND (fns, 1);
7247 	    }
7248 	  gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7249 		      || TREE_CODE (fns) == OVERLOAD);
7250 	  DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7251 
7252 	  for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7253 	    if (TREE_PURPOSE (t)
7254 		&& TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7255 	    {
7256 	      error ("default arguments are not allowed in declaration "
7257 		     "of friend template specialization %qD",
7258 		     decl);
7259 	      return NULL_TREE;
7260 	    }
7261 
7262 	  if (inlinep)
7263 	    {
7264 	      error ("%<inline%> is not allowed in declaration of friend "
7265 		     "template specialization %qD",
7266 		     decl);
7267 	      return NULL_TREE;
7268 	    }
7269 	}
7270     }
7271 
7272   /* If this decl has namespace scope, set that up.  */
7273   if (in_namespace)
7274     set_decl_namespace (decl, in_namespace, friendp);
7275   else if (!ctype)
7276     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7277 
7278   /* `main' and builtins have implicit 'C' linkage.  */
7279   if ((MAIN_NAME_P (declarator)
7280        || (IDENTIFIER_LENGTH (declarator) > 10
7281 	   && IDENTIFIER_POINTER (declarator)[0] == '_'
7282 	   && IDENTIFIER_POINTER (declarator)[1] == '_'
7283 	   && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7284       && current_lang_name == lang_name_cplusplus
7285       && ctype == NULL_TREE
7286       && DECL_FILE_SCOPE_P (decl))
7287     SET_DECL_LANGUAGE (decl, lang_c);
7288 
7289   /* Should probably propagate const out from type to decl I bet (mrs).  */
7290   if (staticp)
7291     {
7292       DECL_STATIC_FUNCTION_P (decl) = 1;
7293       DECL_CONTEXT (decl) = ctype;
7294     }
7295 
7296   if (ctype)
7297     {
7298       DECL_CONTEXT (decl) = ctype;
7299       if (funcdef_flag)
7300 	check_class_member_definition_namespace (decl);
7301     }
7302 
7303   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7304     {
7305       if (processing_template_decl)
7306 	error ("cannot declare %<::main%> to be a template");
7307       if (inlinep)
7308 	error ("cannot declare %<::main%> to be inline");
7309       if (!publicp)
7310 	error ("cannot declare %<::main%> to be static");
7311       inlinep = 0;
7312       publicp = 1;
7313     }
7314 
7315   /* Members of anonymous types and local classes have no linkage; make
7316      them internal.  If a typedef is made later, this will be changed.  */
7317   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7318 		|| decl_function_context (TYPE_MAIN_DECL (ctype))))
7319     publicp = 0;
7320 
7321   if (publicp && cxx_dialect == cxx98)
7322     {
7323       /* [basic.link]: A name with no linkage (notably, the name of a class
7324 	 or enumeration declared in a local scope) shall not be used to
7325 	 declare an entity with linkage.
7326 
7327 	 DR 757 relaxes this restriction for C++0x.  */
7328       t = no_linkage_check (TREE_TYPE (decl),
7329 			    /*relaxed_p=*/false);
7330       if (t)
7331 	{
7332 	  if (TYPE_ANONYMOUS_P (t))
7333 	    {
7334 	      if (DECL_EXTERN_C_P (decl))
7335 		/* Allow this; it's pretty common in C.  */;
7336 	      else
7337 		{
7338 		  permerror (input_location, "anonymous type with no linkage "
7339 			     "used to declare function %q#D with linkage",
7340 			     decl);
7341 		  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7342 		    permerror (input_location, "%q+#D does not refer to the unqualified "
7343 			       "type, so it is not used for linkage",
7344 			       TYPE_NAME (t));
7345 		}
7346 	    }
7347 	  else
7348 	    permerror (input_location, "type %qT with no linkage used to "
7349 		       "declare function %q#D with linkage", t, decl);
7350 	}
7351     }
7352 
7353   TREE_PUBLIC (decl) = publicp;
7354   if (! publicp)
7355     {
7356       DECL_INTERFACE_KNOWN (decl) = 1;
7357       DECL_NOT_REALLY_EXTERN (decl) = 1;
7358     }
7359 
7360   /* If the declaration was declared inline, mark it as such.  */
7361   if (inlinep)
7362     DECL_DECLARED_INLINE_P (decl) = 1;
7363   if (inlinep & 2)
7364     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7365 
7366   DECL_EXTERNAL (decl) = 1;
7367   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7368     {
7369       error (ctype
7370              ? G_("static member function %qD cannot have cv-qualifier")
7371              : G_("non-member function %qD cannot have cv-qualifier"),
7372 	     decl);
7373       quals = TYPE_UNQUALIFIED;
7374     }
7375 
7376   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7377       && !grok_op_properties (decl, /*complain=*/true))
7378     return NULL_TREE;
7379   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7380     {
7381       bool long_long_unsigned_p;
7382       bool long_double_p;
7383       const char *suffix = NULL;
7384       /* [over.literal]/6: Literal operators shall not have C linkage. */
7385       if (DECL_LANGUAGE (decl) == lang_c)
7386 	{
7387 	  error ("literal operator with C linkage");
7388 	  return NULL_TREE;
7389 	}
7390 
7391       if (DECL_NAMESPACE_SCOPE_P (decl))
7392 	{
7393 	  if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7394 					    &long_double_p))
7395 	    {
7396 	      error ("%qD has invalid argument list", decl);
7397 	      return NULL_TREE;
7398 	    }
7399 
7400 	  suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7401 	  if (long_long_unsigned_p)
7402 	    {
7403 	      if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7404 		warning (0, "integer suffix %<%s%>"
7405 			    " shadowed by implementation", suffix);
7406 	    }
7407 	  else if (long_double_p)
7408 	    {
7409 	      if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7410 		warning (0, "floating point suffix %<%s%>"
7411 			    " shadowed by implementation", suffix);
7412 	    }
7413 	}
7414       else
7415 	{
7416 	  error ("%qD must be a non-member function", decl);
7417 	  return NULL_TREE;
7418 	}
7419     }
7420 
7421   if (funcdef_flag)
7422     /* Make the init_value nonzero so pushdecl knows this is not
7423        tentative.  error_mark_node is replaced later with the BLOCK.  */
7424     DECL_INITIAL (decl) = error_mark_node;
7425 
7426   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7427     TREE_NOTHROW (decl) = 1;
7428 
7429   /* Caller will do the rest of this.  */
7430   if (check < 0)
7431     return decl;
7432 
7433   if (ctype != NULL_TREE)
7434     grokclassfn (ctype, decl, flags);
7435 
7436   decl = check_explicit_specialization (orig_declarator, decl,
7437 					template_count,
7438 					2 * funcdef_flag +
7439 					4 * (friendp != 0));
7440   if (decl == error_mark_node)
7441     return NULL_TREE;
7442 
7443   if (DECL_STATIC_FUNCTION_P (decl))
7444     check_static_quals (decl, quals);
7445 
7446   if (attrlist)
7447     {
7448       cplus_decl_attributes (&decl, *attrlist, 0);
7449       *attrlist = NULL_TREE;
7450     }
7451 
7452   /* Check main's type after attributes have been applied.  */
7453   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7454     {
7455       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7456 			integer_type_node))
7457 	{
7458 	  tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7459 	  tree newtype;
7460 	  error ("%<::main%> must return %<int%>");
7461 	  newtype = build_function_type (integer_type_node, oldtypeargs);
7462 	  TREE_TYPE (decl) = newtype;
7463 	}
7464       if (warn_main)
7465 	check_main_parameter_types (decl);
7466     }
7467 
7468   if (ctype != NULL_TREE
7469       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7470       && check)
7471     {
7472       tree old_decl = check_classfn (ctype, decl,
7473 				     (processing_template_decl
7474 				      > template_class_depth (ctype))
7475 				     ? current_template_parms
7476 				     : NULL_TREE);
7477 
7478       if (old_decl == error_mark_node)
7479 	return NULL_TREE;
7480 
7481       if (old_decl)
7482 	{
7483 	  tree ok;
7484 	  tree pushed_scope;
7485 
7486 	  if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7487 	    /* Because grokfndecl is always supposed to return a
7488 	       FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7489 	       here.  We depend on our callers to figure out that its
7490 	       really a template that's being returned.  */
7491 	    old_decl = DECL_TEMPLATE_RESULT (old_decl);
7492 
7493 	  if (DECL_STATIC_FUNCTION_P (old_decl)
7494 	      && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7495 	    {
7496 	      /* Remove the `this' parm added by grokclassfn.  */
7497 	      revert_static_member_fn (decl);
7498 	      check_static_quals (decl, quals);
7499 	    }
7500 	  if (DECL_ARTIFICIAL (old_decl))
7501 	    {
7502 	      error ("definition of implicitly-declared %qD", old_decl);
7503 	      return NULL_TREE;
7504 	    }
7505 	  else if (DECL_DEFAULTED_FN (old_decl))
7506 	    {
7507 	      error ("definition of explicitly-defaulted %q+D", decl);
7508 	      error ("%q+#D explicitly defaulted here", old_decl);
7509 	      return NULL_TREE;
7510 	    }
7511 
7512 	  /* Since we've smashed OLD_DECL to its
7513 	     DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7514 	  if (TREE_CODE (decl) == TEMPLATE_DECL)
7515 	    decl = DECL_TEMPLATE_RESULT (decl);
7516 
7517 	  /* Attempt to merge the declarations.  This can fail, in
7518 	     the case of some invalid specialization declarations.  */
7519 	  pushed_scope = push_scope (ctype);
7520 	  ok = duplicate_decls (decl, old_decl, friendp);
7521 	  if (pushed_scope)
7522 	    pop_scope (pushed_scope);
7523 	  if (!ok)
7524 	    {
7525 	      error ("no %q#D member function declared in class %qT",
7526 		     decl, ctype);
7527 	      return NULL_TREE;
7528 	    }
7529 	  return old_decl;
7530 	}
7531     }
7532 
7533   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7534     return NULL_TREE;
7535 
7536   if (ctype == NULL_TREE || check)
7537     return decl;
7538 
7539   if (virtualp)
7540     DECL_VIRTUAL_P (decl) = 1;
7541 
7542   return decl;
7543 }
7544 
7545 /* decl is a FUNCTION_DECL.
7546    specifiers are the parsed virt-specifiers.
7547 
7548    Set flags to reflect the virt-specifiers.
7549 
7550    Returns decl.  */
7551 
7552 static tree
7553 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7554 {
7555   if (decl == NULL_TREE)
7556     return decl;
7557   if (specifiers & VIRT_SPEC_OVERRIDE)
7558     DECL_OVERRIDE_P (decl) = 1;
7559   if (specifiers & VIRT_SPEC_FINAL)
7560     DECL_FINAL_P (decl) = 1;
7561   return decl;
7562 }
7563 
7564 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7565    the linkage that DECL will receive in the object file.  */
7566 
7567 static void
7568 set_linkage_for_static_data_member (tree decl)
7569 {
7570   /* A static data member always has static storage duration and
7571      external linkage.  Note that static data members are forbidden in
7572      local classes -- the only situation in which a class has
7573      non-external linkage.  */
7574   TREE_PUBLIC (decl) = 1;
7575   TREE_STATIC (decl) = 1;
7576   /* For non-template classes, static data members are always put
7577      out in exactly those files where they are defined, just as
7578      with ordinary namespace-scope variables.  */
7579   if (!processing_template_decl)
7580     DECL_INTERFACE_KNOWN (decl) = 1;
7581 }
7582 
7583 /* Create a VAR_DECL named NAME with the indicated TYPE.
7584 
7585    If SCOPE is non-NULL, it is the class type or namespace containing
7586    the variable.  If SCOPE is NULL, the variable should is created in
7587    the innermost enclosings scope.  */
7588 
7589 static tree
7590 grokvardecl (tree type,
7591 	     tree name,
7592 	     const cp_decl_specifier_seq *declspecs,
7593 	     int initialized,
7594 	     int constp,
7595 	     tree scope)
7596 {
7597   tree decl;
7598   tree explicit_scope;
7599 
7600   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7601 
7602   /* Compute the scope in which to place the variable, but remember
7603      whether or not that scope was explicitly specified by the user.   */
7604   explicit_scope = scope;
7605   if (!scope)
7606     {
7607       /* An explicit "extern" specifier indicates a namespace-scope
7608 	 variable.  */
7609       if (declspecs->storage_class == sc_extern)
7610 	scope = current_decl_namespace ();
7611       else if (!at_function_scope_p ())
7612 	scope = current_scope ();
7613     }
7614 
7615   if (scope
7616       && (/* If the variable is a namespace-scope variable declared in a
7617 	     template, we need DECL_LANG_SPECIFIC.  */
7618 	  (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7619 	  /* Similarly for namespace-scope variables with language linkage
7620 	     other than C++.  */
7621 	  || (TREE_CODE (scope) == NAMESPACE_DECL
7622 	      && current_lang_name != lang_name_cplusplus)
7623 	  /* Similarly for static data members.  */
7624 	  || TYPE_P (scope)))
7625     decl = build_lang_decl (VAR_DECL, name, type);
7626   else
7627     decl = build_decl (input_location, VAR_DECL, name, type);
7628 
7629   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7630     set_decl_namespace (decl, explicit_scope, 0);
7631   else
7632     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7633 
7634   if (declspecs->storage_class == sc_extern)
7635     {
7636       DECL_THIS_EXTERN (decl) = 1;
7637       DECL_EXTERNAL (decl) = !initialized;
7638     }
7639 
7640   if (DECL_CLASS_SCOPE_P (decl))
7641     {
7642       set_linkage_for_static_data_member (decl);
7643       /* This function is only called with out-of-class definitions.  */
7644       DECL_EXTERNAL (decl) = 0;
7645       check_class_member_definition_namespace (decl);
7646     }
7647   /* At top level, either `static' or no s.c. makes a definition
7648      (perhaps tentative), and absence of `static' makes it public.  */
7649   else if (toplevel_bindings_p ())
7650     {
7651       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7652 			    && (DECL_THIS_EXTERN (decl) || ! constp));
7653       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7654     }
7655   /* Not at top level, only `static' makes a static definition.  */
7656   else
7657     {
7658       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7659       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7660     }
7661 
7662   if (declspecs->specs[(int)ds_thread])
7663     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7664 
7665   /* If the type of the decl has no linkage, make sure that we'll
7666      notice that in mark_used.  */
7667   if (cxx_dialect > cxx98
7668       && decl_linkage (decl) != lk_none
7669       && DECL_LANG_SPECIFIC (decl) == NULL
7670       && !DECL_EXTERN_C_P (decl)
7671       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7672     retrofit_lang_decl (decl);
7673 
7674   if (TREE_PUBLIC (decl))
7675     {
7676       /* [basic.link]: A name with no linkage (notably, the name of a class
7677 	 or enumeration declared in a local scope) shall not be used to
7678 	 declare an entity with linkage.
7679 
7680 	 DR 757 relaxes this restriction for C++0x.  */
7681       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7682 		: no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7683       if (t)
7684 	{
7685 	  if (TYPE_ANONYMOUS_P (t))
7686 	    {
7687 	      if (DECL_EXTERN_C_P (decl))
7688 		/* Allow this; it's pretty common in C.  */
7689 		;
7690 	      else
7691 		{
7692 		  /* DRs 132, 319 and 389 seem to indicate types with
7693 		     no linkage can only be used to declare extern "C"
7694 		     entities.  Since it's not always an error in the
7695 		     ISO C++ 90 Standard, we only issue a warning.  */
7696 		  warning (0, "anonymous type with no linkage used to declare "
7697 			   "variable %q#D with linkage", decl);
7698 		  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7699 		    warning (0, "%q+#D does not refer to the unqualified "
7700 			     "type, so it is not used for linkage",
7701 			     TYPE_NAME (t));
7702 		}
7703 	    }
7704 	  else
7705 	    warning (0, "type %qT with no linkage used to declare variable "
7706 		     "%q#D with linkage", t, decl);
7707 	}
7708     }
7709   else
7710     DECL_INTERFACE_KNOWN (decl) = 1;
7711 
7712   return decl;
7713 }
7714 
7715 /* Create and return a canonical pointer to member function type, for
7716    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7717 
7718 tree
7719 build_ptrmemfunc_type (tree type)
7720 {
7721   tree field, fields;
7722   tree t;
7723   tree unqualified_variant = NULL_TREE;
7724 
7725   if (type == error_mark_node)
7726     return type;
7727 
7728   /* If a canonical type already exists for this type, use it.  We use
7729      this method instead of type_hash_canon, because it only does a
7730      simple equality check on the list of field members.  */
7731 
7732   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7733     return t;
7734 
7735   /* Make sure that we always have the unqualified pointer-to-member
7736      type first.  */
7737   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7738     unqualified_variant
7739       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7740 
7741   t = make_class_type (RECORD_TYPE);
7742   xref_basetypes (t, NULL_TREE);
7743 
7744   /* Let the front end know this is a pointer to member function...  */
7745   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7746   /* ... and not really a class type.  */
7747   SET_CLASS_TYPE_P (t, 0);
7748 
7749   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7750   fields = field;
7751 
7752   field = build_decl (input_location, FIELD_DECL, delta_identifier,
7753 		      delta_type_node);
7754   DECL_CHAIN (field) = fields;
7755   fields = field;
7756 
7757   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7758 
7759   /* Zap out the name so that the back end will give us the debugging
7760      information for this anonymous RECORD_TYPE.  */
7761   TYPE_NAME (t) = NULL_TREE;
7762 
7763   /* If this is not the unqualified form of this pointer-to-member
7764      type, set the TYPE_MAIN_VARIANT for this type to be the
7765      unqualified type.  Since they are actually RECORD_TYPEs that are
7766      not variants of each other, we must do this manually.
7767      As we just built a new type there is no need to do yet another copy.  */
7768   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7769     {
7770       int type_quals = cp_type_quals (type);
7771       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7772       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7773       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7774       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7775       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7776       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7777       TREE_TYPE (TYPE_BINFO (t)) = t;
7778     }
7779 
7780   /* Cache this pointer-to-member type so that we can find it again
7781      later.  */
7782   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7783 
7784   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7785     SET_TYPE_STRUCTURAL_EQUALITY (t);
7786   else if (TYPE_CANONICAL (type) != type)
7787     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7788 
7789   return t;
7790 }
7791 
7792 /* Create and return a pointer to data member type.  */
7793 
7794 tree
7795 build_ptrmem_type (tree class_type, tree member_type)
7796 {
7797   if (TREE_CODE (member_type) == METHOD_TYPE)
7798     {
7799       cp_cv_quals quals = type_memfn_quals (member_type);
7800       member_type = build_memfn_type (member_type, class_type, quals);
7801       return build_ptrmemfunc_type (build_pointer_type (member_type));
7802     }
7803   else
7804     {
7805       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7806       return build_offset_type (class_type, member_type);
7807     }
7808 }
7809 
7810 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7811    Check to see that the definition is valid.  Issue appropriate error
7812    messages.  Return 1 if the definition is particularly bad, or 0
7813    otherwise.  */
7814 
7815 static int
7816 check_static_variable_definition (tree decl, tree type)
7817 {
7818   /* Can't check yet if we don't know the type.  */
7819   if (dependent_type_p (type))
7820     return 0;
7821   /* If DECL is declared constexpr, we'll do the appropriate checks
7822      in check_initializer.  */
7823   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7824     return 0;
7825   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7826     {
7827       if (!COMPLETE_TYPE_P (type))
7828 	error ("in-class initialization of static data member %q#D of "
7829 	       "incomplete type", decl);
7830       else if (literal_type_p (type))
7831 	permerror (input_location,
7832 		   "%<constexpr%> needed for in-class initialization of "
7833 		   "static data member %q#D of non-integral type", decl);
7834       else
7835 	error ("in-class initialization of static data member %q#D of "
7836 	       "non-literal type", decl);
7837       return 1;
7838     }
7839 
7840   /* Motion 10 at San Diego: If a static const integral data member is
7841      initialized with an integral constant expression, the initializer
7842      may appear either in the declaration (within the class), or in
7843      the definition, but not both.  If it appears in the class, the
7844      member is a member constant.  The file-scope definition is always
7845      required.  */
7846   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7847     {
7848       error ("invalid in-class initialization of static data member "
7849 	     "of non-integral type %qT",
7850 	     type);
7851       return 1;
7852     }
7853   else if (!CP_TYPE_CONST_P (type))
7854     error ("ISO C++ forbids in-class initialization of non-const "
7855 	   "static member %qD",
7856 	   decl);
7857   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7858     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7859 	     "%qD of non-integral type %qT", decl, type);
7860 
7861   return 0;
7862 }
7863 
7864 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7865    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7866    expressions out into temporary variables so that walk_tree doesn't
7867    step into them (c++/15764).  */
7868 
7869 static tree
7870 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7871 {
7872   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7873   tree expr = *expr_p;
7874   if (TREE_CODE (expr) == SAVE_EXPR)
7875     {
7876       tree op = TREE_OPERAND (expr, 0);
7877       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7878       if (TREE_SIDE_EFFECTS (op))
7879 	TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7880       *walk_subtrees = 0;
7881     }
7882   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7883     *walk_subtrees = 0;
7884   return NULL;
7885 }
7886 
7887 /* Entry point for the above.  */
7888 
7889 static void
7890 stabilize_vla_size (tree size)
7891 {
7892   struct pointer_set_t *pset = pointer_set_create ();
7893   /* Break out any function calls into temporary variables.  */
7894   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7895 }
7896 
7897 /* Given the SIZE (i.e., number of elements) in an array, compute an
7898    appropriate index type for the array.  If non-NULL, NAME is the
7899    name of the thing being declared.  */
7900 
7901 tree
7902 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7903 {
7904   tree type;
7905   tree itype;
7906   tree osize = size;
7907   tree abi_1_itype = NULL_TREE;
7908 
7909   if (error_operand_p (size))
7910     return error_mark_node;
7911 
7912   type = TREE_TYPE (size);
7913   /* type_dependent_expression_p? */
7914   if (!dependent_type_p (type))
7915     {
7916       mark_rvalue_use (size);
7917 
7918       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7919 	  && TREE_SIDE_EFFECTS (size))
7920 	/* In C++98, we mark a non-constant array bound with a magic
7921 	   NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7922       else
7923 	{
7924 	  size = fold_non_dependent_expr (size);
7925 
7926 	  if (CLASS_TYPE_P (type)
7927 	      && CLASSTYPE_LITERAL_P (type))
7928 	    {
7929 	      size = build_expr_type_conversion (WANT_INT, size, true);
7930 	      if (!size)
7931 		{
7932 		  if (!(complain & tf_error))
7933 		    return error_mark_node;
7934 		  if (name)
7935 		    error ("size of array %qD has non-integral type %qT",
7936 			   name, type);
7937 		  else
7938 		    error ("size of array has non-integral type %qT", type);
7939 		  size = integer_one_node;
7940 		}
7941 	      if (size == error_mark_node)
7942 		return error_mark_node;
7943 	      type = TREE_TYPE (size);
7944 	      /* We didn't support this case in GCC 3.2, so don't bother
7945 		 trying to model it now in ABI v1.  */
7946 	      abi_1_itype = error_mark_node;
7947 	    }
7948 
7949 	  size = maybe_constant_value (size);
7950 	  if (!TREE_CONSTANT (size))
7951 	    size = osize;
7952 	}
7953 
7954       if (error_operand_p (size))
7955 	return error_mark_node;
7956 
7957       /* The array bound must be an integer type.  */
7958       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7959 	{
7960 	  if (!(complain & tf_error))
7961 	    return error_mark_node;
7962 	  if (name)
7963 	    error ("size of array %qD has non-integral type %qT", name, type);
7964 	  else
7965 	    error ("size of array has non-integral type %qT", type);
7966 	  size = integer_one_node;
7967 	  type = TREE_TYPE (size);
7968 	}
7969     }
7970 
7971   /* A type is dependent if it is...an array type constructed from any
7972      dependent type or whose size is specified by a constant expression
7973      that is value-dependent.  */
7974   /* We can only call value_dependent_expression_p on integral constant
7975      expressions; treat non-constant expressions as dependent, too.  */
7976   if (processing_template_decl
7977       && (dependent_type_p (type)
7978 	  || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7979     {
7980       /* We cannot do any checking for a SIZE that isn't known to be
7981 	 constant. Just build the index type and mark that it requires
7982 	 structural equality checks.  */
7983       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7984 					   size, integer_one_node));
7985       TYPE_DEPENDENT_P (itype) = 1;
7986       TYPE_DEPENDENT_P_VALID (itype) = 1;
7987       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7988       return itype;
7989     }
7990 
7991   if (!abi_version_at_least (2) && processing_template_decl
7992       && abi_1_itype == NULL_TREE)
7993     /* For abi-1, we handled all instances in templates the same way,
7994        even when they were non-dependent. This affects the manglings
7995        produced.  So, we do the normal checking for non-dependent
7996        sizes, but at the end we'll return the same type that abi-1
7997        would have, but with TYPE_CANONICAL set to the "right"
7998        value that the current ABI would provide. */
7999     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8000 					       osize, integer_one_node));
8001 
8002   /* Normally, the array-bound will be a constant.  */
8003   if (TREE_CODE (size) == INTEGER_CST)
8004     {
8005       /* Check to see if the array bound overflowed.  Make that an
8006 	 error, no matter how generous we're being.  */
8007       constant_expression_error (size);
8008 
8009       /* An array must have a positive number of elements.  */
8010       if (INT_CST_LT (size, integer_zero_node))
8011 	{
8012 	  if (!(complain & tf_error))
8013 	    return error_mark_node;
8014 	  if (name)
8015 	    error ("size of array %qD is negative", name);
8016 	  else
8017 	    error ("size of array is negative");
8018 	  size = integer_one_node;
8019 	}
8020       /* As an extension we allow zero-sized arrays.  */
8021       else if (integer_zerop (size))
8022 	{
8023 	  if (!(complain & tf_error))
8024 	    /* We must fail if performing argument deduction (as
8025 	       indicated by the state of complain), so that
8026 	       another substitution can be found.  */
8027 	    return error_mark_node;
8028 	  else if (in_system_header)
8029 	    /* Allow them in system headers because glibc uses them.  */;
8030 	  else if (name)
8031 	    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8032 	  else
8033 	    pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8034 	}
8035     }
8036   else if (TREE_CONSTANT (size)
8037 	   /* We don't allow VLAs at non-function scopes, or during
8038 	      tentative template substitution.  */
8039 	   || !at_function_scope_p () || !(complain & tf_error))
8040     {
8041       if (!(complain & tf_error))
8042 	return error_mark_node;
8043       /* `(int) &fn' is not a valid array bound.  */
8044       if (name)
8045 	error ("size of array %qD is not an integral constant-expression",
8046 	       name);
8047       else
8048 	error ("size of array is not an integral constant-expression");
8049       size = integer_one_node;
8050     }
8051   else if (pedantic && warn_vla != 0)
8052     {
8053       if (name)
8054 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8055       else
8056 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8057     }
8058   else if (warn_vla > 0)
8059     {
8060       if (name)
8061 	warning (OPT_Wvla,
8062                  "variable length array %qD is used", name);
8063       else
8064 	warning (OPT_Wvla,
8065                  "variable length array is used");
8066     }
8067 
8068   if (processing_template_decl && !TREE_CONSTANT (size))
8069     /* A variable sized array.  */
8070     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8071   else
8072     {
8073       HOST_WIDE_INT saved_processing_template_decl;
8074 
8075       /* Compute the index of the largest element in the array.  It is
8076 	 one less than the number of elements in the array.  We save
8077 	 and restore PROCESSING_TEMPLATE_DECL so that computations in
8078 	 cp_build_binary_op will be appropriately folded.  */
8079       saved_processing_template_decl = processing_template_decl;
8080       processing_template_decl = 0;
8081       itype = cp_build_binary_op (input_location,
8082 				  MINUS_EXPR,
8083 				  cp_convert (ssizetype, size),
8084 				  cp_convert (ssizetype, integer_one_node),
8085 				  tf_warning_or_error);
8086       itype = fold (itype);
8087       processing_template_decl = saved_processing_template_decl;
8088 
8089       if (!TREE_CONSTANT (itype))
8090 	/* A variable sized array.  */
8091 	itype = variable_size (itype);
8092       /* Make sure that there was no overflow when creating to a signed
8093 	 index type.  (For example, on a 32-bit machine, an array with
8094 	 size 2^32 - 1 is too big.)  */
8095       else if (TREE_CODE (itype) == INTEGER_CST
8096 	       && TREE_OVERFLOW (itype))
8097 	{
8098 	  if (!(complain & tf_error))
8099 	    return error_mark_node;
8100 	  error ("overflow in array dimension");
8101 	  TREE_OVERFLOW (itype) = 0;
8102 	}
8103     }
8104 
8105   /* Create and return the appropriate index type.  */
8106   if (abi_1_itype && abi_1_itype != error_mark_node)
8107     {
8108       tree t = build_index_type (itype);
8109       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8110       itype = abi_1_itype;
8111     }
8112   else
8113     itype = build_index_type (itype);
8114 
8115   /* If the index type were dependent, we would have returned early, so
8116      remember that it isn't.  */
8117   TYPE_DEPENDENT_P (itype) = 0;
8118   TYPE_DEPENDENT_P_VALID (itype) = 1;
8119   return itype;
8120 }
8121 
8122 /* Returns the scope (if any) in which the entity declared by
8123    DECLARATOR will be located.  If the entity was declared with an
8124    unqualified name, NULL_TREE is returned.  */
8125 
8126 tree
8127 get_scope_of_declarator (const cp_declarator *declarator)
8128 {
8129   while (declarator && declarator->kind != cdk_id)
8130     declarator = declarator->declarator;
8131 
8132   /* If the declarator-id is a SCOPE_REF, the scope in which the
8133      declaration occurs is the first operand.  */
8134   if (declarator
8135       && declarator->u.id.qualifying_scope)
8136     return declarator->u.id.qualifying_scope;
8137 
8138   /* Otherwise, the declarator is not a qualified name; the entity will
8139      be declared in the current scope.  */
8140   return NULL_TREE;
8141 }
8142 
8143 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8144    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8145    with this type.  */
8146 
8147 static tree
8148 create_array_type_for_decl (tree name, tree type, tree size)
8149 {
8150   tree itype = NULL_TREE;
8151 
8152   /* If things have already gone awry, bail now.  */
8153   if (type == error_mark_node || size == error_mark_node)
8154     return error_mark_node;
8155 
8156   /* 8.3.4/1: If the type of the identifier of D contains the auto
8157      type-specifier, the program is ill-formed.  */
8158   if (pedantic && type_uses_auto (type))
8159     pedwarn (input_location, OPT_pedantic,
8160 	     "declaration of %qD as array of %<auto%>", name);
8161 
8162   /* If there are some types which cannot be array elements,
8163      issue an error-message and return.  */
8164   switch (TREE_CODE (type))
8165     {
8166     case VOID_TYPE:
8167       if (name)
8168         error ("declaration of %qD as array of void", name);
8169       else
8170         error ("creating array of void");
8171       return error_mark_node;
8172 
8173     case FUNCTION_TYPE:
8174       if (name)
8175         error ("declaration of %qD as array of functions", name);
8176       else
8177         error ("creating array of functions");
8178       return error_mark_node;
8179 
8180     case REFERENCE_TYPE:
8181       if (name)
8182         error ("declaration of %qD as array of references", name);
8183       else
8184         error ("creating array of references");
8185       return error_mark_node;
8186 
8187     case METHOD_TYPE:
8188       if (name)
8189         error ("declaration of %qD as array of function members", name);
8190       else
8191         error ("creating array of function members");
8192       return error_mark_node;
8193 
8194     default:
8195       break;
8196     }
8197 
8198   /* [dcl.array]
8199 
8200      The constant expressions that specify the bounds of the arrays
8201      can be omitted only for the first member of the sequence.  */
8202   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8203     {
8204       if (name)
8205 	error ("declaration of %qD as multidimensional array must "
8206 	       "have bounds for all dimensions except the first",
8207 	       name);
8208       else
8209 	error ("multidimensional array must have bounds for all "
8210 	       "dimensions except the first");
8211 
8212       return error_mark_node;
8213     }
8214 
8215   /* Figure out the index type for the array.  */
8216   if (size)
8217     itype = compute_array_index_type (name, size, tf_warning_or_error);
8218 
8219   /* [dcl.array]
8220      T is called the array element type; this type shall not be [...] an
8221      abstract class type.  */
8222   abstract_virtuals_error (name, type);
8223 
8224   return build_cplus_array_type (type, itype);
8225 }
8226 
8227 /* Check that it's OK to declare a function with the indicated TYPE.
8228    SFK indicates the kind of special function (if any) that this
8229    function is.  OPTYPE is the type given in a conversion operator
8230    declaration, or the class type for a constructor/destructor.
8231    Returns the actual return type of the function; that
8232    may be different than TYPE if an error occurs, or for certain
8233    special functions.  */
8234 
8235 static tree
8236 check_special_function_return_type (special_function_kind sfk,
8237 				    tree type,
8238 				    tree optype)
8239 {
8240   switch (sfk)
8241     {
8242     case sfk_constructor:
8243       if (type)
8244 	error ("return type specification for constructor invalid");
8245 
8246       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8247 	type = build_pointer_type (optype);
8248       else
8249 	type = void_type_node;
8250       break;
8251 
8252     case sfk_destructor:
8253       if (type)
8254 	error ("return type specification for destructor invalid");
8255       /* We can't use the proper return type here because we run into
8256 	 problems with ambiguous bases and covariant returns.
8257 	 Java classes are left unchanged because (void *) isn't a valid
8258 	 Java type, and we don't want to change the Java ABI.  */
8259       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8260 	type = build_pointer_type (void_type_node);
8261       else
8262 	type = void_type_node;
8263       break;
8264 
8265     case sfk_conversion:
8266       if (type)
8267 	error ("return type specified for %<operator %T%>",  optype);
8268       type = optype;
8269       break;
8270 
8271     default:
8272       gcc_unreachable ();
8273     }
8274 
8275   return type;
8276 }
8277 
8278 /* A variable or data member (whose unqualified name is IDENTIFIER)
8279    has been declared with the indicated TYPE.  If the TYPE is not
8280    acceptable, issue an error message and return a type to use for
8281    error-recovery purposes.  */
8282 
8283 tree
8284 check_var_type (tree identifier, tree type)
8285 {
8286   if (VOID_TYPE_P (type))
8287     {
8288       if (!identifier)
8289 	error ("unnamed variable or field declared void");
8290       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8291 	{
8292 	  gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8293 	  error ("variable or field %qE declared void", identifier);
8294 	}
8295       else
8296 	error ("variable or field declared void");
8297       type = error_mark_node;
8298     }
8299 
8300   return type;
8301 }
8302 
8303 /* Given declspecs and a declarator (abstract or otherwise), determine
8304    the name and type of the object declared and construct a DECL node
8305    for it.
8306 
8307    DECLSPECS points to the representation of declaration-specifier
8308    sequence that precedes declarator.
8309 
8310    DECL_CONTEXT says which syntactic context this declaration is in:
8311      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8312      FUNCDEF for a function definition.  Like NORMAL but a few different
8313       error messages in each case.  Return value may be zero meaning
8314       this definition is too screwy to try to parse.
8315      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8316       handle member functions (which have FIELD context).
8317       Return value may be zero meaning this definition is too screwy to
8318       try to parse.
8319      PARM for a parameter declaration (either within a function prototype
8320       or before a function body).  Make a PARM_DECL, or return void_type_node.
8321      TPARM for a template parameter declaration.
8322      CATCHPARM for a parameter declaration before a catch clause.
8323      TYPENAME if for a typename (in a cast or sizeof).
8324       Don't make a DECL node; just return the ..._TYPE node.
8325      FIELD for a struct or union field; make a FIELD_DECL.
8326      BITFIELD for a field with specified width.
8327 
8328    INITIALIZED is as for start_decl.
8329 
8330    ATTRLIST is a pointer to the list of attributes, which may be NULL
8331    if there are none; *ATTRLIST may be modified if attributes from inside
8332    the declarator should be applied to the declaration.
8333 
8334    When this function is called, scoping variables (such as
8335    CURRENT_CLASS_TYPE) should reflect the scope in which the
8336    declaration occurs, not the scope in which the new declaration will
8337    be placed.  For example, on:
8338 
8339      void S::f() { ... }
8340 
8341    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8342    should not be `S'.
8343 
8344    Returns a DECL (if a declarator is present), a TYPE (if there is no
8345    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8346    error occurs. */
8347 
8348 tree
8349 grokdeclarator (const cp_declarator *declarator,
8350 		const cp_decl_specifier_seq *declspecs,
8351 		enum decl_context decl_context,
8352 		int initialized,
8353 		tree* attrlist)
8354 {
8355   tree type = NULL_TREE;
8356   int longlong = 0;
8357   int explicit_int128 = 0;
8358   int virtualp, explicitp, friendp, inlinep, staticp;
8359   int explicit_int = 0;
8360   int explicit_char = 0;
8361   int defaulted_int = 0;
8362   tree dependent_name = NULL_TREE;
8363 
8364   tree typedef_decl = NULL_TREE;
8365   const char *name = NULL;
8366   tree typedef_type = NULL_TREE;
8367   /* True if this declarator is a function definition.  */
8368   bool funcdef_flag = false;
8369   cp_declarator_kind innermost_code = cdk_error;
8370   int bitfield = 0;
8371 #if 0
8372   /* See the code below that used this.  */
8373   tree decl_attr = NULL_TREE;
8374 #endif
8375 
8376   /* Keep track of what sort of function is being processed
8377      so that we can warn about default return values, or explicit
8378      return values which do not match prescribed defaults.  */
8379   special_function_kind sfk = sfk_none;
8380 
8381   tree dname = NULL_TREE;
8382   tree ctor_return_type = NULL_TREE;
8383   enum overload_flags flags = NO_SPECIAL;
8384   /* cv-qualifiers that apply to the declarator, for a declaration of
8385      a member function.  */
8386   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8387   /* virt-specifiers that apply to the declarator, for a declaration of
8388      a member function.  */
8389   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8390   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8391   int type_quals;
8392   tree raises = NULL_TREE;
8393   int template_count = 0;
8394   tree returned_attrs = NULL_TREE;
8395   tree parms = NULL_TREE;
8396   const cp_declarator *id_declarator;
8397   /* The unqualified name of the declarator; either an
8398      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8399   tree unqualified_id;
8400   /* The class type, if any, in which this entity is located,
8401      or NULL_TREE if none.  Note that this value may be different from
8402      the current class type; for example if an attempt is made to declare
8403      "A::f" inside "B", this value will be "A".  */
8404   tree ctype = current_class_type;
8405   /* The NAMESPACE_DECL for the namespace in which this entity is
8406      located.  If an unqualified name is used to declare the entity,
8407      this value will be NULL_TREE, even if the entity is located at
8408      namespace scope.  */
8409   tree in_namespace = NULL_TREE;
8410   cp_storage_class storage_class;
8411   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8412   bool type_was_error_mark_node = false;
8413   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8414   bool template_type_arg = false;
8415   bool template_parm_flag = false;
8416   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8417   const char *errmsg;
8418 
8419   signed_p = declspecs->specs[(int)ds_signed];
8420   unsigned_p = declspecs->specs[(int)ds_unsigned];
8421   short_p = declspecs->specs[(int)ds_short];
8422   long_p = declspecs->specs[(int)ds_long];
8423   longlong = declspecs->specs[(int)ds_long] >= 2;
8424   explicit_int128 = declspecs->explicit_int128_p;
8425   thread_p = declspecs->specs[(int)ds_thread];
8426 
8427   if (decl_context == FUNCDEF)
8428     funcdef_flag = true, decl_context = NORMAL;
8429   else if (decl_context == MEMFUNCDEF)
8430     funcdef_flag = true, decl_context = FIELD;
8431   else if (decl_context == BITFIELD)
8432     bitfield = 1, decl_context = FIELD;
8433   else if (decl_context == TEMPLATE_TYPE_ARG)
8434     template_type_arg = true, decl_context = TYPENAME;
8435   else if (decl_context == TPARM)
8436     template_parm_flag = true, decl_context = PARM;
8437 
8438   if (initialized > 1)
8439     funcdef_flag = true;
8440 
8441   /* Look inside a declarator for the name being declared
8442      and get it as a string, for an error message.  */
8443   for (id_declarator = declarator;
8444        id_declarator;
8445        id_declarator = id_declarator->declarator)
8446     {
8447       if (id_declarator->kind != cdk_id)
8448 	innermost_code = id_declarator->kind;
8449 
8450       switch (id_declarator->kind)
8451 	{
8452 	case cdk_function:
8453 	  if (id_declarator->declarator
8454 	      && id_declarator->declarator->kind == cdk_id)
8455 	    {
8456 	      sfk = id_declarator->declarator->u.id.sfk;
8457 	      if (sfk == sfk_destructor)
8458 		flags = DTOR_FLAG;
8459 	    }
8460 	  break;
8461 
8462 	case cdk_id:
8463 	  {
8464 	    tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8465 	    tree decl = id_declarator->u.id.unqualified_name;
8466 	    if (!decl)
8467 	      break;
8468 	    if (qualifying_scope)
8469 	      {
8470 		if (at_function_scope_p ())
8471 		  {
8472 		    /* [dcl.meaning]
8473 
8474 		       A declarator-id shall not be qualified except
8475 		       for ...
8476 
8477 		       None of the cases are permitted in block
8478 		       scope.  */
8479 		    if (qualifying_scope == global_namespace)
8480 		      error ("invalid use of qualified-name %<::%D%>",
8481 			     decl);
8482 		    else if (TYPE_P (qualifying_scope))
8483 		      error ("invalid use of qualified-name %<%T::%D%>",
8484 			     qualifying_scope, decl);
8485 		    else
8486 		      error ("invalid use of qualified-name %<%D::%D%>",
8487 			     qualifying_scope, decl);
8488 		    return error_mark_node;
8489 		  }
8490 		else if (TYPE_P (qualifying_scope))
8491 		  {
8492 		    ctype = qualifying_scope;
8493 		    if (!MAYBE_CLASS_TYPE_P (ctype))
8494 		      {
8495 			error ("%q#T is not a class or a namespace", ctype);
8496 			ctype = NULL_TREE;
8497 		      }
8498 		    else if (innermost_code != cdk_function
8499 			     && current_class_type
8500 			     && !UNIQUELY_DERIVED_FROM_P (ctype,
8501 							  current_class_type))
8502 		      {
8503 			error ("type %qT is not derived from type %qT",
8504 			       ctype, current_class_type);
8505 			return error_mark_node;
8506 		      }
8507 		  }
8508 		else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8509 		  in_namespace = qualifying_scope;
8510 	      }
8511 	    switch (TREE_CODE (decl))
8512 	      {
8513 	      case BIT_NOT_EXPR:
8514 		{
8515 		  tree type;
8516 
8517 		  if (innermost_code != cdk_function)
8518 		    {
8519 		      error ("declaration of %qD as non-function", decl);
8520 		      return error_mark_node;
8521 		    }
8522 		  else if (!qualifying_scope
8523 			   && !(current_class_type && at_class_scope_p ()))
8524 		    {
8525 		      error ("declaration of %qD as non-member", decl);
8526 		      return error_mark_node;
8527 		    }
8528 
8529 		  type = TREE_OPERAND (decl, 0);
8530 		  if (TYPE_P (type))
8531 		    type = constructor_name (type);
8532 		  name = identifier_to_locale (IDENTIFIER_POINTER (type));
8533 		  dname = decl;
8534 		}
8535 		break;
8536 
8537 	      case TEMPLATE_ID_EXPR:
8538 		{
8539 		  tree fns = TREE_OPERAND (decl, 0);
8540 
8541 		  dname = fns;
8542 		  if (TREE_CODE (dname) != IDENTIFIER_NODE)
8543 		    {
8544 		      gcc_assert (is_overloaded_fn (dname));
8545 		      dname = DECL_NAME (get_first_fn (dname));
8546 		    }
8547 		}
8548 		/* Fall through.  */
8549 
8550 	      case IDENTIFIER_NODE:
8551 		if (TREE_CODE (decl) == IDENTIFIER_NODE)
8552 		  dname = decl;
8553 
8554 		if (C_IS_RESERVED_WORD (dname))
8555 		  {
8556 		    error ("declarator-id missing; using reserved word %qD",
8557 			   dname);
8558 		    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8559 		  }
8560 		else if (!IDENTIFIER_TYPENAME_P (dname))
8561 		  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8562 		else
8563 		  {
8564 		    gcc_assert (flags == NO_SPECIAL);
8565 		    flags = TYPENAME_FLAG;
8566 		    ctor_return_type = TREE_TYPE (dname);
8567 		    sfk = sfk_conversion;
8568 		    if (is_typename_at_global_scope (dname))
8569 		      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8570 		    else
8571 		      name = "<invalid operator>";
8572 		  }
8573 		break;
8574 
8575 	      default:
8576 		gcc_unreachable ();
8577 	      }
8578 	    break;
8579 	  }
8580 
8581 	case cdk_array:
8582 	case cdk_pointer:
8583 	case cdk_reference:
8584 	case cdk_ptrmem:
8585 	  break;
8586 
8587 	case cdk_error:
8588 	  return error_mark_node;
8589 
8590 	default:
8591 	  gcc_unreachable ();
8592 	}
8593       if (id_declarator->kind == cdk_id)
8594 	break;
8595     }
8596 
8597   /* [dcl.fct.edf]
8598 
8599      The declarator in a function-definition shall have the form
8600      D1 ( parameter-declaration-clause) ...  */
8601   if (funcdef_flag && innermost_code != cdk_function)
8602     {
8603       error ("function definition does not declare parameters");
8604       return error_mark_node;
8605     }
8606 
8607   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8608       && innermost_code != cdk_function
8609       && ! (ctype && !declspecs->any_specifiers_p))
8610     {
8611       error ("declaration of %qD as non-function", dname);
8612       return error_mark_node;
8613     }
8614 
8615   if (dname
8616       && TREE_CODE (dname) == IDENTIFIER_NODE
8617       && UDLIT_OPER_P (dname)
8618       && innermost_code != cdk_function)
8619     {
8620       error ("declaration of %qD as non-function", dname);
8621       return error_mark_node;
8622     }
8623 
8624   if (dname && IDENTIFIER_OPNAME_P (dname))
8625     {
8626       if (declspecs->specs[(int)ds_typedef])
8627 	{
8628 	  error ("declaration of %qD as %<typedef%>", dname);
8629 	  return error_mark_node;
8630 	}
8631       else if (decl_context == PARM || decl_context == CATCHPARM)
8632 	{
8633 	  error ("declaration of %qD as parameter", dname);
8634 	  return error_mark_node;
8635 	}
8636     }
8637 
8638   /* Anything declared one level down from the top level
8639      must be one of the parameters of a function
8640      (because the body is at least two levels down).  */
8641 
8642   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8643      by not allowing C++ class definitions to specify their parameters
8644      with xdecls (must be spec.d in the parmlist).
8645 
8646      Since we now wait to push a class scope until we are sure that
8647      we are in a legitimate method context, we must set oldcname
8648      explicitly (since current_class_name is not yet alive).
8649 
8650      We also want to avoid calling this a PARM if it is in a namespace.  */
8651 
8652   if (decl_context == NORMAL && !toplevel_bindings_p ())
8653     {
8654       cp_binding_level *b = current_binding_level;
8655       current_binding_level = b->level_chain;
8656       if (current_binding_level != 0 && toplevel_bindings_p ())
8657 	decl_context = PARM;
8658       current_binding_level = b;
8659     }
8660 
8661   if (name == NULL)
8662     name = decl_context == PARM ? "parameter" : "type name";
8663 
8664   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8665     {
8666       error ("%<constexpr%> cannot appear in a typedef declaration");
8667       return error_mark_node;
8668     }
8669 
8670   /* If there were multiple types specified in the decl-specifier-seq,
8671      issue an error message.  */
8672   if (declspecs->multiple_types_p)
8673     {
8674       error ("two or more data types in declaration of %qs", name);
8675       return error_mark_node;
8676     }
8677 
8678   if (declspecs->conflicting_specifiers_p)
8679     {
8680       error ("conflicting specifiers in declaration of %qs", name);
8681       return error_mark_node;
8682     }
8683 
8684   /* Extract the basic type from the decl-specifier-seq.  */
8685   type = declspecs->type;
8686   if (type == error_mark_node)
8687     {
8688       type = NULL_TREE;
8689       type_was_error_mark_node = true;
8690     }
8691   /* If the entire declaration is itself tagged as deprecated then
8692      suppress reports of deprecated items.  */
8693   if (type && TREE_DEPRECATED (type)
8694       && deprecated_state != DEPRECATED_SUPPRESS)
8695     warn_deprecated_use (type, NULL_TREE);
8696   if (type && TREE_CODE (type) == TYPE_DECL)
8697     {
8698       typedef_decl = type;
8699       type = TREE_TYPE (typedef_decl);
8700       if (TREE_DEPRECATED (type)
8701 	  && DECL_ARTIFICIAL (typedef_decl)
8702 	  && deprecated_state != DEPRECATED_SUPPRESS)
8703 	warn_deprecated_use (type, NULL_TREE);
8704     }
8705   /* No type at all: default to `int', and set DEFAULTED_INT
8706      because it was not a user-defined typedef.  */
8707   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8708     {
8709       /* These imply 'int'.  */
8710       type = integer_type_node;
8711       defaulted_int = 1;
8712     }
8713   /* Gather flags.  */
8714   explicit_int = declspecs->explicit_int_p;
8715   explicit_char = declspecs->explicit_char_p;
8716 
8717 #if 0
8718   /* See the code below that used this.  */
8719   if (typedef_decl)
8720     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8721 #endif
8722   typedef_type = type;
8723 
8724 
8725   if (sfk != sfk_conversion)
8726     ctor_return_type = ctype;
8727 
8728   if (sfk != sfk_none)
8729     type = check_special_function_return_type (sfk, type,
8730 					       ctor_return_type);
8731   else if (type == NULL_TREE)
8732     {
8733       int is_main;
8734 
8735       explicit_int = -1;
8736 
8737       /* We handle `main' specially here, because 'main () { }' is so
8738 	 common.  With no options, it is allowed.  With -Wreturn-type,
8739 	 it is a warning.  It is only an error with -pedantic-errors.  */
8740       is_main = (funcdef_flag
8741 		 && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8742 		 && MAIN_NAME_P (dname)
8743 		 && ctype == NULL_TREE
8744 		 && in_namespace == NULL_TREE
8745 		 && current_namespace == global_namespace);
8746 
8747       if (type_was_error_mark_node)
8748 	/* We've already issued an error, don't complain more.  */;
8749       else if (in_system_header || flag_ms_extensions)
8750 	/* Allow it, sigh.  */;
8751       else if (! is_main)
8752 	permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8753       else if (pedantic)
8754 	pedwarn (input_location, OPT_pedantic,
8755 		 "ISO C++ forbids declaration of %qs with no type", name);
8756       else
8757 	warning (OPT_Wreturn_type,
8758                  "ISO C++ forbids declaration of %qs with no type", name);
8759 
8760       type = integer_type_node;
8761     }
8762 
8763   ctype = NULL_TREE;
8764 
8765   if (explicit_int128)
8766     {
8767       if (int128_integer_type_node == NULL_TREE)
8768 	{
8769 	  error ("%<__int128%> is not supported by this target");
8770 	  explicit_int128 = false;
8771 	}
8772       else if (pedantic && ! in_system_header)
8773 	pedwarn (input_location, OPT_pedantic,
8774 		 "ISO C++ does not support %<__int128%> for %qs", name);
8775     }
8776 
8777   /* Now process the modifiers that were specified
8778      and check for invalid combinations.  */
8779 
8780   /* Long double is a special combination.  */
8781   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8782     {
8783       long_p = false;
8784       type = cp_build_qualified_type (long_double_type_node,
8785 				      cp_type_quals (type));
8786     }
8787 
8788   /* Check all other uses of type modifiers.  */
8789 
8790   if (unsigned_p || signed_p || long_p || short_p)
8791     {
8792       int ok = 0;
8793 
8794       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8795 	error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8796       else if (signed_p && unsigned_p)
8797 	error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8798       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8799 	error ("%<long long%> invalid for %qs", name);
8800       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8801 	error ("%<long%> invalid for %qs", name);
8802       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8803 	error ("%<short%> invalid for %qs", name);
8804       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8805 	error ("%<long%> or %<short%> invalid for %qs", name);
8806       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8807 	error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8808       else if ((long_p || short_p) && explicit_char)
8809 	error ("%<long%> or %<short%> specified with char for %qs", name);
8810       else if (long_p && short_p)
8811 	error ("%<long%> and %<short%> specified together for %qs", name);
8812       else if (type == char16_type_node || type == char32_type_node)
8813 	{
8814 	  if (signed_p || unsigned_p)
8815 	    error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8816 	  else if (short_p || long_p)
8817 	    error ("%<short%> or %<long%> invalid for %qs", name);
8818 	}
8819       else
8820 	{
8821 	  ok = 1;
8822 	  if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8823 	    {
8824 	      pedwarn (input_location, OPT_pedantic,
8825 		       "long, short, signed or unsigned used invalidly for %qs",
8826 		       name);
8827 	      if (flag_pedantic_errors)
8828 		ok = 0;
8829 	    }
8830 	}
8831 
8832       /* Discard the type modifiers if they are invalid.  */
8833       if (! ok)
8834 	{
8835 	  unsigned_p = false;
8836 	  signed_p = false;
8837 	  long_p = false;
8838 	  short_p = false;
8839 	  longlong = 0;
8840 	}
8841     }
8842 
8843   /* Decide whether an integer type is signed or not.
8844      Optionally treat bitfields as signed by default.  */
8845   if (unsigned_p
8846       /* [class.bit]
8847 
8848 	 It is implementation-defined whether a plain (neither
8849 	 explicitly signed or unsigned) char, short, int, or long
8850 	 bit-field is signed or unsigned.
8851 
8852 	 Naturally, we extend this to long long as well.  Note that
8853 	 this does not include wchar_t.  */
8854       || (bitfield && !flag_signed_bitfields
8855 	  && !signed_p
8856 	  /* A typedef for plain `int' without `signed' can be
8857 	     controlled just like plain `int', but a typedef for
8858 	     `signed int' cannot be so controlled.  */
8859 	  && !(typedef_decl
8860 	       && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8861 	  && TREE_CODE (type) == INTEGER_TYPE
8862 	  && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8863     {
8864       if (explicit_int128)
8865 	type = int128_unsigned_type_node;
8866       else if (longlong)
8867 	type = long_long_unsigned_type_node;
8868       else if (long_p)
8869 	type = long_unsigned_type_node;
8870       else if (short_p)
8871 	type = short_unsigned_type_node;
8872       else if (type == char_type_node)
8873 	type = unsigned_char_type_node;
8874       else if (typedef_decl)
8875 	type = unsigned_type_for (type);
8876       else
8877 	type = unsigned_type_node;
8878     }
8879   else if (signed_p && type == char_type_node)
8880     type = signed_char_type_node;
8881   else if (explicit_int128)
8882     type = int128_integer_type_node;
8883   else if (longlong)
8884     type = long_long_integer_type_node;
8885   else if (long_p)
8886     type = long_integer_type_node;
8887   else if (short_p)
8888     type = short_integer_type_node;
8889 
8890   if (declspecs->specs[(int)ds_complex])
8891     {
8892       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8893 	error ("complex invalid for %qs", name);
8894       /* If we just have "complex", it is equivalent to
8895 	 "complex double", but if any modifiers at all are specified it is
8896 	 the complex form of TYPE.  E.g, "complex short" is
8897 	 "complex short int".  */
8898       else if (defaulted_int && ! longlong && ! explicit_int128
8899 	       && ! (long_p || short_p || signed_p || unsigned_p))
8900 	type = complex_double_type_node;
8901       else if (type == integer_type_node)
8902 	type = complex_integer_type_node;
8903       else if (type == float_type_node)
8904 	type = complex_float_type_node;
8905       else if (type == double_type_node)
8906 	type = complex_double_type_node;
8907       else if (type == long_double_type_node)
8908 	type = complex_long_double_type_node;
8909       else
8910 	type = build_complex_type (type);
8911     }
8912 
8913   type_quals = TYPE_UNQUALIFIED;
8914   if (declspecs->specs[(int)ds_const])
8915     type_quals |= TYPE_QUAL_CONST;
8916   if (declspecs->specs[(int)ds_volatile])
8917     type_quals |= TYPE_QUAL_VOLATILE;
8918   if (declspecs->specs[(int)ds_restrict])
8919     type_quals |= TYPE_QUAL_RESTRICT;
8920   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8921     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8922 	   ctor_return_type);
8923 
8924   type_quals |= cp_type_quals (type);
8925   type = cp_build_qualified_type_real
8926     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8927 			 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8928   /* We might have ignored or rejected some of the qualifiers.  */
8929   type_quals = cp_type_quals (type);
8930 
8931   staticp = 0;
8932   inlinep = !! declspecs->specs[(int)ds_inline];
8933   virtualp = !! declspecs->specs[(int)ds_virtual];
8934   explicitp = !! declspecs->specs[(int)ds_explicit];
8935 
8936   storage_class = declspecs->storage_class;
8937   if (storage_class == sc_static)
8938     staticp = 1 + (decl_context == FIELD);
8939 
8940   if (virtualp && staticp == 2)
8941     {
8942       error ("member %qD cannot be declared both virtual and static", dname);
8943       storage_class = sc_none;
8944       staticp = 0;
8945     }
8946   friendp = !! declspecs->specs[(int)ds_friend];
8947 
8948   if (dependent_name && !friendp)
8949     {
8950       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8951       return error_mark_node;
8952     }
8953 
8954   /* Issue errors about use of storage classes for parameters.  */
8955   if (decl_context == PARM)
8956     {
8957       if (declspecs->specs[(int)ds_typedef])
8958 	{
8959 	  error ("typedef declaration invalid in parameter declaration");
8960 	  return error_mark_node;
8961 	}
8962       else if (template_parm_flag && storage_class != sc_none)
8963 	{
8964 	  error ("storage class specified for template parameter %qs", name);
8965 	  return error_mark_node;
8966 	}
8967       else if (storage_class == sc_static
8968 	       || storage_class == sc_extern
8969 	       || thread_p)
8970 	error ("storage class specifiers invalid in parameter declarations");
8971 
8972       /* Function parameters cannot be constexpr.  If we saw one, moan
8973          and pretend it wasn't there.  */
8974       if (constexpr_p)
8975         {
8976           error ("a parameter cannot be declared %<constexpr%>");
8977           constexpr_p = 0;
8978         }
8979     }
8980 
8981   /* Give error if `virtual' is used outside of class declaration.  */
8982   if (virtualp
8983       && (current_class_name == NULL_TREE || decl_context != FIELD))
8984     {
8985       error ("%<virtual%> outside class declaration");
8986       virtualp = 0;
8987     }
8988 
8989   /* Static anonymous unions are dealt with here.  */
8990   if (staticp && decl_context == TYPENAME
8991       && declspecs->type
8992       && ANON_AGGR_TYPE_P (declspecs->type))
8993     decl_context = FIELD;
8994 
8995   /* Warn about storage classes that are invalid for certain
8996      kinds of declarations (parameters, typenames, etc.).  */
8997   if (thread_p
8998       && ((storage_class
8999 	   && storage_class != sc_extern
9000 	   && storage_class != sc_static)
9001 	  || declspecs->specs[(int)ds_typedef]))
9002     {
9003       error ("multiple storage classes in declaration of %qs", name);
9004       thread_p = false;
9005     }
9006   if (decl_context != NORMAL
9007       && ((storage_class != sc_none
9008 	   && storage_class != sc_mutable)
9009 	  || thread_p))
9010     {
9011       if ((decl_context == PARM || decl_context == CATCHPARM)
9012 	  && (storage_class == sc_register
9013 	      || storage_class == sc_auto))
9014 	;
9015       else if (declspecs->specs[(int)ds_typedef])
9016 	;
9017       else if (decl_context == FIELD
9018 	       /* C++ allows static class elements.  */
9019 	       && storage_class == sc_static)
9020 	/* C++ also allows inlines and signed and unsigned elements,
9021 	   but in those cases we don't come in here.  */
9022 	;
9023       else
9024 	{
9025 	  if (decl_context == FIELD)
9026 	    error ("storage class specified for %qs", name);
9027 	  else
9028 	    {
9029 	      if (decl_context == PARM || decl_context == CATCHPARM)
9030 		error ("storage class specified for parameter %qs", name);
9031 	      else
9032 		error ("storage class specified for typename");
9033 	    }
9034 	  if (storage_class == sc_register
9035 	      || storage_class == sc_auto
9036 	      || storage_class == sc_extern
9037 	      || thread_p)
9038 	    storage_class = sc_none;
9039 	}
9040     }
9041   else if (storage_class == sc_extern && funcdef_flag
9042 	   && ! toplevel_bindings_p ())
9043     error ("nested function %qs declared %<extern%>", name);
9044   else if (toplevel_bindings_p ())
9045     {
9046       if (storage_class == sc_auto)
9047 	error ("top-level declaration of %qs specifies %<auto%>", name);
9048     }
9049   else if (thread_p
9050 	   && storage_class != sc_extern
9051 	   && storage_class != sc_static)
9052     {
9053       error ("function-scope %qs implicitly auto and declared %<__thread%>",
9054 	     name);
9055       thread_p = false;
9056     }
9057 
9058   if (storage_class && friendp)
9059     {
9060       error ("storage class specifiers invalid in friend function declarations");
9061       storage_class = sc_none;
9062       staticp = 0;
9063     }
9064 
9065   if (!id_declarator)
9066     unqualified_id = NULL_TREE;
9067   else
9068     {
9069       unqualified_id = id_declarator->u.id.unqualified_name;
9070       switch (TREE_CODE (unqualified_id))
9071 	{
9072 	case BIT_NOT_EXPR:
9073 	  unqualified_id = TREE_OPERAND (unqualified_id, 0);
9074 	  if (TYPE_P (unqualified_id))
9075 	    unqualified_id = constructor_name (unqualified_id);
9076 	  break;
9077 
9078 	case IDENTIFIER_NODE:
9079 	case TEMPLATE_ID_EXPR:
9080 	  break;
9081 
9082 	default:
9083 	  gcc_unreachable ();
9084 	}
9085     }
9086 
9087   /* Determine the type of the entity declared by recurring on the
9088      declarator.  */
9089   for (; declarator; declarator = declarator->declarator)
9090     {
9091       const cp_declarator *inner_declarator;
9092       tree attrs;
9093 
9094       if (type == error_mark_node)
9095 	return error_mark_node;
9096 
9097       attrs = declarator->attributes;
9098       if (attrs)
9099 	{
9100 	  int attr_flags;
9101 
9102 	  attr_flags = 0;
9103 	  if (declarator == NULL || declarator->kind == cdk_id)
9104 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9105 	  if (declarator->kind == cdk_function)
9106 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9107 	  if (declarator->kind == cdk_array)
9108 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9109 	  returned_attrs = decl_attributes (&type,
9110 					    chainon (returned_attrs, attrs),
9111 					    attr_flags);
9112 	}
9113 
9114       if (declarator->kind == cdk_id)
9115 	break;
9116 
9117       inner_declarator = declarator->declarator;
9118 
9119       switch (declarator->kind)
9120 	{
9121 	case cdk_array:
9122 	  type = create_array_type_for_decl (dname, type,
9123 					     declarator->u.array.bounds);
9124 	  break;
9125 
9126 	case cdk_function:
9127 	  {
9128 	    tree arg_types;
9129 	    int funcdecl_p;
9130 
9131 	    /* Declaring a function type.
9132 	       Make sure we have a valid type for the function to return.  */
9133 
9134 	    if (type_quals != TYPE_UNQUALIFIED)
9135 	      {
9136 		if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9137 		  warning (OPT_Wignored_qualifiers,
9138 			   "type qualifiers ignored on function return type");
9139 		/* We now know that the TYPE_QUALS don't apply to the
9140 		   decl, but to its return type.  */
9141 		type_quals = TYPE_UNQUALIFIED;
9142 	      }
9143 	    errmsg = targetm.invalid_return_type (type);
9144 	    if (errmsg)
9145 	      {
9146 		error (errmsg);
9147 		type = integer_type_node;
9148 	      }
9149 
9150 	    /* Error about some types functions can't return.  */
9151 
9152 	    if (TREE_CODE (type) == FUNCTION_TYPE)
9153 	      {
9154 		error ("%qs declared as function returning a function", name);
9155 		return error_mark_node;
9156 	      }
9157 	    if (TREE_CODE (type) == ARRAY_TYPE)
9158 	      {
9159 		error ("%qs declared as function returning an array", name);
9160 		return error_mark_node;
9161 	      }
9162 
9163 	    /* Pick up type qualifiers which should be applied to `this'.  */
9164 	    memfn_quals = declarator->u.function.qualifiers;
9165 	    /* Pick up virt-specifiers.  */
9166             virt_specifiers = declarator->u.function.virt_specifiers;
9167 	    /* Pick up the exception specifications.  */
9168 	    raises = declarator->u.function.exception_specification;
9169 	    /* If the exception-specification is ill-formed, let's pretend
9170 	       there wasn't one.  */
9171 	    if (raises == error_mark_node)
9172 	      raises = NULL_TREE;
9173 
9174 	    /* Say it's a definition only for the CALL_EXPR
9175 	       closest to the identifier.  */
9176 	    funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9177 
9178 	    /* Handle a late-specified return type.  */
9179 	    if (funcdecl_p)
9180 	      {
9181 		if (type_uses_auto (type))
9182 		  {
9183 		    if (!declarator->u.function.late_return_type)
9184 		      {
9185 			error ("%qs function uses %<auto%> type specifier without"
9186 			       " trailing return type", name);
9187 			return error_mark_node;
9188 		      }
9189 		    else if (!is_auto (type))
9190 		      {
9191 			error ("%qs function with trailing return type has"
9192 			       " %qT as its type rather than plain %<auto%>",
9193 			       name, type);
9194 			return error_mark_node;
9195 		      }
9196 		  }
9197 		else if (declarator->u.function.late_return_type)
9198 		  {
9199 		    if (cxx_dialect < cxx0x)
9200 		      /* Not using maybe_warn_cpp0x because this should
9201 			 always be an error.  */
9202 		      error ("trailing return type only available with "
9203 			     "-std=c++11 or -std=gnu++11");
9204 		    else
9205 		      error ("%qs function with trailing return type not "
9206 			     "declared with %<auto%> type specifier", name);
9207 		    return error_mark_node;
9208 		  }
9209 	      }
9210 	    type = splice_late_return_type
9211 	      (type, declarator->u.function.late_return_type);
9212 	    if (type == error_mark_node)
9213 	      return error_mark_node;
9214 
9215 	    if (ctype == NULL_TREE
9216 		&& decl_context == FIELD
9217 		&& funcdecl_p
9218 		&& (friendp == 0 || dname == current_class_name))
9219 	      ctype = current_class_type;
9220 
9221 	    if (ctype && (sfk == sfk_constructor
9222 			  || sfk == sfk_destructor))
9223 	      {
9224 		/* We are within a class's scope. If our declarator name
9225 		   is the same as the class name, and we are defining
9226 		   a function, then it is a constructor/destructor, and
9227 		   therefore returns a void type.  */
9228 
9229 		/* ISO C++ 12.4/2.  A destructor may not be declared
9230 		   const or volatile.  A destructor may not be
9231 		   static.
9232 
9233 		   ISO C++ 12.1.  A constructor may not be declared
9234 		   const or volatile.  A constructor may not be
9235 		   virtual.  A constructor may not be static.  */
9236 		if (staticp == 2)
9237 		  error ((flags == DTOR_FLAG)
9238 			 ? G_("destructor cannot be static member function")
9239 			 : G_("constructor cannot be static member function"));
9240 		if (memfn_quals)
9241 		  {
9242 		    error ((flags == DTOR_FLAG)
9243 			   ? G_("destructors may not be cv-qualified")
9244 			   : G_("constructors may not be cv-qualified"));
9245 		    memfn_quals = TYPE_UNQUALIFIED;
9246 		  }
9247 
9248 		if (decl_context == FIELD
9249 		    && !member_function_or_else (ctype,
9250 						 current_class_type,
9251 						 flags))
9252 		  return error_mark_node;
9253 
9254 		if (flags != DTOR_FLAG)
9255 		  {
9256 		    /* It's a constructor.  */
9257 		    if (explicitp == 1)
9258 		      explicitp = 2;
9259 		    if (virtualp)
9260 		      {
9261 			permerror (input_location, "constructors cannot be declared virtual");
9262 			virtualp = 0;
9263 		      }
9264 		    if (decl_context == FIELD
9265 			&& sfk != sfk_constructor)
9266 		      return error_mark_node;
9267 		  }
9268 		if (decl_context == FIELD)
9269 		  staticp = 0;
9270 	      }
9271 	    else if (friendp)
9272 	      {
9273 		if (initialized)
9274 		  error ("can%'t initialize friend function %qs", name);
9275 		if (virtualp)
9276 		  {
9277 		    /* Cannot be both friend and virtual.  */
9278 		    error ("virtual functions cannot be friends");
9279 		    friendp = 0;
9280 		  }
9281 		if (decl_context == NORMAL)
9282 		  error ("friend declaration not in class definition");
9283 		if (current_function_decl && funcdef_flag)
9284 		  error ("can%'t define friend function %qs in a local "
9285 			 "class definition",
9286 			 name);
9287 	      }
9288 	    else if (ctype && sfk == sfk_conversion)
9289 	      {
9290 		if (explicitp == 1)
9291 		  {
9292 		    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9293 		    explicitp = 2;
9294 		  }
9295 	      }
9296 
9297 	    arg_types = grokparms (declarator->u.function.parameters,
9298 				   &parms);
9299 
9300 	    if (inner_declarator
9301 		&& inner_declarator->kind == cdk_id
9302 		&& inner_declarator->u.id.sfk == sfk_destructor
9303 		&& arg_types != void_list_node)
9304 	      {
9305 		error ("destructors may not have parameters");
9306 		arg_types = void_list_node;
9307 		parms = NULL_TREE;
9308 	      }
9309 
9310 	    type = build_function_type (type, arg_types);
9311 	  }
9312 	  break;
9313 
9314 	case cdk_pointer:
9315 	case cdk_reference:
9316 	case cdk_ptrmem:
9317 	  /* Filter out pointers-to-references and references-to-references.
9318 	     We can get these if a TYPE_DECL is used.  */
9319 
9320 	  if (TREE_CODE (type) == REFERENCE_TYPE)
9321 	    {
9322 	      if (declarator->kind != cdk_reference)
9323 		{
9324 		  error ("cannot declare pointer to %q#T", type);
9325 		  type = TREE_TYPE (type);
9326 		}
9327 
9328 	      /* In C++0x, we allow reference to reference declarations
9329 		 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9330 		 and template type arguments [14.3.1/4 temp.arg.type]. The
9331 		 check for direct reference to reference declarations, which
9332 		 are still forbidden, occurs below. Reasoning behind the change
9333 		 can be found in DR106, DR540, and the rvalue reference
9334 		 proposals. */
9335 	      else if (cxx_dialect == cxx98)
9336 		{
9337 		  error ("cannot declare reference to %q#T", type);
9338 		  type = TREE_TYPE (type);
9339 		}
9340 	    }
9341 	  else if (VOID_TYPE_P (type))
9342 	    {
9343 	      if (declarator->kind == cdk_reference)
9344 		error ("cannot declare reference to %q#T", type);
9345 	      else if (declarator->kind == cdk_ptrmem)
9346 		error ("cannot declare pointer to %q#T member", type);
9347 	    }
9348 
9349 	  /* We now know that the TYPE_QUALS don't apply to the decl,
9350 	     but to the target of the pointer.  */
9351 	  type_quals = TYPE_UNQUALIFIED;
9352 
9353 	  if (declarator->kind == cdk_ptrmem
9354 	      && (TREE_CODE (type) == FUNCTION_TYPE
9355 		  || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9356 	    {
9357 	      memfn_quals |= type_memfn_quals (type);
9358 	      type = build_memfn_type (type,
9359 				       declarator->u.pointer.class_type,
9360 				       memfn_quals);
9361 	      if (type == error_mark_node)
9362 		return error_mark_node;
9363 	      memfn_quals = TYPE_UNQUALIFIED;
9364 	    }
9365 
9366 	  if (TREE_CODE (type) == FUNCTION_TYPE
9367 	      && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9368             error (declarator->kind == cdk_reference
9369                    ? G_("cannot declare reference to qualified function type %qT")
9370                    : G_("cannot declare pointer to qualified function type %qT"),
9371 		   type);
9372 
9373 	  /* When the pointed-to type involves components of variable size,
9374 	     care must be taken to ensure that the size evaluation code is
9375 	     emitted early enough to dominate all the possible later uses
9376 	     and late enough for the variables on which it depends to have
9377 	     been assigned.
9378 
9379 	     This is expected to happen automatically when the pointed-to
9380 	     type has a name/declaration of it's own, but special attention
9381 	     is required if the type is anonymous.
9382 
9383 	     We handle the NORMAL and FIELD contexts here by inserting a
9384 	     dummy statement that just evaluates the size at a safe point
9385 	     and ensures it is not deferred until e.g. within a deeper
9386 	     conditional context (c++/43555).
9387 
9388 	     We expect nothing to be needed here for PARM or TYPENAME.
9389 	     Evaluating the size at this point for TYPENAME would
9390 	     actually be incorrect, as we might be in the middle of an
9391 	     expression with side effects on the pointed-to type size
9392 	     "arguments" prior to the pointer declaration point and the
9393 	     size evaluation could end up prior to the side effects.  */
9394 
9395 	  if (!TYPE_NAME (type)
9396 	      && (decl_context == NORMAL || decl_context == FIELD)
9397 	      && at_function_scope_p ()
9398 	      && variably_modified_type_p (type, NULL_TREE))
9399 	    {
9400 	      /* First break out any side-effects.  */
9401 	      stabilize_vla_size (TYPE_SIZE (type));
9402 	      /* And then force evaluation of the SAVE_EXPR.  */
9403 	      finish_expr_stmt (TYPE_SIZE (type));
9404 	    }
9405 
9406 	  if (declarator->kind == cdk_reference)
9407 	    {
9408 	      /* In C++0x, the type we are creating a reference to might be
9409 		 a typedef which is itself a reference type. In that case,
9410 		 we follow the reference collapsing rules in
9411 		 [7.1.3/8 dcl.typedef] to create the final reference type:
9412 
9413 		 "If a typedef TD names a type that is a reference to a type
9414 		 T, an attempt to create the type 'lvalue reference to cv TD'
9415 		 creates the type 'lvalue reference to T,' while an attempt
9416 		 to create the type "rvalue reference to cv TD' creates the
9417 		 type TD."
9418               */
9419 	      if (VOID_TYPE_P (type))
9420 		/* We already gave an error.  */;
9421 	      else if (TREE_CODE (type) == REFERENCE_TYPE)
9422 		{
9423 		  if (declarator->u.reference.rvalue_ref)
9424 		    /* Leave type alone.  */;
9425 		  else
9426 		    type = cp_build_reference_type (TREE_TYPE (type), false);
9427 		}
9428 	      else
9429 		type = cp_build_reference_type
9430 		  (type, declarator->u.reference.rvalue_ref);
9431 
9432 	      /* In C++0x, we need this check for direct reference to
9433 		 reference declarations, which are forbidden by
9434 		 [8.3.2/5 dcl.ref]. Reference to reference declarations
9435 		 are only allowed indirectly through typedefs and template
9436 		 type arguments. Example:
9437 
9438 		   void foo(int & &);      // invalid ref-to-ref decl
9439 
9440 		   typedef int & int_ref;
9441 		   void foo(int_ref &);    // valid ref-to-ref decl
9442 	      */
9443 	      if (inner_declarator && inner_declarator->kind == cdk_reference)
9444 		error ("cannot declare reference to %q#T, which is not "
9445 		       "a typedef or a template type argument", type);
9446 	    }
9447 	  else if (TREE_CODE (type) == METHOD_TYPE)
9448 	    type = build_ptrmemfunc_type (build_pointer_type (type));
9449 	  else if (declarator->kind == cdk_ptrmem)
9450 	    {
9451 	      gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9452 			  != NAMESPACE_DECL);
9453 	      if (declarator->u.pointer.class_type == error_mark_node)
9454 		/* We will already have complained.  */
9455 		type = error_mark_node;
9456 	      else
9457 		type = build_ptrmem_type (declarator->u.pointer.class_type,
9458 					  type);
9459 	    }
9460 	  else
9461 	    type = build_pointer_type (type);
9462 
9463 	  /* Process a list of type modifier keywords (such as
9464 	     const or volatile) that were given inside the `*' or `&'.  */
9465 
9466 	  if (declarator->u.pointer.qualifiers)
9467 	    {
9468 	      type
9469 		= cp_build_qualified_type (type,
9470 					   declarator->u.pointer.qualifiers);
9471 	      type_quals = cp_type_quals (type);
9472 	    }
9473 	  ctype = NULL_TREE;
9474 	  break;
9475 
9476 	case cdk_error:
9477 	  break;
9478 
9479 	default:
9480 	  gcc_unreachable ();
9481 	}
9482     }
9483 
9484   /* We need to stabilize side-effects in VLA sizes for regular array
9485      declarations too, not just pointers to arrays.  */
9486   if (type != error_mark_node && !TYPE_NAME (type)
9487       && (decl_context == NORMAL || decl_context == FIELD)
9488       && at_function_scope_p ()
9489       && variably_modified_type_p (type, NULL_TREE))
9490     stabilize_vla_size (TYPE_SIZE (type));
9491 
9492   /* A `constexpr' specifier used in an object declaration declares
9493      the object as `const'.  */
9494   if (constexpr_p && innermost_code != cdk_function)
9495     {
9496       if (type_quals & TYPE_QUAL_VOLATILE)
9497         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9498       if (TREE_CODE (type) != REFERENCE_TYPE)
9499 	{
9500 	  type_quals |= TYPE_QUAL_CONST;
9501 	  type = cp_build_qualified_type (type, type_quals);
9502 	}
9503     }
9504 
9505   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9506       && TREE_CODE (type) != FUNCTION_TYPE
9507       && TREE_CODE (type) != METHOD_TYPE)
9508     {
9509       error ("template-id %qD used as a declarator",
9510 	     unqualified_id);
9511       unqualified_id = dname;
9512     }
9513 
9514   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9515      qualified with a class-name, turn it into a METHOD_TYPE, unless
9516      we know that the function is static.  We take advantage of this
9517      opportunity to do other processing that pertains to entities
9518      explicitly declared to be class members.  Note that if DECLARATOR
9519      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9520      would not have exited the loop above.  */
9521   if (declarator
9522       && declarator->u.id.qualifying_scope
9523       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9524     {
9525       tree t;
9526 
9527       ctype = declarator->u.id.qualifying_scope;
9528       ctype = TYPE_MAIN_VARIANT (ctype);
9529       t = ctype;
9530       while (t != NULL_TREE && CLASS_TYPE_P (t))
9531 	{
9532 	  /* You're supposed to have one `template <...>' for every
9533 	     template class, but you don't need one for a full
9534 	     specialization.  For example:
9535 
9536 	       template <class T> struct S{};
9537 	       template <> struct S<int> { void f(); };
9538 	       void S<int>::f () {}
9539 
9540 	     is correct; there shouldn't be a `template <>' for the
9541 	     definition of `S<int>::f'.  */
9542 	  if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9543 	      && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9544 	    /* T is an explicit (not partial) specialization.  All
9545 	       containing classes must therefore also be explicitly
9546 	       specialized.  */
9547 	    break;
9548 	  if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9549 	      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9550 	    template_count += 1;
9551 
9552 	  t = TYPE_MAIN_DECL (t);
9553 	  t = DECL_CONTEXT (t);
9554 	}
9555 
9556       if (ctype == current_class_type)
9557 	{
9558 	  if (friendp)
9559 	    {
9560 	      permerror (input_location, "member functions are implicitly friends of their class");
9561 	      friendp = 0;
9562 	    }
9563 	  else
9564 	    permerror (declarator->id_loc,
9565 			  "extra qualification %<%T::%> on member %qs",
9566 			  ctype, name);
9567 	}
9568       else if (/* If the qualifying type is already complete, then we
9569 		  can skip the following checks.  */
9570 	       !COMPLETE_TYPE_P (ctype)
9571 	       && (/* If the function is being defined, then
9572 		      qualifying type must certainly be complete.  */
9573 		   funcdef_flag
9574 		   /* A friend declaration of "T::f" is OK, even if
9575 		      "T" is a template parameter.  But, if this
9576 		      function is not a friend, the qualifying type
9577 		      must be a class.  */
9578 		   || (!friendp && !CLASS_TYPE_P (ctype))
9579 		   /* For a declaration, the type need not be
9580 		      complete, if either it is dependent (since there
9581 		      is no meaningful definition of complete in that
9582 		      case) or the qualifying class is currently being
9583 		      defined.  */
9584 		   || !(dependent_type_p (ctype)
9585 			|| currently_open_class (ctype)))
9586 	       /* Check that the qualifying type is complete.  */
9587 	       && !complete_type_or_else (ctype, NULL_TREE))
9588 	return error_mark_node;
9589       else if (TREE_CODE (type) == FUNCTION_TYPE)
9590 	{
9591 	  if (current_class_type
9592 	      && (!friendp || funcdef_flag))
9593 	    {
9594 	      error (funcdef_flag
9595 		     ? G_("cannot define member function %<%T::%s%> "
9596 			  "within %<%T%>")
9597 		     : G_("cannot declare member function %<%T::%s%> "
9598 			  "within %<%T%>"),
9599 		     ctype, name, current_class_type);
9600 	      return error_mark_node;
9601 	    }
9602 	}
9603       else if (declspecs->specs[(int)ds_typedef]
9604 	       && current_class_type)
9605 	{
9606 	  error ("cannot declare member %<%T::%s%> within %qT",
9607 		 ctype, name, current_class_type);
9608 	  return error_mark_node;
9609 	}
9610     }
9611 
9612   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9613     ctype = current_class_type;
9614 
9615   /* Now TYPE has the actual type.  */
9616 
9617   if (returned_attrs)
9618     {
9619       if (attrlist)
9620 	*attrlist = chainon (returned_attrs, *attrlist);
9621       else
9622 	attrlist = &returned_attrs;
9623     }
9624 
9625   /* Handle parameter packs. */
9626   if (parameter_pack_p)
9627     {
9628       if (decl_context == PARM)
9629         /* Turn the type into a pack expansion.*/
9630         type = make_pack_expansion (type);
9631       else
9632         error ("non-parameter %qs cannot be a parameter pack", name);
9633     }
9634 
9635   /* Did array size calculations overflow?  */
9636 
9637   if (TREE_CODE (type) == ARRAY_TYPE
9638       && COMPLETE_TYPE_P (type)
9639       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9640       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9641     {
9642       error ("size of array %qs is too large", name);
9643       /* If we proceed with the array type as it is, we'll eventually
9644 	 crash in tree_low_cst().  */
9645       type = error_mark_node;
9646     }
9647 
9648   if ((decl_context == FIELD || decl_context == PARM)
9649       && !processing_template_decl
9650       && variably_modified_type_p (type, NULL_TREE))
9651     {
9652       if (decl_context == FIELD)
9653 	error ("data member may not have variably modified type %qT", type);
9654       else
9655 	error ("parameter may not have variably modified type %qT", type);
9656       type = error_mark_node;
9657     }
9658 
9659   if (explicitp == 1 || (explicitp && friendp))
9660     {
9661       /* [dcl.fct.spec] The explicit specifier shall only be used in
9662 	 declarations of constructors within a class definition.  */
9663       error ("only declarations of constructors can be %<explicit%>");
9664       explicitp = 0;
9665     }
9666 
9667   if (storage_class == sc_mutable)
9668     {
9669       if (decl_context != FIELD || friendp)
9670 	{
9671 	  error ("non-member %qs cannot be declared %<mutable%>", name);
9672 	  storage_class = sc_none;
9673 	}
9674       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9675 	{
9676 	  error ("non-object member %qs cannot be declared %<mutable%>", name);
9677 	  storage_class = sc_none;
9678 	}
9679       else if (TREE_CODE (type) == FUNCTION_TYPE
9680 	       || TREE_CODE (type) == METHOD_TYPE)
9681 	{
9682 	  error ("function %qs cannot be declared %<mutable%>", name);
9683 	  storage_class = sc_none;
9684 	}
9685       else if (staticp)
9686 	{
9687 	  error ("static %qs cannot be declared %<mutable%>", name);
9688 	  storage_class = sc_none;
9689 	}
9690       else if (type_quals & TYPE_QUAL_CONST)
9691 	{
9692 	  error ("const %qs cannot be declared %<mutable%>", name);
9693 	  storage_class = sc_none;
9694 	}
9695       else if (TREE_CODE (type) == REFERENCE_TYPE)
9696 	{
9697 	  permerror (input_location, "reference %qs cannot be declared "
9698 	             "%<mutable%>", name);
9699 	  storage_class = sc_none;
9700 	}
9701     }
9702 
9703   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9704   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9705     {
9706       tree decl;
9707 
9708       /* Note that the grammar rejects storage classes
9709 	 in typenames, fields or parameters.  */
9710       if (current_lang_name == lang_name_java)
9711 	TYPE_FOR_JAVA (type) = 1;
9712 
9713       /* This declaration:
9714 
9715 	   typedef void f(int) const;
9716 
9717 	 declares a function type which is not a member of any
9718 	 particular class, but which is cv-qualified; for
9719 	 example "f S::*" declares a pointer to a const-qualified
9720 	 member function of S.  We record the cv-qualification in the
9721 	 function type.  */
9722       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9723         {
9724           type = apply_memfn_quals (type, memfn_quals);
9725 
9726           /* We have now dealt with these qualifiers.  */
9727           memfn_quals = TYPE_UNQUALIFIED;
9728         }
9729 
9730       if (type_uses_auto (type))
9731 	{
9732 	  error ("typedef declared %<auto%>");
9733 	  type = error_mark_node;
9734 	}
9735 
9736       if (decl_context == FIELD)
9737 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9738       else
9739 	decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9740       if (id_declarator && declarator->u.id.qualifying_scope) {
9741 	error_at (DECL_SOURCE_LOCATION (decl),
9742 		  "typedef name may not be a nested-name-specifier");
9743 	TREE_TYPE (decl) = error_mark_node;
9744       }
9745 
9746       if (decl_context != FIELD)
9747 	{
9748 	  if (!current_function_decl)
9749 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9750 	  else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9751 		   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9752 		       (current_function_decl)))
9753 	    /* The TYPE_DECL is "abstract" because there will be
9754 	       clones of this constructor/destructor, and there will
9755 	       be copies of this TYPE_DECL generated in those
9756 	       clones.  */
9757 	    DECL_ABSTRACT (decl) = 1;
9758 	}
9759       else if (constructor_name_p (unqualified_id, current_class_type))
9760 	permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9761 		   "as enclosing class",
9762 		   unqualified_id);
9763 
9764       /* If the user declares "typedef struct {...} foo" then the
9765 	 struct will have an anonymous name.  Fill that name in now.
9766 	 Nothing can refer to it, so nothing needs know about the name
9767 	 change.  */
9768       if (type != error_mark_node
9769 	  && unqualified_id
9770 	  && TYPE_NAME (type)
9771 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9772 	  && TYPE_ANONYMOUS_P (type)
9773 	  && declspecs->type_definition_p
9774 	  && cp_type_quals (type) == TYPE_UNQUALIFIED)
9775 	{
9776 	  tree t;
9777 
9778 	  /* Replace the anonymous name with the real name everywhere.  */
9779 	  for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9780 	    {
9781 	      if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9782 		/* We do not rename the debug info representing the
9783 		   anonymous tagged type because the standard says in
9784 		   [dcl.typedef] that the naming applies only for
9785 		   linkage purposes.  */
9786 		/*debug_hooks->set_name (t, decl);*/
9787 		TYPE_NAME (t) = decl;
9788   	    }
9789 
9790 	  if (TYPE_LANG_SPECIFIC (type))
9791 	    TYPE_WAS_ANONYMOUS (type) = 1;
9792 
9793 	  /* If this is a typedef within a template class, the nested
9794 	     type is a (non-primary) template.  The name for the
9795 	     template needs updating as well.  */
9796 	  if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9797 	    DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9798 	      = TYPE_IDENTIFIER (type);
9799 
9800 	  /* Adjust linkage now that we aren't anonymous anymore.  */
9801 	  set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9802 	  determine_visibility (TYPE_MAIN_DECL (type));
9803 
9804 	  /* FIXME remangle member functions; member functions of a
9805 	     type with external linkage have external linkage.  */
9806 	}
9807 
9808       if (signed_p
9809 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9810 	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9811 
9812       bad_specifiers (decl, BSP_TYPE, virtualp,
9813 		      memfn_quals != TYPE_UNQUALIFIED,
9814 		      inlinep, friendp, raises != NULL_TREE);
9815 
9816       if (declspecs->specs[(int)ds_alias])
9817 	/* Acknowledge that this was written:
9818 	     `using analias = atype;'.  */
9819 	TYPE_DECL_ALIAS_P (decl) = 1;
9820 
9821       return decl;
9822     }
9823 
9824   /* Detect the case of an array type of unspecified size
9825      which came, as such, direct from a typedef name.
9826      We must copy the type, so that the array's domain can be
9827      individually set by the object's initializer.  */
9828 
9829   if (type && typedef_type
9830       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9831       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9832     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9833 
9834   /* Detect where we're using a typedef of function type to declare a
9835      function. PARMS will not be set, so we must create it now.  */
9836 
9837   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9838     {
9839       tree decls = NULL_TREE;
9840       tree args;
9841 
9842       for (args = TYPE_ARG_TYPES (type);
9843 	   args && args != void_list_node;
9844 	   args = TREE_CHAIN (args))
9845 	{
9846 	  tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9847 
9848 	  DECL_CHAIN (decl) = decls;
9849 	  decls = decl;
9850 	}
9851 
9852       parms = nreverse (decls);
9853 
9854       if (decl_context != TYPENAME)
9855 	{
9856 	  /* A cv-qualifier-seq shall only be part of the function type
9857 	     for a non-static member function. [8.3.5/4 dcl.fct] */
9858 	  if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9859 	      && (current_class_type == NULL_TREE || staticp) )
9860 	    {
9861 	      error (staticp
9862                      ? G_("qualified function types cannot be used to "
9863                           "declare static member functions")
9864                      : G_("qualified function types cannot be used to "
9865                           "declare free functions"));
9866 	      type = TYPE_MAIN_VARIANT (type);
9867 	    }
9868 
9869 	  /* The qualifiers on the function type become the qualifiers on
9870 	     the non-static member function. */
9871 	  memfn_quals |= type_memfn_quals (type);
9872 	  type_quals = TYPE_UNQUALIFIED;
9873 	}
9874     }
9875 
9876   /* If this is a type name (such as, in a cast or sizeof),
9877      compute the type and return it now.  */
9878 
9879   if (decl_context == TYPENAME)
9880     {
9881       /* Note that the grammar rejects storage classes
9882 	 in typenames, fields or parameters.  */
9883       if (type_quals != TYPE_UNQUALIFIED)
9884 	type_quals = TYPE_UNQUALIFIED;
9885 
9886       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9887       if (friendp)
9888 	{
9889 	  if (type_quals != TYPE_UNQUALIFIED)
9890 	    {
9891 	      error ("type qualifiers specified for friend class declaration");
9892 	      type_quals = TYPE_UNQUALIFIED;
9893 	    }
9894 	  if (inlinep)
9895 	    {
9896 	      error ("%<inline%> specified for friend class declaration");
9897 	      inlinep = 0;
9898 	    }
9899 
9900 	  if (!current_aggr)
9901 	    {
9902 	      /* Don't allow friend declaration without a class-key.  */
9903 	      if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9904 		permerror (input_location, "template parameters cannot be friends");
9905 	      else if (TREE_CODE (type) == TYPENAME_TYPE)
9906 		permerror (input_location, "friend declaration requires class-key, "
9907 			   "i.e. %<friend class %T::%D%>",
9908 			   TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9909 	      else
9910 		permerror (input_location, "friend declaration requires class-key, "
9911 			   "i.e. %<friend %#T%>",
9912 			   type);
9913 	    }
9914 
9915 	  /* Only try to do this stuff if we didn't already give up.  */
9916 	  if (type != integer_type_node)
9917 	    {
9918 	      /* A friendly class?  */
9919 	      if (current_class_type)
9920 		make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9921 				   /*complain=*/true);
9922 	      else
9923 		error ("trying to make class %qT a friend of global scope",
9924 		       type);
9925 
9926 	      type = void_type_node;
9927 	    }
9928 	}
9929       else if (memfn_quals)
9930 	{
9931 	  if (ctype == NULL_TREE
9932 	      && TREE_CODE (type) == METHOD_TYPE)
9933 	    ctype = TYPE_METHOD_BASETYPE (type);
9934 
9935 	  if (ctype)
9936 	    type = build_memfn_type (type, ctype, memfn_quals);
9937 	  /* Core issue #547: need to allow this in template type args.  */
9938 	  else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9939 	    type = apply_memfn_quals (type, memfn_quals);
9940 	  else
9941 	    error ("invalid qualifiers on non-member function type");
9942 	}
9943 
9944       return type;
9945     }
9946   else if (unqualified_id == NULL_TREE && decl_context != PARM
9947 	   && decl_context != CATCHPARM
9948 	   && TREE_CODE (type) != UNION_TYPE
9949 	   && ! bitfield)
9950     {
9951       error ("abstract declarator %qT used as declaration", type);
9952       return error_mark_node;
9953     }
9954 
9955   /* Only functions may be declared using an operator-function-id.  */
9956   if (unqualified_id
9957       && IDENTIFIER_OPNAME_P (unqualified_id)
9958       && TREE_CODE (type) != FUNCTION_TYPE
9959       && TREE_CODE (type) != METHOD_TYPE)
9960     {
9961       error ("declaration of %qD as non-function", unqualified_id);
9962       return error_mark_node;
9963     }
9964 
9965   /* We don't check parameter types here because we can emit a better
9966      error message later.  */
9967   if (decl_context != PARM)
9968     {
9969       type = check_var_type (unqualified_id, type);
9970       if (type == error_mark_node)
9971         return error_mark_node;
9972     }
9973 
9974   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9975      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9976 
9977   if (decl_context == PARM || decl_context == CATCHPARM)
9978     {
9979       if (ctype || in_namespace)
9980 	error ("cannot use %<::%> in parameter declaration");
9981 
9982       if (type_uses_auto (type))
9983 	{
9984 	  error ("parameter declared %<auto%>");
9985 	  type = error_mark_node;
9986 	}
9987 
9988       /* A parameter declared as an array of T is really a pointer to T.
9989 	 One declared as a function is really a pointer to a function.
9990 	 One declared as a member is really a pointer to member.  */
9991 
9992       if (TREE_CODE (type) == ARRAY_TYPE)
9993 	{
9994 	  /* Transfer const-ness of array into that of type pointed to.  */
9995 	  type = build_pointer_type (TREE_TYPE (type));
9996 	  type_quals = TYPE_UNQUALIFIED;
9997 	}
9998       else if (TREE_CODE (type) == FUNCTION_TYPE)
9999 	type = build_pointer_type (type);
10000     }
10001 
10002   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10003       && !NEW_DELETE_OPNAME_P (unqualified_id))
10004     {
10005       cp_cv_quals real_quals = memfn_quals;
10006       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10007 	real_quals |= TYPE_QUAL_CONST;
10008       type = build_memfn_type (type, ctype, real_quals);
10009     }
10010 
10011   {
10012     tree decl;
10013 
10014     if (decl_context == PARM)
10015       {
10016 	decl = cp_build_parm_decl (unqualified_id, type);
10017 
10018 	bad_specifiers (decl, BSP_PARM, virtualp,
10019 			memfn_quals != TYPE_UNQUALIFIED,
10020 			inlinep, friendp, raises != NULL_TREE);
10021       }
10022     else if (decl_context == FIELD)
10023       {
10024 	if (!staticp && type_uses_auto (type))
10025 	  {
10026 	    error ("non-static data member declared %<auto%>");
10027 	    type = error_mark_node;
10028 	  }
10029 
10030 	/* The C99 flexible array extension.  */
10031 	if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10032 	    && TYPE_DOMAIN (type) == NULL_TREE)
10033 	  {
10034 	    tree itype = compute_array_index_type (dname, integer_zero_node,
10035 						   tf_warning_or_error);
10036 	    type = build_cplus_array_type (TREE_TYPE (type), itype);
10037 	  }
10038 
10039 	if (type == error_mark_node)
10040 	  {
10041 	    /* Happens when declaring arrays of sizes which
10042 	       are error_mark_node, for example.  */
10043 	    decl = NULL_TREE;
10044 	  }
10045 	else if (in_namespace && !friendp)
10046 	  {
10047 	    /* Something like struct S { int N::j; };  */
10048 	    error ("invalid use of %<::%>");
10049 	    return error_mark_node;
10050 	  }
10051 	else if (TREE_CODE (type) == FUNCTION_TYPE
10052 		 || TREE_CODE (type) == METHOD_TYPE)
10053 	  {
10054 	    int publicp = 0;
10055 	    tree function_context;
10056 
10057 	    if (friendp == 0)
10058 	      {
10059 		/* This should never happen in pure C++ (the check
10060 		   could be an assert).  It could happen in
10061 		   Objective-C++ if someone writes invalid code that
10062 		   uses a function declaration for an instance
10063 		   variable or property (instance variables and
10064 		   properties are parsed as FIELD_DECLs, but they are
10065 		   part of an Objective-C class, not a C++ class).
10066 		   That code is invalid and is caught by this
10067 		   check.  */
10068 		if (!ctype)
10069 		  {
10070 		    error ("declaration of function %qD in invalid context",
10071 			   unqualified_id);
10072 		    return error_mark_node;
10073 		  }
10074 
10075 		/* ``A union may [ ... ] not [ have ] virtual functions.''
10076 		   ARM 9.5 */
10077 		if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10078 		  {
10079 		    error ("function %qD declared virtual inside a union",
10080 			   unqualified_id);
10081 		    return error_mark_node;
10082 		  }
10083 
10084 		if (NEW_DELETE_OPNAME_P (unqualified_id))
10085 		  {
10086 		    if (virtualp)
10087 		      {
10088 			error ("%qD cannot be declared virtual, since it "
10089 			       "is always static",
10090 			       unqualified_id);
10091 			virtualp = 0;
10092 		      }
10093 		  }
10094 	      }
10095 
10096 	    /* Check that the name used for a destructor makes sense.  */
10097 	    if (sfk == sfk_destructor)
10098 	      {
10099 		tree uqname = id_declarator->u.id.unqualified_name;
10100 
10101 		if (!ctype)
10102 		  {
10103 		    gcc_assert (friendp);
10104 		    error ("expected qualified name in friend declaration "
10105 			   "for destructor %qD", uqname);
10106 		    return error_mark_node;
10107 		  }
10108 
10109 		if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10110 		  {
10111 		    error ("declaration of %qD as member of %qT",
10112 			   uqname, ctype);
10113 		    return error_mark_node;
10114 		  }
10115                 if (constexpr_p)
10116                   {
10117                     error ("a destructor cannot be %<constexpr%>");
10118                     return error_mark_node;
10119                   }
10120 	      }
10121 	    else if (sfk == sfk_constructor && friendp && !ctype)
10122 	      {
10123 		error ("expected qualified name in friend declaration "
10124 		       "for constructor %qD",
10125 		       id_declarator->u.id.unqualified_name);
10126 		return error_mark_node;
10127 	      }
10128 
10129 	    /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10130 	    function_context = (ctype != NULL_TREE) ?
10131 	      decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10132 	    publicp = (! friendp || ! staticp)
10133 	      && function_context == NULL_TREE;
10134 	    decl = grokfndecl (ctype, type,
10135 			       TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10136 			       ? unqualified_id : dname,
10137 			       parms,
10138 			       unqualified_id,
10139 			       virtualp, flags, memfn_quals, raises,
10140 			       friendp ? -1 : 0, friendp, publicp,
10141                                inlinep | (2 * constexpr_p),
10142 			       sfk,
10143 			       funcdef_flag, template_count, in_namespace,
10144 			       attrlist, declarator->id_loc);
10145             decl = set_virt_specifiers (decl, virt_specifiers);
10146 	    if (decl == NULL_TREE)
10147 	      return error_mark_node;
10148 #if 0
10149 	    /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10150 	    /* The decl and setting of decl_attr is also turned off.  */
10151 	    decl = build_decl_attribute_variant (decl, decl_attr);
10152 #endif
10153 
10154 	    /* [class.conv.ctor]
10155 
10156 	       A constructor declared without the function-specifier
10157 	       explicit that can be called with a single parameter
10158 	       specifies a conversion from the type of its first
10159 	       parameter to the type of its class.  Such a constructor
10160 	       is called a converting constructor.  */
10161 	    if (explicitp == 2)
10162 	      DECL_NONCONVERTING_P (decl) = 1;
10163 	  }
10164 	else if (!staticp && !dependent_type_p (type)
10165 		 && !COMPLETE_TYPE_P (complete_type (type))
10166 		 && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10167 	  {
10168 	    if (unqualified_id)
10169 	      error ("field %qD has incomplete type", unqualified_id);
10170 	    else
10171 	      error ("name %qT has incomplete type", type);
10172 
10173 	    /* If we're instantiating a template, tell them which
10174 	       instantiation made the field's type be incomplete.  */
10175 	    if (current_class_type
10176 		&& TYPE_NAME (current_class_type)
10177 		&& IDENTIFIER_TEMPLATE (current_class_name)
10178 		&& declspecs->type
10179 		&& declspecs->type == type)
10180 	      error ("  in instantiation of template %qT",
10181 		     current_class_type);
10182 
10183 	    return error_mark_node;
10184 	  }
10185 	else
10186 	  {
10187 	    if (friendp)
10188 	      {
10189 		error ("%qE is neither function nor member function; "
10190 		       "cannot be declared friend", unqualified_id);
10191 		friendp = 0;
10192 	      }
10193 	    decl = NULL_TREE;
10194 	  }
10195 
10196 	if (friendp)
10197 	  {
10198 	    /* Friends are treated specially.  */
10199 	    if (ctype == current_class_type)
10200 	      ;  /* We already issued a permerror.  */
10201 	    else if (decl && DECL_NAME (decl))
10202 	      {
10203 		if (template_class_depth (current_class_type) == 0)
10204 		  {
10205 		    decl = check_explicit_specialization
10206 		      (unqualified_id, decl, template_count,
10207 		       2 * funcdef_flag + 4);
10208 		    if (decl == error_mark_node)
10209 		      return error_mark_node;
10210 		  }
10211 
10212 		decl = do_friend (ctype, unqualified_id, decl,
10213 				  *attrlist, flags,
10214 				  funcdef_flag);
10215 		return decl;
10216 	      }
10217 	    else
10218 	      return error_mark_node;
10219 	  }
10220 
10221 	/* Structure field.  It may not be a function, except for C++.  */
10222 
10223 	if (decl == NULL_TREE)
10224 	  {
10225 	    if (staticp)
10226 	      {
10227 		/* C++ allows static class members.  All other work
10228 		   for this is done by grokfield.  */
10229 		decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10230 		set_linkage_for_static_data_member (decl);
10231 		/* Even if there is an in-class initialization, DECL
10232 		   is considered undefined until an out-of-class
10233 		   definition is provided.  */
10234 		DECL_EXTERNAL (decl) = 1;
10235 
10236 		if (thread_p)
10237 		  DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10238 
10239 		if (constexpr_p && !initialized)
10240 		  {
10241 		    error ("constexpr static data member %qD must have an "
10242 			   "initializer", decl);
10243 		    constexpr_p = false;
10244 		  }
10245 	      }
10246 	    else
10247 	      {
10248                 if (constexpr_p)
10249 		  {
10250 		    error ("non-static data member %qE declared %<constexpr%>",
10251 			   unqualified_id);
10252 		    constexpr_p = false;
10253 		  }
10254 		decl = build_decl (input_location,
10255 				   FIELD_DECL, unqualified_id, type);
10256 		DECL_NONADDRESSABLE_P (decl) = bitfield;
10257 		if (bitfield && !unqualified_id)
10258 		  TREE_NO_WARNING (decl) = 1;
10259 
10260 		if (storage_class == sc_mutable)
10261 		  {
10262 		    DECL_MUTABLE_P (decl) = 1;
10263 		    storage_class = sc_none;
10264 		  }
10265 
10266 		if (initialized)
10267 		  {
10268 		    /* An attempt is being made to initialize a non-static
10269 		       member.  This is new in C++11.  */
10270 		    maybe_warn_cpp0x (CPP0X_NSDMI);
10271 
10272 		    /* If this has been parsed with static storage class, but
10273 		       errors forced staticp to be cleared, ensure NSDMI is
10274 		       not present.  */
10275 		    if (declspecs->storage_class == sc_static)
10276 		      DECL_INITIAL (decl) = error_mark_node;
10277 		  }
10278 	      }
10279 
10280 	    bad_specifiers (decl, BSP_FIELD, virtualp,
10281 			    memfn_quals != TYPE_UNQUALIFIED,
10282 			    inlinep, friendp, raises != NULL_TREE);
10283 	  }
10284       }
10285     else if (TREE_CODE (type) == FUNCTION_TYPE
10286 	     || TREE_CODE (type) == METHOD_TYPE)
10287       {
10288 	tree original_name;
10289 	int publicp = 0;
10290 
10291 	if (!unqualified_id)
10292 	  return error_mark_node;
10293 
10294 	if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10295 	  original_name = dname;
10296 	else
10297 	  original_name = unqualified_id;
10298 
10299 	if (storage_class == sc_auto)
10300 	  error ("storage class %<auto%> invalid for function %qs", name);
10301 	else if (storage_class == sc_register)
10302 	  error ("storage class %<register%> invalid for function %qs", name);
10303 	else if (thread_p)
10304 	  error ("storage class %<__thread%> invalid for function %qs", name);
10305 
10306         if (virt_specifiers)
10307           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10308 	/* Function declaration not at top level.
10309 	   Storage classes other than `extern' are not allowed
10310 	   and `extern' makes no difference.  */
10311 	if (! toplevel_bindings_p ()
10312 	    && (storage_class == sc_static
10313 		|| declspecs->specs[(int)ds_inline])
10314 	    && pedantic)
10315 	  {
10316 	    if (storage_class == sc_static)
10317 	      pedwarn (input_location, OPT_pedantic,
10318 		       "%<static%> specified invalid for function %qs "
10319 		       "declared out of global scope", name);
10320 	    else
10321 	      pedwarn (input_location, OPT_pedantic,
10322 		       "%<inline%> specifier invalid for function %qs "
10323 		       "declared out of global scope", name);
10324 	  }
10325 
10326 	if (ctype == NULL_TREE)
10327 	  {
10328 	    if (virtualp)
10329 	      {
10330 		error ("virtual non-class function %qs", name);
10331 		virtualp = 0;
10332 	      }
10333 	    else if (sfk == sfk_constructor
10334 		     || sfk == sfk_destructor)
10335 	      {
10336 		error (funcdef_flag
10337 		       ? G_("%qs defined in a non-class scope")
10338 		       : G_("%qs declared in a non-class scope"), name);
10339 		sfk = sfk_none;
10340 	      }
10341 	  }
10342 
10343 	/* Record presence of `static'.  */
10344 	publicp = (ctype != NULL_TREE
10345 		   || storage_class == sc_extern
10346 		   || storage_class != sc_static);
10347 
10348 	decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10349 			   virtualp, flags, memfn_quals, raises,
10350 			   1, friendp,
10351 			   publicp, inlinep | (2 * constexpr_p), sfk,
10352                            funcdef_flag,
10353 			   template_count, in_namespace, attrlist,
10354 			   declarator->id_loc);
10355 	if (decl == NULL_TREE)
10356 	  return error_mark_node;
10357 
10358 	if (staticp == 1)
10359 	  {
10360 	    int invalid_static = 0;
10361 
10362 	    /* Don't allow a static member function in a class, and forbid
10363 	       declaring main to be static.  */
10364 	    if (TREE_CODE (type) == METHOD_TYPE)
10365 	      {
10366 		permerror (input_location, "cannot declare member function %qD to have "
10367 			   "static linkage", decl);
10368 		invalid_static = 1;
10369 	      }
10370 	    else if (current_function_decl)
10371 	      {
10372 		/* FIXME need arm citation */
10373 		error ("cannot declare static function inside another function");
10374 		invalid_static = 1;
10375 	      }
10376 
10377 	    if (invalid_static)
10378 	      {
10379 		staticp = 0;
10380 		storage_class = sc_none;
10381 	      }
10382 	  }
10383       }
10384     else
10385       {
10386 	/* It's a variable.  */
10387 
10388 	/* An uninitialized decl with `extern' is a reference.  */
10389 	decl = grokvardecl (type, unqualified_id,
10390 			    declspecs,
10391 			    initialized,
10392 			    (type_quals & TYPE_QUAL_CONST) != 0,
10393 			    ctype ? ctype : in_namespace);
10394 	bad_specifiers (decl, BSP_VAR, virtualp,
10395 			memfn_quals != TYPE_UNQUALIFIED,
10396 			inlinep, friendp, raises != NULL_TREE);
10397 
10398 	if (ctype)
10399 	  {
10400 	    DECL_CONTEXT (decl) = ctype;
10401 	    if (staticp == 1)
10402 	      {
10403 		permerror (input_location, "%<static%> may not be used when defining "
10404 			   "(as opposed to declaring) a static data member");
10405 		staticp = 0;
10406 		storage_class = sc_none;
10407 	      }
10408 	    if (storage_class == sc_register && TREE_STATIC (decl))
10409 	      {
10410 		error ("static member %qD declared %<register%>", decl);
10411 		storage_class = sc_none;
10412 	      }
10413 	    if (storage_class == sc_extern && pedantic)
10414 	      {
10415 		pedwarn (input_location, OPT_pedantic,
10416 			 "cannot explicitly declare member %q#D to have "
10417 			 "extern linkage", decl);
10418 		storage_class = sc_none;
10419 	      }
10420 	  }
10421 	else if (constexpr_p && DECL_EXTERNAL (decl))
10422 	  {
10423 	    error ("declaration of constexpr variable %qD is not a definition",
10424 		   decl);
10425 	    constexpr_p = false;
10426 	  }
10427       }
10428 
10429     if (storage_class == sc_extern && initialized && !funcdef_flag)
10430       {
10431 	if (toplevel_bindings_p ())
10432 	  {
10433 	    /* It's common practice (and completely valid) to have a const
10434 	       be initialized and declared extern.  */
10435 	    if (!(type_quals & TYPE_QUAL_CONST))
10436 	      warning (0, "%qs initialized and declared %<extern%>", name);
10437 	  }
10438 	else
10439 	  {
10440 	    error ("%qs has both %<extern%> and initializer", name);
10441 	    return error_mark_node;
10442 	  }
10443       }
10444 
10445     /* Record `register' declaration for warnings on &
10446        and in case doing stupid register allocation.  */
10447 
10448     if (storage_class == sc_register)
10449       DECL_REGISTER (decl) = 1;
10450     else if (storage_class == sc_extern)
10451       DECL_THIS_EXTERN (decl) = 1;
10452     else if (storage_class == sc_static)
10453       DECL_THIS_STATIC (decl) = 1;
10454 
10455     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10456     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10457       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10458 
10459     /* Record constancy and volatility on the DECL itself .  There's
10460        no need to do this when processing a template; we'll do this
10461        for the instantiated declaration based on the type of DECL.  */
10462     if (!processing_template_decl)
10463       cp_apply_type_quals_to_decl (type_quals, decl);
10464 
10465     return decl;
10466   }
10467 }
10468 
10469 /* Subroutine of start_function.  Ensure that each of the parameter
10470    types (as listed in PARMS) is complete, as is required for a
10471    function definition.  */
10472 
10473 static void
10474 require_complete_types_for_parms (tree parms)
10475 {
10476   for (; parms; parms = DECL_CHAIN (parms))
10477     {
10478       if (dependent_type_p (TREE_TYPE (parms)))
10479 	continue;
10480       if (!VOID_TYPE_P (TREE_TYPE (parms))
10481 	  && complete_type_or_else (TREE_TYPE (parms), parms))
10482 	{
10483 	  relayout_decl (parms);
10484 	  DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10485 	}
10486       else
10487 	/* grokparms or complete_type_or_else will have already issued
10488 	   an error.  */
10489 	TREE_TYPE (parms) = error_mark_node;
10490     }
10491 }
10492 
10493 /* Returns nonzero if T is a local variable.  */
10494 
10495 int
10496 local_variable_p (const_tree t)
10497 {
10498   if ((TREE_CODE (t) == VAR_DECL
10499        /* A VAR_DECL with a context that is a _TYPE is a static data
10500 	  member.  */
10501        && !TYPE_P (CP_DECL_CONTEXT (t))
10502        /* Any other non-local variable must be at namespace scope.  */
10503        && !DECL_NAMESPACE_SCOPE_P (t))
10504       || (TREE_CODE (t) == PARM_DECL))
10505     return 1;
10506 
10507   return 0;
10508 }
10509 
10510 /* Like local_variable_p, but suitable for use as a tree-walking
10511    function.  */
10512 
10513 static tree
10514 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10515 			 void *data ATTRIBUTE_UNUSED)
10516 {
10517   /* Check DECL_NAME to avoid including temporaries.  We don't check
10518      DECL_ARTIFICIAL because we do want to complain about 'this'.  */
10519   if (local_variable_p (*tp) && DECL_NAME (*tp))
10520     return *tp;
10521   else if (TYPE_P (*tp))
10522     *walk_subtrees = 0;
10523 
10524   return NULL_TREE;
10525 }
10526 
10527 /* Check that ARG, which is a default-argument expression for a
10528    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10529    something goes wrong.  DECL may also be a _TYPE node, rather than a
10530    DECL, if there is no DECL available.  */
10531 
10532 tree
10533 check_default_argument (tree decl, tree arg)
10534 {
10535   tree var;
10536   tree decl_type;
10537 
10538   if (TREE_CODE (arg) == DEFAULT_ARG)
10539     /* We get a DEFAULT_ARG when looking at an in-class declaration
10540        with a default argument.  Ignore the argument for now; we'll
10541        deal with it after the class is complete.  */
10542     return arg;
10543 
10544   if (TYPE_P (decl))
10545     {
10546       decl_type = decl;
10547       decl = NULL_TREE;
10548     }
10549   else
10550     decl_type = TREE_TYPE (decl);
10551 
10552   if (arg == error_mark_node
10553       || decl == error_mark_node
10554       || TREE_TYPE (arg) == error_mark_node
10555       || decl_type == error_mark_node)
10556     /* Something already went wrong.  There's no need to check
10557        further.  */
10558     return error_mark_node;
10559 
10560   /* [dcl.fct.default]
10561 
10562      A default argument expression is implicitly converted to the
10563      parameter type.  */
10564   if (!TREE_TYPE (arg)
10565       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10566     {
10567       if (decl)
10568 	error ("default argument for %q#D has type %qT",
10569 	       decl, TREE_TYPE (arg));
10570       else
10571 	error ("default argument for parameter of type %qT has type %qT",
10572 	       decl_type, TREE_TYPE (arg));
10573 
10574       return error_mark_node;
10575     }
10576 
10577   if (warn_zero_as_null_pointer_constant
10578       && c_inhibit_evaluation_warnings == 0
10579       && (TYPE_PTR_P (decl_type) || TYPE_PTR_TO_MEMBER_P (decl_type))
10580       && null_ptr_cst_p (arg)
10581       && !NULLPTR_TYPE_P (TREE_TYPE (arg)))
10582     {
10583       warning (OPT_Wzero_as_null_pointer_constant,
10584 	       "zero as null pointer constant");
10585       return nullptr_node;
10586     }
10587 
10588   /* [dcl.fct.default]
10589 
10590      Local variables shall not be used in default argument
10591      expressions.
10592 
10593      The keyword `this' shall not be used in a default argument of a
10594      member function.  */
10595   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10596   if (var)
10597     {
10598       if (DECL_NAME (var) == this_identifier)
10599 	permerror (input_location, "default argument %qE uses %qD", arg, var);
10600       else
10601 	error ("default argument %qE uses local variable %qD", arg, var);
10602       return error_mark_node;
10603     }
10604 
10605   /* All is well.  */
10606   return arg;
10607 }
10608 
10609 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10610 
10611 static tree
10612 type_is_deprecated (tree type)
10613 {
10614   enum tree_code code;
10615   if (TREE_DEPRECATED (type))
10616     return type;
10617   if (TYPE_NAME (type)
10618       && TREE_DEPRECATED (TYPE_NAME (type)))
10619     return type;
10620 
10621   /* Do warn about using typedefs to a deprecated class.  */
10622   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10623     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10624 
10625   code = TREE_CODE (type);
10626 
10627   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10628       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10629       || code == METHOD_TYPE || code == ARRAY_TYPE)
10630     return type_is_deprecated (TREE_TYPE (type));
10631 
10632   if (TYPE_PTRMEMFUNC_P (type))
10633     return type_is_deprecated
10634       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10635 
10636   return NULL_TREE;
10637 }
10638 
10639 /* Decode the list of parameter types for a function type.
10640    Given the list of things declared inside the parens,
10641    return a list of types.
10642 
10643    If this parameter does not end with an ellipsis, we append
10644    void_list_node.
10645 
10646    *PARMS is set to the chain of PARM_DECLs created.  */
10647 
10648 static tree
10649 grokparms (tree parmlist, tree *parms)
10650 {
10651   tree result = NULL_TREE;
10652   tree decls = NULL_TREE;
10653   tree parm;
10654   int any_error = 0;
10655 
10656   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10657     {
10658       tree type = NULL_TREE;
10659       tree init = TREE_PURPOSE (parm);
10660       tree decl = TREE_VALUE (parm);
10661       const char *errmsg;
10662 
10663       if (parm == void_list_node)
10664 	break;
10665 
10666       if (! decl || TREE_TYPE (decl) == error_mark_node)
10667 	continue;
10668 
10669       type = TREE_TYPE (decl);
10670       if (VOID_TYPE_P (type))
10671 	{
10672 	  if (same_type_p (type, void_type_node)
10673 	      && DECL_SELF_REFERENCE_P (type)
10674 	      && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10675 	    /* this is a parmlist of `(void)', which is ok.  */
10676 	    break;
10677 	  cxx_incomplete_type_error (decl, type);
10678 	  /* It's not a good idea to actually create parameters of
10679 	     type `void'; other parts of the compiler assume that a
10680 	     void type terminates the parameter list.  */
10681 	  type = error_mark_node;
10682 	  TREE_TYPE (decl) = error_mark_node;
10683 	}
10684 
10685       if (type != error_mark_node
10686 	  && TYPE_FOR_JAVA (type)
10687 	  && MAYBE_CLASS_TYPE_P (type))
10688 	{
10689 	  error ("parameter %qD has Java class type", decl);
10690 	  type = error_mark_node;
10691 	  TREE_TYPE (decl) = error_mark_node;
10692 	  init = NULL_TREE;
10693 	}
10694 
10695       if (type != error_mark_node
10696 	  && (errmsg = targetm.invalid_parameter_type (type)))
10697 	{
10698 	  error (errmsg);
10699 	  type = error_mark_node;
10700 	  TREE_TYPE (decl) = error_mark_node;
10701 	}
10702 
10703       if (type != error_mark_node)
10704 	{
10705 	  if (deprecated_state != DEPRECATED_SUPPRESS)
10706 	    {
10707 	      tree deptype = type_is_deprecated (type);
10708 	      if (deptype)
10709 		warn_deprecated_use (deptype, NULL_TREE);
10710 	    }
10711 
10712 	  /* Top-level qualifiers on the parameters are
10713 	     ignored for function types.  */
10714 	  type = cp_build_qualified_type (type, 0);
10715 	  if (TREE_CODE (type) == METHOD_TYPE)
10716 	    {
10717 	      error ("parameter %qD invalidly declared method type", decl);
10718 	      type = build_pointer_type (type);
10719 	      TREE_TYPE (decl) = type;
10720 	    }
10721 	  else if (abstract_virtuals_error (decl, type))
10722 	    any_error = 1;  /* Seems like a good idea.  */
10723 	  else if (POINTER_TYPE_P (type))
10724 	    {
10725 	      /* [dcl.fct]/6, parameter types cannot contain pointers
10726 		 (references) to arrays of unknown bound.  */
10727 	      tree t = TREE_TYPE (type);
10728 	      int ptr = TYPE_PTR_P (type);
10729 
10730 	      while (1)
10731 		{
10732 		  if (TYPE_PTR_P (t))
10733 		    ptr = 1;
10734 		  else if (TREE_CODE (t) != ARRAY_TYPE)
10735 		    break;
10736 		  else if (!TYPE_DOMAIN (t))
10737 		    break;
10738 		  t = TREE_TYPE (t);
10739 		}
10740 	      if (TREE_CODE (t) == ARRAY_TYPE)
10741 		error (ptr
10742                        ? G_("parameter %qD includes pointer to array of "
10743                             "unknown bound %qT")
10744                        : G_("parameter %qD includes reference to array of "
10745                             "unknown bound %qT"),
10746                        decl, t);
10747 	    }
10748 
10749 	  if (any_error)
10750 	    init = NULL_TREE;
10751 	  else if (init && !processing_template_decl)
10752 	    init = check_default_argument (decl, init);
10753 	}
10754 
10755       DECL_CHAIN (decl) = decls;
10756       decls = decl;
10757       result = tree_cons (init, type, result);
10758     }
10759   decls = nreverse (decls);
10760   result = nreverse (result);
10761   if (parm)
10762     result = chainon (result, void_list_node);
10763   *parms = decls;
10764 
10765   return result;
10766 }
10767 
10768 
10769 /* D is a constructor or overloaded `operator='.
10770 
10771    Let T be the class in which D is declared. Then, this function
10772    returns:
10773 
10774    -1 if D's is an ill-formed constructor or copy assignment operator
10775       whose first parameter is of type `T'.
10776    0  if D is not a copy constructor or copy assignment
10777       operator.
10778    1  if D is a copy constructor or copy assignment operator whose
10779       first parameter is a reference to non-const qualified T.
10780    2  if D is a copy constructor or copy assignment operator whose
10781       first parameter is a reference to const qualified T.
10782 
10783    This function can be used as a predicate. Positive values indicate
10784    a copy constructor and nonzero values indicate a copy assignment
10785    operator.  */
10786 
10787 int
10788 copy_fn_p (const_tree d)
10789 {
10790   tree args;
10791   tree arg_type;
10792   int result = 1;
10793 
10794   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10795 
10796   if (TREE_CODE (d) == TEMPLATE_DECL
10797       || (DECL_TEMPLATE_INFO (d)
10798 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10799     /* Instantiations of template member functions are never copy
10800        functions.  Note that member functions of templated classes are
10801        represented as template functions internally, and we must
10802        accept those as copy functions.  */
10803     return 0;
10804 
10805   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10806   if (!args)
10807     return 0;
10808 
10809   arg_type = TREE_VALUE (args);
10810   if (arg_type == error_mark_node)
10811     return 0;
10812 
10813   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10814     {
10815       /* Pass by value copy assignment operator.  */
10816       result = -1;
10817     }
10818   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10819 	   && !TYPE_REF_IS_RVALUE (arg_type)
10820 	   && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10821     {
10822       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10823 	result = 2;
10824     }
10825   else
10826     return 0;
10827 
10828   args = TREE_CHAIN (args);
10829 
10830   if (args && args != void_list_node && !TREE_PURPOSE (args))
10831     /* There are more non-optional args.  */
10832     return 0;
10833 
10834   return result;
10835 }
10836 
10837 /* D is a constructor or overloaded `operator='.
10838 
10839    Let T be the class in which D is declared. Then, this function
10840    returns true when D is a move constructor or move assignment
10841    operator, false otherwise.  */
10842 
10843 bool
10844 move_fn_p (const_tree d)
10845 {
10846   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10847 
10848   if (cxx_dialect == cxx98)
10849     /* There are no move constructors if we are in C++98 mode.  */
10850     return false;
10851 
10852   if (TREE_CODE (d) == TEMPLATE_DECL
10853       || (DECL_TEMPLATE_INFO (d)
10854          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10855     /* Instantiations of template member functions are never move
10856        functions.  Note that member functions of templated classes are
10857        represented as template functions internally, and we must
10858        accept those as move functions.  */
10859     return 0;
10860 
10861   return move_signature_fn_p (d);
10862 }
10863 
10864 /* D is a constructor or overloaded `operator='.
10865 
10866    Then, this function returns true when D has the same signature as a move
10867    constructor or move assignment operator (because either it is such a
10868    ctor/op= or it is a template specialization with the same signature),
10869    false otherwise.  */
10870 
10871 bool
10872 move_signature_fn_p (const_tree d)
10873 {
10874   tree args;
10875   tree arg_type;
10876   bool result = false;
10877 
10878   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10879   if (!args)
10880     return 0;
10881 
10882   arg_type = TREE_VALUE (args);
10883   if (arg_type == error_mark_node)
10884     return 0;
10885 
10886   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10887       && TYPE_REF_IS_RVALUE (arg_type)
10888       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10889                       DECL_CONTEXT (d)))
10890     result = true;
10891 
10892   args = TREE_CHAIN (args);
10893 
10894   if (args && args != void_list_node && !TREE_PURPOSE (args))
10895     /* There are more non-optional args.  */
10896     return false;
10897 
10898   return result;
10899 }
10900 
10901 /* Remember any special properties of member function DECL.  */
10902 
10903 void
10904 grok_special_member_properties (tree decl)
10905 {
10906   tree class_type;
10907 
10908   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10909     return;
10910 
10911   class_type = DECL_CONTEXT (decl);
10912   if (DECL_CONSTRUCTOR_P (decl))
10913     {
10914       int ctor = copy_fn_p (decl);
10915 
10916       if (!DECL_ARTIFICIAL (decl))
10917 	TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10918 
10919       if (ctor > 0)
10920 	{
10921 	  /* [class.copy]
10922 
10923 	     A non-template constructor for class X is a copy
10924 	     constructor if its first parameter is of type X&, const
10925 	     X&, volatile X& or const volatile X&, and either there
10926 	     are no other parameters or else all other parameters have
10927 	     default arguments.  */
10928 	  TYPE_HAS_COPY_CTOR (class_type) = 1;
10929 	  if (user_provided_p (decl))
10930 	    TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10931 	  if (ctor > 1)
10932 	    TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10933 	}
10934       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10935 	{
10936 	  TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10937 	  if (user_provided_p (decl))
10938 	    TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10939 	}
10940       else if (move_fn_p (decl) && user_provided_p (decl))
10941 	TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10942       else if (is_list_ctor (decl))
10943 	TYPE_HAS_LIST_CTOR (class_type) = 1;
10944 
10945       if (DECL_DECLARED_CONSTEXPR_P (decl)
10946 	  && !copy_fn_p (decl) && !move_fn_p (decl))
10947 	TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10948     }
10949   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10950     {
10951       /* [class.copy]
10952 
10953 	 A non-template assignment operator for class X is a copy
10954 	 assignment operator if its parameter is of type X, X&, const
10955 	 X&, volatile X& or const volatile X&.  */
10956 
10957       int assop = copy_fn_p (decl);
10958 
10959       if (assop)
10960 	{
10961 	  TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10962 	  if (user_provided_p (decl))
10963 	    TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10964 	  if (assop != 1)
10965 	    TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10966 	}
10967       else if (move_fn_p (decl) && user_provided_p (decl))
10968 	TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10969     }
10970   /* Destructors are handled in check_methods.  */
10971 }
10972 
10973 /* Check a constructor DECL has the correct form.  Complains
10974    if the class has a constructor of the form X(X).  */
10975 
10976 int
10977 grok_ctor_properties (const_tree ctype, const_tree decl)
10978 {
10979   int ctor_parm = copy_fn_p (decl);
10980 
10981   if (ctor_parm < 0)
10982     {
10983       /* [class.copy]
10984 
10985 	 A declaration of a constructor for a class X is ill-formed if
10986 	 its first parameter is of type (optionally cv-qualified) X
10987 	 and either there are no other parameters or else all other
10988 	 parameters have default arguments.
10989 
10990 	 We *don't* complain about member template instantiations that
10991 	 have this form, though; they can occur as we try to decide
10992 	 what constructor to use during overload resolution.  Since
10993 	 overload resolution will never prefer such a constructor to
10994 	 the non-template copy constructor (which is either explicitly
10995 	 or implicitly defined), there's no need to worry about their
10996 	 existence.  Theoretically, they should never even be
10997 	 instantiated, but that's hard to forestall.  */
10998       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10999 		ctype, ctype);
11000       return 0;
11001     }
11002 
11003   return 1;
11004 }
11005 
11006 /* An operator with this code is unary, but can also be binary.  */
11007 
11008 static int
11009 ambi_op_p (enum tree_code code)
11010 {
11011   return (code == INDIRECT_REF
11012 	  || code == ADDR_EXPR
11013 	  || code == UNARY_PLUS_EXPR
11014 	  || code == NEGATE_EXPR
11015 	  || code == PREINCREMENT_EXPR
11016 	  || code == PREDECREMENT_EXPR);
11017 }
11018 
11019 /* An operator with this name can only be unary.  */
11020 
11021 static int
11022 unary_op_p (enum tree_code code)
11023 {
11024   return (code == TRUTH_NOT_EXPR
11025 	  || code == BIT_NOT_EXPR
11026 	  || code == COMPONENT_REF
11027 	  || code == TYPE_EXPR);
11028 }
11029 
11030 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11031    errors are issued for invalid declarations.  */
11032 
11033 bool
11034 grok_op_properties (tree decl, bool complain)
11035 {
11036   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11037   tree argtype;
11038   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11039   tree name = DECL_NAME (decl);
11040   enum tree_code operator_code;
11041   int arity;
11042   bool ellipsis_p;
11043   tree class_type;
11044 
11045   /* Count the number of arguments and check for ellipsis.  */
11046   for (argtype = argtypes, arity = 0;
11047        argtype && argtype != void_list_node;
11048        argtype = TREE_CHAIN (argtype))
11049     ++arity;
11050   ellipsis_p = !argtype;
11051 
11052   class_type = DECL_CONTEXT (decl);
11053   if (class_type && !CLASS_TYPE_P (class_type))
11054     class_type = NULL_TREE;
11055 
11056   if (DECL_CONV_FN_P (decl))
11057     operator_code = TYPE_EXPR;
11058   else
11059     do
11060       {
11061 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)	\
11062 	if (ansi_opname (CODE) == name)				\
11063 	  {							\
11064 	    operator_code = (CODE);				\
11065 	    break;						\
11066 	  }							\
11067 	else if (ansi_assopname (CODE) == name)			\
11068 	  {							\
11069 	    operator_code = (CODE);				\
11070 	    DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;		\
11071 	    break;						\
11072 	  }
11073 
11074 #include "operators.def"
11075 #undef DEF_OPERATOR
11076 
11077 	gcc_unreachable ();
11078       }
11079     while (0);
11080   gcc_assert (operator_code != MAX_TREE_CODES);
11081   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11082 
11083   if (class_type)
11084     switch (operator_code)
11085       {
11086       case NEW_EXPR:
11087 	TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11088 	break;
11089 
11090       case DELETE_EXPR:
11091 	TYPE_GETS_DELETE (class_type) |= 1;
11092 	break;
11093 
11094       case VEC_NEW_EXPR:
11095 	TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11096 	break;
11097 
11098       case VEC_DELETE_EXPR:
11099 	TYPE_GETS_DELETE (class_type) |= 2;
11100 	break;
11101 
11102       default:
11103 	break;
11104       }
11105 
11106     /* [basic.std.dynamic.allocation]/1:
11107 
11108        A program is ill-formed if an allocation function is declared
11109        in a namespace scope other than global scope or declared static
11110        in global scope.
11111 
11112        The same also holds true for deallocation functions.  */
11113   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11114       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11115     {
11116       if (DECL_NAMESPACE_SCOPE_P (decl))
11117 	{
11118 	  if (CP_DECL_CONTEXT (decl) != global_namespace)
11119 	    {
11120 	      error ("%qD may not be declared within a namespace", decl);
11121 	      return false;
11122 	    }
11123 	  else if (!TREE_PUBLIC (decl))
11124 	    {
11125 	      error ("%qD may not be declared as static", decl);
11126 	      return false;
11127 	    }
11128 	}
11129     }
11130 
11131   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11132     {
11133       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11134       DECL_IS_OPERATOR_NEW (decl) = 1;
11135     }
11136   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11137     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11138   else
11139     {
11140       /* An operator function must either be a non-static member function
11141 	 or have at least one parameter of a class, a reference to a class,
11142 	 an enumeration, or a reference to an enumeration.  13.4.0.6 */
11143       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11144 	{
11145 	  if (operator_code == TYPE_EXPR
11146 	      || operator_code == CALL_EXPR
11147 	      || operator_code == COMPONENT_REF
11148 	      || operator_code == ARRAY_REF
11149 	      || operator_code == NOP_EXPR)
11150 	    {
11151 	      error ("%qD must be a nonstatic member function", decl);
11152 	      return false;
11153 	    }
11154 	  else
11155 	    {
11156 	      tree p;
11157 
11158 	      if (DECL_STATIC_FUNCTION_P (decl))
11159 		{
11160 		  error ("%qD must be either a non-static member "
11161 			 "function or a non-member function", decl);
11162 		  return false;
11163 		}
11164 
11165 	      for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11166 		{
11167 		  tree arg = non_reference (TREE_VALUE (p));
11168 		  if (arg == error_mark_node)
11169 		    return false;
11170 
11171 		  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11172 		     because these checks are performed even on
11173 		     template functions.  */
11174 		  if (MAYBE_CLASS_TYPE_P (arg)
11175 		      || TREE_CODE (arg) == ENUMERAL_TYPE)
11176 		    break;
11177 		}
11178 
11179 	      if (!p || p == void_list_node)
11180 		{
11181 		  if (complain)
11182 		    error ("%qD must have an argument of class or "
11183 			   "enumerated type", decl);
11184 		  return false;
11185 		}
11186 	    }
11187 	}
11188 
11189       /* There are no restrictions on the arguments to an overloaded
11190 	 "operator ()".  */
11191       if (operator_code == CALL_EXPR)
11192 	return true;
11193 
11194       /* Warn about conversion operators that will never be used.  */
11195       if (IDENTIFIER_TYPENAME_P (name)
11196 	  && ! DECL_TEMPLATE_INFO (decl)
11197 	  && warn_conversion
11198 	  /* Warn only declaring the function; there is no need to
11199 	     warn again about out-of-class definitions.  */
11200 	  && class_type == current_class_type)
11201 	{
11202 	  tree t = TREE_TYPE (name);
11203 	  int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11204 
11205 	  if (ref)
11206 	    t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11207 
11208 	  if (TREE_CODE (t) == VOID_TYPE)
11209             warning (OPT_Wconversion,
11210                      ref
11211                      ? G_("conversion to a reference to void "
11212                           "will never use a type conversion operator")
11213                      : G_("conversion to void "
11214                           "will never use a type conversion operator"));
11215 	  else if (class_type)
11216 	    {
11217 	      if (t == class_type)
11218                 warning (OPT_Wconversion,
11219                      ref
11220                      ? G_("conversion to a reference to the same type "
11221                           "will never use a type conversion operator")
11222                      : G_("conversion to the same type "
11223                           "will never use a type conversion operator"));
11224 	      /* Don't force t to be complete here.  */
11225 	      else if (MAYBE_CLASS_TYPE_P (t)
11226 		       && COMPLETE_TYPE_P (t)
11227 		       && DERIVED_FROM_P (t, class_type))
11228                  warning (OPT_Wconversion,
11229                           ref
11230                           ? G_("conversion to a reference to a base class "
11231                                "will never use a type conversion operator")
11232                           : G_("conversion to a base class "
11233                                "will never use a type conversion operator"));
11234 	    }
11235 
11236 	}
11237 
11238       if (operator_code == COND_EXPR)
11239 	{
11240 	  /* 13.4.0.3 */
11241 	  error ("ISO C++ prohibits overloading operator ?:");
11242 	  return false;
11243 	}
11244       else if (ellipsis_p)
11245 	{
11246 	  error ("%qD must not have variable number of arguments", decl);
11247 	  return false;
11248 	}
11249       else if (ambi_op_p (operator_code))
11250 	{
11251 	  if (arity == 1)
11252 	    /* We pick the one-argument operator codes by default, so
11253 	       we don't have to change anything.  */
11254 	    ;
11255 	  else if (arity == 2)
11256 	    {
11257 	      /* If we thought this was a unary operator, we now know
11258 		 it to be a binary operator.  */
11259 	      switch (operator_code)
11260 		{
11261 		case INDIRECT_REF:
11262 		  operator_code = MULT_EXPR;
11263 		  break;
11264 
11265 		case ADDR_EXPR:
11266 		  operator_code = BIT_AND_EXPR;
11267 		  break;
11268 
11269 		case UNARY_PLUS_EXPR:
11270 		  operator_code = PLUS_EXPR;
11271 		  break;
11272 
11273 		case NEGATE_EXPR:
11274 		  operator_code = MINUS_EXPR;
11275 		  break;
11276 
11277 		case PREINCREMENT_EXPR:
11278 		  operator_code = POSTINCREMENT_EXPR;
11279 		  break;
11280 
11281 		case PREDECREMENT_EXPR:
11282 		  operator_code = POSTDECREMENT_EXPR;
11283 		  break;
11284 
11285 		default:
11286 		  gcc_unreachable ();
11287 		}
11288 
11289 	      SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11290 
11291 	      if ((operator_code == POSTINCREMENT_EXPR
11292 		   || operator_code == POSTDECREMENT_EXPR)
11293 		  && ! processing_template_decl
11294 		  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11295 		{
11296 		  if (methodp)
11297 		    error ("postfix %qD must take %<int%> as its argument",
11298 			   decl);
11299 		  else
11300 		    error ("postfix %qD must take %<int%> as its second "
11301 			   "argument", decl);
11302 		  return false;
11303 		}
11304 	    }
11305 	  else
11306 	    {
11307 	      if (methodp)
11308 		error ("%qD must take either zero or one argument", decl);
11309 	      else
11310 		error ("%qD must take either one or two arguments", decl);
11311 	      return false;
11312 	    }
11313 
11314 	  /* More Effective C++ rule 6.  */
11315 	  if (warn_ecpp
11316 	      && (operator_code == POSTINCREMENT_EXPR
11317 		  || operator_code == POSTDECREMENT_EXPR
11318 		  || operator_code == PREINCREMENT_EXPR
11319 		  || operator_code == PREDECREMENT_EXPR))
11320 	    {
11321 	      tree arg = TREE_VALUE (argtypes);
11322 	      tree ret = TREE_TYPE (TREE_TYPE (decl));
11323 	      if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11324 		arg = TREE_TYPE (arg);
11325 	      arg = TYPE_MAIN_VARIANT (arg);
11326 	      if (operator_code == PREINCREMENT_EXPR
11327 		  || operator_code == PREDECREMENT_EXPR)
11328 		{
11329 		  if (TREE_CODE (ret) != REFERENCE_TYPE
11330 		      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11331 				       arg))
11332 		    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11333 			     build_reference_type (arg));
11334 		}
11335 	      else
11336 		{
11337 		  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11338 		    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11339 		}
11340 	    }
11341 	}
11342       else if (unary_op_p (operator_code))
11343 	{
11344 	  if (arity != 1)
11345 	    {
11346 	      if (methodp)
11347 		error ("%qD must take %<void%>", decl);
11348 	      else
11349 		error ("%qD must take exactly one argument", decl);
11350 	      return false;
11351 	    }
11352 	}
11353       else /* if (binary_op_p (operator_code)) */
11354 	{
11355 	  if (arity != 2)
11356 	    {
11357 	      if (methodp)
11358 		error ("%qD must take exactly one argument", decl);
11359 	      else
11360 		error ("%qD must take exactly two arguments", decl);
11361 	      return false;
11362 	    }
11363 
11364 	  /* More Effective C++ rule 7.  */
11365 	  if (warn_ecpp
11366 	      && (operator_code == TRUTH_ANDIF_EXPR
11367 		  || operator_code == TRUTH_ORIF_EXPR
11368 		  || operator_code == COMPOUND_EXPR))
11369 	    warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11370 		     decl);
11371 	}
11372 
11373       /* Effective C++ rule 23.  */
11374       if (warn_ecpp
11375 	  && arity == 2
11376 	  && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11377 	  && (operator_code == PLUS_EXPR
11378 	      || operator_code == MINUS_EXPR
11379 	      || operator_code == TRUNC_DIV_EXPR
11380 	      || operator_code == MULT_EXPR
11381 	      || operator_code == TRUNC_MOD_EXPR)
11382 	  && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11383 	warning (OPT_Weffc__, "%qD should return by value", decl);
11384 
11385       /* [over.oper]/8 */
11386       for (; argtypes && argtypes != void_list_node;
11387 	  argtypes = TREE_CHAIN (argtypes))
11388 	if (TREE_PURPOSE (argtypes))
11389 	  {
11390 	    TREE_PURPOSE (argtypes) = NULL_TREE;
11391 	    if (operator_code == POSTINCREMENT_EXPR
11392 		|| operator_code == POSTDECREMENT_EXPR)
11393 	      {
11394 		pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments",
11395 			 decl);
11396 	      }
11397 	    else
11398 	      {
11399 		error ("%qD cannot have default arguments", decl);
11400 		return false;
11401 	      }
11402 	  }
11403     }
11404   return true;
11405 }
11406 
11407 /* Return a string giving the keyword associate with CODE.  */
11408 
11409 static const char *
11410 tag_name (enum tag_types code)
11411 {
11412   switch (code)
11413     {
11414     case record_type:
11415       return "struct";
11416     case class_type:
11417       return "class";
11418     case union_type:
11419       return "union";
11420     case enum_type:
11421       return "enum";
11422     case typename_type:
11423       return "typename";
11424     default:
11425       gcc_unreachable ();
11426     }
11427 }
11428 
11429 /* Name lookup in an elaborated-type-specifier (after the keyword
11430    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11431    elaborated-type-specifier is invalid, issue a diagnostic and return
11432    error_mark_node; otherwise, return the *_TYPE to which it referred.
11433    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11434 
11435 tree
11436 check_elaborated_type_specifier (enum tag_types tag_code,
11437 				 tree decl,
11438 				 bool allow_template_p)
11439 {
11440   tree type;
11441 
11442   if (decl == error_mark_node)
11443     return error_mark_node;
11444 
11445   /* In the case of:
11446 
11447        struct S { struct S *p; };
11448 
11449      name lookup will find the TYPE_DECL for the implicit "S::S"
11450      typedef.  Adjust for that here.  */
11451   if (DECL_SELF_REFERENCE_P (decl))
11452     decl = TYPE_NAME (TREE_TYPE (decl));
11453 
11454   type = TREE_TYPE (decl);
11455 
11456   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11457      is false for this case as well.  */
11458   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11459     {
11460       error ("using template type parameter %qT after %qs",
11461 	     type, tag_name (tag_code));
11462       return error_mark_node;
11463     }
11464   /* Accept bound template template parameters.  */
11465   else if (allow_template_p
11466 	   && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11467     ;
11468   /*   [dcl.type.elab]
11469 
11470        If the identifier resolves to a typedef-name or the
11471        simple-template-id resolves to an alias template
11472        specialization, the elaborated-type-specifier is ill-formed.
11473 
11474      In other words, the only legitimate declaration to use in the
11475      elaborated type specifier is the implicit typedef created when
11476      the type is declared.  */
11477   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11478 	   && !DECL_SELF_REFERENCE_P (decl)
11479 	   && tag_code != typename_type)
11480     {
11481       if (alias_template_specialization_p (type))
11482 	error ("using alias template specialization %qT after %qs",
11483 	       type, tag_name (tag_code));
11484       else
11485 	error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11486       inform (DECL_SOURCE_LOCATION (decl),
11487 	      "%qD has a previous declaration here", decl);
11488       return error_mark_node;
11489     }
11490   else if (TREE_CODE (type) != RECORD_TYPE
11491 	   && TREE_CODE (type) != UNION_TYPE
11492 	   && tag_code != enum_type
11493 	   && tag_code != typename_type)
11494     {
11495       error ("%qT referred to as %qs", type, tag_name (tag_code));
11496       error ("%q+T has a previous declaration here", type);
11497       return error_mark_node;
11498     }
11499   else if (TREE_CODE (type) != ENUMERAL_TYPE
11500 	   && tag_code == enum_type)
11501     {
11502       error ("%qT referred to as enum", type);
11503       error ("%q+T has a previous declaration here", type);
11504       return error_mark_node;
11505     }
11506   else if (!allow_template_p
11507 	   && TREE_CODE (type) == RECORD_TYPE
11508 	   && CLASSTYPE_IS_TEMPLATE (type))
11509     {
11510       /* If a class template appears as elaborated type specifier
11511 	 without a template header such as:
11512 
11513 	   template <class T> class C {};
11514 	   void f(class C);		// No template header here
11515 
11516 	 then the required template argument is missing.  */
11517       error ("template argument required for %<%s %T%>",
11518 	     tag_name (tag_code),
11519 	     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11520       return error_mark_node;
11521     }
11522 
11523   return type;
11524 }
11525 
11526 /* Lookup NAME in elaborate type specifier in scope according to
11527    SCOPE and issue diagnostics if necessary.
11528    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11529    found, and ERROR_MARK_NODE for type error.  */
11530 
11531 static tree
11532 lookup_and_check_tag (enum tag_types tag_code, tree name,
11533 		      tag_scope scope, bool template_header_p)
11534 {
11535   tree t;
11536   tree decl;
11537   if (scope == ts_global)
11538     {
11539       /* First try ordinary name lookup, ignoring hidden class name
11540 	 injected via friend declaration.  */
11541       decl = lookup_name_prefer_type (name, 2);
11542       /* If that fails, the name will be placed in the smallest
11543 	 non-class, non-function-prototype scope according to 3.3.1/5.
11544 	 We may already have a hidden name declared as friend in this
11545 	 scope.  So lookup again but not ignoring hidden names.
11546 	 If we find one, that name will be made visible rather than
11547 	 creating a new tag.  */
11548       if (!decl)
11549 	decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11550     }
11551   else
11552     decl = lookup_type_scope (name, scope);
11553 
11554   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11555     decl = DECL_TEMPLATE_RESULT (decl);
11556 
11557   if (decl && TREE_CODE (decl) == TYPE_DECL)
11558     {
11559       /* Look for invalid nested type:
11560 	   class C {
11561 	     class C {};
11562 	   };  */
11563       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11564 	{
11565 	  error ("%qD has the same name as the class in which it is "
11566 		 "declared",
11567 		 decl);
11568 	  return error_mark_node;
11569 	}
11570 
11571       /* Two cases we need to consider when deciding if a class
11572 	 template is allowed as an elaborated type specifier:
11573 	 1. It is a self reference to its own class.
11574 	 2. It comes with a template header.
11575 
11576 	 For example:
11577 
11578 	   template <class T> class C {
11579 	     class C *c1;		// DECL_SELF_REFERENCE_P is true
11580 	     class D;
11581 	   };
11582 	   template <class U> class C; // template_header_p is true
11583 	   template <class T> class C<T>::D {
11584 	     class C *c2;		// DECL_SELF_REFERENCE_P is true
11585 	   };  */
11586 
11587       t = check_elaborated_type_specifier (tag_code,
11588 					   decl,
11589 					   template_header_p
11590 					   | DECL_SELF_REFERENCE_P (decl));
11591       return t;
11592     }
11593   else if (decl && TREE_CODE (decl) == TREE_LIST)
11594     {
11595       error ("reference to %qD is ambiguous", name);
11596       print_candidates (decl);
11597       return error_mark_node;
11598     }
11599   else
11600     return NULL_TREE;
11601 }
11602 
11603 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11604    Define the tag as a forward-reference if it is not defined.
11605 
11606    If a declaration is given, process it here, and report an error if
11607    multiple declarations are not identical.
11608 
11609    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11610    the current frame for the name (since C++ allows new names in any
11611    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11612    declaration.  Only look beginning from the current scope outward up
11613    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11614 
11615    TEMPLATE_HEADER_P is true when this declaration is preceded by
11616    a set of template parameters.  */
11617 
11618 static tree
11619 xref_tag_1 (enum tag_types tag_code, tree name,
11620             tag_scope scope, bool template_header_p)
11621 {
11622   enum tree_code code;
11623   tree t;
11624   tree context = NULL_TREE;
11625 
11626   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11627 
11628   switch (tag_code)
11629     {
11630     case record_type:
11631     case class_type:
11632       code = RECORD_TYPE;
11633       break;
11634     case union_type:
11635       code = UNION_TYPE;
11636       break;
11637     case enum_type:
11638       code = ENUMERAL_TYPE;
11639       break;
11640     default:
11641       gcc_unreachable ();
11642     }
11643 
11644   /* In case of anonymous name, xref_tag is only called to
11645      make type node and push name.  Name lookup is not required.  */
11646   if (ANON_AGGRNAME_P (name))
11647     t = NULL_TREE;
11648   else
11649     t = lookup_and_check_tag  (tag_code, name,
11650 			       scope, template_header_p);
11651 
11652   if (t == error_mark_node)
11653     return error_mark_node;
11654 
11655   if (scope != ts_current && t && current_class_type
11656       && template_class_depth (current_class_type)
11657       && template_header_p)
11658     {
11659       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11660 	 definition of this tag.  Since, in addition, we are currently
11661 	 processing a (member) template declaration of a template
11662 	 class, we must be very careful; consider:
11663 
11664 	   template <class X>
11665 	   struct S1
11666 
11667 	   template <class U>
11668 	   struct S2
11669 	   { template <class V>
11670 	   friend struct S1; };
11671 
11672 	 Here, the S2::S1 declaration should not be confused with the
11673 	 outer declaration.  In particular, the inner version should
11674 	 have a template parameter of level 2, not level 1.  This
11675 	 would be particularly important if the member declaration
11676 	 were instead:
11677 
11678 	   template <class V = U> friend struct S1;
11679 
11680 	 say, when we should tsubst into `U' when instantiating
11681 	 S2.  On the other hand, when presented with:
11682 
11683 	   template <class T>
11684 	   struct S1 {
11685 	     template <class U>
11686 	     struct S2 {};
11687 	     template <class U>
11688 	     friend struct S2;
11689 	   };
11690 
11691 	 we must find the inner binding eventually.  We
11692 	 accomplish this by making sure that the new type we
11693 	 create to represent this declaration has the right
11694 	 TYPE_CONTEXT.  */
11695       context = TYPE_CONTEXT (t);
11696       t = NULL_TREE;
11697     }
11698 
11699   if (! t)
11700     {
11701       /* If no such tag is yet defined, create a forward-reference node
11702 	 and record it as the "definition".
11703 	 When a real declaration of this type is found,
11704 	 the forward-reference will be altered into a real type.  */
11705       if (code == ENUMERAL_TYPE)
11706 	{
11707 	  error ("use of enum %q#D without previous declaration", name);
11708 	  return error_mark_node;
11709 	}
11710       else
11711 	{
11712 	  t = make_class_type (code);
11713 	  TYPE_CONTEXT (t) = context;
11714 	  t = pushtag (name, t, scope);
11715 	}
11716     }
11717   else
11718     {
11719       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11720         {
11721 	  if (!redeclare_class_template (t, current_template_parms))
11722             return error_mark_node;
11723         }
11724       else if (!processing_template_decl
11725 	       && CLASS_TYPE_P (t)
11726 	       && CLASSTYPE_IS_TEMPLATE (t))
11727 	{
11728 	  error ("redeclaration of %qT as a non-template", t);
11729 	  error ("previous declaration %q+D", t);
11730 	  return error_mark_node;
11731 	}
11732 
11733       /* Make injected friend class visible.  */
11734       if (scope != ts_within_enclosing_non_class
11735 	  && hidden_name_p (TYPE_NAME (t)))
11736 	{
11737 	  DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11738 	  DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11739 
11740 	  if (TYPE_TEMPLATE_INFO (t))
11741 	    {
11742 	      DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11743 	      DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11744 	    }
11745 	}
11746     }
11747 
11748   return t;
11749 }
11750 
11751 /* Wrapper for xref_tag_1.  */
11752 
11753 tree
11754 xref_tag (enum tag_types tag_code, tree name,
11755           tag_scope scope, bool template_header_p)
11756 {
11757   tree ret;
11758   bool subtime;
11759   subtime = timevar_cond_start (TV_NAME_LOOKUP);
11760   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11761   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11762   return ret;
11763 }
11764 
11765 
11766 tree
11767 xref_tag_from_type (tree old, tree id, tag_scope scope)
11768 {
11769   enum tag_types tag_kind;
11770 
11771   if (TREE_CODE (old) == RECORD_TYPE)
11772     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11773   else
11774     tag_kind  = union_type;
11775 
11776   if (id == NULL_TREE)
11777     id = TYPE_IDENTIFIER (old);
11778 
11779   return xref_tag (tag_kind, id, scope, false);
11780 }
11781 
11782 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11783    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11784    access_* node, and the TREE_VALUE is the type of the base-class.
11785    Non-NULL TREE_TYPE indicates virtual inheritance.
11786 
11787    Returns true if the binfo hierarchy was successfully created,
11788    false if an error was detected. */
11789 
11790 bool
11791 xref_basetypes (tree ref, tree base_list)
11792 {
11793   tree *basep;
11794   tree binfo, base_binfo;
11795   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11796   unsigned max_bases = 0;  /* Maximum direct bases.  */
11797   int i;
11798   tree default_access;
11799   tree igo_prev; /* Track Inheritance Graph Order.  */
11800 
11801   if (ref == error_mark_node)
11802     return false;
11803 
11804   /* The base of a derived class is private by default, all others are
11805      public.  */
11806   default_access = (TREE_CODE (ref) == RECORD_TYPE
11807 		    && CLASSTYPE_DECLARED_CLASS (ref)
11808 		    ? access_private_node : access_public_node);
11809 
11810   /* First, make sure that any templates in base-classes are
11811      instantiated.  This ensures that if we call ourselves recursively
11812      we do not get confused about which classes are marked and which
11813      are not.  */
11814   basep = &base_list;
11815   while (*basep)
11816     {
11817       tree basetype = TREE_VALUE (*basep);
11818 
11819       if (!(processing_template_decl && uses_template_parms (basetype))
11820 	  && !complete_type_or_else (basetype, NULL))
11821 	/* An incomplete type.  Remove it from the list.  */
11822 	*basep = TREE_CHAIN (*basep);
11823       else
11824 	{
11825 	  max_bases++;
11826 	  if (TREE_TYPE (*basep))
11827 	    max_vbases++;
11828 	  if (CLASS_TYPE_P (basetype))
11829 	    max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11830 	  basep = &TREE_CHAIN (*basep);
11831 	}
11832     }
11833 
11834   TYPE_MARKED_P (ref) = 1;
11835 
11836   /* The binfo slot should be empty, unless this is an (ill-formed)
11837      redefinition.  */
11838   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11839     {
11840       error ("redefinition of %q#T", ref);
11841       return false;
11842     }
11843 
11844   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11845 
11846   binfo = make_tree_binfo (max_bases);
11847 
11848   TYPE_BINFO (ref) = binfo;
11849   BINFO_OFFSET (binfo) = size_zero_node;
11850   BINFO_TYPE (binfo) = ref;
11851 
11852   /* Apply base-class info set up to the variants of this type.  */
11853   fixup_type_variants (ref);
11854 
11855   if (max_bases)
11856     {
11857       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11858       /* An aggregate cannot have baseclasses.  */
11859       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11860 
11861       if (TREE_CODE (ref) == UNION_TYPE)
11862         {
11863 	  error ("derived union %qT invalid", ref);
11864           return false;
11865         }
11866     }
11867 
11868   if (max_bases > 1)
11869     {
11870       if (TYPE_FOR_JAVA (ref))
11871         {
11872 	  error ("Java class %qT cannot have multiple bases", ref);
11873           return false;
11874         }
11875     }
11876 
11877   if (max_vbases)
11878     {
11879       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11880 
11881       if (TYPE_FOR_JAVA (ref))
11882         {
11883 	  error ("Java class %qT cannot have virtual bases", ref);
11884           return false;
11885         }
11886     }
11887 
11888   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11889     {
11890       tree access = TREE_PURPOSE (base_list);
11891       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11892       tree basetype = TREE_VALUE (base_list);
11893 
11894       if (access == access_default_node)
11895 	access = default_access;
11896 
11897       if (PACK_EXPANSION_P (basetype))
11898         basetype = PACK_EXPANSION_PATTERN (basetype);
11899       if (TREE_CODE (basetype) == TYPE_DECL)
11900 	basetype = TREE_TYPE (basetype);
11901       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11902 	{
11903 	  error ("base type %qT fails to be a struct or class type",
11904 		 basetype);
11905 	  return false;
11906 	}
11907 
11908       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11909 	TYPE_FOR_JAVA (ref) = 1;
11910 
11911       base_binfo = NULL_TREE;
11912       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11913 	{
11914 	  base_binfo = TYPE_BINFO (basetype);
11915 	  /* The original basetype could have been a typedef'd type.  */
11916 	  basetype = BINFO_TYPE (base_binfo);
11917 
11918 	  /* Inherit flags from the base.  */
11919 	  TYPE_HAS_NEW_OPERATOR (ref)
11920 	    |= TYPE_HAS_NEW_OPERATOR (basetype);
11921 	  TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11922 	    |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11923 	  TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11924 	  TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11925 	  CLASSTYPE_DIAMOND_SHAPED_P (ref)
11926 	    |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11927 	  CLASSTYPE_REPEATED_BASE_P (ref)
11928 	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
11929 	}
11930 
11931       /* We must do this test after we've seen through a typedef
11932 	 type.  */
11933       if (TYPE_MARKED_P (basetype))
11934 	{
11935 	  if (basetype == ref)
11936 	    error ("recursive type %qT undefined", basetype);
11937 	  else
11938 	    error ("duplicate base type %qT invalid", basetype);
11939 	  return false;
11940 	}
11941 
11942       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11943         /* Regenerate the pack expansion for the bases. */
11944         basetype = make_pack_expansion (basetype);
11945 
11946       TYPE_MARKED_P (basetype) = 1;
11947 
11948       base_binfo = copy_binfo (base_binfo, basetype, ref,
11949 			       &igo_prev, via_virtual);
11950       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11951 	BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11952 
11953       BINFO_BASE_APPEND (binfo, base_binfo);
11954       BINFO_BASE_ACCESS_APPEND (binfo, access);
11955     }
11956 
11957   if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11958     /* If we didn't get max_vbases vbases, we must have shared at
11959        least one of them, and are therefore diamond shaped.  */
11960     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11961 
11962   /* Unmark all the types.  */
11963   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11964     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11965   TYPE_MARKED_P (ref) = 0;
11966 
11967   /* Now see if we have a repeated base type.  */
11968   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11969     {
11970       for (base_binfo = binfo; base_binfo;
11971 	   base_binfo = TREE_CHAIN (base_binfo))
11972 	{
11973 	  if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11974 	    {
11975 	      CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11976 	      break;
11977 	    }
11978 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11979 	}
11980       for (base_binfo = binfo; base_binfo;
11981 	   base_binfo = TREE_CHAIN (base_binfo))
11982 	if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11983 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11984 	else
11985 	  break;
11986     }
11987 
11988   return true;
11989 }
11990 
11991 
11992 /* Copies the enum-related properties from type SRC to type DST.
11993    Used with the underlying type of an enum and the enum itself.  */
11994 static void
11995 copy_type_enum (tree dst, tree src)
11996 {
11997   tree t;
11998   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
11999     {
12000       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12001       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12002       TYPE_SIZE (t) = TYPE_SIZE (src);
12003       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12004       SET_TYPE_MODE (dst, TYPE_MODE (src));
12005       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12006       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12007       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12008       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12009     }
12010 }
12011 
12012 /* Begin compiling the definition of an enumeration type.
12013    NAME is its name,
12014 
12015    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12016 
12017    UNDERLYING_TYPE is the type that will be used as the storage for
12018    the enumeration type. This should be NULL_TREE if no storage type
12019    was specified.
12020 
12021    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12022 
12023    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12024 
12025    Returns the type object, as yet incomplete.
12026    Also records info about it so that build_enumerator
12027    may be used to declare the individual values as they are read.  */
12028 
12029 tree
12030 start_enum (tree name, tree enumtype, tree underlying_type,
12031 	    bool scoped_enum_p, bool *is_new)
12032 {
12033   tree prevtype = NULL_TREE;
12034   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12035 
12036   if (is_new)
12037     *is_new = false;
12038   /* [C++0x dcl.enum]p5:
12039 
12040     If not explicitly specified, the underlying type of a scoped
12041     enumeration type is int.  */
12042   if (!underlying_type && scoped_enum_p)
12043     underlying_type = integer_type_node;
12044 
12045   if (underlying_type)
12046     underlying_type = cv_unqualified (underlying_type);
12047 
12048   /* If this is the real definition for a previous forward reference,
12049      fill in the contents in the same object that used to be the
12050      forward reference.  */
12051   if (!enumtype)
12052     enumtype = lookup_and_check_tag (enum_type, name,
12053 				     /*tag_scope=*/ts_current,
12054 				     /*template_header_p=*/false);
12055 
12056   /* In case of a template_decl, the only check that should be deferred
12057      to instantiation time is the comparison of underlying types.  */
12058   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12059     {
12060       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12061 	{
12062 	  error_at (input_location, "scoped/unscoped mismatch "
12063 		    "in enum %q#T", enumtype);
12064 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12065 		    "previous definition here");
12066 	  enumtype = error_mark_node;
12067 	}
12068       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12069 	{
12070 	  error_at (input_location, "underlying type mismatch "
12071 		    "in enum %q#T", enumtype);
12072 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12073 		    "previous definition here");
12074 	  enumtype = error_mark_node;
12075 	}
12076       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12077 	       && !dependent_type_p (underlying_type)
12078 	       && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12079 	       && !same_type_p (underlying_type,
12080 				ENUM_UNDERLYING_TYPE (enumtype)))
12081 	{
12082 	  error_at (input_location, "different underlying type "
12083 		    "in enum %q#T", enumtype);
12084 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12085 		    "previous definition here");
12086 	  underlying_type = NULL_TREE;
12087 	}
12088     }
12089 
12090   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12091       || processing_template_decl)
12092     {
12093       /* In case of error, make a dummy enum to allow parsing to
12094 	 continue.  */
12095       if (enumtype == error_mark_node)
12096 	{
12097 	  name = make_anon_name ();
12098 	  enumtype = NULL_TREE;
12099 	}
12100 
12101       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12102          of an opaque enum, or an opaque enum of an already defined
12103 	 enumeration (C++0x only).
12104 	 In any other case, it'll be NULL_TREE. */
12105       if (!enumtype)
12106 	{
12107 	  if (is_new)
12108 	    *is_new = true;
12109 	}
12110       prevtype = enumtype;
12111 
12112       /* Do not push the decl more than once, unless we need to
12113 	 compare underlying types at instantiation time */
12114       if (!enumtype
12115 	  || TREE_CODE (enumtype) != ENUMERAL_TYPE
12116 	  || (underlying_type
12117 	      && dependent_type_p (underlying_type))
12118 	  || (ENUM_UNDERLYING_TYPE (enumtype)
12119 	      && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12120 	{
12121 	  enumtype = cxx_make_type (ENUMERAL_TYPE);
12122 	  enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12123 	}
12124       else
12125 	  enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12126 			       false);
12127 
12128       if (enumtype == error_mark_node)
12129 	return error_mark_node;
12130 
12131       /* The enum is considered opaque until the opening '{' of the
12132 	 enumerator list.  */
12133       SET_OPAQUE_ENUM_P (enumtype, true);
12134       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12135     }
12136 
12137   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12138 
12139   if (underlying_type)
12140     {
12141       if (CP_INTEGRAL_TYPE_P (underlying_type))
12142         {
12143 	  copy_type_enum (enumtype, underlying_type);
12144           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12145         }
12146       else if (dependent_type_p (underlying_type))
12147 	ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12148       else
12149         error ("underlying type %<%T%> of %<%T%> must be an integral type",
12150                underlying_type, enumtype);
12151     }
12152 
12153   /* If into a template class, the returned enum is always the first
12154      declaration (opaque or not) seen. This way all the references to
12155      this type will be to the same declaration. The following ones are used
12156      only to check for definition errors.  */
12157   if (prevtype && processing_template_decl)
12158     return prevtype;
12159   else
12160     return enumtype;
12161 }
12162 
12163 /* After processing and defining all the values of an enumeration type,
12164    install their decls in the enumeration type.
12165    ENUMTYPE is the type object.  */
12166 
12167 void
12168 finish_enum_value_list (tree enumtype)
12169 {
12170   tree values;
12171   tree underlying_type;
12172   tree decl;
12173   tree value;
12174   tree minnode, maxnode;
12175   tree t;
12176 
12177   bool fixed_underlying_type_p
12178     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12179 
12180   /* We built up the VALUES in reverse order.  */
12181   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12182 
12183   /* For an enum defined in a template, just set the type of the values;
12184      all further processing is postponed until the template is
12185      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12186      works.  */
12187   if (processing_template_decl)
12188     {
12189       for (values = TYPE_VALUES (enumtype);
12190 	   values;
12191 	   values = TREE_CHAIN (values))
12192 	TREE_TYPE (TREE_VALUE (values)) = enumtype;
12193       return;
12194     }
12195 
12196   /* Determine the minimum and maximum values of the enumerators.  */
12197   if (TYPE_VALUES (enumtype))
12198     {
12199       minnode = maxnode = NULL_TREE;
12200 
12201       for (values = TYPE_VALUES (enumtype);
12202 	   values;
12203 	   values = TREE_CHAIN (values))
12204 	{
12205 	  decl = TREE_VALUE (values);
12206 
12207 	  /* [dcl.enum]: Following the closing brace of an enum-specifier,
12208 	     each enumerator has the type of its enumeration.  Prior to the
12209 	     closing brace, the type of each enumerator is the type of its
12210 	     initializing value.  */
12211 	  TREE_TYPE (decl) = enumtype;
12212 
12213 	  /* Update the minimum and maximum values, if appropriate.  */
12214 	  value = DECL_INITIAL (decl);
12215 	  if (value == error_mark_node)
12216 	    value = integer_zero_node;
12217 	  /* Figure out what the minimum and maximum values of the
12218 	     enumerators are.  */
12219 	  if (!minnode)
12220 	    minnode = maxnode = value;
12221 	  else if (tree_int_cst_lt (maxnode, value))
12222 	    maxnode = value;
12223 	  else if (tree_int_cst_lt (value, minnode))
12224 	    minnode = value;
12225 	}
12226     }
12227   else
12228     /* [dcl.enum]
12229 
12230        If the enumerator-list is empty, the underlying type is as if
12231        the enumeration had a single enumerator with value 0.  */
12232     minnode = maxnode = integer_zero_node;
12233 
12234   if (!fixed_underlying_type_p)
12235     {
12236       /* Compute the number of bits require to represent all values of the
12237 	 enumeration.  We must do this before the type of MINNODE and
12238 	 MAXNODE are transformed, since tree_int_cst_min_precision relies
12239 	 on the TREE_TYPE of the value it is passed.  */
12240       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12241       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12242       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12243       int precision = MAX (lowprec, highprec);
12244       unsigned int itk;
12245       bool use_short_enum;
12246 
12247       /* Determine the underlying type of the enumeration.
12248 
12249          [dcl.enum]
12250 
12251          The underlying type of an enumeration is an integral type that
12252          can represent all the enumerator values defined in the
12253          enumeration.  It is implementation-defined which integral type is
12254          used as the underlying type for an enumeration except that the
12255          underlying type shall not be larger than int unless the value of
12256          an enumerator cannot fit in an int or unsigned int.
12257 
12258          We use "int" or an "unsigned int" as the underlying type, even if
12259          a smaller integral type would work, unless the user has
12260          explicitly requested that we use the smallest possible type.  The
12261          user can request that for all enumerations with a command line
12262          flag, or for just one enumeration with an attribute.  */
12263 
12264       use_short_enum = flag_short_enums
12265         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12266 
12267       for (itk = (use_short_enum ? itk_char : itk_int);
12268            itk != itk_none;
12269            itk++)
12270         {
12271           underlying_type = integer_types[itk];
12272           if (underlying_type != NULL_TREE
12273 	      && TYPE_PRECISION (underlying_type) >= precision
12274               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12275             break;
12276         }
12277       if (itk == itk_none)
12278         {
12279           /* DR 377
12280 
12281              IF no integral type can represent all the enumerator values, the
12282              enumeration is ill-formed.  */
12283           error ("no integral type can represent all of the enumerator values "
12284                  "for %qT", enumtype);
12285           precision = TYPE_PRECISION (long_long_integer_type_node);
12286           underlying_type = integer_types[itk_unsigned_long_long];
12287         }
12288 
12289       /* [dcl.enum]
12290 
12291          The value of sizeof() applied to an enumeration type, an object
12292          of an enumeration type, or an enumerator, is the value of sizeof()
12293          applied to the underlying type.  */
12294       copy_type_enum (enumtype, underlying_type);
12295 
12296       /* Compute the minimum and maximum values for the type.
12297 
12298 	 [dcl.enum]
12299 
12300 	 For an enumeration where emin is the smallest enumerator and emax
12301 	 is the largest, the values of the enumeration are the values of the
12302 	 underlying type in the range bmin to bmax, where bmin and bmax are,
12303 	 respectively, the smallest and largest values of the smallest bit-
12304 	 field that can store emin and emax.  */
12305 
12306       /* The middle-end currently assumes that types with TYPE_PRECISION
12307 	 narrower than their underlying type are suitably zero or sign
12308 	 extended to fill their mode.  Similarly, it assumes that the front
12309 	 end assures that a value of a particular type must be within
12310 	 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12311 
12312 	 We used to set these fields based on bmin and bmax, but that led
12313 	 to invalid assumptions like optimizing away bounds checking.  So
12314 	 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12315 	 TYPE_MAX_VALUE to the values for the mode above and only restrict
12316 	 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12317       ENUM_UNDERLYING_TYPE (enumtype)
12318 	= build_distinct_type_copy (underlying_type);
12319       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12320       set_min_and_max_values_for_integral_type
12321         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12322 
12323       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12324       if (flag_strict_enums)
12325 	set_min_and_max_values_for_integral_type (enumtype, precision,
12326 						  unsignedp);
12327     }
12328   else
12329     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12330 
12331   /* Convert each of the enumerators to the type of the underlying
12332      type of the enumeration.  */
12333   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12334     {
12335       location_t saved_location;
12336 
12337       decl = TREE_VALUE (values);
12338       saved_location = input_location;
12339       input_location = DECL_SOURCE_LOCATION (decl);
12340       if (fixed_underlying_type_p)
12341         /* If the enumeration type has a fixed underlying type, we
12342            already checked all of the enumerator values.  */
12343         value = DECL_INITIAL (decl);
12344       else
12345         value = perform_implicit_conversion (underlying_type,
12346                                              DECL_INITIAL (decl),
12347                                              tf_warning_or_error);
12348       input_location = saved_location;
12349 
12350       /* Do not clobber shared ints.  */
12351       value = copy_node (value);
12352 
12353       TREE_TYPE (value) = enumtype;
12354       DECL_INITIAL (decl) = value;
12355     }
12356 
12357   /* Fix up all variant types of this enum type.  */
12358   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12359     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12360 
12361   if (at_class_scope_p ()
12362       && COMPLETE_TYPE_P (current_class_type)
12363       && UNSCOPED_ENUM_P (enumtype))
12364     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12365 						       current_class_type);
12366 
12367   /* Finish debugging output for this type.  */
12368   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12369 }
12370 
12371 /* Finishes the enum type. This is called only the first time an
12372    enumeration is seen, be it opaque or odinary.
12373    ENUMTYPE is the type object.  */
12374 
12375 void
12376 finish_enum (tree enumtype)
12377 {
12378   if (processing_template_decl)
12379     {
12380       if (at_function_scope_p ())
12381 	add_stmt (build_min (TAG_DEFN, enumtype));
12382       return;
12383     }
12384 
12385   /* If this is a forward declaration, there should not be any variants,
12386      though we can get a variant in the middle of an enum-specifier with
12387      wacky code like 'enum E { e = sizeof(const E*) };'  */
12388   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12389 	      && (TYPE_VALUES (enumtype)
12390 		  || !TYPE_NEXT_VARIANT (enumtype)));
12391 }
12392 
12393 /* Build and install a CONST_DECL for an enumeration constant of the
12394    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12395    LOC is the location of NAME.
12396    Assignment of sequential values by default is handled here.  */
12397 
12398 void
12399 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12400 {
12401   tree decl;
12402   tree context;
12403   tree type;
12404 
12405   /* If the VALUE was erroneous, pretend it wasn't there; that will
12406      result in the enum being assigned the next value in sequence.  */
12407   if (value == error_mark_node)
12408     value = NULL_TREE;
12409 
12410   /* Remove no-op casts from the value.  */
12411   if (value)
12412     STRIP_TYPE_NOPS (value);
12413 
12414   if (! processing_template_decl)
12415     {
12416       /* Validate and default VALUE.  */
12417       if (value != NULL_TREE)
12418 	{
12419 	  value = cxx_constant_value (value);
12420 
12421 	  if (TREE_CODE (value) != INTEGER_CST
12422 	      || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12423 	    {
12424 	      error ("enumerator value for %qD is not an integer constant",
12425 		     name);
12426 	      value = NULL_TREE;
12427 	    }
12428 	}
12429 
12430       /* Default based on previous value.  */
12431       if (value == NULL_TREE)
12432 	{
12433 	  if (TYPE_VALUES (enumtype))
12434 	    {
12435 	      HOST_WIDE_INT hi;
12436 	      unsigned HOST_WIDE_INT lo;
12437 	      tree prev_value;
12438 	      bool overflowed;
12439 
12440 	      /* C++03 7.2/4: If no initializer is specified for the first
12441 		 enumerator, the type is an unspecified integral
12442 		 type. Otherwise the type is the same as the type of the
12443 		 initializing value of the preceding enumerator unless the
12444 		 incremented value is not representable in that type, in
12445 		 which case the type is an unspecified integral type
12446 		 sufficient to contain the incremented value.  */
12447 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12448 	      if (error_operand_p (prev_value))
12449 		value = error_mark_node;
12450 	      else
12451 		{
12452 		  overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12453 					   TREE_INT_CST_HIGH (prev_value),
12454 					   1, 0, &lo, &hi);
12455 		  if (!overflowed)
12456 		    {
12457 		      double_int di;
12458 		      tree type = TREE_TYPE (prev_value);
12459 		      bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12460 		      di.low = lo; di.high = hi;
12461 		      if (!double_int_fits_to_tree_p (type, di))
12462 			{
12463 			  unsigned int itk;
12464 			  for (itk = itk_int; itk != itk_none; itk++)
12465 			    {
12466 			      type = integer_types[itk];
12467 			      if (type != NULL_TREE
12468 				  && (pos || !TYPE_UNSIGNED (type))
12469 				  && double_int_fits_to_tree_p (type, di))
12470 				break;
12471 			    }
12472 			  if (type && cxx_dialect < cxx0x
12473 			      && itk > itk_unsigned_long)
12474 			    pedwarn (input_location, OPT_Wlong_long, pos ? "\
12475 incremented enumerator value is too large for %<unsigned long%>" :  "\
12476 incremented enumerator value is too large for %<long%>");
12477 			}
12478 		      if (type == NULL_TREE)
12479 			overflowed = true;
12480 		      else
12481 			value = double_int_to_tree (type, di);
12482 		    }
12483 
12484 		  if (overflowed)
12485 		    {
12486 		      error ("overflow in enumeration values at %qD", name);
12487 		      value = error_mark_node;
12488 		    }
12489 		}
12490 	    }
12491 	  else
12492 	    value = integer_zero_node;
12493 	}
12494 
12495       /* Remove no-op casts from the value.  */
12496       STRIP_TYPE_NOPS (value);
12497 
12498       /* If the underlying type of the enum is fixed, check whether
12499          the enumerator values fits in the underlying type.  If it
12500          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12501       if (ENUM_UNDERLYING_TYPE (enumtype)
12502           && value
12503           && TREE_CODE (value) == INTEGER_CST
12504           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12505         {
12506           error ("enumerator value %E is too large for underlying type %<%T%>",
12507                  value, ENUM_UNDERLYING_TYPE (enumtype));
12508 
12509           /* Silently convert the value so that we can continue.  */
12510           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12511                                                value, tf_none);
12512         }
12513     }
12514 
12515   /* C++ associates enums with global, function, or class declarations.  */
12516   context = current_scope ();
12517 
12518   /* Build the actual enumeration constant.  Note that the enumeration
12519      constants have the underlying type of the enum (if it is fixed)
12520      or the type of their initializer (if the underlying type of the
12521      enum is not fixed):
12522 
12523       [ C++0x dcl.enum ]
12524 
12525         If the underlying type is fixed, the type of each enumerator
12526         prior to the closing brace is the underlying type; if the
12527         initializing value of an enumerator cannot be represented by
12528         the underlying type, the program is ill-formed. If the
12529         underlying type is not fixed, the type of each enumerator is
12530         the type of its initializing value.
12531 
12532     If the underlying type is not fixed, it will be computed by
12533     finish_enum and we will reset the type of this enumerator.  Of
12534     course, if we're processing a template, there may be no value.  */
12535   type = value ? TREE_TYPE (value) : NULL_TREE;
12536 
12537   if (context && context == current_class_type)
12538     /* This enum declaration is local to the class.  We need the full
12539        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12540     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12541   else
12542     /* It's a global enum, or it's local to a function.  (Note local to
12543        a function could mean local to a class method.  */
12544     decl = build_decl (loc, CONST_DECL, name, type);
12545 
12546   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12547   TREE_CONSTANT (decl) = 1;
12548   TREE_READONLY (decl) = 1;
12549   DECL_INITIAL (decl) = value;
12550 
12551   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12552     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12553        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12554        things like `S::i' later.)  */
12555     finish_member_declaration (decl);
12556   else
12557     pushdecl (decl);
12558 
12559   /* Add this enumeration constant to the list for this type.  */
12560   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12561 }
12562 
12563 /* Look for an enumerator with the given NAME within the enumeration
12564    type ENUMTYPE.  This routine is used primarily for qualified name
12565    lookup into an enumerator in C++0x, e.g.,
12566 
12567      enum class Color { Red, Green, Blue };
12568 
12569      Color color = Color::Red;
12570 
12571    Returns the value corresponding to the enumerator, or
12572    NULL_TREE if no such enumerator was found.  */
12573 tree
12574 lookup_enumerator (tree enumtype, tree name)
12575 {
12576   tree e;
12577   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12578 
12579   e = purpose_member (name, TYPE_VALUES (enumtype));
12580   return e? TREE_VALUE (e) : NULL_TREE;
12581 }
12582 
12583 
12584 /* We're defining DECL.  Make sure that its type is OK.  */
12585 
12586 static void
12587 check_function_type (tree decl, tree current_function_parms)
12588 {
12589   tree fntype = TREE_TYPE (decl);
12590   tree return_type = complete_type (TREE_TYPE (fntype));
12591 
12592   /* In a function definition, arg types must be complete.  */
12593   require_complete_types_for_parms (current_function_parms);
12594 
12595   if (dependent_type_p (return_type))
12596     return;
12597   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12598       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12599     {
12600       tree args = TYPE_ARG_TYPES (fntype);
12601 
12602       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12603 	error ("return type %q#T is incomplete", return_type);
12604       else
12605 	error ("return type has Java class type %q#T", return_type);
12606 
12607       /* Make it return void instead.  */
12608       if (TREE_CODE (fntype) == METHOD_TYPE)
12609 	fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12610 					     void_type_node,
12611 					     TREE_CHAIN (args));
12612       else
12613 	fntype = build_function_type (void_type_node, args);
12614       fntype
12615 	= build_exception_variant (fntype,
12616 				   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12617       fntype = (cp_build_type_attribute_variant
12618 		(fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12619       TREE_TYPE (decl) = fntype;
12620     }
12621   else
12622     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12623 }
12624 
12625 /* Create the FUNCTION_DECL for a function definition.
12626    DECLSPECS and DECLARATOR are the parts of the declaration;
12627    they describe the function's name and the type it returns,
12628    but twisted together in a fashion that parallels the syntax of C.
12629 
12630    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12631    DECLARATOR is really the DECL for the function we are about to
12632    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12633    indicating that the function is an inline defined in-class.
12634 
12635    This function creates a binding context for the function body
12636    as well as setting up the FUNCTION_DECL in current_function_decl.
12637 
12638    For C++, we must first check whether that datum makes any sense.
12639    For example, "class A local_a(1,2);" means that variable local_a
12640    is an aggregate of type A, which should have a constructor
12641    applied to it with the argument list [1, 2].
12642 
12643    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12644    or may be a BLOCK if the function has been defined previously
12645    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12646    error_mark_node if the function has never been defined, or
12647    a BLOCK if the function has been defined somewhere.  */
12648 
12649 void
12650 start_preparsed_function (tree decl1, tree attrs, int flags)
12651 {
12652   tree ctype = NULL_TREE;
12653   tree fntype;
12654   tree restype;
12655   int doing_friend = 0;
12656   cp_binding_level *bl;
12657   tree current_function_parms;
12658   struct c_fileinfo *finfo
12659     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12660   bool honor_interface;
12661 
12662   /* Sanity check.  */
12663   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12664   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12665 
12666   fntype = TREE_TYPE (decl1);
12667   if (TREE_CODE (fntype) == METHOD_TYPE)
12668     ctype = TYPE_METHOD_BASETYPE (fntype);
12669 
12670   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12671      the (lexical) scope of the class in which it is defined.  */
12672   if (!ctype && DECL_FRIEND_P (decl1))
12673     {
12674       ctype = DECL_FRIEND_CONTEXT (decl1);
12675 
12676       /* CTYPE could be null here if we're dealing with a template;
12677 	 for example, `inline friend float foo()' inside a template
12678 	 will have no CTYPE set.  */
12679       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12680 	ctype = NULL_TREE;
12681       else
12682 	doing_friend = 1;
12683     }
12684 
12685   if (DECL_DECLARED_INLINE_P (decl1)
12686       && lookup_attribute ("noinline", attrs))
12687     warning (0, "inline function %q+D given attribute noinline", decl1);
12688 
12689   /* Handle gnu_inline attribute.  */
12690   if (GNU_INLINE_P (decl1))
12691     {
12692       DECL_EXTERNAL (decl1) = 1;
12693       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12694       DECL_INTERFACE_KNOWN (decl1) = 1;
12695       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12696     }
12697 
12698   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12699     /* This is a constructor, we must ensure that any default args
12700        introduced by this definition are propagated to the clones
12701        now. The clones are used directly in overload resolution.  */
12702     adjust_clone_args (decl1);
12703 
12704   /* Sometimes we don't notice that a function is a static member, and
12705      build a METHOD_TYPE for it.  Fix that up now.  */
12706   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12707 		&& TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12708 
12709   /* Set up current_class_type, and enter the scope of the class, if
12710      appropriate.  */
12711   if (ctype)
12712     push_nested_class (ctype);
12713   else if (DECL_STATIC_FUNCTION_P (decl1))
12714     push_nested_class (DECL_CONTEXT (decl1));
12715 
12716   /* Now that we have entered the scope of the class, we must restore
12717      the bindings for any template parameters surrounding DECL1, if it
12718      is an inline member template.  (Order is important; consider the
12719      case where a template parameter has the same name as a field of
12720      the class.)  It is not until after this point that
12721      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12722   if (flags & SF_INCLASS_INLINE)
12723     maybe_begin_member_template_processing (decl1);
12724 
12725   /* Effective C++ rule 15.  */
12726   if (warn_ecpp
12727       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12728       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12729     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12730 
12731   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12732      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12733   if (!DECL_INITIAL (decl1))
12734     DECL_INITIAL (decl1) = error_mark_node;
12735 
12736   /* This function exists in static storage.
12737      (This does not mean `static' in the C sense!)  */
12738   TREE_STATIC (decl1) = 1;
12739 
12740   /* We must call push_template_decl after current_class_type is set
12741      up.  (If we are processing inline definitions after exiting a
12742      class scope, current_class_type will be NULL_TREE until set above
12743      by push_nested_class.)  */
12744   if (processing_template_decl)
12745     {
12746       /* FIXME: Handle error_mark_node more gracefully.  */
12747       tree newdecl1 = push_template_decl (decl1);
12748       if (newdecl1 != error_mark_node)
12749 	decl1 = newdecl1;
12750     }
12751 
12752   /* We are now in the scope of the function being defined.  */
12753   current_function_decl = decl1;
12754 
12755   /* Save the parm names or decls from this function's declarator
12756      where store_parm_decls will find them.  */
12757   current_function_parms = DECL_ARGUMENTS (decl1);
12758 
12759   /* Make sure the parameter and return types are reasonable.  When
12760      you declare a function, these types can be incomplete, but they
12761      must be complete when you define the function.  */
12762   check_function_type (decl1, current_function_parms);
12763 
12764   /* Build the return declaration for the function.  */
12765   restype = TREE_TYPE (fntype);
12766   if (DECL_RESULT (decl1) == NULL_TREE)
12767     {
12768       tree resdecl;
12769 
12770       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12771       DECL_ARTIFICIAL (resdecl) = 1;
12772       DECL_IGNORED_P (resdecl) = 1;
12773       DECL_RESULT (decl1) = resdecl;
12774 
12775       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12776     }
12777 
12778   /* Let the user know we're compiling this function.  */
12779   announce_function (decl1);
12780 
12781   /* Record the decl so that the function name is defined.
12782      If we already have a decl for this name, and it is a FUNCTION_DECL,
12783      use the old decl.  */
12784   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12785     {
12786       /* A specialization is not used to guide overload resolution.  */
12787       if (!DECL_FUNCTION_MEMBER_P (decl1)
12788 	  && !(DECL_USE_TEMPLATE (decl1) &&
12789 	       PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12790 	{
12791 	  tree olddecl = pushdecl (decl1);
12792 
12793 	  if (olddecl == error_mark_node)
12794 	    /* If something went wrong when registering the declaration,
12795 	       use DECL1; we have to have a FUNCTION_DECL to use when
12796 	       parsing the body of the function.  */
12797 	    ;
12798 	  else
12799 	    {
12800 	      /* Otherwise, OLDDECL is either a previous declaration
12801 		 of the same function or DECL1 itself.  */
12802 
12803 	      if (warn_missing_declarations
12804 		  && olddecl == decl1
12805 		  && !DECL_MAIN_P (decl1)
12806 		  && TREE_PUBLIC (decl1)
12807 		  && !DECL_DECLARED_INLINE_P (decl1))
12808 		{
12809 		  tree context;
12810 
12811 		  /* Check whether DECL1 is in an anonymous
12812 		     namespace.  */
12813 		  for (context = DECL_CONTEXT (decl1);
12814 		       context;
12815 		       context = DECL_CONTEXT (context))
12816 		    {
12817 		      if (TREE_CODE (context) == NAMESPACE_DECL
12818 			  && DECL_NAME (context) == NULL_TREE)
12819 			break;
12820 		    }
12821 
12822 		  if (context == NULL)
12823 		    warning (OPT_Wmissing_declarations,
12824 			     "no previous declaration for %q+D", decl1);
12825 		}
12826 
12827 	      decl1 = olddecl;
12828 	    }
12829 	}
12830       else
12831 	{
12832 	  /* We need to set the DECL_CONTEXT.  */
12833 	  if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12834 	    DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12835 	}
12836       fntype = TREE_TYPE (decl1);
12837 
12838       /* If #pragma weak applies, mark the decl appropriately now.
12839 	 The pragma only applies to global functions.  Because
12840 	 determining whether or not the #pragma applies involves
12841 	 computing the mangled name for the declaration, we cannot
12842 	 apply the pragma until after we have merged this declaration
12843 	 with any previous declarations; if the original declaration
12844 	 has a linkage specification, that specification applies to
12845 	 the definition as well, and may affect the mangled name.  */
12846       if (DECL_FILE_SCOPE_P (decl1))
12847 	maybe_apply_pragma_weak (decl1);
12848     }
12849 
12850   /* Reset this in case the call to pushdecl changed it.  */
12851   current_function_decl = decl1;
12852 
12853   gcc_assert (DECL_INITIAL (decl1));
12854 
12855   /* This function may already have been parsed, in which case just
12856      return; our caller will skip over the body without parsing.  */
12857   if (DECL_INITIAL (decl1) != error_mark_node)
12858     return;
12859 
12860   /* Initialize RTL machinery.  We cannot do this until
12861      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12862      even when processing a template; this is how we get
12863      CFUN set up, and our per-function variables initialized.
12864      FIXME factor out the non-RTL stuff.  */
12865   bl = current_binding_level;
12866   allocate_struct_function (decl1, processing_template_decl);
12867 
12868   /* Initialize the language data structures.  Whenever we start
12869      a new function, we destroy temporaries in the usual way.  */
12870   cfun->language = ggc_alloc_cleared_language_function ();
12871   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12872   current_binding_level = bl;
12873 
12874   /* Start the statement-tree, start the tree now.  */
12875   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12876 
12877   /* If we are (erroneously) defining a function that we have already
12878      defined before, wipe out what we knew before.  */
12879   if (!DECL_PENDING_INLINE_P (decl1))
12880     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12881 
12882   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12883     {
12884       /* We know that this was set up by `grokclassfn'.  We do not
12885 	 wait until `store_parm_decls', since evil parse errors may
12886 	 never get us to that point.  Here we keep the consistency
12887 	 between `current_class_type' and `current_class_ptr'.  */
12888       tree t = DECL_ARGUMENTS (decl1);
12889 
12890       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12891       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12892 
12893       cp_function_chain->x_current_class_ref
12894 	= cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12895       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12896       cp_function_chain->x_current_class_ptr = t;
12897 
12898       /* Constructors and destructors need to know whether they're "in
12899 	 charge" of initializing virtual base classes.  */
12900       t = DECL_CHAIN (t);
12901       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12902 	{
12903 	  current_in_charge_parm = t;
12904 	  t = DECL_CHAIN (t);
12905 	}
12906       if (DECL_HAS_VTT_PARM_P (decl1))
12907 	{
12908 	  gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12909 	  current_vtt_parm = t;
12910 	}
12911     }
12912 
12913   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12914 		     /* Implicitly-defined methods (like the
12915 			destructor for a class in which no destructor
12916 			is explicitly declared) must not be defined
12917 			until their definition is needed.  So, we
12918 			ignore interface specifications for
12919 			compiler-generated functions.  */
12920 		     && !DECL_ARTIFICIAL (decl1));
12921 
12922   if (processing_template_decl)
12923     /* Don't mess with interface flags.  */;
12924   else if (DECL_INTERFACE_KNOWN (decl1))
12925     {
12926       tree ctx = decl_function_context (decl1);
12927 
12928       if (DECL_NOT_REALLY_EXTERN (decl1))
12929 	DECL_EXTERNAL (decl1) = 0;
12930 
12931       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12932 	  && TREE_PUBLIC (ctx))
12933 	/* This is a function in a local class in an extern inline
12934 	   function.  */
12935 	comdat_linkage (decl1);
12936     }
12937   /* If this function belongs to an interface, it is public.
12938      If it belongs to someone else's interface, it is also external.
12939      This only affects inlines and template instantiations.  */
12940   else if (!finfo->interface_unknown && honor_interface)
12941     {
12942       if (DECL_DECLARED_INLINE_P (decl1)
12943 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
12944 	{
12945 	  DECL_EXTERNAL (decl1)
12946 	    = (finfo->interface_only
12947 	       || (DECL_DECLARED_INLINE_P (decl1)
12948 		   && ! flag_implement_inlines
12949 		   && !DECL_VINDEX (decl1)));
12950 
12951 	  /* For WIN32 we also want to put these in linkonce sections.  */
12952 	  maybe_make_one_only (decl1);
12953 	}
12954       else
12955 	DECL_EXTERNAL (decl1) = 0;
12956       DECL_INTERFACE_KNOWN (decl1) = 1;
12957       /* If this function is in an interface implemented in this file,
12958 	 make sure that the back end knows to emit this function
12959 	 here.  */
12960       if (!DECL_EXTERNAL (decl1))
12961 	mark_needed (decl1);
12962     }
12963   else if (finfo->interface_unknown && finfo->interface_only
12964 	   && honor_interface)
12965     {
12966       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12967 	 interface, we will have both finfo->interface_unknown and
12968 	 finfo->interface_only set.  In that case, we don't want to
12969 	 use the normal heuristics because someone will supply a
12970 	 #pragma implementation elsewhere, and deducing it here would
12971 	 produce a conflict.  */
12972       comdat_linkage (decl1);
12973       DECL_EXTERNAL (decl1) = 0;
12974       DECL_INTERFACE_KNOWN (decl1) = 1;
12975       DECL_DEFER_OUTPUT (decl1) = 1;
12976     }
12977   else
12978     {
12979       /* This is a definition, not a reference.
12980 	 So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12981       if (!GNU_INLINE_P (decl1))
12982 	DECL_EXTERNAL (decl1) = 0;
12983 
12984       if ((DECL_DECLARED_INLINE_P (decl1)
12985 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
12986 	  && ! DECL_INTERFACE_KNOWN (decl1))
12987 	DECL_DEFER_OUTPUT (decl1) = 1;
12988       else
12989 	DECL_INTERFACE_KNOWN (decl1) = 1;
12990     }
12991 
12992   /* Determine the ELF visibility attribute for the function.  We must not
12993      do this before calling "pushdecl", as we must allow "duplicate_decls"
12994      to merge any attributes appropriately.  We also need to wait until
12995      linkage is set.  */
12996   if (!DECL_CLONED_FUNCTION_P (decl1))
12997     determine_visibility (decl1);
12998 
12999   begin_scope (sk_function_parms, decl1);
13000 
13001   ++function_depth;
13002 
13003   if (DECL_DESTRUCTOR_P (decl1)
13004       || (DECL_CONSTRUCTOR_P (decl1)
13005 	  && targetm.cxx.cdtor_returns_this ()))
13006     {
13007       cdtor_label = build_decl (input_location,
13008 				LABEL_DECL, NULL_TREE, NULL_TREE);
13009       DECL_CONTEXT (cdtor_label) = current_function_decl;
13010     }
13011 
13012   start_fname_decls ();
13013 
13014   store_parm_decls (current_function_parms);
13015 }
13016 
13017 
13018 /* Like start_preparsed_function, except that instead of a
13019    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13020 
13021    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13022    (it defines a datum instead), we return 0, which tells
13023    yyparse to report a parse error.  */
13024 
13025 int
13026 start_function (cp_decl_specifier_seq *declspecs,
13027 		const cp_declarator *declarator,
13028 		tree attrs)
13029 {
13030   tree decl1;
13031 
13032   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13033   if (decl1 == error_mark_node)
13034     return 0;
13035   /* If the declarator is not suitable for a function definition,
13036      cause a syntax error.  */
13037   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13038     {
13039       error ("invalid function declaration");
13040       return 0;
13041     }
13042 
13043   if (DECL_MAIN_P (decl1))
13044     /* main must return int.  grokfndecl should have corrected it
13045        (and issued a diagnostic) if the user got it wrong.  */
13046     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13047 			     integer_type_node));
13048 
13049   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13050 
13051   return 1;
13052 }
13053 
13054 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13055    FN.  */
13056 
13057 static bool
13058 use_eh_spec_block (tree fn)
13059 {
13060   return (flag_exceptions && flag_enforce_eh_specs
13061 	  && !processing_template_decl
13062 	  && !type_throw_all_p (TREE_TYPE (fn))
13063 	  /* We insert the EH_SPEC_BLOCK only in the original
13064 	     function; then, it is copied automatically to the
13065 	     clones.  */
13066 	  && !DECL_CLONED_FUNCTION_P (fn)
13067 	  /* Implicitly-generated constructors and destructors have
13068 	     exception specifications.  However, those specifications
13069 	     are the union of the possible exceptions specified by the
13070 	     constructors/destructors for bases and members, so no
13071 	     unallowed exception will ever reach this function.  By
13072 	     not creating the EH_SPEC_BLOCK we save a little memory,
13073 	     and we avoid spurious warnings about unreachable
13074 	     code.  */
13075 	  && !DECL_DEFAULTED_FN (fn));
13076 }
13077 
13078 /* Store the parameter declarations into the current function declaration.
13079    This is called after parsing the parameter declarations, before
13080    digesting the body of the function.
13081 
13082    Also install to binding contour return value identifier, if any.  */
13083 
13084 static void
13085 store_parm_decls (tree current_function_parms)
13086 {
13087   tree fndecl = current_function_decl;
13088   tree parm;
13089 
13090   /* This is a chain of any other decls that came in among the parm
13091      declarations.  If a parm is declared with  enum {foo, bar} x;
13092      then CONST_DECLs for foo and bar are put here.  */
13093   tree nonparms = NULL_TREE;
13094 
13095   if (current_function_parms)
13096     {
13097       /* This case is when the function was defined with an ANSI prototype.
13098 	 The parms already have decls, so we need not do anything here
13099 	 except record them as in effect
13100 	 and complain if any redundant old-style parm decls were written.  */
13101 
13102       tree specparms = current_function_parms;
13103       tree next;
13104 
13105       /* Must clear this because it might contain TYPE_DECLs declared
13106 	     at class level.  */
13107       current_binding_level->names = NULL;
13108 
13109       /* If we're doing semantic analysis, then we'll call pushdecl
13110 	     for each of these.  We must do them in reverse order so that
13111 	     they end in the correct forward order.  */
13112       specparms = nreverse (specparms);
13113 
13114       for (parm = specparms; parm; parm = next)
13115 	{
13116 	  next = DECL_CHAIN (parm);
13117 	  if (TREE_CODE (parm) == PARM_DECL)
13118 	    {
13119 	      if (DECL_NAME (parm) == NULL_TREE
13120 		  || TREE_CODE (parm) != VOID_TYPE)
13121 		pushdecl (parm);
13122 	      else
13123 		error ("parameter %qD declared void", parm);
13124 	    }
13125 	  else
13126 	    {
13127 	      /* If we find an enum constant or a type tag,
13128 		 put it aside for the moment.  */
13129 	      TREE_CHAIN (parm) = NULL_TREE;
13130 	      nonparms = chainon (nonparms, parm);
13131 	    }
13132 	}
13133 
13134       /* Get the decls in their original chain order and record in the
13135 	 function.  This is all and only the PARM_DECLs that were
13136 	 pushed into scope by the loop above.  */
13137       DECL_ARGUMENTS (fndecl) = getdecls ();
13138     }
13139   else
13140     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13141 
13142   /* Now store the final chain of decls for the arguments
13143      as the decl-chain of the current lexical scope.
13144      Put the enumerators in as well, at the front so that
13145      DECL_ARGUMENTS is not modified.  */
13146   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13147 
13148   if (use_eh_spec_block (current_function_decl))
13149     current_eh_spec_block = begin_eh_spec_block ();
13150 }
13151 
13152 
13153 /* We have finished doing semantic analysis on DECL, but have not yet
13154    generated RTL for its body.  Save away our current state, so that
13155    when we want to generate RTL later we know what to do.  */
13156 
13157 static void
13158 save_function_data (tree decl)
13159 {
13160   struct language_function *f;
13161 
13162   /* Save the language-specific per-function data so that we can
13163      get it back when we really expand this function.  */
13164   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13165 
13166   /* Make a copy.  */
13167   f = ggc_alloc_language_function ();
13168   memcpy (f, cp_function_chain, sizeof (struct language_function));
13169   DECL_SAVED_FUNCTION_DATA (decl) = f;
13170 
13171   /* Clear out the bits we don't need.  */
13172   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13173   f->bindings = NULL;
13174   f->x_local_names = NULL;
13175   f->base.local_typedefs = NULL;
13176 }
13177 
13178 
13179 /* Set the return value of the constructor (if present).  */
13180 
13181 static void
13182 finish_constructor_body (void)
13183 {
13184   tree val;
13185   tree exprstmt;
13186 
13187   if (targetm.cxx.cdtor_returns_this ()
13188       && (! TYPE_FOR_JAVA (current_class_type)))
13189     {
13190       /* Any return from a constructor will end up here.  */
13191       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13192 
13193       val = DECL_ARGUMENTS (current_function_decl);
13194       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13195 		    DECL_RESULT (current_function_decl), val);
13196       /* Return the address of the object.  */
13197       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13198       add_stmt (exprstmt);
13199     }
13200 }
13201 
13202 /* Do all the processing for the beginning of a destructor; set up the
13203    vtable pointers and cleanups for bases and members.  */
13204 
13205 static void
13206 begin_destructor_body (void)
13207 {
13208   tree compound_stmt;
13209 
13210   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13211      issued an error message.  We still want to try to process the
13212      body of the function, but initialize_vtbl_ptrs will crash if
13213      TYPE_BINFO is NULL.  */
13214   if (COMPLETE_TYPE_P (current_class_type))
13215     {
13216       compound_stmt = begin_compound_stmt (0);
13217       /* Make all virtual function table pointers in non-virtual base
13218 	 classes point to CURRENT_CLASS_TYPE's virtual function
13219 	 tables.  */
13220       initialize_vtbl_ptrs (current_class_ptr);
13221       finish_compound_stmt (compound_stmt);
13222 
13223       /* And insert cleanups for our bases and members so that they
13224 	 will be properly destroyed if we throw.  */
13225       push_base_cleanups ();
13226     }
13227 }
13228 
13229 /* At the end of every destructor we generate code to delete the object if
13230    necessary.  Do that now.  */
13231 
13232 static void
13233 finish_destructor_body (void)
13234 {
13235   tree exprstmt;
13236 
13237   /* Any return from a destructor will end up here; that way all base
13238      and member cleanups will be run when the function returns.  */
13239   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13240 
13241   /* In a virtual destructor, we must call delete.  */
13242   if (DECL_VIRTUAL_P (current_function_decl))
13243     {
13244       tree if_stmt;
13245       tree virtual_size = cxx_sizeof (current_class_type);
13246 
13247       /* [class.dtor]
13248 
13249       At the point of definition of a virtual destructor (including
13250       an implicit definition), non-placement operator delete shall
13251       be looked up in the scope of the destructor's class and if
13252       found shall be accessible and unambiguous.  */
13253       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13254 				      virtual_size,
13255 				      /*global_p=*/false,
13256 				      /*placement=*/NULL_TREE,
13257 				      /*alloc_fn=*/NULL_TREE);
13258 
13259       if_stmt = begin_if_stmt ();
13260       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13261 				   current_in_charge_parm,
13262 				   integer_one_node),
13263 			   if_stmt);
13264       finish_expr_stmt (exprstmt);
13265       finish_then_clause (if_stmt);
13266       finish_if_stmt (if_stmt);
13267     }
13268 
13269   if (targetm.cxx.cdtor_returns_this ())
13270     {
13271       tree val;
13272 
13273       val = DECL_ARGUMENTS (current_function_decl);
13274       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13275 		    DECL_RESULT (current_function_decl), val);
13276       /* Return the address of the object.  */
13277       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13278       add_stmt (exprstmt);
13279     }
13280 }
13281 
13282 /* Do the necessary processing for the beginning of a function body, which
13283    in this case includes member-initializers, but not the catch clauses of
13284    a function-try-block.  Currently, this means opening a binding level
13285    for the member-initializers (in a ctor), member cleanups (in a dtor),
13286    and capture proxies (in a lambda operator()).  */
13287 
13288 tree
13289 begin_function_body (void)
13290 {
13291   tree stmt;
13292 
13293   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13294     return NULL_TREE;
13295 
13296   if (processing_template_decl)
13297     /* Do nothing now.  */;
13298   else
13299     /* Always keep the BLOCK node associated with the outermost pair of
13300        curly braces of a function.  These are needed for correct
13301        operation of dwarfout.c.  */
13302     keep_next_level (true);
13303 
13304   stmt = begin_compound_stmt (BCS_FN_BODY);
13305 
13306   if (processing_template_decl)
13307     /* Do nothing now.  */;
13308   else if (DECL_DESTRUCTOR_P (current_function_decl))
13309     begin_destructor_body ();
13310 
13311   return stmt;
13312 }
13313 
13314 /* Do the processing for the end of a function body.  Currently, this means
13315    closing out the cleanups for fully-constructed bases and members, and in
13316    the case of the destructor, deleting the object if desired.  Again, this
13317    is only meaningful for [cd]tors, since they are the only functions where
13318    there is a significant distinction between the main body and any
13319    function catch clauses.  Handling, say, main() return semantics here
13320    would be wrong, as flowing off the end of a function catch clause for
13321    main() would also need to return 0.  */
13322 
13323 void
13324 finish_function_body (tree compstmt)
13325 {
13326   if (compstmt == NULL_TREE)
13327     return;
13328 
13329   /* Close the block.  */
13330   finish_compound_stmt (compstmt);
13331 
13332   if (processing_template_decl)
13333     /* Do nothing now.  */;
13334   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13335     finish_constructor_body ();
13336   else if (DECL_DESTRUCTOR_P (current_function_decl))
13337     finish_destructor_body ();
13338 }
13339 
13340 /* Given a function, returns the BLOCK corresponding to the outermost level
13341    of curly braces, skipping the artificial block created for constructor
13342    initializers.  */
13343 
13344 tree
13345 outer_curly_brace_block (tree fndecl)
13346 {
13347   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13348   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13349     /* Skip the artificial function body block.  */
13350     block = BLOCK_SUBBLOCKS (block);
13351   return block;
13352 }
13353 
13354 /* If FNDECL is a class's key method, add the class to the list of
13355    keyed classes that should be emitted.  */
13356 
13357 static void
13358 record_key_method_defined (tree fndecl)
13359 {
13360   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13361       && DECL_VIRTUAL_P (fndecl)
13362       && !processing_template_decl)
13363     {
13364       tree fnclass = DECL_CONTEXT (fndecl);
13365       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13366 	keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13367     }
13368 }
13369 
13370 /* Subroutine of finish_function.
13371    Save the body of constexpr functions for possible
13372    future compile time evaluation.  */
13373 
13374 static void
13375 maybe_save_function_definition (tree fun)
13376 {
13377   if (!processing_template_decl
13378       && DECL_DECLARED_CONSTEXPR_P (fun)
13379       && !DECL_CLONED_FUNCTION_P (fun))
13380     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13381 }
13382 
13383 /* Finish up a function declaration and compile that function
13384    all the way to assembler language output.  The free the storage
13385    for the function definition.
13386 
13387    FLAGS is a bitwise or of the following values:
13388      2 - INCLASS_INLINE
13389        We just finished processing the body of an in-class inline
13390        function definition.  (This processing will have taken place
13391        after the class definition is complete.)  */
13392 
13393 tree
13394 finish_function (int flags)
13395 {
13396   tree fndecl = current_function_decl;
13397   tree fntype, ctype = NULL_TREE;
13398   int inclass_inline = (flags & 2) != 0;
13399 
13400   /* When we get some parse errors, we can end up without a
13401      current_function_decl, so cope.  */
13402   if (fndecl == NULL_TREE)
13403     return error_mark_node;
13404 
13405   if (c_dialect_objc ())
13406     objc_finish_function ();
13407 
13408   gcc_assert (!defer_mark_used_calls);
13409   defer_mark_used_calls = true;
13410 
13411   record_key_method_defined (fndecl);
13412 
13413   fntype = TREE_TYPE (fndecl);
13414 
13415   /*  TREE_READONLY (fndecl) = 1;
13416       This caused &foo to be of type ptr-to-const-function
13417       which then got a warning when stored in a ptr-to-function variable.  */
13418 
13419   gcc_assert (building_stmt_list_p ());
13420   /* The current function is being defined, so its DECL_INITIAL should
13421      be set, and unless there's a multiple definition, it should be
13422      error_mark_node.  */
13423   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13424 
13425   /* For a cloned function, we've already got all the code we need;
13426      there's no need to add any extra bits.  */
13427   if (!DECL_CLONED_FUNCTION_P (fndecl))
13428     {
13429       if (DECL_MAIN_P (current_function_decl))
13430 	{
13431 	  /* Make it so that `main' always returns 0 by default (or
13432 	     1 for VMS).  */
13433 #if VMS_TARGET
13434 	  finish_return_stmt (integer_one_node);
13435 #else
13436 	  finish_return_stmt (integer_zero_node);
13437 #endif
13438 	}
13439 
13440       if (use_eh_spec_block (current_function_decl))
13441 	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13442 			      (TREE_TYPE (current_function_decl)),
13443 			      current_eh_spec_block);
13444     }
13445 
13446   /* If we're saving up tree structure, tie off the function now.  */
13447   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13448 
13449   finish_fname_decls ();
13450 
13451   /* If this function can't throw any exceptions, remember that.  */
13452   if (!processing_template_decl
13453       && !cp_function_chain->can_throw
13454       && !flag_non_call_exceptions
13455       && !decl_replaceable_p (fndecl))
13456     TREE_NOTHROW (fndecl) = 1;
13457 
13458   /* This must come after expand_function_end because cleanups might
13459      have declarations (from inline functions) that need to go into
13460      this function's blocks.  */
13461 
13462   /* If the current binding level isn't the outermost binding level
13463      for this function, either there is a bug, or we have experienced
13464      syntax errors and the statement tree is malformed.  */
13465   if (current_binding_level->kind != sk_function_parms)
13466     {
13467       /* Make sure we have already experienced errors.  */
13468       gcc_assert (errorcount);
13469 
13470       /* Throw away the broken statement tree and extra binding
13471 	 levels.  */
13472       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13473 
13474       while (current_binding_level->kind != sk_function_parms)
13475 	{
13476 	  if (current_binding_level->kind == sk_class)
13477 	    pop_nested_class ();
13478 	  else
13479 	    poplevel (0, 0, 0);
13480 	}
13481     }
13482   poplevel (1, 0, 1);
13483 
13484   /* Statements should always be full-expressions at the outermost set
13485      of curly braces for a function.  */
13486   gcc_assert (stmts_are_full_exprs_p ());
13487 
13488   /* Save constexpr function body before it gets munged by
13489      the NRV transformation.   */
13490   maybe_save_function_definition (fndecl);
13491 
13492   /* Set up the named return value optimization, if we can.  Candidate
13493      variables are selected in check_return_expr.  */
13494   if (current_function_return_value)
13495     {
13496       tree r = current_function_return_value;
13497       tree outer;
13498 
13499       if (r != error_mark_node
13500 	  /* This is only worth doing for fns that return in memory--and
13501 	     simpler, since we don't have to worry about promoted modes.  */
13502 	  && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13503 	  /* Only allow this for variables declared in the outer scope of
13504 	     the function so we know that their lifetime always ends with a
13505 	     return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13506 	     we were to do this optimization in tree-ssa.  */
13507 	  && (outer = outer_curly_brace_block (fndecl))
13508 	  && chain_member (r, BLOCK_VARS (outer)))
13509 	finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13510 
13511       current_function_return_value = NULL_TREE;
13512     }
13513 
13514   /* Remember that we were in class scope.  */
13515   if (current_class_name)
13516     ctype = current_class_type;
13517 
13518   /* Must mark the RESULT_DECL as being in this function.  */
13519   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13520 
13521   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13522      to the FUNCTION_DECL node itself.  */
13523   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13524 
13525   /* Save away current state, if appropriate.  */
13526   if (!processing_template_decl)
13527     save_function_data (fndecl);
13528 
13529   /* Complain if there's just no return statement.  */
13530   if (warn_return_type
13531       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13532       && !dependent_type_p (TREE_TYPE (fntype))
13533       && !current_function_returns_value && !current_function_returns_null
13534       /* Don't complain if we abort or throw.  */
13535       && !current_function_returns_abnormally
13536       /* Don't complain if we are declared noreturn.  */
13537       && !TREE_THIS_VOLATILE (fndecl)
13538       && !DECL_NAME (DECL_RESULT (fndecl))
13539       && !TREE_NO_WARNING (fndecl)
13540       /* Structor return values (if any) are set by the compiler.  */
13541       && !DECL_CONSTRUCTOR_P (fndecl)
13542       && !DECL_DESTRUCTOR_P (fndecl))
13543     {
13544       warning (OPT_Wreturn_type,
13545  	       "no return statement in function returning non-void");
13546       TREE_NO_WARNING (fndecl) = 1;
13547     }
13548 
13549   /* Store the end of the function, so that we get good line number
13550      info for the epilogue.  */
13551   cfun->function_end_locus = input_location;
13552 
13553   /* Complain about parameters that are only set, but never otherwise used.  */
13554   if (warn_unused_but_set_parameter
13555       && !processing_template_decl
13556       && errorcount == unused_but_set_errorcount
13557       && !DECL_CLONED_FUNCTION_P (fndecl))
13558     {
13559       tree decl;
13560 
13561       for (decl = DECL_ARGUMENTS (fndecl);
13562 	   decl;
13563 	   decl = DECL_CHAIN (decl))
13564 	if (TREE_USED (decl)
13565 	    && TREE_CODE (decl) == PARM_DECL
13566 	    && !DECL_READ_P (decl)
13567 	    && DECL_NAME (decl)
13568 	    && !DECL_ARTIFICIAL (decl)
13569 	    && !TREE_NO_WARNING (decl)
13570 	    && !DECL_IN_SYSTEM_HEADER (decl)
13571 	    && TREE_TYPE (decl) != error_mark_node
13572 	    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13573 	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
13574 	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13575 	  warning (OPT_Wunused_but_set_parameter,
13576 		   "parameter %q+D set but not used", decl);
13577       unused_but_set_errorcount = errorcount;
13578     }
13579 
13580   /* Complain about locally defined typedefs that are not used in this
13581      function.  */
13582   maybe_warn_unused_local_typedefs ();
13583 
13584   /* Genericize before inlining.  */
13585   if (!processing_template_decl)
13586     {
13587       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13588       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13589       cp_genericize (fndecl);
13590       /* Clear out the bits we don't need.  */
13591       f->x_current_class_ptr = NULL;
13592       f->x_current_class_ref = NULL;
13593       f->x_eh_spec_block = NULL;
13594       f->x_in_charge_parm = NULL;
13595       f->x_vtt_parm = NULL;
13596       f->x_return_value = NULL;
13597       f->bindings = NULL;
13598       f->extern_decl_map = NULL;
13599     }
13600   /* Clear out the bits we don't need.  */
13601   local_names = NULL;
13602 
13603   /* We're leaving the context of this function, so zap cfun.  It's still in
13604      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13605   set_cfun (NULL);
13606   current_function_decl = NULL;
13607 
13608   /* If this is an in-class inline definition, we may have to pop the
13609      bindings for the template parameters that we added in
13610      maybe_begin_member_template_processing when start_function was
13611      called.  */
13612   if (inclass_inline)
13613     maybe_end_member_template_processing ();
13614 
13615   /* Leave the scope of the class.  */
13616   if (ctype)
13617     pop_nested_class ();
13618 
13619   --function_depth;
13620 
13621   /* Clean up.  */
13622   current_function_decl = NULL_TREE;
13623 
13624   defer_mark_used_calls = false;
13625   if (deferred_mark_used_calls)
13626     {
13627       unsigned int i;
13628       tree decl;
13629 
13630       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13631 	mark_used (decl);
13632       VEC_free (tree, gc, deferred_mark_used_calls);
13633     }
13634 
13635   return fndecl;
13636 }
13637 
13638 /* Create the FUNCTION_DECL for a function definition.
13639    DECLSPECS and DECLARATOR are the parts of the declaration;
13640    they describe the return type and the name of the function,
13641    but twisted together in a fashion that parallels the syntax of C.
13642 
13643    This function creates a binding context for the function body
13644    as well as setting up the FUNCTION_DECL in current_function_decl.
13645 
13646    Returns a FUNCTION_DECL on success.
13647 
13648    If the DECLARATOR is not suitable for a function (it defines a datum
13649    instead), we return 0, which tells yyparse to report a parse error.
13650 
13651    May return void_type_node indicating that this method is actually
13652    a friend.  See grokfield for more details.
13653 
13654    Came here with a `.pushlevel' .
13655 
13656    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13657    CHANGES TO CODE IN `grokfield'.  */
13658 
13659 tree
13660 grokmethod (cp_decl_specifier_seq *declspecs,
13661 	    const cp_declarator *declarator, tree attrlist)
13662 {
13663   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13664 				&attrlist);
13665 
13666   if (fndecl == error_mark_node)
13667     return error_mark_node;
13668 
13669   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13670     {
13671       error ("invalid member function declaration");
13672       return error_mark_node;
13673     }
13674 
13675   if (attrlist)
13676     cplus_decl_attributes (&fndecl, attrlist, 0);
13677 
13678   /* Pass friends other than inline friend functions back.  */
13679   if (fndecl == void_type_node)
13680     return fndecl;
13681 
13682   if (DECL_IN_AGGR_P (fndecl))
13683     {
13684       if (DECL_CLASS_SCOPE_P (fndecl))
13685 	error ("%qD is already defined in class %qT", fndecl,
13686 	       DECL_CONTEXT (fndecl));
13687       return error_mark_node;
13688     }
13689 
13690   check_template_shadow (fndecl);
13691 
13692   DECL_DECLARED_INLINE_P (fndecl) = 1;
13693   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13694 
13695   /* We process method specializations in finish_struct_1.  */
13696   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13697     {
13698       fndecl = push_template_decl (fndecl);
13699       if (fndecl == error_mark_node)
13700 	return fndecl;
13701     }
13702 
13703   if (! DECL_FRIEND_P (fndecl))
13704     {
13705       if (DECL_CHAIN (fndecl))
13706 	{
13707 	  fndecl = copy_node (fndecl);
13708 	  TREE_CHAIN (fndecl) = NULL_TREE;
13709 	}
13710     }
13711 
13712   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13713 
13714   DECL_IN_AGGR_P (fndecl) = 1;
13715   return fndecl;
13716 }
13717 
13718 
13719 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13720    we can lay it out later, when and if its type becomes complete.  */
13721 
13722 void
13723 maybe_register_incomplete_var (tree var)
13724 {
13725   gcc_assert (TREE_CODE (var) == VAR_DECL);
13726 
13727   /* Keep track of variables with incomplete types.  */
13728   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13729       && DECL_EXTERNAL (var))
13730     {
13731       tree inner_type = TREE_TYPE (var);
13732 
13733       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13734 	inner_type = TREE_TYPE (inner_type);
13735       inner_type = TYPE_MAIN_VARIANT (inner_type);
13736 
13737       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13738 	  /* RTTI TD entries are created while defining the type_info.  */
13739 	  || (TYPE_LANG_SPECIFIC (inner_type)
13740 	      && TYPE_BEING_DEFINED (inner_type)))
13741 	{
13742 	  incomplete_var *iv
13743 	    = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13744 	  iv->decl = var;
13745 	  iv->incomplete_type = inner_type;
13746 	}
13747     }
13748 }
13749 
13750 /* Called when a class type (given by TYPE) is defined.  If there are
13751    any existing VAR_DECLs whose type has been completed by this
13752    declaration, update them now.  */
13753 
13754 void
13755 complete_vars (tree type)
13756 {
13757   unsigned ix;
13758   incomplete_var *iv;
13759 
13760   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13761     {
13762       if (same_type_p (type, iv->incomplete_type))
13763 	{
13764 	  tree var = iv->decl;
13765 	  tree type = TREE_TYPE (var);
13766 	  /* Complete the type of the variable.  The VAR_DECL itself
13767 	     will be laid out in expand_expr.  */
13768 	  complete_type (type);
13769 	  cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13770 	  /* Remove this entry from the list.  */
13771 	  VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13772 	}
13773       else
13774 	ix++;
13775     }
13776 
13777   /* Check for pending declarations which may have abstract type.  */
13778   complete_type_check_abstract (type);
13779 }
13780 
13781 /* If DECL is of a type which needs a cleanup, build and return an
13782    expression to perform that cleanup here.  Return NULL_TREE if no
13783    cleanup need be done.  */
13784 
13785 tree
13786 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13787 {
13788   tree type;
13789   tree attr;
13790   tree cleanup;
13791 
13792   /* Assume no cleanup is required.  */
13793   cleanup = NULL_TREE;
13794 
13795   if (error_operand_p (decl))
13796     return cleanup;
13797 
13798   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13799      before the destructor since the destructor is what actually
13800      terminates the lifetime of the object.  */
13801   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13802   if (attr)
13803     {
13804       tree id;
13805       tree fn;
13806       tree arg;
13807 
13808       /* Get the name specified by the user for the cleanup function.  */
13809       id = TREE_VALUE (TREE_VALUE (attr));
13810       /* Look up the name to find the cleanup function to call.  It is
13811 	 important to use lookup_name here because that is what is
13812 	 used in c-common.c:handle_cleanup_attribute when performing
13813 	 initial checks on the attribute.  Note that those checks
13814 	 include ensuring that the function found is not an overloaded
13815 	 function, or an object with an overloaded call operator,
13816 	 etc.; we can rely on the fact that the function found is an
13817 	 ordinary FUNCTION_DECL.  */
13818       fn = lookup_name (id);
13819       arg = build_address (decl);
13820       mark_used (decl);
13821       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13822       if (cleanup == error_mark_node)
13823 	return error_mark_node;
13824     }
13825   /* Handle ordinary C++ destructors.  */
13826   type = TREE_TYPE (decl);
13827   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13828     {
13829       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13830       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13831 			 && CLASSTYPE_VBASECLASSES (type));
13832       tree addr;
13833       tree call;
13834 
13835       if (TREE_CODE (type) == ARRAY_TYPE)
13836 	addr = decl;
13837       else
13838 	addr = build_address (decl);
13839 
13840       /* Optimize for space over speed here.  */
13841       if (!has_vbases || flag_expensive_optimizations)
13842 	flags |= LOOKUP_NONVIRTUAL;
13843 
13844       call = build_delete (TREE_TYPE (addr), addr,
13845 			   sfk_complete_destructor, flags, 0, complain);
13846       if (call == error_mark_node)
13847 	cleanup = error_mark_node;
13848       else if (cleanup)
13849 	cleanup = cp_build_compound_expr (cleanup, call, complain);
13850       else
13851 	cleanup = call;
13852     }
13853 
13854   /* build_delete sets the location of the destructor call to the
13855      current location, even though the destructor is going to be
13856      called later, at the end of the current scope.  This can lead to
13857      a "jumpy" behaviour for users of debuggers when they step around
13858      the end of the block.  So let's unset the location of the
13859      destructor call instead.  */
13860   if (cleanup != NULL && EXPR_P (cleanup))
13861     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13862   return cleanup;
13863 }
13864 
13865 
13866 /* When a stmt has been parsed, this function is called.  */
13867 
13868 void
13869 finish_stmt (void)
13870 {
13871 }
13872 
13873 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13874    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13875    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13876 
13877 tree
13878 static_fn_type (tree memfntype)
13879 {
13880   tree fntype;
13881   tree args;
13882 
13883   if (TYPE_PTRMEMFUNC_P (memfntype))
13884     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13885   if (POINTER_TYPE_P (memfntype)
13886       || TREE_CODE (memfntype) == FUNCTION_DECL)
13887     memfntype = TREE_TYPE (memfntype);
13888   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13889     return memfntype;
13890   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13891   args = TYPE_ARG_TYPES (memfntype);
13892   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13893   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13894   fntype = (cp_build_type_attribute_variant
13895 	    (fntype, TYPE_ATTRIBUTES (memfntype)));
13896   fntype = (build_exception_variant
13897 	    (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13898   return fntype;
13899 }
13900 
13901 /* DECL was originally constructed as a non-static member function,
13902    but turned out to be static.  Update it accordingly.  */
13903 
13904 void
13905 revert_static_member_fn (tree decl)
13906 {
13907   tree stype = static_fn_type (decl);
13908   cp_cv_quals quals = type_memfn_quals (stype);
13909 
13910   if (quals != TYPE_UNQUALIFIED)
13911     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13912 
13913   TREE_TYPE (decl) = stype;
13914 
13915   if (DECL_ARGUMENTS (decl))
13916     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13917   DECL_STATIC_FUNCTION_P (decl) = 1;
13918 }
13919 
13920 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13921    one of the language-independent trees.  */
13922 
13923 enum cp_tree_node_structure_enum
13924 cp_tree_node_structure (union lang_tree_node * t)
13925 {
13926   switch (TREE_CODE (&t->generic))
13927     {
13928     case DEFAULT_ARG:		return TS_CP_DEFAULT_ARG;
13929     case DEFERRED_NOEXCEPT:	return TS_CP_DEFERRED_NOEXCEPT;
13930     case IDENTIFIER_NODE:	return TS_CP_IDENTIFIER;
13931     case OVERLOAD:		return TS_CP_OVERLOAD;
13932     case TEMPLATE_PARM_INDEX:	return TS_CP_TPI;
13933     case PTRMEM_CST:		return TS_CP_PTRMEM;
13934     case BASELINK:		return TS_CP_BASELINK;
13935     case STATIC_ASSERT:		return TS_CP_STATIC_ASSERT;
13936     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13937     case TRAIT_EXPR:		return TS_CP_TRAIT_EXPR;
13938     case LAMBDA_EXPR:		return TS_CP_LAMBDA_EXPR;
13939     case TEMPLATE_INFO:		return TS_CP_TEMPLATE_INFO;
13940     case USERDEF_LITERAL:	return TS_CP_USERDEF_LITERAL;
13941     default:			return TS_CP_GENERIC;
13942     }
13943 }
13944 
13945 /* Build the void_list_node (void_type_node having been created).  */
13946 tree
13947 build_void_list_node (void)
13948 {
13949   tree t = build_tree_list (NULL_TREE, void_type_node);
13950   return t;
13951 }
13952 
13953 bool
13954 cp_missing_noreturn_ok_p (tree decl)
13955 {
13956   /* A missing noreturn is ok for the `main' function.  */
13957   return DECL_MAIN_P (decl);
13958 }
13959 
13960 /* Return the COMDAT group into which DECL should be placed.  */
13961 
13962 tree
13963 cxx_comdat_group (tree decl)
13964 {
13965   tree name;
13966 
13967   /* Virtual tables, construction virtual tables, and virtual table
13968      tables all go in a single COMDAT group, named after the primary
13969      virtual table.  */
13970   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13971     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13972   /* For all other DECLs, the COMDAT group is the mangled name of the
13973      declaration itself.  */
13974   else
13975     {
13976       while (DECL_THUNK_P (decl))
13977 	{
13978 	  /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13979 	     into the same section as the target function.  In that case
13980 	     we must return target's name.  */
13981 	  tree target = THUNK_TARGET (decl);
13982 	  if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13983 	      && DECL_SECTION_NAME (target) != NULL
13984 	      && DECL_ONE_ONLY (target))
13985 	    decl = target;
13986 	  else
13987 	    break;
13988 	}
13989       name = DECL_ASSEMBLER_NAME (decl);
13990     }
13991 
13992   return name;
13993 }
13994 
13995 #include "gt-cp-decl.h"
13996