OSDN Git Service

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