OSDN Git Service

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