OSDN Git Service

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