Do not report -Wnested-extern errors for __FUNCTION__/__PRETTY_FUNCTION__.
[official-gcc.git] / gcc / c-decl.c
blob62f77e997f56867cc0a89870db33d35c18d3c120
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993 Free Software Foundation, Inc.
4 This file is part of GNU CC.
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.
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.
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, 675 Mass Ave, Cambridge, MA 02139, USA. */
21 /* Process declarations and symbol lookup for C front end.
22 Also constructs types; the standard scalar types at initialization,
23 and structure, union, array and enum types when they are declared. */
25 /* ??? not all decl nodes are given the most useful possible
26 line numbers. For example, the CONST_DECLs for enum values. */
28 #include "config.h"
29 #include "tree.h"
30 #include "flags.h"
31 #include "c-tree.h"
32 #include "c-lex.h"
33 #include <stdio.h>
35 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
36 enum decl_context
37 { NORMAL, /* Ordinary declaration */
38 FUNCDEF, /* Function definition */
39 PARM, /* Declaration of parm before function body */
40 FIELD, /* Declaration inside struct or union */
41 BITFIELD, /* Likewise but with specified width */
42 TYPENAME}; /* Typename (inside cast or sizeof) */
44 #ifndef CHAR_TYPE_SIZE
45 #define CHAR_TYPE_SIZE BITS_PER_UNIT
46 #endif
48 #ifndef SHORT_TYPE_SIZE
49 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
50 #endif
52 #ifndef INT_TYPE_SIZE
53 #define INT_TYPE_SIZE BITS_PER_WORD
54 #endif
56 #ifndef LONG_TYPE_SIZE
57 #define LONG_TYPE_SIZE BITS_PER_WORD
58 #endif
60 #ifndef LONG_LONG_TYPE_SIZE
61 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
62 #endif
64 #ifndef WCHAR_UNSIGNED
65 #define WCHAR_UNSIGNED 0
66 #endif
68 #ifndef FLOAT_TYPE_SIZE
69 #define FLOAT_TYPE_SIZE BITS_PER_WORD
70 #endif
72 #ifndef DOUBLE_TYPE_SIZE
73 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
74 #endif
76 #ifndef LONG_DOUBLE_TYPE_SIZE
77 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
78 #endif
80 /* We let tm.h override the types used here, to handle trivial differences
81 such as the choice of unsigned int or long unsigned int for size_t.
82 When machines start needing nontrivial differences in the size type,
83 it would be best to do something here to figure out automatically
84 from other information what type to use. */
86 #ifndef SIZE_TYPE
87 #define SIZE_TYPE "long unsigned int"
88 #endif
90 #ifndef PTRDIFF_TYPE
91 #define PTRDIFF_TYPE "long int"
92 #endif
94 #ifndef WCHAR_TYPE
95 #define WCHAR_TYPE "int"
96 #endif
98 /* a node which has tree code ERROR_MARK, and whose type is itself.
99 All erroneous expressions are replaced with this node. All functions
100 that accept nodes as arguments should avoid generating error messages
101 if this node is one of the arguments, since it is undesirable to get
102 multiple error messages from one error in the input. */
104 tree error_mark_node;
106 /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
108 tree short_integer_type_node;
109 tree integer_type_node;
110 tree long_integer_type_node;
111 tree long_long_integer_type_node;
113 tree short_unsigned_type_node;
114 tree unsigned_type_node;
115 tree long_unsigned_type_node;
116 tree long_long_unsigned_type_node;
118 tree ptrdiff_type_node;
120 tree unsigned_char_type_node;
121 tree signed_char_type_node;
122 tree char_type_node;
123 tree wchar_type_node;
124 tree signed_wchar_type_node;
125 tree unsigned_wchar_type_node;
127 tree float_type_node;
128 tree double_type_node;
129 tree long_double_type_node;
131 tree complex_integer_type_node;
132 tree complex_float_type_node;
133 tree complex_double_type_node;
134 tree complex_long_double_type_node;
136 tree intQI_type_node;
137 tree intHI_type_node;
138 tree intSI_type_node;
139 tree intDI_type_node;
141 tree unsigned_intQI_type_node;
142 tree unsigned_intHI_type_node;
143 tree unsigned_intSI_type_node;
144 tree unsigned_intDI_type_node;
146 /* a VOID_TYPE node. */
148 tree void_type_node;
150 /* Nodes for types `void *' and `const void *'. */
152 tree ptr_type_node, const_ptr_type_node;
154 /* Nodes for types `char *' and `const char *'. */
156 tree string_type_node, const_string_type_node;
158 /* Type `char[SOMENUMBER]'.
159 Used when an array of char is needed and the size is irrelevant. */
161 tree char_array_type_node;
163 /* Type `int[SOMENUMBER]' or something like it.
164 Used when an array of int needed and the size is irrelevant. */
166 tree int_array_type_node;
168 /* Type `wchar_t[SOMENUMBER]' or something like it.
169 Used when a wide string literal is created. */
171 tree wchar_array_type_node;
173 /* type `int ()' -- used for implicit declaration of functions. */
175 tree default_function_type;
177 /* function types `double (double)' and `double (double, double)', etc. */
179 tree double_ftype_double, double_ftype_double_double;
180 tree int_ftype_int, long_ftype_long;
182 /* Function type `void (void *, void *, int)' and similar ones */
184 tree void_ftype_ptr_ptr_int, int_ftype_ptr_ptr_int, void_ftype_ptr_int_int;
186 /* Function type `char *(char *, char *)' and similar ones */
187 tree string_ftype_ptr_ptr, int_ftype_string_string;
189 /* Function type `int (const void *, const void *, size_t)' */
190 tree int_ftype_cptr_cptr_sizet;
192 /* Two expressions that are constants with value zero.
193 The first is of type `int', the second of type `void *'. */
195 tree integer_zero_node;
196 tree null_pointer_node;
198 /* A node for the integer constant 1. */
200 tree integer_one_node;
202 /* Nonzero if we have seen an invalid cross reference
203 to a struct, union, or enum, but not yet printed the message. */
205 tree pending_invalid_xref;
206 /* File and line to appear in the eventual error message. */
207 char *pending_invalid_xref_file;
208 int pending_invalid_xref_line;
210 /* While defining an enum type, this is 1 plus the last enumerator
211 constant value. */
213 static tree enum_next_value;
215 /* Nonzero means that there was overflow computing enum_next_value. */
217 static int enum_overflow;
219 /* Parsing a function declarator leaves a list of parameter names
220 or a chain or parameter decls here. */
222 static tree last_function_parms;
224 /* Parsing a function declarator leaves here a chain of structure
225 and enum types declared in the parmlist. */
227 static tree last_function_parm_tags;
229 /* After parsing the declarator that starts a function definition,
230 `start_function' puts here the list of parameter names or chain of decls.
231 `store_parm_decls' finds it here. */
233 static tree current_function_parms;
235 /* Similar, for last_function_parm_tags. */
236 static tree current_function_parm_tags;
238 /* Similar, for the file and line that the prototype came from if this is
239 an old-style definition. */
240 static char *current_function_prototype_file;
241 static int current_function_prototype_line;
243 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
244 that have names. Here so we can clear out their names' definitions
245 at the end of the function. */
247 static tree named_labels;
249 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
251 static tree shadowed_labels;
253 /* Nonzero when store_parm_decls is called indicates a varargs function.
254 Value not meaningful after store_parm_decls. */
256 static int c_function_varargs;
258 /* The FUNCTION_DECL for the function currently being compiled,
259 or 0 if between functions. */
260 tree current_function_decl;
262 /* Set to 0 at beginning of a function definition, set to 1 if
263 a return statement that specifies a return value is seen. */
265 int current_function_returns_value;
267 /* Set to 0 at beginning of a function definition, set to 1 if
268 a return statement with no argument is seen. */
270 int current_function_returns_null;
272 /* Set to nonzero by `grokdeclarator' for a function
273 whose return type is defaulted, if warnings for this are desired. */
275 static int warn_about_return_type;
277 /* Nonzero when starting a function declared `extern inline'. */
279 static int current_extern_inline;
281 /* For each binding contour we allocate a binding_level structure
282 * which records the names defined in that contour.
283 * Contours include:
284 * 0) the global one
285 * 1) one for each function definition,
286 * where internal declarations of the parameters appear.
287 * 2) one for each compound statement,
288 * to record its declarations.
290 * The current meaning of a name can be found by searching the levels from
291 * the current one out to the global one.
294 /* Note that the information in the `names' component of the global contour
295 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
297 struct binding_level
299 /* A chain of _DECL nodes for all variables, constants, functions,
300 and typedef types. These are in the reverse of the order supplied.
302 tree names;
304 /* A list of structure, union and enum definitions,
305 * for looking up tag names.
306 * It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
307 * or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
308 * or ENUMERAL_TYPE node.
310 tree tags;
312 /* For each level, a list of shadowed outer-level local definitions
313 to be restored when this level is popped.
314 Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
315 whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
316 tree shadowed;
318 /* For each level (except not the global one),
319 a chain of BLOCK nodes for all the levels
320 that were entered and exited one level down. */
321 tree blocks;
323 /* The BLOCK node for this level, if one has been preallocated.
324 If 0, the BLOCK is allocated (if needed) when the level is popped. */
325 tree this_block;
327 /* The binding level which this one is contained in (inherits from). */
328 struct binding_level *level_chain;
330 /* Nonzero for the level that holds the parameters of a function. */
331 char parm_flag;
333 /* Nonzero if this level "doesn't exist" for tags. */
334 char tag_transparent;
336 /* Nonzero if sublevels of this level "don't exist" for tags.
337 This is set in the parm level of a function definition
338 while reading the function body, so that the outermost block
339 of the function body will be tag-transparent. */
340 char subblocks_tag_transparent;
342 /* Nonzero means make a BLOCK for this level regardless of all else. */
343 char keep;
345 /* Nonzero means make a BLOCK if this level has any subblocks. */
346 char keep_if_subblocks;
348 /* Number of decls in `names' that have incomplete
349 structure or union types. */
350 int n_incomplete;
352 /* A list of decls giving the (reversed) specified order of parms,
353 not including any forward-decls in the parmlist.
354 This is so we can put the parms in proper order for assign_parms. */
355 tree parm_order;
358 #define NULL_BINDING_LEVEL (struct binding_level *) NULL
360 /* The binding level currently in effect. */
362 static struct binding_level *current_binding_level;
364 /* A chain of binding_level structures awaiting reuse. */
366 static struct binding_level *free_binding_level;
368 /* The outermost binding level, for names of file scope.
369 This is created when the compiler is started and exists
370 through the entire run. */
372 static struct binding_level *global_binding_level;
374 /* Binding level structures are initialized by copying this one. */
376 static struct binding_level clear_binding_level
377 = {NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0};
379 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
381 static int keep_next_level_flag;
383 /* Nonzero means make a BLOCK for the next level pushed
384 if it has subblocks. */
386 static int keep_next_if_subblocks;
388 /* The chain of outer levels of label scopes.
389 This uses the same data structure used for binding levels,
390 but it works differently: each link in the chain records
391 saved values of named_labels and shadowed_labels for
392 a label binding level outside the current one. */
394 static struct binding_level *label_level_chain;
396 /* Forward declarations. */
398 static tree grokparms (), grokdeclarator ();
399 tree pushdecl ();
400 tree builtin_function ();
401 void shadow_tag_warned ();
403 static tree lookup_tag ();
404 static tree lookup_tag_reverse ();
405 tree lookup_name_current_level ();
406 static char *redeclaration_error_message ();
407 static void layout_array_type ();
409 /* C-specific option variables. */
411 /* Nonzero means allow type mismatches in conditional expressions;
412 just make their values `void'. */
414 int flag_cond_mismatch;
416 /* Nonzero means give `double' the same size as `float'. */
418 int flag_short_double;
420 /* Nonzero means don't recognize the keyword `asm'. */
422 int flag_no_asm;
424 /* Nonzero means don't recognize any builtin functions. */
426 int flag_no_builtin;
428 /* Nonzero means don't recognize the non-ANSI builtin functions.
429 -ansi sets this. */
431 int flag_no_nonansi_builtin;
433 /* Nonzero means do some things the same way PCC does. */
435 int flag_traditional;
437 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
439 int flag_signed_bitfields = 1;
440 int explicit_flag_signed_bitfields = 0;
442 /* Nonzero means handle `#ident' directives. 0 means ignore them. */
444 int flag_no_ident = 0;
446 /* Nonzero means warn about implicit declarations. */
448 int warn_implicit;
450 /* Nonzero means give string constants the type `const char *'
451 to get extra warnings from them. These warnings will be too numerous
452 to be useful, except in thoroughly ANSIfied programs. */
454 int warn_write_strings;
456 /* Nonzero means warn about pointer casts that can drop a type qualifier
457 from the pointer target type. */
459 int warn_cast_qual;
461 /* Warn about traditional constructs whose meanings changed in ANSI C. */
463 int warn_traditional;
465 /* Nonzero means warn about sizeof(function) or addition/subtraction
466 of function pointers. */
468 int warn_pointer_arith;
470 /* Nonzero means warn for non-prototype function decls
471 or non-prototyped defs without previous prototype. */
473 int warn_strict_prototypes;
475 /* Nonzero means warn for any global function def
476 without separate previous prototype decl. */
478 int warn_missing_prototypes;
480 /* Nonzero means warn about multiple (redundant) decls for the same single
481 variable or function. */
483 int warn_redundant_decls = 0;
485 /* Nonzero means warn about extern declarations of objects not at
486 file-scope level and about *all* declarations of functions (whether
487 extern or static) not at file-scope level. Note that we exclude
488 implicit function declarations. To get warnings about those, use
489 -Wimplicit. */
491 int warn_nested_externs = 0;
493 /* Warn about *printf or *scanf format/argument anomalies. */
495 int warn_format;
497 /* Warn about a subscript that has type char. */
499 int warn_char_subscripts = 0;
501 /* Warn if a type conversion is done that might have confusing results. */
503 int warn_conversion;
505 /* Warn if adding () is suggested. */
507 int warn_parentheses;
509 /* Warn if initializer is not completely bracketed. */
511 int warn_missing_braces;
513 /* Nonzero means `$' can be in an identifier.
514 See cccp.c for reasons why this breaks some obscure ANSI C programs. */
516 #ifndef DOLLARS_IN_IDENTIFIERS
517 #define DOLLARS_IN_IDENTIFIERS 1
518 #endif
519 int dollars_in_ident = DOLLARS_IN_IDENTIFIERS > 1;
521 /* Decode the string P as a language-specific option for C.
522 Return 1 if it is recognized (and handle it);
523 return 0 if not recognized. */
526 c_decode_option (p)
527 char *p;
529 if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional"))
531 flag_traditional = 1;
532 flag_writable_strings = 1;
533 #if DOLLARS_IN_IDENTIFIERS > 0
534 dollars_in_ident = 1;
535 #endif
537 else if (!strcmp (p, "-fnotraditional") || !strcmp (p, "-fno-traditional"))
539 flag_traditional = 0;
540 flag_writable_strings = 0;
541 dollars_in_ident = DOLLARS_IN_IDENTIFIERS > 1;
543 else if (!strcmp (p, "-fdollars-in-identifiers"))
545 #if DOLLARS_IN_IDENTIFIERS > 0
546 dollars_in_ident = 1;
547 #endif
549 else if (!strcmp (p, "-fnodollars-in-identifiers"))
550 dollars_in_ident = 0;
551 else if (!strcmp (p, "-fsigned-char"))
552 flag_signed_char = 1;
553 else if (!strcmp (p, "-funsigned-char"))
554 flag_signed_char = 0;
555 else if (!strcmp (p, "-fno-signed-char"))
556 flag_signed_char = 0;
557 else if (!strcmp (p, "-fno-unsigned-char"))
558 flag_signed_char = 1;
559 else if (!strcmp (p, "-fsigned-bitfields")
560 || !strcmp (p, "-fno-unsigned-bitfields"))
562 flag_signed_bitfields = 1;
563 explicit_flag_signed_bitfields = 1;
565 else if (!strcmp (p, "-funsigned-bitfields")
566 || !strcmp (p, "-fno-signed-bitfields"))
568 flag_signed_bitfields = 0;
569 explicit_flag_signed_bitfields = 1;
571 else if (!strcmp (p, "-fshort-enums"))
572 flag_short_enums = 1;
573 else if (!strcmp (p, "-fno-short-enums"))
574 flag_short_enums = 0;
575 else if (!strcmp (p, "-fcond-mismatch"))
576 flag_cond_mismatch = 1;
577 else if (!strcmp (p, "-fno-cond-mismatch"))
578 flag_cond_mismatch = 0;
579 else if (!strcmp (p, "-fshort-double"))
580 flag_short_double = 1;
581 else if (!strcmp (p, "-fno-short-double"))
582 flag_short_double = 0;
583 else if (!strcmp (p, "-fasm"))
584 flag_no_asm = 0;
585 else if (!strcmp (p, "-fno-asm"))
586 flag_no_asm = 1;
587 else if (!strcmp (p, "-fbuiltin"))
588 flag_no_builtin = 0;
589 else if (!strcmp (p, "-fno-builtin"))
590 flag_no_builtin = 1;
591 else if (!strcmp (p, "-fno-ident"))
592 flag_no_ident = 1;
593 else if (!strcmp (p, "-fident"))
594 flag_no_ident = 0;
595 else if (!strcmp (p, "-ansi"))
596 flag_no_asm = 1, flag_no_nonansi_builtin = 1, dollars_in_ident = 0;
597 else if (!strcmp (p, "-Wimplicit"))
598 warn_implicit = 1;
599 else if (!strcmp (p, "-Wno-implicit"))
600 warn_implicit = 0;
601 else if (!strcmp (p, "-Wwrite-strings"))
602 warn_write_strings = 1;
603 else if (!strcmp (p, "-Wno-write-strings"))
604 warn_write_strings = 0;
605 else if (!strcmp (p, "-Wcast-qual"))
606 warn_cast_qual = 1;
607 else if (!strcmp (p, "-Wno-cast-qual"))
608 warn_cast_qual = 0;
609 else if (!strcmp (p, "-Wpointer-arith"))
610 warn_pointer_arith = 1;
611 else if (!strcmp (p, "-Wno-pointer-arith"))
612 warn_pointer_arith = 0;
613 else if (!strcmp (p, "-Wstrict-prototypes"))
614 warn_strict_prototypes = 1;
615 else if (!strcmp (p, "-Wno-strict-prototypes"))
616 warn_strict_prototypes = 0;
617 else if (!strcmp (p, "-Wmissing-prototypes"))
618 warn_missing_prototypes = 1;
619 else if (!strcmp (p, "-Wno-missing-prototypes"))
620 warn_missing_prototypes = 0;
621 else if (!strcmp (p, "-Wredundant-decls"))
622 warn_redundant_decls = 1;
623 else if (!strcmp (p, "-Wno-redundant-decls"))
624 warn_redundant_decls = 0;
625 else if (!strcmp (p, "-Wnested-externs"))
626 warn_nested_externs = 1;
627 else if (!strcmp (p, "-Wno-nested-externs"))
628 warn_nested_externs = 0;
629 else if (!strcmp (p, "-Wtraditional"))
630 warn_traditional = 1;
631 else if (!strcmp (p, "-Wno-traditional"))
632 warn_traditional = 0;
633 else if (!strcmp (p, "-Wformat"))
634 warn_format = 1;
635 else if (!strcmp (p, "-Wno-format"))
636 warn_format = 0;
637 else if (!strcmp (p, "-Wchar-subscripts"))
638 warn_char_subscripts = 1;
639 else if (!strcmp (p, "-Wno-char-subscripts"))
640 warn_char_subscripts = 0;
641 else if (!strcmp (p, "-Wconversion"))
642 warn_conversion = 1;
643 else if (!strcmp (p, "-Wno-conversion"))
644 warn_conversion = 0;
645 else if (!strcmp (p, "-Wparentheses"))
646 warn_parentheses = 1;
647 else if (!strcmp (p, "-Wno-parentheses"))
648 warn_parentheses = 0;
649 else if (!strcmp (p, "-Wreturn-type"))
650 warn_return_type = 1;
651 else if (!strcmp (p, "-Wno-return-type"))
652 warn_return_type = 0;
653 else if (!strcmp (p, "-Wcomment"))
654 ; /* cpp handles this one. */
655 else if (!strcmp (p, "-Wno-comment"))
656 ; /* cpp handles this one. */
657 else if (!strcmp (p, "-Wcomments"))
658 ; /* cpp handles this one. */
659 else if (!strcmp (p, "-Wno-comments"))
660 ; /* cpp handles this one. */
661 else if (!strcmp (p, "-Wtrigraphs"))
662 ; /* cpp handles this one. */
663 else if (!strcmp (p, "-Wno-trigraphs"))
664 ; /* cpp handles this one. */
665 else if (!strcmp (p, "-Wimport"))
666 ; /* cpp handles this one. */
667 else if (!strcmp (p, "-Wno-import"))
668 ; /* cpp handles this one. */
669 else if (!strcmp (p, "-Wmissing-braces"))
670 warn_missing_braces = 1;
671 else if (!strcmp (p, "-Wno-missing-braces"))
672 warn_missing_braces = 0;
673 else if (!strcmp (p, "-Wall"))
675 extra_warnings = 1;
676 /* We save the value of warn_uninitialized, since if they put
677 -Wuninitialized on the command line, we need to generate a
678 warning about not using it without also specifying -O. */
679 if (warn_uninitialized != 1)
680 warn_uninitialized = 2;
681 warn_implicit = 1;
682 warn_return_type = 1;
683 warn_unused = 1;
684 warn_switch = 1;
685 warn_format = 1;
686 warn_char_subscripts = 1;
687 warn_parentheses = 1;
688 warn_missing_braces = 1;
690 else
691 return 0;
693 return 1;
696 /* Hooks for print_node. */
698 void
699 print_lang_decl (file, node, indent)
700 FILE *file;
701 tree node;
702 int indent;
706 void
707 print_lang_type (file, node, indent)
708 FILE *file;
709 tree node;
710 int indent;
714 void
715 print_lang_identifier (file, node, indent)
716 FILE *file;
717 tree node;
718 int indent;
720 print_node (file, "global", IDENTIFIER_GLOBAL_VALUE (node), indent + 4);
721 print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
722 print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
723 print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
724 print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4);
725 print_node (file, "limbo value", IDENTIFIER_LIMBO_VALUE (node), indent + 4);
728 /* Hook called at end of compilation to assume 1 elt
729 for a top-level array decl that wasn't complete before. */
731 void
732 finish_incomplete_decl (decl)
733 tree decl;
735 if (TREE_CODE (decl) == VAR_DECL && TREE_TYPE (decl) != error_mark_node)
737 tree type = TREE_TYPE (decl);
738 if (TREE_CODE (type) == ARRAY_TYPE
739 && TYPE_DOMAIN (type) == 0
740 && TREE_CODE (decl) != TYPE_DECL)
742 complete_array_type (type, NULL_TREE, 1);
744 layout_decl (decl, 0);
749 /* Create a new `struct binding_level'. */
751 static
752 struct binding_level *
753 make_binding_level ()
755 /* NOSTRICT */
756 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
759 /* Nonzero if we are currently in the global binding level. */
762 global_bindings_p ()
764 return current_binding_level == global_binding_level;
767 void
768 keep_next_level ()
770 keep_next_level_flag = 1;
773 /* Nonzero if the current level needs to have a BLOCK made. */
776 kept_level_p ()
778 return ((current_binding_level->keep_if_subblocks
779 && current_binding_level->blocks != 0)
780 || current_binding_level->keep
781 || current_binding_level->names != 0
782 || (current_binding_level->tags != 0
783 && !current_binding_level->tag_transparent));
786 /* Identify this binding level as a level of parameters.
787 DEFINITION_FLAG is 1 for a definition, 0 for a declaration.
788 But it turns out there is no way to pass the right value for
789 DEFINITION_FLAG, so we ignore it. */
791 void
792 declare_parm_level (definition_flag)
793 int definition_flag;
795 current_binding_level->parm_flag = 1;
798 /* Nonzero if currently making parm declarations. */
801 in_parm_level_p ()
803 return current_binding_level->parm_flag;
806 /* Enter a new binding level.
807 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
808 not for that of tags. */
810 void
811 pushlevel (tag_transparent)
812 int tag_transparent;
814 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
816 /* If this is the top level of a function,
817 just make sure that NAMED_LABELS is 0. */
819 if (current_binding_level == global_binding_level)
821 named_labels = 0;
824 /* Reuse or create a struct for this binding level. */
826 if (free_binding_level)
828 newlevel = free_binding_level;
829 free_binding_level = free_binding_level->level_chain;
831 else
833 newlevel = make_binding_level ();
836 /* Add this level to the front of the chain (stack) of levels that
837 are active. */
839 *newlevel = clear_binding_level;
840 newlevel->tag_transparent
841 = (tag_transparent
842 || (current_binding_level
843 ? current_binding_level->subblocks_tag_transparent
844 : 0));
845 newlevel->level_chain = current_binding_level;
846 current_binding_level = newlevel;
847 newlevel->keep = keep_next_level_flag;
848 keep_next_level_flag = 0;
849 newlevel->keep_if_subblocks = keep_next_if_subblocks;
850 keep_next_if_subblocks = 0;
853 /* Exit a binding level.
854 Pop the level off, and restore the state of the identifier-decl mappings
855 that were in effect when this level was entered.
857 If KEEP is nonzero, this level had explicit declarations, so
858 and create a "block" (a BLOCK node) for the level
859 to record its declarations and subblocks for symbol table output.
861 If FUNCTIONBODY is nonzero, this level is the body of a function,
862 so create a block as if KEEP were set and also clear out all
863 label names.
865 If REVERSE is nonzero, reverse the order of decls before putting
866 them into the BLOCK. */
868 tree
869 poplevel (keep, reverse, functionbody)
870 int keep;
871 int reverse;
872 int functionbody;
874 register tree link;
875 /* The chain of decls was accumulated in reverse order.
876 Put it into forward order, just for cleanliness. */
877 tree decls;
878 tree tags = current_binding_level->tags;
879 tree subblocks = current_binding_level->blocks;
880 tree block = 0;
881 tree decl;
882 int block_previously_created;
884 keep |= current_binding_level->keep;
886 /* This warning is turned off because it causes warnings for
887 declarations like `extern struct foo *x'. */
888 #if 0
889 /* Warn about incomplete structure types in this level. */
890 for (link = tags; link; link = TREE_CHAIN (link))
891 if (TYPE_SIZE (TREE_VALUE (link)) == 0)
893 tree type = TREE_VALUE (link);
894 char *errmsg;
895 switch (TREE_CODE (type))
897 case RECORD_TYPE:
898 errmsg = "`struct %s' incomplete in scope ending here";
899 break;
900 case UNION_TYPE:
901 errmsg = "`union %s' incomplete in scope ending here";
902 break;
903 case ENUMERAL_TYPE:
904 errmsg = "`enum %s' incomplete in scope ending here";
905 break;
907 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
908 error (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
909 else
910 /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
911 error (errmsg, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
913 #endif /* 0 */
915 /* Get the decls in the order they were written.
916 Usually current_binding_level->names is in reverse order.
917 But parameter decls were previously put in forward order. */
919 if (reverse)
920 current_binding_level->names
921 = decls = nreverse (current_binding_level->names);
922 else
923 decls = current_binding_level->names;
925 /* Output any nested inline functions within this block
926 if they weren't already output. */
928 for (decl = decls; decl; decl = TREE_CHAIN (decl))
929 if (TREE_CODE (decl) == FUNCTION_DECL
930 && ! TREE_ASM_WRITTEN (decl)
931 && DECL_INITIAL (decl) != 0
932 && TREE_ADDRESSABLE (decl))
934 /* If this decl was copied from a file-scope decl
935 on account of a block-scope extern decl,
936 propagate TREE_ADDRESSABLE to the file-scope decl. */
937 if (DECL_ABSTRACT_ORIGIN (decl) != 0)
938 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
939 else
941 push_function_context ();
942 output_inline_function (decl);
943 pop_function_context ();
947 /* If there were any declarations or structure tags in that level,
948 or if this level is a function body,
949 create a BLOCK to record them for the life of this function. */
951 block = 0;
952 block_previously_created = (current_binding_level->this_block != 0);
953 if (block_previously_created)
954 block = current_binding_level->this_block;
955 else if (keep || functionbody
956 || (current_binding_level->keep_if_subblocks && subblocks != 0))
957 block = make_node (BLOCK);
958 if (block != 0)
960 BLOCK_VARS (block) = decls;
961 BLOCK_TYPE_TAGS (block) = tags;
962 BLOCK_SUBBLOCKS (block) = subblocks;
963 remember_end_note (block);
966 /* In each subblock, record that this is its superior. */
968 for (link = subblocks; link; link = TREE_CHAIN (link))
969 BLOCK_SUPERCONTEXT (link) = block;
971 /* Clear out the meanings of the local variables of this level. */
973 for (link = decls; link; link = TREE_CHAIN (link))
975 if (DECL_NAME (link) != 0)
977 /* If the ident. was used or addressed via a local extern decl,
978 don't forget that fact. */
979 if (DECL_EXTERNAL (link))
981 if (TREE_USED (link))
982 TREE_USED (DECL_NAME (link)) = 1;
983 if (TREE_ADDRESSABLE (link))
984 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
986 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
990 /* Restore all name-meanings of the outer levels
991 that were shadowed by this level. */
993 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
994 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
996 /* If the level being exited is the top level of a function,
997 check over all the labels, and clear out the current
998 (function local) meanings of their names. */
1000 if (functionbody)
1002 /* If this is the top level block of a function,
1003 the vars are the function's parameters.
1004 Don't leave them in the BLOCK because they are
1005 found in the FUNCTION_DECL instead. */
1007 BLOCK_VARS (block) = 0;
1009 /* Clear out the definitions of all label names,
1010 since their scopes end here,
1011 and add them to BLOCK_VARS. */
1013 for (link = named_labels; link; link = TREE_CHAIN (link))
1015 register tree label = TREE_VALUE (link);
1017 if (DECL_INITIAL (label) == 0)
1019 error_with_decl (label, "label `%s' used but not defined");
1020 /* Avoid crashing later. */
1021 define_label (input_filename, lineno,
1022 DECL_NAME (label));
1024 else if (warn_unused && !TREE_USED (label))
1025 warning_with_decl (label, "label `%s' defined but not used");
1026 IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
1028 /* Put the labels into the "variables" of the
1029 top-level block, so debugger can see them. */
1030 TREE_CHAIN (label) = BLOCK_VARS (block);
1031 BLOCK_VARS (block) = label;
1035 /* Pop the current level, and free the structure for reuse. */
1038 register struct binding_level *level = current_binding_level;
1039 current_binding_level = current_binding_level->level_chain;
1041 level->level_chain = free_binding_level;
1042 free_binding_level = level;
1045 /* Dispose of the block that we just made inside some higher level. */
1046 if (functionbody)
1047 DECL_INITIAL (current_function_decl) = block;
1048 else if (block)
1050 if (!block_previously_created)
1051 current_binding_level->blocks
1052 = chainon (current_binding_level->blocks, block);
1054 /* If we did not make a block for the level just exited,
1055 any blocks made for inner levels
1056 (since they cannot be recorded as subblocks in that level)
1057 must be carried forward so they will later become subblocks
1058 of something else. */
1059 else if (subblocks)
1060 current_binding_level->blocks
1061 = chainon (current_binding_level->blocks, subblocks);
1063 /* Set the TYPE_CONTEXTs for all of the tagged types belonging to this
1064 binding contour so that they point to the appropriate construct, i.e.
1065 either to the current FUNCTION_DECL node, or else to the BLOCK node
1066 we just constructed.
1068 Note that for tagged types whose scope is just the formal parameter
1069 list for some function type specification, we can't properly set
1070 their TYPE_CONTEXTs here, because we don't have a pointer to the
1071 appropriate FUNCTION_TYPE node readily available to us. For those
1072 cases, the TYPE_CONTEXTs of the relevant tagged type nodes get set
1073 in `grokdeclarator' as soon as we have created the FUNCTION_TYPE
1074 node which will represent the "scope" for these "parameter list local"
1075 tagged types.
1078 if (functionbody)
1079 for (link = tags; link; link = TREE_CHAIN (link))
1080 TYPE_CONTEXT (TREE_VALUE (link)) = current_function_decl;
1081 else if (block)
1082 for (link = tags; link; link = TREE_CHAIN (link))
1083 TYPE_CONTEXT (TREE_VALUE (link)) = block;
1085 if (block)
1086 TREE_USED (block) = 1;
1087 return block;
1090 /* Delete the node BLOCK from the current binding level.
1091 This is used for the block inside a stmt expr ({...})
1092 so that the block can be reinserted where appropriate. */
1094 void
1095 delete_block (block)
1096 tree block;
1098 tree t;
1099 if (current_binding_level->blocks == block)
1100 current_binding_level->blocks = TREE_CHAIN (block);
1101 for (t = current_binding_level->blocks; t;)
1103 if (TREE_CHAIN (t) == block)
1104 TREE_CHAIN (t) = TREE_CHAIN (block);
1105 else
1106 t = TREE_CHAIN (t);
1108 TREE_CHAIN (block) = NULL;
1109 /* Clear TREE_USED which is always set by poplevel.
1110 The flag is set again if insert_block is called. */
1111 TREE_USED (block) = 0;
1114 /* Insert BLOCK at the end of the list of subblocks of the
1115 current binding level. This is used when a BIND_EXPR is expanded,
1116 to handle the BLOCK node inside the BIND_EXPR. */
1118 void
1119 insert_block (block)
1120 tree block;
1122 TREE_USED (block) = 1;
1123 current_binding_level->blocks
1124 = chainon (current_binding_level->blocks, block);
1127 /* Set the BLOCK node for the innermost scope
1128 (the one we are currently in). */
1130 void
1131 set_block (block)
1132 register tree block;
1134 current_binding_level->this_block = block;
1137 void
1138 push_label_level ()
1140 register struct binding_level *newlevel;
1142 /* Reuse or create a struct for this binding level. */
1144 if (free_binding_level)
1146 newlevel = free_binding_level;
1147 free_binding_level = free_binding_level->level_chain;
1149 else
1151 newlevel = make_binding_level ();
1154 /* Add this level to the front of the chain (stack) of label levels. */
1156 newlevel->level_chain = label_level_chain;
1157 label_level_chain = newlevel;
1159 newlevel->names = named_labels;
1160 newlevel->shadowed = shadowed_labels;
1161 named_labels = 0;
1162 shadowed_labels = 0;
1165 void
1166 pop_label_level ()
1168 register struct binding_level *level = label_level_chain;
1169 tree link, prev;
1171 /* Clear out the definitions of the declared labels in this level.
1172 Leave in the list any ordinary, non-declared labels. */
1173 for (link = named_labels, prev = 0; link;)
1175 if (C_DECLARED_LABEL_FLAG (TREE_VALUE (link)))
1177 if (DECL_SOURCE_LINE (TREE_VALUE (link)) == 0)
1179 error_with_decl (TREE_VALUE (link),
1180 "label `%s' used but not defined");
1181 /* Avoid crashing later. */
1182 define_label (input_filename, lineno,
1183 DECL_NAME (TREE_VALUE (link)));
1185 else if (warn_unused && !TREE_USED (TREE_VALUE (link)))
1186 warning_with_decl (TREE_VALUE (link),
1187 "label `%s' defined but not used");
1188 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) = 0;
1190 /* Delete this element from the list. */
1191 link = TREE_CHAIN (link);
1192 if (prev)
1193 TREE_CHAIN (prev) = link;
1194 else
1195 named_labels = link;
1197 else
1199 prev = link;
1200 link = TREE_CHAIN (link);
1204 /* Bring back all the labels that were shadowed. */
1205 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
1206 if (DECL_NAME (TREE_VALUE (link)) != 0)
1207 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
1208 = TREE_VALUE (link);
1210 named_labels = chainon (named_labels, level->names);
1211 shadowed_labels = level->shadowed;
1213 /* Pop the current level, and free the structure for reuse. */
1214 label_level_chain = label_level_chain->level_chain;
1215 level->level_chain = free_binding_level;
1216 free_binding_level = level;
1219 /* Push a definition or a declaration of struct, union or enum tag "name".
1220 "type" should be the type node.
1221 We assume that the tag "name" is not already defined.
1223 Note that the definition may really be just a forward reference.
1224 In that case, the TYPE_SIZE will be zero. */
1226 void
1227 pushtag (name, type)
1228 tree name, type;
1230 register struct binding_level *b;
1232 /* Find the proper binding level for this type tag. */
1234 for (b = current_binding_level; b->tag_transparent; b = b->level_chain)
1235 continue;
1237 if (name)
1239 /* Record the identifier as the type's name if it has none. */
1241 if (TYPE_NAME (type) == 0)
1242 TYPE_NAME (type) = name;
1245 if (b == global_binding_level)
1246 b->tags = perm_tree_cons (name, type, b->tags);
1247 else
1248 b->tags = saveable_tree_cons (name, type, b->tags);
1250 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1251 tagged type we just added to the current binding level. This fake
1252 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1253 to output a representation of a tagged type, and it also gives
1254 us a convenient place to record the "scope start" address for the
1255 tagged type. */
1257 TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
1260 /* Handle when a new declaration NEWDECL
1261 has the same name as an old one OLDDECL
1262 in the same binding contour.
1263 Prints an error message if appropriate.
1265 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
1266 Otherwise, return 0. */
1268 static int
1269 duplicate_decls (newdecl, olddecl)
1270 register tree newdecl, olddecl;
1272 int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1273 int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1274 && DECL_INITIAL (newdecl) != 0);
1275 tree oldtype = TREE_TYPE (olddecl);
1276 tree newtype = TREE_TYPE (newdecl);
1278 if (TREE_CODE (newtype) == ERROR_MARK
1279 || TREE_CODE (oldtype) == ERROR_MARK)
1280 types_match = 0;
1282 /* New decl is completely inconsistent with the old one =>
1283 tell caller to replace the old one.
1284 This is always an error except in the case of shadowing a builtin. */
1285 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1287 if (TREE_CODE (olddecl) == FUNCTION_DECL
1288 && DECL_BUILT_IN (olddecl))
1290 /* If you declare a built-in function name as static, the
1291 built-in definition is overridden,
1292 but optionally warn this was a bad choice of name. */
1293 if (!TREE_PUBLIC (newdecl))
1295 if (warn_shadow)
1296 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1298 /* Likewise, if the built-in is not ansi, then programs can
1299 override it even globally without an error. */
1300 else if (DECL_BUILT_IN_NONANSI (olddecl))
1301 warning_with_decl (newdecl,
1302 "built-in function `%s' declared as non-function");
1303 else
1304 error_with_decl (newdecl,
1305 "built-in function `%s' declared as non-function");
1307 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1308 && DECL_BUILT_IN_NONANSI (olddecl))
1310 /* If overriding decl is static,
1311 optionally warn this was a bad choice of name. */
1312 if (!TREE_PUBLIC (newdecl))
1314 if (warn_shadow)
1315 warning_with_decl (newdecl, "shadowing library function `%s'");
1317 /* Otherwise, always warn. */
1318 else
1319 warning_with_decl (newdecl,
1320 "library function `%s' declared as non-function");
1322 else
1324 error_with_decl (newdecl, "`%s' redeclared as different kind of symbol");
1325 error_with_decl (olddecl, "previous declaration of `%s'");
1328 return 0;
1331 /* For real parm decl following a forward decl,
1332 return 1 so old decl will be reused. */
1333 if (types_match && TREE_CODE (newdecl) == PARM_DECL
1334 && TREE_ASM_WRITTEN (olddecl) && ! TREE_ASM_WRITTEN (newdecl))
1335 return 1;
1337 /* The new declaration is the same kind of object as the old one.
1338 The declarations may partially match. Print warnings if they don't
1339 match enough. Ultimately, copy most of the information from the new
1340 decl to the old one, and keep using the old one. */
1342 if (flag_traditional && TREE_CODE (newdecl) == FUNCTION_DECL
1343 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (newdecl)) == olddecl
1344 && DECL_INITIAL (olddecl) == 0)
1345 /* If -traditional, avoid error for redeclaring fcn
1346 after implicit decl. */
1348 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1349 && DECL_BUILT_IN (olddecl))
1351 /* A function declaration for a built-in function. */
1352 if (!TREE_PUBLIC (newdecl))
1354 /* If you declare a built-in function name as static, the
1355 built-in definition is overridden,
1356 but optionally warn this was a bad choice of name. */
1357 if (warn_shadow)
1358 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1359 /* Discard the old built-in function. */
1360 return 0;
1362 else if (!types_match)
1364 /* Accept the return type of the new declaration if same modes. */
1365 tree oldreturntype = TREE_TYPE (TREE_TYPE (olddecl));
1366 tree newreturntype = TREE_TYPE (TREE_TYPE (newdecl));
1367 if (TYPE_MODE (oldreturntype) == TYPE_MODE (newreturntype))
1369 /* Function types may be shared, so we can't just modify
1370 the return type of olddecl's function type. */
1371 tree newtype
1372 = build_function_type (newreturntype,
1373 TYPE_ARG_TYPES (TREE_TYPE (olddecl)));
1375 types_match = comptypes (TREE_TYPE (newdecl), newtype);
1376 if (types_match)
1377 TREE_TYPE (olddecl) = newtype;
1379 /* Accept harmless mismatch in first argument type also.
1380 This is for ffs. */
1381 if (TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0
1382 && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) != 0
1383 && TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (newdecl))) != 0
1384 && TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (olddecl))) != 0
1385 && (TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (newdecl))))
1387 TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (olddecl))))))
1389 /* Function types may be shared, so we can't just modify
1390 the return type of olddecl's function type. */
1391 tree newtype
1392 = build_function_type (TREE_TYPE (TREE_TYPE (olddecl)),
1393 tree_cons (NULL_TREE,
1394 TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (newdecl))),
1395 TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (olddecl)))));
1397 types_match = comptypes (TREE_TYPE (newdecl), newtype);
1398 if (types_match)
1399 TREE_TYPE (olddecl) = newtype;
1402 if (!types_match)
1404 /* If types don't match for a built-in, throw away the built-in. */
1405 warning_with_decl (newdecl, "conflicting types for built-in function `%s'");
1406 return 0;
1409 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1410 && DECL_SOURCE_LINE (olddecl) == 0)
1412 /* A function declaration for a predeclared function
1413 that isn't actually built in. */
1414 if (!TREE_PUBLIC (newdecl))
1416 /* If you declare it as static, the
1417 default definition is overridden. */
1418 return 0;
1420 else if (!types_match)
1422 /* If the types don't match, preserve volatility indication.
1423 Later on, we will discard everything else about the
1424 default declaration. */
1425 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1428 /* Permit char *foo () to match void *foo (...) if not pedantic,
1429 if one of them came from a system header file. */
1430 else if (!types_match
1431 && TREE_CODE (olddecl) == FUNCTION_DECL
1432 && TREE_CODE (newdecl) == FUNCTION_DECL
1433 && TREE_CODE (TREE_TYPE (oldtype)) == POINTER_TYPE
1434 && TREE_CODE (TREE_TYPE (newtype)) == POINTER_TYPE
1435 && (DECL_IN_SYSTEM_HEADER (olddecl)
1436 || DECL_IN_SYSTEM_HEADER (newdecl))
1437 && ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (newtype))) == void_type_node
1438 && TYPE_ARG_TYPES (oldtype) == 0
1439 && self_promoting_args_p (TYPE_ARG_TYPES (newtype))
1440 && TREE_TYPE (TREE_TYPE (oldtype)) == char_type_node)
1442 (TREE_TYPE (TREE_TYPE (newtype)) == char_type_node
1443 && TYPE_ARG_TYPES (newtype) == 0
1444 && self_promoting_args_p (TYPE_ARG_TYPES (oldtype))
1445 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)))
1447 if (pedantic)
1448 pedwarn_with_decl (newdecl, "conflicting types for `%s'");
1449 /* Make sure we keep void * as ret type, not char *. */
1450 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)
1451 TREE_TYPE (newdecl) = newtype = oldtype;
1453 else if (!types_match
1454 /* Permit char *foo (int, ...); followed by char *foo ();
1455 if not pedantic. */
1456 && ! (TREE_CODE (olddecl) == FUNCTION_DECL
1457 && ! pedantic
1458 /* Return types must still match. */
1459 && comptypes (TREE_TYPE (oldtype),
1460 TREE_TYPE (newtype))
1461 && TYPE_ARG_TYPES (newtype) == 0))
1463 error_with_decl (newdecl, "conflicting types for `%s'");
1464 /* Check for function type mismatch
1465 involving an empty arglist vs a nonempty one. */
1466 if (TREE_CODE (olddecl) == FUNCTION_DECL
1467 && comptypes (TREE_TYPE (oldtype),
1468 TREE_TYPE (newtype))
1469 && ((TYPE_ARG_TYPES (oldtype) == 0
1470 && DECL_INITIAL (olddecl) == 0)
1472 (TYPE_ARG_TYPES (newtype) == 0
1473 && DECL_INITIAL (newdecl) == 0)))
1475 /* Classify the problem further. */
1476 register tree t = TYPE_ARG_TYPES (oldtype);
1477 if (t == 0)
1478 t = TYPE_ARG_TYPES (newtype);
1479 for (; t; t = TREE_CHAIN (t))
1481 register tree type = TREE_VALUE (t);
1483 if (TREE_CHAIN (t) == 0
1484 && TYPE_MAIN_VARIANT (type) != void_type_node)
1486 error ("A parameter list with an ellipsis can't match");
1487 error ("an empty parameter name list declaration.");
1488 break;
1491 if (TYPE_MAIN_VARIANT (type) == float_type_node
1492 || C_PROMOTING_INTEGER_TYPE_P (type))
1494 error ("An argument type that has a default promotion");
1495 error ("can't match an empty parameter name list declaration.");
1496 break;
1500 error_with_decl (olddecl, "previous declaration of `%s'");
1502 else
1504 char *errmsg = redeclaration_error_message (newdecl, olddecl);
1505 if (errmsg)
1507 error_with_decl (newdecl, errmsg);
1508 error_with_decl (olddecl,
1509 ((DECL_INITIAL (olddecl)
1510 && current_binding_level == global_binding_level)
1511 ? "`%s' previously defined here"
1512 : "`%s' previously declared here"));
1514 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1515 && DECL_INITIAL (olddecl) != 0
1516 && TYPE_ARG_TYPES (oldtype) == 0
1517 && TYPE_ARG_TYPES (newtype) != 0)
1519 register tree type, parm;
1520 register int nargs;
1521 /* Prototype decl follows defn w/o prototype. */
1523 for (parm = TYPE_ACTUAL_ARG_TYPES (oldtype),
1524 type = TYPE_ARG_TYPES (newtype),
1525 nargs = 1;
1526 (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) != void_type_node
1527 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) != void_type_node);
1528 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type), nargs++)
1530 if (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == void_type_node
1531 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
1533 errmsg = "prototype for `%s' follows and number of arguments";
1534 break;
1536 /* Type for passing arg must be consistent
1537 with that declared for the arg. */
1538 if (! comptypes (TREE_VALUE (parm), TREE_VALUE (type))
1539 /* If -traditional, allow `unsigned int' instead of `int'
1540 in the prototype. */
1541 && (! (flag_traditional
1542 && TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == integer_type_node
1543 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == unsigned_type_node)))
1545 errmsg = "prototype for `%s' follows and argument %d";
1546 break;
1549 if (errmsg)
1551 error_with_decl (newdecl, errmsg, nargs);
1552 error_with_decl (olddecl,
1553 "doesn't match non-prototype definition here");
1555 else
1557 warning_with_decl (newdecl, "prototype for `%s' follows");
1558 warning_with_decl (olddecl, "non-prototype definition here");
1561 /* Warn about mismatches in various flags. */
1562 else
1564 /* Warn if function is now inline
1565 but was previously declared not inline and has been called. */
1566 if (TREE_CODE (olddecl) == FUNCTION_DECL
1567 && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl)
1568 && TREE_USED (olddecl))
1569 warning_with_decl (newdecl,
1570 "`%s' declared inline after being called");
1571 if (TREE_CODE (olddecl) == FUNCTION_DECL
1572 && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl)
1573 && DECL_INITIAL (olddecl) != 0)
1574 warning_with_decl (newdecl,
1575 "`%s' declared inline after its definition");
1576 /* It is nice to warn when a function is declared
1577 global first and then static. */
1578 if (TREE_CODE (olddecl) == FUNCTION_DECL
1579 && TREE_PUBLIC (olddecl)
1580 && !TREE_PUBLIC (newdecl))
1581 warning_with_decl (newdecl, "static declaration for `%s' follows non-static");
1583 /* These bits are logically part of the type, for variables.
1584 But not for functions
1585 (where qualifiers are not valid ANSI anyway). */
1586 if (pedantic && TREE_CODE (olddecl) != FUNCTION_DECL
1587 && (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
1588 || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl)))
1589 pedwarn_with_decl (newdecl, "type qualifiers for `%s' conflict with previous decl");
1593 /* Optionally warn about more than one declaration for the same name. */
1594 if (warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0
1595 /* Dont warn about a function declaration
1596 followed by a definition. */
1597 && !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0
1598 && DECL_INITIAL (olddecl) == 0)
1599 /* Don't warn about extern decl followed by (tentative) definition. */
1600 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
1602 warning_with_decl (newdecl, "redundant redeclaration of `%s' in same scope");
1603 warning_with_decl (olddecl, "previous declaration of `%s'");
1606 /* Copy all the DECL_... slots specified in the new decl
1607 except for any that we copy here from the old type.
1609 Past this point, we don't change OLDTYPE and NEWTYPE
1610 even if we change the types of NEWDECL and OLDDECL. */
1612 if (types_match)
1614 /* Merge the data types specified in the two decls. */
1615 if (TREE_CODE (newdecl) != FUNCTION_DECL || !DECL_BUILT_IN (olddecl))
1616 TREE_TYPE (newdecl)
1617 = TREE_TYPE (olddecl)
1618 = common_type (newtype, oldtype);
1620 /* Lay the type out, unless already done. */
1621 if (oldtype != TREE_TYPE (newdecl))
1623 if (TREE_TYPE (newdecl) != error_mark_node)
1624 layout_type (TREE_TYPE (newdecl));
1625 if (TREE_CODE (newdecl) != FUNCTION_DECL
1626 && TREE_CODE (newdecl) != TYPE_DECL
1627 && TREE_CODE (newdecl) != CONST_DECL)
1628 layout_decl (newdecl, 0);
1630 else
1632 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1633 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1634 if (TREE_CODE (olddecl) != FUNCTION_DECL)
1635 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1636 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1639 /* Keep the old rtl since we can safely use it. */
1640 DECL_RTL (newdecl) = DECL_RTL (olddecl);
1642 /* Merge the type qualifiers. */
1643 if (DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
1644 && !TREE_THIS_VOLATILE (newdecl))
1645 TREE_THIS_VOLATILE (olddecl) = 0;
1646 if (TREE_READONLY (newdecl))
1647 TREE_READONLY (olddecl) = 1;
1648 if (TREE_THIS_VOLATILE (newdecl))
1650 TREE_THIS_VOLATILE (olddecl) = 1;
1651 if (TREE_CODE (newdecl) == VAR_DECL)
1652 make_var_volatile (newdecl);
1655 /* Keep source location of definition rather than declaration. */
1656 if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
1658 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
1659 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
1662 /* Merge the unused-warning information. */
1663 if (DECL_IN_SYSTEM_HEADER (olddecl))
1664 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1665 else if (DECL_IN_SYSTEM_HEADER (newdecl))
1666 DECL_IN_SYSTEM_HEADER (olddecl) = 1;
1668 /* Merge the initialization information. */
1669 if (DECL_INITIAL (newdecl) == 0)
1670 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1672 /* If cannot merge, then use the new type and qualifiers,
1673 and don't preserve the old rtl. */
1674 else
1676 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1677 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1678 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1679 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1682 /* Merge the storage class information. */
1683 /* For functions, static overrides non-static. */
1684 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1686 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1687 /* This is since we don't automatically
1688 copy the attributes of NEWDECL into OLDDECL. */
1689 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1690 /* If this clears `static', clear it in the identifier too. */
1691 if (! TREE_PUBLIC (olddecl))
1692 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1694 if (DECL_EXTERNAL (newdecl))
1696 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1697 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1698 /* An extern decl does not override previous storage class. */
1699 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1701 else
1703 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1704 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1707 /* If either decl says `inline', this fn is inline,
1708 unless its definition was passed already. */
1709 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == 0)
1710 DECL_INLINE (olddecl) = 1;
1711 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
1713 /* Get rid of any built-in function if new arg types don't match it
1714 or if we have a function definition. */
1715 if (TREE_CODE (newdecl) == FUNCTION_DECL
1716 && DECL_BUILT_IN (olddecl)
1717 && (!types_match || new_is_definition))
1719 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1720 DECL_BUILT_IN (olddecl) = 0;
1723 /* If redeclaring a builtin function, and not a definition,
1724 it stays built in.
1725 Also preserve various other info from the definition. */
1726 if (TREE_CODE (newdecl) == FUNCTION_DECL && !new_is_definition)
1728 if (DECL_BUILT_IN (olddecl))
1730 DECL_BUILT_IN (newdecl) = 1;
1731 DECL_SET_FUNCTION_CODE (newdecl, DECL_FUNCTION_CODE (olddecl));
1733 else
1734 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
1736 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1737 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1738 DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
1739 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1742 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1743 But preserve OLDdECL's DECL_UID. */
1745 register unsigned olddecl_uid = DECL_UID (olddecl);
1747 bcopy ((char *) newdecl + sizeof (struct tree_common),
1748 (char *) olddecl + sizeof (struct tree_common),
1749 sizeof (struct tree_decl) - sizeof (struct tree_common));
1750 DECL_UID (olddecl) = olddecl_uid;
1753 return 1;
1756 /* Record a decl-node X as belonging to the current lexical scope.
1757 Check for errors (such as an incompatible declaration for the same
1758 name already seen in the same scope).
1760 Returns either X or an old decl for the same name.
1761 If an old decl is returned, it may have been smashed
1762 to agree with what X says. */
1764 tree
1765 pushdecl (x)
1766 tree x;
1768 register tree t;
1769 register tree name = DECL_NAME (x);
1770 register struct binding_level *b = current_binding_level;
1772 DECL_CONTEXT (x) = current_function_decl;
1773 /* A local extern declaration for a function doesn't constitute nesting.
1774 A local auto declaration does, since it's a forward decl
1775 for a nested function coming later. */
1776 if (TREE_CODE (x) == FUNCTION_DECL && DECL_INITIAL (x) == 0
1777 && DECL_EXTERNAL (x))
1778 DECL_CONTEXT (x) = 0;
1780 if (warn_nested_externs && DECL_EXTERNAL (x) && b != global_binding_level
1781 && x != IDENTIFIER_IMPLICIT_DECL (name)
1782 /* Don't print error messages for __FUNCTION__ and __PRETTY_FUNCTION__ */
1783 && !DECL_IN_SYSTEM_HEADER (x))
1784 warning ("nested extern declaration of `%s'", IDENTIFIER_POINTER (name));
1786 if (name)
1788 char *file;
1789 int line;
1791 t = lookup_name_current_level (name);
1792 if (t != 0 && t == error_mark_node)
1793 /* error_mark_node is 0 for a while during initialization! */
1795 t = 0;
1796 error_with_decl (x, "`%s' used prior to declaration");
1799 if (t != 0)
1801 file = DECL_SOURCE_FILE (t);
1802 line = DECL_SOURCE_LINE (t);
1805 if (t != 0 && duplicate_decls (x, t))
1807 if (TREE_CODE (t) == PARM_DECL)
1809 /* Don't allow more than one "real" duplicate
1810 of a forward parm decl. */
1811 TREE_ASM_WRITTEN (t) = TREE_ASM_WRITTEN (x);
1812 return t;
1814 /* If this decl is `static' and an implicit decl was seen previously,
1815 warn. But don't complain if -traditional,
1816 since traditional compilers don't complain. */
1817 if (!flag_traditional && TREE_PUBLIC (name)
1818 && ! TREE_PUBLIC (x) && ! DECL_EXTERNAL (x)
1819 /* We used to warn also for explicit extern followed by static,
1820 but sometimes you need to do it that way. */
1821 && IDENTIFIER_IMPLICIT_DECL (name) != 0)
1823 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
1824 IDENTIFIER_POINTER (name));
1825 pedwarn_with_file_and_line (file, line,
1826 "previous declaration of `%s'",
1827 IDENTIFIER_POINTER (name));
1830 return t;
1833 /* If we are processing a typedef statement, generate a whole new
1834 ..._TYPE node (which will be just an variant of the existing
1835 ..._TYPE node with identical properties) and then install the
1836 TYPE_DECL node generated to represent the typedef name as the
1837 TYPE_NAME of this brand new (duplicate) ..._TYPE node.
1839 The whole point here is to end up with a situation where each
1840 and every ..._TYPE node the compiler creates will be uniquely
1841 associated with AT MOST one node representing a typedef name.
1842 This way, even though the compiler substitutes corresponding
1843 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
1844 early on, later parts of the compiler can always do the reverse
1845 translation and get back the corresponding typedef name. For
1846 example, given:
1848 typedef struct S MY_TYPE;
1849 MY_TYPE object;
1851 Later parts of the compiler might only know that `object' was of
1852 type `struct S' if if were not for code just below. With this
1853 code however, later parts of the compiler see something like:
1855 struct S' == struct S
1856 typedef struct S' MY_TYPE;
1857 struct S' object;
1859 And they can then deduce (from the node for type struct S') that
1860 the original object declaration was:
1862 MY_TYPE object;
1864 Being able to do this is important for proper support of protoize,
1865 and also for generating precise symbolic debugging information
1866 which takes full account of the programmer's (typedef) vocabulary.
1868 Obviously, we don't want to generate a duplicate ..._TYPE node if
1869 the TYPE_DECL node that we are now processing really represents a
1870 standard built-in type.
1872 Since all standard types are effectively declared at line zero
1873 in the source file, we can easily check to see if we are working
1874 on a standard type by checking the current value of lineno. */
1876 if (TREE_CODE (x) == TYPE_DECL)
1878 if (DECL_SOURCE_LINE (x) == 0)
1880 if (TYPE_NAME (TREE_TYPE (x)) == 0)
1881 TYPE_NAME (TREE_TYPE (x)) = x;
1883 else if (TREE_TYPE (x) != error_mark_node)
1885 tree tt = TREE_TYPE (x);
1887 tt = build_type_copy (tt);
1888 TYPE_NAME (tt) = x;
1889 TREE_TYPE (x) = tt;
1893 /* Multiple external decls of the same identifier ought to match.
1894 Check against both global declarations and out of scope (limbo) block
1895 level declarations.
1897 We get warnings about inline functions where they are defined.
1898 Avoid duplicate warnings where they are used. */
1899 if (TREE_PUBLIC (x) && ! DECL_INLINE (x))
1901 tree decl;
1903 if (IDENTIFIER_GLOBAL_VALUE (name) != 0
1904 && (DECL_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
1905 || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name))))
1906 decl = IDENTIFIER_GLOBAL_VALUE (name);
1907 else if (IDENTIFIER_LIMBO_VALUE (name) != 0)
1908 /* Decls in limbo are always extern, so no need to check that. */
1909 decl = IDENTIFIER_LIMBO_VALUE (name);
1910 else
1911 decl = 0;
1913 if (decl && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl))
1914 /* If old decl is built-in, we already warned if we should. */
1915 && !DECL_BUILT_IN (decl))
1917 pedwarn_with_decl (x,
1918 "type mismatch with previous external decl");
1919 pedwarn_with_decl (decl, "previous external decl of `%s'");
1923 /* If a function has had an implicit declaration, and then is defined,
1924 make sure they are compatible. */
1926 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
1927 && IDENTIFIER_GLOBAL_VALUE (name) == 0
1928 && TREE_CODE (x) == FUNCTION_DECL
1929 && ! comptypes (TREE_TYPE (x),
1930 TREE_TYPE (IDENTIFIER_IMPLICIT_DECL (name))))
1932 warning_with_decl (x, "type mismatch with previous implicit declaration");
1933 warning_with_decl (IDENTIFIER_IMPLICIT_DECL (name),
1934 "previous implicit declaration of `%s'");
1937 /* In PCC-compatibility mode, extern decls of vars with no current decl
1938 take effect at top level no matter where they are. */
1939 if (flag_traditional && DECL_EXTERNAL (x)
1940 && lookup_name (name) == 0)
1942 tree type = TREE_TYPE (x);
1944 /* But don't do this if the type contains temporary nodes. */
1945 while (type)
1947 if (type == error_mark_node)
1948 break;
1949 if (! TREE_PERMANENT (type))
1951 warning_with_decl (x, "type of external `%s' is not global");
1952 /* By exiting the loop early, we leave TYPE nonzero,
1953 and thus prevent globalization of the decl. */
1954 break;
1956 else if (TREE_CODE (type) == FUNCTION_TYPE
1957 && TYPE_ARG_TYPES (type) != 0)
1958 /* The types might not be truly local,
1959 but the list of arg types certainly is temporary.
1960 Since prototypes are nontraditional,
1961 ok not to do the traditional thing. */
1962 break;
1963 type = TREE_TYPE (type);
1966 if (type == 0)
1967 b = global_binding_level;
1970 /* This name is new in its binding level.
1971 Install the new declaration and return it. */
1972 if (b == global_binding_level)
1974 /* Install a global value. */
1976 /* If the first global decl has external linkage,
1977 warn if we later see static one. */
1978 if (IDENTIFIER_GLOBAL_VALUE (name) == 0 && TREE_PUBLIC (x))
1979 TREE_PUBLIC (name) = 1;
1981 IDENTIFIER_GLOBAL_VALUE (name) = x;
1983 /* We no longer care about any previous block level declarations. */
1984 IDENTIFIER_LIMBO_VALUE (name) = 0;
1986 /* Don't forget if the function was used via an implicit decl. */
1987 if (IDENTIFIER_IMPLICIT_DECL (name)
1988 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
1989 TREE_USED (x) = 1, TREE_USED (name) = 1;
1991 /* Don't forget if its address was taken in that way. */
1992 if (IDENTIFIER_IMPLICIT_DECL (name)
1993 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
1994 TREE_ADDRESSABLE (x) = 1;
1996 /* Warn about mismatches against previous implicit decl. */
1997 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
1998 /* If this real decl matches the implicit, don't complain. */
1999 && ! (TREE_CODE (x) == FUNCTION_DECL
2000 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (x)))
2001 == integer_type_node)))
2002 pedwarn ("`%s' was previously implicitly declared to return `int'",
2003 IDENTIFIER_POINTER (name));
2005 /* If this decl is `static' and an `extern' was seen previously,
2006 that is erroneous. */
2007 if (TREE_PUBLIC (name)
2008 && ! TREE_PUBLIC (x) && ! DECL_EXTERNAL (x))
2010 /* Okay to redeclare an ANSI built-in as static. */
2011 if (t != 0 && DECL_BUILT_IN (t))
2013 /* Okay to declare a non-ANSI built-in as anything. */
2014 else if (t != 0 && DECL_BUILT_IN_NONANSI (t))
2016 else if (IDENTIFIER_IMPLICIT_DECL (name))
2017 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
2018 IDENTIFIER_POINTER (name));
2019 else
2020 pedwarn ("`%s' was declared `extern' and later `static'",
2021 IDENTIFIER_POINTER (name));
2024 else
2026 /* Here to install a non-global value. */
2027 tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
2028 tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
2029 IDENTIFIER_LOCAL_VALUE (name) = x;
2031 /* If this is an extern function declaration, see if we
2032 have a global definition or declaration for the function. */
2033 if (oldlocal == 0
2034 && DECL_EXTERNAL (x) && !DECL_INLINE (x)
2035 && oldglobal != 0
2036 && TREE_CODE (x) == FUNCTION_DECL
2037 && TREE_CODE (oldglobal) == FUNCTION_DECL)
2039 /* We have one. Their types must agree. */
2040 if (! comptypes (TREE_TYPE (x),
2041 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (name))))
2042 pedwarn_with_decl (x, "extern declaration of `%s' doesn't match global one");
2043 else
2045 /* Inner extern decl is inline if global one is.
2046 Copy enough to really inline it. */
2047 if (DECL_INLINE (oldglobal))
2049 DECL_INLINE (x) = DECL_INLINE (oldglobal);
2050 DECL_INITIAL (x) = (current_function_decl == oldglobal
2051 ? 0 : DECL_INITIAL (oldglobal));
2052 DECL_SAVED_INSNS (x) = DECL_SAVED_INSNS (oldglobal);
2053 DECL_FRAME_SIZE (x) = DECL_FRAME_SIZE (oldglobal);
2054 DECL_ARGUMENTS (x) = DECL_ARGUMENTS (oldglobal);
2055 DECL_RESULT (x) = DECL_RESULT (oldglobal);
2056 TREE_ASM_WRITTEN (x) = TREE_ASM_WRITTEN (oldglobal);
2057 DECL_ABSTRACT_ORIGIN (x) = oldglobal;
2059 /* Inner extern decl is built-in if global one is. */
2060 if (DECL_BUILT_IN (oldglobal))
2062 DECL_BUILT_IN (x) = DECL_BUILT_IN (oldglobal);
2063 DECL_SET_FUNCTION_CODE (x, DECL_FUNCTION_CODE (oldglobal));
2065 /* Keep the arg types from a file-scope fcn defn. */
2066 if (TYPE_ARG_TYPES (TREE_TYPE (oldglobal)) != 0
2067 && DECL_INITIAL (oldglobal)
2068 && TYPE_ARG_TYPES (TREE_TYPE (x)) == 0)
2069 TREE_TYPE (x) = TREE_TYPE (oldglobal);
2073 #if 0 /* This case is probably sometimes the right thing to do. */
2074 /* If we have a local external declaration,
2075 then any file-scope declaration should not
2076 have been static. */
2077 if (oldlocal == 0 && oldglobal != 0
2078 && !TREE_PUBLIC (oldglobal)
2079 && DECL_EXTERNAL (x) && TREE_PUBLIC (x))
2080 warning ("`%s' locally external but globally static",
2081 IDENTIFIER_POINTER (name));
2082 #endif
2084 /* If we have a local external declaration,
2085 and no file-scope declaration has yet been seen,
2086 then if we later have a file-scope decl it must not be static. */
2087 if (oldlocal == 0
2088 && oldglobal == 0
2089 && DECL_EXTERNAL (x)
2090 && TREE_PUBLIC (x))
2092 TREE_PUBLIC (name) = 1;
2094 /* Save this decl, so that we can do type checking against
2095 other decls after it falls out of scope.
2097 Only save it once. This prevents temporary decls created in
2098 expand_inline_function from being used here, since this
2099 will have been set when the inline function was parsed.
2100 It also helps give slightly better warnings. */
2101 if (IDENTIFIER_LIMBO_VALUE (name) == 0)
2102 IDENTIFIER_LIMBO_VALUE (name) = x;
2105 /* Warn if shadowing an argument at the top level of the body. */
2106 if (oldlocal != 0 && !DECL_EXTERNAL (x)
2107 /* This warning doesn't apply to the parms of a nested fcn. */
2108 && ! current_binding_level->parm_flag
2109 /* Check that this is one level down from the parms. */
2110 && current_binding_level->level_chain->parm_flag
2111 /* Check that the decl being shadowed
2112 comes from the parm level, one level up. */
2113 && chain_member (oldlocal, current_binding_level->level_chain->names))
2115 if (TREE_CODE (oldlocal) == PARM_DECL)
2116 pedwarn ("declaration of `%s' shadows a parameter",
2117 IDENTIFIER_POINTER (name));
2118 else
2119 pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
2120 IDENTIFIER_POINTER (name));
2123 /* Maybe warn if shadowing something else. */
2124 else if (warn_shadow && !DECL_EXTERNAL (x)
2125 /* No shadow warnings for internally generated vars. */
2126 && DECL_SOURCE_LINE (x) != 0
2127 /* No shadow warnings for vars made for inlining. */
2128 && ! DECL_FROM_INLINE (x))
2130 char *warnstring = 0;
2132 if (TREE_CODE (x) == PARM_DECL
2133 && current_binding_level->level_chain->parm_flag)
2134 /* Don't warn about the parm names in function declarator
2135 within a function declarator.
2136 It would be nice to avoid warning in any function
2137 declarator in a declaration, as opposed to a definition,
2138 but there is no way to tell it's not a definition. */
2140 else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL)
2141 warnstring = "declaration of `%s' shadows a parameter";
2142 else if (oldlocal != 0)
2143 warnstring = "declaration of `%s' shadows previous local";
2144 else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
2145 && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
2146 warnstring = "declaration of `%s' shadows global declaration";
2148 if (warnstring)
2149 warning (warnstring, IDENTIFIER_POINTER (name));
2152 /* If storing a local value, there may already be one (inherited).
2153 If so, record it for restoration when this binding level ends. */
2154 if (oldlocal != 0)
2155 b->shadowed = tree_cons (name, oldlocal, b->shadowed);
2158 /* Keep count of variables in this level with incomplete type. */
2159 if (TYPE_SIZE (TREE_TYPE (x)) == 0)
2160 ++b->n_incomplete;
2163 /* Put decls on list in reverse order.
2164 We will reverse them later if necessary. */
2165 TREE_CHAIN (x) = b->names;
2166 b->names = x;
2168 return x;
2171 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */
2173 tree
2174 pushdecl_top_level (x)
2175 tree x;
2177 register tree t;
2178 register struct binding_level *b = current_binding_level;
2180 current_binding_level = global_binding_level;
2181 t = pushdecl (x);
2182 current_binding_level = b;
2183 return t;
2186 /* Generate an implicit declaration for identifier FUNCTIONID
2187 as a function of type int (). Print a warning if appropriate. */
2189 tree
2190 implicitly_declare (functionid)
2191 tree functionid;
2193 register tree decl;
2194 int traditional_warning = 0;
2195 /* Only one "implicit declaration" warning per identifier. */
2196 int implicit_warning;
2198 /* Save the decl permanently so we can warn if definition follows. */
2199 push_obstacks_nochange ();
2200 end_temporary_allocation ();
2202 /* We used to reuse an old implicit decl here,
2203 but this loses with inline functions because it can clobber
2204 the saved decl chains. */
2205 /* if (IDENTIFIER_IMPLICIT_DECL (functionid) != 0)
2206 decl = IDENTIFIER_IMPLICIT_DECL (functionid);
2207 else */
2208 decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
2210 /* Warn of implicit decl following explicit local extern decl.
2211 This is probably a program designed for traditional C. */
2212 if (TREE_PUBLIC (functionid) && IDENTIFIER_GLOBAL_VALUE (functionid) == 0)
2213 traditional_warning = 1;
2215 /* Warn once of an implicit declaration. */
2216 implicit_warning = (IDENTIFIER_IMPLICIT_DECL (functionid) == 0);
2218 DECL_EXTERNAL (decl) = 1;
2219 TREE_PUBLIC (decl) = 1;
2221 /* Record that we have an implicit decl and this is it. */
2222 IDENTIFIER_IMPLICIT_DECL (functionid) = decl;
2224 /* ANSI standard says implicit declarations are in the innermost block.
2225 So we record the decl in the standard fashion.
2226 If flag_traditional is set, pushdecl does it top-level. */
2227 pushdecl (decl);
2229 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
2230 maybe_objc_check_decl (decl);
2232 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
2234 if (warn_implicit && implicit_warning)
2235 warning ("implicit declaration of function `%s'",
2236 IDENTIFIER_POINTER (functionid));
2237 else if (warn_traditional && traditional_warning)
2238 warning ("function `%s' was previously declared within a block",
2239 IDENTIFIER_POINTER (functionid));
2241 /* Write a record describing this implicit function declaration to the
2242 prototypes file (if requested). */
2244 gen_aux_info_record (decl, 0, 1, 0);
2246 pop_obstacks ();
2248 return decl;
2251 /* Return zero if the declaration NEWDECL is valid
2252 when the declaration OLDDECL (assumed to be for the same name)
2253 has already been seen.
2254 Otherwise return an error message format string with a %s
2255 where the identifier should go. */
2257 static char *
2258 redeclaration_error_message (newdecl, olddecl)
2259 tree newdecl, olddecl;
2261 if (TREE_CODE (newdecl) == TYPE_DECL)
2263 if (flag_traditional && TREE_TYPE (newdecl) == TREE_TYPE (olddecl))
2264 return 0;
2265 return "redefinition of `%s'";
2267 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2269 /* Declarations of functions can insist on internal linkage
2270 but they can't be inconsistent with internal linkage,
2271 so there can be no error on that account.
2272 However defining the same name twice is no good. */
2273 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0
2274 /* However, defining once as extern inline and a second
2275 time in another way is ok. */
2276 && !(DECL_INLINE (olddecl) && DECL_EXTERNAL (olddecl)
2277 && !(DECL_INLINE (newdecl) && DECL_EXTERNAL (newdecl))))
2278 return "redefinition of `%s'";
2279 return 0;
2281 else if (current_binding_level == global_binding_level)
2283 /* Objects declared at top level: */
2284 /* If at least one is a reference, it's ok. */
2285 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2286 return 0;
2287 /* Reject two definitions. */
2288 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0)
2289 return "redefinition of `%s'";
2290 /* Now we have two tentative defs, or one tentative and one real def. */
2291 /* Insist that the linkage match. */
2292 if (TREE_PUBLIC (olddecl) != TREE_PUBLIC (newdecl))
2293 return "conflicting declarations of `%s'";
2294 return 0;
2296 else if (current_binding_level->parm_flag
2297 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2298 return 0;
2299 else
2301 /* Objects declared with block scope: */
2302 /* Reject two definitions, and reject a definition
2303 together with an external reference. */
2304 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2305 return "redeclaration of `%s'";
2306 return 0;
2310 /* Get the LABEL_DECL corresponding to identifier ID as a label.
2311 Create one if none exists so far for the current function.
2312 This function is called for both label definitions and label references. */
2314 tree
2315 lookup_label (id)
2316 tree id;
2318 register tree decl = IDENTIFIER_LABEL_VALUE (id);
2320 if (current_function_decl == 0)
2322 error ("label %s referenced outside of any function",
2323 IDENTIFIER_POINTER (id));
2324 return 0;
2327 /* Use a label already defined or ref'd with this name. */
2328 if (decl != 0)
2330 /* But not if it is inherited and wasn't declared to be inheritable. */
2331 if (DECL_CONTEXT (decl) != current_function_decl
2332 && ! C_DECLARED_LABEL_FLAG (decl))
2333 return shadow_label (id);
2334 return decl;
2337 decl = build_decl (LABEL_DECL, id, void_type_node);
2339 /* Make sure every label has an rtx. */
2340 label_rtx (decl);
2342 /* A label not explicitly declared must be local to where it's ref'd. */
2343 DECL_CONTEXT (decl) = current_function_decl;
2345 DECL_MODE (decl) = VOIDmode;
2347 /* Say where one reference is to the label,
2348 for the sake of the error if it is not defined. */
2349 DECL_SOURCE_LINE (decl) = lineno;
2350 DECL_SOURCE_FILE (decl) = input_filename;
2352 IDENTIFIER_LABEL_VALUE (id) = decl;
2354 named_labels = tree_cons (NULL_TREE, decl, named_labels);
2356 return decl;
2359 /* Make a label named NAME in the current function,
2360 shadowing silently any that may be inherited from containing functions
2361 or containing scopes.
2363 Note that valid use, if the label being shadowed
2364 comes from another scope in the same function,
2365 requires calling declare_nonlocal_label right away. */
2367 tree
2368 shadow_label (name)
2369 tree name;
2371 register tree decl = IDENTIFIER_LABEL_VALUE (name);
2373 if (decl != 0)
2375 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2376 IDENTIFIER_LABEL_VALUE (name) = decl = 0;
2379 return lookup_label (name);
2382 /* Define a label, specifying the location in the source file.
2383 Return the LABEL_DECL node for the label, if the definition is valid.
2384 Otherwise return 0. */
2386 tree
2387 define_label (filename, line, name)
2388 char *filename;
2389 int line;
2390 tree name;
2392 tree decl = lookup_label (name);
2394 /* If label with this name is known from an outer context, shadow it. */
2395 if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl)
2397 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2398 IDENTIFIER_LABEL_VALUE (name) = 0;
2399 decl = lookup_label (name);
2402 if (DECL_INITIAL (decl) != 0)
2404 error ("duplicate label `%s'", IDENTIFIER_POINTER (name));
2405 return 0;
2407 else
2409 /* Mark label as having been defined. */
2410 DECL_INITIAL (decl) = error_mark_node;
2411 /* Say where in the source. */
2412 DECL_SOURCE_FILE (decl) = filename;
2413 DECL_SOURCE_LINE (decl) = line;
2414 return decl;
2418 /* Return the list of declarations of the current level.
2419 Note that this list is in reverse order unless/until
2420 you nreverse it; and when you do nreverse it, you must
2421 store the result back using `storedecls' or you will lose. */
2423 tree
2424 getdecls ()
2426 return current_binding_level->names;
2429 /* Return the list of type-tags (for structs, etc) of the current level. */
2431 tree
2432 gettags ()
2434 return current_binding_level->tags;
2437 /* Store the list of declarations of the current level.
2438 This is done for the parameter declarations of a function being defined,
2439 after they are modified in the light of any missing parameters. */
2441 static void
2442 storedecls (decls)
2443 tree decls;
2445 current_binding_level->names = decls;
2448 /* Similarly, store the list of tags of the current level. */
2450 static void
2451 storetags (tags)
2452 tree tags;
2454 current_binding_level->tags = tags;
2457 /* Given NAME, an IDENTIFIER_NODE,
2458 return the structure (or union or enum) definition for that name.
2459 Searches binding levels from BINDING_LEVEL up to the global level.
2460 If THISLEVEL_ONLY is nonzero, searches only the specified context
2461 (but skips any tag-transparent contexts to find one that is
2462 meaningful for tags).
2463 CODE says which kind of type the caller wants;
2464 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2465 If the wrong kind of type is found, an error is reported. */
2467 static tree
2468 lookup_tag (code, name, binding_level, thislevel_only)
2469 enum tree_code code;
2470 struct binding_level *binding_level;
2471 tree name;
2472 int thislevel_only;
2474 register struct binding_level *level;
2476 for (level = binding_level; level; level = level->level_chain)
2478 register tree tail;
2479 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2481 if (TREE_PURPOSE (tail) == name)
2483 if (TREE_CODE (TREE_VALUE (tail)) != code)
2485 /* Definition isn't the kind we were looking for. */
2486 pending_invalid_xref = name;
2487 pending_invalid_xref_file = input_filename;
2488 pending_invalid_xref_line = lineno;
2490 return TREE_VALUE (tail);
2493 if (thislevel_only && ! level->tag_transparent)
2494 return NULL_TREE;
2496 return NULL_TREE;
2499 /* Print an error message now
2500 for a recent invalid struct, union or enum cross reference.
2501 We don't print them immediately because they are not invalid
2502 when used in the `struct foo;' construct for shadowing. */
2504 void
2505 pending_xref_error ()
2507 if (pending_invalid_xref != 0)
2508 error_with_file_and_line (pending_invalid_xref_file,
2509 pending_invalid_xref_line,
2510 "`%s' defined as wrong kind of tag",
2511 IDENTIFIER_POINTER (pending_invalid_xref));
2512 pending_invalid_xref = 0;
2515 /* Given a type, find the tag that was defined for it and return the tag name.
2516 Otherwise return 0. */
2518 static tree
2519 lookup_tag_reverse (type)
2520 tree type;
2522 register struct binding_level *level;
2524 for (level = current_binding_level; level; level = level->level_chain)
2526 register tree tail;
2527 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2529 if (TREE_VALUE (tail) == type)
2530 return TREE_PURPOSE (tail);
2533 return NULL_TREE;
2536 /* Look up NAME in the current binding level and its superiors
2537 in the namespace of variables, functions and typedefs.
2538 Return a ..._DECL node of some kind representing its definition,
2539 or return 0 if it is undefined. */
2541 tree
2542 lookup_name (name)
2543 tree name;
2545 register tree val;
2546 if (current_binding_level != global_binding_level
2547 && IDENTIFIER_LOCAL_VALUE (name))
2548 val = IDENTIFIER_LOCAL_VALUE (name);
2549 else
2550 val = IDENTIFIER_GLOBAL_VALUE (name);
2551 return val;
2554 /* Similar to `lookup_name' but look only at current binding level. */
2556 tree
2557 lookup_name_current_level (name)
2558 tree name;
2560 register tree t;
2562 if (current_binding_level == global_binding_level)
2563 return IDENTIFIER_GLOBAL_VALUE (name);
2565 if (IDENTIFIER_LOCAL_VALUE (name) == 0)
2566 return 0;
2568 for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
2569 if (DECL_NAME (t) == name)
2570 break;
2572 return t;
2575 /* Create the predefined scalar types of C,
2576 and some nodes representing standard constants (0, 1, (void *)0).
2577 Initialize the global binding level.
2578 Make definitions for built-in primitive functions. */
2580 void
2581 init_decl_processing ()
2583 register tree endlink;
2584 /* Either char* or void*. */
2585 tree traditional_ptr_type_node;
2586 /* Data types of memcpy and strlen. */
2587 tree memcpy_ftype, strlen_ftype;
2588 tree void_ftype_any;
2589 int wchar_type_size;
2590 tree temp;
2591 tree array_domain_type;
2593 current_function_decl = NULL;
2594 named_labels = NULL;
2595 current_binding_level = NULL_BINDING_LEVEL;
2596 free_binding_level = NULL_BINDING_LEVEL;
2597 pushlevel (0); /* make the binding_level structure for global names */
2598 global_binding_level = current_binding_level;
2600 /* Define `int' and `char' first so that dbx will output them first. */
2602 integer_type_node = make_signed_type (INT_TYPE_SIZE);
2603 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_INT],
2604 integer_type_node));
2606 /* Define `char', which is like either `signed char' or `unsigned char'
2607 but not the same as either. */
2609 char_type_node
2610 = (flag_signed_char
2611 ? make_signed_type (CHAR_TYPE_SIZE)
2612 : make_unsigned_type (CHAR_TYPE_SIZE));
2613 pushdecl (build_decl (TYPE_DECL, get_identifier ("char"),
2614 char_type_node));
2616 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
2617 pushdecl (build_decl (TYPE_DECL, get_identifier ("long int"),
2618 long_integer_type_node));
2620 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
2621 pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
2622 unsigned_type_node));
2624 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
2625 pushdecl (build_decl (TYPE_DECL, get_identifier ("long unsigned int"),
2626 long_unsigned_type_node));
2628 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
2629 pushdecl (build_decl (TYPE_DECL, get_identifier ("long long int"),
2630 long_long_integer_type_node));
2632 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
2633 pushdecl (build_decl (TYPE_DECL, get_identifier ("long long unsigned int"),
2634 long_long_unsigned_type_node));
2636 /* `unsigned long' is the standard type for sizeof.
2637 Traditionally, use a signed type.
2638 Note that stddef.h uses `unsigned long',
2639 and this must agree, even of long and int are the same size. */
2640 sizetype
2641 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
2642 if (flag_traditional && TREE_UNSIGNED (sizetype))
2643 sizetype = signed_type (sizetype);
2645 ptrdiff_type_node
2646 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
2648 TREE_TYPE (TYPE_SIZE (integer_type_node)) = sizetype;
2649 TREE_TYPE (TYPE_SIZE (char_type_node)) = sizetype;
2650 TREE_TYPE (TYPE_SIZE (unsigned_type_node)) = sizetype;
2651 TREE_TYPE (TYPE_SIZE (long_unsigned_type_node)) = sizetype;
2652 TREE_TYPE (TYPE_SIZE (long_integer_type_node)) = sizetype;
2653 TREE_TYPE (TYPE_SIZE (long_long_integer_type_node)) = sizetype;
2654 TREE_TYPE (TYPE_SIZE (long_long_unsigned_type_node)) = sizetype;
2656 error_mark_node = make_node (ERROR_MARK);
2657 TREE_TYPE (error_mark_node) = error_mark_node;
2659 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
2660 pushdecl (build_decl (TYPE_DECL, get_identifier ("short int"),
2661 short_integer_type_node));
2663 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
2664 pushdecl (build_decl (TYPE_DECL, get_identifier ("short unsigned int"),
2665 short_unsigned_type_node));
2667 /* Define both `signed char' and `unsigned char'. */
2668 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
2669 pushdecl (build_decl (TYPE_DECL, get_identifier ("signed char"),
2670 signed_char_type_node));
2672 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
2673 pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
2674 unsigned_char_type_node));
2676 intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
2677 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
2679 intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
2680 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
2682 intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
2683 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
2685 intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
2686 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
2688 unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
2689 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
2691 unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
2692 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
2694 unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
2695 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
2697 unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
2698 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
2700 float_type_node = make_node (REAL_TYPE);
2701 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
2702 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_FLOAT],
2703 float_type_node));
2704 layout_type (float_type_node);
2706 double_type_node = make_node (REAL_TYPE);
2707 if (flag_short_double)
2708 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
2709 else
2710 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
2711 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_DOUBLE],
2712 double_type_node));
2713 layout_type (double_type_node);
2715 long_double_type_node = make_node (REAL_TYPE);
2716 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
2717 pushdecl (build_decl (TYPE_DECL, get_identifier ("long double"),
2718 long_double_type_node));
2719 layout_type (long_double_type_node);
2721 complex_integer_type_node = make_node (COMPLEX_TYPE);
2722 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
2723 complex_integer_type_node));
2724 TREE_TYPE (complex_integer_type_node) = integer_type_node;
2725 layout_type (complex_integer_type_node);
2727 complex_float_type_node = make_node (COMPLEX_TYPE);
2728 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
2729 complex_float_type_node));
2730 TREE_TYPE (complex_float_type_node) = float_type_node;
2731 layout_type (complex_float_type_node);
2733 complex_double_type_node = make_node (COMPLEX_TYPE);
2734 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
2735 complex_double_type_node));
2736 TREE_TYPE (complex_double_type_node) = double_type_node;
2737 layout_type (complex_double_type_node);
2739 complex_long_double_type_node = make_node (COMPLEX_TYPE);
2740 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
2741 complex_long_double_type_node));
2742 TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
2743 layout_type (complex_long_double_type_node);
2745 wchar_type_node
2746 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
2747 wchar_type_size = TYPE_PRECISION (wchar_type_node);
2748 signed_wchar_type_node = type_for_size (wchar_type_size, 0);
2749 unsigned_wchar_type_node = type_for_size (wchar_type_size, 1);
2751 integer_zero_node = build_int_2 (0, 0);
2752 TREE_TYPE (integer_zero_node) = integer_type_node;
2753 integer_one_node = build_int_2 (1, 0);
2754 TREE_TYPE (integer_one_node) = integer_type_node;
2756 size_zero_node = build_int_2 (0, 0);
2757 TREE_TYPE (size_zero_node) = sizetype;
2758 size_one_node = build_int_2 (1, 0);
2759 TREE_TYPE (size_one_node) = sizetype;
2761 void_type_node = make_node (VOID_TYPE);
2762 pushdecl (build_decl (TYPE_DECL,
2763 ridpointers[(int) RID_VOID], void_type_node));
2764 layout_type (void_type_node); /* Uses integer_zero_node */
2765 /* We are not going to have real types in C with less than byte alignment,
2766 so we might as well not have any types that claim to have it. */
2767 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
2769 null_pointer_node = build_int_2 (0, 0);
2770 TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
2771 layout_type (TREE_TYPE (null_pointer_node));
2773 string_type_node = build_pointer_type (char_type_node);
2774 const_string_type_node
2775 = build_pointer_type (build_type_variant (char_type_node, 1, 0));
2777 /* Make a type to be the domain of a few array types
2778 whose domains don't really matter.
2779 200 is small enough that it always fits in size_t
2780 and large enough that it can hold most function names for the
2781 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
2782 array_domain_type = build_index_type (build_int_2 (200, 0));
2784 /* make a type for arrays of characters.
2785 With luck nothing will ever really depend on the length of this
2786 array type. */
2787 char_array_type_node
2788 = build_array_type (char_type_node, array_domain_type);
2789 /* Likewise for arrays of ints. */
2790 int_array_type_node
2791 = build_array_type (integer_type_node, array_domain_type);
2792 /* This is for wide string constants. */
2793 wchar_array_type_node
2794 = build_array_type (wchar_type_node, array_domain_type);
2796 default_function_type
2797 = build_function_type (integer_type_node, NULL_TREE);
2799 ptr_type_node = build_pointer_type (void_type_node);
2800 const_ptr_type_node
2801 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
2803 endlink = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
2805 void_ftype_any
2806 = build_function_type (void_type_node, NULL_TREE);
2808 double_ftype_double
2809 = build_function_type (double_type_node,
2810 tree_cons (NULL_TREE, double_type_node, endlink));
2812 double_ftype_double_double
2813 = build_function_type (double_type_node,
2814 tree_cons (NULL_TREE, double_type_node,
2815 tree_cons (NULL_TREE,
2816 double_type_node, endlink)));
2818 int_ftype_int
2819 = build_function_type (integer_type_node,
2820 tree_cons (NULL_TREE, integer_type_node, endlink));
2822 long_ftype_long
2823 = build_function_type (long_integer_type_node,
2824 tree_cons (NULL_TREE,
2825 long_integer_type_node, endlink));
2827 void_ftype_ptr_ptr_int
2828 = build_function_type (void_type_node,
2829 tree_cons (NULL_TREE, ptr_type_node,
2830 tree_cons (NULL_TREE, ptr_type_node,
2831 tree_cons (NULL_TREE,
2832 integer_type_node,
2833 endlink))));
2835 int_ftype_cptr_cptr_sizet
2836 = build_function_type (integer_type_node,
2837 tree_cons (NULL_TREE, const_ptr_type_node,
2838 tree_cons (NULL_TREE, const_ptr_type_node,
2839 tree_cons (NULL_TREE,
2840 sizetype,
2841 endlink))));
2843 void_ftype_ptr_int_int
2844 = build_function_type (void_type_node,
2845 tree_cons (NULL_TREE, ptr_type_node,
2846 tree_cons (NULL_TREE, integer_type_node,
2847 tree_cons (NULL_TREE,
2848 integer_type_node,
2849 endlink))));
2851 string_ftype_ptr_ptr /* strcpy prototype */
2852 = build_function_type (string_type_node,
2853 tree_cons (NULL_TREE, string_type_node,
2854 tree_cons (NULL_TREE,
2855 const_string_type_node,
2856 endlink)));
2858 int_ftype_string_string /* strcmp prototype */
2859 = build_function_type (integer_type_node,
2860 tree_cons (NULL_TREE, const_string_type_node,
2861 tree_cons (NULL_TREE,
2862 const_string_type_node,
2863 endlink)));
2865 strlen_ftype /* strlen prototype */
2866 = build_function_type (flag_traditional ? integer_type_node : sizetype,
2867 tree_cons (NULL_TREE, const_string_type_node,
2868 endlink));
2870 traditional_ptr_type_node
2871 = (flag_traditional ? string_type_node : ptr_type_node);
2873 memcpy_ftype /* memcpy prototype */
2874 = build_function_type (traditional_ptr_type_node,
2875 tree_cons (NULL_TREE, ptr_type_node,
2876 tree_cons (NULL_TREE, const_ptr_type_node,
2877 tree_cons (NULL_TREE,
2878 sizetype,
2879 endlink))));
2881 builtin_function ("__builtin_constant_p", int_ftype_int,
2882 BUILT_IN_CONSTANT_P, NULL_PTR);
2884 builtin_function ("__builtin_return_address",
2885 build_function_type (ptr_type_node,
2886 tree_cons (NULL_TREE,
2887 unsigned_type_node,
2888 endlink)),
2889 BUILT_IN_RETURN_ADDRESS, NULL_PTR);
2891 builtin_function ("__builtin_frame_address",
2892 build_function_type (ptr_type_node,
2893 tree_cons (NULL_TREE,
2894 unsigned_type_node,
2895 endlink)),
2896 BUILT_IN_FRAME_ADDRESS, NULL_PTR);
2898 builtin_function ("__builtin_alloca",
2899 build_function_type (ptr_type_node,
2900 tree_cons (NULL_TREE,
2901 sizetype,
2902 endlink)),
2903 BUILT_IN_ALLOCA, "alloca");
2904 builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
2905 /* Define alloca, ffs as builtins.
2906 Declare _exit just to mark it as volatile. */
2907 if (! flag_no_builtin && !flag_no_nonansi_builtin)
2909 temp = builtin_function ("alloca",
2910 build_function_type (ptr_type_node,
2911 tree_cons (NULL_TREE,
2912 sizetype,
2913 endlink)),
2914 BUILT_IN_ALLOCA, NULL_PTR);
2915 /* Suppress error if redefined as a non-function. */
2916 DECL_BUILT_IN_NONANSI (temp) = 1;
2917 temp = builtin_function ("ffs", int_ftype_int, BUILT_IN_FFS, NULL_PTR);
2918 /* Suppress error if redefined as a non-function. */
2919 DECL_BUILT_IN_NONANSI (temp) = 1;
2920 temp = builtin_function ("_exit", void_ftype_any, NOT_BUILT_IN,
2921 NULL_PTR);
2922 TREE_THIS_VOLATILE (temp) = 1;
2923 TREE_SIDE_EFFECTS (temp) = 1;
2924 /* Suppress error if redefined as a non-function. */
2925 DECL_BUILT_IN_NONANSI (temp) = 1;
2928 builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
2929 builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS,
2930 NULL_PTR);
2931 builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS,
2932 NULL_PTR);
2933 builtin_function ("__builtin_saveregs",
2934 build_function_type (ptr_type_node, NULL_TREE),
2935 BUILT_IN_SAVEREGS, NULL_PTR);
2936 /* EXPAND_BUILTIN_VARARGS is obsolete. */
2937 #if 0
2938 builtin_function ("__builtin_varargs",
2939 build_function_type (ptr_type_node,
2940 tree_cons (NULL_TREE,
2941 integer_type_node,
2942 endlink)),
2943 BUILT_IN_VARARGS, NULL_PTR);
2944 #endif
2945 builtin_function ("__builtin_classify_type", default_function_type,
2946 BUILT_IN_CLASSIFY_TYPE, NULL_PTR);
2947 builtin_function ("__builtin_next_arg",
2948 build_function_type (ptr_type_node, endlink),
2949 BUILT_IN_NEXT_ARG, NULL_PTR);
2950 builtin_function ("__builtin_args_info",
2951 build_function_type (integer_type_node,
2952 tree_cons (NULL_TREE,
2953 integer_type_node,
2954 endlink)),
2955 BUILT_IN_ARGS_INFO, NULL_PTR);
2957 /* Untyped call and return. */
2958 builtin_function ("__builtin_apply_args",
2959 build_function_type (ptr_type_node, NULL_TREE),
2960 BUILT_IN_APPLY_ARGS, NULL_PTR);
2962 temp = tree_cons (NULL_TREE,
2963 build_pointer_type (build_function_type (void_type_node,
2964 NULL_TREE)),
2965 tree_cons (NULL_TREE,
2966 ptr_type_node,
2967 tree_cons (NULL_TREE,
2968 sizetype,
2969 endlink)));
2970 builtin_function ("__builtin_apply",
2971 build_function_type (ptr_type_node, temp),
2972 BUILT_IN_APPLY, NULL_PTR);
2973 builtin_function ("__builtin_return",
2974 build_function_type (void_type_node,
2975 tree_cons (NULL_TREE,
2976 ptr_type_node,
2977 endlink)),
2978 BUILT_IN_RETURN, NULL_PTR);
2980 /* Currently under experimentation. */
2981 builtin_function ("__builtin_memcpy", memcpy_ftype,
2982 BUILT_IN_MEMCPY, "memcpy");
2983 builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
2984 BUILT_IN_MEMCMP, "memcmp");
2985 builtin_function ("__builtin_strcmp", int_ftype_string_string,
2986 BUILT_IN_STRCMP, "strcmp");
2987 builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
2988 BUILT_IN_STRCPY, "strcpy");
2989 builtin_function ("__builtin_strlen", strlen_ftype,
2990 BUILT_IN_STRLEN, "strlen");
2991 builtin_function ("__builtin_fsqrt", double_ftype_double,
2992 BUILT_IN_FSQRT, "sqrt");
2993 builtin_function ("__builtin_sin", double_ftype_double,
2994 BUILT_IN_SIN, "sin");
2995 builtin_function ("__builtin_cos", double_ftype_double,
2996 BUILT_IN_COS, "cos");
2998 /* In an ANSI C program, it is okay to supply built-in meanings
2999 for these functions, since applications cannot validly use them
3000 with any other meaning.
3001 However, honor the -fno-builtin option. */
3002 if (!flag_no_builtin)
3004 builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, NULL_PTR);
3005 builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, NULL_PTR);
3006 builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, NULL_PTR);
3007 builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, NULL_PTR);
3008 builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP,
3009 NULL_PTR);
3010 builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP,
3011 NULL_PTR);
3012 builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY,
3013 NULL_PTR);
3014 builtin_function ("strlen", strlen_ftype, BUILT_IN_STRLEN, NULL_PTR);
3015 builtin_function ("sqrt", double_ftype_double, BUILT_IN_FSQRT, NULL_PTR);
3016 builtin_function ("sin", double_ftype_double, BUILT_IN_SIN, NULL_PTR);
3017 builtin_function ("cos", double_ftype_double, BUILT_IN_COS, NULL_PTR);
3019 /* Declare these functions volatile
3020 to avoid spurious "control drops through" warnings. */
3021 /* Don't specify the argument types, to avoid errors
3022 from certain code which isn't valid in ANSI but which exists. */
3023 temp = builtin_function ("abort", void_ftype_any, NOT_BUILT_IN,
3024 NULL_PTR);
3025 TREE_THIS_VOLATILE (temp) = 1;
3026 TREE_SIDE_EFFECTS (temp) = 1;
3027 temp = builtin_function ("exit", void_ftype_any, NOT_BUILT_IN, NULL_PTR);
3028 TREE_THIS_VOLATILE (temp) = 1;
3029 TREE_SIDE_EFFECTS (temp) = 1;
3032 #if 0
3033 /* Support for these has not been written in either expand_builtin
3034 or build_function_call. */
3035 builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, NULL_PTR);
3036 builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, NULL_PTR);
3037 builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR,
3038 NULL_PTR);
3039 builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL,
3040 NULL_PTR);
3041 builtin_function ("__builtin_fmod", double_ftype_double_double,
3042 BUILT_IN_FMOD, NULL_PTR);
3043 builtin_function ("__builtin_frem", double_ftype_double_double,
3044 BUILT_IN_FREM, NULL_PTR);
3045 builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int,
3046 BUILT_IN_MEMSET, NULL_PTR);
3047 builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP,
3048 NULL_PTR);
3049 builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN,
3050 NULL_PTR);
3051 #endif
3053 /* Create the global bindings for __FUNCTION__ and __PRETTY_FUNCTION__. */
3054 declare_function_name ();
3056 start_identifier_warnings ();
3058 init_format_info_table ();
3060 init_iterators ();
3062 incomplete_decl_finalize_hook = finish_incomplete_decl;
3065 /* Return a definition for a builtin function named NAME and whose data type
3066 is TYPE. TYPE should be a function type with argument types.
3067 FUNCTION_CODE tells later passes how to compile calls to this function.
3068 See tree.h for its possible values.
3070 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3071 the name to be called if we can't opencode the function. */
3073 tree
3074 builtin_function (name, type, function_code, library_name)
3075 char *name;
3076 tree type;
3077 enum built_in_function function_code;
3078 char *library_name;
3080 tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
3081 DECL_EXTERNAL (decl) = 1;
3082 TREE_PUBLIC (decl) = 1;
3083 /* If -traditional, permit redefining a builtin function any way you like.
3084 (Though really, if the program redefines these functions,
3085 it probably won't work right unless compiled with -fno-builtin.) */
3086 if (flag_traditional && name[0] != '_')
3087 DECL_BUILT_IN_NONANSI (decl) = 1;
3088 if (library_name)
3089 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
3090 make_decl_rtl (decl, NULL_PTR, 1);
3091 pushdecl (decl);
3092 if (function_code != NOT_BUILT_IN)
3094 DECL_BUILT_IN (decl) = 1;
3095 DECL_SET_FUNCTION_CODE (decl, function_code);
3097 /* Warn if a function in the namespace for users
3098 is used without an occasion to consider it declared. */
3099 if (name[0] != '_' || name[1] != '_')
3100 C_DECL_ANTICIPATED (decl) = 1;
3102 return decl;
3105 /* Called when a declaration is seen that contains no names to declare.
3106 If its type is a reference to a structure, union or enum inherited
3107 from a containing scope, shadow that tag name for the current scope
3108 with a forward reference.
3109 If its type defines a new named structure or union
3110 or defines an enum, it is valid but we need not do anything here.
3111 Otherwise, it is an error. */
3113 void
3114 shadow_tag (declspecs)
3115 tree declspecs;
3117 shadow_tag_warned (declspecs, 0);
3120 void
3121 shadow_tag_warned (declspecs, warned)
3122 tree declspecs;
3123 int warned;
3124 /* 1 => we have done a pedwarn. 2 => we have done a warning, but
3125 no pedwarn. */
3127 int found_tag = 0;
3128 register tree link;
3130 pending_invalid_xref = 0;
3132 for (link = declspecs; link; link = TREE_CHAIN (link))
3134 register tree value = TREE_VALUE (link);
3135 register enum tree_code code = TREE_CODE (value);
3137 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3138 /* Used to test also that TYPE_SIZE (value) != 0.
3139 That caused warning for `struct foo;' at top level in the file. */
3141 register tree name = lookup_tag_reverse (value);
3142 register tree t;
3144 found_tag++;
3146 if (name == 0)
3148 if (warned != 1 && code != ENUMERAL_TYPE)
3149 /* Empty unnamed enum OK */
3151 pedwarn ("unnamed struct/union that defines no instances");
3152 warned = 1;
3155 else
3157 t = lookup_tag (code, name, current_binding_level, 1);
3159 if (t == 0)
3161 t = make_node (code);
3162 pushtag (name, t);
3166 else
3168 if (!warned)
3170 warning ("useless keyword or type name in empty declaration");
3171 warned = 2;
3176 if (found_tag > 1)
3177 error ("two types specified in one empty declaration");
3179 if (warned != 1)
3181 if (found_tag == 0)
3182 pedwarn ("empty declaration");
3186 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3188 tree
3189 groktypename (typename)
3190 tree typename;
3192 if (TREE_CODE (typename) != TREE_LIST)
3193 return typename;
3194 return grokdeclarator (TREE_VALUE (typename),
3195 TREE_PURPOSE (typename),
3196 TYPENAME, 0);
3199 /* Return a PARM_DECL node for a given pair of specs and declarator. */
3201 tree
3202 groktypename_in_parm_context (typename)
3203 tree typename;
3205 if (TREE_CODE (typename) != TREE_LIST)
3206 return typename;
3207 return grokdeclarator (TREE_VALUE (typename),
3208 TREE_PURPOSE (typename),
3209 PARM, 0);
3212 /* Decode a declarator in an ordinary declaration or data definition.
3213 This is called as soon as the type information and variable name
3214 have been parsed, before parsing the initializer if any.
3215 Here we create the ..._DECL node, fill in its type,
3216 and put it on the list of decls for the current context.
3217 The ..._DECL node is returned as the value.
3219 Exception: for arrays where the length is not specified,
3220 the type is left null, to be filled in by `finish_decl'.
3222 Function definitions do not come here; they go to start_function
3223 instead. However, external and forward declarations of functions
3224 do go through here. Structure field declarations are done by
3225 grokfield and not through here. */
3227 /* Set this to zero to debug not using the temporary obstack
3228 to parse initializers. */
3229 int debug_temp_inits = 1;
3231 tree
3232 start_decl (declarator, declspecs, initialized)
3233 tree declarator, declspecs;
3234 int initialized;
3236 register tree decl = grokdeclarator (declarator, declspecs,
3237 NORMAL, initialized);
3238 register tree tem;
3239 int init_written = initialized;
3241 /* The corresponding pop_obstacks is in finish_decl. */
3242 push_obstacks_nochange ();
3244 if (initialized)
3245 /* Is it valid for this decl to have an initializer at all?
3246 If not, set INITIALIZED to zero, which will indirectly
3247 tell `finish_decl' to ignore the initializer once it is parsed. */
3248 switch (TREE_CODE (decl))
3250 case TYPE_DECL:
3251 /* typedef foo = bar means give foo the same type as bar.
3252 We haven't parsed bar yet, so `finish_decl' will fix that up.
3253 Any other case of an initialization in a TYPE_DECL is an error. */
3254 if (pedantic || list_length (declspecs) > 1)
3256 error ("typedef `%s' is initialized",
3257 IDENTIFIER_POINTER (DECL_NAME (decl)));
3258 initialized = 0;
3260 break;
3262 case FUNCTION_DECL:
3263 error ("function `%s' is initialized like a variable",
3264 IDENTIFIER_POINTER (DECL_NAME (decl)));
3265 initialized = 0;
3266 break;
3268 case PARM_DECL:
3269 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3270 error ("parameter `%s' is initialized",
3271 IDENTIFIER_POINTER (DECL_NAME (decl)));
3272 initialized = 0;
3273 break;
3275 default:
3276 /* Don't allow initializations for incomplete types
3277 except for arrays which might be completed by the initialization. */
3278 if (TYPE_SIZE (TREE_TYPE (decl)) != 0)
3280 /* A complete type is ok if size is fixed. */
3282 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3283 || C_DECL_VARIABLE_SIZE (decl))
3285 error ("variable-sized object may not be initialized");
3286 initialized = 0;
3289 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3291 error ("variable `%s' has initializer but incomplete type",
3292 IDENTIFIER_POINTER (DECL_NAME (decl)));
3293 initialized = 0;
3295 else if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))) == 0)
3297 error ("elements of array `%s' have incomplete type",
3298 IDENTIFIER_POINTER (DECL_NAME (decl)));
3299 initialized = 0;
3303 if (initialized)
3305 #if 0 /* Seems redundant with grokdeclarator. */
3306 if (current_binding_level != global_binding_level
3307 && DECL_EXTERNAL (decl)
3308 && TREE_CODE (decl) != FUNCTION_DECL)
3309 warning ("declaration of `%s' has `extern' and is initialized",
3310 IDENTIFIER_POINTER (DECL_NAME (decl)));
3311 #endif
3312 DECL_EXTERNAL (decl) = 0;
3313 if (current_binding_level == global_binding_level)
3314 TREE_STATIC (decl) = 1;
3316 /* Tell `pushdecl' this is an initialized decl
3317 even though we don't yet have the initializer expression.
3318 Also tell `finish_decl' it may store the real initializer. */
3319 DECL_INITIAL (decl) = error_mark_node;
3322 /* If this is a function declaration, write a record describing it to the
3323 prototypes file (if requested). */
3325 if (TREE_CODE (decl) == FUNCTION_DECL)
3326 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3328 /* Add this decl to the current binding level.
3329 TEM may equal DECL or it may be a previous decl of the same name. */
3330 tem = pushdecl (decl);
3332 /* For a local variable, define the RTL now. */
3333 if (current_binding_level != global_binding_level
3334 /* But not if this is a duplicate decl
3335 and we preserved the rtl from the previous one
3336 (which may or may not happen). */
3337 && DECL_RTL (tem) == 0)
3339 if (TYPE_SIZE (TREE_TYPE (tem)) != 0)
3340 expand_decl (tem);
3341 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
3342 && DECL_INITIAL (tem) != 0)
3343 expand_decl (tem);
3346 if (init_written)
3348 /* When parsing and digesting the initializer,
3349 use temporary storage. Do this even if we will ignore the value. */
3350 if (current_binding_level == global_binding_level && debug_temp_inits)
3351 temporary_allocation ();
3354 return tem;
3357 /* Finish processing of a declaration;
3358 install its initial value.
3359 If the length of an array type is not known before,
3360 it must be determined now, from the initial value, or it is an error. */
3362 void
3363 finish_decl (decl, init, asmspec_tree)
3364 tree decl, init;
3365 tree asmspec_tree;
3367 register tree type = TREE_TYPE (decl);
3368 int was_incomplete = (DECL_SIZE (decl) == 0);
3369 int temporary = allocation_temporary_p ();
3370 char *asmspec = 0;
3372 if (asmspec_tree)
3373 asmspec = TREE_STRING_POINTER (asmspec_tree);
3375 /* If `start_decl' didn't like having an initialization, ignore it now. */
3377 if (init != 0 && DECL_INITIAL (decl) == 0)
3378 init = 0;
3379 /* Don't crash if parm is initialized. */
3380 if (TREE_CODE (decl) == PARM_DECL)
3381 init = 0;
3383 if (ITERATOR_P (decl))
3385 if (init == 0)
3386 error_with_decl (decl, "iterator has no initial value");
3387 else
3388 init = save_expr (init);
3391 if (init)
3393 if (TREE_CODE (decl) != TYPE_DECL)
3394 store_init_value (decl, init);
3395 else
3397 /* typedef foo = bar; store the type of bar as the type of foo. */
3398 TREE_TYPE (decl) = TREE_TYPE (init);
3399 DECL_INITIAL (decl) = init = 0;
3403 /* Pop back to the obstack that is current for this binding level.
3404 This is because MAXINDEX, rtl, etc. to be made below
3405 must go in the permanent obstack. But don't discard the
3406 temporary data yet. */
3407 pop_obstacks ();
3408 #if 0 /* pop_obstacks was near the end; this is what was here. */
3409 if (current_binding_level == global_binding_level && temporary)
3410 end_temporary_allocation ();
3411 #endif
3413 /* Deduce size of array from initialization, if not already known */
3415 if (TREE_CODE (type) == ARRAY_TYPE
3416 && TYPE_DOMAIN (type) == 0
3417 && TREE_CODE (decl) != TYPE_DECL)
3419 int do_default
3420 = (TREE_STATIC (decl)
3421 /* Even if pedantic, an external linkage array
3422 may have incomplete type at first. */
3423 ? pedantic && !TREE_PUBLIC (decl)
3424 : !DECL_EXTERNAL (decl));
3425 int failure
3426 = complete_array_type (type, DECL_INITIAL (decl), do_default);
3428 /* Get the completed type made by complete_array_type. */
3429 type = TREE_TYPE (decl);
3431 if (failure == 1)
3432 error_with_decl (decl, "initializer fails to determine size of `%s'");
3434 if (failure == 2)
3436 if (do_default)
3437 error_with_decl (decl, "array size missing in `%s'");
3438 /* If a `static' var's size isn't known,
3439 make it extern as well as static, so it does not get
3440 allocated.
3441 If it is not `static', then do not mark extern;
3442 finish_incomplete_decl will give it a default size
3443 and it will get allocated. */
3444 else if (!pedantic && TREE_STATIC (decl) && ! TREE_PUBLIC (decl))
3445 DECL_EXTERNAL (decl) = 1;
3448 if (pedantic && TYPE_DOMAIN (type) != 0
3449 && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
3450 integer_zero_node))
3451 error_with_decl (decl, "zero-size array `%s'");
3453 layout_decl (decl, 0);
3456 if (TREE_CODE (decl) == VAR_DECL)
3458 if (DECL_SIZE (decl) == 0
3459 && TYPE_SIZE (TREE_TYPE (decl)) != 0)
3460 layout_decl (decl, 0);
3462 if (DECL_SIZE (decl) == 0
3463 && (TREE_STATIC (decl)
3465 /* A static variable with an incomplete type
3466 is an error if it is initialized.
3467 Otherwise, let it through, but if it is not `extern'
3468 then it may cause an error message later. */
3469 DECL_INITIAL (decl) != 0
3471 /* An automatic variable with an incomplete type
3472 is an error. */
3473 !DECL_EXTERNAL (decl)))
3475 error_with_decl (decl, "storage size of `%s' isn't known");
3476 TREE_TYPE (decl) = error_mark_node;
3479 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3480 && DECL_SIZE (decl) != 0)
3482 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3483 constant_expression_warning (DECL_SIZE (decl));
3484 else
3485 error_with_decl (decl, "storage size of `%s' isn't constant");
3489 /* Output the assembler code and/or RTL code for variables and functions,
3490 unless the type is an undefined structure or union.
3491 If not, it will get done when the type is completed. */
3493 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3495 if (flag_traditional && allocation_temporary_p ())
3497 push_obstacks_nochange ();
3498 end_temporary_allocation ();
3499 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3500 maybe_objc_check_decl (decl);
3501 rest_of_decl_compilation (decl, asmspec,
3502 current_binding_level == global_binding_level,
3504 pop_obstacks ();
3506 else
3508 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3509 maybe_objc_check_decl (decl);
3510 rest_of_decl_compilation (decl, asmspec,
3511 current_binding_level == global_binding_level,
3514 if (current_binding_level != global_binding_level)
3516 /* Recompute the RTL of a local array now
3517 if it used to be an incomplete type. */
3518 if (was_incomplete
3519 && ! TREE_STATIC (decl) && ! DECL_EXTERNAL (decl))
3521 /* If we used it already as memory, it must stay in memory. */
3522 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3523 /* If it's still incomplete now, no init will save it. */
3524 if (DECL_SIZE (decl) == 0)
3525 DECL_INITIAL (decl) = 0;
3526 expand_decl (decl);
3528 /* Compute and store the initial value. */
3529 if (TREE_CODE (decl) != FUNCTION_DECL)
3530 expand_decl_init (decl);
3534 if (TREE_CODE (decl) == TYPE_DECL)
3536 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3537 maybe_objc_check_decl (decl);
3538 rest_of_decl_compilation (decl, NULL_PTR,
3539 current_binding_level == global_binding_level,
3543 /* ??? After 2.3, test (init != 0) instead of TREE_CODE. */
3544 if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl))
3545 && temporary && TREE_PERMANENT (decl)
3546 /* DECL_INITIAL is not defined in PARM_DECLs, since it shares
3547 space with DECL_ARG_TYPE. */
3548 && TREE_CODE (decl) != PARM_DECL)
3550 /* We need to remember that this array HAD an initialization,
3551 but discard the actual temporary nodes,
3552 since we can't have a permanent node keep pointing to them. */
3553 /* We make an exception for inline functions, since it's
3554 normal for a local extern redeclaration of an inline function
3555 to have a copy of the top-level decl's DECL_INLINE. */
3556 if (DECL_INITIAL (decl) != 0)
3557 DECL_INITIAL (decl) = error_mark_node;
3560 #if 0
3561 /* Resume permanent allocation, if not within a function. */
3562 /* The corresponding push_obstacks_nochange is in start_decl,
3563 and in push_parm_decl and in grokfield. */
3564 pop_obstacks ();
3565 #endif
3567 /* If we have gone back from temporary to permanent allocation,
3568 actually free the temporary space that we no longer need. */
3569 if (temporary && !allocation_temporary_p ())
3570 permanent_allocation ();
3572 /* At the end of a declaration, throw away any variable type sizes
3573 of types defined inside that declaration. There is no use
3574 computing them in the following function definition. */
3575 if (current_binding_level == global_binding_level)
3576 get_pending_sizes ();
3579 /* If DECL has a cleanup, build and return that cleanup here.
3580 This is a callback called by expand_expr. */
3582 tree
3583 maybe_build_cleanup (decl)
3584 tree decl;
3586 /* There are no cleanups in C. */
3587 return NULL_TREE;
3590 /* Given a parsed parameter declaration,
3591 decode it into a PARM_DECL and push that on the current binding level.
3592 Also, for the sake of forward parm decls,
3593 record the given order of parms in `parm_order'. */
3595 void
3596 push_parm_decl (parm)
3597 tree parm;
3599 tree decl, olddecl;
3600 int old_immediate_size_expand = immediate_size_expand;
3601 /* Don't try computing parm sizes now -- wait till fn is called. */
3602 immediate_size_expand = 0;
3604 /* The corresponding pop_obstacks is in finish_decl. */
3605 push_obstacks_nochange ();
3607 decl = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm), PARM, 0);
3609 #if 0
3610 if (DECL_NAME (decl))
3612 olddecl = lookup_name (DECL_NAME (decl));
3613 if (pedantic && olddecl != 0 && TREE_CODE (olddecl) == TYPE_DECL)
3614 pedwarn_with_decl (decl, "ANSI C forbids parameter `%s' shadowing typedef");
3616 #endif
3618 decl = pushdecl (decl);
3620 immediate_size_expand = old_immediate_size_expand;
3622 current_binding_level->parm_order
3623 = tree_cons (NULL_TREE, decl, current_binding_level->parm_order);
3625 /* Add this decl to the current binding level. */
3626 finish_decl (decl, NULL_TREE, NULL_TREE);
3629 /* Clear the given order of parms in `parm_order'.
3630 Used at start of parm list,
3631 and also at semicolon terminating forward decls. */
3633 void
3634 clear_parm_order ()
3636 current_binding_level->parm_order = NULL_TREE;
3639 /* Make TYPE a complete type based on INITIAL_VALUE.
3640 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
3641 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
3644 complete_array_type (type, initial_value, do_default)
3645 tree type;
3646 tree initial_value;
3647 int do_default;
3649 register tree maxindex = NULL_TREE;
3650 int value = 0;
3652 if (initial_value)
3654 /* Note MAXINDEX is really the maximum index,
3655 one less than the size. */
3656 if (TREE_CODE (initial_value) == STRING_CST)
3658 int eltsize
3659 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
3660 maxindex = build_int_2 (TREE_STRING_LENGTH (initial_value) / eltsize - 1, 0);
3662 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3664 register int nelts
3665 = list_length (CONSTRUCTOR_ELTS (initial_value));
3666 maxindex = build_int_2 (nelts - 1, - (nelts == 0));
3668 else
3670 /* Make an error message unless that happened already. */
3671 if (initial_value != error_mark_node)
3672 value = 1;
3674 /* Prevent further error messages. */
3675 maxindex = build_int_2 (0, 0);
3679 if (!maxindex)
3681 if (do_default)
3682 maxindex = build_int_2 (0, 0);
3683 value = 2;
3686 if (maxindex)
3688 TYPE_DOMAIN (type) = build_index_type (maxindex);
3689 if (!TREE_TYPE (maxindex))
3690 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
3691 #if 0 /* I took out this change
3692 together with the change in build_array_type. --rms */
3693 change_main_variant (type,
3694 build_array_type (TREE_TYPE (type),
3695 TYPE_DOMAIN (type)));
3696 #endif
3699 /* Lay out the type now that we can get the real answer. */
3701 layout_type (type);
3703 return value;
3706 /* Given declspecs and a declarator,
3707 determine the name and type of the object declared
3708 and construct a ..._DECL node for it.
3709 (In one case we can return a ..._TYPE node instead.
3710 For invalid input we sometimes return 0.)
3712 DECLSPECS is a chain of tree_list nodes whose value fields
3713 are the storage classes and type specifiers.
3715 DECL_CONTEXT says which syntactic context this declaration is in:
3716 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3717 FUNCDEF for a function definition. Like NORMAL but a few different
3718 error messages in each case. Return value may be zero meaning
3719 this definition is too screwy to try to parse.
3720 PARM for a parameter declaration (either within a function prototype
3721 or before a function body). Make a PARM_DECL, or return void_type_node.
3722 TYPENAME if for a typename (in a cast or sizeof).
3723 Don't make a DECL node; just return the ..._TYPE node.
3724 FIELD for a struct or union field; make a FIELD_DECL.
3725 BITFIELD for a field with specified width.
3726 INITIALIZED is 1 if the decl has an initializer.
3728 In the TYPENAME case, DECLARATOR is really an absolute declarator.
3729 It may also be so in the PARM case, for a prototype where the
3730 argument type is specified but not the name.
3732 This function is where the complicated C meanings of `static'
3733 and `extern' are interpreted. */
3735 static tree
3736 grokdeclarator (declarator, declspecs, decl_context, initialized)
3737 tree declspecs;
3738 tree declarator;
3739 enum decl_context decl_context;
3740 int initialized;
3742 int specbits = 0;
3743 tree spec;
3744 tree type = NULL_TREE;
3745 int longlong = 0;
3746 int constp;
3747 int volatilep;
3748 int inlinep;
3749 int explicit_int = 0;
3750 int explicit_char = 0;
3751 int defaulted_int = 0;
3752 tree typedef_decl = 0;
3753 char *name;
3754 tree typedef_type = 0;
3755 int funcdef_flag = 0;
3756 enum tree_code innermost_code = ERROR_MARK;
3757 int bitfield = 0;
3758 int size_varies = 0;
3760 if (decl_context == BITFIELD)
3761 bitfield = 1, decl_context = FIELD;
3763 if (decl_context == FUNCDEF)
3764 funcdef_flag = 1, decl_context = NORMAL;
3766 push_obstacks_nochange ();
3768 if (flag_traditional && allocation_temporary_p ())
3769 end_temporary_allocation ();
3771 /* Look inside a declarator for the name being declared
3772 and get it as a string, for an error message. */
3774 register tree decl = declarator;
3775 name = 0;
3777 while (decl)
3778 switch (TREE_CODE (decl))
3780 case ARRAY_REF:
3781 case INDIRECT_REF:
3782 case CALL_EXPR:
3783 innermost_code = TREE_CODE (decl);
3784 decl = TREE_OPERAND (decl, 0);
3785 break;
3787 case IDENTIFIER_NODE:
3788 name = IDENTIFIER_POINTER (decl);
3789 decl = 0;
3790 break;
3792 default:
3793 abort ();
3795 if (name == 0)
3796 name = "type name";
3799 /* A function definition's declarator must have the form of
3800 a function declarator. */
3802 if (funcdef_flag && innermost_code != CALL_EXPR)
3803 return 0;
3805 /* Anything declared one level down from the top level
3806 must be one of the parameters of a function
3807 (because the body is at least two levels down). */
3809 /* If this looks like a function definition, make it one,
3810 even if it occurs where parms are expected.
3811 Then store_parm_decls will reject it and not use it as a parm. */
3812 if (decl_context == NORMAL && !funcdef_flag
3813 && current_binding_level->level_chain == global_binding_level)
3814 decl_context = PARM;
3816 /* Look through the decl specs and record which ones appear.
3817 Some typespecs are defined as built-in typenames.
3818 Others, the ones that are modifiers of other types,
3819 are represented by bits in SPECBITS: set the bits for
3820 the modifiers that appear. Storage class keywords are also in SPECBITS.
3822 If there is a typedef name or a type, store the type in TYPE.
3823 This includes builtin typedefs such as `int'.
3825 Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
3826 and did not come from a user typedef.
3828 Set LONGLONG if `long' is mentioned twice. */
3830 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
3832 register int i;
3833 register tree id = TREE_VALUE (spec);
3835 if (id == ridpointers[(int) RID_INT])
3836 explicit_int = 1;
3837 if (id == ridpointers[(int) RID_CHAR])
3838 explicit_char = 1;
3840 if (TREE_CODE (id) == IDENTIFIER_NODE)
3841 for (i = (int) RID_FIRST_MODIFIER; i < (int) RID_MAX; i++)
3843 if (ridpointers[i] == id)
3845 if (i == (int) RID_LONG && specbits & (1<<i))
3847 if (longlong)
3848 error ("`long long long' is too long for GCC");
3849 else
3851 if (pedantic)
3852 pedwarn ("ANSI C does not support `long long'");
3853 longlong = 1;
3856 else if (specbits & (1 << i))
3857 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
3858 specbits |= 1 << i;
3859 goto found;
3862 if (type)
3863 error ("two or more data types in declaration of `%s'", name);
3864 /* Actual typedefs come to us as TYPE_DECL nodes. */
3865 else if (TREE_CODE (id) == TYPE_DECL)
3867 type = TREE_TYPE (id);
3868 typedef_decl = id;
3870 /* Built-in types come as identifiers. */
3871 else if (TREE_CODE (id) == IDENTIFIER_NODE)
3873 register tree t = lookup_name (id);
3874 if (TREE_TYPE (t) == error_mark_node)
3876 else if (!t || TREE_CODE (t) != TYPE_DECL)
3877 error ("`%s' fails to be a typedef or built in type",
3878 IDENTIFIER_POINTER (id));
3879 else
3881 type = TREE_TYPE (t);
3882 typedef_decl = t;
3885 else if (TREE_CODE (id) != ERROR_MARK)
3886 type = id;
3888 found: {}
3891 typedef_type = type;
3892 if (type)
3893 size_varies = C_TYPE_VARIABLE_SIZE (type);
3895 /* No type at all: default to `int', and set DEFAULTED_INT
3896 because it was not a user-defined typedef. */
3898 if (type == 0)
3900 if (funcdef_flag && warn_return_type
3901 && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3902 | (1 << (int) RID_SIGNED) | (1 << (int) RID_UNSIGNED))))
3903 warn_about_return_type = 1;
3904 defaulted_int = 1;
3905 type = integer_type_node;
3908 /* Now process the modifiers that were specified
3909 and check for invalid combinations. */
3911 /* Long double is a special combination. */
3913 if ((specbits & 1 << (int) RID_LONG)
3914 && TYPE_MAIN_VARIANT (type) == double_type_node)
3916 specbits &= ~ (1 << (int) RID_LONG);
3917 type = long_double_type_node;
3920 /* Check all other uses of type modifiers. */
3922 if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3923 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
3925 int ok = 0;
3927 if (TREE_CODE (type) != INTEGER_TYPE)
3928 error ("long, short, signed or unsigned invalid for `%s'", name);
3929 else if ((specbits & 1 << (int) RID_LONG)
3930 && (specbits & 1 << (int) RID_SHORT))
3931 error ("long and short specified together for `%s'", name);
3932 else if (((specbits & 1 << (int) RID_LONG)
3933 || (specbits & 1 << (int) RID_SHORT))
3934 && explicit_char)
3935 error ("long or short specified with char for `%s'", name);
3936 else if (((specbits & 1 << (int) RID_LONG)
3937 || (specbits & 1 << (int) RID_SHORT))
3938 && TREE_CODE (type) == REAL_TYPE)
3939 error ("long or short specified with floating type for `%s'", name);
3940 else if ((specbits & 1 << (int) RID_SIGNED)
3941 && (specbits & 1 << (int) RID_UNSIGNED))
3942 error ("signed and unsigned given together for `%s'", name);
3943 else
3945 ok = 1;
3946 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
3948 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
3949 name);
3950 if (flag_pedantic_errors)
3951 ok = 0;
3955 /* Discard the type modifiers if they are invalid. */
3956 if (! ok)
3958 specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3959 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
3960 longlong = 0;
3964 /* Decide whether an integer type is signed or not.
3965 Optionally treat bitfields as signed by default. */
3966 if (specbits & 1 << (int) RID_UNSIGNED
3967 /* Traditionally, all bitfields are unsigned. */
3968 || (bitfield && flag_traditional
3969 && (! explicit_flag_signed_bitfields || !flag_signed_bitfields))
3970 || (bitfield && ! flag_signed_bitfields
3971 && (explicit_int || defaulted_int || explicit_char
3972 /* A typedef for plain `int' without `signed'
3973 can be controlled just like plain `int'. */
3974 || ! (typedef_decl != 0
3975 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
3976 && TREE_CODE (type) != ENUMERAL_TYPE
3977 && !(specbits & 1 << (int) RID_SIGNED)))
3979 if (longlong)
3980 type = long_long_unsigned_type_node;
3981 else if (specbits & 1 << (int) RID_LONG)
3982 type = long_unsigned_type_node;
3983 else if (specbits & 1 << (int) RID_SHORT)
3984 type = short_unsigned_type_node;
3985 else if (type == char_type_node)
3986 type = unsigned_char_type_node;
3987 else if (typedef_decl)
3988 type = unsigned_type (type);
3989 else
3990 type = unsigned_type_node;
3992 else if ((specbits & 1 << (int) RID_SIGNED)
3993 && type == char_type_node)
3994 type = signed_char_type_node;
3995 else if (longlong)
3996 type = long_long_integer_type_node;
3997 else if (specbits & 1 << (int) RID_LONG)
3998 type = long_integer_type_node;
3999 else if (specbits & 1 << (int) RID_SHORT)
4000 type = short_integer_type_node;
4001 else if (specbits & 1 << (int) RID_COMPLEX)
4003 if (defaulted_int)
4004 type = complex_double_type_node;
4005 else if (type == integer_type_node)
4006 type = complex_integer_type_node;
4007 else if (type == float_type_node)
4008 type = complex_float_type_node;
4009 else if (type == double_type_node)
4010 type = complex_double_type_node;
4011 else if (type == long_double_type_node)
4012 type = complex_long_double_type_node;
4013 else
4014 error ("invalid complex type");
4017 /* Set CONSTP if this declaration is `const', whether by
4018 explicit specification or via a typedef.
4019 Likewise for VOLATILEP. */
4021 constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (type);
4022 volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
4023 inlinep = !! (specbits & (1 << (int) RID_INLINE));
4024 if (constp > 1)
4025 pedwarn ("duplicate `const'");
4026 if (volatilep > 1)
4027 pedwarn ("duplicate `volatile'");
4028 if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
4029 type = TYPE_MAIN_VARIANT (type);
4031 /* Warn if two storage classes are given. Default to `auto'. */
4034 int nclasses = 0;
4036 if (specbits & 1 << (int) RID_AUTO) nclasses++;
4037 if (specbits & 1 << (int) RID_STATIC) nclasses++;
4038 if (specbits & 1 << (int) RID_EXTERN) nclasses++;
4039 if (specbits & 1 << (int) RID_REGISTER) nclasses++;
4040 if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
4041 if (specbits & 1 << (int) RID_ITERATOR) nclasses++;
4043 /* Warn about storage classes that are invalid for certain
4044 kinds of declarations (parameters, typenames, etc.). */
4046 if (nclasses > 1)
4047 error ("multiple storage classes in declaration of `%s'", name);
4048 else if (funcdef_flag
4049 && (specbits
4050 & ((1 << (int) RID_REGISTER)
4051 | (1 << (int) RID_AUTO)
4052 | (1 << (int) RID_TYPEDEF))))
4054 if (specbits & 1 << (int) RID_AUTO
4055 && (pedantic || current_binding_level == global_binding_level))
4056 pedwarn ("function definition declared `auto'");
4057 if (specbits & 1 << (int) RID_REGISTER)
4058 error ("function definition declared `register'");
4059 if (specbits & 1 << (int) RID_TYPEDEF)
4060 error ("function definition declared `typedef'");
4061 specbits &= ~ ((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4062 | (1 << (int) RID_AUTO));
4064 else if (decl_context != NORMAL && nclasses > 0)
4066 if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
4068 else
4070 error ((decl_context == FIELD
4071 ? "storage class specified for structure field `%s'"
4072 : (decl_context == PARM
4073 ? "storage class specified for parameter `%s'"
4074 : "storage class specified for typename")),
4075 name);
4076 specbits &= ~ ((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4077 | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
4078 | (1 << (int) RID_EXTERN));
4081 else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
4083 /* `extern' with initialization is invalid if not at top level. */
4084 if (current_binding_level == global_binding_level)
4085 warning ("`%s' initialized and declared `extern'", name);
4086 else
4087 error ("`%s' has both `extern' and initializer", name);
4089 else if (specbits & 1 << (int) RID_EXTERN && funcdef_flag
4090 && current_binding_level != global_binding_level)
4091 error ("nested function `%s' declared `extern'", name);
4092 else if (current_binding_level == global_binding_level
4093 && specbits & (1 << (int) RID_AUTO))
4094 error ("top-level declaration of `%s' specifies `auto'", name);
4095 else if ((specbits & 1 << (int) RID_ITERATOR)
4096 && TREE_CODE (declarator) != IDENTIFIER_NODE)
4098 error ("iterator `%s' has derived type", name);
4099 type = error_mark_node;
4101 else if ((specbits & 1 << (int) RID_ITERATOR)
4102 && TREE_CODE (type) != INTEGER_TYPE)
4104 error ("iterator `%s' has noninteger type", name);
4105 type = error_mark_node;
4109 /* Now figure out the structure of the declarator proper.
4110 Descend through it, creating more complex types, until we reach
4111 the declared identifier (or NULL_TREE, in an absolute declarator). */
4113 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
4115 if (type == error_mark_node)
4117 declarator = TREE_OPERAND (declarator, 0);
4118 continue;
4121 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
4122 an INDIRECT_REF (for *...),
4123 a CALL_EXPR (for ...(...)),
4124 an identifier (for the name being declared)
4125 or a null pointer (for the place in an absolute declarator
4126 where the name was omitted).
4127 For the last two cases, we have just exited the loop.
4129 At this point, TYPE is the type of elements of an array,
4130 or for a function to return, or for a pointer to point to.
4131 After this sequence of ifs, TYPE is the type of the
4132 array or function or pointer, and DECLARATOR has had its
4133 outermost layer removed. */
4135 if (TREE_CODE (declarator) == ARRAY_REF)
4137 register tree itype = NULL_TREE;
4138 register tree size = TREE_OPERAND (declarator, 1);
4139 /* An uninitialized decl with `extern' is a reference. */
4140 int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
4142 declarator = TREE_OPERAND (declarator, 0);
4144 /* Check for some types that there cannot be arrays of. */
4146 if (TYPE_MAIN_VARIANT (type) == void_type_node)
4148 error ("declaration of `%s' as array of voids", name);
4149 type = error_mark_node;
4152 if (TREE_CODE (type) == FUNCTION_TYPE)
4154 error ("declaration of `%s' as array of functions", name);
4155 type = error_mark_node;
4158 if (size == error_mark_node)
4159 type = error_mark_node;
4161 if (type == error_mark_node)
4162 continue;
4164 /* If this is a block level extern, it must live past the end
4165 of the function so that we can check it against other extern
4166 declarations (IDENTIFIER_LIMBO_VALUE). */
4167 if (extern_ref && allocation_temporary_p ())
4168 end_temporary_allocation ();
4170 /* If size was specified, set ITYPE to a range-type for that size.
4171 Otherwise, ITYPE remains null. finish_decl may figure it out
4172 from an initial value. */
4174 if (size)
4176 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4177 STRIP_TYPE_NOPS (size);
4179 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
4180 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
4182 error ("size of array `%s' has non-integer type", name);
4183 size = integer_one_node;
4185 if (pedantic && integer_zerop (size))
4186 pedwarn ("ANSI C forbids zero-size array `%s'", name);
4187 if (TREE_CODE (size) == INTEGER_CST)
4189 constant_expression_warning (size);
4190 if (INT_CST_LT (size, integer_zero_node))
4192 error ("size of array `%s' is negative", name);
4193 size = integer_one_node;
4195 itype = build_index_type (size_binop (MINUS_EXPR, size,
4196 size_one_node));
4198 else
4200 if (pedantic)
4202 if (TREE_CONSTANT (size))
4203 pedwarn ("ANSI C forbids array `%s' whose size can't be evaluated", name);
4204 else
4205 pedwarn ("ANSI C forbids variable-size array `%s'", name);
4207 itype = build_binary_op (MINUS_EXPR, size, integer_one_node,
4209 /* Make sure the array size remains visibly nonconstant
4210 even if it is (eg) a const variable with known value. */
4211 size_varies = 1;
4212 itype = variable_size (itype);
4213 itype = build_index_type (itype);
4217 #if 0 /* This had bad results for pointers to arrays, as in
4218 union incomplete (*foo)[4]; */
4219 /* Complain about arrays of incomplete types, except in typedefs. */
4221 if (TYPE_SIZE (type) == 0
4222 /* Avoid multiple warnings for nested array types. */
4223 && TREE_CODE (type) != ARRAY_TYPE
4224 && !(specbits & (1 << (int) RID_TYPEDEF))
4225 && !C_TYPE_BEING_DEFINED (type))
4226 warning ("array type has incomplete element type");
4227 #endif
4229 #if 0 /* We shouldn't have a function type here at all!
4230 Functions aren't allowed as array elements. */
4231 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4232 && (constp || volatilep))
4233 pedwarn ("ANSI C forbids const or volatile function types");
4234 #endif
4236 /* Build the array type itself, then merge any constancy or
4237 volatility into the target type. We must do it in this order
4238 to ensure that the TYPE_MAIN_VARIANT field of the array type
4239 is set correctly. */
4241 type = build_array_type (type, itype);
4242 if (constp || volatilep)
4243 type = c_build_type_variant (type, constp, volatilep);
4245 #if 0 /* don't clear these; leave them set so that the array type
4246 or the variable is itself const or volatile. */
4247 constp = 0;
4248 volatilep = 0;
4249 #endif
4251 if (size_varies)
4252 C_TYPE_VARIABLE_SIZE (type) = 1;
4254 else if (TREE_CODE (declarator) == CALL_EXPR)
4256 int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
4257 || current_binding_level == global_binding_level);
4258 tree arg_types;
4260 /* Declaring a function type.
4261 Make sure we have a valid type for the function to return. */
4262 if (type == error_mark_node)
4263 continue;
4265 size_varies = 0;
4267 /* Warn about some types functions can't return. */
4269 if (TREE_CODE (type) == FUNCTION_TYPE)
4271 error ("`%s' declared as function returning a function", name);
4272 type = integer_type_node;
4274 if (TREE_CODE (type) == ARRAY_TYPE)
4276 error ("`%s' declared as function returning an array", name);
4277 type = integer_type_node;
4280 #ifndef TRADITIONAL_RETURN_FLOAT
4281 /* Traditionally, declaring return type float means double. */
4283 if (flag_traditional && TYPE_MAIN_VARIANT (type) == float_type_node)
4284 type = double_type_node;
4285 #endif /* TRADITIONAL_RETURN_FLOAT */
4287 /* If this is a block level extern, it must live past the end
4288 of the function so that we can check it against other extern
4289 declarations (IDENTIFIER_LIMBO_VALUE). */
4290 if (extern_ref && allocation_temporary_p ())
4291 end_temporary_allocation ();
4293 /* Construct the function type and go to the next
4294 inner layer of declarator. */
4296 arg_types = grokparms (TREE_OPERAND (declarator, 1),
4297 funcdef_flag
4298 /* Say it's a definition
4299 only for the CALL_EXPR
4300 closest to the identifier. */
4301 && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE);
4302 #if 0 /* This seems to be false. We turn off temporary allocation
4303 above in this function if -traditional.
4304 And this code caused inconsistent results with prototypes:
4305 callers would ignore them, and pass arguments wrong. */
4307 /* Omit the arg types if -traditional, since the arg types
4308 and the list links might not be permanent. */
4309 type = build_function_type (type,
4310 flag_traditional
4311 ? NULL_TREE : arg_types);
4312 #endif
4313 /* ANSI seems to say that `const int foo ();'
4314 does not make the function foo const. */
4315 if (constp || volatilep)
4316 type = c_build_type_variant (type, constp, volatilep);
4317 constp = 0;
4318 volatilep = 0;
4320 type = build_function_type (type, arg_types);
4321 declarator = TREE_OPERAND (declarator, 0);
4323 /* Set the TYPE_CONTEXTs for each tagged type which is local to
4324 the formal parameter list of this FUNCTION_TYPE to point to
4325 the FUNCTION_TYPE node itself. */
4328 register tree link;
4330 for (link = current_function_parm_tags;
4331 link;
4332 link = TREE_CHAIN (link))
4333 TYPE_CONTEXT (TREE_VALUE (link)) = type;
4336 else if (TREE_CODE (declarator) == INDIRECT_REF)
4338 /* Merge any constancy or volatility into the target type
4339 for the pointer. */
4341 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4342 && (constp || volatilep))
4343 pedwarn ("ANSI C forbids const or volatile function types");
4344 if (constp || volatilep)
4345 type = c_build_type_variant (type, constp, volatilep);
4346 constp = 0;
4347 volatilep = 0;
4348 size_varies = 0;
4350 type = build_pointer_type (type);
4352 /* Process a list of type modifier keywords
4353 (such as const or volatile) that were given inside the `*'. */
4355 if (TREE_TYPE (declarator))
4357 register tree typemodlist;
4358 int erred = 0;
4359 for (typemodlist = TREE_TYPE (declarator); typemodlist;
4360 typemodlist = TREE_CHAIN (typemodlist))
4362 if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
4363 constp++;
4364 else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
4365 volatilep++;
4366 else if (!erred)
4368 erred = 1;
4369 error ("invalid type modifier within pointer declarator");
4372 if (constp > 1)
4373 pedwarn ("duplicate `const'");
4374 if (volatilep > 1)
4375 pedwarn ("duplicate `volatile'");
4378 declarator = TREE_OPERAND (declarator, 0);
4380 else
4381 abort ();
4385 /* Now TYPE has the actual type. */
4387 /* If this is declaring a typedef name, return a TYPE_DECL. */
4389 if (specbits & (1 << (int) RID_TYPEDEF))
4391 tree decl;
4392 /* Note that the grammar rejects storage classes
4393 in typenames, fields or parameters */
4394 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4395 && (constp || volatilep))
4396 pedwarn ("ANSI C forbids const or volatile function types");
4397 if (constp || volatilep)
4398 type = c_build_type_variant (type, constp, volatilep);
4399 pop_obstacks ();
4400 decl = build_decl (TYPE_DECL, declarator, type);
4401 if ((specbits & (1 << (int) RID_SIGNED))
4402 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4403 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4404 return decl;
4407 /* Detect the case of an array type of unspecified size
4408 which came, as such, direct from a typedef name.
4409 We must copy the type, so that each identifier gets
4410 a distinct type, so that each identifier's size can be
4411 controlled separately by its own initializer. */
4413 if (type != 0 && typedef_type != 0
4414 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type)
4415 && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0)
4417 type = build_array_type (TREE_TYPE (type), 0);
4418 if (size_varies)
4419 C_TYPE_VARIABLE_SIZE (type) = 1;
4422 /* If this is a type name (such as, in a cast or sizeof),
4423 compute the type and return it now. */
4425 if (decl_context == TYPENAME)
4427 /* Note that the grammar rejects storage classes
4428 in typenames, fields or parameters */
4429 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4430 && (constp || volatilep))
4431 pedwarn ("ANSI C forbids const or volatile function types");
4432 if (constp || volatilep)
4433 type = c_build_type_variant (type, constp, volatilep);
4434 pop_obstacks ();
4435 return type;
4438 /* Aside from typedefs and type names (handle above),
4439 `void' at top level (not within pointer)
4440 is allowed only in public variables.
4441 We don't complain about parms either, but that is because
4442 a better error message can be made later. */
4444 if (TYPE_MAIN_VARIANT (type) == void_type_node && decl_context != PARM
4445 && ! ((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4446 && ((specbits & (1 << (int) RID_EXTERN))
4447 || (current_binding_level == global_binding_level
4448 && !(specbits
4449 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
4451 error ("variable or field `%s' declared void",
4452 IDENTIFIER_POINTER (declarator));
4453 type = integer_type_node;
4456 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4457 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
4460 register tree decl;
4462 if (decl_context == PARM)
4464 tree type_as_written = type;
4465 tree main_type;
4467 /* A parameter declared as an array of T is really a pointer to T.
4468 One declared as a function is really a pointer to a function. */
4470 if (TREE_CODE (type) == ARRAY_TYPE)
4472 /* Transfer const-ness of array into that of type pointed to. */
4473 type = build_pointer_type
4474 (c_build_type_variant (TREE_TYPE (type), constp, volatilep));
4475 volatilep = constp = 0;
4476 size_varies = 0;
4478 else if (TREE_CODE (type) == FUNCTION_TYPE)
4480 if (pedantic && (constp || volatilep))
4481 pedwarn ("ANSI C forbids const or volatile function types");
4482 type = build_pointer_type (c_build_type_variant (type, constp, volatilep));
4483 volatilep = constp = 0;
4486 decl = build_decl (PARM_DECL, declarator, type);
4487 if (size_varies)
4488 C_DECL_VARIABLE_SIZE (decl) = 1;
4490 /* Compute the type actually passed in the parmlist,
4491 for the case where there is no prototype.
4492 (For example, shorts and chars are passed as ints.)
4493 When there is a prototype, this is overridden later. */
4495 DECL_ARG_TYPE (decl) = type;
4496 main_type = (type == error_mark_node
4497 ? error_mark_node
4498 : TYPE_MAIN_VARIANT (type));
4499 if (main_type == float_type_node)
4500 DECL_ARG_TYPE (decl) = double_type_node;
4501 /* Don't use TYPE_PRECISION to decide whether to promote,
4502 because we should convert short if it's the same size as int,
4503 but we should not convert long if it's the same size as int. */
4504 else if (TREE_CODE (main_type) != ERROR_MARK
4505 && C_PROMOTING_INTEGER_TYPE_P (main_type))
4507 if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)
4508 && TREE_UNSIGNED (type))
4509 DECL_ARG_TYPE (decl) = unsigned_type_node;
4510 else
4511 DECL_ARG_TYPE (decl) = integer_type_node;
4514 DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
4516 else if (decl_context == FIELD)
4518 /* Structure field. It may not be a function. */
4520 if (TREE_CODE (type) == FUNCTION_TYPE)
4522 error ("field `%s' declared as a function",
4523 IDENTIFIER_POINTER (declarator));
4524 type = build_pointer_type (type);
4526 else if (TREE_CODE (type) != ERROR_MARK && TYPE_SIZE (type) == 0)
4528 error ("field `%s' has incomplete type",
4529 IDENTIFIER_POINTER (declarator));
4530 type = error_mark_node;
4532 /* Move type qualifiers down to element of an array. */
4533 if (TREE_CODE (type) == ARRAY_TYPE && (constp || volatilep))
4535 type = build_array_type (c_build_type_variant (TREE_TYPE (type),
4536 constp, volatilep),
4537 TYPE_DOMAIN (type));
4538 #if 0 /* Leave the field const or volatile as well. */
4539 constp = volatilep = 0;
4540 #endif
4542 decl = build_decl (FIELD_DECL, declarator, type);
4543 if (size_varies)
4544 C_DECL_VARIABLE_SIZE (decl) = 1;
4546 else if (TREE_CODE (type) == FUNCTION_TYPE)
4548 /* Every function declaration is "external"
4549 except for those which are inside a function body
4550 in which `auto' is used.
4551 That is a case not specified by ANSI C,
4552 and we use it for forward declarations for nested functions. */
4553 int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
4554 || current_binding_level == global_binding_level);
4556 if (specbits & (1 << (int) RID_AUTO)
4557 && (pedantic || current_binding_level == global_binding_level))
4558 pedwarn ("invalid storage class for function `%s'",
4559 IDENTIFIER_POINTER (declarator));
4560 if (specbits & (1 << (int) RID_REGISTER))
4561 error ("invalid storage class for function `%s'",
4562 IDENTIFIER_POINTER (declarator));
4563 /* Function declaration not at top level.
4564 Storage classes other than `extern' are not allowed
4565 and `extern' makes no difference. */
4566 if (current_binding_level != global_binding_level
4567 && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
4568 && pedantic)
4569 pedwarn ("invalid storage class for function `%s'",
4570 IDENTIFIER_POINTER (declarator));
4572 /* If this is a block level extern, it must live past the end
4573 of the function so that we can check it against other
4574 extern declarations (IDENTIFIER_LIMBO_VALUE). */
4575 if (extern_ref && allocation_temporary_p ())
4576 end_temporary_allocation ();
4578 decl = build_decl (FUNCTION_DECL, declarator, type);
4580 if (pedantic && (constp || volatilep)
4581 && ! DECL_IN_SYSTEM_HEADER (decl))
4582 pedwarn ("ANSI C forbids const or volatile functions");
4584 if (volatilep
4585 && TREE_TYPE (TREE_TYPE (decl)) != void_type_node)
4586 warning ("volatile function returns non-void value");
4588 if (extern_ref)
4589 DECL_EXTERNAL (decl) = 1;
4590 /* Record absence of global scope for `static' or `auto'. */
4591 TREE_PUBLIC (decl)
4592 = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
4593 /* Record presence of `inline', if it is reasonable. */
4594 if (inlinep)
4596 tree last = tree_last (TYPE_ARG_TYPES (type));
4598 if (! strcmp (IDENTIFIER_POINTER (declarator), "main"))
4599 warning ("cannot inline function `main'");
4600 else if (last && (TYPE_MAIN_VARIANT (TREE_VALUE (last))
4601 != void_type_node))
4602 warning ("inline declaration ignored for function with `...'");
4603 else
4604 /* Assume that otherwise the function can be inlined. */
4605 DECL_INLINE (decl) = 1;
4607 if (specbits & (1 << (int) RID_EXTERN))
4608 current_extern_inline = 1;
4611 else
4613 /* It's a variable. */
4614 /* An uninitialized decl with `extern' is a reference. */
4615 int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
4617 /* Move type qualifiers down to element of an array. */
4618 if (TREE_CODE (type) == ARRAY_TYPE && (constp || volatilep))
4620 type = build_array_type (c_build_type_variant (TREE_TYPE (type),
4621 constp, volatilep),
4622 TYPE_DOMAIN (type));
4623 #if 0 /* Leave the variable const or volatile as well. */
4624 constp = volatilep = 0;
4625 #endif
4628 /* If this is a block level extern, it must live past the end
4629 of the function so that we can check it against other
4630 extern declarations (IDENTIFIER_LIMBO_VALUE). */
4631 if (extern_ref && allocation_temporary_p ())
4632 end_temporary_allocation ();
4634 decl = build_decl (VAR_DECL, declarator, type);
4635 if (size_varies)
4636 C_DECL_VARIABLE_SIZE (decl) = 1;
4638 if (inlinep)
4639 pedwarn_with_decl (decl, "variable `%s' declared `inline'");
4641 DECL_EXTERNAL (decl) = extern_ref;
4642 /* At top level, the presence of a `static' or `register' storage
4643 class specifier, or the absence of all storage class specifiers
4644 makes this declaration a definition (perhaps tentative). Also,
4645 the absence of both `static' and `register' makes it public. */
4646 if (current_binding_level == global_binding_level)
4648 TREE_PUBLIC (decl)
4649 = !(specbits
4650 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)));
4651 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
4653 /* Not at top level, only `static' makes a static definition. */
4654 else
4656 TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
4657 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
4660 if (specbits & 1 << (int) RID_ITERATOR)
4661 ITERATOR_P (decl) = 1;
4664 /* Record `register' declaration for warnings on &
4665 and in case doing stupid register allocation. */
4667 if (specbits & (1 << (int) RID_REGISTER))
4668 DECL_REGISTER (decl) = 1;
4670 /* Record constancy and volatility. */
4672 if (constp)
4673 TREE_READONLY (decl) = 1;
4674 if (volatilep)
4676 TREE_SIDE_EFFECTS (decl) = 1;
4677 TREE_THIS_VOLATILE (decl) = 1;
4679 /* If a type has volatile components, it should be stored in memory.
4680 Otherwise, the fact that those components are volatile
4681 will be ignored, and would even crash the compiler. */
4682 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4683 mark_addressable (decl);
4685 pop_obstacks ();
4687 return decl;
4691 /* Decode the parameter-list info for a function type or function definition.
4692 The argument is the value returned by `get_parm_info' (or made in parse.y
4693 if there is an identifier list instead of a parameter decl list).
4694 These two functions are separate because when a function returns
4695 or receives functions then each is called multiple times but the order
4696 of calls is different. The last call to `grokparms' is always the one
4697 that contains the formal parameter names of a function definition.
4699 Store in `last_function_parms' a chain of the decls of parms.
4700 Also store in `last_function_parm_tags' a chain of the struct, union,
4701 and enum tags declared among the parms.
4703 Return a list of arg types to use in the FUNCTION_TYPE for this function.
4705 FUNCDEF_FLAG is nonzero for a function definition, 0 for
4706 a mere declaration. A nonempty identifier-list gets an error message
4707 when FUNCDEF_FLAG is zero. */
4709 static tree
4710 grokparms (parms_info, funcdef_flag)
4711 tree parms_info;
4712 int funcdef_flag;
4714 tree first_parm = TREE_CHAIN (parms_info);
4716 last_function_parms = TREE_PURPOSE (parms_info);
4717 last_function_parm_tags = TREE_VALUE (parms_info);
4719 if (warn_strict_prototypes && first_parm == 0 && !funcdef_flag
4720 && !in_system_header)
4721 warning ("function declaration isn't a prototype");
4723 if (first_parm != 0
4724 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
4726 if (! funcdef_flag)
4727 pedwarn ("parameter names (without types) in function declaration");
4729 last_function_parms = first_parm;
4730 return 0;
4732 else
4734 tree parm;
4735 tree typelt;
4736 /* We no longer test FUNCDEF_FLAG.
4737 If the arg types are incomplete in a declaration,
4738 they must include undefined tags.
4739 These tags can never be defined in the scope of the declaration,
4740 so the types can never be completed,
4741 and no call can be compiled successfully. */
4742 #if 0
4743 /* In a fcn definition, arg types must be complete. */
4744 if (funcdef_flag)
4745 #endif
4746 for (parm = last_function_parms, typelt = first_parm;
4747 parm;
4748 parm = TREE_CHAIN (parm))
4749 /* Skip over any enumeration constants declared here. */
4750 if (TREE_CODE (parm) == PARM_DECL)
4752 /* Barf if the parameter itself has an incomplete type. */
4753 tree type = TREE_VALUE (typelt);
4754 if (TYPE_SIZE (type) == 0)
4756 if (funcdef_flag && DECL_NAME (parm) != 0)
4757 error ("parameter `%s' has incomplete type",
4758 IDENTIFIER_POINTER (DECL_NAME (parm)));
4759 else
4760 warning ("parameter has incomplete type");
4761 if (funcdef_flag)
4763 TREE_VALUE (typelt) = error_mark_node;
4764 TREE_TYPE (parm) = error_mark_node;
4767 #if 0 /* This has been replaced by parm_tags_warning
4768 which uses a more accurate criterion for what to warn about. */
4769 else
4771 /* Now warn if is a pointer to an incomplete type. */
4772 while (TREE_CODE (type) == POINTER_TYPE
4773 || TREE_CODE (type) == REFERENCE_TYPE)
4774 type = TREE_TYPE (type);
4775 type = TYPE_MAIN_VARIANT (type);
4776 if (TYPE_SIZE (type) == 0)
4778 if (DECL_NAME (parm) != 0)
4779 warning ("parameter `%s' points to incomplete type",
4780 IDENTIFIER_POINTER (DECL_NAME (parm)));
4781 else
4782 warning ("parameter points to incomplete type");
4785 #endif
4786 typelt = TREE_CHAIN (typelt);
4789 /* Allocate the list of types the way we allocate a type. */
4790 if (first_parm && ! TREE_PERMANENT (first_parm))
4792 /* Construct a copy of the list of types
4793 on the saveable obstack. */
4794 tree result = NULL;
4795 for (typelt = first_parm; typelt; typelt = TREE_CHAIN (typelt))
4796 result = saveable_tree_cons (NULL_TREE, TREE_VALUE (typelt),
4797 result);
4798 return nreverse (result);
4800 else
4801 /* The list we have is permanent already. */
4802 return first_parm;
4807 /* Return a tree_list node with info on a parameter list just parsed.
4808 The TREE_PURPOSE is a chain of decls of those parms.
4809 The TREE_VALUE is a list of structure, union and enum tags defined.
4810 The TREE_CHAIN is a list of argument types to go in the FUNCTION_TYPE.
4811 This tree_list node is later fed to `grokparms'.
4813 VOID_AT_END nonzero means append `void' to the end of the type-list.
4814 Zero means the parmlist ended with an ellipsis so don't append `void'. */
4816 tree
4817 get_parm_info (void_at_end)
4818 int void_at_end;
4820 register tree decl, t;
4821 register tree types = 0;
4822 int erred = 0;
4823 tree tags = gettags ();
4824 tree parms = getdecls ();
4825 tree new_parms = 0;
4826 tree order = current_binding_level->parm_order;
4828 /* Just `void' (and no ellipsis) is special. There are really no parms. */
4829 if (void_at_end && parms != 0
4830 && TREE_CHAIN (parms) == 0
4831 && TYPE_MAIN_VARIANT (TREE_TYPE (parms)) == void_type_node
4832 && DECL_NAME (parms) == 0)
4834 parms = NULL_TREE;
4835 storedecls (NULL_TREE);
4836 return saveable_tree_cons (NULL_TREE, NULL_TREE,
4837 saveable_tree_cons (NULL_TREE, void_type_node, NULL_TREE));
4840 /* Extract enumerator values and other non-parms declared with the parms.
4841 Likewise any forward parm decls that didn't have real parm decls. */
4842 for (decl = parms; decl; )
4844 tree next = TREE_CHAIN (decl);
4846 if (TREE_CODE (decl) != PARM_DECL)
4848 TREE_CHAIN (decl) = new_parms;
4849 new_parms = decl;
4851 else if (TREE_ASM_WRITTEN (decl))
4853 error_with_decl (decl, "parameter `%s' has just a forward declaration");
4854 TREE_CHAIN (decl) = new_parms;
4855 new_parms = decl;
4857 decl = next;
4860 /* Put the parm decls back in the order they were in in the parm list. */
4861 for (t = order; t; t = TREE_CHAIN (t))
4863 if (TREE_CHAIN (t))
4864 TREE_CHAIN (TREE_VALUE (t)) = TREE_VALUE (TREE_CHAIN (t));
4865 else
4866 TREE_CHAIN (TREE_VALUE (t)) = 0;
4869 new_parms = chainon (order ? nreverse (TREE_VALUE (order)) : 0,
4870 new_parms);
4872 /* Store the parmlist in the binding level since the old one
4873 is no longer a valid list. (We have changed the chain pointers.) */
4874 storedecls (new_parms);
4876 for (decl = new_parms; decl; decl = TREE_CHAIN (decl))
4877 /* There may also be declarations for enumerators if an enumeration
4878 type is declared among the parms. Ignore them here. */
4879 if (TREE_CODE (decl) == PARM_DECL)
4881 /* Since there is a prototype,
4882 args are passed in their declared types. */
4883 tree type = TREE_TYPE (decl);
4884 DECL_ARG_TYPE (decl) = type;
4885 #ifdef PROMOTE_PROTOTYPES
4886 if (TREE_CODE (type) == INTEGER_TYPE
4887 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4888 DECL_ARG_TYPE (decl) = integer_type_node;
4889 #endif
4891 types = saveable_tree_cons (NULL_TREE, TREE_TYPE (decl), types);
4892 if (TYPE_MAIN_VARIANT (TREE_VALUE (types)) == void_type_node && ! erred
4893 && DECL_NAME (decl) == 0)
4895 error ("`void' in parameter list must be the entire list");
4896 erred = 1;
4900 if (void_at_end)
4901 return saveable_tree_cons (new_parms, tags,
4902 nreverse (saveable_tree_cons (NULL_TREE, void_type_node, types)));
4904 return saveable_tree_cons (new_parms, tags, nreverse (types));
4907 /* At end of parameter list, warn about any struct, union or enum tags
4908 defined within. Do so because these types cannot ever become complete. */
4910 void
4911 parmlist_tags_warning ()
4913 tree elt;
4914 static int already;
4916 for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
4918 enum tree_code code = TREE_CODE (TREE_VALUE (elt));
4919 /* An anonymous union parm type is meaningful as a GNU extension.
4920 So don't warn for that. */
4921 if (code == UNION_TYPE && !pedantic)
4922 continue;
4923 if (TREE_PURPOSE (elt) != 0)
4924 warning ("`%s %s' declared inside parameter list",
4925 (code == RECORD_TYPE ? "struct"
4926 : code == UNION_TYPE ? "union"
4927 : "enum"),
4928 IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
4929 else
4930 warning ("anonymous %s declared inside parameter list",
4931 (code == RECORD_TYPE ? "struct"
4932 : code == UNION_TYPE ? "union"
4933 : "enum"));
4935 if (! already)
4937 warning ("its scope is only this definition or declaration,");
4938 warning ("which is probably not what you want.");
4939 already = 1;
4944 /* Get the struct, enum or union (CODE says which) with tag NAME.
4945 Define the tag as a forward-reference if it is not defined. */
4947 tree
4948 xref_tag (code, name)
4949 enum tree_code code;
4950 tree name;
4952 int temporary = allocation_temporary_p ();
4954 /* If a cross reference is requested, look up the type
4955 already defined for this tag and return it. */
4957 register tree ref = lookup_tag (code, name, current_binding_level, 0);
4958 /* Even if this is the wrong type of tag, return what we found.
4959 There will be an error message anyway, from pending_xref_error.
4960 If we create an empty xref just for an invalid use of the type,
4961 the main result is to create lots of superfluous error messages. */
4962 if (ref)
4963 return ref;
4965 push_obstacks_nochange ();
4967 if (current_binding_level == global_binding_level && temporary)
4968 end_temporary_allocation ();
4970 /* If no such tag is yet defined, create a forward-reference node
4971 and record it as the "definition".
4972 When a real declaration of this type is found,
4973 the forward-reference will be altered into a real type. */
4975 ref = make_node (code);
4976 if (code == ENUMERAL_TYPE)
4978 /* (In ANSI, Enums can be referred to only if already defined.) */
4979 if (pedantic)
4980 pedwarn ("ANSI C forbids forward references to `enum' types");
4981 /* Give the type a default layout like unsigned int
4982 to avoid crashing if it does not get defined. */
4983 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
4984 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
4985 TREE_UNSIGNED (ref) = 1;
4986 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
4987 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
4988 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
4991 pushtag (name, ref);
4993 pop_obstacks ();
4995 return ref;
4998 /* Make sure that the tag NAME is defined *in the current binding level*
4999 at least as a forward reference.
5000 CODE says which kind of tag NAME ought to be.
5002 We also do a push_obstacks_nochange
5003 whose matching pop is in finish_struct. */
5005 tree
5006 start_struct (code, name)
5007 enum tree_code code;
5008 tree name;
5010 /* If there is already a tag defined at this binding level
5011 (as a forward reference), just return it. */
5013 register tree ref = 0;
5015 push_obstacks_nochange ();
5016 if (current_binding_level == global_binding_level)
5017 end_temporary_allocation ();
5019 if (name != 0)
5020 ref = lookup_tag (code, name, current_binding_level, 1);
5021 if (ref && TREE_CODE (ref) == code)
5023 C_TYPE_BEING_DEFINED (ref) = 1;
5024 if (TYPE_FIELDS (ref))
5025 error ((code == UNION_TYPE ? "redefinition of `union %s'"
5026 : "redefinition of `struct %s'"),
5027 IDENTIFIER_POINTER (name));
5029 return ref;
5032 /* Otherwise create a forward-reference just so the tag is in scope. */
5034 ref = make_node (code);
5035 pushtag (name, ref);
5036 C_TYPE_BEING_DEFINED (ref) = 1;
5037 return ref;
5040 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
5041 of a structure component, returning a FIELD_DECL node.
5042 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.
5044 This is done during the parsing of the struct declaration.
5045 The FIELD_DECL nodes are chained together and the lot of them
5046 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
5048 tree
5049 grokfield (filename, line, declarator, declspecs, width)
5050 char *filename;
5051 int line;
5052 tree declarator, declspecs, width;
5054 tree value;
5056 /* The corresponding pop_obstacks is in finish_decl. */
5057 push_obstacks_nochange ();
5059 value = grokdeclarator (declarator, declspecs, width ? BITFIELD : FIELD, 0);
5061 finish_decl (value, NULL_TREE, NULL_TREE);
5062 DECL_INITIAL (value) = width;
5064 maybe_objc_check_decl (value);
5065 return value;
5068 /* Function to help qsort sort FIELD_DECLs by name order. */
5070 static int
5071 field_decl_cmp (x, y)
5072 tree *x, *y;
5074 return (long)DECL_NAME (*x) - (long)DECL_NAME (*y);
5077 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5078 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5080 We also do a pop_obstacks to match the push in start_struct. */
5082 tree
5083 finish_struct (t, fieldlist)
5084 register tree t, fieldlist;
5086 register tree x;
5087 int old_momentary;
5088 int toplevel = global_binding_level == current_binding_level;
5090 /* If this type was previously laid out as a forward reference,
5091 make sure we lay it out again. */
5093 TYPE_SIZE (t) = 0;
5095 /* Nameless union parm types are useful as GCC extension. */
5096 if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic)
5097 /* Otherwise, warn about any struct or union def. in parmlist. */
5098 if (in_parm_level_p ())
5100 if (pedantic)
5101 pedwarn ((TREE_CODE (t) == UNION_TYPE ? "union defined inside parms"
5102 : "structure defined inside parms"));
5103 else if (! flag_traditional)
5104 warning ((TREE_CODE (t) == UNION_TYPE ? "union defined inside parms"
5105 : "structure defined inside parms"));
5108 old_momentary = suspend_momentary ();
5110 if (fieldlist == 0 && pedantic)
5111 pedwarn ((TREE_CODE (t) == UNION_TYPE ? "union has no members"
5112 : "structure has no members"));
5114 /* Install struct as DECL_CONTEXT of each field decl.
5115 Also process specified field sizes.
5116 Set DECL_FIELD_SIZE to the specified size, or 0 if none specified.
5117 The specified size is found in the DECL_INITIAL.
5118 Store 0 there, except for ": 0" fields (so we can find them
5119 and delete them, below). */
5121 for (x = fieldlist; x; x = TREE_CHAIN (x))
5123 DECL_CONTEXT (x) = t;
5124 DECL_FIELD_SIZE (x) = 0;
5126 /* If any field is const, the structure type is pseudo-const. */
5127 if (TREE_READONLY (x))
5128 C_TYPE_FIELDS_READONLY (t) = 1;
5129 else
5131 /* A field that is pseudo-const makes the structure likewise. */
5132 tree t1 = TREE_TYPE (x);
5133 while (TREE_CODE (t1) == ARRAY_TYPE)
5134 t1 = TREE_TYPE (t1);
5135 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5136 && C_TYPE_FIELDS_READONLY (t1))
5137 C_TYPE_FIELDS_READONLY (t) = 1;
5140 /* Any field that is volatile means variables of this type must be
5141 treated in some ways as volatile. */
5142 if (TREE_THIS_VOLATILE (x))
5143 C_TYPE_FIELDS_VOLATILE (t) = 1;
5145 /* Any field of nominal variable size implies structure is too. */
5146 if (C_DECL_VARIABLE_SIZE (x))
5147 C_TYPE_VARIABLE_SIZE (t) = 1;
5149 /* Detect invalid nested redefinition. */
5150 if (TREE_TYPE (x) == t)
5151 error ("nested redefinition of `%s'",
5152 IDENTIFIER_POINTER (TYPE_NAME (t)));
5154 /* Detect invalid bit-field size. */
5155 if (DECL_INITIAL (x))
5156 STRIP_NOPS (DECL_INITIAL (x));
5157 if (DECL_INITIAL (x))
5159 if (TREE_CODE (DECL_INITIAL (x)) == INTEGER_CST)
5160 constant_expression_warning (DECL_INITIAL (x));
5161 else
5163 error_with_decl (x, "bit-field `%s' width not an integer constant");
5164 DECL_INITIAL (x) = NULL;
5168 /* Detect invalid bit-field type. */
5169 if (DECL_INITIAL (x)
5170 && TREE_CODE (TREE_TYPE (x)) != INTEGER_TYPE
5171 && TREE_CODE (TREE_TYPE (x)) != ENUMERAL_TYPE)
5173 error_with_decl (x, "bit-field `%s' has invalid type");
5174 DECL_INITIAL (x) = NULL;
5176 if (DECL_INITIAL (x) && pedantic
5177 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != integer_type_node
5178 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != unsigned_type_node
5179 /* Accept an enum that's equivalent to int or unsigned int. */
5180 && !(TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE
5181 && (TYPE_PRECISION (TREE_TYPE (x))
5182 == TYPE_PRECISION (integer_type_node))))
5183 pedwarn_with_decl (x, "bit-field `%s' type invalid in ANSI C");
5185 /* Detect and ignore out of range field width. */
5186 if (DECL_INITIAL (x))
5188 unsigned HOST_WIDE_INT width = TREE_INT_CST_LOW (DECL_INITIAL (x));
5190 if (tree_int_cst_lt (DECL_INITIAL (x), integer_zero_node))
5192 DECL_INITIAL (x) = NULL;
5193 error_with_decl (x, "negative width in bit-field `%s'");
5195 else if (TREE_INT_CST_HIGH (DECL_INITIAL (x)) != 0
5196 || width > TYPE_PRECISION (TREE_TYPE (x)))
5198 DECL_INITIAL (x) = NULL;
5199 pedwarn_with_decl (x, "width of `%s' exceeds its type");
5201 else if (width == 0 && DECL_NAME (x) != 0)
5203 error_with_decl (x, "zero width for bit-field `%s'");
5204 DECL_INITIAL (x) = NULL;
5208 /* Process valid field width. */
5209 if (DECL_INITIAL (x))
5211 register int width = TREE_INT_CST_LOW (DECL_INITIAL (x));
5213 DECL_FIELD_SIZE (x) = width;
5214 DECL_BIT_FIELD (x) = 1;
5215 DECL_INITIAL (x) = NULL;
5217 if (width == 0)
5219 /* field size 0 => force desired amount of alignment. */
5220 #ifdef EMPTY_FIELD_BOUNDARY
5221 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), EMPTY_FIELD_BOUNDARY);
5222 #endif
5223 #ifdef PCC_BITFIELD_TYPE_MATTERS
5224 DECL_ALIGN (x) = MAX (DECL_ALIGN (x),
5225 TYPE_ALIGN (TREE_TYPE (x)));
5226 #endif
5229 else
5231 int min_align = (DECL_PACKED (x) ? BITS_PER_UNIT
5232 : TYPE_ALIGN (TREE_TYPE (x)));
5233 /* Non-bit-fields are aligned for their type, except packed
5234 fields which require only BITS_PER_UNIT alignment. */
5235 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), min_align);
5239 /* Now DECL_INITIAL is null on all members. */
5241 /* Delete all duplicate fields from the fieldlist */
5242 for (x = fieldlist; x && TREE_CHAIN (x);)
5243 /* Anonymous fields aren't duplicates. */
5244 if (DECL_NAME (TREE_CHAIN (x)) == 0)
5245 x = TREE_CHAIN (x);
5246 else
5248 register tree y = fieldlist;
5250 while (1)
5252 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5253 break;
5254 if (y == x)
5255 break;
5256 y = TREE_CHAIN (y);
5258 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5260 error_with_decl (TREE_CHAIN (x), "duplicate member `%s'");
5261 TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
5263 else x = TREE_CHAIN (x);
5266 /* Now we have the nearly final fieldlist. Record it,
5267 then lay out the structure or union (including the fields). */
5269 TYPE_FIELDS (t) = fieldlist;
5271 layout_type (t);
5273 /* Delete all zero-width bit-fields from the front of the fieldlist */
5274 while (fieldlist
5275 && DECL_INITIAL (fieldlist))
5276 fieldlist = TREE_CHAIN (fieldlist);
5277 /* Delete all such members from the rest of the fieldlist */
5278 for (x = fieldlist; x;)
5280 if (TREE_CHAIN (x) && DECL_INITIAL (TREE_CHAIN (x)))
5281 TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
5282 else x = TREE_CHAIN (x);
5285 /* Now we have the truly final field list.
5286 Store it in this type and in the variants. */
5288 TYPE_FIELDS (t) = fieldlist;
5290 /* If there are lots of fields, sort so we can look through them fast.
5291 We arbitrarily consider 16 or more elts to be "a lot". */
5293 int len = 0;
5295 for (x = fieldlist; x; x = TREE_CHAIN (x))
5297 if (len > 15)
5298 break;
5299 len += 1;
5301 if (len > 15)
5303 tree *field_array;
5304 char *space;
5306 len += list_length (x);
5307 /* Use the same allocation policy here that make_node uses, to
5308 ensure that this lives as long as the rest of the struct decl.
5309 All decls in an inline function need to be saved. */
5310 if (allocation_temporary_p ())
5311 space = savealloc (sizeof (struct lang_type) + len * sizeof (tree));
5312 else
5313 space = oballoc (sizeof (struct lang_type) + len * sizeof (tree));
5315 TYPE_LANG_SPECIFIC (t) = (struct lang_type *) space;
5316 TYPE_LANG_SPECIFIC (t)->len = len;
5318 field_array = &TYPE_LANG_SPECIFIC (t)->elts[0];
5319 len = 0;
5320 for (x = fieldlist; x; x = TREE_CHAIN (x))
5321 field_array[len++] = x;
5323 qsort (field_array, len, sizeof (tree), field_decl_cmp);
5327 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5329 TYPE_FIELDS (x) = TYPE_FIELDS (t);
5330 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5331 TYPE_ALIGN (x) = TYPE_ALIGN (t);
5334 /* Promote each bit-field's type to int if it is narrower than that. */
5335 for (x = fieldlist; x; x = TREE_CHAIN (x))
5336 if (DECL_BIT_FIELD (x)
5337 && (C_PROMOTING_INTEGER_TYPE_P (TREE_TYPE (x))
5338 || DECL_FIELD_SIZE (x) < TYPE_PRECISION (integer_type_node)))
5340 tree type = TREE_TYPE (x);
5342 /* Preserve unsignedness if traditional
5343 or if not really getting any wider. */
5344 if (TREE_UNSIGNED (type)
5345 && (flag_traditional
5347 (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)
5349 DECL_FIELD_SIZE (x) == TYPE_PRECISION (integer_type_node))))
5350 TREE_TYPE (x) = unsigned_type_node;
5351 else
5352 TREE_TYPE (x) = integer_type_node;
5355 /* If this structure or union completes the type of any previous
5356 variable declaration, lay it out and output its rtl. */
5358 if (current_binding_level->n_incomplete != 0)
5360 tree decl;
5361 for (decl = current_binding_level->names; decl; decl = TREE_CHAIN (decl))
5363 if (TREE_TYPE (decl) == t
5364 && TREE_CODE (decl) != TYPE_DECL)
5366 layout_decl (decl, 0);
5367 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
5368 maybe_objc_check_decl (decl);
5369 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
5370 if (! toplevel)
5371 expand_decl (decl);
5372 --current_binding_level->n_incomplete;
5374 else if (TYPE_SIZE (TREE_TYPE (decl)) == 0
5375 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5377 tree element = TREE_TYPE (decl);
5378 while (TREE_CODE (element) == ARRAY_TYPE)
5379 element = TREE_TYPE (element);
5380 if (element == t)
5381 layout_array_type (TREE_TYPE (decl));
5386 resume_momentary (old_momentary);
5388 /* Finish debugging output for this type. */
5389 rest_of_type_compilation (t, toplevel);
5391 /* The matching push is in start_struct. */
5392 pop_obstacks ();
5394 return t;
5397 /* Lay out the type T, and its element type, and so on. */
5399 static void
5400 layout_array_type (t)
5401 tree t;
5403 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5404 layout_array_type (TREE_TYPE (t));
5405 layout_type (t);
5408 /* Begin compiling the definition of an enumeration type.
5409 NAME is its name (or null if anonymous).
5410 Returns the type object, as yet incomplete.
5411 Also records info about it so that build_enumerator
5412 may be used to declare the individual values as they are read. */
5414 tree
5415 start_enum (name)
5416 tree name;
5418 register tree enumtype = 0;
5420 /* If this is the real definition for a previous forward reference,
5421 fill in the contents in the same object that used to be the
5422 forward reference. */
5424 if (name != 0)
5425 enumtype = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 1);
5427 /* The corresponding pop_obstacks is in finish_enum. */
5428 push_obstacks_nochange ();
5429 /* If these symbols and types are global, make them permanent. */
5430 if (current_binding_level == global_binding_level)
5431 end_temporary_allocation ();
5433 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5435 enumtype = make_node (ENUMERAL_TYPE);
5436 pushtag (name, enumtype);
5439 C_TYPE_BEING_DEFINED (enumtype) = 1;
5441 if (TYPE_VALUES (enumtype) != 0)
5443 /* This enum is a named one that has been declared already. */
5444 error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
5446 /* Completely replace its old definition.
5447 The old enumerators remain defined, however. */
5448 TYPE_VALUES (enumtype) = 0;
5451 enum_next_value = integer_zero_node;
5452 enum_overflow = 0;
5454 return enumtype;
5457 /* After processing and defining all the values of an enumeration type,
5458 install their decls in the enumeration type and finish it off.
5459 ENUMTYPE is the type object and VALUES a list of decl-value pairs.
5460 Returns ENUMTYPE. */
5462 tree
5463 finish_enum (enumtype, values)
5464 register tree enumtype, values;
5466 register tree pair, tem;
5467 tree minnode = 0, maxnode = 0;
5468 register HOST_WIDE_INT maxvalue = 0;
5469 register HOST_WIDE_INT minvalue = 0;
5470 register int i;
5471 unsigned precision = 0;
5472 int toplevel = global_binding_level == current_binding_level;
5473 int temporary = allocation_temporary_p ();
5475 if (in_parm_level_p ())
5476 warning ("enum defined inside parms");
5478 /* Calculate the maximum value of any enumerator in this type. */
5480 for (pair = values; pair; pair = TREE_CHAIN (pair))
5482 tree value = TREE_VALUE (pair);
5483 if (pair == values)
5484 minnode = maxnode = TREE_VALUE (pair);
5485 else
5487 if (tree_int_cst_lt (maxnode, value))
5488 maxnode = value;
5489 if (tree_int_cst_lt (value, minnode))
5490 minnode = value;
5494 TYPE_MIN_VALUE (enumtype) = minnode;
5495 TYPE_MAX_VALUE (enumtype) = maxnode;
5497 /* Determine the precision this type needs. */
5499 if (TREE_INT_CST_HIGH (minnode) >= 0
5500 ? tree_int_cst_lt (TYPE_MAX_VALUE (unsigned_type_node), maxnode)
5501 : (tree_int_cst_lt (minnode, TYPE_MIN_VALUE (integer_type_node))
5502 || tree_int_cst_lt (TYPE_MAX_VALUE (integer_type_node), maxnode)))
5503 precision = TYPE_PRECISION (long_long_integer_type_node);
5504 else
5506 maxvalue = TREE_INT_CST_LOW (maxnode);
5507 minvalue = TREE_INT_CST_LOW (minnode);
5509 if (maxvalue > 0)
5510 precision = floor_log2 (maxvalue) + 1;
5511 if (minvalue < 0)
5513 /* Compute number of bits to represent magnitude of a negative value.
5514 Add one to MINVALUE since range of negative numbers
5515 includes the power of two. */
5516 unsigned negprecision = floor_log2 (-minvalue - 1) + 1;
5517 if (negprecision > precision)
5518 precision = negprecision;
5519 precision += 1; /* room for sign bit */
5522 if (!precision)
5523 precision = 1;
5526 if (flag_short_enums || precision > TYPE_PRECISION (integer_type_node))
5527 /* Use the width of the narrowest normal C type which is wide enough. */
5528 TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
5529 else
5530 TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
5532 TYPE_SIZE (enumtype) = 0;
5533 layout_type (enumtype);
5535 /* An enum can have some negative values; then it is signed. */
5536 TREE_UNSIGNED (enumtype) = ! tree_int_cst_lt (minnode, integer_zero_node);
5538 /* If the enumerators might not fit in an int, change their type now. */
5539 /* It seems more useful in the debugger to leave these as int
5540 unless the enumerator is wider than int. */
5541 if (TYPE_PRECISION (enumtype) <= TYPE_PRECISION (integer_type_node))
5542 for (pair = values; pair; pair = TREE_CHAIN (pair))
5544 TREE_TYPE (TREE_PURPOSE (pair)) = enumtype;
5545 DECL_SIZE (TREE_PURPOSE (pair)) = TYPE_SIZE (enumtype);
5546 if (TREE_CODE (TREE_PURPOSE (pair)) != FUNCTION_DECL)
5547 DECL_ALIGN (TREE_PURPOSE (pair)) = TYPE_ALIGN (enumtype);
5550 /* Replace the decl nodes in VALUES with their names. */
5551 for (pair = values; pair; pair = TREE_CHAIN (pair))
5552 TREE_PURPOSE (pair) = DECL_NAME (TREE_PURPOSE (pair));
5554 TYPE_VALUES (enumtype) = values;
5556 /* Fix up all variant types of this enum type. */
5557 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5559 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5560 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5561 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5562 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5563 TYPE_MODE (tem) = TYPE_MODE (enumtype);
5564 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5565 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5566 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
5569 /* Finish debugging output for this type. */
5570 rest_of_type_compilation (enumtype, toplevel);
5572 /* This matches a push in start_enum. */
5573 pop_obstacks ();
5575 return enumtype;
5578 /* Build and install a CONST_DECL for one value of the
5579 current enumeration type (one that was begun with start_enum).
5580 Return a tree-list containing the CONST_DECL and its value.
5581 Assignment of sequential values by default is handled here. */
5583 tree
5584 build_enumerator (name, value)
5585 tree name, value;
5587 register tree decl;
5589 /* Validate and default VALUE. */
5591 /* Remove no-op casts from the value. */
5592 if (value)
5593 STRIP_TYPE_NOPS (value);
5595 if (value != 0)
5597 if (TREE_CODE (value) == INTEGER_CST)
5598 constant_expression_warning (value);
5599 else
5601 error ("enumerator value for `%s' not integer constant",
5602 IDENTIFIER_POINTER (name));
5603 value = 0;
5607 /* Default based on previous value. */
5608 /* It should no longer be possible to have NON_LVALUE_EXPR
5609 in the default. */
5610 if (value == 0)
5612 value = enum_next_value;
5613 if (enum_overflow)
5614 error ("overflow in enumeration values");
5617 if (pedantic && ! int_fits_type_p (value, integer_type_node))
5619 pedwarn ("ANSI C restricts enumerator values to range of `int'");
5620 value = integer_zero_node;
5623 /* Set basis for default for next value. */
5624 enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5625 enum_overflow = tree_int_cst_lt (enum_next_value, value);
5627 /* Now create a declaration for the enum value name. */
5629 decl = build_decl (CONST_DECL, name, integer_type_node);
5630 DECL_INITIAL (decl) = value;
5631 TREE_TYPE (value) = integer_type_node;
5632 pushdecl (decl);
5634 return saveable_tree_cons (decl, value, NULL_TREE);
5637 /* Create the FUNCTION_DECL for a function definition.
5638 DECLSPECS and DECLARATOR are the parts of the declaration;
5639 they describe the function's name and the type it returns,
5640 but twisted together in a fashion that parallels the syntax of C.
5642 This function creates a binding context for the function body
5643 as well as setting up the FUNCTION_DECL in current_function_decl.
5645 Returns 1 on success. If the DECLARATOR is not suitable for a function
5646 (it defines a datum instead), we return 0, which tells
5647 yyparse to report a parse error.
5649 NESTED is nonzero for a function nested within another function. */
5652 start_function (declspecs, declarator, nested)
5653 tree declarator, declspecs;
5654 int nested;
5656 tree decl1, old_decl;
5657 tree restype;
5659 current_function_returns_value = 0; /* Assume, until we see it does. */
5660 current_function_returns_null = 0;
5661 warn_about_return_type = 0;
5662 current_extern_inline = 0;
5663 c_function_varargs = 0;
5664 named_labels = 0;
5665 shadowed_labels = 0;
5667 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1);
5669 /* If the declarator is not suitable for a function definition,
5670 cause a syntax error. */
5671 if (decl1 == 0)
5672 return 0;
5674 announce_function (decl1);
5676 if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl1))) == 0)
5678 error ("return-type is an incomplete type");
5679 /* Make it return void instead. */
5680 TREE_TYPE (decl1)
5681 = build_function_type (void_type_node,
5682 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
5685 if (warn_about_return_type)
5686 warning ("return-type defaults to `int'");
5688 /* Save the parm names or decls from this function's declarator
5689 where store_parm_decls will find them. */
5690 current_function_parms = last_function_parms;
5691 current_function_parm_tags = last_function_parm_tags;
5693 /* Make the init_value nonzero so pushdecl knows this is not tentative.
5694 error_mark_node is replaced below (in poplevel) with the BLOCK. */
5695 DECL_INITIAL (decl1) = error_mark_node;
5697 /* If this definition isn't a prototype and we had a prototype declaration
5698 before, copy the arg type info from that prototype.
5699 But not if what we had before was a builtin function. */
5700 old_decl = lookup_name_current_level (DECL_NAME (decl1));
5701 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
5702 && !DECL_BUILT_IN (old_decl)
5703 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
5704 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (old_decl))))
5705 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
5707 TREE_TYPE (decl1) = TREE_TYPE (old_decl);
5708 current_function_prototype_file = DECL_SOURCE_FILE (old_decl);
5709 current_function_prototype_line = DECL_SOURCE_LINE (old_decl);
5712 /* Optionally warn of old-fashioned def with no previous prototype. */
5713 if (warn_strict_prototypes
5714 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
5715 && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
5716 warning ("function declaration isn't a prototype");
5717 /* Optionally warn of any global def with no previous prototype. */
5718 else if (warn_missing_prototypes
5719 && TREE_PUBLIC (decl1)
5720 && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0)
5721 && strcmp ("main", IDENTIFIER_POINTER (DECL_NAME (decl1))))
5722 warning_with_decl (decl1, "no previous prototype for `%s'");
5723 /* Optionally warn of any def with no previous prototype
5724 if the function has already been used. */
5725 else if (warn_missing_prototypes
5726 && old_decl != 0 && TREE_USED (old_decl)
5727 && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
5728 warning_with_decl (decl1, "`%s' was used with no prototype before its definition");
5730 /* This is a definition, not a reference.
5731 So normally clear DECL_EXTERNAL.
5732 However, `extern inline' acts like a declaration
5733 except for defining how to inline. So set DECL_EXTERNAL in that case. */
5734 DECL_EXTERNAL (decl1) = current_extern_inline;
5736 /* This function exists in static storage.
5737 (This does not mean `static' in the C sense!) */
5738 TREE_STATIC (decl1) = 1;
5740 /* A nested function is not global. */
5741 if (current_function_decl != 0)
5742 TREE_PUBLIC (decl1) = 0;
5744 /* Record the decl so that the function name is defined.
5745 If we already have a decl for this name, and it is a FUNCTION_DECL,
5746 use the old decl. */
5748 current_function_decl = pushdecl (decl1);
5750 pushlevel (0);
5751 declare_parm_level (1);
5752 current_binding_level->subblocks_tag_transparent = 1;
5754 make_function_rtl (current_function_decl);
5756 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
5757 /* Promote the value to int before returning it. */
5758 if (C_PROMOTING_INTEGER_TYPE_P (restype))
5760 /* It retains unsignedness if traditional
5761 or if not really getting wider. */
5762 if (TREE_UNSIGNED (restype)
5763 && (flag_traditional
5764 || (TYPE_PRECISION (restype)
5765 == TYPE_PRECISION (integer_type_node))))
5766 restype = unsigned_type_node;
5767 else
5768 restype = integer_type_node;
5770 DECL_RESULT (current_function_decl)
5771 = build_decl (RESULT_DECL, NULL_TREE, restype);
5773 if (!nested)
5774 /* Allocate further tree nodes temporarily during compilation
5775 of this function only. */
5776 temporary_allocation ();
5778 /* If this fcn was already referenced via a block-scope `extern' decl
5779 (or an implicit decl), propagate certain information about the usage. */
5780 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
5781 TREE_ADDRESSABLE (current_function_decl) = 1;
5783 return 1;
5786 /* Record that this function is going to be a varargs function.
5787 This is called before store_parm_decls, which is too early
5788 to call mark_varargs directly. */
5790 void
5791 c_mark_varargs ()
5793 c_function_varargs = 1;
5796 /* Store the parameter declarations into the current function declaration.
5797 This is called after parsing the parameter declarations, before
5798 digesting the body of the function.
5800 For an old-style definition, modify the function's type
5801 to specify at least the number of arguments. */
5803 void
5804 store_parm_decls ()
5806 register tree fndecl = current_function_decl;
5807 register tree parm;
5809 /* This is either a chain of PARM_DECLs (if a prototype was used)
5810 or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */
5811 tree specparms = current_function_parms;
5813 /* This is a list of types declared among parms in a prototype. */
5814 tree parmtags = current_function_parm_tags;
5816 /* This is a chain of PARM_DECLs from old-style parm declarations. */
5817 register tree parmdecls = getdecls ();
5819 /* This is a chain of any other decls that came in among the parm
5820 declarations. If a parm is declared with enum {foo, bar} x;
5821 then CONST_DECLs for foo and bar are put here. */
5822 tree nonparms = 0;
5824 /* Nonzero if this definition is written with a prototype. */
5825 int prototype = 0;
5827 if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST)
5829 /* This case is when the function was defined with an ANSI prototype.
5830 The parms already have decls, so we need not do anything here
5831 except record them as in effect
5832 and complain if any redundant old-style parm decls were written. */
5834 register tree next;
5835 tree others = 0;
5837 prototype = 1;
5839 if (parmdecls != 0)
5841 tree decl, link;
5843 error_with_decl (fndecl,
5844 "parm types given both in parmlist and separately");
5845 /* Get rid of the erroneous decls; don't keep them on
5846 the list of parms, since they might not be PARM_DECLs. */
5847 for (decl = current_binding_level->names;
5848 decl; decl = TREE_CHAIN (decl))
5849 if (DECL_NAME (decl))
5850 IDENTIFIER_LOCAL_VALUE (DECL_NAME (decl)) = 0;
5851 for (link = current_binding_level->shadowed;
5852 link; link = TREE_CHAIN (link))
5853 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
5854 current_binding_level->names = 0;
5855 current_binding_level->shadowed = 0;
5858 specparms = nreverse (specparms);
5859 for (parm = specparms; parm; parm = next)
5861 next = TREE_CHAIN (parm);
5862 if (TREE_CODE (parm) == PARM_DECL)
5864 if (DECL_NAME (parm) == 0)
5865 error_with_decl (parm, "parameter name omitted");
5866 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
5868 error_with_decl (parm, "parameter `%s' declared void");
5869 /* Change the type to error_mark_node so this parameter
5870 will be ignored by assign_parms. */
5871 TREE_TYPE (parm) = error_mark_node;
5873 pushdecl (parm);
5875 else
5877 /* If we find an enum constant or a type tag,
5878 put it aside for the moment. */
5879 TREE_CHAIN (parm) = 0;
5880 others = chainon (others, parm);
5884 /* Get the decls in their original chain order
5885 and record in the function. */
5886 DECL_ARGUMENTS (fndecl) = getdecls ();
5888 #if 0
5889 /* If this function takes a variable number of arguments,
5890 add a phony parameter to the end of the parm list,
5891 to represent the position of the first unnamed argument. */
5892 if (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))))
5893 != void_type_node)
5895 tree dummy = build_decl (PARM_DECL, NULL_TREE, void_type_node);
5896 /* Let's hope the address of the unnamed parm
5897 won't depend on its type. */
5898 TREE_TYPE (dummy) = integer_type_node;
5899 DECL_ARG_TYPE (dummy) = integer_type_node;
5900 DECL_ARGUMENTS (fndecl)
5901 = chainon (DECL_ARGUMENTS (fndecl), dummy);
5903 #endif
5905 /* Now pushdecl the enum constants. */
5906 for (parm = others; parm; parm = next)
5908 next = TREE_CHAIN (parm);
5909 if (DECL_NAME (parm) == 0)
5911 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
5913 else if (TREE_CODE (parm) != PARM_DECL)
5914 pushdecl (parm);
5917 storetags (chainon (parmtags, gettags ()));
5919 else
5921 /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
5922 each with a parm name as the TREE_VALUE.
5924 PARMDECLS is a chain of declarations for parameters.
5925 Warning! It can also contain CONST_DECLs which are not parameters
5926 but are names of enumerators of any enum types
5927 declared among the parameters.
5929 First match each formal parameter name with its declaration.
5930 Associate decls with the names and store the decls
5931 into the TREE_PURPOSE slots. */
5933 for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
5934 DECL_RESULT (parm) = 0;
5936 for (parm = specparms; parm; parm = TREE_CHAIN (parm))
5938 register tree tail, found = NULL;
5940 if (TREE_VALUE (parm) == 0)
5942 error_with_decl (fndecl, "parameter name missing from parameter list");
5943 TREE_PURPOSE (parm) = 0;
5944 continue;
5947 /* See if any of the parmdecls specifies this parm by name.
5948 Ignore any enumerator decls. */
5949 for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
5950 if (DECL_NAME (tail) == TREE_VALUE (parm)
5951 && TREE_CODE (tail) == PARM_DECL)
5953 found = tail;
5954 break;
5957 /* If declaration already marked, we have a duplicate name.
5958 Complain, and don't use this decl twice. */
5959 if (found && DECL_RESULT (found) != 0)
5961 error_with_decl (found, "multiple parameters named `%s'");
5962 found = 0;
5965 /* If the declaration says "void", complain and ignore it. */
5966 if (found && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == void_type_node)
5968 error_with_decl (found, "parameter `%s' declared void");
5969 TREE_TYPE (found) = integer_type_node;
5970 DECL_ARG_TYPE (found) = integer_type_node;
5971 layout_decl (found, 0);
5974 /* Traditionally, a parm declared float is actually a double. */
5975 if (found && flag_traditional
5976 && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == float_type_node)
5978 TREE_TYPE (found) = double_type_node;
5979 DECL_ARG_TYPE (found) = double_type_node;
5980 layout_decl (found, 0);
5983 /* If no declaration found, default to int. */
5984 if (!found)
5986 found = build_decl (PARM_DECL, TREE_VALUE (parm),
5987 integer_type_node);
5988 DECL_ARG_TYPE (found) = TREE_TYPE (found);
5989 DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
5990 DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
5991 if (extra_warnings)
5992 warning_with_decl (found, "type of `%s' defaults to `int'");
5993 pushdecl (found);
5996 TREE_PURPOSE (parm) = found;
5998 /* Mark this decl as "already found" -- see test, above.
5999 It is safe to use DECL_RESULT for this
6000 since it is not used in PARM_DECLs or CONST_DECLs. */
6001 DECL_RESULT (found) = error_mark_node;
6004 /* Put anything which is on the parmdecls chain and which is
6005 not a PARM_DECL onto the list NONPARMS. (The types of
6006 non-parm things which might appear on the list include
6007 enumerators and NULL-named TYPE_DECL nodes.) Complain about
6008 any actual PARM_DECLs not matched with any names. */
6010 nonparms = 0;
6011 for (parm = parmdecls; parm; )
6013 tree next = TREE_CHAIN (parm);
6014 TREE_CHAIN (parm) = 0;
6016 if (TREE_CODE (parm) != PARM_DECL)
6017 nonparms = chainon (nonparms, parm);
6018 else
6020 /* Complain about args with incomplete types. */
6021 if (TYPE_SIZE (TREE_TYPE (parm)) == 0)
6023 error_with_decl (parm, "parameter `%s' has incomplete type");
6024 TREE_TYPE (parm) = error_mark_node;
6027 if (DECL_RESULT (parm) == 0)
6029 error_with_decl (parm,
6030 "declaration for parameter `%s' but no such parameter");
6031 /* Pretend the parameter was not missing.
6032 This gets us to a standard state and minimizes
6033 further error messages. */
6034 specparms
6035 = chainon (specparms,
6036 tree_cons (parm, NULL_TREE, NULL_TREE));
6040 parm = next;
6043 /* Chain the declarations together in the order of the list of names. */
6044 /* Store that chain in the function decl, replacing the list of names. */
6045 parm = specparms;
6046 DECL_ARGUMENTS (fndecl) = 0;
6048 register tree last;
6049 for (last = 0; parm; parm = TREE_CHAIN (parm))
6050 if (TREE_PURPOSE (parm))
6052 if (last == 0)
6053 DECL_ARGUMENTS (fndecl) = TREE_PURPOSE (parm);
6054 else
6055 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6056 last = TREE_PURPOSE (parm);
6057 TREE_CHAIN (last) = 0;
6061 /* If there was a previous prototype,
6062 set the DECL_ARG_TYPE of each argument according to
6063 the type previously specified, and report any mismatches. */
6065 if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6067 register tree type;
6068 for (parm = DECL_ARGUMENTS (fndecl),
6069 type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6070 parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6071 != void_type_node));
6072 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6074 if (parm == 0 || type == 0
6075 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6077 error ("number of arguments doesn't match prototype");
6078 error_with_file_and_line (current_function_prototype_file,
6079 current_function_prototype_line,
6080 "prototype declaration");
6081 break;
6083 /* Type for passing arg must be consistent
6084 with that declared for the arg. */
6085 if (! comptypes (DECL_ARG_TYPE (parm), TREE_VALUE (type)))
6087 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6088 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6090 /* Adjust argument to match prototype. E.g. a previous
6091 `int foo(float);' prototype causes
6092 `int foo(x) float x; {...}' to be treated like
6093 `int foo(float x) {...}'. This is particularly
6094 useful for argument types like uid_t. */
6095 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6096 #ifdef PROMOTE_PROTOTYPES
6097 if (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
6098 && TYPE_PRECISION (TREE_TYPE (parm))
6099 < TYPE_PRECISION (integer_type_node))
6100 DECL_ARG_TYPE (parm) = integer_type_node;
6101 #endif
6102 if (pedantic)
6104 pedwarn ("promoted argument `%s' doesn't match prototype",
6105 IDENTIFIER_POINTER (DECL_NAME (parm)));
6106 warning_with_file_and_line
6107 (current_function_prototype_file,
6108 current_function_prototype_line,
6109 "prototype declaration");
6112 /* If -traditional, allow `int' argument to match
6113 `unsigned' prototype. */
6114 else if (! (flag_traditional
6115 && TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == integer_type_node
6116 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == unsigned_type_node))
6118 error ("argument `%s' doesn't match prototype",
6119 IDENTIFIER_POINTER (DECL_NAME (parm)));
6120 error_with_file_and_line (current_function_prototype_file,
6121 current_function_prototype_line,
6122 "prototype declaration");
6126 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6129 /* Otherwise, create a prototype that would match. */
6131 else
6133 register tree actual, type;
6134 register tree last = 0;
6136 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6138 type = perm_tree_cons (NULL_TREE, DECL_ARG_TYPE (parm),
6139 NULL_TREE);
6140 if (last)
6141 TREE_CHAIN (last) = type;
6142 else
6143 actual = type;
6144 last = type;
6146 type = perm_tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6147 if (last)
6148 TREE_CHAIN (last) = type;
6149 else
6150 actual = type;
6152 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6153 of the type of this function, but we need to avoid having this
6154 affect the types of other similarly-typed functions, so we must
6155 first force the generation of an identical (but separate) type
6156 node for the relevant function type. The new node we create
6157 will be a variant of the main variant of the original function
6158 type. */
6160 TREE_TYPE (fndecl) = build_type_copy (TREE_TYPE (fndecl));
6162 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6165 /* Now store the final chain of decls for the arguments
6166 as the decl-chain of the current lexical scope.
6167 Put the enumerators in as well, at the front so that
6168 DECL_ARGUMENTS is not modified. */
6170 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
6173 /* Make sure the binding level for the top of the function body
6174 gets a BLOCK if there are any in the function.
6175 Otherwise, the dbx output is wrong. */
6177 keep_next_if_subblocks = 1;
6179 /* ??? This might be an improvement,
6180 but needs to be thought about some more. */
6181 #if 0
6182 keep_next_level_flag = 1;
6183 #endif
6185 /* Write a record describing this function definition to the prototypes
6186 file (if requested). */
6188 gen_aux_info_record (fndecl, 1, 0, prototype);
6190 /* Initialize the RTL code for the function. */
6192 init_function_start (fndecl, input_filename, lineno);
6194 /* If this is a varargs function, inform function.c. */
6196 if (c_function_varargs)
6197 mark_varargs ();
6199 /* Declare __FUNCTION__ and __PRETTY_FUNCTION__ for this function. */
6201 declare_function_name ();
6203 /* Set up parameters and prepare for return, for the function. */
6205 expand_function_start (fndecl, 0);
6207 /* If this function is `main', emit a call to `__main'
6208 to run global initializers, etc. */
6209 if (DECL_NAME (fndecl)
6210 && strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main") == 0
6211 && DECL_CONTEXT (fndecl) == NULL_TREE)
6212 expand_main_function ();
6215 /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
6216 each with a parm name as the TREE_VALUE. A null pointer as TREE_VALUE
6217 stands for an ellipsis in the identifier list.
6219 PARMLIST is the data returned by get_parm_info for the
6220 parmlist that follows the semicolon.
6222 We return a value of the same sort that get_parm_info returns,
6223 except that it describes the combination of identifiers and parmlist. */
6225 tree
6226 combine_parm_decls (specparms, parmlist, void_at_end)
6227 tree specparms, parmlist;
6228 int void_at_end;
6230 register tree fndecl = current_function_decl;
6231 register tree parm;
6233 tree parmdecls = TREE_PURPOSE (parmlist);
6235 /* This is a chain of any other decls that came in among the parm
6236 declarations. They were separated already by get_parm_info,
6237 so we just need to keep them separate. */
6238 tree nonparms = TREE_VALUE (parmlist);
6240 tree types = 0;
6242 for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
6243 DECL_RESULT (parm) = 0;
6245 for (parm = specparms; parm; parm = TREE_CHAIN (parm))
6247 register tree tail, found = NULL;
6249 /* See if any of the parmdecls specifies this parm by name. */
6250 for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
6251 if (DECL_NAME (tail) == TREE_VALUE (parm))
6253 found = tail;
6254 break;
6257 /* If declaration already marked, we have a duplicate name.
6258 Complain, and don't use this decl twice. */
6259 if (found && DECL_RESULT (found) != 0)
6261 error_with_decl (found, "multiple parameters named `%s'");
6262 found = 0;
6265 /* If the declaration says "void", complain and ignore it. */
6266 if (found && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == void_type_node)
6268 error_with_decl (found, "parameter `%s' declared void");
6269 TREE_TYPE (found) = integer_type_node;
6270 DECL_ARG_TYPE (found) = integer_type_node;
6271 layout_decl (found, 0);
6274 /* Traditionally, a parm declared float is actually a double. */
6275 if (found && flag_traditional
6276 && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == float_type_node)
6278 TREE_TYPE (found) = double_type_node;
6279 DECL_ARG_TYPE (found) = double_type_node;
6280 layout_decl (found, 0);
6283 /* If no declaration found, default to int. */
6284 if (!found)
6286 found = build_decl (PARM_DECL, TREE_VALUE (parm),
6287 integer_type_node);
6288 DECL_ARG_TYPE (found) = TREE_TYPE (found);
6289 DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
6290 DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
6291 error_with_decl (found, "type of parameter `%s' is not declared");
6292 pushdecl (found);
6295 TREE_PURPOSE (parm) = found;
6297 /* Mark this decl as "already found" -- see test, above.
6298 It is safe to use DECL_RESULT for this
6299 since it is not used in PARM_DECLs or CONST_DECLs. */
6300 DECL_RESULT (found) = error_mark_node;
6303 /* Complain about any actual PARM_DECLs not matched with any names. */
6305 for (parm = parmdecls; parm; )
6307 tree next = TREE_CHAIN (parm);
6308 TREE_CHAIN (parm) = 0;
6310 /* Complain about args with incomplete types. */
6311 if (TYPE_SIZE (TREE_TYPE (parm)) == 0)
6313 error_with_decl (parm, "parameter `%s' has incomplete type");
6314 TREE_TYPE (parm) = error_mark_node;
6317 if (DECL_RESULT (parm) == 0)
6319 error_with_decl (parm,
6320 "declaration for parameter `%s' but no such parameter");
6321 /* Pretend the parameter was not missing.
6322 This gets us to a standard state and minimizes
6323 further error messages. */
6324 specparms
6325 = chainon (specparms,
6326 tree_cons (parm, NULL_TREE, NULL_TREE));
6329 parm = next;
6332 /* Chain the declarations together in the order of the list of names.
6333 At the same time, build up a list of their types, in reverse order. */
6335 parm = specparms;
6336 parmdecls = 0;
6338 register tree last;
6339 for (last = 0; parm; parm = TREE_CHAIN (parm))
6340 if (TREE_PURPOSE (parm))
6342 if (last == 0)
6343 parmdecls = TREE_PURPOSE (parm);
6344 else
6345 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6346 last = TREE_PURPOSE (parm);
6347 TREE_CHAIN (last) = 0;
6349 types = saveable_tree_cons (NULL_TREE, TREE_TYPE (parm), types);
6353 if (void_at_end)
6354 return saveable_tree_cons (parmdecls, nonparms,
6355 nreverse (saveable_tree_cons (NULL_TREE, void_type_node, types)));
6357 return saveable_tree_cons (parmdecls, nonparms, nreverse (types));
6360 /* Finish up a function declaration and compile that function
6361 all the way to assembler language output. The free the storage
6362 for the function definition.
6364 This is called after parsing the body of the function definition.
6366 NESTED is nonzero if the function being finished is nested in another. */
6368 void
6369 finish_function (nested)
6370 int nested;
6372 register tree fndecl = current_function_decl;
6374 /* TREE_READONLY (fndecl) = 1;
6375 This caused &foo to be of type ptr-to-const-function
6376 which then got a warning when stored in a ptr-to-function variable. */
6378 poplevel (1, 0, 1);
6379 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6381 /* Must mark the RESULT_DECL as being in this function. */
6383 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6385 /* Obey `register' declarations if `setjmp' is called in this fn. */
6386 if (flag_traditional && current_function_calls_setjmp)
6388 setjmp_protect (DECL_INITIAL (fndecl));
6389 setjmp_protect_args ();
6392 #ifdef DEFAULT_MAIN_RETURN
6393 if (! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main"))
6395 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6396 != integer_type_node)
6397 warning_with_decl (fndecl, "return type of `%s' is not `int'");
6398 else
6400 /* Make it so that `main' always returns success by default. */
6401 DEFAULT_MAIN_RETURN;
6404 #endif
6406 /* Generate rtl for function exit. */
6407 expand_function_end (input_filename, lineno);
6409 /* So we can tell if jump_optimize sets it to 1. */
6410 can_reach_end = 0;
6412 /* Run the optimizers and output the assembler code for this function. */
6413 rest_of_compilation (fndecl);
6415 current_function_returns_null |= can_reach_end;
6417 if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
6418 warning ("`volatile' function does return");
6419 else if (warn_return_type && can_reach_end
6420 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl))) != void_type_node)
6421 /* If this function returns non-void and control can drop through,
6422 complain. */
6423 warning ("control reaches end of non-void function");
6424 /* With just -W, complain only if function returns both with
6425 and without a value. */
6426 else if (extra_warnings
6427 && current_function_returns_value && current_function_returns_null)
6428 warning ("this function may return with or without a value");
6430 /* Free all the tree nodes making up this function. */
6431 /* Switch back to allocating nodes permanently
6432 until we start another function. */
6433 if (! nested)
6434 permanent_allocation ();
6436 if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested)
6438 /* Stop pointing to the local nodes about to be freed. */
6439 /* But DECL_INITIAL must remain nonzero so we know this
6440 was an actual function definition. */
6441 /* For a nested function, this is done in pop_c_function_context. */
6442 DECL_INITIAL (fndecl) = error_mark_node;
6443 DECL_ARGUMENTS (fndecl) = 0;
6446 if (! nested)
6448 /* Let the error reporting routines know that we're outside a
6449 function. For a nested function, this value is used in
6450 pop_c_function_context and then reset via pop_function_context. */
6451 current_function_decl = NULL;
6455 /* Save and restore the variables in this file and elsewhere
6456 that keep track of the progress of compilation of the current function.
6457 Used for nested functions. */
6459 struct c_function
6461 struct c_function *next;
6462 tree enum_next_value;
6463 tree named_labels;
6464 tree shadowed_labels;
6465 int returns_value;
6466 int returns_null;
6467 int warn_about_return_type;
6468 int extern_inline;
6469 struct binding_level *binding_level;
6472 struct c_function *c_function_chain;
6474 /* Save and reinitialize the variables
6475 used during compilation of a C function. */
6477 void
6478 push_c_function_context ()
6480 struct c_function *p
6481 = (struct c_function *) xmalloc (sizeof (struct c_function));
6483 if (pedantic)
6484 pedwarn ("ANSI C forbids nested functions");
6486 push_function_context ();
6488 p->next = c_function_chain;
6489 c_function_chain = p;
6491 p->enum_next_value = enum_next_value;
6492 p->named_labels = named_labels;
6493 p->shadowed_labels = shadowed_labels;
6494 p->returns_value = current_function_returns_value;
6495 p->returns_null = current_function_returns_null;
6496 p->warn_about_return_type = warn_about_return_type;
6497 p->extern_inline = current_extern_inline;
6498 p->binding_level = current_binding_level;
6501 /* Restore the variables used during compilation of a C function. */
6503 void
6504 pop_c_function_context ()
6506 struct c_function *p = c_function_chain;
6507 tree link;
6509 /* Bring back all the labels that were shadowed. */
6510 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
6511 if (DECL_NAME (TREE_VALUE (link)) != 0)
6512 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
6513 = TREE_VALUE (link);
6515 if (DECL_SAVED_INSNS (current_function_decl) == 0)
6517 /* Stop pointing to the local nodes about to be freed. */
6518 /* But DECL_INITIAL must remain nonzero so we know this
6519 was an actual function definition. */
6520 DECL_INITIAL (current_function_decl) = error_mark_node;
6521 DECL_ARGUMENTS (current_function_decl) = 0;
6524 pop_function_context ();
6526 c_function_chain = p->next;
6528 enum_next_value = p->enum_next_value;
6529 named_labels = p->named_labels;
6530 shadowed_labels = p->shadowed_labels;
6531 current_function_returns_value = p->returns_value;
6532 current_function_returns_null = p->returns_null;
6533 warn_about_return_type = p->warn_about_return_type;
6534 current_extern_inline = p->extern_inline;
6535 current_binding_level = p->binding_level;
6537 free (p);