OSDN Git Service

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