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