OSDN Git Service

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