OSDN Git Service

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