OSDN Git Service

* tree.h (get_pending_sizes): Remove prototype.
[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, 2011
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   /* Install a cleanup (aka destructor) if one was given.  */
4432   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
4433     {
4434       tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
4435       if (attr)
4436         {
4437           tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
4438           tree cleanup_decl = lookup_name (cleanup_id);
4439           tree cleanup;
4440           VEC(tree,gc) *vec;
4441
4442           /* Build "cleanup(&decl)" for the destructor.  */
4443           cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
4444           vec = VEC_alloc (tree, gc, 1);
4445           VEC_quick_push (tree, vec, cleanup);
4446           cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl),
4447                                              cleanup_decl, vec, NULL);
4448           VEC_free (tree, gc, vec);
4449
4450           /* Don't warn about decl unused; the cleanup uses it.  */
4451           TREE_USED (decl) = 1;
4452           TREE_USED (cleanup_decl) = 1;
4453           DECL_READ_P (decl) = 1;
4454
4455           push_cleanup (decl, cleanup, false);
4456         }
4457     }
4458
4459   if (warn_cxx_compat
4460       && TREE_CODE (decl) == VAR_DECL
4461       && !DECL_EXTERNAL (decl)
4462       && DECL_INITIAL (decl) == NULL_TREE)
4463     {
4464       type = strip_array_types (type);
4465       if (TREE_READONLY (decl))
4466         warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
4467                     "uninitialized const %qD is invalid in C++", decl);
4468       else if ((TREE_CODE (type) == RECORD_TYPE
4469                 || TREE_CODE (type) == UNION_TYPE)
4470                && C_TYPE_FIELDS_READONLY (type))
4471         diagnose_uninitialized_cst_member (decl, type);
4472     }
4473 }
4474
4475 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
4476    EXPR is NULL or a pointer to an expression that needs to be
4477    evaluated for the side effects of array size expressions in the
4478    parameters.  */
4479
4480 tree
4481 grokparm (const struct c_parm *parm, tree *expr)
4482 {
4483   tree attrs = parm->attrs;
4484   tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
4485                               NULL, &attrs, expr, NULL, DEPRECATED_NORMAL);
4486
4487   decl_attributes (&decl, attrs, 0);
4488
4489   return decl;
4490 }
4491
4492 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4493    and push that on the current scope.  EXPR is a pointer to an
4494    expression that needs to be evaluated for the side effects of array
4495    size expressions in the parameters.  */
4496
4497 void
4498 push_parm_decl (const struct c_parm *parm, tree *expr)
4499 {
4500   tree attrs = parm->attrs;
4501   tree decl;
4502
4503   decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
4504                          &attrs, expr, NULL, DEPRECATED_NORMAL);
4505   decl_attributes (&decl, attrs, 0);
4506
4507   decl = pushdecl (decl);
4508
4509   finish_decl (decl, input_location, NULL_TREE, NULL_TREE, NULL_TREE);
4510 }
4511
4512 /* Mark all the parameter declarations to date as forward decls.
4513    Also diagnose use of this extension.  */
4514
4515 void
4516 mark_forward_parm_decls (void)
4517 {
4518   struct c_binding *b;
4519
4520   if (pedantic && !current_scope->warned_forward_parm_decls)
4521     {
4522       pedwarn (input_location, OPT_pedantic,
4523                "ISO C forbids forward parameter declarations");
4524       current_scope->warned_forward_parm_decls = true;
4525     }
4526
4527   for (b = current_scope->bindings; b; b = b->prev)
4528     if (TREE_CODE (b->decl) == PARM_DECL)
4529       TREE_ASM_WRITTEN (b->decl) = 1;
4530 }
4531 \f
4532 /* Build a COMPOUND_LITERAL_EXPR.  TYPE is the type given in the compound
4533    literal, which may be an incomplete array type completed by the
4534    initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4535    literal.  NON_CONST is true if the initializers contain something
4536    that cannot occur in a constant expression.  */
4537
4538 tree
4539 build_compound_literal (location_t loc, tree type, tree init, bool non_const)
4540 {
4541   /* We do not use start_decl here because we have a type, not a declarator;
4542      and do not use finish_decl because the decl should be stored inside
4543      the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR.  */
4544   tree decl;
4545   tree complit;
4546   tree stmt;
4547
4548   if (type == error_mark_node
4549       || init == error_mark_node)
4550     return error_mark_node;
4551
4552   decl = build_decl (loc, VAR_DECL, NULL_TREE, type);
4553   DECL_EXTERNAL (decl) = 0;
4554   TREE_PUBLIC (decl) = 0;
4555   TREE_STATIC (decl) = (current_scope == file_scope);
4556   DECL_CONTEXT (decl) = current_function_decl;
4557   TREE_USED (decl) = 1;
4558   DECL_READ_P (decl) = 1;
4559   TREE_TYPE (decl) = type;
4560   TREE_READONLY (decl) = TYPE_READONLY (type);
4561   store_init_value (loc, decl, init, NULL_TREE);
4562
4563   if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
4564     {
4565       int failure = complete_array_type (&TREE_TYPE (decl),
4566                                          DECL_INITIAL (decl), true);
4567       gcc_assert (!failure);
4568
4569       type = TREE_TYPE (decl);
4570       TREE_TYPE (DECL_INITIAL (decl)) = type;
4571     }
4572
4573   if (type == error_mark_node || !COMPLETE_TYPE_P (type))
4574     return error_mark_node;
4575
4576   stmt = build_stmt (DECL_SOURCE_LOCATION (decl), DECL_EXPR, decl);
4577   complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
4578   TREE_SIDE_EFFECTS (complit) = 1;
4579
4580   layout_decl (decl, 0);
4581
4582   if (TREE_STATIC (decl))
4583     {
4584       /* This decl needs a name for the assembler output.  */
4585       set_compound_literal_name (decl);
4586       DECL_DEFER_OUTPUT (decl) = 1;
4587       DECL_COMDAT (decl) = 1;
4588       DECL_ARTIFICIAL (decl) = 1;
4589       DECL_IGNORED_P (decl) = 1;
4590       pushdecl (decl);
4591       rest_of_decl_compilation (decl, 1, 0);
4592     }
4593
4594   if (non_const)
4595     {
4596       complit = build2 (C_MAYBE_CONST_EXPR, type, NULL, complit);
4597       C_MAYBE_CONST_EXPR_NON_CONST (complit) = 1;
4598     }
4599
4600   return complit;
4601 }
4602
4603 /* Check the type of a compound literal.  Here we just check that it
4604    is valid for C++.  */
4605
4606 void
4607 check_compound_literal_type (location_t loc, struct c_type_name *type_name)
4608 {
4609   if (warn_cxx_compat
4610       && (type_name->specs->typespec_kind == ctsk_tagdef
4611           || type_name->specs->typespec_kind == ctsk_tagfirstref))
4612     warning_at (loc, OPT_Wc___compat,
4613                 "defining a type in a compound literal is invalid in C++");
4614 }
4615 \f
4616 /* Determine whether TYPE is a structure with a flexible array member,
4617    or a union containing such a structure (possibly recursively).  */
4618
4619 static bool
4620 flexible_array_type_p (tree type)
4621 {
4622   tree x;
4623   switch (TREE_CODE (type))
4624     {
4625     case RECORD_TYPE:
4626       x = TYPE_FIELDS (type);
4627       if (x == NULL_TREE)
4628         return false;
4629       while (DECL_CHAIN (x) != NULL_TREE)
4630         x = DECL_CHAIN (x);
4631       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
4632           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
4633           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
4634           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
4635         return true;
4636       return false;
4637     case UNION_TYPE:
4638       for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
4639         {
4640           if (flexible_array_type_p (TREE_TYPE (x)))
4641             return true;
4642         }
4643       return false;
4644     default:
4645     return false;
4646   }
4647 }
4648 \f
4649 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
4650    replacing with appropriate values if they are invalid.  */
4651 static void
4652 check_bitfield_type_and_width (tree *type, tree *width, tree orig_name)
4653 {
4654   tree type_mv;
4655   unsigned int max_width;
4656   unsigned HOST_WIDE_INT w;
4657   const char *name = (orig_name
4658                       ? identifier_to_locale (IDENTIFIER_POINTER (orig_name))
4659                       : _("<anonymous>"));
4660
4661   /* Detect and ignore out of range field width and process valid
4662      field widths.  */
4663   if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)))
4664     {
4665       error ("bit-field %qs width not an integer constant", name);
4666       *width = integer_one_node;
4667     }
4668   else
4669     {
4670       if (TREE_CODE (*width) != INTEGER_CST)
4671         {
4672           *width = c_fully_fold (*width, false, NULL);
4673           if (TREE_CODE (*width) == INTEGER_CST)
4674             pedwarn (input_location, OPT_pedantic,
4675                      "bit-field %qs width not an integer constant expression",
4676                      name);
4677         }
4678       if (TREE_CODE (*width) != INTEGER_CST)
4679         {
4680           error ("bit-field %qs width not an integer constant", name);
4681           *width = integer_one_node;
4682         }
4683       constant_expression_warning (*width);
4684       if (tree_int_cst_sgn (*width) < 0)
4685         {
4686           error ("negative width in bit-field %qs", name);
4687           *width = integer_one_node;
4688         }
4689       else if (integer_zerop (*width) && orig_name)
4690         {
4691           error ("zero width for bit-field %qs", name);
4692           *width = integer_one_node;
4693         }
4694     }
4695
4696   /* Detect invalid bit-field type.  */
4697   if (TREE_CODE (*type) != INTEGER_TYPE
4698       && TREE_CODE (*type) != BOOLEAN_TYPE
4699       && TREE_CODE (*type) != ENUMERAL_TYPE)
4700     {
4701       error ("bit-field %qs has invalid type", name);
4702       *type = unsigned_type_node;
4703     }
4704
4705   type_mv = TYPE_MAIN_VARIANT (*type);
4706   if (!in_system_header
4707       && type_mv != integer_type_node
4708       && type_mv != unsigned_type_node
4709       && type_mv != boolean_type_node)
4710     pedwarn (input_location, OPT_pedantic,
4711              "type of bit-field %qs is a GCC extension", name);
4712
4713   max_width = TYPE_PRECISION (*type);
4714
4715   if (0 < compare_tree_int (*width, max_width))
4716     {
4717       error ("width of %qs exceeds its type", name);
4718       w = max_width;
4719       *width = build_int_cst (integer_type_node, w);
4720     }
4721   else
4722     w = tree_low_cst (*width, 1);
4723
4724   if (TREE_CODE (*type) == ENUMERAL_TYPE)
4725     {
4726       struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
4727       if (!lt
4728           || w < tree_int_cst_min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
4729           || w < tree_int_cst_min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
4730         warning (0, "%qs is narrower than values of its type", name);
4731     }
4732 }
4733
4734 \f
4735
4736 /* Print warning about variable length array if necessary.  */
4737
4738 static void
4739 warn_variable_length_array (tree name, tree size)
4740 {
4741   int const_size = TREE_CONSTANT (size);
4742
4743   if (!flag_isoc99 && pedantic && warn_vla != 0)
4744     {
4745       if (const_size)
4746         {
4747           if (name)
4748             pedwarn (input_location, OPT_Wvla,
4749                      "ISO C90 forbids array %qE whose size "
4750                      "can%'t be evaluated",
4751                      name);
4752           else
4753             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array whose size "
4754                      "can%'t be evaluated");
4755         }
4756       else
4757         {
4758           if (name)
4759             pedwarn (input_location, OPT_Wvla,
4760                      "ISO C90 forbids variable length array %qE",
4761                      name);
4762           else
4763             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array");
4764         }
4765     }
4766   else if (warn_vla > 0)
4767     {
4768       if (const_size)
4769         {
4770           if (name)
4771             warning (OPT_Wvla,
4772                      "the size of array %qE can"
4773                      "%'t be evaluated", name);
4774           else
4775             warning (OPT_Wvla,
4776                      "the size of array can %'t be evaluated");
4777         }
4778       else
4779         {
4780           if (name)
4781             warning (OPT_Wvla,
4782                      "variable length array %qE is used",
4783                      name);
4784           else
4785             warning (OPT_Wvla,
4786                      "variable length array is used");
4787         }
4788     }
4789 }
4790
4791 /* Given declspecs and a declarator,
4792    determine the name and type of the object declared
4793    and construct a ..._DECL node for it.
4794    (In one case we can return a ..._TYPE node instead.
4795     For invalid input we sometimes return 0.)
4796
4797    DECLSPECS is a c_declspecs structure for the declaration specifiers.
4798
4799    DECL_CONTEXT says which syntactic context this declaration is in:
4800      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
4801      FUNCDEF for a function definition.  Like NORMAL but a few different
4802       error messages in each case.  Return value may be zero meaning
4803       this definition is too screwy to try to parse.
4804      PARM for a parameter declaration (either within a function prototype
4805       or before a function body).  Make a PARM_DECL, or return void_type_node.
4806      TYPENAME if for a typename (in a cast or sizeof).
4807       Don't make a DECL node; just return the ..._TYPE node.
4808      FIELD for a struct or union field; make a FIELD_DECL.
4809    INITIALIZED is true if the decl has an initializer.
4810    WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
4811    representing the width of the bit-field.
4812    DECL_ATTRS points to the list of attributes that should be added to this
4813      decl.  Any nested attributes that belong on the decl itself will be
4814      added to this list.
4815    If EXPR is not NULL, any expressions that need to be evaluated as
4816      part of evaluating variably modified types will be stored in *EXPR.
4817    If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
4818      set to indicate whether operands in *EXPR can be used in constant
4819      expressions.
4820    DEPRECATED_STATE is a deprecated_states value indicating whether
4821    deprecation warnings should be suppressed.
4822
4823    In the TYPENAME case, DECLARATOR is really an absolute declarator.
4824    It may also be so in the PARM case, for a prototype where the
4825    argument type is specified but not the name.
4826
4827    This function is where the complicated C meanings of `static'
4828    and `extern' are interpreted.  */
4829
4830 static tree
4831 grokdeclarator (const struct c_declarator *declarator,
4832                 struct c_declspecs *declspecs,
4833                 enum decl_context decl_context, bool initialized, tree *width,
4834                 tree *decl_attrs, tree *expr, bool *expr_const_operands,
4835                 enum deprecated_states deprecated_state)
4836 {
4837   tree type = declspecs->type;
4838   bool threadp = declspecs->thread_p;
4839   enum c_storage_class storage_class = declspecs->storage_class;
4840   int constp;
4841   int restrictp;
4842   int volatilep;
4843   int type_quals = TYPE_UNQUALIFIED;
4844   tree name = NULL_TREE;
4845   bool funcdef_flag = false;
4846   bool funcdef_syntax = false;
4847   bool size_varies = false;
4848   tree decl_attr = declspecs->decl_attr;
4849   int array_ptr_quals = TYPE_UNQUALIFIED;
4850   tree array_ptr_attrs = NULL_TREE;
4851   int array_parm_static = 0;
4852   bool array_parm_vla_unspec_p = false;
4853   tree returned_attrs = NULL_TREE;
4854   bool bitfield = width != NULL;
4855   tree element_type;
4856   struct c_arg_info *arg_info = 0;
4857   addr_space_t as1, as2, address_space;
4858   location_t loc = UNKNOWN_LOCATION;
4859   const char *errmsg;
4860   tree expr_dummy;
4861   bool expr_const_operands_dummy;
4862   enum c_declarator_kind first_non_attr_kind;
4863
4864   if (TREE_CODE (type) == ERROR_MARK)
4865     return error_mark_node;
4866   if (expr == NULL)
4867     expr = &expr_dummy;
4868   if (expr_const_operands == NULL)
4869     expr_const_operands = &expr_const_operands_dummy;
4870
4871   *expr = declspecs->expr;
4872   *expr_const_operands = declspecs->expr_const_operands;
4873
4874   if (decl_context == FUNCDEF)
4875     funcdef_flag = true, decl_context = NORMAL;
4876
4877   /* Look inside a declarator for the name being declared
4878      and get it as an IDENTIFIER_NODE, for an error message.  */
4879   {
4880     const struct c_declarator *decl = declarator;
4881
4882     first_non_attr_kind = cdk_attrs;
4883     while (decl)
4884       switch (decl->kind)
4885         {
4886         case cdk_array:
4887           loc = decl->id_loc;
4888           /* FALL THRU.  */
4889
4890         case cdk_function:
4891         case cdk_pointer:
4892           funcdef_syntax = (decl->kind == cdk_function);
4893           decl = decl->declarator;
4894           if (first_non_attr_kind == cdk_attrs)
4895             first_non_attr_kind = decl->kind;
4896           break;
4897
4898         case cdk_attrs:
4899           decl = decl->declarator;
4900           break;
4901
4902         case cdk_id:
4903           loc = decl->id_loc;
4904           if (decl->u.id)
4905             name = decl->u.id;
4906           if (first_non_attr_kind == cdk_attrs)
4907             first_non_attr_kind = decl->kind;
4908           decl = 0;
4909           break;
4910
4911         default:
4912           gcc_unreachable ();
4913         }
4914     if (name == 0)
4915       {
4916         gcc_assert (decl_context == PARM
4917                     || decl_context == TYPENAME
4918                     || (decl_context == FIELD
4919                         && declarator->kind == cdk_id));
4920         gcc_assert (!initialized);
4921       }
4922   }
4923
4924   /* A function definition's declarator must have the form of
4925      a function declarator.  */
4926
4927   if (funcdef_flag && !funcdef_syntax)
4928     return 0;
4929
4930   /* If this looks like a function definition, make it one,
4931      even if it occurs where parms are expected.
4932      Then store_parm_decls will reject it and not use it as a parm.  */
4933   if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
4934     decl_context = PARM;
4935
4936   if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
4937     warn_deprecated_use (declspecs->type, declspecs->decl_attr);
4938
4939   if ((decl_context == NORMAL || decl_context == FIELD)
4940       && current_scope == file_scope
4941       && variably_modified_type_p (type, NULL_TREE))
4942     {
4943       if (name)
4944         error_at (loc, "variably modified %qE at file scope", name);
4945       else
4946         error_at (loc, "variably modified field at file scope");
4947       type = integer_type_node;
4948     }
4949
4950   size_varies = C_TYPE_VARIABLE_SIZE (type) != 0;
4951
4952   /* Diagnose defaulting to "int".  */
4953
4954   if (declspecs->default_int_p && !in_system_header)
4955     {
4956       /* Issue a warning if this is an ISO C 99 program or if
4957          -Wreturn-type and this is a function, or if -Wimplicit;
4958          prefer the former warning since it is more explicit.  */
4959       if ((warn_implicit_int || warn_return_type || flag_isoc99)
4960           && funcdef_flag)
4961         warn_about_return_type = 1;
4962       else
4963         {
4964           if (name)
4965             pedwarn_c99 (loc, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4966                          "type defaults to %<int%> in declaration of %qE",
4967                          name);
4968           else
4969             pedwarn_c99 (input_location, flag_isoc99 ? 0 : OPT_Wimplicit_int,
4970                          "type defaults to %<int%> in type name");
4971         }
4972     }
4973
4974   /* Adjust the type if a bit-field is being declared,
4975      -funsigned-bitfields applied and the type is not explicitly
4976      "signed".  */
4977   if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
4978       && TREE_CODE (type) == INTEGER_TYPE)
4979     type = unsigned_type_for (type);
4980
4981   /* Figure out the type qualifiers for the declaration.  There are
4982      two ways a declaration can become qualified.  One is something
4983      like `const int i' where the `const' is explicit.  Another is
4984      something like `typedef const int CI; CI i' where the type of the
4985      declaration contains the `const'.  A third possibility is that
4986      there is a type qualifier on the element type of a typedefed
4987      array type, in which case we should extract that qualifier so
4988      that c_apply_type_quals_to_decl receives the full list of
4989      qualifiers to work with (C90 is not entirely clear about whether
4990      duplicate qualifiers should be diagnosed in this case, but it
4991      seems most appropriate to do so).  */
4992   element_type = strip_array_types (type);
4993   constp = declspecs->const_p + TYPE_READONLY (element_type);
4994   restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
4995   volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
4996   as1 = declspecs->address_space;
4997   as2 = TYPE_ADDR_SPACE (element_type);
4998   address_space = ADDR_SPACE_GENERIC_P (as1)? as2 : as1;
4999
5000   if (pedantic && !flag_isoc99)
5001     {
5002       if (constp > 1)
5003         pedwarn (loc, OPT_pedantic, "duplicate %<const%>");
5004       if (restrictp > 1)
5005         pedwarn (loc, OPT_pedantic, "duplicate %<restrict%>");
5006       if (volatilep > 1)
5007         pedwarn (loc, OPT_pedantic, "duplicate %<volatile%>");
5008     }
5009
5010   if (!ADDR_SPACE_GENERIC_P (as1) && !ADDR_SPACE_GENERIC_P (as2) && as1 != as2)
5011     error_at (loc, "conflicting named address spaces (%s vs %s)",
5012               c_addr_space_name (as1), c_addr_space_name (as2));
5013
5014   if ((TREE_CODE (type) == ARRAY_TYPE
5015        || first_non_attr_kind == cdk_array)
5016       && TYPE_QUALS (element_type))
5017     type = TYPE_MAIN_VARIANT (type);
5018   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
5019                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
5020                 | (volatilep ? TYPE_QUAL_VOLATILE : 0)
5021                 | ENCODE_QUAL_ADDR_SPACE (address_space));
5022
5023   /* Warn about storage classes that are invalid for certain
5024      kinds of declarations (parameters, typenames, etc.).  */
5025
5026   if (funcdef_flag
5027       && (threadp
5028           || storage_class == csc_auto
5029           || storage_class == csc_register
5030           || storage_class == csc_typedef))
5031     {
5032       if (storage_class == csc_auto)
5033         pedwarn (loc,
5034                  (current_scope == file_scope) ? 0 : OPT_pedantic,
5035                  "function definition declared %<auto%>");
5036       if (storage_class == csc_register)
5037         error_at (loc, "function definition declared %<register%>");
5038       if (storage_class == csc_typedef)
5039         error_at (loc, "function definition declared %<typedef%>");
5040       if (threadp)
5041         error_at (loc, "function definition declared %<__thread%>");
5042       threadp = false;
5043       if (storage_class == csc_auto
5044           || storage_class == csc_register
5045           || storage_class == csc_typedef)
5046         storage_class = csc_none;
5047     }
5048   else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
5049     {
5050       if (decl_context == PARM && storage_class == csc_register)
5051         ;
5052       else
5053         {
5054           switch (decl_context)
5055             {
5056             case FIELD:
5057               if (name)
5058                 error_at (loc, "storage class specified for structure "
5059                           "field %qE", name);
5060               else
5061                 error_at (loc, "storage class specified for structure field");
5062               break;
5063             case PARM:
5064               if (name)
5065                 error_at (loc, "storage class specified for parameter %qE",
5066                           name);
5067               else
5068                 error_at (loc, "storage class specified for unnamed parameter");
5069               break;
5070             default:
5071               error_at (loc, "storage class specified for typename");
5072               break;
5073             }
5074           storage_class = csc_none;
5075           threadp = false;
5076         }
5077     }
5078   else if (storage_class == csc_extern
5079            && initialized
5080            && !funcdef_flag)
5081     {
5082       /* 'extern' with initialization is invalid if not at file scope.  */
5083        if (current_scope == file_scope)
5084          {
5085            /* It is fine to have 'extern const' when compiling at C
5086               and C++ intersection.  */
5087            if (!(warn_cxx_compat && constp))
5088              warning_at (loc, 0, "%qE initialized and declared %<extern%>",
5089                          name);
5090          }
5091       else
5092         error_at (loc, "%qE has both %<extern%> and initializer", name);
5093     }
5094   else if (current_scope == file_scope)
5095     {
5096       if (storage_class == csc_auto)
5097         error_at (loc, "file-scope declaration of %qE specifies %<auto%>",
5098                   name);
5099       if (pedantic && storage_class == csc_register)
5100         pedwarn (input_location, OPT_pedantic,
5101                  "file-scope declaration of %qE specifies %<register%>", name);
5102     }
5103   else
5104     {
5105       if (storage_class == csc_extern && funcdef_flag)
5106         error_at (loc, "nested function %qE declared %<extern%>", name);
5107       else if (threadp && storage_class == csc_none)
5108         {
5109           error_at (loc, "function-scope %qE implicitly auto and declared "
5110                     "%<__thread%>",
5111                     name);
5112           threadp = false;
5113         }
5114     }
5115
5116   /* Now figure out the structure of the declarator proper.
5117      Descend through it, creating more complex types, until we reach
5118      the declared identifier (or NULL_TREE, in an absolute declarator).
5119      At each stage we maintain an unqualified version of the type
5120      together with any qualifiers that should be applied to it with
5121      c_build_qualified_type; this way, array types including
5122      multidimensional array types are first built up in unqualified
5123      form and then the qualified form is created with
5124      TYPE_MAIN_VARIANT pointing to the unqualified form.  */
5125
5126   while (declarator && declarator->kind != cdk_id)
5127     {
5128       if (type == error_mark_node)
5129         {
5130           declarator = declarator->declarator;
5131           continue;
5132         }
5133
5134       /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5135          a cdk_pointer (for *...),
5136          a cdk_function (for ...(...)),
5137          a cdk_attrs (for nested attributes),
5138          or a cdk_id (for the name being declared
5139          or the place in an absolute declarator
5140          where the name was omitted).
5141          For the last case, we have just exited the loop.
5142
5143          At this point, TYPE is the type of elements of an array,
5144          or for a function to return, or for a pointer to point to.
5145          After this sequence of ifs, TYPE is the type of the
5146          array or function or pointer, and DECLARATOR has had its
5147          outermost layer removed.  */
5148
5149       if (array_ptr_quals != TYPE_UNQUALIFIED
5150           || array_ptr_attrs != NULL_TREE
5151           || array_parm_static)
5152         {
5153           /* Only the innermost declarator (making a parameter be of
5154              array type which is converted to pointer type)
5155              may have static or type qualifiers.  */
5156           error_at (loc, "static or type qualifiers in non-parameter array declarator");
5157           array_ptr_quals = TYPE_UNQUALIFIED;
5158           array_ptr_attrs = NULL_TREE;
5159           array_parm_static = 0;
5160         }
5161
5162       switch (declarator->kind)
5163         {
5164         case cdk_attrs:
5165           {
5166             /* A declarator with embedded attributes.  */
5167             tree attrs = declarator->u.attrs;
5168             const struct c_declarator *inner_decl;
5169             int attr_flags = 0;
5170             declarator = declarator->declarator;
5171             inner_decl = declarator;
5172             while (inner_decl->kind == cdk_attrs)
5173               inner_decl = inner_decl->declarator;
5174             if (inner_decl->kind == cdk_id)
5175               attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
5176             else if (inner_decl->kind == cdk_function)
5177               attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
5178             else if (inner_decl->kind == cdk_array)
5179               attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
5180             returned_attrs = decl_attributes (&type,
5181                                               chainon (returned_attrs, attrs),
5182                                               attr_flags);
5183             break;
5184           }
5185         case cdk_array:
5186           {
5187             tree itype = NULL_TREE;
5188             tree size = declarator->u.array.dimen;
5189             /* The index is a signed object `sizetype' bits wide.  */
5190             tree index_type = c_common_signed_type (sizetype);
5191
5192             array_ptr_quals = declarator->u.array.quals;
5193             array_ptr_attrs = declarator->u.array.attrs;
5194             array_parm_static = declarator->u.array.static_p;
5195             array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
5196
5197             declarator = declarator->declarator;
5198
5199             /* Check for some types that there cannot be arrays of.  */
5200
5201             if (VOID_TYPE_P (type))
5202               {
5203                 if (name)
5204                   error_at (loc, "declaration of %qE as array of voids", name);
5205                 else
5206                   error_at (loc, "declaration of type name as array of voids");
5207                 type = error_mark_node;
5208               }
5209
5210             if (TREE_CODE (type) == FUNCTION_TYPE)
5211               {
5212                 if (name)
5213                   error_at (loc, "declaration of %qE as array of functions",
5214                             name);
5215                 else
5216                   error_at (loc, "declaration of type name as array of "
5217                             "functions");
5218                 type = error_mark_node;
5219               }
5220
5221             if (pedantic && !in_system_header && flexible_array_type_p (type))
5222               pedwarn (loc, OPT_pedantic,
5223                        "invalid use of structure with flexible array member");
5224
5225             if (size == error_mark_node)
5226               type = error_mark_node;
5227
5228             if (type == error_mark_node)
5229               continue;
5230
5231             /* If size was specified, set ITYPE to a range-type for
5232                that size.  Otherwise, ITYPE remains null.  finish_decl
5233                may figure it out from an initial value.  */
5234
5235             if (size)
5236               {
5237                 bool size_maybe_const = true;
5238                 bool size_int_const = (TREE_CODE (size) == INTEGER_CST
5239                                        && !TREE_OVERFLOW (size));
5240                 bool this_size_varies = false;
5241
5242                 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5243                    lvalue.  */
5244                 STRIP_TYPE_NOPS (size);
5245
5246                 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
5247                   {
5248                     if (name)
5249                       error_at (loc, "size of array %qE has non-integer type",
5250                                 name);
5251                     else
5252                       error_at (loc,
5253                                 "size of unnamed array has non-integer type");
5254                     size = integer_one_node;
5255                   }
5256
5257                 size = c_fully_fold (size, false, &size_maybe_const);
5258
5259                 if (pedantic && size_maybe_const && integer_zerop (size))
5260                   {
5261                     if (name)
5262                       pedwarn (loc, OPT_pedantic,
5263                                "ISO C forbids zero-size array %qE", name);
5264                     else
5265                       pedwarn (loc, OPT_pedantic,
5266                                "ISO C forbids zero-size array");
5267                   }
5268
5269                 if (TREE_CODE (size) == INTEGER_CST && size_maybe_const)
5270                   {
5271                     constant_expression_warning (size);
5272                     if (tree_int_cst_sgn (size) < 0)
5273                       {
5274                         if (name)
5275                           error_at (loc, "size of array %qE is negative", name);
5276                         else
5277                           error_at (loc, "size of unnamed array is negative");
5278                         size = integer_one_node;
5279                       }
5280                     /* Handle a size folded to an integer constant but
5281                        not an integer constant expression.  */
5282                     if (!size_int_const)
5283                       {
5284                         /* If this is a file scope declaration of an
5285                            ordinary identifier, this is invalid code;
5286                            diagnosing it here and not subsequently
5287                            treating the type as variable-length avoids
5288                            more confusing diagnostics later.  */
5289                         if ((decl_context == NORMAL || decl_context == FIELD)
5290                             && current_scope == file_scope)
5291                           pedwarn (input_location, 0,
5292                                    "variably modified %qE at file scope",
5293                                    name);
5294                         else
5295                           this_size_varies = size_varies = true;
5296                         warn_variable_length_array (name, size);
5297                       }
5298                   }
5299                 else if ((decl_context == NORMAL || decl_context == FIELD)
5300                          && current_scope == file_scope)
5301                   {
5302                     error_at (loc, "variably modified %qE at file scope", name);
5303                     size = integer_one_node;
5304                   }
5305                 else
5306                   {
5307                     /* Make sure the array size remains visibly
5308                        nonconstant even if it is (eg) a const variable
5309                        with known value.  */
5310                     this_size_varies = size_varies = true;
5311                     warn_variable_length_array (name, size);
5312                   }
5313
5314                 if (integer_zerop (size) && !this_size_varies)
5315                   {
5316                     /* A zero-length array cannot be represented with
5317                        an unsigned index type, which is what we'll
5318                        get with build_index_type.  Create an
5319                        open-ended range instead.  */
5320                     itype = build_range_type (sizetype, size, NULL_TREE);
5321                   }
5322                 else
5323                   {
5324                     /* Arrange for the SAVE_EXPR on the inside of the
5325                        MINUS_EXPR, which allows the -1 to get folded
5326                        with the +1 that happens when building TYPE_SIZE.  */
5327                     if (size_varies)
5328                       size = save_expr (size);
5329                     if (this_size_varies && TREE_CODE (size) == INTEGER_CST)
5330                       size = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5331                                      integer_zero_node, size);
5332
5333                     /* Compute the maximum valid index, that is, size
5334                        - 1.  Do the calculation in index_type, so that
5335                        if it is a variable the computations will be
5336                        done in the proper mode.  */
5337                     itype = fold_build2_loc (loc, MINUS_EXPR, index_type,
5338                                              convert (index_type, size),
5339                                              convert (index_type,
5340                                                       size_one_node));
5341
5342                     /* The above overflows when size does not fit
5343                        in index_type.
5344                        ???  While a size of INT_MAX+1 technically shouldn't
5345                        cause an overflow (because we subtract 1), handling
5346                        this case seems like an unnecessary complication.  */
5347                     if (TREE_CODE (size) == INTEGER_CST
5348                         && !int_fits_type_p (size, index_type))
5349                       {
5350                         if (name)
5351                           error_at (loc, "size of array %qE is too large",
5352                                     name);
5353                         else
5354                           error_at (loc, "size of unnamed array is too large");
5355                         type = error_mark_node;
5356                         continue;
5357                       }
5358
5359                     itype = build_index_type (itype);
5360                   }
5361                 if (this_size_varies)
5362                   {
5363                     if (*expr)
5364                       *expr = build2 (COMPOUND_EXPR, TREE_TYPE (size),
5365                                       *expr, size);
5366                     else
5367                       *expr = size;
5368                     *expr_const_operands &= size_maybe_const;
5369                   }
5370               }
5371             else if (decl_context == FIELD)
5372               {
5373                 bool flexible_array_member = false;
5374                 if (array_parm_vla_unspec_p)
5375                   /* Field names can in fact have function prototype
5376                      scope so [*] is disallowed here through making
5377                      the field variably modified, not through being
5378                      something other than a declaration with function
5379                      prototype scope.  */
5380                   size_varies = true;
5381                 else
5382                   {
5383                     const struct c_declarator *t = declarator;
5384                     while (t->kind == cdk_attrs)
5385                       t = t->declarator;
5386                     flexible_array_member = (t->kind == cdk_id);
5387                   }
5388                 if (flexible_array_member
5389                     && pedantic && !flag_isoc99 && !in_system_header)
5390                   pedwarn (loc, OPT_pedantic,
5391                            "ISO C90 does not support flexible array members");
5392
5393                 /* ISO C99 Flexible array members are effectively
5394                    identical to GCC's zero-length array extension.  */
5395                 if (flexible_array_member || array_parm_vla_unspec_p)
5396                   itype = build_range_type (sizetype, size_zero_node,
5397                                             NULL_TREE);
5398               }
5399             else if (decl_context == PARM)
5400               {
5401                 if (array_parm_vla_unspec_p)
5402                   {
5403                     itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
5404                     size_varies = true;
5405                   }
5406               }
5407             else if (decl_context == TYPENAME)
5408               {
5409                 if (array_parm_vla_unspec_p)
5410                   {
5411                     /* C99 6.7.5.2p4 */
5412                     warning (0, "%<[*]%> not in a declaration");
5413                     /* We use this to avoid messing up with incomplete
5414                        array types of the same type, that would
5415                        otherwise be modified below.  */
5416                     itype = build_range_type (sizetype, size_zero_node,
5417                                               NULL_TREE);
5418                     size_varies = true;
5419                   }
5420               }
5421
5422             /* Complain about arrays of incomplete types.  */
5423             if (!COMPLETE_TYPE_P (type))
5424               {
5425                 error_at (loc, "array type has incomplete element type");
5426                 type = error_mark_node;
5427               }
5428             else
5429             /* When itype is NULL, a shared incomplete array type is
5430                returned for all array of a given type.  Elsewhere we
5431                make sure we don't complete that type before copying
5432                it, but here we want to make sure we don't ever
5433                modify the shared type, so we gcc_assert (itype)
5434                below.  */
5435               {
5436                 addr_space_t as = DECODE_QUAL_ADDR_SPACE (type_quals);
5437                 if (!ADDR_SPACE_GENERIC_P (as) && as != TYPE_ADDR_SPACE (type))
5438                   type = build_qualified_type (type,
5439                                                ENCODE_QUAL_ADDR_SPACE (as));
5440
5441                 type = build_array_type (type, itype);
5442               }
5443
5444             if (type != error_mark_node)
5445               {
5446                 if (size_varies)
5447                   {
5448                     /* It is ok to modify type here even if itype is
5449                        NULL: if size_varies, we're in a
5450                        multi-dimensional array and the inner type has
5451                        variable size, so the enclosing shared array type
5452                        must too.  */
5453                     if (size && TREE_CODE (size) == INTEGER_CST)
5454                       type
5455                         = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5456                     C_TYPE_VARIABLE_SIZE (type) = 1;
5457                   }
5458
5459                 /* The GCC extension for zero-length arrays differs from
5460                    ISO flexible array members in that sizeof yields
5461                    zero.  */
5462                 if (size && integer_zerop (size))
5463                   {
5464                     gcc_assert (itype);
5465                     type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5466                     TYPE_SIZE (type) = bitsize_zero_node;
5467                     TYPE_SIZE_UNIT (type) = size_zero_node;
5468                     SET_TYPE_STRUCTURAL_EQUALITY (type);
5469                   }
5470                 if (array_parm_vla_unspec_p)
5471                   {
5472                     gcc_assert (itype);
5473                     /* The type is complete.  C99 6.7.5.2p4  */
5474                     type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
5475                     TYPE_SIZE (type) = bitsize_zero_node;
5476                     TYPE_SIZE_UNIT (type) = size_zero_node;
5477                     SET_TYPE_STRUCTURAL_EQUALITY (type);
5478                   }
5479               }
5480
5481             if (decl_context != PARM
5482                 && (array_ptr_quals != TYPE_UNQUALIFIED
5483                     || array_ptr_attrs != NULL_TREE
5484                     || array_parm_static))
5485               {
5486                 error_at (loc, "static or type qualifiers in non-parameter array declarator");
5487                 array_ptr_quals = TYPE_UNQUALIFIED;
5488                 array_ptr_attrs = NULL_TREE;
5489                 array_parm_static = 0;
5490               }
5491             break;
5492           }
5493         case cdk_function:
5494           {
5495             /* Say it's a definition only for the declarator closest
5496                to the identifier, apart possibly from some
5497                attributes.  */
5498             bool really_funcdef = false;
5499             tree arg_types;
5500             if (funcdef_flag)
5501               {
5502                 const struct c_declarator *t = declarator->declarator;
5503                 while (t->kind == cdk_attrs)
5504                   t = t->declarator;
5505                 really_funcdef = (t->kind == cdk_id);
5506               }
5507
5508             /* Declaring a function type.  Make sure we have a valid
5509                type for the function to return.  */
5510             if (type == error_mark_node)
5511               continue;
5512
5513             size_varies = false;
5514
5515             /* Warn about some types functions can't return.  */
5516             if (TREE_CODE (type) == FUNCTION_TYPE)
5517               {
5518                 if (name)
5519                   error_at (loc, "%qE declared as function returning a "
5520                                  "function", name);
5521                 else
5522                   error_at (loc, "type name declared as function "
5523                             "returning a function");
5524                 type = integer_type_node;
5525               }
5526             if (TREE_CODE (type) == ARRAY_TYPE)
5527               {
5528                 if (name)
5529                   error_at (loc, "%qE declared as function returning an array",
5530                             name);
5531                 else
5532                   error_at (loc, "type name declared as function returning "
5533                             "an array");
5534                 type = integer_type_node;
5535               }
5536             errmsg = targetm.invalid_return_type (type);
5537             if (errmsg)
5538               {
5539                 error (errmsg);
5540                 type = integer_type_node;
5541               }
5542
5543             /* Construct the function type and go to the next
5544                inner layer of declarator.  */
5545             arg_info = declarator->u.arg_info;
5546             arg_types = grokparms (arg_info, really_funcdef);
5547
5548             /* Type qualifiers before the return type of the function
5549                qualify the return type, not the function type.  */
5550             if (type_quals)
5551               {
5552                 /* Type qualifiers on a function return type are
5553                    normally permitted by the standard but have no
5554                    effect, so give a warning at -Wreturn-type.
5555                    Qualifiers on a void return type are banned on
5556                    function definitions in ISO C; GCC used to used
5557                    them for noreturn functions.  */
5558                 if (VOID_TYPE_P (type) && really_funcdef)
5559                   pedwarn (loc, 0,
5560                            "function definition has qualified void return type");
5561                 else
5562                   warning_at (loc, OPT_Wignored_qualifiers,
5563                            "type qualifiers ignored on function return type");
5564
5565                 type = c_build_qualified_type (type, type_quals);
5566               }
5567             type_quals = TYPE_UNQUALIFIED;
5568
5569             type = build_function_type (type, arg_types);
5570             declarator = declarator->declarator;
5571
5572             /* Set the TYPE_CONTEXTs for each tagged type which is local to
5573                the formal parameter list of this FUNCTION_TYPE to point to
5574                the FUNCTION_TYPE node itself.  */
5575             {
5576               c_arg_tag *tag;
5577               unsigned ix;
5578
5579               FOR_EACH_VEC_ELT_REVERSE (c_arg_tag, arg_info->tags, ix, tag)
5580                 TYPE_CONTEXT (tag->type) = type;
5581             }
5582             break;
5583           }
5584         case cdk_pointer:
5585           {
5586             /* Merge any constancy or volatility into the target type
5587                for the pointer.  */
5588
5589             if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5590                 && type_quals)
5591               pedwarn (loc, OPT_pedantic,
5592                        "ISO C forbids qualified function types");
5593             if (type_quals)
5594               type = c_build_qualified_type (type, type_quals);
5595             size_varies = false;
5596
5597             /* When the pointed-to type involves components of variable size,
5598                care must be taken to ensure that the size evaluation code is
5599                emitted early enough to dominate all the possible later uses
5600                and late enough for the variables on which it depends to have
5601                been assigned.
5602
5603                This is expected to happen automatically when the pointed-to
5604                type has a name/declaration of it's own, but special attention
5605                is required if the type is anonymous.
5606
5607                We handle the NORMAL and FIELD contexts here by attaching an
5608                artificial TYPE_DECL to such pointed-to type.  This forces the
5609                sizes evaluation at a safe point and ensures it is not deferred
5610                until e.g. within a deeper conditional context.
5611
5612                We expect nothing to be needed here for PARM or TYPENAME.
5613                Pushing a TYPE_DECL at this point for TYPENAME would actually
5614                be incorrect, as we might be in the middle of an expression
5615                with side effects on the pointed-to type size "arguments" prior
5616                to the pointer declaration point and the fake TYPE_DECL in the
5617                enclosing context would force the size evaluation prior to the
5618                side effects.  */
5619
5620             if (!TYPE_NAME (type)
5621                 && (decl_context == NORMAL || decl_context == FIELD)
5622                 && variably_modified_type_p (type, NULL_TREE))
5623               {
5624                 tree decl = build_decl (loc, TYPE_DECL, NULL_TREE, type);
5625                 DECL_ARTIFICIAL (decl) = 1;
5626                 pushdecl (decl);
5627                 finish_decl (decl, loc, NULL_TREE, NULL_TREE, NULL_TREE);
5628                 TYPE_NAME (type) = decl;
5629               }
5630
5631             type = build_pointer_type (type);
5632
5633             /* Process type qualifiers (such as const or volatile)
5634                that were given inside the `*'.  */
5635             type_quals = declarator->u.pointer_quals;
5636
5637             declarator = declarator->declarator;
5638             break;
5639           }
5640         default:
5641           gcc_unreachable ();
5642         }
5643     }
5644   *decl_attrs = chainon (returned_attrs, *decl_attrs);
5645
5646   /* Now TYPE has the actual type, apart from any qualifiers in
5647      TYPE_QUALS.  */
5648
5649   /* Warn about address space used for things other than static memory or
5650      pointers.  */
5651   address_space = DECODE_QUAL_ADDR_SPACE (type_quals);
5652   if (!ADDR_SPACE_GENERIC_P (address_space))
5653     {
5654       if (decl_context == NORMAL)
5655         {
5656           switch (storage_class)
5657             {
5658             case csc_auto:
5659               error ("%qs combined with %<auto%> qualifier for %qE",
5660                      c_addr_space_name (address_space), name);
5661               break;
5662             case csc_register:
5663               error ("%qs combined with %<register%> qualifier for %qE",
5664                      c_addr_space_name (address_space), name);
5665               break;
5666             case csc_none:
5667               if (current_function_scope)
5668                 {
5669                   error ("%qs specified for auto variable %qE",
5670                          c_addr_space_name (address_space), name);
5671                   break;
5672                 }
5673               break;
5674             case csc_static:
5675             case csc_extern:
5676             case csc_typedef:
5677               break;
5678             default:
5679               gcc_unreachable ();
5680             }
5681         }
5682       else if (decl_context == PARM && TREE_CODE (type) != ARRAY_TYPE)
5683         {
5684           if (name)
5685             error ("%qs specified for parameter %qE",
5686                    c_addr_space_name (address_space), name);
5687           else
5688             error ("%qs specified for unnamed parameter",
5689                    c_addr_space_name (address_space));
5690         }
5691       else if (decl_context == FIELD)
5692         {
5693           if (name)
5694             error ("%qs specified for structure field %qE",
5695                    c_addr_space_name (address_space), name);
5696           else
5697             error ("%qs specified for structure field",
5698                    c_addr_space_name (address_space));
5699         }
5700     }
5701
5702   /* Check the type and width of a bit-field.  */
5703   if (bitfield)
5704     check_bitfield_type_and_width (&type, width, name);
5705
5706   /* Did array size calculations overflow?  */
5707
5708   if (TREE_CODE (type) == ARRAY_TYPE
5709       && COMPLETE_TYPE_P (type)
5710       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
5711       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
5712     {
5713       if (name)
5714         error_at (loc, "size of array %qE is too large", name);
5715       else
5716         error_at (loc, "size of unnamed array is too large");
5717       /* If we proceed with the array type as it is, we'll eventually
5718          crash in tree_low_cst().  */
5719       type = error_mark_node;
5720     }
5721
5722   /* If this is declaring a typedef name, return a TYPE_DECL.  */
5723
5724   if (storage_class == csc_typedef)
5725     {
5726       tree decl;
5727       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5728           && type_quals)
5729         pedwarn (loc, OPT_pedantic,
5730                  "ISO C forbids qualified function types");
5731       if (type_quals)
5732         type = c_build_qualified_type (type, type_quals);
5733       decl = build_decl (declarator->id_loc,
5734                          TYPE_DECL, declarator->u.id, type);
5735       if (declspecs->explicit_signed_p)
5736         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
5737       if (declspecs->inline_p)
5738         pedwarn (loc, 0,"typedef %q+D declared %<inline%>", decl);
5739
5740       if (warn_cxx_compat && declarator->u.id != NULL_TREE)
5741         {
5742           struct c_binding *b = I_TAG_BINDING (declarator->u.id);
5743
5744           if (b != NULL
5745               && b->decl != NULL_TREE
5746               && (B_IN_CURRENT_SCOPE (b)
5747                   || (current_scope == file_scope && B_IN_EXTERNAL_SCOPE (b)))
5748               && TYPE_MAIN_VARIANT (b->decl) != TYPE_MAIN_VARIANT (type))
5749             {
5750               warning_at (declarator->id_loc, OPT_Wc___compat,
5751                           ("using %qD as both a typedef and a tag is "
5752                            "invalid in C++"),
5753                           decl);
5754               if (b->locus != UNKNOWN_LOCATION)
5755                 inform (b->locus, "originally defined here");
5756             }
5757         }
5758
5759       return decl;
5760     }
5761
5762   /* If this is a type name (such as, in a cast or sizeof),
5763      compute the type and return it now.  */
5764
5765   if (decl_context == TYPENAME)
5766     {
5767       /* Note that the grammar rejects storage classes in typenames
5768          and fields.  */
5769       gcc_assert (storage_class == csc_none && !threadp
5770                   && !declspecs->inline_p);
5771       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
5772           && type_quals)
5773         pedwarn (loc, OPT_pedantic,
5774                  "ISO C forbids const or volatile function types");
5775       if (type_quals)
5776         type = c_build_qualified_type (type, type_quals);
5777       return type;
5778     }
5779
5780   if (pedantic && decl_context == FIELD
5781       && variably_modified_type_p (type, NULL_TREE))
5782     {
5783       /* C99 6.7.2.1p8 */
5784       pedwarn (loc, OPT_pedantic, "a member of a structure or union cannot "
5785                "have a variably modified type");
5786     }
5787
5788   /* Aside from typedefs and type names (handle above),
5789      `void' at top level (not within pointer)
5790      is allowed only in public variables.
5791      We don't complain about parms either, but that is because
5792      a better error message can be made later.  */
5793
5794   if (VOID_TYPE_P (type) && decl_context != PARM
5795       && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
5796             && (storage_class == csc_extern
5797                 || (current_scope == file_scope
5798                     && !(storage_class == csc_static
5799                          || storage_class == csc_register)))))
5800     {
5801       error_at (loc, "variable or field %qE declared void", name);
5802       type = integer_type_node;
5803     }
5804
5805   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
5806      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
5807
5808   {
5809     tree decl;
5810
5811     if (decl_context == PARM)
5812       {
5813         tree promoted_type;
5814
5815         /* A parameter declared as an array of T is really a pointer to T.
5816            One declared as a function is really a pointer to a function.  */
5817
5818         if (TREE_CODE (type) == ARRAY_TYPE)
5819           {
5820             /* Transfer const-ness of array into that of type pointed to.  */
5821             type = TREE_TYPE (type);
5822             if (type_quals)
5823               type = c_build_qualified_type (type, type_quals);
5824             type = build_pointer_type (type);
5825             type_quals = array_ptr_quals;
5826             if (type_quals)
5827               type = c_build_qualified_type (type, type_quals);
5828
5829             /* We don't yet implement attributes in this context.  */
5830             if (array_ptr_attrs != NULL_TREE)
5831               warning_at (loc, OPT_Wattributes,
5832                           "attributes in parameter array declarator ignored");
5833
5834             size_varies = false;
5835           }
5836         else if (TREE_CODE (type) == FUNCTION_TYPE)
5837           {
5838             if (type_quals)
5839               pedwarn (loc, OPT_pedantic,
5840                        "ISO C forbids qualified function types");
5841             if (type_quals)
5842               type = c_build_qualified_type (type, type_quals);
5843             type = build_pointer_type (type);
5844             type_quals = TYPE_UNQUALIFIED;
5845           }
5846         else if (type_quals)
5847           type = c_build_qualified_type (type, type_quals);
5848
5849         decl = build_decl (declarator->id_loc,
5850                            PARM_DECL, declarator->u.id, type);
5851         if (size_varies)
5852           C_DECL_VARIABLE_SIZE (decl) = 1;
5853
5854         /* Compute the type actually passed in the parmlist,
5855            for the case where there is no prototype.
5856            (For example, shorts and chars are passed as ints.)
5857            When there is a prototype, this is overridden later.  */
5858
5859         if (type == error_mark_node)
5860           promoted_type = type;
5861         else
5862           promoted_type = c_type_promotes_to (type);
5863
5864         DECL_ARG_TYPE (decl) = promoted_type;
5865         if (declspecs->inline_p)
5866           pedwarn (loc, 0, "parameter %q+D declared %<inline%>", decl);
5867       }
5868     else if (decl_context == FIELD)
5869       {
5870         /* Note that the grammar rejects storage classes in typenames
5871            and fields.  */
5872         gcc_assert (storage_class == csc_none && !threadp
5873                     && !declspecs->inline_p);
5874
5875         /* Structure field.  It may not be a function.  */
5876
5877         if (TREE_CODE (type) == FUNCTION_TYPE)
5878           {
5879             error_at (loc, "field %qE declared as a function", name);
5880             type = build_pointer_type (type);
5881           }
5882         else if (TREE_CODE (type) != ERROR_MARK
5883                  && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
5884           {
5885             if (name)
5886               error_at (loc, "field %qE has incomplete type", name);
5887             else
5888               error_at (loc, "unnamed field has incomplete type");
5889             type = error_mark_node;
5890           }
5891         type = c_build_qualified_type (type, type_quals);
5892         decl = build_decl (declarator->id_loc,
5893                            FIELD_DECL, declarator->u.id, type);
5894         DECL_NONADDRESSABLE_P (decl) = bitfield;
5895         if (bitfield && !declarator->u.id)
5896           TREE_NO_WARNING (decl) = 1;
5897
5898         if (size_varies)
5899           C_DECL_VARIABLE_SIZE (decl) = 1;
5900       }
5901     else if (TREE_CODE (type) == FUNCTION_TYPE)
5902       {
5903         if (storage_class == csc_register || threadp)
5904           {
5905             error_at (loc, "invalid storage class for function %qE", name);
5906           }
5907         else if (current_scope != file_scope)
5908           {
5909             /* Function declaration not at file scope.  Storage
5910                classes other than `extern' are not allowed, C99
5911                6.7.1p5, and `extern' makes no difference.  However,
5912                GCC allows 'auto', perhaps with 'inline', to support
5913                nested functions.  */
5914             if (storage_class == csc_auto)
5915                 pedwarn (loc, OPT_pedantic,
5916                          "invalid storage class for function %qE", name);
5917             else if (storage_class == csc_static)
5918               {
5919                 error_at (loc, "invalid storage class for function %qE", name);
5920                 if (funcdef_flag)
5921                   storage_class = declspecs->storage_class = csc_none;
5922                 else
5923                   return 0;
5924               }
5925           }
5926
5927         decl = build_decl (declarator->id_loc,
5928                            FUNCTION_DECL, declarator->u.id, type);
5929         decl = build_decl_attribute_variant (decl, decl_attr);
5930
5931         if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
5932           pedwarn (loc, OPT_pedantic,
5933                    "ISO C forbids qualified function types");
5934
5935         /* Every function declaration is an external reference
5936            (DECL_EXTERNAL) except for those which are not at file
5937            scope and are explicitly declared "auto".  This is
5938            forbidden by standard C (C99 6.7.1p5) and is interpreted by
5939            GCC to signify a forward declaration of a nested function.  */
5940         if (storage_class == csc_auto && current_scope != file_scope)
5941           DECL_EXTERNAL (decl) = 0;
5942         /* In C99, a function which is declared 'inline' with 'extern'
5943            is not an external reference (which is confusing).  It
5944            means that the later definition of the function must be output
5945            in this file, C99 6.7.4p6.  In GNU C89, a function declared
5946            'extern inline' is an external reference.  */
5947         else if (declspecs->inline_p && storage_class != csc_static)
5948           DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
5949                                   == flag_gnu89_inline);
5950         else
5951           DECL_EXTERNAL (decl) = !initialized;
5952
5953         /* Record absence of global scope for `static' or `auto'.  */
5954         TREE_PUBLIC (decl)
5955           = !(storage_class == csc_static || storage_class == csc_auto);
5956
5957         /* For a function definition, record the argument information
5958            block where store_parm_decls will look for it.  */
5959         if (funcdef_flag)
5960           current_function_arg_info = arg_info;
5961
5962         if (declspecs->default_int_p)
5963           C_FUNCTION_IMPLICIT_INT (decl) = 1;
5964
5965         /* Record presence of `inline', if it is reasonable.  */
5966         if (flag_hosted && MAIN_NAME_P (declarator->u.id))
5967           {
5968             if (declspecs->inline_p)
5969               pedwarn (loc, 0, "cannot inline function %<main%>");
5970           }
5971         else if (declspecs->inline_p)
5972           /* Record that the function is declared `inline'.  */
5973           DECL_DECLARED_INLINE_P (decl) = 1;
5974       }
5975     else
5976       {
5977         /* It's a variable.  */
5978         /* An uninitialized decl with `extern' is a reference.  */
5979         int extern_ref = !initialized && storage_class == csc_extern;
5980
5981         type = c_build_qualified_type (type, type_quals);
5982
5983         /* C99 6.2.2p7: It is invalid (compile-time undefined
5984            behavior) to create an 'extern' declaration for a
5985            variable if there is a global declaration that is
5986            'static' and the global declaration is not visible.
5987            (If the static declaration _is_ currently visible,
5988            the 'extern' declaration is taken to refer to that decl.) */
5989         if (extern_ref && current_scope != file_scope)
5990           {
5991             tree global_decl  = identifier_global_value (declarator->u.id);
5992             tree visible_decl = lookup_name (declarator->u.id);
5993
5994             if (global_decl
5995                 && global_decl != visible_decl
5996                 && TREE_CODE (global_decl) == VAR_DECL
5997                 && !TREE_PUBLIC (global_decl))
5998               error_at (loc, "variable previously declared %<static%> "
5999                         "redeclared %<extern%>");
6000           }
6001
6002         decl = build_decl (declarator->id_loc,
6003                            VAR_DECL, declarator->u.id, type);
6004         if (size_varies)
6005           C_DECL_VARIABLE_SIZE (decl) = 1;
6006
6007         if (declspecs->inline_p)
6008           pedwarn (loc, 0, "variable %q+D declared %<inline%>", decl);
6009
6010         /* At file scope, an initialized extern declaration may follow
6011            a static declaration.  In that case, DECL_EXTERNAL will be
6012            reset later in start_decl.  */
6013         DECL_EXTERNAL (decl) = (storage_class == csc_extern);
6014
6015         /* At file scope, the presence of a `static' or `register' storage
6016            class specifier, or the absence of all storage class specifiers
6017            makes this declaration a definition (perhaps tentative).  Also,
6018            the absence of `static' makes it public.  */
6019         if (current_scope == file_scope)
6020           {
6021             TREE_PUBLIC (decl) = storage_class != csc_static;
6022             TREE_STATIC (decl) = !extern_ref;
6023           }
6024         /* Not at file scope, only `static' makes a static definition.  */
6025         else
6026           {
6027             TREE_STATIC (decl) = (storage_class == csc_static);
6028             TREE_PUBLIC (decl) = extern_ref;
6029           }
6030
6031         if (threadp)
6032           DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6033       }
6034
6035     if ((storage_class == csc_extern
6036          || (storage_class == csc_none
6037              && TREE_CODE (type) == FUNCTION_TYPE
6038              && !funcdef_flag))
6039         && variably_modified_type_p (type, NULL_TREE))
6040       {
6041         /* C99 6.7.5.2p2 */
6042         if (TREE_CODE (type) == FUNCTION_TYPE)
6043           error_at (loc, "non-nested function with variably modified type");
6044         else
6045           error_at (loc, "object with variably modified type must have "
6046                     "no linkage");
6047       }
6048
6049     /* Record `register' declaration for warnings on &
6050        and in case doing stupid register allocation.  */
6051
6052     if (storage_class == csc_register)
6053       {
6054         C_DECL_REGISTER (decl) = 1;
6055         DECL_REGISTER (decl) = 1;
6056       }
6057
6058     /* Record constancy and volatility.  */
6059     c_apply_type_quals_to_decl (type_quals, decl);
6060
6061     /* If a type has volatile components, it should be stored in memory.
6062        Otherwise, the fact that those components are volatile
6063        will be ignored, and would even crash the compiler.
6064        Of course, this only makes sense on  VAR,PARM, and RESULT decl's.   */
6065     if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
6066         && (TREE_CODE (decl) == VAR_DECL ||  TREE_CODE (decl) == PARM_DECL
6067           || TREE_CODE (decl) == RESULT_DECL))
6068       {
6069         /* It is not an error for a structure with volatile fields to
6070            be declared register, but reset DECL_REGISTER since it
6071            cannot actually go in a register.  */
6072         int was_reg = C_DECL_REGISTER (decl);
6073         C_DECL_REGISTER (decl) = 0;
6074         DECL_REGISTER (decl) = 0;
6075         c_mark_addressable (decl);
6076         C_DECL_REGISTER (decl) = was_reg;
6077       }
6078
6079   /* This is the earliest point at which we might know the assembler
6080      name of a variable.  Thus, if it's known before this, die horribly.  */
6081     gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
6082
6083     if (warn_cxx_compat
6084         && TREE_CODE (decl) == VAR_DECL
6085         && TREE_PUBLIC (decl)
6086         && TREE_STATIC (decl)
6087         && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
6088             || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
6089             || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
6090         && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
6091       warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
6092                   ("non-local variable %qD with anonymous type is "
6093                    "questionable in C++"),
6094                   decl);
6095
6096     return decl;
6097   }
6098 }
6099 \f
6100 /* Decode the parameter-list info for a function type or function definition.
6101    The argument is the value returned by `get_parm_info' (or made in c-parse.c
6102    if there is an identifier list instead of a parameter decl list).
6103    These two functions are separate because when a function returns
6104    or receives functions then each is called multiple times but the order
6105    of calls is different.  The last call to `grokparms' is always the one
6106    that contains the formal parameter names of a function definition.
6107
6108    Return a list of arg types to use in the FUNCTION_TYPE for this function.
6109
6110    FUNCDEF_FLAG is true for a function definition, false for
6111    a mere declaration.  A nonempty identifier-list gets an error message
6112    when FUNCDEF_FLAG is false.  */
6113
6114 static tree
6115 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
6116 {
6117   tree arg_types = arg_info->types;
6118
6119   if (funcdef_flag && arg_info->had_vla_unspec)
6120     {
6121       /* A function definition isn't function prototype scope C99 6.2.1p4.  */
6122       /* C99 6.7.5.2p4 */
6123       error ("%<[*]%> not allowed in other than function prototype scope");
6124     }
6125
6126   if (arg_types == 0 && !funcdef_flag && !in_system_header)
6127     warning (OPT_Wstrict_prototypes,
6128              "function declaration isn%'t a prototype");
6129
6130   if (arg_types == error_mark_node)
6131     return 0;  /* don't set TYPE_ARG_TYPES in this case */
6132
6133   else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
6134     {
6135       if (!funcdef_flag)
6136         {
6137           pedwarn (input_location, 0, "parameter names (without types) in function declaration");
6138           arg_info->parms = NULL_TREE;
6139         }
6140       else
6141         arg_info->parms = arg_info->types;
6142
6143       arg_info->types = 0;
6144       return 0;
6145     }
6146   else
6147     {
6148       tree parm, type, typelt;
6149       unsigned int parmno;
6150       const char *errmsg;
6151
6152       /* If there is a parameter of incomplete type in a definition,
6153          this is an error.  In a declaration this is valid, and a
6154          struct or union type may be completed later, before any calls
6155          or definition of the function.  In the case where the tag was
6156          first declared within the parameter list, a warning has
6157          already been given.  If a parameter has void type, then
6158          however the function cannot be defined or called, so
6159          warn.  */
6160
6161       for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
6162            parm;
6163            parm = DECL_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
6164         {
6165           type = TREE_VALUE (typelt);
6166           if (type == error_mark_node)
6167             continue;
6168
6169           if (!COMPLETE_TYPE_P (type))
6170             {
6171               if (funcdef_flag)
6172                 {
6173                   if (DECL_NAME (parm))
6174                     error_at (input_location,
6175                               "parameter %u (%q+D) has incomplete type",
6176                               parmno, parm);
6177                   else
6178                     error_at (DECL_SOURCE_LOCATION (parm),
6179                               "parameter %u has incomplete type",
6180                               parmno);
6181
6182                   TREE_VALUE (typelt) = error_mark_node;
6183                   TREE_TYPE (parm) = error_mark_node;
6184                   arg_types = NULL_TREE;
6185                 }
6186               else if (VOID_TYPE_P (type))
6187                 {
6188                   if (DECL_NAME (parm))
6189                     warning_at (input_location, 0,
6190                                 "parameter %u (%q+D) has void type",
6191                                 parmno, parm);
6192                   else
6193                     warning_at (DECL_SOURCE_LOCATION (parm), 0,
6194                                 "parameter %u has void type",
6195                                 parmno);
6196                 }
6197             }
6198
6199           errmsg = targetm.invalid_parameter_type (type);
6200           if (errmsg)
6201             {
6202               error (errmsg);
6203               TREE_VALUE (typelt) = error_mark_node;
6204               TREE_TYPE (parm) = error_mark_node;
6205               arg_types = NULL_TREE;
6206             }
6207
6208           if (DECL_NAME (parm) && TREE_USED (parm))
6209             warn_if_shadowing (parm);
6210         }
6211       return arg_types;
6212     }
6213 }
6214
6215 /* Allocate and initialize a c_arg_info structure from the parser's
6216    obstack.  */
6217
6218 struct c_arg_info *
6219 build_arg_info (void)
6220 {
6221   struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
6222   ret->parms = NULL_TREE;
6223   ret->tags = NULL;
6224   ret->types = NULL_TREE;
6225   ret->others = NULL_TREE;
6226   ret->pending_sizes = NULL;
6227   ret->had_vla_unspec = 0;
6228   return ret;
6229 }
6230
6231 /* Take apart the current scope and return a c_arg_info structure with
6232    info on a parameter list just parsed.
6233
6234    This structure is later fed to 'grokparms' and 'store_parm_decls'.
6235
6236    ELLIPSIS being true means the argument list ended in '...' so don't
6237    append a sentinel (void_list_node) to the end of the type-list.
6238
6239    EXPR is NULL or an expression that needs to be evaluated for the
6240    side effects of array size expressions in the parameters.  */
6241
6242 struct c_arg_info *
6243 get_parm_info (bool ellipsis, tree expr)
6244 {
6245   struct c_binding *b = current_scope->bindings;
6246   struct c_arg_info *arg_info = build_arg_info ();
6247
6248   tree parms    = 0;
6249   VEC(c_arg_tag,gc) *tags = NULL;
6250   tree types    = 0;
6251   tree others   = 0;
6252
6253   static bool explained_incomplete_types = false;
6254   bool gave_void_only_once_err = false;
6255
6256   arg_info->had_vla_unspec = current_scope->had_vla_unspec;
6257
6258   /* The bindings in this scope must not get put into a block.
6259      We will take care of deleting the binding nodes.  */
6260   current_scope->bindings = 0;
6261
6262   /* This function is only called if there was *something* on the
6263      parameter list.  */
6264   gcc_assert (b);
6265
6266   /* A parameter list consisting solely of 'void' indicates that the
6267      function takes no arguments.  But if the 'void' is qualified
6268      (by 'const' or 'volatile'), or has a storage class specifier
6269      ('register'), then the behavior is undefined; issue an error.
6270      Typedefs for 'void' are OK (see DR#157).  */
6271   if (b->prev == 0                          /* one binding */
6272       && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
6273       && !DECL_NAME (b->decl)               /* anonymous */
6274       && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
6275     {
6276       if (TREE_THIS_VOLATILE (b->decl)
6277           || TREE_READONLY (b->decl)
6278           || C_DECL_REGISTER (b->decl))
6279         error ("%<void%> as only parameter may not be qualified");
6280
6281       /* There cannot be an ellipsis.  */
6282       if (ellipsis)
6283         error ("%<void%> must be the only parameter");
6284
6285       arg_info->types = void_list_node;
6286       return arg_info;
6287     }
6288
6289   if (!ellipsis)
6290     types = void_list_node;
6291
6292   /* Break up the bindings list into parms, tags, types, and others;
6293      apply sanity checks; purge the name-to-decl bindings.  */
6294   while (b)
6295     {
6296       tree decl = b->decl;
6297       tree type = TREE_TYPE (decl);
6298       c_arg_tag *tag;
6299       const char *keyword;
6300
6301       switch (TREE_CODE (decl))
6302         {
6303         case PARM_DECL:
6304           if (b->id)
6305             {
6306               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6307               I_SYMBOL_BINDING (b->id) = b->shadowed;
6308             }
6309
6310           /* Check for forward decls that never got their actual decl.  */
6311           if (TREE_ASM_WRITTEN (decl))
6312             error ("parameter %q+D has just a forward declaration", decl);
6313           /* Check for (..., void, ...) and issue an error.  */
6314           else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
6315             {
6316               if (!gave_void_only_once_err)
6317                 {
6318                   error ("%<void%> must be the only parameter");
6319                   gave_void_only_once_err = true;
6320                 }
6321             }
6322           else
6323             {
6324               /* Valid parameter, add it to the list.  */
6325               DECL_CHAIN (decl) = parms;
6326               parms = decl;
6327
6328               /* Since there is a prototype, args are passed in their
6329                  declared types.  The back end may override this later.  */
6330               DECL_ARG_TYPE (decl) = type;
6331               types = tree_cons (0, type, types);
6332             }
6333           break;
6334
6335         case ENUMERAL_TYPE: keyword = "enum"; goto tag;
6336         case UNION_TYPE:    keyword = "union"; goto tag;
6337         case RECORD_TYPE:   keyword = "struct"; goto tag;
6338         tag:
6339           /* Types may not have tag-names, in which case the type
6340              appears in the bindings list with b->id NULL.  */
6341           if (b->id)
6342             {
6343               gcc_assert (I_TAG_BINDING (b->id) == b);
6344               I_TAG_BINDING (b->id) = b->shadowed;
6345             }
6346
6347           /* Warn about any struct, union or enum tags defined in a
6348              parameter list.  The scope of such types is limited to
6349              the parameter list, which is rarely if ever desirable
6350              (it's impossible to call such a function with type-
6351              correct arguments).  An anonymous union parm type is
6352              meaningful as a GNU extension, so don't warn for that.  */
6353           if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
6354             {
6355               if (b->id)
6356                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
6357                 warning (0, "%<%s %E%> declared inside parameter list",
6358                          keyword, b->id);
6359               else
6360                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
6361                 warning (0, "anonymous %s declared inside parameter list",
6362                          keyword);
6363
6364               if (!explained_incomplete_types)
6365                 {
6366                   warning (0, "its scope is only this definition or declaration,"
6367                            " which is probably not what you want");
6368                   explained_incomplete_types = true;
6369                 }
6370             }
6371
6372           tag = VEC_safe_push (c_arg_tag, gc, tags, NULL);
6373           tag->id = b->id;
6374           tag->type = decl;
6375           break;
6376
6377         case CONST_DECL:
6378         case TYPE_DECL:
6379         case FUNCTION_DECL:
6380           /* CONST_DECLs appear here when we have an embedded enum,
6381              and TYPE_DECLs appear here when we have an embedded struct
6382              or union.  No warnings for this - we already warned about the
6383              type itself.  FUNCTION_DECLs appear when there is an implicit
6384              function declaration in the parameter list.  */
6385
6386           /* When we reinsert this decl in the function body, we need
6387              to reconstruct whether it was marked as nested.  */
6388           gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6389                       ? b->nested
6390                       : !b->nested);
6391           DECL_CHAIN (decl) = others;
6392           others = decl;
6393           /* fall through */
6394
6395         case ERROR_MARK:
6396           /* error_mark_node appears here when we have an undeclared
6397              variable.  Just throw it away.  */
6398           if (b->id)
6399             {
6400               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
6401               I_SYMBOL_BINDING (b->id) = b->shadowed;
6402             }
6403           break;
6404
6405           /* Other things that might be encountered.  */
6406         case LABEL_DECL:
6407         case VAR_DECL:
6408         default:
6409           gcc_unreachable ();
6410         }
6411
6412       b = free_binding_and_advance (b);
6413     }
6414
6415   arg_info->parms = parms;
6416   arg_info->tags = tags;
6417   arg_info->types = types;
6418   arg_info->others = others;
6419   arg_info->pending_sizes = expr;
6420   return arg_info;
6421 }
6422 \f
6423 /* Get the struct, enum or union (CODE says which) with tag NAME.
6424    Define the tag as a forward-reference with location LOC if it is
6425    not defined.  Return a c_typespec structure for the type
6426    specifier.  */
6427
6428 struct c_typespec
6429 parser_xref_tag (location_t loc, enum tree_code code, tree name)
6430 {
6431   struct c_typespec ret;
6432   tree ref;
6433   location_t refloc;
6434
6435   ret.expr = NULL_TREE;
6436   ret.expr_const_operands = true;
6437
6438   /* If a cross reference is requested, look up the type
6439      already defined for this tag and return it.  */
6440
6441   ref = lookup_tag (code, name, 0, &refloc);
6442   /* If this is the right type of tag, return what we found.
6443      (This reference will be shadowed by shadow_tag later if appropriate.)
6444      If this is the wrong type of tag, do not return it.  If it was the
6445      wrong type in the same scope, we will have had an error
6446      message already; if in a different scope and declaring
6447      a name, pending_xref_error will give an error message; but if in a
6448      different scope and not declaring a name, this tag should
6449      shadow the previous declaration of a different type of tag, and
6450      this would not work properly if we return the reference found.
6451      (For example, with "struct foo" in an outer scope, "union foo;"
6452      must shadow that tag with a new one of union type.)  */
6453   ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
6454   if (ref && TREE_CODE (ref) == code)
6455     {
6456       if (C_TYPE_DEFINED_IN_STRUCT (ref)
6457           && loc != UNKNOWN_LOCATION
6458           && warn_cxx_compat)
6459         {
6460           switch (code)
6461             {
6462             case ENUMERAL_TYPE:
6463               warning_at (loc, OPT_Wc___compat,
6464                           ("enum type defined in struct or union "
6465                            "is not visible in C++"));
6466               inform (refloc, "enum type defined here");
6467               break;
6468             case RECORD_TYPE:
6469               warning_at (loc, OPT_Wc___compat,
6470                           ("struct defined in struct or union "
6471                            "is not visible in C++"));
6472               inform (refloc, "struct defined here");
6473               break;
6474             case UNION_TYPE:
6475               warning_at (loc, OPT_Wc___compat,
6476                           ("union defined in struct or union "
6477                            "is not visible in C++"));
6478               inform (refloc, "union defined here");
6479               break;
6480             default:
6481               gcc_unreachable();
6482             }
6483         }
6484
6485       ret.spec = ref;
6486       return ret;
6487     }
6488
6489   /* If no such tag is yet defined, create a forward-reference node
6490      and record it as the "definition".
6491      When a real declaration of this type is found,
6492      the forward-reference will be altered into a real type.  */
6493
6494   ref = make_node (code);
6495   if (code == ENUMERAL_TYPE)
6496     {
6497       /* Give the type a default layout like unsigned int
6498          to avoid crashing if it does not get defined.  */
6499       SET_TYPE_MODE (ref, TYPE_MODE (unsigned_type_node));
6500       TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
6501       TYPE_USER_ALIGN (ref) = 0;
6502       TYPE_UNSIGNED (ref) = 1;
6503       TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
6504       TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
6505       TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
6506     }
6507
6508   pushtag (loc, name, ref);
6509
6510   ret.spec = ref;
6511   return ret;
6512 }
6513
6514 /* Get the struct, enum or union (CODE says which) with tag NAME.
6515    Define the tag as a forward-reference if it is not defined.
6516    Return a tree for the type.  */
6517
6518 tree
6519 xref_tag (enum tree_code code, tree name)
6520 {
6521   return parser_xref_tag (input_location, code, name).spec;
6522 }
6523 \f
6524 /* Make sure that the tag NAME is defined *in the current scope*
6525    at least as a forward reference.
6526    LOC is the location of the struct's definition.
6527    CODE says which kind of tag NAME ought to be.
6528
6529    This stores the current value of the file static STRUCT_PARSE_INFO
6530    in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
6531    new c_struct_parse_info structure.  The old value of
6532    STRUCT_PARSE_INFO is restored in finish_struct.  */
6533
6534 tree
6535 start_struct (location_t loc, enum tree_code code, tree name,
6536               struct c_struct_parse_info **enclosing_struct_parse_info)
6537 {
6538   /* If there is already a tag defined at this scope
6539      (as a forward reference), just return it.  */
6540
6541   tree ref = NULL_TREE;
6542   location_t refloc = UNKNOWN_LOCATION;
6543
6544   if (name != NULL_TREE)
6545     ref = lookup_tag (code, name, 1, &refloc);
6546   if (ref && TREE_CODE (ref) == code)
6547     {
6548       if (TYPE_SIZE (ref))
6549         {
6550           if (code == UNION_TYPE)
6551             error_at (loc, "redefinition of %<union %E%>", name);
6552           else
6553             error_at (loc, "redefinition of %<struct %E%>", name);
6554           if (refloc != UNKNOWN_LOCATION)
6555             inform (refloc, "originally defined here");
6556           /* Don't create structures using a name already in use.  */
6557           ref = NULL_TREE;
6558         }
6559       else if (C_TYPE_BEING_DEFINED (ref))
6560         {
6561           if (code == UNION_TYPE)
6562             error_at (loc, "nested redefinition of %<union %E%>", name);
6563           else
6564             error_at (loc, "nested redefinition of %<struct %E%>", name);
6565           /* Don't bother to report "originally defined here" for a
6566              nested redefinition; the original definition should be
6567              obvious.  */
6568           /* Don't create structures that contain themselves.  */
6569           ref = NULL_TREE;
6570         }
6571     }
6572
6573   /* Otherwise create a forward-reference just so the tag is in scope.  */
6574
6575   if (ref == NULL_TREE || TREE_CODE (ref) != code)
6576     {
6577       ref = make_node (code);
6578       pushtag (loc, name, ref);
6579     }
6580
6581   C_TYPE_BEING_DEFINED (ref) = 1;
6582   TYPE_PACKED (ref) = flag_pack_struct;
6583
6584   *enclosing_struct_parse_info = struct_parse_info;
6585   struct_parse_info = XNEW (struct c_struct_parse_info);
6586   struct_parse_info->struct_types = VEC_alloc (tree, heap, 0);
6587   struct_parse_info->fields = VEC_alloc (c_binding_ptr, heap, 0);
6588   struct_parse_info->typedefs_seen = VEC_alloc (tree, heap, 0);
6589
6590   /* FIXME: This will issue a warning for a use of a type defined
6591      within a statement expr used within sizeof, et. al.  This is not
6592      terribly serious as C++ doesn't permit statement exprs within
6593      sizeof anyhow.  */
6594   if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
6595     warning_at (loc, OPT_Wc___compat,
6596                 "defining type in %qs expression is invalid in C++",
6597                 (in_sizeof
6598                  ? "sizeof"
6599                  : (in_typeof ? "typeof" : "alignof")));
6600
6601   return ref;
6602 }
6603
6604 /* Process the specs, declarator and width (NULL if omitted)
6605    of a structure component, returning a FIELD_DECL node.
6606    WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
6607    DECL_ATTRS is as for grokdeclarator.
6608
6609    LOC is the location of the structure component.
6610
6611    This is done during the parsing of the struct declaration.
6612    The FIELD_DECL nodes are chained together and the lot of them
6613    are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
6614
6615 tree
6616 grokfield (location_t loc,
6617            struct c_declarator *declarator, struct c_declspecs *declspecs,
6618            tree width, tree *decl_attrs)
6619 {
6620   tree value;
6621
6622   if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
6623       && width == NULL_TREE)
6624     {
6625       /* This is an unnamed decl.
6626
6627          If we have something of the form "union { list } ;" then this
6628          is the anonymous union extension.  Similarly for struct.
6629
6630          If this is something of the form "struct foo;", then
6631            If MS or Plan 9 extensions are enabled, this is handled as
6632              an anonymous struct.
6633            Otherwise this is a forward declaration of a structure tag.
6634
6635          If this is something of the form "foo;" and foo is a TYPE_DECL, then
6636            If foo names a structure or union without a tag, then this
6637              is an anonymous struct (this is permitted by C1X).
6638            If MS or Plan 9 extensions are enabled and foo names a
6639              structure, then again this is an anonymous struct.
6640            Otherwise this is an error.
6641
6642          Oh what a horrid tangled web we weave.  I wonder if MS consciously
6643          took this from Plan 9 or if it was an accident of implementation
6644          that took root before someone noticed the bug...  */
6645
6646       tree type = declspecs->type;
6647       bool type_ok = (TREE_CODE (type) == RECORD_TYPE
6648                       || TREE_CODE (type) == UNION_TYPE);
6649       bool ok = false;
6650
6651       if (type_ok
6652           && (flag_ms_extensions
6653               || flag_plan9_extensions
6654               || !declspecs->typedef_p))
6655         {
6656           if (flag_ms_extensions || flag_plan9_extensions)
6657             ok = true;
6658           else if (TYPE_NAME (type) == NULL)
6659             ok = true;
6660           else
6661             ok = false;
6662         }
6663       if (!ok)
6664         {
6665           pedwarn (loc, 0, "declaration does not declare anything");
6666           return NULL_TREE;
6667         }
6668       if (!flag_isoc1x)
6669         {
6670           if (flag_isoc99)
6671             pedwarn (loc, OPT_pedantic,
6672                      "ISO C99 doesn%'t support unnamed structs/unions");
6673           else
6674             pedwarn (loc, OPT_pedantic,
6675                      "ISO C90 doesn%'t support unnamed structs/unions");
6676         }
6677     }
6678
6679   value = grokdeclarator (declarator, declspecs, FIELD, false,
6680                           width ? &width : NULL, decl_attrs, NULL, NULL,
6681                           DEPRECATED_NORMAL);
6682
6683   finish_decl (value, loc, NULL_TREE, NULL_TREE, NULL_TREE);
6684   DECL_INITIAL (value) = width;
6685
6686   if (warn_cxx_compat && DECL_NAME (value) != NULL_TREE)
6687     {
6688       /* If we currently have a binding for this field, set the
6689          in_struct field in the binding, so that we warn about lookups
6690          which find it.  */
6691       struct c_binding *b = I_SYMBOL_BINDING (DECL_NAME (value));
6692       if (b != NULL)
6693         {
6694           /* If the in_struct field is not yet set, push it on a list
6695              to be cleared when this struct is finished.  */
6696           if (!b->in_struct)
6697             {
6698               VEC_safe_push (c_binding_ptr, heap,
6699                              struct_parse_info->fields, b);
6700               b->in_struct = 1;
6701             }
6702         }
6703     }
6704
6705   return value;
6706 }
6707 \f
6708 /* Subroutine of detect_field_duplicates: return whether X and Y,
6709    which are both fields in the same struct, have duplicate field
6710    names.  */
6711
6712 static bool
6713 is_duplicate_field (tree x, tree y)
6714 {
6715   if (DECL_NAME (x) != NULL_TREE && DECL_NAME (x) == DECL_NAME (y))
6716     return true;
6717
6718   /* When using -fplan9-extensions, an anonymous field whose name is a
6719      typedef can duplicate a field name.  */
6720   if (flag_plan9_extensions
6721       && (DECL_NAME (x) == NULL_TREE || DECL_NAME (y) == NULL_TREE))
6722     {
6723       tree xt, xn, yt, yn;
6724
6725       xt = TREE_TYPE (x);
6726       if (DECL_NAME (x) != NULL_TREE)
6727         xn = DECL_NAME (x);
6728       else if ((TREE_CODE (xt) == RECORD_TYPE || TREE_CODE (xt) == UNION_TYPE)
6729                && TYPE_NAME (xt) != NULL_TREE
6730                && TREE_CODE (TYPE_NAME (xt)) == TYPE_DECL)
6731         xn = DECL_NAME (TYPE_NAME (xt));
6732       else
6733         xn = NULL_TREE;
6734
6735       yt = TREE_TYPE (y);
6736       if (DECL_NAME (y) != NULL_TREE)
6737         yn = DECL_NAME (y);
6738       else if ((TREE_CODE (yt) == RECORD_TYPE || TREE_CODE (yt) == UNION_TYPE)
6739                && TYPE_NAME (yt) != NULL_TREE
6740                && TREE_CODE (TYPE_NAME (yt)) == TYPE_DECL)
6741         yn = DECL_NAME (TYPE_NAME (yt));
6742       else
6743         yn = NULL_TREE;
6744
6745       if (xn != NULL_TREE && xn == yn)
6746         return true;
6747     }
6748
6749   return false;
6750 }
6751
6752 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
6753    to HTAB, giving errors for any duplicates.  */
6754
6755 static void
6756 detect_field_duplicates_hash (tree fieldlist, htab_t htab)
6757 {
6758   tree x, y;
6759   void **slot;
6760
6761   for (x = fieldlist; x ; x = DECL_CHAIN (x))
6762     if ((y = DECL_NAME (x)) != 0)
6763       {
6764         slot = htab_find_slot (htab, y, INSERT);
6765         if (*slot)
6766           {
6767             error ("duplicate member %q+D", x);
6768             DECL_NAME (x) = NULL_TREE;
6769           }
6770         *slot = y;
6771       }
6772     else if (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6773              || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
6774       {
6775         detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x)), htab);
6776
6777         /* When using -fplan9-extensions, an anonymous field whose
6778            name is a typedef can duplicate a field name.  */
6779         if (flag_plan9_extensions
6780             && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
6781             && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL)
6782           {
6783             tree xn = DECL_NAME (TYPE_NAME (TREE_TYPE (x)));
6784             slot = htab_find_slot (htab, xn, INSERT);
6785             if (*slot)
6786               error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x)));
6787             *slot = xn;
6788           }
6789       }
6790 }
6791
6792 /* Generate an error for any duplicate field names in FIELDLIST.  Munge
6793    the list such that this does not present a problem later.  */
6794
6795 static void
6796 detect_field_duplicates (tree fieldlist)
6797 {
6798   tree x, y;
6799   int timeout = 10;
6800
6801   /* If the struct is the list of instance variables of an Objective-C
6802      class, then we need to check all the instance variables of
6803      superclasses when checking for duplicates (since you can't have
6804      an instance variable in a subclass with the same name as an
6805      instance variable in a superclass).  We pass on this job to the
6806      Objective-C compiler.  objc_detect_field_duplicates() will return
6807      false if we are not checking the list of instance variables and
6808      the C frontend should proceed with the standard field duplicate
6809      checks.  If we are checking the list of instance variables, the
6810      ObjC frontend will do the check, emit the errors if needed, and
6811      then return true.  */
6812   if (c_dialect_objc ())
6813     if (objc_detect_field_duplicates (false))
6814       return;
6815
6816   /* First, see if there are more than "a few" fields.
6817      This is trivially true if there are zero or one fields.  */
6818   if (!fieldlist || !DECL_CHAIN (fieldlist))
6819     return;
6820   x = fieldlist;
6821   do {
6822     timeout--;
6823     if (DECL_NAME (x) == NULL_TREE
6824         && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6825             || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
6826       timeout = 0;
6827     x = DECL_CHAIN (x);
6828   } while (timeout > 0 && x);
6829
6830   /* If there were "few" fields and no anonymous structures or unions,
6831      avoid the overhead of allocating a hash table.  Instead just do
6832      the nested traversal thing.  */
6833   if (timeout > 0)
6834     {
6835       for (x = DECL_CHAIN (fieldlist); x; x = DECL_CHAIN (x))
6836         /* When using -fplan9-extensions, we can have duplicates
6837            between typedef names and fields.  */
6838         if (DECL_NAME (x)
6839             || (flag_plan9_extensions
6840                 && DECL_NAME (x) == NULL_TREE
6841                 && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6842                     || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
6843                 && TYPE_NAME (TREE_TYPE (x)) != NULL_TREE
6844                 && TREE_CODE (TYPE_NAME (TREE_TYPE (x))) == TYPE_DECL))
6845           {
6846             for (y = fieldlist; y != x; y = TREE_CHAIN (y))
6847               if (is_duplicate_field (y, x))
6848                 {
6849                   error ("duplicate member %q+D", x);
6850                   DECL_NAME (x) = NULL_TREE;
6851                 }
6852           }
6853     }
6854   else
6855     {
6856       htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
6857
6858       detect_field_duplicates_hash (fieldlist, htab);
6859       htab_delete (htab);
6860     }
6861 }
6862
6863 /* Finish up struct info used by -Wc++-compat.  */
6864
6865 static void
6866 warn_cxx_compat_finish_struct (tree fieldlist)
6867 {
6868   unsigned int ix;
6869   tree x;
6870   struct c_binding *b;
6871
6872   /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
6873      the current struct.  We do this now at the end of the struct
6874      because the flag is used to issue visibility warnings, and we
6875      only want to issue those warnings if the type is referenced
6876      outside of the struct declaration.  */
6877   FOR_EACH_VEC_ELT (tree, struct_parse_info->struct_types, ix, x)
6878     C_TYPE_DEFINED_IN_STRUCT (x) = 1;
6879
6880   /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
6881      typedefs used when declaring fields in this struct.  If the name
6882      of any of the fields is also a typedef name then the struct would
6883      not parse in C++, because the C++ lookup rules say that the
6884      typedef name would be looked up in the context of the struct, and
6885      would thus be the field rather than the typedef.  */
6886   if (!VEC_empty (tree, struct_parse_info->typedefs_seen)
6887       && fieldlist != NULL_TREE)
6888     {
6889       /* Use a pointer_set using the name of the typedef.  We can use
6890          a pointer_set because identifiers are interned.  */
6891       struct pointer_set_t *tset = pointer_set_create ();
6892
6893       FOR_EACH_VEC_ELT (tree, struct_parse_info->typedefs_seen, ix, x)
6894         pointer_set_insert (tset, DECL_NAME (x));
6895
6896       for (x = fieldlist; x != NULL_TREE; x = DECL_CHAIN (x))
6897         {
6898           if (DECL_NAME (x) != NULL_TREE
6899               && pointer_set_contains (tset, DECL_NAME (x)))
6900             {
6901               warning_at (DECL_SOURCE_LOCATION (x), OPT_Wc___compat,
6902                           ("using %qD as both field and typedef name is "
6903                            "invalid in C++"),
6904                           x);
6905               /* FIXME: It would be nice to report the location where
6906                  the typedef name is used.  */
6907             }
6908         }
6909
6910       pointer_set_destroy (tset);
6911     }
6912
6913   /* For each field which has a binding and which was not defined in
6914      an enclosing struct, clear the in_struct field.  */
6915   FOR_EACH_VEC_ELT (c_binding_ptr, struct_parse_info->fields, ix, b)
6916     b->in_struct = 0;
6917 }
6918
6919 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
6920    LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
6921    FIELDLIST is a chain of FIELD_DECL nodes for the fields.
6922    ATTRIBUTES are attributes to be applied to the structure.
6923
6924    ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
6925    the struct was started.  */
6926
6927 tree
6928 finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
6929                struct c_struct_parse_info *enclosing_struct_parse_info)
6930 {
6931   tree x;
6932   bool toplevel = file_scope == current_scope;
6933   int saw_named_field;
6934
6935   /* If this type was previously laid out as a forward reference,
6936      make sure we lay it out again.  */
6937
6938   TYPE_SIZE (t) = 0;
6939
6940   decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
6941
6942   if (pedantic)
6943     {
6944       for (x = fieldlist; x; x = DECL_CHAIN (x))
6945         {
6946           if (DECL_NAME (x) != 0)
6947             break;
6948           if (flag_isoc1x
6949               && (TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
6950                   || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE))
6951             break;
6952         }
6953
6954       if (x == 0)
6955         {
6956           if (TREE_CODE (t) == UNION_TYPE)
6957             {
6958               if (fieldlist)
6959                 pedwarn (loc, OPT_pedantic, "union has no named members");
6960               else
6961                 pedwarn (loc, OPT_pedantic, "union has no members");
6962             }
6963           else
6964             {
6965               if (fieldlist)
6966                 pedwarn (loc, OPT_pedantic, "struct has no named members");
6967               else
6968                 pedwarn (loc, OPT_pedantic, "struct has no members");
6969             }
6970         }
6971     }
6972
6973   /* Install struct as DECL_CONTEXT of each field decl.
6974      Also process specified field sizes, found in the DECL_INITIAL,
6975      storing 0 there after the type has been changed to precision equal
6976      to its width, rather than the precision of the specified standard
6977      type.  (Correct layout requires the original type to have been preserved
6978      until now.)  */
6979
6980   saw_named_field = 0;
6981   for (x = fieldlist; x; x = DECL_CHAIN (x))
6982     {
6983       if (TREE_TYPE (x) == error_mark_node)
6984         continue;
6985
6986       DECL_CONTEXT (x) = t;
6987
6988       /* If any field is const, the structure type is pseudo-const.  */
6989       if (TREE_READONLY (x))
6990         C_TYPE_FIELDS_READONLY (t) = 1;
6991       else
6992         {
6993           /* A field that is pseudo-const makes the structure likewise.  */
6994           tree t1 = strip_array_types (TREE_TYPE (x));
6995           if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
6996               && C_TYPE_FIELDS_READONLY (t1))
6997             C_TYPE_FIELDS_READONLY (t) = 1;
6998         }
6999
7000       /* Any field that is volatile means variables of this type must be
7001          treated in some ways as volatile.  */
7002       if (TREE_THIS_VOLATILE (x))
7003         C_TYPE_FIELDS_VOLATILE (t) = 1;
7004
7005       /* Any field of nominal variable size implies structure is too.  */
7006       if (C_DECL_VARIABLE_SIZE (x))
7007         C_TYPE_VARIABLE_SIZE (t) = 1;
7008
7009       if (DECL_INITIAL (x))
7010         {
7011           unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
7012           DECL_SIZE (x) = bitsize_int (width);
7013           DECL_BIT_FIELD (x) = 1;
7014           SET_DECL_C_BIT_FIELD (x);
7015         }
7016
7017       if (TYPE_PACKED (t)
7018           && (DECL_BIT_FIELD (x)
7019               || TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT))
7020         DECL_PACKED (x) = 1;
7021
7022       /* Detect flexible array member in an invalid context.  */
7023       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
7024           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
7025           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
7026           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
7027         {
7028           if (TREE_CODE (t) == UNION_TYPE)
7029             {
7030               error_at (DECL_SOURCE_LOCATION (x),
7031                         "flexible array member in union");
7032               TREE_TYPE (x) = error_mark_node;
7033             }
7034           else if (DECL_CHAIN (x) != NULL_TREE)
7035             {
7036               error_at (DECL_SOURCE_LOCATION (x),
7037                         "flexible array member not at end of struct");
7038               TREE_TYPE (x) = error_mark_node;
7039             }
7040           else if (!saw_named_field)
7041             {
7042               error_at (DECL_SOURCE_LOCATION (x),
7043                         "flexible array member in otherwise empty struct");
7044               TREE_TYPE (x) = error_mark_node;
7045             }
7046         }
7047
7048       if (pedantic && TREE_CODE (t) == RECORD_TYPE
7049           && flexible_array_type_p (TREE_TYPE (x)))
7050         pedwarn (DECL_SOURCE_LOCATION (x), OPT_pedantic,
7051                  "invalid use of structure with flexible array member");
7052
7053       if (DECL_NAME (x)
7054           || TREE_CODE (TREE_TYPE (x)) == RECORD_TYPE
7055           || TREE_CODE (TREE_TYPE (x)) == UNION_TYPE)
7056         saw_named_field = 1;
7057     }
7058
7059   detect_field_duplicates (fieldlist);
7060
7061   /* Now we have the nearly final fieldlist.  Record it,
7062      then lay out the structure or union (including the fields).  */
7063
7064   TYPE_FIELDS (t) = fieldlist;
7065
7066   layout_type (t);
7067
7068   /* Give bit-fields their proper types.  */
7069   {
7070     tree *fieldlistp = &fieldlist;
7071     while (*fieldlistp)
7072       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
7073           && TREE_TYPE (*fieldlistp) != error_mark_node)
7074         {
7075           unsigned HOST_WIDE_INT width
7076             = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
7077           tree type = TREE_TYPE (*fieldlistp);
7078           if (width != TYPE_PRECISION (type))
7079             {
7080               TREE_TYPE (*fieldlistp)
7081                 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
7082               DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
7083             }
7084           DECL_INITIAL (*fieldlistp) = 0;
7085         }
7086       else
7087         fieldlistp = &DECL_CHAIN (*fieldlistp);
7088   }
7089
7090   /* Now we have the truly final field list.
7091      Store it in this type and in the variants.  */
7092
7093   TYPE_FIELDS (t) = fieldlist;
7094
7095   /* If there are lots of fields, sort so we can look through them fast.
7096      We arbitrarily consider 16 or more elts to be "a lot".  */
7097
7098   {
7099     int len = 0;
7100
7101     for (x = fieldlist; x; x = DECL_CHAIN (x))
7102       {
7103         if (len > 15 || DECL_NAME (x) == NULL)
7104           break;
7105         len += 1;
7106       }
7107
7108     if (len > 15)
7109       {
7110         tree *field_array;
7111         struct lang_type *space;
7112         struct sorted_fields_type *space2;
7113
7114         len += list_length (x);
7115
7116         /* Use the same allocation policy here that make_node uses, to
7117           ensure that this lives as long as the rest of the struct decl.
7118           All decls in an inline function need to be saved.  */
7119
7120         space = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7121         space2 = ggc_alloc_sorted_fields_type
7122           (sizeof (struct sorted_fields_type) + len * sizeof (tree));
7123
7124         len = 0;
7125         space->s = space2;
7126         field_array = &space2->elts[0];
7127         for (x = fieldlist; x; x = DECL_CHAIN (x))
7128           {
7129             field_array[len++] = x;
7130
7131             /* If there is anonymous struct or union, break out of the loop.  */
7132             if (DECL_NAME (x) == NULL)
7133               break;
7134           }
7135         /* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
7136         if (x == NULL)
7137           {
7138             TYPE_LANG_SPECIFIC (t) = space;
7139             TYPE_LANG_SPECIFIC (t)->s->len = len;
7140             field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
7141             qsort (field_array, len, sizeof (tree), field_decl_cmp);
7142           }
7143       }
7144   }
7145
7146   for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
7147     {
7148       TYPE_FIELDS (x) = TYPE_FIELDS (t);
7149       TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
7150       C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
7151       C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
7152       C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
7153     }
7154
7155   /* If this was supposed to be a transparent union, but we can't
7156      make it one, warn and turn off the flag.  */
7157   if (TREE_CODE (t) == UNION_TYPE
7158       && TYPE_TRANSPARENT_AGGR (t)
7159       && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
7160     {
7161       TYPE_TRANSPARENT_AGGR (t) = 0;
7162       warning_at (loc, 0, "union cannot be made transparent");
7163     }
7164
7165   /* If this structure or union completes the type of any previous
7166      variable declaration, lay it out and output its rtl.  */
7167   for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
7168        x;
7169        x = TREE_CHAIN (x))
7170     {
7171       tree decl = TREE_VALUE (x);
7172       if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
7173         layout_array_type (TREE_TYPE (decl));
7174       if (TREE_CODE (decl) != TYPE_DECL)
7175         {
7176           layout_decl (decl, 0);
7177           if (c_dialect_objc ())
7178             objc_check_decl (decl);
7179           rest_of_decl_compilation (decl, toplevel, 0);
7180           if (!toplevel)
7181             expand_decl (decl);
7182         }
7183     }
7184   C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
7185
7186   /* Update type location to the one of the definition, instead of e.g.
7187      a forward declaration.  */
7188   if (TYPE_STUB_DECL (t))
7189     DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
7190
7191   /* Finish debugging output for this type.  */
7192   rest_of_type_compilation (t, toplevel);
7193
7194   /* If we're inside a function proper, i.e. not file-scope and not still
7195      parsing parameters, then arrange for the size of a variable sized type
7196      to be bound now.  */
7197   if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
7198     add_stmt (build_stmt (loc,
7199                           DECL_EXPR, build_decl (loc, TYPE_DECL, NULL, t)));
7200
7201   if (warn_cxx_compat)
7202     warn_cxx_compat_finish_struct (fieldlist);
7203
7204   VEC_free (tree, heap, struct_parse_info->struct_types);
7205   VEC_free (c_binding_ptr, heap, struct_parse_info->fields);
7206   VEC_free (tree, heap, struct_parse_info->typedefs_seen);
7207   XDELETE (struct_parse_info);
7208
7209   struct_parse_info = enclosing_struct_parse_info;
7210
7211   /* If this struct is defined inside a struct, add it to
7212      struct_types.  */
7213   if (warn_cxx_compat
7214       && struct_parse_info != NULL
7215       && !in_sizeof && !in_typeof && !in_alignof)
7216     VEC_safe_push (tree, heap, struct_parse_info->struct_types, t);
7217
7218   return t;
7219 }
7220
7221 /* Lay out the type T, and its element type, and so on.  */
7222
7223 static void
7224 layout_array_type (tree t)
7225 {
7226   if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
7227     layout_array_type (TREE_TYPE (t));
7228   layout_type (t);
7229 }
7230 \f
7231 /* Begin compiling the definition of an enumeration type.
7232    NAME is its name (or null if anonymous).
7233    LOC is the enum's location.
7234    Returns the type object, as yet incomplete.
7235    Also records info about it so that build_enumerator
7236    may be used to declare the individual values as they are read.  */
7237
7238 tree
7239 start_enum (location_t loc, struct c_enum_contents *the_enum, tree name)
7240 {
7241   tree enumtype = NULL_TREE;
7242   location_t enumloc = UNKNOWN_LOCATION;
7243
7244   /* If this is the real definition for a previous forward reference,
7245      fill in the contents in the same object that used to be the
7246      forward reference.  */
7247
7248   if (name != NULL_TREE)
7249     enumtype = lookup_tag (ENUMERAL_TYPE, name, 1, &enumloc);
7250
7251   if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
7252     {
7253       enumtype = make_node (ENUMERAL_TYPE);
7254       pushtag (loc, name, enumtype);
7255     }
7256
7257   if (C_TYPE_BEING_DEFINED (enumtype))
7258     error_at (loc, "nested redefinition of %<enum %E%>", name);
7259
7260   C_TYPE_BEING_DEFINED (enumtype) = 1;
7261
7262   if (TYPE_VALUES (enumtype) != 0)
7263     {
7264       /* This enum is a named one that has been declared already.  */
7265       error_at (loc, "redeclaration of %<enum %E%>", name);
7266       if (enumloc != UNKNOWN_LOCATION)
7267         inform (enumloc, "originally defined here");
7268
7269       /* Completely replace its old definition.
7270          The old enumerators remain defined, however.  */
7271       TYPE_VALUES (enumtype) = 0;
7272     }
7273
7274   the_enum->enum_next_value = integer_zero_node;
7275   the_enum->enum_overflow = 0;
7276
7277   if (flag_short_enums)
7278     TYPE_PACKED (enumtype) = 1;
7279
7280   /* FIXME: This will issue a warning for a use of a type defined
7281      within sizeof in a statement expr.  This is not terribly serious
7282      as C++ doesn't permit statement exprs within sizeof anyhow.  */
7283   if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
7284     warning_at (loc, OPT_Wc___compat,
7285                 "defining type in %qs expression is invalid in C++",
7286                 (in_sizeof
7287                  ? "sizeof"
7288                  : (in_typeof ? "typeof" : "alignof")));
7289
7290   return enumtype;
7291 }
7292
7293 /* After processing and defining all the values of an enumeration type,
7294    install their decls in the enumeration type and finish it off.
7295    ENUMTYPE is the type object, VALUES a list of decl-value pairs,
7296    and ATTRIBUTES are the specified attributes.
7297    Returns ENUMTYPE.  */
7298
7299 tree
7300 finish_enum (tree enumtype, tree values, tree attributes)
7301 {
7302   tree pair, tem;
7303   tree minnode = 0, maxnode = 0;
7304   int precision, unsign;
7305   bool toplevel = (file_scope == current_scope);
7306   struct lang_type *lt;
7307
7308   decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
7309
7310   /* Calculate the maximum value of any enumerator in this type.  */
7311
7312   if (values == error_mark_node)
7313     minnode = maxnode = integer_zero_node;
7314   else
7315     {
7316       minnode = maxnode = TREE_VALUE (values);
7317       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
7318         {
7319           tree value = TREE_VALUE (pair);
7320           if (tree_int_cst_lt (maxnode, value))
7321             maxnode = value;
7322           if (tree_int_cst_lt (value, minnode))
7323             minnode = value;
7324         }
7325     }
7326
7327   /* Construct the final type of this enumeration.  It is the same
7328      as one of the integral types - the narrowest one that fits, except
7329      that normally we only go as narrow as int - and signed iff any of
7330      the values are negative.  */
7331   unsign = (tree_int_cst_sgn (minnode) >= 0);
7332   precision = MAX (tree_int_cst_min_precision (minnode, unsign),
7333                    tree_int_cst_min_precision (maxnode, unsign));
7334
7335   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
7336     {
7337       tem = c_common_type_for_size (precision, unsign);
7338       if (tem == NULL)
7339         {
7340           warning (0, "enumeration values exceed range of largest integer");
7341           tem = long_long_integer_type_node;
7342         }
7343     }
7344   else
7345     tem = unsign ? unsigned_type_node : integer_type_node;
7346
7347   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
7348   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
7349   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
7350   TYPE_SIZE (enumtype) = 0;
7351
7352   /* If the precision of the type was specific with an attribute and it
7353      was too small, give an error.  Otherwise, use it.  */
7354   if (TYPE_PRECISION (enumtype))
7355     {
7356       if (precision > TYPE_PRECISION (enumtype))
7357         error ("specified mode too small for enumeral values");
7358     }
7359   else
7360     TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
7361
7362   layout_type (enumtype);
7363
7364   if (values != error_mark_node)
7365     {
7366       /* Change the type of the enumerators to be the enum type.  We
7367          need to do this irrespective of the size of the enum, for
7368          proper type checking.  Replace the DECL_INITIALs of the
7369          enumerators, and the value slots of the list, with copies
7370          that have the enum type; they cannot be modified in place
7371          because they may be shared (e.g.  integer_zero_node) Finally,
7372          change the purpose slots to point to the names of the decls.  */
7373       for (pair = values; pair; pair = TREE_CHAIN (pair))
7374         {
7375           tree enu = TREE_PURPOSE (pair);
7376           tree ini = DECL_INITIAL (enu);
7377
7378           TREE_TYPE (enu) = enumtype;
7379
7380           /* The ISO C Standard mandates enumerators to have type int,
7381              even though the underlying type of an enum type is
7382              unspecified.  However, GCC allows enumerators of any
7383              integer type as an extensions.  build_enumerator()
7384              converts any enumerators that fit in an int to type int,
7385              to avoid promotions to unsigned types when comparing
7386              integers with enumerators that fit in the int range.
7387              When -pedantic is given, build_enumerator() would have
7388              already warned about those that don't fit. Here we
7389              convert the rest to the enumerator type. */
7390           if (TREE_TYPE (ini) != integer_type_node)
7391             ini = convert (enumtype, ini);
7392
7393           DECL_INITIAL (enu) = ini;
7394           TREE_PURPOSE (pair) = DECL_NAME (enu);
7395           TREE_VALUE (pair) = ini;
7396         }
7397
7398       TYPE_VALUES (enumtype) = values;
7399     }
7400
7401   /* Record the min/max values so that we can warn about bit-field
7402      enumerations that are too small for the values.  */
7403   lt = ggc_alloc_cleared_lang_type (sizeof (struct lang_type));
7404   lt->enum_min = minnode;
7405   lt->enum_max = maxnode;
7406   TYPE_LANG_SPECIFIC (enumtype) = lt;
7407
7408   /* Fix up all variant types of this enum type.  */
7409   for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
7410     {
7411       if (tem == enumtype)
7412         continue;
7413       TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
7414       TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
7415       TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
7416       TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
7417       TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
7418       SET_TYPE_MODE (tem, TYPE_MODE (enumtype));
7419       TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
7420       TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
7421       TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
7422       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
7423       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
7424     }
7425
7426   /* Finish debugging output for this type.  */
7427   rest_of_type_compilation (enumtype, toplevel);
7428
7429   /* If this enum is defined inside a struct, add it to
7430      struct_types.  */
7431   if (warn_cxx_compat
7432       && struct_parse_info != NULL
7433       && !in_sizeof && !in_typeof && !in_alignof)
7434     VEC_safe_push (tree, heap, struct_parse_info->struct_types, enumtype);
7435
7436   return enumtype;
7437 }
7438
7439 /* Build and install a CONST_DECL for one value of the
7440    current enumeration type (one that was begun with start_enum).
7441    DECL_LOC is the location of the enumerator.
7442    LOC is the location of the '=' operator if any, DECL_LOC otherwise.
7443    Return a tree-list containing the CONST_DECL and its value.
7444    Assignment of sequential values by default is handled here.  */
7445
7446 tree
7447 build_enumerator (location_t decl_loc, location_t loc,
7448                   struct c_enum_contents *the_enum, tree name, tree value)
7449 {
7450   tree decl, type;
7451
7452   /* Validate and default VALUE.  */
7453
7454   if (value != 0)
7455     {
7456       /* Don't issue more errors for error_mark_node (i.e. an
7457          undeclared identifier) - just ignore the value expression.  */
7458       if (value == error_mark_node)
7459         value = 0;
7460       else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)))
7461         {
7462           error_at (loc, "enumerator value for %qE is not an integer constant",
7463                     name);
7464           value = 0;
7465         }
7466       else
7467         {
7468           if (TREE_CODE (value) != INTEGER_CST)
7469             {
7470               value = c_fully_fold (value, false, NULL);
7471               if (TREE_CODE (value) == INTEGER_CST)
7472                 pedwarn (loc, OPT_pedantic,
7473                          "enumerator value for %qE is not an integer "
7474                          "constant expression", name);
7475             }
7476           if (TREE_CODE (value) != INTEGER_CST)
7477             {
7478               error ("enumerator value for %qE is not an integer constant",
7479                      name);
7480               value = 0;
7481             }
7482           else
7483             {
7484               value = default_conversion (value);
7485               constant_expression_warning (value);
7486             }
7487         }
7488     }
7489
7490   /* Default based on previous value.  */
7491   /* It should no longer be possible to have NON_LVALUE_EXPR
7492      in the default.  */
7493   if (value == 0)
7494     {
7495       value = the_enum->enum_next_value;
7496       if (the_enum->enum_overflow)
7497         error_at (loc, "overflow in enumeration values");
7498     }
7499   /* Even though the underlying type of an enum is unspecified, the
7500      type of enumeration constants is explicitly defined as int
7501      (6.4.4.3/2 in the C99 Standard).  GCC allows any integer type as
7502      an extension.  */
7503   else if (!int_fits_type_p (value, integer_type_node))
7504     pedwarn (loc, OPT_pedantic,
7505              "ISO C restricts enumerator values to range of %<int%>");
7506
7507   /* The ISO C Standard mandates enumerators to have type int, even
7508      though the underlying type of an enum type is unspecified.
7509      However, GCC allows enumerators of any integer type as an
7510      extensions.  Here we convert any enumerators that fit in an int
7511      to type int, to avoid promotions to unsigned types when comparing
7512      integers with enumerators that fit in the int range.  When
7513      -pedantic is given, we would have already warned about those that
7514      don't fit. We have to do this here rather than in finish_enum
7515      because this value may be used to define more enumerators.  */
7516   if (int_fits_type_p (value, integer_type_node))
7517     value = convert (integer_type_node, value);
7518
7519   /* Set basis for default for next value.  */
7520   the_enum->enum_next_value
7521     = build_binary_op (EXPR_LOC_OR_HERE (value),
7522                        PLUS_EXPR, value, integer_one_node, 0);
7523   the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
7524
7525   /* Now create a declaration for the enum value name.  */
7526
7527   type = TREE_TYPE (value);
7528   type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
7529                                       TYPE_PRECISION (integer_type_node)),
7530                                  (TYPE_PRECISION (type)
7531                                   >= TYPE_PRECISION (integer_type_node)
7532                                   && TYPE_UNSIGNED (type)));
7533
7534   decl = build_decl (decl_loc, CONST_DECL, name, type);
7535   DECL_INITIAL (decl) = convert (type, value);
7536   pushdecl (decl);
7537
7538   return tree_cons (decl, value, NULL_TREE);
7539 }
7540
7541 \f
7542 /* Create the FUNCTION_DECL for a function definition.
7543    DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7544    the declaration; they describe the function's name and the type it returns,
7545    but twisted together in a fashion that parallels the syntax of C.
7546
7547    This function creates a binding context for the function body
7548    as well as setting up the FUNCTION_DECL in current_function_decl.
7549
7550    Returns 1 on success.  If the DECLARATOR is not suitable for a function
7551    (it defines a datum instead), we return 0, which tells
7552    yyparse to report a parse error.  */
7553
7554 int
7555 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
7556                 tree attributes)
7557 {
7558   tree decl1, old_decl;
7559   tree restype, resdecl;
7560   location_t loc;
7561
7562   current_function_returns_value = 0;  /* Assume, until we see it does.  */
7563   current_function_returns_null = 0;
7564   current_function_returns_abnormally = 0;
7565   warn_about_return_type = 0;
7566   c_switch_stack = NULL;
7567
7568   /* Indicate no valid break/continue context by setting these variables
7569      to some non-null, non-label value.  We'll notice and emit the proper
7570      error message in c_finish_bc_stmt.  */
7571   c_break_label = c_cont_label = size_zero_node;
7572
7573   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
7574                           &attributes, NULL, NULL, DEPRECATED_NORMAL);
7575
7576   /* If the declarator is not suitable for a function definition,
7577      cause a syntax error.  */
7578   if (decl1 == 0)
7579     return 0;
7580
7581   loc = DECL_SOURCE_LOCATION (decl1);
7582
7583   decl_attributes (&decl1, attributes, 0);
7584
7585   if (DECL_DECLARED_INLINE_P (decl1)
7586       && DECL_UNINLINABLE (decl1)
7587       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
7588     warning_at (loc, OPT_Wattributes,
7589                 "inline function %qD given attribute noinline",
7590                 decl1);
7591
7592   /* Handle gnu_inline attribute.  */
7593   if (declspecs->inline_p
7594       && !flag_gnu89_inline
7595       && TREE_CODE (decl1) == FUNCTION_DECL
7596       && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
7597           || current_function_decl))
7598     {
7599       if (declspecs->storage_class != csc_static)
7600         DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
7601     }
7602
7603   announce_function (decl1);
7604
7605   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
7606     {
7607       error_at (loc, "return type is an incomplete type");
7608       /* Make it return void instead.  */
7609       TREE_TYPE (decl1)
7610         = build_function_type (void_type_node,
7611                                TYPE_ARG_TYPES (TREE_TYPE (decl1)));
7612     }
7613
7614   if (warn_about_return_type)
7615     pedwarn_c99 (loc, flag_isoc99 ? 0
7616                  : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
7617                  "return type defaults to %<int%>");
7618
7619   /* Make the init_value nonzero so pushdecl knows this is not tentative.
7620      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
7621   DECL_INITIAL (decl1) = error_mark_node;
7622
7623   /* A nested function is not global.  */
7624   if (current_function_decl != 0)
7625     TREE_PUBLIC (decl1) = 0;
7626
7627   /* If this definition isn't a prototype and we had a prototype declaration
7628      before, copy the arg type info from that prototype.  */
7629   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
7630   if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
7631     old_decl = 0;
7632   current_function_prototype_locus = UNKNOWN_LOCATION;
7633   current_function_prototype_built_in = false;
7634   current_function_prototype_arg_types = NULL_TREE;
7635   if (!prototype_p (TREE_TYPE (decl1)))
7636     {
7637       if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
7638           && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7639                         TREE_TYPE (TREE_TYPE (old_decl))))
7640         {
7641           TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
7642                                               TREE_TYPE (decl1));
7643           current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
7644           current_function_prototype_built_in
7645             = C_DECL_BUILTIN_PROTOTYPE (old_decl);
7646           current_function_prototype_arg_types
7647             = TYPE_ARG_TYPES (TREE_TYPE (decl1));
7648         }
7649       if (TREE_PUBLIC (decl1))
7650         {
7651           /* If there is an external prototype declaration of this
7652              function, record its location but do not copy information
7653              to this decl.  This may be an invisible declaration
7654              (built-in or in a scope which has finished) or simply
7655              have more refined argument types than any declaration
7656              found above.  */
7657           struct c_binding *b;
7658           for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
7659             if (B_IN_SCOPE (b, external_scope))
7660               break;
7661           if (b)
7662             {
7663               tree ext_decl, ext_type;
7664               ext_decl = b->decl;
7665               ext_type = b->u.type ? b->u.type : TREE_TYPE (ext_decl);
7666               if (TREE_CODE (ext_type) == FUNCTION_TYPE
7667                   && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
7668                                 TREE_TYPE (ext_type)))
7669                 {
7670                   current_function_prototype_locus
7671                     = DECL_SOURCE_LOCATION (ext_decl);
7672                   current_function_prototype_built_in
7673                     = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
7674                   current_function_prototype_arg_types
7675                     = TYPE_ARG_TYPES (ext_type);
7676                 }
7677             }
7678         }
7679     }
7680
7681   /* Optionally warn of old-fashioned def with no previous prototype.  */
7682   if (warn_strict_prototypes
7683       && old_decl != error_mark_node
7684       && !prototype_p (TREE_TYPE (decl1))
7685       && C_DECL_ISNT_PROTOTYPE (old_decl))
7686     warning_at (loc, OPT_Wstrict_prototypes,
7687                 "function declaration isn%'t a prototype");
7688   /* Optionally warn of any global def with no previous prototype.  */
7689   else if (warn_missing_prototypes
7690            && old_decl != error_mark_node
7691            && TREE_PUBLIC (decl1)
7692            && !MAIN_NAME_P (DECL_NAME (decl1))
7693            && C_DECL_ISNT_PROTOTYPE (old_decl))
7694     warning_at (loc, OPT_Wmissing_prototypes,
7695                 "no previous prototype for %qD", decl1);
7696   /* Optionally warn of any def with no previous prototype
7697      if the function has already been used.  */
7698   else if (warn_missing_prototypes
7699            && old_decl != 0
7700            && old_decl != error_mark_node
7701            && TREE_USED (old_decl)
7702            && !prototype_p (TREE_TYPE (old_decl)))
7703     warning_at (loc, OPT_Wmissing_prototypes,
7704                 "%qD was used with no prototype before its definition", decl1);
7705   /* Optionally warn of any global def with no previous declaration.  */
7706   else if (warn_missing_declarations
7707            && TREE_PUBLIC (decl1)
7708            && old_decl == 0
7709            && !MAIN_NAME_P (DECL_NAME (decl1)))
7710     warning_at (loc, OPT_Wmissing_declarations,
7711                 "no previous declaration for %qD",
7712                 decl1);
7713   /* Optionally warn of any def with no previous declaration
7714      if the function has already been used.  */
7715   else if (warn_missing_declarations
7716            && old_decl != 0
7717            && old_decl != error_mark_node
7718            && TREE_USED (old_decl)
7719            && C_DECL_IMPLICIT (old_decl))
7720     warning_at (loc, OPT_Wmissing_declarations,
7721                 "%qD was used with no declaration before its definition", decl1);
7722
7723   /* This function exists in static storage.
7724      (This does not mean `static' in the C sense!)  */
7725   TREE_STATIC (decl1) = 1;
7726
7727   /* This is the earliest point at which we might know the assembler
7728      name of the function.  Thus, if it's set before this, die horribly.  */
7729   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
7730
7731   /* If #pragma weak was used, mark the decl weak now.  */
7732   if (current_scope == file_scope)
7733     maybe_apply_pragma_weak (decl1);
7734
7735   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
7736   if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
7737     {
7738       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
7739           != integer_type_node)
7740         pedwarn (loc, OPT_Wmain, "return type of %qD is not %<int%>", decl1);
7741
7742       check_main_parameter_types (decl1);
7743
7744       if (!TREE_PUBLIC (decl1))
7745         pedwarn (loc, OPT_Wmain,
7746                  "%qD is normally a non-static function", decl1);
7747     }
7748
7749   /* Record the decl so that the function name is defined.
7750      If we already have a decl for this name, and it is a FUNCTION_DECL,
7751      use the old decl.  */
7752
7753   current_function_decl = pushdecl (decl1);
7754
7755   push_scope ();
7756   declare_parm_level ();
7757
7758   restype = TREE_TYPE (TREE_TYPE (current_function_decl));
7759   resdecl = build_decl (loc, RESULT_DECL, NULL_TREE, restype);
7760   DECL_ARTIFICIAL (resdecl) = 1;
7761   DECL_IGNORED_P (resdecl) = 1;
7762   DECL_RESULT (current_function_decl) = resdecl;
7763
7764   start_fname_decls ();
7765
7766   return 1;
7767 }
7768 \f
7769 /* Subroutine of store_parm_decls which handles new-style function
7770    definitions (prototype format). The parms already have decls, so we
7771    need only record them as in effect and complain if any redundant
7772    old-style parm decls were written.  */
7773 static void
7774 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
7775 {
7776   tree decl;
7777   c_arg_tag *tag;
7778   unsigned ix;
7779
7780   if (current_scope->bindings)
7781     {
7782       error_at (DECL_SOURCE_LOCATION (fndecl),
7783                 "old-style parameter declarations in prototyped "
7784                 "function definition");
7785
7786       /* Get rid of the old-style declarations.  */
7787       pop_scope ();
7788       push_scope ();
7789     }
7790   /* Don't issue this warning for nested functions, and don't issue this
7791      warning if we got here because ARG_INFO_TYPES was error_mark_node
7792      (this happens when a function definition has just an ellipsis in
7793      its parameter list).  */
7794   else if (!in_system_header && !current_function_scope
7795            && arg_info->types != error_mark_node)
7796     warning_at (DECL_SOURCE_LOCATION (fndecl), OPT_Wtraditional,
7797                 "traditional C rejects ISO C style function definitions");
7798
7799   /* Now make all the parameter declarations visible in the function body.
7800      We can bypass most of the grunt work of pushdecl.  */
7801   for (decl = arg_info->parms; decl; decl = DECL_CHAIN (decl))
7802     {
7803       DECL_CONTEXT (decl) = current_function_decl;
7804       if (DECL_NAME (decl))
7805         {
7806           bind (DECL_NAME (decl), decl, current_scope,
7807                 /*invisible=*/false, /*nested=*/false,
7808                 UNKNOWN_LOCATION);
7809           if (!TREE_USED (decl))
7810             warn_if_shadowing (decl);
7811         }
7812       else
7813         error_at (DECL_SOURCE_LOCATION (decl), "parameter name omitted");
7814     }
7815
7816   /* Record the parameter list in the function declaration.  */
7817   DECL_ARGUMENTS (fndecl) = arg_info->parms;
7818
7819   /* Now make all the ancillary declarations visible, likewise.  */
7820   for (decl = arg_info->others; decl; decl = DECL_CHAIN (decl))
7821     {
7822       DECL_CONTEXT (decl) = current_function_decl;
7823       if (DECL_NAME (decl))
7824         bind (DECL_NAME (decl), decl, current_scope,
7825               /*invisible=*/false,
7826               /*nested=*/(TREE_CODE (decl) == FUNCTION_DECL),
7827               UNKNOWN_LOCATION);
7828     }
7829
7830   /* And all the tag declarations.  */
7831   FOR_EACH_VEC_ELT_REVERSE (c_arg_tag, arg_info->tags, ix, tag)
7832     if (tag->id)
7833       bind (tag->id, tag->type, current_scope,
7834             /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION);
7835 }
7836
7837 /* Subroutine of store_parm_decls which handles old-style function
7838    definitions (separate parameter list and declarations).  */
7839
7840 static void
7841 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
7842 {
7843   struct c_binding *b;
7844   tree parm, decl, last;
7845   tree parmids = arg_info->parms;
7846   struct pointer_set_t *seen_args = pointer_set_create ();
7847
7848   if (!in_system_header)
7849     warning_at (DECL_SOURCE_LOCATION (fndecl),
7850                 OPT_Wold_style_definition, "old-style function definition");
7851
7852   /* Match each formal parameter name with its declaration.  Save each
7853      decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
7854   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7855     {
7856       if (TREE_VALUE (parm) == 0)
7857         {
7858           error_at (DECL_SOURCE_LOCATION (fndecl),
7859                     "parameter name missing from parameter list");
7860           TREE_PURPOSE (parm) = 0;
7861           continue;
7862         }
7863
7864       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
7865       if (b && B_IN_CURRENT_SCOPE (b))
7866         {
7867           decl = b->decl;
7868           /* Skip erroneous parameters.  */
7869           if (decl == error_mark_node)
7870             continue;
7871           /* If we got something other than a PARM_DECL it is an error.  */
7872           if (TREE_CODE (decl) != PARM_DECL)
7873             error_at (DECL_SOURCE_LOCATION (decl),
7874                       "%qD declared as a non-parameter", decl);
7875           /* If the declaration is already marked, we have a duplicate
7876              name.  Complain and ignore the duplicate.  */
7877           else if (pointer_set_contains (seen_args, decl))
7878             {
7879               error_at (DECL_SOURCE_LOCATION (decl),
7880                         "multiple parameters named %qD", decl);
7881               TREE_PURPOSE (parm) = 0;
7882               continue;
7883             }
7884           /* If the declaration says "void", complain and turn it into
7885              an int.  */
7886           else if (VOID_TYPE_P (TREE_TYPE (decl)))
7887             {
7888               error_at (DECL_SOURCE_LOCATION (decl),
7889                         "parameter %qD declared with void type", decl);
7890               TREE_TYPE (decl) = integer_type_node;
7891               DECL_ARG_TYPE (decl) = integer_type_node;
7892               layout_decl (decl, 0);
7893             }
7894           warn_if_shadowing (decl);
7895         }
7896       /* If no declaration found, default to int.  */
7897       else
7898         {
7899           /* FIXME diagnostics: This should be the location of the argument,
7900              not the FNDECL.  E.g., for an old-style declaration
7901
7902                int f10(v) { blah; }
7903
7904              We should use the location of the V, not the F10.
7905              Unfortunately, the V is an IDENTIFIER_NODE which has no
7906              location.  In the future we need locations for c_arg_info
7907              entries.
7908
7909              See gcc.dg/Wshadow-3.c for an example of this problem. */
7910           decl = build_decl (DECL_SOURCE_LOCATION (fndecl),
7911                              PARM_DECL, TREE_VALUE (parm), integer_type_node);
7912           DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
7913           pushdecl (decl);
7914           warn_if_shadowing (decl);
7915
7916           if (flag_isoc99)
7917             pedwarn (DECL_SOURCE_LOCATION (decl),
7918                      0, "type of %qD defaults to %<int%>", decl);
7919           else
7920             warning_at (DECL_SOURCE_LOCATION (decl),
7921                         OPT_Wmissing_parameter_type,
7922                         "type of %qD defaults to %<int%>", decl);
7923         }
7924
7925       TREE_PURPOSE (parm) = decl;
7926       pointer_set_insert (seen_args, decl);
7927     }
7928
7929   /* Now examine the parms chain for incomplete declarations
7930      and declarations with no corresponding names.  */
7931
7932   for (b = current_scope->bindings; b; b = b->prev)
7933     {
7934       parm = b->decl;
7935       if (TREE_CODE (parm) != PARM_DECL)
7936         continue;
7937
7938       if (TREE_TYPE (parm) != error_mark_node
7939           && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
7940         {
7941           error_at (DECL_SOURCE_LOCATION (parm),
7942                     "parameter %qD has incomplete type", parm);
7943           TREE_TYPE (parm) = error_mark_node;
7944         }
7945
7946       if (!pointer_set_contains (seen_args, parm))
7947         {
7948           error_at (DECL_SOURCE_LOCATION (parm),
7949                     "declaration for parameter %qD but no such parameter",
7950                     parm);
7951
7952           /* Pretend the parameter was not missing.
7953              This gets us to a standard state and minimizes
7954              further error messages.  */
7955           parmids = chainon (parmids, tree_cons (parm, 0, 0));
7956         }
7957     }
7958
7959   /* Chain the declarations together in the order of the list of
7960      names.  Store that chain in the function decl, replacing the
7961      list of names.  Update the current scope to match.  */
7962   DECL_ARGUMENTS (fndecl) = 0;
7963
7964   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
7965     if (TREE_PURPOSE (parm))
7966       break;
7967   if (parm && TREE_PURPOSE (parm))
7968     {
7969       last = TREE_PURPOSE (parm);
7970       DECL_ARGUMENTS (fndecl) = last;
7971
7972       for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
7973         if (TREE_PURPOSE (parm))
7974           {
7975             DECL_CHAIN (last) = TREE_PURPOSE (parm);
7976             last = TREE_PURPOSE (parm);
7977           }
7978       DECL_CHAIN (last) = 0;
7979     }
7980
7981   pointer_set_destroy (seen_args);
7982
7983   /* If there was a previous prototype,
7984      set the DECL_ARG_TYPE of each argument according to
7985      the type previously specified, and report any mismatches.  */
7986
7987   if (current_function_prototype_arg_types)
7988     {
7989       tree type;
7990       for (parm = DECL_ARGUMENTS (fndecl),
7991              type = current_function_prototype_arg_types;
7992            parm || (type && TREE_VALUE (type) != error_mark_node
7993                    && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
7994            parm = DECL_CHAIN (parm), type = TREE_CHAIN (type))
7995         {
7996           if (parm == 0 || type == 0
7997               || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
7998             {
7999               if (current_function_prototype_built_in)
8000                 warning_at (DECL_SOURCE_LOCATION (fndecl),
8001                             0, "number of arguments doesn%'t match "
8002                             "built-in prototype");
8003               else
8004                 {
8005                   /* FIXME diagnostics: This should be the location of
8006                      FNDECL, but there is bug when a prototype is
8007                      declared inside function context, but defined
8008                      outside of it (e.g., gcc.dg/pr15698-2.c).  In
8009                      which case FNDECL gets the location of the
8010                      prototype, not the definition.  */
8011                   error_at (input_location,
8012                             "number of arguments doesn%'t match prototype");
8013
8014                   error_at (current_function_prototype_locus,
8015                             "prototype declaration");
8016                 }
8017               break;
8018             }
8019           /* Type for passing arg must be consistent with that
8020              declared for the arg.  ISO C says we take the unqualified
8021              type for parameters declared with qualified type.  */
8022           if (TREE_TYPE (parm) != error_mark_node
8023               && TREE_TYPE (type) != error_mark_node
8024               && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
8025                              TYPE_MAIN_VARIANT (TREE_VALUE (type))))
8026             {
8027               if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
8028                   == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
8029                 {
8030                   /* Adjust argument to match prototype.  E.g. a previous
8031                      `int foo(float);' prototype causes
8032                      `int foo(x) float x; {...}' to be treated like
8033                      `int foo(float x) {...}'.  This is particularly
8034                      useful for argument types like uid_t.  */
8035                   DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
8036
8037                   if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
8038                       && INTEGRAL_TYPE_P (TREE_TYPE (parm))
8039                       && TYPE_PRECISION (TREE_TYPE (parm))
8040                       < TYPE_PRECISION (integer_type_node))
8041                     DECL_ARG_TYPE (parm) = integer_type_node;
8042
8043                   /* ??? Is it possible to get here with a
8044                      built-in prototype or will it always have
8045                      been diagnosed as conflicting with an
8046                      old-style definition and discarded?  */
8047                   if (current_function_prototype_built_in)
8048                     warning_at (DECL_SOURCE_LOCATION (parm),
8049                                 OPT_pedantic, "promoted argument %qD "
8050                                 "doesn%'t match built-in prototype", parm);
8051                   else
8052                     {
8053                       pedwarn (DECL_SOURCE_LOCATION (parm),
8054                                OPT_pedantic, "promoted argument %qD "
8055                                "doesn%'t match prototype", parm);
8056                       pedwarn (current_function_prototype_locus, OPT_pedantic,
8057                                "prototype declaration");
8058                     }
8059                 }
8060               else
8061                 {
8062                   if (current_function_prototype_built_in)
8063                     warning_at (DECL_SOURCE_LOCATION (parm),
8064                                 0, "argument %qD doesn%'t match "
8065                                 "built-in prototype", parm);
8066                   else
8067                     {
8068                       error_at (DECL_SOURCE_LOCATION (parm),
8069                                 "argument %qD doesn%'t match prototype", parm);
8070                       error_at (current_function_prototype_locus,
8071                                 "prototype declaration");
8072                     }
8073                 }
8074             }
8075         }
8076       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
8077     }
8078
8079   /* Otherwise, create a prototype that would match.  */
8080
8081   else
8082     {
8083       tree actual = 0, last = 0, type;
8084
8085       for (parm = DECL_ARGUMENTS (fndecl); parm; parm = DECL_CHAIN (parm))
8086         {
8087           type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
8088           if (last)
8089             TREE_CHAIN (last) = type;
8090           else
8091             actual = type;
8092           last = type;
8093         }
8094       type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
8095       if (last)
8096         TREE_CHAIN (last) = type;
8097       else
8098         actual = type;
8099
8100       /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
8101          of the type of this function, but we need to avoid having this
8102          affect the types of other similarly-typed functions, so we must
8103          first force the generation of an identical (but separate) type
8104          node for the relevant function type.  The new node we create
8105          will be a variant of the main variant of the original function
8106          type.  */
8107
8108       TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
8109
8110       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
8111     }
8112 }
8113
8114 /* Store parameter declarations passed in ARG_INFO into the current
8115    function declaration.  */
8116
8117 void
8118 store_parm_decls_from (struct c_arg_info *arg_info)
8119 {
8120   current_function_arg_info = arg_info;
8121   store_parm_decls ();
8122 }
8123
8124 /* Store the parameter declarations into the current function declaration.
8125    This is called after parsing the parameter declarations, before
8126    digesting the body of the function.
8127
8128    For an old-style definition, construct a prototype out of the old-style
8129    parameter declarations and inject it into the function's type.  */
8130
8131 void
8132 store_parm_decls (void)
8133 {
8134   tree fndecl = current_function_decl;
8135   bool proto;
8136
8137   /* The argument information block for FNDECL.  */
8138   struct c_arg_info *arg_info = current_function_arg_info;
8139   current_function_arg_info = 0;
8140
8141   /* True if this definition is written with a prototype.  Note:
8142      despite C99 6.7.5.3p14, we can *not* treat an empty argument
8143      list in a function definition as equivalent to (void) -- an
8144      empty argument list specifies the function has no parameters,
8145      but only (void) sets up a prototype for future calls.  */
8146   proto = arg_info->types != 0;
8147
8148   if (proto)
8149     store_parm_decls_newstyle (fndecl, arg_info);
8150   else
8151     store_parm_decls_oldstyle (fndecl, arg_info);
8152
8153   /* The next call to push_scope will be a function body.  */
8154
8155   next_is_function_body = true;
8156
8157   /* Write a record describing this function definition to the prototypes
8158      file (if requested).  */
8159
8160   gen_aux_info_record (fndecl, 1, 0, proto);
8161
8162   /* Initialize the RTL code for the function.  */
8163   allocate_struct_function (fndecl, false);
8164
8165   /* Begin the statement tree for this function.  */
8166   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
8167
8168   /* ??? Insert the contents of the pending sizes list into the function
8169      to be evaluated.  The only reason left to have this is
8170         void foo(int n, int array[n++])
8171      because we throw away the array type in favor of a pointer type, and
8172      thus won't naturally see the SAVE_EXPR containing the increment.  All
8173      other pending sizes would be handled by gimplify_parameters.  */
8174   if (arg_info->pending_sizes)
8175     add_stmt (arg_info->pending_sizes);
8176 }
8177 \f
8178
8179 /* Finish up a function declaration and compile that function
8180    all the way to assembler language output.  Then free the storage
8181    for the function definition.
8182
8183    This is called after parsing the body of the function definition.  */
8184
8185 void
8186 finish_function (void)
8187 {
8188   tree fndecl = current_function_decl;
8189   
8190   if (c_dialect_objc ())
8191     objc_finish_function ();
8192
8193   if (TREE_CODE (fndecl) == FUNCTION_DECL
8194       && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
8195     {
8196       tree args = DECL_ARGUMENTS (fndecl);
8197       for (; args; args = DECL_CHAIN (args))
8198         {
8199           tree type = TREE_TYPE (args);
8200           if (INTEGRAL_TYPE_P (type)
8201               && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
8202             DECL_ARG_TYPE (args) = integer_type_node;
8203         }
8204     }
8205
8206   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
8207     BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
8208
8209   /* Must mark the RESULT_DECL as being in this function.  */
8210
8211   if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
8212     DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
8213
8214   if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
8215       && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
8216       == integer_type_node && flag_isoc99)
8217     {
8218       /* Hack.  We don't want the middle-end to warn that this return
8219          is unreachable, so we mark its location as special.  Using
8220          UNKNOWN_LOCATION has the problem that it gets clobbered in
8221          annotate_one_with_locus.  A cleaner solution might be to
8222          ensure ! should_carry_locus_p (stmt), but that needs a flag.
8223       */
8224       c_finish_return (BUILTINS_LOCATION, integer_zero_node, NULL_TREE);
8225     }
8226
8227   /* Tie off the statement tree for this function.  */
8228   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
8229
8230   finish_fname_decls ();
8231
8232   /* Complain if there's just no return statement.  */
8233   if (warn_return_type
8234       && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
8235       && !current_function_returns_value && !current_function_returns_null
8236       /* Don't complain if we are no-return.  */
8237       && !current_function_returns_abnormally
8238       /* Don't complain if we are declared noreturn.  */
8239       && !TREE_THIS_VOLATILE (fndecl)
8240       /* Don't warn for main().  */
8241       && !MAIN_NAME_P (DECL_NAME (fndecl))
8242       /* Or if they didn't actually specify a return type.  */
8243       && !C_FUNCTION_IMPLICIT_INT (fndecl)
8244       /* Normally, with -Wreturn-type, flow will complain, but we might
8245          optimize out static functions.  */
8246       && !TREE_PUBLIC (fndecl))
8247     {
8248       warning (OPT_Wreturn_type,
8249                "no return statement in function returning non-void");
8250       TREE_NO_WARNING (fndecl) = 1;
8251     }
8252
8253   /* Complain about parameters that are only set, but never otherwise used.  */
8254   if (warn_unused_but_set_parameter)
8255     {
8256       tree decl;
8257
8258       for (decl = DECL_ARGUMENTS (fndecl);
8259            decl;
8260            decl = DECL_CHAIN (decl))
8261         if (TREE_USED (decl)
8262             && TREE_CODE (decl) == PARM_DECL
8263             && !DECL_READ_P (decl)
8264             && DECL_NAME (decl)
8265             && !DECL_ARTIFICIAL (decl)
8266             && !TREE_NO_WARNING (decl))
8267           warning_at (DECL_SOURCE_LOCATION (decl),
8268                       OPT_Wunused_but_set_parameter,
8269                       "parameter %qD set but not used", decl);
8270     }
8271
8272   /* Store the end of the function, so that we get good line number
8273      info for the epilogue.  */
8274   cfun->function_end_locus = input_location;
8275
8276   /* Finalize the ELF visibility for the function.  */
8277   c_determine_visibility (fndecl);
8278
8279   /* For GNU C extern inline functions disregard inline limits.  */
8280   if (DECL_EXTERNAL (fndecl)
8281       && DECL_DECLARED_INLINE_P (fndecl))
8282     DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
8283
8284   /* Genericize before inlining.  Delay genericizing nested functions
8285      until their parent function is genericized.  Since finalizing
8286      requires GENERIC, delay that as well.  */
8287
8288   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
8289       && !undef_nested_function)
8290     {
8291       if (!decl_function_context (fndecl))
8292         {
8293           invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
8294           c_genericize (fndecl);
8295
8296           /* ??? Objc emits functions after finalizing the compilation unit.
8297              This should be cleaned up later and this conditional removed.  */
8298           if (cgraph_global_info_ready)
8299             {
8300               cgraph_add_new_function (fndecl, false);
8301               return;
8302             }
8303           cgraph_finalize_function (fndecl, false);
8304         }
8305       else
8306         {
8307           /* Register this function with cgraph just far enough to get it
8308             added to our parent's nested function list.  Handy, since the
8309             C front end doesn't have such a list.  */
8310           (void) cgraph_get_create_node (fndecl);
8311         }
8312     }
8313
8314   if (!decl_function_context (fndecl))
8315     undef_nested_function = false;
8316
8317   /* We're leaving the context of this function, so zap cfun.
8318      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
8319      tree_rest_of_compilation.  */
8320   set_cfun (NULL);
8321   current_function_decl = NULL;
8322 }
8323 \f
8324 /* Check the declarations given in a for-loop for satisfying the C99
8325    constraints.  If exactly one such decl is found, return it.  LOC is
8326    the location of the opening parenthesis of the for loop.  The last
8327    parameter allows you to control the "for loop initial declarations
8328    are only allowed in C99 mode".  Normally, you should pass
8329    flag_isoc99 as that parameter.  But in some cases (Objective-C
8330    foreach loop, for example) we want to run the checks in this
8331    function even if not in C99 mode, so we allow the caller to turn
8332    off the error about not being in C99 mode.
8333 */
8334
8335 tree
8336 check_for_loop_decls (location_t loc, bool turn_off_iso_c99_error)
8337 {
8338   struct c_binding *b;
8339   tree one_decl = NULL_TREE;
8340   int n_decls = 0;
8341
8342   if (!turn_off_iso_c99_error)
8343     {
8344       static bool hint = true;
8345       /* If we get here, declarations have been used in a for loop without
8346          the C99 for loop scope.  This doesn't make much sense, so don't
8347          allow it.  */
8348       error_at (loc, "%<for%> loop initial declarations "
8349                 "are only allowed in C99 mode");
8350       if (hint)
8351         {
8352           inform (loc,
8353                   "use option -std=c99 or -std=gnu99 to compile your code");
8354           hint = false;
8355         }
8356       return NULL_TREE;
8357     }
8358   /* C99 subclause 6.8.5 paragraph 3:
8359
8360        [#3]  The  declaration  part  of  a for statement shall only
8361        declare identifiers for objects having storage class auto or
8362        register.
8363
8364      It isn't clear whether, in this sentence, "identifiers" binds to
8365      "shall only declare" or to "objects" - that is, whether all identifiers
8366      declared must be identifiers for objects, or whether the restriction
8367      only applies to those that are.  (A question on this in comp.std.c
8368      in November 2000 received no answer.)  We implement the strictest
8369      interpretation, to avoid creating an extension which later causes
8370      problems.  */
8371
8372   for (b = current_scope->bindings; b; b = b->prev)
8373     {
8374       tree id = b->id;
8375       tree decl = b->decl;
8376
8377       if (!id)
8378         continue;
8379
8380       switch (TREE_CODE (decl))
8381         {
8382         case VAR_DECL:
8383           {
8384             location_t decl_loc = DECL_SOURCE_LOCATION (decl);
8385             if (TREE_STATIC (decl))
8386               error_at (decl_loc,
8387                         "declaration of static variable %qD in %<for%> loop "
8388                         "initial declaration", decl);
8389             else if (DECL_EXTERNAL (decl))
8390               error_at (decl_loc,
8391                         "declaration of %<extern%> variable %qD in %<for%> loop "
8392                         "initial declaration", decl);
8393           }
8394           break;
8395
8396         case RECORD_TYPE:
8397           error_at (loc,
8398                     "%<struct %E%> declared in %<for%> loop initial "
8399                     "declaration", id);
8400           break;
8401         case UNION_TYPE:
8402           error_at (loc,
8403                     "%<union %E%> declared in %<for%> loop initial declaration",
8404                     id);
8405           break;
8406         case ENUMERAL_TYPE:
8407           error_at (loc, "%<enum %E%> declared in %<for%> loop "
8408                     "initial declaration", id);
8409           break;
8410         default:
8411           error_at (loc, "declaration of non-variable "
8412                     "%qD in %<for%> loop initial declaration", decl);
8413         }
8414
8415       n_decls++;
8416       one_decl = decl;
8417     }
8418
8419   return n_decls == 1 ? one_decl : NULL_TREE;
8420 }
8421 \f
8422 /* Save and reinitialize the variables
8423    used during compilation of a C function.  */
8424
8425 void
8426 c_push_function_context (void)
8427 {
8428   struct language_function *p;
8429   p = ggc_alloc_language_function ();
8430   cfun->language = p;
8431
8432   p->base.x_stmt_tree = c_stmt_tree;
8433   p->x_break_label = c_break_label;
8434   p->x_cont_label = c_cont_label;
8435   p->x_switch_stack = c_switch_stack;
8436   p->arg_info = current_function_arg_info;
8437   p->returns_value = current_function_returns_value;
8438   p->returns_null = current_function_returns_null;
8439   p->returns_abnormally = current_function_returns_abnormally;
8440   p->warn_about_return_type = warn_about_return_type;
8441
8442   push_function_context ();
8443 }
8444
8445 /* Restore the variables used during compilation of a C function.  */
8446
8447 void
8448 c_pop_function_context (void)
8449 {
8450   struct language_function *p;
8451
8452   pop_function_context ();
8453   p = cfun->language;
8454   cfun->language = NULL;
8455
8456   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
8457       && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
8458     {
8459       /* Stop pointing to the local nodes about to be freed.  */
8460       /* But DECL_INITIAL must remain nonzero so we know this
8461          was an actual function definition.  */
8462       DECL_INITIAL (current_function_decl) = error_mark_node;
8463       DECL_ARGUMENTS (current_function_decl) = 0;
8464     }
8465
8466   c_stmt_tree = p->base.x_stmt_tree;
8467   c_break_label = p->x_break_label;
8468   c_cont_label = p->x_cont_label;
8469   c_switch_stack = p->x_switch_stack;
8470   current_function_arg_info = p->arg_info;
8471   current_function_returns_value = p->returns_value;
8472   current_function_returns_null = p->returns_null;
8473   current_function_returns_abnormally = p->returns_abnormally;
8474   warn_about_return_type = p->warn_about_return_type;
8475 }
8476
8477 /* The functions below are required for functionality of doing
8478    function at once processing in the C front end. Currently these
8479    functions are not called from anywhere in the C front end, but as
8480    these changes continue, that will change.  */
8481
8482 /* Returns the stmt_tree (if any) to which statements are currently
8483    being added.  If there is no active statement-tree, NULL is
8484    returned.  */
8485
8486 stmt_tree
8487 current_stmt_tree (void)
8488 {
8489   return &c_stmt_tree;
8490 }
8491
8492 /* Return the global value of T as a symbol.  */
8493
8494 tree
8495 identifier_global_value (tree t)
8496 {
8497   struct c_binding *b;
8498
8499   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
8500     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
8501       return b->decl;
8502
8503   return 0;
8504 }
8505
8506 /* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
8507    otherwise the name is found in ridpointers from RID_INDEX.  */
8508
8509 void
8510 record_builtin_type (enum rid rid_index, const char *name, tree type)
8511 {
8512   tree id, decl;
8513   if (name == 0)
8514     id = ridpointers[(int) rid_index];
8515   else
8516     id = get_identifier (name);
8517   decl = build_decl (UNKNOWN_LOCATION, TYPE_DECL, id, type);
8518   pushdecl (decl);
8519   if (debug_hooks->type_decl)
8520     debug_hooks->type_decl (decl, false);
8521 }
8522
8523 /* Build the void_list_node (void_type_node having been created).  */
8524 tree
8525 build_void_list_node (void)
8526 {
8527   tree t = build_tree_list (NULL_TREE, void_type_node);
8528   return t;
8529 }
8530
8531 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
8532
8533 struct c_parm *
8534 build_c_parm (struct c_declspecs *specs, tree attrs,
8535               struct c_declarator *declarator)
8536 {
8537   struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
8538   ret->specs = specs;
8539   ret->attrs = attrs;
8540   ret->declarator = declarator;
8541   return ret;
8542 }
8543
8544 /* Return a declarator with nested attributes.  TARGET is the inner
8545    declarator to which these attributes apply.  ATTRS are the
8546    attributes.  */
8547
8548 struct c_declarator *
8549 build_attrs_declarator (tree attrs, struct c_declarator *target)
8550 {
8551   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8552   ret->kind = cdk_attrs;
8553   ret->declarator = target;
8554   ret->u.attrs = attrs;
8555   return ret;
8556 }
8557
8558 /* Return a declarator for a function with arguments specified by ARGS
8559    and return type specified by TARGET.  */
8560
8561 struct c_declarator *
8562 build_function_declarator (struct c_arg_info *args,
8563                            struct c_declarator *target)
8564 {
8565   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8566   ret->kind = cdk_function;
8567   ret->declarator = target;
8568   ret->u.arg_info = args;
8569   return ret;
8570 }
8571
8572 /* Return a declarator for the identifier IDENT (which may be
8573    NULL_TREE for an abstract declarator).  */
8574
8575 struct c_declarator *
8576 build_id_declarator (tree ident)
8577 {
8578   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8579   ret->kind = cdk_id;
8580   ret->declarator = 0;
8581   ret->u.id = ident;
8582   /* Default value - may get reset to a more precise location. */
8583   ret->id_loc = input_location;
8584   return ret;
8585 }
8586
8587 /* Return something to represent absolute declarators containing a *.
8588    TARGET is the absolute declarator that the * contains.
8589    TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
8590    to apply to the pointer type.  */
8591
8592 struct c_declarator *
8593 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
8594                          struct c_declarator *target)
8595 {
8596   tree attrs;
8597   int quals = 0;
8598   struct c_declarator *itarget = target;
8599   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
8600   if (type_quals_attrs)
8601     {
8602       attrs = type_quals_attrs->attrs;
8603       quals = quals_from_declspecs (type_quals_attrs);
8604       if (attrs != NULL_TREE)
8605         itarget = build_attrs_declarator (attrs, target);
8606     }
8607   ret->kind = cdk_pointer;
8608   ret->declarator = itarget;
8609   ret->u.pointer_quals = quals;
8610   return ret;
8611 }
8612
8613 /* Return a pointer to a structure for an empty list of declaration
8614    specifiers.  */
8615
8616 struct c_declspecs *
8617 build_null_declspecs (void)
8618 {
8619   struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
8620   ret->type = 0;
8621   ret->expr = 0;
8622   ret->decl_attr = 0;
8623   ret->attrs = 0;
8624   ret->typespec_word = cts_none;
8625   ret->storage_class = csc_none;
8626   ret->expr_const_operands = true;
8627   ret->declspecs_seen_p = false;
8628   ret->typespec_kind = ctsk_none;
8629   ret->non_sc_seen_p = false;
8630   ret->typedef_p = false;
8631   ret->explicit_signed_p = false;
8632   ret->deprecated_p = false;
8633   ret->default_int_p = false;
8634   ret->long_p = false;
8635   ret->long_long_p = false;
8636   ret->short_p = false;
8637   ret->signed_p = false;
8638   ret->unsigned_p = false;
8639   ret->complex_p = false;
8640   ret->inline_p = false;
8641   ret->thread_p = false;
8642   ret->const_p = false;
8643   ret->volatile_p = false;
8644   ret->restrict_p = false;
8645   ret->saturating_p = false;
8646   ret->address_space = ADDR_SPACE_GENERIC;
8647   return ret;
8648 }
8649
8650 /* Add the address space ADDRSPACE to the declaration specifiers
8651    SPECS, returning SPECS.  */
8652
8653 struct c_declspecs *
8654 declspecs_add_addrspace (struct c_declspecs *specs, addr_space_t as)
8655 {
8656   specs->non_sc_seen_p = true;
8657   specs->declspecs_seen_p = true;
8658
8659   if (!ADDR_SPACE_GENERIC_P (specs->address_space)
8660       && specs->address_space != as)
8661     error ("incompatible address space qualifiers %qs and %qs",
8662            c_addr_space_name (as),
8663            c_addr_space_name (specs->address_space));
8664   else
8665     specs->address_space = as;
8666   return specs;
8667 }
8668
8669 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
8670    returning SPECS.  */
8671
8672 struct c_declspecs *
8673 declspecs_add_qual (struct c_declspecs *specs, tree qual)
8674 {
8675   enum rid i;
8676   bool dupe = false;
8677   specs->non_sc_seen_p = true;
8678   specs->declspecs_seen_p = true;
8679   gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
8680               && C_IS_RESERVED_WORD (qual));
8681   i = C_RID_CODE (qual);
8682   switch (i)
8683     {
8684     case RID_CONST:
8685       dupe = specs->const_p;
8686       specs->const_p = true;
8687       break;
8688     case RID_VOLATILE:
8689       dupe = specs->volatile_p;
8690       specs->volatile_p = true;
8691       break;
8692     case RID_RESTRICT:
8693       dupe = specs->restrict_p;
8694       specs->restrict_p = true;
8695       break;
8696     default:
8697       gcc_unreachable ();
8698     }
8699   if (dupe && !flag_isoc99)
8700     pedwarn (input_location, OPT_pedantic, "duplicate %qE", qual);
8701   return specs;
8702 }
8703
8704 /* Add the type specifier TYPE to the declaration specifiers SPECS,
8705    returning SPECS.  */
8706
8707 struct c_declspecs *
8708 declspecs_add_type (location_t loc, struct c_declspecs *specs,
8709                     struct c_typespec spec)
8710 {
8711   tree type = spec.spec;
8712   specs->non_sc_seen_p = true;
8713   specs->declspecs_seen_p = true;
8714   specs->typespec_kind = spec.kind;
8715   if (TREE_DEPRECATED (type))
8716     specs->deprecated_p = true;
8717
8718   /* Handle type specifier keywords.  */
8719   if (TREE_CODE (type) == IDENTIFIER_NODE
8720       && C_IS_RESERVED_WORD (type)
8721       && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
8722     {
8723       enum rid i = C_RID_CODE (type);
8724       if (specs->type)
8725         {
8726           error_at (loc, "two or more data types in declaration specifiers");
8727           return specs;
8728         }
8729       if ((int) i <= (int) RID_LAST_MODIFIER)
8730         {
8731           /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat".  */
8732           bool dupe = false;
8733           switch (i)
8734             {
8735             case RID_LONG:
8736               if (specs->long_long_p)
8737                 {
8738                   error_at (loc, "%<long long long%> is too long for GCC");
8739                   break;
8740                 }
8741               if (specs->long_p)
8742                 {
8743                   if (specs->typespec_word == cts_double)
8744                     {
8745                       error_at (loc,
8746                                 ("both %<long long%> and %<double%> in "
8747                                  "declaration specifiers"));
8748                       break;
8749                     }
8750                   pedwarn_c90 (loc, OPT_Wlong_long,
8751                                "ISO C90 does not support %<long long%>");
8752                   specs->long_long_p = 1;
8753                   break;
8754                 }
8755               if (specs->short_p)
8756                 error_at (loc,
8757                           ("both %<long%> and %<short%> in "
8758                            "declaration specifiers"));
8759               else if (specs->typespec_word == cts_void)
8760                 error_at (loc,
8761                           ("both %<long%> and %<void%> in "
8762                            "declaration specifiers"));
8763               else if (specs->typespec_word == cts_int128)
8764                   error_at (loc,
8765                             ("both %<long%> and %<__int128%> in "
8766                              "declaration specifiers"));
8767               else if (specs->typespec_word == cts_bool)
8768                 error_at (loc,
8769                           ("both %<long%> and %<_Bool%> in "
8770                            "declaration specifiers"));
8771               else if (specs->typespec_word == cts_char)
8772                 error_at (loc,
8773                           ("both %<long%> and %<char%> in "
8774                            "declaration specifiers"));
8775               else if (specs->typespec_word == cts_float)
8776                 error_at (loc,
8777                           ("both %<long%> and %<float%> in "
8778                            "declaration specifiers"));
8779               else if (specs->typespec_word == cts_dfloat32)
8780                 error_at (loc,
8781                           ("both %<long%> and %<_Decimal32%> in "
8782                            "declaration specifiers"));
8783               else if (specs->typespec_word == cts_dfloat64)
8784                 error_at (loc,
8785                           ("both %<long%> and %<_Decimal64%> in "
8786                            "declaration specifiers"));
8787               else if (specs->typespec_word == cts_dfloat128)
8788                 error_at (loc,
8789                           ("both %<long%> and %<_Decimal128%> in "
8790                            "declaration specifiers"));
8791               else
8792                 specs->long_p = true;
8793               break;
8794             case RID_SHORT:
8795               dupe = specs->short_p;
8796               if (specs->long_p)
8797                 error_at (loc,
8798                           ("both %<long%> and %<short%> in "
8799                            "declaration specifiers"));
8800               else if (specs->typespec_word == cts_void)
8801                 error_at (loc,
8802                           ("both %<short%> and %<void%> in "
8803                            "declaration specifiers"));
8804               else if (specs->typespec_word == cts_int128)
8805                 error_at (loc,
8806                           ("both %<short%> and %<__int128%> in "
8807                            "declaration specifiers"));
8808               else if (specs->typespec_word == cts_bool)
8809                 error_at (loc,
8810                           ("both %<short%> and %<_Bool%> in "
8811                            "declaration specifiers"));
8812               else if (specs->typespec_word == cts_char)
8813                 error_at (loc,
8814                           ("both %<short%> and %<char%> in "
8815                            "declaration specifiers"));
8816               else if (specs->typespec_word == cts_float)
8817                 error_at (loc,
8818                           ("both %<short%> and %<float%> in "
8819                            "declaration specifiers"));
8820               else if (specs->typespec_word == cts_double)
8821                 error_at (loc,
8822                           ("both %<short%> and %<double%> in "
8823                            "declaration specifiers"));
8824               else if (specs->typespec_word == cts_dfloat32)
8825                 error_at (loc,
8826                           ("both %<short%> and %<_Decimal32%> in "
8827                            "declaration specifiers"));
8828               else if (specs->typespec_word == cts_dfloat64)
8829                 error_at (loc,
8830                           ("both %<short%> and %<_Decimal64%> in "
8831                            "declaration specifiers"));
8832               else if (specs->typespec_word == cts_dfloat128)
8833                 error_at (loc,
8834                           ("both %<short%> and %<_Decimal128%> in "
8835                            "declaration specifiers"));
8836               else
8837                 specs->short_p = true;
8838               break;
8839             case RID_SIGNED:
8840               dupe = specs->signed_p;
8841               if (specs->unsigned_p)
8842                 error_at (loc,
8843                           ("both %<signed%> and %<unsigned%> in "
8844                            "declaration specifiers"));
8845               else if (specs->typespec_word == cts_void)
8846                 error_at (loc,
8847                           ("both %<signed%> and %<void%> in "
8848                            "declaration specifiers"));
8849               else if (specs->typespec_word == cts_bool)
8850                 error_at (loc,
8851                           ("both %<signed%> and %<_Bool%> in "
8852                            "declaration specifiers"));
8853               else if (specs->typespec_word == cts_float)
8854                 error_at (loc,
8855                           ("both %<signed%> and %<float%> in "
8856                            "declaration specifiers"));
8857               else if (specs->typespec_word == cts_double)
8858                 error_at (loc,
8859                           ("both %<signed%> and %<double%> in "
8860                            "declaration specifiers"));
8861               else if (specs->typespec_word == cts_dfloat32)
8862                 error_at (loc,
8863                           ("both %<signed%> and %<_Decimal32%> in "
8864                            "declaration specifiers"));
8865               else if (specs->typespec_word == cts_dfloat64)
8866                 error_at (loc,
8867                           ("both %<signed%> and %<_Decimal64%> in "
8868                            "declaration specifiers"));
8869               else if (specs->typespec_word == cts_dfloat128)
8870                 error_at (loc,
8871                           ("both %<signed%> and %<_Decimal128%> in "
8872                            "declaration specifiers"));
8873               else
8874                 specs->signed_p = true;
8875               break;
8876             case RID_UNSIGNED:
8877               dupe = specs->unsigned_p;
8878               if (specs->signed_p)
8879                 error_at (loc,
8880                           ("both %<signed%> and %<unsigned%> in "
8881                            "declaration specifiers"));
8882               else if (specs->typespec_word == cts_void)
8883                 error_at (loc,
8884                           ("both %<unsigned%> and %<void%> in "
8885                            "declaration specifiers"));
8886               else if (specs->typespec_word == cts_bool)
8887                 error_at (loc,
8888                           ("both %<unsigned%> and %<_Bool%> in "
8889                            "declaration specifiers"));
8890               else if (specs->typespec_word == cts_float)
8891                 error_at (loc,
8892                           ("both %<unsigned%> and %<float%> in "
8893                            "declaration specifiers"));
8894               else if (specs->typespec_word == cts_double)
8895                 error_at (loc,
8896                           ("both %<unsigned%> and %<double%> in "
8897                            "declaration specifiers"));
8898               else if (specs->typespec_word == cts_dfloat32)
8899                 error_at (loc,
8900                           ("both %<unsigned%> and %<_Decimal32%> in "
8901                            "declaration specifiers"));
8902               else if (specs->typespec_word == cts_dfloat64)
8903                 error_at (loc,
8904                           ("both %<unsigned%> and %<_Decimal64%> in "
8905                            "declaration specifiers"));
8906               else if (specs->typespec_word == cts_dfloat128)
8907                 error_at (loc,
8908                           ("both %<unsigned%> and %<_Decimal128%> in "
8909                            "declaration specifiers"));
8910               else
8911                 specs->unsigned_p = true;
8912               break;
8913             case RID_COMPLEX:
8914               dupe = specs->complex_p;
8915               if (!flag_isoc99 && !in_system_header)
8916                 pedwarn (loc, OPT_pedantic,
8917                          "ISO C90 does not support complex types");
8918               if (specs->typespec_word == cts_void)
8919                 error_at (loc,
8920                           ("both %<complex%> and %<void%> in "
8921                            "declaration specifiers"));
8922               else if (specs->typespec_word == cts_bool)
8923                 error_at (loc,
8924                           ("both %<complex%> and %<_Bool%> in "
8925                            "declaration specifiers"));
8926               else if (specs->typespec_word == cts_dfloat32)
8927                 error_at (loc,
8928                           ("both %<complex%> and %<_Decimal32%> in "
8929                            "declaration specifiers"));
8930               else if (specs->typespec_word == cts_dfloat64)
8931                 error_at (loc,
8932                           ("both %<complex%> and %<_Decimal64%> in "
8933                            "declaration specifiers"));
8934               else if (specs->typespec_word == cts_dfloat128)
8935                 error_at (loc,
8936                           ("both %<complex%> and %<_Decimal128%> in "
8937                            "declaration specifiers"));
8938               else if (specs->typespec_word == cts_fract)
8939                 error_at (loc,
8940                           ("both %<complex%> and %<_Fract%> in "
8941                            "declaration specifiers"));
8942               else if (specs->typespec_word == cts_accum)
8943                 error_at (loc,
8944                           ("both %<complex%> and %<_Accum%> in "
8945                            "declaration specifiers"));
8946               else if (specs->saturating_p)
8947                 error_at (loc,
8948                           ("both %<complex%> and %<_Sat%> in "
8949                            "declaration specifiers"));
8950               else
8951                 specs->complex_p = true;
8952               break;
8953             case RID_SAT:
8954               dupe = specs->saturating_p;
8955               pedwarn (loc, OPT_pedantic,
8956                        "ISO C does not support saturating types");
8957               if (specs->typespec_word == cts_int128)
8958                 {
8959                   error_at (loc,
8960                             ("both %<_Sat%> and %<__int128%> in "
8961                              "declaration specifiers"));
8962                 }
8963               else if (specs->typespec_word == cts_void)
8964                 error_at (loc,
8965                           ("both %<_Sat%> and %<void%> in "
8966                            "declaration specifiers"));
8967               else if (specs->typespec_word == cts_bool)
8968                 error_at (loc,
8969                           ("both %<_Sat%> and %<_Bool%> in "
8970                            "declaration specifiers"));
8971               else if (specs->typespec_word == cts_char)
8972                 error_at (loc,
8973                           ("both %<_Sat%> and %<char%> in "
8974                            "declaration specifiers"));
8975               else if (specs->typespec_word == cts_int)
8976                 error_at (loc,
8977                           ("both %<_Sat%> and %<int%> in "
8978                            "declaration specifiers"));
8979               else if (specs->typespec_word == cts_float)
8980                 error_at (loc,
8981                           ("both %<_Sat%> and %<float%> in "
8982                            "declaration specifiers"));
8983               else if (specs->typespec_word == cts_double)
8984                 error_at (loc,
8985                           ("both %<_Sat%> and %<double%> in "
8986                            "declaration specifiers"));
8987               else if (specs->typespec_word == cts_dfloat32)
8988                 error_at (loc,
8989                           ("both %<_Sat%> and %<_Decimal32%> in "
8990                            "declaration specifiers"));
8991               else if (specs->typespec_word == cts_dfloat64)
8992                 error_at (loc,
8993                           ("both %<_Sat%> and %<_Decimal64%> in "
8994                            "declaration specifiers"));
8995               else if (specs->typespec_word == cts_dfloat128)
8996                 error_at (loc,
8997                           ("both %<_Sat%> and %<_Decimal128%> in "
8998                            "declaration specifiers"));
8999               else if (specs->complex_p)
9000                 error_at (loc,
9001                           ("both %<_Sat%> and %<complex%> in "
9002                            "declaration specifiers"));
9003               else
9004                 specs->saturating_p = true;
9005               break;
9006             default:
9007               gcc_unreachable ();
9008             }
9009
9010           if (dupe)
9011             error_at (loc, "duplicate %qE", type);
9012
9013           return specs;
9014         }
9015       else
9016         {
9017           /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
9018              "__int128", "_Decimal64", "_Decimal128", "_Fract" or "_Accum".  */
9019           if (specs->typespec_word != cts_none)
9020             {
9021               error_at (loc,
9022                         "two or more data types in declaration specifiers");
9023               return specs;
9024             }
9025           switch (i)
9026             {
9027             case RID_INT128:
9028               if (int128_integer_type_node == NULL_TREE)
9029                 {
9030                   error_at (loc, "%<__int128%> is not supported for this target");
9031                   return specs;
9032                 }
9033               if (!in_system_header)
9034                 pedwarn (loc, OPT_pedantic,
9035                          "ISO C does not support %<__int128%> type");
9036
9037               if (specs->long_p)
9038                 error_at (loc,
9039                           ("both %<__int128%> and %<long%> in "
9040                            "declaration specifiers"));
9041               else if (specs->saturating_p)
9042                 error_at (loc,
9043                           ("both %<_Sat%> and %<__int128%> in "
9044                            "declaration specifiers"));
9045               else if (specs->short_p)
9046                 error_at (loc,
9047                           ("both %<__int128%> and %<short%> in "
9048                            "declaration specifiers"));
9049               else
9050                 specs->typespec_word = cts_int128;
9051               return specs;
9052             case RID_VOID:
9053               if (specs->long_p)
9054                 error_at (loc,
9055                           ("both %<long%> and %<void%> in "
9056                            "declaration specifiers"));
9057               else if (specs->short_p)
9058                 error_at (loc,
9059                           ("both %<short%> and %<void%> in "
9060                            "declaration specifiers"));
9061               else if (specs->signed_p)
9062                 error_at (loc,
9063                           ("both %<signed%> and %<void%> in "
9064                            "declaration specifiers"));
9065               else if (specs->unsigned_p)
9066                 error_at (loc,
9067                           ("both %<unsigned%> and %<void%> in "
9068                            "declaration specifiers"));
9069               else if (specs->complex_p)
9070                 error_at (loc,
9071                           ("both %<complex%> and %<void%> in "
9072                            "declaration specifiers"));
9073               else if (specs->saturating_p)
9074                 error_at (loc,
9075                           ("both %<_Sat%> and %<void%> in "
9076                            "declaration specifiers"));
9077               else
9078                 specs->typespec_word = cts_void;
9079               return specs;
9080             case RID_BOOL:
9081               if (specs->long_p)
9082                 error_at (loc,
9083                           ("both %<long%> and %<_Bool%> in "
9084                            "declaration specifiers"));
9085               else if (specs->short_p)
9086                 error_at (loc,
9087                           ("both %<short%> and %<_Bool%> in "
9088                            "declaration specifiers"));
9089               else if (specs->signed_p)
9090                 error_at (loc,
9091                           ("both %<signed%> and %<_Bool%> in "
9092                            "declaration specifiers"));
9093               else if (specs->unsigned_p)
9094                 error_at (loc,
9095                           ("both %<unsigned%> and %<_Bool%> in "
9096                            "declaration specifiers"));
9097               else if (specs->complex_p)
9098                 error_at (loc,
9099                           ("both %<complex%> and %<_Bool%> in "
9100                            "declaration specifiers"));
9101               else if (specs->saturating_p)
9102                 error_at (loc,
9103                           ("both %<_Sat%> and %<_Bool%> in "
9104                            "declaration specifiers"));
9105               else
9106                 specs->typespec_word = cts_bool;
9107               return specs;
9108             case RID_CHAR:
9109               if (specs->long_p)
9110                 error_at (loc,
9111                           ("both %<long%> and %<char%> in "
9112                            "declaration specifiers"));
9113               else if (specs->short_p)
9114                 error_at (loc,
9115                           ("both %<short%> and %<char%> in "
9116                            "declaration specifiers"));
9117               else if (specs->saturating_p)
9118                 error_at (loc,
9119                           ("both %<_Sat%> and %<char%> in "
9120                            "declaration specifiers"));
9121               else
9122                 specs->typespec_word = cts_char;
9123               return specs;
9124             case RID_INT:
9125               if (specs->saturating_p)
9126                 error_at (loc,
9127                           ("both %<_Sat%> and %<int%> in "
9128                            "declaration specifiers"));
9129               else
9130                 specs->typespec_word = cts_int;
9131               return specs;
9132             case RID_FLOAT:
9133               if (specs->long_p)
9134                 error_at (loc,
9135                           ("both %<long%> and %<float%> in "
9136                            "declaration specifiers"));
9137               else if (specs->short_p)
9138                 error_at (loc,
9139                           ("both %<short%> and %<float%> in "
9140                            "declaration specifiers"));
9141               else if (specs->signed_p)
9142                 error_at (loc,
9143                           ("both %<signed%> and %<float%> in "
9144                            "declaration specifiers"));
9145               else if (specs->unsigned_p)
9146                 error_at (loc,
9147                           ("both %<unsigned%> and %<float%> in "
9148                            "declaration specifiers"));
9149               else if (specs->saturating_p)
9150                 error_at (loc,
9151                           ("both %<_Sat%> and %<float%> in "
9152                            "declaration specifiers"));
9153               else
9154                 specs->typespec_word = cts_float;
9155               return specs;
9156             case RID_DOUBLE:
9157               if (specs->long_long_p)
9158                 error_at (loc,
9159                           ("both %<long long%> and %<double%> in "
9160                            "declaration specifiers"));
9161               else if (specs->short_p)
9162                 error_at (loc,
9163                           ("both %<short%> and %<double%> in "
9164                            "declaration specifiers"));
9165               else if (specs->signed_p)
9166                 error_at (loc,
9167                           ("both %<signed%> and %<double%> in "
9168                            "declaration specifiers"));
9169               else if (specs->unsigned_p)
9170                 error_at (loc,
9171                           ("both %<unsigned%> and %<double%> in "
9172                            "declaration specifiers"));
9173               else if (specs->saturating_p)
9174                 error_at (loc,
9175                           ("both %<_Sat%> and %<double%> in "
9176                            "declaration specifiers"));
9177               else
9178                 specs->typespec_word = cts_double;
9179               return specs;
9180             case RID_DFLOAT32:
9181             case RID_DFLOAT64:
9182             case RID_DFLOAT128:
9183               {
9184                 const char *str;
9185                 if (i == RID_DFLOAT32)
9186                   str = "_Decimal32";
9187                 else if (i == RID_DFLOAT64)
9188                   str = "_Decimal64";
9189                 else
9190                   str = "_Decimal128";
9191                 if (specs->long_long_p)
9192                   error_at (loc,
9193                             ("both %<long long%> and %<%s%> in "
9194                              "declaration specifiers"),
9195                             str);
9196                 if (specs->long_p)
9197                   error_at (loc,
9198                             ("both %<long%> and %<%s%> in "
9199                              "declaration specifiers"),
9200                             str);
9201                 else if (specs->short_p)
9202                   error_at (loc,
9203                             ("both %<short%> and %<%s%> in "
9204                              "declaration specifiers"),
9205                             str);
9206                 else if (specs->signed_p)
9207                   error_at (loc,
9208                             ("both %<signed%> and %<%s%> in "
9209                              "declaration specifiers"),
9210                             str);
9211                 else if (specs->unsigned_p)
9212                   error_at (loc,
9213                             ("both %<unsigned%> and %<%s%> in "
9214                              "declaration specifiers"),
9215                             str);
9216                 else if (specs->complex_p)
9217                   error_at (loc,
9218                             ("both %<complex%> and %<%s%> in "
9219                              "declaration specifiers"),
9220                             str);
9221                 else if (specs->saturating_p)
9222                   error_at (loc,
9223                             ("both %<_Sat%> and %<%s%> in "
9224                              "declaration specifiers"),
9225                             str);
9226                 else if (i == RID_DFLOAT32)
9227                   specs->typespec_word = cts_dfloat32;
9228                 else if (i == RID_DFLOAT64)
9229                   specs->typespec_word = cts_dfloat64;
9230                 else
9231                   specs->typespec_word = cts_dfloat128;
9232               }
9233               if (!targetm.decimal_float_supported_p ())
9234                 error_at (loc,
9235                           ("decimal floating point not supported "
9236                            "for this target"));
9237               pedwarn (loc, OPT_pedantic,
9238                        "ISO C does not support decimal floating point");
9239               return specs;
9240             case RID_FRACT:
9241             case RID_ACCUM:
9242               {
9243                 const char *str;
9244                 if (i == RID_FRACT)
9245                   str = "_Fract";
9246                 else
9247                   str = "_Accum";
9248                 if (specs->complex_p)
9249                   error_at (loc,
9250                             ("both %<complex%> and %<%s%> in "
9251                              "declaration specifiers"),
9252                             str);
9253                 else if (i == RID_FRACT)
9254                     specs->typespec_word = cts_fract;
9255                 else
9256                     specs->typespec_word = cts_accum;
9257               }
9258               if (!targetm.fixed_point_supported_p ())
9259                 error_at (loc,
9260                           "fixed-point types not supported for this target");
9261               pedwarn (loc, OPT_pedantic,
9262                        "ISO C does not support fixed-point types");
9263               return specs;
9264             default:
9265               /* ObjC reserved word "id", handled below.  */
9266               break;
9267             }
9268         }
9269     }
9270
9271   /* Now we have a typedef (a TYPE_DECL node), an identifier (some
9272      form of ObjC type, cases such as "int" and "long" being handled
9273      above), a TYPE (struct, union, enum and typeof specifiers) or an
9274      ERROR_MARK.  In none of these cases may there have previously
9275      been any type specifiers.  */
9276   if (specs->type || specs->typespec_word != cts_none
9277       || specs->long_p || specs->short_p || specs->signed_p
9278       || specs->unsigned_p || specs->complex_p)
9279     error_at (loc, "two or more data types in declaration specifiers");
9280   else if (TREE_CODE (type) == TYPE_DECL)
9281     {
9282       if (TREE_TYPE (type) == error_mark_node)
9283         ; /* Allow the type to default to int to avoid cascading errors.  */
9284       else
9285         {
9286           specs->type = TREE_TYPE (type);
9287           specs->decl_attr = DECL_ATTRIBUTES (type);
9288           specs->typedef_p = true;
9289           specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
9290
9291           /* If this typedef name is defined in a struct, then a C++
9292              lookup would return a different value.  */
9293           if (warn_cxx_compat
9294               && I_SYMBOL_BINDING (DECL_NAME (type))->in_struct)
9295             warning_at (loc, OPT_Wc___compat,
9296                         "C++ lookup of %qD would return a field, not a type",
9297                         type);
9298
9299           /* If we are parsing a struct, record that a struct field
9300              used a typedef.  */
9301           if (warn_cxx_compat && struct_parse_info != NULL)
9302             VEC_safe_push (tree, heap, struct_parse_info->typedefs_seen, type);
9303         }
9304     }
9305   else if (TREE_CODE (type) == IDENTIFIER_NODE)
9306     {
9307       tree t = lookup_name (type);
9308       if (!t || TREE_CODE (t) != TYPE_DECL)
9309         error_at (loc, "%qE fails to be a typedef or built in type", type);
9310       else if (TREE_TYPE (t) == error_mark_node)
9311         ;
9312       else
9313         specs->type = TREE_TYPE (t);
9314     }
9315   else
9316     {
9317       if (TREE_CODE (type) != ERROR_MARK && spec.kind == ctsk_typeof)
9318         {
9319           specs->typedef_p = true;
9320           if (spec.expr)
9321             {
9322               if (specs->expr)
9323                 specs->expr = build2 (COMPOUND_EXPR, TREE_TYPE (spec.expr),
9324                                       specs->expr, spec.expr);
9325               else
9326                 specs->expr = spec.expr;
9327               specs->expr_const_operands &= spec.expr_const_operands;
9328             }
9329         }
9330       specs->type = type;
9331     }
9332
9333   return specs;
9334 }
9335
9336 /* Add the storage class specifier or function specifier SCSPEC to the
9337    declaration specifiers SPECS, returning SPECS.  */
9338
9339 struct c_declspecs *
9340 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
9341 {
9342   enum rid i;
9343   enum c_storage_class n = csc_none;
9344   bool dupe = false;
9345   specs->declspecs_seen_p = true;
9346   gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
9347               && C_IS_RESERVED_WORD (scspec));
9348   i = C_RID_CODE (scspec);
9349   if (specs->non_sc_seen_p)
9350     warning (OPT_Wold_style_declaration,
9351              "%qE is not at beginning of declaration", scspec);
9352   switch (i)
9353     {
9354     case RID_INLINE:
9355       /* C99 permits duplicate inline.  Although of doubtful utility,
9356          it seems simplest to permit it in gnu89 mode as well, as
9357          there is also little utility in maintaining this as a
9358          difference between gnu89 and C99 inline.  */
9359       dupe = false;
9360       specs->inline_p = true;
9361       break;
9362     case RID_THREAD:
9363       dupe = specs->thread_p;
9364       if (specs->storage_class == csc_auto)
9365         error ("%<__thread%> used with %<auto%>");
9366       else if (specs->storage_class == csc_register)
9367         error ("%<__thread%> used with %<register%>");
9368       else if (specs->storage_class == csc_typedef)
9369         error ("%<__thread%> used with %<typedef%>");
9370       else
9371         specs->thread_p = true;
9372       break;
9373     case RID_AUTO:
9374       n = csc_auto;
9375       break;
9376     case RID_EXTERN:
9377       n = csc_extern;
9378       /* Diagnose "__thread extern".  */
9379       if (specs->thread_p)
9380         error ("%<__thread%> before %<extern%>");
9381       break;
9382     case RID_REGISTER:
9383       n = csc_register;
9384       break;
9385     case RID_STATIC:
9386       n = csc_static;
9387       /* Diagnose "__thread static".  */
9388       if (specs->thread_p)
9389         error ("%<__thread%> before %<static%>");
9390       break;
9391     case RID_TYPEDEF:
9392       n = csc_typedef;
9393       break;
9394     default:
9395       gcc_unreachable ();
9396     }
9397   if (n != csc_none && n == specs->storage_class)
9398     dupe = true;
9399   if (dupe)
9400     error ("duplicate %qE", scspec);
9401   if (n != csc_none)
9402     {
9403       if (specs->storage_class != csc_none && n != specs->storage_class)
9404         {
9405           error ("multiple storage classes in declaration specifiers");
9406         }
9407       else
9408         {
9409           specs->storage_class = n;
9410           if (n != csc_extern && n != csc_static && specs->thread_p)
9411             {
9412               error ("%<__thread%> used with %qE", scspec);
9413               specs->thread_p = false;
9414             }
9415         }
9416     }
9417   return specs;
9418 }
9419
9420 /* Add the attributes ATTRS to the declaration specifiers SPECS,
9421    returning SPECS.  */
9422
9423 struct c_declspecs *
9424 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
9425 {
9426   specs->attrs = chainon (attrs, specs->attrs);
9427   specs->declspecs_seen_p = true;
9428   return specs;
9429 }
9430
9431 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
9432    specifiers with any other type specifier to determine the resulting
9433    type.  This is where ISO C checks on complex types are made, since
9434    "_Complex long" is a prefix of the valid ISO C type "_Complex long
9435    double".  */
9436
9437 struct c_declspecs *
9438 finish_declspecs (struct c_declspecs *specs)
9439 {
9440   /* If a type was specified as a whole, we have no modifiers and are
9441      done.  */
9442   if (specs->type != NULL_TREE)
9443     {
9444       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
9445                   && !specs->signed_p && !specs->unsigned_p
9446                   && !specs->complex_p);
9447
9448       /* Set a dummy type.  */
9449       if (TREE_CODE (specs->type) == ERROR_MARK)
9450         specs->type = integer_type_node;
9451       return specs;
9452     }
9453
9454   /* If none of "void", "_Bool", "char", "int", "float" or "double"
9455      has been specified, treat it as "int" unless "_Complex" is
9456      present and there are no other specifiers.  If we just have
9457      "_Complex", it is equivalent to "_Complex double", but e.g.
9458      "_Complex short" is equivalent to "_Complex short int".  */
9459   if (specs->typespec_word == cts_none)
9460     {
9461       if (specs->saturating_p)
9462         {
9463           error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
9464           if (!targetm.fixed_point_supported_p ())
9465             error ("fixed-point types not supported for this target");
9466           specs->typespec_word = cts_fract;
9467         }
9468       else if (specs->long_p || specs->short_p
9469                || specs->signed_p || specs->unsigned_p)
9470         {
9471           specs->typespec_word = cts_int;
9472         }
9473       else if (specs->complex_p)
9474         {
9475           specs->typespec_word = cts_double;
9476           pedwarn (input_location, OPT_pedantic,
9477                    "ISO C does not support plain %<complex%> meaning "
9478                    "%<double complex%>");
9479         }
9480       else
9481         {
9482           specs->typespec_word = cts_int;
9483           specs->default_int_p = true;
9484           /* We don't diagnose this here because grokdeclarator will
9485              give more specific diagnostics according to whether it is
9486              a function definition.  */
9487         }
9488     }
9489
9490   /* If "signed" was specified, record this to distinguish "int" and
9491      "signed int" in the case of a bit-field with
9492      -funsigned-bitfields.  */
9493   specs->explicit_signed_p = specs->signed_p;
9494
9495   /* Now compute the actual type.  */
9496   switch (specs->typespec_word)
9497     {
9498     case cts_void:
9499       gcc_assert (!specs->long_p && !specs->short_p
9500                   && !specs->signed_p && !specs->unsigned_p
9501                   && !specs->complex_p);
9502       specs->type = void_type_node;
9503       break;
9504     case cts_bool:
9505       gcc_assert (!specs->long_p && !specs->short_p
9506                   && !specs->signed_p && !specs->unsigned_p
9507                   && !specs->complex_p);
9508       specs->type = boolean_type_node;
9509       break;
9510     case cts_char:
9511       gcc_assert (!specs->long_p && !specs->short_p);
9512       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9513       if (specs->signed_p)
9514         specs->type = signed_char_type_node;
9515       else if (specs->unsigned_p)
9516         specs->type = unsigned_char_type_node;
9517       else
9518         specs->type = char_type_node;
9519       if (specs->complex_p)
9520         {
9521           pedwarn (input_location, OPT_pedantic,
9522                    "ISO C does not support complex integer types");
9523           specs->type = build_complex_type (specs->type);
9524         }
9525       break;
9526     case cts_int128:
9527       gcc_assert (!specs->long_p && !specs->short_p && !specs->long_long_p);
9528       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9529       specs->type = (specs->unsigned_p
9530                      ? int128_unsigned_type_node
9531                      : int128_integer_type_node);
9532       if (specs->complex_p)
9533         {
9534           pedwarn (input_location, OPT_pedantic,
9535                    "ISO C does not support complex integer types");
9536           specs->type = build_complex_type (specs->type);
9537         }
9538       break;
9539     case cts_int:
9540       gcc_assert (!(specs->long_p && specs->short_p));
9541       gcc_assert (!(specs->signed_p && specs->unsigned_p));
9542       if (specs->long_long_p)
9543         specs->type = (specs->unsigned_p
9544                        ? long_long_unsigned_type_node
9545                        : long_long_integer_type_node);
9546       else if (specs->long_p)
9547         specs->type = (specs->unsigned_p
9548                        ? long_unsigned_type_node
9549                        : long_integer_type_node);
9550       else if (specs->short_p)
9551         specs->type = (specs->unsigned_p
9552                        ? short_unsigned_type_node
9553                        : short_integer_type_node);
9554       else
9555         specs->type = (specs->unsigned_p
9556                        ? unsigned_type_node
9557                        : integer_type_node);
9558       if (specs->complex_p)
9559         {
9560           pedwarn (input_location, OPT_pedantic,
9561                    "ISO C does not support complex integer types");
9562           specs->type = build_complex_type (specs->type);
9563         }
9564       break;
9565     case cts_float:
9566       gcc_assert (!specs->long_p && !specs->short_p
9567                   && !specs->signed_p && !specs->unsigned_p);
9568       specs->type = (specs->complex_p
9569                      ? complex_float_type_node
9570                      : float_type_node);
9571       break;
9572     case cts_double:
9573       gcc_assert (!specs->long_long_p && !specs->short_p
9574                   && !specs->signed_p && !specs->unsigned_p);
9575       if (specs->long_p)
9576         {
9577           specs->type = (specs->complex_p
9578                          ? complex_long_double_type_node
9579                          : long_double_type_node);
9580         }
9581       else
9582         {
9583           specs->type = (specs->complex_p
9584                          ? complex_double_type_node
9585                          : double_type_node);
9586         }
9587       break;
9588     case cts_dfloat32:
9589     case cts_dfloat64:
9590     case cts_dfloat128:
9591       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
9592                   && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
9593       if (specs->typespec_word == cts_dfloat32)
9594         specs->type = dfloat32_type_node;
9595       else if (specs->typespec_word == cts_dfloat64)
9596         specs->type = dfloat64_type_node;
9597       else
9598         specs->type = dfloat128_type_node;
9599       break;
9600     case cts_fract:
9601       gcc_assert (!specs->complex_p);
9602       if (!targetm.fixed_point_supported_p ())
9603         specs->type = integer_type_node;
9604       else if (specs->saturating_p)
9605         {
9606           if (specs->long_long_p)
9607             specs->type = specs->unsigned_p
9608                           ? sat_unsigned_long_long_fract_type_node
9609                           : sat_long_long_fract_type_node;
9610           else if (specs->long_p)
9611             specs->type = specs->unsigned_p
9612                           ? sat_unsigned_long_fract_type_node
9613                           : sat_long_fract_type_node;
9614           else if (specs->short_p)
9615             specs->type = specs->unsigned_p
9616                           ? sat_unsigned_short_fract_type_node
9617                           : sat_short_fract_type_node;
9618           else
9619             specs->type = specs->unsigned_p
9620                           ? sat_unsigned_fract_type_node
9621                           : sat_fract_type_node;
9622         }
9623       else
9624         {
9625           if (specs->long_long_p)
9626             specs->type = specs->unsigned_p
9627                           ? unsigned_long_long_fract_type_node
9628                           : long_long_fract_type_node;
9629           else if (specs->long_p)
9630             specs->type = specs->unsigned_p
9631                           ? unsigned_long_fract_type_node
9632                           : long_fract_type_node;
9633           else if (specs->short_p)
9634             specs->type = specs->unsigned_p
9635                           ? unsigned_short_fract_type_node
9636                           : short_fract_type_node;
9637           else
9638             specs->type = specs->unsigned_p
9639                           ? unsigned_fract_type_node
9640                           : fract_type_node;
9641         }
9642       break;
9643     case cts_accum:
9644       gcc_assert (!specs->complex_p);
9645       if (!targetm.fixed_point_supported_p ())
9646         specs->type = integer_type_node;
9647       else if (specs->saturating_p)
9648         {
9649           if (specs->long_long_p)
9650             specs->type = specs->unsigned_p
9651                           ? sat_unsigned_long_long_accum_type_node
9652                           : sat_long_long_accum_type_node;
9653           else if (specs->long_p)
9654             specs->type = specs->unsigned_p
9655                           ? sat_unsigned_long_accum_type_node
9656                           : sat_long_accum_type_node;
9657           else if (specs->short_p)
9658             specs->type = specs->unsigned_p
9659                           ? sat_unsigned_short_accum_type_node
9660                           : sat_short_accum_type_node;
9661           else
9662             specs->type = specs->unsigned_p
9663                           ? sat_unsigned_accum_type_node
9664                           : sat_accum_type_node;
9665         }
9666       else
9667         {
9668           if (specs->long_long_p)
9669             specs->type = specs->unsigned_p
9670                           ? unsigned_long_long_accum_type_node
9671                           : long_long_accum_type_node;
9672           else if (specs->long_p)
9673             specs->type = specs->unsigned_p
9674                           ? unsigned_long_accum_type_node
9675                           : long_accum_type_node;
9676           else if (specs->short_p)
9677             specs->type = specs->unsigned_p
9678                           ? unsigned_short_accum_type_node
9679                           : short_accum_type_node;
9680           else
9681             specs->type = specs->unsigned_p
9682                           ? unsigned_accum_type_node
9683                           : accum_type_node;
9684         }
9685       break;
9686     default:
9687       gcc_unreachable ();
9688     }
9689
9690   return specs;
9691 }
9692
9693 /* A subroutine of c_write_global_declarations.  Perform final processing
9694    on one file scope's declarations (or the external scope's declarations),
9695    GLOBALS.  */
9696
9697 static void
9698 c_write_global_declarations_1 (tree globals)
9699 {
9700   tree decl;
9701   bool reconsider;
9702
9703   /* Process the decls in the order they were written.  */
9704   for (decl = globals; decl; decl = DECL_CHAIN (decl))
9705     {
9706       /* Check for used but undefined static functions using the C
9707          standard's definition of "used", and set TREE_NO_WARNING so
9708          that check_global_declarations doesn't repeat the check.  */
9709       if (TREE_CODE (decl) == FUNCTION_DECL
9710           && DECL_INITIAL (decl) == 0
9711           && DECL_EXTERNAL (decl)
9712           && !TREE_PUBLIC (decl)
9713           && C_DECL_USED (decl))
9714         {
9715           pedwarn (input_location, 0, "%q+F used but never defined", decl);
9716           TREE_NO_WARNING (decl) = 1;
9717         }
9718
9719       wrapup_global_declaration_1 (decl);
9720     }
9721
9722   do
9723     {
9724       reconsider = false;
9725       for (decl = globals; decl; decl = DECL_CHAIN (decl))
9726         reconsider |= wrapup_global_declaration_2 (decl);
9727     }
9728   while (reconsider);
9729
9730   for (decl = globals; decl; decl = DECL_CHAIN (decl))
9731     check_global_declaration_1 (decl);
9732 }
9733
9734 /* A subroutine of c_write_global_declarations Emit debug information for each
9735    of the declarations in GLOBALS.  */
9736
9737 static void
9738 c_write_global_declarations_2 (tree globals)
9739 {
9740   tree decl;
9741
9742   for (decl = globals; decl ; decl = DECL_CHAIN (decl))
9743     debug_hooks->global_decl (decl);
9744 }
9745
9746 /* Callback to collect a source_ref from a DECL.  */
9747
9748 static void
9749 collect_source_ref_cb (tree decl)
9750 {
9751   if (!DECL_IS_BUILTIN (decl))
9752     collect_source_ref (LOCATION_FILE (decl_sloc (decl, false)));
9753 }
9754
9755 /* Collect all references relevant to SOURCE_FILE.  */
9756
9757 static void
9758 collect_all_refs (const char *source_file)
9759 {
9760   tree t;
9761   unsigned i;
9762
9763   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9764     collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t)), source_file);
9765 }
9766
9767 /* Iterate over all global declarations and call CALLBACK.  */
9768
9769 static void
9770 for_each_global_decl (void (*callback) (tree decl))
9771 {
9772   tree t;
9773   tree decls;
9774   tree decl;
9775   unsigned i;
9776
9777   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9778     { 
9779       decls = DECL_INITIAL (t);
9780       for (decl = BLOCK_VARS (decls); decl; decl = TREE_CHAIN (decl))
9781         callback (decl);
9782     }
9783 }
9784
9785 /* Preserve the external declarations scope across a garbage collect.  */
9786 static GTY(()) tree ext_block;
9787
9788 void
9789 c_write_global_declarations (void)
9790 {
9791   tree t;
9792   unsigned i;
9793
9794   /* We don't want to do this if generating a PCH.  */
9795   if (pch_file)
9796     return;
9797
9798   timevar_start (TV_PHASE_DEFERRED);
9799
9800   /* Do the Objective-C stuff.  This is where all the Objective-C
9801      module stuff gets generated (symtab, class/protocol/selector
9802      lists etc).  */
9803   if (c_dialect_objc ())
9804     objc_write_global_declarations ();
9805
9806   /* Close the external scope.  */
9807   ext_block = pop_scope ();
9808   external_scope = 0;
9809   gcc_assert (!current_scope);
9810
9811   /* Handle -fdump-ada-spec[-slim]. */
9812   if (dump_enabled_p (TDI_ada))
9813     {
9814       /* Build a table of files to generate specs for */
9815       if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
9816         collect_source_ref (main_input_filename);
9817       else
9818         for_each_global_decl (collect_source_ref_cb);
9819
9820       dump_ada_specs (collect_all_refs, NULL);
9821     }
9822
9823   if (ext_block)
9824     {
9825       tree tmp = BLOCK_VARS (ext_block);
9826       int flags;
9827       FILE * stream = dump_begin (TDI_tu, &flags);
9828       if (stream && tmp)
9829         {
9830           dump_node (tmp, flags & ~TDF_SLIM, stream);
9831           dump_end (TDI_tu, stream);
9832         }
9833     }
9834
9835   /* Process all file scopes in this compilation, and the external_scope,
9836      through wrapup_global_declarations and check_global_declarations.  */
9837   FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9838     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
9839   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
9840
9841   timevar_stop (TV_PHASE_DEFERRED);
9842   timevar_start (TV_PHASE_CGRAPH);
9843
9844   /* We're done parsing; proceed to optimize and emit assembly.
9845      FIXME: shouldn't be the front end's responsibility to call this.  */
9846   cgraph_finalize_compilation_unit ();
9847
9848   timevar_stop (TV_PHASE_CGRAPH);
9849   timevar_start (TV_PHASE_DBGINFO);
9850
9851   /* After cgraph has had a chance to emit everything that's going to
9852      be emitted, output debug information for globals.  */
9853   if (!seen_error ())
9854     {
9855       timevar_push (TV_SYMOUT);
9856       FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
9857         c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
9858       c_write_global_declarations_2 (BLOCK_VARS (ext_block));
9859       timevar_pop (TV_SYMOUT);
9860     }
9861
9862   ext_block = NULL;
9863   timevar_stop (TV_PHASE_DBGINFO);
9864 }
9865
9866 /* Register reserved keyword WORD as qualifier for address space AS.  */
9867
9868 void
9869 c_register_addr_space (const char *word, addr_space_t as)
9870 {
9871   int rid = RID_FIRST_ADDR_SPACE + as;
9872   tree id;
9873
9874   /* Address space qualifiers are only supported
9875      in C with GNU extensions enabled.  */
9876   if (c_dialect_objc () || flag_no_asm)
9877     return;
9878
9879   id = get_identifier (word);
9880   C_SET_RID_CODE (id, rid);
9881   C_IS_RESERVED_WORD (id) = 1;
9882   ridpointers [rid] = id;
9883 }
9884
9885 #include "gt-c-decl.h"