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