OSDN Git Service

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