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