OSDN Git Service

* c-tree.h (struct c_declarator): New id_loc field.
[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.  The error message should be given location LOC.  */
2316 void
2317 undeclared_variable (tree id, location_t loc)
2318 {
2319   static bool already = false;
2320   struct c_scope *scope;
2321
2322   if (current_function_decl == 0)
2323     {
2324       error ("%H%qE undeclared here (not in a function)", &loc, id);
2325       scope = current_scope;
2326     }
2327   else
2328     {
2329       error ("%H%qE undeclared (first use in this function)", &loc, id);
2330
2331       if (!already)
2332         {
2333           error ("%H(Each undeclared identifier is reported only once", &loc);
2334           error ("%Hfor each function it appears in.)", &loc);
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   /* Initialize reserved words for parser.  */
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         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
4588         if (size_varies)
4589           C_DECL_VARIABLE_SIZE (decl) = 1;
4590
4591         if (declspecs->inline_p)
4592           pedwarn ("%Jvariable %qD declared %<inline%>", decl, decl);
4593
4594         /* At file scope, an initialized extern declaration may follow
4595            a static declaration.  In that case, DECL_EXTERNAL will be
4596            reset later in start_decl.  */
4597         DECL_EXTERNAL (decl) = (storage_class == csc_extern);
4598
4599         /* At file scope, the presence of a `static' or `register' storage
4600            class specifier, or the absence of all storage class specifiers
4601            makes this declaration a definition (perhaps tentative).  Also,
4602            the absence of both `static' and `register' makes it public.  */
4603         if (current_scope == file_scope)
4604           {
4605             TREE_PUBLIC (decl) = !(storage_class == csc_static
4606                                    || storage_class == csc_register);
4607             TREE_STATIC (decl) = !extern_ref;
4608           }
4609         /* Not at file scope, only `static' makes a static definition.  */
4610         else
4611           {
4612             TREE_STATIC (decl) = (storage_class == csc_static);
4613             TREE_PUBLIC (decl) = extern_ref;
4614           }
4615
4616         if (threadp)
4617           {
4618             if (targetm.have_tls)
4619               DECL_THREAD_LOCAL (decl) = 1;
4620             else
4621               /* A mere warning is sure to result in improper semantics
4622                  at runtime.  Don't bother to allow this to compile.  */
4623               error ("thread-local storage not supported for this target");
4624           }
4625       }
4626
4627     /* Record `register' declaration for warnings on &
4628        and in case doing stupid register allocation.  */
4629
4630     if (storage_class == csc_register)
4631       {
4632         C_DECL_REGISTER (decl) = 1;
4633         DECL_REGISTER (decl) = 1;
4634       }
4635
4636     /* Record constancy and volatility.  */
4637     c_apply_type_quals_to_decl (type_quals, decl);
4638
4639     /* If a type has volatile components, it should be stored in memory.
4640        Otherwise, the fact that those components are volatile
4641        will be ignored, and would even crash the compiler.  */
4642     if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4643       {
4644         /* It is not an error for a structure with volatile fields to
4645            be declared register, but reset DECL_REGISTER since it
4646            cannot actually go in a register.  */
4647         int was_reg = C_DECL_REGISTER (decl);
4648         C_DECL_REGISTER (decl) = 0;
4649         DECL_REGISTER (decl) = 0;
4650         c_mark_addressable (decl);
4651         C_DECL_REGISTER (decl) = was_reg;
4652       }
4653
4654   /* This is the earliest point at which we might know the assembler
4655      name of a variable.  Thus, if it's known before this, die horribly.  */
4656     gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
4657
4658     decl_attributes (&decl, returned_attrs, 0);
4659
4660     return decl;
4661   }
4662 }
4663 \f
4664 /* Decode the parameter-list info for a function type or function definition.
4665    The argument is the value returned by `get_parm_info' (or made in parse.y
4666    if there is an identifier list instead of a parameter decl list).
4667    These two functions are separate because when a function returns
4668    or receives functions then each is called multiple times but the order
4669    of calls is different.  The last call to `grokparms' is always the one
4670    that contains the formal parameter names of a function definition.
4671
4672    Return a list of arg types to use in the FUNCTION_TYPE for this function.
4673
4674    FUNCDEF_FLAG is true for a function definition, false for
4675    a mere declaration.  A nonempty identifier-list gets an error message
4676    when FUNCDEF_FLAG is false.  */
4677
4678 static tree
4679 grokparms (struct c_arg_info *arg_info, bool funcdef_flag)
4680 {
4681   tree arg_types = arg_info->types;
4682
4683   if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
4684       && !in_system_header)
4685     warning ("function declaration isn%'t a prototype");
4686
4687   if (arg_types == error_mark_node)
4688     return 0;  /* don't set TYPE_ARG_TYPES in this case */
4689
4690   else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
4691     {
4692       if (!funcdef_flag)
4693         pedwarn ("parameter names (without types) in function declaration");
4694
4695       arg_info->parms = arg_info->types;
4696       arg_info->types = 0;
4697       return 0;
4698     }
4699   else
4700     {
4701       tree parm, type, typelt;
4702       unsigned int parmno;
4703
4704       /* If there is a parameter of incomplete type in a definition,
4705          this is an error.  In a declaration this is valid, and a
4706          struct or union type may be completed later, before any calls
4707          or definition of the function.  In the case where the tag was
4708          first declared within the parameter list, a warning has
4709          already been given.  If a parameter has void type, then
4710          however the function cannot be defined or called, so
4711          warn.  */
4712
4713       for (parm = arg_info->parms, typelt = arg_types, parmno = 1;
4714            parm;
4715            parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
4716         {
4717           type = TREE_VALUE (typelt);
4718           if (type == error_mark_node)
4719             continue;
4720
4721           if (!COMPLETE_TYPE_P (type))
4722             {
4723               if (funcdef_flag)
4724                 {
4725                   if (DECL_NAME (parm))
4726                     error ("%Jparameter %u (%qD) has incomplete type",
4727                            parm, parmno, parm);
4728                   else
4729                     error ("%Jparameter %u has incomplete type",
4730                            parm, parmno);
4731
4732                   TREE_VALUE (typelt) = error_mark_node;
4733                   TREE_TYPE (parm) = error_mark_node;
4734                 }
4735               else if (VOID_TYPE_P (type))
4736                 {
4737                   if (DECL_NAME (parm))
4738                     warning ("%Jparameter %u (%qD) has void type",
4739                              parm, parmno, parm);
4740                   else
4741                     warning ("%Jparameter %u has void type",
4742                              parm, parmno);
4743                 }
4744             }
4745         }
4746       return arg_types;
4747     }
4748 }
4749
4750 /* Take apart the current scope and return a c_arg_info structure with
4751    info on a parameter list just parsed.
4752
4753    This structure is later fed to 'grokparms' and 'store_parm_decls'.
4754
4755    ELLIPSIS being true means the argument list ended in '...' so don't
4756    append a sentinel (void_list_node) to the end of the type-list.  */
4757
4758 struct c_arg_info *
4759 get_parm_info (bool ellipsis)
4760 {
4761   struct c_binding *b = current_scope->bindings;
4762   struct c_arg_info *arg_info = XOBNEW (&parser_obstack,
4763                                         struct c_arg_info);
4764   tree parms    = 0;
4765   tree tags     = 0;
4766   tree types    = 0;
4767   tree others   = 0;
4768
4769   static bool explained_incomplete_types = false;
4770   bool gave_void_only_once_err = false;
4771
4772   arg_info->parms = 0;
4773   arg_info->tags = 0;
4774   arg_info->types = 0;
4775   arg_info->others = 0;
4776
4777   /* The bindings in this scope must not get put into a block.
4778      We will take care of deleting the binding nodes.  */
4779   current_scope->bindings = 0;
4780
4781   /* This function is only called if there was *something* on the
4782      parameter list.  */
4783   gcc_assert (b);
4784
4785   /* A parameter list consisting solely of 'void' indicates that the
4786      function takes no arguments.  But if the 'void' is qualified
4787      (by 'const' or 'volatile'), or has a storage class specifier
4788      ('register'), then the behavior is undefined; issue an error.
4789      Typedefs for 'void' are OK (see DR#157).  */
4790   if (b->prev == 0                          /* one binding */
4791       && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
4792       && !DECL_NAME (b->decl)               /* anonymous */
4793       && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
4794     {
4795       if (TREE_THIS_VOLATILE (b->decl)
4796           || TREE_READONLY (b->decl)
4797           || C_DECL_REGISTER (b->decl))
4798         error ("%<void%> as only parameter may not be qualified");
4799
4800       /* There cannot be an ellipsis.  */
4801       if (ellipsis)
4802         error ("%<void%> must be the only parameter");
4803
4804       arg_info->types = void_list_node;
4805       return arg_info;
4806     }
4807
4808   if (!ellipsis)
4809     types = void_list_node;
4810
4811   /* Break up the bindings list into parms, tags, types, and others;
4812      apply sanity checks; purge the name-to-decl bindings.  */
4813   while (b)
4814     {
4815       tree decl = b->decl;
4816       tree type = TREE_TYPE (decl);
4817       const char *keyword;
4818
4819       switch (TREE_CODE (decl))
4820         {
4821         case PARM_DECL:
4822           if (b->id)
4823             {
4824               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
4825               I_SYMBOL_BINDING (b->id) = b->shadowed;
4826             }
4827
4828           /* Check for forward decls that never got their actual decl.  */
4829           if (TREE_ASM_WRITTEN (decl))
4830             error ("%Jparameter %qD has just a forward declaration",
4831                    decl, decl);
4832           /* Check for (..., void, ...) and issue an error.  */
4833           else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
4834             {
4835               if (!gave_void_only_once_err)
4836                 {
4837                   error ("%<void%> must be the only parameter");
4838                   gave_void_only_once_err = true;
4839                 }
4840             }
4841           else
4842             {
4843               /* Valid parameter, add it to the list.  */
4844               TREE_CHAIN (decl) = parms;
4845               parms = decl;
4846
4847               /* Since there is a prototype, args are passed in their
4848                  declared types.  The back end may override this later.  */
4849               DECL_ARG_TYPE (decl) = type;
4850               types = tree_cons (0, type, types);
4851             }
4852           break;
4853
4854         case ENUMERAL_TYPE: keyword = "enum"; goto tag;
4855         case UNION_TYPE:    keyword = "union"; goto tag;
4856         case RECORD_TYPE:   keyword = "struct"; goto tag;
4857         tag:
4858           /* Types may not have tag-names, in which case the type
4859              appears in the bindings list with b->id NULL.  */
4860           if (b->id)
4861             {
4862               gcc_assert (I_TAG_BINDING (b->id) == b);
4863               I_TAG_BINDING (b->id) = b->shadowed;
4864             }
4865
4866           /* Warn about any struct, union or enum tags defined in a
4867              parameter list.  The scope of such types is limited to
4868              the parameter list, which is rarely if ever desirable
4869              (it's impossible to call such a function with type-
4870              correct arguments).  An anonymous union parm type is
4871              meaningful as a GNU extension, so don't warn for that.  */
4872           if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
4873             {
4874               if (b->id)
4875                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
4876                 warning ("%<%s %E%> declared inside parameter list",
4877                          keyword, b->id);
4878               else
4879                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
4880                 warning ("anonymous %s declared inside parameter list",
4881                          keyword);
4882
4883               if (!explained_incomplete_types)
4884                 {
4885                   warning ("its scope is only this definition or declaration,"
4886                            " which is probably not what you want");
4887                   explained_incomplete_types = true;
4888                 }
4889             }
4890
4891           tags = tree_cons (b->id, decl, tags);
4892           break;
4893
4894         case CONST_DECL:
4895         case TYPE_DECL:
4896         case FUNCTION_DECL:
4897           /* CONST_DECLs appear here when we have an embedded enum,
4898              and TYPE_DECLs appear here when we have an embedded struct
4899              or union.  No warnings for this - we already warned about the
4900              type itself.  FUNCTION_DECLs appear when there is an implicit
4901              function declaration in the parameter list.  */
4902
4903           TREE_CHAIN (decl) = others;
4904           others = decl;
4905           /* fall through */
4906
4907         case ERROR_MARK:
4908           /* error_mark_node appears here when we have an undeclared
4909              variable.  Just throw it away.  */
4910           if (b->id)
4911             {
4912               gcc_assert (I_SYMBOL_BINDING (b->id) == b);
4913               I_SYMBOL_BINDING (b->id) = b->shadowed;
4914             }
4915           break;
4916
4917           /* Other things that might be encountered.  */
4918         case LABEL_DECL:
4919         case VAR_DECL:
4920         default:
4921           gcc_unreachable ();
4922         }
4923
4924       b = free_binding_and_advance (b);
4925     }
4926
4927   arg_info->parms = parms;
4928   arg_info->tags = tags;
4929   arg_info->types = types;
4930   arg_info->others = others;
4931   return arg_info;
4932 }
4933 \f
4934 /* Get the struct, enum or union (CODE says which) with tag NAME.
4935    Define the tag as a forward-reference if it is not defined.
4936    Return a c_typespec structure for the type specifier.  */
4937
4938 struct c_typespec
4939 parser_xref_tag (enum tree_code code, tree name)
4940 {
4941   struct c_typespec ret;
4942   /* If a cross reference is requested, look up the type
4943      already defined for this tag and return it.  */
4944
4945   tree ref = lookup_tag (code, name, 0);
4946   /* If this is the right type of tag, return what we found.
4947      (This reference will be shadowed by shadow_tag later if appropriate.)
4948      If this is the wrong type of tag, do not return it.  If it was the
4949      wrong type in the same scope, we will have had an error
4950      message already; if in a different scope and declaring
4951      a name, pending_xref_error will give an error message; but if in a
4952      different scope and not declaring a name, this tag should
4953      shadow the previous declaration of a different type of tag, and
4954      this would not work properly if we return the reference found.
4955      (For example, with "struct foo" in an outer scope, "union foo;"
4956      must shadow that tag with a new one of union type.)  */
4957   ret.kind = (ref ? ctsk_tagref : ctsk_tagfirstref);
4958   if (ref && TREE_CODE (ref) == code)
4959     {
4960       ret.spec = ref;
4961       return ret;
4962     }
4963
4964   /* If no such tag is yet defined, create a forward-reference node
4965      and record it as the "definition".
4966      When a real declaration of this type is found,
4967      the forward-reference will be altered into a real type.  */
4968
4969   ref = make_node (code);
4970   if (code == ENUMERAL_TYPE)
4971     {
4972       /* Give the type a default layout like unsigned int
4973          to avoid crashing if it does not get defined.  */
4974       TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
4975       TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
4976       TYPE_USER_ALIGN (ref) = 0;
4977       TYPE_UNSIGNED (ref) = 1;
4978       TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
4979       TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
4980       TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
4981     }
4982
4983   pushtag (name, ref);
4984
4985   ret.spec = ref;
4986   return ret;
4987 }
4988
4989 /* Get the struct, enum or union (CODE says which) with tag NAME.
4990    Define the tag as a forward-reference if it is not defined.
4991    Return a tree for the type.  */
4992
4993 tree
4994 xref_tag (enum tree_code code, tree name)
4995 {
4996   return parser_xref_tag (code, name).spec;
4997 }
4998 \f
4999 /* Make sure that the tag NAME is defined *in the current scope*
5000    at least as a forward reference.
5001    CODE says which kind of tag NAME ought to be.  */
5002
5003 tree
5004 start_struct (enum tree_code code, tree name)
5005 {
5006   /* If there is already a tag defined at this scope
5007      (as a forward reference), just return it.  */
5008
5009   tree ref = 0;
5010
5011   if (name != 0)
5012     ref = lookup_tag (code, name, 1);
5013   if (ref && TREE_CODE (ref) == code)
5014     {
5015       if (TYPE_SIZE (ref))
5016         {
5017           if (code == UNION_TYPE)
5018             error ("redefinition of %<union %s%>", IDENTIFIER_POINTER (name));
5019           else
5020             error ("redefinition of %<struct %s%>", IDENTIFIER_POINTER (name));
5021         }
5022       else if (C_TYPE_BEING_DEFINED (ref))
5023         {
5024           if (code == UNION_TYPE)
5025             error ("nested redefinition of %<union %s%>",
5026                    IDENTIFIER_POINTER (name));
5027           else
5028             error ("nested redefinition of %<struct %s%>",
5029                    IDENTIFIER_POINTER (name));
5030         }
5031     }
5032   else
5033     {
5034       /* Otherwise create a forward-reference just so the tag is in scope.  */
5035
5036       ref = make_node (code);
5037       pushtag (name, ref);
5038     }
5039
5040   C_TYPE_BEING_DEFINED (ref) = 1;
5041   TYPE_PACKED (ref) = flag_pack_struct;
5042   return ref;
5043 }
5044
5045 /* Process the specs, declarator and width (NULL if omitted)
5046    of a structure component, returning a FIELD_DECL node.
5047    WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5048
5049    This is done during the parsing of the struct declaration.
5050    The FIELD_DECL nodes are chained together and the lot of them
5051    are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
5052
5053 tree
5054 grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs,
5055            tree width)
5056 {
5057   tree value;
5058
5059   if (declarator->kind == cdk_id && declarator->u.id == NULL_TREE
5060       && width == NULL_TREE)
5061     {
5062       /* This is an unnamed decl.
5063
5064          If we have something of the form "union { list } ;" then this
5065          is the anonymous union extension.  Similarly for struct.
5066
5067          If this is something of the form "struct foo;", then
5068            If MS extensions are enabled, this is handled as an
5069              anonymous struct.
5070            Otherwise this is a forward declaration of a structure tag.
5071
5072          If this is something of the form "foo;" and foo is a TYPE_DECL, then
5073            If MS extensions are enabled and foo names a structure, then
5074              again this is an anonymous struct.
5075            Otherwise this is an error.
5076
5077          Oh what a horrid tangled web we weave.  I wonder if MS consciously
5078          took this from Plan 9 or if it was an accident of implementation
5079          that took root before someone noticed the bug...  */
5080
5081       tree type = declspecs->type;
5082       bool type_ok = (TREE_CODE (type) == RECORD_TYPE
5083                       || TREE_CODE (type) == UNION_TYPE);
5084       bool ok = false;
5085
5086       if (type_ok
5087           && (flag_ms_extensions || !declspecs->typedef_p))
5088         {
5089           if (flag_ms_extensions)
5090             ok = true;
5091           else if (flag_iso)
5092             ok = false;
5093           else if (TYPE_NAME (type) == NULL)
5094             ok = true;
5095           else
5096             ok = false;
5097         }
5098       if (!ok)
5099         {
5100           pedwarn ("declaration does not declare anything");
5101           return NULL_TREE;
5102         }
5103       if (pedantic)
5104         pedwarn ("ISO C doesn%'t support unnamed structs/unions");
5105     }
5106
5107   value = grokdeclarator (declarator, declspecs, FIELD, false,
5108                           width ? &width : NULL);
5109
5110   finish_decl (value, NULL_TREE, NULL_TREE);
5111   DECL_INITIAL (value) = width;
5112
5113   return value;
5114 }
5115 \f
5116 /* Generate an error for any duplicate field names in FIELDLIST.  Munge
5117    the list such that this does not present a problem later.  */
5118
5119 static void
5120 detect_field_duplicates (tree fieldlist)
5121 {
5122   tree x, y;
5123   int timeout = 10;
5124
5125   /* First, see if there are more than "a few" fields.
5126      This is trivially true if there are zero or one fields.  */
5127   if (!fieldlist)
5128     return;
5129   x = TREE_CHAIN (fieldlist);
5130   if (!x)
5131     return;
5132   do {
5133     timeout--;
5134     x = TREE_CHAIN (x);
5135   } while (timeout > 0 && x);
5136
5137   /* If there were "few" fields, avoid the overhead of allocating
5138      a hash table.  Instead just do the nested traversal thing.  */
5139   if (timeout > 0)
5140     {
5141       for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
5142         if (DECL_NAME (x))
5143           {
5144             for (y = fieldlist; y != x; y = TREE_CHAIN (y))
5145               if (DECL_NAME (y) == DECL_NAME (x))
5146                 {
5147                   error ("%Jduplicate member %qD", x, x);
5148                   DECL_NAME (x) = NULL_TREE;
5149                 }
5150           }
5151     }
5152   else
5153     {
5154       htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
5155       void **slot;
5156
5157       for (x = fieldlist; x ; x = TREE_CHAIN (x))
5158         if ((y = DECL_NAME (x)) != 0)
5159           {
5160             slot = htab_find_slot (htab, y, INSERT);
5161             if (*slot)
5162               {
5163                 error ("%Jduplicate member %qD", x, x);
5164                 DECL_NAME (x) = NULL_TREE;
5165               }
5166             *slot = y;
5167           }
5168
5169       htab_delete (htab);
5170     }
5171 }
5172
5173 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5174    FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5175    ATTRIBUTES are attributes to be applied to the structure.  */
5176
5177 tree
5178 finish_struct (tree t, tree fieldlist, tree attributes)
5179 {
5180   tree x;
5181   bool toplevel = file_scope == current_scope;
5182   int saw_named_field;
5183
5184   /* If this type was previously laid out as a forward reference,
5185      make sure we lay it out again.  */
5186
5187   TYPE_SIZE (t) = 0;
5188
5189   decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5190
5191   if (pedantic)
5192     {
5193       for (x = fieldlist; x; x = TREE_CHAIN (x))
5194         if (DECL_NAME (x) != 0)
5195           break;
5196
5197       if (x == 0)
5198         {
5199           if (TREE_CODE (t) == UNION_TYPE)
5200             {
5201               if (fieldlist)
5202                 pedwarn ("union has no named members");
5203               else
5204                 pedwarn ("union has no members");
5205             }
5206           else
5207             {
5208               if (fieldlist)
5209                 pedwarn ("struct has no named members");
5210               else
5211                 pedwarn ("struct has no members");
5212             }
5213         }
5214     }
5215
5216   /* Install struct as DECL_CONTEXT of each field decl.
5217      Also process specified field sizes, found in the DECL_INITIAL,
5218      storing 0 there after the type has been changed to precision equal
5219      to its width, rather than the precision of the specified standard
5220      type.  (Correct layout requires the original type to have been preserved
5221      until now.)  */
5222
5223   saw_named_field = 0;
5224   for (x = fieldlist; x; x = TREE_CHAIN (x))
5225     {
5226       DECL_CONTEXT (x) = t;
5227       DECL_PACKED (x) |= TYPE_PACKED (t);
5228
5229       /* If any field is const, the structure type is pseudo-const.  */
5230       if (TREE_READONLY (x))
5231         C_TYPE_FIELDS_READONLY (t) = 1;
5232       else
5233         {
5234           /* A field that is pseudo-const makes the structure likewise.  */
5235           tree t1 = TREE_TYPE (x);
5236           while (TREE_CODE (t1) == ARRAY_TYPE)
5237             t1 = TREE_TYPE (t1);
5238           if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5239               && C_TYPE_FIELDS_READONLY (t1))
5240             C_TYPE_FIELDS_READONLY (t) = 1;
5241         }
5242
5243       /* Any field that is volatile means variables of this type must be
5244          treated in some ways as volatile.  */
5245       if (TREE_THIS_VOLATILE (x))
5246         C_TYPE_FIELDS_VOLATILE (t) = 1;
5247
5248       /* Any field of nominal variable size implies structure is too.  */
5249       if (C_DECL_VARIABLE_SIZE (x))
5250         C_TYPE_VARIABLE_SIZE (t) = 1;
5251
5252       if (DECL_INITIAL (x))
5253         {
5254           unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
5255           DECL_SIZE (x) = bitsize_int (width);
5256           DECL_BIT_FIELD (x) = 1;
5257           SET_DECL_C_BIT_FIELD (x);
5258         }
5259
5260       /* Detect flexible array member in an invalid context.  */
5261       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5262           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5263           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5264           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5265         {
5266           if (TREE_CODE (t) == UNION_TYPE)
5267             {
5268               error ("%Jflexible array member in union", x);
5269               TREE_TYPE (x) = error_mark_node;
5270             }
5271           else if (TREE_CHAIN (x) != NULL_TREE)
5272             {
5273               error ("%Jflexible array member not at end of struct", x);
5274               TREE_TYPE (x) = error_mark_node;
5275             }
5276           else if (!saw_named_field)
5277             {
5278               error ("%Jflexible array member in otherwise empty struct", x);
5279               TREE_TYPE (x) = error_mark_node;
5280             }
5281         }
5282
5283       if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
5284           && flexible_array_type_p (TREE_TYPE (x)))
5285         pedwarn ("%Jinvalid use of structure with flexible array member", x);
5286
5287       if (DECL_NAME (x))
5288         saw_named_field = 1;
5289     }
5290
5291   detect_field_duplicates (fieldlist);
5292
5293   /* Now we have the nearly final fieldlist.  Record it,
5294      then lay out the structure or union (including the fields).  */
5295
5296   TYPE_FIELDS (t) = fieldlist;
5297
5298   layout_type (t);
5299
5300   /* Give bit-fields their proper types.  */
5301   {
5302     tree *fieldlistp = &fieldlist;
5303     while (*fieldlistp)
5304       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
5305           && TREE_TYPE (*fieldlistp) != error_mark_node)
5306         {
5307           unsigned HOST_WIDE_INT width
5308             = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
5309           tree type = TREE_TYPE (*fieldlistp);
5310           if (width != TYPE_PRECISION (type))
5311             {
5312               TREE_TYPE (*fieldlistp)
5313                 = build_nonstandard_integer_type (width, TYPE_UNSIGNED (type));
5314               DECL_MODE (*fieldlistp) = TYPE_MODE (TREE_TYPE (*fieldlistp));
5315             }
5316           DECL_INITIAL (*fieldlistp) = 0;
5317         }
5318       else
5319         fieldlistp = &TREE_CHAIN (*fieldlistp);
5320   }
5321
5322   /* Now we have the truly final field list.
5323      Store it in this type and in the variants.  */
5324
5325   TYPE_FIELDS (t) = fieldlist;
5326
5327   /* If there are lots of fields, sort so we can look through them fast.
5328      We arbitrarily consider 16 or more elts to be "a lot".  */
5329
5330   {
5331     int len = 0;
5332
5333     for (x = fieldlist; x; x = TREE_CHAIN (x))
5334       {
5335         if (len > 15 || DECL_NAME (x) == NULL)
5336           break;
5337         len += 1;
5338       }
5339
5340     if (len > 15)
5341       {
5342         tree *field_array;
5343         struct lang_type *space;
5344         struct sorted_fields_type *space2;
5345
5346         len += list_length (x);
5347
5348         /* Use the same allocation policy here that make_node uses, to
5349           ensure that this lives as long as the rest of the struct decl.
5350           All decls in an inline function need to be saved.  */
5351
5352         space = GGC_CNEW (struct lang_type);
5353         space2 = GGC_NEWVAR (struct sorted_fields_type,
5354                              sizeof (struct sorted_fields_type) + len * sizeof (tree));
5355
5356         len = 0;
5357         space->s = space2;
5358         field_array = &space2->elts[0];
5359         for (x = fieldlist; x; x = TREE_CHAIN (x))
5360           {
5361             field_array[len++] = x;
5362
5363             /* If there is anonymous struct or union, break out of the loop.  */
5364             if (DECL_NAME (x) == NULL)
5365               break;
5366           }
5367         /* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
5368         if (x == NULL)
5369           {
5370             TYPE_LANG_SPECIFIC (t) = space;
5371             TYPE_LANG_SPECIFIC (t)->s->len = len;
5372             field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
5373             qsort (field_array, len, sizeof (tree), field_decl_cmp);
5374           }
5375       }
5376   }
5377
5378   for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5379     {
5380       TYPE_FIELDS (x) = TYPE_FIELDS (t);
5381       TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5382       TYPE_ALIGN (x) = TYPE_ALIGN (t);
5383       TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t);
5384     }
5385
5386   /* If this was supposed to be a transparent union, but we can't
5387      make it one, warn and turn off the flag.  */
5388   if (TREE_CODE (t) == UNION_TYPE
5389       && TYPE_TRANSPARENT_UNION (t)
5390       && TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))
5391     {
5392       TYPE_TRANSPARENT_UNION (t) = 0;
5393       warning ("union cannot be made transparent");
5394     }
5395
5396   /* If this structure or union completes the type of any previous
5397      variable declaration, lay it out and output its rtl.  */
5398   for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
5399        x;
5400        x = TREE_CHAIN (x))
5401     {
5402       tree decl = TREE_VALUE (x);
5403       if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5404         layout_array_type (TREE_TYPE (decl));
5405       if (TREE_CODE (decl) != TYPE_DECL)
5406         {
5407           layout_decl (decl, 0);
5408           if (c_dialect_objc ())
5409             objc_check_decl (decl);
5410           rest_of_decl_compilation (decl, toplevel, 0);
5411           if (!toplevel)
5412             expand_decl (decl);
5413         }
5414     }
5415   C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
5416
5417   /* Finish debugging output for this type.  */
5418   rest_of_type_compilation (t, toplevel);
5419
5420   /* If we're inside a function proper, i.e. not file-scope and not still
5421      parsing parameters, then arrange for the size of a variable sized type
5422      to be bound now.  */
5423   if (cur_stmt_list && variably_modified_type_p (t, NULL))
5424     add_stmt (build_stmt (DECL_EXPR, build_decl (TYPE_DECL, NULL, t)));
5425
5426   return t;
5427 }
5428
5429 /* Lay out the type T, and its element type, and so on.  */
5430
5431 static void
5432 layout_array_type (tree t)
5433 {
5434   if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5435     layout_array_type (TREE_TYPE (t));
5436   layout_type (t);
5437 }
5438 \f
5439 /* Begin compiling the definition of an enumeration type.
5440    NAME is its name (or null if anonymous).
5441    Returns the type object, as yet incomplete.
5442    Also records info about it so that build_enumerator
5443    may be used to declare the individual values as they are read.  */
5444
5445 tree
5446 start_enum (tree name)
5447 {
5448   tree enumtype = 0;
5449
5450   /* If this is the real definition for a previous forward reference,
5451      fill in the contents in the same object that used to be the
5452      forward reference.  */
5453
5454   if (name != 0)
5455     enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
5456
5457   if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5458     {
5459       enumtype = make_node (ENUMERAL_TYPE);
5460       pushtag (name, enumtype);
5461     }
5462
5463   if (C_TYPE_BEING_DEFINED (enumtype))
5464     error ("nested redefinition of %<enum %s%>", IDENTIFIER_POINTER (name));
5465
5466   C_TYPE_BEING_DEFINED (enumtype) = 1;
5467
5468   if (TYPE_VALUES (enumtype) != 0)
5469     {
5470       /* This enum is a named one that has been declared already.  */
5471       error ("redeclaration of %<enum %s%>", IDENTIFIER_POINTER (name));
5472
5473       /* Completely replace its old definition.
5474          The old enumerators remain defined, however.  */
5475       TYPE_VALUES (enumtype) = 0;
5476     }
5477
5478   enum_next_value = integer_zero_node;
5479   enum_overflow = 0;
5480
5481   if (flag_short_enums)
5482     TYPE_PACKED (enumtype) = 1;
5483
5484   return enumtype;
5485 }
5486
5487 /* After processing and defining all the values of an enumeration type,
5488    install their decls in the enumeration type and finish it off.
5489    ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5490    and ATTRIBUTES are the specified attributes.
5491    Returns ENUMTYPE.  */
5492
5493 tree
5494 finish_enum (tree enumtype, tree values, tree attributes)
5495 {
5496   tree pair, tem;
5497   tree minnode = 0, maxnode = 0;
5498   int precision, unsign;
5499   bool toplevel = (file_scope == current_scope);
5500   struct lang_type *lt;
5501
5502   decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5503
5504   /* Calculate the maximum value of any enumerator in this type.  */
5505
5506   if (values == error_mark_node)
5507     minnode = maxnode = integer_zero_node;
5508   else
5509     {
5510       minnode = maxnode = TREE_VALUE (values);
5511       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5512         {
5513           tree value = TREE_VALUE (pair);
5514           if (tree_int_cst_lt (maxnode, value))
5515             maxnode = value;
5516           if (tree_int_cst_lt (value, minnode))
5517             minnode = value;
5518         }
5519     }
5520
5521   /* Construct the final type of this enumeration.  It is the same
5522      as one of the integral types - the narrowest one that fits, except
5523      that normally we only go as narrow as int - and signed iff any of
5524      the values are negative.  */
5525   unsign = (tree_int_cst_sgn (minnode) >= 0);
5526   precision = MAX (min_precision (minnode, unsign),
5527                    min_precision (maxnode, unsign));
5528
5529   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5530     {
5531       tem = c_common_type_for_size (precision, unsign);
5532       if (tem == NULL)
5533         {
5534           warning ("enumeration values exceed range of largest integer");
5535           tem = long_long_integer_type_node;
5536         }
5537     }
5538   else
5539     tem = unsign ? unsigned_type_node : integer_type_node;
5540
5541   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
5542   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
5543   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
5544   TYPE_SIZE (enumtype) = 0;
5545
5546   /* If the precision of the type was specific with an attribute and it
5547      was too small, give an error.  Otherwise, use it.  */
5548   if (TYPE_PRECISION (enumtype))
5549     {
5550       if (precision > TYPE_PRECISION (enumtype))
5551         error ("specified mode too small for enumeral values");
5552     }
5553   else
5554     TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
5555
5556   layout_type (enumtype);
5557
5558   if (values != error_mark_node)
5559     {
5560       /* Change the type of the enumerators to be the enum type.  We
5561          need to do this irrespective of the size of the enum, for
5562          proper type checking.  Replace the DECL_INITIALs of the
5563          enumerators, and the value slots of the list, with copies
5564          that have the enum type; they cannot be modified in place
5565          because they may be shared (e.g.  integer_zero_node) Finally,
5566          change the purpose slots to point to the names of the decls.  */
5567       for (pair = values; pair; pair = TREE_CHAIN (pair))
5568         {
5569           tree enu = TREE_PURPOSE (pair);
5570           tree ini = DECL_INITIAL (enu);
5571
5572           TREE_TYPE (enu) = enumtype;
5573
5574           /* The ISO C Standard mandates enumerators to have type int,
5575              even though the underlying type of an enum type is
5576              unspecified.  Here we convert any enumerators that fit in
5577              an int to type int, to avoid promotions to unsigned types
5578              when comparing integers with enumerators that fit in the
5579              int range.  When -pedantic is given, build_enumerator()
5580              would have already taken care of those that don't fit.  */
5581           if (int_fits_type_p (ini, integer_type_node))
5582             tem = integer_type_node;
5583           else
5584             tem = enumtype;
5585           ini = convert (tem, ini);
5586
5587           DECL_INITIAL (enu) = ini;
5588           TREE_PURPOSE (pair) = DECL_NAME (enu);
5589           TREE_VALUE (pair) = ini;
5590         }
5591
5592       TYPE_VALUES (enumtype) = values;
5593     }
5594
5595   /* Record the min/max values so that we can warn about bit-field
5596      enumerations that are too small for the values.  */
5597   lt = GGC_CNEW (struct lang_type);
5598   lt->enum_min = minnode;
5599   lt->enum_max = maxnode;
5600   TYPE_LANG_SPECIFIC (enumtype) = lt;
5601
5602   /* Fix up all variant types of this enum type.  */
5603   for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5604     {
5605       if (tem == enumtype)
5606         continue;
5607       TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5608       TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5609       TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5610       TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5611       TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5612       TYPE_MODE (tem) = TYPE_MODE (enumtype);
5613       TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5614       TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5615       TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5616       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
5617       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
5618     }
5619
5620   /* Finish debugging output for this type.  */
5621   rest_of_type_compilation (enumtype, toplevel);
5622
5623   return enumtype;
5624 }
5625
5626 /* Build and install a CONST_DECL for one value of the
5627    current enumeration type (one that was begun with start_enum).
5628    Return a tree-list containing the CONST_DECL and its value.
5629    Assignment of sequential values by default is handled here.  */
5630
5631 tree
5632 build_enumerator (tree name, tree value)
5633 {
5634   tree decl, type;
5635
5636   /* Validate and default VALUE.  */
5637
5638   /* Remove no-op casts from the value.  */
5639   if (value)
5640     STRIP_TYPE_NOPS (value);
5641
5642   if (value != 0)
5643     {
5644       /* Don't issue more errors for error_mark_node (i.e. an
5645          undeclared identifier) - just ignore the value expression.  */
5646       if (value == error_mark_node)
5647         value = 0;
5648       else if (TREE_CODE (value) != INTEGER_CST)
5649         {
5650           error ("enumerator value for %qE is not an integer constant", name);
5651           value = 0;
5652         }
5653       else
5654         {
5655           value = default_conversion (value);
5656           constant_expression_warning (value);
5657         }
5658     }
5659
5660   /* Default based on previous value.  */
5661   /* It should no longer be possible to have NON_LVALUE_EXPR
5662      in the default.  */
5663   if (value == 0)
5664     {
5665       value = enum_next_value;
5666       if (enum_overflow)
5667         error ("overflow in enumeration values");
5668     }
5669
5670   if (pedantic && !int_fits_type_p (value, integer_type_node))
5671     {
5672       pedwarn ("ISO C restricts enumerator values to range of %<int%>");
5673       /* XXX This causes -pedantic to change the meaning of the program.
5674          Remove?  -zw 2004-03-15  */
5675       value = convert (integer_type_node, value);
5676     }
5677
5678   /* Set basis for default for next value.  */
5679   enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5680   enum_overflow = tree_int_cst_lt (enum_next_value, value);
5681
5682   /* Now create a declaration for the enum value name.  */
5683
5684   type = TREE_TYPE (value);
5685   type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
5686                                       TYPE_PRECISION (integer_type_node)),
5687                                  (TYPE_PRECISION (type)
5688                                   >= TYPE_PRECISION (integer_type_node)
5689                                   && TYPE_UNSIGNED (type)));
5690
5691   decl = build_decl (CONST_DECL, name, type);
5692   DECL_INITIAL (decl) = convert (type, value);
5693   pushdecl (decl);
5694
5695   return tree_cons (decl, value, NULL_TREE);
5696 }
5697
5698 \f
5699 /* Create the FUNCTION_DECL for a function definition.
5700    DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
5701    the declaration; they describe the function's name and the type it returns,
5702    but twisted together in a fashion that parallels the syntax of C.
5703
5704    This function creates a binding context for the function body
5705    as well as setting up the FUNCTION_DECL in current_function_decl.
5706
5707    Returns 1 on success.  If the DECLARATOR is not suitable for a function
5708    (it defines a datum instead), we return 0, which tells
5709    yyparse to report a parse error.  */
5710
5711 int
5712 start_function (struct c_declspecs *declspecs, struct c_declarator *declarator,
5713                 tree attributes)
5714 {
5715   tree decl1, old_decl;
5716   tree restype, resdecl;
5717
5718   current_function_returns_value = 0;  /* Assume, until we see it does.  */
5719   current_function_returns_null = 0;
5720   current_function_returns_abnormally = 0;
5721   warn_about_return_type = 0;
5722   current_extern_inline = 0;
5723   c_switch_stack = NULL;
5724
5725   /* Indicate no valid break/continue context by setting these variables
5726      to some non-null, non-label value.  We'll notice and emit the proper
5727      error message in c_finish_bc_stmt.  */
5728   c_break_label = c_cont_label = size_zero_node;
5729
5730   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, true, NULL);
5731
5732   /* If the declarator is not suitable for a function definition,
5733      cause a syntax error.  */
5734   if (decl1 == 0)
5735     return 0;
5736
5737   decl_attributes (&decl1, attributes, 0);
5738
5739   if (DECL_DECLARED_INLINE_P (decl1)
5740       && DECL_UNINLINABLE (decl1)
5741       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
5742     warning ("%Jinline function %qD given attribute noinline", decl1, decl1);
5743
5744   announce_function (decl1);
5745
5746   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
5747     {
5748       error ("return type is an incomplete type");
5749       /* Make it return void instead.  */
5750       TREE_TYPE (decl1)
5751         = build_function_type (void_type_node,
5752                                TYPE_ARG_TYPES (TREE_TYPE (decl1)));
5753     }
5754
5755   if (warn_about_return_type)
5756     pedwarn_c99 ("return type defaults to %<int%>");
5757
5758   /* Make the init_value nonzero so pushdecl knows this is not tentative.
5759      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
5760   DECL_INITIAL (decl1) = error_mark_node;
5761
5762   /* If this definition isn't a prototype and we had a prototype declaration
5763      before, copy the arg type info from that prototype.  */
5764   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
5765   if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
5766       && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
5767                     TREE_TYPE (TREE_TYPE (old_decl)))
5768       && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
5769     {
5770       TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
5771                                           TREE_TYPE (decl1));
5772       current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
5773     }
5774
5775   /* Optionally warn of old-fashioned def with no previous prototype.  */
5776   if (warn_strict_prototypes
5777       && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
5778       && C_DECL_ISNT_PROTOTYPE (old_decl))
5779     warning ("function declaration isn%'t a prototype");
5780   /* Optionally warn of any global def with no previous prototype.  */
5781   else if (warn_missing_prototypes
5782            && TREE_PUBLIC (decl1)
5783            && !MAIN_NAME_P (DECL_NAME (decl1))
5784            && C_DECL_ISNT_PROTOTYPE (old_decl))
5785     warning ("%Jno previous prototype for %qD", decl1, decl1);
5786   /* Optionally warn of any def with no previous prototype
5787      if the function has already been used.  */
5788   else if (warn_missing_prototypes
5789            && old_decl != 0 && TREE_USED (old_decl)
5790            && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
5791     warning ("%J%qD was used with no prototype before its definition",
5792              decl1, decl1);
5793   /* Optionally warn of any global def with no previous declaration.  */
5794   else if (warn_missing_declarations
5795            && TREE_PUBLIC (decl1)
5796            && old_decl == 0
5797            && !MAIN_NAME_P (DECL_NAME (decl1)))
5798     warning ("%Jno previous declaration for %qD", decl1, decl1);
5799   /* Optionally warn of any def with no previous declaration
5800      if the function has already been used.  */
5801   else if (warn_missing_declarations
5802            && old_decl != 0 && TREE_USED (old_decl)
5803            && C_DECL_IMPLICIT (old_decl))
5804     warning ("%J%qD was used with no declaration before its definition",
5805              decl1, decl1);
5806
5807   /* This is a definition, not a reference.
5808      So normally clear DECL_EXTERNAL.
5809      However, `extern inline' acts like a declaration
5810      except for defining how to inline.  So set DECL_EXTERNAL in that case.  */
5811   DECL_EXTERNAL (decl1) = current_extern_inline;
5812
5813   /* This function exists in static storage.
5814      (This does not mean `static' in the C sense!)  */
5815   TREE_STATIC (decl1) = 1;
5816
5817   /* A nested function is not global.  */
5818   if (current_function_decl != 0)
5819     TREE_PUBLIC (decl1) = 0;
5820
5821   /* This is the earliest point at which we might know the assembler
5822      name of the function.  Thus, if it's set before this, die horribly.  */
5823   gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1));
5824
5825   /* If #pragma weak was used, mark the decl weak now.  */
5826   if (current_scope == file_scope)
5827     maybe_apply_pragma_weak (decl1);
5828
5829   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
5830   if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
5831     {
5832       tree args;
5833       int argct = 0;
5834
5835       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
5836           != integer_type_node)
5837         pedwarn ("%Jreturn type of %qD is not %<int%>", decl1, decl1);
5838
5839       for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
5840            args = TREE_CHAIN (args))
5841         {
5842           tree type = args ? TREE_VALUE (args) : 0;
5843
5844           if (type == void_type_node)
5845             break;
5846
5847           ++argct;
5848           switch (argct)
5849             {
5850             case 1:
5851               if (TYPE_MAIN_VARIANT (type) != integer_type_node)
5852                 pedwarn ("%Jfirst argument of %qD should be %<int%>",
5853                          decl1, decl1);
5854               break;
5855
5856             case 2:
5857               if (TREE_CODE (type) != POINTER_TYPE
5858                   || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5859                   || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5860                       != char_type_node))
5861                 pedwarn ("%Jsecond argument of %qD should be %<char **%>",
5862                          decl1, decl1);
5863               break;
5864
5865             case 3:
5866               if (TREE_CODE (type) != POINTER_TYPE
5867                   || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5868                   || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5869                       != char_type_node))
5870                 pedwarn ("%Jthird argument of %qD should probably be "
5871                          "%<char **%>", decl1, decl1);
5872               break;
5873             }
5874         }
5875
5876       /* It is intentional that this message does not mention the third
5877          argument because it's only mentioned in an appendix of the
5878          standard.  */
5879       if (argct > 0 && (argct < 2 || argct > 3))
5880         pedwarn ("%J%qD takes only zero or two arguments", decl1, decl1);
5881
5882       if (!TREE_PUBLIC (decl1))
5883         pedwarn ("%J%qD is normally a non-static function", decl1, decl1);
5884     }
5885
5886   /* Record the decl so that the function name is defined.
5887      If we already have a decl for this name, and it is a FUNCTION_DECL,
5888      use the old decl.  */
5889
5890   current_function_decl = pushdecl (decl1);
5891
5892   push_scope ();
5893   declare_parm_level ();
5894
5895   restype = TREE_TYPE (TREE_TYPE (current_function_decl));
5896   /* Promote the value to int before returning it.  */
5897   if (c_promoting_integer_type_p (restype))
5898     {
5899       /* It retains unsignedness if not really getting wider.  */
5900       if (TYPE_UNSIGNED (restype)
5901           && (TYPE_PRECISION (restype)
5902                   == TYPE_PRECISION (integer_type_node)))
5903         restype = unsigned_type_node;
5904       else
5905         restype = integer_type_node;
5906     }
5907
5908   resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
5909   DECL_ARTIFICIAL (resdecl) = 1;
5910   DECL_IGNORED_P (resdecl) = 1;
5911   DECL_RESULT (current_function_decl) = resdecl;
5912
5913   start_fname_decls ();
5914
5915   return 1;
5916 }
5917 \f
5918 /* Subroutine of store_parm_decls which handles new-style function
5919    definitions (prototype format). The parms already have decls, so we
5920    need only record them as in effect and complain if any redundant
5921    old-style parm decls were written.  */
5922 static void
5923 store_parm_decls_newstyle (tree fndecl, const struct c_arg_info *arg_info)
5924 {
5925   tree decl;
5926
5927   if (current_scope->bindings)
5928     {
5929       error ("%Jold-style parameter declarations in prototyped "
5930              "function definition", fndecl);
5931
5932       /* Get rid of the old-style declarations.  */
5933       pop_scope ();
5934       push_scope ();
5935     }
5936   /* Don't issue this warning for nested functions, and don't issue this
5937      warning if we got here because ARG_INFO_TYPES was error_mark_node
5938      (this happens when a function definition has just an ellipsis in
5939      its parameter list).  */
5940   else if (warn_traditional && !in_system_header && !current_function_scope
5941            && arg_info->types != error_mark_node)
5942     warning ("%Jtraditional C rejects ISO C style function definitions",
5943              fndecl);
5944
5945   /* Now make all the parameter declarations visible in the function body.
5946      We can bypass most of the grunt work of pushdecl.  */
5947   for (decl = arg_info->parms; decl; decl = TREE_CHAIN (decl))
5948     {
5949       DECL_CONTEXT (decl) = current_function_decl;
5950       if (DECL_NAME (decl))
5951         bind (DECL_NAME (decl), decl, current_scope,
5952               /*invisible=*/false, /*nested=*/false);
5953       else
5954         error ("%Jparameter name omitted", decl);
5955     }
5956
5957   /* Record the parameter list in the function declaration.  */
5958   DECL_ARGUMENTS (fndecl) = arg_info->parms;
5959
5960   /* Now make all the ancillary declarations visible, likewise.  */
5961   for (decl = arg_info->others; decl; decl = TREE_CHAIN (decl))
5962     {
5963       DECL_CONTEXT (decl) = current_function_decl;
5964       if (DECL_NAME (decl))
5965         bind (DECL_NAME (decl), decl, current_scope,
5966               /*invisible=*/false, /*nested=*/false);
5967     }
5968
5969   /* And all the tag declarations.  */
5970   for (decl = arg_info->tags; decl; decl = TREE_CHAIN (decl))
5971     if (TREE_PURPOSE (decl))
5972       bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
5973             /*invisible=*/false, /*nested=*/false);
5974 }
5975
5976 /* Subroutine of store_parm_decls which handles old-style function
5977    definitions (separate parameter list and declarations).  */
5978
5979 static void
5980 store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
5981 {
5982   struct c_binding *b;
5983   tree parm, decl, last;
5984   tree parmids = arg_info->parms;
5985
5986   /* We use DECL_WEAK as a flag to show which parameters have been
5987      seen already, since it is not used on PARM_DECL.  */
5988 #ifdef ENABLE_CHECKING
5989   for (b = current_scope->bindings; b; b = b->prev)
5990     gcc_assert (TREE_CODE (b->decl) != PARM_DECL || !DECL_WEAK (b->decl));
5991 #endif
5992
5993   if (warn_old_style_definition && !in_system_header)
5994     warning ("%Jold-style function definition", fndecl);
5995
5996   /* Match each formal parameter name with its declaration.  Save each
5997      decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
5998   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
5999     {
6000       if (TREE_VALUE (parm) == 0)
6001         {
6002           error ("%Jparameter name missing from parameter list", fndecl);
6003           TREE_PURPOSE (parm) = 0;
6004           continue;
6005         }
6006
6007       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
6008       if (b && B_IN_CURRENT_SCOPE (b))
6009         {
6010           decl = b->decl;
6011           /* If we got something other than a PARM_DECL it is an error.  */
6012           if (TREE_CODE (decl) != PARM_DECL)
6013             error ("%J%qD declared as a non-parameter", decl, decl);
6014           /* If the declaration is already marked, we have a duplicate
6015              name.  Complain and ignore the duplicate.  */
6016           else if (DECL_WEAK (decl))
6017             {
6018               error ("%Jmultiple parameters named %qD", decl, decl);
6019               TREE_PURPOSE (parm) = 0;
6020               continue;
6021             }
6022           /* If the declaration says "void", complain and turn it into
6023              an int.  */
6024           else if (VOID_TYPE_P (TREE_TYPE (decl)))
6025             {
6026               error ("%Jparameter %qD declared with void type", decl, decl);
6027               TREE_TYPE (decl) = integer_type_node;
6028               DECL_ARG_TYPE (decl) = integer_type_node;
6029               layout_decl (decl, 0);
6030             }
6031         }
6032       /* If no declaration found, default to int.  */
6033       else
6034         {
6035           decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node);
6036           DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
6037           DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl);
6038           pushdecl (decl);
6039
6040           if (flag_isoc99)
6041             pedwarn ("%Jtype of %qD defaults to %<int%>", decl, decl);
6042           else if (extra_warnings)
6043             warning ("%Jtype of %qD defaults to %<int%>", decl, decl);
6044         }
6045
6046       TREE_PURPOSE (parm) = decl;
6047       DECL_WEAK (decl) = 1;
6048     }
6049
6050   /* Now examine the parms chain for incomplete declarations
6051      and declarations with no corresponding names.  */
6052
6053   for (b = current_scope->bindings; b; b = b->prev)
6054     {
6055       parm = b->decl;
6056       if (TREE_CODE (parm) != PARM_DECL)
6057         continue;
6058
6059       if (TREE_TYPE (parm) != error_mark_node
6060           && !COMPLETE_TYPE_P (TREE_TYPE (parm)))
6061         {
6062           error ("%Jparameter %qD has incomplete type", parm, parm);
6063           TREE_TYPE (parm) = error_mark_node;
6064         }
6065
6066       if (!DECL_WEAK (parm))
6067         {
6068           error ("%Jdeclaration for parameter %qD but no such parameter",
6069                  parm, parm);
6070
6071           /* Pretend the parameter was not missing.
6072              This gets us to a standard state and minimizes
6073              further error messages.  */
6074           parmids = chainon (parmids, tree_cons (parm, 0, 0));
6075         }
6076     }
6077
6078   /* Chain the declarations together in the order of the list of
6079      names.  Store that chain in the function decl, replacing the
6080      list of names.  Update the current scope to match.  */
6081   DECL_ARGUMENTS (fndecl) = 0;
6082
6083   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6084     if (TREE_PURPOSE (parm))
6085       break;
6086   if (parm && TREE_PURPOSE (parm))
6087     {
6088       last = TREE_PURPOSE (parm);
6089       DECL_ARGUMENTS (fndecl) = last;
6090       DECL_WEAK (last) = 0;
6091
6092       for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
6093         if (TREE_PURPOSE (parm))
6094           {
6095             TREE_CHAIN (last) = TREE_PURPOSE (parm);
6096             last = TREE_PURPOSE (parm);
6097             DECL_WEAK (last) = 0;
6098           }
6099       TREE_CHAIN (last) = 0;
6100     }
6101
6102   /* If there was a previous prototype,
6103      set the DECL_ARG_TYPE of each argument according to
6104      the type previously specified, and report any mismatches.  */
6105
6106   if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6107     {
6108       tree type;
6109       for (parm = DECL_ARGUMENTS (fndecl),
6110              type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6111            parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6112                              != void_type_node));
6113            parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6114         {
6115           if (parm == 0 || type == 0
6116               || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6117             {
6118               error ("number of arguments doesn%'t match prototype");
6119               error ("%Hprototype declaration",
6120                      &current_function_prototype_locus);
6121               break;
6122             }
6123           /* Type for passing arg must be consistent with that
6124              declared for the arg.  ISO C says we take the unqualified
6125              type for parameters declared with qualified type.  */
6126           if (!comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6127                           TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6128             {
6129               if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6130                   == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6131                 {
6132                   /* Adjust argument to match prototype.  E.g. a previous
6133                      `int foo(float);' prototype causes
6134                      `int foo(x) float x; {...}' to be treated like
6135                      `int foo(float x) {...}'.  This is particularly
6136                      useful for argument types like uid_t.  */
6137                   DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6138
6139                   if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
6140                       && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6141                       && TYPE_PRECISION (TREE_TYPE (parm))
6142                       < TYPE_PRECISION (integer_type_node))
6143                     DECL_ARG_TYPE (parm) = integer_type_node;
6144
6145                   if (pedantic)
6146                     {
6147                       pedwarn ("promoted argument %qD "
6148                                "doesn%'t match prototype", parm);
6149                       pedwarn ("%Hprototype declaration",
6150                                &current_function_prototype_locus);
6151                     }
6152                 }
6153               else
6154                 {
6155                   error ("argument %qD doesn%'t match prototype", parm);
6156                   error ("%Hprototype declaration",
6157                          &current_function_prototype_locus);
6158                 }
6159             }
6160         }
6161       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6162     }
6163
6164   /* Otherwise, create a prototype that would match.  */
6165
6166   else
6167     {
6168       tree actual = 0, last = 0, type;
6169
6170       for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6171         {
6172           type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6173           if (last)
6174             TREE_CHAIN (last) = type;
6175           else
6176             actual = type;
6177           last = type;
6178         }
6179       type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6180       if (last)
6181         TREE_CHAIN (last) = type;
6182       else
6183         actual = type;
6184
6185       /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6186          of the type of this function, but we need to avoid having this
6187          affect the types of other similarly-typed functions, so we must
6188          first force the generation of an identical (but separate) type
6189          node for the relevant function type.  The new node we create
6190          will be a variant of the main variant of the original function
6191          type.  */
6192
6193       TREE_TYPE (fndecl) = build_variant_type_copy (TREE_TYPE (fndecl));
6194
6195       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6196     }
6197 }
6198
6199 /* Store parameter declarations passed in ARG_INFO into the current
6200    function declaration.  */
6201
6202 void
6203 store_parm_decls_from (struct c_arg_info *arg_info)
6204 {
6205   current_function_arg_info = arg_info;
6206   store_parm_decls ();
6207 }
6208
6209 /* Store the parameter declarations into the current function declaration.
6210    This is called after parsing the parameter declarations, before
6211    digesting the body of the function.
6212
6213    For an old-style definition, construct a prototype out of the old-style
6214    parameter declarations and inject it into the function's type.  */
6215
6216 void
6217 store_parm_decls (void)
6218 {
6219   tree fndecl = current_function_decl;
6220   bool proto;
6221
6222   /* The argument information block for FNDECL.  */
6223   struct c_arg_info *arg_info = current_function_arg_info;
6224   current_function_arg_info = 0;
6225
6226   /* True if this definition is written with a prototype.  Note:
6227      despite C99 6.7.5.3p14, we can *not* treat an empty argument
6228      list in a function definition as equivalent to (void) -- an
6229      empty argument list specifies the function has no parameters,
6230      but only (void) sets up a prototype for future calls.  */
6231   proto = arg_info->types != 0;
6232
6233   if (proto)
6234     store_parm_decls_newstyle (fndecl, arg_info);
6235   else
6236     store_parm_decls_oldstyle (fndecl, arg_info);
6237
6238   /* The next call to push_scope will be a function body.  */
6239
6240   next_is_function_body = true;
6241
6242   /* Write a record describing this function definition to the prototypes
6243      file (if requested).  */
6244
6245   gen_aux_info_record (fndecl, 1, 0, proto);
6246
6247   /* Initialize the RTL code for the function.  */
6248   allocate_struct_function (fndecl);
6249
6250   /* Begin the statement tree for this function.  */
6251   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
6252
6253   /* ??? Insert the contents of the pending sizes list into the function
6254      to be evaluated.  The only reason left to have this is
6255         void foo(int n, int array[n++])
6256      because we throw away the array type in favor of a pointer type, and
6257      thus won't naturally see the SAVE_EXPR containing the increment.  All
6258      other pending sizes would be handled by gimplify_parameters.  */
6259   {
6260     tree t;
6261     for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
6262       add_stmt (TREE_VALUE (t));
6263   }
6264
6265   /* Even though we're inside a function body, we still don't want to
6266      call expand_expr to calculate the size of a variable-sized array.
6267      We haven't necessarily assigned RTL to all variables yet, so it's
6268      not safe to try to expand expressions involving them.  */
6269   cfun->x_dont_save_pending_sizes_p = 1;
6270 }
6271 \f
6272 /* Handle attribute((warn_unused_result)) on FNDECL and all its nested
6273    functions.  */
6274
6275 static void
6276 c_warn_unused_result_recursively (tree fndecl)
6277 {
6278   struct cgraph_node *cgn;
6279
6280   /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
6281   c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
6282
6283   /* Finalize all nested functions now.  */
6284   cgn = cgraph_node (fndecl);
6285   for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
6286     c_warn_unused_result_recursively (cgn->decl);
6287 }
6288
6289 /* Finish up a function declaration and compile that function
6290    all the way to assembler language output.  The free the storage
6291    for the function definition.
6292
6293    This is called after parsing the body of the function definition.  */
6294
6295 void
6296 finish_function (void)
6297 {
6298   tree fndecl = current_function_decl;
6299
6300   if (TREE_CODE (fndecl) == FUNCTION_DECL
6301       && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
6302     {
6303       tree args = DECL_ARGUMENTS (fndecl);
6304       for (; args; args = TREE_CHAIN (args))
6305         {
6306           tree type = TREE_TYPE (args);
6307           if (INTEGRAL_TYPE_P (type)
6308               && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
6309             DECL_ARG_TYPE (args) = integer_type_node;
6310         }
6311     }
6312
6313   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6314     BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6315
6316   /* Must mark the RESULT_DECL as being in this function.  */
6317
6318   if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
6319     DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6320
6321   if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6322     {
6323       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6324           != integer_type_node)
6325         {
6326           /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6327              If warn_main is -1 (-Wno-main) we don't want to be warned.  */
6328           if (!warn_main)
6329             pedwarn ("%Jreturn type of %qD is not %<int%>", fndecl, fndecl);
6330         }
6331       else
6332         {
6333           if (flag_isoc99)
6334             {
6335               tree stmt = c_finish_return (integer_zero_node);
6336               /* Hack.  We don't want the middle-end to warn that this
6337                  return is unreachable, so put the statement on the
6338                  special line 0.  */
6339 #ifdef USE_MAPPED_LOCATION
6340               SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
6341 #else
6342               annotate_with_file_line (stmt, input_filename, 0);
6343 #endif
6344             }
6345         }
6346     }
6347
6348   /* Tie off the statement tree for this function.  */
6349   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
6350
6351   finish_fname_decls ();
6352
6353   /* Complain if there's just no return statement.  */
6354   if (warn_return_type
6355       && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6356       && !current_function_returns_value && !current_function_returns_null
6357       /* Don't complain if we abort.  */
6358       && !current_function_returns_abnormally
6359       /* Don't warn for main().  */
6360       && !MAIN_NAME_P (DECL_NAME (fndecl))
6361       /* Or if they didn't actually specify a return type.  */
6362       && !C_FUNCTION_IMPLICIT_INT (fndecl)
6363       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
6364          inline function, as we might never be compiled separately.  */
6365       && DECL_INLINE (fndecl))
6366     warning ("no return statement in function returning non-void");
6367
6368   /* With just -Wextra, complain only if function returns both with
6369      and without a value.  */
6370   if (extra_warnings
6371       && current_function_returns_value
6372       && current_function_returns_null)
6373     warning ("this function may return with or without a value");
6374
6375   /* Store the end of the function, so that we get good line number
6376      info for the epilogue.  */
6377   cfun->function_end_locus = input_location;
6378
6379   /* If we don't have ctors/dtors sections, and this is a static
6380      constructor or destructor, it must be recorded now.  */
6381   if (DECL_STATIC_CONSTRUCTOR (fndecl)
6382       && !targetm.have_ctors_dtors)
6383     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6384   if (DECL_STATIC_DESTRUCTOR (fndecl)
6385       && !targetm.have_ctors_dtors)
6386     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6387
6388   /* Finalize the ELF visibility for the function.  */
6389   c_determine_visibility (fndecl);
6390
6391   /* Genericize before inlining.  Delay genericizing nested functions
6392      until their parent function is genericized.  Since finalizing
6393      requires GENERIC, delay that as well.  */
6394
6395   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node
6396       && !undef_nested_function)
6397     {
6398       if (!decl_function_context (fndecl))
6399         {
6400           c_genericize (fndecl);
6401           c_warn_unused_result_recursively (fndecl);
6402
6403           /* ??? Objc emits functions after finalizing the compilation unit.
6404              This should be cleaned up later and this conditional removed.  */
6405           if (cgraph_global_info_ready)
6406             {
6407               c_expand_body (fndecl);
6408               return;
6409             }
6410
6411           cgraph_finalize_function (fndecl, false);
6412         }
6413       else
6414         {
6415           /* Register this function with cgraph just far enough to get it
6416             added to our parent's nested function list.  Handy, since the
6417             C front end doesn't have such a list.  */
6418           (void) cgraph_node (fndecl);
6419         }
6420     }
6421
6422   if (!decl_function_context (fndecl))
6423     undef_nested_function = false;
6424
6425   /* We're leaving the context of this function, so zap cfun.
6426      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6427      tree_rest_of_compilation.  */
6428   cfun = NULL;
6429   current_function_decl = NULL;
6430 }
6431
6432 /* Generate the RTL for the body of FNDECL.  */
6433
6434 void
6435 c_expand_body (tree fndecl)
6436 {
6437
6438   if (!DECL_INITIAL (fndecl)
6439       || DECL_INITIAL (fndecl) == error_mark_node)
6440     return;
6441
6442   tree_rest_of_compilation (fndecl);
6443
6444   if (DECL_STATIC_CONSTRUCTOR (fndecl)
6445       && targetm.have_ctors_dtors)
6446     targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
6447                                  DEFAULT_INIT_PRIORITY);
6448   if (DECL_STATIC_DESTRUCTOR (fndecl)
6449       && targetm.have_ctors_dtors)
6450     targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
6451                                 DEFAULT_INIT_PRIORITY);
6452 }
6453 \f
6454 /* Check the declarations given in a for-loop for satisfying the C99
6455    constraints.  */
6456 void
6457 check_for_loop_decls (void)
6458 {
6459   struct c_binding *b;
6460
6461   if (!flag_isoc99)
6462     {
6463       /* If we get here, declarations have been used in a for loop without
6464          the C99 for loop scope.  This doesn't make much sense, so don't
6465          allow it.  */
6466       error ("%<for%> loop initial declaration used outside C99 mode");
6467       return;
6468     }
6469   /* C99 subclause 6.8.5 paragraph 3:
6470
6471        [#3]  The  declaration  part  of  a for statement shall only
6472        declare identifiers for objects having storage class auto or
6473        register.
6474
6475      It isn't clear whether, in this sentence, "identifiers" binds to
6476      "shall only declare" or to "objects" - that is, whether all identifiers
6477      declared must be identifiers for objects, or whether the restriction
6478      only applies to those that are.  (A question on this in comp.std.c
6479      in November 2000 received no answer.)  We implement the strictest
6480      interpretation, to avoid creating an extension which later causes
6481      problems.  */
6482
6483   for (b = current_scope->bindings; b; b = b->prev)
6484     {
6485       tree id = b->id;
6486       tree decl = b->decl;
6487
6488       if (!id)
6489         continue;
6490
6491       switch (TREE_CODE (decl))
6492         {
6493         case VAR_DECL:
6494           if (TREE_STATIC (decl))
6495             error ("%Jdeclaration of static variable %qD in %<for%> loop "
6496                    "initial declaration", decl, decl);
6497           else if (DECL_EXTERNAL (decl))
6498             error ("%Jdeclaration of %<extern%> variable %qD in %<for%> loop "
6499                    "initial declaration", decl, decl);
6500           break;
6501
6502         case RECORD_TYPE:
6503           error ("%<struct %E%> declared in %<for%> loop initial declaration",
6504                  id);
6505           break;
6506         case UNION_TYPE:
6507           error ("%<union %E%> declared in %<for%> loop initial declaration",
6508                  id);
6509           break;
6510         case ENUMERAL_TYPE:
6511           error ("%<enum %E%> declared in %<for%> loop initial declaration",
6512                  id);
6513           break;
6514         default:
6515           error ("%Jdeclaration of non-variable %qD in %<for%> loop "
6516                  "initial declaration", decl, decl);
6517         }
6518     }
6519 }
6520 \f
6521 /* Save and reinitialize the variables
6522    used during compilation of a C function.  */
6523
6524 void
6525 c_push_function_context (struct function *f)
6526 {
6527   struct language_function *p;
6528   p = GGC_NEW (struct language_function);
6529   f->language = p;
6530
6531   p->base.x_stmt_tree = c_stmt_tree;
6532   p->x_break_label = c_break_label;
6533   p->x_cont_label = c_cont_label;
6534   p->x_switch_stack = c_switch_stack;
6535   p->arg_info = current_function_arg_info;
6536   p->returns_value = current_function_returns_value;
6537   p->returns_null = current_function_returns_null;
6538   p->returns_abnormally = current_function_returns_abnormally;
6539   p->warn_about_return_type = warn_about_return_type;
6540   p->extern_inline = current_extern_inline;
6541 }
6542
6543 /* Restore the variables used during compilation of a C function.  */
6544
6545 void
6546 c_pop_function_context (struct function *f)
6547 {
6548   struct language_function *p = f->language;
6549
6550   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
6551       && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
6552     {
6553       /* Stop pointing to the local nodes about to be freed.  */
6554       /* But DECL_INITIAL must remain nonzero so we know this
6555          was an actual function definition.  */
6556       DECL_INITIAL (current_function_decl) = error_mark_node;
6557       DECL_ARGUMENTS (current_function_decl) = 0;
6558     }
6559
6560   c_stmt_tree = p->base.x_stmt_tree;
6561   c_break_label = p->x_break_label;
6562   c_cont_label = p->x_cont_label;
6563   c_switch_stack = p->x_switch_stack;
6564   current_function_arg_info = p->arg_info;
6565   current_function_returns_value = p->returns_value;
6566   current_function_returns_null = p->returns_null;
6567   current_function_returns_abnormally = p->returns_abnormally;
6568   warn_about_return_type = p->warn_about_return_type;
6569   current_extern_inline = p->extern_inline;
6570
6571   f->language = NULL;
6572 }
6573
6574 /* Copy the DECL_LANG_SPECIFIC data associated with DECL.  */
6575
6576 void
6577 c_dup_lang_specific_decl (tree decl)
6578 {
6579   struct lang_decl *ld;
6580
6581   if (!DECL_LANG_SPECIFIC (decl))
6582     return;
6583
6584   ld = GGC_NEW (struct lang_decl);
6585   memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
6586   DECL_LANG_SPECIFIC (decl) = ld;
6587 }
6588
6589 /* The functions below are required for functionality of doing
6590    function at once processing in the C front end. Currently these
6591    functions are not called from anywhere in the C front end, but as
6592    these changes continue, that will change.  */
6593
6594 /* Returns nonzero if the current statement is a full expression,
6595    i.e. temporaries created during that statement should be destroyed
6596    at the end of the statement.  */
6597
6598 int
6599 stmts_are_full_exprs_p (void)
6600 {
6601   return 0;
6602 }
6603
6604 /* Returns the stmt_tree (if any) to which statements are currently
6605    being added.  If there is no active statement-tree, NULL is
6606    returned.  */
6607
6608 stmt_tree
6609 current_stmt_tree (void)
6610 {
6611   return &c_stmt_tree;
6612 }
6613
6614 /* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
6615    C.  */
6616
6617 int
6618 anon_aggr_type_p (tree ARG_UNUSED (node))
6619 {
6620   return 0;
6621 }
6622
6623 /* Return the global value of T as a symbol.  */
6624
6625 tree
6626 identifier_global_value (tree t)
6627 {
6628   struct c_binding *b;
6629
6630   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
6631     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
6632       return b->decl;
6633
6634   return 0;
6635 }
6636
6637 /* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
6638    otherwise the name is found in ridpointers from RID_INDEX.  */
6639
6640 void
6641 record_builtin_type (enum rid rid_index, const char *name, tree type)
6642 {
6643   tree id, decl;
6644   if (name == 0)
6645     id = ridpointers[(int) rid_index];
6646   else
6647     id = get_identifier (name);
6648   decl = build_decl (TYPE_DECL, id, type);
6649   pushdecl (decl);
6650   if (debug_hooks->type_decl)
6651     debug_hooks->type_decl (decl, false);
6652 }
6653
6654 /* Build the void_list_node (void_type_node having been created).  */
6655 tree
6656 build_void_list_node (void)
6657 {
6658   tree t = build_tree_list (NULL_TREE, void_type_node);
6659   return t;
6660 }
6661
6662 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR.  */
6663
6664 struct c_parm *
6665 build_c_parm (struct c_declspecs *specs, tree attrs,
6666               struct c_declarator *declarator)
6667 {
6668   struct c_parm *ret = XOBNEW (&parser_obstack, struct c_parm);
6669   ret->specs = specs;
6670   ret->attrs = attrs;
6671   ret->declarator = declarator;
6672   return ret;
6673 }
6674
6675 /* Return a declarator with nested attributes.  TARGET is the inner
6676    declarator to which these attributes apply.  ATTRS are the
6677    attributes.  */
6678
6679 struct c_declarator *
6680 build_attrs_declarator (tree attrs, struct c_declarator *target)
6681 {
6682   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6683   ret->kind = cdk_attrs;
6684   ret->declarator = target;
6685   ret->u.attrs = attrs;
6686   return ret;
6687 }
6688
6689 /* Return a declarator for a function with arguments specified by ARGS
6690    and return type specified by TARGET.  */
6691
6692 struct c_declarator *
6693 build_function_declarator (struct c_arg_info *args,
6694                            struct c_declarator *target)
6695 {
6696   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6697   ret->kind = cdk_function;
6698   ret->declarator = target;
6699   ret->u.arg_info = args;
6700   return ret;
6701 }
6702
6703 /* Return a declarator for the identifier IDENT (which may be
6704    NULL_TREE for an abstract declarator).  */
6705
6706 struct c_declarator *
6707 build_id_declarator (tree ident)
6708 {
6709   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6710   ret->kind = cdk_id;
6711   ret->declarator = 0;
6712   ret->u.id = ident;
6713   /* Default value - may get reset to a more precise location. */
6714   ret->id_loc = input_location;
6715   return ret;
6716 }
6717
6718 /* Return something to represent absolute declarators containing a *.
6719    TARGET is the absolute declarator that the * contains.
6720    TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
6721    to apply to the pointer type.  */
6722
6723 struct c_declarator *
6724 make_pointer_declarator (struct c_declspecs *type_quals_attrs,
6725                          struct c_declarator *target)
6726 {
6727   tree attrs;
6728   int quals = 0;
6729   struct c_declarator *itarget = target;
6730   struct c_declarator *ret = XOBNEW (&parser_obstack, struct c_declarator);
6731   if (type_quals_attrs)
6732     {
6733       attrs = type_quals_attrs->attrs;
6734       quals = quals_from_declspecs (type_quals_attrs);
6735       if (attrs != NULL_TREE)
6736         itarget = build_attrs_declarator (attrs, target);
6737     }
6738   ret->kind = cdk_pointer;
6739   ret->declarator = itarget;
6740   ret->u.pointer_quals = quals;
6741   return ret;
6742 }
6743
6744 /* Return a pointer to a structure for an empty list of declaration
6745    specifiers.  */
6746
6747 struct c_declspecs *
6748 build_null_declspecs (void)
6749 {
6750   struct c_declspecs *ret = XOBNEW (&parser_obstack, struct c_declspecs);
6751   ret->type = 0;
6752   ret->decl_attr = 0;
6753   ret->attrs = 0;
6754   ret->typespec_word = cts_none;
6755   ret->storage_class = csc_none;
6756   ret->declspecs_seen_p = false;
6757   ret->type_seen_p = false;
6758   ret->non_sc_seen_p = false;
6759   ret->typedef_p = false;
6760   ret->tag_defined_p = false;
6761   ret->explicit_signed_p = false;
6762   ret->deprecated_p = false;
6763   ret->default_int_p = false;
6764   ret->long_p = false;
6765   ret->long_long_p = false;
6766   ret->short_p = false;
6767   ret->signed_p = false;
6768   ret->unsigned_p = false;
6769   ret->complex_p = false;
6770   ret->inline_p = false;
6771   ret->thread_p = false;
6772   ret->const_p = false;
6773   ret->volatile_p = false;
6774   ret->restrict_p = false;
6775   return ret;
6776 }
6777
6778 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
6779    returning SPECS.  */
6780
6781 struct c_declspecs *
6782 declspecs_add_qual (struct c_declspecs *specs, tree qual)
6783 {
6784   enum rid i;
6785   bool dupe = false;
6786   specs->non_sc_seen_p = true;
6787   specs->declspecs_seen_p = true;
6788   gcc_assert (TREE_CODE (qual) == IDENTIFIER_NODE
6789               && C_IS_RESERVED_WORD (qual));
6790   i = C_RID_CODE (qual);
6791   switch (i)
6792     {
6793     case RID_CONST:
6794       dupe = specs->const_p;
6795       specs->const_p = true;
6796       break;
6797     case RID_VOLATILE:
6798       dupe = specs->volatile_p;
6799       specs->volatile_p = true;
6800       break;
6801     case RID_RESTRICT:
6802       dupe = specs->restrict_p;
6803       specs->restrict_p = true;
6804       break;
6805     default:
6806       gcc_unreachable ();
6807     }
6808   if (dupe && pedantic && !flag_isoc99)
6809     pedwarn ("duplicate %qs", IDENTIFIER_POINTER (qual));
6810   return specs;
6811 }
6812
6813 /* Add the type specifier TYPE to the declaration specifiers SPECS,
6814    returning SPECS.  */
6815
6816 struct c_declspecs *
6817 declspecs_add_type (struct c_declspecs *specs, struct c_typespec spec)
6818 {
6819   tree type = spec.spec;
6820   specs->non_sc_seen_p = true;
6821   specs->declspecs_seen_p = true;
6822   specs->type_seen_p = true;
6823   if (TREE_DEPRECATED (type))
6824     specs->deprecated_p = true;
6825
6826   /* Handle type specifier keywords.  */
6827   if (TREE_CODE (type) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (type))
6828     {
6829       enum rid i = C_RID_CODE (type);
6830       if (specs->type)
6831         {
6832           error ("two or more data types in declaration specifiers");
6833           return specs;
6834         }
6835       if ((int) i <= (int) RID_LAST_MODIFIER)
6836         {
6837           /* "long", "short", "signed", "unsigned" or "_Complex".  */
6838           bool dupe = false;
6839           switch (i)
6840             {
6841             case RID_LONG:
6842               if (specs->long_long_p)
6843                 {
6844                   error ("%<long long long%> is too long for GCC");
6845                   break;
6846                 }
6847               if (specs->long_p)
6848                 {
6849                   if (specs->typespec_word == cts_double)
6850                     {
6851                       error ("both %<long long%> and %<double%> in "
6852                              "declaration specifiers");
6853                       break;
6854                     }
6855                   if (pedantic && !flag_isoc99 && !in_system_header
6856                       && warn_long_long)
6857                     pedwarn ("ISO C90 does not support %<long long%>");
6858                   specs->long_long_p = 1;
6859                   break;
6860                 }
6861               if (specs->short_p)
6862                 error ("both %<long%> and %<short%> in "
6863                        "declaration specifiers");
6864               else if (specs->typespec_word == cts_void)
6865                 error ("both %<long%> and %<void%> in "
6866                        "declaration specifiers");
6867               else if (specs->typespec_word == cts_bool)
6868                 error ("both %<long%> and %<_Bool%> in "
6869                        "declaration specifiers");
6870               else if (specs->typespec_word == cts_char)
6871                 error ("both %<long%> and %<char%> in "
6872                        "declaration specifiers");
6873               else if (specs->typespec_word == cts_float)
6874                 error ("both %<long%> and %<float%> in "
6875                        "declaration specifiers");
6876               else
6877                 specs->long_p = true;
6878               break;
6879             case RID_SHORT:
6880               dupe = specs->short_p;
6881               if (specs->long_p)
6882                 error ("both %<long%> and %<short%> in "
6883                        "declaration specifiers");
6884               else if (specs->typespec_word == cts_void)
6885                 error ("both %<short%> and %<void%> in "
6886                        "declaration specifiers");
6887               else if (specs->typespec_word == cts_bool)
6888                 error ("both %<short%> and %<_Bool%> in "
6889                        "declaration specifiers");
6890               else if (specs->typespec_word == cts_char)
6891                 error ("both %<short%> and %<char%> in "
6892                        "declaration specifiers");
6893               else if (specs->typespec_word == cts_float)
6894                 error ("both %<short%> and %<float%> in "
6895                        "declaration specifiers");
6896               else if (specs->typespec_word == cts_double)
6897                 error ("both %<short%> and %<double%> in "
6898                        "declaration specifiers");
6899               else
6900                 specs->short_p = true;
6901               break;
6902             case RID_SIGNED:
6903               dupe = specs->signed_p;
6904               if (specs->unsigned_p)
6905                 error ("both %<signed%> and %<unsigned%> in "
6906                        "declaration specifiers");
6907               else if (specs->typespec_word == cts_void)
6908                 error ("both %<signed%> and %<void%> in "
6909                        "declaration specifiers");
6910               else if (specs->typespec_word == cts_bool)
6911                 error ("both %<signed%> and %<_Bool%> in "
6912                        "declaration specifiers");
6913               else if (specs->typespec_word == cts_float)
6914                 error ("both %<signed%> and %<float%> in "
6915                        "declaration specifiers");
6916               else if (specs->typespec_word == cts_double)
6917                 error ("both %<signed%> and %<double%> in "
6918                        "declaration specifiers");
6919               else
6920                 specs->signed_p = true;
6921               break;
6922             case RID_UNSIGNED:
6923               dupe = specs->unsigned_p;
6924               if (specs->signed_p)
6925                 error ("both %<signed%> and %<unsigned%> in "
6926                        "declaration specifiers");
6927               else if (specs->typespec_word == cts_void)
6928                 error ("both %<unsigned%> and %<void%> in "
6929                        "declaration specifiers");
6930               else if (specs->typespec_word == cts_bool)
6931                 error ("both %<unsigned%> and %<_Bool%> in "
6932                        "declaration specifiers");
6933               else if (specs->typespec_word == cts_float)
6934                 error ("both %<unsigned%> and %<float%> in "
6935                        "declaration specifiers");
6936               else if (specs->typespec_word == cts_double)
6937                 error ("both %<unsigned%> and %<double%> in "
6938                        "declaration specifiers");
6939               else
6940                 specs->unsigned_p = true;
6941               break;
6942             case RID_COMPLEX:
6943               dupe = specs->complex_p;
6944               if (pedantic && !flag_isoc99 && !in_system_header)
6945                 pedwarn ("ISO C90 does not support complex types");
6946               if (specs->typespec_word == cts_void)
6947                 error ("both %<complex%> and %<void%> in "
6948                        "declaration specifiers");
6949               else if (specs->typespec_word == cts_bool)
6950                 error ("both %<complex%> and %<_Bool%> in "
6951                        "declaration specifiers");
6952               else
6953                 specs->complex_p = true;
6954               break;
6955             default:
6956               gcc_unreachable ();
6957             }
6958
6959           if (dupe)
6960             error ("duplicate %qs", IDENTIFIER_POINTER (type));
6961
6962           return specs;
6963         }
6964       else
6965         {
6966           /* "void", "_Bool", "char", "int", "float" or "double".  */
6967           if (specs->typespec_word != cts_none)
6968             {
6969               error ("two or more data types in declaration specifiers");
6970               return specs;
6971             }
6972           switch (i)
6973             {
6974             case RID_VOID:
6975               if (specs->long_p)
6976                 error ("both %<long%> and %<void%> in "
6977                        "declaration specifiers");
6978               else if (specs->short_p)
6979                 error ("both %<short%> and %<void%> in "
6980                        "declaration specifiers");
6981               else if (specs->signed_p)
6982                 error ("both %<signed%> and %<void%> in "
6983                        "declaration specifiers");
6984               else if (specs->unsigned_p)
6985                 error ("both %<unsigned%> and %<void%> in "
6986                        "declaration specifiers");
6987               else if (specs->complex_p)
6988                 error ("both %<complex%> and %<void%> in "
6989                        "declaration specifiers");
6990               else
6991                 specs->typespec_word = cts_void;
6992               return specs;
6993             case RID_BOOL:
6994               if (specs->long_p)
6995                 error ("both %<long%> and %<_Bool%> in "
6996                        "declaration specifiers");
6997               else if (specs->short_p)
6998                 error ("both %<short%> and %<_Bool%> in "
6999                        "declaration specifiers");
7000               else if (specs->signed_p)
7001                 error ("both %<signed%> and %<_Bool%> in "
7002                        "declaration specifiers");
7003               else if (specs->unsigned_p)
7004                 error ("both %<unsigned%> and %<_Bool%> in "
7005                        "declaration specifiers");
7006               else if (specs->complex_p)
7007                 error ("both %<complex%> and %<_Bool%> in "
7008                        "declaration specifiers");
7009               else
7010                 specs->typespec_word = cts_bool;
7011               return specs;
7012             case RID_CHAR:
7013               if (specs->long_p)
7014                 error ("both %<long%> and %<char%> in "
7015                        "declaration specifiers");
7016               else if (specs->short_p)
7017                 error ("both %<short%> and %<char%> in "
7018                        "declaration specifiers");
7019               else
7020                 specs->typespec_word = cts_char;
7021               return specs;
7022             case RID_INT:
7023               specs->typespec_word = cts_int;
7024               return specs;
7025             case RID_FLOAT:
7026               if (specs->long_p)
7027                 error ("both %<long%> and %<float%> in "
7028                        "declaration specifiers");
7029               else if (specs->short_p)
7030                 error ("both %<short%> and %<float%> in "
7031                        "declaration specifiers");
7032               else if (specs->signed_p)
7033                 error ("both %<signed%> and %<float%> in "
7034                        "declaration specifiers");
7035               else if (specs->unsigned_p)
7036                 error ("both %<unsigned%> and %<float%> in "
7037                        "declaration specifiers");
7038               else
7039                 specs->typespec_word = cts_float;
7040               return specs;
7041             case RID_DOUBLE:
7042               if (specs->long_long_p)
7043                 error ("both %<long long%> and %<double%> in "
7044                        "declaration specifiers");
7045               else if (specs->short_p)
7046                 error ("both %<short%> and %<double%> in "
7047                        "declaration specifiers");
7048               else if (specs->signed_p)
7049                 error ("both %<signed%> and %<double%> in "
7050                        "declaration specifiers");
7051               else if (specs->unsigned_p)
7052                 error ("both %<unsigned%> and %<double%> in "
7053                        "declaration specifiers");
7054               else
7055                 specs->typespec_word = cts_double;
7056               return specs;
7057             default:
7058               /* ObjC reserved word "id", handled below.  */
7059               break;
7060             }
7061         }
7062     }
7063
7064   /* Now we have a typedef (a TYPE_DECL node), an identifier (some
7065      form of ObjC type, cases such as "int" and "long" being handled
7066      above), a TYPE (struct, union, enum and typeof specifiers) or an
7067      ERROR_MARK.  In none of these cases may there have previously
7068      been any type specifiers.  */
7069   if (specs->type || specs->typespec_word != cts_none
7070       || specs->long_p || specs->short_p || specs->signed_p
7071       || specs->unsigned_p || specs->complex_p)
7072     error ("two or more data types in declaration specifiers");
7073   else if (TREE_CODE (type) == TYPE_DECL)
7074     {
7075       if (TREE_TYPE (type) == error_mark_node)
7076         ; /* Allow the type to default to int to avoid cascading errors.  */
7077       else
7078         {
7079           specs->type = TREE_TYPE (type);
7080           specs->decl_attr = DECL_ATTRIBUTES (type);
7081           specs->typedef_p = true;
7082           specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
7083         }
7084     }
7085   else if (TREE_CODE (type) == IDENTIFIER_NODE)
7086     {
7087       tree t = lookup_name (type);
7088       if (!t || TREE_CODE (t) != TYPE_DECL)
7089         error ("%qs fails to be a typedef or built in type",
7090                IDENTIFIER_POINTER (type));
7091       else if (TREE_TYPE (t) == error_mark_node)
7092         ;
7093       else
7094         specs->type = TREE_TYPE (t);
7095     }
7096   else if (TREE_CODE (type) != ERROR_MARK)
7097     {
7098       if (spec.kind == ctsk_tagdef || spec.kind == ctsk_tagfirstref)
7099         specs->tag_defined_p = true;
7100       if (spec.kind == ctsk_typeof)
7101         specs->typedef_p = true;
7102       specs->type = type;
7103     }
7104
7105   return specs;
7106 }
7107
7108 /* Add the storage class specifier or function specifier SCSPEC to the
7109    declaration specifiers SPECS, returning SPECS.  */
7110
7111 struct c_declspecs *
7112 declspecs_add_scspec (struct c_declspecs *specs, tree scspec)
7113 {
7114   enum rid i;
7115   enum c_storage_class n = csc_none;
7116   bool dupe = false;
7117   specs->declspecs_seen_p = true;
7118   gcc_assert (TREE_CODE (scspec) == IDENTIFIER_NODE
7119               && C_IS_RESERVED_WORD (scspec));
7120   i = C_RID_CODE (scspec);
7121   if (extra_warnings && specs->non_sc_seen_p)
7122     warning ("%qs is not at beginning of declaration",
7123              IDENTIFIER_POINTER (scspec));
7124   switch (i)
7125     {
7126     case RID_INLINE:
7127       /* C99 permits duplicate inline.  Although of doubtful utility,
7128          it seems simplest to permit it in gnu89 mode as well, as
7129          there is also little utility in maintaining this as a
7130          difference between gnu89 and C99 inline.  */
7131       dupe = false;
7132       specs->inline_p = true;
7133       break;
7134     case RID_THREAD:
7135       dupe = specs->thread_p;
7136       if (specs->storage_class == csc_auto)
7137         error ("%<__thread%> used with %<auto%>");
7138       else if (specs->storage_class == csc_register)
7139         error ("%<__thread%> used with %<register%>");
7140       else if (specs->storage_class == csc_typedef)
7141         error ("%<__thread%> used with %<typedef%>");
7142       else
7143         specs->thread_p = true;
7144       break;
7145     case RID_AUTO:
7146       n = csc_auto;
7147       break;
7148     case RID_EXTERN:
7149       n = csc_extern;
7150       /* Diagnose "__thread extern".  */
7151       if (specs->thread_p)
7152         error ("%<__thread%> before %<extern%>");
7153       break;
7154     case RID_REGISTER:
7155       n = csc_register;
7156       break;
7157     case RID_STATIC:
7158       n = csc_static;
7159       /* Diagnose "__thread static".  */
7160       if (specs->thread_p)
7161         error ("%<__thread%> before %<static%>");
7162       break;
7163     case RID_TYPEDEF:
7164       n = csc_typedef;
7165       break;
7166     default:
7167       gcc_unreachable ();
7168     }
7169   if (n != csc_none && n == specs->storage_class)
7170     dupe = true;
7171   if (dupe)
7172     error ("duplicate %qs", IDENTIFIER_POINTER (scspec));
7173   if (n != csc_none)
7174     {
7175       if (specs->storage_class != csc_none && n != specs->storage_class)
7176         {
7177           error ("multiple storage classes in declaration specifiers");
7178         }
7179       else
7180         {
7181           specs->storage_class = n;
7182           if (n != csc_extern && n != csc_static && specs->thread_p)
7183             {
7184               error ("%<__thread%> used with %qs",
7185                      IDENTIFIER_POINTER (scspec));
7186               specs->thread_p = false;
7187             }
7188         }
7189     }
7190   return specs;
7191 }
7192
7193 /* Add the attributes ATTRS to the declaration specifiers SPECS,
7194    returning SPECS.  */
7195
7196 struct c_declspecs *
7197 declspecs_add_attrs (struct c_declspecs *specs, tree attrs)
7198 {
7199   specs->attrs = chainon (attrs, specs->attrs);
7200   specs->declspecs_seen_p = true;
7201   return specs;
7202 }
7203
7204 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
7205    specifiers with any other type specifier to determine the resulting
7206    type.  This is where ISO C checks on complex types are made, since
7207    "_Complex long" is a prefix of the valid ISO C type "_Complex long
7208    double".  */
7209
7210 struct c_declspecs *
7211 finish_declspecs (struct c_declspecs *specs)
7212 {
7213   /* If a type was specified as a whole, we have no modifiers and are
7214      done.  */
7215   if (specs->type != NULL_TREE)
7216     {
7217       gcc_assert (!specs->long_p && !specs->long_long_p && !specs->short_p
7218                   && !specs->signed_p && !specs->unsigned_p
7219                   && !specs->complex_p);
7220       return specs;
7221     }
7222
7223   /* If none of "void", "_Bool", "char", "int", "float" or "double"
7224      has been specified, treat it as "int" unless "_Complex" is
7225      present and there are no other specifiers.  If we just have
7226      "_Complex", it is equivalent to "_Complex double", but e.g.
7227      "_Complex short" is equivalent to "_Complex short int".  */
7228   if (specs->typespec_word == cts_none)
7229     {
7230       if (specs->long_p || specs->short_p
7231           || specs->signed_p || specs->unsigned_p)
7232         {
7233           specs->typespec_word = cts_int;
7234         }
7235       else if (specs->complex_p)
7236         {
7237           specs->typespec_word = cts_double;
7238           if (pedantic)
7239             pedwarn ("ISO C does not support plain %<complex%> meaning "
7240                      "%<double complex%>");
7241         }
7242       else
7243         {
7244           specs->typespec_word = cts_int;
7245           specs->default_int_p = true;
7246           /* We don't diagnose this here because grokdeclarator will
7247              give more specific diagnostics according to whether it is
7248              a function definition.  */
7249         }
7250     }
7251
7252   /* If "signed" was specified, record this to distinguish "int" and
7253      "signed int" in the case of a bit-field with
7254      -funsigned-bitfields.  */
7255   specs->explicit_signed_p = specs->signed_p;
7256
7257   /* Now compute the actual type.  */
7258   switch (specs->typespec_word)
7259     {
7260     case cts_void:
7261       gcc_assert (!specs->long_p && !specs->short_p
7262                   && !specs->signed_p && !specs->unsigned_p
7263                   && !specs->complex_p);
7264       specs->type = void_type_node;
7265       break;
7266     case cts_bool:
7267       gcc_assert (!specs->long_p && !specs->short_p
7268                   && !specs->signed_p && !specs->unsigned_p
7269                   && !specs->complex_p);
7270       specs->type = boolean_type_node;
7271       break;
7272     case cts_char:
7273       gcc_assert (!specs->long_p && !specs->short_p);
7274       gcc_assert (!(specs->signed_p && specs->unsigned_p));
7275       if (specs->signed_p)
7276         specs->type = signed_char_type_node;
7277       else if (specs->unsigned_p)
7278         specs->type = unsigned_char_type_node;
7279       else
7280         specs->type = char_type_node;
7281       if (specs->complex_p)
7282         {
7283           if (pedantic)
7284             pedwarn ("ISO C does not support complex integer types");
7285           specs->type = build_complex_type (specs->type);
7286         }
7287       break;
7288     case cts_int:
7289       gcc_assert (!(specs->long_p && specs->short_p));
7290       gcc_assert (!(specs->signed_p && specs->unsigned_p));
7291       if (specs->long_long_p)
7292         specs->type = (specs->unsigned_p
7293                        ? long_long_unsigned_type_node
7294                        : long_long_integer_type_node);
7295       else if (specs->long_p)
7296         specs->type = (specs->unsigned_p
7297                        ? long_unsigned_type_node
7298                        : long_integer_type_node);
7299       else if (specs->short_p)
7300         specs->type = (specs->unsigned_p
7301                        ? short_unsigned_type_node
7302                        : short_integer_type_node);
7303       else
7304         specs->type = (specs->unsigned_p
7305                        ? unsigned_type_node
7306                        : integer_type_node);
7307       if (specs->complex_p)
7308         {
7309           if (pedantic)
7310             pedwarn ("ISO C does not support complex integer types");
7311           specs->type = build_complex_type (specs->type);
7312         }
7313       break;
7314     case cts_float:
7315       gcc_assert (!specs->long_p && !specs->short_p
7316                   && !specs->signed_p && !specs->unsigned_p);
7317       specs->type = (specs->complex_p
7318                      ? complex_float_type_node
7319                      : float_type_node);
7320       break;
7321     case cts_double:
7322       gcc_assert (!specs->long_long_p && !specs->short_p
7323                   && !specs->signed_p && !specs->unsigned_p);
7324       if (specs->long_p)
7325         {
7326           specs->type = (specs->complex_p
7327                          ? complex_long_double_type_node
7328                          : long_double_type_node);
7329         }
7330       else
7331         {
7332           specs->type = (specs->complex_p
7333                          ? complex_double_type_node
7334                          : double_type_node);
7335         }
7336       break;
7337     default:
7338       gcc_unreachable ();
7339     }
7340
7341   return specs;
7342 }
7343
7344 /* Synthesize a function which calls all the global ctors or global
7345    dtors in this file.  This is only used for targets which do not
7346    support .ctors/.dtors sections.  FIXME: Migrate into cgraph.  */
7347 static void
7348 build_cdtor (int method_type, tree cdtors)
7349 {
7350   tree body = 0;
7351
7352   if (!cdtors)
7353     return;
7354
7355   for (; cdtors; cdtors = TREE_CHAIN (cdtors))
7356     append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
7357                               &body);
7358
7359   cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
7360 }
7361
7362 /* Perform final processing on one file scope's declarations (or the
7363    external scope's declarations), GLOBALS.  */
7364 static void
7365 c_write_global_declarations_1 (tree globals)
7366 {
7367   size_t len = list_length (globals);
7368   tree *vec = XNEWVEC (tree, len);
7369   size_t i;
7370   tree decl;
7371
7372   /* Process the decls in the order they were written.  */
7373   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
7374     {
7375       vec[i] = decl;
7376       /* Check for used but undefined static functions using the C
7377          standard's definition of "used", and set TREE_NO_WARNING so
7378          that check_global_declarations doesn't repeat the check.  */
7379       if (TREE_CODE (decl) == FUNCTION_DECL
7380           && DECL_INITIAL (decl) == 0
7381           && DECL_EXTERNAL (decl)
7382           && !TREE_PUBLIC (decl)
7383           && C_DECL_USED (decl))
7384         {
7385           pedwarn ("%J%qF used but never defined", decl, decl);
7386           TREE_NO_WARNING (decl) = 1;
7387         }
7388     }
7389
7390   wrapup_global_declarations (vec, len);
7391   check_global_declarations (vec, len);
7392
7393   free (vec);
7394 }
7395
7396 void
7397 c_write_global_declarations (void)
7398 {
7399   tree ext_block, t;
7400
7401   /* We don't want to do this if generating a PCH.  */
7402   if (pch_file)
7403     return;
7404
7405   /* Don't waste time on further processing if -fsyntax-only or we've
7406      encountered errors.  */
7407   if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
7408     return;
7409
7410   /* Close the external scope.  */
7411   ext_block = pop_scope ();
7412   external_scope = 0;
7413   gcc_assert (!current_scope);
7414
7415   /* Process all file scopes in this compilation, and the external_scope,
7416      through wrapup_global_declarations and check_global_declarations.  */
7417   for (t = all_translation_units; t; t = TREE_CHAIN (t))
7418     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
7419   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
7420
7421   /* Generate functions to call static constructors and destructors
7422      for targets that do not support .ctors/.dtors sections.  These
7423      functions have magic names which are detected by collect2.  */
7424   build_cdtor ('I', static_ctors); static_ctors = 0;
7425   build_cdtor ('D', static_dtors); static_dtors = 0;
7426
7427   /* We're done parsing; proceed to optimize and emit assembly.
7428      FIXME: shouldn't be the front end's responsibility to call this.  */
7429   cgraph_optimize ();
7430 }
7431
7432 #include "gt-c-decl.h"