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