OSDN Git Service

3470a935d977fa92fbf737fed13fc538502b9dc3
[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) : CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")))  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 && comptypes (b_ext->u.type, 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 check all the instance variables of
6833      superclasses when 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).  We pass on this job to the
6836      Objective-C compiler.  objc_detect_field_duplicates() will return
6837      false if we are not checking the list of instance variables and
6838      the C frontend should proceed with the standard field duplicate
6839      checks.  If we are checking the list of instance variables, the
6840      ObjC frontend will do the check, emit the errors if needed, and
6841      then return true.  */
6842   if (c_dialect_objc ())
6843     if (objc_detect_field_duplicates (false))
6844       return;
6845
6846   /* First, see if there are more than "a few" fields.
6847      This is trivially true if there are zero or one fields.  */
6848   if (!fieldlist || !DECL_CHAIN (fieldlist))
6849     return;
6850   x = fieldlist;
6851   do {
6852     timeout--;
6853     if (DECL_NAME (x) == NULL_TREE
6854         && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6855             || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
6856       timeout = 0;
6857     x = DECL_CHAIN (x);
6858   } while (timeout > 0 && x);
6859
6860   /* If there were "few" fields and no anonymous structures or unions,
6861      avoid the overhead of allocating a hash table.  Instead just do
6862      the nested traversal thing.  */
6863   if (timeout > 0)
6864     {
6865       for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
6866         /* When using -fplan9-extensions, we can have duplicates
6867            between typedef names and fields.  */
6868         if (DECL_NAME (x)
6869             || (flag_plan9_extensions
6870                 && DECL_NAME (x) == NULL_TREE
6871                 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6872                     || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
6873                 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
6874                 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
6875           {
6876             for (y = fieldlist; y != x; y = TREE_CHAIN (y))
6877               if (is_duplicate_field (y, x))
6878                 {
6879                   error ("duplicate member %q+D", x);
6880                   DECL_NAME (x) = NULL_TREE;
6881                 }
6882           }
6883     }
6884   else
6885     {
6886       htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
6887
6888       detect_field_duplicates_hash (fieldlist, htab);
6889       htab_delete (htab);
6890     }
6891 }
6892
6893 /* Finish up struct info used by -Wc++-compat.  */
6894
6895 static void
6896 warn_cxx_compat_finish_struct (tree fieldlist)
6897 {
6898   unsigned int ix;
6899   tree x;
6900   struct c_binding *b;
6901
6902   /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
6903      the current struct.  We do this now at the end of the struct
6904      because the flag is used to issue visibility warnings, and we
6905      only want to issue those warnings if the type is referenced
6906      outside of the struct declaration.  */
6907   FOR_EACH_VEC_ELT (tree, struct_parse_info->struct_types, ix, x)
6908     C_TYPE_DEFINED_IN_STRUCT (x) = 1;
6909
6910   /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
6911      typedefs used when declaring fields in this struct.  If the name
6912      of any of the fields is also a typedef name then the struct would
6913      not parse in C++, because the C++ lookup rules say that the
6914      typedef name would be looked up in the context of the struct, and
6915      would thus be the field rather than the typedef.  */
6916   if (!VEC_empty (tree, struct_parse_info->typedefs_seen)
6917       && fieldlist != NULL_TREE)
6918     {
6919       /* Use a pointer_set using the name of the typedef.  We can use
6920          a pointer_set because identifiers are interned.  */
6921       struct pointer_set_t *tset = pointer_set_create ();
6922
6923       FOR_EACH_VEC_ELT (tree, struct_parse_info->typedefs_seen, ix, x)
6924         pointer_set_insert (tset, DECL_NAME (x));
6925
6926       for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
6927         {
6928           if (DECL_NAME (x) != NULL_TREE
6929               && pointer_set_contains (tset, DECL_NAME (x)))
6930             {
6931               warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
6932                           ("using %qD as both field and typedef name is "
6933                            "invalid in C++"),
6934                           x);
6935               /* FIXME: It would be nice to report the location where
6936                  the typedef name is used.  */
6937             }
6938         }
6939
6940       pointer_set_destroy (tset);
6941     }
6942
6943   /* For each field which has a binding and which was not defined in
6944      an enclosing struct, clear the in_struct field.  */
6945   FOR_EACH_VEC_ELT (c_binding_ptr, struct_parse_info->fields, ix, b)
6946     b->in_struct = 0;
6947 }
6948
6949 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
6950    LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
6951    FIELDLIST is a chain of FIELD_DECL nodes for the fields.
6952    ATTRIBUTES are attributes to be applied to the structure.
6953
6954    ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
6955    the struct was started.  */
6956
6957 tree
6958 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
6959                struct c_struct_parse_info *enclosing_struct_parse_info)
6960 {
6961   tree x;
6962   bool toplevel = file_scope == current_scope;
6963   int saw_named_field;
6964
6965   /* If this type was previously laid out as a forward reference,
6966      make sure we lay it out again.  */
6967
6968   TYPE_SIZE (t) = 0;
6969
6970   decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6971
6972   if (pedantic)
6973     {
6974       for (x = fieldlist; x; x = DECL_CHAIN (x))
6975         {
6976           if (DECL_NAME (x) != 0)
6977             break;
6978           if (flag_isoc1x
6979               && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6980                   || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
6981             break;
6982         }
6983
6984       if (x == 0)
6985         {
6986           if (TREE_CODE (t) == UNION_TYPE)
6987             {
6988               if (fieldlist)
6989                 pedwarn (loc, OPT_pedantic, "union has no named members");
6990               else
6991                 pedwarn (loc, OPT_pedantic, "union has no members");
6992             }
6993           else
6994             {
6995               if (fieldlist)
6996                 pedwarn (loc, OPT_pedantic, "struct has no named members");
6997               else
6998                 pedwarn (loc, OPT_pedantic, "struct has no members");
6999             }
7000         }
7001     }
7002
7003   /* Install struct as DECL_CONTEXT of each field decl.
7004      Also process specified field sizes, found in the DECL_INITIAL,
7005      storing 0 there after the type has been changed to precision equal
7006      to its width, rather than the precision of the specified standard
7007      type.  (Correct layout requires the original type to have been preserved
7008      until now.)  */
7009
7010   saw_named_field = 0;
7011   for (x = fieldlist; x; x = DECL_CHAIN (x))
7012     {
7013       if (TREE_TYPE (x) == error_mark_node)
7014         continue;
7015
7016       DECL_CONTEXT (x) = t;
7017
7018       /* If any field is const, the structure type is pseudo-const.  */
7019       if (TREE_READONLY (x))
7020         C_TYPE_FIELDS_READONLY (t) = 1;
7021       else
7022         {
7023           /* A field that is pseudo-const makes the structure likewise.  */
7024           tree t1 = strip_array_types (TREE_TYPE (x));
7025           if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
7026               && C_TYPE_FIELDS_READONLY (t1))
7027             C_TYPE_FIELDS_READONLY (t) = 1;
7028         }
7029
7030       /* Any field that is volatile means variables of this type must be
7031          treated in some ways as volatile.  */
7032       if (TREE_THIS_VOLATILE (x))
7033         C_TYPE_FIELDS_VOLATILE (t) = 1;
7034
7035       /* Any field of nominal variable size implies structure is too.  */
7036       if (C_DECL_VARIABLE_SIZE (x))
7037         C_TYPE_VARIABLE_SIZE (t) = 1;
7038
7039       if (DECL_INITIAL (x))
7040         {
7041           unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
7042           DECL_SIZE (x) = bitsize_int (width);
7043           DECL_BIT_FIELD (x) = 1;
7044           SET_DECL_C_BIT_FIELD (x);
7045         }
7046
7047       if (TYPE_PACKED (t)
7048           && (DECL_BIT_FIELD (x)
7049               || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7050         DECL_PACKED (x) = 1;
7051
7052       /* Detect flexible array member in an invalid context.  */
7053       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7054           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7055           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7056           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7057         {
7058           if (TREE_CODE (t) == UNION_TYPE)
7059             {
7060               error_at (DECL_SOURCE_LOCATION (x),
7061                         "flexible array member in union");
7062               TREE_TYPE (x) = error_mark_node;
7063             }
7064           else if (DECL_CHAIN (x) != NULL_TREE)
7065             {
7066               error_at (DECL_SOURCE_LOCATION (x),
7067                         "flexible array member not at end of struct");
7068               TREE_TYPE (x) = error_mark_node;
7069             }
7070           else if (!saw_named_field)
7071             {
7072               error_at (DECL_SOURCE_LOCATION (x),
7073                         "flexible array member in otherwise empty struct");
7074               TREE_TYPE (x) = error_mark_node;
7075             }
7076         }
7077
7078       if (pedantic && TREE_CODE (t) == RECORD_TYPE
7079           && flexible_array_type_p (TREE_TYPE (x)))
7080         pedwarn (DECL_SOURCE_LOCATION (x), OPT_pedantic,
7081                  "invalid use of structure with flexible array member");
7082
7083       if (DECL_NAME (x)
7084           || TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7085           || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7086         saw_named_field = 1;
7087     }
7088
7089   detect_field_duplicates (fieldlist);
7090
7091   /* Now we have the nearly final fieldlist.  Record it,
7092      then lay out the structure or union (including the fields).  */
7093
7094   TYPE_FIELDS (t) = fieldlist;
7095
7096   layout_type (t);
7097
7098   /* Give bit-fields their proper types.  */
7099   {
7100     tree *fieldlistp = &fieldlist;
7101     while (*fieldlistp)
7102       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
7103           && TREE_TYPE (*fieldlistp) != error_mark_node)
7104         {
7105           unsigned HOST_WIDE_INT width
7106             = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
7107           tree type = TREE_TYPE (*fieldlistp);
7108           if (width != TYPE_PRECISION (type))
7109             {
7110               TREE_TYPE (*fieldlistp)
7111                 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7112               DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
7113             }
7114           DECL_INITIAL (*fieldlistp) = 0;
7115         }
7116       else
7117         fieldlistp = &DECL_CHAIN (*fieldlistp);
7118   }
7119
7120   /* Now we have the truly final field list.
7121      Store it in this type and in the variants.  */
7122
7123   TYPE_FIELDS (t) = fieldlist;
7124
7125   /* If there are lots of fields, sort so we can look through them fast.
7126      We arbitrarily consider 16 or more elts to be "a lot".  */
7127
7128   {
7129     int len = 0;
7130
7131     for (x = fieldlist; x; x = DECL_CHAIN (x))
7132       {
7133         if (len > 15 || DECL_NAME (x) == NULL)
7134           break;
7135         len += 1;
7136       }
7137
7138     if (len > 15)
7139       {
7140         tree *field_array;
7141         struct lang_type *space;
7142         struct sorted_fields_type *space2;
7143
7144         len += list_length (x);
7145
7146         /* Use the same allocation policy here that make_node uses, to
7147           ensure that this lives as long as the rest of the struct decl.
7148           All decls in an inline function need to be saved.  */
7149
7150         space = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7151         space2 = ggc_alloc_sorted_fields_type
7152           (sizeof (struct sorted_fields_type) + len * sizeof (tree));
7153
7154         len = 0;
7155         space->s = space2;
7156         field_array = &space2->elts[0];
7157         for (x = fieldlist; x; x = DECL_CHAIN (x))
7158           {
7159             field_array[len++] = x;
7160
7161             /* If there is anonymous struct or union, break out of the loop.  */
7162             if (DECL_NAME (x) == NULL)
7163               break;
7164           }
7165         /* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
7166         if (x == NULL)
7167           {
7168             TYPE_LANG_SPECIFIC (t) = space;
7169             TYPE_LANG_SPECIFIC (t)->s->len = len;
7170             field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
7171             qsort (field_array, len, sizeof (tree), field_decl_cmp);
7172           }
7173       }
7174   }
7175
7176   for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
7177     {
7178       TYPE_FIELDS (x) = TYPE_FIELDS (t);
7179       TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
7180       C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
7181       C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
7182       C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
7183     }
7184
7185   /* If this was supposed to be a transparent union, but we can't
7186      make it one, warn and turn off the flag.  */
7187   if (TREE_CODE (t) == UNION_TYPE
7188       && TYPE_TRANSPARENT_AGGR (t)
7189       && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
7190     {
7191       TYPE_TRANSPARENT_AGGR (t) = 0;
7192       warning_at (loc, 0, "union cannot be made transparent");
7193     }
7194
7195   /* If this structure or union completes the type of any previous
7196      variable declaration, lay it out and output its rtl.  */
7197   for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
7198        x;
7199        x = TREE_CHAIN (x))
7200     {
7201       tree decl = TREE_VALUE (x);
7202       if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
7203         layout_array_type (TREE_TYPE (decl));
7204       if (TREE_CODE (decl) != TYPE_DECL)
7205         {
7206           layout_decl (decl, 0);
7207           if (c_dialect_objc ())
7208             objc_check_decl (decl);
7209           rest_of_decl_compilation (decl, toplevel, 0);
7210           if (!toplevel)
7211             expand_decl (decl);
7212         }
7213     }
7214   C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
7215
7216   /* Update type location to the one of the definition, instead of e.g.
7217      a forward declaration.  */
7218   if (TYPE_STUB_DECL (t))
7219     DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
7220
7221   /* Finish debugging output for this type.  */
7222   rest_of_type_compilation (t, toplevel);
7223
7224   /* If we're inside a function proper, i.e. not file-scope and not still
7225      parsing parameters, then arrange for the size of a variable sized type
7226      to be bound now.  */
7227   if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
7228     add_stmt (build_stmt (loc,
7229                           DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
7230
7231   if (warn_cxx_compat)
7232     warn_cxx_compat_finish_struct (fieldlist);
7233
7234   VEC_free (tree, heap, struct_parse_info->struct_types);
7235   VEC_free (c_binding_ptr, heap, struct_parse_info->fields);
7236   VEC_free (tree, heap, struct_parse_info->typedefs_seen);
7237   XDELETE (struct_parse_info);
7238
7239   struct_parse_info = enclosing_struct_parse_info;
7240
7241   /* If this struct is defined inside a struct, add it to
7242      struct_types.  */
7243   if (warn_cxx_compat
7244       && struct_parse_info != NULL
7245       && !in_sizeof && !in_typeof && !in_alignof)
7246     VEC_safe_push (tree, heap, struct_parse_info->struct_types, t);
7247
7248   return t;
7249 }
7250
7251 /* Lay out the type T, and its element type, and so on.  */
7252
7253 static void
7254 layout_array_type (tree t)
7255 {
7256   if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
7257     layout_array_type (TREE_TYPE (t));
7258   layout_type (t);
7259 }
7260 \f
7261 /* Begin compiling the definition of an enumeration type.
7262    NAME is its name (or null if anonymous).
7263    LOC is the enum's location.
7264    Returns the type object, as yet incomplete.
7265    Also records info about it so that build_enumerator
7266    may be used to declare the individual values as they are read.  */
7267
7268 tree
7269 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
7270 {
7271   tree enumtype = NULL_TREE;
7272   location_t enumloc = UNKNOWN_LOCATION;
7273
7274   /* If this is the real definition for a previous forward reference,
7275      fill in the contents in the same object that used to be the
7276      forward reference.  */
7277
7278   if (name != NULL_TREE)
7279     enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
7280
7281   if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
7282     {
7283       enumtype = make_node (ENUMERAL_TYPE);
7284       pushtag (loc, name, enumtype);
7285     }
7286
7287   if (C_TYPE_BEING_DEFINED (enumtype))
7288     error_at (loc, "nested redefinition of %<enum %E%>", name);
7289
7290   C_TYPE_BEING_DEFINED (enumtype) = 1;
7291
7292   if (TYPE_VALUES (enumtype) != 0)
7293     {
7294       /* This enum is a named one that has been declared already.  */
7295       error_at (loc, "redeclaration of %<enum %E%>", name);
7296       if (enumloc != UNKNOWN_LOCATION)
7297         inform (enumloc, "originally defined here");
7298
7299       /* Completely replace its old definition.
7300          The old enumerators remain defined, however.  */
7301       TYPE_VALUES (enumtype) = 0;
7302     }
7303
7304   the_enum->enum_next_value = integer_zero_node;
7305   the_enum->enum_overflow = 0;
7306
7307   if (flag_short_enums)
7308     TYPE_PACKED (enumtype) = 1;
7309
7310   /* FIXME: This will issue a warning for a use of a type defined
7311      within sizeof in a statement expr.  This is not terribly serious
7312      as C++ doesn't permit statement exprs within sizeof anyhow.  */
7313   if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7314     warning_at (loc, OPT_Wc___compat,
7315                 "defining type in %qs expression is invalid in C++",
7316                 (in_sizeof
7317                  ? "sizeof"
7318                  : (in_typeof ? "typeof" : "alignof")));
7319
7320   return enumtype;
7321 }
7322
7323 /* After processing and defining all the values of an enumeration type,
7324    install their decls in the enumeration type and finish it off.
7325    ENUMTYPE is the type object, VALUES a list of decl-value pairs,
7326    and ATTRIBUTES are the specified attributes.
7327    Returns ENUMTYPE.  */
7328
7329 tree
7330 finish_enum (tree enumtype, tree values, tree attributes)
7331 {
7332   tree pair, tem;
7333   tree minnode = 0, maxnode = 0;
7334   int precision, unsign;
7335   bool toplevel = (file_scope == current_scope);
7336   struct lang_type *lt;
7337
7338   decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7339
7340   /* Calculate the maximum value of any enumerator in this type.  */
7341
7342   if (values == error_mark_node)
7343     minnode = maxnode = integer_zero_node;
7344   else
7345     {
7346       minnode = maxnode = TREE_VALUE (values);
7347       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
7348         {
7349           tree value = TREE_VALUE (pair);
7350           if (tree_int_cst_lt (maxnode, value))
7351             maxnode = value;
7352           if (tree_int_cst_lt (value, minnode))
7353             minnode = value;
7354         }
7355     }
7356
7357   /* Construct the final type of this enumeration.  It is the same
7358      as one of the integral types - the narrowest one that fits, except
7359      that normally we only go as narrow as int - and signed iff any of
7360      the values are negative.  */
7361   unsign = (tree_int_cst_sgn (minnode) >= 0);
7362   precision = MAX (tree_int_cst_min_precision (minnode, unsign),
7363                    tree_int_cst_min_precision (maxnode, unsign));
7364
7365   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
7366     {
7367       tem = c_common_type_for_size (precision, unsign);
7368       if (tem == NULL)
7369         {
7370           warning (0, "enumeration values exceed range of largest integer");
7371           tem = long_long_integer_type_node;
7372         }
7373     }
7374   else
7375     tem = unsign ? unsigned_type_node : integer_type_node;
7376
7377   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
7378   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
7379   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
7380   TYPE_SIZE (enumtype) = 0;
7381
7382   /* If the precision of the type was specific with an attribute and it
7383      was too small, give an error.  Otherwise, use it.  */
7384   if (TYPE_PRECISION (enumtype))
7385     {
7386       if (precision > TYPE_PRECISION (enumtype))
7387         error ("specified mode too small for enumeral values");
7388     }
7389   else
7390     TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
7391
7392   layout_type (enumtype);
7393
7394   if (values != error_mark_node)
7395     {
7396       /* Change the type of the enumerators to be the enum type.  We
7397          need to do this irrespective of the size of the enum, for
7398          proper type checking.  Replace the DECL_INITIALs of the
7399          enumerators, and the value slots of the list, with copies
7400          that have the enum type; they cannot be modified in place
7401          because they may be shared (e.g.  integer_zero_node) Finally,
7402          change the purpose slots to point to the names of the decls.  */
7403       for (pair = values; pair; pair = TREE_CHAIN (pair))
7404         {
7405           tree enu = TREE_PURPOSE (pair);
7406           tree ini = DECL_INITIAL (enu);
7407
7408           TREE_TYPE (enu) = enumtype;
7409
7410           /* The ISO C Standard mandates enumerators to have type int,
7411              even though the underlying type of an enum type is
7412              unspecified.  However, GCC allows enumerators of any
7413              integer type as an extensions.  build_enumerator()
7414              converts any enumerators that fit in an int to type int,
7415              to avoid promotions to unsigned types when comparing
7416              integers with enumerators that fit in the int range.
7417              When -pedantic is given, build_enumerator() would have
7418              already warned about those that don't fit. Here we
7419              convert the rest to the enumerator type. */
7420           if (TREE_TYPE (ini) != integer_type_node)
7421             ini = convert (enumtype, ini);
7422
7423           DECL_INITIAL (enu) = ini;
7424           TREE_PURPOSE (pair) = DECL_NAME (enu);
7425           TREE_VALUE (pair) = ini;
7426         }
7427
7428       TYPE_VALUES (enumtype) = values;
7429     }
7430
7431   /* Record the min/max values so that we can warn about bit-field
7432      enumerations that are too small for the values.  */
7433   lt = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7434   lt->enum_min = minnode;
7435   lt->enum_max = maxnode;
7436   TYPE_LANG_SPECIFIC (enumtype) = lt;
7437
7438   /* Fix up all variant types of this enum type.  */
7439   for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
7440     {
7441       if (tem == enumtype)
7442         continue;
7443       TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
7444       TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
7445       TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
7446       TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
7447       TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
7448       SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
7449       TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
7450       TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
7451       TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
7452       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
7453       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
7454     }
7455
7456   /* Finish debugging output for this type.  */
7457   rest_of_type_compilation (enumtype, toplevel);
7458
7459   /* If this enum is defined inside a struct, add it to
7460      struct_types.  */
7461   if (warn_cxx_compat
7462       && struct_parse_info != NULL
7463       && !in_sizeof && !in_typeof && !in_alignof)
7464     VEC_safe_push (tree, heap, struct_parse_info->struct_types, enumtype);
7465
7466   return enumtype;
7467 }
7468
7469 /* Build and install a CONST_DECL for one value of the
7470    current enumeration type (one that was begun with start_enum).
7471    DECL_LOC is the location of the enumerator.
7472    LOC is the location of the '=' operator if any, DECL_LOC otherwise.
7473    Return a tree-list containing the CONST_DECL and its value.
7474    Assignment of sequential values by default is handled here.  */
7475
7476 tree
7477 build_enumerator (location_t decl_loc, location_t loc,
7478                   struct c_enum_contents *the_enum, tree name, tree value)
7479 {
7480   tree decl, type;
7481
7482   /* Validate and default VALUE.  */
7483
7484   if (value != 0)
7485     {
7486       /* Don't issue more errors for error_mark_node (i.e. an
7487          undeclared identifier) - just ignore the value expression.  */
7488       if (value == error_mark_node)
7489         value = 0;
7490       else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7491         {
7492           error_at (loc, "enumerator value for %qE is not an integer constant",
7493                     name);
7494           value = 0;
7495         }
7496       else
7497         {
7498           if (TREE_CODE (value) != INTEGER_CST)
7499             {
7500               value = c_fully_fold (value, false, NULL);
7501               if (TREE_CODE (value) == INTEGER_CST)
7502                 pedwarn (loc, OPT_pedantic,
7503                          "enumerator value for %qE is not an integer "
7504                          "constant expression", name);
7505             }
7506           if (TREE_CODE (value) != INTEGER_CST)
7507             {
7508               error ("enumerator value for %qE is not an integer constant",
7509                      name);
7510               value = 0;
7511             }
7512           else
7513             {
7514               value = default_conversion (value);
7515               constant_expression_warning (value);
7516             }
7517         }
7518     }
7519
7520   /* Default based on previous value.  */
7521   /* It should no longer be possible to have NON_LVALUE_EXPR
7522      in the default.  */
7523   if (value == 0)
7524     {
7525       value = the_enum->enum_next_value;
7526       if (the_enum->enum_overflow)
7527         error_at (loc, "overflow in enumeration values");
7528     }
7529   /* Even though the underlying type of an enum is unspecified, the
7530      type of enumeration constants is explicitly defined as int
7531      (6.4.4.3/2 in the C99 Standard).  GCC allows any integer type as
7532      an extension.  */
7533   else if (!int_fits_type_p (value, integer_type_node))
7534     pedwarn (loc, OPT_pedantic,
7535              "ISO C restricts enumerator values to range of %<int%>");
7536
7537   /* The ISO C Standard mandates enumerators to have type int, even
7538      though the underlying type of an enum type is unspecified.
7539      However, GCC allows enumerators of any integer type as an
7540      extensions.  Here we convert any enumerators that fit in an int
7541      to type int, to avoid promotions to unsigned types when comparing
7542      integers with enumerators that fit in the int range.  When
7543      -pedantic is given, we would have already warned about those that
7544      don't fit. We have to do this here rather than in finish_enum
7545      because this value may be used to define more enumerators.  */
7546   if (int_fits_type_p (value, integer_type_node))
7547     value = convert (integer_type_node, value);
7548
7549   /* Set basis for default for next value.  */
7550   the_enum->enum_next_value
7551     = build_binary_op (EXPR_LOC_OR_HERE (value),
7552                        PLUS_EXPR, value, integer_one_node, 0);
7553   the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
7554
7555   /* Now create a declaration for the enum value name.  */
7556
7557   type = TREE_TYPE (value);
7558   type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
7559                                       TYPE_PRECISION (integer_type_node)),
7560                                  (TYPE_PRECISION (type)
7561                                   >= TYPE_PRECISION (integer_type_node)
7562                                   && TYPE_UNSIGNED (type)));
7563
7564   decl = build_decl (decl_loc, CONST_DECL, name, type);
7565   DECL_INITIAL (decl) = convert (type, value);
7566   pushdecl (decl);
7567
7568   return tree_cons (decl, value, NULL_TREE);
7569 }
7570
7571 \f
7572 /* Create the FUNCTION_DECL for a function definition.
7573    DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7574    the declaration; they describe the function's name and the type it returns,
7575    but twisted together in a fashion that parallels the syntax of C.
7576
7577    This function creates a binding context for the function body
7578    as well as setting up the FUNCTION_DECL in current_function_decl.
7579
7580    Returns 1 on success.  If the DECLARATOR is not suitable for a function
7581    (it defines a datum instead), we return 0, which tells
7582    yyparse to report a parse error.  */
7583
7584 int
7585 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
7586                 tree attributes)
7587 {
7588   tree decl1, old_decl;
7589   tree restype, resdecl;
7590   location_t loc;
7591
7592   current_function_returns_value = 0;  /* Assume, until we see it does.  */
7593   current_function_returns_null = 0;
7594   current_function_returns_abnormally = 0;
7595   warn_about_return_type = 0;
7596   c_switch_stack = NULL;
7597
7598   /* Indicate no valid break/continue context by setting these variables
7599      to some non-null, non-label value.  We'll notice and emit the proper
7600      error message in c_finish_bc_stmt.  */
7601   c_break_label = c_cont_label = size_zero_node;
7602
7603   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
7604                           &attributes, NULL, NULL, DEPRECATED_NORMAL);
7605
7606   /* If the declarator is not suitable for a function definition,
7607      cause a syntax error.  */
7608   if (decl1 == 0)
7609     return 0;
7610
7611   loc = DECL_SOURCE_LOCATION (decl1);
7612
7613   decl_attributes (&decl1, attributes, 0);
7614
7615   if (DECL_DECLARED_INLINE_P (decl1)
7616       && DECL_UNINLINABLE (decl1)
7617       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
7618     warning_at (loc, OPT_Wattributes,
7619                 "inline function %qD given attribute noinline",
7620                 decl1);
7621
7622   /* Handle gnu_inline attribute.  */
7623   if (declspecs->inline_p
7624       && !flag_gnu89_inline
7625       && TREE_CODE (decl1) == FUNCTION_DECL
7626       && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
7627           || current_function_decl))
7628     {
7629       if (declspecs->storage_class != csc_static)
7630         DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
7631     }
7632
7633   announce_function (decl1);
7634
7635   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
7636     {
7637       error_at (loc, "return type is an incomplete type");
7638       /* Make it return void instead.  */
7639       TREE_TYPE (decl1)
7640         = build_function_type (void_type_node,
7641                                TYPE_ARG_TYPES (TREE_TYPE (decl1)));
7642     }
7643
7644   if (warn_about_return_type)
7645     pedwarn_c99 (loc, flag_isoc99 ? 0
7646                  : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
7647                  "return type defaults to %<int%>");
7648
7649   /* Make the init_value nonzero so pushdecl knows this is not tentative.
7650      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
7651   DECL_INITIAL (decl1) = error_mark_node;
7652
7653   /* A nested function is not global.  */
7654   if (current_function_decl != 0)
7655     TREE_PUBLIC (decl1) = 0;
7656
7657   /* If this definition isn't a prototype and we had a prototype declaration
7658      before, copy the arg type info from that prototype.  */
7659   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
7660   if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
7661     old_decl = 0;
7662   current_function_prototype_locus = UNKNOWN_LOCATION;
7663   current_function_prototype_built_in = false;
7664   current_function_prototype_arg_types = NULL_TREE;
7665   if (!prototype_p (TREE_TYPE (decl1)))
7666     {
7667       if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
7668           && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7669                         TREE_TYPE (TREE_TYPE (old_decl))))
7670         {
7671           TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
7672                                               TREE_TYPE (decl1));
7673           current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
7674           current_function_prototype_built_in
7675             = C_DECL_BUILTIN_PROTOTYPE (old_decl);
7676           current_function_prototype_arg_types
7677             = TYPE_ARG_TYPES (TREE_TYPE (decl1));
7678         }
7679       if (TREE_PUBLIC (decl1))
7680         {
7681           /* If there is an external prototype declaration of this
7682              function, record its location but do not copy information
7683              to this decl.  This may be an invisible declaration
7684              (built-in or in a scope which has finished) or simply
7685              have more refined argument types than any declaration
7686              found above.  */
7687           struct c_binding *b;
7688           for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
7689             if (B_IN_SCOPE (b, external_scope))
7690               break;
7691           if (b)
7692             {
7693               tree ext_decl, ext_type;
7694               ext_decl = b->decl;
7695               ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
7696               if (TREE_CODE (ext_type) == FUNCTION_TYPE
7697                   && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7698                                 TREE_TYPE (ext_type)))
7699                 {
7700                   current_function_prototype_locus
7701                     = DECL_SOURCE_LOCATION (ext_decl);
7702                   current_function_prototype_built_in
7703                     = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
7704                   current_function_prototype_arg_types
7705                     = TYPE_ARG_TYPES (ext_type);
7706                 }
7707             }
7708         }
7709     }
7710
7711   /* Optionally warn of old-fashioned def with no previous prototype.  */
7712   if (warn_strict_prototypes
7713       && old_decl != error_mark_node
7714       && !prototype_p (TREE_TYPE (decl1))
7715       && C_DECL_ISNT_PROTOTYPE (old_decl))
7716     warning_at (loc, OPT_Wstrict_prototypes,
7717                 "function declaration isn%'t a prototype");
7718   /* Optionally warn of any global def with no previous prototype.  */
7719   else if (warn_missing_prototypes
7720            && old_decl != error_mark_node
7721            && TREE_PUBLIC (decl1)
7722            && !MAIN_NAME_P (DECL_NAME (decl1))
7723            && C_DECL_ISNT_PROTOTYPE (old_decl))
7724     warning_at (loc, OPT_Wmissing_prototypes,
7725                 "no previous prototype for %qD", decl1);
7726   /* Optionally warn of any def with no previous prototype
7727      if the function has already been used.  */
7728   else if (warn_missing_prototypes
7729            && old_decl != 0
7730            && old_decl != error_mark_node
7731            && TREE_USED (old_decl)
7732            && !prototype_p (TREE_TYPE (old_decl)))
7733     warning_at (loc, OPT_Wmissing_prototypes,
7734                 "%qD was used with no prototype before its definition", decl1);
7735   /* Optionally warn of any global def with no previous declaration.  */
7736   else if (warn_missing_declarations
7737            && TREE_PUBLIC (decl1)
7738            && old_decl == 0
7739            && !MAIN_NAME_P (DECL_NAME (decl1)))
7740     warning_at (loc, OPT_Wmissing_declarations,
7741                 "no previous declaration for %qD",
7742                 decl1);
7743   /* Optionally warn of any def with no previous declaration
7744      if the function has already been used.  */
7745   else if (warn_missing_declarations
7746            && old_decl != 0
7747            && old_decl != error_mark_node
7748            && TREE_USED (old_decl)
7749            && C_DECL_IMPLICIT (old_decl))
7750     warning_at (loc, OPT_Wmissing_declarations,
7751                 "%qD was used with no declaration before its definition", decl1);
7752
7753   /* This function exists in static storage.
7754      (This does not mean `static' in the C sense!)  */
7755   TREE_STATIC (decl1) = 1;
7756
7757   /* This is the earliest point at which we might know the assembler
7758      name of the function.  Thus, if it's set before this, die horribly.  */
7759   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
7760
7761   /* If #pragma weak was used, mark the decl weak now.  */
7762   if (current_scope == file_scope)
7763     maybe_apply_pragma_weak (decl1);
7764
7765   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
7766   if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
7767     {
7768       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
7769           != integer_type_node)
7770         pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
7771
7772       check_main_parameter_types (decl1);
7773
7774       if (!TREE_PUBLIC (decl1))
7775         pedwarn (loc, OPT_Wmain,
7776                  "%qD is normally a non-static function", decl1);
7777     }
7778
7779   /* Record the decl so that the function name is defined.
7780      If we already have a decl for this name, and it is a FUNCTION_DECL,
7781      use the old decl.  */
7782
7783   current_function_decl = pushdecl (decl1);
7784
7785   push_scope ();
7786   declare_parm_level ();
7787
7788   restype = TREE_TYPE (TREE_TYPE (current_function_decl));
7789   resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
7790   DECL_ARTIFICIAL (resdecl) = 1;
7791   DECL_IGNORED_P (resdecl) = 1;
7792   DECL_RESULT (current_function_decl) = resdecl;
7793
7794   start_fname_decls ();
7795
7796   return 1;
7797 }
7798 \f
7799 /* Subroutine of store_parm_decls which handles new-style function
7800    definitions (prototype format). The parms already have decls, so we
7801    need only record them as in effect and complain if any redundant
7802    old-style parm decls were written.  */
7803 static void
7804 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
7805 {
7806   tree decl;
7807   c_arg_tag *tag;
7808   unsigned ix;
7809
7810   if (current_scope->bindings)
7811     {
7812       error_at (DECL_SOURCE_LOCATION (fndecl),
7813                 "old-style parameter declarations in prototyped "
7814                 "function definition");
7815
7816       /* Get rid of the old-style declarations.  */
7817       pop_scope ();
7818       push_scope ();
7819     }
7820   /* Don't issue this warning for nested functions, and don't issue this
7821      warning if we got here because ARG_INFO_TYPES was error_mark_node
7822      (this happens when a function definition has just an ellipsis in
7823      its parameter list).  */
7824   else if (!in_system_header && !current_function_scope
7825            && arg_info->types != error_mark_node)
7826     warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
7827                 "traditional C rejects ISO C style function definitions");
7828
7829   /* Now make all the parameter declarations visible in the function body.
7830      We can bypass most of the grunt work of pushdecl.  */
7831   for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
7832     {
7833       DECL_CONTEXT (decl) = current_function_decl;
7834       if (DECL_NAME (decl))
7835         {
7836           bind (DECL_NAME (decl), decl, current_scope,
7837                 /*invisible=*/false, /*nested=*/false,
7838                 UNKNOWN_LOCATION);
7839           if (!TREE_USED (decl))
7840             warn_if_shadowing (decl);
7841         }
7842       else
7843         error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
7844     }
7845
7846   /* Record the parameter list in the function declaration.  */
7847   DECL_ARGUMENTS (fndecl) = arg_info->parms;
7848
7849   /* Now make all the ancillary declarations visible, likewise.  */
7850   for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
7851     {
7852       DECL_CONTEXT (decl) = current_function_decl;
7853       if (DECL_NAME (decl))
7854         bind (DECL_NAME (decl), decl, current_scope,
7855               /*invisible=*/false,
7856               /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
7857               UNKNOWN_LOCATION);
7858     }
7859
7860   /* And all the tag declarations.  */
7861   FOR_EACH_VEC_ELT_REVERSE (c_arg_tag, arg_info->tags, ix, tag)
7862     if (tag->id)
7863       bind (tag->id, tag->type, current_scope,
7864             /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7865 }
7866
7867 /* Subroutine of store_parm_decls which handles old-style function
7868    definitions (separate parameter list and declarations).  */
7869
7870 static void
7871 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
7872 {
7873   struct c_binding *b;
7874   tree parm, decl, last;
7875   tree parmids = arg_info->parms;
7876   struct pointer_set_t *seen_args = pointer_set_create ();
7877
7878   if (!in_system_header)
7879     warning_at (DECL_SOURCE_LOCATION (fndecl),
7880                 OPT_Wold_style_definition, "old-style function definition");
7881
7882   /* Match each formal parameter name with its declaration.  Save each
7883      decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
7884   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7885     {
7886       if (TREE_VALUE (parm) == 0)
7887         {
7888           error_at (DECL_SOURCE_LOCATION (fndecl),
7889                     "parameter name missing from parameter list");
7890           TREE_PURPOSE (parm) = 0;
7891           continue;
7892         }
7893
7894       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
7895       if (b && B_IN_CURRENT_SCOPE (b))
7896         {
7897           decl = b->decl;
7898           /* Skip erroneous parameters.  */
7899           if (decl == error_mark_node)
7900             continue;
7901           /* If we got something other than a PARM_DECL it is an error.  */
7902           if (TREE_CODE (decl) != PARM_DECL)
7903             error_at (DECL_SOURCE_LOCATION (decl),
7904                       "%qD declared as a non-parameter", decl);
7905           /* If the declaration is already marked, we have a duplicate
7906              name.  Complain and ignore the duplicate.  */
7907           else if (pointer_set_contains (seen_args, decl))
7908             {
7909               error_at (DECL_SOURCE_LOCATION (decl),
7910                         "multiple parameters named %qD", decl);
7911               TREE_PURPOSE (parm) = 0;
7912               continue;
7913             }
7914           /* If the declaration says "void", complain and turn it into
7915              an int.  */
7916           else if (VOID_TYPE_P (TREE_TYPE (decl)))
7917             {
7918               error_at (DECL_SOURCE_LOCATION (decl),
7919                         "parameter %qD declared with void type", decl);
7920               TREE_TYPE (decl) = integer_type_node;
7921               DECL_ARG_TYPE (decl) = integer_type_node;
7922               layout_decl (decl, 0);
7923             }
7924           warn_if_shadowing (decl);
7925         }
7926       /* If no declaration found, default to int.  */
7927       else
7928         {
7929           /* FIXME diagnostics: This should be the location of the argument,
7930              not the FNDECL.  E.g., for an old-style declaration
7931
7932                int f10(v) { blah; }
7933
7934              We should use the location of the V, not the F10.
7935              Unfortunately, the V is an IDENTIFIER_NODE which has no
7936              location.  In the future we need locations for c_arg_info
7937              entries.
7938
7939              See gcc.dg/Wshadow-3.c for an example of this problem. */
7940           decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
7941                              PARM_DECL, TREE_VALUE (parm), integer_type_node);
7942           DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
7943           pushdecl (decl);
7944           warn_if_shadowing (decl);
7945
7946           if (flag_isoc99)
7947             pedwarn (DECL_SOURCE_LOCATION (decl),
7948                      0, "type of %qD defaults to %<int%>", decl);
7949           else
7950             warning_at (DECL_SOURCE_LOCATION (decl),
7951                         OPT_Wmissing_parameter_type,
7952                         "type of %qD defaults to %<int%>", decl);
7953         }
7954
7955       TREE_PURPOSE (parm) = decl;
7956       pointer_set_insert (seen_args, decl);
7957     }
7958
7959   /* Now examine the parms chain for incomplete declarations
7960      and declarations with no corresponding names.  */
7961
7962   for (b = current_scope->bindings; b; b = b->prev)
7963     {
7964       parm = b->decl;
7965       if (TREE_CODE (parm) != PARM_DECL)
7966         continue;
7967
7968       if (TREE_TYPE (parm) != error_mark_node
7969           && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
7970         {
7971           error_at (DECL_SOURCE_LOCATION (parm),
7972                     "parameter %qD has incomplete type", parm);
7973           TREE_TYPE (parm) = error_mark_node;
7974         }
7975
7976       if (!pointer_set_contains (seen_args, parm))
7977         {
7978           error_at (DECL_SOURCE_LOCATION (parm),
7979                     "declaration for parameter %qD but no such parameter",
7980                     parm);
7981
7982           /* Pretend the parameter was not missing.
7983              This gets us to a standard state and minimizes
7984              further error messages.  */
7985           parmids = chainon (parmids, tree_cons (parm, 0, 0));
7986         }
7987     }
7988
7989   /* Chain the declarations together in the order of the list of
7990      names.  Store that chain in the function decl, replacing the
7991      list of names.  Update the current scope to match.  */
7992   DECL_ARGUMENTS (fndecl) = 0;
7993
7994   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7995     if (TREE_PURPOSE (parm))
7996       break;
7997   if (parm && TREE_PURPOSE (parm))
7998     {
7999       last = TREE_PURPOSE (parm);
8000       DECL_ARGUMENTS (fndecl) = last;
8001
8002       for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
8003         if (TREE_PURPOSE (parm))
8004           {
8005             DECL_CHAIN (last) = TREE_PURPOSE (parm);
8006             last = TREE_PURPOSE (parm);
8007           }
8008       DECL_CHAIN (last) = 0;
8009     }
8010
8011   pointer_set_destroy (seen_args);
8012
8013   /* If there was a previous prototype,
8014      set the DECL_ARG_TYPE of each argument according to
8015      the type previously specified, and report any mismatches.  */
8016
8017   if (current_function_prototype_arg_types)
8018     {
8019       tree type;
8020       for (parm = DECL_ARGUMENTS (fndecl),
8021              type = current_function_prototype_arg_types;
8022            parm || (type && TREE_VALUE (type) != error_mark_node
8023                    && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
8024            parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
8025         {
8026           if (parm == 0 || type == 0
8027               || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
8028             {
8029               if (current_function_prototype_built_in)
8030                 warning_at (DECL_SOURCE_LOCATION (fndecl),
8031                             0, "number of arguments doesn%'t match "
8032                             "built-in prototype");
8033               else
8034                 {
8035                   /* FIXME diagnostics: This should be the location of
8036                      FNDECL, but there is bug when a prototype is
8037                      declared inside function context, but defined
8038                      outside of it (e.g., gcc.dg/pr15698-2.c).  In
8039                      which case FNDECL gets the location of the
8040                      prototype, not the definition.  */
8041                   error_at (input_location,
8042                             "number of arguments doesn%'t match prototype");
8043
8044                   error_at (current_function_prototype_locus,
8045                             "prototype declaration");
8046                 }
8047               break;
8048             }
8049           /* Type for passing arg must be consistent with that
8050              declared for the arg.  ISO C says we take the unqualified
8051              type for parameters declared with qualified type.  */
8052           if (TREE_TYPE (parm) != error_mark_node
8053               && TREE_TYPE (type) != error_mark_node
8054               && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8055                              TYPE_MAIN_VARIANT (TREE_VALUE (type))))
8056             {
8057               if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
8058                   == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
8059                 {
8060                   /* Adjust argument to match prototype.  E.g. a previous
8061                      `int foo(float);' prototype causes
8062                      `int foo(x) float x; {...}' to be treated like
8063                      `int foo(float x) {...}'.  This is particularly
8064                      useful for argument types like uid_t.  */
8065                   DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
8066
8067                   if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
8068                       && INTEGRAL_TYPE_P (TREE_TYPE (parm))
8069                       && TYPE_PRECISION (TREE_TYPE (parm))
8070                       < TYPE_PRECISION (integer_type_node))
8071                     DECL_ARG_TYPE (parm) = integer_type_node;
8072
8073                   /* ??? Is it possible to get here with a
8074                      built-in prototype or will it always have
8075                      been diagnosed as conflicting with an
8076                      old-style definition and discarded?  */
8077                   if (current_function_prototype_built_in)
8078                     warning_at (DECL_SOURCE_LOCATION (parm),
8079                                 OPT_pedantic, "promoted argument %qD "
8080                                 "doesn%'t match built-in prototype", parm);
8081                   else
8082                     {
8083                       pedwarn (DECL_SOURCE_LOCATION (parm),
8084                                OPT_pedantic, "promoted argument %qD "
8085                                "doesn%'t match prototype", parm);
8086                       pedwarn (current_function_prototype_locus, OPT_pedantic,
8087                                "prototype declaration");
8088                     }
8089                 }
8090               else
8091                 {
8092                   if (current_function_prototype_built_in)
8093                     warning_at (DECL_SOURCE_LOCATION (parm),
8094                                 0, "argument %qD doesn%'t match "
8095                                 "built-in prototype", parm);
8096                   else
8097                     {
8098                       error_at (DECL_SOURCE_LOCATION (parm),
8099                                 "argument %qD doesn%'t match prototype", parm);
8100                       error_at (current_function_prototype_locus,
8101                                 "prototype declaration");
8102                     }
8103                 }
8104             }
8105         }
8106       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
8107     }
8108
8109   /* Otherwise, create a prototype that would match.  */
8110
8111   else
8112     {
8113       tree actual = 0, last = 0, type;
8114
8115       for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
8116         {
8117           type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
8118           if (last)
8119             TREE_CHAIN (last) = type;
8120           else
8121             actual = type;
8122           last = type;
8123         }
8124       type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
8125       if (last)
8126         TREE_CHAIN (last) = type;
8127       else
8128         actual = type;
8129
8130       /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
8131          of the type of this function, but we need to avoid having this
8132          affect the types of other similarly-typed functions, so we must
8133          first force the generation of an identical (but separate) type
8134          node for the relevant function type.  The new node we create
8135          will be a variant of the main variant of the original function
8136          type.  */
8137
8138       TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
8139
8140       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
8141     }
8142 }
8143
8144 /* Store parameter declarations passed in ARG_INFO into the current
8145    function declaration.  */
8146
8147 void
8148 store_parm_decls_from (struct c_arg_info *arg_info)
8149 {
8150   current_function_arg_info = arg_info;
8151   store_parm_decls ();
8152 }
8153
8154 /* Store the parameter declarations into the current function declaration.
8155    This is called after parsing the parameter declarations, before
8156    digesting the body of the function.
8157
8158    For an old-style definition, construct a prototype out of the old-style
8159    parameter declarations and inject it into the function's type.  */
8160
8161 void
8162 store_parm_decls (void)
8163 {
8164   tree fndecl = current_function_decl;
8165   bool proto;
8166
8167   /* The argument information block for FNDECL.  */
8168   struct c_arg_info *arg_info = current_function_arg_info;
8169   current_function_arg_info = 0;
8170
8171   /* True if this definition is written with a prototype.  Note:
8172      despite C99 6.7.5.3p14, we can *not* treat an empty argument
8173      list in a function definition as equivalent to (void) -- an
8174      empty argument list specifies the function has no parameters,
8175      but only (void) sets up a prototype for future calls.  */
8176   proto = arg_info->types != 0;
8177
8178   if (proto)
8179     store_parm_decls_newstyle (fndecl, arg_info);
8180   else
8181     store_parm_decls_oldstyle (fndecl, arg_info);
8182
8183   /* The next call to push_scope will be a function body.  */
8184
8185   next_is_function_body = true;
8186
8187   /* Write a record describing this function definition to the prototypes
8188      file (if requested).  */
8189
8190   gen_aux_info_record (fndecl, 1, 0, proto);
8191
8192   /* Initialize the RTL code for the function.  */
8193   allocate_struct_function (fndecl, false);
8194
8195   /* Begin the statement tree for this function.  */
8196   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
8197
8198   /* ??? Insert the contents of the pending sizes list into the function
8199      to be evaluated.  The only reason left to have this is
8200         void foo(int n, int array[n++])
8201      because we throw away the array type in favor of a pointer type, and
8202      thus won't naturally see the SAVE_EXPR containing the increment.  All
8203      other pending sizes would be handled by gimplify_parameters.  */
8204   {
8205     VEC(tree,gc) *pending_sizes = get_pending_sizes ();
8206     tree t;
8207     int i;
8208
8209     FOR_EACH_VEC_ELT (tree, pending_sizes, i, t)
8210       add_stmt (t);
8211   }
8212
8213   /* Even though we're inside a function body, we still don't want to
8214      call expand_expr to calculate the size of a variable-sized array.
8215      We haven't necessarily assigned RTL to all variables yet, so it's
8216      not safe to try to expand expressions involving them.  */
8217   cfun->dont_save_pending_sizes_p = 1;
8218 }
8219 \f
8220
8221 /* Finish up a function declaration and compile that function
8222    all the way to assembler language output.  Then free the storage
8223    for the function definition.
8224
8225    This is called after parsing the body of the function definition.  */
8226
8227 void
8228 finish_function (void)
8229 {
8230   tree fndecl = current_function_decl;
8231   
8232   if (c_dialect_objc ())
8233     objc_finish_function ();
8234
8235   if (TREE_CODE (fndecl) == FUNCTION_DECL
8236       && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
8237     {
8238       tree args = DECL_ARGUMENTS (fndecl);
8239       for (; args; args = DECL_CHAIN (args))
8240         {
8241           tree type = TREE_TYPE (args);
8242           if (INTEGRAL_TYPE_P (type)
8243               && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
8244             DECL_ARG_TYPE (args) = integer_type_node;
8245         }
8246     }
8247
8248   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
8249     BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
8250
8251   /* Must mark the RESULT_DECL as being in this function.  */
8252
8253   if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
8254     DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8255
8256   if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
8257       && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
8258       == integer_type_node && flag_isoc99)
8259     {
8260       /* Hack.  We don't want the middle-end to warn that this return
8261          is unreachable, so we mark its location as special.  Using
8262          UNKNOWN_LOCATION has the problem that it gets clobbered in
8263          annotate_one_with_locus.  A cleaner solution might be to
8264          ensure ! should_carry_locus_p (stmt), but that needs a flag.
8265       */
8266       c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
8267     }
8268
8269   /* Tie off the statement tree for this function.  */
8270   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
8271
8272   finish_fname_decls ();
8273
8274   /* Complain if there's just no return statement.  */
8275   if (warn_return_type
8276       && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
8277       && !current_function_returns_value && !current_function_returns_null
8278       /* Don't complain if we are no-return.  */
8279       && !current_function_returns_abnormally
8280       /* Don't complain if we are declared noreturn.  */
8281       && !TREE_THIS_VOLATILE (fndecl)
8282       /* Don't warn for main().  */
8283       && !MAIN_NAME_P (DECL_NAME (fndecl))
8284       /* Or if they didn't actually specify a return type.  */
8285       && !C_FUNCTION_IMPLICIT_INT (fndecl)
8286       /* Normally, with -Wreturn-type, flow will complain, but we might
8287          optimize out static functions.  */
8288       && !TREE_PUBLIC (fndecl))
8289     {
8290       warning (OPT_Wreturn_type,
8291                "no return statement in function returning non-void");
8292       TREE_NO_WARNING (fndecl) = 1;
8293     }
8294
8295   /* Complain about parameters that are only set, but never otherwise used.  */
8296   if (warn_unused_but_set_parameter)
8297     {
8298       tree decl;
8299
8300       for (decl = DECL_ARGUMENTS (fndecl);
8301            decl;
8302            decl = DECL_CHAIN (decl))
8303         if (TREE_USED (decl)
8304             && TREE_CODE (decl) == PARM_DECL
8305             && !DECL_READ_P (decl)
8306             && DECL_NAME (decl)
8307             && !DECL_ARTIFICIAL (decl)
8308             && !TREE_NO_WARNING (decl))
8309           warning_at (DECL_SOURCE_LOCATION (decl),
8310                       OPT_Wunused_but_set_parameter,
8311                       "parameter %qD set but not used", decl);
8312     }
8313
8314   /* Store the end of the function, so that we get good line number
8315      info for the epilogue.  */
8316   cfun->function_end_locus = input_location;
8317
8318   /* Finalize the ELF visibility for the function.  */
8319   c_determine_visibility (fndecl);
8320
8321   /* For GNU C extern inline functions disregard inline limits.  */
8322   if (DECL_EXTERNAL (fndecl)
8323       && DECL_DECLARED_INLINE_P (fndecl))
8324     DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
8325
8326   /* Genericize before inlining.  Delay genericizing nested functions
8327      until their parent function is genericized.  Since finalizing
8328      requires GENERIC, delay that as well.  */
8329
8330   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
8331       && !undef_nested_function)
8332     {
8333       if (!decl_function_context (fndecl))
8334         {
8335           invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
8336           c_genericize (fndecl);
8337
8338           /* ??? Objc emits functions after finalizing the compilation unit.
8339              This should be cleaned up later and this conditional removed.  */
8340           if (cgraph_global_info_ready)
8341             {
8342               cgraph_add_new_function (fndecl, false);
8343               return;
8344             }
8345           cgraph_finalize_function (fndecl, false);
8346         }
8347       else
8348         {
8349           /* Register this function with cgraph just far enough to get it
8350             added to our parent's nested function list.  Handy, since the
8351             C front end doesn't have such a list.  */
8352           (void) cgraph_get_create_node (fndecl);
8353         }
8354     }
8355
8356   if (!decl_function_context (fndecl))
8357     undef_nested_function = false;
8358
8359   /* We're leaving the context of this function, so zap cfun.
8360      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
8361      tree_rest_of_compilation.  */
8362   set_cfun (NULL);
8363   current_function_decl = NULL;
8364 }
8365 \f
8366 /* Check the declarations given in a for-loop for satisfying the C99
8367    constraints.  If exactly one such decl is found, return it.  LOC is
8368    the location of the opening parenthesis of the for loop.  The last
8369    parameter allows you to control the "for loop initial declarations
8370    are only allowed in C99 mode".  Normally, you should pass
8371    flag_isoc99 as that parameter.  But in some cases (Objective-C
8372    foreach loop, for example) we want to run the checks in this
8373    function even if not in C99 mode, so we allow the caller to turn
8374    off the error about not being in C99 mode.
8375 */
8376
8377 tree
8378 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
8379 {
8380   struct c_binding *b;
8381   tree one_decl = NULL_TREE;
8382   int n_decls = 0;
8383
8384   if (!turn_off_iso_c99_error)
8385     {
8386       static bool hint = true;
8387       /* If we get here, declarations have been used in a for loop without
8388          the C99 for loop scope.  This doesn't make much sense, so don't
8389          allow it.  */
8390       error_at (loc, "%<for%> loop initial declarations "
8391                 "are only allowed in C99 mode");
8392       if (hint)
8393         {
8394           inform (loc,
8395                   "use option -std=c99 or -std=gnu99 to compile your code");
8396           hint = false;
8397         }
8398       return NULL_TREE;
8399     }
8400   /* C99 subclause 6.8.5 paragraph 3:
8401
8402        [#3]  The  declaration  part  of  a for statement shall only
8403        declare identifiers for objects having storage class auto or
8404        register.
8405
8406      It isn't clear whether, in this sentence, "identifiers" binds to
8407      "shall only declare" or to "objects" - that is, whether all identifiers
8408      declared must be identifiers for objects, or whether the restriction
8409      only applies to those that are.  (A question on this in comp.std.c
8410      in November 2000 received no answer.)  We implement the strictest
8411      interpretation, to avoid creating an extension which later causes
8412      problems.  */
8413
8414   for (b = current_scope->bindings; b; b = b->prev)
8415     {
8416       tree id = b->id;
8417       tree decl = b->decl;
8418
8419       if (!id)
8420         continue;
8421
8422       switch (TREE_CODE (decl))
8423         {
8424         case VAR_DECL:
8425           {
8426             location_t decl_loc = DECL_SOURCE_LOCATION (decl);
8427             if (TREE_STATIC (decl))
8428               error_at (decl_loc,
8429                         "declaration of static variable %qD in %<for%> loop "
8430                         "initial declaration", decl);
8431             else if (DECL_EXTERNAL (decl))
8432               error_at (decl_loc,
8433                         "declaration of %<extern%> variable %qD in %<for%> loop "
8434                         "initial declaration", decl);
8435           }
8436           break;
8437
8438         case RECORD_TYPE:
8439           error_at (loc,
8440                     "%<struct %E%> declared in %<for%> loop initial "
8441                     "declaration", id);
8442           break;
8443         case UNION_TYPE:
8444           error_at (loc,
8445                     "%<union %E%> declared in %<for%> loop initial declaration",
8446                     id);
8447           break;
8448         case ENUMERAL_TYPE:
8449           error_at (loc, "%<enum %E%> declared in %<for%> loop "
8450                     "initial declaration", id);
8451           break;
8452         default:
8453           error_at (loc, "declaration of non-variable "
8454                     "%qD in %<for%> loop initial declaration", decl);
8455         }
8456
8457       n_decls++;
8458       one_decl = decl;
8459     }
8460
8461   return n_decls == 1 ? one_decl : NULL_TREE;
8462 }
8463 \f
8464 /* Save and reinitialize the variables
8465    used during compilation of a C function.  */
8466
8467 void
8468 c_push_function_context (void)
8469 {
8470   struct language_function *p;
8471   p = ggc_alloc_language_function ();
8472   cfun->language = p;
8473
8474   p->base.x_stmt_tree = c_stmt_tree;
8475   p->x_break_label = c_break_label;
8476   p->x_cont_label = c_cont_label;
8477   p->x_switch_stack = c_switch_stack;
8478   p->arg_info = current_function_arg_info;
8479   p->returns_value = current_function_returns_value;
8480   p->returns_null = current_function_returns_null;
8481   p->returns_abnormally = current_function_returns_abnormally;
8482   p->warn_about_return_type = warn_about_return_type;
8483
8484   push_function_context ();
8485 }
8486
8487 /* Restore the variables used during compilation of a C function.  */
8488
8489 void
8490 c_pop_function_context (void)
8491 {
8492   struct language_function *p;
8493
8494   pop_function_context ();
8495   p = cfun->language;
8496   cfun->language = NULL;
8497
8498   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
8499       && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
8500     {
8501       /* Stop pointing to the local nodes about to be freed.  */
8502       /* But DECL_INITIAL must remain nonzero so we know this
8503          was an actual function definition.  */
8504       DECL_INITIAL (current_function_decl) = error_mark_node;
8505       DECL_ARGUMENTS (current_function_decl) = 0;
8506     }
8507
8508   c_stmt_tree = p->base.x_stmt_tree;
8509   c_break_label = p->x_break_label;
8510   c_cont_label = p->x_cont_label;
8511   c_switch_stack = p->x_switch_stack;
8512   current_function_arg_info = p->arg_info;
8513   current_function_returns_value = p->returns_value;
8514   current_function_returns_null = p->returns_null;
8515   current_function_returns_abnormally = p->returns_abnormally;
8516   warn_about_return_type = p->warn_about_return_type;
8517 }
8518
8519 /* The functions below are required for functionality of doing
8520    function at once processing in the C front end. Currently these
8521    functions are not called from anywhere in the C front end, but as
8522    these changes continue, that will change.  */
8523
8524 /* Returns the stmt_tree (if any) to which statements are currently
8525    being added.  If there is no active statement-tree, NULL is
8526    returned.  */
8527
8528 stmt_tree
8529 current_stmt_tree (void)
8530 {
8531   return &c_stmt_tree;
8532 }
8533
8534 /* Return the global value of T as a symbol.  */
8535
8536 tree
8537 identifier_global_value (tree t)
8538 {
8539   struct c_binding *b;
8540
8541   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
8542     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
8543       return b->decl;
8544
8545   return 0;
8546 }
8547
8548 /* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
8549    otherwise the name is found in ridpointers from RID_INDEX.  */
8550
8551 void
8552 record_builtin_type (enum rid rid_index, const char *name, tree type)
8553 {
8554   tree id, decl;
8555   if (name == 0)
8556     id = ridpointers[(int) rid_index];
8557   else
8558     id = get_identifier (name);
8559   decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
8560   pushdecl (decl);
8561   if (debug_hooks->type_decl)
8562     debug_hooks->type_decl (decl, false);
8563 }
8564
8565 /* Build the void_list_node (void_type_node having been created).  */
8566 tree
8567 build_void_list_node (void)
8568 {
8569   tree t = build_tree_list (NULL_TREE, void_type_node);
8570   return t;
8571 }
8572
8573 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
8574
8575 struct c_parm *
8576 build_c_parm (struct c_declspecs *specs, tree attrs,
8577               struct c_declarator *declarator)
8578 {
8579   struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
8580   ret->specs = specs;
8581   ret->attrs = attrs;
8582   ret->declarator = declarator;
8583   return ret;
8584 }
8585
8586 /* Return a declarator with nested attributes.  TARGET is the inner
8587    declarator to which these attributes apply.  ATTRS are the
8588    attributes.  */
8589
8590 struct c_declarator *
8591 build_attrs_declarator (tree attrs, struct c_declarator *target)
8592 {
8593   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8594   ret->kind = cdk_attrs;
8595   ret->declarator = target;
8596   ret->u.attrs = attrs;
8597   return ret;
8598 }
8599
8600 /* Return a declarator for a function with arguments specified by ARGS
8601    and return type specified by TARGET.  */
8602
8603 struct c_declarator *
8604 build_function_declarator (struct c_arg_info *args,
8605                            struct c_declarator *target)
8606 {
8607   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8608   ret->kind = cdk_function;
8609   ret->declarator = target;
8610   ret->u.arg_info = args;
8611   return ret;
8612 }
8613
8614 /* Return a declarator for the identifier IDENT (which may be
8615    NULL_TREE for an abstract declarator).  */
8616
8617 struct c_declarator *
8618 build_id_declarator (tree ident)
8619 {
8620   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8621   ret->kind = cdk_id;
8622   ret->declarator = 0;
8623   ret->u.id = ident;
8624   /* Default value - may get reset to a more precise location. */
8625   ret->id_loc = input_location;
8626   return ret;
8627 }
8628
8629 /* Return something to represent absolute declarators containing a *.
8630    TARGET is the absolute declarator that the * contains.
8631    TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
8632    to apply to the pointer type.  */
8633
8634 struct c_declarator *
8635 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
8636                          struct c_declarator *target)
8637 {
8638   tree attrs;
8639   int quals = 0;
8640   struct c_declarator *itarget = target;
8641   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8642   if (type_quals_attrs)
8643     {
8644       attrs = type_quals_attrs->attrs;
8645       quals = quals_from_declspecs (type_quals_attrs);
8646       if (attrs != NULL_TREE)
8647         itarget = build_attrs_declarator (attrs, target);
8648     }
8649   ret->kind = cdk_pointer;
8650   ret->declarator = itarget;
8651   ret->u.pointer_quals = quals;
8652   return ret;
8653 }
8654
8655 /* Return a pointer to a structure for an empty list of declaration
8656    specifiers.  */
8657
8658 struct c_declspecs *
8659 build_null_declspecs (void)
8660 {
8661   struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
8662   ret->type = 0;
8663   ret->expr = 0;
8664   ret->decl_attr = 0;
8665   ret->attrs = 0;
8666   ret->typespec_word = cts_none;
8667   ret->storage_class = csc_none;
8668   ret->expr_const_operands = true;
8669   ret->declspecs_seen_p = false;
8670   ret->typespec_kind = ctsk_none;
8671   ret->non_sc_seen_p = false;
8672   ret->typedef_p = false;
8673   ret->explicit_signed_p = false;
8674   ret->deprecated_p = false;
8675   ret->default_int_p = false;
8676   ret->long_p = false;
8677   ret->long_long_p = false;
8678   ret->short_p = false;
8679   ret->signed_p = false;
8680   ret->unsigned_p = false;
8681   ret->complex_p = false;
8682   ret->inline_p = false;
8683   ret->thread_p = false;
8684   ret->const_p = false;
8685   ret->volatile_p = false;
8686   ret->restrict_p = false;
8687   ret->saturating_p = false;
8688   ret->address_space = ADDR_SPACE_GENERIC;
8689   return ret;
8690 }
8691
8692 /* Add the address space ADDRSPACE to the declaration specifiers
8693    SPECS, returning SPECS.  */
8694
8695 struct c_declspecs *
8696 declspecs_add_addrspace (struct c_declspecs *specs, addr_space_t as)
8697 {
8698   specs->non_sc_seen_p = true;
8699   specs->declspecs_seen_p = true;
8700
8701   if (!ADDR_SPACE_GENERIC_P (specs->address_space)
8702       && specs->address_space != as)
8703     error ("incompatible address space qualifiers %qs and %qs",
8704            c_addr_space_name (as),
8705            c_addr_space_name (specs->address_space));
8706   else
8707     specs->address_space = as;
8708   return specs;
8709 }
8710
8711 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
8712    returning SPECS.  */
8713
8714 struct c_declspecs *
8715 declspecs_add_qual (struct c_declspecs *specs, tree qual)
8716 {
8717   enum rid i;
8718   bool dupe = false;
8719   specs->non_sc_seen_p = true;
8720   specs->declspecs_seen_p = true;
8721   gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
8722               && C_IS_RESERVED_WORD (qual));
8723   i = C_RID_CODE (qual);
8724   switch (i)
8725     {
8726     case RID_CONST:
8727       dupe = specs->const_p;
8728       specs->const_p = true;
8729       break;
8730     case RID_VOLATILE:
8731       dupe = specs->volatile_p;
8732       specs->volatile_p = true;
8733       break;
8734     case RID_RESTRICT:
8735       dupe = specs->restrict_p;
8736       specs->restrict_p = true;
8737       break;
8738     default:
8739       gcc_unreachable ();
8740     }
8741   if (dupe && !flag_isoc99)
8742     pedwarn (input_location, OPT_pedantic, "duplicate %qE", qual);
8743   return specs;
8744 }
8745
8746 /* Add the type specifier TYPE to the declaration specifiers SPECS,
8747    returning SPECS.  */
8748
8749 struct c_declspecs *
8750 declspecs_add_type (location_t loc, struct c_declspecs *specs,
8751                     struct c_typespec spec)
8752 {
8753   tree type = spec.spec;
8754   specs->non_sc_seen_p = true;
8755   specs->declspecs_seen_p = true;
8756   specs->typespec_kind = spec.kind;
8757   if (TREE_DEPRECATED (type))
8758     specs->deprecated_p = true;
8759
8760   /* Handle type specifier keywords.  */
8761   if (TREE_CODE (type) == IDENTIFIER_NODE
8762       && C_IS_RESERVED_WORD (type)
8763       && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
8764     {
8765       enum rid i = C_RID_CODE (type);
8766       if (specs->type)
8767         {
8768           error_at (loc, "two or more data types in declaration specifiers");
8769           return specs;
8770         }
8771       if ((int) i <= (int) RID_LAST_MODIFIER)
8772         {
8773           /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat".  */
8774           bool dupe = false;
8775           switch (i)
8776             {
8777             case RID_LONG:
8778               if (specs->long_long_p)
8779                 {
8780                   error_at (loc, "%<long long long%> is too long for GCC");
8781                   break;
8782                 }
8783               if (specs->long_p)
8784                 {
8785                   if (specs->typespec_word == cts_double)
8786                     {
8787                       error_at (loc,
8788                                 ("both %<long long%> and %<double%> in "
8789                                  "declaration specifiers"));
8790                       break;
8791                     }
8792                   pedwarn_c90 (loc, OPT_Wlong_long,
8793                                "ISO C90 does not support %<long long%>");
8794                   specs->long_long_p = 1;
8795                   break;
8796                 }
8797               if (specs->short_p)
8798                 error_at (loc,
8799                           ("both %<long%> and %<short%> in "
8800                            "declaration specifiers"));
8801               else if (specs->typespec_word == cts_void)
8802                 error_at (loc,
8803                           ("both %<long%> and %<void%> in "
8804                            "declaration specifiers"));
8805               else if (specs->typespec_word == cts_int128)
8806                   error_at (loc,
8807                             ("both %<long%> and %<__int128%> in "
8808                              "declaration specifiers"));
8809               else if (specs->typespec_word == cts_bool)
8810                 error_at (loc,
8811                           ("both %<long%> and %<_Bool%> in "
8812                            "declaration specifiers"));
8813               else if (specs->typespec_word == cts_char)
8814                 error_at (loc,
8815                           ("both %<long%> and %<char%> in "
8816                            "declaration specifiers"));
8817               else if (specs->typespec_word == cts_float)
8818                 error_at (loc,
8819                           ("both %<long%> and %<float%> in "
8820                            "declaration specifiers"));
8821               else if (specs->typespec_word == cts_dfloat32)
8822                 error_at (loc,
8823                           ("both %<long%> and %<_Decimal32%> in "
8824                            "declaration specifiers"));
8825               else if (specs->typespec_word == cts_dfloat64)
8826                 error_at (loc,
8827                           ("both %<long%> and %<_Decimal64%> in "
8828                            "declaration specifiers"));
8829               else if (specs->typespec_word == cts_dfloat128)
8830                 error_at (loc,
8831                           ("both %<long%> and %<_Decimal128%> in "
8832                            "declaration specifiers"));
8833               else
8834                 specs->long_p = true;
8835               break;
8836             case RID_SHORT:
8837               dupe = specs->short_p;
8838               if (specs->long_p)
8839                 error_at (loc,
8840                           ("both %<long%> and %<short%> in "
8841                            "declaration specifiers"));
8842               else if (specs->typespec_word == cts_void)
8843                 error_at (loc,
8844                           ("both %<short%> and %<void%> in "
8845                            "declaration specifiers"));
8846               else if (specs->typespec_word == cts_int128)
8847                 error_at (loc,
8848                           ("both %<short%> and %<__int128%> in "
8849                            "declaration specifiers"));
8850               else if (specs->typespec_word == cts_bool)
8851                 error_at (loc,
8852                           ("both %<short%> and %<_Bool%> in "
8853                            "declaration specifiers"));
8854               else if (specs->typespec_word == cts_char)
8855                 error_at (loc,
8856                           ("both %<short%> and %<char%> in "
8857                            "declaration specifiers"));
8858               else if (specs->typespec_word == cts_float)
8859                 error_at (loc,
8860                           ("both %<short%> and %<float%> in "
8861                            "declaration specifiers"));
8862               else if (specs->typespec_word == cts_double)
8863                 error_at (loc,
8864                           ("both %<short%> and %<double%> in "
8865                            "declaration specifiers"));
8866               else if (specs->typespec_word == cts_dfloat32)
8867                 error_at (loc,
8868                           ("both %<short%> and %<_Decimal32%> in "
8869                            "declaration specifiers"));
8870               else if (specs->typespec_word == cts_dfloat64)
8871                 error_at (loc,
8872                           ("both %<short%> and %<_Decimal64%> in "
8873                            "declaration specifiers"));
8874               else if (specs->typespec_word == cts_dfloat128)
8875                 error_at (loc,
8876                           ("both %<short%> and %<_Decimal128%> in "
8877                            "declaration specifiers"));
8878               else
8879                 specs->short_p = true;
8880               break;
8881             case RID_SIGNED:
8882               dupe = specs->signed_p;
8883               if (specs->unsigned_p)
8884                 error_at (loc,
8885                           ("both %<signed%> and %<unsigned%> in "
8886                            "declaration specifiers"));
8887               else if (specs->typespec_word == cts_void)
8888                 error_at (loc,
8889                           ("both %<signed%> and %<void%> in "
8890                            "declaration specifiers"));
8891               else if (specs->typespec_word == cts_bool)
8892                 error_at (loc,
8893                           ("both %<signed%> and %<_Bool%> in "
8894                            "declaration specifiers"));
8895               else if (specs->typespec_word == cts_float)
8896                 error_at (loc,
8897                           ("both %<signed%> and %<float%> in "
8898                            "declaration specifiers"));
8899               else if (specs->typespec_word == cts_double)
8900                 error_at (loc,
8901                           ("both %<signed%> and %<double%> in "
8902                            "declaration specifiers"));
8903               else if (specs->typespec_word == cts_dfloat32)
8904                 error_at (loc,
8905                           ("both %<signed%> and %<_Decimal32%> in "
8906                            "declaration specifiers"));
8907               else if (specs->typespec_word == cts_dfloat64)
8908                 error_at (loc,
8909                           ("both %<signed%> and %<_Decimal64%> in "
8910                            "declaration specifiers"));
8911               else if (specs->typespec_word == cts_dfloat128)
8912                 error_at (loc,
8913                           ("both %<signed%> and %<_Decimal128%> in "
8914                            "declaration specifiers"));
8915               else
8916                 specs->signed_p = true;
8917               break;
8918             case RID_UNSIGNED:
8919               dupe = specs->unsigned_p;
8920               if (specs->signed_p)
8921                 error_at (loc,
8922                           ("both %<signed%> and %<unsigned%> in "
8923                            "declaration specifiers"));
8924               else if (specs->typespec_word == cts_void)
8925                 error_at (loc,
8926                           ("both %<unsigned%> and %<void%> in "
8927                            "declaration specifiers"));
8928               else if (specs->typespec_word == cts_bool)
8929                 error_at (loc,
8930                           ("both %<unsigned%> and %<_Bool%> in "
8931                            "declaration specifiers"));
8932               else if (specs->typespec_word == cts_float)
8933                 error_at (loc,
8934                           ("both %<unsigned%> and %<float%> in "
8935                            "declaration specifiers"));
8936               else if (specs->typespec_word == cts_double)
8937                 error_at (loc,
8938                           ("both %<unsigned%> and %<double%> in "
8939                            "declaration specifiers"));
8940               else if (specs->typespec_word == cts_dfloat32)
8941                 error_at (loc,
8942                           ("both %<unsigned%> and %<_Decimal32%> in "
8943                            "declaration specifiers"));
8944               else if (specs->typespec_word == cts_dfloat64)
8945                 error_at (loc,
8946                           ("both %<unsigned%> and %<_Decimal64%> in "
8947                            "declaration specifiers"));
8948               else if (specs->typespec_word == cts_dfloat128)
8949                 error_at (loc,
8950                           ("both %<unsigned%> and %<_Decimal128%> in "
8951                            "declaration specifiers"));
8952               else
8953                 specs->unsigned_p = true;
8954               break;
8955             case RID_COMPLEX:
8956               dupe = specs->complex_p;
8957               if (!flag_isoc99 && !in_system_header)
8958                 pedwarn (loc, OPT_pedantic,
8959                          "ISO C90 does not support complex types");
8960               if (specs->typespec_word == cts_void)
8961                 error_at (loc,
8962                           ("both %<complex%> and %<void%> in "
8963                            "declaration specifiers"));
8964               else if (specs->typespec_word == cts_bool)
8965                 error_at (loc,
8966                           ("both %<complex%> and %<_Bool%> in "
8967                            "declaration specifiers"));
8968               else if (specs->typespec_word == cts_dfloat32)
8969                 error_at (loc,
8970                           ("both %<complex%> and %<_Decimal32%> in "
8971                            "declaration specifiers"));
8972               else if (specs->typespec_word == cts_dfloat64)
8973                 error_at (loc,
8974                           ("both %<complex%> and %<_Decimal64%> in "
8975                            "declaration specifiers"));
8976               else if (specs->typespec_word == cts_dfloat128)
8977                 error_at (loc,
8978                           ("both %<complex%> and %<_Decimal128%> in "
8979                            "declaration specifiers"));
8980               else if (specs->typespec_word == cts_fract)
8981                 error_at (loc,
8982                           ("both %<complex%> and %<_Fract%> in "
8983                            "declaration specifiers"));
8984               else if (specs->typespec_word == cts_accum)
8985                 error_at (loc,
8986                           ("both %<complex%> and %<_Accum%> in "
8987                            "declaration specifiers"));
8988               else if (specs->saturating_p)
8989                 error_at (loc,
8990                           ("both %<complex%> and %<_Sat%> in "
8991                            "declaration specifiers"));
8992               else
8993                 specs->complex_p = true;
8994               break;
8995             case RID_SAT:
8996               dupe = specs->saturating_p;
8997               pedwarn (loc, OPT_pedantic,
8998                        "ISO C does not support saturating types");
8999               if (specs->typespec_word == cts_int128)
9000                 {
9001                   error_at (loc,
9002                             ("both %<_Sat%> and %<__int128%> in "
9003                              "declaration specifiers"));
9004                 }
9005               else if (specs->typespec_word == cts_void)
9006                 error_at (loc,
9007                           ("both %<_Sat%> and %<void%> in "
9008                            "declaration specifiers"));
9009               else if (specs->typespec_word == cts_bool)
9010                 error_at (loc,
9011                           ("both %<_Sat%> and %<_Bool%> in "
9012                            "declaration specifiers"));
9013               else if (specs->typespec_word == cts_char)
9014                 error_at (loc,
9015                           ("both %<_Sat%> and %<char%> in "
9016                            "declaration specifiers"));
9017               else if (specs->typespec_word == cts_int)
9018                 error_at (loc,
9019                           ("both %<_Sat%> and %<int%> in "
9020                            "declaration specifiers"));
9021               else if (specs->typespec_word == cts_float)
9022                 error_at (loc,
9023                           ("both %<_Sat%> and %<float%> in "
9024                            "declaration specifiers"));
9025               else if (specs->typespec_word == cts_double)
9026                 error_at (loc,
9027                           ("both %<_Sat%> and %<double%> in "
9028                            "declaration specifiers"));
9029               else if (specs->typespec_word == cts_dfloat32)
9030                 error_at (loc,
9031                           ("both %<_Sat%> and %<_Decimal32%> in "
9032                            "declaration specifiers"));
9033               else if (specs->typespec_word == cts_dfloat64)
9034                 error_at (loc,
9035                           ("both %<_Sat%> and %<_Decimal64%> in "
9036                            "declaration specifiers"));
9037               else if (specs->typespec_word == cts_dfloat128)
9038                 error_at (loc,
9039                           ("both %<_Sat%> and %<_Decimal128%> in "
9040                            "declaration specifiers"));
9041               else if (specs->complex_p)
9042                 error_at (loc,
9043                           ("both %<_Sat%> and %<complex%> in "
9044                            "declaration specifiers"));
9045               else
9046                 specs->saturating_p = true;
9047               break;
9048             default:
9049               gcc_unreachable ();
9050             }
9051
9052           if (dupe)
9053             error_at (loc, "duplicate %qE", type);
9054
9055           return specs;
9056         }
9057       else
9058         {
9059           /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
9060              "__int128", "_Decimal64", "_Decimal128", "_Fract" or "_Accum".  */
9061           if (specs->typespec_word != cts_none)
9062             {
9063               error_at (loc,
9064                         "two or more data types in declaration specifiers");
9065               return specs;
9066             }
9067           switch (i)
9068             {
9069             case RID_INT128:
9070               if (int128_integer_type_node == NULL_TREE)
9071                 {
9072                   error_at (loc, "%<__int128%> is not supported for this target");
9073                   return specs;
9074                 }
9075               if (!in_system_header)
9076                 pedwarn (loc, OPT_pedantic,
9077                          "ISO C does not support %<__int128%> type");
9078
9079               if (specs->long_p)
9080                 error_at (loc,
9081                           ("both %<__int128%> and %<long%> in "
9082                            "declaration specifiers"));
9083               else if (specs->saturating_p)
9084                 error_at (loc,
9085                           ("both %<_Sat%> and %<__int128%> in "
9086                            "declaration specifiers"));
9087               else if (specs->short_p)
9088                 error_at (loc,
9089                           ("both %<__int128%> and %<short%> in "
9090                            "declaration specifiers"));
9091               else
9092                 specs->typespec_word = cts_int128;
9093               return specs;
9094             case RID_VOID:
9095               if (specs->long_p)
9096                 error_at (loc,
9097                           ("both %<long%> and %<void%> in "
9098                            "declaration specifiers"));
9099               else if (specs->short_p)
9100                 error_at (loc,
9101                           ("both %<short%> and %<void%> in "
9102                            "declaration specifiers"));
9103               else if (specs->signed_p)
9104                 error_at (loc,
9105                           ("both %<signed%> and %<void%> in "
9106                            "declaration specifiers"));
9107               else if (specs->unsigned_p)
9108                 error_at (loc,
9109                           ("both %<unsigned%> and %<void%> in "
9110                            "declaration specifiers"));
9111               else if (specs->complex_p)
9112                 error_at (loc,
9113                           ("both %<complex%> and %<void%> in "
9114                            "declaration specifiers"));
9115               else if (specs->saturating_p)
9116                 error_at (loc,
9117                           ("both %<_Sat%> and %<void%> in "
9118                            "declaration specifiers"));
9119               else
9120                 specs->typespec_word = cts_void;
9121               return specs;
9122             case RID_BOOL:
9123               if (specs->long_p)
9124                 error_at (loc,
9125                           ("both %<long%> and %<_Bool%> in "
9126                            "declaration specifiers"));
9127               else if (specs->short_p)
9128                 error_at (loc,
9129                           ("both %<short%> and %<_Bool%> in "
9130                            "declaration specifiers"));
9131               else if (specs->signed_p)
9132                 error_at (loc,
9133                           ("both %<signed%> and %<_Bool%> in "
9134                            "declaration specifiers"));
9135               else if (specs->unsigned_p)
9136                 error_at (loc,
9137                           ("both %<unsigned%> and %<_Bool%> in "
9138                            "declaration specifiers"));
9139               else if (specs->complex_p)
9140                 error_at (loc,
9141                           ("both %<complex%> and %<_Bool%> in "
9142                            "declaration specifiers"));
9143               else if (specs->saturating_p)
9144                 error_at (loc,
9145                           ("both %<_Sat%> and %<_Bool%> in "
9146                            "declaration specifiers"));
9147               else
9148                 specs->typespec_word = cts_bool;
9149               return specs;
9150             case RID_CHAR:
9151               if (specs->long_p)
9152                 error_at (loc,
9153                           ("both %<long%> and %<char%> in "
9154                            "declaration specifiers"));
9155               else if (specs->short_p)
9156                 error_at (loc,
9157                           ("both %<short%> and %<char%> in "
9158                            "declaration specifiers"));
9159               else if (specs->saturating_p)
9160                 error_at (loc,
9161                           ("both %<_Sat%> and %<char%> in "
9162                            "declaration specifiers"));
9163               else
9164                 specs->typespec_word = cts_char;
9165               return specs;
9166             case RID_INT:
9167               if (specs->saturating_p)
9168                 error_at (loc,
9169                           ("both %<_Sat%> and %<int%> in "
9170                            "declaration specifiers"));
9171               else
9172                 specs->typespec_word = cts_int;
9173               return specs;
9174             case RID_FLOAT:
9175               if (specs->long_p)
9176                 error_at (loc,
9177                           ("both %<long%> and %<float%> in "
9178                            "declaration specifiers"));
9179               else if (specs->short_p)
9180                 error_at (loc,
9181                           ("both %<short%> and %<float%> in "
9182                            "declaration specifiers"));
9183               else if (specs->signed_p)
9184                 error_at (loc,
9185                           ("both %<signed%> and %<float%> in "
9186                            "declaration specifiers"));
9187               else if (specs->unsigned_p)
9188                 error_at (loc,
9189                           ("both %<unsigned%> and %<float%> in "
9190                            "declaration specifiers"));
9191               else if (specs->saturating_p)
9192                 error_at (loc,
9193                           ("both %<_Sat%> and %<float%> in "
9194                            "declaration specifiers"));
9195               else
9196                 specs->typespec_word = cts_float;
9197               return specs;
9198             case RID_DOUBLE:
9199               if (specs->long_long_p)
9200                 error_at (loc,
9201                           ("both %<long long%> and %<double%> in "
9202                            "declaration specifiers"));
9203               else if (specs->short_p)
9204                 error_at (loc,
9205                           ("both %<short%> and %<double%> in "
9206                            "declaration specifiers"));
9207               else if (specs->signed_p)
9208                 error_at (loc,
9209                           ("both %<signed%> and %<double%> in "
9210                            "declaration specifiers"));
9211               else if (specs->unsigned_p)
9212                 error_at (loc,
9213                           ("both %<unsigned%> and %<double%> in "
9214                            "declaration specifiers"));
9215               else if (specs->saturating_p)
9216                 error_at (loc,
9217                           ("both %<_Sat%> and %<double%> in "
9218                            "declaration specifiers"));
9219               else
9220                 specs->typespec_word = cts_double;
9221               return specs;
9222             case RID_DFLOAT32:
9223             case RID_DFLOAT64:
9224             case RID_DFLOAT128:
9225               {
9226                 const char *str;
9227                 if (i == RID_DFLOAT32)
9228                   str = "_Decimal32";
9229                 else if (i == RID_DFLOAT64)
9230                   str = "_Decimal64";
9231                 else
9232                   str = "_Decimal128";
9233                 if (specs->long_long_p)
9234                   error_at (loc,
9235                             ("both %<long long%> and %<%s%> in "
9236                              "declaration specifiers"),
9237                             str);
9238                 if (specs->long_p)
9239                   error_at (loc,
9240                             ("both %<long%> and %<%s%> in "
9241                              "declaration specifiers"),
9242                             str);
9243                 else if (specs->short_p)
9244                   error_at (loc,
9245                             ("both %<short%> and %<%s%> in "
9246                              "declaration specifiers"),
9247                             str);
9248                 else if (specs->signed_p)
9249                   error_at (loc,
9250                             ("both %<signed%> and %<%s%> in "
9251                              "declaration specifiers"),
9252                             str);
9253                 else if (specs->unsigned_p)
9254                   error_at (loc,
9255                             ("both %<unsigned%> and %<%s%> in "
9256                              "declaration specifiers"),
9257                             str);
9258                 else if (specs->complex_p)
9259                   error_at (loc,
9260                             ("both %<complex%> and %<%s%> in "
9261                              "declaration specifiers"),
9262                             str);
9263                 else if (specs->saturating_p)
9264                   error_at (loc,
9265                             ("both %<_Sat%> and %<%s%> in "
9266                              "declaration specifiers"),
9267                             str);
9268                 else if (i == RID_DFLOAT32)
9269                   specs->typespec_word = cts_dfloat32;
9270                 else if (i == RID_DFLOAT64)
9271                   specs->typespec_word = cts_dfloat64;
9272                 else
9273                   specs->typespec_word = cts_dfloat128;
9274               }
9275               if (!targetm.decimal_float_supported_p ())
9276                 error_at (loc,
9277                           ("decimal floating point not supported "
9278                            "for this target"));
9279               pedwarn (loc, OPT_pedantic,
9280                        "ISO C does not support decimal floating point");
9281               return specs;
9282             case RID_FRACT:
9283             case RID_ACCUM:
9284               {
9285                 const char *str;
9286                 if (i == RID_FRACT)
9287                   str = "_Fract";
9288                 else
9289                   str = "_Accum";
9290                 if (specs->complex_p)
9291                   error_at (loc,
9292                             ("both %<complex%> and %<%s%> in "
9293                              "declaration specifiers"),
9294                             str);
9295                 else if (i == RID_FRACT)
9296                     specs->typespec_word = cts_fract;
9297                 else
9298                     specs->typespec_word = cts_accum;
9299               }
9300               if (!targetm.fixed_point_supported_p ())
9301                 error_at (loc,
9302                           "fixed-point types not supported for this target");
9303               pedwarn (loc, OPT_pedantic,
9304                        "ISO C does not support fixed-point types");
9305               return specs;
9306             default:
9307               /* ObjC reserved word "id", handled below.  */
9308               break;
9309             }
9310         }
9311     }
9312
9313   /* Now we have a typedef (a TYPE_DECL node), an identifier (some
9314      form of ObjC type, cases such as "int" and "long" being handled
9315      above), a TYPE (struct, union, enum and typeof specifiers) or an
9316      ERROR_MARK.  In none of these cases may there have previously
9317      been any type specifiers.  */
9318   if (specs->type || specs->typespec_word != cts_none
9319       || specs->long_p || specs->short_p || specs->signed_p
9320       || specs->unsigned_p || specs->complex_p)
9321     error_at (loc, "two or more data types in declaration specifiers");
9322   else if (TREE_CODE (type) == TYPE_DECL)
9323     {
9324       if (TREE_TYPE (type) == error_mark_node)
9325         ; /* Allow the type to default to int to avoid cascading errors.  */
9326       else
9327         {
9328           specs->type = TREE_TYPE (type);
9329           specs->decl_attr = DECL_ATTRIBUTES (type);
9330           specs->typedef_p = true;
9331           specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
9332
9333           /* If this typedef name is defined in a struct, then a C++
9334              lookup would return a different value.  */
9335           if (warn_cxx_compat
9336               && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
9337             warning_at (loc, OPT_Wc___compat,
9338                         "C++ lookup of %qD would return a field, not a type",
9339                         type);
9340
9341           /* If we are parsing a struct, record that a struct field
9342              used a typedef.  */
9343           if (warn_cxx_compat && struct_parse_info != NULL)
9344             VEC_safe_push (tree, heap, struct_parse_info->typedefs_seen, type);
9345         }
9346     }
9347   else if (TREE_CODE (type) == IDENTIFIER_NODE)
9348     {
9349       tree t = lookup_name (type);
9350       if (!t || TREE_CODE (t) != TYPE_DECL)
9351         error_at (loc, "%qE fails to be a typedef or built in type", type);
9352       else if (TREE_TYPE (t) == error_mark_node)
9353         ;
9354       else
9355         specs->type = TREE_TYPE (t);
9356     }
9357   else
9358     {
9359       if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
9360         {
9361           specs->typedef_p = true;
9362           if (spec.expr)
9363             {
9364               if (specs->expr)
9365                 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
9366                                       specs->expr, spec.expr);
9367               else
9368                 specs->expr = spec.expr;
9369               specs->expr_const_operands &= spec.expr_const_operands;
9370             }
9371         }
9372       specs->type = type;
9373     }
9374
9375   return specs;
9376 }
9377
9378 /* Add the storage class specifier or function specifier SCSPEC to the
9379    declaration specifiers SPECS, returning SPECS.  */
9380
9381 struct c_declspecs *
9382 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
9383 {
9384   enum rid i;
9385   enum c_storage_class n = csc_none;
9386   bool dupe = false;
9387   specs->declspecs_seen_p = true;
9388   gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
9389               && C_IS_RESERVED_WORD (scspec));
9390   i = C_RID_CODE (scspec);
9391   if (specs->non_sc_seen_p)
9392     warning (OPT_Wold_style_declaration,
9393              "%qE is not at beginning of declaration", scspec);
9394   switch (i)
9395     {
9396     case RID_INLINE:
9397       /* C99 permits duplicate inline.  Although of doubtful utility,
9398          it seems simplest to permit it in gnu89 mode as well, as
9399          there is also little utility in maintaining this as a
9400          difference between gnu89 and C99 inline.  */
9401       dupe = false;
9402       specs->inline_p = true;
9403       break;
9404     case RID_THREAD:
9405       dupe = specs->thread_p;
9406       if (specs->storage_class == csc_auto)
9407         error ("%<__thread%> used with %<auto%>");
9408       else if (specs->storage_class == csc_register)
9409         error ("%<__thread%> used with %<register%>");
9410       else if (specs->storage_class == csc_typedef)
9411         error ("%<__thread%> used with %<typedef%>");
9412       else
9413         specs->thread_p = true;
9414       break;
9415     case RID_AUTO:
9416       n = csc_auto;
9417       break;
9418     case RID_EXTERN:
9419       n = csc_extern;
9420       /* Diagnose "__thread extern".  */
9421       if (specs->thread_p)
9422         error ("%<__thread%> before %<extern%>");
9423       break;
9424     case RID_REGISTER:
9425       n = csc_register;
9426       break;
9427     case RID_STATIC:
9428       n = csc_static;
9429       /* Diagnose "__thread static".  */
9430       if (specs->thread_p)
9431         error ("%<__thread%> before %<static%>");
9432       break;
9433     case RID_TYPEDEF:
9434       n = csc_typedef;
9435       break;
9436     default:
9437       gcc_unreachable ();
9438     }
9439   if (n != csc_none && n == specs->storage_class)
9440     dupe = true;
9441   if (dupe)
9442     error ("duplicate %qE", scspec);
9443   if (n != csc_none)
9444     {
9445       if (specs->storage_class != csc_none && n != specs->storage_class)
9446         {
9447           error ("multiple storage classes in declaration specifiers");
9448         }
9449       else
9450         {
9451           specs->storage_class = n;
9452           if (n != csc_extern && n != csc_static && specs->thread_p)
9453             {
9454               error ("%<__thread%> used with %qE", scspec);
9455               specs->thread_p = false;
9456             }
9457         }
9458     }
9459   return specs;
9460 }
9461
9462 /* Add the attributes ATTRS to the declaration specifiers SPECS,
9463    returning SPECS.  */
9464
9465 struct c_declspecs *
9466 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
9467 {
9468   specs->attrs = chainon (attrs, specs->attrs);
9469   specs->declspecs_seen_p = true;
9470   return specs;
9471 }
9472
9473 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
9474    specifiers with any other type specifier to determine the resulting
9475    type.  This is where ISO C checks on complex types are made, since
9476    "_Complex long" is a prefix of the valid ISO C type "_Complex long
9477    double".  */
9478
9479 struct c_declspecs *
9480 finish_declspecs (struct c_declspecs *specs)
9481 {
9482   /* If a type was specified as a whole, we have no modifiers and are
9483      done.  */
9484   if (specs->type != NULL_TREE)
9485     {
9486       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
9487                   && !specs->signed_p && !specs->unsigned_p
9488                   && !specs->complex_p);
9489
9490       /* Set a dummy type.  */
9491       if (TREE_CODE (specs->type) == ERROR_MARK)
9492         specs->type = integer_type_node;
9493       return specs;
9494     }
9495
9496   /* If none of "void", "_Bool", "char", "int", "float" or "double"
9497      has been specified, treat it as "int" unless "_Complex" is
9498      present and there are no other specifiers.  If we just have
9499      "_Complex", it is equivalent to "_Complex double", but e.g.
9500      "_Complex short" is equivalent to "_Complex short int".  */
9501   if (specs->typespec_word == cts_none)
9502     {
9503       if (specs->saturating_p)
9504         {
9505           error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
9506           if (!targetm.fixed_point_supported_p ())
9507             error ("fixed-point types not supported for this target");
9508           specs->typespec_word = cts_fract;
9509         }
9510       else if (specs->long_p || specs->short_p
9511                || specs->signed_p || specs->unsigned_p)
9512         {
9513           specs->typespec_word = cts_int;
9514         }
9515       else if (specs->complex_p)
9516         {
9517           specs->typespec_word = cts_double;
9518           pedwarn (input_location, OPT_pedantic,
9519                    "ISO C does not support plain %<complex%> meaning "
9520                    "%<double complex%>");
9521         }
9522       else
9523         {
9524           specs->typespec_word = cts_int;
9525           specs->default_int_p = true;
9526           /* We don't diagnose this here because grokdeclarator will
9527              give more specific diagnostics according to whether it is
9528              a function definition.  */
9529         }
9530     }
9531
9532   /* If "signed" was specified, record this to distinguish "int" and
9533      "signed int" in the case of a bit-field with
9534      -funsigned-bitfields.  */
9535   specs->explicit_signed_p = specs->signed_p;
9536
9537   /* Now compute the actual type.  */
9538   switch (specs->typespec_word)
9539     {
9540     case cts_void:
9541       gcc_assert (!specs->long_p && !specs->short_p
9542                   && !specs->signed_p && !specs->unsigned_p
9543                   && !specs->complex_p);
9544       specs->type = void_type_node;
9545       break;
9546     case cts_bool:
9547       gcc_assert (!specs->long_p && !specs->short_p
9548                   && !specs->signed_p && !specs->unsigned_p
9549                   && !specs->complex_p);
9550       specs->type = boolean_type_node;
9551       break;
9552     case cts_char:
9553       gcc_assert (!specs->long_p && !specs->short_p);
9554       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9555       if (specs->signed_p)
9556         specs->type = signed_char_type_node;
9557       else if (specs->unsigned_p)
9558         specs->type = unsigned_char_type_node;
9559       else
9560         specs->type = char_type_node;
9561       if (specs->complex_p)
9562         {
9563           pedwarn (input_location, OPT_pedantic,
9564                    "ISO C does not support complex integer types");
9565           specs->type = build_complex_type (specs->type);
9566         }
9567       break;
9568     case cts_int128:
9569       gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
9570       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9571       specs->type = (specs->unsigned_p
9572                      ? int128_unsigned_type_node
9573                      : int128_integer_type_node);
9574       if (specs->complex_p)
9575         {
9576           pedwarn (input_location, OPT_pedantic,
9577                    "ISO C does not support complex integer types");
9578           specs->type = build_complex_type (specs->type);
9579         }
9580       break;
9581     case cts_int:
9582       gcc_assert (!(specs->long_p && specs->short_p));
9583       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9584       if (specs->long_long_p)
9585         specs->type = (specs->unsigned_p
9586                        ? long_long_unsigned_type_node
9587                        : long_long_integer_type_node);
9588       else if (specs->long_p)
9589         specs->type = (specs->unsigned_p
9590                        ? long_unsigned_type_node
9591                        : long_integer_type_node);
9592       else if (specs->short_p)
9593         specs->type = (specs->unsigned_p
9594                        ? short_unsigned_type_node
9595                        : short_integer_type_node);
9596       else
9597         specs->type = (specs->unsigned_p
9598                        ? unsigned_type_node
9599                        : integer_type_node);
9600       if (specs->complex_p)
9601         {
9602           pedwarn (input_location, OPT_pedantic,
9603                    "ISO C does not support complex integer types");
9604           specs->type = build_complex_type (specs->type);
9605         }
9606       break;
9607     case cts_float:
9608       gcc_assert (!specs->long_p && !specs->short_p
9609                   && !specs->signed_p && !specs->unsigned_p);
9610       specs->type = (specs->complex_p
9611                      ? complex_float_type_node
9612                      : float_type_node);
9613       break;
9614     case cts_double:
9615       gcc_assert (!specs->long_long_p && !specs->short_p
9616                   && !specs->signed_p && !specs->unsigned_p);
9617       if (specs->long_p)
9618         {
9619           specs->type = (specs->complex_p
9620                          ? complex_long_double_type_node
9621                          : long_double_type_node);
9622         }
9623       else
9624         {
9625           specs->type = (specs->complex_p
9626                          ? complex_double_type_node
9627                          : double_type_node);
9628         }
9629       break;
9630     case cts_dfloat32:
9631     case cts_dfloat64:
9632     case cts_dfloat128:
9633       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
9634                   && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
9635       if (specs->typespec_word == cts_dfloat32)
9636         specs->type = dfloat32_type_node;
9637       else if (specs->typespec_word == cts_dfloat64)
9638         specs->type = dfloat64_type_node;
9639       else
9640         specs->type = dfloat128_type_node;
9641       break;
9642     case cts_fract:
9643       gcc_assert (!specs->complex_p);
9644       if (!targetm.fixed_point_supported_p ())
9645         specs->type = integer_type_node;
9646       else if (specs->saturating_p)
9647         {
9648           if (specs->long_long_p)
9649             specs->type = specs->unsigned_p
9650                           ? sat_unsigned_long_long_fract_type_node
9651                           : sat_long_long_fract_type_node;
9652           else if (specs->long_p)
9653             specs->type = specs->unsigned_p
9654                           ? sat_unsigned_long_fract_type_node
9655                           : sat_long_fract_type_node;
9656           else if (specs->short_p)
9657             specs->type = specs->unsigned_p
9658                           ? sat_unsigned_short_fract_type_node
9659                           : sat_short_fract_type_node;
9660           else
9661             specs->type = specs->unsigned_p
9662                           ? sat_unsigned_fract_type_node
9663                           : sat_fract_type_node;
9664         }
9665       else
9666         {
9667           if (specs->long_long_p)
9668             specs->type = specs->unsigned_p
9669                           ? unsigned_long_long_fract_type_node
9670                           : long_long_fract_type_node;
9671           else if (specs->long_p)
9672             specs->type = specs->unsigned_p
9673                           ? unsigned_long_fract_type_node
9674                           : long_fract_type_node;
9675           else if (specs->short_p)
9676             specs->type = specs->unsigned_p
9677                           ? unsigned_short_fract_type_node
9678                           : short_fract_type_node;
9679           else
9680             specs->type = specs->unsigned_p
9681                           ? unsigned_fract_type_node
9682                           : fract_type_node;
9683         }
9684       break;
9685     case cts_accum:
9686       gcc_assert (!specs->complex_p);
9687       if (!targetm.fixed_point_supported_p ())
9688         specs->type = integer_type_node;
9689       else if (specs->saturating_p)
9690         {
9691           if (specs->long_long_p)
9692             specs->type = specs->unsigned_p
9693                           ? sat_unsigned_long_long_accum_type_node
9694                           : sat_long_long_accum_type_node;
9695           else if (specs->long_p)
9696             specs->type = specs->unsigned_p
9697                           ? sat_unsigned_long_accum_type_node
9698                           : sat_long_accum_type_node;
9699           else if (specs->short_p)
9700             specs->type = specs->unsigned_p
9701                           ? sat_unsigned_short_accum_type_node
9702                           : sat_short_accum_type_node;
9703           else
9704             specs->type = specs->unsigned_p
9705                           ? sat_unsigned_accum_type_node
9706                           : sat_accum_type_node;
9707         }
9708       else
9709         {
9710           if (specs->long_long_p)
9711             specs->type = specs->unsigned_p
9712                           ? unsigned_long_long_accum_type_node
9713                           : long_long_accum_type_node;
9714           else if (specs->long_p)
9715             specs->type = specs->unsigned_p
9716                           ? unsigned_long_accum_type_node
9717                           : long_accum_type_node;
9718           else if (specs->short_p)
9719             specs->type = specs->unsigned_p
9720                           ? unsigned_short_accum_type_node
9721                           : short_accum_type_node;
9722           else
9723             specs->type = specs->unsigned_p
9724                           ? unsigned_accum_type_node
9725                           : accum_type_node;
9726         }
9727       break;
9728     default:
9729       gcc_unreachable ();
9730     }
9731
9732   return specs;
9733 }
9734
9735 /* A subroutine of c_write_global_declarations.  Perform final processing
9736    on one file scope's declarations (or the external scope's declarations),
9737    GLOBALS.  */
9738
9739 static void
9740 c_write_global_declarations_1 (tree globals)
9741 {
9742   tree decl;
9743   bool reconsider;
9744
9745   /* Process the decls in the order they were written.  */
9746   for (decl = globals; decl; decl = DECL_CHAIN (decl))
9747     {
9748       /* Check for used but undefined static functions using the C
9749          standard's definition of "used", and set TREE_NO_WARNING so
9750          that check_global_declarations doesn't repeat the check.  */
9751       if (TREE_CODE (decl) == FUNCTION_DECL
9752           && DECL_INITIAL (decl) == 0
9753           && DECL_EXTERNAL (decl)
9754           && !TREE_PUBLIC (decl)
9755           && C_DECL_USED (decl))
9756         {
9757           pedwarn (input_location, 0, "%q+F used but never defined", decl);
9758           TREE_NO_WARNING (decl) = 1;
9759         }
9760
9761       wrapup_global_declaration_1 (decl);
9762     }
9763
9764   do
9765     {
9766       reconsider = false;
9767       for (decl = globals; decl; decl = DECL_CHAIN (decl))
9768         reconsider |= wrapup_global_declaration_2 (decl);
9769     }
9770   while (reconsider);
9771
9772   for (decl = globals; decl; decl = DECL_CHAIN (decl))
9773     check_global_declaration_1 (decl);
9774 }
9775
9776 /* A subroutine of c_write_global_declarations Emit debug information for each
9777    of the declarations in GLOBALS.  */
9778
9779 static void
9780 c_write_global_declarations_2 (tree globals)
9781 {
9782   tree decl;
9783
9784   for (decl = globals; decl ; decl = DECL_CHAIN (decl))
9785     debug_hooks->global_decl (decl);
9786 }
9787
9788 /* Callback to collect a source_ref from a DECL.  */
9789
9790 static void
9791 collect_source_ref_cb (tree decl)
9792 {
9793   if (!DECL_IS_BUILTIN (decl))
9794     collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
9795 }
9796
9797 /* Collect all references relevant to SOURCE_FILE.  */
9798
9799 static void
9800 collect_all_refs (const char *source_file)
9801 {
9802   tree t;
9803   unsigned i;
9804
9805   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9806     collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
9807 }
9808
9809 /* Iterate over all global declarations and call CALLBACK.  */
9810
9811 static void
9812 for_each_global_decl (void (*callback) (tree decl))
9813 {
9814   tree t;
9815   tree decls;
9816   tree decl;
9817   unsigned i;
9818
9819   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9820     { 
9821       decls = DECL_INITIAL (t);
9822       for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
9823         callback (decl);
9824     }
9825 }
9826
9827 /* Preserve the external declarations scope across a garbage collect.  */
9828 static GTY(()) tree ext_block;
9829
9830 void
9831 c_write_global_declarations (void)
9832 {
9833   tree t;
9834   unsigned i;
9835
9836   /* We don't want to do this if generating a PCH.  */
9837   if (pch_file)
9838     return;
9839
9840   /* Do the Objective-C stuff.  This is where all the Objective-C
9841      module stuff gets generated (symtab, class/protocol/selector
9842      lists etc).  */
9843   if (c_dialect_objc ())
9844     objc_write_global_declarations ();
9845
9846   /* Close the external scope.  */
9847   ext_block = pop_scope ();
9848   external_scope = 0;
9849   gcc_assert (!current_scope);
9850
9851   /* Handle -fdump-ada-spec[-slim]. */
9852   if (dump_enabled_p (TDI_ada))
9853     {
9854       /* Build a table of files to generate specs for */
9855       if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
9856         collect_source_ref (main_input_filename);
9857       else
9858         for_each_global_decl (collect_source_ref_cb);
9859
9860       dump_ada_specs (collect_all_refs, NULL);
9861     }
9862
9863   if (ext_block)
9864     {
9865       tree tmp = BLOCK_VARS (ext_block);
9866       int flags;
9867       FILE * stream = dump_begin (TDI_tu, &flags);
9868       if (stream && tmp)
9869         {
9870           dump_node (tmp, flags & ~TDF_SLIM, stream);
9871           dump_end (TDI_tu, stream);
9872         }
9873     }
9874
9875   /* Process all file scopes in this compilation, and the external_scope,
9876      through wrapup_global_declarations and check_global_declarations.  */
9877   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9878     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
9879   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
9880
9881   /* We're done parsing; proceed to optimize and emit assembly.
9882      FIXME: shouldn't be the front end's responsibility to call this.  */
9883   cgraph_finalize_compilation_unit ();
9884
9885   /* After cgraph has had a chance to emit everything that's going to
9886      be emitted, output debug information for globals.  */
9887   if (!seen_error ())
9888     {
9889       timevar_push (TV_SYMOUT);
9890       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9891         c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
9892       c_write_global_declarations_2 (BLOCK_VARS (ext_block));
9893       timevar_pop (TV_SYMOUT);
9894     }
9895
9896   ext_block = NULL;
9897 }
9898
9899 /* Register reserved keyword WORD as qualifier for address space AS.  */
9900
9901 void
9902 c_register_addr_space (const char *word, addr_space_t as)
9903 {
9904   int rid = RID_FIRST_ADDR_SPACE + as;
9905   tree id;
9906
9907   /* Address space qualifiers are only supported
9908      in C with GNU extensions enabled.  */
9909   if (c_dialect_objc () || flag_no_asm)
9910     return;
9911
9912   id = get_identifier (word);
9913   C_SET_RID_CODE (id, rid);
9914   C_IS_RESERVED_WORD (id) = 1;
9915   ridpointers [rid] = id;
9916 }
9917
9918 #include "gt-c-decl.h"