OSDN Git Service

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