OSDN Git Service

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