OSDN Git Service

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