c-common.h (STATEMENT_LIST_HAS_LABEL): New.
[platform/upstream/gcc.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 = build (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_2 ((TREE_STRING_LENGTH (initial_value)
3273                                    / eltsize) - 1, 0);
3274         }
3275       else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3276         {
3277           tree elts = CONSTRUCTOR_ELTS (initial_value);
3278           maxindex = build_int_2 (-1, -1);
3279           for (; elts; elts = TREE_CHAIN (elts))
3280             {
3281               if (TREE_PURPOSE (elts))
3282                 maxindex = TREE_PURPOSE (elts);
3283               else
3284                 maxindex = fold (build (PLUS_EXPR, integer_type_node,
3285                                         maxindex, integer_one_node));
3286             }
3287         }
3288       else
3289         {
3290           /* Make an error message unless that happened already.  */
3291           if (initial_value != error_mark_node)
3292             value = 1;
3293
3294           /* Prevent further error messages.  */
3295           maxindex = build_int_2 (0, 0);
3296         }
3297     }
3298
3299   if (!maxindex)
3300     {
3301       if (do_default)
3302         maxindex = build_int_2 (0, 0);
3303       value = 2;
3304     }
3305
3306   if (maxindex)
3307     {
3308       TYPE_DOMAIN (type) = build_index_type (maxindex);
3309       if (!TREE_TYPE (maxindex))
3310         abort ();
3311     }
3312
3313   /* Lay out the type now that we can get the real answer.  */
3314
3315   layout_type (type);
3316
3317   return value;
3318 }
3319 \f
3320 /* Determine whether TYPE is a structure with a flexible array member,
3321    or a union containing such a structure (possibly recursively).  */
3322
3323 static bool
3324 flexible_array_type_p (tree type)
3325 {
3326   tree x;
3327   switch (TREE_CODE (type))
3328     {
3329     case RECORD_TYPE:
3330       x = TYPE_FIELDS (type);
3331       if (x == NULL_TREE)
3332         return false;
3333       while (TREE_CHAIN (x) != NULL_TREE)
3334         x = TREE_CHAIN (x);
3335       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
3336           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
3337           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
3338           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
3339         return true;
3340       return false;
3341     case UNION_TYPE:
3342       for (x = TYPE_FIELDS (type); x != NULL_TREE; x = TREE_CHAIN (x))
3343         {
3344           if (flexible_array_type_p (TREE_TYPE (x)))
3345             return true;
3346         }
3347       return false;
3348     default:
3349     return false;
3350   }
3351 }
3352 \f
3353 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
3354    replacing with appropriate values if they are invalid.  */
3355 static void
3356 check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name)
3357 {
3358   tree type_mv;
3359   unsigned int max_width;
3360   unsigned HOST_WIDE_INT w;
3361   const char *name = orig_name ? orig_name: _("<anonymous>");
3362
3363   /* Necessary?  */
3364   STRIP_NOPS (*width);
3365
3366   /* Detect and ignore out of range field width and process valid
3367      field widths.  */
3368   if (TREE_CODE (*width) != INTEGER_CST)
3369     {
3370       error ("bit-field `%s' width not an integer constant", name);
3371       *width = integer_one_node;
3372     }
3373   else
3374     {
3375       constant_expression_warning (*width);
3376       if (tree_int_cst_sgn (*width) < 0)
3377         {
3378           error ("negative width in bit-field `%s'", name);
3379           *width = integer_one_node;
3380         }
3381       else if (integer_zerop (*width) && orig_name)
3382         {
3383           error ("zero width for bit-field `%s'", name);
3384           *width = integer_one_node;
3385         }
3386     }
3387
3388   /* Detect invalid bit-field type.  */
3389   if (TREE_CODE (*type) != INTEGER_TYPE
3390       && TREE_CODE (*type) != BOOLEAN_TYPE
3391       && TREE_CODE (*type) != ENUMERAL_TYPE)
3392     {
3393       error ("bit-field `%s' has invalid type", name);
3394       *type = unsigned_type_node;
3395     }
3396
3397   type_mv = TYPE_MAIN_VARIANT (*type);
3398   if (pedantic
3399       && type_mv != integer_type_node
3400       && type_mv != unsigned_type_node
3401       && type_mv != boolean_type_node)
3402     pedwarn ("type of bit-field `%s' is a GCC extension", name);
3403
3404   if (type_mv == boolean_type_node)
3405     max_width = CHAR_TYPE_SIZE;
3406   else
3407     max_width = TYPE_PRECISION (*type);
3408
3409   if (0 < compare_tree_int (*width, max_width))
3410     {
3411       error ("width of `%s' exceeds its type", name);
3412       w = max_width;
3413       *width = build_int_2 (w, 0);
3414     }
3415   else
3416     w = tree_low_cst (*width, 1);
3417
3418   if (TREE_CODE (*type) == ENUMERAL_TYPE)
3419     {
3420       struct lang_type *lt = TYPE_LANG_SPECIFIC (*type);
3421       if (!lt
3422           || w < min_precision (lt->enum_min, TYPE_UNSIGNED (*type))
3423           || w < min_precision (lt->enum_max, TYPE_UNSIGNED (*type)))
3424         warning ("`%s' is narrower than values of its type", name);
3425     }
3426 }
3427 \f
3428 /* Given declspecs and a declarator,
3429    determine the name and type of the object declared
3430    and construct a ..._DECL node for it.
3431    (In one case we can return a ..._TYPE node instead.
3432     For invalid input we sometimes return 0.)
3433
3434    DECLSPECS is a chain of tree_list nodes whose value fields
3435     are the storage classes and type specifiers.
3436
3437    DECL_CONTEXT says which syntactic context this declaration is in:
3438      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3439      FUNCDEF for a function definition.  Like NORMAL but a few different
3440       error messages in each case.  Return value may be zero meaning
3441       this definition is too screwy to try to parse.
3442      PARM for a parameter declaration (either within a function prototype
3443       or before a function body).  Make a PARM_DECL, or return void_type_node.
3444      TYPENAME if for a typename (in a cast or sizeof).
3445       Don't make a DECL node; just return the ..._TYPE node.
3446      FIELD for a struct or union field; make a FIELD_DECL.
3447    INITIALIZED is 1 if the decl has an initializer.
3448    WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
3449    representing the width of the bit-field.
3450
3451    In the TYPENAME case, DECLARATOR is really an absolute declarator.
3452    It may also be so in the PARM case, for a prototype where the
3453    argument type is specified but not the name.
3454
3455    This function is where the complicated C meanings of `static'
3456    and `extern' are interpreted.  */
3457
3458 static tree
3459 grokdeclarator (tree declarator, tree declspecs,
3460                 enum decl_context decl_context, int initialized, tree *width)
3461 {
3462   int specbits = 0;
3463   tree spec;
3464   tree type = NULL_TREE;
3465   int longlong = 0;
3466   int constp;
3467   int restrictp;
3468   int volatilep;
3469   int type_quals = TYPE_UNQUALIFIED;
3470   int inlinep;
3471   int explicit_int = 0;
3472   int explicit_char = 0;
3473   int defaulted_int = 0;
3474   tree typedef_decl = 0;
3475   const char *name, *orig_name;
3476   tree typedef_type = 0;
3477   int funcdef_flag = 0;
3478   enum tree_code innermost_code = ERROR_MARK;
3479   int size_varies = 0;
3480   tree decl_attr = NULL_TREE;
3481   tree array_ptr_quals = NULL_TREE;
3482   int array_parm_static = 0;
3483   tree returned_attrs = NULL_TREE;
3484   bool bitfield = width != NULL;
3485   tree element_type;
3486   tree arg_info = NULL_TREE;
3487
3488   if (decl_context == FUNCDEF)
3489     funcdef_flag = 1, decl_context = NORMAL;
3490
3491   /* Look inside a declarator for the name being declared
3492      and get it as a string, for an error message.  */
3493   {
3494     tree decl = declarator;
3495     name = 0;
3496
3497     while (decl)
3498       switch (TREE_CODE (decl))
3499         {
3500         case ARRAY_REF:
3501         case INDIRECT_REF:
3502         case CALL_EXPR:
3503           innermost_code = TREE_CODE (decl);
3504           decl = TREE_OPERAND (decl, 0);
3505           break;
3506
3507         case TREE_LIST:
3508           decl = TREE_VALUE (decl);
3509           break;
3510
3511         case IDENTIFIER_NODE:
3512           name = IDENTIFIER_POINTER (decl);
3513           decl = 0;
3514           break;
3515
3516         default:
3517           abort ();
3518         }
3519     orig_name = name;
3520     if (name == 0)
3521       name = "type name";
3522   }
3523
3524   /* A function definition's declarator must have the form of
3525      a function declarator.  */
3526
3527   if (funcdef_flag && innermost_code != CALL_EXPR)
3528     return 0;
3529
3530   /* If this looks like a function definition, make it one,
3531      even if it occurs where parms are expected.
3532      Then store_parm_decls will reject it and not use it as a parm.  */
3533   if (decl_context == NORMAL && !funcdef_flag && current_scope->parm_flag)
3534     decl_context = PARM;
3535
3536   /* Look through the decl specs and record which ones appear.
3537      Some typespecs are defined as built-in typenames.
3538      Others, the ones that are modifiers of other types,
3539      are represented by bits in SPECBITS: set the bits for
3540      the modifiers that appear.  Storage class keywords are also in SPECBITS.
3541
3542      If there is a typedef name or a type, store the type in TYPE.
3543      This includes builtin typedefs such as `int'.
3544
3545      Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
3546      and did not come from a user typedef.
3547
3548      Set LONGLONG if `long' is mentioned twice.  */
3549
3550   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
3551     {
3552       tree id = TREE_VALUE (spec);
3553
3554       /* If the entire declaration is itself tagged as deprecated then
3555          suppress reports of deprecated items.  */
3556       if (id && TREE_DEPRECATED (id))
3557         {
3558           if (deprecated_state != DEPRECATED_SUPPRESS)
3559             warn_deprecated_use (id);
3560         }
3561
3562       if (id == ridpointers[(int) RID_INT])
3563         explicit_int = 1;
3564       if (id == ridpointers[(int) RID_CHAR])
3565         explicit_char = 1;
3566
3567       if (TREE_CODE (id) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (id))
3568         {
3569           enum rid i = C_RID_CODE (id);
3570           if ((int) i <= (int) RID_LAST_MODIFIER)
3571             {
3572               if (i == RID_LONG && (specbits & (1 << (int) RID_LONG)))
3573                 {
3574                   if (longlong)
3575                     error ("`long long long' is too long for GCC");
3576                   else
3577                     {
3578                       if (pedantic && !flag_isoc99 && ! in_system_header
3579                           && warn_long_long)
3580                         pedwarn ("ISO C90 does not support `long long'");
3581                       longlong = 1;
3582                     }
3583                 }
3584               else if (specbits & (1 << (int) i))
3585                 {
3586                   if (i == RID_CONST || i == RID_VOLATILE || i == RID_RESTRICT)
3587                     {
3588                       if (pedantic && !flag_isoc99)
3589                         pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
3590                     }
3591                   else
3592                     error ("duplicate `%s'", IDENTIFIER_POINTER (id));
3593                 }
3594
3595               /* Diagnose "__thread extern".  Recall that this list
3596                  is in the reverse order seen in the text.  */
3597               if (i == RID_THREAD
3598                   && (specbits & (1 << (int) RID_EXTERN
3599                                   | 1 << (int) RID_STATIC)))
3600                 {
3601                   if (specbits & 1 << (int) RID_EXTERN)
3602                     error ("`__thread' before `extern'");
3603                   else
3604                     error ("`__thread' before `static'");
3605                 }
3606
3607               specbits |= 1 << (int) i;
3608               goto found;
3609             }
3610         }
3611       if (type)
3612         error ("two or more data types in declaration of `%s'", name);
3613       /* Actual typedefs come to us as TYPE_DECL nodes.  */
3614       else if (TREE_CODE (id) == TYPE_DECL)
3615         {
3616           if (TREE_TYPE (id) == error_mark_node)
3617             ; /* Allow the type to default to int to avoid cascading errors.  */
3618           else
3619             {
3620               type = TREE_TYPE (id);
3621               decl_attr = DECL_ATTRIBUTES (id);
3622               typedef_decl = id;
3623             }
3624         }
3625       /* Built-in types come as identifiers.  */
3626       else if (TREE_CODE (id) == IDENTIFIER_NODE)
3627         {
3628           tree t = lookup_name (id);
3629            if (!t || TREE_CODE (t) != TYPE_DECL)
3630             error ("`%s' fails to be a typedef or built in type",
3631                    IDENTIFIER_POINTER (id));
3632            else if (TREE_TYPE (t) == error_mark_node)
3633             ;
3634           else
3635             {
3636               type = TREE_TYPE (t);
3637               typedef_decl = t;
3638             }
3639         }
3640       else if (TREE_CODE (id) != ERROR_MARK)
3641         type = id;
3642
3643     found:
3644       ;
3645     }
3646
3647   typedef_type = type;
3648   if (type)
3649     size_varies = C_TYPE_VARIABLE_SIZE (type);
3650
3651   /* No type at all: default to `int', and set DEFAULTED_INT
3652      because it was not a user-defined typedef.  */
3653
3654   if (type == 0)
3655     {
3656       if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3657                           | (1 << (int) RID_SIGNED)
3658                           | (1 << (int) RID_UNSIGNED)
3659                           | (1 << (int) RID_COMPLEX))))
3660           /* Don't warn about typedef foo = bar.  */
3661           && ! (specbits & (1 << (int) RID_TYPEDEF) && initialized)
3662           && ! in_system_header)
3663         {
3664           /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type
3665              and this is a function, or if -Wimplicit; prefer the former
3666              warning since it is more explicit.  */
3667           if ((warn_implicit_int || warn_return_type || flag_isoc99)
3668               && funcdef_flag)
3669             warn_about_return_type = 1;
3670           else if (warn_implicit_int || flag_isoc99)
3671             pedwarn_c99 ("type defaults to `int' in declaration of `%s'",
3672                          name);
3673         }
3674
3675       defaulted_int = 1;
3676       type = integer_type_node;
3677     }
3678
3679   /* Now process the modifiers that were specified
3680      and check for invalid combinations.  */
3681
3682   /* Long double is a special combination.  */
3683
3684   if ((specbits & 1 << (int) RID_LONG) && ! longlong
3685       && TYPE_MAIN_VARIANT (type) == double_type_node)
3686     {
3687       specbits &= ~(1 << (int) RID_LONG);
3688       type = long_double_type_node;
3689     }
3690
3691   /* Check all other uses of type modifiers.  */
3692
3693   if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3694                   | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
3695     {
3696       int ok = 0;
3697
3698       if ((specbits & 1 << (int) RID_LONG)
3699           && (specbits & 1 << (int) RID_SHORT))
3700         error ("both long and short specified for `%s'", name);
3701       else if (((specbits & 1 << (int) RID_LONG)
3702                 || (specbits & 1 << (int) RID_SHORT))
3703                && explicit_char)
3704         error ("long or short specified with char for `%s'", name);
3705       else if (((specbits & 1 << (int) RID_LONG)
3706                 || (specbits & 1 << (int) RID_SHORT))
3707                && TREE_CODE (type) == REAL_TYPE)
3708         {
3709           static int already = 0;
3710
3711           error ("long or short specified with floating type for `%s'", name);
3712           if (! already && ! pedantic)
3713             {
3714               error ("the only valid combination is `long double'");
3715               already = 1;
3716             }
3717         }
3718       else if ((specbits & 1 << (int) RID_SIGNED)
3719                && (specbits & 1 << (int) RID_UNSIGNED))
3720         error ("both signed and unsigned specified for `%s'", name);
3721       else if (TREE_CODE (type) != INTEGER_TYPE)
3722         error ("long, short, signed or unsigned invalid for `%s'", name);
3723       else
3724         {
3725           ok = 1;
3726           if (!explicit_int && !defaulted_int && !explicit_char)
3727             {
3728               error ("long, short, signed or unsigned used invalidly for `%s'",
3729                      name);
3730               ok = 0;
3731             }
3732         }
3733
3734       /* Discard the type modifiers if they are invalid.  */
3735       if (! ok)
3736         {
3737           specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3738                         | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
3739           longlong = 0;
3740         }
3741     }
3742
3743   if ((specbits & (1 << (int) RID_COMPLEX))
3744       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
3745     {
3746       error ("complex invalid for `%s'", name);
3747       specbits &= ~(1 << (int) RID_COMPLEX);
3748     }
3749
3750   /* Decide whether an integer type is signed or not.
3751      Optionally treat bit-fields as signed by default.  */
3752   if (specbits & 1 << (int) RID_UNSIGNED
3753       || (bitfield && ! flag_signed_bitfields
3754           && (explicit_int || defaulted_int || explicit_char
3755               /* A typedef for plain `int' without `signed'
3756                  can be controlled just like plain `int'.  */
3757               || ! (typedef_decl != 0
3758                     && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
3759           && TREE_CODE (type) != ENUMERAL_TYPE
3760           && !(specbits & 1 << (int) RID_SIGNED)))
3761     {
3762       if (longlong)
3763         type = long_long_unsigned_type_node;
3764       else if (specbits & 1 << (int) RID_LONG)
3765         type = long_unsigned_type_node;
3766       else if (specbits & 1 << (int) RID_SHORT)
3767         type = short_unsigned_type_node;
3768       else if (type == char_type_node)
3769         type = unsigned_char_type_node;
3770       else if (typedef_decl)
3771         type = c_common_unsigned_type (type);
3772       else
3773         type = unsigned_type_node;
3774     }
3775   else if ((specbits & 1 << (int) RID_SIGNED)
3776            && type == char_type_node)
3777     type = signed_char_type_node;
3778   else if (longlong)
3779     type = long_long_integer_type_node;
3780   else if (specbits & 1 << (int) RID_LONG)
3781     type = long_integer_type_node;
3782   else if (specbits & 1 << (int) RID_SHORT)
3783     type = short_integer_type_node;
3784
3785   if (specbits & 1 << (int) RID_COMPLEX)
3786     {
3787       if (pedantic && !flag_isoc99)
3788         pedwarn ("ISO C90 does not support complex types");
3789       /* If we just have "complex", it is equivalent to
3790          "complex double", but if any modifiers at all are specified it is
3791          the complex form of TYPE.  E.g, "complex short" is
3792          "complex short int".  */
3793
3794       if (defaulted_int && ! longlong
3795           && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3796                             | (1 << (int) RID_SIGNED)
3797                             | (1 << (int) RID_UNSIGNED))))
3798         {
3799           if (pedantic)
3800             pedwarn ("ISO C does not support plain `complex' meaning `double complex'");
3801           type = complex_double_type_node;
3802         }
3803       else if (type == integer_type_node)
3804         {
3805           if (pedantic)
3806             pedwarn ("ISO C does not support complex integer types");
3807           type = complex_integer_type_node;
3808         }
3809       else if (type == float_type_node)
3810         type = complex_float_type_node;
3811       else if (type == double_type_node)
3812         type = complex_double_type_node;
3813       else if (type == long_double_type_node)
3814         type = complex_long_double_type_node;
3815       else
3816         {
3817           if (pedantic)
3818             pedwarn ("ISO C does not support complex integer types");
3819           type = build_complex_type (type);
3820         }
3821     }
3822
3823   /* Check the type and width of a bit-field.  */
3824   if (bitfield)
3825     check_bitfield_type_and_width (&type, width, orig_name);
3826
3827   /* Figure out the type qualifiers for the declaration.  There are
3828      two ways a declaration can become qualified.  One is something
3829      like `const int i' where the `const' is explicit.  Another is
3830      something like `typedef const int CI; CI i' where the type of the
3831      declaration contains the `const'.  A third possibility is that
3832      there is a type qualifier on the element type of a typedefed
3833      array type, in which case we should extract that qualifier so
3834      that c_apply_type_quals_to_decls receives the full list of
3835      qualifiers to work with (C90 is not entirely clear about whether
3836      duplicate qualifiers should be diagnosed in this case, but it
3837      seems most appropriate to do so).  */
3838   element_type = strip_array_types (type);
3839   constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (element_type);
3840   restrictp
3841     = !! (specbits & 1 << (int) RID_RESTRICT) + TYPE_RESTRICT (element_type);
3842   volatilep
3843     = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (element_type);
3844   inlinep = !! (specbits & (1 << (int) RID_INLINE));
3845   if (pedantic && !flag_isoc99)
3846     {
3847       if (constp > 1)
3848         pedwarn ("duplicate `const'");
3849       if (restrictp > 1)
3850         pedwarn ("duplicate `restrict'");
3851       if (volatilep > 1)
3852         pedwarn ("duplicate `volatile'");
3853     }
3854   if (! flag_gen_aux_info && (TYPE_QUALS (type)))
3855     type = TYPE_MAIN_VARIANT (type);
3856   type_quals = ((constp ? TYPE_QUAL_CONST : 0)
3857                 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
3858                 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
3859
3860   /* Warn if two storage classes are given. Default to `auto'.  */
3861
3862   {
3863     int nclasses = 0;
3864
3865     if (specbits & 1 << (int) RID_AUTO) nclasses++;
3866     if (specbits & 1 << (int) RID_STATIC) nclasses++;
3867     if (specbits & 1 << (int) RID_EXTERN) nclasses++;
3868     if (specbits & 1 << (int) RID_REGISTER) nclasses++;
3869     if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
3870
3871     /* "static __thread" and "extern __thread" are allowed.  */
3872     if ((specbits & (1 << (int) RID_THREAD
3873                      | 1 << (int) RID_STATIC
3874                      | 1 << (int) RID_EXTERN)) == (1 << (int) RID_THREAD))
3875       nclasses++;
3876
3877     /* Warn about storage classes that are invalid for certain
3878        kinds of declarations (parameters, typenames, etc.).  */
3879
3880     if (nclasses > 1)
3881       error ("multiple storage classes in declaration of `%s'", name);
3882     else if (funcdef_flag
3883              && (specbits
3884                  & ((1 << (int) RID_REGISTER)
3885                     | (1 << (int) RID_AUTO)
3886                     | (1 << (int) RID_TYPEDEF)
3887                     | (1 << (int) RID_THREAD))))
3888       {
3889         if (specbits & 1 << (int) RID_AUTO
3890             && (pedantic || current_scope == file_scope))
3891           pedwarn ("function definition declared `auto'");
3892         if (specbits & 1 << (int) RID_REGISTER)
3893           error ("function definition declared `register'");
3894         if (specbits & 1 << (int) RID_TYPEDEF)
3895           error ("function definition declared `typedef'");
3896         if (specbits & 1 << (int) RID_THREAD)
3897           error ("function definition declared `__thread'");
3898         specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
3899                       | (1 << (int) RID_AUTO) | (1 << (int) RID_THREAD));
3900       }
3901     else if (decl_context != NORMAL && nclasses > 0)
3902       {
3903         if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
3904           ;
3905         else
3906           {
3907             switch (decl_context)
3908               {
3909               case FIELD:
3910                 error ("storage class specified for structure field `%s'",
3911                        name);
3912                 break;
3913               case PARM:
3914                 error ("storage class specified for parameter `%s'", name);
3915                 break;
3916               default:
3917                 error ("storage class specified for typename");
3918                 break;
3919               }
3920             specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
3921                           | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
3922                           | (1 << (int) RID_EXTERN) | (1 << (int) RID_THREAD));
3923           }
3924       }
3925     else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
3926       {
3927         /* `extern' with initialization is invalid if not at file scope.  */
3928         if (current_scope == file_scope)
3929           warning ("`%s' initialized and declared `extern'", name);
3930         else
3931           error ("`%s' has both `extern' and initializer", name);
3932       }
3933     else if (current_scope == file_scope)
3934       {
3935         if (specbits & 1 << (int) RID_AUTO)
3936           error ("file-scope declaration of `%s' specifies `auto'", name);
3937       }
3938     else
3939       {
3940         if (specbits & 1 << (int) RID_EXTERN && funcdef_flag)
3941           error ("nested function `%s' declared `extern'", name);
3942         else if ((specbits & (1 << (int) RID_THREAD
3943                                | 1 << (int) RID_EXTERN
3944                                | 1 << (int) RID_STATIC))
3945                  == (1 << (int) RID_THREAD))
3946           {
3947             error ("function-scope `%s' implicitly auto and declared `__thread'",
3948                    name);
3949             specbits &= ~(1 << (int) RID_THREAD);
3950           }
3951       }
3952   }
3953
3954   /* Now figure out the structure of the declarator proper.
3955      Descend through it, creating more complex types, until we reach
3956      the declared identifier (or NULL_TREE, in an absolute declarator).  */
3957
3958   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
3959     {
3960       if (type == error_mark_node)
3961         {
3962           declarator = TREE_OPERAND (declarator, 0);
3963           continue;
3964         }
3965
3966       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
3967          an INDIRECT_REF (for *...),
3968          a CALL_EXPR (for ...(...)),
3969          a TREE_LIST (for nested attributes),
3970          an identifier (for the name being declared)
3971          or a null pointer (for the place in an absolute declarator
3972          where the name was omitted).
3973          For the last two cases, we have just exited the loop.
3974
3975          At this point, TYPE is the type of elements of an array,
3976          or for a function to return, or for a pointer to point to.
3977          After this sequence of ifs, TYPE is the type of the
3978          array or function or pointer, and DECLARATOR has had its
3979          outermost layer removed.  */
3980
3981       if (array_ptr_quals != NULL_TREE || array_parm_static)
3982         {
3983           /* Only the innermost declarator (making a parameter be of
3984              array type which is converted to pointer type)
3985              may have static or type qualifiers.  */
3986           error ("static or type qualifiers in non-parameter array declarator");
3987           array_ptr_quals = NULL_TREE;
3988           array_parm_static = 0;
3989         }
3990
3991       if (TREE_CODE (declarator) == TREE_LIST)
3992         {
3993           /* We encode a declarator with embedded attributes using
3994              a TREE_LIST.  */
3995           tree attrs = TREE_PURPOSE (declarator);
3996           tree inner_decl;
3997           int attr_flags = 0;
3998           declarator = TREE_VALUE (declarator);
3999           inner_decl = declarator;
4000           while (inner_decl != NULL_TREE
4001                  && TREE_CODE (inner_decl) == TREE_LIST)
4002             inner_decl = TREE_VALUE (inner_decl);
4003           if (inner_decl == NULL_TREE
4004               || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
4005             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
4006           else if (TREE_CODE (inner_decl) == CALL_EXPR)
4007             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
4008           else if (TREE_CODE (inner_decl) == ARRAY_REF)
4009             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
4010           returned_attrs = decl_attributes (&type,
4011                                             chainon (returned_attrs, attrs),
4012                                             attr_flags);
4013         }
4014       else if (TREE_CODE (declarator) == ARRAY_REF)
4015         {
4016           tree itype = NULL_TREE;
4017           tree size = TREE_OPERAND (declarator, 1);
4018           /* The index is a signed object `sizetype' bits wide.  */
4019           tree index_type = c_common_signed_type (sizetype);
4020
4021           array_ptr_quals = TREE_TYPE (declarator);
4022           array_parm_static = TREE_STATIC (declarator);
4023
4024           declarator = TREE_OPERAND (declarator, 0);
4025
4026           /* Check for some types that there cannot be arrays of.  */
4027
4028           if (VOID_TYPE_P (type))
4029             {
4030               error ("declaration of `%s' as array of voids", name);
4031               type = error_mark_node;
4032             }
4033
4034           if (TREE_CODE (type) == FUNCTION_TYPE)
4035             {
4036               error ("declaration of `%s' as array of functions", name);
4037               type = error_mark_node;
4038             }
4039
4040           if (pedantic && !in_system_header && flexible_array_type_p (type))
4041             pedwarn ("invalid use of structure with flexible array member");
4042
4043           if (size == error_mark_node)
4044             type = error_mark_node;
4045
4046           if (type == error_mark_node)
4047             continue;
4048
4049           /* If size was specified, set ITYPE to a range-type for that size.
4050              Otherwise, ITYPE remains null.  finish_decl may figure it out
4051              from an initial value.  */
4052
4053           if (size)
4054             {
4055               /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
4056               STRIP_TYPE_NOPS (size);
4057
4058               if (! INTEGRAL_TYPE_P (TREE_TYPE (size)))
4059                 {
4060                   error ("size of array `%s' has non-integer type", name);
4061                   size = integer_one_node;
4062                 }
4063
4064               if (pedantic && integer_zerop (size))
4065                 pedwarn ("ISO C forbids zero-size array `%s'", name);
4066
4067               if (TREE_CODE (size) == INTEGER_CST)
4068                 {
4069                   constant_expression_warning (size);
4070                   if (tree_int_cst_sgn (size) < 0)
4071                     {
4072                       error ("size of array `%s' is negative", name);
4073                       size = integer_one_node;
4074                     }
4075                 }
4076               else
4077                 {
4078                   /* Make sure the array size remains visibly nonconstant
4079                      even if it is (eg) a const variable with known value.  */
4080                   size_varies = 1;
4081
4082                   if (!flag_isoc99 && pedantic)
4083                     {
4084                       if (TREE_CONSTANT (size))
4085                         pedwarn ("ISO C90 forbids array `%s' whose size can't be evaluated",
4086                                  name);
4087                       else
4088                         pedwarn ("ISO C90 forbids variable-size array `%s'",
4089                                  name);
4090                     }
4091                 }
4092
4093               if (integer_zerop (size))
4094                 {
4095                   /* A zero-length array cannot be represented with an
4096                      unsigned index type, which is what we'll get with
4097                      build_index_type.  Create an open-ended range instead.  */
4098                   itype = build_range_type (sizetype, size, NULL_TREE);
4099                 }
4100               else
4101                 {
4102                   /* Compute the maximum valid index, that is, size - 1.
4103                      Do the calculation in index_type, so that if it is
4104                      a variable the computations will be done in the
4105                      proper mode.  */
4106                   itype = fold (build (MINUS_EXPR, index_type,
4107                                        convert (index_type, size),
4108                                        convert (index_type, size_one_node)));
4109
4110                   /* If that overflowed, the array is too big.
4111                      ??? While a size of INT_MAX+1 technically shouldn't
4112                      cause an overflow (because we subtract 1), the overflow
4113                      is recorded during the conversion to index_type, before
4114                      the subtraction.  Handling this case seems like an
4115                      unnecessary complication.  */
4116                   if (TREE_OVERFLOW (itype))
4117                     {
4118                       error ("size of array `%s' is too large", name);
4119                       type = error_mark_node;
4120                       continue;
4121                     }
4122
4123                   if (size_varies)
4124                     itype = variable_size (itype);
4125                   itype = build_index_type (itype);
4126                 }
4127             }
4128           else if (decl_context == FIELD)
4129             {
4130               if (pedantic && !flag_isoc99 && !in_system_header)
4131                 pedwarn ("ISO C90 does not support flexible array members");
4132
4133               /* ISO C99 Flexible array members are effectively identical
4134                  to GCC's zero-length array extension.  */
4135               itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4136             }
4137
4138           /* If pedantic, complain about arrays of incomplete types.  */
4139
4140           if (pedantic && !COMPLETE_TYPE_P (type))
4141             pedwarn ("array type has incomplete element type");
4142
4143           /* Build the array type itself, then merge any constancy or
4144              volatility into the target type.  We must do it in this order
4145              to ensure that the TYPE_MAIN_VARIANT field of the array type
4146              is set correctly.  */
4147
4148           type = build_array_type (type, itype);
4149           if (type_quals)
4150             type = c_build_qualified_type (type, type_quals);
4151
4152           if (size_varies)
4153             C_TYPE_VARIABLE_SIZE (type) = 1;
4154
4155           /* The GCC extension for zero-length arrays differs from
4156              ISO flexible array members in that sizeof yields zero.  */
4157           if (size && integer_zerop (size))
4158             {
4159               layout_type (type);
4160               TYPE_SIZE (type) = bitsize_zero_node;
4161               TYPE_SIZE_UNIT (type) = size_zero_node;
4162             }
4163           else if (declarator && TREE_CODE (declarator) == INDIRECT_REF)
4164             /* We can never complete an array type which is the target of a
4165                pointer, so go ahead and lay it out.  */
4166             layout_type (type);
4167
4168           if (decl_context != PARM
4169               && (array_ptr_quals != NULL_TREE || array_parm_static))
4170             {
4171               error ("static or type qualifiers in non-parameter array declarator");
4172               array_ptr_quals = NULL_TREE;
4173               array_parm_static = 0;
4174             }
4175         }
4176       else if (TREE_CODE (declarator) == CALL_EXPR)
4177         {
4178           /* Say it's a definition only for the CALL_EXPR closest to
4179              the identifier.  */
4180           bool really_funcdef = (funcdef_flag
4181                                  && (TREE_CODE (TREE_OPERAND (declarator, 0))
4182                                      == IDENTIFIER_NODE));
4183           tree arg_types;
4184
4185           /* Declaring a function type.
4186              Make sure we have a valid type for the function to return.  */
4187           if (type == error_mark_node)
4188             continue;
4189
4190           size_varies = 0;
4191
4192           /* Warn about some types functions can't return.  */
4193
4194           if (TREE_CODE (type) == FUNCTION_TYPE)
4195             {
4196               error ("`%s' declared as function returning a function", name);
4197               type = integer_type_node;
4198             }
4199           if (TREE_CODE (type) == ARRAY_TYPE)
4200             {
4201               error ("`%s' declared as function returning an array", name);
4202               type = integer_type_node;
4203             }
4204
4205           /* Construct the function type and go to the next
4206              inner layer of declarator.  */
4207           arg_info = TREE_OPERAND (declarator, 1);
4208           arg_types = grokparms (arg_info, really_funcdef);
4209
4210           /* Type qualifiers before the return type of the function
4211              qualify the return type, not the function type.  */
4212           if (type_quals)
4213             {
4214               /* Type qualifiers on a function return type are
4215                  normally permitted by the standard but have no
4216                  effect, so give a warning at -Wreturn-type.
4217                  Qualifiers on a void return type are banned on
4218                  function definitions in ISO C; GCC used to used them
4219                  for noreturn functions.  */
4220               if (VOID_TYPE_P (type) && really_funcdef)
4221                 pedwarn ("function definition has qualified void return type");
4222               else if (warn_return_type)
4223                 warning ("type qualifiers ignored on function return type");
4224
4225               type = c_build_qualified_type (type, type_quals);
4226             }
4227           type_quals = TYPE_UNQUALIFIED;
4228
4229           type = build_function_type (type, arg_types);
4230           declarator = TREE_OPERAND (declarator, 0);
4231
4232           /* Set the TYPE_CONTEXTs for each tagged type which is local to
4233              the formal parameter list of this FUNCTION_TYPE to point to
4234              the FUNCTION_TYPE node itself.  */
4235
4236           {
4237             tree link;
4238
4239             for (link = ARG_INFO_TAGS (arg_info);
4240                  link;
4241                  link = TREE_CHAIN (link))
4242               TYPE_CONTEXT (TREE_VALUE (link)) = type;
4243           }
4244         }
4245       else if (TREE_CODE (declarator) == INDIRECT_REF)
4246         {
4247           /* Merge any constancy or volatility into the target type
4248              for the pointer.  */
4249
4250           if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4251               && type_quals)
4252             pedwarn ("ISO C forbids qualified function types");
4253           if (type_quals)
4254             type = c_build_qualified_type (type, type_quals);
4255           type_quals = TYPE_UNQUALIFIED;
4256           size_varies = 0;
4257
4258           type = build_pointer_type (type);
4259
4260           /* Process a list of type modifier keywords
4261              (such as const or volatile) that were given inside the `*'.  */
4262
4263           if (TREE_TYPE (declarator))
4264             {
4265               tree typemodlist;
4266               int erred = 0;
4267
4268               constp = 0;
4269               volatilep = 0;
4270               restrictp = 0;
4271               for (typemodlist = TREE_TYPE (declarator); typemodlist;
4272                    typemodlist = TREE_CHAIN (typemodlist))
4273                 {
4274                   tree qualifier = TREE_VALUE (typemodlist);
4275
4276                   if (C_IS_RESERVED_WORD (qualifier))
4277                     {
4278                       if (C_RID_CODE (qualifier) == RID_CONST)
4279                         constp++;
4280                       else if (C_RID_CODE (qualifier) == RID_VOLATILE)
4281                         volatilep++;
4282                       else if (C_RID_CODE (qualifier) == RID_RESTRICT)
4283                         restrictp++;
4284                       else
4285                         erred++;
4286                     }
4287                   else
4288                     erred++;
4289                 }
4290
4291               if (erred)
4292                 error ("invalid type modifier within pointer declarator");
4293               if (pedantic && !flag_isoc99)
4294                 {
4295                   if (constp > 1)
4296                     pedwarn ("duplicate `const'");
4297                   if (volatilep > 1)
4298                     pedwarn ("duplicate `volatile'");
4299                   if (restrictp > 1)
4300                     pedwarn ("duplicate `restrict'");
4301                 }
4302
4303               type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4304                             | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4305                             | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4306             }
4307
4308           declarator = TREE_OPERAND (declarator, 0);
4309         }
4310       else
4311         abort ();
4312
4313     }
4314
4315   /* Now TYPE has the actual type.  */
4316
4317   /* Did array size calculations overflow?  */
4318
4319   if (TREE_CODE (type) == ARRAY_TYPE
4320       && COMPLETE_TYPE_P (type)
4321       && TREE_OVERFLOW (TYPE_SIZE (type)))
4322     {
4323       error ("size of array `%s' is too large", name);
4324       /* If we proceed with the array type as it is, we'll eventually
4325          crash in tree_low_cst().  */
4326       type = error_mark_node;
4327     }
4328
4329   /* If this is declaring a typedef name, return a TYPE_DECL.  */
4330
4331   if (specbits & (1 << (int) RID_TYPEDEF))
4332     {
4333       tree decl;
4334       /* Note that the grammar rejects storage classes
4335          in typenames, fields or parameters */
4336       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4337           && type_quals)
4338         pedwarn ("ISO C forbids qualified function types");
4339       if (type_quals)
4340         type = c_build_qualified_type (type, type_quals);
4341       decl = build_decl (TYPE_DECL, declarator, type);
4342       if ((specbits & (1 << (int) RID_SIGNED))
4343           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4344         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4345       decl_attributes (&decl, returned_attrs, 0);
4346       return decl;
4347     }
4348
4349   /* Detect the case of an array type of unspecified size
4350      which came, as such, direct from a typedef name.
4351      We must copy the type, so that each identifier gets
4352      a distinct type, so that each identifier's size can be
4353      controlled separately by its own initializer.  */
4354
4355   if (type != 0 && typedef_type != 0
4356       && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0
4357       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
4358     {
4359       type = build_array_type (TREE_TYPE (type), 0);
4360       if (size_varies)
4361         C_TYPE_VARIABLE_SIZE (type) = 1;
4362     }
4363
4364   /* If this is a type name (such as, in a cast or sizeof),
4365      compute the type and return it now.  */
4366
4367   if (decl_context == TYPENAME)
4368     {
4369       /* Note that the grammar rejects storage classes
4370          in typenames, fields or parameters */
4371       if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4372           && type_quals)
4373         pedwarn ("ISO C forbids const or volatile function types");
4374       if (type_quals)
4375         type = c_build_qualified_type (type, type_quals);
4376       decl_attributes (&type, returned_attrs, 0);
4377       return type;
4378     }
4379
4380   /* Aside from typedefs and type names (handle above),
4381      `void' at top level (not within pointer)
4382      is allowed only in public variables.
4383      We don't complain about parms either, but that is because
4384      a better error message can be made later.  */
4385
4386   if (VOID_TYPE_P (type) && decl_context != PARM
4387       && ! ((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4388             && ((specbits & (1 << (int) RID_EXTERN))
4389                 || (current_scope == file_scope
4390                     && !(specbits
4391                          & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
4392     {
4393       error ("variable or field `%s' declared void", name);
4394       type = integer_type_node;
4395     }
4396
4397   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4398      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
4399
4400   {
4401     tree decl;
4402
4403     if (decl_context == PARM)
4404       {
4405         tree type_as_written;
4406         tree promoted_type;
4407
4408         /* A parameter declared as an array of T is really a pointer to T.
4409            One declared as a function is really a pointer to a function.  */
4410
4411         if (TREE_CODE (type) == ARRAY_TYPE)
4412           {
4413             /* Transfer const-ness of array into that of type pointed to.  */
4414             type = TREE_TYPE (type);
4415             if (type_quals)
4416               type = c_build_qualified_type (type, type_quals);
4417             type = build_pointer_type (type);
4418             type_quals = TYPE_UNQUALIFIED;
4419             if (array_ptr_quals)
4420               {
4421                 tree new_ptr_quals, new_ptr_attrs;
4422                 int erred = 0;
4423                 split_specs_attrs (array_ptr_quals, &new_ptr_quals, &new_ptr_attrs);
4424                 /* We don't yet implement attributes in this context.  */
4425                 if (new_ptr_attrs != NULL_TREE)
4426                   warning ("attributes in parameter array declarator ignored");
4427
4428                 constp = 0;
4429                 volatilep = 0;
4430                 restrictp = 0;
4431                 for (; new_ptr_quals; new_ptr_quals = TREE_CHAIN (new_ptr_quals))
4432                   {
4433                     tree qualifier = TREE_VALUE (new_ptr_quals);
4434
4435                     if (C_IS_RESERVED_WORD (qualifier))
4436                       {
4437                         if (C_RID_CODE (qualifier) == RID_CONST)
4438                           constp++;
4439                         else if (C_RID_CODE (qualifier) == RID_VOLATILE)
4440                           volatilep++;
4441                         else if (C_RID_CODE (qualifier) == RID_RESTRICT)
4442                           restrictp++;
4443                         else
4444                           erred++;
4445                       }
4446                     else
4447                       erred++;
4448                   }
4449
4450                 if (erred)
4451                   error ("invalid type modifier within array declarator");
4452
4453                 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4454                               | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4455                               | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4456               }
4457             size_varies = 0;
4458           }
4459         else if (TREE_CODE (type) == FUNCTION_TYPE)
4460           {
4461             if (pedantic && type_quals)
4462               pedwarn ("ISO C forbids qualified function types");
4463             if (type_quals)
4464               type = c_build_qualified_type (type, type_quals);
4465             type = build_pointer_type (type);
4466             type_quals = TYPE_UNQUALIFIED;
4467           }
4468         else if (type_quals)
4469           type = c_build_qualified_type (type, type_quals);
4470
4471         type_as_written = type;
4472
4473         decl = build_decl (PARM_DECL, declarator, type);
4474         if (size_varies)
4475           C_DECL_VARIABLE_SIZE (decl) = 1;
4476
4477         /* Compute the type actually passed in the parmlist,
4478            for the case where there is no prototype.
4479            (For example, shorts and chars are passed as ints.)
4480            When there is a prototype, this is overridden later.  */
4481
4482         if (type == error_mark_node)
4483           promoted_type = type;
4484         else
4485           promoted_type = c_type_promotes_to (type);
4486
4487         DECL_ARG_TYPE (decl) = promoted_type;
4488         DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
4489       }
4490     else if (decl_context == FIELD)
4491       {
4492         /* Structure field.  It may not be a function.  */
4493
4494         if (TREE_CODE (type) == FUNCTION_TYPE)
4495           {
4496             error ("field `%s' declared as a function", name);
4497             type = build_pointer_type (type);
4498           }
4499         else if (TREE_CODE (type) != ERROR_MARK
4500                  && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4501           {
4502             error ("field `%s' has incomplete type", name);
4503             type = error_mark_node;
4504           }
4505         /* Move type qualifiers down to element of an array.  */
4506         if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4507           type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4508                                                            type_quals),
4509                                    TYPE_DOMAIN (type));
4510         decl = build_decl (FIELD_DECL, declarator, type);
4511         DECL_NONADDRESSABLE_P (decl) = bitfield;
4512
4513         if (size_varies)
4514           C_DECL_VARIABLE_SIZE (decl) = 1;
4515       }
4516     else if (TREE_CODE (type) == FUNCTION_TYPE)
4517       {
4518         if (specbits & (1 << (int) RID_AUTO)
4519             && (pedantic || current_scope == file_scope))
4520           pedwarn ("invalid storage class for function `%s'", name);
4521         if (specbits & (1 << (int) RID_REGISTER))
4522           error ("invalid storage class for function `%s'", name);
4523         if (specbits & (1 << (int) RID_THREAD))
4524           error ("invalid storage class for function `%s'", name);
4525         /* Function declaration not at file scope.
4526            Storage classes other than `extern' are not allowed
4527            and `extern' makes no difference.  */
4528         if (current_scope != file_scope
4529             && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
4530             && pedantic)
4531           pedwarn ("invalid storage class for function `%s'", name);
4532
4533         decl = build_decl (FUNCTION_DECL, declarator, type);
4534         decl = build_decl_attribute_variant (decl, decl_attr);
4535
4536         DECL_LANG_SPECIFIC (decl)
4537           = GGC_CNEW (struct lang_decl);
4538
4539         if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl))
4540           pedwarn ("ISO C forbids qualified function types");
4541
4542         /* GNU C interprets a volatile-qualified function type to indicate
4543            that the function does not return.  */
4544         if ((type_quals & TYPE_QUAL_VOLATILE)
4545             && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4546           warning ("`noreturn' function returns non-void value");
4547
4548         /* Every function declaration is an external reference
4549            (DECL_EXTERNAL) except for those which are not at file
4550            scope and are explicitly declared "auto".  This is
4551            forbidden by standard C (C99 6.7.1p5) and is interpreted by
4552            GCC to signify a forward declaration of a nested function.  */
4553         if ((specbits & (1 << RID_AUTO)) && current_scope != file_scope)
4554           DECL_EXTERNAL (decl) = 0;
4555         else
4556           DECL_EXTERNAL (decl) = 1;
4557
4558         /* Record absence of global scope for `static' or `auto'.  */
4559         TREE_PUBLIC (decl)
4560           = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
4561
4562         /* For a function definition, record the argument information
4563            block in DECL_ARGUMENTS where store_parm_decls will look
4564            for it.  */
4565         if (funcdef_flag)
4566           DECL_ARGUMENTS (decl) = arg_info;
4567
4568         if (defaulted_int)
4569           C_FUNCTION_IMPLICIT_INT (decl) = 1;
4570
4571         /* Record presence of `inline', if it is reasonable.  */
4572         if (MAIN_NAME_P (declarator))
4573           {
4574             if (inlinep)
4575               warning ("cannot inline function `main'");
4576           }
4577         else if (inlinep)
4578           {
4579             /* Record that the function is declared `inline'.  */
4580             DECL_DECLARED_INLINE_P (decl) = 1;
4581
4582             /* Do not mark bare declarations as DECL_INLINE.  Doing so
4583                in the presence of multiple declarations can result in
4584                the abstract origin pointing between the declarations,
4585                which will confuse dwarf2out.  */
4586             if (initialized)
4587               {
4588                 DECL_INLINE (decl) = 1;
4589                 if (specbits & (1 << (int) RID_EXTERN))
4590                   current_extern_inline = 1;
4591               }
4592           }
4593         /* If -finline-functions, assume it can be inlined.  This does
4594            two things: let the function be deferred until it is actually
4595            needed, and let dwarf2 know that the function is inlinable.  */
4596         else if (flag_inline_trees == 2 && initialized)
4597           DECL_INLINE (decl) = 1;
4598       }
4599     else
4600       {
4601         /* It's a variable.  */
4602         /* An uninitialized decl with `extern' is a reference.  */
4603         int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
4604
4605         /* Move type qualifiers down to element of an array.  */
4606         if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4607           {
4608             int saved_align = TYPE_ALIGN(type);
4609             type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4610                                                              type_quals),
4611                                      TYPE_DOMAIN (type));
4612             TYPE_ALIGN (type) = saved_align;
4613           }
4614         else if (type_quals)
4615           type = c_build_qualified_type (type, type_quals);
4616
4617         /* C99 6.2.2p7: It is invalid (compile-time undefined
4618            behavior) to create an 'extern' declaration for a
4619            variable if there is a global declaration that is
4620            'static' and the global declaration is not visible.
4621            (If the static declaration _is_ currently visible,
4622            the 'extern' declaration is taken to refer to that decl.) */
4623         if (extern_ref && current_scope != file_scope)
4624           {
4625             tree global_decl  = identifier_global_value (declarator);
4626             tree visible_decl = lookup_name (declarator);
4627
4628             if (global_decl
4629                 && global_decl != visible_decl
4630                 && TREE_CODE (global_decl) == VAR_DECL
4631                 && !TREE_PUBLIC (global_decl))
4632               error ("variable previously declared 'static' redeclared "
4633                      "'extern'");
4634           }
4635
4636         decl = build_decl (VAR_DECL, declarator, type);
4637         if (size_varies)
4638           C_DECL_VARIABLE_SIZE (decl) = 1;
4639
4640         if (inlinep)
4641           pedwarn ("%Jvariable '%D' declared `inline'", decl, decl);
4642
4643         /* At file scope, an initialized extern declaration may follow
4644            a static declaration.  In that case, DECL_EXTERNAL will be
4645            reset later in start_decl.  */
4646         DECL_EXTERNAL (decl) = !!(specbits & (1 << (int) RID_EXTERN));
4647
4648         /* At file scope, the presence of a `static' or `register' storage
4649            class specifier, or the absence of all storage class specifiers
4650            makes this declaration a definition (perhaps tentative).  Also,
4651            the absence of both `static' and `register' makes it public.  */
4652         if (current_scope == file_scope)
4653           {
4654             TREE_PUBLIC (decl) = !(specbits & ((1 << (int) RID_STATIC)
4655                                                | (1 << (int) RID_REGISTER)));
4656             TREE_STATIC (decl) = !extern_ref;
4657           }
4658         /* Not at file scope, only `static' makes a static definition.  */
4659         else
4660           {
4661             TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
4662             TREE_PUBLIC (decl) = extern_ref;
4663           }
4664
4665         if (specbits & 1 << (int) RID_THREAD)
4666           {
4667             if (targetm.have_tls)
4668               DECL_THREAD_LOCAL (decl) = 1;
4669             else
4670               /* A mere warning is sure to result in improper semantics
4671                  at runtime.  Don't bother to allow this to compile.  */
4672               error ("thread-local storage not supported for this target");
4673           }
4674       }
4675
4676     /* Record `register' declaration for warnings on &
4677        and in case doing stupid register allocation.  */
4678
4679     if (specbits & (1 << (int) RID_REGISTER))
4680       {
4681         C_DECL_REGISTER (decl) = 1;
4682         DECL_REGISTER (decl) = 1;
4683       }
4684
4685     /* Record constancy and volatility.  */
4686     c_apply_type_quals_to_decl (type_quals, decl);
4687
4688     /* If a type has volatile components, it should be stored in memory.
4689        Otherwise, the fact that those components are volatile
4690        will be ignored, and would even crash the compiler.  */
4691     if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4692       {
4693         /* It is not an error for a structure with volatile fields to
4694            be declared register, but reset DECL_REGISTER since it
4695            cannot actually go in a register.  */
4696         int was_reg = C_DECL_REGISTER (decl);
4697         C_DECL_REGISTER (decl) = 0;
4698         DECL_REGISTER (decl) = 0;
4699         c_mark_addressable (decl);
4700         C_DECL_REGISTER (decl) = was_reg;
4701       }
4702
4703 #ifdef ENABLE_CHECKING
4704   /* This is the earliest point at which we might know the assembler
4705      name of a variable.  Thus, if it's known before this, die horribly.  */
4706   if (DECL_ASSEMBLER_NAME_SET_P (decl))
4707     abort ();
4708 #endif
4709
4710     decl_attributes (&decl, returned_attrs, 0);
4711
4712     return decl;
4713   }
4714 }
4715 \f
4716 /* Decode the parameter-list info for a function type or function definition.
4717    The argument is the value returned by `get_parm_info' (or made in parse.y
4718    if there is an identifier list instead of a parameter decl list).
4719    These two functions are separate because when a function returns
4720    or receives functions then each is called multiple times but the order
4721    of calls is different.  The last call to `grokparms' is always the one
4722    that contains the formal parameter names of a function definition.
4723
4724    Return a list of arg types to use in the FUNCTION_TYPE for this function.
4725
4726    FUNCDEF_FLAG is nonzero for a function definition, 0 for
4727    a mere declaration.  A nonempty identifier-list gets an error message
4728    when FUNCDEF_FLAG is zero.  */
4729
4730 static tree
4731 grokparms (tree arg_info, int funcdef_flag)
4732 {
4733   tree arg_types = ARG_INFO_TYPES (arg_info);
4734
4735   if (warn_strict_prototypes && arg_types == 0 && !funcdef_flag
4736       && !in_system_header)
4737     warning ("function declaration isn't a prototype");
4738
4739   if (arg_types == error_mark_node)
4740     return 0;  /* don't set TYPE_ARG_TYPES in this case */
4741
4742   else if (arg_types && TREE_CODE (TREE_VALUE (arg_types)) == IDENTIFIER_NODE)
4743     {
4744       if (! funcdef_flag)
4745         pedwarn ("parameter names (without types) in function declaration");
4746
4747       ARG_INFO_PARMS (arg_info) = ARG_INFO_TYPES (arg_info);
4748       ARG_INFO_TYPES (arg_info) = 0;
4749       return 0;
4750     }
4751   else
4752     {
4753       tree parm, type, typelt;
4754       unsigned int parmno;
4755
4756       /* If the arg types are incomplete in a declaration, they must
4757          include undefined tags.  These tags can never be defined in
4758          the scope of the declaration, so the types can never be
4759          completed, and no call can be compiled successfully.  */
4760
4761       for (parm = ARG_INFO_PARMS (arg_info), typelt = arg_types, parmno = 1;
4762            parm;
4763            parm = TREE_CHAIN (parm), typelt = TREE_CHAIN (typelt), parmno++)
4764         {
4765           type = TREE_VALUE (typelt);
4766           if (type == error_mark_node)
4767             continue;
4768
4769           if (!COMPLETE_TYPE_P (type))
4770             {
4771               if (funcdef_flag)
4772                 {
4773                   if (DECL_NAME (parm))
4774                     error ("%Jparameter %u ('%D') has incomplete type",
4775                            parm, parmno, parm);
4776                   else
4777                     error ("%Jparameter %u has incomplete type",
4778                            parm, parmno);
4779
4780                   TREE_VALUE (typelt) = error_mark_node;
4781                   TREE_TYPE (parm) = error_mark_node;
4782                 }
4783               else
4784                 {
4785                   if (DECL_NAME (parm))
4786                     warning ("%Jparameter %u ('%D') has incomplete type",
4787                              parm, parmno, parm);
4788                   else
4789                     warning ("%Jparameter %u has incomplete type",
4790                              parm, parmno);
4791                 }
4792             }
4793         }
4794       return arg_types;
4795     }
4796 }
4797
4798 /* Take apart the current scope and return a tree_list node with info
4799    on a parameter list just parsed.  This tree_list node should be
4800    examined using the ARG_INFO_* macros, defined above:
4801
4802      ARG_INFO_PARMS:  a list of parameter decls.
4803      ARG_INFO_TAGS:   a list of structure, union and enum tags defined.
4804      ARG_INFO_TYPES:  a list of argument types to go in the FUNCTION_TYPE.
4805      ARG_INFO_OTHERS: a list of non-parameter decls (notably enumeration
4806                       constants) defined with the parameters.
4807
4808    This tree_list node is later fed to 'grokparms' and 'store_parm_decls'.
4809
4810    ELLIPSIS being true means the argument list ended in '...' so don't
4811    append a sentinel (void_list_node) to the end of the type-list.  */
4812
4813 tree
4814 get_parm_info (bool ellipsis)
4815 {
4816   struct c_binding *b = current_scope->bindings;
4817   tree arg_info = make_node (TREE_LIST);
4818   tree parms    = 0;
4819   tree tags     = 0;
4820   tree types    = 0;
4821   tree others   = 0;
4822
4823   static bool explained_incomplete_types = false;
4824   bool gave_void_only_once_err = false;
4825
4826   /* The bindings in this scope must not get put into a block.
4827      We will take care of deleting the binding nodes.  */
4828   current_scope->bindings = 0;
4829
4830   /* This function is only called if there was *something* on the
4831      parameter list.  */
4832 #ifdef ENABLE_CHECKING
4833   if (b == 0)
4834     abort ();
4835 #endif
4836
4837   /* A parameter list consisting solely of 'void' indicates that the
4838      function takes no arguments.  But if the 'void' is qualified
4839      (by 'const' or 'volatile'), or has a storage class specifier
4840      ('register'), then the behavior is undefined; issue an error.
4841      Typedefs for 'void' are OK (see DR#157).  */
4842   if (b->prev == 0                          /* one binding */
4843       && TREE_CODE (b->decl) == PARM_DECL   /* which is a parameter */
4844       && !DECL_NAME (b->decl)               /* anonymous */
4845       && VOID_TYPE_P (TREE_TYPE (b->decl))) /* of void type */
4846     {
4847       if (TREE_THIS_VOLATILE (b->decl)
4848           || TREE_READONLY (b->decl)
4849           || C_DECL_REGISTER (b->decl))
4850         error ("'void' as only parameter may not be qualified");
4851
4852       /* There cannot be an ellipsis.  */
4853       if (ellipsis)
4854         error ("'void' must be the only parameter");
4855
4856       ARG_INFO_TYPES (arg_info) = void_list_node;
4857       return arg_info;
4858     }
4859
4860   if (!ellipsis)
4861     types = void_list_node;
4862
4863   /* Break up the bindings list into parms, tags, types, and others;
4864      apply sanity checks; purge the name-to-decl bindings.  */
4865   while (b)
4866     {
4867       tree decl = b->decl;
4868       tree type = TREE_TYPE (decl);
4869       const char *keyword;
4870
4871       switch (TREE_CODE (decl))
4872         {
4873         case PARM_DECL:
4874           if (b->id)
4875             {
4876 #ifdef ENABLE_CHECKING
4877               if (I_SYMBOL_BINDING (b->id) != b) abort ();
4878 #endif
4879               I_SYMBOL_BINDING (b->id) = b->shadowed;
4880             }
4881
4882           /* Check for forward decls that never got their actual decl.  */
4883           if (TREE_ASM_WRITTEN (decl))
4884             error ("%Jparameter '%D' has just a forward declaration",
4885                    decl, decl);
4886           /* Check for (..., void, ...) and issue an error.  */
4887           else if (VOID_TYPE_P (type) && !DECL_NAME (decl))
4888             {
4889               if (!gave_void_only_once_err)
4890                 {
4891                   error ("'void' must be the only parameter");
4892                   gave_void_only_once_err = true;
4893                 }
4894             }
4895           else
4896             {
4897               /* Valid parameter, add it to the list.  */
4898               TREE_CHAIN (decl) = parms;
4899               parms = decl;
4900
4901               /* Since there is a prototype, args are passed in their
4902                  declared types.  The back end may override this later.  */
4903               DECL_ARG_TYPE (decl) = type;
4904               types = tree_cons (0, type, types);
4905             }
4906           break;
4907
4908         case ENUMERAL_TYPE: keyword = "enum"; goto tag;
4909         case UNION_TYPE:    keyword = "union"; goto tag;
4910         case RECORD_TYPE:   keyword = "struct"; goto tag;
4911         tag:
4912           /* Types may not have tag-names, in which case the type
4913              appears in the bindings list with b->id NULL.  */
4914           if (b->id)
4915             {
4916 #ifdef ENABLE_CHECKING
4917               if (I_TAG_BINDING (b->id) != b) abort ();
4918 #endif
4919               I_TAG_BINDING (b->id) = b->shadowed;
4920             }
4921
4922           /* Warn about any struct, union or enum tags defined in a
4923              parameter list.  The scope of such types is limited to
4924              the parameter list, which is rarely if ever desirable
4925              (it's impossible to call such a function with type-
4926              correct arguments).  An anonymous union parm type is
4927              meaningful as a GNU extension, so don't warn for that.  */
4928           if (TREE_CODE (decl) != UNION_TYPE || b->id != 0)
4929             {
4930               if (b->id)
4931                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
4932                 warning ("'%s %E' declared inside parameter list",
4933                          keyword, b->id);
4934               else
4935                 /* The %s will be one of 'struct', 'union', or 'enum'.  */
4936                 warning ("anonymous %s declared inside parameter list",
4937                          keyword);
4938
4939               if (! explained_incomplete_types)
4940                 {
4941                   warning ("its scope is only this definition or declaration,"
4942                            " which is probably not what you want");
4943                   explained_incomplete_types = true;
4944                 }
4945             }
4946
4947           tags = tree_cons (b->id, decl, tags);
4948           break;
4949
4950         case CONST_DECL:
4951         case TYPE_DECL:
4952           /* CONST_DECLs appear here when we have an embedded enum,
4953              and TYPE_DECLs appear here when we have an embedded struct
4954              or union.  No warnings for this - we already warned about the
4955              type itself.  */
4956           TREE_CHAIN (decl) = others;
4957           others = decl;
4958           /* fall through */
4959
4960         case ERROR_MARK:
4961           /* error_mark_node appears here when we have an undeclared
4962              variable.  Just throw it away.  */
4963           if (b->id)
4964             {
4965 #ifdef ENABLE_CHECKING
4966               if (I_SYMBOL_BINDING (b->id) != b) abort ();
4967 #endif
4968               I_SYMBOL_BINDING (b->id) = b->shadowed;
4969             }
4970           break;
4971
4972           /* Other things that might be encountered.  */
4973         case LABEL_DECL:
4974         case FUNCTION_DECL:
4975         case VAR_DECL:
4976         default:
4977           abort ();
4978         }
4979
4980       b = free_binding_and_advance (b);
4981     }
4982
4983   ARG_INFO_PARMS  (arg_info) = parms;
4984   ARG_INFO_TAGS   (arg_info) = tags;
4985   ARG_INFO_TYPES  (arg_info) = types;
4986   ARG_INFO_OTHERS (arg_info) = others;
4987   return arg_info;
4988 }
4989 \f
4990 /* Get the struct, enum or union (CODE says which) with tag NAME.
4991    Define the tag as a forward-reference if it is not defined.  */
4992
4993 tree
4994 xref_tag (enum tree_code code, tree name)
4995 {
4996   /* If a cross reference is requested, look up the type
4997      already defined for this tag and return it.  */
4998
4999   tree ref = lookup_tag (code, name, 0);
5000   /* If this is the right type of tag, return what we found.
5001      (This reference will be shadowed by shadow_tag later if appropriate.)
5002      If this is the wrong type of tag, do not return it.  If it was the
5003      wrong type in the same scope, we will have had an error
5004      message already; if in a different scope and declaring
5005      a name, pending_xref_error will give an error message; but if in a
5006      different scope and not declaring a name, this tag should
5007      shadow the previous declaration of a different type of tag, and
5008      this would not work properly if we return the reference found.
5009      (For example, with "struct foo" in an outer scope, "union foo;"
5010      must shadow that tag with a new one of union type.)  */
5011   if (ref && TREE_CODE (ref) == code)
5012     return ref;
5013
5014   /* If no such tag is yet defined, create a forward-reference node
5015      and record it as the "definition".
5016      When a real declaration of this type is found,
5017      the forward-reference will be altered into a real type.  */
5018
5019   ref = make_node (code);
5020   if (code == ENUMERAL_TYPE)
5021     {
5022       /* Give the type a default layout like unsigned int
5023          to avoid crashing if it does not get defined.  */
5024       TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
5025       TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
5026       TYPE_USER_ALIGN (ref) = 0;
5027       TYPE_UNSIGNED (ref) = 1;
5028       TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
5029       TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
5030       TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
5031     }
5032
5033   pushtag (name, ref);
5034
5035   return ref;
5036 }
5037 \f
5038 /* Make sure that the tag NAME is defined *in the current scope*
5039    at least as a forward reference.
5040    CODE says which kind of tag NAME ought to be.  */
5041
5042 tree
5043 start_struct (enum tree_code code, tree name)
5044 {
5045   /* If there is already a tag defined at this scope
5046      (as a forward reference), just return it.  */
5047
5048   tree ref = 0;
5049
5050   if (name != 0)
5051     ref = lookup_tag (code, name, 1);
5052   if (ref && TREE_CODE (ref) == code)
5053     {
5054       if (TYPE_FIELDS (ref))
5055         {
5056           if (code == UNION_TYPE)
5057             error ("redefinition of `union %s'", IDENTIFIER_POINTER (name));
5058           else
5059             error ("redefinition of `struct %s'", IDENTIFIER_POINTER (name));
5060         }
5061     }
5062   else
5063     {
5064       /* Otherwise create a forward-reference just so the tag is in scope.  */
5065
5066       ref = make_node (code);
5067       pushtag (name, ref);
5068     }
5069
5070   C_TYPE_BEING_DEFINED (ref) = 1;
5071   TYPE_PACKED (ref) = flag_pack_struct;
5072   return ref;
5073 }
5074
5075 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
5076    of a structure component, returning a FIELD_DECL node.
5077    WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5078
5079    This is done during the parsing of the struct declaration.
5080    The FIELD_DECL nodes are chained together and the lot of them
5081    are ultimately passed to `build_struct' to make the RECORD_TYPE node.  */
5082
5083 tree
5084 grokfield (tree declarator, tree declspecs, tree width)
5085 {
5086   tree value;
5087
5088   if (declarator == NULL_TREE && width == NULL_TREE)
5089     {
5090       /* This is an unnamed decl.
5091
5092          If we have something of the form "union { list } ;" then this
5093          is the anonymous union extension.  Similarly for struct.
5094
5095          If this is something of the form "struct foo;", then
5096            If MS extensions are enabled, this is handled as an
5097              anonymous struct.
5098            Otherwise this is a forward declaration of a structure tag.
5099
5100          If this is something of the form "foo;" and foo is a TYPE_DECL, then
5101            If MS extensions are enabled and foo names a structure, then
5102              again this is an anonymous struct.
5103            Otherwise this is an error.
5104
5105          Oh what a horrid tangled web we weave.  I wonder if MS consciously
5106          took this from Plan 9 or if it was an accident of implementation
5107          that took root before someone noticed the bug...  */
5108
5109       tree type = TREE_VALUE (declspecs);
5110
5111       if (flag_ms_extensions && TREE_CODE (type) == TYPE_DECL)
5112         type = TREE_TYPE (type);
5113       if (TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE)
5114         {
5115           if (flag_ms_extensions)
5116             ; /* ok */
5117           else if (flag_iso)
5118             goto warn_unnamed_field;
5119           else if (TYPE_NAME (type) == NULL)
5120             ; /* ok */
5121           else
5122             goto warn_unnamed_field;
5123         }
5124       else
5125         {
5126         warn_unnamed_field:
5127           warning ("declaration does not declare anything");
5128           return NULL_TREE;
5129         }
5130     }
5131
5132   value = grokdeclarator (declarator, declspecs, FIELD, 0,
5133                           width ? &width : NULL);
5134
5135   finish_decl (value, NULL_TREE, NULL_TREE);
5136   DECL_INITIAL (value) = width;
5137
5138   return value;
5139 }
5140 \f
5141 /* Generate an error for any duplicate field names in FIELDLIST.  Munge
5142    the list such that this does not present a problem later.  */
5143
5144 static void
5145 detect_field_duplicates (tree fieldlist)
5146 {
5147   tree x, y;
5148   int timeout = 10;
5149
5150   /* First, see if there are more than "a few" fields.
5151      This is trivially true if there are zero or one fields.  */
5152   if (!fieldlist)
5153     return;
5154   x = TREE_CHAIN (fieldlist);
5155   if (!x)
5156     return;
5157   do {
5158     timeout--;
5159     x = TREE_CHAIN (x);
5160   } while (timeout > 0 && x);
5161
5162   /* If there were "few" fields, avoid the overhead of allocating
5163      a hash table.  Instead just do the nested traversal thing.  */
5164   if (timeout > 0)
5165     {
5166       for (x = TREE_CHAIN (fieldlist); x ; x = TREE_CHAIN (x))
5167         if (DECL_NAME (x))
5168           {
5169             for (y = fieldlist; y != x; y = TREE_CHAIN (y))
5170               if (DECL_NAME (y) == DECL_NAME (x))
5171                 {
5172                   error ("%Jduplicate member '%D'", x, x);
5173                   DECL_NAME (x) = NULL_TREE;
5174                 }
5175           }
5176     }
5177   else
5178     {
5179       htab_t htab = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
5180       void **slot;
5181
5182       for (x = fieldlist; x ; x = TREE_CHAIN (x))
5183         if ((y = DECL_NAME (x)) != 0)
5184           {
5185             slot = htab_find_slot (htab, y, INSERT);
5186             if (*slot)
5187               {
5188                 error ("%Jduplicate member '%D'", x, x);
5189                 DECL_NAME (x) = NULL_TREE;
5190               }
5191             *slot = y;
5192           }
5193
5194       htab_delete (htab);
5195     }
5196 }
5197
5198 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5199    FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5200    ATTRIBUTES are attributes to be applied to the structure.  */
5201
5202 tree
5203 finish_struct (tree t, tree fieldlist, tree attributes)
5204 {
5205   tree x;
5206   bool toplevel = file_scope == current_scope;
5207   int saw_named_field;
5208
5209   /* If this type was previously laid out as a forward reference,
5210      make sure we lay it out again.  */
5211
5212   TYPE_SIZE (t) = 0;
5213
5214   decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5215
5216   if (pedantic)
5217     {
5218       for (x = fieldlist; x; x = TREE_CHAIN (x))
5219         if (DECL_NAME (x) != 0)
5220           break;
5221
5222       if (x == 0)
5223         pedwarn ("%s has no %s",
5224                  TREE_CODE (t) == UNION_TYPE ? _("union") : _("struct"),
5225                  fieldlist ? _("named members") : _("members"));
5226     }
5227
5228   /* Install struct as DECL_CONTEXT of each field decl.
5229      Also process specified field sizes, found in the DECL_INITIAL,
5230      storing 0 there after the type has been changed to precision equal
5231      to its width, rather than the precision of the specified standard
5232      type.  (Correct layout requires the original type to have been preserved
5233      until now.)  */
5234
5235   saw_named_field = 0;
5236   for (x = fieldlist; x; x = TREE_CHAIN (x))
5237     {
5238       DECL_CONTEXT (x) = t;
5239       DECL_PACKED (x) |= TYPE_PACKED (t);
5240
5241       /* If any field is const, the structure type is pseudo-const.  */
5242       if (TREE_READONLY (x))
5243         C_TYPE_FIELDS_READONLY (t) = 1;
5244       else
5245         {
5246           /* A field that is pseudo-const makes the structure likewise.  */
5247           tree t1 = TREE_TYPE (x);
5248           while (TREE_CODE (t1) == ARRAY_TYPE)
5249             t1 = TREE_TYPE (t1);
5250           if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5251               && C_TYPE_FIELDS_READONLY (t1))
5252             C_TYPE_FIELDS_READONLY (t) = 1;
5253         }
5254
5255       /* Any field that is volatile means variables of this type must be
5256          treated in some ways as volatile.  */
5257       if (TREE_THIS_VOLATILE (x))
5258         C_TYPE_FIELDS_VOLATILE (t) = 1;
5259
5260       /* Any field of nominal variable size implies structure is too.  */
5261       if (C_DECL_VARIABLE_SIZE (x))
5262         C_TYPE_VARIABLE_SIZE (t) = 1;
5263
5264       /* Detect invalid nested redefinition.  */
5265       if (TREE_TYPE (x) == t)
5266         error ("nested redefinition of `%s'",
5267                IDENTIFIER_POINTER (TYPE_NAME (t)));
5268
5269       if (DECL_INITIAL (x))
5270         {
5271           unsigned HOST_WIDE_INT width = tree_low_cst (DECL_INITIAL (x), 1);
5272           DECL_SIZE (x) = bitsize_int (width);
5273           DECL_BIT_FIELD (x) = 1;
5274           SET_DECL_C_BIT_FIELD (x);
5275         }
5276
5277       /* Detect flexible array member in an invalid context.  */
5278       if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5279           && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5280           && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5281           && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5282         {
5283           if (TREE_CODE (t) == UNION_TYPE)
5284             {
5285               error ("%Jflexible array member in union", x);
5286               TREE_TYPE (x) = error_mark_node;
5287             }
5288           else if (TREE_CHAIN (x) != NULL_TREE)
5289             {
5290               error ("%Jflexible array member not at end of struct", x);
5291               TREE_TYPE (x) = error_mark_node;
5292             }
5293           else if (! saw_named_field)
5294             {
5295               error ("%Jflexible array member in otherwise empty struct", x);
5296               TREE_TYPE (x) = error_mark_node;
5297             }
5298         }
5299
5300       if (pedantic && !in_system_header && TREE_CODE (t) == RECORD_TYPE
5301           && flexible_array_type_p (TREE_TYPE (x)))
5302         pedwarn ("%Jinvalid use of structure with flexible array member", x);
5303
5304       if (DECL_NAME (x))
5305         saw_named_field = 1;
5306     }
5307
5308   detect_field_duplicates (fieldlist);
5309
5310   /* Now we have the nearly final fieldlist.  Record it,
5311      then lay out the structure or union (including the fields).  */
5312
5313   TYPE_FIELDS (t) = fieldlist;
5314
5315   layout_type (t);
5316
5317   /* Give bit-fields their proper types.  */
5318   {
5319     tree *fieldlistp = &fieldlist;
5320     while (*fieldlistp)
5321       if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp)
5322           && TREE_TYPE (*fieldlistp) != error_mark_node)
5323         {
5324           unsigned HOST_WIDE_INT width
5325             = tree_low_cst (DECL_INITIAL (*fieldlistp), 1);
5326           tree type = TREE_TYPE (*fieldlistp);
5327           if (width != TYPE_PRECISION (type))
5328             TREE_TYPE (*fieldlistp)
5329               = build_nonstandard_integer_type (width, TYPE_UNSIGNED (type));
5330           DECL_INITIAL (*fieldlistp) = 0;
5331         }
5332       else
5333         fieldlistp = &TREE_CHAIN (*fieldlistp);
5334   }
5335
5336   /* Now we have the truly final field list.
5337      Store it in this type and in the variants.  */
5338
5339   TYPE_FIELDS (t) = fieldlist;
5340
5341   /* If there are lots of fields, sort so we can look through them fast.
5342      We arbitrarily consider 16 or more elts to be "a lot".  */
5343
5344   {
5345     int len = 0;
5346
5347     for (x = fieldlist; x; x = TREE_CHAIN (x))
5348       {
5349         if (len > 15 || DECL_NAME (x) == NULL)
5350           break;
5351         len += 1;
5352       }
5353
5354     if (len > 15)
5355       {
5356         tree *field_array;
5357         struct lang_type *space;
5358         struct sorted_fields_type *space2;
5359
5360         len += list_length (x);
5361
5362         /* Use the same allocation policy here that make_node uses, to
5363           ensure that this lives as long as the rest of the struct decl.
5364           All decls in an inline function need to be saved.  */
5365
5366         space = GGC_CNEW (struct lang_type);
5367         space2 = GGC_NEWVAR (struct sorted_fields_type,
5368                              sizeof (struct sorted_fields_type) + len * sizeof (tree));
5369
5370         len = 0;
5371         space->s = space2;
5372         field_array = &space2->elts[0];
5373         for (x = fieldlist; x; x = TREE_CHAIN (x))
5374           {
5375             field_array[len++] = x;
5376
5377             /* If there is anonymous struct or union, break out of the loop.  */
5378             if (DECL_NAME (x) == NULL)
5379               break;
5380           }
5381         /* Found no anonymous struct/union.  Add the TYPE_LANG_SPECIFIC.  */
5382         if (x == NULL)
5383           {
5384             TYPE_LANG_SPECIFIC (t) = space;
5385             TYPE_LANG_SPECIFIC (t)->s->len = len;
5386             field_array = TYPE_LANG_SPECIFIC (t)->s->elts;
5387             qsort (field_array, len, sizeof (tree), field_decl_cmp);
5388           }
5389       }
5390   }
5391
5392   for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5393     {
5394       TYPE_FIELDS (x) = TYPE_FIELDS (t);
5395       TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5396       TYPE_ALIGN (x) = TYPE_ALIGN (t);
5397       TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t);
5398     }
5399
5400   /* If this was supposed to be a transparent union, but we can't
5401      make it one, warn and turn off the flag.  */
5402   if (TREE_CODE (t) == UNION_TYPE
5403       && TYPE_TRANSPARENT_UNION (t)
5404       && TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))
5405     {
5406       TYPE_TRANSPARENT_UNION (t) = 0;
5407       warning ("union cannot be made transparent");
5408     }
5409
5410   /* If this structure or union completes the type of any previous
5411      variable declaration, lay it out and output its rtl.  */
5412   for (x = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
5413        x;
5414        x = TREE_CHAIN (x))
5415     {
5416       tree decl = TREE_VALUE (x);
5417       if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5418         layout_array_type (TREE_TYPE (decl));
5419       if (TREE_CODE (decl) != TYPE_DECL)
5420         {
5421           layout_decl (decl, 0);
5422           if (c_dialect_objc ())
5423             objc_check_decl (decl);
5424           rest_of_decl_compilation (decl, toplevel, 0);
5425           if (! toplevel)
5426             expand_decl (decl);
5427         }
5428     }
5429   C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
5430
5431   /* Finish debugging output for this type.  */
5432   rest_of_type_compilation (t, toplevel);
5433
5434   return t;
5435 }
5436
5437 /* Lay out the type T, and its element type, and so on.  */
5438
5439 static void
5440 layout_array_type (tree t)
5441 {
5442   if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5443     layout_array_type (TREE_TYPE (t));
5444   layout_type (t);
5445 }
5446 \f
5447 /* Begin compiling the definition of an enumeration type.
5448    NAME is its name (or null if anonymous).
5449    Returns the type object, as yet incomplete.
5450    Also records info about it so that build_enumerator
5451    may be used to declare the individual values as they are read.  */
5452
5453 tree
5454 start_enum (tree name)
5455 {
5456   tree enumtype = 0;
5457
5458   /* If this is the real definition for a previous forward reference,
5459      fill in the contents in the same object that used to be the
5460      forward reference.  */
5461
5462   if (name != 0)
5463     enumtype = lookup_tag (ENUMERAL_TYPE, name, 1);
5464
5465   if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5466     {
5467       enumtype = make_node (ENUMERAL_TYPE);
5468       pushtag (name, enumtype);
5469     }
5470
5471   C_TYPE_BEING_DEFINED (enumtype) = 1;
5472
5473   if (TYPE_VALUES (enumtype) != 0)
5474     {
5475       /* This enum is a named one that has been declared already.  */
5476       error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
5477
5478       /* Completely replace its old definition.
5479          The old enumerators remain defined, however.  */
5480       TYPE_VALUES (enumtype) = 0;
5481     }
5482
5483   enum_next_value = integer_zero_node;
5484   enum_overflow = 0;
5485
5486   if (flag_short_enums)
5487     TYPE_PACKED (enumtype) = 1;
5488
5489   return enumtype;
5490 }
5491
5492 /* After processing and defining all the values of an enumeration type,
5493    install their decls in the enumeration type and finish it off.
5494    ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5495    and ATTRIBUTES are the specified attributes.
5496    Returns ENUMTYPE.  */
5497
5498 tree
5499 finish_enum (tree enumtype, tree values, tree attributes)
5500 {
5501   tree pair, tem;
5502   tree minnode = 0, maxnode = 0;
5503   int precision, unsign;
5504   bool toplevel = (file_scope == current_scope);
5505   struct lang_type *lt;
5506
5507   decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5508
5509   /* Calculate the maximum value of any enumerator in this type.  */
5510
5511   if (values == error_mark_node)
5512     minnode = maxnode = integer_zero_node;
5513   else
5514     {
5515       minnode = maxnode = TREE_VALUE (values);
5516       for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5517         {
5518           tree value = TREE_VALUE (pair);
5519           if (tree_int_cst_lt (maxnode, value))
5520             maxnode = value;
5521           if (tree_int_cst_lt (value, minnode))
5522             minnode = value;
5523         }
5524     }
5525
5526   /* Construct the final type of this enumeration.  It is the same
5527      as one of the integral types - the narrowest one that fits, except
5528      that normally we only go as narrow as int - and signed iff any of
5529      the values are negative.  */
5530   unsign = (tree_int_cst_sgn (minnode) >= 0);
5531   precision = MAX (min_precision (minnode, unsign),
5532                    min_precision (maxnode, unsign));
5533   if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5534     {
5535       tem = c_common_type_for_size (precision, unsign);
5536       if (tem == NULL)
5537         {
5538           warning ("enumeration values exceed range of largest integer");
5539           tem = long_long_integer_type_node;
5540         }
5541     }
5542   else
5543     tem = unsign ? unsigned_type_node : integer_type_node;
5544
5545   TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (tem);
5546   TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (tem);
5547   TYPE_PRECISION (enumtype) = TYPE_PRECISION (tem);
5548   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (tem);
5549   TYPE_SIZE (enumtype) = 0;
5550   layout_type (enumtype);
5551
5552   if (values != error_mark_node)
5553     {
5554       /* Change the type of the enumerators to be the enum type.  We
5555          need to do this irrespective of the size of the enum, for
5556          proper type checking.  Replace the DECL_INITIALs of the
5557          enumerators, and the value slots of the list, with copies
5558          that have the enum type; they cannot be modified in place
5559          because they may be shared (e.g.  integer_zero_node) Finally,
5560          change the purpose slots to point to the names of the decls.  */
5561       for (pair = values; pair; pair = TREE_CHAIN (pair))
5562         {
5563           tree enu = TREE_PURPOSE (pair);
5564           tree ini = DECL_INITIAL (enu);
5565
5566           TREE_TYPE (enu) = enumtype;
5567
5568           /* The ISO C Standard mandates enumerators to have type int,
5569              even though the underlying type of an enum type is
5570              unspecified.  Here we convert any enumerators that fit in
5571              an int to type int, to avoid promotions to unsigned types
5572              when comparing integers with enumerators that fit in the
5573              int range.  When -pedantic is given, build_enumerator()
5574              would have already taken care of those that don't fit.  */
5575           if (int_fits_type_p (ini, integer_type_node))
5576             tem = integer_type_node;
5577           else
5578             tem = enumtype;
5579           ini = convert (tem, ini);
5580
5581           DECL_INITIAL (enu) = ini;
5582           TREE_PURPOSE (pair) = DECL_NAME (enu);
5583           TREE_VALUE (pair) = ini;
5584         }
5585
5586       TYPE_VALUES (enumtype) = values;
5587     }
5588
5589   /* Record the min/max values so that we can warn about bit-field
5590      enumerations that are too small for the values.  */
5591   lt = GGC_CNEW (struct lang_type);
5592   lt->enum_min = minnode;
5593   lt->enum_max = maxnode;
5594   TYPE_LANG_SPECIFIC (enumtype) = lt;
5595
5596   /* Fix up all variant types of this enum type.  */
5597   for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5598     {
5599       if (tem == enumtype)
5600         continue;
5601       TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5602       TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5603       TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5604       TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5605       TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5606       TYPE_MODE (tem) = TYPE_MODE (enumtype);
5607       TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5608       TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5609       TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5610       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
5611       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
5612     }
5613
5614   /* Finish debugging output for this type.  */
5615   rest_of_type_compilation (enumtype, toplevel);
5616
5617   return enumtype;
5618 }
5619
5620 /* Build and install a CONST_DECL for one value of the
5621    current enumeration type (one that was begun with start_enum).
5622    Return a tree-list containing the CONST_DECL and its value.
5623    Assignment of sequential values by default is handled here.  */
5624
5625 tree
5626 build_enumerator (tree name, tree value)
5627 {
5628   tree decl, type;
5629
5630   /* Validate and default VALUE.  */
5631
5632   /* Remove no-op casts from the value.  */
5633   if (value)
5634     STRIP_TYPE_NOPS (value);
5635
5636   if (value != 0)
5637     {
5638       /* Don't issue more errors for error_mark_node (i.e. an
5639          undeclared identifier) - just ignore the value expression.  */
5640       if (value == error_mark_node)
5641         value = 0;
5642       else if (TREE_CODE (value) != INTEGER_CST)
5643         {
5644           error ("enumerator value for '%E' is not an integer constant", name);
5645           value = 0;
5646         }
5647       else
5648         {
5649           value = default_conversion (value);
5650           constant_expression_warning (value);
5651         }
5652     }
5653
5654   /* Default based on previous value.  */
5655   /* It should no longer be possible to have NON_LVALUE_EXPR
5656      in the default.  */
5657   if (value == 0)
5658     {
5659       value = enum_next_value;
5660       if (enum_overflow)
5661         error ("overflow in enumeration values");
5662     }
5663
5664   if (pedantic && ! int_fits_type_p (value, integer_type_node))
5665     {
5666       pedwarn ("ISO C restricts enumerator values to range of `int'");
5667       /* XXX This causes -pedantic to change the meaning of the program.
5668          Remove?  -zw 2004-03-15  */
5669       value = convert (integer_type_node, value);
5670     }
5671
5672   /* Set basis for default for next value.  */
5673   enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5674   enum_overflow = tree_int_cst_lt (enum_next_value, value);
5675
5676   /* Now create a declaration for the enum value name.  */
5677
5678   type = TREE_TYPE (value);
5679   type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
5680                                       TYPE_PRECISION (integer_type_node)),
5681                                  (TYPE_PRECISION (type)
5682                                   >= TYPE_PRECISION (integer_type_node)
5683                                   && TYPE_UNSIGNED (type)));
5684
5685   decl = build_decl (CONST_DECL, name, type);
5686   DECL_INITIAL (decl) = convert (type, value);
5687   pushdecl (decl);
5688
5689   return tree_cons (decl, value, NULL_TREE);
5690 }
5691
5692 \f
5693 /* Create the FUNCTION_DECL for a function definition.
5694    DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
5695    the declaration; they describe the function's name and the type it returns,
5696    but twisted together in a fashion that parallels the syntax of C.
5697
5698    This function creates a binding context for the function body
5699    as well as setting up the FUNCTION_DECL in current_function_decl.
5700
5701    Returns 1 on success.  If the DECLARATOR is not suitable for a function
5702    (it defines a datum instead), we return 0, which tells
5703    yyparse to report a parse error.  */
5704
5705 int
5706 start_function (tree declspecs, tree declarator, tree attributes)
5707 {
5708   tree decl1, old_decl;
5709   tree restype, resdecl;
5710
5711   current_function_returns_value = 0;  /* Assume, until we see it does.  */
5712   current_function_returns_null = 0;
5713   current_function_returns_abnormally = 0;
5714   warn_about_return_type = 0;
5715   current_extern_inline = 0;
5716   c_switch_stack = NULL;
5717
5718   /* Indicate no valid break/continue context by setting these variables
5719      to some non-null, non-label value.  We'll notice and emit the proper
5720      error message in c_finish_bc_stmt.  */
5721   c_break_label = c_cont_label = size_zero_node;
5722
5723   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, NULL);
5724
5725   /* If the declarator is not suitable for a function definition,
5726      cause a syntax error.  */
5727   if (decl1 == 0)
5728     return 0;
5729
5730   decl_attributes (&decl1, attributes, 0);
5731
5732   if (DECL_DECLARED_INLINE_P (decl1)
5733       && DECL_UNINLINABLE (decl1)
5734       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
5735     warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
5736
5737   announce_function (decl1);
5738
5739   if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
5740     {
5741       error ("return type is an incomplete type");
5742       /* Make it return void instead.  */
5743       TREE_TYPE (decl1)
5744         = build_function_type (void_type_node,
5745                                TYPE_ARG_TYPES (TREE_TYPE (decl1)));
5746     }
5747
5748   if (warn_about_return_type)
5749     pedwarn_c99 ("return type defaults to `int'");
5750
5751   /* Make the init_value nonzero so pushdecl knows this is not tentative.
5752      error_mark_node is replaced below (in pop_scope) with the BLOCK.  */
5753   DECL_INITIAL (decl1) = error_mark_node;
5754
5755   /* If this definition isn't a prototype and we had a prototype declaration
5756      before, copy the arg type info from that prototype.
5757      But not if what we had before was a builtin function.  */
5758   old_decl = lookup_name_in_scope (DECL_NAME (decl1), current_scope);
5759   if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
5760       && !DECL_BUILT_IN (old_decl)
5761       && comptypes (TREE_TYPE (TREE_TYPE (decl1)),
5762                     TREE_TYPE (TREE_TYPE (old_decl)))
5763       && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
5764     {
5765       TREE_TYPE (decl1) = composite_type (TREE_TYPE (old_decl),
5766                                           TREE_TYPE (decl1));
5767       current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl);
5768     }
5769
5770   /* Optionally warn of old-fashioned def with no previous prototype.  */
5771   if (warn_strict_prototypes
5772       && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
5773       && C_DECL_ISNT_PROTOTYPE (old_decl))
5774     warning ("function declaration isn't a prototype");
5775   /* Optionally warn of any global def with no previous prototype.  */
5776   else if (warn_missing_prototypes
5777            && TREE_PUBLIC (decl1)
5778            && ! MAIN_NAME_P (DECL_NAME (decl1))
5779            && C_DECL_ISNT_PROTOTYPE (old_decl))
5780     warning ("%Jno previous prototype for '%D'", decl1, decl1);
5781   /* Optionally warn of any def with no previous prototype
5782      if the function has already been used.  */
5783   else if (warn_missing_prototypes
5784            && old_decl != 0 && TREE_USED (old_decl)
5785            && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
5786     warning ("%J'%D' was used with no prototype before its definition",
5787              decl1, decl1);
5788   /* Optionally warn of any global def with no previous declaration.  */
5789   else if (warn_missing_declarations
5790            && TREE_PUBLIC (decl1)
5791            && old_decl == 0
5792            && ! MAIN_NAME_P (DECL_NAME (decl1)))
5793     warning ("%Jno previous declaration for '%D'", decl1, decl1);
5794   /* Optionally warn of any def with no previous declaration
5795      if the function has already been used.  */
5796   else if (warn_missing_declarations
5797            && old_decl != 0 && TREE_USED (old_decl)
5798            && C_DECL_IMPLICIT (old_decl))
5799     warning ("%J`%D' was used with no declaration before its definition",
5800              decl1, decl1);
5801
5802   /* This is a definition, not a reference.
5803      So normally clear DECL_EXTERNAL.
5804      However, `extern inline' acts like a declaration
5805      except for defining how to inline.  So set DECL_EXTERNAL in that case.  */
5806   DECL_EXTERNAL (decl1) = current_extern_inline;
5807
5808   /* This function exists in static storage.
5809      (This does not mean `static' in the C sense!)  */
5810   TREE_STATIC (decl1) = 1;
5811
5812   /* A nested function is not global.  */
5813   if (current_function_decl != 0)
5814     TREE_PUBLIC (decl1) = 0;
5815
5816 #ifdef ENABLE_CHECKING
5817   /* This is the earliest point at which we might know the assembler
5818      name of the function.  Thus, if it's set before this, die horribly.  */
5819   if (DECL_ASSEMBLER_NAME_SET_P (decl1))
5820     abort ();
5821 #endif
5822
5823   /* If #pragma weak was used, mark the decl weak now.  */
5824   if (current_scope == file_scope)
5825     maybe_apply_pragma_weak (decl1);
5826
5827   /* Warn for unlikely, improbable, or stupid declarations of `main'.  */
5828   if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
5829     {
5830       tree args;
5831       int argct = 0;
5832
5833       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
5834           != integer_type_node)
5835         pedwarn ("%Jreturn type of '%D' is not `int'", decl1, decl1);
5836
5837       for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
5838            args = TREE_CHAIN (args))
5839         {
5840           tree type = args ? TREE_VALUE (args) : 0;
5841
5842           if (type == void_type_node)
5843             break;
5844
5845           ++argct;
5846           switch (argct)
5847             {
5848             case 1:
5849               if (TYPE_MAIN_VARIANT (type) != integer_type_node)
5850                 pedwarn ("%Jfirst argument of '%D' should be `int'",
5851                          decl1, decl1);
5852               break;
5853
5854             case 2:
5855               if (TREE_CODE (type) != POINTER_TYPE
5856                   || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5857                   || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5858                       != char_type_node))
5859                 pedwarn ("%Jsecond argument of '%D' should be 'char **'",
5860                          decl1, decl1);
5861               break;
5862
5863             case 3:
5864               if (TREE_CODE (type) != POINTER_TYPE
5865                   || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
5866                   || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
5867                       != char_type_node))
5868                 pedwarn ("%Jthird argument of '%D' should probably be "
5869                          "'char **'", decl1, decl1);
5870               break;
5871             }
5872         }
5873
5874       /* It is intentional that this message does not mention the third
5875          argument because it's only mentioned in an appendix of the
5876          standard.  */
5877       if (argct > 0 && (argct < 2 || argct > 3))
5878         pedwarn ("%J'%D' takes only zero or two arguments", decl1, decl1);
5879
5880       if (! TREE_PUBLIC (decl1))
5881         pedwarn ("%J'%D' is normally a non-static function", decl1, decl1);
5882     }
5883
5884   /* Record the decl so that the function name is defined.
5885      If we already have a decl for this name, and it is a FUNCTION_DECL,
5886      use the old decl.  */
5887
5888   current_function_decl = pushdecl (decl1);
5889
5890   push_scope ();
5891   declare_parm_level ();
5892
5893   restype = TREE_TYPE (TREE_TYPE (current_function_decl));
5894   /* Promote the value to int before returning it.  */
5895   if (c_promoting_integer_type_p (restype))
5896     {
5897       /* It retains unsignedness if not really getting wider.  */
5898       if (TYPE_UNSIGNED (restype)
5899           && (TYPE_PRECISION (restype)
5900                   == TYPE_PRECISION (integer_type_node)))
5901         restype = unsigned_type_node;
5902       else
5903         restype = integer_type_node;
5904     }
5905
5906   resdecl = build_decl (RESULT_DECL, NULL_TREE, restype);
5907   DECL_ARTIFICIAL (resdecl) = 1;
5908   DECL_IGNORED_P (resdecl) = 1;
5909   DECL_RESULT (current_function_decl) = resdecl;
5910
5911   start_fname_decls ();
5912
5913   return 1;
5914 }
5915 \f
5916 /* Subroutine of store_parm_decls which handles new-style function
5917    definitions (prototype format). The parms already have decls, so we
5918    need only record them as in effect and complain if any redundant
5919    old-style parm decls were written.  */
5920 static void
5921 store_parm_decls_newstyle (tree fndecl, tree arg_info)
5922 {
5923   tree decl;
5924   tree parms  = ARG_INFO_PARMS  (arg_info);
5925   tree tags   = ARG_INFO_TAGS   (arg_info);
5926   tree others = ARG_INFO_OTHERS (arg_info);
5927
5928   if (current_scope->bindings)
5929     {
5930       error ("%Jold-style parameter declarations in prototyped "
5931              "function definition", fndecl);
5932
5933       /* Get rid of the old-style declarations.  */
5934       pop_scope ();
5935       push_scope ();
5936     }
5937   /* Don't issue this warning for nested functions, and don't issue this
5938      warning if we got here because ARG_INFO_TYPES was error_mark_node
5939      (this happens when a function definition has just an ellipsis in
5940      its parameter list).  */
5941   else if (warn_traditional && !in_system_header && !current_function_scope
5942            && ARG_INFO_TYPES (arg_info) != error_mark_node)
5943     warning ("%Jtraditional C rejects ISO C style function definitions",
5944              fndecl);
5945
5946   /* Now make all the parameter declarations visible in the function body.
5947      We can bypass most of the grunt work of pushdecl.  */
5948   for (decl = parms; decl; decl = TREE_CHAIN (decl))
5949     {
5950       DECL_CONTEXT (decl) = current_function_decl;
5951       if (DECL_NAME (decl))
5952         bind (DECL_NAME (decl), decl, current_scope,
5953               /*invisible=*/false, /*nested=*/false);
5954       else
5955         error ("%Jparameter name omitted", decl);
5956     }
5957
5958   /* Record the parameter list in the function declaration.  */
5959   DECL_ARGUMENTS (fndecl) = parms;
5960
5961   /* Now make all the ancillary declarations visible, likewise.  */
5962   for (decl = others; decl; decl = TREE_CHAIN (decl))
5963     {
5964       DECL_CONTEXT (decl) = current_function_decl;
5965       if (DECL_NAME (decl))
5966         bind (DECL_NAME (decl), decl, current_scope,
5967               /*invisible=*/false, /*nested=*/false);
5968     }
5969
5970   /* And all the tag declarations.  */
5971   for (decl = tags; decl; decl = TREE_CHAIN (decl))
5972     if (TREE_PURPOSE (decl))
5973       bind (TREE_PURPOSE (decl), TREE_VALUE (decl), current_scope,
5974             /*invisible=*/false, /*nested=*/false);
5975 }
5976
5977 /* Subroutine of store_parm_decls which handles old-style function
5978    definitions (separate parameter list and declarations).  */
5979
5980 static void
5981 store_parm_decls_oldstyle (tree fndecl, tree arg_info)
5982 {
5983   struct c_binding *b;
5984   tree parm, decl, last;
5985   tree parmids = ARG_INFO_PARMS (arg_info);
5986
5987   /* We use DECL_WEAK as a flag to show which parameters have been
5988      seen already, since it is not used on PARM_DECL.  */
5989 #ifdef ENABLE_CHECKING
5990   for (b = current_scope->bindings; b; b = b->prev)
5991     if (TREE_CODE (b->decl) == PARM_DECL && DECL_WEAK (b->decl))
5992       abort ();
5993 #endif
5994
5995   if (warn_old_style_definition && !in_system_header)
5996     warning ("%Jold-style function definition", fndecl);
5997
5998   /* Match each formal parameter name with its declaration.  Save each
5999      decl in the appropriate TREE_PURPOSE slot of the parmids chain.  */
6000   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6001     {
6002       if (TREE_VALUE (parm) == 0)
6003         {
6004           error ("%Jparameter name missing from parameter list", fndecl);
6005           TREE_PURPOSE (parm) = 0;
6006           continue;
6007         }
6008
6009       b = I_SYMBOL_BINDING (TREE_VALUE (parm));
6010       if (b && B_IN_CURRENT_SCOPE (b))
6011         {
6012           decl = b->decl;
6013           /* If we got something other than a PARM_DECL it is an error.  */
6014           if (TREE_CODE (decl) != PARM_DECL)
6015             error ("%J'%D' declared as a non-parameter", decl, decl);
6016           /* If the declaration is already marked, we have a duplicate
6017              name.  Complain and ignore the duplicate.  */
6018           else if (DECL_WEAK (decl))
6019             {
6020               error ("%Jmultiple parameters named '%D'", decl, decl);
6021               TREE_PURPOSE (parm) = 0;
6022               continue;
6023             }
6024           /* If the declaration says "void", complain and turn it into
6025              an int.  */
6026           else if (VOID_TYPE_P (TREE_TYPE (decl)))
6027             {
6028               error ("%Jparameter '%D' declared with void type", decl, decl);
6029               TREE_TYPE (decl) = integer_type_node;
6030               DECL_ARG_TYPE (decl) = integer_type_node;
6031               layout_decl (decl, 0);
6032             }
6033         }
6034       /* If no declaration found, default to int.  */
6035       else
6036         {
6037           decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node);
6038           DECL_ARG_TYPE (decl) = TREE_TYPE (decl);
6039           DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl);
6040           pushdecl (decl);
6041
6042           if (flag_isoc99)
6043             pedwarn ("%Jtype of '%D' defaults to 'int'", decl, decl);
6044           else if (extra_warnings)
6045             warning ("%Jtype of '%D' defaults to 'int'", decl, decl);
6046         }
6047
6048       TREE_PURPOSE (parm) = decl;
6049       DECL_WEAK (decl) = 1;
6050     }
6051
6052   /* Now examine the parms chain for incomplete declarations
6053      and declarations with no corresponding names.  */
6054
6055   for (b = current_scope->bindings; b; b = b->prev)
6056     {
6057       parm = b->decl;
6058       if (TREE_CODE (parm) != PARM_DECL)
6059         continue;
6060
6061       if (!COMPLETE_TYPE_P (TREE_TYPE (parm)))
6062         {
6063           error ("%Jparameter '%D' has incomplete type", parm, parm);
6064           TREE_TYPE (parm) = error_mark_node;
6065         }
6066
6067       if (! DECL_WEAK (parm))
6068         {
6069           error ("%Jdeclaration for parameter '%D' but no such parameter",
6070                  parm, parm);
6071
6072           /* Pretend the parameter was not missing.
6073              This gets us to a standard state and minimizes
6074              further error messages.  */
6075           parmids = chainon (parmids, tree_cons (parm, 0, 0));
6076         }
6077     }
6078
6079   /* Chain the declarations together in the order of the list of
6080      names.  Store that chain in the function decl, replacing the
6081      list of names.  Update the current scope to match.  */
6082   DECL_ARGUMENTS (fndecl) = 0;
6083
6084   for (parm = parmids; parm; parm = TREE_CHAIN (parm))
6085     if (TREE_PURPOSE (parm))
6086       break;
6087   if (parm && TREE_PURPOSE (parm))
6088     {
6089       last = TREE_PURPOSE (parm);
6090       DECL_ARGUMENTS (fndecl) = last;
6091       DECL_WEAK (last) = 0;
6092
6093       for (parm = TREE_CHAIN (parm); parm; parm = TREE_CHAIN (parm))
6094         if (TREE_PURPOSE (parm))
6095           {
6096             TREE_CHAIN (last) = TREE_PURPOSE (parm);
6097             last = TREE_PURPOSE (parm);
6098             DECL_WEAK (last) = 0;
6099           }
6100       TREE_CHAIN (last) = 0;
6101     }
6102
6103   /* If there was a previous prototype,
6104      set the DECL_ARG_TYPE of each argument according to
6105      the type previously specified, and report any mismatches.  */
6106
6107   if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6108     {
6109       tree type;
6110       for (parm = DECL_ARGUMENTS (fndecl),
6111              type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6112            parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6113                              != void_type_node));
6114            parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6115         {
6116           if (parm == 0 || type == 0
6117               || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6118             {
6119               error ("number of arguments doesn't match prototype");
6120               error ("%Hprototype declaration",
6121                      &current_function_prototype_locus);
6122               break;
6123             }
6124           /* Type for passing arg must be consistent with that
6125              declared for the arg.  ISO C says we take the unqualified
6126              type for parameters declared with qualified type.  */
6127           if (! comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6128                            TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6129             {
6130               if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6131                   == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6132                 {
6133                   /* Adjust argument to match prototype.  E.g. a previous
6134                      `int foo(float);' prototype causes
6135                      `int foo(x) float x; {...}' to be treated like
6136                      `int foo(float x) {...}'.  This is particularly
6137                      useful for argument types like uid_t.  */
6138                   DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6139
6140                   if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl))
6141                       && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6142                       && TYPE_PRECISION (TREE_TYPE (parm))
6143                       < TYPE_PRECISION (integer_type_node))
6144                     DECL_ARG_TYPE (parm) = integer_type_node;
6145
6146                   if (pedantic)
6147                     {
6148                       pedwarn ("promoted argument '%D' "
6149                                "doesn't match prototype", parm);
6150                       pedwarn ("%Hprototype declaration",
6151                                &current_function_prototype_locus);
6152                     }
6153                 }
6154               else
6155                 {
6156                   error ("argument '%D' doesn't match prototype", parm);
6157                   error ("%Hprototype declaration",
6158                          &current_function_prototype_locus);
6159                 }
6160             }
6161         }
6162       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6163     }
6164
6165   /* Otherwise, create a prototype that would match.  */
6166
6167   else
6168     {
6169       tree actual = 0, last = 0, type;
6170
6171       for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6172         {
6173           type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6174           if (last)
6175             TREE_CHAIN (last) = type;
6176           else
6177             actual = type;
6178           last = type;
6179         }
6180       type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6181       if (last)
6182         TREE_CHAIN (last) = type;
6183       else
6184         actual = type;
6185
6186       /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6187          of the type of this function, but we need to avoid having this
6188          affect the types of other similarly-typed functions, so we must
6189          first force the generation of an identical (but separate) type
6190          node for the relevant function type.  The new node we create
6191          will be a variant of the main variant of the original function
6192          type.  */
6193
6194       TREE_TYPE (fndecl) = build_type_copy (TREE_TYPE (fndecl));
6195
6196       TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6197     }
6198 }
6199
6200 /* Store the parameter declarations into the current function declaration.
6201    This is called after parsing the parameter declarations, before
6202    digesting the body of the function.
6203
6204    For an old-style definition, construct a prototype out of the old-style
6205    parameter declarations and inject it into the function's type.  */
6206
6207 void
6208 store_parm_decls (void)
6209 {
6210   tree fndecl = current_function_decl;
6211
6212   /* The argument information block for FNDECL.  */
6213   tree arg_info = DECL_ARGUMENTS (fndecl);
6214
6215   /* True if this definition is written with a prototype.  Note:
6216      despite C99 6.7.5.3p14, we can *not* treat an empty argument
6217      list in a function definition as equivalent to (void) -- an
6218      empty argument list specifies the function has no parameters,
6219      but only (void) sets up a prototype for future calls.  */
6220   bool proto = ARG_INFO_TYPES (arg_info) != 0;
6221
6222   if (proto)
6223     store_parm_decls_newstyle (fndecl, arg_info);
6224   else
6225     store_parm_decls_oldstyle (fndecl, arg_info);
6226
6227   /* The next call to push_scope will be a function body.  */
6228
6229   next_is_function_body = true;
6230
6231   /* Write a record describing this function definition to the prototypes
6232      file (if requested).  */
6233
6234   gen_aux_info_record (fndecl, 1, 0, proto);
6235
6236   /* Initialize the RTL code for the function.  */
6237   allocate_struct_function (fndecl);
6238
6239   /* Begin the statement tree for this function.  */
6240   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
6241
6242   /* ??? Insert the contents of the pending sizes list into the function
6243      to be evaluated.  This just changes mis-behaviour until assign_parms
6244      phase ordering problems are resolved.  */
6245   {
6246     tree t;
6247     for (t = nreverse (get_pending_sizes ()); t ; t = TREE_CHAIN (t))
6248       add_stmt (TREE_VALUE (t));
6249   }
6250
6251   /* Even though we're inside a function body, we still don't want to
6252      call expand_expr to calculate the size of a variable-sized array.
6253      We haven't necessarily assigned RTL to all variables yet, so it's
6254      not safe to try to expand expressions involving them.  */
6255   cfun->x_dont_save_pending_sizes_p = 1;
6256 }
6257 \f
6258 /* Give FNDECL and all its nested functions to cgraph for compilation.  */
6259
6260 static void
6261 c_finalize (tree fndecl)
6262 {
6263   struct cgraph_node *cgn;
6264
6265   /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
6266   c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
6267
6268   /* ??? Objc emits functions after finalizing the compilation unit.
6269      This should be cleaned up later and this conditional removed.  */
6270   if (cgraph_global_info_ready)
6271     {
6272       c_expand_body (fndecl);
6273       return;
6274     }
6275
6276   /* Finalize all nested functions now.  */
6277   cgn = cgraph_node (fndecl);
6278   for (cgn = cgn->nested; cgn ; cgn = cgn->next_nested)
6279     c_finalize (cgn->decl);
6280
6281   cgraph_finalize_function (fndecl, false);
6282 }
6283
6284 /* Finish up a function declaration and compile that function
6285    all the way to assembler language output.  The free the storage
6286    for the function definition.
6287
6288    This is called after parsing the body of the function definition.  */
6289
6290 void
6291 finish_function (void)
6292 {
6293   tree fndecl = current_function_decl;
6294
6295   if (TREE_CODE (fndecl) == FUNCTION_DECL
6296       && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)))
6297     {
6298       tree args = DECL_ARGUMENTS (fndecl);
6299       for (; args; args = TREE_CHAIN (args))
6300         {
6301           tree type = TREE_TYPE (args);
6302           if (INTEGRAL_TYPE_P (type)
6303               && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
6304             DECL_ARG_TYPE (args) = integer_type_node;
6305         }
6306     }
6307
6308   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6309     BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6310
6311   /* Must mark the RESULT_DECL as being in this function.  */
6312
6313   if (DECL_RESULT (fndecl) && DECL_RESULT (fndecl) != error_mark_node)
6314     DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6315
6316   if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6317     {
6318       if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6319           != integer_type_node)
6320         {
6321           /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6322              If warn_main is -1 (-Wno-main) we don't want to be warned.  */
6323           if (!warn_main)
6324             pedwarn ("%Jreturn type of '%D' is not `int'", fndecl, fndecl);
6325         }
6326       else
6327         {
6328           if (flag_isoc99)
6329             c_finish_return (integer_zero_node);
6330         }
6331     }
6332
6333   /* Tie off the statement tree for this function.  */
6334   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
6335
6336   finish_fname_decls ();
6337
6338   /* Complain if there's just no return statement.  */
6339   if (warn_return_type
6340       && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6341       && !current_function_returns_value && !current_function_returns_null
6342       /* Don't complain if we abort.  */
6343       && !current_function_returns_abnormally
6344       /* Don't warn for main().  */
6345       && !MAIN_NAME_P (DECL_NAME (fndecl))
6346       /* Or if they didn't actually specify a return type.  */
6347       && !C_FUNCTION_IMPLICIT_INT (fndecl)
6348       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
6349          inline function, as we might never be compiled separately.  */
6350       && DECL_INLINE (fndecl))
6351     warning ("no return statement in function returning non-void");
6352
6353   /* With just -Wextra, complain only if function returns both with
6354      and without a value.  */
6355   if (extra_warnings
6356       && current_function_returns_value
6357       && current_function_returns_null)
6358     warning ("this function may return with or without a value");
6359
6360   /* Store the end of the function, so that we get good line number
6361      info for the epilogue.  */
6362   cfun->function_end_locus = input_location;
6363
6364   /* If we don't have ctors/dtors sections, and this is a static
6365      constructor or destructor, it must be recorded now.  */
6366   if (DECL_STATIC_CONSTRUCTOR (fndecl)
6367       && !targetm.have_ctors_dtors)
6368     static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6369   if (DECL_STATIC_DESTRUCTOR (fndecl)
6370       && !targetm.have_ctors_dtors)
6371     static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6372
6373   /* Finalize the ELF visibility for the function.  */
6374   c_determine_visibility (fndecl);
6375
6376   /* Genericize before inlining.  Delay genericizing nested functions
6377      until their parent function is genericized.  Since finalizing
6378      requires GENERIC, delay that as well.  */
6379
6380   if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node)
6381     {
6382       if (!decl_function_context (fndecl))
6383         {
6384           c_genericize (fndecl);
6385           lower_nested_functions (fndecl);
6386           c_finalize (fndecl);
6387         }
6388       else
6389         {
6390           /* Register this function with cgraph just far enough to get it
6391             added to our parent's nested function list.  Handy, since the
6392             C front end doesn't have such a list.  */
6393           (void) cgraph_node (fndecl);
6394         }
6395     }
6396
6397   /* We're leaving the context of this function, so zap cfun.
6398      It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6399      tree_rest_of_compilation.  */
6400   cfun = NULL;
6401   current_function_decl = NULL;
6402 }
6403
6404 /* Generate the RTL for the body of FNDECL.  */
6405
6406 void
6407 c_expand_body (tree fndecl)
6408 {
6409
6410   if (!DECL_INITIAL (fndecl)
6411       || DECL_INITIAL (fndecl) == error_mark_node)
6412     return;
6413
6414   tree_rest_of_compilation (fndecl, false);
6415
6416   if (DECL_STATIC_CONSTRUCTOR (fndecl)
6417       && targetm.have_ctors_dtors)
6418     targetm.asm_out.constructor (XEXP (DECL_RTL (fndecl), 0),
6419                                  DEFAULT_INIT_PRIORITY);
6420   if (DECL_STATIC_DESTRUCTOR (fndecl)
6421       && targetm.have_ctors_dtors)
6422     targetm.asm_out.destructor (XEXP (DECL_RTL (fndecl), 0),
6423                                 DEFAULT_INIT_PRIORITY);
6424 }
6425 \f
6426 /* Check the declarations given in a for-loop for satisfying the C99
6427    constraints.  */
6428 void
6429 check_for_loop_decls (void)
6430 {
6431   struct c_binding *b;
6432
6433   if (!flag_isoc99)
6434     {
6435       /* If we get here, declarations have been used in a for loop without
6436          the C99 for loop scope.  This doesn't make much sense, so don't
6437          allow it.  */
6438       error ("'for' loop initial declaration used outside C99 mode");
6439       return;
6440     }
6441   /* C99 subclause 6.8.5 paragraph 3:
6442
6443        [#3]  The  declaration  part  of  a for statement shall only
6444        declare identifiers for objects having storage class auto or
6445        register.
6446
6447      It isn't clear whether, in this sentence, "identifiers" binds to
6448      "shall only declare" or to "objects" - that is, whether all identifiers
6449      declared must be identifiers for objects, or whether the restriction
6450      only applies to those that are.  (A question on this in comp.std.c
6451      in November 2000 received no answer.)  We implement the strictest
6452      interpretation, to avoid creating an extension which later causes
6453      problems.  */
6454
6455   for (b = current_scope->bindings; b; b = b->prev)
6456     {
6457       tree id = b->id;
6458       tree decl = b->decl;
6459
6460       if (!id)
6461         continue;
6462
6463       switch (TREE_CODE (decl))
6464         {
6465         case VAR_DECL:
6466           if (TREE_STATIC (decl))
6467             error ("%Jdeclaration of static variable '%D' in 'for' loop "
6468                    "initial declaration", decl, decl);
6469           else if (DECL_EXTERNAL (decl))
6470             error ("%Jdeclaration of 'extern' variable '%D' in 'for' loop "
6471                    "initial declaration", decl, decl);
6472           break;
6473
6474         case RECORD_TYPE:
6475           error ("'struct %E' declared in 'for' loop initial declaration", id);
6476           break;
6477         case UNION_TYPE:
6478           error ("'union %E' declared in 'for' loop initial declaration", id);
6479           break;
6480         case ENUMERAL_TYPE:
6481           error ("'enum %E' declared in 'for' loop initial declaration", id);
6482           break;
6483         default:
6484           error ("%Jdeclaration of non-variable '%D' in 'for' loop "
6485                  "initial declaration", decl, decl);
6486         }
6487     }
6488 }
6489 \f
6490 /* Save and reinitialize the variables
6491    used during compilation of a C function.  */
6492
6493 void
6494 c_push_function_context (struct function *f)
6495 {
6496   struct language_function *p;
6497   p = GGC_NEW (struct language_function);
6498   f->language = p;
6499
6500   p->base.x_stmt_tree = c_stmt_tree;
6501   p->x_break_label = c_break_label;
6502   p->x_cont_label = c_cont_label;
6503   p->x_switch_stack = c_switch_stack;
6504   p->returns_value = current_function_returns_value;
6505   p->returns_null = current_function_returns_null;
6506   p->returns_abnormally = current_function_returns_abnormally;
6507   p->warn_about_return_type = warn_about_return_type;
6508   p->extern_inline = current_extern_inline;
6509 }
6510
6511 /* Restore the variables used during compilation of a C function.  */
6512
6513 void
6514 c_pop_function_context (struct function *f)
6515 {
6516   struct language_function *p = f->language;
6517
6518   if (DECL_STRUCT_FUNCTION (current_function_decl) == 0
6519       && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
6520     {
6521       /* Stop pointing to the local nodes about to be freed.  */
6522       /* But DECL_INITIAL must remain nonzero so we know this
6523          was an actual function definition.  */
6524       DECL_INITIAL (current_function_decl) = error_mark_node;
6525       DECL_ARGUMENTS (current_function_decl) = 0;
6526     }
6527
6528   c_stmt_tree = p->base.x_stmt_tree;
6529   c_break_label = p->x_break_label;
6530   c_cont_label = p->x_cont_label;
6531   c_switch_stack = p->x_switch_stack;
6532   current_function_returns_value = p->returns_value;
6533   current_function_returns_null = p->returns_null;
6534   current_function_returns_abnormally = p->returns_abnormally;
6535   warn_about_return_type = p->warn_about_return_type;
6536   current_extern_inline = p->extern_inline;
6537
6538   f->language = NULL;
6539 }
6540
6541 /* Copy the DECL_LANG_SPECIFIC data associated with DECL.  */
6542
6543 void
6544 c_dup_lang_specific_decl (tree decl)
6545 {
6546   struct lang_decl *ld;
6547
6548   if (!DECL_LANG_SPECIFIC (decl))
6549     return;
6550
6551   ld = GGC_NEW (struct lang_decl);
6552   memcpy (ld, DECL_LANG_SPECIFIC (decl), sizeof (struct lang_decl));
6553   DECL_LANG_SPECIFIC (decl) = ld;
6554 }
6555
6556 /* The functions below are required for functionality of doing
6557    function at once processing in the C front end. Currently these
6558    functions are not called from anywhere in the C front end, but as
6559    these changes continue, that will change.  */
6560
6561 /* Returns nonzero if the current statement is a full expression,
6562    i.e. temporaries created during that statement should be destroyed
6563    at the end of the statement.  */
6564
6565 int
6566 stmts_are_full_exprs_p (void)
6567 {
6568   return 0;
6569 }
6570
6571 /* Returns the stmt_tree (if any) to which statements are currently
6572    being added.  If there is no active statement-tree, NULL is
6573    returned.  */
6574
6575 stmt_tree
6576 current_stmt_tree (void)
6577 {
6578   return &c_stmt_tree;
6579 }
6580
6581 /* Nonzero if TYPE is an anonymous union or struct type.  Always 0 in
6582    C.  */
6583
6584 int
6585 anon_aggr_type_p (tree ARG_UNUSED (node))
6586 {
6587   return 0;
6588 }
6589
6590 /* Dummy function in place of callback used by C++.  */
6591
6592 void
6593 extract_interface_info (void)
6594 {
6595 }
6596
6597 /* Return the global value of T as a symbol.  */
6598
6599 tree
6600 identifier_global_value (tree t)
6601 {
6602   struct c_binding *b;
6603
6604   for (b = I_SYMBOL_BINDING (t); b; b = b->shadowed)
6605     if (B_IN_FILE_SCOPE (b) || B_IN_EXTERNAL_SCOPE (b))
6606       return b->decl;
6607
6608   return 0;
6609 }
6610
6611 /* Record a builtin type for C.  If NAME is non-NULL, it is the name used;
6612    otherwise the name is found in ridpointers from RID_INDEX.  */
6613
6614 void
6615 record_builtin_type (enum rid rid_index, const char *name, tree type)
6616 {
6617   tree id, decl;
6618   if (name == 0)
6619     id = ridpointers[(int) rid_index];
6620   else
6621     id = get_identifier (name);
6622   decl = build_decl (TYPE_DECL, id, type);
6623   pushdecl (decl);
6624   if (debug_hooks->type_decl)
6625     debug_hooks->type_decl (decl, false);
6626 }
6627
6628 /* Build the void_list_node (void_type_node having been created).  */
6629 tree
6630 build_void_list_node (void)
6631 {
6632   tree t = build_tree_list (NULL_TREE, void_type_node);
6633   return t;
6634 }
6635
6636 /* Return something to represent absolute declarators containing a *.
6637    TARGET is the absolute declarator that the * contains.
6638    TYPE_QUALS_ATTRS is a list of modifiers such as const or volatile
6639    to apply to the pointer type, represented as identifiers, possible mixed
6640    with attributes.
6641
6642    We return an INDIRECT_REF whose "contents" are TARGET (inside a TREE_LIST,
6643    if attributes are present) and whose type is the modifier list.  */
6644
6645 tree
6646 make_pointer_declarator (tree type_quals_attrs, tree target)
6647 {
6648   tree quals, attrs;
6649   tree itarget = target;
6650   split_specs_attrs (type_quals_attrs, &quals, &attrs);
6651   if (attrs != NULL_TREE)
6652     itarget = tree_cons (attrs, target, NULL_TREE);
6653   return build1 (INDIRECT_REF, quals, itarget);
6654 }
6655
6656 /* Synthesize a function which calls all the global ctors or global
6657    dtors in this file.  This is only used for targets which do not
6658    support .ctors/.dtors sections.  FIXME: Migrate into cgraph.  */
6659 static void
6660 build_cdtor (int method_type, tree cdtors)
6661 {
6662   tree body = 0;
6663
6664   if (!cdtors)
6665     return;
6666
6667   for (; cdtors; cdtors = TREE_CHAIN (cdtors))
6668     append_to_statement_list (build_function_call (TREE_VALUE (cdtors), 0),
6669                               &body);
6670
6671   cgraph_build_static_cdtor (method_type, body, DEFAULT_INIT_PRIORITY);
6672 }
6673
6674 /* Perform final processing on one file scope's declarations (or the
6675    external scope's declarations), GLOBALS.  */
6676 static void
6677 c_write_global_declarations_1 (tree globals)
6678 {
6679   size_t len = list_length (globals);
6680   tree *vec = XNEWVEC (tree, len);
6681   size_t i;
6682   tree decl;
6683
6684   /* Process the decls in the order they were written.  */
6685   for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
6686     vec[i] = decl;
6687
6688   wrapup_global_declarations (vec, len);
6689   check_global_declarations (vec, len);
6690
6691   free (vec);
6692 }
6693
6694 void
6695 c_write_global_declarations (void)
6696 {
6697   tree ext_block, t;
6698
6699   /* We don't want to do this if generating a PCH.  */
6700   if (pch_file)
6701     return;
6702
6703   /* Don't waste time on further processing if -fsyntax-only or we've
6704      encountered errors.  */
6705   if (flag_syntax_only || errorcount || sorrycount || cpp_errors (parse_in))
6706     return;
6707
6708   /* Close the external scope.  */
6709   ext_block = pop_scope ();
6710   external_scope = 0;
6711   if (current_scope)
6712     abort ();
6713
6714   /* Process all file scopes in this compilation, and the external_scope,
6715      through wrapup_global_declarations and check_global_declarations.  */
6716   for (t = all_translation_units; t; t = TREE_CHAIN (t))
6717     c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t)));
6718   c_write_global_declarations_1 (BLOCK_VARS (ext_block));
6719
6720   /* Generate functions to call static constructors and destructors
6721      for targets that do not support .ctors/.dtors sections.  These
6722      functions have magic names which are detected by collect2.  */
6723   build_cdtor ('I', static_ctors); static_ctors = 0;
6724   build_cdtor ('D', static_dtors); static_dtors = 0;
6725
6726   /* We're done parsing; proceed to optimize and emit assembly.
6727      FIXME: shouldn't be the front end's responsibility to call this.  */
6728   cgraph_optimize ();
6729
6730   /* Presently this has to happen after cgraph_optimize.
6731      FIXME: shouldn't be the front end's responsibility to call this.  */
6732   if (flag_mudflap)
6733     mudflap_finish_file ();
6734 }
6735
6736 #include "gt-c-decl.h"