OSDN Git Service

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