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