OSDN Git Service

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