OSDN Git Service

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