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