OSDN Git Service

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