OSDN Git Service

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