OSDN Git Service

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