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