c-decl.c revision 258748
1/* Process declarations and variables for C compiler.
2   Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3   2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING.  If not, write to the Free
19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301, USA.  */
21
22/* $FreeBSD: head/contrib/gcc/c-decl.c 258748 2013-11-29 18:46:02Z pfg $ */
23/* Merged C99 inline changes from gcc trunk 122565 2007-03-05 */
24/* Fixed problems with compiling inline-25.c and inline-26.c */
25/* XXX still fails inline-29.c, inline-31.c, and inline-32.c */
26
27/* Process declarations and symbol lookup for C front end.
28   Also constructs types; the standard scalar types at initialization,
29   and structure, union, array and enum types when they are declared.  */
30
31/* ??? not all decl nodes are given the most useful possible
32   line numbers.  For example, the CONST_DECLs for enum values.  */
33
34#include "config.h"
35#include "system.h"
36#include "coretypes.h"
37#include "input.h"
38#include "tm.h"
39#include "intl.h"
40#include "tree.h"
41#include "tree-inline.h"
42#include "rtl.h"
43#include "flags.h"
44#include "function.h"
45#include "output.h"
46#include "expr.h"
47#include "c-tree.h"
48#include "toplev.h"
49#include "ggc.h"
50#include "tm_p.h"
51#include "cpplib.h"
52#include "target.h"
53#include "debug.h"
54#include "opts.h"
55#include "timevar.h"
56#include "c-common.h"
57#include "c-pragma.h"
58#include "langhooks.h"
59#include "tree-mudflap.h"
60#include "tree-gimple.h"
61#include "diagnostic.h"
62#include "tree-dump.h"
63#include "cgraph.h"
64#include "hashtab.h"
65#include "libfuncs.h"
66#include "except.h"
67#include "langhooks-def.h"
68#include "pointer-set.h"
69
70/* In grokdeclarator, distinguish syntactic contexts of declarators.  */
71enum decl_context
72{ NORMAL,			/* Ordinary declaration */
73  FUNCDEF,			/* Function definition */
74  PARM,				/* Declaration of parm before function body */
75  FIELD,			/* Declaration inside struct or union */
76  TYPENAME};			/* Typename (inside cast or sizeof)  */
77
78
79/* Nonzero if we have seen an invalid cross reference
80   to a struct, union, or enum, but not yet printed the message.  */
81tree pending_invalid_xref;
82
83/* File and line to appear in the eventual error message.  */
84location_t pending_invalid_xref_location;
85
86/* True means we've initialized exception handling.  */
87bool c_eh_initialized_p;
88
89/* While defining an enum type, this is 1 plus the last enumerator
90   constant value.  Note that will do not have to save this or `enum_overflow'
91   around nested function definition since such a definition could only
92   occur in an enum value expression and we don't use these variables in
93   that case.  */
94
95static tree enum_next_value;
96
97/* Nonzero means that there was overflow computing enum_next_value.  */
98
99static int enum_overflow;
100
101/* The file and line that the prototype came from if this is an
102   old-style definition; used for diagnostics in
103   store_parm_decls_oldstyle.  */
104
105static location_t current_function_prototype_locus;
106
107/* Whether this prototype was built-in.  */
108
109static bool current_function_prototype_built_in;
110
111/* The argument type information of this prototype.  */
112
113static tree current_function_prototype_arg_types;
114
115/* The argument information structure for the function currently being
116   defined.  */
117
118static struct c_arg_info *current_function_arg_info;
119
120/* The obstack on which parser and related data structures, which are
121   not live beyond their top-level declaration or definition, are
122   allocated.  */
123struct obstack parser_obstack;
124
125/* The current statement tree.  */
126
127static GTY(()) struct stmt_tree_s c_stmt_tree;
128
129/* State saving variables.  */
130tree c_break_label;
131tree c_cont_label;
132
133/* Linked list of TRANSLATION_UNIT_DECLS for the translation units
134   included in this invocation.  Note that the current translation
135   unit is not included in this list.  */
136
137static GTY(()) tree all_translation_units;
138
139/* A list of decls to be made automatically visible in each file scope.  */
140static GTY(()) tree visible_builtins;
141
142/* Set to 0 at beginning of a function definition, set to 1 if
143   a return statement that specifies a return value is seen.  */
144
145int current_function_returns_value;
146
147/* Set to 0 at beginning of a function definition, set to 1 if
148   a return statement with no argument is seen.  */
149
150int current_function_returns_null;
151
152/* Set to 0 at beginning of a function definition, set to 1 if
153   a call to a noreturn function is seen.  */
154
155int current_function_returns_abnormally;
156
157/* Set to nonzero by `grokdeclarator' for a function
158   whose return type is defaulted, if warnings for this are desired.  */
159
160static int warn_about_return_type;
161
162/* Nonzero when the current toplevel function contains a declaration
163   of a nested function which is never defined.  */
164
165static bool undef_nested_function;
166
167/* True means global_bindings_p should return false even if the scope stack
168   says we are in file scope.  */
169bool c_override_global_bindings_to_false;
170
171
172/* Each c_binding structure describes one binding of an identifier to
173   a decl.  All the decls in a scope - irrespective of namespace - are
174   chained together by the ->prev field, which (as the name implies)
175   runs in reverse order.  All the decls in a given namespace bound to
176   a given identifier are chained by the ->shadowed field, which runs
177   from inner to outer scopes.
178
179   The ->decl field usually points to a DECL node, but there are two
180   exceptions.  In the namespace of type tags, the bound entity is a
181   RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node.  If an undeclared
182   identifier is encountered, it is bound to error_mark_node to
183   suppress further errors about that identifier in the current
184   function.
185
186   The ->type field stores the type of the declaration in this scope;
187   if NULL, the type is the type of the ->decl field.  This is only of
188   relevance for objects with external or internal linkage which may
189   be redeclared in inner scopes, forming composite types that only
190   persist for the duration of those scopes.  In the external scope,
191   this stores the composite of all the types declared for this
192   object, visible or not.  The ->inner_comp field (used only at file
193   scope) stores whether an incomplete array type at file scope was
194   completed at an inner scope to an array size other than 1.
195
196   The depth field is copied from the scope structure that holds this
197   decl.  It is used to preserve the proper ordering of the ->shadowed
198   field (see bind()) and also for a handful of special-case checks.
199   Finally, the invisible bit is true for a decl which should be
200   ignored for purposes of normal name lookup, and the nested bit is
201   true for a decl that's been bound a second time in an inner scope;
202   in all such cases, the binding in the outer scope will have its
203   invisible bit true.  */
204
205struct c_binding GTY((chain_next ("%h.prev")))
206{
207  tree decl;			/* the decl bound */
208  tree type;			/* the type in this scope */
209  tree id;			/* the identifier it's bound to */
210  struct c_binding *prev;	/* the previous decl in this scope */
211  struct c_binding *shadowed;	/* the innermost decl shadowed by this one */
212  unsigned int depth : 28;      /* depth of this scope */
213  BOOL_BITFIELD invisible : 1;  /* normal lookup should ignore this binding */
214  BOOL_BITFIELD nested : 1;     /* do not set DECL_CONTEXT when popping */
215  BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
216  /* one free bit */
217};
218#define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
219#define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
220#define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
221#define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
222
223#define I_SYMBOL_BINDING(node) \
224  (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
225#define I_SYMBOL_DECL(node) \
226 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
227
228#define I_TAG_BINDING(node) \
229  (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
230#define I_TAG_DECL(node) \
231 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
232
233#define I_LABEL_BINDING(node) \
234  (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
235#define I_LABEL_DECL(node) \
236 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
237
238/* Each C symbol points to three linked lists of c_binding structures.
239   These describe the values of the identifier in the three different
240   namespaces defined by the language.  */
241
242struct lang_identifier GTY(())
243{
244  struct c_common_identifier common_id;
245  struct c_binding *symbol_binding; /* vars, funcs, constants, typedefs */
246  struct c_binding *tag_binding;    /* struct/union/enum tags */
247  struct c_binding *label_binding;  /* labels */
248};
249
250/* Validate c-lang.c's assumptions.  */
251extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
252[(sizeof(struct lang_identifier) == C_SIZEOF_STRUCT_LANG_IDENTIFIER) ? 1 : -1];
253
254/* The resulting tree type.  */
255
256union lang_tree_node
257  GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
258       chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : (union lang_tree_node *) TREE_CHAIN (&%h.generic)")))
259{
260  union tree_node GTY ((tag ("0"),
261			desc ("tree_node_structure (&%h)")))
262    generic;
263  struct lang_identifier GTY ((tag ("1"))) identifier;
264};
265
266/* Each c_scope structure describes the complete contents of one
267   scope.  Four scopes are distinguished specially: the innermost or
268   current scope, the innermost function scope, the file scope (always
269   the second to outermost) and the outermost or external scope.
270
271   Most declarations are recorded in the current scope.
272
273   All normal label declarations are recorded in the innermost
274   function scope, as are bindings of undeclared identifiers to
275   error_mark_node.  (GCC permits nested functions as an extension,
276   hence the 'innermost' qualifier.)  Explicitly declared labels
277   (using the __label__ extension) appear in the current scope.
278
279   Being in the file scope (current_scope == file_scope) causes
280   special behavior in several places below.  Also, under some
281   conditions the Objective-C front end records declarations in the
282   file scope even though that isn't the current scope.
283
284   All declarations with external linkage are recorded in the external
285   scope, even if they aren't visible there; this models the fact that
286   such declarations are visible to the entire program, and (with a
287   bit of cleverness, see pushdecl) allows diagnosis of some violations
288   of C99 6.2.2p7 and 6.2.7p2:
289
290     If, within the same translation unit, the same identifier appears
291     with both internal and external linkage, the behavior is
292     undefined.
293
294     All declarations that refer to the same object or function shall
295     have compatible type; otherwise, the behavior is undefined.
296
297   Initially only the built-in declarations, which describe compiler
298   intrinsic functions plus a subset of the standard library, are in
299   this scope.
300
301   The order of the blocks list matters, and it is frequently appended
302   to.  To avoid having to walk all the way to the end of the list on
303   each insertion, or reverse the list later, we maintain a pointer to
304   the last list entry.  (FIXME: It should be feasible to use a reversed
305   list here.)
306
307   The bindings list is strictly in reverse order of declarations;
308   pop_scope relies on this.  */
309
310
311struct c_scope GTY((chain_next ("%h.outer")))
312{
313  /* The scope containing this one.  */
314  struct c_scope *outer;
315
316  /* The next outermost function scope.  */
317  struct c_scope *outer_function;
318
319  /* All bindings in this scope.  */
320  struct c_binding *bindings;
321
322  /* For each scope (except the global one), a chain of BLOCK nodes
323     for all the scopes that were entered and exited one level down.  */
324  tree blocks;
325  tree blocks_last;
326
327  /* The depth of this scope.  Used to keep the ->shadowed chain of
328     bindings sorted innermost to outermost.  */
329  unsigned int depth : 28;
330
331  /* True if we are currently filling this scope with parameter
332     declarations.  */
333  BOOL_BITFIELD parm_flag : 1;
334
335  /* True if we saw [*] in this scope.  Used to give an error messages
336     if these appears in a function definition.  */
337  BOOL_BITFIELD had_vla_unspec : 1;
338
339  /* True if we already complained about forward parameter decls
340     in this scope.  This prevents double warnings on
341     foo (int a; int b; ...)  */
342  BOOL_BITFIELD warned_forward_parm_decls : 1;
343
344  /* True if this is the outermost block scope of a function body.
345     This scope contains the parameters, the local variables declared
346     in the outermost block, and all the labels (except those in
347     nested functions, or declared at block scope with __label__).  */
348  BOOL_BITFIELD function_body : 1;
349
350  /* True means make a BLOCK for this scope no matter what.  */
351  BOOL_BITFIELD keep : 1;
352};
353
354/* The scope currently in effect.  */
355
356static GTY(()) struct c_scope *current_scope;
357
358/* The innermost function scope.  Ordinary (not explicitly declared)
359   labels, bindings to error_mark_node, and the lazily-created
360   bindings of __func__ and its friends get this scope.  */
361
362static GTY(()) struct c_scope *current_function_scope;
363
364/* The C file scope.  This is reset for each input translation unit.  */
365
366static GTY(()) struct c_scope *file_scope;
367
368/* The outermost scope.  This is used for all declarations with
369   external linkage, and only these, hence the name.  */
370
371static GTY(()) struct c_scope *external_scope;
372
373/* A chain of c_scope structures awaiting reuse.  */
374
375static GTY((deletable)) struct c_scope *scope_freelist;
376
377/* A chain of c_binding structures awaiting reuse.  */
378
379static GTY((deletable)) struct c_binding *binding_freelist;
380
381/* Append VAR to LIST in scope SCOPE.  */
382#define SCOPE_LIST_APPEND(scope, list, decl) do {	\
383  struct c_scope *s_ = (scope);				\
384  tree d_ = (decl);					\
385  if (s_->list##_last)					\
386    TREE_CHAIN (s_->list##_last) = d_;			\
387  else							\
388    s_->list = d_;					\
389  s_->list##_last = d_;					\
390} while (0)
391
392/* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE.  */
393#define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do {	\
394  struct c_scope *t_ = (tscope);				\
395  struct c_scope *f_ = (fscope);				\
396  if (t_->to##_last)						\
397    TREE_CHAIN (t_->to##_last) = f_->from;			\
398  else								\
399    t_->to = f_->from;						\
400  t_->to##_last = f_->from##_last;				\
401} while (0)
402
403/* True means unconditionally make a BLOCK for the next scope pushed.  */
404
405static bool keep_next_level_flag;
406
407/* True means the next call to push_scope will be the outermost scope
408   of a function body, so do not push a new scope, merely cease
409   expecting parameter decls.  */
410
411static bool next_is_function_body;
412
413/* Functions called automatically at the beginning and end of execution.  */
414
415static GTY(()) tree static_ctors;
416static GTY(()) tree static_dtors;
417
418/* Forward declarations.  */
419static tree lookup_name_in_scope (tree, struct c_scope *);
420static tree c_make_fname_decl (tree, int);
421static tree grokdeclarator (const struct c_declarator *,
422			    struct c_declspecs *,
423			    enum decl_context, bool, tree *);
424static tree grokparms (struct c_arg_info *, bool);
425static void layout_array_type (tree);
426
427/* T is a statement.  Add it to the statement-tree.  This is the
428   C/ObjC version--C++ has a slightly different version of this
429   function.  */
430
431tree
432add_stmt (tree t)
433{
434  enum tree_code code = TREE_CODE (t);
435
436  if (EXPR_P (t) && code != LABEL_EXPR)
437    {
438      if (!EXPR_HAS_LOCATION (t))
439	SET_EXPR_LOCATION (t, input_location);
440    }
441
442  if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
443    STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1;
444
445  /* Add T to the statement-tree.  Non-side-effect statements need to be
446     recorded during statement expressions.  */
447  append_to_statement_list_force (t, &cur_stmt_list);
448
449  return t;
450}
451
452/* States indicating how grokdeclarator() should handle declspecs marked
453   with __attribute__((deprecated)).  An object declared as
454   __attribute__((deprecated)) suppresses warnings of uses of other
455   deprecated items.  */
456
457enum deprecated_states {
458  DEPRECATED_NORMAL,
459  DEPRECATED_SUPPRESS
460};
461
462static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
463
464void
465c_print_identifier (FILE *file, tree node, int indent)
466{
467  print_node (file, "symbol", I_SYMBOL_DECL (node), indent + 4);
468  print_node (file, "tag", I_TAG_DECL (node), indent + 4);
469  print_node (file, "label", I_LABEL_DECL (node), indent + 4);
470  if (C_IS_RESERVED_WORD (node))
471    {
472      tree rid = ridpointers[C_RID_CODE (node)];
473      indent_to (file, indent + 4);
474      fprintf (file, "rid %p \"%s\"",
475	       (void *) rid, IDENTIFIER_POINTER (rid));
476    }
477}
478
479/* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
480   which may be any of several kinds of DECL or TYPE or error_mark_node,
481   in the scope SCOPE.  */
482static void
483bind (tree name, tree decl, struct c_scope *scope, bool invisible, bool nested)
484{
485  struct c_binding *b, **here;
486
487  if (binding_freelist)
488    {
489      b = binding_freelist;
490      binding_freelist = b->prev;
491    }
492  else
493    b = GGC_NEW (struct c_binding);
494
495  b->shadowed = 0;
496  b->decl = decl;
497  b->id = name;
498  b->depth = scope->depth;
499  b->invisible = invisible;
500  b->nested = nested;
501  b->inner_comp = 0;
502
503  b->type = 0;
504
505  b->prev = scope->bindings;
506  scope->bindings = b;
507
508  if (!name)
509    return;
510
511  switch (TREE_CODE (decl))
512    {
513    case LABEL_DECL:     here = &I_LABEL_BINDING (name);   break;
514    case ENUMERAL_TYPE:
515    case UNION_TYPE:
516    case RECORD_TYPE:    here = &I_TAG_BINDING (name);     break;
517    case VAR_DECL:
518    case FUNCTION_DECL:
519    case TYPE_DECL:
520    case CONST_DECL:
521    case PARM_DECL:
522    case ERROR_MARK:     here = &I_SYMBOL_BINDING (name);  break;
523
524    default:
525      gcc_unreachable ();
526    }
527
528  /* Locate the appropriate place in the chain of shadowed decls
529     to insert this binding.  Normally, scope == current_scope and
530     this does nothing.  */
531  while (*here && (*here)->depth > scope->depth)
532    here = &(*here)->shadowed;
533
534  b->shadowed = *here;
535  *here = b;
536}
537
538/* Clear the binding structure B, stick it on the binding_freelist,
539   and return the former value of b->prev.  This is used by pop_scope
540   and get_parm_info to iterate destructively over all the bindings
541   from a given scope.  */
542static struct c_binding *
543free_binding_and_advance (struct c_binding *b)
544{
545  struct c_binding *prev = b->prev;
546
547  memset (b, 0, sizeof (struct c_binding));
548  b->prev = binding_freelist;
549  binding_freelist = b;
550
551  return prev;
552}
553
554
555/* Hook called at end of compilation to assume 1 elt
556   for a file-scope tentative array defn that wasn't complete before.  */
557
558void
559c_finish_incomplete_decl (tree decl)
560{
561  if (TREE_CODE (decl) == VAR_DECL)
562    {
563      tree type = TREE_TYPE (decl);
564      if (type != error_mark_node
565	  && TREE_CODE (type) == ARRAY_TYPE
566	  && !DECL_EXTERNAL (decl)
567	  && TYPE_DOMAIN (type) == 0)
568	{
569	  warning (0, "array %q+D assumed to have one element", decl);
570
571	  complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
572
573	  layout_decl (decl, 0);
574	}
575    }
576}
577
578/* The Objective-C front-end often needs to determine the current scope.  */
579
580void *
581objc_get_current_scope (void)
582{
583  return current_scope;
584}
585
586/* The following function is used only by Objective-C.  It needs to live here
587   because it accesses the innards of c_scope.  */
588
589void
590objc_mark_locals_volatile (void *enclosing_blk)
591{
592  struct c_scope *scope;
593  struct c_binding *b;
594
595  for (scope = current_scope;
596       scope && scope != enclosing_blk;
597       scope = scope->outer)
598    {
599      for (b = scope->bindings; b; b = b->prev)
600	objc_volatilize_decl (b->decl);
601
602      /* Do not climb up past the current function.  */
603      if (scope->function_body)
604	break;
605    }
606}
607
608/* Nonzero if we are currently in file scope.  */
609
610int
611global_bindings_p (void)
612{
613  return current_scope == file_scope && !c_override_global_bindings_to_false;
614}
615
616void
617keep_next_level (void)
618{
619  keep_next_level_flag = true;
620}
621
622/* Identify this scope as currently being filled with parameters.  */
623
624void
625declare_parm_level (void)
626{
627  current_scope->parm_flag = true;
628}
629
630void
631push_scope (void)
632{
633  if (next_is_function_body)
634    {
635      /* This is the transition from the parameters to the top level
636	 of the function body.  These are the same scope
637	 (C99 6.2.1p4,6) so we do not push another scope structure.
638	 next_is_function_body is set only by store_parm_decls, which
639	 in turn is called when and only when we are about to
640	 encounter the opening curly brace for the function body.
641
642	 The outermost block of a function always gets a BLOCK node,
643	 because the debugging output routines expect that each
644	 function has at least one BLOCK.  */
645      current_scope->parm_flag         = false;
646      current_scope->function_body     = true;
647      current_scope->keep              = true;
648      current_scope->outer_function    = current_function_scope;
649      current_function_scope           = current_scope;
650
651      keep_next_level_flag = false;
652      next_is_function_body = false;
653    }
654  else
655    {
656      struct c_scope *scope;
657      if (scope_freelist)
658	{
659	  scope = scope_freelist;
660	  scope_freelist = scope->outer;
661	}
662      else
663	scope = GGC_CNEW (struct c_scope);
664
665      scope->keep          = keep_next_level_flag;
666      scope->outer         = current_scope;
667      scope->depth	   = current_scope ? (current_scope->depth + 1) : 0;
668
669      /* Check for scope depth overflow.  Unlikely (2^28 == 268,435,456) but
670	 possible.  */
671      if (current_scope && scope->depth == 0)
672	{
673	  scope->depth--;
674	  sorry ("GCC supports only %u nested scopes", scope->depth);
675	}
676
677      current_scope        = scope;
678      keep_next_level_flag = false;
679    }
680}
681
682/* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT.  */
683
684static void
685set_type_context (tree type, tree context)
686{
687  for (type = TYPE_MAIN_VARIANT (type); type;
688       type = TYPE_NEXT_VARIANT (type))
689    TYPE_CONTEXT (type) = context;
690}
691
692/* Exit a scope.  Restore the state of the identifier-decl mappings
693   that were in effect when this scope was entered.  Return a BLOCK
694   node containing all the DECLs in this scope that are of interest
695   to debug info generation.  */
696
697tree
698pop_scope (void)
699{
700  struct c_scope *scope = current_scope;
701  tree block, context, p;
702  struct c_binding *b;
703
704  bool functionbody = scope->function_body;
705  bool keep = functionbody || scope->keep || scope->bindings;
706
707  c_end_vm_scope (scope->depth);
708
709  /* If appropriate, create a BLOCK to record the decls for the life
710     of this function.  */
711  block = 0;
712  if (keep)
713    {
714      block = make_node (BLOCK);
715      BLOCK_SUBBLOCKS (block) = scope->blocks;
716      TREE_USED (block) = 1;
717
718      /* In each subblock, record that this is its superior.  */
719      for (p = scope->blocks; p; p = TREE_CHAIN (p))
720	BLOCK_SUPERCONTEXT (p) = block;
721
722      BLOCK_VARS (block) = 0;
723    }
724
725  /* The TYPE_CONTEXTs for all of the tagged types belonging to this
726     scope must be set so that they point to the appropriate
727     construct, i.e.  either to the current FUNCTION_DECL node, or
728     else to the BLOCK node we just constructed.
729
730     Note that for tagged types whose scope is just the formal
731     parameter list for some function type specification, we can't
732     properly set their TYPE_CONTEXTs here, because we don't have a
733     pointer to the appropriate FUNCTION_TYPE node readily available
734     to us.  For those cases, the TYPE_CONTEXTs of the relevant tagged
735     type nodes get set in `grokdeclarator' as soon as we have created
736     the FUNCTION_TYPE node which will represent the "scope" for these
737     "parameter list local" tagged types.  */
738  if (scope->function_body)
739    context = current_function_decl;
740  else if (scope == file_scope)
741    {
742      tree file_decl = build_decl (TRANSLATION_UNIT_DECL, 0, 0);
743      TREE_CHAIN (file_decl) = all_translation_units;
744      all_translation_units = file_decl;
745      context = file_decl;
746    }
747  else
748    context = block;
749
750  /* Clear all bindings in this scope.  */
751  for (b = scope->bindings; b; b = free_binding_and_advance (b))
752    {
753      p = b->decl;
754      switch (TREE_CODE (p))
755	{
756	case LABEL_DECL:
757	  /* Warnings for unused labels, errors for undefined labels.  */
758	  if (TREE_USED (p) && !DECL_INITIAL (p))
759	    {
760	      error ("label %q+D used but not defined", p);
761	      DECL_INITIAL (p) = error_mark_node;
762	    }
763	  else if (!TREE_USED (p) && warn_unused_label)
764	    {
765	      if (DECL_INITIAL (p))
766		warning (0, "label %q+D defined but not used", p);
767	      else
768		warning (0, "label %q+D declared but not defined", p);
769	    }
770	  /* Labels go in BLOCK_VARS.  */
771	  TREE_CHAIN (p) = BLOCK_VARS (block);
772	  BLOCK_VARS (block) = p;
773	  gcc_assert (I_LABEL_BINDING (b->id) == b);
774	  I_LABEL_BINDING (b->id) = b->shadowed;
775	  break;
776
777	case ENUMERAL_TYPE:
778	case UNION_TYPE:
779	case RECORD_TYPE:
780	  set_type_context (p, context);
781
782	  /* Types may not have tag-names, in which case the type
783	     appears in the bindings list with b->id NULL.  */
784	  if (b->id)
785	    {
786	      gcc_assert (I_TAG_BINDING (b->id) == b);
787	      I_TAG_BINDING (b->id) = b->shadowed;
788	    }
789	  break;
790
791	case FUNCTION_DECL:
792	  /* Propagate TREE_ADDRESSABLE from nested functions to their
793	     containing functions.  */
794	  if (!TREE_ASM_WRITTEN (p)
795	      && DECL_INITIAL (p) != 0
796	      && TREE_ADDRESSABLE (p)
797	      && DECL_ABSTRACT_ORIGIN (p) != 0
798	      && DECL_ABSTRACT_ORIGIN (p) != p)
799	    TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p)) = 1;
800	  if (!DECL_EXTERNAL (p)
801	      && DECL_INITIAL (p) == 0
802	      && scope != file_scope
803	      && scope != external_scope)
804	    {
805	      error ("nested function %q+D declared but never defined", p);
806	      undef_nested_function = true;
807	    }
808	  /* C99 6.7.4p6: "a function with external linkage... declared
809	     with an inline function specifier ... shall also be defined in the
810	     same translation unit."  */
811	  else if (DECL_DECLARED_INLINE_P (p)
812		   && TREE_PUBLIC (p)
813		   && !DECL_INITIAL (p)
814		   && !flag_gnu89_inline)
815	    pedwarn ("inline function %q+D declared but never defined", p);
816
817	  goto common_symbol;
818
819	case VAR_DECL:
820	  /* Warnings for unused variables.  */
821	  if (!TREE_USED (p)
822	      && !TREE_NO_WARNING (p)
823	      && !DECL_IN_SYSTEM_HEADER (p)
824	      && DECL_NAME (p)
825	      && !DECL_ARTIFICIAL (p)
826	      && scope != file_scope
827	      && scope != external_scope)
828	    warning (OPT_Wunused_variable, "unused variable %q+D", p);
829
830	  if (b->inner_comp)
831	    {
832	      error ("type of array %q+D completed incompatibly with"
833		     " implicit initialization", p);
834	    }
835
836	  /* Fall through.  */
837	case TYPE_DECL:
838	case CONST_DECL:
839	common_symbol:
840	  /* All of these go in BLOCK_VARS, but only if this is the
841	     binding in the home scope.  */
842	  if (!b->nested)
843	    {
844	      TREE_CHAIN (p) = BLOCK_VARS (block);
845	      BLOCK_VARS (block) = p;
846	    }
847	  /* If this is the file scope, and we are processing more
848	     than one translation unit in this compilation, set
849	     DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
850	     This makes same_translation_unit_p work, and causes
851	     static declarations to be given disambiguating suffixes.  */
852	  if (scope == file_scope && num_in_fnames > 1)
853	    {
854	      DECL_CONTEXT (p) = context;
855	      if (TREE_CODE (p) == TYPE_DECL)
856		set_type_context (TREE_TYPE (p), context);
857	    }
858
859	  /* Fall through.  */
860	  /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
861	     already been put there by store_parm_decls.  Unused-
862	     parameter warnings are handled by function.c.
863	     error_mark_node obviously does not go in BLOCK_VARS and
864	     does not get unused-variable warnings.  */
865	case PARM_DECL:
866	case ERROR_MARK:
867	  /* It is possible for a decl not to have a name.  We get
868	     here with b->id NULL in this case.  */
869	  if (b->id)
870	    {
871	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
872	      I_SYMBOL_BINDING (b->id) = b->shadowed;
873	      if (b->shadowed && b->shadowed->type)
874		TREE_TYPE (b->shadowed->decl) = b->shadowed->type;
875	    }
876	  break;
877
878	default:
879	  gcc_unreachable ();
880	}
881    }
882
883
884  /* Dispose of the block that we just made inside some higher level.  */
885  if ((scope->function_body || scope == file_scope) && context)
886    {
887      DECL_INITIAL (context) = block;
888      BLOCK_SUPERCONTEXT (block) = context;
889    }
890  else if (scope->outer)
891    {
892      if (block)
893	SCOPE_LIST_APPEND (scope->outer, blocks, block);
894      /* If we did not make a block for the scope just exited, any
895	 blocks made for inner scopes must be carried forward so they
896	 will later become subblocks of something else.  */
897      else if (scope->blocks)
898	SCOPE_LIST_CONCAT (scope->outer, blocks, scope, blocks);
899    }
900
901  /* Pop the current scope, and free the structure for reuse.  */
902  current_scope = scope->outer;
903  if (scope->function_body)
904    current_function_scope = scope->outer_function;
905
906  memset (scope, 0, sizeof (struct c_scope));
907  scope->outer = scope_freelist;
908  scope_freelist = scope;
909
910  return block;
911}
912
913void
914push_file_scope (void)
915{
916  tree decl;
917
918  if (file_scope)
919    return;
920
921  push_scope ();
922  file_scope = current_scope;
923
924  start_fname_decls ();
925
926  for (decl = visible_builtins; decl; decl = TREE_CHAIN (decl))
927    bind (DECL_NAME (decl), decl, file_scope,
928	  /*invisible=*/false, /*nested=*/true);
929}
930
931void
932pop_file_scope (void)
933{
934  /* In case there were missing closebraces, get us back to the global
935     binding level.  */
936  while (current_scope != file_scope)
937    pop_scope ();
938
939  /* __FUNCTION__ is defined at file scope ("").  This
940     call may not be necessary as my tests indicate it
941     still works without it.  */
942  finish_fname_decls ();
943
944  /* This is the point to write out a PCH if we're doing that.
945     In that case we do not want to do anything else.  */
946  if (pch_file)
947    {
948      c_common_write_pch ();
949      return;
950    }
951
952  /* Pop off the file scope and close this translation unit.  */
953  pop_scope ();
954  file_scope = 0;
955
956  maybe_apply_pending_pragma_weaks ();
957  cgraph_finalize_compilation_unit ();
958}
959
960/* Insert BLOCK at the end of the list of subblocks of the current
961   scope.  This is used when a BIND_EXPR is expanded, to handle the
962   BLOCK node inside the BIND_EXPR.  */
963
964void
965insert_block (tree block)
966{
967  TREE_USED (block) = 1;
968  SCOPE_LIST_APPEND (current_scope, blocks, block);
969}
970
971/* Push a definition or a declaration of struct, union or enum tag "name".
972   "type" should be the type node.
973   We assume that the tag "name" is not already defined.
974
975   Note that the definition may really be just a forward reference.
976   In that case, the TYPE_SIZE will be zero.  */
977
978static void
979pushtag (tree name, tree type)
980{
981  /* Record the identifier as the type's name if it has none.  */
982  if (name && !TYPE_NAME (type))
983    TYPE_NAME (type) = name;
984  bind (name, type, current_scope, /*invisible=*/false, /*nested=*/false);
985
986  /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
987     tagged type we just added to the current scope.  This fake
988     NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
989     to output a representation of a tagged type, and it also gives
990     us a convenient place to record the "scope start" address for the
991     tagged type.  */
992
993  TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
994
995  /* An approximation for now, so we can tell this is a function-scope tag.
996     This will be updated in pop_scope.  */
997  TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
998}
999
1000/* Subroutine of compare_decls.  Allow harmless mismatches in return
1001   and argument types provided that the type modes match.  This function
1002   return a unified type given a suitable match, and 0 otherwise.  */
1003
1004static tree
1005match_builtin_function_types (tree newtype, tree oldtype)
1006{
1007  tree newrettype, oldrettype;
1008  tree newargs, oldargs;
1009  tree trytype, tryargs;
1010
1011  /* Accept the return type of the new declaration if same modes.  */
1012  oldrettype = TREE_TYPE (oldtype);
1013  newrettype = TREE_TYPE (newtype);
1014
1015  if (TYPE_MODE (oldrettype) != TYPE_MODE (newrettype))
1016    return 0;
1017
1018  oldargs = TYPE_ARG_TYPES (oldtype);
1019  newargs = TYPE_ARG_TYPES (newtype);
1020  tryargs = newargs;
1021
1022  while (oldargs || newargs)
1023    {
1024      if (!oldargs
1025	  || !newargs
1026	  || !TREE_VALUE (oldargs)
1027	  || !TREE_VALUE (newargs)
1028	  || TYPE_MODE (TREE_VALUE (oldargs))
1029	     != TYPE_MODE (TREE_VALUE (newargs)))
1030	return 0;
1031
1032      oldargs = TREE_CHAIN (oldargs);
1033      newargs = TREE_CHAIN (newargs);
1034    }
1035
1036  trytype = build_function_type (newrettype, tryargs);
1037  return build_type_attribute_variant (trytype, TYPE_ATTRIBUTES (oldtype));
1038}
1039
1040/* Subroutine of diagnose_mismatched_decls.  Check for function type
1041   mismatch involving an empty arglist vs a nonempty one and give clearer
1042   diagnostics.  */
1043static void
1044diagnose_arglist_conflict (tree newdecl, tree olddecl,
1045			   tree newtype, tree oldtype)
1046{
1047  tree t;
1048
1049  if (TREE_CODE (olddecl) != FUNCTION_DECL
1050      || !comptypes (TREE_TYPE (oldtype), TREE_TYPE (newtype))
1051      || !((TYPE_ARG_TYPES (oldtype) == 0 && DECL_INITIAL (olddecl) == 0)
1052	   ||
1053	   (TYPE_ARG_TYPES (newtype) == 0 && DECL_INITIAL (newdecl) == 0)))
1054    return;
1055
1056  t = TYPE_ARG_TYPES (oldtype);
1057  if (t == 0)
1058    t = TYPE_ARG_TYPES (newtype);
1059  for (; t; t = TREE_CHAIN (t))
1060    {
1061      tree type = TREE_VALUE (t);
1062
1063      if (TREE_CHAIN (t) == 0
1064	  && TYPE_MAIN_VARIANT (type) != void_type_node)
1065	{
1066	  inform ("a parameter list with an ellipsis can%'t match "
1067		  "an empty parameter name list declaration");
1068	  break;
1069	}
1070
1071      if (c_type_promotes_to (type) != type)
1072	{
1073	  inform ("an argument type that has a default promotion can%'t match "
1074		  "an empty parameter name list declaration");
1075	  break;
1076	}
1077    }
1078}
1079
1080/* Another subroutine of diagnose_mismatched_decls.  OLDDECL is an
1081   old-style function definition, NEWDECL is a prototype declaration.
1082   Diagnose inconsistencies in the argument list.  Returns TRUE if
1083   the prototype is compatible, FALSE if not.  */
1084static bool
1085validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype)
1086{
1087  tree newargs, oldargs;
1088  int i;
1089
1090#define END_OF_ARGLIST(t) ((t) == void_type_node)
1091
1092  oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype);
1093  newargs = TYPE_ARG_TYPES (newtype);
1094  i = 1;
1095
1096  for (;;)
1097    {
1098      tree oldargtype = TREE_VALUE (oldargs);
1099      tree newargtype = TREE_VALUE (newargs);
1100
1101      if (oldargtype == error_mark_node || newargtype == error_mark_node)
1102	return false;
1103
1104      oldargtype = TYPE_MAIN_VARIANT (oldargtype);
1105      newargtype = TYPE_MAIN_VARIANT (newargtype);
1106
1107      if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype))
1108	break;
1109
1110      /* Reaching the end of just one list means the two decls don't
1111	 agree on the number of arguments.  */
1112      if (END_OF_ARGLIST (oldargtype))
1113	{
1114	  error ("prototype for %q+D declares more arguments "
1115		 "than previous old-style definition", newdecl);
1116	  return false;
1117	}
1118      else if (END_OF_ARGLIST (newargtype))
1119	{
1120	  error ("prototype for %q+D declares fewer arguments "
1121		 "than previous old-style definition", newdecl);
1122	  return false;
1123	}
1124
1125      /* Type for passing arg must be consistent with that declared
1126	 for the arg.  */
1127      else if (!comptypes (oldargtype, newargtype))
1128	{
1129	  error ("prototype for %q+D declares argument %d"
1130		 " with incompatible type",
1131		 newdecl, i);
1132	  return false;
1133	}
1134
1135      oldargs = TREE_CHAIN (oldargs);
1136      newargs = TREE_CHAIN (newargs);
1137      i++;
1138    }
1139
1140  /* If we get here, no errors were found, but do issue a warning
1141     for this poor-style construct.  */
1142  warning (0, "prototype for %q+D follows non-prototype definition",
1143	   newdecl);
1144  return true;
1145#undef END_OF_ARGLIST
1146}
1147
1148/* Subroutine of diagnose_mismatched_decls.  Report the location of DECL,
1149   first in a pair of mismatched declarations, using the diagnostic
1150   function DIAG.  */
1151static void
1152locate_old_decl (tree decl, void (*diag)(const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2))
1153{
1154  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1155    ;
1156  else if (DECL_INITIAL (decl))
1157    diag (G_("previous definition of %q+D was here"), decl);
1158  else if (C_DECL_IMPLICIT (decl))
1159    diag (G_("previous implicit declaration of %q+D was here"), decl);
1160  else
1161    diag (G_("previous declaration of %q+D was here"), decl);
1162}
1163
1164/* Subroutine of duplicate_decls.  Compare NEWDECL to OLDDECL.
1165   Returns true if the caller should proceed to merge the two, false
1166   if OLDDECL should simply be discarded.  As a side effect, issues
1167   all necessary diagnostics for invalid or poor-style combinations.
1168   If it returns true, writes the types of NEWDECL and OLDDECL to
1169   *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1170   TREE_TYPE (NEWDECL, OLDDECL) respectively.  */
1171
1172static bool
1173diagnose_mismatched_decls (tree newdecl, tree olddecl,
1174			   tree *newtypep, tree *oldtypep)
1175{
1176  tree newtype, oldtype;
1177  bool pedwarned = false;
1178  bool warned = false;
1179  bool retval = true;
1180
1181#define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL)  \
1182				  && DECL_EXTERNAL (DECL))
1183
1184  /* If we have error_mark_node for either decl or type, just discard
1185     the previous decl - we're in an error cascade already.  */
1186  if (olddecl == error_mark_node || newdecl == error_mark_node)
1187    return false;
1188  *oldtypep = oldtype = TREE_TYPE (olddecl);
1189  *newtypep = newtype = TREE_TYPE (newdecl);
1190  if (oldtype == error_mark_node || newtype == error_mark_node)
1191    return false;
1192
1193  /* Two different categories of symbol altogether.  This is an error
1194     unless OLDDECL is a builtin.  OLDDECL will be discarded in any case.  */
1195  if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1196    {
1197      if (!(TREE_CODE (olddecl) == FUNCTION_DECL
1198	    && DECL_BUILT_IN (olddecl)
1199	    && !C_DECL_DECLARED_BUILTIN (olddecl)))
1200	{
1201	  error ("%q+D redeclared as different kind of symbol", newdecl);
1202	  locate_old_decl (olddecl, error);
1203	}
1204      else if (TREE_PUBLIC (newdecl))
1205	warning (0, "built-in function %q+D declared as non-function",
1206		 newdecl);
1207      else
1208	warning (OPT_Wshadow, "declaration of %q+D shadows "
1209		 "a built-in function", newdecl);
1210      return false;
1211    }
1212
1213  /* Enumerators have no linkage, so may only be declared once in a
1214     given scope.  */
1215  if (TREE_CODE (olddecl) == CONST_DECL)
1216    {
1217      error ("redeclaration of enumerator %q+D", newdecl);
1218      locate_old_decl (olddecl, error);
1219      return false;
1220    }
1221
1222  if (!comptypes (oldtype, newtype))
1223    {
1224      if (TREE_CODE (olddecl) == FUNCTION_DECL
1225	  && DECL_BUILT_IN (olddecl) && !C_DECL_DECLARED_BUILTIN (olddecl))
1226	{
1227	  /* Accept harmless mismatch in function types.
1228	     This is for the ffs and fprintf builtins.  */
1229	  tree trytype = match_builtin_function_types (newtype, oldtype);
1230
1231	  if (trytype && comptypes (newtype, trytype))
1232	    *oldtypep = oldtype = trytype;
1233	  else
1234	    {
1235	      /* If types don't match for a built-in, throw away the
1236		 built-in.  No point in calling locate_old_decl here, it
1237		 won't print anything.  */
1238	      warning (0, "conflicting types for built-in function %q+D",
1239		       newdecl);
1240	      return false;
1241	    }
1242	}
1243      else if (TREE_CODE (olddecl) == FUNCTION_DECL
1244	       && DECL_IS_BUILTIN (olddecl))
1245	{
1246	  /* A conflicting function declaration for a predeclared
1247	     function that isn't actually built in.  Objective C uses
1248	     these.  The new declaration silently overrides everything
1249	     but the volatility (i.e. noreturn) indication.  See also
1250	     below.  FIXME: Make Objective C use normal builtins.  */
1251	  TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1252	  return false;
1253	}
1254      /* Permit void foo (...) to match int foo (...) if the latter is
1255	 the definition and implicit int was used.  See
1256	 c-torture/compile/920625-2.c.  */
1257      else if (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl)
1258	       && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == void_type_node
1259	       && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == integer_type_node
1260	       && C_FUNCTION_IMPLICIT_INT (newdecl) && !DECL_INITIAL (olddecl))
1261	{
1262	  pedwarn ("conflicting types for %q+D", newdecl);
1263	  /* Make sure we keep void as the return type.  */
1264	  TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1265	  C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
1266	  pedwarned = true;
1267	}
1268      /* Permit void foo (...) to match an earlier call to foo (...) with
1269	 no declared type (thus, implicitly int).  */
1270      else if (TREE_CODE (newdecl) == FUNCTION_DECL
1271	       && TYPE_MAIN_VARIANT (TREE_TYPE (newtype)) == void_type_node
1272	       && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype)) == integer_type_node
1273	       && C_DECL_IMPLICIT (olddecl) && !DECL_INITIAL (olddecl))
1274	{
1275	  pedwarn ("conflicting types for %q+D", newdecl);
1276	  /* Make sure we keep void as the return type.  */
1277	  TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
1278	  pedwarned = true;
1279	}
1280      else
1281	{
1282	  if (TYPE_QUALS (newtype) != TYPE_QUALS (oldtype))
1283	    error ("conflicting type qualifiers for %q+D", newdecl);
1284	  else
1285	    error ("conflicting types for %q+D", newdecl);
1286	  diagnose_arglist_conflict (newdecl, olddecl, newtype, oldtype);
1287	  locate_old_decl (olddecl, error);
1288	  return false;
1289	}
1290    }
1291
1292  /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1293     but silently ignore the redeclaration if either is in a system
1294     header.  (Conflicting redeclarations were handled above.)  */
1295  if (TREE_CODE (newdecl) == TYPE_DECL)
1296    {
1297      if (DECL_IN_SYSTEM_HEADER (newdecl) || DECL_IN_SYSTEM_HEADER (olddecl))
1298	return true;  /* Allow OLDDECL to continue in use.  */
1299
1300      error ("redefinition of typedef %q+D", newdecl);
1301      locate_old_decl (olddecl, error);
1302      return false;
1303    }
1304
1305  /* Function declarations can either be 'static' or 'extern' (no
1306     qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1307     can never conflict with each other on account of linkage
1308     (6.2.2p4).  Multiple definitions are not allowed (6.9p3,5) but
1309     gnu89 mode permits two definitions if one is 'extern inline' and
1310     one is not.  The non- extern-inline definition supersedes the
1311     extern-inline definition.  */
1312
1313  else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1314    {
1315      /* If you declare a built-in function name as static, or
1316	 define the built-in with an old-style definition (so we
1317	 can't validate the argument list) the built-in definition is
1318	 overridden, but optionally warn this was a bad choice of name.  */
1319      if (DECL_BUILT_IN (olddecl)
1320	  && !C_DECL_DECLARED_BUILTIN (olddecl)
1321	  && (!TREE_PUBLIC (newdecl)
1322	      || (DECL_INITIAL (newdecl)
1323		  && !TYPE_ARG_TYPES (TREE_TYPE (newdecl)))))
1324	{
1325	  warning (OPT_Wshadow, "declaration of %q+D shadows "
1326		   "a built-in function", newdecl);
1327	  /* Discard the old built-in function.  */
1328	  return false;
1329	}
1330
1331      if (DECL_INITIAL (newdecl))
1332	{
1333	  if (DECL_INITIAL (olddecl))
1334	    {
1335	      /* If both decls are in the same TU and the new declaration
1336		 isn't overriding an extern inline reject the new decl.
1337		 In c99, no overriding is allowed in the same translation
1338		 unit.  */
1339	      if ((!DECL_EXTERN_INLINE (olddecl)
1340		   || DECL_EXTERN_INLINE (newdecl)
1341		   || (!flag_gnu89_inline
1342		       && (!DECL_DECLARED_INLINE_P (olddecl)
1343			   || !lookup_attribute ("gnu_inline",
1344						 DECL_ATTRIBUTES (olddecl)))
1345		       && (!DECL_DECLARED_INLINE_P (newdecl)
1346			   || !lookup_attribute ("gnu_inline",
1347						 DECL_ATTRIBUTES (newdecl))))
1348		  )
1349		  && same_translation_unit_p (newdecl, olddecl))
1350		{
1351		  error ("redefinition of %q+D", newdecl);
1352		  locate_old_decl (olddecl, error);
1353		  return false;
1354		}
1355	    }
1356	}
1357      /* If we have a prototype after an old-style function definition,
1358	 the argument types must be checked specially.  */
1359      else if (DECL_INITIAL (olddecl)
1360	       && !TYPE_ARG_TYPES (oldtype) && TYPE_ARG_TYPES (newtype)
1361	       && TYPE_ACTUAL_ARG_TYPES (oldtype)
1362	       && !validate_proto_after_old_defn (newdecl, newtype, oldtype))
1363	{
1364	  locate_old_decl (olddecl, error);
1365	  return false;
1366	}
1367      /* A non-static declaration (even an "extern") followed by a
1368	 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1369	 The same is true for a static forward declaration at block
1370	 scope followed by a non-static declaration/definition at file
1371	 scope.  Static followed by non-static at the same scope is
1372	 not undefined behavior, and is the most convenient way to get
1373	 some effects (see e.g.  what unwind-dw2-fde-glibc.c does to
1374	 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1375	 we do diagnose it if -Wtraditional.  */
1376      if (TREE_PUBLIC (olddecl) && !TREE_PUBLIC (newdecl))
1377	{
1378	  /* Two exceptions to the rule.  If olddecl is an extern
1379	     inline, or a predeclared function that isn't actually
1380	     built in, newdecl silently overrides olddecl.  The latter
1381	     occur only in Objective C; see also above.  (FIXME: Make
1382	     Objective C use normal builtins.)  */
1383	  if (!DECL_IS_BUILTIN (olddecl)
1384	      && !DECL_EXTERN_INLINE (olddecl))
1385	    {
1386	      error ("static declaration of %q+D follows "
1387		     "non-static declaration", newdecl);
1388	      locate_old_decl (olddecl, error);
1389	    }
1390	  return false;
1391	}
1392      else if (TREE_PUBLIC (newdecl) && !TREE_PUBLIC (olddecl))
1393	{
1394	  if (DECL_CONTEXT (olddecl))
1395	    {
1396	      error ("non-static declaration of %q+D follows "
1397		     "static declaration", newdecl);
1398	      locate_old_decl (olddecl, error);
1399	      return false;
1400	    }
1401	  else if (warn_traditional)
1402	    {
1403	      warning (OPT_Wtraditional, "non-static declaration of %q+D "
1404		       "follows static declaration", newdecl);
1405	      warned = true;
1406	    }
1407	}
1408
1409      /* Make sure gnu_inline attribute is either not present, or
1410	 present on all inline decls.  */
1411      if (DECL_DECLARED_INLINE_P (olddecl)
1412	  && DECL_DECLARED_INLINE_P (newdecl))
1413	{
1414	  bool newa = lookup_attribute ("gnu_inline",
1415					DECL_ATTRIBUTES (newdecl)) != NULL;
1416	  bool olda = lookup_attribute ("gnu_inline",
1417					DECL_ATTRIBUTES (olddecl)) != NULL;
1418	  if (newa != olda)
1419	    {
1420	      error ("%<gnu_inline%> attribute present on %q+D",
1421		     newa ? newdecl : olddecl);
1422	      error ("%Jbut not here", newa ? olddecl : newdecl);
1423	    }
1424	}
1425    }
1426  else if (TREE_CODE (newdecl) == VAR_DECL)
1427    {
1428      /* Only variables can be thread-local, and all declarations must
1429	 agree on this property.  */
1430      if (C_DECL_THREADPRIVATE_P (olddecl) && !DECL_THREAD_LOCAL_P (newdecl))
1431	{
1432	  /* Nothing to check.  Since OLDDECL is marked threadprivate
1433	     and NEWDECL does not have a thread-local attribute, we
1434	     will merge the threadprivate attribute into NEWDECL.  */
1435	  ;
1436	}
1437      else if (DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl))
1438	{
1439	  if (DECL_THREAD_LOCAL_P (newdecl))
1440	    error ("thread-local declaration of %q+D follows "
1441		   "non-thread-local declaration", newdecl);
1442	  else
1443	    error ("non-thread-local declaration of %q+D follows "
1444		   "thread-local declaration", newdecl);
1445
1446	  locate_old_decl (olddecl, error);
1447	  return false;
1448	}
1449
1450      /* Multiple initialized definitions are not allowed (6.9p3,5).  */
1451      if (DECL_INITIAL (newdecl) && DECL_INITIAL (olddecl))
1452	{
1453	  error ("redefinition of %q+D", newdecl);
1454	  locate_old_decl (olddecl, error);
1455	  return false;
1456	}
1457
1458      /* Objects declared at file scope: if the first declaration had
1459	 external linkage (even if it was an external reference) the
1460	 second must have external linkage as well, or the behavior is
1461	 undefined.  If the first declaration had internal linkage, then
1462	 the second must too, or else be an external reference (in which
1463	 case the composite declaration still has internal linkage).
1464	 As for function declarations, we warn about the static-then-
1465	 extern case only for -Wtraditional.  See generally 6.2.2p3-5,7.  */
1466      if (DECL_FILE_SCOPE_P (newdecl)
1467	  && TREE_PUBLIC (newdecl) != TREE_PUBLIC (olddecl))
1468	{
1469	  if (DECL_EXTERNAL (newdecl))
1470	    {
1471	      if (!DECL_FILE_SCOPE_P (olddecl))
1472		{
1473		  error ("extern declaration of %q+D follows "
1474			 "declaration with no linkage", newdecl);
1475		  locate_old_decl (olddecl, error);
1476		  return false;
1477		}
1478	      else if (warn_traditional)
1479		{
1480		  warning (OPT_Wtraditional, "non-static declaration of %q+D "
1481			   "follows static declaration", newdecl);
1482		  warned = true;
1483		}
1484	    }
1485	  else
1486	    {
1487	      if (TREE_PUBLIC (newdecl))
1488		error ("non-static declaration of %q+D follows "
1489		       "static declaration", newdecl);
1490	      else
1491		error ("static declaration of %q+D follows "
1492		       "non-static declaration", newdecl);
1493
1494	      locate_old_decl (olddecl, error);
1495	      return false;
1496	    }
1497	}
1498      /* Two objects with the same name declared at the same block
1499	 scope must both be external references (6.7p3).  */
1500      else if (!DECL_FILE_SCOPE_P (newdecl))
1501	{
1502	  if (DECL_EXTERNAL (newdecl))
1503	    {
1504	      /* Extern with initializer at block scope, which will
1505		 already have received an error.  */
1506	    }
1507	  else if (DECL_EXTERNAL (olddecl))
1508	    {
1509	      error ("declaration of %q+D with no linkage follows "
1510		     "extern declaration", newdecl);
1511	      locate_old_decl (olddecl, error);
1512	    }
1513	  else
1514	    {
1515	      error ("redeclaration of %q+D with no linkage", newdecl);
1516	      locate_old_decl (olddecl, error);
1517	    }
1518
1519	  return false;
1520	}
1521    }
1522
1523  /* warnings */
1524  /* All decls must agree on a visibility.  */
1525  if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl), TS_DECL_WITH_VIS)
1526      && DECL_VISIBILITY_SPECIFIED (newdecl) && DECL_VISIBILITY_SPECIFIED (olddecl)
1527      && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
1528    {
1529      warning (0, "redeclaration of %q+D with different visibility "
1530	       "(old visibility preserved)", newdecl);
1531      warned = true;
1532    }
1533
1534  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1535    {
1536      /* Diagnose inline __attribute__ ((noinline)) which is silly.  */
1537      if (DECL_DECLARED_INLINE_P (newdecl)
1538	  && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1539	{
1540	  warning (OPT_Wattributes, "inline declaration of %qD follows "
1541		   "declaration with attribute noinline", newdecl);
1542	  warned = true;
1543	}
1544      else if (DECL_DECLARED_INLINE_P (olddecl)
1545	       && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1546	{
1547	  warning (OPT_Wattributes, "declaration of %q+D with attribute "
1548		   "noinline follows inline declaration ", newdecl);
1549	  warned = true;
1550	}
1551
1552      /* Inline declaration after use or definition.
1553	 ??? Should we still warn about this now we have unit-at-a-time
1554	 mode and can get it right?
1555	 Definitely don't complain if the decls are in different translation
1556	 units.
1557	 C99 permits this, so don't warn in that case.  (The function
1558	 may not be inlined everywhere in function-at-a-time mode, but
1559	 we still shouldn't warn.)  */
1560      if (DECL_DECLARED_INLINE_P (newdecl) && !DECL_DECLARED_INLINE_P (olddecl)
1561	  && same_translation_unit_p (olddecl, newdecl)
1562	  && flag_gnu89_inline)
1563	{
1564	  if (TREE_USED (olddecl))
1565	    {
1566	      warning (0, "%q+D declared inline after being called", olddecl);
1567	      warned = true;
1568	    }
1569	  else if (DECL_INITIAL (olddecl))
1570	    {
1571	      warning (0, "%q+D declared inline after its definition", olddecl);
1572	      warned = true;
1573	    }
1574	}
1575    }
1576  else /* PARM_DECL, VAR_DECL */
1577    {
1578      /* Redeclaration of a parameter is a constraint violation (this is
1579	 not explicitly stated, but follows from C99 6.7p3 [no more than
1580	 one declaration of the same identifier with no linkage in the
1581	 same scope, except type tags] and 6.2.2p6 [parameters have no
1582	 linkage]).  We must check for a forward parameter declaration,
1583	 indicated by TREE_ASM_WRITTEN on the old declaration - this is
1584	 an extension, the mandatory diagnostic for which is handled by
1585	 mark_forward_parm_decls.  */
1586
1587      if (TREE_CODE (newdecl) == PARM_DECL
1588	  && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
1589	{
1590	  error ("redefinition of parameter %q+D", newdecl);
1591	  locate_old_decl (olddecl, error);
1592	  return false;
1593	}
1594    }
1595
1596  /* Optional warning for completely redundant decls.  */
1597  if (!warned && !pedwarned
1598      && warn_redundant_decls
1599      /* Don't warn about a function declaration followed by a
1600	 definition.  */
1601      && !(TREE_CODE (newdecl) == FUNCTION_DECL
1602	   && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
1603      /* Don't warn about redundant redeclarations of builtins.  */
1604      && !(TREE_CODE (newdecl) == FUNCTION_DECL
1605	   && !DECL_BUILT_IN (newdecl)
1606	   && DECL_BUILT_IN (olddecl)
1607	   && !C_DECL_DECLARED_BUILTIN (olddecl))
1608      /* Don't warn about an extern followed by a definition.  */
1609      && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
1610      /* Don't warn about forward parameter decls.  */
1611      && !(TREE_CODE (newdecl) == PARM_DECL
1612	   && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1613      /* Don't warn about a variable definition following a declaration.  */
1614      && !(TREE_CODE (newdecl) == VAR_DECL
1615	   && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
1616    {
1617      warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
1618	       newdecl);
1619      warned = true;
1620    }
1621
1622  /* Report location of previous decl/defn in a consistent manner.  */
1623  if (warned || pedwarned)
1624    locate_old_decl (olddecl, pedwarned ? pedwarn : warning0);
1625
1626#undef DECL_EXTERN_INLINE
1627
1628  return retval;
1629}
1630
1631/* Subroutine of duplicate_decls.  NEWDECL has been found to be
1632   consistent with OLDDECL, but carries new information.  Merge the
1633   new information into OLDDECL.  This function issues no
1634   diagnostics.  */
1635
1636static void
1637merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
1638{
1639  bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1640			    && DECL_INITIAL (newdecl) != 0);
1641  bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
1642			   && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0);
1643  bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
1644			   && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) != 0);
1645  bool extern_changed = false;
1646
1647  /* For real parm decl following a forward decl, rechain the old decl
1648     in its new location and clear TREE_ASM_WRITTEN (it's not a
1649     forward decl anymore).  */
1650  if (TREE_CODE (newdecl) == PARM_DECL
1651      && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1652    {
1653      struct c_binding *b, **here;
1654
1655      for (here = &current_scope->bindings; *here; here = &(*here)->prev)
1656	if ((*here)->decl == olddecl)
1657	  goto found;
1658      gcc_unreachable ();
1659
1660    found:
1661      b = *here;
1662      *here = b->prev;
1663      b->prev = current_scope->bindings;
1664      current_scope->bindings = b;
1665
1666      TREE_ASM_WRITTEN (olddecl) = 0;
1667    }
1668
1669  DECL_ATTRIBUTES (newdecl)
1670    = targetm.merge_decl_attributes (olddecl, newdecl);
1671
1672  /* Merge the data types specified in the two decls.  */
1673  TREE_TYPE (newdecl)
1674    = TREE_TYPE (olddecl)
1675    = composite_type (newtype, oldtype);
1676
1677  /* Lay the type out, unless already done.  */
1678  if (!comptypes (oldtype, TREE_TYPE (newdecl)))
1679    {
1680      if (TREE_TYPE (newdecl) != error_mark_node)
1681	layout_type (TREE_TYPE (newdecl));
1682      if (TREE_CODE (newdecl) != FUNCTION_DECL
1683	  && TREE_CODE (newdecl) != TYPE_DECL
1684	  && TREE_CODE (newdecl) != CONST_DECL)
1685	layout_decl (newdecl, 0);
1686    }
1687  else
1688    {
1689      /* Since the type is OLDDECL's, make OLDDECL's size go with.  */
1690      DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1691      DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
1692      DECL_MODE (newdecl) = DECL_MODE (olddecl);
1693      if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1694	{
1695	  DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1696	  DECL_USER_ALIGN (newdecl) |= DECL_ALIGN (olddecl);
1697	}
1698    }
1699
1700
1701  /* Merge the type qualifiers.  */
1702  if (TREE_READONLY (newdecl))
1703    TREE_READONLY (olddecl) = 1;
1704
1705  if (TREE_THIS_VOLATILE (newdecl))
1706    TREE_THIS_VOLATILE (olddecl) = 1;
1707
1708  /* Merge deprecatedness.  */
1709  if (TREE_DEPRECATED (newdecl))
1710    TREE_DEPRECATED (olddecl) = 1;
1711
1712  /* Keep source location of definition rather than declaration and of
1713     prototype rather than non-prototype unless that prototype is
1714     built-in.  */
1715  if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
1716      || (old_is_prototype && !new_is_prototype
1717	  && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
1718    DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1719
1720  /* Merge the initialization information.  */
1721   if (DECL_INITIAL (newdecl) == 0)
1722    DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1723
1724  /* Merge the threadprivate attribute.  */
1725  if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
1726    {
1727      DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1728      C_DECL_THREADPRIVATE_P (newdecl) = 1;
1729    }
1730
1731  if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
1732    {
1733      /* Merge the unused-warning information.  */
1734      if (DECL_IN_SYSTEM_HEADER (olddecl))
1735	DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1736      else if (DECL_IN_SYSTEM_HEADER (newdecl))
1737	DECL_IN_SYSTEM_HEADER (olddecl) = 1;
1738
1739      /* Merge the section attribute.
1740	 We want to issue an error if the sections conflict but that
1741	 must be done later in decl_attributes since we are called
1742	 before attributes are assigned.  */
1743      if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1744	DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1745
1746      /* Copy the assembler name.
1747	 Currently, it can only be defined in the prototype.  */
1748      COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1749
1750      /* Use visibility of whichever declaration had it specified */
1751      if (DECL_VISIBILITY_SPECIFIED (olddecl))
1752	{
1753	  DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1754	  DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1755	}
1756
1757      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1758	{
1759	  DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
1760	  DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1761	  DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1762	  DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1763	    |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1764	  TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1765	  TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1766	  DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1767	  DECL_IS_PURE (newdecl) |= DECL_IS_PURE (olddecl);
1768	  DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
1769	}
1770
1771      /* Merge the storage class information.  */
1772      merge_weak (newdecl, olddecl);
1773
1774      /* For functions, static overrides non-static.  */
1775      if (TREE_CODE (newdecl) == FUNCTION_DECL)
1776	{
1777	  TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1778	  /* This is since we don't automatically
1779	     copy the attributes of NEWDECL into OLDDECL.  */
1780	  TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1781	  /* If this clears `static', clear it in the identifier too.  */
1782	  if (!TREE_PUBLIC (olddecl))
1783	    TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1784	}
1785    }
1786
1787  /* In c99, 'extern' declaration before (or after) 'inline' means this
1788     function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
1789     is present.  */
1790  if (TREE_CODE (newdecl) == FUNCTION_DECL
1791      && !flag_gnu89_inline
1792      && (DECL_DECLARED_INLINE_P (newdecl)
1793	  || DECL_DECLARED_INLINE_P (olddecl))
1794      && (!DECL_DECLARED_INLINE_P (newdecl)
1795	  || !DECL_DECLARED_INLINE_P (olddecl)
1796	  || !DECL_EXTERNAL (olddecl))
1797      && DECL_EXTERNAL (newdecl)
1798      && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl)))
1799    DECL_EXTERNAL (newdecl) = 0;
1800
1801  if (DECL_EXTERNAL (newdecl))
1802    {
1803      TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1804      DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1805
1806      /* An extern decl does not override previous storage class.  */
1807      TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1808      if (!DECL_EXTERNAL (newdecl))
1809	{
1810	  DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1811	  DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1812	}
1813    }
1814  else
1815    {
1816      TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1817      TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1818    }
1819
1820  if (TREE_CODE (newdecl) == FUNCTION_DECL)
1821    {
1822      /* If we're redefining a function previously defined as extern
1823	 inline, make sure we emit debug info for the inline before we
1824	 throw it away, in case it was inlined into a function that
1825	 hasn't been written out yet.  */
1826      if (new_is_definition && DECL_INITIAL (olddecl))
1827	{
1828	  if (TREE_USED (olddecl)
1829	      /* In unit-at-a-time mode we never inline re-defined extern
1830		 inline functions.  */
1831	      && !flag_unit_at_a_time
1832	      && cgraph_function_possibly_inlined_p (olddecl))
1833	    (*debug_hooks->outlining_inline_function) (olddecl);
1834
1835	  /* The new defn must not be inline.  */
1836	  DECL_INLINE (newdecl) = 0;
1837	  DECL_UNINLINABLE (newdecl) = 1;
1838	}
1839      else
1840	{
1841	  /* If either decl says `inline', this fn is inline, unless
1842	     its definition was passed already.  */
1843	  if (DECL_DECLARED_INLINE_P (newdecl)
1844	      || DECL_DECLARED_INLINE_P (olddecl))
1845	    DECL_DECLARED_INLINE_P (newdecl) = 1;
1846
1847	  DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1848	    = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1849	}
1850
1851      if (DECL_BUILT_IN (olddecl))
1852	{
1853	  /* If redeclaring a builtin function, it stays built in.
1854	     But it gets tagged as having been declared.  */
1855	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1856	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1857	  C_DECL_DECLARED_BUILTIN (newdecl) = 1;
1858	  if (new_is_prototype)
1859	    C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
1860	  else
1861	    C_DECL_BUILTIN_PROTOTYPE (newdecl)
1862	      = C_DECL_BUILTIN_PROTOTYPE (olddecl);
1863	}
1864
1865      /* Also preserve various other info from the definition.  */
1866      if (!new_is_definition)
1867	{
1868	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1869	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1870	  DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1871	  DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1872	  DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1873
1874	  /* Set DECL_INLINE on the declaration if we've got a body
1875	     from which to instantiate.  */
1876	  if (DECL_INLINE (olddecl) && !DECL_UNINLINABLE (newdecl))
1877	    {
1878	      DECL_INLINE (newdecl) = 1;
1879	      DECL_ABSTRACT_ORIGIN (newdecl)
1880		= DECL_ABSTRACT_ORIGIN (olddecl);
1881	    }
1882	}
1883      else
1884	{
1885	  /* If a previous declaration said inline, mark the
1886	     definition as inlinable.  */
1887	  if (DECL_DECLARED_INLINE_P (newdecl)
1888	      && !DECL_UNINLINABLE (newdecl))
1889	    DECL_INLINE (newdecl) = 1;
1890	}
1891    }
1892
1893   extern_changed = DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl);
1894
1895  /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1896     But preserve OLDDECL's DECL_UID and DECL_CONTEXT.  */
1897  {
1898    unsigned olddecl_uid = DECL_UID (olddecl);
1899    tree olddecl_context = DECL_CONTEXT (olddecl);
1900
1901    memcpy ((char *) olddecl + sizeof (struct tree_common),
1902	    (char *) newdecl + sizeof (struct tree_common),
1903	    sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1904    switch (TREE_CODE (olddecl))
1905      {
1906      case FIELD_DECL:
1907      case VAR_DECL:
1908      case PARM_DECL:
1909      case LABEL_DECL:
1910      case RESULT_DECL:
1911      case CONST_DECL:
1912      case TYPE_DECL:
1913      case FUNCTION_DECL:
1914	memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1915		(char *) newdecl + sizeof (struct tree_decl_common),
1916		tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
1917	break;
1918
1919      default:
1920
1921	memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1922		(char *) newdecl + sizeof (struct tree_decl_common),
1923		sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
1924      }
1925    DECL_UID (olddecl) = olddecl_uid;
1926    DECL_CONTEXT (olddecl) = olddecl_context;
1927  }
1928
1929  /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1930     so that encode_section_info has a chance to look at the new decl
1931     flags and attributes.  */
1932  if (DECL_RTL_SET_P (olddecl)
1933      && (TREE_CODE (olddecl) == FUNCTION_DECL
1934	  || (TREE_CODE (olddecl) == VAR_DECL
1935	      && TREE_STATIC (olddecl))))
1936    make_decl_rtl (olddecl);
1937
1938  /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
1939     and the definition is coming from the old version, cgraph needs
1940     to be called again.  */
1941  if (extern_changed && !new_is_definition
1942      && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl))
1943    cgraph_finalize_function (olddecl, false);
1944}
1945
1946/* Handle when a new declaration NEWDECL has the same name as an old
1947   one OLDDECL in the same binding contour.  Prints an error message
1948   if appropriate.
1949
1950   If safely possible, alter OLDDECL to look like NEWDECL, and return
1951   true.  Otherwise, return false.  */
1952
1953static bool
1954duplicate_decls (tree newdecl, tree olddecl)
1955{
1956  tree newtype = NULL, oldtype = NULL;
1957
1958  if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
1959    {
1960      /* Avoid `unused variable' and other warnings warnings for OLDDECL.  */
1961      TREE_NO_WARNING (olddecl) = 1;
1962      return false;
1963    }
1964
1965  merge_decls (newdecl, olddecl, newtype, oldtype);
1966  return true;
1967}
1968
1969
1970/* Check whether decl-node NEW_DECL shadows an existing declaration.  */
1971static void
1972warn_if_shadowing (tree new_decl)
1973{
1974  struct c_binding *b;
1975
1976  /* Shadow warnings wanted?  */
1977  if (!warn_shadow
1978      /* No shadow warnings for internally generated vars.  */
1979      || DECL_IS_BUILTIN (new_decl)
1980      /* No shadow warnings for vars made for inlining.  */
1981      || DECL_FROM_INLINE (new_decl))
1982    return;
1983
1984  /* Is anything being shadowed?  Invisible decls do not count.  */
1985  for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
1986    if (b->decl && b->decl != new_decl && !b->invisible)
1987      {
1988	tree old_decl = b->decl;
1989
1990	if (old_decl == error_mark_node)
1991	  {
1992	    warning (OPT_Wshadow, "declaration of %q+D shadows previous "
1993		     "non-variable", new_decl);
1994	    break;
1995	  }
1996	else if (TREE_CODE (old_decl) == PARM_DECL)
1997	  warning (OPT_Wshadow, "declaration of %q+D shadows a parameter",
1998		   new_decl);
1999	else if (DECL_FILE_SCOPE_P (old_decl))
2000	  warning (OPT_Wshadow, "declaration of %q+D shadows a global "
2001		   "declaration", new_decl);
2002	else if (TREE_CODE (old_decl) == FUNCTION_DECL
2003		 && DECL_BUILT_IN (old_decl))
2004	  {
2005	    warning (OPT_Wshadow, "declaration of %q+D shadows "
2006		     "a built-in function", new_decl);
2007	    break;
2008	  }
2009	else
2010	  warning (OPT_Wshadow, "declaration of %q+D shadows a previous local",
2011		   new_decl);
2012
2013	warning (OPT_Wshadow, "%Jshadowed declaration is here", old_decl);
2014
2015	break;
2016      }
2017}
2018
2019
2020/* Subroutine of pushdecl.
2021
2022   X is a TYPE_DECL for a typedef statement.  Create a brand new
2023   ..._TYPE node (which will be just a variant of the existing
2024   ..._TYPE node with identical properties) and then install X
2025   as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
2026
2027   The whole point here is to end up with a situation where each
2028   and every ..._TYPE node the compiler creates will be uniquely
2029   associated with AT MOST one node representing a typedef name.
2030   This way, even though the compiler substitutes corresponding
2031   ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
2032   early on, later parts of the compiler can always do the reverse
2033   translation and get back the corresponding typedef name.  For
2034   example, given:
2035
2036	typedef struct S MY_TYPE;
2037	MY_TYPE object;
2038
2039   Later parts of the compiler might only know that `object' was of
2040   type `struct S' if it were not for code just below.  With this
2041   code however, later parts of the compiler see something like:
2042
2043	struct S' == struct S
2044	typedef struct S' MY_TYPE;
2045	struct S' object;
2046
2047    And they can then deduce (from the node for type struct S') that
2048    the original object declaration was:
2049
2050		MY_TYPE object;
2051
2052    Being able to do this is important for proper support of protoize,
2053    and also for generating precise symbolic debugging information
2054    which takes full account of the programmer's (typedef) vocabulary.
2055
2056    Obviously, we don't want to generate a duplicate ..._TYPE node if
2057    the TYPE_DECL node that we are now processing really represents a
2058    standard built-in type.
2059
2060    Since all standard types are effectively declared at line zero
2061    in the source file, we can easily check to see if we are working
2062    on a standard type by checking the current value of lineno.  */
2063
2064static void
2065clone_underlying_type (tree x)
2066{
2067  if (DECL_IS_BUILTIN (x))
2068    {
2069      if (TYPE_NAME (TREE_TYPE (x)) == 0)
2070	TYPE_NAME (TREE_TYPE (x)) = x;
2071    }
2072  else if (TREE_TYPE (x) != error_mark_node
2073	   && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
2074    {
2075      tree tt = TREE_TYPE (x);
2076      DECL_ORIGINAL_TYPE (x) = tt;
2077      tt = build_variant_type_copy (tt);
2078      TYPE_NAME (tt) = x;
2079      TREE_USED (tt) = TREE_USED (x);
2080      TREE_TYPE (x) = tt;
2081    }
2082}
2083
2084/* Record a decl-node X as belonging to the current lexical scope.
2085   Check for errors (such as an incompatible declaration for the same
2086   name already seen in the same scope).
2087
2088   Returns either X or an old decl for the same name.
2089   If an old decl is returned, it may have been smashed
2090   to agree with what X says.  */
2091
2092tree
2093pushdecl (tree x)
2094{
2095  tree name = DECL_NAME (x);
2096  struct c_scope *scope = current_scope;
2097  struct c_binding *b;
2098  bool nested = false;
2099
2100  /* Functions need the lang_decl data.  */
2101  if (TREE_CODE (x) == FUNCTION_DECL && !DECL_LANG_SPECIFIC (x))
2102    DECL_LANG_SPECIFIC (x) = GGC_CNEW (struct lang_decl);
2103
2104  /* Must set DECL_CONTEXT for everything not at file scope or
2105     DECL_FILE_SCOPE_P won't work.  Local externs don't count
2106     unless they have initializers (which generate code).  */
2107  if (current_function_decl
2108      && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2109	  || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2110    DECL_CONTEXT (x) = current_function_decl;
2111
2112  /* If this is of variably modified type, prevent jumping into its
2113     scope.  */
2114  if ((TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == TYPE_DECL)
2115      && variably_modified_type_p (TREE_TYPE (x), NULL_TREE))
2116    c_begin_vm_scope (scope->depth);
2117
2118  /* Anonymous decls are just inserted in the scope.  */
2119  if (!name)
2120    {
2121      bind (name, x, scope, /*invisible=*/false, /*nested=*/false);
2122      return x;
2123    }
2124
2125  /* First, see if there is another declaration with the same name in
2126     the current scope.  If there is, duplicate_decls may do all the
2127     work for us.  If duplicate_decls returns false, that indicates
2128     two incompatible decls in the same scope; we are to silently
2129     replace the old one (duplicate_decls has issued all appropriate
2130     diagnostics).  In particular, we should not consider possible
2131     duplicates in the external scope, or shadowing.  */
2132  b = I_SYMBOL_BINDING (name);
2133  if (b && B_IN_SCOPE (b, scope))
2134    {
2135      struct c_binding *b_ext, *b_use;
2136      tree type = TREE_TYPE (x);
2137      tree visdecl = b->decl;
2138      tree vistype = TREE_TYPE (visdecl);
2139      if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2140	  && COMPLETE_TYPE_P (TREE_TYPE (x)))
2141	b->inner_comp = false;
2142      b_use = b;
2143      b_ext = b;
2144      /* If this is an external linkage declaration, we should check
2145	 for compatibility with the type in the external scope before
2146	 setting the type at this scope based on the visible
2147	 information only.  */
2148      if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2149	{
2150	  while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2151	    b_ext = b_ext->shadowed;
2152	  if (b_ext)
2153	    {
2154	      b_use = b_ext;
2155	      if (b_use->type)
2156		TREE_TYPE (b_use->decl) = b_use->type;
2157	    }
2158	}
2159      if (duplicate_decls (x, b_use->decl))
2160	{
2161	  if (b_use != b)
2162	    {
2163	      /* Save the updated type in the external scope and
2164		 restore the proper type for this scope.  */
2165	      tree thistype;
2166	      if (comptypes (vistype, type))
2167		thistype = composite_type (vistype, type);
2168	      else
2169		thistype = TREE_TYPE (b_use->decl);
2170	      b_use->type = TREE_TYPE (b_use->decl);
2171	      if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2172		  && DECL_BUILT_IN (b_use->decl))
2173		thistype
2174		  = build_type_attribute_variant (thistype,
2175						  TYPE_ATTRIBUTES
2176						  (b_use->type));
2177	      TREE_TYPE (b_use->decl) = thistype;
2178	    }
2179	  return b_use->decl;
2180	}
2181      else
2182	goto skip_external_and_shadow_checks;
2183    }
2184
2185  /* All declarations with external linkage, and all external
2186     references, go in the external scope, no matter what scope is
2187     current.  However, the binding in that scope is ignored for
2188     purposes of normal name lookup.  A separate binding structure is
2189     created in the requested scope; this governs the normal
2190     visibility of the symbol.
2191
2192     The binding in the externals scope is used exclusively for
2193     detecting duplicate declarations of the same object, no matter
2194     what scope they are in; this is what we do here.  (C99 6.2.7p2:
2195     All declarations that refer to the same object or function shall
2196     have compatible type; otherwise, the behavior is undefined.)  */
2197  if (DECL_EXTERNAL (x) || scope == file_scope)
2198    {
2199      tree type = TREE_TYPE (x);
2200      tree vistype = 0;
2201      tree visdecl = 0;
2202      bool type_saved = false;
2203      if (b && !B_IN_EXTERNAL_SCOPE (b)
2204	  && (TREE_CODE (b->decl) == FUNCTION_DECL
2205	      || TREE_CODE (b->decl) == VAR_DECL)
2206	  && DECL_FILE_SCOPE_P (b->decl))
2207	{
2208	  visdecl = b->decl;
2209	  vistype = TREE_TYPE (visdecl);
2210	}
2211      if (scope != file_scope
2212	  && !DECL_IN_SYSTEM_HEADER (x))
2213	warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2214
2215      while (b && !B_IN_EXTERNAL_SCOPE (b))
2216	{
2217	  /* If this decl might be modified, save its type.  This is
2218	     done here rather than when the decl is first bound
2219	     because the type may change after first binding, through
2220	     being completed or through attributes being added.  If we
2221	     encounter multiple such decls, only the first should have
2222	     its type saved; the others will already have had their
2223	     proper types saved and the types will not have changed as
2224	     their scopes will not have been re-entered.  */
2225	  if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2226	    {
2227	      b->type = TREE_TYPE (b->decl);
2228	      type_saved = true;
2229	    }
2230	  if (B_IN_FILE_SCOPE (b)
2231	      && TREE_CODE (b->decl) == VAR_DECL
2232	      && TREE_STATIC (b->decl)
2233	      && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2234	      && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2235	      && TREE_CODE (type) == ARRAY_TYPE
2236	      && TYPE_DOMAIN (type)
2237	      && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2238	      && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2239	    {
2240	      /* Array type completed in inner scope, which should be
2241		 diagnosed if the completion does not have size 1 and
2242		 it does not get completed in the file scope.  */
2243	      b->inner_comp = true;
2244	    }
2245	  b = b->shadowed;
2246	}
2247
2248      /* If a matching external declaration has been found, set its
2249	 type to the composite of all the types of that declaration.
2250	 After the consistency checks, it will be reset to the
2251	 composite of the visible types only.  */
2252      if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2253	  && b->type)
2254	TREE_TYPE (b->decl) = b->type;
2255
2256      /* The point of the same_translation_unit_p check here is,
2257	 we want to detect a duplicate decl for a construct like
2258	 foo() { extern bar(); } ... static bar();  but not if
2259	 they are in different translation units.  In any case,
2260	 the static does not go in the externals scope.  */
2261      if (b
2262	  && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2263	  && duplicate_decls (x, b->decl))
2264	{
2265	  tree thistype;
2266	  if (vistype)
2267	    {
2268	      if (comptypes (vistype, type))
2269		thistype = composite_type (vistype, type);
2270	      else
2271		thistype = TREE_TYPE (b->decl);
2272	    }
2273	  else
2274	    thistype = type;
2275	  b->type = TREE_TYPE (b->decl);
2276	  if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2277	    thistype
2278	      = build_type_attribute_variant (thistype,
2279					      TYPE_ATTRIBUTES (b->type));
2280	  TREE_TYPE (b->decl) = thistype;
2281	  bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true);
2282	  return b->decl;
2283	}
2284      else if (TREE_PUBLIC (x))
2285	{
2286	  if (visdecl && !b && duplicate_decls (x, visdecl))
2287	    {
2288	      /* An external declaration at block scope referring to a
2289		 visible entity with internal linkage.  The composite
2290		 type will already be correct for this scope, so we
2291		 just need to fall through to make the declaration in
2292		 this scope.  */
2293	      nested = true;
2294	      x = visdecl;
2295	    }
2296	  else
2297	    {
2298	      bind (name, x, external_scope, /*invisible=*/true,
2299		    /*nested=*/false);
2300	      nested = true;
2301	    }
2302	}
2303    }
2304
2305  if (TREE_CODE (x) != PARM_DECL)
2306    warn_if_shadowing (x);
2307
2308 skip_external_and_shadow_checks:
2309  if (TREE_CODE (x) == TYPE_DECL)
2310    clone_underlying_type (x);
2311
2312  bind (name, x, scope, /*invisible=*/false, nested);
2313
2314  /* If x's type is incomplete because it's based on a
2315     structure or union which has not yet been fully declared,
2316     attach it to that structure or union type, so we can go
2317     back and complete the variable declaration later, if the
2318     structure or union gets fully declared.
2319
2320     If the input is erroneous, we can have error_mark in the type
2321     slot (e.g. "f(void a, ...)") - that doesn't count as an
2322     incomplete type.  */
2323  if (TREE_TYPE (x) != error_mark_node
2324      && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2325    {
2326      tree element = TREE_TYPE (x);
2327
2328      while (TREE_CODE (element) == ARRAY_TYPE)
2329	element = TREE_TYPE (element);
2330      element = TYPE_MAIN_VARIANT (element);
2331
2332      if ((TREE_CODE (element) == RECORD_TYPE
2333	   || TREE_CODE (element) == UNION_TYPE)
2334	  && (TREE_CODE (x) != TYPE_DECL
2335	      || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2336	  && !COMPLETE_TYPE_P (element))
2337	C_TYPE_INCOMPLETE_VARS (element)
2338	  = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2339    }
2340  return x;
2341}
2342
2343/* Record X as belonging to file scope.
2344   This is used only internally by the Objective-C front end,
2345   and is limited to its needs.  duplicate_decls is not called;
2346   if there is any preexisting decl for this identifier, it is an ICE.  */
2347
2348tree
2349pushdecl_top_level (tree x)
2350{
2351  tree name;
2352  bool nested = false;
2353  gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2354
2355  name = DECL_NAME (x);
2356
2357 gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2358
2359  if (TREE_PUBLIC (x))
2360    {
2361      bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false);
2362      nested = true;
2363    }
2364  if (file_scope)
2365    bind (name, x, file_scope, /*invisible=*/false, nested);
2366
2367  return x;
2368}
2369
2370static void
2371implicit_decl_warning (tree id, tree olddecl)
2372{
2373  void (*diag) (const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2);
2374  switch (mesg_implicit_function_declaration)
2375    {
2376    case 0: return;
2377    case 1: diag = warning0; break;
2378    case 2: diag = error;   break;
2379    default: gcc_unreachable ();
2380    }
2381
2382  diag (G_("implicit declaration of function %qE"), id);
2383  if (olddecl)
2384    locate_old_decl (olddecl, diag);
2385}
2386
2387/* Generate an implicit declaration for identifier FUNCTIONID as a
2388   function of type int ().  */
2389
2390tree
2391implicitly_declare (tree functionid)
2392{
2393  struct c_binding *b;
2394  tree decl = 0;
2395  tree asmspec_tree;
2396
2397  for (b = I_SYMBOL_BINDING (functionid); b; b = b->shadowed)
2398    {
2399      if (B_IN_SCOPE (b, external_scope))
2400	{
2401	  decl = b->decl;
2402	  break;
2403	}
2404    }
2405
2406  if (decl)
2407    {
2408      if (decl == error_mark_node)
2409	return decl;
2410
2411      /* FIXME: Objective-C has weird not-really-builtin functions
2412	 which are supposed to be visible automatically.  They wind up
2413	 in the external scope because they're pushed before the file
2414	 scope gets created.  Catch this here and rebind them into the
2415	 file scope.  */
2416      if (!DECL_BUILT_IN (decl) && DECL_IS_BUILTIN (decl))
2417	{
2418	  bind (functionid, decl, file_scope,
2419		/*invisible=*/false, /*nested=*/true);
2420	  return decl;
2421	}
2422      else
2423	{
2424	  tree newtype = default_function_type;
2425	  if (b->type)
2426	    TREE_TYPE (decl) = b->type;
2427	  /* Implicit declaration of a function already declared
2428	     (somehow) in a different scope, or as a built-in.
2429	     If this is the first time this has happened, warn;
2430	     then recycle the old declaration but with the new type.  */
2431	  if (!C_DECL_IMPLICIT (decl))
2432	    {
2433	      implicit_decl_warning (functionid, decl);
2434	      C_DECL_IMPLICIT (decl) = 1;
2435	    }
2436	  if (DECL_BUILT_IN (decl))
2437	    {
2438	      newtype = build_type_attribute_variant (newtype,
2439						      TYPE_ATTRIBUTES
2440						      (TREE_TYPE (decl)));
2441	      if (!comptypes (newtype, TREE_TYPE (decl)))
2442		{
2443		  warning (0, "incompatible implicit declaration of built-in"
2444			   " function %qD", decl);
2445		  newtype = TREE_TYPE (decl);
2446		}
2447	    }
2448	  else
2449	    {
2450	      if (!comptypes (newtype, TREE_TYPE (decl)))
2451		{
2452		  error ("incompatible implicit declaration of function %qD",
2453			 decl);
2454		  locate_old_decl (decl, error);
2455		}
2456	    }
2457	  b->type = TREE_TYPE (decl);
2458	  TREE_TYPE (decl) = newtype;
2459	  bind (functionid, decl, current_scope,
2460		/*invisible=*/false, /*nested=*/true);
2461	  return decl;
2462	}
2463    }
2464
2465  /* Not seen before.  */
2466  decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
2467  DECL_EXTERNAL (decl) = 1;
2468  TREE_PUBLIC (decl) = 1;
2469  C_DECL_IMPLICIT (decl) = 1;
2470  implicit_decl_warning (functionid, 0);
2471  asmspec_tree = maybe_apply_renaming_pragma (decl, /*asmname=*/NULL);
2472  if (asmspec_tree)
2473    set_user_assembler_name (decl, TREE_STRING_POINTER (asmspec_tree));
2474
2475  /* C89 says implicit declarations are in the innermost block.
2476     So we record the decl in the standard fashion.  */
2477  decl = pushdecl (decl);
2478
2479  /* No need to call objc_check_decl here - it's a function type.  */
2480  rest_of_decl_compilation (decl, 0, 0);
2481
2482  /* Write a record describing this implicit function declaration
2483     to the prototypes file (if requested).  */
2484  gen_aux_info_record (decl, 0, 1, 0);
2485
2486  /* Possibly apply some default attributes to this implicit declaration.  */
2487  decl_attributes (&decl, NULL_TREE, 0);
2488
2489  return decl;
2490}
2491
2492/* Issue an error message for a reference to an undeclared variable
2493   ID, including a reference to a builtin outside of function-call
2494   context.  Establish a binding of the identifier to error_mark_node
2495   in an appropriate scope, which will suppress further errors for the
2496   same identifier.  The error message should be given location LOC.  */
2497void
2498undeclared_variable (tree id, location_t loc)
2499{
2500  static bool already = false;
2501  struct c_scope *scope;
2502
2503  if (current_function_decl == 0)
2504    {
2505      error ("%H%qE undeclared here (not in a function)", &loc, id);
2506      scope = current_scope;
2507    }
2508  else
2509    {
2510      error ("%H%qE undeclared (first use in this function)", &loc, id);
2511
2512      if (!already)
2513	{
2514	  error ("%H(Each undeclared identifier is reported only once", &loc);
2515	  error ("%Hfor each function it appears in.)", &loc);
2516	  already = true;
2517	}
2518
2519      /* If we are parsing old-style parameter decls, current_function_decl
2520	 will be nonnull but current_function_scope will be null.  */
2521      scope = current_function_scope ? current_function_scope : current_scope;
2522    }
2523  bind (id, error_mark_node, scope, /*invisible=*/false, /*nested=*/false);
2524}
2525
2526/* Subroutine of lookup_label, declare_label, define_label: construct a
2527   LABEL_DECL with all the proper frills.  */
2528
2529static tree
2530make_label (tree name, location_t location)
2531{
2532  tree label = build_decl (LABEL_DECL, name, void_type_node);
2533
2534  DECL_CONTEXT (label) = current_function_decl;
2535  DECL_MODE (label) = VOIDmode;
2536  DECL_SOURCE_LOCATION (label) = location;
2537
2538  return label;
2539}
2540
2541/* Get the LABEL_DECL corresponding to identifier NAME as a label.
2542   Create one if none exists so far for the current function.
2543   This is called when a label is used in a goto expression or
2544   has its address taken.  */
2545
2546tree
2547lookup_label (tree name)
2548{
2549  tree label;
2550
2551  if (current_function_decl == 0)
2552    {
2553      error ("label %qE referenced outside of any function", name);
2554      return 0;
2555    }
2556
2557  /* Use a label already defined or ref'd with this name, but not if
2558     it is inherited from a containing function and wasn't declared
2559     using __label__.  */
2560  label = I_LABEL_DECL (name);
2561  if (label && (DECL_CONTEXT (label) == current_function_decl
2562		|| C_DECLARED_LABEL_FLAG (label)))
2563    {
2564      /* If the label has only been declared, update its apparent
2565	 location to point here, for better diagnostics if it
2566	 turns out not to have been defined.  */
2567      if (!TREE_USED (label))
2568	DECL_SOURCE_LOCATION (label) = input_location;
2569      return label;
2570    }
2571
2572  /* No label binding for that identifier; make one.  */
2573  label = make_label (name, input_location);
2574
2575  /* Ordinary labels go in the current function scope.  */
2576  bind (name, label, current_function_scope,
2577	/*invisible=*/false, /*nested=*/false);
2578  return label;
2579}
2580
2581/* Make a label named NAME in the current function, shadowing silently
2582   any that may be inherited from containing functions or containing
2583   scopes.  This is called for __label__ declarations.  */
2584
2585tree
2586declare_label (tree name)
2587{
2588  struct c_binding *b = I_LABEL_BINDING (name);
2589  tree label;
2590
2591  /* Check to make sure that the label hasn't already been declared
2592     at this scope */
2593  if (b && B_IN_CURRENT_SCOPE (b))
2594    {
2595      error ("duplicate label declaration %qE", name);
2596      locate_old_decl (b->decl, error);
2597
2598      /* Just use the previous declaration.  */
2599      return b->decl;
2600    }
2601
2602  label = make_label (name, input_location);
2603  C_DECLARED_LABEL_FLAG (label) = 1;
2604
2605  /* Declared labels go in the current scope.  */
2606  bind (name, label, current_scope,
2607	/*invisible=*/false, /*nested=*/false);
2608  return label;
2609}
2610
2611/* Define a label, specifying the location in the source file.
2612   Return the LABEL_DECL node for the label, if the definition is valid.
2613   Otherwise return 0.  */
2614
2615tree
2616define_label (location_t location, tree name)
2617{
2618  /* Find any preexisting label with this name.  It is an error
2619     if that label has already been defined in this function, or
2620     if there is a containing function with a declared label with
2621     the same name.  */
2622  tree label = I_LABEL_DECL (name);
2623  struct c_label_list *nlist_se, *nlist_vm;
2624
2625  if (label
2626      && ((DECL_CONTEXT (label) == current_function_decl
2627	   && DECL_INITIAL (label) != 0)
2628	  || (DECL_CONTEXT (label) != current_function_decl
2629	      && C_DECLARED_LABEL_FLAG (label))))
2630    {
2631      error ("%Hduplicate label %qD", &location, label);
2632      locate_old_decl (label, error);
2633      return 0;
2634    }
2635  else if (label && DECL_CONTEXT (label) == current_function_decl)
2636    {
2637      /* The label has been used or declared already in this function,
2638	 but not defined.  Update its location to point to this
2639	 definition.  */
2640      if (C_DECL_UNDEFINABLE_STMT_EXPR (label))
2641	error ("%Jjump into statement expression", label);
2642      if (C_DECL_UNDEFINABLE_VM (label))
2643	error ("%Jjump into scope of identifier with variably modified type",
2644	       label);
2645      DECL_SOURCE_LOCATION (label) = location;
2646    }
2647  else
2648    {
2649      /* No label binding for that identifier; make one.  */
2650      label = make_label (name, location);
2651
2652      /* Ordinary labels go in the current function scope.  */
2653      bind (name, label, current_function_scope,
2654	    /*invisible=*/false, /*nested=*/false);
2655    }
2656
2657  if (!in_system_header && lookup_name (name))
2658    warning (OPT_Wtraditional, "%Htraditional C lacks a separate namespace "
2659	     "for labels, identifier %qE conflicts", &location, name);
2660
2661  nlist_se = XOBNEW (&parser_obstack, struct c_label_list);
2662  nlist_se->next = label_context_stack_se->labels_def;
2663  nlist_se->label = label;
2664  label_context_stack_se->labels_def = nlist_se;
2665
2666  nlist_vm = XOBNEW (&parser_obstack, struct c_label_list);
2667  nlist_vm->next = label_context_stack_vm->labels_def;
2668  nlist_vm->label = label;
2669  label_context_stack_vm->labels_def = nlist_vm;
2670
2671  /* Mark label as having been defined.  */
2672  DECL_INITIAL (label) = error_mark_node;
2673  return label;
2674}
2675
2676/* Given NAME, an IDENTIFIER_NODE,
2677   return the structure (or union or enum) definition for that name.
2678   If THISLEVEL_ONLY is nonzero, searches only the current_scope.
2679   CODE says which kind of type the caller wants;
2680   it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2681   If the wrong kind of type is found, an error is reported.  */
2682
2683static tree
2684lookup_tag (enum tree_code code, tree name, int thislevel_only)
2685{
2686  struct c_binding *b = I_TAG_BINDING (name);
2687  int thislevel = 0;
2688
2689  if (!b || !b->decl)
2690    return 0;
2691
2692  /* We only care about whether it's in this level if
2693     thislevel_only was set or it might be a type clash.  */
2694  if (thislevel_only || TREE_CODE (b->decl) != code)
2695    {
2696      /* For our purposes, a tag in the external scope is the same as
2697	 a tag in the file scope.  (Primarily relevant to Objective-C
2698	 and its builtin structure tags, which get pushed before the
2699	 file scope is created.)  */
2700      if (B_IN_CURRENT_SCOPE (b)
2701	  || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
2702	thislevel = 1;
2703    }
2704
2705  if (thislevel_only && !thislevel)
2706    return 0;
2707
2708  if (TREE_CODE (b->decl) != code)
2709    {
2710      /* Definition isn't the kind we were looking for.  */
2711      pending_invalid_xref = name;
2712      pending_invalid_xref_location = input_location;
2713
2714      /* If in the same binding level as a declaration as a tag
2715	 of a different type, this must not be allowed to
2716	 shadow that tag, so give the error immediately.
2717	 (For example, "struct foo; union foo;" is invalid.)  */
2718      if (thislevel)
2719	pending_xref_error ();
2720    }
2721  return b->decl;
2722}
2723
2724/* Print an error message now
2725   for a recent invalid struct, union or enum cross reference.
2726   We don't print them immediately because they are not invalid
2727   when used in the `struct foo;' construct for shadowing.  */
2728
2729void
2730pending_xref_error (void)
2731{
2732  if (pending_invalid_xref != 0)
2733    error ("%H%qE defined as wrong kind of tag",
2734	   &pending_invalid_xref_location, pending_invalid_xref);
2735  pending_invalid_xref = 0;
2736}
2737
2738
2739/* Look up NAME in the current scope and its superiors
2740   in the namespace of variables, functions and typedefs.
2741   Return a ..._DECL node of some kind representing its definition,
2742   or return 0 if it is undefined.  */
2743
2744tree
2745lookup_name (tree name)
2746{
2747  struct c_binding *b = I_SYMBOL_BINDING (name);
2748  if (b && !b->invisible)
2749    return b->decl;
2750  return 0;
2751}
2752
2753/* Similar to `lookup_name' but look only at the indicated scope.  */
2754
2755static tree
2756lookup_name_in_scope (tree name, struct c_scope *scope)
2757{
2758  struct c_binding *b;
2759
2760  for (b = I_SYMBOL_BINDING (name); b; b = b->shadowed)
2761    if (B_IN_SCOPE (b, scope))
2762      return b->decl;
2763  return 0;
2764}
2765
2766/* Create the predefined scalar types of C,
2767   and some nodes representing standard constants (0, 1, (void *) 0).
2768   Initialize the global scope.
2769   Make definitions for built-in primitive functions.  */
2770
2771void
2772c_init_decl_processing (void)
2773{
2774  location_t save_loc = input_location;
2775
2776  /* Initialize reserved words for parser.  */
2777  c_parse_init ();
2778
2779  current_function_decl = 0;
2780
2781  gcc_obstack_init (&parser_obstack);
2782
2783  /* Make the externals scope.  */
2784  push_scope ();
2785  external_scope = current_scope;
2786
2787  /* Declarations from c_common_nodes_and_builtins must not be associated
2788     with this input file, lest we get differences between using and not
2789     using preprocessed headers.  */
2790#ifdef USE_MAPPED_LOCATION
2791  input_location = BUILTINS_LOCATION;
2792#else
2793  input_location.file = "<built-in>";
2794  input_location.line = 0;
2795#endif
2796
2797  build_common_tree_nodes (flag_signed_char, false);
2798
2799  c_common_nodes_and_builtins ();
2800
2801  /* In C, comparisons and TRUTH_* expressions have type int.  */
2802  truthvalue_type_node = integer_type_node;
2803  truthvalue_true_node = integer_one_node;
2804  truthvalue_false_node = integer_zero_node;
2805
2806  /* Even in C99, which has a real boolean type.  */
2807  pushdecl (build_decl (TYPE_DECL, get_identifier ("_Bool"),
2808			boolean_type_node));
2809
2810  input_location = save_loc;
2811
2812  pedantic_lvalues = true;
2813
2814  make_fname_decl = c_make_fname_decl;
2815  start_fname_decls ();
2816}
2817
2818/* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
2819   decl, NAME is the initialization string and TYPE_DEP indicates whether
2820   NAME depended on the type of the function.  As we don't yet implement
2821   delayed emission of static data, we mark the decl as emitted
2822   so it is not placed in the output.  Anything using it must therefore pull
2823   out the STRING_CST initializer directly.  FIXME.  */
2824
2825static tree
2826c_make_fname_decl (tree id, int type_dep)
2827{
2828  const char *name = fname_as_string (type_dep);
2829  tree decl, type, init;
2830  size_t length = strlen (name);
2831
2832  type = build_array_type (char_type_node,
2833			   build_index_type (size_int (length)));
2834  type = c_build_qualified_type (type, TYPE_QUAL_CONST);
2835
2836  decl = build_decl (VAR_DECL, id, type);
2837
2838  TREE_STATIC (decl) = 1;
2839  TREE_READONLY (decl) = 1;
2840  DECL_ARTIFICIAL (decl) = 1;
2841
2842  init = build_string (length + 1, name);
2843  free ((char *) name);
2844  TREE_TYPE (init) = type;
2845  DECL_INITIAL (decl) = init;
2846
2847  TREE_USED (decl) = 1;
2848
2849  if (current_function_decl
2850      /* For invalid programs like this:
2851
2852         void foo()
2853         const char* p = __FUNCTION__;
2854
2855	 the __FUNCTION__ is believed to appear in K&R style function
2856	 parameter declarator.  In that case we still don't have
2857	 function_scope.  */
2858      && (!errorcount || current_function_scope))
2859    {
2860      DECL_CONTEXT (decl) = current_function_decl;
2861      bind (id, decl, current_function_scope,
2862	    /*invisible=*/false, /*nested=*/false);
2863    }
2864
2865  finish_decl (decl, init, NULL_TREE);
2866
2867  return decl;
2868}
2869
2870/* Return a definition for a builtin function named NAME and whose data type
2871   is TYPE.  TYPE should be a function type with argument types.
2872   FUNCTION_CODE tells later passes how to compile calls to this function.
2873   See tree.h for its possible values.
2874
2875   If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
2876   the name to be called if we can't opencode the function.  If
2877   ATTRS is nonzero, use that for the function's attribute list.  */
2878
2879tree
2880builtin_function (const char *name, tree type, int function_code,
2881		  enum built_in_class cl, const char *library_name,
2882		  tree attrs)
2883{
2884  tree id = get_identifier (name);
2885  tree decl = build_decl (FUNCTION_DECL, id, type);
2886  TREE_PUBLIC (decl) = 1;
2887  DECL_EXTERNAL (decl) = 1;
2888  DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
2889  DECL_BUILT_IN_CLASS (decl) = cl;
2890  DECL_FUNCTION_CODE (decl) = function_code;
2891  C_DECL_BUILTIN_PROTOTYPE (decl) = (TYPE_ARG_TYPES (type) != 0);
2892  if (library_name)
2893    SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
2894
2895  /* Should never be called on a symbol with a preexisting meaning.  */
2896  gcc_assert (!I_SYMBOL_BINDING (id));
2897
2898  bind (id, decl, external_scope, /*invisible=*/true, /*nested=*/false);
2899
2900  /* Builtins in the implementation namespace are made visible without
2901     needing to be explicitly declared.  See push_file_scope.  */
2902  if (name[0] == '_' && (name[1] == '_' || ISUPPER (name[1])))
2903    {
2904      TREE_CHAIN (decl) = visible_builtins;
2905      visible_builtins = decl;
2906    }
2907
2908  /* Possibly apply some default attributes to this built-in function.  */
2909  if (attrs)
2910    decl_attributes (&decl, attrs, ATTR_FLAG_BUILT_IN);
2911  else
2912    decl_attributes (&decl, NULL_TREE, 0);
2913
2914  return decl;
2915}
2916
2917/* Called when a declaration is seen that contains no names to declare.
2918   If its type is a reference to a structure, union or enum inherited
2919   from a containing scope, shadow that tag name for the current scope
2920   with a forward reference.
2921   If its type defines a new named structure or union
2922   or defines an enum, it is valid but we need not do anything here.
2923   Otherwise, it is an error.  */
2924
2925void
2926shadow_tag (const struct c_declspecs *declspecs)
2927{
2928  shadow_tag_warned (declspecs, 0);
2929}
2930
2931/* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
2932   but no pedwarn.  */
2933void
2934shadow_tag_warned (const struct c_declspecs *declspecs, int warned)
2935{
2936  bool found_tag = false;
2937
2938  if (declspecs->type && !declspecs->default_int_p && !declspecs->typedef_p)
2939    {
2940      tree value = declspecs->type;
2941      enum tree_code code = TREE_CODE (value);
2942
2943      if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
2944	/* Used to test also that TYPE_SIZE (value) != 0.
2945	   That caused warning for `struct foo;' at top level in the file.  */
2946	{
2947	  tree name = TYPE_NAME (value);
2948	  tree t;
2949
2950	  found_tag = true;
2951
2952	  if (name == 0)
2953	    {
2954	      if (warned != 1 && code != ENUMERAL_TYPE)
2955		/* Empty unnamed enum OK */
2956		{
2957		  pedwarn ("unnamed struct/union that defines no instances");
2958		  warned = 1;
2959		}
2960	    }
2961	  else if (!declspecs->tag_defined_p
2962		   && declspecs->storage_class != csc_none)
2963	    {
2964	      if (warned != 1)
2965		pedwarn ("empty declaration with storage class specifier "
2966			 "does not redeclare tag");
2967	      warned = 1;
2968	      pending_xref_error ();
2969	    }
2970	  else if (!declspecs->tag_defined_p
2971		   && (declspecs->const_p
2972		       || declspecs->volatile_p
2973		       || declspecs->restrict_p))
2974	    {
2975	      if (warned != 1)
2976		pedwarn ("empty declaration with type qualifier "
2977			 "does not redeclare tag");
2978	      warned = 1;
2979	      pending_xref_error ();
2980	    }
2981	  else
2982	    {
2983	      pending_invalid_xref = 0;
2984	      t = lookup_tag (code, name, 1);
2985
2986	      if (t == 0)
2987		{
2988		  t = make_node (code);
2989		  pushtag (name, t);
2990		}
2991	    }
2992	}
2993      else
2994	{
2995	  if (warned != 1 && !in_system_header)
2996	    {
2997	      pedwarn ("useless type name in empty declaration");
2998	      warned = 1;
2999	    }
3000	}
3001    }
3002  else if (warned != 1 && !in_system_header && declspecs->typedef_p)
3003    {
3004      pedwarn ("useless type name in empty declaration");
3005      warned = 1;
3006    }
3007
3008  pending_invalid_xref = 0;
3009
3010  if (declspecs->inline_p)
3011    {
3012      error ("%<inline%> in empty declaration");
3013      warned = 1;
3014    }
3015
3016  if (current_scope == file_scope && declspecs->storage_class == csc_auto)
3017    {
3018      error ("%<auto%> in file-scope empty declaration");
3019      warned = 1;
3020    }
3021
3022  if (current_scope == file_scope && declspecs->storage_class == csc_register)
3023    {
3024      error ("%<register%> in file-scope empty declaration");
3025      warned = 1;
3026    }
3027
3028  if (!warned && !in_system_header && declspecs->storage_class != csc_none)
3029    {
3030      warning (0, "useless storage class specifier in empty declaration");
3031      warned = 2;
3032    }
3033
3034  if (!warned && !in_system_header && declspecs->thread_p)
3035    {
3036      warning (0, "useless %<__thread%> in empty declaration");
3037      warned = 2;
3038    }
3039
3040  if (!warned && !in_system_header && (declspecs->const_p
3041				       || declspecs->volatile_p
3042				       || declspecs->restrict_p))
3043    {
3044      warning (0, "useless type qualifier in empty declaration");
3045      warned = 2;
3046    }
3047
3048  if (warned != 1)
3049    {
3050      if (!found_tag)
3051	pedwarn ("empty declaration");
3052    }
3053}
3054
3055
3056/* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
3057   bits.  SPECS represents declaration specifiers that the grammar
3058   only permits to contain type qualifiers and attributes.  */
3059
3060int
3061quals_from_declspecs (const struct c_declspecs *specs)
3062{
3063  int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
3064	       | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
3065	       | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
3066  gcc_assert (!specs->type
3067	      && !specs->decl_attr
3068	      && specs->typespec_word == cts_none
3069	      && specs->storage_class == csc_none
3070	      && !specs->typedef_p
3071	      && !specs->explicit_signed_p
3072	      && !specs->deprecated_p
3073	      && !specs->long_p
3074	      && !specs->long_long_p
3075	      && !specs->short_p
3076	      && !specs->signed_p
3077	      && !specs->unsigned_p
3078	      && !specs->complex_p
3079	      && !specs->inline_p
3080	      && !specs->thread_p);
3081  return quals;
3082}
3083
3084/* Construct an array declarator.  EXPR is the expression inside [],
3085   or NULL_TREE.  QUALS are the type qualifiers inside the [] (to be
3086   applied to the pointer to which a parameter array is converted).
3087   STATIC_P is true if "static" is inside the [], false otherwise.
3088   VLA_UNSPEC_P is true if the array is [*], a VLA of unspecified
3089   length which is nevertheless a complete type, false otherwise.  The
3090   field for the contained declarator is left to be filled in by
3091   set_array_declarator_inner.  */
3092
3093struct c_declarator *
3094build_array_declarator (tree expr, struct c_declspecs *quals, bool static_p,
3095			bool vla_unspec_p)
3096{
3097  struct c_declarator *declarator = XOBNEW (&parser_obstack,
3098					    struct c_declarator);
3099  declarator->kind = cdk_array;
3100  declarator->declarator = 0;
3101  declarator->u.array.dimen = expr;
3102  if (quals)
3103    {
3104      declarator->u.array.attrs = quals->attrs;
3105      declarator->u.array.quals = quals_from_declspecs (quals);
3106    }
3107  else
3108    {
3109      declarator->u.array.attrs = NULL_TREE;
3110      declarator->u.array.quals = 0;
3111    }
3112  declarator->u.array.static_p = static_p;
3113  declarator->u.array.vla_unspec_p = vla_unspec_p;
3114  if (pedantic && !flag_isoc99)
3115    {
3116      if (static_p || quals != NULL)
3117	pedwarn ("ISO C90 does not support %<static%> or type "
3118		 "qualifiers in parameter array declarators");
3119      if (vla_unspec_p)
3120	pedwarn ("ISO C90 does not support %<[*]%> array declarators");
3121    }
3122  if (vla_unspec_p)
3123    {
3124      if (!current_scope->parm_flag)
3125	{
3126	  /* C99 6.7.5.2p4 */
3127	  error ("%<[*]%> not allowed in other than function prototype scope");
3128	  declarator->u.array.vla_unspec_p = false;
3129	  return NULL;
3130	}
3131      current_scope->had_vla_unspec = true;
3132    }
3133  return declarator;
3134}
3135
3136/* Set the contained declarator of an array declarator.  DECL is the
3137   declarator, as constructed by build_array_declarator; INNER is what
3138   appears on the left of the [].  ABSTRACT_P is true if it is an
3139   abstract declarator, false otherwise; this is used to reject static
3140   and type qualifiers in abstract declarators, where they are not in
3141   the C99 grammar (subject to possible change in DR#289).  */
3142
3143struct c_declarator *
3144set_array_declarator_inner (struct c_declarator *decl,
3145			    struct c_declarator *inner, bool abstract_p)
3146{
3147  decl->declarator = inner;
3148  if (abstract_p && (decl->u.array.quals != TYPE_UNQUALIFIED
3149		     || decl->u.array.attrs != NULL_TREE
3150		     || decl->u.array.static_p))
3151    error ("static or type qualifiers in abstract declarator");
3152  return decl;
3153}
3154
3155/* INIT is a constructor that forms DECL's initializer.  If the final
3156   element initializes a flexible array field, add the size of that
3157   initializer to DECL's size.  */
3158
3159static void
3160add_flexible_array_elts_to_size (tree decl, tree init)
3161{
3162  tree elt, type;
3163
3164  if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
3165    return;
3166
3167  elt = VEC_last (constructor_elt, CONSTRUCTOR_ELTS (init))->value;
3168  type = TREE_TYPE (elt);
3169  if (TREE_CODE (type) == ARRAY_TYPE
3170      && TYPE_SIZE (type) == NULL_TREE
3171      && TYPE_DOMAIN (type) != NULL_TREE
3172      && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
3173    {
3174      complete_array_type (&type, elt, false);
3175      DECL_SIZE (decl)
3176	= size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
3177      DECL_SIZE_UNIT (decl)
3178	= size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
3179    }
3180}
3181
3182/* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
3183
3184tree
3185groktypename (struct c_type_name *type_name)
3186{
3187  tree type;
3188  tree attrs = type_name->specs->attrs;
3189
3190  type_name->specs->attrs = NULL_TREE;
3191
3192  type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
3193			 false, NULL);
3194
3195  /* Apply attributes.  */
3196  decl_attributes (&type, attrs, 0);
3197
3198  return type;
3199}
3200
3201/* Decode a declarator in an ordinary declaration or data definition.
3202   This is called as soon as the type information and variable name
3203   have been parsed, before parsing the initializer if any.
3204   Here we create the ..._DECL node, fill in its type,
3205   and put it on the list of decls for the current context.
3206   The ..._DECL node is returned as the value.
3207
3208   Exception: for arrays where the length is not specified,
3209   the type is left null, to be filled in by `finish_decl'.
3210
3211   Function definitions do not come here; they go to start_function
3212   instead.  However, external and forward declarations of functions
3213   do go through here.  Structure field declarations are done by
3214   grokfield and not through here.  */
3215
3216tree
3217start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
3218	    bool initialized, tree attributes)
3219{
3220  tree decl;
3221  tree tem;
3222
3223  /* An object declared as __attribute__((deprecated)) suppresses
3224     warnings of uses of other deprecated items.  */
3225  if (lookup_attribute ("deprecated", attributes))
3226    deprecated_state = DEPRECATED_SUPPRESS;
3227
3228  decl = grokdeclarator (declarator, declspecs,
3229			 NORMAL, initialized, NULL);
3230  if (!decl)
3231    return 0;
3232
3233  deprecated_state = DEPRECATED_NORMAL;
3234
3235  if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
3236      && MAIN_NAME_P (DECL_NAME (decl)))
3237    warning (OPT_Wmain, "%q+D is usually a function", decl);
3238
3239  if (initialized)
3240    /* Is it valid for this decl to have an initializer at all?
3241       If not, set INITIALIZED to zero, which will indirectly
3242       tell 'finish_decl' to ignore the initializer once it is parsed.  */
3243    switch (TREE_CODE (decl))
3244      {
3245      case TYPE_DECL:
3246	error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3247	initialized = 0;
3248	break;
3249
3250      case FUNCTION_DECL:
3251	error ("function %qD is initialized like a variable", decl);
3252	initialized = 0;
3253	break;
3254
3255      case PARM_DECL:
3256	/* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.  */
3257	error ("parameter %qD is initialized", decl);
3258	initialized = 0;
3259	break;
3260
3261      default:
3262	/* Don't allow initializations for incomplete types except for
3263	   arrays which might be completed by the initialization.  */
3264
3265	/* This can happen if the array size is an undefined macro.
3266	   We already gave a warning, so we don't need another one.  */
3267	if (TREE_TYPE (decl) == error_mark_node)
3268	  initialized = 0;
3269	else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3270	  {
3271	    /* A complete type is ok if size is fixed.  */
3272
3273	    if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3274		|| C_DECL_VARIABLE_SIZE (decl))
3275	      {
3276		error ("variable-sized object may not be initialized");
3277		initialized = 0;
3278	      }
3279	  }
3280	else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3281	  {
3282	    error ("variable %qD has initializer but incomplete type", decl);
3283	    initialized = 0;
3284	  }
3285	else if (C_DECL_VARIABLE_SIZE (decl))
3286	  {
3287	    /* Although C99 is unclear about whether incomplete arrays
3288	       of VLAs themselves count as VLAs, it does not make
3289	       sense to permit them to be initialized given that
3290	       ordinary VLAs may not be initialized.  */
3291	    error ("variable-sized object may not be initialized");
3292	    initialized = 0;
3293	  }
3294      }
3295
3296  if (initialized)
3297    {
3298      if (current_scope == file_scope)
3299	TREE_STATIC (decl) = 1;
3300
3301      /* Tell 'pushdecl' this is an initialized decl
3302	 even though we don't yet have the initializer expression.
3303	 Also tell 'finish_decl' it may store the real initializer.  */
3304      DECL_INITIAL (decl) = error_mark_node;
3305    }
3306
3307  /* If this is a function declaration, write a record describing it to the
3308     prototypes file (if requested).  */
3309
3310  if (TREE_CODE (decl) == FUNCTION_DECL)
3311    gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3312
3313  /* ANSI specifies that a tentative definition which is not merged with
3314     a non-tentative definition behaves exactly like a definition with an
3315     initializer equal to zero.  (Section 3.7.2)
3316
3317     -fno-common gives strict ANSI behavior, though this tends to break
3318     a large body of code that grew up without this rule.
3319
3320     Thread-local variables are never common, since there's no entrenched
3321     body of code to break, and it allows more efficient variable references
3322     in the presence of dynamic linking.  */
3323
3324  if (TREE_CODE (decl) == VAR_DECL
3325      && !initialized
3326      && TREE_PUBLIC (decl)
3327      && !DECL_THREAD_LOCAL_P (decl)
3328      && !flag_no_common)
3329    DECL_COMMON (decl) = 1;
3330
3331  /* Set attributes here so if duplicate decl, will have proper attributes.  */
3332  decl_attributes (&decl, attributes, 0);
3333
3334  /* Handle gnu_inline attribute.  */
3335  if (declspecs->inline_p
3336      && !flag_gnu89_inline
3337      && TREE_CODE (decl) == FUNCTION_DECL
3338      && lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl)))
3339    {
3340      if (declspecs->storage_class == csc_auto && current_scope != file_scope)
3341	;
3342      else if (declspecs->storage_class != csc_static)
3343	DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
3344    }
3345
3346  if (TREE_CODE (decl) == FUNCTION_DECL
3347      && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
3348    {
3349      struct c_declarator *ce = declarator;
3350
3351      if (ce->kind == cdk_pointer)
3352	ce = declarator->declarator;
3353      if (ce->kind == cdk_function)
3354	{
3355	  tree args = ce->u.arg_info->parms;
3356	  for (; args; args = TREE_CHAIN (args))
3357	    {
3358	      tree type = TREE_TYPE (args);
3359	      if (type && INTEGRAL_TYPE_P (type)
3360		  && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3361		DECL_ARG_TYPE (args) = integer_type_node;
3362	    }
3363	}
3364    }
3365
3366  if (TREE_CODE (decl) == FUNCTION_DECL
3367      && DECL_DECLARED_INLINE_P (decl)
3368      && DECL_UNINLINABLE (decl)
3369      && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3370    warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
3371	     decl);
3372
3373  /* C99 6.7.4p3: An inline definition of a function with external
3374     linkage shall not contain a definition of a modifiable object
3375     with static storage duration...  */
3376  if (TREE_CODE (decl) == VAR_DECL
3377      && current_scope != file_scope
3378      && TREE_STATIC (decl)
3379      && !TREE_READONLY (decl)
3380      && DECL_DECLARED_INLINE_P (current_function_decl)
3381      && DECL_EXTERNAL (current_function_decl))
3382    pedwarn ("%q+D is static but declared in inline function %qD "
3383	     "which is not static", decl, current_function_decl);
3384
3385  /* Add this decl to the current scope.
3386     TEM may equal DECL or it may be a previous decl of the same name.  */
3387  tem = pushdecl (decl);
3388
3389  if (initialized && DECL_EXTERNAL (tem))
3390    {
3391      DECL_EXTERNAL (tem) = 0;
3392      TREE_STATIC (tem) = 1;
3393    }
3394
3395  return tem;
3396}
3397
3398/* Initialize EH if not initialized yet and exceptions are enabled.  */
3399
3400void
3401c_maybe_initialize_eh (void)
3402{
3403  if (!flag_exceptions || c_eh_initialized_p)
3404    return;
3405
3406  c_eh_initialized_p = true;
3407  eh_personality_libfunc
3408    = init_one_libfunc (USING_SJLJ_EXCEPTIONS
3409			? "__gcc_personality_sj0"
3410			: "__gcc_personality_v0");
3411  default_init_unwind_resume_libfunc ();
3412  using_eh_for_cleanups ();
3413}
3414
3415/* Finish processing of a declaration;
3416   install its initial value.
3417   If the length of an array type is not known before,
3418   it must be determined now, from the initial value, or it is an error.  */
3419
3420void
3421finish_decl (tree decl, tree init, tree asmspec_tree)
3422{
3423  tree type;
3424  int was_incomplete = (DECL_SIZE (decl) == 0);
3425  const char *asmspec = 0;
3426
3427  /* If a name was specified, get the string.  */
3428  if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
3429      && DECL_FILE_SCOPE_P (decl))
3430    asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
3431  if (asmspec_tree)
3432    asmspec = TREE_STRING_POINTER (asmspec_tree);
3433
3434  /* If `start_decl' didn't like having an initialization, ignore it now.  */
3435  if (init != 0 && DECL_INITIAL (decl) == 0)
3436    init = 0;
3437
3438  /* Don't crash if parm is initialized.  */
3439  if (TREE_CODE (decl) == PARM_DECL)
3440    init = 0;
3441
3442  if (init)
3443    store_init_value (decl, init);
3444
3445  if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
3446			    || TREE_CODE (decl) == FUNCTION_DECL
3447			    || TREE_CODE (decl) == FIELD_DECL))
3448    objc_check_decl (decl);
3449
3450  type = TREE_TYPE (decl);
3451
3452  /* Deduce size of array from initialization, if not already known.  */
3453  if (TREE_CODE (type) == ARRAY_TYPE
3454      && TYPE_DOMAIN (type) == 0
3455      && TREE_CODE (decl) != TYPE_DECL)
3456    {
3457      bool do_default
3458	= (TREE_STATIC (decl)
3459	   /* Even if pedantic, an external linkage array
3460	      may have incomplete type at first.  */
3461	   ? pedantic && !TREE_PUBLIC (decl)
3462	   : !DECL_EXTERNAL (decl));
3463      int failure
3464	= complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
3465			       do_default);
3466
3467      /* Get the completed type made by complete_array_type.  */
3468      type = TREE_TYPE (decl);
3469
3470      switch (failure)
3471	{
3472	case 1:
3473	  error ("initializer fails to determine size of %q+D", decl);
3474	  break;
3475
3476	case 2:
3477	  if (do_default)
3478	    error ("array size missing in %q+D", decl);
3479	  /* If a `static' var's size isn't known,
3480	     make it extern as well as static, so it does not get
3481	     allocated.
3482	     If it is not `static', then do not mark extern;
3483	     finish_incomplete_decl will give it a default size
3484	     and it will get allocated.  */
3485	  else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3486	    DECL_EXTERNAL (decl) = 1;
3487	  break;
3488
3489	case 3:
3490	  error ("zero or negative size array %q+D", decl);
3491	  break;
3492
3493	case 0:
3494	  /* For global variables, update the copy of the type that
3495	     exists in the binding.  */
3496	  if (TREE_PUBLIC (decl))
3497	    {
3498	      struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
3499	      while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
3500		b_ext = b_ext->shadowed;
3501	      if (b_ext)
3502		{
3503		  if (b_ext->type)
3504		    b_ext->type = composite_type (b_ext->type, type);
3505		  else
3506		    b_ext->type = type;
3507		}
3508	    }
3509	  break;
3510
3511	default:
3512	  gcc_unreachable ();
3513	}
3514
3515      if (DECL_INITIAL (decl))
3516	TREE_TYPE (DECL_INITIAL (decl)) = type;
3517
3518      layout_decl (decl, 0);
3519    }
3520
3521  if (TREE_CODE (decl) == VAR_DECL)
3522    {
3523      if (init && TREE_CODE (init) == CONSTRUCTOR)
3524	add_flexible_array_elts_to_size (decl, init);
3525
3526      if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
3527	  && COMPLETE_TYPE_P (TREE_TYPE (decl)))
3528	layout_decl (decl, 0);
3529
3530      if (DECL_SIZE (decl) == 0
3531	  /* Don't give an error if we already gave one earlier.  */
3532	  && TREE_TYPE (decl) != error_mark_node
3533	  && (TREE_STATIC (decl)
3534	      /* A static variable with an incomplete type
3535		 is an error if it is initialized.
3536		 Also if it is not file scope.
3537		 Otherwise, let it through, but if it is not `extern'
3538		 then it may cause an error message later.  */
3539	      ? (DECL_INITIAL (decl) != 0
3540		 || !DECL_FILE_SCOPE_P (decl))
3541	      /* An automatic variable with an incomplete type
3542		 is an error.  */
3543	      : !DECL_EXTERNAL (decl)))
3544	 {
3545	   error ("storage size of %q+D isn%'t known", decl);
3546	   TREE_TYPE (decl) = error_mark_node;
3547	 }
3548
3549      if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3550	  && DECL_SIZE (decl) != 0)
3551	{
3552	  if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3553	    constant_expression_warning (DECL_SIZE (decl));
3554	  else
3555	    error ("storage size of %q+D isn%'t constant", decl);
3556	}
3557
3558      if (TREE_USED (type))
3559	TREE_USED (decl) = 1;
3560    }
3561
3562  /* If this is a function and an assembler name is specified, reset DECL_RTL
3563     so we can give it its new name.  Also, update built_in_decls if it
3564     was a normal built-in.  */
3565  if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
3566    {
3567      if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
3568	set_builtin_user_assembler_name (decl, asmspec);
3569      set_user_assembler_name (decl, asmspec);
3570    }
3571
3572  /* If #pragma weak was used, mark the decl weak now.  */
3573  maybe_apply_pragma_weak (decl);
3574
3575  /* Output the assembler code and/or RTL code for variables and functions,
3576     unless the type is an undefined structure or union.
3577     If not, it will get done when the type is completed.  */
3578
3579  if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3580    {
3581      /* Determine the ELF visibility.  */
3582      if (TREE_PUBLIC (decl))
3583	c_determine_visibility (decl);
3584
3585      /* This is a no-op in c-lang.c or something real in objc-act.c.  */
3586      if (c_dialect_objc ())
3587	objc_check_decl (decl);
3588
3589      if (asmspec)
3590	{
3591	  /* If this is not a static variable, issue a warning.
3592	     It doesn't make any sense to give an ASMSPEC for an
3593	     ordinary, non-register local variable.  Historically,
3594	     GCC has accepted -- but ignored -- the ASMSPEC in
3595	     this case.  */
3596	  if (!DECL_FILE_SCOPE_P (decl)
3597	      && TREE_CODE (decl) == VAR_DECL
3598	      && !C_DECL_REGISTER (decl)
3599	      && !TREE_STATIC (decl))
3600	    warning (0, "ignoring asm-specifier for non-static local "
3601		     "variable %q+D", decl);
3602	  else
3603	    set_user_assembler_name (decl, asmspec);
3604	}
3605
3606      if (DECL_FILE_SCOPE_P (decl))
3607	{
3608	  if (DECL_INITIAL (decl) == NULL_TREE
3609	      || DECL_INITIAL (decl) == error_mark_node)
3610	    /* Don't output anything
3611	       when a tentative file-scope definition is seen.
3612	       But at end of compilation, do output code for them.  */
3613	    DECL_DEFER_OUTPUT (decl) = 1;
3614	  rest_of_decl_compilation (decl, true, 0);
3615	}
3616      else
3617	{
3618	  /* In conjunction with an ASMSPEC, the `register'
3619	     keyword indicates that we should place the variable
3620	     in a particular register.  */
3621	  if (asmspec && C_DECL_REGISTER (decl))
3622	    {
3623	      DECL_HARD_REGISTER (decl) = 1;
3624	      /* This cannot be done for a structure with volatile
3625		 fields, on which DECL_REGISTER will have been
3626		 reset.  */
3627	      if (!DECL_REGISTER (decl))
3628		error ("cannot put object with volatile field into register");
3629	    }
3630
3631	  if (TREE_CODE (decl) != FUNCTION_DECL)
3632	    {
3633	      /* If we're building a variable sized type, and we might be
3634		 reachable other than via the top of the current binding
3635		 level, then create a new BIND_EXPR so that we deallocate
3636		 the object at the right time.  */
3637	      /* Note that DECL_SIZE can be null due to errors.  */
3638	      if (DECL_SIZE (decl)
3639		  && !TREE_CONSTANT (DECL_SIZE (decl))
3640		  && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
3641		{
3642		  tree bind;
3643		  bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
3644		  TREE_SIDE_EFFECTS (bind) = 1;
3645		  add_stmt (bind);
3646		  BIND_EXPR_BODY (bind) = push_stmt_list ();
3647		}
3648	      add_stmt (build_stmt (DECL_EXPR, decl));
3649	    }
3650	}
3651
3652
3653      if (!DECL_FILE_SCOPE_P (decl))
3654	{
3655	  /* Recompute the RTL of a local array now
3656	     if it used to be an incomplete type.  */
3657	  if (was_incomplete
3658	      && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
3659	    {
3660	      /* If we used it already as memory, it must stay in memory.  */
3661	      TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3662	      /* If it's still incomplete now, no init will save it.  */
3663	      if (DECL_SIZE (decl) == 0)
3664		DECL_INITIAL (decl) = 0;
3665	    }
3666	}
3667    }
3668
3669  /* If this was marked 'used', be sure it will be output.  */
3670  if (!flag_unit_at_a_time && lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
3671    mark_decl_referenced (decl);
3672
3673  if (TREE_CODE (decl) == TYPE_DECL)
3674    {
3675      if (!DECL_FILE_SCOPE_P (decl)
3676	  && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3677	add_stmt (build_stmt (DECL_EXPR, decl));
3678
3679      rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
3680    }
3681
3682  /* At the end of a declaration, throw away any variable type sizes
3683     of types defined inside that declaration.  There is no use
3684     computing them in the following function definition.  */
3685  if (current_scope == file_scope)
3686    get_pending_sizes ();
3687
3688  /* Install a cleanup (aka destructor) if one was given.  */
3689  if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
3690    {
3691      tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
3692      if (attr)
3693	{
3694	  tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
3695	  tree cleanup_decl = lookup_name (cleanup_id);
3696	  tree cleanup;
3697
3698	  /* Build "cleanup(&decl)" for the destructor.  */
3699	  cleanup = build_unary_op (ADDR_EXPR, decl, 0);
3700	  cleanup = build_tree_list (NULL_TREE, cleanup);
3701	  cleanup = build_function_call (cleanup_decl, cleanup);
3702
3703	  /* Don't warn about decl unused; the cleanup uses it.  */
3704	  TREE_USED (decl) = 1;
3705	  TREE_USED (cleanup_decl) = 1;
3706
3707	  /* Initialize EH, if we've been told to do so.  */
3708	  c_maybe_initialize_eh ();
3709
3710	  push_cleanup (decl, cleanup, false);
3711	}
3712    }
3713}
3714
3715/* Given a parsed parameter declaration, decode it into a PARM_DECL.  */
3716
3717tree
3718grokparm (const struct c_parm *parm)
3719{
3720  tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
3721			      NULL);
3722
3723  decl_attributes (&decl, parm->attrs, 0);
3724
3725  return decl;
3726}
3727
3728/* Given a parsed parameter declaration, decode it into a PARM_DECL
3729   and push that on the current scope.  */
3730
3731void
3732push_parm_decl (const struct c_parm *parm)
3733{
3734  tree decl;
3735
3736  decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL);
3737  decl_attributes (&decl, parm->attrs, 0);
3738
3739  decl = pushdecl (decl);
3740
3741  finish_decl (decl, NULL_TREE, NULL_TREE);
3742}
3743
3744/* Mark all the parameter declarations to date as forward decls.
3745   Also diagnose use of this extension.  */
3746
3747void
3748mark_forward_parm_decls (void)
3749{
3750  struct c_binding *b;
3751
3752  if (pedantic && !current_scope->warned_forward_parm_decls)
3753    {
3754      pedwarn ("ISO C forbids forward parameter declarations");
3755      current_scope->warned_forward_parm_decls = true;
3756    }
3757
3758  for (b = current_scope->bindings; b; b = b->prev)
3759    if (TREE_CODE (b->decl) == PARM_DECL)
3760      TREE_ASM_WRITTEN (b->decl) = 1;
3761}
3762
3763/* Build a COMPOUND_LITERAL_EXPR.  TYPE is the type given in the compound
3764   literal, which may be an incomplete array type completed by the
3765   initializer; INIT is a CONSTRUCTOR that initializes the compound
3766   literal.  */
3767
3768tree
3769build_compound_literal (tree type, tree init)
3770{
3771  /* We do not use start_decl here because we have a type, not a declarator;
3772     and do not use finish_decl because the decl should be stored inside
3773     the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR.  */
3774  tree decl;
3775  tree complit;
3776  tree stmt;
3777
3778  if (type == error_mark_node)
3779    return error_mark_node;
3780
3781  decl = build_decl (VAR_DECL, NULL_TREE, type);
3782  DECL_EXTERNAL (decl) = 0;
3783  TREE_PUBLIC (decl) = 0;
3784  TREE_STATIC (decl) = (current_scope == file_scope);
3785  DECL_CONTEXT (decl) = current_function_decl;
3786  TREE_USED (decl) = 1;
3787  TREE_TYPE (decl) = type;
3788  TREE_READONLY (decl) = TYPE_READONLY (type);
3789  store_init_value (decl, init);
3790
3791  if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
3792    {
3793      int failure = complete_array_type (&TREE_TYPE (decl),
3794					 DECL_INITIAL (decl), true);
3795      gcc_assert (!failure);
3796
3797      type = TREE_TYPE (decl);
3798      TREE_TYPE (DECL_INITIAL (decl)) = type;
3799    }
3800
3801  if (type == error_mark_node || !COMPLETE_TYPE_P (type))
3802    return error_mark_node;
3803
3804  stmt = build_stmt (DECL_EXPR, decl);
3805  complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
3806  TREE_SIDE_EFFECTS (complit) = 1;
3807
3808  layout_decl (decl, 0);
3809
3810  if (TREE_STATIC (decl))
3811    {
3812      /* This decl needs a name for the assembler output.  */
3813      set_compound_literal_name (decl);
3814      DECL_DEFER_OUTPUT (decl) = 1;
3815      DECL_COMDAT (decl) = 1;
3816      DECL_ARTIFICIAL (decl) = 1;
3817      DECL_IGNORED_P (decl) = 1;
3818      pushdecl (decl);
3819      rest_of_decl_compilation (decl, 1, 0);
3820    }
3821
3822  return complit;
3823}
3824
3825/* Determine whether TYPE is a structure with a flexible array member,
3826   or a union containing such a structure (possibly recursively).  */
3827
3828static bool
3829flexible_array_type_p (tree type)
3830{
3831  tree x;
3832  switch (TREE_CODE (type))
3833    {
3834    case RECORD_TYPE:
3835      x = TYPE_FIELDS (type);
3836      if (x == NULL_TREE)
3837	return false;
3838      while (TREE_CHAIN (x) != NULL_TREE)
3839	x = TREE_CHAIN (x);
3840      if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
3841	  && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3842	  && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
3843	  && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
3844	return true;
3845      return false;
3846    case UNION_TYPE:
3847      for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
3848	{
3849	  if (flexible_array_type_p (TREE_TYPE (x)))
3850	    return true;
3851	}
3852      return false;
3853    default:
3854    return false;
3855  }
3856}
3857
3858/* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
3859   replacing with appropriate values if they are invalid.  */
3860static void
3861check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
3862{
3863  tree type_mv;
3864  unsigned int max_width;
3865  unsigned HOST_WIDE_INT w;
3866  const char *name = orig_name ? orig_name: _("<anonymous>");
3867
3868  /* Detect and ignore out of range field width and process valid
3869     field widths.  */
3870  if (!INTEGRAL_TYPE_P (TREE_TYPE (*width))
3871      || TREE_CODE (*width) != INTEGER_CST)
3872    {
3873      error ("bit-field %qs width not an integer constant", name);
3874      *width = integer_one_node;
3875    }
3876  else
3877    {
3878      constant_expression_warning (*width);
3879      if (tree_int_cst_sgn (*width) < 0)
3880	{
3881	  error ("negative width in bit-field %qs", name);
3882	  *width = integer_one_node;
3883	}
3884      else if (integer_zerop (*width) && orig_name)
3885	{
3886	  error ("zero width for bit-field %qs", name);
3887	  *width = integer_one_node;
3888	}
3889    }
3890
3891  /* Detect invalid bit-field type.  */
3892  if (TREE_CODE (*type) != INTEGER_TYPE
3893      && TREE_CODE (*type) != BOOLEAN_TYPE
3894      && TREE_CODE (*type) != ENUMERAL_TYPE)
3895    {
3896      error ("bit-field %qs has invalid type", name);
3897      *type = unsigned_type_node;
3898    }
3899
3900  type_mv = TYPE_MAIN_VARIANT (*type);
3901  if (pedantic
3902      && !in_system_header
3903      && type_mv != integer_type_node
3904      && type_mv != unsigned_type_node
3905      && type_mv != boolean_type_node)
3906    pedwarn ("type of bit-field %qs is a GCC extension", name);
3907
3908  if (type_mv == boolean_type_node)
3909    max_width = CHAR_TYPE_SIZE;
3910  else
3911    max_width = TYPE_PRECISION (*type);
3912
3913  if (0 < compare_tree_int (*width, max_width))
3914    {
3915      error ("width of %qs exceeds its type", name);
3916      w = max_width;
3917      *width = build_int_cst (NULL_TREE, w);
3918    }
3919  else
3920    w = tree_low_cst (*width, 1);
3921
3922  if (TREE_CODE (*type) == ENUMERAL_TYPE)
3923    {
3924      struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
3925      if (!lt
3926	  || w < min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
3927	  || w < min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
3928	warning (0, "%qs is narrower than values of its type", name);
3929    }
3930}
3931
3932
3933
3934/* Print warning about variable length array if necessary.  */
3935
3936static void
3937warn_variable_length_array (const char *name, tree size)
3938{
3939  int ped = !flag_isoc99 && pedantic && warn_vla != 0;
3940  int const_size = TREE_CONSTANT (size);
3941
3942  if (ped)
3943    {
3944      if (const_size)
3945	{
3946	  if (name)
3947	    pedwarn ("ISO C90 forbids array %qs whose size "
3948		     "can%'t be evaluated",
3949		     name);
3950	  else
3951	    pedwarn ("ISO C90 forbids array whose size "
3952		     "can%'t be evaluated");
3953	}
3954      else
3955	{
3956	  if (name)
3957	    pedwarn ("ISO C90 forbids variable length array %qs",
3958		     name);
3959	  else
3960	    pedwarn ("ISO C90 forbids variable length array");
3961	}
3962    }
3963  else if (warn_vla > 0)
3964    {
3965      if (const_size)
3966        {
3967	  if (name)
3968	    warning (OPT_Wvla,
3969		     "the size of array %qs can"
3970		     "%'t be evaluated", name);
3971	  else
3972	    warning (OPT_Wvla,
3973		     "the size of array can %'t be evaluated");
3974	}
3975      else
3976	{
3977	  if (name)
3978	    warning (OPT_Wvla,
3979		     "variable length array %qs is used",
3980		     name);
3981	  else
3982	    warning (OPT_Wvla,
3983		     "variable length array is used");
3984	}
3985    }
3986}
3987
3988/* Given declspecs and a declarator,
3989   determine the name and type of the object declared
3990   and construct a ..._DECL node for it.
3991   (In one case we can return a ..._TYPE node instead.
3992    For invalid input we sometimes return 0.)
3993
3994   DECLSPECS is a c_declspecs structure for the declaration specifiers.
3995
3996   DECL_CONTEXT says which syntactic context this declaration is in:
3997     NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3998     FUNCDEF for a function definition.  Like NORMAL but a few different
3999      error messages in each case.  Return value may be zero meaning
4000      this definition is too screwy to try to parse.
4001     PARM for a parameter declaration (either within a function prototype
4002      or before a function body).  Make a PARM_DECL, or return void_type_node.
4003     TYPENAME if for a typename (in a cast or sizeof).
4004      Don't make a DECL node; just return the ..._TYPE node.
4005     FIELD for a struct or union field; make a FIELD_DECL.
4006   INITIALIZED is true if the decl has an initializer.
4007   WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
4008   representing the width of the bit-field.
4009
4010   In the TYPENAME case, DECLARATOR is really an absolute declarator.
4011   It may also be so in the PARM case, for a prototype where the
4012   argument type is specified but not the name.
4013
4014   This function is where the complicated C meanings of `static'
4015   and `extern' are interpreted.  */
4016
4017static tree
4018grokdeclarator (const struct c_declarator *declarator,
4019		struct c_declspecs *declspecs,
4020		enum decl_context decl_context, bool initialized, tree *width)
4021{
4022  tree type = declspecs->type;
4023  bool threadp = declspecs->thread_p;
4024  enum c_storage_class storage_class = declspecs->storage_class;
4025  int constp;
4026  int restrictp;
4027  int volatilep;
4028  int type_quals = TYPE_UNQUALIFIED;
4029  const char *name, *orig_name;
4030  tree typedef_type = 0;
4031  bool funcdef_flag = false;
4032  bool funcdef_syntax = false;
4033  int size_varies = 0;
4034  tree decl_attr = declspecs->decl_attr;
4035  int array_ptr_quals = TYPE_UNQUALIFIED;
4036  tree array_ptr_attrs = NULL_TREE;
4037  int array_parm_static = 0;
4038  bool array_parm_vla_unspec_p = false;
4039  tree returned_attrs = NULL_TREE;
4040  bool bitfield = width != NULL;
4041  tree element_type;
4042  struct c_arg_info *arg_info = 0;
4043
4044  if (decl_context == FUNCDEF)
4045    funcdef_flag = true, decl_context = NORMAL;
4046
4047  /* Look inside a declarator for the name being declared
4048     and get it as a string, for an error message.  */
4049  {
4050    const struct c_declarator *decl = declarator;
4051    name = 0;
4052
4053    while (decl)
4054      switch (decl->kind)
4055	{
4056	case cdk_function:
4057	case cdk_array:
4058	case cdk_pointer:
4059	  funcdef_syntax = (decl->kind == cdk_function);
4060	  decl = decl->declarator;
4061	  break;
4062
4063	case cdk_attrs:
4064	  decl = decl->declarator;
4065	  break;
4066
4067	case cdk_id:
4068	  if (decl->u.id)
4069	    name = IDENTIFIER_POINTER (decl->u.id);
4070	  decl = 0;
4071	  break;
4072
4073	default:
4074	  gcc_unreachable ();
4075	}
4076    orig_name = name;
4077    if (name == 0)
4078      name = "type name";
4079  }
4080
4081  /* A function definition's declarator must have the form of
4082     a function declarator.  */
4083
4084  if (funcdef_flag && !funcdef_syntax)
4085    return 0;
4086
4087  /* If this looks like a function definition, make it one,
4088     even if it occurs where parms are expected.
4089     Then store_parm_decls will reject it and not use it as a parm.  */
4090  if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
4091    decl_context = PARM;
4092
4093  if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
4094    warn_deprecated_use (declspecs->type);
4095
4096  if ((decl_context == NORMAL || decl_context == FIELD)
4097      && current_scope == file_scope
4098      && variably_modified_type_p (type, NULL_TREE))
4099    {
4100      error ("variably modified %qs at file scope", name);
4101      type = integer_type_node;
4102    }
4103
4104  typedef_type = type;
4105  size_varies = C_TYPE_VARIABLE_SIZE (type);
4106
4107  /* Diagnose defaulting to "int".  */
4108
4109  if (declspecs->default_int_p && !in_system_header)
4110    {
4111      /* Issue a warning if this is an ISO C 99 program or if
4112	 -Wreturn-type and this is a function, or if -Wimplicit;
4113	 prefer the former warning since it is more explicit.  */
4114      if ((warn_implicit_int || warn_return_type || flag_isoc99)
4115	  && funcdef_flag)
4116	warn_about_return_type = 1;
4117      else if (warn_implicit_int || flag_isoc99)
4118	pedwarn_c99 ("type defaults to %<int%> in declaration of %qs", name);
4119    }
4120
4121  /* Adjust the type if a bit-field is being declared,
4122     -funsigned-bitfields applied and the type is not explicitly
4123     "signed".  */
4124  if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
4125      && TREE_CODE (type) == INTEGER_TYPE)
4126    type = c_common_unsigned_type (type);
4127
4128  /* Figure out the type qualifiers for the declaration.  There are
4129     two ways a declaration can become qualified.  One is something
4130     like `const int i' where the `const' is explicit.  Another is
4131     something like `typedef const int CI; CI i' where the type of the
4132     declaration contains the `const'.  A third possibility is that
4133     there is a type qualifier on the element type of a typedefed
4134     array type, in which case we should extract that qualifier so
4135     that c_apply_type_quals_to_decls receives the full list of
4136     qualifiers to work with (C90 is not entirely clear about whether
4137     duplicate qualifiers should be diagnosed in this case, but it
4138     seems most appropriate to do so).  */
4139  element_type = strip_array_types (type);
4140  constp = declspecs->const_p + TYPE_READONLY (element_type);
4141  restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
4142  volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
4143  if (pedantic && !flag_isoc99)
4144    {
4145      if (constp > 1)
4146	pedwarn ("duplicate %<const%>");
4147      if (restrictp > 1)
4148	pedwarn ("duplicate %<restrict%>");
4149      if (volatilep > 1)
4150	pedwarn ("duplicate %<volatile%>");
4151    }
4152  if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
4153    type = TYPE_MAIN_VARIANT (type);
4154  type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4155		| (restrictp ? TYPE_QUAL_RESTRICT : 0)
4156		| (volatilep ? TYPE_QUAL_VOLATILE : 0));
4157
4158  /* Warn about storage classes that are invalid for certain
4159     kinds of declarations (parameters, typenames, etc.).  */
4160
4161  if (funcdef_flag
4162      && (threadp
4163	  || storage_class == csc_auto
4164	  || storage_class == csc_register
4165	  || storage_class == csc_typedef))
4166    {
4167      if (storage_class == csc_auto
4168	  && (pedantic || current_scope == file_scope))
4169	pedwarn ("function definition declared %<auto%>");
4170      if (storage_class == csc_register)
4171	error ("function definition declared %<register%>");
4172      if (storage_class == csc_typedef)
4173	error ("function definition declared %<typedef%>");
4174      if (threadp)
4175	error ("function definition declared %<__thread%>");
4176      threadp = false;
4177      if (storage_class == csc_auto
4178	  || storage_class == csc_register
4179	  || storage_class == csc_typedef)
4180	storage_class = csc_none;
4181    }
4182  else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
4183    {
4184      if (decl_context == PARM && storage_class == csc_register)
4185	;
4186      else
4187	{
4188	  switch (decl_context)
4189	    {
4190	    case FIELD:
4191	      error ("storage class specified for structure field %qs",
4192		     name);
4193	      break;
4194	    case PARM:
4195	      error ("storage class specified for parameter %qs", name);
4196	      break;
4197	    default:
4198	      error ("storage class specified for typename");
4199	      break;
4200	    }
4201	  storage_class = csc_none;
4202	  threadp = false;
4203	}
4204    }
4205  else if (storage_class == csc_extern
4206	   && initialized
4207	   && !funcdef_flag)
4208    {
4209      /* 'extern' with initialization is invalid if not at file scope.  */
4210       if (current_scope == file_scope)
4211         {
4212           /* It is fine to have 'extern const' when compiling at C
4213              and C++ intersection.  */
4214           if (!(warn_cxx_compat && constp))
4215             warning (0, "%qs initialized and declared %<extern%>", name);
4216         }
4217      else
4218	error ("%qs has both %<extern%> and initializer", name);
4219    }
4220  else if (current_scope == file_scope)
4221    {
4222      if (storage_class == csc_auto)
4223	error ("file-scope declaration of %qs specifies %<auto%>", name);
4224      if (pedantic && storage_class == csc_register)
4225	pedwarn ("file-scope declaration of %qs specifies %<register%>", name);
4226    }
4227  else
4228    {
4229      if (storage_class == csc_extern && funcdef_flag)
4230	error ("nested function %qs declared %<extern%>", name);
4231      else if (threadp && storage_class == csc_none)
4232	{
4233	  error ("function-scope %qs implicitly auto and declared "
4234		 "%<__thread%>",
4235		 name);
4236	  threadp = false;
4237	}
4238    }
4239
4240  /* Now figure out the structure of the declarator proper.
4241     Descend through it, creating more complex types, until we reach
4242     the declared identifier (or NULL_TREE, in an absolute declarator).
4243     At each stage we maintain an unqualified version of the type
4244     together with any qualifiers that should be applied to it with
4245     c_build_qualified_type; this way, array types including
4246     multidimensional array types are first built up in unqualified
4247     form and then the qualified form is created with
4248     TYPE_MAIN_VARIANT pointing to the unqualified form.  */
4249
4250  while (declarator && declarator->kind != cdk_id)
4251    {
4252      if (type == error_mark_node)
4253	{
4254	  declarator = declarator->declarator;
4255	  continue;
4256	}
4257
4258      /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4259	 a cdk_pointer (for *...),
4260	 a cdk_function (for ...(...)),
4261	 a cdk_attrs (for nested attributes),
4262	 or a cdk_id (for the name being declared
4263	 or the place in an absolute declarator
4264	 where the name was omitted).
4265	 For the last case, we have just exited the loop.
4266
4267	 At this point, TYPE is the type of elements of an array,
4268	 or for a function to return, or for a pointer to point to.
4269	 After this sequence of ifs, TYPE is the type of the
4270	 array or function or pointer, and DECLARATOR has had its
4271	 outermost layer removed.  */
4272
4273      if (array_ptr_quals != TYPE_UNQUALIFIED
4274	  || array_ptr_attrs != NULL_TREE
4275	  || array_parm_static)
4276	{
4277	  /* Only the innermost declarator (making a parameter be of
4278	     array type which is converted to pointer type)
4279	     may have static or type qualifiers.  */
4280	  error ("static or type qualifiers in non-parameter array declarator");
4281	  array_ptr_quals = TYPE_UNQUALIFIED;
4282	  array_ptr_attrs = NULL_TREE;
4283	  array_parm_static = 0;
4284	}
4285
4286      switch (declarator->kind)
4287	{
4288	case cdk_attrs:
4289	  {
4290	    /* A declarator with embedded attributes.  */
4291	    tree attrs = declarator->u.attrs;
4292	    const struct c_declarator *inner_decl;
4293	    int attr_flags = 0;
4294	    declarator = declarator->declarator;
4295	    inner_decl = declarator;
4296	    while (inner_decl->kind == cdk_attrs)
4297	      inner_decl = inner_decl->declarator;
4298	    if (inner_decl->kind == cdk_id)
4299	      attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
4300	    else if (inner_decl->kind == cdk_function)
4301	      attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
4302	    else if (inner_decl->kind == cdk_array)
4303	      attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
4304	    returned_attrs = decl_attributes (&type,
4305					      chainon (returned_attrs, attrs),
4306					      attr_flags);
4307	    break;
4308	  }
4309	case cdk_array:
4310	  {
4311	    tree itype = NULL_TREE;
4312	    tree size = declarator->u.array.dimen;
4313	    /* The index is a signed object `sizetype' bits wide.  */
4314	    tree index_type = c_common_signed_type (sizetype);
4315
4316	    array_ptr_quals = declarator->u.array.quals;
4317	    array_ptr_attrs = declarator->u.array.attrs;
4318	    array_parm_static = declarator->u.array.static_p;
4319	    array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
4320
4321	    declarator = declarator->declarator;
4322
4323	    /* Check for some types that there cannot be arrays of.  */
4324
4325	    if (VOID_TYPE_P (type))
4326	      {
4327		error ("declaration of %qs as array of voids", name);
4328		type = error_mark_node;
4329	      }
4330
4331	    if (TREE_CODE (type) == FUNCTION_TYPE)
4332	      {
4333		error ("declaration of %qs as array of functions", name);
4334		type = error_mark_node;
4335	      }
4336
4337	    if (pedantic && !in_system_header && flexible_array_type_p (type))
4338	      pedwarn ("invalid use of structure with flexible array member");
4339
4340	    if (size == error_mark_node)
4341	      type = error_mark_node;
4342
4343	    if (type == error_mark_node)
4344	      continue;
4345
4346	    /* If size was specified, set ITYPE to a range-type for
4347	       that size.  Otherwise, ITYPE remains null.  finish_decl
4348	       may figure it out from an initial value.  */
4349
4350	    if (size)
4351	      {
4352		/* Strip NON_LVALUE_EXPRs since we aren't using as an
4353		   lvalue.  */
4354		STRIP_TYPE_NOPS (size);
4355
4356		if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
4357		  {
4358		    error ("size of array %qs has non-integer type", name);
4359		    size = integer_one_node;
4360		  }
4361
4362		if (pedantic && integer_zerop (size))
4363		  pedwarn ("ISO C forbids zero-size array %qs", name);
4364
4365		if (TREE_CODE (size) == INTEGER_CST)
4366		  {
4367		    constant_expression_warning (size);
4368		    if (tree_int_cst_sgn (size) < 0)
4369		      {
4370			error ("size of array %qs is negative", name);
4371			size = integer_one_node;
4372		      }
4373		  }
4374		else if ((decl_context == NORMAL || decl_context == FIELD)
4375			 && current_scope == file_scope)
4376		  {
4377		    error ("variably modified %qs at file scope", name);
4378		    size = integer_one_node;
4379		  }
4380		else
4381		  {
4382		    /* Make sure the array size remains visibly
4383		       nonconstant even if it is (eg) a const variable
4384		       with known value.  */
4385		    size_varies = 1;
4386		    warn_variable_length_array (orig_name, size);
4387		    if (warn_variable_decl)
4388		      warning (0, "variable-sized array %qs", name);
4389		  }
4390
4391		if (integer_zerop (size))
4392		  {
4393		    /* A zero-length array cannot be represented with
4394		       an unsigned index type, which is what we'll
4395		       get with build_index_type.  Create an
4396		       open-ended range instead.  */
4397		    itype = build_range_type (sizetype, size, NULL_TREE);
4398		  }
4399		else
4400		  {
4401		    /* Arrange for the SAVE_EXPR on the inside of the
4402		       MINUS_EXPR, which allows the -1 to get folded
4403		       with the +1 that happens when building TYPE_SIZE.  */
4404		    if (size_varies)
4405		      size = variable_size (size);
4406
4407		    /* Compute the maximum valid index, that is, size
4408		       - 1.  Do the calculation in index_type, so that
4409		       if it is a variable the computations will be
4410		       done in the proper mode.  */
4411		    itype = fold_build2 (MINUS_EXPR, index_type,
4412					 convert (index_type, size),
4413					 convert (index_type,
4414						  size_one_node));
4415
4416		    /* If that overflowed, the array is too big.  ???
4417		       While a size of INT_MAX+1 technically shouldn't
4418		       cause an overflow (because we subtract 1), the
4419		       overflow is recorded during the conversion to
4420		       index_type, before the subtraction.  Handling
4421		       this case seems like an unnecessary
4422		       complication.  */
4423		    if (TREE_CODE (itype) == INTEGER_CST
4424			&& TREE_OVERFLOW (itype))
4425		      {
4426			error ("size of array %qs is too large", name);
4427			type = error_mark_node;
4428			continue;
4429		      }
4430
4431		    itype = build_index_type (itype);
4432		  }
4433	      }
4434	    else if (decl_context == FIELD)
4435	      {
4436		if (pedantic && !flag_isoc99 && !in_system_header)
4437		  pedwarn ("ISO C90 does not support flexible array members");
4438
4439		/* ISO C99 Flexible array members are effectively
4440		   identical to GCC's zero-length array extension.  */
4441		itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4442	      }
4443	    else if (decl_context == PARM)
4444	      {
4445		if (array_parm_vla_unspec_p)
4446		  {
4447		    if (! orig_name)
4448		      {
4449			/* C99 6.7.5.2p4 */
4450			error ("%<[*]%> not allowed in other than a declaration");
4451		      }
4452
4453		    itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4454		    size_varies = 1;
4455		  }
4456	      }
4457	    else if (decl_context == TYPENAME)
4458	      {
4459		if (array_parm_vla_unspec_p)
4460		  {
4461		    /* The error is printed elsewhere.  We use this to
4462		       avoid messing up with incomplete array types of
4463		       the same type, that would otherwise be modified
4464		       below.  */
4465		    itype = build_range_type (sizetype, size_zero_node,
4466					      NULL_TREE);
4467		  }
4468	      }
4469
4470	     /* Complain about arrays of incomplete types.  */
4471	    if (!COMPLETE_TYPE_P (type))
4472	      {
4473		error ("array type has incomplete element type");
4474		type = error_mark_node;
4475	      }
4476	    else
4477	    /* When itype is NULL, a shared incomplete array type is
4478	       returned for all array of a given type.  Elsewhere we
4479	       make sure we don't complete that type before copying
4480	       it, but here we want to make sure we don't ever
4481	       modify the shared type, so we gcc_assert (itype)
4482	       below.  */
4483	      type = build_array_type (type, itype);
4484
4485	    if (type != error_mark_node)
4486	      {
4487		if (size_varies)
4488		  {
4489		    /* It is ok to modify type here even if itype is
4490		       NULL: if size_varies, we're in a
4491		       multi-dimensional array and the inner type has
4492		       variable size, so the enclosing shared array type
4493		       must too.  */
4494		    if (size && TREE_CODE (size) == INTEGER_CST)
4495		      type
4496			= build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
4497		    C_TYPE_VARIABLE_SIZE (type) = 1;
4498		  }
4499
4500		/* The GCC extension for zero-length arrays differs from
4501		   ISO flexible array members in that sizeof yields
4502		   zero.  */
4503		if (size && integer_zerop (size))
4504		  {
4505		    gcc_assert (itype);
4506		    TYPE_SIZE (type) = bitsize_zero_node;
4507		    TYPE_SIZE_UNIT (type) = size_zero_node;
4508		  }
4509		if (array_parm_vla_unspec_p)
4510		  {
4511		    gcc_assert (itype);
4512		    /* The type is complete.  C99 6.7.5.2p4  */
4513		    TYPE_SIZE (type) = bitsize_zero_node;
4514		    TYPE_SIZE_UNIT (type) = size_zero_node;
4515		  }
4516	      }
4517
4518	    if (decl_context != PARM
4519		&& (array_ptr_quals != TYPE_UNQUALIFIED
4520		    || array_ptr_attrs != NULL_TREE
4521		    || array_parm_static))
4522	      {
4523		error ("static or type qualifiers in non-parameter array declarator");
4524		array_ptr_quals = TYPE_UNQUALIFIED;
4525		array_ptr_attrs = NULL_TREE;
4526		array_parm_static = 0;
4527	      }
4528	    break;
4529	  }
4530	case cdk_function:
4531	  {
4532	    /* Say it's a definition only for the declarator closest
4533	       to the identifier, apart possibly from some
4534	       attributes.  */
4535	    bool really_funcdef = false;
4536	    tree arg_types;
4537	    if (funcdef_flag)
4538	      {
4539		const struct c_declarator *t = declarator->declarator;
4540		while (t->kind == cdk_attrs)
4541		  t = t->declarator;
4542		really_funcdef = (t->kind == cdk_id);
4543	      }
4544
4545	    /* Declaring a function type.  Make sure we have a valid
4546	       type for the function to return.  */
4547	    if (type == error_mark_node)
4548	      continue;
4549
4550	    size_varies = 0;
4551
4552	    /* Warn about some types functions can't return.  */
4553	    if (TREE_CODE (type) == FUNCTION_TYPE)
4554	      {
4555		error ("%qs declared as function returning a function", name);
4556		type = integer_type_node;
4557	      }
4558	    if (TREE_CODE (type) == ARRAY_TYPE)
4559	      {
4560		error ("%qs declared as function returning an array", name);
4561		type = integer_type_node;
4562	      }
4563
4564	    /* Construct the function type and go to the next
4565	       inner layer of declarator.  */
4566	    arg_info = declarator->u.arg_info;
4567	    arg_types = grokparms (arg_info, really_funcdef);
4568	    if (really_funcdef)
4569	      put_pending_sizes (arg_info->pending_sizes);
4570
4571	    /* Type qualifiers before the return type of the function
4572	       qualify the return type, not the function type.  */
4573	    if (type_quals)
4574	      {
4575		/* Type qualifiers on a function return type are
4576		   normally permitted by the standard but have no
4577		   effect, so give a warning at -Wreturn-type.
4578		   Qualifiers on a void return type are banned on
4579		   function definitions in ISO C; GCC used to used
4580		   them for noreturn functions.  */
4581		if (VOID_TYPE_P (type) && really_funcdef)
4582		  pedwarn ("function definition has qualified void return type");
4583		else
4584		  warning (OPT_Wreturn_type,
4585			   "type qualifiers ignored on function return type");
4586
4587		type = c_build_qualified_type (type, type_quals);
4588	      }
4589	    type_quals = TYPE_UNQUALIFIED;
4590
4591	    type = build_function_type (type, arg_types);
4592	    declarator = declarator->declarator;
4593
4594	    /* Set the TYPE_CONTEXTs for each tagged type which is local to
4595	       the formal parameter list of this FUNCTION_TYPE to point to
4596	       the FUNCTION_TYPE node itself.  */
4597	    {
4598	      tree link;
4599
4600	      for (link = arg_info->tags;
4601		   link;
4602		   link = TREE_CHAIN (link))
4603		TYPE_CONTEXT (TREE_VALUE (link)) = type;
4604	    }
4605	    break;
4606	  }
4607	case cdk_pointer:
4608	  {
4609	    /* Merge any constancy or volatility into the target type
4610	       for the pointer.  */
4611
4612	    if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4613		&& type_quals)
4614	      pedwarn ("ISO C forbids qualified function types");
4615	    if (type_quals)
4616	      type = c_build_qualified_type (type, type_quals);
4617	    size_varies = 0;
4618
4619	    /* When the pointed-to type involves components of variable size,
4620	       care must be taken to ensure that the size evaluation code is
4621	       emitted early enough to dominate all the possible later uses
4622	       and late enough for the variables on which it depends to have
4623	       been assigned.
4624
4625	       This is expected to happen automatically when the pointed-to
4626	       type has a name/declaration of it's own, but special attention
4627	       is required if the type is anonymous.
4628
4629	       We handle the NORMAL and FIELD contexts here by attaching an
4630	       artificial TYPE_DECL to such pointed-to type.  This forces the
4631	       sizes evaluation at a safe point and ensures it is not deferred
4632	       until e.g. within a deeper conditional context.
4633
4634	       We expect nothing to be needed here for PARM or TYPENAME.
4635	       Pushing a TYPE_DECL at this point for TYPENAME would actually
4636	       be incorrect, as we might be in the middle of an expression
4637	       with side effects on the pointed-to type size "arguments" prior
4638	       to the pointer declaration point and the fake TYPE_DECL in the
4639	       enclosing context would force the size evaluation prior to the
4640	       side effects.  */
4641
4642	    if (!TYPE_NAME (type)
4643		&& (decl_context == NORMAL || decl_context == FIELD)
4644		&& variably_modified_type_p (type, NULL_TREE))
4645	      {
4646		tree decl = build_decl (TYPE_DECL, NULL_TREE, type);
4647		DECL_ARTIFICIAL (decl) = 1;
4648		pushdecl (decl);
4649		finish_decl (decl, NULL_TREE, NULL_TREE);
4650		TYPE_NAME (type) = decl;
4651	      }
4652
4653	    type = build_pointer_type (type);
4654
4655	    /* Process type qualifiers (such as const or volatile)
4656	       that were given inside the `*'.  */
4657	    type_quals = declarator->u.pointer_quals;
4658
4659	    declarator = declarator->declarator;
4660	    break;
4661	  }
4662	default:
4663	  gcc_unreachable ();
4664	}
4665    }
4666
4667  /* Now TYPE has the actual type, apart from any qualifiers in
4668     TYPE_QUALS.  */
4669
4670  /* Check the type and width of a bit-field.  */
4671  if (bitfield)
4672    check_bitfield_type_and_width (&type, width, orig_name);
4673
4674  /* Did array size calculations overflow?  */
4675
4676  if (TREE_CODE (type) == ARRAY_TYPE
4677      && COMPLETE_TYPE_P (type)
4678      && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
4679      && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
4680    {
4681      error ("size of array %qs is too large", name);
4682      /* If we proceed with the array type as it is, we'll eventually
4683	 crash in tree_low_cst().  */
4684      type = error_mark_node;
4685    }
4686
4687  /* If this is declaring a typedef name, return a TYPE_DECL.  */
4688
4689  if (storage_class == csc_typedef)
4690    {
4691      tree decl;
4692      if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4693	  && type_quals)
4694	pedwarn ("ISO C forbids qualified function types");
4695      if (type_quals)
4696	type = c_build_qualified_type (type, type_quals);
4697      decl = build_decl (TYPE_DECL, declarator->u.id, type);
4698      if (declspecs->explicit_signed_p)
4699	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4700      decl_attributes (&decl, returned_attrs, 0);
4701      if (declspecs->inline_p)
4702	pedwarn ("typedef %q+D declared %<inline%>", decl);
4703      return decl;
4704    }
4705
4706  /* If this is a type name (such as, in a cast or sizeof),
4707     compute the type and return it now.  */
4708
4709  if (decl_context == TYPENAME)
4710    {
4711      /* Note that the grammar rejects storage classes in typenames
4712	 and fields.  */
4713      gcc_assert (storage_class == csc_none && !threadp
4714		  && !declspecs->inline_p);
4715      if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4716	  && type_quals)
4717	pedwarn ("ISO C forbids const or volatile function types");
4718      if (type_quals)
4719	type = c_build_qualified_type (type, type_quals);
4720      decl_attributes (&type, returned_attrs, 0);
4721      return type;
4722    }
4723
4724  if (pedantic && decl_context == FIELD
4725      && variably_modified_type_p (type, NULL_TREE))
4726    {
4727      /* C99 6.7.2.1p8 */
4728      pedwarn ("a member of a structure or union cannot have a variably modified type");
4729    }
4730
4731  /* Aside from typedefs and type names (handle above),
4732     `void' at top level (not within pointer)
4733     is allowed only in public variables.
4734     We don't complain about parms either, but that is because
4735     a better error message can be made later.  */
4736
4737  if (VOID_TYPE_P (type) && decl_context != PARM
4738      && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4739	    && (storage_class == csc_extern
4740		|| (current_scope == file_scope
4741		    && !(storage_class == csc_static
4742			 || storage_class == csc_register)))))
4743    {
4744      error ("variable or field %qs declared void", name);
4745      type = integer_type_node;
4746    }
4747
4748  /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4749     or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
4750
4751  {
4752    tree decl;
4753
4754    if (decl_context == PARM)
4755      {
4756	tree type_as_written;
4757	tree promoted_type;
4758
4759	/* A parameter declared as an array of T is really a pointer to T.
4760	   One declared as a function is really a pointer to a function.  */
4761
4762	if (TREE_CODE (type) == ARRAY_TYPE)
4763	  {
4764	    /* Transfer const-ness of array into that of type pointed to.  */
4765	    type = TREE_TYPE (type);
4766	    if (type_quals)
4767	      type = c_build_qualified_type (type, type_quals);
4768	    type = build_pointer_type (type);
4769	    type_quals = array_ptr_quals;
4770
4771	    /* We don't yet implement attributes in this context.  */
4772	    if (array_ptr_attrs != NULL_TREE)
4773	      warning (OPT_Wattributes,
4774		       "attributes in parameter array declarator ignored");
4775
4776	    size_varies = 0;
4777	  }
4778	else if (TREE_CODE (type) == FUNCTION_TYPE)
4779	  {
4780	    if (pedantic && type_quals)
4781	      pedwarn ("ISO C forbids qualified function types");
4782	    if (type_quals)
4783	      type = c_build_qualified_type (type, type_quals);
4784	    type = build_pointer_type (type);
4785	    type_quals = TYPE_UNQUALIFIED;
4786	  }
4787	else if (type_quals)
4788	  type = c_build_qualified_type (type, type_quals);
4789
4790	type_as_written = type;
4791
4792	decl = build_decl (PARM_DECL, declarator->u.id, type);
4793	if (size_varies)
4794	  C_DECL_VARIABLE_SIZE (decl) = 1;
4795
4796	/* Compute the type actually passed in the parmlist,
4797	   for the case where there is no prototype.
4798	   (For example, shorts and chars are passed as ints.)
4799	   When there is a prototype, this is overridden later.  */
4800
4801	if (type == error_mark_node)
4802	  promoted_type = type;
4803	else
4804	  promoted_type = c_type_promotes_to (type);
4805
4806	DECL_ARG_TYPE (decl) = promoted_type;
4807	if (declspecs->inline_p)
4808	  pedwarn ("parameter %q+D declared %<inline%>", decl);
4809      }
4810    else if (decl_context == FIELD)
4811      {
4812	/* Note that the grammar rejects storage classes in typenames
4813	   and fields.  */
4814	gcc_assert (storage_class == csc_none && !threadp
4815		    && !declspecs->inline_p);
4816
4817	/* Structure field.  It may not be a function.  */
4818
4819	if (TREE_CODE (type) == FUNCTION_TYPE)
4820	  {
4821	    error ("field %qs declared as a function", name);
4822	    type = build_pointer_type (type);
4823	  }
4824	else if (TREE_CODE (type) != ERROR_MARK
4825		 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4826	  {
4827	    error ("field %qs has incomplete type", name);
4828	    type = error_mark_node;
4829	  }
4830	type = c_build_qualified_type (type, type_quals);
4831	decl = build_decl (FIELD_DECL, declarator->u.id, type);
4832	DECL_NONADDRESSABLE_P (decl) = bitfield;
4833
4834	if (size_varies)
4835	  C_DECL_VARIABLE_SIZE (decl) = 1;
4836      }
4837    else if (TREE_CODE (type) == FUNCTION_TYPE)
4838      {
4839	if (storage_class == csc_register || threadp)
4840	  {
4841	    error ("invalid storage class for function %qs", name);
4842	   }
4843	else if (current_scope != file_scope)
4844	  {
4845	    /* Function declaration not at file scope.  Storage
4846	       classes other than `extern' are not allowed, C99
4847	       6.7.1p5, and `extern' makes no difference.  However,
4848	       GCC allows 'auto', perhaps with 'inline', to support
4849	       nested functions.  */
4850	    if (storage_class == csc_auto)
4851	      {
4852		if (pedantic)
4853		  pedwarn ("invalid storage class for function %qs", name);
4854	      }
4855	    else if (storage_class == csc_static)
4856	      {
4857		error ("invalid storage class for function %qs", name);
4858		if (funcdef_flag)
4859		  storage_class = declspecs->storage_class = csc_none;
4860		else
4861		  return 0;
4862	      }
4863	  }
4864
4865	decl = build_decl (FUNCTION_DECL, declarator->u.id, type);
4866	decl = build_decl_attribute_variant (decl, decl_attr);
4867
4868	DECL_LANG_SPECIFIC (decl) = GGC_CNEW (struct lang_decl);
4869
4870	if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
4871	  pedwarn ("ISO C forbids qualified function types");
4872
4873	/* GNU C interprets a volatile-qualified function type to indicate
4874	   that the function does not return.  */
4875	if ((type_quals & TYPE_QUAL_VOLATILE)
4876	    && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4877	  warning (0, "%<noreturn%> function returns non-void value");
4878
4879	/* Every function declaration is an external reference
4880	   (DECL_EXTERNAL) except for those which are not at file
4881	   scope and are explicitly declared "auto".  This is
4882	   forbidden by standard C (C99 6.7.1p5) and is interpreted by
4883	   GCC to signify a forward declaration of a nested function.  */
4884	if (storage_class == csc_auto && current_scope != file_scope)
4885	  DECL_EXTERNAL (decl) = 0;
4886	/* In C99, a function which is declared 'inline' with 'extern'
4887	   is not an external reference (which is confusing).  It
4888	   means that the later definition of the function must be output
4889	   in this file, C99 6.7.4p6.  In GNU C89, a function declared
4890	   'extern inline' is an external reference.  */
4891	else if (declspecs->inline_p && storage_class != csc_static)
4892	  DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
4893				  == flag_gnu89_inline);
4894	else
4895	  DECL_EXTERNAL (decl) = !initialized;
4896
4897	/* Record absence of global scope for `static' or `auto'.  */
4898	TREE_PUBLIC (decl)
4899	  = !(storage_class == csc_static || storage_class == csc_auto);
4900
4901	/* For a function definition, record the argument information
4902	   block where store_parm_decls will look for it.  */
4903	if (funcdef_flag)
4904	  current_function_arg_info = arg_info;
4905
4906	if (declspecs->default_int_p)
4907	  C_FUNCTION_IMPLICIT_INT (decl) = 1;
4908
4909	/* Record presence of `inline', if it is reasonable.  */
4910	if (flag_hosted && MAIN_NAME_P (declarator->u.id))
4911	  {
4912	    if (declspecs->inline_p)
4913	      pedwarn ("cannot inline function %<main%>");
4914	  }
4915	else if (declspecs->inline_p)
4916	  {
4917	    /* Record that the function is declared `inline'.  */
4918	    DECL_DECLARED_INLINE_P (decl) = 1;
4919
4920	    /* Do not mark bare declarations as DECL_INLINE.  Doing so
4921	       in the presence of multiple declarations can result in
4922	       the abstract origin pointing between the declarations,
4923	       which will confuse dwarf2out.  */
4924	    if (initialized)
4925	      DECL_INLINE (decl) = 1;
4926	  }
4927	/* If -finline-functions, assume it can be inlined.  This does
4928	   two things: let the function be deferred until it is actually
4929	   needed, and let dwarf2 know that the function is inlinable.  */
4930	else if (flag_inline_trees == 2 && initialized)
4931	  DECL_INLINE (decl) = 1;
4932      }
4933    else
4934      {
4935	/* It's a variable.  */
4936	/* An uninitialized decl with `extern' is a reference.  */
4937	int extern_ref = !initialized && storage_class == csc_extern;
4938
4939	type = c_build_qualified_type (type, type_quals);
4940
4941	/* C99 6.2.2p7: It is invalid (compile-time undefined
4942	   behavior) to create an 'extern' declaration for a
4943	   variable if there is a global declaration that is
4944	   'static' and the global declaration is not visible.
4945	   (If the static declaration _is_ currently visible,
4946	   the 'extern' declaration is taken to refer to that decl.) */
4947	if (extern_ref && current_scope != file_scope)
4948	  {
4949	    tree global_decl  = identifier_global_value (declarator->u.id);
4950	    tree visible_decl = lookup_name (declarator->u.id);
4951
4952	    if (global_decl
4953		&& global_decl != visible_decl
4954		&& TREE_CODE (global_decl) == VAR_DECL
4955		&& !TREE_PUBLIC (global_decl))
4956	      error ("variable previously declared %<static%> redeclared "
4957		     "%<extern%>");
4958	  }
4959
4960	decl = build_decl (VAR_DECL, declarator->u.id, type);
4961	DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4962	if (size_varies)
4963	  C_DECL_VARIABLE_SIZE (decl) = 1;
4964
4965	if (declspecs->inline_p)
4966	  pedwarn ("variable %q+D declared %<inline%>", decl);
4967
4968	/* At file scope, an initialized extern declaration may follow
4969	   a static declaration.  In that case, DECL_EXTERNAL will be
4970	   reset later in start_decl.  */
4971	DECL_EXTERNAL (decl) = (storage_class == csc_extern);
4972
4973	/* At file scope, the presence of a `static' or `register' storage
4974	   class specifier, or the absence of all storage class specifiers
4975	   makes this declaration a definition (perhaps tentative).  Also,
4976	   the absence of `static' makes it public.  */
4977	if (current_scope == file_scope)
4978	  {
4979	    TREE_PUBLIC (decl) = storage_class != csc_static;
4980	    TREE_STATIC (decl) = !extern_ref;
4981	  }
4982	/* Not at file scope, only `static' makes a static definition.  */
4983	else
4984	  {
4985	    TREE_STATIC (decl) = (storage_class == csc_static);
4986	    TREE_PUBLIC (decl) = extern_ref;
4987	  }
4988
4989	if (threadp)
4990	  {
4991	    if (targetm.have_tls)
4992	      DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
4993	    else
4994	      /* A mere warning is sure to result in improper semantics
4995		 at runtime.  Don't bother to allow this to compile.  */
4996	      error ("thread-local storage not supported for this target");
4997	  }
4998      }
4999
5000    if (storage_class == csc_extern
5001	&& variably_modified_type_p (type, NULL_TREE))
5002      {
5003	/* C99 6.7.5.2p2 */
5004	error ("object with variably modified type must have no linkage");
5005      }
5006
5007    /* Record `register' declaration for warnings on &
5008       and in case doing stupid register allocation.  */
5009
5010    if (storage_class == csc_register)
5011      {
5012	C_DECL_REGISTER (decl) = 1;
5013	DECL_REGISTER (decl) = 1;
5014      }
5015
5016    /* Record constancy and volatility.  */
5017    c_apply_type_quals_to_decl (type_quals, decl);
5018
5019    /* If a type has volatile components, it should be stored in memory.
5020       Otherwise, the fact that those components are volatile
5021       will be ignored, and would even crash the compiler.
5022       Of course, this only makes sense on  VAR,PARM, and RESULT decl's.   */
5023    if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
5024	&& (TREE_CODE (decl) == VAR_DECL ||  TREE_CODE (decl) == PARM_DECL
5025	  || TREE_CODE (decl) == RESULT_DECL))
5026      {
5027	/* It is not an error for a structure with volatile fields to
5028	   be declared register, but reset DECL_REGISTER since it
5029	   cannot actually go in a register.  */
5030	int was_reg = C_DECL_REGISTER (decl);
5031	C_DECL_REGISTER (decl) = 0;
5032	DECL_REGISTER (decl) = 0;
5033	c_mark_addressable (decl);
5034	C_DECL_REGISTER (decl) = was_reg;
5035      }
5036
5037  /* This is the earliest point at which we might know the assembler
5038     name of a variable.  Thus, if it's known before this, die horribly.  */
5039    gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
5040
5041    decl_attributes (&decl, returned_attrs, 0);
5042
5043    return decl;
5044  }
5045}
5046
5047/* Decode the parameter-list info for a function type or function definition.
5048   The argument is the value returned by `get_parm_info' (or made in c-parse.c
5049   if there is an identifier list instead of a parameter decl list).
5050   These two functions are separate because when a function returns
5051   or receives functions then each is called multiple times but the order
5052   of calls is different.  The last call to `grokparms' is always the one
5053   that contains the formal parameter names of a function definition.
5054
5055   Return a list of arg types to use in the FUNCTION_TYPE for this function.
5056
5057   FUNCDEF_FLAG is true for a function definition, false for
5058   a mere declaration.  A nonempty identifier-list gets an error message
5059   when FUNCDEF_FLAG is false.  */
5060
5061static tree
5062grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
5063{
5064  tree arg_types = arg_info->types;
5065
5066  if (funcdef_flag && arg_info->had_vla_unspec)
5067    {
5068      /* A function definition isn't function prototype scope C99 6.2.1p4.  */
5069      /* C99 6.7.5.2p4 */
5070      error ("%<[*]%> not allowed in other than function prototype scope");
5071    }
5072
5073  if (arg_types == 0 && !funcdef_flag && !in_system_header)
5074    warning (OPT_Wstrict_prototypes,
5075	     "function declaration isn%'t a prototype");
5076
5077  if (arg_types == error_mark_node)
5078    return 0;  /* don't set TYPE_ARG_TYPES in this case */
5079
5080  else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
5081    {
5082      if (!funcdef_flag)
5083	pedwarn ("parameter names (without types) in function declaration");
5084
5085      arg_info->parms = arg_info->types;
5086      arg_info->types = 0;
5087      return 0;
5088    }
5089  else
5090    {
5091      tree parm, type, typelt;
5092      unsigned int parmno;
5093
5094      /* If there is a parameter of incomplete type in a definition,
5095	 this is an error.  In a declaration this is valid, and a
5096	 struct or union type may be completed later, before any calls
5097	 or definition of the function.  In the case where the tag was
5098	 first declared within the parameter list, a warning has
5099	 already been given.  If a parameter has void type, then
5100	 however the function cannot be defined or called, so
5101	 warn.  */
5102
5103      for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
5104	   parm;
5105	   parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
5106	{
5107	  type = TREE_VALUE (typelt);
5108	  if (type == error_mark_node)
5109	    continue;
5110
5111	  if (!COMPLETE_TYPE_P (type))
5112	    {
5113	      if (funcdef_flag)
5114		{
5115		  if (DECL_NAME (parm))
5116		    error ("parameter %u (%q+D) has incomplete type",
5117			   parmno, parm);
5118		  else
5119		    error ("%Jparameter %u has incomplete type",
5120			   parm, parmno);
5121
5122		  TREE_VALUE (typelt) = error_mark_node;
5123		  TREE_TYPE (parm) = error_mark_node;
5124		}
5125	      else if (VOID_TYPE_P (type))
5126		{
5127		  if (DECL_NAME (parm))
5128		    warning (0, "parameter %u (%q+D) has void type",
5129			     parmno, parm);
5130		  else
5131		    warning (0, "%Jparameter %u has void type",
5132			     parm, parmno);
5133		}
5134	    }
5135
5136	  if (DECL_NAME (parm) && TREE_USED (parm))
5137	    warn_if_shadowing (parm);
5138	}
5139      return arg_types;
5140    }
5141}
5142
5143/* Take apart the current scope and return a c_arg_info structure with
5144   info on a parameter list just parsed.
5145
5146   This structure is later fed to 'grokparms' and 'store_parm_decls'.
5147
5148   ELLIPSIS being true means the argument list ended in '...' so don't
5149   append a sentinel (void_list_node) to the end of the type-list.  */
5150
5151struct c_arg_info *
5152get_parm_info (bool ellipsis)
5153{
5154  struct c_binding *b = current_scope->bindings;
5155  struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
5156					struct c_arg_info);
5157  tree parms    = 0;
5158  tree tags     = 0;
5159  tree types    = 0;
5160  tree others   = 0;
5161
5162  static bool explained_incomplete_types = false;
5163  bool gave_void_only_once_err = false;
5164
5165  arg_info->parms = 0;
5166  arg_info->tags = 0;
5167  arg_info->types = 0;
5168  arg_info->others = 0;
5169  arg_info->pending_sizes = 0;
5170  arg_info->had_vla_unspec = current_scope->had_vla_unspec;
5171
5172  /* The bindings in this scope must not get put into a block.
5173     We will take care of deleting the binding nodes.  */
5174  current_scope->bindings = 0;
5175
5176  /* This function is only called if there was *something* on the
5177     parameter list.  */
5178  gcc_assert (b);
5179
5180  /* A parameter list consisting solely of 'void' indicates that the
5181     function takes no arguments.  But if the 'void' is qualified
5182     (by 'const' or 'volatile'), or has a storage class specifier
5183     ('register'), then the behavior is undefined; issue an error.
5184     Typedefs for 'void' are OK (see DR#157).  */
5185  if (b->prev == 0			    /* one binding */
5186      && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
5187      && !DECL_NAME (b->decl)               /* anonymous */
5188      && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
5189    {
5190      if (TREE_THIS_VOLATILE (b->decl)
5191	  || TREE_READONLY (b->decl)
5192	  || C_DECL_REGISTER (b->decl))
5193	error ("%<void%> as only parameter may not be qualified");
5194
5195      /* There cannot be an ellipsis.  */
5196      if (ellipsis)
5197	error ("%<void%> must be the only parameter");
5198
5199      arg_info->types = void_list_node;
5200      return arg_info;
5201    }
5202
5203  if (!ellipsis)
5204    types = void_list_node;
5205
5206  /* Break up the bindings list into parms, tags, types, and others;
5207     apply sanity checks; purge the name-to-decl bindings.  */
5208  while (b)
5209    {
5210      tree decl = b->decl;
5211      tree type = TREE_TYPE (decl);
5212      const char *keyword;
5213
5214      switch (TREE_CODE (decl))
5215	{
5216	case PARM_DECL:
5217	  if (b->id)
5218	    {
5219	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
5220	      I_SYMBOL_BINDING (b->id) = b->shadowed;
5221	    }
5222
5223	  /* Check for forward decls that never got their actual decl.  */
5224	  if (TREE_ASM_WRITTEN (decl))
5225	    error ("parameter %q+D has just a forward declaration", decl);
5226	  /* Check for (..., void, ...) and issue an error.  */
5227	  else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
5228	    {
5229	      if (!gave_void_only_once_err)
5230		{
5231		  error ("%<void%> must be the only parameter");
5232		  gave_void_only_once_err = true;
5233		}
5234	    }
5235	  else
5236	    {
5237	      /* Valid parameter, add it to the list.  */
5238	      TREE_CHAIN (decl) = parms;
5239	      parms = decl;
5240
5241	      /* Since there is a prototype, args are passed in their
5242		 declared types.  The back end may override this later.  */
5243	      DECL_ARG_TYPE (decl) = type;
5244	      types = tree_cons (0, type, types);
5245	    }
5246	  break;
5247
5248	case ENUMERAL_TYPE: keyword = "enum"; goto tag;
5249	case UNION_TYPE:    keyword = "union"; goto tag;
5250	case RECORD_TYPE:   keyword = "struct"; goto tag;
5251	tag:
5252	  /* Types may not have tag-names, in which case the type
5253	     appears in the bindings list with b->id NULL.  */
5254	  if (b->id)
5255	    {
5256	      gcc_assert (I_TAG_BINDING (b->id) == b);
5257	      I_TAG_BINDING (b->id) = b->shadowed;
5258	    }
5259
5260	  /* Warn about any struct, union or enum tags defined in a
5261	     parameter list.  The scope of such types is limited to
5262	     the parameter list, which is rarely if ever desirable
5263	     (it's impossible to call such a function with type-
5264	     correct arguments).  An anonymous union parm type is
5265	     meaningful as a GNU extension, so don't warn for that.  */
5266	  if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
5267	    {
5268	      if (b->id)
5269		/* The %s will be one of 'struct', 'union', or 'enum'.  */
5270		warning (0, "%<%s %E%> declared inside parameter list",
5271			 keyword, b->id);
5272	      else
5273		/* The %s will be one of 'struct', 'union', or 'enum'.  */
5274		warning (0, "anonymous %s declared inside parameter list",
5275			 keyword);
5276
5277	      if (!explained_incomplete_types)
5278		{
5279		  warning (0, "its scope is only this definition or declaration,"
5280			   " which is probably not what you want");
5281		  explained_incomplete_types = true;
5282		}
5283	    }
5284
5285	  tags = tree_cons (b->id, decl, tags);
5286	  break;
5287
5288	case CONST_DECL:
5289	case TYPE_DECL:
5290	case FUNCTION_DECL:
5291	  /* CONST_DECLs appear here when we have an embedded enum,
5292	     and TYPE_DECLs appear here when we have an embedded struct
5293	     or union.  No warnings for this - we already warned about the
5294	     type itself.  FUNCTION_DECLs appear when there is an implicit
5295	     function declaration in the parameter list.  */
5296
5297	  TREE_CHAIN (decl) = others;
5298	  others = decl;
5299	  /* fall through */
5300
5301	case ERROR_MARK:
5302	  /* error_mark_node appears here when we have an undeclared
5303	     variable.  Just throw it away.  */
5304	  if (b->id)
5305	    {
5306	      gcc_assert (I_SYMBOL_BINDING (b->id) == b);
5307	      I_SYMBOL_BINDING (b->id) = b->shadowed;
5308	    }
5309	  break;
5310
5311	  /* Other things that might be encountered.  */
5312	case LABEL_DECL:
5313	case VAR_DECL:
5314	default:
5315	  gcc_unreachable ();
5316	}
5317
5318      b = free_binding_and_advance (b);
5319    }
5320
5321  arg_info->parms = parms;
5322  arg_info->tags = tags;
5323  arg_info->types = types;
5324  arg_info->others = others;
5325  arg_info->pending_sizes = get_pending_sizes ();
5326  return arg_info;
5327}
5328
5329/* Get the struct, enum or union (CODE says which) with tag NAME.
5330   Define the tag as a forward-reference if it is not defined.
5331   Return a c_typespec structure for the type specifier.  */
5332
5333struct c_typespec
5334parser_xref_tag (enum tree_code code, tree name)
5335{
5336  struct c_typespec ret;
5337  /* If a cross reference is requested, look up the type
5338     already defined for this tag and return it.  */
5339
5340  tree ref = lookup_tag (code, name, 0);
5341  /* If this is the right type of tag, return what we found.
5342     (This reference will be shadowed by shadow_tag later if appropriate.)
5343     If this is the wrong type of tag, do not return it.  If it was the
5344     wrong type in the same scope, we will have had an error
5345     message already; if in a different scope and declaring
5346     a name, pending_xref_error will give an error message; but if in a
5347     different scope and not declaring a name, this tag should
5348     shadow the previous declaration of a different type of tag, and
5349     this would not work properly if we return the reference found.
5350     (For example, with "struct foo" in an outer scope, "union foo;"
5351     must shadow that tag with a new one of union type.)  */
5352  ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
5353  if (ref && TREE_CODE (ref) == code)
5354    {
5355      ret.spec = ref;
5356      return ret;
5357    }
5358
5359  /* If no such tag is yet defined, create a forward-reference node
5360     and record it as the "definition".
5361     When a real declaration of this type is found,
5362     the forward-reference will be altered into a real type.  */
5363
5364  ref = make_node (code);
5365  if (code == ENUMERAL_TYPE)
5366    {
5367      /* Give the type a default layout like unsigned int
5368	 to avoid crashing if it does not get defined.  */
5369      TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
5370      TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
5371      TYPE_USER_ALIGN (ref) = 0;
5372      TYPE_UNSIGNED (ref) = 1;
5373      TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
5374      TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
5375      TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
5376    }
5377
5378  pushtag (name, ref);
5379
5380  ret.spec = ref;
5381  return ret;
5382}
5383
5384/* Get the struct, enum or union (CODE says which) with tag NAME.
5385   Define the tag as a forward-reference if it is not defined.
5386   Return a tree for the type.  */
5387
5388tree
5389xref_tag (enum tree_code code, tree name)
5390{
5391  return parser_xref_tag (code, name).spec;
5392}
5393
5394/* Make sure that the tag NAME is defined *in the current scope*
5395   at least as a forward reference.
5396   CODE says which kind of tag NAME ought to be.  */
5397
5398tree
5399start_struct (enum tree_code code, tree name)
5400{
5401  /* If there is already a tag defined at this scope
5402     (as a forward reference), just return it.  */
5403
5404  tree ref = 0;
5405
5406  if (name != 0)
5407    ref = lookup_tag (code, name, 1);
5408  if (ref && TREE_CODE (ref) == code)
5409    {
5410      if (TYPE_SIZE (ref))
5411	{
5412	  if (code == UNION_TYPE)
5413	    error ("redefinition of %<union %E%>", name);
5414	  else
5415	    error ("redefinition of %<struct %E%>", name);
5416	}
5417      else if (C_TYPE_BEING_DEFINED (ref))
5418	{
5419	  if (code == UNION_TYPE)
5420	    error ("nested redefinition of %<union %E%>", name);
5421	  else
5422	    error ("nested redefinition of %<struct %E%>", name);
5423	  /* Don't create structures that contain themselves.  */
5424	  ref = NULL_TREE;
5425	}
5426    }
5427
5428  /* Otherwise create a forward-reference just so the tag is in scope.  */
5429
5430  if (ref == NULL_TREE || TREE_CODE (ref) != code)
5431    {
5432      ref = make_node (code);
5433      pushtag (name, ref);
5434    }
5435
5436  C_TYPE_BEING_DEFINED (ref) = 1;
5437  TYPE_PACKED (ref) = flag_pack_struct;
5438  return ref;
5439}
5440
5441/* Process the specs, declarator and width (NULL if omitted)
5442   of a structure component, returning a FIELD_DECL node.
5443   WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5444
5445   This is done during the parsing of the struct declaration.
5446   The FIELD_DECL nodes are chained together and the lot of them
5447   are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
5448
5449tree
5450grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs,
5451	   tree width)
5452{
5453  tree value;
5454
5455  if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
5456      && width == NULL_TREE)
5457    {
5458      /* This is an unnamed decl.
5459
5460	 If we have something of the form "union { list } ;" then this
5461	 is the anonymous union extension.  Similarly for struct.
5462
5463	 If this is something of the form "struct foo;", then
5464	   If MS extensions are enabled, this is handled as an
5465	     anonymous struct.
5466	   Otherwise this is a forward declaration of a structure tag.
5467
5468	 If this is something of the form "foo;" and foo is a TYPE_DECL, then
5469	   If MS extensions are enabled and foo names a structure, then
5470	     again this is an anonymous struct.
5471	   Otherwise this is an error.
5472
5473	 Oh what a horrid tangled web we weave.  I wonder if MS consciously
5474	 took this from Plan 9 or if it was an accident of implementation
5475	 that took root before someone noticed the bug...  */
5476
5477      tree type = declspecs->type;
5478      bool type_ok = (TREE_CODE (type) == RECORD_TYPE
5479		      || TREE_CODE (type) == UNION_TYPE);
5480      bool ok = false;
5481
5482      if (type_ok
5483	  && (flag_ms_extensions || !declspecs->typedef_p))
5484	{
5485	  if (flag_ms_extensions)
5486	    ok = true;
5487	  else if (flag_iso)
5488	    ok = false;
5489	  else if (TYPE_NAME (type) == NULL)
5490	    ok = true;
5491	  else
5492	    ok = false;
5493	}
5494      if (!ok)
5495	{
5496	  pedwarn ("declaration does not declare anything");
5497	  return NULL_TREE;
5498	}
5499      if (pedantic)
5500	pedwarn ("ISO C doesn%'t support unnamed structs/unions");
5501    }
5502
5503  value = grokdeclarator (declarator, declspecs, FIELD, false,
5504			  width ? &width : NULL);
5505
5506  finish_decl (value, NULL_TREE, NULL_TREE);
5507  DECL_INITIAL (value) = width;
5508
5509  return value;
5510}
5511
5512/* Generate an error for any duplicate field names in FIELDLIST.  Munge
5513   the list such that this does not present a problem later.  */
5514
5515static void
5516detect_field_duplicates (tree fieldlist)
5517{
5518  tree x, y;
5519  int timeout = 10;
5520
5521  /* First, see if there are more than "a few" fields.
5522     This is trivially true if there are zero or one fields.  */
5523  if (!fieldlist)
5524    return;
5525  x = TREE_CHAIN (fieldlist);
5526  if (!x)
5527    return;
5528  do {
5529    timeout--;
5530    x = TREE_CHAIN (x);
5531  } while (timeout > 0 && x);
5532
5533  /* If there were "few" fields, avoid the overhead of allocating
5534     a hash table.  Instead just do the nested traversal thing.  */
5535  if (timeout > 0)
5536    {
5537      for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
5538	if (DECL_NAME (x))
5539	  {
5540	    for (y = fieldlist; y != x; y = TREE_CHAIN (y))
5541	      if (DECL_NAME (y) == DECL_NAME (x))
5542		{
5543		  error ("duplicate member %q+D", x);
5544		  DECL_NAME (x) = NULL_TREE;
5545		}
5546	  }
5547    }
5548  else
5549    {
5550      htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
5551      void **slot;
5552
5553      for (x = fieldlist; x ; x = TREE_CHAIN (x))
5554	if ((y = DECL_NAME (x)) != 0)
5555	  {
5556	    slot = htab_find_slot (htab, y, INSERT);
5557	    if (*slot)
5558	      {
5559		error ("duplicate member %q+D", x);
5560		DECL_NAME (x) = NULL_TREE;
5561	      }
5562	    *slot = y;
5563	  }
5564
5565      htab_delete (htab);
5566    }
5567}
5568
5569/* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5570   FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5571   ATTRIBUTES are attributes to be applied to the structure.  */
5572
5573tree
5574finish_struct (tree t, tree fieldlist, tree attributes)
5575{
5576  tree x;
5577  bool toplevel = file_scope == current_scope;
5578  int saw_named_field;
5579
5580  /* If this type was previously laid out as a forward reference,
5581     make sure we lay it out again.  */
5582
5583  TYPE_SIZE (t) = 0;
5584
5585  decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5586
5587  if (pedantic)
5588    {
5589      for (x = fieldlist; x; x = TREE_CHAIN (x))
5590	if (DECL_NAME (x) != 0)
5591	  break;
5592
5593      if (x == 0)
5594	{
5595	  if (TREE_CODE (t) == UNION_TYPE)
5596	    {
5597	      if (fieldlist)
5598		pedwarn ("union has no named members");
5599	      else
5600		pedwarn ("union has no members");
5601	    }
5602	  else
5603	    {
5604	      if (fieldlist)
5605		pedwarn ("struct has no named members");
5606	      else
5607		pedwarn ("struct has no members");
5608	    }
5609	}
5610    }
5611
5612  /* Install struct as DECL_CONTEXT of each field decl.
5613     Also process specified field sizes, found in the DECL_INITIAL,
5614     storing 0 there after the type has been changed to precision equal
5615     to its width, rather than the precision of the specified standard
5616     type.  (Correct layout requires the original type to have been preserved
5617     until now.)  */
5618
5619  saw_named_field = 0;
5620  for (x = fieldlist; x; x = TREE_CHAIN (x))
5621    {
5622      if (TREE_TYPE (x) == error_mark_node)
5623	continue;
5624
5625      DECL_CONTEXT (x) = t;
5626
5627      if (TYPE_PACKED (t) && TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
5628	DECL_PACKED (x) = 1;
5629
5630      /* If any field is const, the structure type is pseudo-const.  */
5631      if (TREE_READONLY (x))
5632	C_TYPE_FIELDS_READONLY (t) = 1;
5633      else
5634	{
5635	  /* A field that is pseudo-const makes the structure likewise.  */
5636	  tree t1 = TREE_TYPE (x);
5637	  while (TREE_CODE (t1) == ARRAY_TYPE)
5638	    t1 = TREE_TYPE (t1);
5639	  if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5640	      && C_TYPE_FIELDS_READONLY (t1))
5641	    C_TYPE_FIELDS_READONLY (t) = 1;
5642	}
5643
5644      /* Any field that is volatile means variables of this type must be
5645	 treated in some ways as volatile.  */
5646      if (TREE_THIS_VOLATILE (x))
5647	C_TYPE_FIELDS_VOLATILE (t) = 1;
5648
5649      /* Any field of nominal variable size implies structure is too.  */
5650      if (C_DECL_VARIABLE_SIZE (x))
5651	C_TYPE_VARIABLE_SIZE (t) = 1;
5652
5653      if (DECL_INITIAL (x))
5654	{
5655	  unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
5656	  DECL_SIZE (x) = bitsize_int (width);
5657	  DECL_BIT_FIELD (x) = 1;
5658	  SET_DECL_C_BIT_FIELD (x);
5659	}
5660
5661      /* Detect flexible array member in an invalid context.  */
5662      if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5663	  && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5664	  && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5665	  && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5666	{
5667	  if (TREE_CODE (t) == UNION_TYPE)
5668	    {
5669	      error ("%Jflexible array member in union", x);
5670	      TREE_TYPE (x) = error_mark_node;
5671	    }
5672	  else if (TREE_CHAIN (x) != NULL_TREE)
5673	    {
5674	      error ("%Jflexible array member not at end of struct", x);
5675	      TREE_TYPE (x) = error_mark_node;
5676	    }
5677	  else if (!saw_named_field)
5678	    {
5679	      error ("%Jflexible array member in otherwise empty struct", x);
5680	      TREE_TYPE (x) = error_mark_node;
5681	    }
5682	}
5683
5684      if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
5685	  && flexible_array_type_p (TREE_TYPE (x)))
5686	pedwarn ("%Jinvalid use of structure with flexible array member", x);
5687
5688      if (DECL_NAME (x))
5689	saw_named_field = 1;
5690    }
5691
5692  detect_field_duplicates (fieldlist);
5693
5694  /* Now we have the nearly final fieldlist.  Record it,
5695     then lay out the structure or union (including the fields).  */
5696
5697  TYPE_FIELDS (t) = fieldlist;
5698
5699  layout_type (t);
5700
5701  /* Give bit-fields their proper types.  */
5702  {
5703    tree *fieldlistp = &fieldlist;
5704    while (*fieldlistp)
5705      if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
5706	  && TREE_TYPE (*fieldlistp) != error_mark_node)
5707	{
5708	  unsigned HOST_WIDE_INT width
5709	    = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
5710	  tree type = TREE_TYPE (*fieldlistp);
5711	  if (width != TYPE_PRECISION (type))
5712	    {
5713	      TREE_TYPE (*fieldlistp)
5714		= c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
5715	      DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
5716	    }
5717	  DECL_INITIAL (*fieldlistp) = 0;
5718	}
5719      else
5720	fieldlistp = &TREE_CHAIN (*fieldlistp);
5721  }
5722
5723  /* Now we have the truly final field list.
5724     Store it in this type and in the variants.  */
5725
5726  TYPE_FIELDS (t) = fieldlist;
5727
5728  /* If there are lots of fields, sort so we can look through them fast.
5729     We arbitrarily consider 16 or more elts to be "a lot".  */
5730
5731  {
5732    int len = 0;
5733
5734    for (x = fieldlist; x; x = TREE_CHAIN (x))
5735      {
5736	if (len > 15 || DECL_NAME (x) == NULL)
5737	  break;
5738	len += 1;
5739      }
5740
5741    if (len > 15)
5742      {
5743	tree *field_array;
5744	struct lang_type *space;
5745	struct sorted_fields_type *space2;
5746
5747	len += list_length (x);
5748
5749	/* Use the same allocation policy here that make_node uses, to
5750	  ensure that this lives as long as the rest of the struct decl.
5751	  All decls in an inline function need to be saved.  */
5752
5753	space = GGC_CNEW (struct lang_type);
5754	space2 = GGC_NEWVAR (struct sorted_fields_type,
5755			     sizeof (struct sorted_fields_type) + len * sizeof (tree));
5756
5757	len = 0;
5758	space->s = space2;
5759	field_array = &space2->elts[0];
5760	for (x = fieldlist; x; x = TREE_CHAIN (x))
5761	  {
5762	    field_array[len++] = x;
5763
5764	    /* If there is anonymous struct or union, break out of the loop.  */
5765	    if (DECL_NAME (x) == NULL)
5766	      break;
5767	  }
5768	/* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
5769	if (x == NULL)
5770	  {
5771	    TYPE_LANG_SPECIFIC (t) = space;
5772	    TYPE_LANG_SPECIFIC (t)->s->len = len;
5773	    field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
5774	    qsort (field_array, len, sizeof (tree), field_decl_cmp);
5775	  }
5776      }
5777  }
5778
5779  for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5780    {
5781      TYPE_FIELDS (x) = TYPE_FIELDS (t);
5782      TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5783      C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
5784      C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
5785      C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
5786    }
5787
5788  /* If this was supposed to be a transparent union, but we can't
5789     make it one, warn and turn off the flag.  */
5790  if (TREE_CODE (t) == UNION_TYPE
5791      && TYPE_TRANSPARENT_UNION (t)
5792      && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
5793    {
5794      TYPE_TRANSPARENT_UNION (t) = 0;
5795      warning (0, "union cannot be made transparent");
5796    }
5797
5798  /* If this structure or union completes the type of any previous
5799     variable declaration, lay it out and output its rtl.  */
5800  for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
5801       x;
5802       x = TREE_CHAIN (x))
5803    {
5804      tree decl = TREE_VALUE (x);
5805      if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5806	layout_array_type (TREE_TYPE (decl));
5807      if (TREE_CODE (decl) != TYPE_DECL)
5808	{
5809	  layout_decl (decl, 0);
5810	  if (c_dialect_objc ())
5811	    objc_check_decl (decl);
5812	  rest_of_decl_compilation (decl, toplevel, 0);
5813	  if (!toplevel)
5814	    expand_decl (decl);
5815	}
5816    }
5817  C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
5818
5819  /* Finish debugging output for this type.  */
5820  rest_of_type_compilation (t, toplevel);
5821
5822  /* If we're inside a function proper, i.e. not file-scope and not still
5823     parsing parameters, then arrange for the size of a variable sized type
5824     to be bound now.  */
5825  if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
5826    add_stmt (build_stmt (DECL_EXPR, build_decl (TYPE_DECL, NULL, t)));
5827
5828  return t;
5829}
5830
5831/* Lay out the type T, and its element type, and so on.  */
5832
5833static void
5834layout_array_type (tree t)
5835{
5836  if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5837    layout_array_type (TREE_TYPE (t));
5838  layout_type (t);
5839}
5840
5841/* Begin compiling the definition of an enumeration type.
5842   NAME is its name (or null if anonymous).
5843   Returns the type object, as yet incomplete.
5844   Also records info about it so that build_enumerator
5845   may be used to declare the individual values as they are read.  */
5846
5847tree
5848start_enum (tree name)
5849{
5850  tree enumtype = 0;
5851
5852  /* If this is the real definition for a previous forward reference,
5853     fill in the contents in the same object that used to be the
5854     forward reference.  */
5855
5856  if (name != 0)
5857    enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
5858
5859  if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5860    {
5861      enumtype = make_node (ENUMERAL_TYPE);
5862      pushtag (name, enumtype);
5863    }
5864
5865  if (C_TYPE_BEING_DEFINED (enumtype))
5866    error ("nested redefinition of %<enum %E%>", name);
5867
5868  C_TYPE_BEING_DEFINED (enumtype) = 1;
5869
5870  if (TYPE_VALUES (enumtype) != 0)
5871    {
5872      /* This enum is a named one that has been declared already.  */
5873      error ("redeclaration of %<enum %E%>", name);
5874
5875      /* Completely replace its old definition.
5876	 The old enumerators remain defined, however.  */
5877      TYPE_VALUES (enumtype) = 0;
5878    }
5879
5880  enum_next_value = integer_zero_node;
5881  enum_overflow = 0;
5882
5883  if (flag_short_enums)
5884    TYPE_PACKED (enumtype) = 1;
5885
5886  return enumtype;
5887}
5888
5889/* After processing and defining all the values of an enumeration type,
5890   install their decls in the enumeration type and finish it off.
5891   ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5892   and ATTRIBUTES are the specified attributes.
5893   Returns ENUMTYPE.  */
5894
5895tree
5896finish_enum (tree enumtype, tree values, tree attributes)
5897{
5898  tree pair, tem;
5899  tree minnode = 0, maxnode = 0;
5900  int precision, unsign;
5901  bool toplevel = (file_scope == current_scope);
5902  struct lang_type *lt;
5903
5904  decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5905
5906  /* Calculate the maximum value of any enumerator in this type.  */
5907
5908  if (values == error_mark_node)
5909    minnode = maxnode = integer_zero_node;
5910  else
5911    {
5912      minnode = maxnode = TREE_VALUE (values);
5913      for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5914	{
5915	  tree value = TREE_VALUE (pair);
5916	  if (tree_int_cst_lt (maxnode, value))
5917	    maxnode = value;
5918	  if (tree_int_cst_lt (value, minnode))
5919	    minnode = value;
5920	}
5921    }
5922
5923  /* Construct the final type of this enumeration.  It is the same
5924     as one of the integral types - the narrowest one that fits, except
5925     that normally we only go as narrow as int - and signed iff any of
5926     the values are negative.  */
5927  unsign = (tree_int_cst_sgn (minnode) >= 0);
5928  precision = MAX (min_precision (minnode, unsign),
5929		   min_precision (maxnode, unsign));
5930
5931  if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5932    {
5933      tem = c_common_type_for_size (precision, unsign);
5934      if (tem == NULL)
5935	{
5936	  warning (0, "enumeration values exceed range of largest integer");
5937	  tem = long_long_integer_type_node;
5938	}
5939    }
5940  else
5941    tem = unsign ? unsigned_type_node : integer_type_node;
5942
5943  TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
5944  TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
5945  TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
5946  TYPE_SIZE (enumtype) = 0;
5947
5948  /* If the precision of the type was specific with an attribute and it
5949     was too small, give an error.  Otherwise, use it.  */
5950  if (TYPE_PRECISION (enumtype))
5951    {
5952      if (precision > TYPE_PRECISION (enumtype))
5953	error ("specified mode too small for enumeral values");
5954    }
5955  else
5956    TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
5957
5958  layout_type (enumtype);
5959
5960  if (values != error_mark_node)
5961    {
5962      /* Change the type of the enumerators to be the enum type.  We
5963	 need to do this irrespective of the size of the enum, for
5964	 proper type checking.  Replace the DECL_INITIALs of the
5965	 enumerators, and the value slots of the list, with copies
5966	 that have the enum type; they cannot be modified in place
5967	 because they may be shared (e.g.  integer_zero_node) Finally,
5968	 change the purpose slots to point to the names of the decls.  */
5969      for (pair = values; pair; pair = TREE_CHAIN (pair))
5970	{
5971	  tree enu = TREE_PURPOSE (pair);
5972	  tree ini = DECL_INITIAL (enu);
5973
5974	  TREE_TYPE (enu) = enumtype;
5975
5976	  /* The ISO C Standard mandates enumerators to have type int,
5977	     even though the underlying type of an enum type is
5978	     unspecified.  Here we convert any enumerators that fit in
5979	     an int to type int, to avoid promotions to unsigned types
5980	     when comparing integers with enumerators that fit in the
5981	     int range.  When -pedantic is given, build_enumerator()
5982	     would have already taken care of those that don't fit.  */
5983	  if (int_fits_type_p (ini, integer_type_node))
5984	    tem = integer_type_node;
5985	  else
5986	    tem = enumtype;
5987	  ini = convert (tem, ini);
5988
5989	  DECL_INITIAL (enu) = ini;
5990	  TREE_PURPOSE (pair) = DECL_NAME (enu);
5991	  TREE_VALUE (pair) = ini;
5992	}
5993
5994      TYPE_VALUES (enumtype) = values;
5995    }
5996
5997  /* Record the min/max values so that we can warn about bit-field
5998     enumerations that are too small for the values.  */
5999  lt = GGC_CNEW (struct lang_type);
6000  lt->enum_min = minnode;
6001  lt->enum_max = maxnode;
6002  TYPE_LANG_SPECIFIC (enumtype) = lt;
6003
6004  /* Fix up all variant types of this enum type.  */
6005  for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
6006    {
6007      if (tem == enumtype)
6008	continue;
6009      TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
6010      TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
6011      TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
6012      TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
6013      TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
6014      TYPE_MODE (tem) = TYPE_MODE (enumtype);
6015      TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
6016      TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
6017      TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
6018      TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
6019      TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
6020    }
6021
6022  /* Finish debugging output for this type.  */
6023  rest_of_type_compilation (enumtype, toplevel);
6024
6025  return enumtype;
6026}
6027
6028/* Build and install a CONST_DECL for one value of the
6029   current enumeration type (one that was begun with start_enum).
6030   Return a tree-list containing the CONST_DECL and its value.
6031   Assignment of sequential values by default is handled here.  */
6032
6033tree
6034build_enumerator (tree name, tree value)
6035{
6036  tree decl, type;
6037
6038  /* Validate and default VALUE.  */
6039
6040  if (value != 0)
6041    {
6042      /* Don't issue more errors for error_mark_node (i.e. an
6043	 undeclared identifier) - just ignore the value expression.  */
6044      if (value == error_mark_node)
6045	value = 0;
6046      else if (!INTEGRAL_TYPE_P (TREE_TYPE (value))
6047	       || TREE_CODE (value) != INTEGER_CST)
6048	{
6049	  error ("enumerator value for %qE is not an integer constant", name);
6050	  value = 0;
6051	}
6052      else
6053	{
6054	  value = default_conversion (value);
6055	  constant_expression_warning (value);
6056	}
6057    }
6058
6059  /* Default based on previous value.  */
6060  /* It should no longer be possible to have NON_LVALUE_EXPR
6061     in the default.  */
6062  if (value == 0)
6063    {
6064      value = enum_next_value;
6065      if (enum_overflow)
6066	error ("overflow in enumeration values");
6067    }
6068
6069  if (pedantic && !int_fits_type_p (value, integer_type_node))
6070    {
6071      pedwarn ("ISO C restricts enumerator values to range of %<int%>");
6072      /* XXX This causes -pedantic to change the meaning of the program.
6073	 Remove?  -zw 2004-03-15  */
6074      value = convert (integer_type_node, value);
6075    }
6076
6077  /* Set basis for default for next value.  */
6078  enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
6079  enum_overflow = tree_int_cst_lt (enum_next_value, value);
6080
6081  /* Now create a declaration for the enum value name.  */
6082
6083  type = TREE_TYPE (value);
6084  type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
6085				      TYPE_PRECISION (integer_type_node)),
6086				 (TYPE_PRECISION (type)
6087				  >= TYPE_PRECISION (integer_type_node)
6088				  && TYPE_UNSIGNED (type)));
6089
6090  decl = build_decl (CONST_DECL, name, type);
6091  DECL_INITIAL (decl) = convert (type, value);
6092  pushdecl (decl);
6093
6094  return tree_cons (decl, value, NULL_TREE);
6095}
6096
6097
6098/* Create the FUNCTION_DECL for a function definition.
6099   DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
6100   the declaration; they describe the function's name and the type it returns,
6101   but twisted together in a fashion that parallels the syntax of C.
6102
6103   This function creates a binding context for the function body
6104   as well as setting up the FUNCTION_DECL in current_function_decl.
6105
6106   Returns 1 on success.  If the DECLARATOR is not suitable for a function
6107   (it defines a datum instead), we return 0, which tells
6108   yyparse to report a parse error.  */
6109
6110int
6111start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
6112		tree attributes)
6113{
6114  tree decl1, old_decl;
6115  tree restype, resdecl;
6116  struct c_label_context_se *nstack_se;
6117  struct c_label_context_vm *nstack_vm;
6118
6119  current_function_returns_value = 0;  /* Assume, until we see it does.  */
6120  current_function_returns_null = 0;
6121  current_function_returns_abnormally = 0;
6122  warn_about_return_type = 0;
6123  c_switch_stack = NULL;
6124
6125  nstack_se = XOBNEW (&parser_obstack, struct c_label_context_se);
6126  nstack_se->labels_def = NULL;
6127  nstack_se->labels_used = NULL;
6128  nstack_se->next = label_context_stack_se;
6129  label_context_stack_se = nstack_se;
6130
6131  nstack_vm = XOBNEW (&parser_obstack, struct c_label_context_vm);
6132  nstack_vm->labels_def = NULL;
6133  nstack_vm->labels_used = NULL;
6134  nstack_vm->scope = 0;
6135  nstack_vm->next = label_context_stack_vm;
6136  label_context_stack_vm = nstack_vm;
6137
6138  /* Indicate no valid break/continue context by setting these variables
6139     to some non-null, non-label value.  We'll notice and emit the proper
6140     error message in c_finish_bc_stmt.  */
6141  c_break_label = c_cont_label = size_zero_node;
6142
6143  decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL);
6144
6145  /* If the declarator is not suitable for a function definition,
6146     cause a syntax error.  */
6147  if (decl1 == 0)
6148    {
6149      label_context_stack_se = label_context_stack_se->next;
6150      label_context_stack_vm = label_context_stack_vm->next;
6151      return 0;
6152    }
6153
6154  decl_attributes (&decl1, attributes, 0);
6155
6156  if (DECL_DECLARED_INLINE_P (decl1)
6157      && DECL_UNINLINABLE (decl1)
6158      && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
6159    warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
6160	     decl1);
6161
6162  /* Handle gnu_inline attribute.  */
6163  if (declspecs->inline_p
6164      && !flag_gnu89_inline
6165      && TREE_CODE (decl1) == FUNCTION_DECL
6166      && lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1)))
6167    {
6168      if (declspecs->storage_class != csc_static)
6169	DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
6170    }
6171
6172  announce_function (decl1);
6173
6174  if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
6175    {
6176      error ("return type is an incomplete type");
6177      /* Make it return void instead.  */
6178      TREE_TYPE (decl1)
6179	= build_function_type (void_type_node,
6180			       TYPE_ARG_TYPES (TREE_TYPE (decl1)));
6181    }
6182
6183  if (warn_about_return_type)
6184    pedwarn_c99 ("return type defaults to %<int%>");
6185
6186  /* Make the init_value nonzero so pushdecl knows this is not tentative.
6187     error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
6188  DECL_INITIAL (decl1) = error_mark_node;
6189
6190  /* If this definition isn't a prototype and we had a prototype declaration
6191     before, copy the arg type info from that prototype.  */
6192  old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
6193  if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
6194    old_decl = 0;
6195  current_function_prototype_locus = UNKNOWN_LOCATION;
6196  current_function_prototype_built_in = false;
6197  current_function_prototype_arg_types = NULL_TREE;
6198  if (TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
6199    {
6200      if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
6201	  && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
6202			TREE_TYPE (TREE_TYPE (old_decl))))
6203	{
6204	  TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
6205					      TREE_TYPE (decl1));
6206	  current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
6207	  current_function_prototype_built_in
6208	    = C_DECL_BUILTIN_PROTOTYPE (old_decl);
6209	  current_function_prototype_arg_types
6210	    = TYPE_ARG_TYPES (TREE_TYPE (decl1));
6211	}
6212      if (TREE_PUBLIC (decl1))
6213	{
6214	  /* If there is an external prototype declaration of this
6215	     function, record its location but do not copy information
6216	     to this decl.  This may be an invisible declaration
6217	     (built-in or in a scope which has finished) or simply
6218	     have more refined argument types than any declaration
6219	     found above.  */
6220	  struct c_binding *b;
6221	  for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
6222	    if (B_IN_SCOPE (b, external_scope))
6223	      break;
6224	  if (b)
6225	    {
6226	      tree ext_decl, ext_type;
6227	      ext_decl = b->decl;
6228	      ext_type = b->type ? b->type : TREE_TYPE (ext_decl);
6229	      if (TREE_CODE (ext_type) == FUNCTION_TYPE
6230		  && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
6231				TREE_TYPE (ext_type)))
6232		{
6233		  current_function_prototype_locus
6234		    = DECL_SOURCE_LOCATION (ext_decl);
6235		  current_function_prototype_built_in
6236		    = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
6237		  current_function_prototype_arg_types
6238		    = TYPE_ARG_TYPES (ext_type);
6239		}
6240	    }
6241	}
6242    }
6243
6244  /* Optionally warn of old-fashioned def with no previous prototype.  */
6245  if (warn_strict_prototypes
6246      && old_decl != error_mark_node
6247      && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
6248      && C_DECL_ISNT_PROTOTYPE (old_decl))
6249    warning (OPT_Wstrict_prototypes,
6250	     "function declaration isn%'t a prototype");
6251  /* Optionally warn of any global def with no previous prototype.  */
6252  else if (warn_missing_prototypes
6253	   && old_decl != error_mark_node
6254	   && TREE_PUBLIC (decl1)
6255	   && !MAIN_NAME_P (DECL_NAME (decl1))
6256	   && C_DECL_ISNT_PROTOTYPE (old_decl))
6257    warning (OPT_Wmissing_prototypes, "no previous prototype for %q+D", decl1);
6258  /* Optionally warn of any def with no previous prototype
6259     if the function has already been used.  */
6260  else if (warn_missing_prototypes
6261	   && old_decl != 0
6262	   && old_decl != error_mark_node
6263	   && TREE_USED (old_decl)
6264	   && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
6265    warning (OPT_Wmissing_prototypes,
6266	     "%q+D was used with no prototype before its definition", decl1);
6267  /* Optionally warn of any global def with no previous declaration.  */
6268  else if (warn_missing_declarations
6269	   && TREE_PUBLIC (decl1)
6270	   && old_decl == 0
6271	   && !MAIN_NAME_P (DECL_NAME (decl1)))
6272    warning (OPT_Wmissing_declarations, "no previous declaration for %q+D",
6273	     decl1);
6274  /* Optionally warn of any def with no previous declaration
6275     if the function has already been used.  */
6276  else if (warn_missing_declarations
6277	   && old_decl != 0
6278	   && old_decl != error_mark_node
6279	   && TREE_USED (old_decl)
6280	   && C_DECL_IMPLICIT (old_decl))
6281    warning (OPT_Wmissing_declarations,
6282	     "%q+D was used with no declaration before its definition", decl1);
6283
6284  /* This function exists in static storage.
6285     (This does not mean `static' in the C sense!)  */
6286  TREE_STATIC (decl1) = 1;
6287
6288  /* A nested function is not global.  */
6289  if (current_function_decl != 0)
6290    TREE_PUBLIC (decl1) = 0;
6291
6292  /* This is the earliest point at which we might know the assembler
6293     name of the function.  Thus, if it's set before this, die horribly.  */
6294  gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
6295
6296  /* If #pragma weak was used, mark the decl weak now.  */
6297  if (current_scope == file_scope)
6298    maybe_apply_pragma_weak (decl1);
6299
6300  /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
6301  if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
6302    {
6303      tree args;
6304      int argct = 0;
6305
6306      if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
6307	  != integer_type_node)
6308	pedwarn ("return type of %q+D is not %<int%>", decl1);
6309
6310      for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
6311	   args = TREE_CHAIN (args))
6312	{
6313	  tree type = args ? TREE_VALUE (args) : 0;
6314
6315	  if (type == void_type_node)
6316	    break;
6317
6318	  ++argct;
6319	  switch (argct)
6320	    {
6321	    case 1:
6322	      if (TYPE_MAIN_VARIANT (type) != integer_type_node)
6323		pedwarn ("first argument of %q+D should be %<int%>", decl1);
6324	      break;
6325
6326	    case 2:
6327	      if (TREE_CODE (type) != POINTER_TYPE
6328		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6329		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6330		      != char_type_node))
6331		pedwarn ("second argument of %q+D should be %<char **%>",
6332			 decl1);
6333	      break;
6334
6335	    case 3:
6336	      if (TREE_CODE (type) != POINTER_TYPE
6337		  || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6338		  || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6339		      != char_type_node))
6340		pedwarn ("third argument of %q+D should probably be "
6341			 "%<char **%>", decl1);
6342	      break;
6343	    }
6344	}
6345
6346      /* It is intentional that this message does not mention the third
6347	 argument because it's only mentioned in an appendix of the
6348	 standard.  */
6349      if (argct > 0 && (argct < 2 || argct > 3))
6350	pedwarn ("%q+D takes only zero or two arguments", decl1);
6351
6352      if (!TREE_PUBLIC (decl1))
6353	pedwarn ("%q+D is normally a non-static function", decl1);
6354    }
6355
6356  /* Record the decl so that the function name is defined.
6357     If we already have a decl for this name, and it is a FUNCTION_DECL,
6358     use the old decl.  */
6359
6360  current_function_decl = pushdecl (decl1);
6361
6362  push_scope ();
6363  declare_parm_level ();
6364
6365  restype = TREE_TYPE (TREE_TYPE (current_function_decl));
6366  /* Promote the value to int before returning it.  */
6367  if (c_promoting_integer_type_p (restype))
6368    {
6369      /* It retains unsignedness if not really getting wider.  */
6370      if (TYPE_UNSIGNED (restype)
6371	  && (TYPE_PRECISION (restype)
6372		  == TYPE_PRECISION (integer_type_node)))
6373	restype = unsigned_type_node;
6374      else
6375	restype = integer_type_node;
6376    }
6377
6378  resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
6379  DECL_ARTIFICIAL (resdecl) = 1;
6380  DECL_IGNORED_P (resdecl) = 1;
6381  DECL_RESULT (current_function_decl) = resdecl;
6382
6383  start_fname_decls ();
6384
6385  return 1;
6386}
6387
6388/* Subroutine of store_parm_decls which handles new-style function
6389   definitions (prototype format). The parms already have decls, so we
6390   need only record them as in effect and complain if any redundant
6391   old-style parm decls were written.  */
6392static void
6393store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
6394{
6395  tree decl;
6396
6397  if (current_scope->bindings)
6398    {
6399      error ("%Jold-style parameter declarations in prototyped "
6400	     "function definition", fndecl);
6401
6402      /* Get rid of the old-style declarations.  */
6403      pop_scope ();
6404      push_scope ();
6405    }
6406  /* Don't issue this warning for nested functions, and don't issue this
6407     warning if we got here because ARG_INFO_TYPES was error_mark_node
6408     (this happens when a function definition has just an ellipsis in
6409     its parameter list).  */
6410  else if (!in_system_header && !current_function_scope
6411	   && arg_info->types != error_mark_node)
6412    warning (OPT_Wtraditional,
6413	     "%Jtraditional C rejects ISO C style function definitions",
6414	     fndecl);
6415
6416  /* Now make all the parameter declarations visible in the function body.
6417     We can bypass most of the grunt work of pushdecl.  */
6418  for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
6419    {
6420      DECL_CONTEXT (decl) = current_function_decl;
6421      if (DECL_NAME (decl))
6422	{
6423	  bind (DECL_NAME (decl), decl, current_scope,
6424		/*invisible=*/false, /*nested=*/false);
6425	  if (!TREE_USED (decl))
6426	    warn_if_shadowing (decl);
6427	}
6428      else
6429	error ("%Jparameter name omitted", decl);
6430    }
6431
6432  /* Record the parameter list in the function declaration.  */
6433  DECL_ARGUMENTS (fndecl) = arg_info->parms;
6434
6435  /* Now make all the ancillary declarations visible, likewise.  */
6436  for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
6437    {
6438      DECL_CONTEXT (decl) = current_function_decl;
6439      if (DECL_NAME (decl))
6440	bind (DECL_NAME (decl), decl, current_scope,
6441	      /*invisible=*/false, /*nested=*/false);
6442    }
6443
6444  /* And all the tag declarations.  */
6445  for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
6446    if (TREE_PURPOSE (decl))
6447      bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
6448	    /*invisible=*/false, /*nested=*/false);
6449}
6450
6451/* Subroutine of store_parm_decls which handles old-style function
6452   definitions (separate parameter list and declarations).  */
6453
6454static void
6455store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
6456{
6457  struct c_binding *b;
6458  tree parm, decl, last;
6459  tree parmids = arg_info->parms;
6460  struct pointer_set_t *seen_args = pointer_set_create ();
6461
6462  if (!in_system_header)
6463    warning (OPT_Wold_style_definition, "%Jold-style function definition",
6464	     fndecl);
6465
6466  /* Match each formal parameter name with its declaration.  Save each
6467     decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
6468  for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6469    {
6470      if (TREE_VALUE (parm) == 0)
6471	{
6472	  error ("%Jparameter name missing from parameter list", fndecl);
6473	  TREE_PURPOSE (parm) = 0;
6474	  continue;
6475	}
6476
6477      b = I_SYMBOL_BINDING (TREE_VALUE (parm));
6478      if (b && B_IN_CURRENT_SCOPE (b))
6479	{
6480	  decl = b->decl;
6481	  /* If we got something other than a PARM_DECL it is an error.  */
6482	  if (TREE_CODE (decl) != PARM_DECL)
6483	    error ("%q+D declared as a non-parameter", decl);
6484	  /* If the declaration is already marked, we have a duplicate
6485	     name.  Complain and ignore the duplicate.  */
6486	  else if (pointer_set_contains (seen_args, decl))
6487	    {
6488	      error ("multiple parameters named %q+D", decl);
6489	      TREE_PURPOSE (parm) = 0;
6490	      continue;
6491	    }
6492	  /* If the declaration says "void", complain and turn it into
6493	     an int.  */
6494	  else if (VOID_TYPE_P (TREE_TYPE (decl)))
6495	    {
6496	      error ("parameter %q+D declared with void type", decl);
6497	      TREE_TYPE (decl) = integer_type_node;
6498	      DECL_ARG_TYPE (decl) = integer_type_node;
6499	      layout_decl (decl, 0);
6500	    }
6501	  warn_if_shadowing (decl);
6502	}
6503      /* If no declaration found, default to int.  */
6504      else
6505	{
6506	  decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node);
6507	  DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
6508	  DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl);
6509	  pushdecl (decl);
6510	  warn_if_shadowing (decl);
6511
6512	  if (flag_isoc99)
6513	    pedwarn ("type of %q+D defaults to %<int%>", decl);
6514	  else if (extra_warnings)
6515	    warning (OPT_Wextra, "type of %q+D defaults to %<int%>", decl);
6516	}
6517
6518      TREE_PURPOSE (parm) = decl;
6519      pointer_set_insert (seen_args, decl);
6520    }
6521
6522  /* Now examine the parms chain for incomplete declarations
6523     and declarations with no corresponding names.  */
6524
6525  for (b = current_scope->bindings; b; b = b->prev)
6526    {
6527      parm = b->decl;
6528      if (TREE_CODE (parm) != PARM_DECL)
6529	continue;
6530
6531      if (TREE_TYPE (parm) != error_mark_node
6532	  && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
6533	{
6534	  error ("parameter %q+D has incomplete type", parm);
6535	  TREE_TYPE (parm) = error_mark_node;
6536	}
6537
6538      if (!pointer_set_contains (seen_args, parm))
6539	{
6540	  error ("declaration for parameter %q+D but no such parameter", parm);
6541
6542	  /* Pretend the parameter was not missing.
6543	     This gets us to a standard state and minimizes
6544	     further error messages.  */
6545	  parmids = chainon (parmids, tree_cons (parm, 0, 0));
6546	}
6547    }
6548
6549  /* Chain the declarations together in the order of the list of
6550     names.  Store that chain in the function decl, replacing the
6551     list of names.  Update the current scope to match.  */
6552  DECL_ARGUMENTS (fndecl) = 0;
6553
6554  for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6555    if (TREE_PURPOSE (parm))
6556      break;
6557  if (parm && TREE_PURPOSE (parm))
6558    {
6559      last = TREE_PURPOSE (parm);
6560      DECL_ARGUMENTS (fndecl) = last;
6561
6562      for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
6563	if (TREE_PURPOSE (parm))
6564	  {
6565	    TREE_CHAIN (last) = TREE_PURPOSE (parm);
6566	    last = TREE_PURPOSE (parm);
6567	  }
6568      TREE_CHAIN (last) = 0;
6569    }
6570
6571  pointer_set_destroy (seen_args);
6572
6573  /* If there was a previous prototype,
6574     set the DECL_ARG_TYPE of each argument according to
6575     the type previously specified, and report any mismatches.  */
6576
6577  if (current_function_prototype_arg_types)
6578    {
6579      tree type;
6580      for (parm = DECL_ARGUMENTS (fndecl),
6581	     type = current_function_prototype_arg_types;
6582	   parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6583			     != void_type_node));
6584	   parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6585	{
6586	  if (parm == 0 || type == 0
6587	      || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6588	    {
6589	      if (current_function_prototype_built_in)
6590		warning (0, "number of arguments doesn%'t match "
6591			 "built-in prototype");
6592	      else
6593		{
6594		  error ("number of arguments doesn%'t match prototype");
6595		  error ("%Hprototype declaration",
6596			 &current_function_prototype_locus);
6597		}
6598	      break;
6599	    }
6600	  /* Type for passing arg must be consistent with that
6601	     declared for the arg.  ISO C says we take the unqualified
6602	     type for parameters declared with qualified type.  */
6603	  if (!comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6604			  TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6605	    {
6606	      if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6607		  == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6608		{
6609		  /* Adjust argument to match prototype.  E.g. a previous
6610		     `int foo(float);' prototype causes
6611		     `int foo(x) float x; {...}' to be treated like
6612		     `int foo(float x) {...}'.  This is particularly
6613		     useful for argument types like uid_t.  */
6614		  DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6615
6616		  if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
6617		      && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6618		      && TYPE_PRECISION (TREE_TYPE (parm))
6619		      < TYPE_PRECISION (integer_type_node))
6620		    DECL_ARG_TYPE (parm) = integer_type_node;
6621
6622		  if (pedantic)
6623		    {
6624		      /* ??? Is it possible to get here with a
6625			 built-in prototype or will it always have
6626			 been diagnosed as conflicting with an
6627			 old-style definition and discarded?  */
6628		      if (current_function_prototype_built_in)
6629			warning (0, "promoted argument %qD "
6630				 "doesn%'t match built-in prototype", parm);
6631		      else
6632			{
6633			  pedwarn ("promoted argument %qD "
6634				   "doesn%'t match prototype", parm);
6635			  pedwarn ("%Hprototype declaration",
6636				   &current_function_prototype_locus);
6637			}
6638		    }
6639		}
6640	      else
6641		{
6642		  if (current_function_prototype_built_in)
6643		    warning (0, "argument %qD doesn%'t match "
6644			     "built-in prototype", parm);
6645		  else
6646		    {
6647		      error ("argument %qD doesn%'t match prototype", parm);
6648		      error ("%Hprototype declaration",
6649			     &current_function_prototype_locus);
6650		    }
6651		}
6652	    }
6653	}
6654      TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6655    }
6656
6657  /* Otherwise, create a prototype that would match.  */
6658
6659  else
6660    {
6661      tree actual = 0, last = 0, type;
6662
6663      for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6664	{
6665	  type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6666	  if (last)
6667	    TREE_CHAIN (last) = type;
6668	  else
6669	    actual = type;
6670	  last = type;
6671	}
6672      type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6673      if (last)
6674	TREE_CHAIN (last) = type;
6675      else
6676	actual = type;
6677
6678      /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6679	 of the type of this function, but we need to avoid having this
6680	 affect the types of other similarly-typed functions, so we must
6681	 first force the generation of an identical (but separate) type
6682	 node for the relevant function type.  The new node we create
6683	 will be a variant of the main variant of the original function
6684	 type.  */
6685
6686      TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
6687
6688      TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6689    }
6690}
6691
6692/* Store parameter declarations passed in ARG_INFO into the current
6693   function declaration.  */
6694
6695void
6696store_parm_decls_from (struct c_arg_info *arg_info)
6697{
6698  current_function_arg_info = arg_info;
6699  store_parm_decls ();
6700}
6701
6702/* Store the parameter declarations into the current function declaration.
6703   This is called after parsing the parameter declarations, before
6704   digesting the body of the function.
6705
6706   For an old-style definition, construct a prototype out of the old-style
6707   parameter declarations and inject it into the function's type.  */
6708
6709void
6710store_parm_decls (void)
6711{
6712  tree fndecl = current_function_decl;
6713  bool proto;
6714
6715  /* The argument information block for FNDECL.  */
6716  struct c_arg_info *arg_info = current_function_arg_info;
6717  current_function_arg_info = 0;
6718
6719  /* True if this definition is written with a prototype.  Note:
6720     despite C99 6.7.5.3p14, we can *not* treat an empty argument
6721     list in a function definition as equivalent to (void) -- an
6722     empty argument list specifies the function has no parameters,
6723     but only (void) sets up a prototype for future calls.  */
6724  proto = arg_info->types != 0;
6725
6726  if (proto)
6727    store_parm_decls_newstyle (fndecl, arg_info);
6728  else
6729    store_parm_decls_oldstyle (fndecl, arg_info);
6730
6731  /* The next call to push_scope will be a function body.  */
6732
6733  next_is_function_body = true;
6734
6735  /* Write a record describing this function definition to the prototypes
6736     file (if requested).  */
6737
6738  gen_aux_info_record (fndecl, 1, 0, proto);
6739
6740  /* Initialize the RTL code for the function.  */
6741  allocate_struct_function (fndecl);
6742
6743  /* Begin the statement tree for this function.  */
6744  DECL_SAVED_TREE (fndecl) = push_stmt_list ();
6745
6746  /* ??? Insert the contents of the pending sizes list into the function
6747     to be evaluated.  The only reason left to have this is
6748	void foo(int n, int array[n++])
6749     because we throw away the array type in favor of a pointer type, and
6750     thus won't naturally see the SAVE_EXPR containing the increment.  All
6751     other pending sizes would be handled by gimplify_parameters.  */
6752  {
6753    tree t;
6754    for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
6755      add_stmt (TREE_VALUE (t));
6756  }
6757
6758  /* Even though we're inside a function body, we still don't want to
6759     call expand_expr to calculate the size of a variable-sized array.
6760     We haven't necessarily assigned RTL to all variables yet, so it's
6761     not safe to try to expand expressions involving them.  */
6762  cfun->x_dont_save_pending_sizes_p = 1;
6763}
6764
6765/* Emit diagnostics that require gimple input for detection.  Operate on
6766   FNDECL and all its nested functions.  */
6767
6768static void
6769c_gimple_diagnostics_recursively (tree fndecl)
6770{
6771  struct cgraph_node *cgn;
6772
6773  /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
6774  c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
6775
6776  /* Notice when OpenMP structured block constraints are violated.  */
6777  if (flag_openmp)
6778    diagnose_omp_structured_block_errors (fndecl);
6779
6780  /* Finalize all nested functions now.  */
6781  cgn = cgraph_node (fndecl);
6782  for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
6783    c_gimple_diagnostics_recursively (cgn->decl);
6784}
6785
6786/* Finish up a function declaration and compile that function
6787   all the way to assembler language output.  The free the storage
6788   for the function definition.
6789
6790   This is called after parsing the body of the function definition.  */
6791
6792void
6793finish_function (void)
6794{
6795  tree fndecl = current_function_decl;
6796
6797  label_context_stack_se = label_context_stack_se->next;
6798  label_context_stack_vm = label_context_stack_vm->next;
6799
6800  if (TREE_CODE (fndecl) == FUNCTION_DECL
6801      && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
6802    {
6803      tree args = DECL_ARGUMENTS (fndecl);
6804      for (; args; args = TREE_CHAIN (args))
6805	{
6806	  tree type = TREE_TYPE (args);
6807	  if (INTEGRAL_TYPE_P (type)
6808	      && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
6809	    DECL_ARG_TYPE (args) = integer_type_node;
6810	}
6811    }
6812
6813  if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6814    BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6815
6816  /* Must mark the RESULT_DECL as being in this function.  */
6817
6818  if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
6819    DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6820
6821  if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6822    {
6823      if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6824	  != integer_type_node)
6825	{
6826	  /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6827	     If warn_main is -1 (-Wno-main) we don't want to be warned.  */
6828	  if (!warn_main)
6829	    pedwarn ("return type of %q+D is not %<int%>", fndecl);
6830	}
6831      else
6832	{
6833	  if (flag_isoc99)
6834	    {
6835	      tree stmt = c_finish_return (integer_zero_node);
6836#ifdef USE_MAPPED_LOCATION
6837	      /* Hack.  We don't want the middle-end to warn that this return
6838		 is unreachable, so we mark its location as special.  Using
6839		 UNKNOWN_LOCATION has the problem that it gets clobbered in
6840		 annotate_one_with_locus.  A cleaner solution might be to
6841		 ensure ! should_carry_locus_p (stmt), but that needs a flag.
6842	      */
6843	      SET_EXPR_LOCATION (stmt, BUILTINS_LOCATION);
6844#else
6845	      /* Hack.  We don't want the middle-end to warn that this
6846		 return is unreachable, so put the statement on the
6847		 special line 0.  */
6848	      annotate_with_file_line (stmt, input_filename, 0);
6849#endif
6850	    }
6851	}
6852    }
6853
6854  /* Tie off the statement tree for this function.  */
6855  DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
6856
6857  finish_fname_decls ();
6858
6859  /* Complain if there's just no return statement.  */
6860  if (warn_return_type
6861      && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6862      && !current_function_returns_value && !current_function_returns_null
6863      /* Don't complain if we are no-return.  */
6864      && !current_function_returns_abnormally
6865      /* Don't warn for main().  */
6866      && !MAIN_NAME_P (DECL_NAME (fndecl))
6867      /* Or if they didn't actually specify a return type.  */
6868      && !C_FUNCTION_IMPLICIT_INT (fndecl)
6869      /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
6870	 inline function, as we might never be compiled separately.  */
6871      && DECL_INLINE (fndecl))
6872    {
6873      warning (OPT_Wreturn_type,
6874	       "no return statement in function returning non-void");
6875      TREE_NO_WARNING (fndecl) = 1;
6876    }
6877
6878  /* With just -Wextra, complain only if function returns both with
6879     and without a value.  */
6880  if (extra_warnings
6881      && current_function_returns_value
6882      && current_function_returns_null)
6883    warning (OPT_Wextra, "this function may return with or without a value");
6884
6885  /* Store the end of the function, so that we get good line number
6886     info for the epilogue.  */
6887  cfun->function_end_locus = input_location;
6888
6889  /* If we don't have ctors/dtors sections, and this is a static
6890     constructor or destructor, it must be recorded now.  */
6891  if (DECL_STATIC_CONSTRUCTOR (fndecl)
6892      && !targetm.have_ctors_dtors)
6893    static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6894  if (DECL_STATIC_DESTRUCTOR (fndecl)
6895      && !targetm.have_ctors_dtors)
6896    static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6897
6898  /* Finalize the ELF visibility for the function.  */
6899  c_determine_visibility (fndecl);
6900
6901  /* Genericize before inlining.  Delay genericizing nested functions
6902     until their parent function is genericized.  Since finalizing
6903     requires GENERIC, delay that as well.  */
6904
6905  if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
6906      && !undef_nested_function)
6907    {
6908      if (!decl_function_context (fndecl))
6909	{
6910	  c_genericize (fndecl);
6911	  c_gimple_diagnostics_recursively (fndecl);
6912
6913	  /* ??? Objc emits functions after finalizing the compilation unit.
6914	     This should be cleaned up later and this conditional removed.  */
6915	  if (cgraph_global_info_ready)
6916	    {
6917	      c_expand_body (fndecl);
6918	      return;
6919	    }
6920
6921	  cgraph_finalize_function (fndecl, false);
6922	}
6923      else
6924	{
6925	  /* Register this function with cgraph just far enough to get it
6926	    added to our parent's nested function list.  Handy, since the
6927	    C front end doesn't have such a list.  */
6928	  (void) cgraph_node (fndecl);
6929	}
6930    }
6931
6932  if (!decl_function_context (fndecl))
6933    undef_nested_function = false;
6934
6935  /* We're leaving the context of this function, so zap cfun.
6936     It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6937     tree_rest_of_compilation.  */
6938  cfun = NULL;
6939  current_function_decl = NULL;
6940}
6941
6942/* Generate the RTL for the body of FNDECL.  */
6943
6944void
6945c_expand_body (tree fndecl)
6946{
6947
6948  if (!DECL_INITIAL (fndecl)
6949      || DECL_INITIAL (fndecl) == error_mark_node)
6950    return;
6951
6952  tree_rest_of_compilation (fndecl);
6953
6954  if (DECL_STATIC_CONSTRUCTOR (fndecl)
6955      && targetm.have_ctors_dtors)
6956    targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
6957				 DEFAULT_INIT_PRIORITY);
6958  if (DECL_STATIC_DESTRUCTOR (fndecl)
6959      && targetm.have_ctors_dtors)
6960    targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
6961				DEFAULT_INIT_PRIORITY);
6962}
6963
6964/* Check the declarations given in a for-loop for satisfying the C99
6965   constraints.  If exactly one such decl is found, return it.  */
6966
6967tree
6968check_for_loop_decls (void)
6969{
6970  struct c_binding *b;
6971  tree one_decl = NULL_TREE;
6972  int n_decls = 0;
6973
6974
6975  if (!flag_isoc99)
6976    {
6977      /* If we get here, declarations have been used in a for loop without
6978	 the C99 for loop scope.  This doesn't make much sense, so don't
6979	 allow it.  */
6980      error ("%<for%> loop initial declaration used outside C99 mode");
6981      return NULL_TREE;
6982    }
6983  /* C99 subclause 6.8.5 paragraph 3:
6984
6985       [#3]  The  declaration  part  of  a for statement shall only
6986       declare identifiers for objects having storage class auto or
6987       register.
6988
6989     It isn't clear whether, in this sentence, "identifiers" binds to
6990     "shall only declare" or to "objects" - that is, whether all identifiers
6991     declared must be identifiers for objects, or whether the restriction
6992     only applies to those that are.  (A question on this in comp.std.c
6993     in November 2000 received no answer.)  We implement the strictest
6994     interpretation, to avoid creating an extension which later causes
6995     problems.  */
6996
6997  for (b = current_scope->bindings; b; b = b->prev)
6998    {
6999      tree id = b->id;
7000      tree decl = b->decl;
7001
7002      if (!id)
7003	continue;
7004
7005      switch (TREE_CODE (decl))
7006	{
7007	case VAR_DECL:
7008	  if (TREE_STATIC (decl))
7009	    error ("declaration of static variable %q+D in %<for%> loop "
7010		   "initial declaration", decl);
7011	  else if (DECL_EXTERNAL (decl))
7012	    error ("declaration of %<extern%> variable %q+D in %<for%> loop "
7013		   "initial declaration", decl);
7014	  break;
7015
7016	case RECORD_TYPE:
7017	  error ("%<struct %E%> declared in %<for%> loop initial declaration",
7018		 id);
7019	  break;
7020	case UNION_TYPE:
7021	  error ("%<union %E%> declared in %<for%> loop initial declaration",
7022		 id);
7023	  break;
7024	case ENUMERAL_TYPE:
7025	  error ("%<enum %E%> declared in %<for%> loop initial declaration",
7026		 id);
7027	  break;
7028	default:
7029	  error ("declaration of non-variable %q+D in %<for%> loop "
7030		 "initial declaration", decl);
7031	}
7032
7033      n_decls++;
7034      one_decl = decl;
7035    }
7036
7037  return n_decls == 1 ? one_decl : NULL_TREE;
7038}
7039
7040/* Save and reinitialize the variables
7041   used during compilation of a C function.  */
7042
7043void
7044c_push_function_context (struct function *f)
7045{
7046  struct language_function *p;
7047  p = GGC_NEW (struct language_function);
7048  f->language = p;
7049
7050  p->base.x_stmt_tree = c_stmt_tree;
7051  p->x_break_label = c_break_label;
7052  p->x_cont_label = c_cont_label;
7053  p->x_switch_stack = c_switch_stack;
7054  p->arg_info = current_function_arg_info;
7055  p->returns_value = current_function_returns_value;
7056  p->returns_null = current_function_returns_null;
7057  p->returns_abnormally = current_function_returns_abnormally;
7058  p->warn_about_return_type = warn_about_return_type;
7059}
7060
7061/* Restore the variables used during compilation of a C function.  */
7062
7063void
7064c_pop_function_context (struct function *f)
7065{
7066  struct language_function *p = f->language;
7067
7068  if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
7069      && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
7070    {
7071      /* Stop pointing to the local nodes about to be freed.  */
7072      /* But DECL_INITIAL must remain nonzero so we know this
7073	 was an actual function definition.  */
7074      DECL_INITIAL (current_function_decl) = error_mark_node;
7075      DECL_ARGUMENTS (current_function_decl) = 0;
7076    }
7077
7078  c_stmt_tree = p->base.x_stmt_tree;
7079  c_break_label = p->x_break_label;
7080  c_cont_label = p->x_cont_label;
7081  c_switch_stack = p->x_switch_stack;
7082  current_function_arg_info = p->arg_info;
7083  current_function_returns_value = p->returns_value;
7084  current_function_returns_null = p->returns_null;
7085  current_function_returns_abnormally = p->returns_abnormally;
7086  warn_about_return_type = p->warn_about_return_type;
7087
7088  f->language = NULL;
7089}
7090
7091/* Copy the DECL_LANG_SPECIFIC data associated with DECL.  */
7092
7093void
7094c_dup_lang_specific_decl (tree decl)
7095{
7096  struct lang_decl *ld;
7097
7098  if (!DECL_LANG_SPECIFIC (decl))
7099    return;
7100
7101  ld = GGC_NEW (struct lang_decl);
7102  memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
7103  DECL_LANG_SPECIFIC (decl) = ld;
7104}
7105
7106/* The functions below are required for functionality of doing
7107   function at once processing in the C front end. Currently these
7108   functions are not called from anywhere in the C front end, but as
7109   these changes continue, that will change.  */
7110
7111/* Returns the stmt_tree (if any) to which statements are currently
7112   being added.  If there is no active statement-tree, NULL is
7113   returned.  */
7114
7115stmt_tree
7116current_stmt_tree (void)
7117{
7118  return &c_stmt_tree;
7119}
7120
7121/* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
7122   C.  */
7123
7124int
7125anon_aggr_type_p (tree ARG_UNUSED (node))
7126{
7127  return 0;
7128}
7129
7130/* Return the global value of T as a symbol.  */
7131
7132tree
7133identifier_global_value	(tree t)
7134{
7135  struct c_binding *b;
7136
7137  for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
7138    if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
7139      return b->decl;
7140
7141  return 0;
7142}
7143
7144/* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
7145   otherwise the name is found in ridpointers from RID_INDEX.  */
7146
7147void
7148record_builtin_type (enum rid rid_index, const char *name, tree type)
7149{
7150  tree id, decl;
7151  if (name == 0)
7152    id = ridpointers[(int) rid_index];
7153  else
7154    id = get_identifier (name);
7155  decl = build_decl (TYPE_DECL, id, type);
7156  pushdecl (decl);
7157  if (debug_hooks->type_decl)
7158    debug_hooks->type_decl (decl, false);
7159}
7160
7161/* Build the void_list_node (void_type_node having been created).  */
7162tree
7163build_void_list_node (void)
7164{
7165  tree t = build_tree_list (NULL_TREE, void_type_node);
7166  return t;
7167}
7168
7169/* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
7170
7171struct c_parm *
7172build_c_parm (struct c_declspecs *specs, tree attrs,
7173	      struct c_declarator *declarator)
7174{
7175  struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
7176  ret->specs = specs;
7177  ret->attrs = attrs;
7178  ret->declarator = declarator;
7179  return ret;
7180}
7181
7182/* Return a declarator with nested attributes.  TARGET is the inner
7183   declarator to which these attributes apply.  ATTRS are the
7184   attributes.  */
7185
7186struct c_declarator *
7187build_attrs_declarator (tree attrs, struct c_declarator *target)
7188{
7189  struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7190  ret->kind = cdk_attrs;
7191  ret->declarator = target;
7192  ret->u.attrs = attrs;
7193  return ret;
7194}
7195
7196/* Return a declarator for a function with arguments specified by ARGS
7197   and return type specified by TARGET.  */
7198
7199struct c_declarator *
7200build_function_declarator (struct c_arg_info *args,
7201			   struct c_declarator *target)
7202{
7203  struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7204  ret->kind = cdk_function;
7205  ret->declarator = target;
7206  ret->u.arg_info = args;
7207  return ret;
7208}
7209
7210/* Return a declarator for the identifier IDENT (which may be
7211   NULL_TREE for an abstract declarator).  */
7212
7213struct c_declarator *
7214build_id_declarator (tree ident)
7215{
7216  struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7217  ret->kind = cdk_id;
7218  ret->declarator = 0;
7219  ret->u.id = ident;
7220  /* Default value - may get reset to a more precise location. */
7221  ret->id_loc = input_location;
7222  return ret;
7223}
7224
7225/* Return something to represent absolute declarators containing a *.
7226   TARGET is the absolute declarator that the * contains.
7227   TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
7228   to apply to the pointer type.  */
7229
7230struct c_declarator *
7231make_pointer_declarator (struct c_declspecs *type_quals_attrs,
7232			 struct c_declarator *target)
7233{
7234  tree attrs;
7235  int quals = 0;
7236  struct c_declarator *itarget = target;
7237  struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7238  if (type_quals_attrs)
7239    {
7240      attrs = type_quals_attrs->attrs;
7241      quals = quals_from_declspecs (type_quals_attrs);
7242      if (attrs != NULL_TREE)
7243	itarget = build_attrs_declarator (attrs, target);
7244    }
7245  ret->kind = cdk_pointer;
7246  ret->declarator = itarget;
7247  ret->u.pointer_quals = quals;
7248  return ret;
7249}
7250
7251/* Return a pointer to a structure for an empty list of declaration
7252   specifiers.  */
7253
7254struct c_declspecs *
7255build_null_declspecs (void)
7256{
7257  struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
7258  ret->type = 0;
7259  ret->decl_attr = 0;
7260  ret->attrs = 0;
7261  ret->typespec_word = cts_none;
7262  ret->storage_class = csc_none;
7263  ret->declspecs_seen_p = false;
7264  ret->type_seen_p = false;
7265  ret->non_sc_seen_p = false;
7266  ret->typedef_p = false;
7267  ret->tag_defined_p = false;
7268  ret->explicit_signed_p = false;
7269  ret->deprecated_p = false;
7270  ret->default_int_p = false;
7271  ret->long_p = false;
7272  ret->long_long_p = false;
7273  ret->short_p = false;
7274  ret->signed_p = false;
7275  ret->unsigned_p = false;
7276  ret->complex_p = false;
7277  ret->inline_p = false;
7278  ret->thread_p = false;
7279  ret->const_p = false;
7280  ret->volatile_p = false;
7281  ret->restrict_p = false;
7282  return ret;
7283}
7284
7285/* Add the type qualifier QUAL to the declaration specifiers SPECS,
7286   returning SPECS.  */
7287
7288struct c_declspecs *
7289declspecs_add_qual (struct c_declspecs *specs, tree qual)
7290{
7291  enum rid i;
7292  bool dupe = false;
7293  specs->non_sc_seen_p = true;
7294  specs->declspecs_seen_p = true;
7295  gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
7296	      && C_IS_RESERVED_WORD (qual));
7297  i = C_RID_CODE (qual);
7298  switch (i)
7299    {
7300    case RID_CONST:
7301      dupe = specs->const_p;
7302      specs->const_p = true;
7303      break;
7304    case RID_VOLATILE:
7305      dupe = specs->volatile_p;
7306      specs->volatile_p = true;
7307      break;
7308    case RID_RESTRICT:
7309      dupe = specs->restrict_p;
7310      specs->restrict_p = true;
7311      break;
7312    default:
7313      gcc_unreachable ();
7314    }
7315  if (dupe && pedantic && !flag_isoc99)
7316    pedwarn ("duplicate %qE", qual);
7317  return specs;
7318}
7319
7320/* Add the type specifier TYPE to the declaration specifiers SPECS,
7321   returning SPECS.  */
7322
7323struct c_declspecs *
7324declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
7325{
7326  tree type = spec.spec;
7327  specs->non_sc_seen_p = true;
7328  specs->declspecs_seen_p = true;
7329  specs->type_seen_p = true;
7330  if (TREE_DEPRECATED (type))
7331    specs->deprecated_p = true;
7332
7333  /* Handle type specifier keywords.  */
7334  if (TREE_CODE (type) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (type))
7335    {
7336      enum rid i = C_RID_CODE (type);
7337      if (specs->type)
7338	{
7339	  error ("two or more data types in declaration specifiers");
7340	  return specs;
7341	}
7342      if ((int) i <= (int) RID_LAST_MODIFIER)
7343	{
7344	  /* "long", "short", "signed", "unsigned" or "_Complex".  */
7345	  bool dupe = false;
7346	  switch (i)
7347	    {
7348	    case RID_LONG:
7349	      if (specs->long_long_p)
7350		{
7351		  error ("%<long long long%> is too long for GCC");
7352		  break;
7353		}
7354	      if (specs->long_p)
7355		{
7356		  if (specs->typespec_word == cts_double)
7357		    {
7358		      error ("both %<long long%> and %<double%> in "
7359			     "declaration specifiers");
7360		      break;
7361		    }
7362		  if (pedantic && !flag_isoc99 && !in_system_header
7363		      && warn_long_long)
7364		    pedwarn ("ISO C90 does not support %<long long%>");
7365		  specs->long_long_p = 1;
7366		  break;
7367		}
7368	      if (specs->short_p)
7369		error ("both %<long%> and %<short%> in "
7370		       "declaration specifiers");
7371	      else if (specs->typespec_word == cts_void)
7372		error ("both %<long%> and %<void%> in "
7373		       "declaration specifiers");
7374	      else if (specs->typespec_word == cts_bool)
7375		error ("both %<long%> and %<_Bool%> in "
7376		       "declaration specifiers");
7377	      else if (specs->typespec_word == cts_char)
7378		error ("both %<long%> and %<char%> in "
7379		       "declaration specifiers");
7380	      else if (specs->typespec_word == cts_float)
7381		error ("both %<long%> and %<float%> in "
7382		       "declaration specifiers");
7383	      else if (specs->typespec_word == cts_dfloat32)
7384		error ("both %<long%> and %<_Decimal32%> in "
7385		       "declaration specifiers");
7386	      else if (specs->typespec_word == cts_dfloat64)
7387		error ("both %<long%> and %<_Decimal64%> in "
7388		       "declaration specifiers");
7389	      else if (specs->typespec_word == cts_dfloat128)
7390		error ("both %<long%> and %<_Decimal128%> in "
7391		       "declaration specifiers");
7392	      else
7393		specs->long_p = true;
7394	      break;
7395	    case RID_SHORT:
7396	      dupe = specs->short_p;
7397	      if (specs->long_p)
7398		error ("both %<long%> and %<short%> in "
7399		       "declaration specifiers");
7400	      else if (specs->typespec_word == cts_void)
7401		error ("both %<short%> and %<void%> in "
7402		       "declaration specifiers");
7403	      else if (specs->typespec_word == cts_bool)
7404		error ("both %<short%> and %<_Bool%> in "
7405		       "declaration specifiers");
7406	      else if (specs->typespec_word == cts_char)
7407		error ("both %<short%> and %<char%> in "
7408		       "declaration specifiers");
7409	      else if (specs->typespec_word == cts_float)
7410		error ("both %<short%> and %<float%> in "
7411		       "declaration specifiers");
7412	      else if (specs->typespec_word == cts_double)
7413		error ("both %<short%> and %<double%> in "
7414		       "declaration specifiers");
7415	      else if (specs->typespec_word == cts_dfloat32)
7416                error ("both %<short%> and %<_Decimal32%> in "
7417		       "declaration specifiers");
7418	      else if (specs->typespec_word == cts_dfloat64)
7419		error ("both %<short%> and %<_Decimal64%> in "
7420		                        "declaration specifiers");
7421	      else if (specs->typespec_word == cts_dfloat128)
7422		error ("both %<short%> and %<_Decimal128%> in "
7423		       "declaration specifiers");
7424	      else
7425		specs->short_p = true;
7426	      break;
7427	    case RID_SIGNED:
7428	      dupe = specs->signed_p;
7429	      if (specs->unsigned_p)
7430		error ("both %<signed%> and %<unsigned%> in "
7431		       "declaration specifiers");
7432	      else if (specs->typespec_word == cts_void)
7433		error ("both %<signed%> and %<void%> in "
7434		       "declaration specifiers");
7435	      else if (specs->typespec_word == cts_bool)
7436		error ("both %<signed%> and %<_Bool%> in "
7437		       "declaration specifiers");
7438	      else if (specs->typespec_word == cts_float)
7439		error ("both %<signed%> and %<float%> in "
7440		       "declaration specifiers");
7441	      else if (specs->typespec_word == cts_double)
7442		error ("both %<signed%> and %<double%> in "
7443		       "declaration specifiers");
7444	      else if (specs->typespec_word == cts_dfloat32)
7445		error ("both %<signed%> and %<_Decimal32%> in "
7446		       "declaration specifiers");
7447	      else if (specs->typespec_word == cts_dfloat64)
7448		error ("both %<signed%> and %<_Decimal64%> in "
7449		       "declaration specifiers");
7450	      else if (specs->typespec_word == cts_dfloat128)
7451		error ("both %<signed%> and %<_Decimal128%> in "
7452		       "declaration specifiers");
7453	      else
7454		specs->signed_p = true;
7455	      break;
7456	    case RID_UNSIGNED:
7457	      dupe = specs->unsigned_p;
7458	      if (specs->signed_p)
7459		error ("both %<signed%> and %<unsigned%> in "
7460		       "declaration specifiers");
7461	      else if (specs->typespec_word == cts_void)
7462		error ("both %<unsigned%> and %<void%> in "
7463		       "declaration specifiers");
7464	      else if (specs->typespec_word == cts_bool)
7465		error ("both %<unsigned%> and %<_Bool%> in "
7466		       "declaration specifiers");
7467	      else if (specs->typespec_word == cts_float)
7468		error ("both %<unsigned%> and %<float%> in "
7469		       "declaration specifiers");
7470	      else if (specs->typespec_word == cts_double)
7471		error ("both %<unsigned%> and %<double%> in "
7472		       "declaration specifiers");
7473              else if (specs->typespec_word == cts_dfloat32)
7474		error ("both %<unsigned%> and %<_Decimal32%> in "
7475		       "declaration specifiers");
7476	      else if (specs->typespec_word == cts_dfloat64)
7477		error ("both %<unsigned%> and %<_Decimal64%> in "
7478		       "declaration specifiers");
7479	      else if (specs->typespec_word == cts_dfloat128)
7480		error ("both %<unsigned%> and %<_Decimal128%> in "
7481		       "declaration specifiers");
7482	      else
7483		specs->unsigned_p = true;
7484	      break;
7485	    case RID_COMPLEX:
7486	      dupe = specs->complex_p;
7487	      if (pedantic && !flag_isoc99 && !in_system_header)
7488		pedwarn ("ISO C90 does not support complex types");
7489	      if (specs->typespec_word == cts_void)
7490		error ("both %<complex%> and %<void%> in "
7491		       "declaration specifiers");
7492	      else if (specs->typespec_word == cts_bool)
7493		error ("both %<complex%> and %<_Bool%> in "
7494		       "declaration specifiers");
7495              else if (specs->typespec_word == cts_dfloat32)
7496		error ("both %<complex%> and %<_Decimal32%> in "
7497		       "declaration specifiers");
7498	      else if (specs->typespec_word == cts_dfloat64)
7499		error ("both %<complex%> and %<_Decimal64%> in "
7500		       "declaration specifiers");
7501	      else if (specs->typespec_word == cts_dfloat128)
7502		error ("both %<complex%> and %<_Decimal128%> in "
7503		       "declaration specifiers");
7504	      else
7505		specs->complex_p = true;
7506	      break;
7507	    default:
7508	      gcc_unreachable ();
7509	    }
7510
7511	  if (dupe)
7512	    error ("duplicate %qE", type);
7513
7514	  return specs;
7515	}
7516      else
7517	{
7518	  /* "void", "_Bool", "char", "int", "float" or "double".  */
7519	  if (specs->typespec_word != cts_none)
7520	    {
7521	      error ("two or more data types in declaration specifiers");
7522	      return specs;
7523	    }
7524	  switch (i)
7525	    {
7526	    case RID_VOID:
7527	      if (specs->long_p)
7528		error ("both %<long%> and %<void%> in "
7529		       "declaration specifiers");
7530	      else if (specs->short_p)
7531		error ("both %<short%> and %<void%> in "
7532		       "declaration specifiers");
7533	      else if (specs->signed_p)
7534		error ("both %<signed%> and %<void%> in "
7535		       "declaration specifiers");
7536	      else if (specs->unsigned_p)
7537		error ("both %<unsigned%> and %<void%> in "
7538		       "declaration specifiers");
7539	      else if (specs->complex_p)
7540		error ("both %<complex%> and %<void%> in "
7541		       "declaration specifiers");
7542	      else
7543		specs->typespec_word = cts_void;
7544	      return specs;
7545	    case RID_BOOL:
7546	      if (specs->long_p)
7547		error ("both %<long%> and %<_Bool%> in "
7548		       "declaration specifiers");
7549	      else if (specs->short_p)
7550		error ("both %<short%> and %<_Bool%> in "
7551		       "declaration specifiers");
7552	      else if (specs->signed_p)
7553		error ("both %<signed%> and %<_Bool%> in "
7554		       "declaration specifiers");
7555	      else if (specs->unsigned_p)
7556		error ("both %<unsigned%> and %<_Bool%> in "
7557		       "declaration specifiers");
7558	      else if (specs->complex_p)
7559		error ("both %<complex%> and %<_Bool%> in "
7560		       "declaration specifiers");
7561	      else
7562		specs->typespec_word = cts_bool;
7563	      return specs;
7564	    case RID_CHAR:
7565	      if (specs->long_p)
7566		error ("both %<long%> and %<char%> in "
7567		       "declaration specifiers");
7568	      else if (specs->short_p)
7569		error ("both %<short%> and %<char%> in "
7570		       "declaration specifiers");
7571	      else
7572		specs->typespec_word = cts_char;
7573	      return specs;
7574	    case RID_INT:
7575	      specs->typespec_word = cts_int;
7576	      return specs;
7577	    case RID_FLOAT:
7578	      if (specs->long_p)
7579		error ("both %<long%> and %<float%> in "
7580		       "declaration specifiers");
7581	      else if (specs->short_p)
7582		error ("both %<short%> and %<float%> in "
7583		       "declaration specifiers");
7584	      else if (specs->signed_p)
7585		error ("both %<signed%> and %<float%> in "
7586		       "declaration specifiers");
7587	      else if (specs->unsigned_p)
7588		error ("both %<unsigned%> and %<float%> in "
7589		       "declaration specifiers");
7590	      else
7591		specs->typespec_word = cts_float;
7592	      return specs;
7593	    case RID_DOUBLE:
7594	      if (specs->long_long_p)
7595		error ("both %<long long%> and %<double%> in "
7596		       "declaration specifiers");
7597	      else if (specs->short_p)
7598		error ("both %<short%> and %<double%> in "
7599		       "declaration specifiers");
7600	      else if (specs->signed_p)
7601		error ("both %<signed%> and %<double%> in "
7602		       "declaration specifiers");
7603	      else if (specs->unsigned_p)
7604		error ("both %<unsigned%> and %<double%> in "
7605		       "declaration specifiers");
7606	      else
7607		specs->typespec_word = cts_double;
7608	      return specs;
7609	    case RID_DFLOAT32:
7610	    case RID_DFLOAT64:
7611	    case RID_DFLOAT128:
7612	      {
7613		const char *str;
7614		if (i == RID_DFLOAT32)
7615		  str = "_Decimal32";
7616		else if (i == RID_DFLOAT64)
7617		  str = "_Decimal64";
7618		else
7619		  str = "_Decimal128";
7620		if (specs->long_long_p)
7621		  error ("both %<long long%> and %<%s%> in "
7622			 "declaration specifiers", str);
7623		if (specs->long_p)
7624		  error ("both %<long%> and %<%s%> in "
7625			 "declaration specifiers", str);
7626		else if (specs->short_p)
7627		  error ("both %<short%> and %<%s%> in "
7628			 "declaration specifiers", str);
7629		else if (specs->signed_p)
7630		  error ("both %<signed%> and %<%s%> in "
7631			 "declaration specifiers", str);
7632		else if (specs->unsigned_p)
7633		  error ("both %<unsigned%> and %<%s%> in "
7634			 "declaration specifiers", str);
7635                else if (specs->complex_p)
7636                  error ("both %<complex%> and %<%s%> in "
7637                         "declaration specifiers", str);
7638		else if (i == RID_DFLOAT32)
7639		  specs->typespec_word = cts_dfloat32;
7640		else if (i == RID_DFLOAT64)
7641		  specs->typespec_word = cts_dfloat64;
7642		else
7643		  specs->typespec_word = cts_dfloat128;
7644	      }
7645	      if (!targetm.decimal_float_supported_p ())
7646		error ("decimal floating point not supported for this target");
7647	      if (pedantic)
7648		pedwarn ("ISO C does not support decimal floating point");
7649	      return specs;
7650	    default:
7651	      /* ObjC reserved word "id", handled below.  */
7652	      break;
7653	    }
7654	}
7655    }
7656
7657  /* Now we have a typedef (a TYPE_DECL node), an identifier (some
7658     form of ObjC type, cases such as "int" and "long" being handled
7659     above), a TYPE (struct, union, enum and typeof specifiers) or an
7660     ERROR_MARK.  In none of these cases may there have previously
7661     been any type specifiers.  */
7662  if (specs->type || specs->typespec_word != cts_none
7663      || specs->long_p || specs->short_p || specs->signed_p
7664      || specs->unsigned_p || specs->complex_p)
7665    error ("two or more data types in declaration specifiers");
7666  else if (TREE_CODE (type) == TYPE_DECL)
7667    {
7668      if (TREE_TYPE (type) == error_mark_node)
7669	; /* Allow the type to default to int to avoid cascading errors.  */
7670      else
7671	{
7672	  specs->type = TREE_TYPE (type);
7673	  specs->decl_attr = DECL_ATTRIBUTES (type);
7674	  specs->typedef_p = true;
7675	  specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
7676	}
7677    }
7678  else if (TREE_CODE (type) == IDENTIFIER_NODE)
7679    {
7680      tree t = lookup_name (type);
7681      if (!t || TREE_CODE (t) != TYPE_DECL)
7682	error ("%qE fails to be a typedef or built in type", type);
7683      else if (TREE_TYPE (t) == error_mark_node)
7684	;
7685      else
7686	specs->type = TREE_TYPE (t);
7687    }
7688  else if (TREE_CODE (type) != ERROR_MARK)
7689    {
7690      if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
7691	specs->tag_defined_p = true;
7692      if (spec.kind == ctsk_typeof)
7693	specs->typedef_p = true;
7694      specs->type = type;
7695    }
7696
7697  return specs;
7698}
7699
7700/* Add the storage class specifier or function specifier SCSPEC to the
7701   declaration specifiers SPECS, returning SPECS.  */
7702
7703struct c_declspecs *
7704declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
7705{
7706  enum rid i;
7707  enum c_storage_class n = csc_none;
7708  bool dupe = false;
7709  specs->declspecs_seen_p = true;
7710  gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
7711	      && C_IS_RESERVED_WORD (scspec));
7712  i = C_RID_CODE (scspec);
7713  if (extra_warnings && specs->non_sc_seen_p)
7714    warning (OPT_Wextra, "%qE is not at beginning of declaration", scspec);
7715  switch (i)
7716    {
7717    case RID_INLINE:
7718      /* C99 permits duplicate inline.  Although of doubtful utility,
7719	 it seems simplest to permit it in gnu89 mode as well, as
7720	 there is also little utility in maintaining this as a
7721	 difference between gnu89 and C99 inline.  */
7722      dupe = false;
7723      specs->inline_p = true;
7724      break;
7725    case RID_THREAD:
7726      dupe = specs->thread_p;
7727      if (specs->storage_class == csc_auto)
7728	error ("%<__thread%> used with %<auto%>");
7729      else if (specs->storage_class == csc_register)
7730	error ("%<__thread%> used with %<register%>");
7731      else if (specs->storage_class == csc_typedef)
7732	error ("%<__thread%> used with %<typedef%>");
7733      else
7734	specs->thread_p = true;
7735      break;
7736    case RID_AUTO:
7737      n = csc_auto;
7738      break;
7739    case RID_EXTERN:
7740      n = csc_extern;
7741      /* Diagnose "__thread extern".  */
7742      if (specs->thread_p)
7743	error ("%<__thread%> before %<extern%>");
7744      break;
7745    case RID_REGISTER:
7746      n = csc_register;
7747      break;
7748    case RID_STATIC:
7749      n = csc_static;
7750      /* Diagnose "__thread static".  */
7751      if (specs->thread_p)
7752	error ("%<__thread%> before %<static%>");
7753      break;
7754    case RID_TYPEDEF:
7755      n = csc_typedef;
7756      break;
7757    default:
7758      gcc_unreachable ();
7759    }
7760  if (n != csc_none && n == specs->storage_class)
7761    dupe = true;
7762  if (dupe)
7763    error ("duplicate %qE", scspec);
7764  if (n != csc_none)
7765    {
7766      if (specs->storage_class != csc_none && n != specs->storage_class)
7767	{
7768	  error ("multiple storage classes in declaration specifiers");
7769	}
7770      else
7771	{
7772	  specs->storage_class = n;
7773	  if (n != csc_extern && n != csc_static && specs->thread_p)
7774	    {
7775	      error ("%<__thread%> used with %qE", scspec);
7776	      specs->thread_p = false;
7777	    }
7778	}
7779    }
7780  return specs;
7781}
7782
7783/* Add the attributes ATTRS to the declaration specifiers SPECS,
7784   returning SPECS.  */
7785
7786struct c_declspecs *
7787declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
7788{
7789  specs->attrs = chainon (attrs, specs->attrs);
7790  specs->declspecs_seen_p = true;
7791  return specs;
7792}
7793
7794/* Combine "long", "short", "signed", "unsigned" and "_Complex" type
7795   specifiers with any other type specifier to determine the resulting
7796   type.  This is where ISO C checks on complex types are made, since
7797   "_Complex long" is a prefix of the valid ISO C type "_Complex long
7798   double".  */
7799
7800struct c_declspecs *
7801finish_declspecs (struct c_declspecs *specs)
7802{
7803  /* If a type was specified as a whole, we have no modifiers and are
7804     done.  */
7805  if (specs->type != NULL_TREE)
7806    {
7807      gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7808		  && !specs->signed_p && !specs->unsigned_p
7809		  && !specs->complex_p);
7810      return specs;
7811    }
7812
7813  /* If none of "void", "_Bool", "char", "int", "float" or "double"
7814     has been specified, treat it as "int" unless "_Complex" is
7815     present and there are no other specifiers.  If we just have
7816     "_Complex", it is equivalent to "_Complex double", but e.g.
7817     "_Complex short" is equivalent to "_Complex short int".  */
7818  if (specs->typespec_word == cts_none)
7819    {
7820      if (specs->long_p || specs->short_p
7821	  || specs->signed_p || specs->unsigned_p)
7822	{
7823	  specs->typespec_word = cts_int;
7824	}
7825      else if (specs->complex_p)
7826	{
7827	  specs->typespec_word = cts_double;
7828	  if (pedantic)
7829	    pedwarn ("ISO C does not support plain %<complex%> meaning "
7830		     "%<double complex%>");
7831	}
7832      else
7833	{
7834	  specs->typespec_word = cts_int;
7835	  specs->default_int_p = true;
7836	  /* We don't diagnose this here because grokdeclarator will
7837	     give more specific diagnostics according to whether it is
7838	     a function definition.  */
7839	}
7840    }
7841
7842  /* If "signed" was specified, record this to distinguish "int" and
7843     "signed int" in the case of a bit-field with
7844     -funsigned-bitfields.  */
7845  specs->explicit_signed_p = specs->signed_p;
7846
7847  /* Now compute the actual type.  */
7848  switch (specs->typespec_word)
7849    {
7850    case cts_void:
7851      gcc_assert (!specs->long_p && !specs->short_p
7852		  && !specs->signed_p && !specs->unsigned_p
7853		  && !specs->complex_p);
7854      specs->type = void_type_node;
7855      break;
7856    case cts_bool:
7857      gcc_assert (!specs->long_p && !specs->short_p
7858		  && !specs->signed_p && !specs->unsigned_p
7859		  && !specs->complex_p);
7860      specs->type = boolean_type_node;
7861      break;
7862    case cts_char:
7863      gcc_assert (!specs->long_p && !specs->short_p);
7864      gcc_assert (!(specs->signed_p && specs->unsigned_p));
7865      if (specs->signed_p)
7866	specs->type = signed_char_type_node;
7867      else if (specs->unsigned_p)
7868	specs->type = unsigned_char_type_node;
7869      else
7870	specs->type = char_type_node;
7871      if (specs->complex_p)
7872	{
7873	  if (pedantic)
7874	    pedwarn ("ISO C does not support complex integer types");
7875	  specs->type = build_complex_type (specs->type);
7876	}
7877      break;
7878    case cts_int:
7879      gcc_assert (!(specs->long_p && specs->short_p));
7880      gcc_assert (!(specs->signed_p && specs->unsigned_p));
7881      if (specs->long_long_p)
7882	specs->type = (specs->unsigned_p
7883		       ? long_long_unsigned_type_node
7884		       : long_long_integer_type_node);
7885      else if (specs->long_p)
7886	specs->type = (specs->unsigned_p
7887		       ? long_unsigned_type_node
7888		       : long_integer_type_node);
7889      else if (specs->short_p)
7890	specs->type = (specs->unsigned_p
7891		       ? short_unsigned_type_node
7892		       : short_integer_type_node);
7893      else
7894	specs->type = (specs->unsigned_p
7895		       ? unsigned_type_node
7896		       : integer_type_node);
7897      if (specs->complex_p)
7898	{
7899	  if (pedantic)
7900	    pedwarn ("ISO C does not support complex integer types");
7901	  specs->type = build_complex_type (specs->type);
7902	}
7903      break;
7904    case cts_float:
7905      gcc_assert (!specs->long_p && !specs->short_p
7906		  && !specs->signed_p && !specs->unsigned_p);
7907      specs->type = (specs->complex_p
7908		     ? complex_float_type_node
7909		     : float_type_node);
7910      break;
7911    case cts_double:
7912      gcc_assert (!specs->long_long_p && !specs->short_p
7913		  && !specs->signed_p && !specs->unsigned_p);
7914      if (specs->long_p)
7915	{
7916	  specs->type = (specs->complex_p
7917			 ? complex_long_double_type_node
7918			 : long_double_type_node);
7919	}
7920      else
7921	{
7922	  specs->type = (specs->complex_p
7923			 ? complex_double_type_node
7924			 : double_type_node);
7925	}
7926      break;
7927    case cts_dfloat32:
7928    case cts_dfloat64:
7929    case cts_dfloat128:
7930      gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7931		  && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
7932      if (specs->typespec_word == cts_dfloat32)
7933	specs->type = dfloat32_type_node;
7934      else if (specs->typespec_word == cts_dfloat64)
7935	specs->type = dfloat64_type_node;
7936      else
7937	specs->type = dfloat128_type_node;
7938      break;
7939    default:
7940      gcc_unreachable ();
7941    }
7942
7943  return specs;
7944}
7945
7946/* Synthesize a function which calls all the global ctors or global
7947   dtors in this file.  This is only used for targets which do not
7948   support .ctors/.dtors sections.  FIXME: Migrate into cgraph.  */
7949static void
7950build_cdtor (int method_type, tree cdtors)
7951{
7952  tree body = 0;
7953
7954  if (!cdtors)
7955    return;
7956
7957  for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7958    append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7959			      &body);
7960
7961  cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7962}
7963
7964/* A subroutine of c_write_global_declarations.  Perform final processing
7965   on one file scope's declarations (or the external scope's declarations),
7966   GLOBALS.  */
7967
7968static void
7969c_write_global_declarations_1 (tree globals)
7970{
7971  tree decl;
7972  bool reconsider;
7973
7974  /* Process the decls in the order they were written.  */
7975  for (decl = globals; decl; decl = TREE_CHAIN (decl))
7976    {
7977      /* Check for used but undefined static functions using the C
7978	 standard's definition of "used", and set TREE_NO_WARNING so
7979	 that check_global_declarations doesn't repeat the check.  */
7980      if (TREE_CODE (decl) == FUNCTION_DECL
7981	  && DECL_INITIAL (decl) == 0
7982	  && DECL_EXTERNAL (decl)
7983	  && !TREE_PUBLIC (decl)
7984	  && C_DECL_USED (decl))
7985	{
7986	  pedwarn ("%q+F used but never defined", decl);
7987	  TREE_NO_WARNING (decl) = 1;
7988	}
7989
7990      wrapup_global_declaration_1 (decl);
7991    }
7992
7993  do
7994    {
7995      reconsider = false;
7996      for (decl = globals; decl; decl = TREE_CHAIN (decl))
7997	reconsider |= wrapup_global_declaration_2 (decl);
7998    }
7999  while (reconsider);
8000
8001  for (decl = globals; decl; decl = TREE_CHAIN (decl))
8002    check_global_declaration_1 (decl);
8003}
8004
8005/* A subroutine of c_write_global_declarations Emit debug information for each
8006   of the declarations in GLOBALS.  */
8007
8008static void
8009c_write_global_declarations_2 (tree globals)
8010{
8011  tree decl;
8012
8013  for (decl = globals; decl ; decl = TREE_CHAIN (decl))
8014    debug_hooks->global_decl (decl);
8015}
8016
8017/* Preserve the external declarations scope across a garbage collect.  */
8018static GTY(()) tree ext_block;
8019
8020void
8021c_write_global_declarations (void)
8022{
8023  tree t;
8024
8025  /* We don't want to do this if generating a PCH.  */
8026  if (pch_file)
8027    return;
8028
8029  /* Don't waste time on further processing if -fsyntax-only or we've
8030     encountered errors.  */
8031  if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
8032    return;
8033
8034  /* Close the external scope.  */
8035  ext_block = pop_scope ();
8036  external_scope = 0;
8037  gcc_assert (!current_scope);
8038
8039  if (ext_block)
8040    {
8041      tree tmp = BLOCK_VARS (ext_block);
8042      int flags;
8043      FILE * stream = dump_begin (TDI_tu, &flags);
8044      if (stream && tmp)
8045	{
8046	  dump_node (tmp, flags & ~TDF_SLIM, stream);
8047	  dump_end (TDI_tu, stream);
8048	}
8049    }
8050
8051  /* Process all file scopes in this compilation, and the external_scope,
8052     through wrapup_global_declarations and check_global_declarations.  */
8053  for (t = all_translation_units; t; t = TREE_CHAIN (t))
8054    c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
8055  c_write_global_declarations_1 (BLOCK_VARS (ext_block));
8056
8057  /* Generate functions to call static constructors and destructors
8058     for targets that do not support .ctors/.dtors sections.  These
8059     functions have magic names which are detected by collect2.  */
8060  build_cdtor ('I', static_ctors); static_ctors = 0;
8061  build_cdtor ('D', static_dtors); static_dtors = 0;
8062
8063  /* We're done parsing; proceed to optimize and emit assembly.
8064     FIXME: shouldn't be the front end's responsibility to call this.  */
8065  cgraph_optimize ();
8066
8067  /* After cgraph has had a chance to emit everything that's going to
8068     be emitted, output debug information for globals.  */
8069  if (errorcount == 0 && sorrycount == 0)
8070    {
8071      timevar_push (TV_SYMOUT);
8072      for (t = all_translation_units; t; t = TREE_CHAIN (t))
8073	c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
8074      c_write_global_declarations_2 (BLOCK_VARS (ext_block));
8075      timevar_pop (TV_SYMOUT);
8076    }
8077
8078  ext_block = NULL;
8079}
8080
8081#include "gt-c-decl.h"
8082