OSDN Git Service

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