OSDN Git Service

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