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