OSDN Git Service

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