OSDN Git Service

2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / c-decl.c
1 /* Process declarations and variables for C compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
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 (input_location, 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 (input_location, "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 (input_location, "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)
1119 {
1120   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_BUILT_IN (decl))
1121     ;
1122   else if (DECL_INITIAL (decl))
1123     inform (input_location, "previous definition of %q+D was here", decl);
1124   else if (C_DECL_IMPLICIT (decl))
1125     inform (input_location, "previous implicit declaration of %q+D was here", decl);
1126   else
1127     inform (input_location, "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);
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);
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           pedwarned = pedwarn (input_location, 0,
1229                                "conflicting types for %q+D", newdecl);
1230           /* Make sure we keep void as the return type.  */
1231           TREE_TYPE (newdecl) = *newtypep = newtype = oldtype;
1232           C_FUNCTION_IMPLICIT_INT (newdecl) = 0;
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           pedwarned = pedwarn (input_location, 0,
1242                                "conflicting types for %q+D", newdecl);
1243           /* Make sure we keep void as the return type.  */
1244           TREE_TYPE (olddecl) = *oldtypep = oldtype = newtype;
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);
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);
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);
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);
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);
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);
1368               return false;
1369             }
1370           else if (warn_traditional)
1371             {
1372               warned |= warning (OPT_Wtraditional, 
1373                                  "non-static declaration of %q+D "
1374                                  "follows static declaration", newdecl);
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);
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);
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);
1445                   return false;
1446                 }
1447               else if (warn_traditional)
1448                 {
1449                   warned |= warning (OPT_Wtraditional, 
1450                                      "non-static declaration of %q+D "
1451                                      "follows static declaration", newdecl);
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);
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);
1481             }
1482           else
1483             {
1484               error ("redeclaration of %q+D with no linkage", newdecl);
1485               locate_old_decl (olddecl);
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       warned |= warning (0, "redeclaration of %q+D with different visibility "
1499                          "(old visibility preserved)", newdecl);
1500     }
1501
1502   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1503     {
1504       /* Diagnose inline __attribute__ ((noinline)) which is silly.  */
1505       if (DECL_DECLARED_INLINE_P (newdecl)
1506           && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1507         {
1508           warned |= warning (OPT_Wattributes, 
1509                              "inline declaration of %qD follows "
1510                              "declaration with attribute noinline", newdecl);
1511         }
1512       else if (DECL_DECLARED_INLINE_P (olddecl)
1513                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1514         {
1515           warned |= warning (OPT_Wattributes, 
1516                              "declaration of %q+D with attribute "
1517                              "noinline follows inline declaration ", newdecl);
1518         }
1519     }
1520   else /* PARM_DECL, VAR_DECL */
1521     {
1522       /* Redeclaration of a parameter is a constraint violation (this is
1523          not explicitly stated, but follows from C99 6.7p3 [no more than
1524          one declaration of the same identifier with no linkage in the
1525          same scope, except type tags] and 6.2.2p6 [parameters have no
1526          linkage]).  We must check for a forward parameter declaration,
1527          indicated by TREE_ASM_WRITTEN on the old declaration - this is
1528          an extension, the mandatory diagnostic for which is handled by
1529          mark_forward_parm_decls.  */
1530
1531       if (TREE_CODE (newdecl) == PARM_DECL
1532           && (!TREE_ASM_WRITTEN (olddecl) || TREE_ASM_WRITTEN (newdecl)))
1533         {
1534           error ("redefinition of parameter %q+D", newdecl);
1535           locate_old_decl (olddecl);
1536           return false;
1537         }
1538     }
1539
1540   /* Optional warning for completely redundant decls.  */
1541   if (!warned && !pedwarned
1542       && warn_redundant_decls
1543       /* Don't warn about a function declaration followed by a
1544          definition.  */
1545       && !(TREE_CODE (newdecl) == FUNCTION_DECL
1546            && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl))
1547       /* Don't warn about redundant redeclarations of builtins.  */
1548       && !(TREE_CODE (newdecl) == FUNCTION_DECL
1549            && !DECL_BUILT_IN (newdecl)
1550            && DECL_BUILT_IN (olddecl)
1551            && !C_DECL_DECLARED_BUILTIN (olddecl))
1552       /* Don't warn about an extern followed by a definition.  */
1553       && !(DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl))
1554       /* Don't warn about forward parameter decls.  */
1555       && !(TREE_CODE (newdecl) == PARM_DECL
1556            && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1557       /* Don't warn about a variable definition following a declaration.  */
1558       && !(TREE_CODE (newdecl) == VAR_DECL
1559            && DECL_INITIAL (newdecl) && !DECL_INITIAL (olddecl)))
1560     {
1561       warned = warning (OPT_Wredundant_decls, "redundant redeclaration of %q+D",
1562                         newdecl);
1563     }
1564
1565   /* Report location of previous decl/defn.  */
1566   if (warned || pedwarned)
1567     locate_old_decl (olddecl);
1568
1569 #undef DECL_EXTERN_INLINE
1570
1571   return retval;
1572 }
1573
1574 /* Subroutine of duplicate_decls.  NEWDECL has been found to be
1575    consistent with OLDDECL, but carries new information.  Merge the
1576    new information into OLDDECL.  This function issues no
1577    diagnostics.  */
1578
1579 static void
1580 merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
1581 {
1582   bool new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1583                             && DECL_INITIAL (newdecl) != 0);
1584   bool new_is_prototype = (TREE_CODE (newdecl) == FUNCTION_DECL
1585                            && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0);
1586   bool old_is_prototype = (TREE_CODE (olddecl) == FUNCTION_DECL
1587                            && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) != 0);
1588   bool extern_changed = false;
1589
1590   /* For real parm decl following a forward decl, rechain the old decl
1591      in its new location and clear TREE_ASM_WRITTEN (it's not a
1592      forward decl anymore).  */
1593   if (TREE_CODE (newdecl) == PARM_DECL
1594       && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1595     {
1596       struct c_binding *b, **here;
1597
1598       for (here = &current_scope->bindings; *here; here = &(*here)->prev)
1599         if ((*here)->decl == olddecl)
1600           goto found;
1601       gcc_unreachable ();
1602
1603     found:
1604       b = *here;
1605       *here = b->prev;
1606       b->prev = current_scope->bindings;
1607       current_scope->bindings = b;
1608
1609       TREE_ASM_WRITTEN (olddecl) = 0;
1610     }
1611
1612   DECL_ATTRIBUTES (newdecl)
1613     = targetm.merge_decl_attributes (olddecl, newdecl);
1614
1615   /* Merge the data types specified in the two decls.  */
1616   TREE_TYPE (newdecl)
1617     = TREE_TYPE (olddecl)
1618     = composite_type (newtype, oldtype);
1619
1620   /* Lay the type out, unless already done.  */
1621   if (!comptypes (oldtype, TREE_TYPE (newdecl)))
1622     {
1623       if (TREE_TYPE (newdecl) != error_mark_node)
1624         layout_type (TREE_TYPE (newdecl));
1625       if (TREE_CODE (newdecl) != FUNCTION_DECL
1626           && TREE_CODE (newdecl) != TYPE_DECL
1627           && TREE_CODE (newdecl) != CONST_DECL)
1628         layout_decl (newdecl, 0);
1629     }
1630   else
1631     {
1632       /* Since the type is OLDDECL's, make OLDDECL's size go with.  */
1633       DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1634       DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
1635       DECL_MODE (newdecl) = DECL_MODE (olddecl);
1636       if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1637         {
1638           DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1639           DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
1640         }
1641     }
1642
1643   /* Keep the old rtl since we can safely use it.  */
1644   if (HAS_RTL_P (olddecl))
1645     COPY_DECL_RTL (olddecl, newdecl);
1646
1647   /* Merge the type qualifiers.  */
1648   if (TREE_READONLY (newdecl))
1649     TREE_READONLY (olddecl) = 1;
1650
1651   if (TREE_THIS_VOLATILE (newdecl))
1652     TREE_THIS_VOLATILE (olddecl) = 1;
1653
1654   /* Merge deprecatedness.  */
1655   if (TREE_DEPRECATED (newdecl))
1656     TREE_DEPRECATED (olddecl) = 1;
1657
1658   /* If a decl is in a system header and the other isn't, keep the one on the
1659      system header. Otherwise, keep source location of definition rather than
1660      declaration and of prototype rather than non-prototype unless that
1661      prototype is built-in.  */
1662   if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
1663       && DECL_IN_SYSTEM_HEADER (olddecl)
1664       && !DECL_IN_SYSTEM_HEADER (newdecl) )
1665     DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1666   else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS)
1667            && DECL_IN_SYSTEM_HEADER (newdecl)
1668            && !DECL_IN_SYSTEM_HEADER (olddecl))
1669     DECL_SOURCE_LOCATION (olddecl) = DECL_SOURCE_LOCATION (newdecl);
1670   else if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
1671            || (old_is_prototype && !new_is_prototype
1672                && !C_DECL_BUILTIN_PROTOTYPE (olddecl)))
1673     DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1674
1675   /* Merge the initialization information.  */
1676    if (DECL_INITIAL (newdecl) == 0)
1677     DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1678
1679   /* Merge the threadprivate attribute.  */
1680   if (TREE_CODE (olddecl) == VAR_DECL && C_DECL_THREADPRIVATE_P (olddecl))
1681     {
1682       DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1683       C_DECL_THREADPRIVATE_P (newdecl) = 1;
1684     }
1685
1686   if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl), TS_DECL_WITH_VIS))
1687     {
1688       /* Merge the section attribute.
1689          We want to issue an error if the sections conflict but that
1690          must be done later in decl_attributes since we are called
1691          before attributes are assigned.  */
1692       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1693         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1694
1695       /* Copy the assembler name.
1696          Currently, it can only be defined in the prototype.  */
1697       COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1698
1699       /* Use visibility of whichever declaration had it specified */
1700       if (DECL_VISIBILITY_SPECIFIED (olddecl))
1701         {
1702           DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
1703           DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
1704         }
1705
1706       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1707         {
1708           DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
1709           DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1710           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1711           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1712             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1713           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1714           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1715           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1716           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1717           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1718           DECL_IS_NOVOPS (newdecl) |= DECL_IS_NOVOPS (olddecl);
1719         }
1720
1721       /* Merge the storage class information.  */
1722       merge_weak (newdecl, olddecl);
1723
1724       /* For functions, static overrides non-static.  */
1725       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1726         {
1727           TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1728           /* This is since we don't automatically
1729              copy the attributes of NEWDECL into OLDDECL.  */
1730           TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1731           /* If this clears `static', clear it in the identifier too.  */
1732           if (!TREE_PUBLIC (olddecl))
1733             TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1734         }
1735     }
1736
1737   /* In c99, 'extern' declaration before (or after) 'inline' means this
1738      function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
1739      is present.  */
1740   if (TREE_CODE (newdecl) == FUNCTION_DECL
1741       && !flag_gnu89_inline
1742       && (DECL_DECLARED_INLINE_P (newdecl)
1743           || DECL_DECLARED_INLINE_P (olddecl))
1744       && (!DECL_DECLARED_INLINE_P (newdecl)
1745           || !DECL_DECLARED_INLINE_P (olddecl)
1746           || !DECL_EXTERNAL (olddecl))
1747       && DECL_EXTERNAL (newdecl)
1748       && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
1749       && !current_function_decl)
1750     DECL_EXTERNAL (newdecl) = 0;
1751
1752   if (DECL_EXTERNAL (newdecl))
1753     {
1754       TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1755       DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1756
1757       /* An extern decl does not override previous storage class.  */
1758       TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1759       if (!DECL_EXTERNAL (newdecl))
1760         {
1761           DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1762           DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
1763         }
1764     }
1765   else
1766     {
1767       TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1768       TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1769     }
1770
1771   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1772     {
1773       /* If we're redefining a function previously defined as extern
1774          inline, make sure we emit debug info for the inline before we
1775          throw it away, in case it was inlined into a function that
1776          hasn't been written out yet.  */
1777       if (new_is_definition && DECL_INITIAL (olddecl))
1778         {
1779           if (TREE_USED (olddecl)
1780               /* We never inline re-defined extern inline functions.
1781                  FIXME: This would be better handled by keeping both functions
1782                  as separate declarations.  */
1783               && cgraph_function_possibly_inlined_p (olddecl))
1784             (*debug_hooks->outlining_inline_function) (olddecl);
1785
1786           /* The new defn must not be inline.  */
1787           DECL_UNINLINABLE (newdecl) = 1;
1788         }
1789       else
1790         {
1791           /* If either decl says `inline', this fn is inline, unless
1792              its definition was passed already.  */
1793           if (DECL_DECLARED_INLINE_P (newdecl)
1794               || DECL_DECLARED_INLINE_P (olddecl))
1795             DECL_DECLARED_INLINE_P (newdecl) = 1;
1796
1797           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1798             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1799
1800           DECL_DISREGARD_INLINE_LIMITS (newdecl)
1801             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
1802             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
1803                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
1804         }
1805
1806       if (DECL_BUILT_IN (olddecl))
1807         {
1808           /* If redeclaring a builtin function, it stays built in.
1809              But it gets tagged as having been declared.  */
1810           DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1811           DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1812           C_DECL_DECLARED_BUILTIN (newdecl) = 1;
1813           if (new_is_prototype)
1814             C_DECL_BUILTIN_PROTOTYPE (newdecl) = 0;
1815           else
1816             C_DECL_BUILTIN_PROTOTYPE (newdecl)
1817               = C_DECL_BUILTIN_PROTOTYPE (olddecl);
1818         }
1819
1820       /* Preserve function specific target and optimization options */
1821       if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1822           && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1823         DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1824           = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1825
1826       if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1827           && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1828         DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1829           = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1830
1831       /* Also preserve various other info from the definition.  */
1832       if (!new_is_definition)
1833         {
1834           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1835           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1836           DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1837           DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1838           gimple_set_body (newdecl, gimple_body (olddecl));
1839           DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1840
1841           /* See if we've got a function to instantiate from.  */
1842           if (DECL_SAVED_TREE (olddecl))
1843             DECL_ABSTRACT_ORIGIN (newdecl)
1844               = DECL_ABSTRACT_ORIGIN (olddecl);
1845         }
1846     }
1847
1848    extern_changed = DECL_EXTERNAL (olddecl) && !DECL_EXTERNAL (newdecl);
1849
1850    /* Merge the USED information.  */
1851    if (TREE_USED (olddecl))
1852      TREE_USED (newdecl) = 1;
1853    else if (TREE_USED (newdecl))
1854      TREE_USED (olddecl) = 1;
1855
1856   /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1857      But preserve OLDDECL's DECL_UID and DECL_CONTEXT.  */
1858   {
1859     unsigned olddecl_uid = DECL_UID (olddecl);
1860     tree olddecl_context = DECL_CONTEXT (olddecl);
1861
1862     memcpy ((char *) olddecl + sizeof (struct tree_common),
1863             (char *) newdecl + sizeof (struct tree_common),
1864             sizeof (struct tree_decl_common) - sizeof (struct tree_common));
1865     switch (TREE_CODE (olddecl))
1866       {
1867       case FUNCTION_DECL:
1868         gimple_set_body (olddecl, gimple_body (newdecl));
1869         /* fall through */
1870
1871       case FIELD_DECL:
1872       case VAR_DECL:
1873       case PARM_DECL:
1874       case LABEL_DECL:
1875       case RESULT_DECL:
1876       case CONST_DECL:
1877       case TYPE_DECL:
1878         memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1879                 (char *) newdecl + sizeof (struct tree_decl_common),
1880                 tree_code_size (TREE_CODE (olddecl)) - sizeof (struct tree_decl_common));
1881         break;
1882
1883       default:
1884
1885         memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
1886                 (char *) newdecl + sizeof (struct tree_decl_common),
1887                 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common));
1888       }
1889     DECL_UID (olddecl) = olddecl_uid;
1890     DECL_CONTEXT (olddecl) = olddecl_context;
1891   }
1892
1893   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1894      so that encode_section_info has a chance to look at the new decl
1895      flags and attributes.  */
1896   if (DECL_RTL_SET_P (olddecl)
1897       && (TREE_CODE (olddecl) == FUNCTION_DECL
1898           || (TREE_CODE (olddecl) == VAR_DECL
1899               && TREE_STATIC (olddecl))))
1900     make_decl_rtl (olddecl);
1901
1902   /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
1903      and the definition is coming from the old version, cgraph needs
1904      to be called again.  */
1905   if (extern_changed && !new_is_definition
1906       && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl))
1907     cgraph_mark_if_needed (olddecl);
1908 }
1909
1910 /* Handle when a new declaration NEWDECL has the same name as an old
1911    one OLDDECL in the same binding contour.  Prints an error message
1912    if appropriate.
1913
1914    If safely possible, alter OLDDECL to look like NEWDECL, and return
1915    true.  Otherwise, return false.  */
1916
1917 static bool
1918 duplicate_decls (tree newdecl, tree olddecl)
1919 {
1920   tree newtype = NULL, oldtype = NULL;
1921
1922   if (!diagnose_mismatched_decls (newdecl, olddecl, &newtype, &oldtype))
1923     {
1924       /* Avoid `unused variable' and other warnings for OLDDECL.  */
1925       TREE_NO_WARNING (olddecl) = 1;
1926       return false;
1927     }
1928
1929   merge_decls (newdecl, olddecl, newtype, oldtype);
1930   return true;
1931 }
1932
1933 \f
1934 /* Check whether decl-node NEW_DECL shadows an existing declaration.  */
1935 static void
1936 warn_if_shadowing (tree new_decl)
1937 {
1938   struct c_binding *b;
1939
1940   /* Shadow warnings wanted?  */
1941   if (!warn_shadow
1942       /* No shadow warnings for internally generated vars.  */
1943       || DECL_IS_BUILTIN (new_decl)
1944       /* No shadow warnings for vars made for inlining.  */
1945       || DECL_FROM_INLINE (new_decl))
1946     return;
1947
1948   /* Is anything being shadowed?  Invisible decls do not count.  */
1949   for (b = I_SYMBOL_BINDING (DECL_NAME (new_decl)); b; b = b->shadowed)
1950     if (b->decl && b->decl != new_decl && !b->invisible)
1951       {
1952         tree old_decl = b->decl;
1953
1954         if (old_decl == error_mark_node)
1955           {
1956             warning (OPT_Wshadow, "declaration of %q+D shadows previous "
1957                      "non-variable", new_decl);
1958             break;
1959           }
1960         else if (TREE_CODE (old_decl) == PARM_DECL)
1961           warning (OPT_Wshadow, "declaration of %q+D shadows a parameter",
1962                    new_decl);
1963         else if (DECL_FILE_SCOPE_P (old_decl))
1964           warning (OPT_Wshadow, "declaration of %q+D shadows a global "
1965                    "declaration", new_decl);
1966         else if (TREE_CODE (old_decl) == FUNCTION_DECL
1967                  && DECL_BUILT_IN (old_decl))
1968           {
1969             warning (OPT_Wshadow, "declaration of %q+D shadows "
1970                      "a built-in function", new_decl);
1971             break;
1972           }
1973         else
1974           warning (OPT_Wshadow, "declaration of %q+D shadows a previous local",
1975                    new_decl);
1976
1977         warning (OPT_Wshadow, "%Jshadowed declaration is here", old_decl);
1978
1979         break;
1980       }
1981 }
1982
1983
1984 /* Subroutine of pushdecl.
1985
1986    X is a TYPE_DECL for a typedef statement.  Create a brand new
1987    ..._TYPE node (which will be just a variant of the existing
1988    ..._TYPE node with identical properties) and then install X
1989    as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
1990
1991    The whole point here is to end up with a situation where each
1992    and every ..._TYPE node the compiler creates will be uniquely
1993    associated with AT MOST one node representing a typedef name.
1994    This way, even though the compiler substitutes corresponding
1995    ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
1996    early on, later parts of the compiler can always do the reverse
1997    translation and get back the corresponding typedef name.  For
1998    example, given:
1999
2000         typedef struct S MY_TYPE;
2001         MY_TYPE object;
2002
2003    Later parts of the compiler might only know that `object' was of
2004    type `struct S' if it were not for code just below.  With this
2005    code however, later parts of the compiler see something like:
2006
2007         struct S' == struct S
2008         typedef struct S' MY_TYPE;
2009         struct S' object;
2010
2011     And they can then deduce (from the node for type struct S') that
2012     the original object declaration was:
2013
2014                 MY_TYPE object;
2015
2016     Being able to do this is important for proper support of protoize,
2017     and also for generating precise symbolic debugging information
2018     which takes full account of the programmer's (typedef) vocabulary.
2019
2020     Obviously, we don't want to generate a duplicate ..._TYPE node if
2021     the TYPE_DECL node that we are now processing really represents a
2022     standard built-in type.  */
2023
2024 static void
2025 clone_underlying_type (tree x)
2026 {
2027   if (DECL_IS_BUILTIN (x))
2028     {
2029       if (TYPE_NAME (TREE_TYPE (x)) == 0)
2030         TYPE_NAME (TREE_TYPE (x)) = x;
2031     }
2032   else if (TREE_TYPE (x) != error_mark_node
2033            && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
2034     {
2035       tree tt = TREE_TYPE (x);
2036       DECL_ORIGINAL_TYPE (x) = tt;
2037       tt = build_variant_type_copy (tt);
2038       TYPE_NAME (tt) = x;
2039       TREE_USED (tt) = TREE_USED (x);
2040       TREE_TYPE (x) = tt;
2041     }
2042 }
2043
2044 /* Record a decl-node X as belonging to the current lexical scope.
2045    Check for errors (such as an incompatible declaration for the same
2046    name already seen in the same scope).
2047
2048    Returns either X or an old decl for the same name.
2049    If an old decl is returned, it may have been smashed
2050    to agree with what X says.  */
2051
2052 tree
2053 pushdecl (tree x)
2054 {
2055   tree name = DECL_NAME (x);
2056   struct c_scope *scope = current_scope;
2057   struct c_binding *b;
2058   bool nested = false;
2059
2060   /* Must set DECL_CONTEXT for everything not at file scope or
2061      DECL_FILE_SCOPE_P won't work.  Local externs don't count
2062      unless they have initializers (which generate code).  */
2063   if (current_function_decl
2064       && ((TREE_CODE (x) != FUNCTION_DECL && TREE_CODE (x) != VAR_DECL)
2065           || DECL_INITIAL (x) || !DECL_EXTERNAL (x)))
2066     DECL_CONTEXT (x) = current_function_decl;
2067
2068   /* If this is of variably modified type, prevent jumping into its
2069      scope.  */
2070   if ((TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == TYPE_DECL)
2071       && variably_modified_type_p (TREE_TYPE (x), NULL_TREE))
2072     c_begin_vm_scope (scope->depth);
2073
2074   /* Anonymous decls are just inserted in the scope.  */
2075   if (!name)
2076     {
2077       bind (name, x, scope, /*invisible=*/false, /*nested=*/false);
2078       return x;
2079     }
2080
2081   /* First, see if there is another declaration with the same name in
2082      the current scope.  If there is, duplicate_decls may do all the
2083      work for us.  If duplicate_decls returns false, that indicates
2084      two incompatible decls in the same scope; we are to silently
2085      replace the old one (duplicate_decls has issued all appropriate
2086      diagnostics).  In particular, we should not consider possible
2087      duplicates in the external scope, or shadowing.  */
2088   b = I_SYMBOL_BINDING (name);
2089   if (b && B_IN_SCOPE (b, scope))
2090     {
2091       struct c_binding *b_ext, *b_use;
2092       tree type = TREE_TYPE (x);
2093       tree visdecl = b->decl;
2094       tree vistype = TREE_TYPE (visdecl);
2095       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
2096           && COMPLETE_TYPE_P (TREE_TYPE (x)))
2097         b->inner_comp = false;
2098       b_use = b;
2099       b_ext = b;
2100       /* If this is an external linkage declaration, we should check
2101          for compatibility with the type in the external scope before
2102          setting the type at this scope based on the visible
2103          information only.  */
2104       if (TREE_PUBLIC (x) && TREE_PUBLIC (visdecl))
2105         {
2106           while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
2107             b_ext = b_ext->shadowed;
2108           if (b_ext)
2109             {
2110               b_use = b_ext;
2111               if (b_use->type)
2112                 TREE_TYPE (b_use->decl) = b_use->type;
2113             }
2114         }
2115       if (duplicate_decls (x, b_use->decl))
2116         {
2117           if (b_use != b)
2118             {
2119               /* Save the updated type in the external scope and
2120                  restore the proper type for this scope.  */
2121               tree thistype;
2122               if (comptypes (vistype, type))
2123                 thistype = composite_type (vistype, type);
2124               else
2125                 thistype = TREE_TYPE (b_use->decl);
2126               b_use->type = TREE_TYPE (b_use->decl);
2127               if (TREE_CODE (b_use->decl) == FUNCTION_DECL
2128                   && DECL_BUILT_IN (b_use->decl))
2129                 thistype
2130                   = build_type_attribute_variant (thistype,
2131                                                   TYPE_ATTRIBUTES
2132                                                   (b_use->type));
2133               TREE_TYPE (b_use->decl) = thistype;
2134             }
2135           return b_use->decl;
2136         }
2137       else
2138         goto skip_external_and_shadow_checks;
2139     }
2140
2141   /* All declarations with external linkage, and all external
2142      references, go in the external scope, no matter what scope is
2143      current.  However, the binding in that scope is ignored for
2144      purposes of normal name lookup.  A separate binding structure is
2145      created in the requested scope; this governs the normal
2146      visibility of the symbol.
2147
2148      The binding in the externals scope is used exclusively for
2149      detecting duplicate declarations of the same object, no matter
2150      what scope they are in; this is what we do here.  (C99 6.2.7p2:
2151      All declarations that refer to the same object or function shall
2152      have compatible type; otherwise, the behavior is undefined.)  */
2153   if (DECL_EXTERNAL (x) || scope == file_scope)
2154     {
2155       tree type = TREE_TYPE (x);
2156       tree vistype = 0;
2157       tree visdecl = 0;
2158       bool type_saved = false;
2159       if (b && !B_IN_EXTERNAL_SCOPE (b)
2160           && (TREE_CODE (b->decl) == FUNCTION_DECL
2161               || TREE_CODE (b->decl) == VAR_DECL)
2162           && DECL_FILE_SCOPE_P (b->decl))
2163         {
2164           visdecl = b->decl;
2165           vistype = TREE_TYPE (visdecl);
2166         }
2167       if (scope != file_scope
2168           && !DECL_IN_SYSTEM_HEADER (x))
2169         warning (OPT_Wnested_externs, "nested extern declaration of %qD", x);
2170
2171       while (b && !B_IN_EXTERNAL_SCOPE (b))
2172         {
2173           /* If this decl might be modified, save its type.  This is
2174              done here rather than when the decl is first bound
2175              because the type may change after first binding, through
2176              being completed or through attributes being added.  If we
2177              encounter multiple such decls, only the first should have
2178              its type saved; the others will already have had their
2179              proper types saved and the types will not have changed as
2180              their scopes will not have been re-entered.  */
2181           if (DECL_P (b->decl) && DECL_FILE_SCOPE_P (b->decl) && !type_saved)
2182             {
2183               b->type = TREE_TYPE (b->decl);
2184               type_saved = true;
2185             }
2186           if (B_IN_FILE_SCOPE (b)
2187               && TREE_CODE (b->decl) == VAR_DECL
2188               && TREE_STATIC (b->decl)
2189               && TREE_CODE (TREE_TYPE (b->decl)) == ARRAY_TYPE
2190               && !TYPE_DOMAIN (TREE_TYPE (b->decl))
2191               && TREE_CODE (type) == ARRAY_TYPE
2192               && TYPE_DOMAIN (type)
2193               && TYPE_MAX_VALUE (TYPE_DOMAIN (type))
2194               && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
2195             {
2196               /* Array type completed in inner scope, which should be
2197                  diagnosed if the completion does not have size 1 and
2198                  it does not get completed in the file scope.  */
2199               b->inner_comp = true;
2200             }
2201           b = b->shadowed;
2202         }
2203
2204       /* If a matching external declaration has been found, set its
2205          type to the composite of all the types of that declaration.
2206          After the consistency checks, it will be reset to the
2207          composite of the visible types only.  */
2208       if (b && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2209           && b->type)
2210         TREE_TYPE (b->decl) = b->type;
2211
2212       /* The point of the same_translation_unit_p check here is,
2213          we want to detect a duplicate decl for a construct like
2214          foo() { extern bar(); } ... static bar();  but not if
2215          they are in different translation units.  In any case,
2216          the static does not go in the externals scope.  */
2217       if (b
2218           && (TREE_PUBLIC (x) || same_translation_unit_p (x, b->decl))
2219           && duplicate_decls (x, b->decl))
2220         {
2221           tree thistype;
2222           if (vistype)
2223             {
2224               if (comptypes (vistype, type))
2225                 thistype = composite_type (vistype, type);
2226               else
2227                 thistype = TREE_TYPE (b->decl);
2228             }
2229           else
2230             thistype = type;
2231           b->type = TREE_TYPE (b->decl);
2232           if (TREE_CODE (b->decl) == FUNCTION_DECL && DECL_BUILT_IN (b->decl))
2233             thistype
2234               = build_type_attribute_variant (thistype,
2235                                               TYPE_ATTRIBUTES (b->type));
2236           TREE_TYPE (b->decl) = thistype;
2237           bind (name, b->decl, scope, /*invisible=*/false, /*nested=*/true);
2238           return b->decl;
2239         }
2240       else if (TREE_PUBLIC (x))
2241         {
2242           if (visdecl && !b && duplicate_decls (x, visdecl))
2243             {
2244               /* An external declaration at block scope referring to a
2245                  visible entity with internal linkage.  The composite
2246                  type will already be correct for this scope, so we
2247                  just need to fall through to make the declaration in
2248                  this scope.  */
2249               nested = true;
2250               x = visdecl;
2251             }
2252           else
2253             {
2254               bind (name, x, external_scope, /*invisible=*/true,
2255                     /*nested=*/false);
2256               nested = true;
2257             }
2258         }
2259     }
2260
2261   if (TREE_CODE (x) != PARM_DECL)
2262     warn_if_shadowing (x);
2263
2264  skip_external_and_shadow_checks:
2265   if (TREE_CODE (x) == TYPE_DECL)
2266     clone_underlying_type (x);
2267
2268   bind (name, x, scope, /*invisible=*/false, nested);
2269
2270   /* If x's type is incomplete because it's based on a
2271      structure or union which has not yet been fully declared,
2272      attach it to that structure or union type, so we can go
2273      back and complete the variable declaration later, if the
2274      structure or union gets fully declared.
2275
2276      If the input is erroneous, we can have error_mark in the type
2277      slot (e.g. "f(void a, ...)") - that doesn't count as an
2278      incomplete type.  */
2279   if (TREE_TYPE (x) != error_mark_node
2280       && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2281     {
2282       tree element = TREE_TYPE (x);
2283
2284       while (TREE_CODE (element) == ARRAY_TYPE)
2285         element = TREE_TYPE (element);
2286       element = TYPE_MAIN_VARIANT (element);
2287
2288       if ((TREE_CODE (element) == RECORD_TYPE
2289            || TREE_CODE (element) == UNION_TYPE)
2290           && (TREE_CODE (x) != TYPE_DECL
2291               || TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE)
2292           && !COMPLETE_TYPE_P (element))
2293         C_TYPE_INCOMPLETE_VARS (element)
2294           = tree_cons (NULL_TREE, x, C_TYPE_INCOMPLETE_VARS (element));
2295     }
2296   return x;
2297 }
2298
2299 /* Record X as belonging to file scope.
2300    This is used only internally by the Objective-C front end,
2301    and is limited to its needs.  duplicate_decls is not called;
2302    if there is any preexisting decl for this identifier, it is an ICE.  */
2303
2304 tree
2305 pushdecl_top_level (tree x)
2306 {
2307   tree name;
2308   bool nested = false;
2309   gcc_assert (TREE_CODE (x) == VAR_DECL || TREE_CODE (x) == CONST_DECL);
2310
2311   name = DECL_NAME (x);
2312
2313  gcc_assert (TREE_CODE (x) == CONST_DECL || !I_SYMBOL_BINDING (name));
2314
2315   if (TREE_PUBLIC (x))
2316     {
2317       bind (name, x, external_scope, /*invisible=*/true, /*nested=*/false);
2318       nested = true;
2319     }
2320   if (file_scope)
2321     bind (name, x, file_scope, /*invisible=*/false, nested);
2322
2323   return x;
2324 }
2325 \f
2326 static void
2327 implicit_decl_warning (tree id, tree olddecl)
2328 {
2329   if (warn_implicit_function_declaration)
2330     {
2331       bool warned;
2332
2333       if (flag_isoc99)
2334         warned = pedwarn (input_location, OPT_Wimplicit_function_declaration,
2335                           "implicit declaration of function %qE", id);
2336       else 
2337         warned = warning (OPT_Wimplicit_function_declaration, 
2338                           G_("implicit declaration of function %qE"), id);
2339       if (olddecl && warned)
2340         locate_old_decl (olddecl);
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);
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);
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);
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 (input_location, 0,
2888                            "unnamed struct/union that defines no instances");
2889                   warned = 1;
2890                 }
2891             }
2892           else if (!declspecs->tag_defined_p
2893                    && declspecs->storage_class != csc_none)
2894             {
2895               if (warned != 1)
2896                 pedwarn (input_location, 0,
2897                          "empty declaration with storage class specifier "
2898                          "does not redeclare tag");
2899               warned = 1;
2900               pending_xref_error ();
2901             }
2902           else if (!declspecs->tag_defined_p
2903                    && (declspecs->const_p
2904                        || declspecs->volatile_p
2905                        || declspecs->restrict_p))
2906             {
2907               if (warned != 1)
2908                 pedwarn (input_location, 0,
2909                          "empty declaration with type qualifier "
2910                           "does not redeclare tag");
2911               warned = 1;
2912               pending_xref_error ();
2913             }
2914           else
2915             {
2916               pending_invalid_xref = 0;
2917               t = lookup_tag (code, name, 1);
2918
2919               if (t == 0)
2920                 {
2921                   t = make_node (code);
2922                   pushtag (name, t);
2923                 }
2924             }
2925         }
2926       else
2927         {
2928           if (warned != 1 && !in_system_header)
2929             {
2930               pedwarn (input_location, 0,
2931                        "useless type name in empty declaration");
2932               warned = 1;
2933             }
2934         }
2935     }
2936   else if (warned != 1 && !in_system_header && declspecs->typedef_p)
2937     {
2938       pedwarn (input_location, 0, "useless type name in empty declaration");
2939       warned = 1;
2940     }
2941
2942   pending_invalid_xref = 0;
2943
2944   if (declspecs->inline_p)
2945     {
2946       error ("%<inline%> in empty declaration");
2947       warned = 1;
2948     }
2949
2950   if (current_scope == file_scope && declspecs->storage_class == csc_auto)
2951     {
2952       error ("%<auto%> in file-scope empty declaration");
2953       warned = 1;
2954     }
2955
2956   if (current_scope == file_scope && declspecs->storage_class == csc_register)
2957     {
2958       error ("%<register%> in file-scope empty declaration");
2959       warned = 1;
2960     }
2961
2962   if (!warned && !in_system_header && declspecs->storage_class != csc_none)
2963     {
2964       warning (0, "useless storage class specifier in empty declaration");
2965       warned = 2;
2966     }
2967
2968   if (!warned && !in_system_header && declspecs->thread_p)
2969     {
2970       warning (0, "useless %<__thread%> in empty declaration");
2971       warned = 2;
2972     }
2973
2974   if (!warned && !in_system_header && (declspecs->const_p
2975                                        || declspecs->volatile_p
2976                                        || declspecs->restrict_p))
2977     {
2978       warning (0, "useless type qualifier in empty declaration");
2979       warned = 2;
2980     }
2981
2982   if (warned != 1)
2983     {
2984       if (!found_tag)
2985         pedwarn (input_location, 0, "empty declaration");
2986     }
2987 }
2988 \f
2989
2990 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
2991    bits.  SPECS represents declaration specifiers that the grammar
2992    only permits to contain type qualifiers and attributes.  */
2993
2994 int
2995 quals_from_declspecs (const struct c_declspecs *specs)
2996 {
2997   int quals = ((specs->const_p ? TYPE_QUAL_CONST : 0)
2998                | (specs->volatile_p ? TYPE_QUAL_VOLATILE : 0)
2999                | (specs->restrict_p ? TYPE_QUAL_RESTRICT : 0));
3000   gcc_assert (!specs->type
3001               && !specs->decl_attr
3002               && specs->typespec_word == cts_none
3003               && specs->storage_class == csc_none
3004               && !specs->typedef_p
3005               && !specs->explicit_signed_p
3006               && !specs->deprecated_p
3007               && !specs->long_p
3008               && !specs->long_long_p
3009               && !specs->short_p
3010               && !specs->signed_p
3011               && !specs->unsigned_p
3012               && !specs->complex_p
3013               && !specs->inline_p
3014               && !specs->thread_p);
3015   return quals;
3016 }
3017
3018 /* Construct an array declarator.  EXPR is the expression inside [],
3019    or NULL_TREE.  QUALS are the type qualifiers inside the [] (to be
3020    applied to the pointer to which a parameter array is converted).
3021    STATIC_P is true if "static" is inside the [], false otherwise.
3022    VLA_UNSPEC_P is true if the array is [*], a VLA of unspecified
3023    length which is nevertheless a complete type, false otherwise.  The
3024    field for the contained declarator is left to be filled in by
3025    set_array_declarator_inner.  */
3026
3027 struct c_declarator *
3028 build_array_declarator (tree expr, struct c_declspecs *quals, bool static_p,
3029                         bool vla_unspec_p)
3030 {
3031   struct c_declarator *declarator = XOBNEW (&parser_obstack,
3032                                             struct c_declarator);
3033   declarator->kind = cdk_array;
3034   declarator->declarator = 0;
3035   declarator->u.array.dimen = expr;
3036   if (quals)
3037     {
3038       declarator->u.array.attrs = quals->attrs;
3039       declarator->u.array.quals = quals_from_declspecs (quals);
3040     }
3041   else
3042     {
3043       declarator->u.array.attrs = NULL_TREE;
3044       declarator->u.array.quals = 0;
3045     }
3046   declarator->u.array.static_p = static_p;
3047   declarator->u.array.vla_unspec_p = vla_unspec_p;
3048   if (!flag_isoc99)
3049     {
3050       if (static_p || quals != NULL)
3051         pedwarn (input_location, OPT_pedantic,
3052                  "ISO C90 does not support %<static%> or type "
3053                  "qualifiers in parameter array declarators");
3054       if (vla_unspec_p)
3055         pedwarn (input_location, OPT_pedantic,
3056                  "ISO C90 does not support %<[*]%> array declarators");
3057     }
3058   if (vla_unspec_p)
3059     {
3060       if (!current_scope->parm_flag)
3061         {
3062           /* C99 6.7.5.2p4 */
3063           error ("%<[*]%> not allowed in other than function prototype scope");
3064           declarator->u.array.vla_unspec_p = false;
3065           return NULL;
3066         }
3067       current_scope->had_vla_unspec = true;
3068     }
3069   return declarator;
3070 }
3071
3072 /* Set the contained declarator of an array declarator.  DECL is the
3073    declarator, as constructed by build_array_declarator; INNER is what
3074    appears on the left of the [].  */
3075
3076 struct c_declarator *
3077 set_array_declarator_inner (struct c_declarator *decl,
3078                             struct c_declarator *inner)
3079 {
3080   decl->declarator = inner;
3081   return decl;
3082 }
3083
3084 /* INIT is a constructor that forms DECL's initializer.  If the final
3085    element initializes a flexible array field, add the size of that
3086    initializer to DECL's size.  */
3087
3088 static void
3089 add_flexible_array_elts_to_size (tree decl, tree init)
3090 {
3091   tree elt, type;
3092
3093   if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
3094     return;
3095
3096   elt = VEC_last (constructor_elt, CONSTRUCTOR_ELTS (init))->value;
3097   type = TREE_TYPE (elt);
3098   if (TREE_CODE (type) == ARRAY_TYPE
3099       && TYPE_SIZE (type) == NULL_TREE
3100       && TYPE_DOMAIN (type) != NULL_TREE
3101       && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE)
3102     {
3103       complete_array_type (&type, elt, false);
3104       DECL_SIZE (decl)
3105         = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (type));
3106       DECL_SIZE_UNIT (decl)
3107         = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl), TYPE_SIZE_UNIT (type));
3108     }
3109 }
3110 \f
3111 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
3112
3113 tree
3114 groktypename (struct c_type_name *type_name)
3115 {
3116   tree type;
3117   tree attrs = type_name->specs->attrs;
3118
3119   type_name->specs->attrs = NULL_TREE;
3120
3121   type = grokdeclarator (type_name->declarator, type_name->specs, TYPENAME,
3122                          false, NULL, &attrs, DEPRECATED_NORMAL);
3123
3124   /* Apply attributes.  */
3125   decl_attributes (&type, attrs, 0);
3126
3127   return type;
3128 }
3129
3130 /* Decode a declarator in an ordinary declaration or data definition.
3131    This is called as soon as the type information and variable name
3132    have been parsed, before parsing the initializer if any.
3133    Here we create the ..._DECL node, fill in its type,
3134    and put it on the list of decls for the current context.
3135    The ..._DECL node is returned as the value.
3136
3137    Exception: for arrays where the length is not specified,
3138    the type is left null, to be filled in by `finish_decl'.
3139
3140    Function definitions do not come here; they go to start_function
3141    instead.  However, external and forward declarations of functions
3142    do go through here.  Structure field declarations are done by
3143    grokfield and not through here.  */
3144
3145 tree
3146 start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs,
3147             bool initialized, tree attributes)
3148 {
3149   tree decl;
3150   tree tem;
3151   enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
3152
3153   /* An object declared as __attribute__((deprecated)) suppresses
3154      warnings of uses of other deprecated items.  */
3155   if (lookup_attribute ("deprecated", attributes))
3156     deprecated_state = DEPRECATED_SUPPRESS;
3157
3158   decl = grokdeclarator (declarator, declspecs,
3159                          NORMAL, initialized, NULL, &attributes,
3160                          deprecated_state);
3161   if (!decl)
3162     return 0;
3163
3164   if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
3165     warning (OPT_Wmain, "%q+D is usually a function", decl);
3166
3167   if (initialized)
3168     /* Is it valid for this decl to have an initializer at all?
3169        If not, set INITIALIZED to zero, which will indirectly
3170        tell 'finish_decl' to ignore the initializer once it is parsed.  */
3171     switch (TREE_CODE (decl))
3172       {
3173       case TYPE_DECL:
3174         error ("typedef %qD is initialized (use __typeof__ instead)", decl);
3175         initialized = 0;
3176         break;
3177
3178       case FUNCTION_DECL:
3179         error ("function %qD is initialized like a variable", decl);
3180         initialized = 0;
3181         break;
3182
3183       case PARM_DECL:
3184         /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.  */
3185         error ("parameter %qD is initialized", decl);
3186         initialized = 0;
3187         break;
3188
3189       default:
3190         /* Don't allow initializations for incomplete types except for
3191            arrays which might be completed by the initialization.  */
3192
3193         /* This can happen if the array size is an undefined macro.
3194            We already gave a warning, so we don't need another one.  */
3195         if (TREE_TYPE (decl) == error_mark_node)
3196           initialized = 0;
3197         else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3198           {
3199             /* A complete type is ok if size is fixed.  */
3200
3201             if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3202                 || C_DECL_VARIABLE_SIZE (decl))
3203               {
3204                 error ("variable-sized object may not be initialized");
3205                 initialized = 0;
3206               }
3207           }
3208         else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3209           {
3210             error ("variable %qD has initializer but incomplete type", decl);
3211             initialized = 0;
3212           }
3213         else if (C_DECL_VARIABLE_SIZE (decl))
3214           {
3215             /* Although C99 is unclear about whether incomplete arrays
3216                of VLAs themselves count as VLAs, it does not make
3217                sense to permit them to be initialized given that
3218                ordinary VLAs may not be initialized.  */
3219             error ("variable-sized object may not be initialized");
3220             initialized = 0;
3221           }
3222       }
3223
3224   if (initialized)
3225     {
3226       if (current_scope == file_scope)
3227         TREE_STATIC (decl) = 1;
3228
3229       /* Tell 'pushdecl' this is an initialized decl
3230          even though we don't yet have the initializer expression.
3231          Also tell 'finish_decl' it may store the real initializer.  */
3232       DECL_INITIAL (decl) = error_mark_node;
3233     }
3234
3235   /* If this is a function declaration, write a record describing it to the
3236      prototypes file (if requested).  */
3237
3238   if (TREE_CODE (decl) == FUNCTION_DECL)
3239     gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3240
3241   /* ANSI specifies that a tentative definition which is not merged with
3242      a non-tentative definition behaves exactly like a definition with an
3243      initializer equal to zero.  (Section 3.7.2)
3244
3245      -fno-common gives strict ANSI behavior, though this tends to break
3246      a large body of code that grew up without this rule.
3247
3248      Thread-local variables are never common, since there's no entrenched
3249      body of code to break, and it allows more efficient variable references
3250      in the presence of dynamic linking.  */
3251
3252   if (TREE_CODE (decl) == VAR_DECL
3253       && !initialized
3254       && TREE_PUBLIC (decl)
3255       && !DECL_THREAD_LOCAL_P (decl)
3256       && !flag_no_common)
3257     DECL_COMMON (decl) = 1;
3258
3259   /* Set attributes here so if duplicate decl, will have proper attributes.  */
3260   decl_attributes (&decl, attributes, 0);
3261
3262   /* Handle gnu_inline attribute.  */
3263   if (declspecs->inline_p
3264       && !flag_gnu89_inline
3265       && TREE_CODE (decl) == FUNCTION_DECL
3266       && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl))
3267           || current_function_decl))
3268     {
3269       if (declspecs->storage_class == csc_auto && current_scope != file_scope)
3270         ;
3271       else if (declspecs->storage_class != csc_static)
3272         DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl);
3273     }
3274
3275   if (TREE_CODE (decl) == FUNCTION_DECL
3276       && targetm.calls.promote_prototypes (TREE_TYPE (decl)))
3277     {
3278       struct c_declarator *ce = declarator;
3279
3280       if (ce->kind == cdk_pointer)
3281         ce = declarator->declarator;
3282       if (ce->kind == cdk_function)
3283         {
3284           tree args = ce->u.arg_info->parms;
3285           for (; args; args = TREE_CHAIN (args))
3286             {
3287               tree type = TREE_TYPE (args);
3288               if (type && INTEGRAL_TYPE_P (type)
3289                   && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3290                 DECL_ARG_TYPE (args) = integer_type_node;
3291             }
3292         }
3293     }
3294
3295   if (TREE_CODE (decl) == FUNCTION_DECL
3296       && DECL_DECLARED_INLINE_P (decl)
3297       && DECL_UNINLINABLE (decl)
3298       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3299     warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
3300              decl);
3301
3302   /* C99 6.7.4p3: An inline definition of a function with external
3303      linkage shall not contain a definition of a modifiable object
3304      with static storage duration...  */
3305   if (TREE_CODE (decl) == VAR_DECL
3306       && current_scope != file_scope
3307       && TREE_STATIC (decl)
3308       && !TREE_READONLY (decl)
3309       && DECL_DECLARED_INLINE_P (current_function_decl)
3310       && DECL_EXTERNAL (current_function_decl))
3311     pedwarn (input_location, 0,
3312              "%q+D is static but declared in inline function %qD "
3313              "which is not static", decl, current_function_decl);
3314
3315   /* Add this decl to the current scope.
3316      TEM may equal DECL or it may be a previous decl of the same name.  */
3317   tem = pushdecl (decl);
3318
3319   if (initialized && DECL_EXTERNAL (tem))
3320     {
3321       DECL_EXTERNAL (tem) = 0;
3322       TREE_STATIC (tem) = 1;
3323     }
3324
3325   return tem;
3326 }
3327
3328 /* Initialize EH if not initialized yet and exceptions are enabled.  */
3329
3330 void
3331 c_maybe_initialize_eh (void)
3332 {
3333   if (!flag_exceptions || c_eh_initialized_p)
3334     return;
3335
3336   c_eh_initialized_p = true;
3337   eh_personality_libfunc
3338     = init_one_libfunc (USING_SJLJ_EXCEPTIONS
3339                         ? "__gcc_personality_sj0"
3340                         : "__gcc_personality_v0");
3341   default_init_unwind_resume_libfunc ();
3342   using_eh_for_cleanups ();
3343 }
3344
3345 /* Finish processing of a declaration;
3346    install its initial value.
3347    If the length of an array type is not known before,
3348    it must be determined now, from the initial value, or it is an error.  */
3349
3350 void
3351 finish_decl (tree decl, tree init, tree asmspec_tree)
3352 {
3353   tree type;
3354   int was_incomplete = (DECL_SIZE (decl) == 0);
3355   const char *asmspec = 0;
3356
3357   /* If a name was specified, get the string.  */
3358   if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
3359       && DECL_FILE_SCOPE_P (decl))
3360     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
3361   if (asmspec_tree)
3362     asmspec = TREE_STRING_POINTER (asmspec_tree);
3363
3364   /* If `start_decl' didn't like having an initialization, ignore it now.  */
3365   if (init != 0 && DECL_INITIAL (decl) == 0)
3366     init = 0;
3367
3368   /* Don't crash if parm is initialized.  */
3369   if (TREE_CODE (decl) == PARM_DECL)
3370     init = 0;
3371
3372   if (init)
3373     store_init_value (decl, init);
3374
3375   if (c_dialect_objc () && (TREE_CODE (decl) == VAR_DECL
3376                             || TREE_CODE (decl) == FUNCTION_DECL
3377                             || TREE_CODE (decl) == FIELD_DECL))
3378     objc_check_decl (decl);
3379
3380   type = TREE_TYPE (decl);
3381
3382   /* Deduce size of array from initialization, if not already known.  */
3383   if (TREE_CODE (type) == ARRAY_TYPE
3384       && TYPE_DOMAIN (type) == 0
3385       && TREE_CODE (decl) != TYPE_DECL)
3386     {
3387       bool do_default
3388         = (TREE_STATIC (decl)
3389            /* Even if pedantic, an external linkage array
3390               may have incomplete type at first.  */
3391            ? pedantic && !TREE_PUBLIC (decl)
3392            : !DECL_EXTERNAL (decl));
3393       int failure
3394         = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl),
3395                                do_default);
3396
3397       /* Get the completed type made by complete_array_type.  */
3398       type = TREE_TYPE (decl);
3399
3400       switch (failure)
3401         {
3402         case 1:
3403           error ("initializer fails to determine size of %q+D", decl);
3404           break;
3405
3406         case 2:
3407           if (do_default)
3408             error ("array size missing in %q+D", decl);
3409           /* If a `static' var's size isn't known,
3410              make it extern as well as static, so it does not get
3411              allocated.
3412              If it is not `static', then do not mark extern;
3413              finish_incomplete_decl will give it a default size
3414              and it will get allocated.  */
3415           else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
3416             DECL_EXTERNAL (decl) = 1;
3417           break;
3418
3419         case 3:
3420           error ("zero or negative size array %q+D", decl);
3421           break;
3422
3423         case 0:
3424           /* For global variables, update the copy of the type that
3425              exists in the binding.  */
3426           if (TREE_PUBLIC (decl))
3427             {
3428               struct c_binding *b_ext = I_SYMBOL_BINDING (DECL_NAME (decl));
3429               while (b_ext && !B_IN_EXTERNAL_SCOPE (b_ext))
3430                 b_ext = b_ext->shadowed;
3431               if (b_ext)
3432                 {
3433                   if (b_ext->type)
3434                     b_ext->type = composite_type (b_ext->type, type);
3435                   else
3436                     b_ext->type = type;
3437                 }
3438             }
3439           break;
3440
3441         default:
3442           gcc_unreachable ();
3443         }
3444
3445       if (DECL_INITIAL (decl))
3446         TREE_TYPE (DECL_INITIAL (decl)) = type;
3447
3448       layout_decl (decl, 0);
3449     }
3450
3451   if (TREE_CODE (decl) == VAR_DECL)
3452     {
3453       if (init && TREE_CODE (init) == CONSTRUCTOR)
3454         add_flexible_array_elts_to_size (decl, init);
3455
3456       if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
3457           && COMPLETE_TYPE_P (TREE_TYPE (decl)))
3458         layout_decl (decl, 0);
3459
3460       if (DECL_SIZE (decl) == 0
3461           /* Don't give an error if we already gave one earlier.  */
3462           && TREE_TYPE (decl) != error_mark_node
3463           && (TREE_STATIC (decl)
3464               /* A static variable with an incomplete type
3465                  is an error if it is initialized.
3466                  Also if it is not file scope.
3467                  Otherwise, let it through, but if it is not `extern'
3468                  then it may cause an error message later.  */
3469               ? (DECL_INITIAL (decl) != 0
3470                  || !DECL_FILE_SCOPE_P (decl))
3471               /* An automatic variable with an incomplete type
3472                  is an error.  */
3473               : !DECL_EXTERNAL (decl)))
3474          {
3475            error ("storage size of %q+D isn%'t known", decl);
3476            TREE_TYPE (decl) = error_mark_node;
3477          }
3478
3479       if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3480           && DECL_SIZE (decl) != 0)
3481         {
3482           if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3483             constant_expression_warning (DECL_SIZE (decl));
3484           else
3485             {
3486               error ("storage size of %q+D isn%'t constant", decl);
3487               TREE_TYPE (decl) = error_mark_node;
3488             }
3489         }
3490
3491       if (TREE_USED (type))
3492         TREE_USED (decl) = 1;
3493     }
3494
3495   /* If this is a function and an assembler name is specified, reset DECL_RTL
3496      so we can give it its new name.  Also, update built_in_decls if it
3497      was a normal built-in.  */
3498   if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
3499     {
3500       if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
3501         set_builtin_user_assembler_name (decl, asmspec);
3502       set_user_assembler_name (decl, asmspec);
3503     }
3504
3505   /* If #pragma weak was used, mark the decl weak now.  */
3506   maybe_apply_pragma_weak (decl);
3507
3508   /* Output the assembler code and/or RTL code for variables and functions,
3509      unless the type is an undefined structure or union.
3510      If not, it will get done when the type is completed.  */
3511
3512   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3513     {
3514       /* Determine the ELF visibility.  */
3515       if (TREE_PUBLIC (decl))
3516         c_determine_visibility (decl);
3517
3518       /* This is a no-op in c-lang.c or something real in objc-act.c.  */
3519       if (c_dialect_objc ())
3520         objc_check_decl (decl);
3521
3522       if (asmspec)
3523         {
3524           /* If this is not a static variable, issue a warning.
3525              It doesn't make any sense to give an ASMSPEC for an
3526              ordinary, non-register local variable.  Historically,
3527              GCC has accepted -- but ignored -- the ASMSPEC in
3528              this case.  */
3529           if (!DECL_FILE_SCOPE_P (decl)
3530               && TREE_CODE (decl) == VAR_DECL
3531               && !C_DECL_REGISTER (decl)
3532               && !TREE_STATIC (decl))
3533             warning (0, "ignoring asm-specifier for non-static local "
3534                      "variable %q+D", decl);
3535           else
3536             set_user_assembler_name (decl, asmspec);
3537         }
3538
3539       if (DECL_FILE_SCOPE_P (decl))
3540         {
3541           if (DECL_INITIAL (decl) == NULL_TREE
3542               || DECL_INITIAL (decl) == error_mark_node)
3543             /* Don't output anything
3544                when a tentative file-scope definition is seen.
3545                But at end of compilation, do output code for them.  */
3546             DECL_DEFER_OUTPUT (decl) = 1;
3547           rest_of_decl_compilation (decl, true, 0);
3548         }
3549       else
3550         {
3551           /* In conjunction with an ASMSPEC, the `register'
3552              keyword indicates that we should place the variable
3553              in a particular register.  */
3554           if (asmspec && C_DECL_REGISTER (decl))
3555             {
3556               DECL_HARD_REGISTER (decl) = 1;
3557               /* This cannot be done for a structure with volatile
3558                  fields, on which DECL_REGISTER will have been
3559                  reset.  */
3560               if (!DECL_REGISTER (decl))
3561                 error ("cannot put object with volatile field into register");
3562             }
3563
3564           if (TREE_CODE (decl) != FUNCTION_DECL)
3565             {
3566               /* If we're building a variable sized type, and we might be
3567                  reachable other than via the top of the current binding
3568                  level, then create a new BIND_EXPR so that we deallocate
3569                  the object at the right time.  */
3570               /* Note that DECL_SIZE can be null due to errors.  */
3571               if (DECL_SIZE (decl)
3572                   && !TREE_CONSTANT (DECL_SIZE (decl))
3573                   && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
3574                 {
3575                   tree bind;
3576                   bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
3577                   TREE_SIDE_EFFECTS (bind) = 1;
3578                   add_stmt (bind);
3579                   BIND_EXPR_BODY (bind) = push_stmt_list ();
3580                 }
3581               add_stmt (build_stmt (DECL_EXPR, decl));
3582             }
3583         }
3584
3585
3586       if (!DECL_FILE_SCOPE_P (decl))
3587         {
3588           /* Recompute the RTL of a local array now
3589              if it used to be an incomplete type.  */
3590           if (was_incomplete
3591               && !TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
3592             {
3593               /* If we used it already as memory, it must stay in memory.  */
3594               TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3595               /* If it's still incomplete now, no init will save it.  */
3596               if (DECL_SIZE (decl) == 0)
3597                 DECL_INITIAL (decl) = 0;
3598             }
3599         }
3600     }
3601
3602   if (TREE_CODE (decl) == TYPE_DECL)
3603     {
3604       if (!DECL_FILE_SCOPE_P (decl)
3605           && variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
3606         add_stmt (build_stmt (DECL_EXPR, decl));
3607
3608       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 0);
3609     }
3610
3611   /* At the end of a declaration, throw away any variable type sizes
3612      of types defined inside that declaration.  There is no use
3613      computing them in the following function definition.  */
3614   if (current_scope == file_scope)
3615     get_pending_sizes ();
3616
3617   /* Install a cleanup (aka destructor) if one was given.  */
3618   if (TREE_CODE (decl) == VAR_DECL && !TREE_STATIC (decl))
3619     {
3620       tree attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
3621       if (attr)
3622         {
3623           tree cleanup_id = TREE_VALUE (TREE_VALUE (attr));
3624           tree cleanup_decl = lookup_name (cleanup_id);
3625           tree cleanup;
3626
3627           /* Build "cleanup(&decl)" for the destructor.  */
3628           cleanup = build_unary_op (ADDR_EXPR, decl, 0);
3629           cleanup = build_tree_list (NULL_TREE, cleanup);
3630           cleanup = build_function_call (cleanup_decl, cleanup);
3631
3632           /* Don't warn about decl unused; the cleanup uses it.  */
3633           TREE_USED (decl) = 1;
3634           TREE_USED (cleanup_decl) = 1;
3635
3636           /* Initialize EH, if we've been told to do so.  */
3637           c_maybe_initialize_eh ();
3638
3639           push_cleanup (decl, cleanup, false);
3640         }
3641     }
3642 }
3643
3644 /* Given a parsed parameter declaration, decode it into a PARM_DECL.  */
3645
3646 tree
3647 grokparm (const struct c_parm *parm)
3648 {
3649   tree attrs = parm->attrs;
3650   tree decl = grokdeclarator (parm->declarator, parm->specs, PARM, false,
3651                               NULL, &attrs, DEPRECATED_NORMAL);
3652
3653   decl_attributes (&decl, attrs, 0);
3654
3655   return decl;
3656 }
3657
3658 /* Given a parsed parameter declaration, decode it into a PARM_DECL
3659    and push that on the current scope.  */
3660
3661 void
3662 push_parm_decl (const struct c_parm *parm)
3663 {
3664   tree attrs = parm->attrs;
3665   tree decl;
3666
3667   decl = grokdeclarator (parm->declarator, parm->specs, PARM, false, NULL,
3668                          &attrs, DEPRECATED_NORMAL);
3669   decl_attributes (&decl, attrs, 0);
3670
3671   decl = pushdecl (decl);
3672
3673   finish_decl (decl, NULL_TREE, NULL_TREE);
3674 }
3675
3676 /* Mark all the parameter declarations to date as forward decls.
3677    Also diagnose use of this extension.  */
3678
3679 void
3680 mark_forward_parm_decls (void)
3681 {
3682   struct c_binding *b;
3683
3684   if (pedantic && !current_scope->warned_forward_parm_decls)
3685     {
3686       pedwarn (input_location, OPT_pedantic,
3687                "ISO C forbids forward parameter declarations");
3688       current_scope->warned_forward_parm_decls = true;
3689     }
3690
3691   for (b = current_scope->bindings; b; b = b->prev)
3692     if (TREE_CODE (b->decl) == PARM_DECL)
3693       TREE_ASM_WRITTEN (b->decl) = 1;
3694 }
3695 \f
3696 /* Build a COMPOUND_LITERAL_EXPR.  TYPE is the type given in the compound
3697    literal, which may be an incomplete array type completed by the
3698    initializer; INIT is a CONSTRUCTOR that initializes the compound
3699    literal.  */
3700
3701 tree
3702 build_compound_literal (tree type, tree init)
3703 {
3704   /* We do not use start_decl here because we have a type, not a declarator;
3705      and do not use finish_decl because the decl should be stored inside
3706      the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR.  */
3707   tree decl;
3708   tree complit;
3709   tree stmt;
3710
3711   if (type == error_mark_node)
3712     return error_mark_node;
3713
3714   decl = build_decl (VAR_DECL, NULL_TREE, type);
3715   DECL_EXTERNAL (decl) = 0;
3716   TREE_PUBLIC (decl) = 0;
3717   TREE_STATIC (decl) = (current_scope == file_scope);
3718   DECL_CONTEXT (decl) = current_function_decl;
3719   TREE_USED (decl) = 1;
3720   TREE_TYPE (decl) = type;
3721   TREE_READONLY (decl) = TYPE_READONLY (type);
3722   store_init_value (decl, init);
3723
3724   if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
3725     {
3726       int failure = complete_array_type (&TREE_TYPE (decl),
3727                                          DECL_INITIAL (decl), true);
3728       gcc_assert (!failure);
3729
3730       type = TREE_TYPE (decl);
3731       TREE_TYPE (DECL_INITIAL (decl)) = type;
3732     }
3733
3734   if (type == error_mark_node || !COMPLETE_TYPE_P (type))
3735     return error_mark_node;
3736
3737   stmt = build_stmt (DECL_EXPR, decl);
3738   complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt);
3739   TREE_SIDE_EFFECTS (complit) = 1;
3740
3741   layout_decl (decl, 0);
3742
3743   if (TREE_STATIC (decl))
3744     {
3745       /* This decl needs a name for the assembler output.  */
3746       set_compound_literal_name (decl);
3747       DECL_DEFER_OUTPUT (decl) = 1;
3748       DECL_COMDAT (decl) = 1;
3749       DECL_ARTIFICIAL (decl) = 1;
3750       DECL_IGNORED_P (decl) = 1;
3751       pushdecl (decl);
3752       rest_of_decl_compilation (decl, 1, 0);
3753     }
3754
3755   return complit;
3756 }
3757 \f
3758 /* Determine whether TYPE is a structure with a flexible array member,
3759    or a union containing such a structure (possibly recursively).  */
3760
3761 static bool
3762 flexible_array_type_p (tree type)
3763 {
3764   tree x;
3765   switch (TREE_CODE (type))
3766     {
3767     case RECORD_TYPE:
3768       x = TYPE_FIELDS (type);
3769       if (x == NULL_TREE)
3770         return false;
3771       while (TREE_CHAIN (x) != NULL_TREE)
3772         x = TREE_CHAIN (x);
3773       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
3774           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3775           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
3776           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
3777         return true;
3778       return false;
3779     case UNION_TYPE:
3780       for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
3781         {
3782           if (flexible_array_type_p (TREE_TYPE (x)))
3783             return true;
3784         }
3785       return false;
3786     default:
3787     return false;
3788   }
3789 }
3790 \f
3791 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
3792    replacing with appropriate values if they are invalid.  */
3793 static void
3794 check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
3795 {
3796   tree type_mv;
3797   unsigned int max_width;
3798   unsigned HOST_WIDE_INT w;
3799   const char *name = orig_name ? orig_name: _("<anonymous>");
3800
3801   /* Detect and ignore out of range field width and process valid
3802      field widths.  */
3803   if (!INTEGRAL_TYPE_P (TREE_TYPE (*width))
3804       || TREE_CODE (*width) != INTEGER_CST)
3805     {
3806       error ("bit-field %qs width not an integer constant", name);
3807       *width = integer_one_node;
3808     }
3809   else
3810     {
3811       constant_expression_warning (*width);
3812       if (tree_int_cst_sgn (*width) < 0)
3813         {
3814           error ("negative width in bit-field %qs", name);
3815           *width = integer_one_node;
3816         }
3817       else if (integer_zerop (*width) && orig_name)
3818         {
3819           error ("zero width for bit-field %qs", name);
3820           *width = integer_one_node;
3821         }
3822     }
3823
3824   /* Detect invalid bit-field type.  */
3825   if (TREE_CODE (*type) != INTEGER_TYPE
3826       && TREE_CODE (*type) != BOOLEAN_TYPE
3827       && TREE_CODE (*type) != ENUMERAL_TYPE)
3828     {
3829       error ("bit-field %qs has invalid type", name);
3830       *type = unsigned_type_node;
3831     }
3832
3833   type_mv = TYPE_MAIN_VARIANT (*type);
3834   if (!in_system_header
3835       && type_mv != integer_type_node
3836       && type_mv != unsigned_type_node
3837       && type_mv != boolean_type_node)
3838     pedwarn (input_location, OPT_pedantic,
3839              "type of bit-field %qs is a GCC extension", name);
3840
3841   max_width = TYPE_PRECISION (*type);
3842
3843   if (0 < compare_tree_int (*width, max_width))
3844     {
3845       error ("width of %qs exceeds its type", name);
3846       w = max_width;
3847       *width = build_int_cst (NULL_TREE, w);
3848     }
3849   else
3850     w = tree_low_cst (*width, 1);
3851
3852   if (TREE_CODE (*type) == ENUMERAL_TYPE)
3853     {
3854       struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
3855       if (!lt
3856           || w < min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
3857           || w < min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
3858         warning (0, "%qs is narrower than values of its type", name);
3859     }
3860 }
3861
3862 \f
3863
3864 /* Print warning about variable length array if necessary.  */
3865
3866 static void
3867 warn_variable_length_array (const char *name, tree size)
3868 {
3869   int const_size = TREE_CONSTANT (size);
3870
3871   if (!flag_isoc99 && pedantic && warn_vla != 0)
3872     {
3873       if (const_size)
3874         {
3875           if (name)
3876             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array %qs whose size "
3877                      "can%'t be evaluated",
3878                      name);
3879           else
3880             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids array whose size "
3881                      "can%'t be evaluated");
3882         }
3883       else
3884         {
3885           if (name) 
3886             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array %qs",
3887                      name);
3888           else
3889             pedwarn (input_location, OPT_Wvla, "ISO C90 forbids variable length array");
3890         }
3891     }
3892   else if (warn_vla > 0)
3893     {
3894       if (const_size)
3895         {
3896           if (name)
3897             warning (OPT_Wvla,
3898                      "the size of array %qs can"
3899                      "%'t be evaluated", name);
3900           else
3901             warning (OPT_Wvla,
3902                      "the size of array can %'t be evaluated");
3903         }
3904       else
3905         {
3906           if (name)
3907             warning (OPT_Wvla,
3908                      "variable length array %qs is used",
3909                      name);
3910           else
3911             warning (OPT_Wvla,
3912                      "variable length array is used");
3913         }
3914     }
3915 }
3916
3917 /* Given declspecs and a declarator,
3918    determine the name and type of the object declared
3919    and construct a ..._DECL node for it.
3920    (In one case we can return a ..._TYPE node instead.
3921     For invalid input we sometimes return 0.)
3922
3923    DECLSPECS is a c_declspecs structure for the declaration specifiers.
3924
3925    DECL_CONTEXT says which syntactic context this declaration is in:
3926      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3927      FUNCDEF for a function definition.  Like NORMAL but a few different
3928       error messages in each case.  Return value may be zero meaning
3929       this definition is too screwy to try to parse.
3930      PARM for a parameter declaration (either within a function prototype
3931       or before a function body).  Make a PARM_DECL, or return void_type_node.
3932      TYPENAME if for a typename (in a cast or sizeof).
3933       Don't make a DECL node; just return the ..._TYPE node.
3934      FIELD for a struct or union field; make a FIELD_DECL.
3935    INITIALIZED is true if the decl has an initializer.
3936    WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
3937    representing the width of the bit-field.
3938    DECL_ATTRS points to the list of attributes that should be added to this
3939      decl.  Any nested attributes that belong on the decl itself will be
3940      added to this list.
3941    DEPRECATED_STATE is a deprecated_states value indicating whether
3942    deprecation warnings should be suppressed.
3943
3944    In the TYPENAME case, DECLARATOR is really an absolute declarator.
3945    It may also be so in the PARM case, for a prototype where the
3946    argument type is specified but not the name.
3947
3948    This function is where the complicated C meanings of `static'
3949    and `extern' are interpreted.  */
3950
3951 static tree
3952 grokdeclarator (const struct c_declarator *declarator,
3953                 struct c_declspecs *declspecs,
3954                 enum decl_context decl_context, bool initialized, tree *width,
3955                 tree *decl_attrs, enum deprecated_states deprecated_state)
3956 {
3957   tree type = declspecs->type;
3958   bool threadp = declspecs->thread_p;
3959   enum c_storage_class storage_class = declspecs->storage_class;
3960   int constp;
3961   int restrictp;
3962   int volatilep;
3963   int type_quals = TYPE_UNQUALIFIED;
3964   const char *name, *orig_name;
3965   bool funcdef_flag = false;
3966   bool funcdef_syntax = false;
3967   int size_varies = 0;
3968   tree decl_attr = declspecs->decl_attr;
3969   int array_ptr_quals = TYPE_UNQUALIFIED;
3970   tree array_ptr_attrs = NULL_TREE;
3971   int array_parm_static = 0;
3972   bool array_parm_vla_unspec_p = false;
3973   tree returned_attrs = NULL_TREE;
3974   bool bitfield = width != NULL;
3975   tree element_type;
3976   struct c_arg_info *arg_info = 0;
3977
3978   if (decl_context == FUNCDEF)
3979     funcdef_flag = true, decl_context = NORMAL;
3980
3981   /* Look inside a declarator for the name being declared
3982      and get it as a string, for an error message.  */
3983   {
3984     const struct c_declarator *decl = declarator;
3985     name = 0;
3986
3987     while (decl)
3988       switch (decl->kind)
3989         {
3990         case cdk_function:
3991         case cdk_array:
3992         case cdk_pointer:
3993           funcdef_syntax = (decl->kind == cdk_function);
3994           decl = decl->declarator;
3995           break;
3996
3997         case cdk_attrs:
3998           decl = decl->declarator;
3999           break;
4000
4001         case cdk_id:
4002           if (decl->u.id)
4003             name = IDENTIFIER_POINTER (decl->u.id);
4004           decl = 0;
4005           break;
4006
4007         default:
4008           gcc_unreachable ();
4009         }
4010     orig_name = name;
4011     if (name == 0)
4012       name = "type name";
4013   }
4014
4015   /* A function definition's declarator must have the form of
4016      a function declarator.  */
4017
4018   if (funcdef_flag && !funcdef_syntax)
4019     return 0;
4020
4021   /* If this looks like a function definition, make it one,
4022      even if it occurs where parms are expected.
4023      Then store_parm_decls will reject it and not use it as a parm.  */
4024   if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
4025     decl_context = PARM;
4026
4027   if (declspecs->deprecated_p && deprecated_state != DEPRECATED_SUPPRESS)
4028     warn_deprecated_use (declspecs->type);
4029
4030   if ((decl_context == NORMAL || decl_context == FIELD)
4031       && current_scope == file_scope
4032       && variably_modified_type_p (type, NULL_TREE))
4033     {
4034       error ("variably modified %qs at file scope", name);
4035       type = integer_type_node;
4036     }
4037
4038   size_varies = C_TYPE_VARIABLE_SIZE (type);
4039
4040   /* Diagnose defaulting to "int".  */
4041
4042   if (declspecs->default_int_p && !in_system_header)
4043     {
4044       /* Issue a warning if this is an ISO C 99 program or if
4045          -Wreturn-type and this is a function, or if -Wimplicit;
4046          prefer the former warning since it is more explicit.  */
4047       if ((warn_implicit_int || warn_return_type || flag_isoc99)
4048           && funcdef_flag)
4049         warn_about_return_type = 1;
4050       else 
4051         pedwarn_c99 (input_location, flag_isoc99 ? 0 : OPT_Wimplicit_int, 
4052                      "type defaults to %<int%> in declaration of %qs", name);
4053     }
4054
4055   /* Adjust the type if a bit-field is being declared,
4056      -funsigned-bitfields applied and the type is not explicitly
4057      "signed".  */
4058   if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p
4059       && TREE_CODE (type) == INTEGER_TYPE)
4060     type = unsigned_type_for (type);
4061
4062   /* Figure out the type qualifiers for the declaration.  There are
4063      two ways a declaration can become qualified.  One is something
4064      like `const int i' where the `const' is explicit.  Another is
4065      something like `typedef const int CI; CI i' where the type of the
4066      declaration contains the `const'.  A third possibility is that
4067      there is a type qualifier on the element type of a typedefed
4068      array type, in which case we should extract that qualifier so
4069      that c_apply_type_quals_to_decl receives the full list of
4070      qualifiers to work with (C90 is not entirely clear about whether
4071      duplicate qualifiers should be diagnosed in this case, but it
4072      seems most appropriate to do so).  */
4073   element_type = strip_array_types (type);
4074   constp = declspecs->const_p + TYPE_READONLY (element_type);
4075   restrictp = declspecs->restrict_p + TYPE_RESTRICT (element_type);
4076   volatilep = declspecs->volatile_p + TYPE_VOLATILE (element_type);
4077   if (pedantic && !flag_isoc99)
4078     {
4079       if (constp > 1)
4080         pedwarn (input_location, OPT_pedantic, "duplicate %<const%>");
4081       if (restrictp > 1)
4082         pedwarn (input_location, OPT_pedantic, "duplicate %<restrict%>");
4083       if (volatilep > 1)
4084         pedwarn (input_location, OPT_pedantic, "duplicate %<volatile%>");
4085     }
4086   if (!flag_gen_aux_info && (TYPE_QUALS (element_type)))
4087     type = TYPE_MAIN_VARIANT (type);
4088   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4089                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4090                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4091
4092   /* Warn about storage classes that are invalid for certain
4093      kinds of declarations (parameters, typenames, etc.).  */
4094
4095   if (funcdef_flag
4096       && (threadp
4097           || storage_class == csc_auto
4098           || storage_class == csc_register
4099           || storage_class == csc_typedef))
4100     {
4101       if (storage_class == csc_auto)
4102         pedwarn (input_location, 
4103                  (current_scope == file_scope) ? 0 : OPT_pedantic, 
4104                  "function definition declared %<auto%>");
4105       if (storage_class == csc_register)
4106         error ("function definition declared %<register%>");
4107       if (storage_class == csc_typedef)
4108         error ("function definition declared %<typedef%>");
4109       if (threadp)
4110         error ("function definition declared %<__thread%>");
4111       threadp = false;
4112       if (storage_class == csc_auto
4113           || storage_class == csc_register
4114           || storage_class == csc_typedef)
4115         storage_class = csc_none;
4116     }
4117   else if (decl_context != NORMAL && (storage_class != csc_none || threadp))
4118     {
4119       if (decl_context == PARM && storage_class == csc_register)
4120         ;
4121       else
4122         {
4123           switch (decl_context)
4124             {
4125             case FIELD:
4126               error ("storage class specified for structure field %qs",
4127                      name);
4128               break;
4129             case PARM:
4130               error ("storage class specified for parameter %qs", name);
4131               break;
4132             default:
4133               error ("storage class specified for typename");
4134               break;
4135             }
4136           storage_class = csc_none;
4137           threadp = false;
4138         }
4139     }
4140   else if (storage_class == csc_extern
4141            && initialized
4142            && !funcdef_flag)
4143     {
4144       /* 'extern' with initialization is invalid if not at file scope.  */
4145        if (current_scope == file_scope)
4146          {
4147            /* It is fine to have 'extern const' when compiling at C
4148               and C++ intersection.  */
4149            if (!(warn_cxx_compat && constp))
4150              warning (0, "%qs initialized and declared %<extern%>", name);
4151          }
4152       else
4153         error ("%qs has both %<extern%> and initializer", name);
4154     }
4155   else if (current_scope == file_scope)
4156     {
4157       if (storage_class == csc_auto)
4158         error ("file-scope declaration of %qs specifies %<auto%>", name);
4159       if (pedantic && storage_class == csc_register)
4160         pedwarn (input_location, OPT_pedantic,
4161                  "file-scope declaration of %qs specifies %<register%>", name);
4162     }
4163   else
4164     {
4165       if (storage_class == csc_extern && funcdef_flag)
4166         error ("nested function %qs declared %<extern%>", name);
4167       else if (threadp && storage_class == csc_none)
4168         {
4169           error ("function-scope %qs implicitly auto and declared "
4170                  "%<__thread%>",
4171                  name);
4172           threadp = false;
4173         }
4174     }
4175
4176   /* Now figure out the structure of the declarator proper.
4177      Descend through it, creating more complex types, until we reach
4178      the declared identifier (or NULL_TREE, in an absolute declarator).
4179      At each stage we maintain an unqualified version of the type
4180      together with any qualifiers that should be applied to it with
4181      c_build_qualified_type; this way, array types including
4182      multidimensional array types are first built up in unqualified
4183      form and then the qualified form is created with
4184      TYPE_MAIN_VARIANT pointing to the unqualified form.  */
4185
4186   while (declarator && declarator->kind != cdk_id)
4187     {
4188       if (type == error_mark_node)
4189         {
4190           declarator = declarator->declarator;
4191           continue;
4192         }
4193
4194       /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4195          a cdk_pointer (for *...),
4196          a cdk_function (for ...(...)),
4197          a cdk_attrs (for nested attributes),
4198          or a cdk_id (for the name being declared
4199          or the place in an absolute declarator
4200          where the name was omitted).
4201          For the last case, we have just exited the loop.
4202
4203          At this point, TYPE is the type of elements of an array,
4204          or for a function to return, or for a pointer to point to.
4205          After this sequence of ifs, TYPE is the type of the
4206          array or function or pointer, and DECLARATOR has had its
4207          outermost layer removed.  */
4208
4209       if (array_ptr_quals != TYPE_UNQUALIFIED
4210           || array_ptr_attrs != NULL_TREE
4211           || array_parm_static)
4212         {
4213           /* Only the innermost declarator (making a parameter be of
4214              array type which is converted to pointer type)
4215              may have static or type qualifiers.  */
4216           error ("static or type qualifiers in non-parameter array declarator");
4217           array_ptr_quals = TYPE_UNQUALIFIED;
4218           array_ptr_attrs = NULL_TREE;
4219           array_parm_static = 0;
4220         }
4221
4222       switch (declarator->kind)
4223         {
4224         case cdk_attrs:
4225           {
4226             /* A declarator with embedded attributes.  */
4227             tree attrs = declarator->u.attrs;
4228             const struct c_declarator *inner_decl;
4229             int attr_flags = 0;
4230             declarator = declarator->declarator;
4231             inner_decl = declarator;
4232             while (inner_decl->kind == cdk_attrs)
4233               inner_decl = inner_decl->declarator;
4234             if (inner_decl->kind == cdk_id)
4235               attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
4236             else if (inner_decl->kind == cdk_function)
4237               attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
4238             else if (inner_decl->kind == cdk_array)
4239               attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
4240             returned_attrs = decl_attributes (&type,
4241                                               chainon (returned_attrs, attrs),
4242                                               attr_flags);
4243             break;
4244           }
4245         case cdk_array:
4246           {
4247             tree itype = NULL_TREE;
4248             tree size = declarator->u.array.dimen;
4249             /* The index is a signed object `sizetype' bits wide.  */
4250             tree index_type = c_common_signed_type (sizetype);
4251
4252             array_ptr_quals = declarator->u.array.quals;
4253             array_ptr_attrs = declarator->u.array.attrs;
4254             array_parm_static = declarator->u.array.static_p;
4255             array_parm_vla_unspec_p = declarator->u.array.vla_unspec_p;
4256
4257             declarator = declarator->declarator;
4258
4259             /* Check for some types that there cannot be arrays of.  */
4260
4261             if (VOID_TYPE_P (type))
4262               {
4263                 error ("declaration of %qs as array of voids", name);
4264                 type = error_mark_node;
4265               }
4266
4267             if (TREE_CODE (type) == FUNCTION_TYPE)
4268               {
4269                 error ("declaration of %qs as array of functions", name);
4270                 type = error_mark_node;
4271               }
4272
4273             if (pedantic && !in_system_header && flexible_array_type_p (type))
4274               pedwarn (input_location, OPT_pedantic,
4275                        "invalid use of structure with flexible array member");
4276
4277             if (size == error_mark_node)
4278               type = error_mark_node;
4279
4280             if (type == error_mark_node)
4281               continue;
4282
4283             /* If size was specified, set ITYPE to a range-type for
4284                that size.  Otherwise, ITYPE remains null.  finish_decl
4285                may figure it out from an initial value.  */
4286
4287             if (size)
4288               {
4289                 /* Strip NON_LVALUE_EXPRs since we aren't using as an
4290                    lvalue.  */
4291                 STRIP_TYPE_NOPS (size);
4292
4293                 if (!INTEGRAL_TYPE_P (TREE_TYPE (size)))
4294                   {
4295                     error ("size of array %qs has non-integer type", name);
4296                     size = integer_one_node;
4297                   }
4298
4299                 if (pedantic && integer_zerop (size))
4300                   pedwarn (input_location, OPT_pedantic,
4301                            "ISO C forbids zero-size array %qs", name);
4302
4303                 if (TREE_CODE (size) == INTEGER_CST)
4304                   {
4305                     constant_expression_warning (size);
4306                     if (tree_int_cst_sgn (size) < 0)
4307                       {
4308                         error ("size of array %qs is negative", name);
4309                         size = integer_one_node;
4310                       }
4311                   }
4312                 else if ((decl_context == NORMAL || decl_context == FIELD)
4313                          && current_scope == file_scope)
4314                   {
4315                     error ("variably modified %qs at file scope", name);
4316                     size = integer_one_node;
4317                   }
4318                 else
4319                   {
4320                     /* Make sure the array size remains visibly
4321                        nonconstant even if it is (eg) a const variable
4322                        with known value.  */
4323                     size_varies = 1;
4324                     warn_variable_length_array (orig_name, size);
4325                   }
4326
4327                 if (integer_zerop (size))
4328                   {
4329                     /* A zero-length array cannot be represented with
4330                        an unsigned index type, which is what we'll
4331                        get with build_index_type.  Create an
4332                        open-ended range instead.  */
4333                     itype = build_range_type (sizetype, size, NULL_TREE);
4334                   }
4335                 else
4336                   {
4337                     /* Arrange for the SAVE_EXPR on the inside of the
4338                        MINUS_EXPR, which allows the -1 to get folded
4339                        with the +1 that happens when building TYPE_SIZE.  */
4340                     if (size_varies)
4341                       size = variable_size (size);
4342
4343                     /* Compute the maximum valid index, that is, size
4344                        - 1.  Do the calculation in index_type, so that
4345                        if it is a variable the computations will be
4346                        done in the proper mode.  */
4347                     itype = fold_build2 (MINUS_EXPR, index_type,
4348                                          convert (index_type, size),
4349                                          convert (index_type,
4350                                                   size_one_node));
4351
4352                     /* If that overflowed, the array is too big.  ???
4353                        While a size of INT_MAX+1 technically shouldn't
4354                        cause an overflow (because we subtract 1), the
4355                        overflow is recorded during the conversion to
4356                        index_type, before the subtraction.  Handling
4357                        this case seems like an unnecessary
4358                        complication.  */
4359                     if (TREE_CODE (itype) == INTEGER_CST
4360                         && TREE_OVERFLOW (itype))
4361                       {
4362                         error ("size of array %qs is too large", name);
4363                         type = error_mark_node;
4364                         continue;
4365                       }
4366
4367                     itype = build_index_type (itype);
4368                   }
4369               }
4370             else if (decl_context == FIELD)
4371               {
4372                 if (pedantic && !flag_isoc99 && !in_system_header)
4373                   pedwarn (input_location, OPT_pedantic,
4374                            "ISO C90 does not support flexible array members");
4375
4376                 /* ISO C99 Flexible array members are effectively
4377                    identical to GCC's zero-length array extension.  */
4378                 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4379               }
4380             else if (decl_context == PARM)
4381               {
4382                 if (array_parm_vla_unspec_p)
4383                   {
4384                     if (! orig_name)
4385                       {
4386                         /* C99 6.7.5.2p4 */
4387                         error ("%<[*]%> not allowed in other than a declaration");
4388                       }
4389
4390                     itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4391                     size_varies = 1;
4392                   }
4393               }
4394             else if (decl_context == TYPENAME)
4395               {
4396                 if (array_parm_vla_unspec_p)
4397                   {
4398                     /* The error is printed elsewhere.  We use this to
4399                        avoid messing up with incomplete array types of
4400                        the same type, that would otherwise be modified
4401                        below.  */
4402                     itype = build_range_type (sizetype, size_zero_node,
4403                                               NULL_TREE);
4404                   }
4405               }
4406
4407              /* Complain about arrays of incomplete types.  */
4408             if (!COMPLETE_TYPE_P (type))
4409               {
4410                 error ("array type has incomplete element type");
4411                 type = error_mark_node;
4412               }
4413             else
4414             /* When itype is NULL, a shared incomplete array type is
4415                returned for all array of a given type.  Elsewhere we
4416                make sure we don't complete that type before copying
4417                it, but here we want to make sure we don't ever
4418                modify the shared type, so we gcc_assert (itype)
4419                below.  */
4420               type = build_array_type (type, itype);
4421
4422             if (type != error_mark_node)
4423               {
4424                 if (size_varies)
4425                   {
4426                     /* It is ok to modify type here even if itype is
4427                        NULL: if size_varies, we're in a
4428                        multi-dimensional array and the inner type has
4429                        variable size, so the enclosing shared array type
4430                        must too.  */
4431                     if (size && TREE_CODE (size) == INTEGER_CST)
4432                       type
4433                         = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
4434                     C_TYPE_VARIABLE_SIZE (type) = 1;
4435                   }
4436
4437                 /* The GCC extension for zero-length arrays differs from
4438                    ISO flexible array members in that sizeof yields
4439                    zero.  */
4440                 if (size && integer_zerop (size))
4441                   {
4442                     gcc_assert (itype);
4443                     TYPE_SIZE (type) = bitsize_zero_node;
4444                     TYPE_SIZE_UNIT (type) = size_zero_node;
4445                   }
4446                 if (array_parm_vla_unspec_p)
4447                   {
4448                     gcc_assert (itype);
4449                     /* The type is complete.  C99 6.7.5.2p4  */
4450                     TYPE_SIZE (type) = bitsize_zero_node;
4451                     TYPE_SIZE_UNIT (type) = size_zero_node;
4452                   }
4453               }
4454
4455             if (decl_context != PARM
4456                 && (array_ptr_quals != TYPE_UNQUALIFIED
4457                     || array_ptr_attrs != NULL_TREE
4458                     || array_parm_static))
4459               {
4460                 error ("static or type qualifiers in non-parameter array declarator");
4461                 array_ptr_quals = TYPE_UNQUALIFIED;
4462                 array_ptr_attrs = NULL_TREE;
4463                 array_parm_static = 0;
4464               }
4465             break;
4466           }
4467         case cdk_function:
4468           {
4469             /* Say it's a definition only for the declarator closest
4470                to the identifier, apart possibly from some
4471                attributes.  */
4472             bool really_funcdef = false;
4473             tree arg_types;
4474             if (funcdef_flag)
4475               {
4476                 const struct c_declarator *t = declarator->declarator;
4477                 while (t->kind == cdk_attrs)
4478                   t = t->declarator;
4479                 really_funcdef = (t->kind == cdk_id);
4480               }
4481
4482             /* Declaring a function type.  Make sure we have a valid
4483                type for the function to return.  */
4484             if (type == error_mark_node)
4485               continue;
4486
4487             size_varies = 0;
4488
4489             /* Warn about some types functions can't return.  */
4490             if (TREE_CODE (type) == FUNCTION_TYPE)
4491               {
4492                 error ("%qs declared as function returning a function", name);
4493                 type = integer_type_node;
4494               }
4495             if (TREE_CODE (type) == ARRAY_TYPE)
4496               {
4497                 error ("%qs declared as function returning an array", name);
4498                 type = integer_type_node;
4499               }
4500
4501             /* Construct the function type and go to the next
4502                inner layer of declarator.  */
4503             arg_info = declarator->u.arg_info;
4504             arg_types = grokparms (arg_info, really_funcdef);
4505             if (really_funcdef)
4506               put_pending_sizes (arg_info->pending_sizes);
4507
4508             /* Type qualifiers before the return type of the function
4509                qualify the return type, not the function type.  */
4510             if (type_quals)
4511               {
4512                 /* Type qualifiers on a function return type are
4513                    normally permitted by the standard but have no
4514                    effect, so give a warning at -Wreturn-type.
4515                    Qualifiers on a void return type are banned on
4516                    function definitions in ISO C; GCC used to used
4517                    them for noreturn functions.  */
4518                 if (VOID_TYPE_P (type) && really_funcdef)
4519                   pedwarn (input_location, 0,
4520                            "function definition has qualified void return type");
4521                 else
4522                   warning (OPT_Wignored_qualifiers,
4523                            "type qualifiers ignored on function return type");
4524
4525                 type = c_build_qualified_type (type, type_quals);
4526               }
4527             type_quals = TYPE_UNQUALIFIED;
4528
4529             type = build_function_type (type, arg_types);
4530             declarator = declarator->declarator;
4531
4532             /* Set the TYPE_CONTEXTs for each tagged type which is local to
4533                the formal parameter list of this FUNCTION_TYPE to point to
4534                the FUNCTION_TYPE node itself.  */
4535             {
4536               tree link;
4537
4538               for (link = arg_info->tags;
4539                    link;
4540                    link = TREE_CHAIN (link))
4541                 TYPE_CONTEXT (TREE_VALUE (link)) = type;
4542             }
4543             break;
4544           }
4545         case cdk_pointer:
4546           {
4547             /* Merge any constancy or volatility into the target type
4548                for the pointer.  */
4549
4550             if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4551                 && type_quals)
4552               pedwarn (input_location, OPT_pedantic,
4553                        "ISO C forbids qualified function types");
4554             if (type_quals)
4555               type = c_build_qualified_type (type, type_quals);
4556             size_varies = 0;
4557
4558             /* When the pointed-to type involves components of variable size,
4559                care must be taken to ensure that the size evaluation code is
4560                emitted early enough to dominate all the possible later uses
4561                and late enough for the variables on which it depends to have
4562                been assigned.
4563
4564                This is expected to happen automatically when the pointed-to
4565                type has a name/declaration of it's own, but special attention
4566                is required if the type is anonymous.
4567
4568                We handle the NORMAL and FIELD contexts here by attaching an
4569                artificial TYPE_DECL to such pointed-to type.  This forces the
4570                sizes evaluation at a safe point and ensures it is not deferred
4571                until e.g. within a deeper conditional context.
4572
4573                We expect nothing to be needed here for PARM or TYPENAME.
4574                Pushing a TYPE_DECL at this point for TYPENAME would actually
4575                be incorrect, as we might be in the middle of an expression
4576                with side effects on the pointed-to type size "arguments" prior
4577                to the pointer declaration point and the fake TYPE_DECL in the
4578                enclosing context would force the size evaluation prior to the
4579                side effects.  */
4580
4581             if (!TYPE_NAME (type)
4582                 && (decl_context == NORMAL || decl_context == FIELD)
4583                 && variably_modified_type_p (type, NULL_TREE))
4584               {
4585                 tree decl = build_decl (TYPE_DECL, NULL_TREE, type);
4586                 DECL_ARTIFICIAL (decl) = 1;
4587                 pushdecl (decl);
4588                 finish_decl (decl, NULL_TREE, NULL_TREE);
4589                 TYPE_NAME (type) = decl;
4590               }
4591
4592             type = build_pointer_type (type);
4593
4594             /* Process type qualifiers (such as const or volatile)
4595                that were given inside the `*'.  */
4596             type_quals = declarator->u.pointer_quals;
4597
4598             declarator = declarator->declarator;
4599             break;
4600           }
4601         default:
4602           gcc_unreachable ();
4603         }
4604     }
4605   *decl_attrs = chainon (returned_attrs, *decl_attrs);
4606
4607   /* Now TYPE has the actual type, apart from any qualifiers in
4608      TYPE_QUALS.  */
4609
4610   /* Check the type and width of a bit-field.  */
4611   if (bitfield)
4612     check_bitfield_type_and_width (&type, width, orig_name);
4613
4614   /* Did array size calculations overflow?  */
4615
4616   if (TREE_CODE (type) == ARRAY_TYPE
4617       && COMPLETE_TYPE_P (type)
4618       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
4619       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
4620     {
4621       error ("size of array %qs is too large", name);
4622       /* If we proceed with the array type as it is, we'll eventually
4623          crash in tree_low_cst().  */
4624       type = error_mark_node;
4625     }
4626
4627   /* If this is declaring a typedef name, return a TYPE_DECL.  */
4628
4629   if (storage_class == csc_typedef)
4630     {
4631       tree decl;
4632       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4633           && type_quals)
4634         pedwarn (input_location, OPT_pedantic,
4635                  "ISO C forbids qualified function types");
4636       if (type_quals)
4637         type = c_build_qualified_type (type, type_quals);
4638       decl = build_decl (TYPE_DECL, declarator->u.id, type);
4639       DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4640       if (declspecs->explicit_signed_p)
4641         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4642       if (declspecs->inline_p)
4643         pedwarn (input_location, 0,"typedef %q+D declared %<inline%>", decl);
4644       return decl;
4645     }
4646
4647   /* If this is a type name (such as, in a cast or sizeof),
4648      compute the type and return it now.  */
4649
4650   if (decl_context == TYPENAME)
4651     {
4652       /* Note that the grammar rejects storage classes in typenames
4653          and fields.  */
4654       gcc_assert (storage_class == csc_none && !threadp
4655                   && !declspecs->inline_p);
4656       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4657           && type_quals)
4658         pedwarn (input_location, OPT_pedantic,
4659                  "ISO C forbids const or volatile function types");
4660       if (type_quals)
4661         type = c_build_qualified_type (type, type_quals);
4662       return type;
4663     }
4664
4665   if (pedantic && decl_context == FIELD
4666       && variably_modified_type_p (type, NULL_TREE))
4667     {
4668       /* C99 6.7.2.1p8 */
4669       pedwarn (input_location, OPT_pedantic, 
4670                "a member of a structure or union cannot have a variably modified type");
4671     }
4672
4673   /* Aside from typedefs and type names (handle above),
4674      `void' at top level (not within pointer)
4675      is allowed only in public variables.
4676      We don't complain about parms either, but that is because
4677      a better error message can be made later.  */
4678
4679   if (VOID_TYPE_P (type) && decl_context != PARM
4680       && !((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4681             && (storage_class == csc_extern
4682                 || (current_scope == file_scope
4683                     && !(storage_class == csc_static
4684                          || storage_class == csc_register)))))
4685     {
4686       error ("variable or field %qs declared void", name);
4687       type = integer_type_node;
4688     }
4689
4690   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4691      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
4692
4693   {
4694     tree decl;
4695
4696     if (decl_context == PARM)
4697       {
4698         tree promoted_type;
4699
4700         /* A parameter declared as an array of T is really a pointer to T.
4701            One declared as a function is really a pointer to a function.  */
4702
4703         if (TREE_CODE (type) == ARRAY_TYPE)
4704           {
4705             /* Transfer const-ness of array into that of type pointed to.  */
4706             type = TREE_TYPE (type);
4707             if (type_quals)
4708               type = c_build_qualified_type (type, type_quals);
4709             type = build_pointer_type (type);
4710             type_quals = array_ptr_quals;
4711             if (type_quals)
4712               type = c_build_qualified_type (type, type_quals);
4713
4714             /* We don't yet implement attributes in this context.  */
4715             if (array_ptr_attrs != NULL_TREE)
4716               warning (OPT_Wattributes,
4717                        "attributes in parameter array declarator ignored");
4718
4719             size_varies = 0;
4720           }
4721         else if (TREE_CODE (type) == FUNCTION_TYPE)
4722           {
4723             if (type_quals)
4724               pedwarn (input_location, OPT_pedantic,
4725                        "ISO C forbids qualified function types");
4726             if (type_quals)
4727               type = c_build_qualified_type (type, type_quals);
4728             type = build_pointer_type (type);
4729             type_quals = TYPE_UNQUALIFIED;
4730           }
4731         else if (type_quals)
4732           type = c_build_qualified_type (type, type_quals);
4733
4734         decl = build_decl (PARM_DECL, declarator->u.id, type);
4735         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4736         if (size_varies)
4737           C_DECL_VARIABLE_SIZE (decl) = 1;
4738
4739         /* Compute the type actually passed in the parmlist,
4740            for the case where there is no prototype.
4741            (For example, shorts and chars are passed as ints.)
4742            When there is a prototype, this is overridden later.  */
4743
4744         if (type == error_mark_node)
4745           promoted_type = type;
4746         else
4747           promoted_type = c_type_promotes_to (type);
4748
4749         DECL_ARG_TYPE (decl) = promoted_type;
4750         if (declspecs->inline_p)
4751           pedwarn (input_location, 0, "parameter %q+D declared %<inline%>", decl);
4752       }
4753     else if (decl_context == FIELD)
4754       {
4755         /* Note that the grammar rejects storage classes in typenames
4756            and fields.  */
4757         gcc_assert (storage_class == csc_none && !threadp
4758                     && !declspecs->inline_p);
4759
4760         /* Structure field.  It may not be a function.  */
4761
4762         if (TREE_CODE (type) == FUNCTION_TYPE)
4763           {
4764             error ("field %qs declared as a function", name);
4765             type = build_pointer_type (type);
4766           }
4767         else if (TREE_CODE (type) != ERROR_MARK
4768                  && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4769           {
4770             error ("field %qs has incomplete type", name);
4771             type = error_mark_node;
4772           }
4773         type = c_build_qualified_type (type, type_quals);
4774         decl = build_decl (FIELD_DECL, declarator->u.id, type);
4775         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4776         DECL_NONADDRESSABLE_P (decl) = bitfield;
4777         if (bitfield && !declarator->u.id)
4778           TREE_NO_WARNING (decl) = 1;
4779
4780         if (size_varies)
4781           C_DECL_VARIABLE_SIZE (decl) = 1;
4782       }
4783     else if (TREE_CODE (type) == FUNCTION_TYPE)
4784       {
4785         if (storage_class == csc_register || threadp)
4786           {
4787             error ("invalid storage class for function %qs", name);
4788            }
4789         else if (current_scope != file_scope)
4790           {
4791             /* Function declaration not at file scope.  Storage
4792                classes other than `extern' are not allowed, C99
4793                6.7.1p5, and `extern' makes no difference.  However,
4794                GCC allows 'auto', perhaps with 'inline', to support
4795                nested functions.  */
4796             if (storage_class == csc_auto)
4797                 pedwarn (input_location, OPT_pedantic, "invalid storage class for function %qs", name);
4798             else if (storage_class == csc_static)
4799               {
4800                 error ("invalid storage class for function %qs", name);
4801                 if (funcdef_flag)
4802                   storage_class = declspecs->storage_class = csc_none;
4803                 else
4804                   return 0;
4805               }
4806           }
4807
4808         decl = build_decl (FUNCTION_DECL, declarator->u.id, type);
4809         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4810         decl = build_decl_attribute_variant (decl, decl_attr);
4811
4812         if (pedantic && type_quals && !DECL_IN_SYSTEM_HEADER (decl))
4813           pedwarn (input_location, OPT_pedantic,
4814                    "ISO C forbids qualified function types");
4815
4816         /* GNU C interprets a volatile-qualified function type to indicate
4817            that the function does not return.  */
4818         if ((type_quals & TYPE_QUAL_VOLATILE)
4819             && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4820           warning (0, "%<noreturn%> function returns non-void value");
4821
4822         /* Every function declaration is an external reference
4823            (DECL_EXTERNAL) except for those which are not at file
4824            scope and are explicitly declared "auto".  This is
4825            forbidden by standard C (C99 6.7.1p5) and is interpreted by
4826            GCC to signify a forward declaration of a nested function.  */
4827         if (storage_class == csc_auto && current_scope != file_scope)
4828           DECL_EXTERNAL (decl) = 0;
4829         /* In C99, a function which is declared 'inline' with 'extern'
4830            is not an external reference (which is confusing).  It
4831            means that the later definition of the function must be output
4832            in this file, C99 6.7.4p6.  In GNU C89, a function declared
4833            'extern inline' is an external reference.  */
4834         else if (declspecs->inline_p && storage_class != csc_static)
4835           DECL_EXTERNAL (decl) = ((storage_class == csc_extern)
4836                                   == flag_gnu89_inline);
4837         else
4838           DECL_EXTERNAL (decl) = !initialized;
4839
4840         /* Record absence of global scope for `static' or `auto'.  */
4841         TREE_PUBLIC (decl)
4842           = !(storage_class == csc_static || storage_class == csc_auto);
4843
4844         /* For a function definition, record the argument information
4845            block where store_parm_decls will look for it.  */
4846         if (funcdef_flag)
4847           current_function_arg_info = arg_info;
4848
4849         if (declspecs->default_int_p)
4850           C_FUNCTION_IMPLICIT_INT (decl) = 1;
4851
4852         /* Record presence of `inline', if it is reasonable.  */
4853         if (flag_hosted && MAIN_NAME_P (declarator->u.id))
4854           {
4855             if (declspecs->inline_p)
4856               pedwarn (input_location, 0, "cannot inline function %<main%>");
4857           }
4858         else if (declspecs->inline_p)
4859           /* Record that the function is declared `inline'.  */
4860           DECL_DECLARED_INLINE_P (decl) = 1;
4861       }
4862     else
4863       {
4864         /* It's a variable.  */
4865         /* An uninitialized decl with `extern' is a reference.  */
4866         int extern_ref = !initialized && storage_class == csc_extern;
4867
4868         type = c_build_qualified_type (type, type_quals);
4869
4870         /* C99 6.2.2p7: It is invalid (compile-time undefined
4871            behavior) to create an 'extern' declaration for a
4872            variable if there is a global declaration that is
4873            'static' and the global declaration is not visible.
4874            (If the static declaration _is_ currently visible,
4875            the 'extern' declaration is taken to refer to that decl.) */
4876         if (extern_ref && current_scope != file_scope)
4877           {
4878             tree global_decl  = identifier_global_value (declarator->u.id);
4879             tree visible_decl = lookup_name (declarator->u.id);
4880
4881             if (global_decl
4882                 && global_decl != visible_decl
4883                 && TREE_CODE (global_decl) == VAR_DECL
4884                 && !TREE_PUBLIC (global_decl))
4885               error ("variable previously declared %<static%> redeclared "
4886                      "%<extern%>");
4887           }
4888
4889         decl = build_decl (VAR_DECL, declarator->u.id, type);
4890         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4891         if (size_varies)
4892           C_DECL_VARIABLE_SIZE (decl) = 1;
4893
4894         if (declspecs->inline_p)
4895           pedwarn (input_location, 0, "variable %q+D declared %<inline%>", decl);
4896
4897         /* At file scope, an initialized extern declaration may follow
4898            a static declaration.  In that case, DECL_EXTERNAL will be
4899            reset later in start_decl.  */
4900         DECL_EXTERNAL (decl) = (storage_class == csc_extern);
4901
4902         /* At file scope, the presence of a `static' or `register' storage
4903            class specifier, or the absence of all storage class specifiers
4904            makes this declaration a definition (perhaps tentative).  Also,
4905            the absence of `static' makes it public.  */
4906         if (current_scope == file_scope)
4907           {
4908             TREE_PUBLIC (decl) = storage_class != csc_static;
4909             TREE_STATIC (decl) = !extern_ref;
4910           }
4911         /* Not at file scope, only `static' makes a static definition.  */
4912         else
4913           {
4914             TREE_STATIC (decl) = (storage_class == csc_static);
4915             TREE_PUBLIC (decl) = extern_ref;
4916           }
4917
4918         if (threadp)
4919           DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
4920       }
4921
4922     if (storage_class == csc_extern
4923         && variably_modified_type_p (type, NULL_TREE))
4924       {
4925         /* C99 6.7.5.2p2 */
4926         error ("object with variably modified type must have no linkage");
4927       }
4928
4929     /* Record `register' declaration for warnings on &
4930        and in case doing stupid register allocation.  */
4931
4932     if (storage_class == csc_register)
4933       {
4934         C_DECL_REGISTER (decl) = 1;
4935         DECL_REGISTER (decl) = 1;
4936       }
4937
4938     /* Record constancy and volatility.  */
4939     c_apply_type_quals_to_decl (type_quals, decl);
4940
4941     /* If a type has volatile components, it should be stored in memory.
4942        Otherwise, the fact that those components are volatile
4943        will be ignored, and would even crash the compiler.
4944        Of course, this only makes sense on  VAR,PARM, and RESULT decl's.   */
4945     if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl))
4946         && (TREE_CODE (decl) == VAR_DECL ||  TREE_CODE (decl) == PARM_DECL
4947           || TREE_CODE (decl) == RESULT_DECL))
4948       {
4949         /* It is not an error for a structure with volatile fields to
4950            be declared register, but reset DECL_REGISTER since it
4951            cannot actually go in a register.  */
4952         int was_reg = C_DECL_REGISTER (decl);
4953         C_DECL_REGISTER (decl) = 0;
4954         DECL_REGISTER (decl) = 0;
4955         c_mark_addressable (decl);
4956         C_DECL_REGISTER (decl) = was_reg;
4957       }
4958
4959   /* This is the earliest point at which we might know the assembler
4960      name of a variable.  Thus, if it's known before this, die horribly.  */
4961     gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
4962
4963     return decl;
4964   }
4965 }
4966 \f
4967 /* Decode the parameter-list info for a function type or function definition.
4968    The argument is the value returned by `get_parm_info' (or made in c-parse.c
4969    if there is an identifier list instead of a parameter decl list).
4970    These two functions are separate because when a function returns
4971    or receives functions then each is called multiple times but the order
4972    of calls is different.  The last call to `grokparms' is always the one
4973    that contains the formal parameter names of a function definition.
4974
4975    Return a list of arg types to use in the FUNCTION_TYPE for this function.
4976
4977    FUNCDEF_FLAG is true for a function definition, false for
4978    a mere declaration.  A nonempty identifier-list gets an error message
4979    when FUNCDEF_FLAG is false.  */
4980
4981 static tree
4982 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
4983 {
4984   tree arg_types = arg_info->types;
4985
4986   if (funcdef_flag && arg_info->had_vla_unspec)
4987     {
4988       /* A function definition isn't function prototype scope C99 6.2.1p4.  */
4989       /* C99 6.7.5.2p4 */
4990       error ("%<[*]%> not allowed in other than function prototype scope");
4991     }
4992
4993   if (arg_types == 0 && !funcdef_flag && !in_system_header)
4994     warning (OPT_Wstrict_prototypes,
4995              "function declaration isn%'t a prototype");
4996
4997   if (arg_types == error_mark_node)
4998     return 0;  /* don't set TYPE_ARG_TYPES in this case */
4999
5000   else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
5001     {
5002       if (!funcdef_flag)
5003         pedwarn (input_location, 0, "parameter names (without types) in function declaration");
5004
5005       arg_info->parms = arg_info->types;
5006       arg_info->types = 0;
5007       return 0;
5008     }
5009   else
5010     {
5011       tree parm, type, typelt;
5012       unsigned int parmno;
5013
5014       /* If there is a parameter of incomplete type in a definition,
5015          this is an error.  In a declaration this is valid, and a
5016          struct or union type may be completed later, before any calls
5017          or definition of the function.  In the case where the tag was
5018          first declared within the parameter list, a warning has
5019          already been given.  If a parameter has void type, then
5020          however the function cannot be defined or called, so
5021          warn.  */
5022
5023       for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
5024            parm;
5025            parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
5026         {
5027           type = TREE_VALUE (typelt);
5028           if (type == error_mark_node)
5029             continue;
5030
5031           if (!COMPLETE_TYPE_P (type))
5032             {
5033               if (funcdef_flag)
5034                 {
5035                   if (DECL_NAME (parm))
5036                     error ("parameter %u (%q+D) has incomplete type",
5037                            parmno, parm);
5038                   else
5039                     error ("%Jparameter %u has incomplete type",
5040                            parm, parmno);
5041
5042                   TREE_VALUE (typelt) = error_mark_node;
5043                   TREE_TYPE (parm) = error_mark_node;
5044                 }
5045               else if (VOID_TYPE_P (type))
5046                 {
5047                   if (DECL_NAME (parm))
5048                     warning (0, "parameter %u (%q+D) has void type",
5049                              parmno, parm);
5050                   else
5051                     warning (0, "%Jparameter %u has void type",
5052                              parm, parmno);
5053                 }
5054             }
5055
5056           if (DECL_NAME (parm) && TREE_USED (parm))
5057             warn_if_shadowing (parm);
5058         }
5059       return arg_types;
5060     }
5061 }
5062
5063 /* Take apart the current scope and return a c_arg_info structure with
5064    info on a parameter list just parsed.
5065
5066    This structure is later fed to 'grokparms' and 'store_parm_decls'.
5067
5068    ELLIPSIS being true means the argument list ended in '...' so don't
5069    append a sentinel (void_list_node) to the end of the type-list.  */
5070
5071 struct c_arg_info *
5072 get_parm_info (bool ellipsis)
5073 {
5074   struct c_binding *b = current_scope->bindings;
5075   struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
5076                                         struct c_arg_info);
5077   tree parms    = 0;
5078   tree tags     = 0;
5079   tree types    = 0;
5080   tree others   = 0;
5081
5082   static bool explained_incomplete_types = false;
5083   bool gave_void_only_once_err = false;
5084
5085   arg_info->parms = 0;
5086   arg_info->tags = 0;
5087   arg_info->types = 0;
5088   arg_info->others = 0;
5089   arg_info->pending_sizes = 0;
5090   arg_info->had_vla_unspec = current_scope->had_vla_unspec;
5091
5092   /* The bindings in this scope must not get put into a block.
5093      We will take care of deleting the binding nodes.  */
5094   current_scope->bindings = 0;
5095
5096   /* This function is only called if there was *something* on the
5097      parameter list.  */
5098   gcc_assert (b);
5099
5100   /* A parameter list consisting solely of 'void' indicates that the
5101      function takes no arguments.  But if the 'void' is qualified
5102      (by 'const' or 'volatile'), or has a storage class specifier
5103      ('register'), then the behavior is undefined; issue an error.
5104      Typedefs for 'void' are OK (see DR#157).  */
5105   if (b->prev == 0                          /* one binding */
5106       && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
5107       && !DECL_NAME (b->decl)               /* anonymous */
5108       && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
5109     {
5110       if (TREE_THIS_VOLATILE (b->decl)
5111           || TREE_READONLY (b->decl)
5112           || C_DECL_REGISTER (b->decl))
5113         error ("%<void%> as only parameter may not be qualified");
5114
5115       /* There cannot be an ellipsis.  */
5116       if (ellipsis)
5117         error ("%<void%> must be the only parameter");
5118
5119       arg_info->types = void_list_node;
5120       return arg_info;
5121     }
5122
5123   if (!ellipsis)
5124     types = void_list_node;
5125
5126   /* Break up the bindings list into parms, tags, types, and others;
5127      apply sanity checks; purge the name-to-decl bindings.  */
5128   while (b)
5129     {
5130       tree decl = b->decl;
5131       tree type = TREE_TYPE (decl);
5132       const char *keyword;
5133
5134       switch (TREE_CODE (decl))
5135         {
5136         case PARM_DECL:
5137           if (b->id)
5138             {
5139               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
5140               I_SYMBOL_BINDING (b->id) = b->shadowed;
5141             }
5142
5143           /* Check for forward decls that never got their actual decl.  */
5144           if (TREE_ASM_WRITTEN (decl))
5145             error ("parameter %q+D has just a forward declaration", decl);
5146           /* Check for (..., void, ...) and issue an error.  */
5147           else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
5148             {
5149               if (!gave_void_only_once_err)
5150                 {
5151                   error ("%<void%> must be the only parameter");
5152                   gave_void_only_once_err = true;
5153                 }
5154             }
5155           else
5156             {
5157               /* Valid parameter, add it to the list.  */
5158               TREE_CHAIN (decl) = parms;
5159               parms = decl;
5160
5161               /* Since there is a prototype, args are passed in their
5162                  declared types.  The back end may override this later.  */
5163               DECL_ARG_TYPE (decl) = type;
5164               types = tree_cons (0, type, types);
5165             }
5166           break;
5167
5168         case ENUMERAL_TYPE: keyword = "enum"; goto tag;
5169         case UNION_TYPE:    keyword = "union"; goto tag;
5170         case RECORD_TYPE:   keyword = "struct"; goto tag;
5171         tag:
5172           /* Types may not have tag-names, in which case the type
5173              appears in the bindings list with b->id NULL.  */
5174           if (b->id)
5175             {
5176               gcc_assert (I_TAG_BINDING (b->id) == b);
5177               I_TAG_BINDING (b->id) = b->shadowed;
5178             }
5179
5180           /* Warn about any struct, union or enum tags defined in a
5181              parameter list.  The scope of such types is limited to
5182              the parameter list, which is rarely if ever desirable
5183              (it's impossible to call such a function with type-
5184              correct arguments).  An anonymous union parm type is
5185              meaningful as a GNU extension, so don't warn for that.  */
5186           if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
5187             {
5188               if (b->id)
5189                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
5190                 warning (0, "%<%s %E%> declared inside parameter list",
5191                          keyword, b->id);
5192               else
5193                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
5194                 warning (0, "anonymous %s declared inside parameter list",
5195                          keyword);
5196
5197               if (!explained_incomplete_types)
5198                 {
5199                   warning (0, "its scope is only this definition or declaration,"
5200                            " which is probably not what you want");
5201                   explained_incomplete_types = true;
5202                 }
5203             }
5204
5205           tags = tree_cons (b->id, decl, tags);
5206           break;
5207
5208         case CONST_DECL:
5209         case TYPE_DECL:
5210         case FUNCTION_DECL:
5211           /* CONST_DECLs appear here when we have an embedded enum,
5212              and TYPE_DECLs appear here when we have an embedded struct
5213              or union.  No warnings for this - we already warned about the
5214              type itself.  FUNCTION_DECLs appear when there is an implicit
5215              function declaration in the parameter list.  */
5216
5217           TREE_CHAIN (decl) = others;
5218           others = decl;
5219           /* fall through */
5220
5221         case ERROR_MARK:
5222           /* error_mark_node appears here when we have an undeclared
5223              variable.  Just throw it away.  */
5224           if (b->id)
5225             {
5226               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
5227               I_SYMBOL_BINDING (b->id) = b->shadowed;
5228             }
5229           break;
5230
5231           /* Other things that might be encountered.  */
5232         case LABEL_DECL:
5233         case VAR_DECL:
5234         default:
5235           gcc_unreachable ();
5236         }
5237
5238       b = free_binding_and_advance (b);
5239     }
5240
5241   arg_info->parms = parms;
5242   arg_info->tags = tags;
5243   arg_info->types = types;
5244   arg_info->others = others;
5245   arg_info->pending_sizes = get_pending_sizes ();
5246   return arg_info;
5247 }
5248 \f
5249 /* Get the struct, enum or union (CODE says which) with tag NAME.
5250    Define the tag as a forward-reference if it is not defined.
5251    Return a c_typespec structure for the type specifier.  */
5252
5253 struct c_typespec
5254 parser_xref_tag (enum tree_code code, tree name)
5255 {
5256   struct c_typespec ret;
5257   /* If a cross reference is requested, look up the type
5258      already defined for this tag and return it.  */
5259
5260   tree ref = lookup_tag (code, name, 0);
5261   /* If this is the right type of tag, return what we found.
5262      (This reference will be shadowed by shadow_tag later if appropriate.)
5263      If this is the wrong type of tag, do not return it.  If it was the
5264      wrong type in the same scope, we will have had an error
5265      message already; if in a different scope and declaring
5266      a name, pending_xref_error will give an error message; but if in a
5267      different scope and not declaring a name, this tag should
5268      shadow the previous declaration of a different type of tag, and
5269      this would not work properly if we return the reference found.
5270      (For example, with "struct foo" in an outer scope, "union foo;"
5271      must shadow that tag with a new one of union type.)  */
5272   ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
5273   if (ref && TREE_CODE (ref) == code)
5274     {
5275       ret.spec = ref;
5276       return ret;
5277     }
5278
5279   /* If no such tag is yet defined, create a forward-reference node
5280      and record it as the "definition".
5281      When a real declaration of this type is found,
5282      the forward-reference will be altered into a real type.  */
5283
5284   ref = make_node (code);
5285   if (code == ENUMERAL_TYPE)
5286     {
5287       /* Give the type a default layout like unsigned int
5288          to avoid crashing if it does not get defined.  */
5289       TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
5290       TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
5291       TYPE_USER_ALIGN (ref) = 0;
5292       TYPE_UNSIGNED (ref) = 1;
5293       TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
5294       TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
5295       TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
5296     }
5297
5298   pushtag (name, ref);
5299
5300   ret.spec = ref;
5301   return ret;
5302 }
5303
5304 /* Get the struct, enum or union (CODE says which) with tag NAME.
5305    Define the tag as a forward-reference if it is not defined.
5306    Return a tree for the type.  */
5307
5308 tree
5309 xref_tag (enum tree_code code, tree name)
5310 {
5311   return parser_xref_tag (code, name).spec;
5312 }
5313 \f
5314 /* Make sure that the tag NAME is defined *in the current scope*
5315    at least as a forward reference.
5316    CODE says which kind of tag NAME ought to be.  */
5317
5318 tree
5319 start_struct (enum tree_code code, tree name)
5320 {
5321   /* If there is already a tag defined at this scope
5322      (as a forward reference), just return it.  */
5323
5324   tree ref = 0;
5325
5326   if (name != 0)
5327     ref = lookup_tag (code, name, 1);
5328   if (ref && TREE_CODE (ref) == code)
5329     {
5330       if (TYPE_SIZE (ref))
5331         {
5332           if (code == UNION_TYPE)
5333             error ("redefinition of %<union %E%>", name);
5334           else
5335             error ("redefinition of %<struct %E%>", name);
5336         }
5337       else if (C_TYPE_BEING_DEFINED (ref))
5338         {
5339           if (code == UNION_TYPE)
5340             error ("nested redefinition of %<union %E%>", name);
5341           else
5342             error ("nested redefinition of %<struct %E%>", name);
5343           /* Don't create structures that contain themselves.  */
5344           ref = NULL_TREE;
5345         }
5346     }
5347
5348   /* Otherwise create a forward-reference just so the tag is in scope.  */
5349
5350   if (ref == NULL_TREE || TREE_CODE (ref) != code)
5351     {
5352       ref = make_node (code);
5353       pushtag (name, ref);
5354     }
5355
5356   C_TYPE_BEING_DEFINED (ref) = 1;
5357   TYPE_PACKED (ref) = flag_pack_struct;
5358   return ref;
5359 }
5360
5361 /* Process the specs, declarator and width (NULL if omitted)
5362    of a structure component, returning a FIELD_DECL node.
5363    WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5364    DECL_ATTRS is as for grokdeclarator.
5365
5366    LOC is the location of the structure component.
5367
5368    This is done during the parsing of the struct declaration.
5369    The FIELD_DECL nodes are chained together and the lot of them
5370    are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
5371
5372 tree
5373 grokfield (location_t loc,
5374            struct c_declarator *declarator, struct c_declspecs *declspecs,
5375            tree width, tree *decl_attrs)
5376 {
5377   tree value;
5378
5379   if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
5380       && width == NULL_TREE)
5381     {
5382       /* This is an unnamed decl.
5383
5384          If we have something of the form "union { list } ;" then this
5385          is the anonymous union extension.  Similarly for struct.
5386
5387          If this is something of the form "struct foo;", then
5388            If MS extensions are enabled, this is handled as an
5389              anonymous struct.
5390            Otherwise this is a forward declaration of a structure tag.
5391
5392          If this is something of the form "foo;" and foo is a TYPE_DECL, then
5393            If MS extensions are enabled and foo names a structure, then
5394              again this is an anonymous struct.
5395            Otherwise this is an error.
5396
5397          Oh what a horrid tangled web we weave.  I wonder if MS consciously
5398          took this from Plan 9 or if it was an accident of implementation
5399          that took root before someone noticed the bug...  */
5400
5401       tree type = declspecs->type;
5402       bool type_ok = (TREE_CODE (type) == RECORD_TYPE
5403                       || TREE_CODE (type) == UNION_TYPE);
5404       bool ok = false;
5405
5406       if (type_ok
5407           && (flag_ms_extensions || !declspecs->typedef_p))
5408         {
5409           if (flag_ms_extensions)
5410             ok = true;
5411           else if (flag_iso)
5412             ok = false;
5413           else if (TYPE_NAME (type) == NULL)
5414             ok = true;
5415           else
5416             ok = false;
5417         }
5418       if (!ok)
5419         {
5420           pedwarn (loc, 0, "declaration does not declare anything");
5421           return NULL_TREE;
5422         }
5423       pedwarn (loc, OPT_pedantic, "ISO C doesn%'t support unnamed structs/unions");
5424     }
5425
5426   value = grokdeclarator (declarator, declspecs, FIELD, false,
5427                           width ? &width : NULL, decl_attrs,
5428                           DEPRECATED_NORMAL);
5429
5430   finish_decl (value, NULL_TREE, NULL_TREE);
5431   DECL_INITIAL (value) = width;
5432
5433   return value;
5434 }
5435 \f
5436 /* Generate an error for any duplicate field names in FIELDLIST.  Munge
5437    the list such that this does not present a problem later.  */
5438
5439 static void
5440 detect_field_duplicates (tree fieldlist)
5441 {
5442   tree x, y;
5443   int timeout = 10;
5444
5445   /* First, see if there are more than "a few" fields.
5446      This is trivially true if there are zero or one fields.  */
5447   if (!fieldlist)
5448     return;
5449   x = TREE_CHAIN (fieldlist);
5450   if (!x)
5451     return;
5452   do {
5453     timeout--;
5454     x = TREE_CHAIN (x);
5455   } while (timeout > 0 && x);
5456
5457   /* If there were "few" fields, avoid the overhead of allocating
5458      a hash table.  Instead just do the nested traversal thing.  */
5459   if (timeout > 0)
5460     {
5461       for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
5462         if (DECL_NAME (x))
5463           {
5464             for (y = fieldlist; y != x; y = TREE_CHAIN (y))
5465               if (DECL_NAME (y) == DECL_NAME (x))
5466                 {
5467                   error ("duplicate member %q+D", x);
5468                   DECL_NAME (x) = NULL_TREE;
5469                 }
5470           }
5471     }
5472   else
5473     {
5474       htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
5475       void **slot;
5476
5477       for (x = fieldlist; x ; x = TREE_CHAIN (x))
5478         if ((y = DECL_NAME (x)) != 0)
5479           {
5480             slot = htab_find_slot (htab, y, INSERT);
5481             if (*slot)
5482               {
5483                 error ("duplicate member %q+D", x);
5484                 DECL_NAME (x) = NULL_TREE;
5485               }
5486             *slot = y;
5487           }
5488
5489       htab_delete (htab);
5490     }
5491 }
5492
5493 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5494    FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5495    ATTRIBUTES are attributes to be applied to the structure.  */
5496
5497 tree
5498 finish_struct (tree t, tree fieldlist, tree attributes)
5499 {
5500   tree x;
5501   bool toplevel = file_scope == current_scope;
5502   int saw_named_field;
5503
5504   /* If this type was previously laid out as a forward reference,
5505      make sure we lay it out again.  */
5506
5507   TYPE_SIZE (t) = 0;
5508
5509   decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5510
5511   if (pedantic)
5512     {
5513       for (x = fieldlist; x; x = TREE_CHAIN (x))
5514         if (DECL_NAME (x) != 0)
5515           break;
5516
5517       if (x == 0)
5518         {
5519           if (TREE_CODE (t) == UNION_TYPE)
5520             {
5521               if (fieldlist)
5522                 pedwarn (input_location, OPT_pedantic, "union has no named members");
5523               else
5524                 pedwarn (input_location, OPT_pedantic, "union has no members");
5525             }
5526           else
5527             {
5528               if (fieldlist)
5529                 pedwarn (input_location, OPT_pedantic, "struct has no named members");
5530               else
5531                 pedwarn (input_location, OPT_pedantic, "struct has no members");
5532             }
5533         }
5534     }
5535
5536   /* Install struct as DECL_CONTEXT of each field decl.
5537      Also process specified field sizes, found in the DECL_INITIAL,
5538      storing 0 there after the type has been changed to precision equal
5539      to its width, rather than the precision of the specified standard
5540      type.  (Correct layout requires the original type to have been preserved
5541      until now.)  */
5542
5543   saw_named_field = 0;
5544   for (x = fieldlist; x; x = TREE_CHAIN (x))
5545     {
5546       if (TREE_TYPE (x) == error_mark_node)
5547         continue;
5548
5549       DECL_CONTEXT (x) = t;
5550
5551       if (TYPE_PACKED (t) && TYPE_ALIGN (TREE_TYPE (x)) > BITS_PER_UNIT)
5552         DECL_PACKED (x) = 1;
5553
5554       /* If any field is const, the structure type is pseudo-const.  */
5555       if (TREE_READONLY (x))
5556         C_TYPE_FIELDS_READONLY (t) = 1;
5557       else
5558         {
5559           /* A field that is pseudo-const makes the structure likewise.  */
5560           tree t1 = TREE_TYPE (x);
5561           while (TREE_CODE (t1) == ARRAY_TYPE)
5562             t1 = TREE_TYPE (t1);
5563           if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5564               && C_TYPE_FIELDS_READONLY (t1))
5565             C_TYPE_FIELDS_READONLY (t) = 1;
5566         }
5567
5568       /* Any field that is volatile means variables of this type must be
5569          treated in some ways as volatile.  */
5570       if (TREE_THIS_VOLATILE (x))
5571         C_TYPE_FIELDS_VOLATILE (t) = 1;
5572
5573       /* Any field of nominal variable size implies structure is too.  */
5574       if (C_DECL_VARIABLE_SIZE (x))
5575         C_TYPE_VARIABLE_SIZE (t) = 1;
5576
5577       if (DECL_INITIAL (x))
5578         {
5579           unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
5580           DECL_SIZE (x) = bitsize_int (width);
5581           DECL_BIT_FIELD (x) = 1;
5582           SET_DECL_C_BIT_FIELD (x);
5583         }
5584
5585       /* Detect flexible array member in an invalid context.  */
5586       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5587           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5588           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5589           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5590         {
5591           if (TREE_CODE (t) == UNION_TYPE)
5592             {
5593               error ("%Jflexible array member in union", x);
5594               TREE_TYPE (x) = error_mark_node;
5595             }
5596           else if (TREE_CHAIN (x) != NULL_TREE)
5597             {
5598               error ("%Jflexible array member not at end of struct", x);
5599               TREE_TYPE (x) = error_mark_node;
5600             }
5601           else if (!saw_named_field)
5602             {
5603               error ("%Jflexible array member in otherwise empty struct", x);
5604               TREE_TYPE (x) = error_mark_node;
5605             }
5606         }
5607
5608       if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
5609           && flexible_array_type_p (TREE_TYPE (x)))
5610         pedwarn (input_location, OPT_pedantic, 
5611                  "%Jinvalid use of structure with flexible array member", x);
5612
5613       if (DECL_NAME (x))
5614         saw_named_field = 1;
5615     }
5616
5617   detect_field_duplicates (fieldlist);
5618
5619   /* Now we have the nearly final fieldlist.  Record it,
5620      then lay out the structure or union (including the fields).  */
5621
5622   TYPE_FIELDS (t) = fieldlist;
5623
5624   layout_type (t);
5625
5626   /* Give bit-fields their proper types.  */
5627   {
5628     tree *fieldlistp = &fieldlist;
5629     while (*fieldlistp)
5630       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
5631           && TREE_TYPE (*fieldlistp) != error_mark_node)
5632         {
5633           unsigned HOST_WIDE_INT width
5634             = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
5635           tree type = TREE_TYPE (*fieldlistp);
5636           if (width != TYPE_PRECISION (type))
5637             {
5638               TREE_TYPE (*fieldlistp)
5639                 = c_build_bitfield_integer_type (width, TYPE_UNSIGNED (type));
5640               DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
5641             }
5642           DECL_INITIAL (*fieldlistp) = 0;
5643         }
5644       else
5645         fieldlistp = &TREE_CHAIN (*fieldlistp);
5646   }
5647
5648   /* Now we have the truly final field list.
5649      Store it in this type and in the variants.  */
5650
5651   TYPE_FIELDS (t) = fieldlist;
5652
5653   /* If there are lots of fields, sort so we can look through them fast.
5654      We arbitrarily consider 16 or more elts to be "a lot".  */
5655
5656   {
5657     int len = 0;
5658
5659     for (x = fieldlist; x; x = TREE_CHAIN (x))
5660       {
5661         if (len > 15 || DECL_NAME (x) == NULL)
5662           break;
5663         len += 1;
5664       }
5665
5666     if (len > 15)
5667       {
5668         tree *field_array;
5669         struct lang_type *space;
5670         struct sorted_fields_type *space2;
5671
5672         len += list_length (x);
5673
5674         /* Use the same allocation policy here that make_node uses, to
5675           ensure that this lives as long as the rest of the struct decl.
5676           All decls in an inline function need to be saved.  */
5677
5678         space = GGC_CNEW (struct lang_type);
5679         space2 = GGC_NEWVAR (struct sorted_fields_type,
5680                              sizeof (struct sorted_fields_type) + len * sizeof (tree));
5681
5682         len = 0;
5683         space->s = space2;
5684         field_array = &space2->elts[0];
5685         for (x = fieldlist; x; x = TREE_CHAIN (x))
5686           {
5687             field_array[len++] = x;
5688
5689             /* If there is anonymous struct or union, break out of the loop.  */
5690             if (DECL_NAME (x) == NULL)
5691               break;
5692           }
5693         /* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
5694         if (x == NULL)
5695           {
5696             TYPE_LANG_SPECIFIC (t) = space;
5697             TYPE_LANG_SPECIFIC (t)->s->len = len;
5698             field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
5699             qsort (field_array, len, sizeof (tree), field_decl_cmp);
5700           }
5701       }
5702   }
5703
5704   for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5705     {
5706       TYPE_FIELDS (x) = TYPE_FIELDS (t);
5707       TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5708       C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
5709       C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
5710       C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
5711     }
5712
5713   /* If this was supposed to be a transparent union, but we can't
5714      make it one, warn and turn off the flag.  */
5715   if (TREE_CODE (t) == UNION_TYPE
5716       && TYPE_TRANSPARENT_UNION (t)
5717       && (!TYPE_FIELDS (t) || TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t))))
5718     {
5719       TYPE_TRANSPARENT_UNION (t) = 0;
5720       warning (0, "union cannot be made transparent");
5721     }
5722
5723   /* If this structure or union completes the type of any previous
5724      variable declaration, lay it out and output its rtl.  */
5725   for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
5726        x;
5727        x = TREE_CHAIN (x))
5728     {
5729       tree decl = TREE_VALUE (x);
5730       if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5731         layout_array_type (TREE_TYPE (decl));
5732       if (TREE_CODE (decl) != TYPE_DECL)
5733         {
5734           layout_decl (decl, 0);
5735           if (c_dialect_objc ())
5736             objc_check_decl (decl);
5737           rest_of_decl_compilation (decl, toplevel, 0);
5738           if (!toplevel)
5739             expand_decl (decl);
5740         }
5741     }
5742   C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
5743
5744   /* Finish debugging output for this type.  */
5745   rest_of_type_compilation (t, toplevel);
5746
5747   /* If we're inside a function proper, i.e. not file-scope and not still
5748      parsing parameters, then arrange for the size of a variable sized type
5749      to be bound now.  */
5750   if (cur_stmt_list && variably_modified_type_p (t, NULL_TREE))
5751     add_stmt (build_stmt (DECL_EXPR, build_decl (TYPE_DECL, NULL, t)));
5752
5753   return t;
5754 }
5755
5756 /* Lay out the type T, and its element type, and so on.  */
5757
5758 static void
5759 layout_array_type (tree t)
5760 {
5761   if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5762     layout_array_type (TREE_TYPE (t));
5763   layout_type (t);
5764 }
5765 \f
5766 /* Begin compiling the definition of an enumeration type.
5767    NAME is its name (or null if anonymous).
5768    Returns the type object, as yet incomplete.
5769    Also records info about it so that build_enumerator
5770    may be used to declare the individual values as they are read.  */
5771
5772 tree
5773 start_enum (struct c_enum_contents *the_enum, tree name)
5774 {
5775   tree enumtype = 0;
5776
5777   /* If this is the real definition for a previous forward reference,
5778      fill in the contents in the same object that used to be the
5779      forward reference.  */
5780
5781   if (name != 0)
5782     enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
5783
5784   if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5785     {
5786       enumtype = make_node (ENUMERAL_TYPE);
5787       pushtag (name, enumtype);
5788     }
5789
5790   if (C_TYPE_BEING_DEFINED (enumtype))
5791     error ("nested redefinition of %<enum %E%>", name);
5792
5793   C_TYPE_BEING_DEFINED (enumtype) = 1;
5794
5795   if (TYPE_VALUES (enumtype) != 0)
5796     {
5797       /* This enum is a named one that has been declared already.  */
5798       error ("redeclaration of %<enum %E%>", name);
5799
5800       /* Completely replace its old definition.
5801          The old enumerators remain defined, however.  */
5802       TYPE_VALUES (enumtype) = 0;
5803     }
5804
5805   the_enum->enum_next_value = integer_zero_node;
5806   the_enum->enum_overflow = 0;
5807
5808   if (flag_short_enums)
5809     TYPE_PACKED (enumtype) = 1;
5810
5811   return enumtype;
5812 }
5813
5814 /* After processing and defining all the values of an enumeration type,
5815    install their decls in the enumeration type and finish it off.
5816    ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5817    and ATTRIBUTES are the specified attributes.
5818    Returns ENUMTYPE.  */
5819
5820 tree
5821 finish_enum (tree enumtype, tree values, tree attributes)
5822 {
5823   tree pair, tem;
5824   tree minnode = 0, maxnode = 0;
5825   int precision, unsign;
5826   bool toplevel = (file_scope == current_scope);
5827   struct lang_type *lt;
5828
5829   decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5830
5831   /* Calculate the maximum value of any enumerator in this type.  */
5832
5833   if (values == error_mark_node)
5834     minnode = maxnode = integer_zero_node;
5835   else
5836     {
5837       minnode = maxnode = TREE_VALUE (values);
5838       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5839         {
5840           tree value = TREE_VALUE (pair);
5841           if (tree_int_cst_lt (maxnode, value))
5842             maxnode = value;
5843           if (tree_int_cst_lt (value, minnode))
5844             minnode = value;
5845         }
5846     }
5847
5848   /* Construct the final type of this enumeration.  It is the same
5849      as one of the integral types - the narrowest one that fits, except
5850      that normally we only go as narrow as int - and signed iff any of
5851      the values are negative.  */
5852   unsign = (tree_int_cst_sgn (minnode) >= 0);
5853   precision = MAX (min_precision (minnode, unsign),
5854                    min_precision (maxnode, unsign));
5855
5856   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5857     {
5858       tem = c_common_type_for_size (precision, unsign);
5859       if (tem == NULL)
5860         {
5861           warning (0, "enumeration values exceed range of largest integer");
5862           tem = long_long_integer_type_node;
5863         }
5864     }
5865   else
5866     tem = unsign ? unsigned_type_node : integer_type_node;
5867
5868   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
5869   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
5870   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
5871   TYPE_SIZE (enumtype) = 0;
5872
5873   /* If the precision of the type was specific with an attribute and it
5874      was too small, give an error.  Otherwise, use it.  */
5875   if (TYPE_PRECISION (enumtype))
5876     {
5877       if (precision > TYPE_PRECISION (enumtype))
5878         error ("specified mode too small for enumeral values");
5879     }
5880   else
5881     TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
5882
5883   layout_type (enumtype);
5884
5885   if (values != error_mark_node)
5886     {
5887       /* Change the type of the enumerators to be the enum type.  We
5888          need to do this irrespective of the size of the enum, for
5889          proper type checking.  Replace the DECL_INITIALs of the
5890          enumerators, and the value slots of the list, with copies
5891          that have the enum type; they cannot be modified in place
5892          because they may be shared (e.g.  integer_zero_node) Finally,
5893          change the purpose slots to point to the names of the decls.  */
5894       for (pair = values; pair; pair = TREE_CHAIN (pair))
5895         {
5896           tree enu = TREE_PURPOSE (pair);
5897           tree ini = DECL_INITIAL (enu);
5898
5899           TREE_TYPE (enu) = enumtype;
5900
5901           /* The ISO C Standard mandates enumerators to have type int,
5902              even though the underlying type of an enum type is
5903              unspecified.  However, GCC allows enumerators of any
5904              integer type as an extensions.  Here we convert any
5905              enumerators that fit in an int to type int, to avoid
5906              promotions to unsigned types when comparing integers with
5907              enumerators that fit in the int range.  When -pedantic is
5908              given, build_enumerator() would have already warned about
5909              those that don't fit.  */
5910           if (int_fits_type_p (ini, integer_type_node))
5911             tem = integer_type_node;
5912           else
5913             tem = enumtype;
5914           ini = convert (tem, ini);
5915
5916           DECL_INITIAL (enu) = ini;
5917           TREE_PURPOSE (pair) = DECL_NAME (enu);
5918           TREE_VALUE (pair) = ini;
5919         }
5920
5921       TYPE_VALUES (enumtype) = values;
5922     }
5923
5924   /* Record the min/max values so that we can warn about bit-field
5925      enumerations that are too small for the values.  */
5926   lt = GGC_CNEW (struct lang_type);
5927   lt->enum_min = minnode;
5928   lt->enum_max = maxnode;
5929   TYPE_LANG_SPECIFIC (enumtype) = lt;
5930
5931   /* Fix up all variant types of this enum type.  */
5932   for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5933     {
5934       if (tem == enumtype)
5935         continue;
5936       TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5937       TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5938       TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5939       TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5940       TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5941       TYPE_MODE (tem) = TYPE_MODE (enumtype);
5942       TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5943       TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5944       TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5945       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
5946       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
5947     }
5948
5949   /* Finish debugging output for this type.  */
5950   rest_of_type_compilation (enumtype, toplevel);
5951
5952   return enumtype;
5953 }
5954
5955 /* Build and install a CONST_DECL for one value of the
5956    current enumeration type (one that was begun with start_enum).
5957    Return a tree-list containing the CONST_DECL and its value.
5958    Assignment of sequential values by default is handled here.  */
5959
5960 tree
5961 build_enumerator (struct c_enum_contents *the_enum, tree name, tree value,
5962                   location_t value_loc)
5963 {
5964   tree decl, type;
5965
5966   /* Validate and default VALUE.  */
5967
5968   if (value != 0)
5969     {
5970       /* Don't issue more errors for error_mark_node (i.e. an
5971          undeclared identifier) - just ignore the value expression.  */
5972       if (value == error_mark_node)
5973         value = 0;
5974       else if (!INTEGRAL_TYPE_P (TREE_TYPE (value))
5975                || TREE_CODE (value) != INTEGER_CST)
5976         {
5977           error ("enumerator value for %qE is not an integer constant", name);
5978           value = 0;
5979         }
5980       else
5981         {
5982           value = default_conversion (value);
5983           constant_expression_warning (value);
5984         }
5985     }
5986
5987   /* Default based on previous value.  */
5988   /* It should no longer be possible to have NON_LVALUE_EXPR
5989      in the default.  */
5990   if (value == 0)
5991     {
5992       value = the_enum->enum_next_value;
5993       if (the_enum->enum_overflow)
5994         error ("overflow in enumeration values");
5995     }
5996   /* Even though the underlying type of an enum is unspecified, the
5997      type of enumeration constants is explicitly defined as int
5998      (6.4.4.3/2 in the C99 Standard).  GCC allows any integer type as
5999      an extension.  */
6000   else if (!int_fits_type_p (value, integer_type_node))
6001     pedwarn (value_loc, OPT_pedantic, 
6002              "ISO C restricts enumerator values to range of %<int%>");
6003
6004   /* Set basis for default for next value.  */
6005   the_enum->enum_next_value = build_binary_op (PLUS_EXPR, value,
6006                                                integer_one_node, 0);
6007   the_enum->enum_overflow = tree_int_cst_lt (the_enum->enum_next_value, value);
6008
6009   /* Now create a declaration for the enum value name.  */
6010
6011   type = TREE_TYPE (value);
6012   type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
6013                                       TYPE_PRECISION (integer_type_node)),
6014                                  (TYPE_PRECISION (type)
6015                                   >= TYPE_PRECISION (integer_type_node)
6016                                   && TYPE_UNSIGNED (type)));
6017
6018   decl = build_decl (CONST_DECL, name, type);
6019   DECL_INITIAL (decl) = convert (type, value);
6020   pushdecl (decl);
6021
6022   return tree_cons (decl, value, NULL_TREE);
6023 }
6024
6025 \f
6026 /* Create the FUNCTION_DECL for a function definition.
6027    DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
6028    the declaration; they describe the function's name and the type it returns,
6029    but twisted together in a fashion that parallels the syntax of C.
6030
6031    This function creates a binding context for the function body
6032    as well as setting up the FUNCTION_DECL in current_function_decl.
6033
6034    Returns 1 on success.  If the DECLARATOR is not suitable for a function
6035    (it defines a datum instead), we return 0, which tells
6036    yyparse to report a parse error.  */
6037
6038 int
6039 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
6040                 tree attributes)
6041 {
6042   tree decl1, old_decl;
6043   tree restype, resdecl;
6044   struct c_label_context_se *nstack_se;
6045   struct c_label_context_vm *nstack_vm;
6046
6047   current_function_returns_value = 0;  /* Assume, until we see it does.  */
6048   current_function_returns_null = 0;
6049   current_function_returns_abnormally = 0;
6050   warn_about_return_type = 0;
6051   c_switch_stack = NULL;
6052
6053   nstack_se = XOBNEW (&parser_obstack, struct c_label_context_se);
6054   nstack_se->labels_def = NULL;
6055   nstack_se->labels_used = NULL;
6056   nstack_se->next = label_context_stack_se;
6057   label_context_stack_se = nstack_se;
6058
6059   nstack_vm = XOBNEW (&parser_obstack, struct c_label_context_vm);
6060   nstack_vm->labels_def = NULL;
6061   nstack_vm->labels_used = NULL;
6062   nstack_vm->scope = 0;
6063   nstack_vm->next = label_context_stack_vm;
6064   label_context_stack_vm = nstack_vm;
6065
6066   /* Indicate no valid break/continue context by setting these variables
6067      to some non-null, non-label value.  We'll notice and emit the proper
6068      error message in c_finish_bc_stmt.  */
6069   c_break_label = c_cont_label = size_zero_node;
6070
6071   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL,
6072                           &attributes, DEPRECATED_NORMAL);
6073
6074   /* If the declarator is not suitable for a function definition,
6075      cause a syntax error.  */
6076   if (decl1 == 0)
6077     {
6078       label_context_stack_se = label_context_stack_se->next;
6079       label_context_stack_vm = label_context_stack_vm->next;
6080       return 0;
6081     }
6082
6083   decl_attributes (&decl1, attributes, 0);
6084
6085   if (DECL_DECLARED_INLINE_P (decl1)
6086       && DECL_UNINLINABLE (decl1)
6087       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
6088     warning (OPT_Wattributes, "inline function %q+D given attribute noinline",
6089              decl1);
6090
6091   /* Handle gnu_inline attribute.  */
6092   if (declspecs->inline_p
6093       && !flag_gnu89_inline
6094       && TREE_CODE (decl1) == FUNCTION_DECL
6095       && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1))
6096           || current_function_decl))
6097     {
6098       if (declspecs->storage_class != csc_static)
6099         DECL_EXTERNAL (decl1) = !DECL_EXTERNAL (decl1);
6100     }
6101
6102   announce_function (decl1);
6103
6104   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
6105     {
6106       error ("return type is an incomplete type");
6107       /* Make it return void instead.  */
6108       TREE_TYPE (decl1)
6109         = build_function_type (void_type_node,
6110                                TYPE_ARG_TYPES (TREE_TYPE (decl1)));
6111     }
6112
6113   if (warn_about_return_type)
6114     pedwarn_c99 (input_location, flag_isoc99 ? 0 
6115                  : (warn_return_type ? OPT_Wreturn_type : OPT_Wimplicit_int),
6116                  "return type defaults to %<int%>");
6117
6118   /* Make the init_value nonzero so pushdecl knows this is not tentative.
6119      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
6120   DECL_INITIAL (decl1) = error_mark_node;
6121
6122   /* If this definition isn't a prototype and we had a prototype declaration
6123      before, copy the arg type info from that prototype.  */
6124   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
6125   if (old_decl && TREE_CODE (old_decl) != FUNCTION_DECL)
6126     old_decl = 0;
6127   current_function_prototype_locus = UNKNOWN_LOCATION;
6128   current_function_prototype_built_in = false;
6129   current_function_prototype_arg_types = NULL_TREE;
6130   if (TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
6131     {
6132       if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
6133           && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
6134                         TREE_TYPE (TREE_TYPE (old_decl))))
6135         {
6136           TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
6137                                               TREE_TYPE (decl1));
6138           current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
6139           current_function_prototype_built_in
6140             = C_DECL_BUILTIN_PROTOTYPE (old_decl);
6141           current_function_prototype_arg_types
6142             = TYPE_ARG_TYPES (TREE_TYPE (decl1));
6143         }
6144       if (TREE_PUBLIC (decl1))
6145         {
6146           /* If there is an external prototype declaration of this
6147              function, record its location but do not copy information
6148              to this decl.  This may be an invisible declaration
6149              (built-in or in a scope which has finished) or simply
6150              have more refined argument types than any declaration
6151              found above.  */
6152           struct c_binding *b;
6153           for (b = I_SYMBOL_BINDING (DECL_NAME (decl1)); b; b = b->shadowed)
6154             if (B_IN_SCOPE (b, external_scope))
6155               break;
6156           if (b)
6157             {
6158               tree ext_decl, ext_type;
6159               ext_decl = b->decl;
6160               ext_type = b->type ? b->type : TREE_TYPE (ext_decl);
6161               if (TREE_CODE (ext_type) == FUNCTION_TYPE
6162                   && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
6163                                 TREE_TYPE (ext_type)))
6164                 {
6165                   current_function_prototype_locus
6166                     = DECL_SOURCE_LOCATION (ext_decl);
6167                   current_function_prototype_built_in
6168                     = C_DECL_BUILTIN_PROTOTYPE (ext_decl);
6169                   current_function_prototype_arg_types
6170                     = TYPE_ARG_TYPES (ext_type);
6171                 }
6172             }
6173         }
6174     }
6175
6176   /* Optionally warn of old-fashioned def with no previous prototype.  */
6177   if (warn_strict_prototypes
6178       && old_decl != error_mark_node
6179       && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
6180       && C_DECL_ISNT_PROTOTYPE (old_decl))
6181     warning (OPT_Wstrict_prototypes,
6182              "function declaration isn%'t a prototype");
6183   /* Optionally warn of any global def with no previous prototype.  */
6184   else if (warn_missing_prototypes
6185            && old_decl != error_mark_node
6186            && TREE_PUBLIC (decl1)
6187            && !MAIN_NAME_P (DECL_NAME (decl1))
6188            && C_DECL_ISNT_PROTOTYPE (old_decl))
6189     warning (OPT_Wmissing_prototypes, "no previous prototype for %q+D", decl1);
6190   /* Optionally warn of any def with no previous prototype
6191      if the function has already been used.  */
6192   else if (warn_missing_prototypes
6193            && old_decl != 0
6194            && old_decl != error_mark_node
6195            && TREE_USED (old_decl)
6196            && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
6197     warning (OPT_Wmissing_prototypes,
6198              "%q+D was used with no prototype before its definition", decl1);
6199   /* Optionally warn of any global def with no previous declaration.  */
6200   else if (warn_missing_declarations
6201            && TREE_PUBLIC (decl1)
6202            && old_decl == 0
6203            && !MAIN_NAME_P (DECL_NAME (decl1)))
6204     warning (OPT_Wmissing_declarations, "no previous declaration for %q+D",
6205              decl1);
6206   /* Optionally warn of any def with no previous declaration
6207      if the function has already been used.  */
6208   else if (warn_missing_declarations
6209            && old_decl != 0
6210            && old_decl != error_mark_node
6211            && TREE_USED (old_decl)
6212            && C_DECL_IMPLICIT (old_decl))
6213     warning (OPT_Wmissing_declarations,
6214              "%q+D was used with no declaration before its definition", decl1);
6215
6216   /* This function exists in static storage.
6217      (This does not mean `static' in the C sense!)  */
6218   TREE_STATIC (decl1) = 1;
6219
6220   /* A nested function is not global.  */
6221   if (current_function_decl != 0)
6222     TREE_PUBLIC (decl1) = 0;
6223
6224   /* This is the earliest point at which we might know the assembler
6225      name of the function.  Thus, if it's set before this, die horribly.  */
6226   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
6227
6228   /* If #pragma weak was used, mark the decl weak now.  */
6229   if (current_scope == file_scope)
6230     maybe_apply_pragma_weak (decl1);
6231
6232   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
6233   if (warn_main && MAIN_NAME_P (DECL_NAME (decl1)))
6234     {
6235       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
6236           != integer_type_node)
6237         pedwarn (input_location, OPT_Wmain, "return type of %q+D is not %<int%>", decl1);
6238
6239       check_main_parameter_types (decl1);
6240
6241       if (!TREE_PUBLIC (decl1))
6242         pedwarn (input_location, OPT_Wmain, "%q+D is normally a non-static function", decl1);
6243     }
6244
6245   /* Record the decl so that the function name is defined.
6246      If we already have a decl for this name, and it is a FUNCTION_DECL,
6247      use the old decl.  */
6248
6249   current_function_decl = pushdecl (decl1);
6250
6251   push_scope ();
6252   declare_parm_level ();
6253
6254   restype = TREE_TYPE (TREE_TYPE (current_function_decl));
6255   resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
6256   DECL_ARTIFICIAL (resdecl) = 1;
6257   DECL_IGNORED_P (resdecl) = 1;
6258   DECL_RESULT (current_function_decl) = resdecl;
6259
6260   start_fname_decls ();
6261
6262   return 1;
6263 }
6264 \f
6265 /* Subroutine of store_parm_decls which handles new-style function
6266    definitions (prototype format). The parms already have decls, so we
6267    need only record them as in effect and complain if any redundant
6268    old-style parm decls were written.  */
6269 static void
6270 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
6271 {
6272   tree decl;
6273
6274   if (current_scope->bindings)
6275     {
6276       error ("%Jold-style parameter declarations in prototyped "
6277              "function definition", fndecl);
6278
6279       /* Get rid of the old-style declarations.  */
6280       pop_scope ();
6281       push_scope ();
6282     }
6283   /* Don't issue this warning for nested functions, and don't issue this
6284      warning if we got here because ARG_INFO_TYPES was error_mark_node
6285      (this happens when a function definition has just an ellipsis in
6286      its parameter list).  */
6287   else if (!in_system_header && !current_function_scope
6288            && arg_info->types != error_mark_node)
6289     warning (OPT_Wtraditional,
6290              "%Jtraditional C rejects ISO C style function definitions",
6291              fndecl);
6292
6293   /* Now make all the parameter declarations visible in the function body.
6294      We can bypass most of the grunt work of pushdecl.  */
6295   for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
6296     {
6297       DECL_CONTEXT (decl) = current_function_decl;
6298       if (DECL_NAME (decl))
6299         {
6300           bind (DECL_NAME (decl), decl, current_scope,
6301                 /*invisible=*/false, /*nested=*/false);
6302           if (!TREE_USED (decl))
6303             warn_if_shadowing (decl);
6304         }
6305       else
6306         error ("%Jparameter name omitted", decl);
6307     }
6308
6309   /* Record the parameter list in the function declaration.  */
6310   DECL_ARGUMENTS (fndecl) = arg_info->parms;
6311
6312   /* Now make all the ancillary declarations visible, likewise.  */
6313   for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
6314     {
6315       DECL_CONTEXT (decl) = current_function_decl;
6316       if (DECL_NAME (decl))
6317         bind (DECL_NAME (decl), decl, current_scope,
6318               /*invisible=*/false, /*nested=*/false);
6319     }
6320
6321   /* And all the tag declarations.  */
6322   for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
6323     if (TREE_PURPOSE (decl))
6324       bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
6325             /*invisible=*/false, /*nested=*/false);
6326 }
6327
6328 /* Subroutine of store_parm_decls which handles old-style function
6329    definitions (separate parameter list and declarations).  */
6330
6331 static void
6332 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
6333 {
6334   struct c_binding *b;
6335   tree parm, decl, last;
6336   tree parmids = arg_info->parms;
6337   struct pointer_set_t *seen_args = pointer_set_create ();
6338
6339   if (!in_system_header)
6340     warning (OPT_Wold_style_definition, "%Jold-style function definition",
6341              fndecl);
6342
6343   /* Match each formal parameter name with its declaration.  Save each
6344      decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
6345   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6346     {
6347       if (TREE_VALUE (parm) == 0)
6348         {
6349           error ("%Jparameter name missing from parameter list", fndecl);
6350           TREE_PURPOSE (parm) = 0;
6351           continue;
6352         }
6353
6354       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
6355       if (b && B_IN_CURRENT_SCOPE (b))
6356         {
6357           decl = b->decl;
6358           /* If we got something other than a PARM_DECL it is an error.  */
6359           if (TREE_CODE (decl) != PARM_DECL)
6360             error ("%q+D declared as a non-parameter", decl);
6361           /* If the declaration is already marked, we have a duplicate
6362              name.  Complain and ignore the duplicate.  */
6363           else if (pointer_set_contains (seen_args, decl))
6364             {
6365               error ("multiple parameters named %q+D", decl);
6366               TREE_PURPOSE (parm) = 0;
6367               continue;
6368             }
6369           /* If the declaration says "void", complain and turn it into
6370              an int.  */
6371           else if (VOID_TYPE_P (TREE_TYPE (decl)))
6372             {
6373               error ("parameter %q+D declared with void type", decl);
6374               TREE_TYPE (decl) = integer_type_node;
6375               DECL_ARG_TYPE (decl) = integer_type_node;
6376               layout_decl (decl, 0);
6377             }
6378           warn_if_shadowing (decl);
6379         }
6380       /* If no declaration found, default to int.  */
6381       else
6382         {
6383           decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node);
6384           DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
6385           DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl);
6386           pushdecl (decl);
6387           warn_if_shadowing (decl);
6388
6389           if (flag_isoc99)
6390             pedwarn (input_location, 0, "type of %q+D defaults to %<int%>", decl);
6391           else 
6392             warning (OPT_Wmissing_parameter_type, "type of %q+D defaults to %<int%>", decl);
6393         }
6394
6395       TREE_PURPOSE (parm) = decl;
6396       pointer_set_insert (seen_args, decl);
6397     }
6398
6399   /* Now examine the parms chain for incomplete declarations
6400      and declarations with no corresponding names.  */
6401
6402   for (b = current_scope->bindings; b; b = b->prev)
6403     {
6404       parm = b->decl;
6405       if (TREE_CODE (parm) != PARM_DECL)
6406         continue;
6407
6408       if (TREE_TYPE (parm) != error_mark_node
6409           && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
6410         {
6411           error ("parameter %q+D has incomplete type", parm);
6412           TREE_TYPE (parm) = error_mark_node;
6413         }
6414
6415       if (!pointer_set_contains (seen_args, parm))
6416         {
6417           error ("declaration for parameter %q+D but no such parameter", parm);
6418
6419           /* Pretend the parameter was not missing.
6420              This gets us to a standard state and minimizes
6421              further error messages.  */
6422           parmids = chainon (parmids, tree_cons (parm, 0, 0));
6423         }
6424     }
6425
6426   /* Chain the declarations together in the order of the list of
6427      names.  Store that chain in the function decl, replacing the
6428      list of names.  Update the current scope to match.  */
6429   DECL_ARGUMENTS (fndecl) = 0;
6430
6431   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6432     if (TREE_PURPOSE (parm))
6433       break;
6434   if (parm && TREE_PURPOSE (parm))
6435     {
6436       last = TREE_PURPOSE (parm);
6437       DECL_ARGUMENTS (fndecl) = last;
6438
6439       for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
6440         if (TREE_PURPOSE (parm))
6441           {
6442             TREE_CHAIN (last) = TREE_PURPOSE (parm);
6443             last = TREE_PURPOSE (parm);
6444           }
6445       TREE_CHAIN (last) = 0;
6446     }
6447
6448   pointer_set_destroy (seen_args);
6449
6450   /* If there was a previous prototype,
6451      set the DECL_ARG_TYPE of each argument according to
6452      the type previously specified, and report any mismatches.  */
6453
6454   if (current_function_prototype_arg_types)
6455     {
6456       tree type;
6457       for (parm = DECL_ARGUMENTS (fndecl),
6458              type = current_function_prototype_arg_types;
6459            parm || (type && TREE_VALUE (type) != error_mark_node
6460                    && (TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node));
6461            parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6462         {
6463           if (parm == 0 || type == 0
6464               || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6465             {
6466               if (current_function_prototype_built_in)
6467                 warning (0, "number of arguments doesn%'t match "
6468                          "built-in prototype");
6469               else
6470                 {
6471                   error ("number of arguments doesn%'t match prototype");
6472                   error ("%Hprototype declaration",
6473                          &current_function_prototype_locus);
6474                 }
6475               break;
6476             }
6477           /* Type for passing arg must be consistent with that
6478              declared for the arg.  ISO C says we take the unqualified
6479              type for parameters declared with qualified type.  */
6480           if (TREE_TYPE (parm) != error_mark_node
6481               && TREE_TYPE (type) != error_mark_node
6482               && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6483                              TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6484             {
6485               if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6486                   == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6487                 {
6488                   /* Adjust argument to match prototype.  E.g. a previous
6489                      `int foo(float);' prototype causes
6490                      `int foo(x) float x; {...}' to be treated like
6491                      `int foo(float x) {...}'.  This is particularly
6492                      useful for argument types like uid_t.  */
6493                   DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6494
6495                   if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
6496                       && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6497                       && TYPE_PRECISION (TREE_TYPE (parm))
6498                       < TYPE_PRECISION (integer_type_node))
6499                     DECL_ARG_TYPE (parm) = integer_type_node;
6500
6501                   /* ??? Is it possible to get here with a
6502                      built-in prototype or will it always have
6503                      been diagnosed as conflicting with an
6504                      old-style definition and discarded?  */
6505                   if (current_function_prototype_built_in)
6506                     warning (OPT_pedantic, "promoted argument %qD "
6507                              "doesn%'t match built-in prototype", parm);
6508                   else
6509                     {
6510                       pedwarn (input_location, OPT_pedantic, "promoted argument %qD "
6511                                "doesn%'t match prototype", parm);
6512                       pedwarn (current_function_prototype_locus, OPT_pedantic,
6513                                "prototype declaration");
6514                     }
6515                 }
6516               else
6517                 {
6518                   if (current_function_prototype_built_in)
6519                     warning (0, "argument %qD doesn%'t match "
6520                              "built-in prototype", parm);
6521                   else
6522                     {
6523                       error ("argument %qD doesn%'t match prototype", parm);
6524                       error ("%Hprototype declaration",
6525                              &current_function_prototype_locus);
6526                     }
6527                 }
6528             }
6529         }
6530       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6531     }
6532
6533   /* Otherwise, create a prototype that would match.  */
6534
6535   else
6536     {
6537       tree actual = 0, last = 0, type;
6538
6539       for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6540         {
6541           type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6542           if (last)
6543             TREE_CHAIN (last) = type;
6544           else
6545             actual = type;
6546           last = type;
6547         }
6548       type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6549       if (last)
6550         TREE_CHAIN (last) = type;
6551       else
6552         actual = type;
6553
6554       /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6555          of the type of this function, but we need to avoid having this
6556          affect the types of other similarly-typed functions, so we must
6557          first force the generation of an identical (but separate) type
6558          node for the relevant function type.  The new node we create
6559          will be a variant of the main variant of the original function
6560          type.  */
6561
6562       TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
6563
6564       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6565     }
6566 }
6567
6568 /* Store parameter declarations passed in ARG_INFO into the current
6569    function declaration.  */
6570
6571 void
6572 store_parm_decls_from (struct c_arg_info *arg_info)
6573 {
6574   current_function_arg_info = arg_info;
6575   store_parm_decls ();
6576 }
6577
6578 /* Store the parameter declarations into the current function declaration.
6579    This is called after parsing the parameter declarations, before
6580    digesting the body of the function.
6581
6582    For an old-style definition, construct a prototype out of the old-style
6583    parameter declarations and inject it into the function's type.  */
6584
6585 void
6586 store_parm_decls (void)
6587 {
6588   tree fndecl = current_function_decl;
6589   bool proto;
6590
6591   /* The argument information block for FNDECL.  */
6592   struct c_arg_info *arg_info = current_function_arg_info;
6593   current_function_arg_info = 0;
6594
6595   /* True if this definition is written with a prototype.  Note:
6596      despite C99 6.7.5.3p14, we can *not* treat an empty argument
6597      list in a function definition as equivalent to (void) -- an
6598      empty argument list specifies the function has no parameters,
6599      but only (void) sets up a prototype for future calls.  */
6600   proto = arg_info->types != 0;
6601
6602   if (proto)
6603     store_parm_decls_newstyle (fndecl, arg_info);
6604   else
6605     store_parm_decls_oldstyle (fndecl, arg_info);
6606
6607   /* The next call to push_scope will be a function body.  */
6608
6609   next_is_function_body = true;
6610
6611   /* Write a record describing this function definition to the prototypes
6612      file (if requested).  */
6613
6614   gen_aux_info_record (fndecl, 1, 0, proto);
6615
6616   /* Initialize the RTL code for the function.  */
6617   allocate_struct_function (fndecl, false);
6618
6619   /* Begin the statement tree for this function.  */
6620   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
6621
6622   /* ??? Insert the contents of the pending sizes list into the function
6623      to be evaluated.  The only reason left to have this is
6624         void foo(int n, int array[n++])
6625      because we throw away the array type in favor of a pointer type, and
6626      thus won't naturally see the SAVE_EXPR containing the increment.  All
6627      other pending sizes would be handled by gimplify_parameters.  */
6628   {
6629     tree t;
6630     for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
6631       add_stmt (TREE_VALUE (t));
6632   }
6633
6634   /* Even though we're inside a function body, we still don't want to
6635      call expand_expr to calculate the size of a variable-sized array.
6636      We haven't necessarily assigned RTL to all variables yet, so it's
6637      not safe to try to expand expressions involving them.  */
6638   cfun->dont_save_pending_sizes_p = 1;
6639 }
6640 \f
6641 /* Emit diagnostics that require gimple input for detection.  Operate on
6642    FNDECL and all its nested functions.  */
6643
6644 static void
6645 c_gimple_diagnostics_recursively (tree fndecl)
6646 {
6647   struct cgraph_node *cgn;
6648   gimple_seq body = gimple_body (fndecl);
6649
6650   /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
6651   c_warn_unused_result (body);
6652
6653   /* Notice when OpenMP structured block constraints are violated.  */
6654   if (flag_openmp)
6655     diagnose_omp_structured_block_errors (fndecl);
6656
6657   /* Finalize all nested functions now.  */
6658   cgn = cgraph_node (fndecl);
6659   for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
6660     c_gimple_diagnostics_recursively (cgn->decl);
6661 }
6662
6663 /* Finish up a function declaration and compile that function
6664    all the way to assembler language output.  The free the storage
6665    for the function definition.
6666
6667    This is called after parsing the body of the function definition.  */
6668
6669 void
6670 finish_function (void)
6671 {
6672   tree fndecl = current_function_decl;
6673
6674   label_context_stack_se = label_context_stack_se->next;
6675   label_context_stack_vm = label_context_stack_vm->next;
6676
6677   if (TREE_CODE (fndecl) == FUNCTION_DECL
6678       && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
6679     {
6680       tree args = DECL_ARGUMENTS (fndecl);
6681       for (; args; args = TREE_CHAIN (args))
6682         {
6683           tree type = TREE_TYPE (args);
6684           if (INTEGRAL_TYPE_P (type)
6685               && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
6686             DECL_ARG_TYPE (args) = integer_type_node;
6687         }
6688     }
6689
6690   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6691     BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6692
6693   /* Must mark the RESULT_DECL as being in this function.  */
6694
6695   if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
6696     DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6697
6698   if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted
6699       && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6700       == integer_type_node && flag_isoc99)
6701     {
6702       tree stmt = c_finish_return (integer_zero_node);
6703       /* Hack.  We don't want the middle-end to warn that this return
6704          is unreachable, so we mark its location as special.  Using
6705          UNKNOWN_LOCATION has the problem that it gets clobbered in
6706          annotate_one_with_locus.  A cleaner solution might be to
6707          ensure ! should_carry_locus_p (stmt), but that needs a flag.
6708       */
6709       SET_EXPR_LOCATION (stmt, BUILTINS_LOCATION);
6710     }
6711
6712   /* Tie off the statement tree for this function.  */
6713   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
6714
6715   finish_fname_decls ();
6716
6717   /* Complain if there's just no return statement.  */
6718   if (warn_return_type
6719       && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6720       && !current_function_returns_value && !current_function_returns_null
6721       /* Don't complain if we are no-return.  */
6722       && !current_function_returns_abnormally
6723       /* Don't warn for main().  */
6724       && !MAIN_NAME_P (DECL_NAME (fndecl))
6725       /* Or if they didn't actually specify a return type.  */
6726       && !C_FUNCTION_IMPLICIT_INT (fndecl)
6727       /* Normally, with -Wreturn-type, flow will complain, but we might
6728          optimize out static functions.  */
6729       && !TREE_PUBLIC (fndecl))
6730     {
6731       warning (OPT_Wreturn_type,
6732                "no return statement in function returning non-void");
6733       TREE_NO_WARNING (fndecl) = 1;
6734     }
6735
6736   /* Store the end of the function, so that we get good line number
6737      info for the epilogue.  */
6738   cfun->function_end_locus = input_location;
6739
6740   /* Finalize the ELF visibility for the function.  */
6741   c_determine_visibility (fndecl);
6742
6743   /* For GNU C extern inline functions disregard inline limits.  */
6744   if (DECL_EXTERNAL (fndecl) 
6745       && DECL_DECLARED_INLINE_P (fndecl))
6746     DECL_DISREGARD_INLINE_LIMITS (fndecl) = 1;
6747
6748   /* Genericize before inlining.  Delay genericizing nested functions
6749      until their parent function is genericized.  Since finalizing
6750      requires GENERIC, delay that as well.  */
6751
6752   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
6753       && !undef_nested_function)
6754     {
6755       if (!decl_function_context (fndecl))
6756         {
6757           c_genericize (fndecl);
6758           c_gimple_diagnostics_recursively (fndecl);
6759
6760           /* ??? Objc emits functions after finalizing the compilation unit.
6761              This should be cleaned up later and this conditional removed.  */
6762           if (cgraph_global_info_ready)
6763             {
6764               cgraph_add_new_function (fndecl, false);
6765               return;
6766             }
6767
6768           cgraph_finalize_function (fndecl, false);
6769         }
6770       else
6771         {
6772           /* Register this function with cgraph just far enough to get it
6773             added to our parent's nested function list.  Handy, since the
6774             C front end doesn't have such a list.  */
6775           (void) cgraph_node (fndecl);
6776         }
6777     }
6778
6779   if (!decl_function_context (fndecl))
6780     undef_nested_function = false;
6781
6782   /* We're leaving the context of this function, so zap cfun.
6783      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6784      tree_rest_of_compilation.  */
6785   set_cfun (NULL);
6786   current_function_decl = NULL;
6787 }
6788 \f
6789 /* Check the declarations given in a for-loop for satisfying the C99
6790    constraints.  If exactly one such decl is found, return it.  */
6791
6792 tree
6793 check_for_loop_decls (void)
6794 {
6795   struct c_binding *b;
6796   tree one_decl = NULL_TREE;
6797   int n_decls = 0;
6798
6799   if (!flag_isoc99)
6800     {
6801       static bool hint = true;
6802       /* If we get here, declarations have been used in a for loop without
6803          the C99 for loop scope.  This doesn't make much sense, so don't
6804          allow it.  */
6805       error ("%<for%> loop initial declarations are only allowed in C99 mode");
6806       if (hint)
6807         {
6808           inform (input_location, 
6809                   "use option -std=c99 or -std=gnu99 to compile your code");
6810           hint = false;
6811         }
6812       return NULL_TREE;
6813     }
6814   /* C99 subclause 6.8.5 paragraph 3:
6815
6816        [#3]  The  declaration  part  of  a for statement shall only
6817        declare identifiers for objects having storage class auto or
6818        register.
6819
6820      It isn't clear whether, in this sentence, "identifiers" binds to
6821      "shall only declare" or to "objects" - that is, whether all identifiers
6822      declared must be identifiers for objects, or whether the restriction
6823      only applies to those that are.  (A question on this in comp.std.c
6824      in November 2000 received no answer.)  We implement the strictest
6825      interpretation, to avoid creating an extension which later causes
6826      problems.  */
6827
6828   for (b = current_scope->bindings; b; b = b->prev)
6829     {
6830       tree id = b->id;
6831       tree decl = b->decl;
6832
6833       if (!id)
6834         continue;
6835
6836       switch (TREE_CODE (decl))
6837         {
6838         case VAR_DECL:
6839           if (TREE_STATIC (decl))
6840             error ("declaration of static variable %q+D in %<for%> loop "
6841                    "initial declaration", decl);
6842           else if (DECL_EXTERNAL (decl))
6843             error ("declaration of %<extern%> variable %q+D in %<for%> loop "
6844                    "initial declaration", decl);
6845           break;
6846
6847         case RECORD_TYPE:
6848           error ("%<struct %E%> declared in %<for%> loop initial declaration",
6849                  id);
6850           break;
6851         case UNION_TYPE:
6852           error ("%<union %E%> declared in %<for%> loop initial declaration",
6853                  id);
6854           break;
6855         case ENUMERAL_TYPE:
6856           error ("%<enum %E%> declared in %<for%> loop initial declaration",
6857                  id);
6858           break;
6859         default:
6860           error ("declaration of non-variable %q+D in %<for%> loop "
6861                  "initial declaration", decl);
6862         }
6863
6864       n_decls++;
6865       one_decl = decl;
6866     }
6867
6868   return n_decls == 1 ? one_decl : NULL_TREE;
6869 }
6870 \f
6871 /* Save and reinitialize the variables
6872    used during compilation of a C function.  */
6873
6874 void
6875 c_push_function_context (void)
6876 {
6877   struct language_function *p;
6878   p = GGC_NEW (struct language_function);
6879   cfun->language = p;
6880
6881   p->base.x_stmt_tree = c_stmt_tree;
6882   p->x_break_label = c_break_label;
6883   p->x_cont_label = c_cont_label;
6884   p->x_switch_stack = c_switch_stack;
6885   p->arg_info = current_function_arg_info;
6886   p->returns_value = current_function_returns_value;
6887   p->returns_null = current_function_returns_null;
6888   p->returns_abnormally = current_function_returns_abnormally;
6889   p->warn_about_return_type = warn_about_return_type;
6890
6891   push_function_context ();
6892 }
6893
6894 /* Restore the variables used during compilation of a C function.  */
6895
6896 void
6897 c_pop_function_context (void)
6898 {
6899   struct language_function *p;
6900
6901   pop_function_context ();
6902   p = cfun->language;
6903   cfun->language = NULL;
6904
6905   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
6906       && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
6907     {
6908       /* Stop pointing to the local nodes about to be freed.  */
6909       /* But DECL_INITIAL must remain nonzero so we know this
6910          was an actual function definition.  */
6911       DECL_INITIAL (current_function_decl) = error_mark_node;
6912       DECL_ARGUMENTS (current_function_decl) = 0;
6913     }
6914
6915   c_stmt_tree = p->base.x_stmt_tree;
6916   c_break_label = p->x_break_label;
6917   c_cont_label = p->x_cont_label;
6918   c_switch_stack = p->x_switch_stack;
6919   current_function_arg_info = p->arg_info;
6920   current_function_returns_value = p->returns_value;
6921   current_function_returns_null = p->returns_null;
6922   current_function_returns_abnormally = p->returns_abnormally;
6923   warn_about_return_type = p->warn_about_return_type;
6924 }
6925
6926 /* Copy the DECL_LANG_SPECIFIC data associated with DECL.  */
6927
6928 void
6929 c_dup_lang_specific_decl (tree decl)
6930 {
6931   struct lang_decl *ld;
6932
6933   if (!DECL_LANG_SPECIFIC (decl))
6934     return;
6935
6936   ld = GGC_NEW (struct lang_decl);
6937   memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
6938   DECL_LANG_SPECIFIC (decl) = ld;
6939 }
6940
6941 /* The functions below are required for functionality of doing
6942    function at once processing in the C front end. Currently these
6943    functions are not called from anywhere in the C front end, but as
6944    these changes continue, that will change.  */
6945
6946 /* Returns the stmt_tree (if any) to which statements are currently
6947    being added.  If there is no active statement-tree, NULL is
6948    returned.  */
6949
6950 stmt_tree
6951 current_stmt_tree (void)
6952 {
6953   return &c_stmt_tree;
6954 }
6955
6956 /* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
6957    C.  */
6958
6959 int
6960 anon_aggr_type_p (const_tree ARG_UNUSED (node))
6961 {
6962   return 0;
6963 }
6964
6965 /* Return the global value of T as a symbol.  */
6966
6967 tree
6968 identifier_global_value (tree t)
6969 {
6970   struct c_binding *b;
6971
6972   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
6973     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
6974       return b->decl;
6975
6976   return 0;
6977 }
6978
6979 /* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
6980    otherwise the name is found in ridpointers from RID_INDEX.  */
6981
6982 void
6983 record_builtin_type (enum rid rid_index, const char *name, tree type)
6984 {
6985   tree id, decl;
6986   if (name == 0)
6987     id = ridpointers[(int) rid_index];
6988   else
6989     id = get_identifier (name);
6990   decl = build_decl (TYPE_DECL, id, type);
6991   pushdecl (decl);
6992   if (debug_hooks->type_decl)
6993     debug_hooks->type_decl (decl, false);
6994 }
6995
6996 /* Build the void_list_node (void_type_node having been created).  */
6997 tree
6998 build_void_list_node (void)
6999 {
7000   tree t = build_tree_list (NULL_TREE, void_type_node);
7001   return t;
7002 }
7003
7004 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
7005
7006 struct c_parm *
7007 build_c_parm (struct c_declspecs *specs, tree attrs,
7008               struct c_declarator *declarator)
7009 {
7010   struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
7011   ret->specs = specs;
7012   ret->attrs = attrs;
7013   ret->declarator = declarator;
7014   return ret;
7015 }
7016
7017 /* Return a declarator with nested attributes.  TARGET is the inner
7018    declarator to which these attributes apply.  ATTRS are the
7019    attributes.  */
7020
7021 struct c_declarator *
7022 build_attrs_declarator (tree attrs, struct c_declarator *target)
7023 {
7024   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7025   ret->kind = cdk_attrs;
7026   ret->declarator = target;
7027   ret->u.attrs = attrs;
7028   return ret;
7029 }
7030
7031 /* Return a declarator for a function with arguments specified by ARGS
7032    and return type specified by TARGET.  */
7033
7034 struct c_declarator *
7035 build_function_declarator (struct c_arg_info *args,
7036                            struct c_declarator *target)
7037 {
7038   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7039   ret->kind = cdk_function;
7040   ret->declarator = target;
7041   ret->u.arg_info = args;
7042   return ret;
7043 }
7044
7045 /* Return a declarator for the identifier IDENT (which may be
7046    NULL_TREE for an abstract declarator).  */
7047
7048 struct c_declarator *
7049 build_id_declarator (tree ident)
7050 {
7051   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7052   ret->kind = cdk_id;
7053   ret->declarator = 0;
7054   ret->u.id = ident;
7055   /* Default value - may get reset to a more precise location. */
7056   ret->id_loc = input_location;
7057   return ret;
7058 }
7059
7060 /* Return something to represent absolute declarators containing a *.
7061    TARGET is the absolute declarator that the * contains.
7062    TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
7063    to apply to the pointer type.  */
7064
7065 struct c_declarator *
7066 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
7067                          struct c_declarator *target)
7068 {
7069   tree attrs;
7070   int quals = 0;
7071   struct c_declarator *itarget = target;
7072   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
7073   if (type_quals_attrs)
7074     {
7075       attrs = type_quals_attrs->attrs;
7076       quals = quals_from_declspecs (type_quals_attrs);
7077       if (attrs != NULL_TREE)
7078         itarget = build_attrs_declarator (attrs, target);
7079     }
7080   ret->kind = cdk_pointer;
7081   ret->declarator = itarget;
7082   ret->u.pointer_quals = quals;
7083   return ret;
7084 }
7085
7086 /* Return a pointer to a structure for an empty list of declaration
7087    specifiers.  */
7088
7089 struct c_declspecs *
7090 build_null_declspecs (void)
7091 {
7092   struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
7093   ret->type = 0;
7094   ret->decl_attr = 0;
7095   ret->attrs = 0;
7096   ret->typespec_word = cts_none;
7097   ret->storage_class = csc_none;
7098   ret->declspecs_seen_p = false;
7099   ret->type_seen_p = false;
7100   ret->non_sc_seen_p = false;
7101   ret->typedef_p = false;
7102   ret->tag_defined_p = false;
7103   ret->explicit_signed_p = false;
7104   ret->deprecated_p = false;
7105   ret->default_int_p = false;
7106   ret->long_p = false;
7107   ret->long_long_p = false;
7108   ret->short_p = false;
7109   ret->signed_p = false;
7110   ret->unsigned_p = false;
7111   ret->complex_p = false;
7112   ret->inline_p = false;
7113   ret->thread_p = false;
7114   ret->const_p = false;
7115   ret->volatile_p = false;
7116   ret->restrict_p = false;
7117   ret->saturating_p = false;
7118   return ret;
7119 }
7120
7121 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
7122    returning SPECS.  */
7123
7124 struct c_declspecs *
7125 declspecs_add_qual (struct c_declspecs *specs, tree qual)
7126 {
7127   enum rid i;
7128   bool dupe = false;
7129   specs->non_sc_seen_p = true;
7130   specs->declspecs_seen_p = true;
7131   gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
7132               && C_IS_RESERVED_WORD (qual));
7133   i = C_RID_CODE (qual);
7134   switch (i)
7135     {
7136     case RID_CONST:
7137       dupe = specs->const_p;
7138       specs->const_p = true;
7139       break;
7140     case RID_VOLATILE:
7141       dupe = specs->volatile_p;
7142       specs->volatile_p = true;
7143       break;
7144     case RID_RESTRICT:
7145       dupe = specs->restrict_p;
7146       specs->restrict_p = true;
7147       break;
7148     default:
7149       gcc_unreachable ();
7150     }
7151   if (dupe && !flag_isoc99)
7152     pedwarn (input_location, OPT_pedantic, "duplicate %qE", qual);
7153   return specs;
7154 }
7155
7156 /* Add the type specifier TYPE to the declaration specifiers SPECS,
7157    returning SPECS.  */
7158
7159 struct c_declspecs *
7160 declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
7161 {
7162   tree type = spec.spec;
7163   specs->non_sc_seen_p = true;
7164   specs->declspecs_seen_p = true;
7165   specs->type_seen_p = true;
7166   if (TREE_DEPRECATED (type))
7167     specs->deprecated_p = true;
7168
7169   /* Handle type specifier keywords.  */
7170   if (TREE_CODE (type) == IDENTIFIER_NODE
7171       && C_IS_RESERVED_WORD (type)
7172       && C_RID_CODE (type) != RID_CXX_COMPAT_WARN)
7173     {
7174       enum rid i = C_RID_CODE (type);
7175       if (specs->type)
7176         {
7177           error ("two or more data types in declaration specifiers");
7178           return specs;
7179         }
7180       if ((int) i <= (int) RID_LAST_MODIFIER)
7181         {
7182           /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat".  */
7183           bool dupe = false;
7184           switch (i)
7185             {
7186             case RID_LONG:
7187               if (specs->long_long_p)
7188                 {
7189                   error ("%<long long long%> is too long for GCC");
7190                   break;
7191                 }
7192               if (specs->long_p)
7193                 {
7194                   if (specs->typespec_word == cts_double)
7195                     {
7196                       error ("both %<long long%> and %<double%> in "
7197                              "declaration specifiers");
7198                       break;
7199                     }
7200                   if (pedantic && !flag_isoc99 && !in_system_header)
7201                     pedwarn (input_location, OPT_Wlong_long, "ISO C90 does not support %<long long%>");
7202                   specs->long_long_p = 1;
7203                   break;
7204                 }
7205               if (specs->short_p)
7206                 error ("both %<long%> and %<short%> in "
7207                        "declaration specifiers");
7208               else if (specs->typespec_word == cts_void)
7209                 error ("both %<long%> and %<void%> in "
7210                        "declaration specifiers");
7211               else if (specs->typespec_word == cts_bool)
7212                 error ("both %<long%> and %<_Bool%> in "
7213                        "declaration specifiers");
7214               else if (specs->typespec_word == cts_char)
7215                 error ("both %<long%> and %<char%> in "
7216                        "declaration specifiers");
7217               else if (specs->typespec_word == cts_float)
7218                 error ("both %<long%> and %<float%> in "
7219                        "declaration specifiers");
7220               else if (specs->typespec_word == cts_dfloat32)
7221                 error ("both %<long%> and %<_Decimal32%> in "
7222                        "declaration specifiers");
7223               else if (specs->typespec_word == cts_dfloat64)
7224                 error ("both %<long%> and %<_Decimal64%> in "
7225                        "declaration specifiers");
7226               else if (specs->typespec_word == cts_dfloat128)
7227                 error ("both %<long%> and %<_Decimal128%> in "
7228                        "declaration specifiers");
7229               else
7230                 specs->long_p = true;
7231               break;
7232             case RID_SHORT:
7233               dupe = specs->short_p;
7234               if (specs->long_p)
7235                 error ("both %<long%> and %<short%> in "
7236                        "declaration specifiers");
7237               else if (specs->typespec_word == cts_void)
7238                 error ("both %<short%> and %<void%> in "
7239                        "declaration specifiers");
7240               else if (specs->typespec_word == cts_bool)
7241                 error ("both %<short%> and %<_Bool%> in "
7242                        "declaration specifiers");
7243               else if (specs->typespec_word == cts_char)
7244                 error ("both %<short%> and %<char%> in "
7245                        "declaration specifiers");
7246               else if (specs->typespec_word == cts_float)
7247                 error ("both %<short%> and %<float%> in "
7248                        "declaration specifiers");
7249               else if (specs->typespec_word == cts_double)
7250                 error ("both %<short%> and %<double%> in "
7251                        "declaration specifiers");
7252               else if (specs->typespec_word == cts_dfloat32)
7253                 error ("both %<short%> and %<_Decimal32%> in "
7254                        "declaration specifiers");
7255               else if (specs->typespec_word == cts_dfloat64)
7256                 error ("both %<short%> and %<_Decimal64%> in "
7257                                         "declaration specifiers");
7258               else if (specs->typespec_word == cts_dfloat128)
7259                 error ("both %<short%> and %<_Decimal128%> in "
7260                        "declaration specifiers");
7261               else
7262                 specs->short_p = true;
7263               break;
7264             case RID_SIGNED:
7265               dupe = specs->signed_p;
7266               if (specs->unsigned_p)
7267                 error ("both %<signed%> and %<unsigned%> in "
7268                        "declaration specifiers");
7269               else if (specs->typespec_word == cts_void)
7270                 error ("both %<signed%> and %<void%> in "
7271                        "declaration specifiers");
7272               else if (specs->typespec_word == cts_bool)
7273                 error ("both %<signed%> and %<_Bool%> in "
7274                        "declaration specifiers");
7275               else if (specs->typespec_word == cts_float)
7276                 error ("both %<signed%> and %<float%> in "
7277                        "declaration specifiers");
7278               else if (specs->typespec_word == cts_double)
7279                 error ("both %<signed%> and %<double%> in "
7280                        "declaration specifiers");
7281               else if (specs->typespec_word == cts_dfloat32)
7282                 error ("both %<signed%> and %<_Decimal32%> in "
7283                        "declaration specifiers");
7284               else if (specs->typespec_word == cts_dfloat64)
7285                 error ("both %<signed%> and %<_Decimal64%> in "
7286                        "declaration specifiers");
7287               else if (specs->typespec_word == cts_dfloat128)
7288                 error ("both %<signed%> and %<_Decimal128%> in "
7289                        "declaration specifiers");
7290               else
7291                 specs->signed_p = true;
7292               break;
7293             case RID_UNSIGNED:
7294               dupe = specs->unsigned_p;
7295               if (specs->signed_p)
7296                 error ("both %<signed%> and %<unsigned%> in "
7297                        "declaration specifiers");
7298               else if (specs->typespec_word == cts_void)
7299                 error ("both %<unsigned%> and %<void%> in "
7300                        "declaration specifiers");
7301               else if (specs->typespec_word == cts_bool)
7302                 error ("both %<unsigned%> and %<_Bool%> in "
7303                        "declaration specifiers");
7304               else if (specs->typespec_word == cts_float)
7305                 error ("both %<unsigned%> and %<float%> in "
7306                        "declaration specifiers");
7307               else if (specs->typespec_word == cts_double)
7308                 error ("both %<unsigned%> and %<double%> in "
7309                        "declaration specifiers");
7310               else if (specs->typespec_word == cts_dfloat32)
7311                 error ("both %<unsigned%> and %<_Decimal32%> in "
7312                        "declaration specifiers");
7313               else if (specs->typespec_word == cts_dfloat64)
7314                 error ("both %<unsigned%> and %<_Decimal64%> in "
7315                        "declaration specifiers");
7316               else if (specs->typespec_word == cts_dfloat128)
7317                 error ("both %<unsigned%> and %<_Decimal128%> in "
7318                        "declaration specifiers");
7319               else
7320                 specs->unsigned_p = true;
7321               break;
7322             case RID_COMPLEX:
7323               dupe = specs->complex_p;
7324               if (!flag_isoc99 && !in_system_header)
7325                 pedwarn (input_location, OPT_pedantic, "ISO C90 does not support complex types");
7326               if (specs->typespec_word == cts_void)
7327                 error ("both %<complex%> and %<void%> in "
7328                        "declaration specifiers");
7329               else if (specs->typespec_word == cts_bool)
7330                 error ("both %<complex%> and %<_Bool%> in "
7331                        "declaration specifiers");
7332               else if (specs->typespec_word == cts_dfloat32)
7333                 error ("both %<complex%> and %<_Decimal32%> in "
7334                        "declaration specifiers");
7335               else if (specs->typespec_word == cts_dfloat64)
7336                 error ("both %<complex%> and %<_Decimal64%> in "
7337                        "declaration specifiers");
7338               else if (specs->typespec_word == cts_dfloat128)
7339                 error ("both %<complex%> and %<_Decimal128%> in "
7340                        "declaration specifiers");
7341               else if (specs->typespec_word == cts_fract)
7342                 error ("both %<complex%> and %<_Fract%> in "
7343                        "declaration specifiers");
7344               else if (specs->typespec_word == cts_accum)
7345                 error ("both %<complex%> and %<_Accum%> in "
7346                        "declaration specifiers");
7347               else if (specs->saturating_p)
7348                 error ("both %<complex%> and %<_Sat%> in "
7349                        "declaration specifiers");
7350               else
7351                 specs->complex_p = true;
7352               break;
7353             case RID_SAT:
7354               dupe = specs->saturating_p;
7355               pedwarn (input_location, OPT_pedantic, "ISO C does not support saturating types");
7356               if (specs->typespec_word == cts_void)
7357                 error ("both %<_Sat%> and %<void%> in "
7358                        "declaration specifiers");
7359               else if (specs->typespec_word == cts_bool)
7360                 error ("both %<_Sat%> and %<_Bool%> in "
7361                        "declaration specifiers");
7362               else if (specs->typespec_word == cts_char)
7363                 error ("both %<_Sat%> and %<char%> in "
7364                        "declaration specifiers");
7365               else if (specs->typespec_word == cts_int)
7366                 error ("both %<_Sat%> and %<int%> in "
7367                        "declaration specifiers");
7368               else if (specs->typespec_word == cts_float)
7369                 error ("both %<_Sat%> and %<float%> in "
7370                        "declaration specifiers");
7371               else if (specs->typespec_word == cts_double)
7372                 error ("both %<_Sat%> and %<double%> in "
7373                        "declaration specifiers");
7374               else if (specs->typespec_word == cts_dfloat32)
7375                 error ("both %<_Sat%> and %<_Decimal32%> in "
7376                        "declaration specifiers");
7377               else if (specs->typespec_word == cts_dfloat64)
7378                 error ("both %<_Sat%> and %<_Decimal64%> in "
7379                        "declaration specifiers");
7380               else if (specs->typespec_word == cts_dfloat128)
7381                 error ("both %<_Sat%> and %<_Decimal128%> in "
7382                        "declaration specifiers");
7383               else if (specs->complex_p)
7384                 error ("both %<_Sat%> and %<complex%> in "
7385                        "declaration specifiers");
7386               else
7387                 specs->saturating_p = true;
7388               break;
7389             default:
7390               gcc_unreachable ();
7391             }
7392
7393           if (dupe)
7394             error ("duplicate %qE", type);
7395
7396           return specs;
7397         }
7398       else
7399         {
7400           /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
7401              "_Decimal64", "_Decimal128", "_Fract" or "_Accum".  */
7402           if (specs->typespec_word != cts_none)
7403             {
7404               error ("two or more data types in declaration specifiers");
7405               return specs;
7406             }
7407           switch (i)
7408             {
7409             case RID_VOID:
7410               if (specs->long_p)
7411                 error ("both %<long%> and %<void%> in "
7412                        "declaration specifiers");
7413               else if (specs->short_p)
7414                 error ("both %<short%> and %<void%> in "
7415                        "declaration specifiers");
7416               else if (specs->signed_p)
7417                 error ("both %<signed%> and %<void%> in "
7418                        "declaration specifiers");
7419               else if (specs->unsigned_p)
7420                 error ("both %<unsigned%> and %<void%> in "
7421                        "declaration specifiers");
7422               else if (specs->complex_p)
7423                 error ("both %<complex%> and %<void%> in "
7424                        "declaration specifiers");
7425               else if (specs->saturating_p)
7426                 error ("both %<_Sat%> and %<void%> in "
7427                        "declaration specifiers");
7428               else
7429                 specs->typespec_word = cts_void;
7430               return specs;
7431             case RID_BOOL:
7432               if (specs->long_p)
7433                 error ("both %<long%> and %<_Bool%> in "
7434                        "declaration specifiers");
7435               else if (specs->short_p)
7436                 error ("both %<short%> and %<_Bool%> in "
7437                        "declaration specifiers");
7438               else if (specs->signed_p)
7439                 error ("both %<signed%> and %<_Bool%> in "
7440                        "declaration specifiers");
7441               else if (specs->unsigned_p)
7442                 error ("both %<unsigned%> and %<_Bool%> in "
7443                        "declaration specifiers");
7444               else if (specs->complex_p)
7445                 error ("both %<complex%> and %<_Bool%> in "
7446                        "declaration specifiers");
7447               else if (specs->saturating_p)
7448                 error ("both %<_Sat%> and %<_Bool%> in "
7449                        "declaration specifiers");
7450               else
7451                 specs->typespec_word = cts_bool;
7452               return specs;
7453             case RID_CHAR:
7454               if (specs->long_p)
7455                 error ("both %<long%> and %<char%> in "
7456                        "declaration specifiers");
7457               else if (specs->short_p)
7458                 error ("both %<short%> and %<char%> in "
7459                        "declaration specifiers");
7460               else if (specs->saturating_p)
7461                 error ("both %<_Sat%> and %<char%> in "
7462                        "declaration specifiers");
7463               else
7464                 specs->typespec_word = cts_char;
7465               return specs;
7466             case RID_INT:
7467               if (specs->saturating_p)
7468                 error ("both %<_Sat%> and %<int%> in "
7469                        "declaration specifiers");
7470               else
7471                 specs->typespec_word = cts_int;
7472               return specs;
7473             case RID_FLOAT:
7474               if (specs->long_p)
7475                 error ("both %<long%> and %<float%> in "
7476                        "declaration specifiers");
7477               else if (specs->short_p)
7478                 error ("both %<short%> and %<float%> in "
7479                        "declaration specifiers");
7480               else if (specs->signed_p)
7481                 error ("both %<signed%> and %<float%> in "
7482                        "declaration specifiers");
7483               else if (specs->unsigned_p)
7484                 error ("both %<unsigned%> and %<float%> in "
7485                        "declaration specifiers");
7486               else if (specs->saturating_p)
7487                 error ("both %<_Sat%> and %<float%> in "
7488                        "declaration specifiers");
7489               else
7490                 specs->typespec_word = cts_float;
7491               return specs;
7492             case RID_DOUBLE:
7493               if (specs->long_long_p)
7494                 error ("both %<long long%> and %<double%> in "
7495                        "declaration specifiers");
7496               else if (specs->short_p)
7497                 error ("both %<short%> and %<double%> in "
7498                        "declaration specifiers");
7499               else if (specs->signed_p)
7500                 error ("both %<signed%> and %<double%> in "
7501                        "declaration specifiers");
7502               else if (specs->unsigned_p)
7503                 error ("both %<unsigned%> and %<double%> in "
7504                        "declaration specifiers");
7505               else if (specs->saturating_p)
7506                 error ("both %<_Sat%> and %<double%> in "
7507                        "declaration specifiers");
7508               else
7509                 specs->typespec_word = cts_double;
7510               return specs;
7511             case RID_DFLOAT32:
7512             case RID_DFLOAT64:
7513             case RID_DFLOAT128:
7514               { 
7515                 const char *str;
7516                 if (i == RID_DFLOAT32)
7517                   str = "_Decimal32";
7518                 else if (i == RID_DFLOAT64)
7519                   str = "_Decimal64";
7520                 else
7521                   str = "_Decimal128";
7522                 if (specs->long_long_p)
7523                   error ("both %<long long%> and %<%s%> in "
7524                          "declaration specifiers", str);
7525                 if (specs->long_p)
7526                   error ("both %<long%> and %<%s%> in "
7527                          "declaration specifiers", str);
7528                 else if (specs->short_p)
7529                   error ("both %<short%> and %<%s%> in "
7530                          "declaration specifiers", str);
7531                 else if (specs->signed_p)
7532                   error ("both %<signed%> and %<%s%> in "
7533                          "declaration specifiers", str);
7534                 else if (specs->unsigned_p)
7535                   error ("both %<unsigned%> and %<%s%> in "
7536                          "declaration specifiers", str);
7537                 else if (specs->complex_p)
7538                   error ("both %<complex%> and %<%s%> in "
7539                          "declaration specifiers", str);
7540                 else if (specs->saturating_p)
7541                   error ("both %<_Sat%> and %<%s%> in "
7542                          "declaration specifiers", str);
7543                 else if (i == RID_DFLOAT32)
7544                   specs->typespec_word = cts_dfloat32;
7545                 else if (i == RID_DFLOAT64)
7546                   specs->typespec_word = cts_dfloat64;
7547                 else
7548                   specs->typespec_word = cts_dfloat128;
7549               }
7550               if (!targetm.decimal_float_supported_p ())
7551                 error ("decimal floating point not supported for this target");
7552               pedwarn (input_location, OPT_pedantic, 
7553                        "ISO C does not support decimal floating point");
7554               return specs;
7555             case RID_FRACT:
7556             case RID_ACCUM:
7557               {
7558                 const char *str;
7559                 if (i == RID_FRACT)
7560                   str = "_Fract";
7561                 else
7562                   str = "_Accum";
7563                 if (specs->complex_p)
7564                   error ("both %<complex%> and %<%s%> in "
7565                          "declaration specifiers", str);
7566                 else if (i == RID_FRACT)
7567                     specs->typespec_word = cts_fract;
7568                 else
7569                     specs->typespec_word = cts_accum;
7570               }
7571               if (!targetm.fixed_point_supported_p ())
7572                 error ("fixed-point types not supported for this target");
7573               pedwarn (input_location, OPT_pedantic, 
7574                        "ISO C does not support fixed-point types");
7575               return specs;
7576             default:
7577               /* ObjC reserved word "id", handled below.  */
7578               break;
7579             }
7580         }
7581     }
7582
7583   /* Now we have a typedef (a TYPE_DECL node), an identifier (some
7584      form of ObjC type, cases such as "int" and "long" being handled
7585      above), a TYPE (struct, union, enum and typeof specifiers) or an
7586      ERROR_MARK.  In none of these cases may there have previously
7587      been any type specifiers.  */
7588   if (specs->type || specs->typespec_word != cts_none
7589       || specs->long_p || specs->short_p || specs->signed_p
7590       || specs->unsigned_p || specs->complex_p)
7591     error ("two or more data types in declaration specifiers");
7592   else if (TREE_CODE (type) == TYPE_DECL)
7593     {
7594       if (TREE_TYPE (type) == error_mark_node)
7595         ; /* Allow the type to default to int to avoid cascading errors.  */
7596       else
7597         {
7598           specs->type = TREE_TYPE (type);
7599           specs->decl_attr = DECL_ATTRIBUTES (type);
7600           specs->typedef_p = true;
7601           specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
7602         }
7603     }
7604   else if (TREE_CODE (type) == IDENTIFIER_NODE)
7605     {
7606       tree t = lookup_name (type);
7607       if (!t || TREE_CODE (t) != TYPE_DECL)
7608         error ("%qE fails to be a typedef or built in type", type);
7609       else if (TREE_TYPE (t) == error_mark_node)
7610         ;
7611       else
7612         specs->type = TREE_TYPE (t);
7613     }
7614   else if (TREE_CODE (type) != ERROR_MARK)
7615     {
7616       if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
7617         specs->tag_defined_p = true;
7618       if (spec.kind == ctsk_typeof)
7619         specs->typedef_p = true;
7620       specs->type = type;
7621     }
7622
7623   return specs;
7624 }
7625
7626 /* Add the storage class specifier or function specifier SCSPEC to the
7627    declaration specifiers SPECS, returning SPECS.  */
7628
7629 struct c_declspecs *
7630 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
7631 {
7632   enum rid i;
7633   enum c_storage_class n = csc_none;
7634   bool dupe = false;
7635   specs->declspecs_seen_p = true;
7636   gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
7637               && C_IS_RESERVED_WORD (scspec));
7638   i = C_RID_CODE (scspec);
7639   if (specs->non_sc_seen_p)
7640     warning (OPT_Wold_style_declaration, 
7641              "%qE is not at beginning of declaration", scspec);
7642   switch (i)
7643     {
7644     case RID_INLINE:
7645       /* C99 permits duplicate inline.  Although of doubtful utility,
7646          it seems simplest to permit it in gnu89 mode as well, as
7647          there is also little utility in maintaining this as a
7648          difference between gnu89 and C99 inline.  */
7649       dupe = false;
7650       specs->inline_p = true;
7651       break;
7652     case RID_THREAD:
7653       dupe = specs->thread_p;
7654       if (specs->storage_class == csc_auto)
7655         error ("%<__thread%> used with %<auto%>");
7656       else if (specs->storage_class == csc_register)
7657         error ("%<__thread%> used with %<register%>");
7658       else if (specs->storage_class == csc_typedef)
7659         error ("%<__thread%> used with %<typedef%>");
7660       else
7661         specs->thread_p = true;
7662       break;
7663     case RID_AUTO:
7664       n = csc_auto;
7665       break;
7666     case RID_EXTERN:
7667       n = csc_extern;
7668       /* Diagnose "__thread extern".  */
7669       if (specs->thread_p)
7670         error ("%<__thread%> before %<extern%>");
7671       break;
7672     case RID_REGISTER:
7673       n = csc_register;
7674       break;
7675     case RID_STATIC:
7676       n = csc_static;
7677       /* Diagnose "__thread static".  */
7678       if (specs->thread_p)
7679         error ("%<__thread%> before %<static%>");
7680       break;
7681     case RID_TYPEDEF:
7682       n = csc_typedef;
7683       break;
7684     default:
7685       gcc_unreachable ();
7686     }
7687   if (n != csc_none && n == specs->storage_class)
7688     dupe = true;
7689   if (dupe)
7690     error ("duplicate %qE", scspec);
7691   if (n != csc_none)
7692     {
7693       if (specs->storage_class != csc_none && n != specs->storage_class)
7694         {
7695           error ("multiple storage classes in declaration specifiers");
7696         }
7697       else
7698         {
7699           specs->storage_class = n;
7700           if (n != csc_extern && n != csc_static && specs->thread_p)
7701             {
7702               error ("%<__thread%> used with %qE", scspec);
7703               specs->thread_p = false;
7704             }
7705         }
7706     }
7707   return specs;
7708 }
7709
7710 /* Add the attributes ATTRS to the declaration specifiers SPECS,
7711    returning SPECS.  */
7712
7713 struct c_declspecs *
7714 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
7715 {
7716   specs->attrs = chainon (attrs, specs->attrs);
7717   specs->declspecs_seen_p = true;
7718   return specs;
7719 }
7720
7721 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
7722    specifiers with any other type specifier to determine the resulting
7723    type.  This is where ISO C checks on complex types are made, since
7724    "_Complex long" is a prefix of the valid ISO C type "_Complex long
7725    double".  */
7726
7727 struct c_declspecs *
7728 finish_declspecs (struct c_declspecs *specs)
7729 {
7730   /* If a type was specified as a whole, we have no modifiers and are
7731      done.  */
7732   if (specs->type != NULL_TREE)
7733     {
7734       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7735                   && !specs->signed_p && !specs->unsigned_p
7736                   && !specs->complex_p);
7737       return specs;
7738     }
7739
7740   /* If none of "void", "_Bool", "char", "int", "float" or "double"
7741      has been specified, treat it as "int" unless "_Complex" is
7742      present and there are no other specifiers.  If we just have
7743      "_Complex", it is equivalent to "_Complex double", but e.g.
7744      "_Complex short" is equivalent to "_Complex short int".  */
7745   if (specs->typespec_word == cts_none)
7746     {
7747       if (specs->saturating_p)
7748         {
7749           error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
7750           specs->typespec_word = cts_fract;
7751         }
7752       else if (specs->long_p || specs->short_p
7753                || specs->signed_p || specs->unsigned_p)
7754         {
7755           specs->typespec_word = cts_int;
7756         }
7757       else if (specs->complex_p)
7758         {
7759           specs->typespec_word = cts_double;
7760           pedwarn (input_location, OPT_pedantic, 
7761                    "ISO C does not support plain %<complex%> meaning "
7762                    "%<double complex%>");
7763         }
7764       else
7765         {
7766           specs->typespec_word = cts_int;
7767           specs->default_int_p = true;
7768           /* We don't diagnose this here because grokdeclarator will
7769              give more specific diagnostics according to whether it is
7770              a function definition.  */
7771         }
7772     }
7773
7774   /* If "signed" was specified, record this to distinguish "int" and
7775      "signed int" in the case of a bit-field with
7776      -funsigned-bitfields.  */
7777   specs->explicit_signed_p = specs->signed_p;
7778
7779   /* Now compute the actual type.  */
7780   switch (specs->typespec_word)
7781     {
7782     case cts_void:
7783       gcc_assert (!specs->long_p && !specs->short_p
7784                   && !specs->signed_p && !specs->unsigned_p
7785                   && !specs->complex_p);
7786       specs->type = void_type_node;
7787       break;
7788     case cts_bool:
7789       gcc_assert (!specs->long_p && !specs->short_p
7790                   && !specs->signed_p && !specs->unsigned_p
7791                   && !specs->complex_p);
7792       specs->type = boolean_type_node;
7793       break;
7794     case cts_char:
7795       gcc_assert (!specs->long_p && !specs->short_p);
7796       gcc_assert (!(specs->signed_p && specs->unsigned_p));
7797       if (specs->signed_p)
7798         specs->type = signed_char_type_node;
7799       else if (specs->unsigned_p)
7800         specs->type = unsigned_char_type_node;
7801       else
7802         specs->type = char_type_node;
7803       if (specs->complex_p)
7804         {
7805           pedwarn (input_location, OPT_pedantic, 
7806                    "ISO C does not support complex integer types");
7807           specs->type = build_complex_type (specs->type);
7808         }
7809       break;
7810     case cts_int:
7811       gcc_assert (!(specs->long_p && specs->short_p));
7812       gcc_assert (!(specs->signed_p && specs->unsigned_p));
7813       if (specs->long_long_p)
7814         specs->type = (specs->unsigned_p
7815                        ? long_long_unsigned_type_node
7816                        : long_long_integer_type_node);
7817       else if (specs->long_p)
7818         specs->type = (specs->unsigned_p
7819                        ? long_unsigned_type_node
7820                        : long_integer_type_node);
7821       else if (specs->short_p)
7822         specs->type = (specs->unsigned_p
7823                        ? short_unsigned_type_node
7824                        : short_integer_type_node);
7825       else
7826         specs->type = (specs->unsigned_p
7827                        ? unsigned_type_node
7828                        : integer_type_node);
7829       if (specs->complex_p)
7830         {
7831           pedwarn (input_location, OPT_pedantic, 
7832                    "ISO C does not support complex integer types");
7833           specs->type = build_complex_type (specs->type);
7834         }
7835       break;
7836     case cts_float:
7837       gcc_assert (!specs->long_p && !specs->short_p
7838                   && !specs->signed_p && !specs->unsigned_p);
7839       specs->type = (specs->complex_p
7840                      ? complex_float_type_node
7841                      : float_type_node);
7842       break;
7843     case cts_double:
7844       gcc_assert (!specs->long_long_p && !specs->short_p
7845                   && !specs->signed_p && !specs->unsigned_p);
7846       if (specs->long_p)
7847         {
7848           specs->type = (specs->complex_p
7849                          ? complex_long_double_type_node
7850                          : long_double_type_node);
7851         }
7852       else
7853         {
7854           specs->type = (specs->complex_p
7855                          ? complex_double_type_node
7856                          : double_type_node);
7857         }
7858       break;
7859     case cts_dfloat32:
7860     case cts_dfloat64:
7861     case cts_dfloat128:
7862       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7863                   && !specs->signed_p && !specs->unsigned_p && !specs->complex_p);
7864       if (specs->typespec_word == cts_dfloat32)
7865         specs->type = dfloat32_type_node;
7866       else if (specs->typespec_word == cts_dfloat64)
7867         specs->type = dfloat64_type_node;
7868       else
7869         specs->type = dfloat128_type_node;
7870       break;
7871     case cts_fract:
7872        gcc_assert (!specs->complex_p);
7873        if (specs->saturating_p)
7874         {
7875           if (specs->long_long_p)
7876             specs->type = specs->unsigned_p
7877                           ? sat_unsigned_long_long_fract_type_node
7878                           : sat_long_long_fract_type_node;
7879           else if (specs->long_p)
7880             specs->type = specs->unsigned_p
7881                           ? sat_unsigned_long_fract_type_node
7882                           : sat_long_fract_type_node;
7883           else if (specs->short_p)
7884             specs->type = specs->unsigned_p
7885                           ? sat_unsigned_short_fract_type_node
7886                           : sat_short_fract_type_node;
7887           else
7888             specs->type = specs->unsigned_p
7889                           ? sat_unsigned_fract_type_node
7890                           : sat_fract_type_node;
7891           }
7892       else
7893         {
7894           if (specs->long_long_p)
7895             specs->type = specs->unsigned_p
7896                           ? unsigned_long_long_fract_type_node
7897                           : long_long_fract_type_node;
7898           else if (specs->long_p)
7899             specs->type = specs->unsigned_p
7900                           ? unsigned_long_fract_type_node
7901                           : long_fract_type_node;
7902           else if (specs->short_p)
7903             specs->type = specs->unsigned_p
7904                           ? unsigned_short_fract_type_node
7905                           : short_fract_type_node;
7906           else
7907             specs->type = specs->unsigned_p
7908                           ? unsigned_fract_type_node
7909                           : fract_type_node;
7910           }
7911       break;
7912     case cts_accum:
7913        gcc_assert (!specs->complex_p);
7914        if (specs->saturating_p)
7915         {
7916           if (specs->long_long_p)
7917             specs->type = specs->unsigned_p
7918                           ? sat_unsigned_long_long_accum_type_node
7919                           : sat_long_long_accum_type_node;
7920           else if (specs->long_p)
7921             specs->type = specs->unsigned_p
7922                           ? sat_unsigned_long_accum_type_node
7923                           : sat_long_accum_type_node;
7924           else if (specs->short_p)
7925             specs->type = specs->unsigned_p
7926                           ? sat_unsigned_short_accum_type_node
7927                           : sat_short_accum_type_node;
7928           else
7929             specs->type = specs->unsigned_p
7930                           ? sat_unsigned_accum_type_node
7931                           : sat_accum_type_node;
7932           }
7933       else
7934         {
7935           if (specs->long_long_p)
7936             specs->type = specs->unsigned_p
7937                           ? unsigned_long_long_accum_type_node
7938                           : long_long_accum_type_node;
7939           else if (specs->long_p)
7940             specs->type = specs->unsigned_p
7941                           ? unsigned_long_accum_type_node
7942                           : long_accum_type_node;
7943           else if (specs->short_p)
7944             specs->type = specs->unsigned_p
7945                           ? unsigned_short_accum_type_node
7946                           : short_accum_type_node;
7947           else
7948             specs->type = specs->unsigned_p
7949                           ? unsigned_accum_type_node
7950                           : accum_type_node;
7951           }
7952       break;
7953     default:
7954       gcc_unreachable ();
7955     }
7956
7957   return specs;
7958 }
7959
7960 /* A subroutine of c_write_global_declarations.  Perform final processing
7961    on one file scope's declarations (or the external scope's declarations),
7962    GLOBALS.  */
7963
7964 static void
7965 c_write_global_declarations_1 (tree globals)
7966 {
7967   tree decl;
7968   bool reconsider;
7969
7970   /* Process the decls in the order they were written.  */
7971   for (decl = globals; decl; decl = TREE_CHAIN (decl))
7972     {
7973       /* Check for used but undefined static functions using the C
7974          standard's definition of "used", and set TREE_NO_WARNING so
7975          that check_global_declarations doesn't repeat the check.  */
7976       if (TREE_CODE (decl) == FUNCTION_DECL
7977           && DECL_INITIAL (decl) == 0
7978           && DECL_EXTERNAL (decl)
7979           && !TREE_PUBLIC (decl)
7980           && C_DECL_USED (decl))
7981         {
7982           pedwarn (input_location, 0, "%q+F used but never defined", decl);
7983           TREE_NO_WARNING (decl) = 1;
7984         }
7985
7986       wrapup_global_declaration_1 (decl);
7987     }
7988
7989   do
7990     {
7991       reconsider = false;
7992       for (decl = globals; decl; decl = TREE_CHAIN (decl))
7993         reconsider |= wrapup_global_declaration_2 (decl);
7994     }
7995   while (reconsider);
7996
7997   for (decl = globals; decl; decl = TREE_CHAIN (decl))
7998     check_global_declaration_1 (decl);
7999 }
8000
8001 /* A subroutine of c_write_global_declarations Emit debug information for each
8002    of the declarations in GLOBALS.  */
8003
8004 static void
8005 c_write_global_declarations_2 (tree globals)
8006 {
8007   tree decl;
8008
8009   for (decl = globals; decl ; decl = TREE_CHAIN (decl))
8010     debug_hooks->global_decl (decl);
8011 }
8012
8013 /* Preserve the external declarations scope across a garbage collect.  */
8014 static GTY(()) tree ext_block;
8015
8016 void
8017 c_write_global_declarations (void)
8018 {
8019   tree t;
8020
8021   /* We don't want to do this if generating a PCH.  */
8022   if (pch_file)
8023     return;
8024
8025   /* Don't waste time on further processing if -fsyntax-only or we've
8026      encountered errors.  */
8027   if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
8028     return;
8029
8030   /* Close the external scope.  */
8031   ext_block = pop_scope ();
8032   external_scope = 0;
8033   gcc_assert (!current_scope);
8034
8035   if (ext_block)
8036     {
8037       tree tmp = BLOCK_VARS (ext_block);
8038       int flags;
8039       FILE * stream = dump_begin (TDI_tu, &flags);
8040       if (stream && tmp)
8041         {
8042           dump_node (tmp, flags & ~TDF_SLIM, stream);
8043           dump_end (TDI_tu, stream);
8044         }
8045     }
8046
8047   /* Process all file scopes in this compilation, and the external_scope,
8048      through wrapup_global_declarations and check_global_declarations.  */
8049   for (t = all_translation_units; t; t = TREE_CHAIN (t))
8050     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
8051   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
8052
8053   /* We're done parsing; proceed to optimize and emit assembly.
8054      FIXME: shouldn't be the front end's responsibility to call this.  */
8055   cgraph_optimize ();
8056
8057   /* After cgraph has had a chance to emit everything that's going to
8058      be emitted, output debug information for globals.  */
8059   if (errorcount == 0 && sorrycount == 0)
8060     {
8061       timevar_push (TV_SYMOUT);
8062       for (t = all_translation_units; t; t = TREE_CHAIN (t))
8063         c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
8064       c_write_global_declarations_2 (BLOCK_VARS (ext_block));
8065       timevar_pop (TV_SYMOUT);
8066     }
8067
8068   ext_block = NULL;
8069 }
8070
8071 #include "gt-c-decl.h"