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