OSDN Git Service

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