OSDN Git Service

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