OSDN Git Service

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