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