OSDN Git Service

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