1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* Process declarations and symbol lookup for C front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
45 extern cpp_reader parse_in;
47 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
49 { NORMAL, /* Ordinary declaration */
50 FUNCDEF, /* Function definition */
51 PARM, /* Declaration of parm before function body */
52 FIELD, /* Declaration inside struct or union */
53 BITFIELD, /* Likewise but with specified width */
54 TYPENAME}; /* Typename (inside cast or sizeof) */
56 /* We let tm.h override the types used here, to handle trivial differences
57 such as the choice of unsigned int or long unsigned int for size_t.
58 When machines start needing nontrivial differences in the size type,
59 it would be best to do something here to figure out automatically
60 from other information what type to use. */
63 #define SIZE_TYPE "long unsigned int"
67 #define PTRDIFF_TYPE "long int"
71 #define WCHAR_TYPE "int"
75 #define WINT_TYPE "unsigned int"
79 #define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
81 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
87 #define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
89 : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE) \
90 ? "long unsigned int" \
91 : "long long unsigned int"))
94 /* Nonzero if we have seen an invalid cross reference
95 to a struct, union, or enum, but not yet printed the message. */
97 tree pending_invalid_xref;
98 /* File and line to appear in the eventual error message. */
99 const char *pending_invalid_xref_file;
100 int pending_invalid_xref_line;
102 /* While defining an enum type, this is 1 plus the last enumerator
103 constant value. Note that will do not have to save this or `enum_overflow'
104 around nested function definition since such a definition could only
105 occur in an enum value expression and we don't use these variables in
108 static tree enum_next_value;
110 /* Nonzero means that there was overflow computing enum_next_value. */
112 static int enum_overflow;
114 /* Parsing a function declarator leaves a list of parameter names
115 or a chain or parameter decls here. */
117 static tree last_function_parms;
119 /* Parsing a function declarator leaves here a chain of structure
120 and enum types declared in the parmlist. */
122 static tree last_function_parm_tags;
124 /* After parsing the declarator that starts a function definition,
125 `start_function' puts here the list of parameter names or chain of decls.
126 `store_parm_decls' finds it here. */
128 static tree current_function_parms;
130 /* Similar, for last_function_parm_tags. */
131 static tree current_function_parm_tags;
133 /* Similar, for the file and line that the prototype came from if this is
134 an old-style definition. */
135 static const char *current_function_prototype_file;
136 static int current_function_prototype_line;
138 /* The current statement tree. */
140 static struct stmt_tree_s c_stmt_tree;
142 /* The current scope statement stack. */
144 static tree c_scope_stmt_stack;
146 /* Nonzero if __FUNCTION__ and its ilk have been declared in this
149 static int c_function_name_declared_p;
151 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
152 that have names. Here so we can clear out their names' definitions
153 at the end of the function. */
155 static tree named_labels;
157 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
159 static tree shadowed_labels;
161 /* Nonzero when store_parm_decls is called indicates a varargs function.
162 Value not meaningful after store_parm_decls. */
164 static int c_function_varargs;
166 /* Set to 0 at beginning of a function definition, set to 1 if
167 a return statement that specifies a return value is seen. */
169 int current_function_returns_value;
171 /* Set to 0 at beginning of a function definition, set to 1 if
172 a return statement with no argument is seen. */
174 int current_function_returns_null;
176 /* Set to nonzero by `grokdeclarator' for a function
177 whose return type is defaulted, if warnings for this are desired. */
179 static int warn_about_return_type;
181 /* Nonzero when starting a function declared `extern inline'. */
183 static int current_extern_inline;
185 /* For each binding contour we allocate a binding_level structure
186 * which records the names defined in that contour.
189 * 1) one for each function definition,
190 * where internal declarations of the parameters appear.
191 * 2) one for each compound statement,
192 * to record its declarations.
194 * The current meaning of a name can be found by searching the levels from
195 * the current one out to the global one.
198 /* Note that the information in the `names' component of the global contour
199 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
203 /* A chain of _DECL nodes for all variables, constants, functions,
204 and typedef types. These are in the reverse of the order supplied.
208 /* A list of structure, union and enum definitions,
209 * for looking up tag names.
210 * It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
211 * or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
212 * or ENUMERAL_TYPE node.
216 /* For each level, a list of shadowed outer-level local definitions
217 to be restored when this level is popped.
218 Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
219 whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
222 /* For each level (except not the global one),
223 a chain of BLOCK nodes for all the levels
224 that were entered and exited one level down. */
227 /* The BLOCK node for this level, if one has been preallocated.
228 If 0, the BLOCK is allocated (if needed) when the level is popped. */
231 /* The binding level which this one is contained in (inherits from). */
232 struct binding_level *level_chain;
234 /* Nonzero for the level that holds the parameters of a function. */
237 /* Nonzero if this level "doesn't exist" for tags. */
238 char tag_transparent;
240 /* Nonzero if sublevels of this level "don't exist" for tags.
241 This is set in the parm level of a function definition
242 while reading the function body, so that the outermost block
243 of the function body will be tag-transparent. */
244 char subblocks_tag_transparent;
246 /* Nonzero means make a BLOCK for this level regardless of all else. */
249 /* Nonzero means make a BLOCK if this level has any subblocks. */
250 char keep_if_subblocks;
252 /* Number of decls in `names' that have incomplete
253 structure or union types. */
256 /* A list of decls giving the (reversed) specified order of parms,
257 not including any forward-decls in the parmlist.
258 This is so we can put the parms in proper order for assign_parms. */
262 #define NULL_BINDING_LEVEL (struct binding_level *) NULL
264 /* The binding level currently in effect. */
266 static struct binding_level *current_binding_level;
268 /* A chain of binding_level structures awaiting reuse. */
270 static struct binding_level *free_binding_level;
272 /* The outermost binding level, for names of file scope.
273 This is created when the compiler is started and exists
274 through the entire run. */
276 static struct binding_level *global_binding_level;
278 /* Binding level structures are initialized by copying this one. */
280 static struct binding_level clear_binding_level
281 = {NULL, NULL, NULL, NULL, NULL, NULL_BINDING_LEVEL, 0, 0, 0, 0, 0, 0,
284 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
286 static int keep_next_level_flag;
288 /* Nonzero means make a BLOCK for the next level pushed
289 if it has subblocks. */
291 static int keep_next_if_subblocks;
293 /* The chain of outer levels of label scopes.
294 This uses the same data structure used for binding levels,
295 but it works differently: each link in the chain records
296 saved values of named_labels and shadowed_labels for
297 a label binding level outside the current one. */
299 static struct binding_level *label_level_chain;
301 /* Functions called automatically at the beginning and end of execution. */
303 tree static_ctors, static_dtors;
305 /* Forward declarations. */
307 static struct binding_level * make_binding_level PARAMS ((void));
308 static void mark_binding_level PARAMS ((void *));
309 static void clear_limbo_values PARAMS ((tree));
310 static int duplicate_decls PARAMS ((tree, tree, int));
311 static int redeclaration_error_message PARAMS ((tree, tree));
312 static void storedecls PARAMS ((tree));
313 static void storetags PARAMS ((tree));
314 static tree lookup_tag PARAMS ((enum tree_code, tree,
315 struct binding_level *, int));
316 static tree lookup_tag_reverse PARAMS ((tree));
317 static tree grokdeclarator PARAMS ((tree, tree, enum decl_context,
319 static tree grokparms PARAMS ((tree, int));
320 static void layout_array_type PARAMS ((tree));
321 static tree c_make_fname_decl PARAMS ((tree, const char *, int));
322 static void c_expand_body PARAMS ((tree, int));
324 /* C-specific option variables. */
326 /* Nonzero means allow type mismatches in conditional expressions;
327 just make their values `void'. */
329 int flag_cond_mismatch;
331 /* Nonzero means give `double' the same size as `float'. */
333 int flag_short_double;
335 /* Nonzero means give `wchar_t' the same size as `short'. */
337 int flag_short_wchar;
339 /* Nonzero means don't recognize the keyword `asm'. */
343 /* Nonzero means do some things the same way PCC does. */
345 int flag_traditional;
347 /* Nonzero means enable C89 Amendment 1 features, other than digraphs. */
351 /* Nonzero means use the ISO C99 dialect of C. */
355 /* Nonzero means accept digraphs. */
357 int flag_digraphs = 1;
359 /* Nonzero means that we have builtin functions, and main is an int */
363 /* Nonzero means add default format_arg attributes for functions not
366 int flag_noniso_default_format_attributes = 1;
368 /* Nonzero means to allow single precision math even if we're generally
369 being traditional. */
370 int flag_allow_single_precision = 0;
372 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
374 int flag_signed_bitfields = 1;
375 int explicit_flag_signed_bitfields = 0;
377 /* Nonzero means warn about use of implicit int. */
379 int warn_implicit_int;
381 /* Nonzero means warn about usage of long long when `-pedantic'. */
383 int warn_long_long = 1;
385 /* Nonzero means message about use of implicit function declarations;
386 1 means warning; 2 means error. */
388 int mesg_implicit_function_declaration = -1;
390 /* Nonzero means give string constants the type `const char *'
391 to get extra warnings from them. These warnings will be too numerous
392 to be useful, except in thoroughly ANSIfied programs. */
394 int flag_const_strings;
396 /* Nonzero means warn about pointer casts that can drop a type qualifier
397 from the pointer target type. */
401 /* Nonzero means warn when casting a function call to a type that does
402 not match the return type (e.g. (float)sqrt() or (anything*)malloc()
403 when there is no previous declaration of sqrt or malloc. */
405 int warn_bad_function_cast;
407 /* Warn about functions which might be candidates for format attributes. */
409 int warn_missing_format_attribute;
411 /* Warn about traditional constructs whose meanings changed in ANSI C. */
413 int warn_traditional;
415 /* Nonzero means warn about sizeof(function) or addition/subtraction
416 of function pointers. */
418 int warn_pointer_arith;
420 /* Nonzero means warn for non-prototype function decls
421 or non-prototyped defs without previous prototype. */
423 int warn_strict_prototypes;
425 /* Nonzero means warn for any global function def
426 without separate previous prototype decl. */
428 int warn_missing_prototypes;
430 /* Nonzero means warn for any global function def
431 without separate previous decl. */
433 int warn_missing_declarations;
435 /* Nonzero means warn about multiple (redundant) decls for the same single
436 variable or function. */
438 int warn_redundant_decls = 0;
440 /* Nonzero means warn about extern declarations of objects not at
441 file-scope level and about *all* declarations of functions (whether
442 extern or static) not at file-scope level. Note that we exclude
443 implicit function declarations. To get warnings about those, use
446 int warn_nested_externs = 0;
448 /* Warn about *printf or *scanf format/argument anomalies. */
452 /* Warn about a subscript that has type char. */
454 int warn_char_subscripts = 0;
456 /* Warn if a type conversion is done that might have confusing results. */
460 /* Warn if adding () is suggested. */
462 int warn_parentheses;
464 /* Warn if initializer is not completely bracketed. */
466 int warn_missing_braces;
468 /* Warn if main is suspicious. */
472 /* Warn about #pragma directives that are not recognised. */
474 int warn_unknown_pragmas = 0; /* Tri state variable. */
476 /* Warn about comparison of signed and unsigned values.
477 If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified. */
479 int warn_sign_compare = -1;
481 /* Warn about testing equality of floating point numbers. */
483 int warn_float_equal = 0;
485 /* Nonzero means warn about use of multicharacter literals. */
487 int warn_multichar = 1;
489 /* The variant of the C language being processed. */
491 c_language_kind c_language = clk_c;
493 /* Nonzero means `$' can be in an identifier. */
495 #ifndef DOLLARS_IN_IDENTIFIERS
496 #define DOLLARS_IN_IDENTIFIERS 1
498 int dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
500 /* Decode the string P as a language-specific option for C.
501 Return the number of strings consumed. Should not complain
502 if it does not recognise the option. */
505 c_decode_option (argc, argv)
506 int argc ATTRIBUTE_UNUSED;
509 int strings_processed;
510 const char *option_value = NULL;
513 strings_processed = cpp_handle_option (&parse_in, argc, argv);
515 if (!strcmp (p, "-lang-objc"))
516 c_language = clk_objective_c;
517 else if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional"))
519 flag_traditional = 1;
520 flag_writable_strings = 1;
523 else if (!strcmp (p, "-fallow-single-precision"))
524 flag_allow_single_precision = 1;
525 else if (!strcmp (p, "-fhosted") || !strcmp (p, "-fno-freestanding"))
530 else if (!strcmp (p, "-ffreestanding") || !strcmp (p, "-fno-hosted"))
534 /* warn_main will be 2 if set by -Wall, 1 if set by -Wmain */
538 else if (!strcmp (p, "-fnotraditional") || !strcmp (p, "-fno-traditional"))
540 flag_traditional = 0;
541 flag_writable_strings = 0;
544 else if (!strncmp (p, "-std=", 5))
546 /* Select the appropriate language standard. We currently
548 -std=iso9899:1990 same as -ansi
549 -std=iso9899:199409 ISO C as modified in amend. 1
550 -std=iso9899:1999 ISO C 99
551 -std=c89 same as -std=iso9899:1990
552 -std=c99 same as -std=iso9899:1999
553 -std=gnu89 default, iso9899:1990 + gnu extensions
554 -std=gnu99 iso9899:1999 + gnu extensions
556 const char *argstart = &p[5];
558 if (!strcmp (argstart, "iso9899:1990")
559 || !strcmp (argstart, "c89"))
565 flag_traditional = 0;
566 flag_writable_strings = 0;
568 flag_no_nonansi_builtin = 1;
569 flag_noniso_default_format_attributes = 0;
572 else if (!strcmp (argstart, "iso9899:199409"))
576 goto iso_1990_digraphs;
578 else if (!strcmp (argstart, "iso9899:199x")
579 || !strcmp (argstart, "iso9899:1999")
580 || !strcmp (argstart, "c9x")
581 || !strcmp (argstart, "c99"))
583 flag_traditional = 0;
584 flag_writable_strings = 0;
586 flag_no_nonansi_builtin = 1;
587 flag_noniso_default_format_attributes = 0;
592 else if (!strcmp (argstart, "gnu89"))
594 flag_traditional = 0;
595 flag_writable_strings = 0;
597 flag_no_nonansi_builtin = 0;
598 flag_noniso_default_format_attributes = 1;
603 else if (!strcmp (argstart, "gnu9x") || !strcmp (argstart, "gnu99"))
605 flag_traditional = 0;
606 flag_writable_strings = 0;
608 flag_no_nonansi_builtin = 0;
609 flag_noniso_default_format_attributes = 1;
615 error ("unknown C standard `%s'", argstart);
617 else if (!strcmp (p, "-fdollars-in-identifiers"))
618 dollars_in_ident = 1;
619 else if (!strcmp (p, "-fno-dollars-in-identifiers"))
620 dollars_in_ident = 0;
621 else if (!strcmp (p, "-fsigned-char"))
622 flag_signed_char = 1;
623 else if (!strcmp (p, "-funsigned-char"))
624 flag_signed_char = 0;
625 else if (!strcmp (p, "-fno-signed-char"))
626 flag_signed_char = 0;
627 else if (!strcmp (p, "-fno-unsigned-char"))
628 flag_signed_char = 1;
629 else if (!strcmp (p, "-fsigned-bitfields")
630 || !strcmp (p, "-fno-unsigned-bitfields"))
632 flag_signed_bitfields = 1;
633 explicit_flag_signed_bitfields = 1;
635 else if (!strcmp (p, "-funsigned-bitfields")
636 || !strcmp (p, "-fno-signed-bitfields"))
638 flag_signed_bitfields = 0;
639 explicit_flag_signed_bitfields = 1;
641 else if (!strcmp (p, "-fshort-enums"))
642 flag_short_enums = 1;
643 else if (!strcmp (p, "-fno-short-enums"))
644 flag_short_enums = 0;
645 else if (!strcmp (p, "-fshort-wchar"))
646 flag_short_wchar = 1;
647 else if (!strcmp (p, "-fno-short-wchar"))
648 flag_short_wchar = 0;
649 else if (!strcmp (p, "-fcond-mismatch"))
650 flag_cond_mismatch = 1;
651 else if (!strcmp (p, "-fno-cond-mismatch"))
652 flag_cond_mismatch = 0;
653 else if (!strcmp (p, "-fshort-double"))
654 flag_short_double = 1;
655 else if (!strcmp (p, "-fno-short-double"))
656 flag_short_double = 0;
657 else if (!strcmp (p, "-fasm"))
659 else if (!strcmp (p, "-fno-asm"))
661 else if (!strcmp (p, "-fbuiltin"))
663 else if (!strcmp (p, "-fno-builtin"))
665 else if ((option_value
666 = skip_leading_substring (p, "-fdump-translation-unit-")))
669 error ("no file specified with -fdump-translation-unit");
671 flag_dump_translation_unit = option_value;
673 else if (!strcmp (p, "-ansi"))
675 else if (!strcmp (p, "-Werror-implicit-function-declaration"))
676 mesg_implicit_function_declaration = 2;
677 else if (!strcmp (p, "-Wimplicit-function-declaration"))
678 mesg_implicit_function_declaration = 1;
679 else if (!strcmp (p, "-Wno-implicit-function-declaration"))
680 mesg_implicit_function_declaration = 0;
681 else if (!strcmp (p, "-Wimplicit-int"))
682 warn_implicit_int = 1;
683 else if (!strcmp (p, "-Wno-implicit-int"))
684 warn_implicit_int = 0;
685 else if (!strcmp (p, "-Wimplicit"))
687 warn_implicit_int = 1;
688 if (mesg_implicit_function_declaration != 2)
689 mesg_implicit_function_declaration = 1;
691 else if (!strcmp (p, "-Wno-implicit"))
692 warn_implicit_int = 0, mesg_implicit_function_declaration = 0;
693 else if (!strcmp (p, "-Wlong-long"))
695 else if (!strcmp (p, "-Wno-long-long"))
697 else if (!strcmp (p, "-Wwrite-strings"))
698 flag_const_strings = 1;
699 else if (!strcmp (p, "-Wno-write-strings"))
700 flag_const_strings = 0;
701 else if (!strcmp (p, "-Wcast-qual"))
703 else if (!strcmp (p, "-Wno-cast-qual"))
705 else if (!strcmp (p, "-Wbad-function-cast"))
706 warn_bad_function_cast = 1;
707 else if (!strcmp (p, "-Wno-bad-function-cast"))
708 warn_bad_function_cast = 0;
709 else if (!strcmp (p, "-Wmissing-noreturn"))
710 warn_missing_noreturn = 1;
711 else if (!strcmp (p, "-Wno-missing-noreturn"))
712 warn_missing_noreturn = 0;
713 else if (!strcmp (p, "-Wmissing-format-attribute"))
714 warn_missing_format_attribute = 1;
715 else if (!strcmp (p, "-Wno-missing-format-attribute"))
716 warn_missing_format_attribute = 0;
717 else if (!strcmp (p, "-Wpointer-arith"))
718 warn_pointer_arith = 1;
719 else if (!strcmp (p, "-Wno-pointer-arith"))
720 warn_pointer_arith = 0;
721 else if (!strcmp (p, "-Wstrict-prototypes"))
722 warn_strict_prototypes = 1;
723 else if (!strcmp (p, "-Wno-strict-prototypes"))
724 warn_strict_prototypes = 0;
725 else if (!strcmp (p, "-Wmissing-prototypes"))
726 warn_missing_prototypes = 1;
727 else if (!strcmp (p, "-Wno-missing-prototypes"))
728 warn_missing_prototypes = 0;
729 else if (!strcmp (p, "-Wmissing-declarations"))
730 warn_missing_declarations = 1;
731 else if (!strcmp (p, "-Wno-missing-declarations"))
732 warn_missing_declarations = 0;
733 else if (!strcmp (p, "-Wredundant-decls"))
734 warn_redundant_decls = 1;
735 else if (!strcmp (p, "-Wno-redundant-decls"))
736 warn_redundant_decls = 0;
737 else if (!strcmp (p, "-Wnested-externs"))
738 warn_nested_externs = 1;
739 else if (!strcmp (p, "-Wno-nested-externs"))
740 warn_nested_externs = 0;
741 else if (!strcmp (p, "-Wtraditional"))
742 warn_traditional = 1;
743 else if (!strcmp (p, "-Wno-traditional"))
744 warn_traditional = 0;
745 else if (!strncmp (p, "-Wformat=", 9))
746 warn_format = atol (p + 9);
747 else if (!strcmp (p, "-Wformat"))
749 else if (!strcmp (p, "-Wno-format"))
751 else if (!strcmp (p, "-Wchar-subscripts"))
752 warn_char_subscripts = 1;
753 else if (!strcmp (p, "-Wno-char-subscripts"))
754 warn_char_subscripts = 0;
755 else if (!strcmp (p, "-Wconversion"))
757 else if (!strcmp (p, "-Wno-conversion"))
759 else if (!strcmp (p, "-Wparentheses"))
760 warn_parentheses = 1;
761 else if (!strcmp (p, "-Wno-parentheses"))
762 warn_parentheses = 0;
763 else if (!strcmp (p, "-Wreturn-type"))
764 warn_return_type = 1;
765 else if (!strcmp (p, "-Wno-return-type"))
766 warn_return_type = 0;
767 else if (!strcmp (p, "-Wsequence-point"))
768 warn_sequence_point = 1;
769 else if (!strcmp (p, "-Wno-sequence-point"))
770 warn_sequence_point = 0;
771 else if (!strcmp (p, "-Wcomment"))
772 ; /* cpp handles this one. */
773 else if (!strcmp (p, "-Wno-comment"))
774 ; /* cpp handles this one. */
775 else if (!strcmp (p, "-Wcomments"))
776 ; /* cpp handles this one. */
777 else if (!strcmp (p, "-Wno-comments"))
778 ; /* cpp handles this one. */
779 else if (!strcmp (p, "-Wtrigraphs"))
780 ; /* cpp handles this one. */
781 else if (!strcmp (p, "-Wno-trigraphs"))
782 ; /* cpp handles this one. */
783 else if (!strcmp (p, "-Wundef"))
784 ; /* cpp handles this one. */
785 else if (!strcmp (p, "-Wno-undef"))
786 ; /* cpp handles this one. */
787 else if (!strcmp (p, "-Wimport"))
788 ; /* cpp handles this one. */
789 else if (!strcmp (p, "-Wno-import"))
790 ; /* cpp handles this one. */
791 else if (!strcmp (p, "-Wmissing-braces"))
792 warn_missing_braces = 1;
793 else if (!strcmp (p, "-Wno-missing-braces"))
794 warn_missing_braces = 0;
795 else if (!strcmp (p, "-Wmain"))
797 else if (!strcmp (p, "-Wno-main"))
799 else if (!strcmp (p, "-Wsign-compare"))
800 warn_sign_compare = 1;
801 else if (!strcmp (p, "-Wno-sign-compare"))
802 warn_sign_compare = 0;
803 else if (!strcmp (p, "-Wfloat-equal"))
804 warn_float_equal = 1;
805 else if (!strcmp (p, "-Wno-float-equal"))
806 warn_float_equal = 0;
807 else if (!strcmp (p, "-Wmultichar"))
809 else if (!strcmp (p, "-Wno-multichar"))
811 else if (!strcmp (p, "-Wunknown-pragmas"))
812 /* Set to greater than 1, so that even unknown pragmas in system
813 headers will be warned about. */
814 warn_unknown_pragmas = 2;
815 else if (!strcmp (p, "-Wno-unknown-pragmas"))
816 warn_unknown_pragmas = 0;
817 else if (!strcmp (p, "-Wall"))
819 /* We save the value of warn_uninitialized, since if they put
820 -Wuninitialized on the command line, we need to generate a
821 warning about not using it without also specifying -O. */
822 if (warn_uninitialized != 1)
823 warn_uninitialized = 2;
824 warn_implicit_int = 1;
825 mesg_implicit_function_declaration = 1;
826 warn_return_type = 1;
830 warn_char_subscripts = 1;
831 warn_parentheses = 1;
832 warn_sequence_point = 1;
833 warn_missing_braces = 1;
834 /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding can turn
835 it off only if it's not explicit. */
837 /* Only warn about unknown pragmas that are not in system headers. */
838 warn_unknown_pragmas = 1;
841 return strings_processed;
846 /* Hooks for print_node. */
849 print_lang_decl (file, node, indent)
850 FILE *file ATTRIBUTE_UNUSED;
851 tree node ATTRIBUTE_UNUSED;
852 int indent ATTRIBUTE_UNUSED;
857 print_lang_type (file, node, indent)
858 FILE *file ATTRIBUTE_UNUSED;
859 tree node ATTRIBUTE_UNUSED;
860 int indent ATTRIBUTE_UNUSED;
865 print_lang_identifier (file, node, indent)
870 print_node (file, "global", IDENTIFIER_GLOBAL_VALUE (node), indent + 4);
871 print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
872 print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
873 print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
874 print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4);
875 print_node (file, "limbo value", IDENTIFIER_LIMBO_VALUE (node), indent + 4);
876 if (C_IS_RESERVED_WORD (node))
878 tree rid = ridpointers[C_RID_CODE (node)];
879 indent_to (file, indent + 4);
880 fprintf (file, "rid ");
881 fprintf (file, HOST_PTR_PRINTF, (void *)rid);
882 fprintf (file, " \"%s\"", IDENTIFIER_POINTER (rid));
886 /* Hook called at end of compilation to assume 1 elt
887 for a top-level tentative array defn that wasn't complete before. */
890 finish_incomplete_decl (decl)
893 if (TREE_CODE (decl) == VAR_DECL)
895 tree type = TREE_TYPE (decl);
896 if (type != error_mark_node
897 && TREE_CODE (type) == ARRAY_TYPE
898 && ! DECL_EXTERNAL (decl)
899 && TYPE_DOMAIN (type) == 0)
901 warning_with_decl (decl, "array `%s' assumed to have one element");
903 complete_array_type (type, NULL_TREE, 1);
905 layout_decl (decl, 0);
910 /* Create a new `struct binding_level'. */
912 static struct binding_level *
913 make_binding_level ()
916 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
919 /* Nonzero if we are currently in the global binding level. */
924 return current_binding_level == global_binding_level;
930 keep_next_level_flag = 1;
933 /* Nonzero if the current level needs to have a BLOCK made. */
938 return ((current_binding_level->keep_if_subblocks
939 && current_binding_level->blocks != 0)
940 || current_binding_level->keep
941 || current_binding_level->names != 0
942 || (current_binding_level->tags != 0
943 && !current_binding_level->tag_transparent));
946 /* Identify this binding level as a level of parameters.
947 DEFINITION_FLAG is 1 for a definition, 0 for a declaration.
948 But it turns out there is no way to pass the right value for
949 DEFINITION_FLAG, so we ignore it. */
952 declare_parm_level (definition_flag)
953 int definition_flag ATTRIBUTE_UNUSED;
955 current_binding_level->parm_flag = 1;
958 /* Nonzero if currently making parm declarations. */
963 return current_binding_level->parm_flag;
966 /* Enter a new binding level.
967 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
968 not for that of tags. */
971 pushlevel (tag_transparent)
974 register struct binding_level *newlevel = NULL_BINDING_LEVEL;
976 /* If this is the top level of a function,
977 just make sure that NAMED_LABELS is 0. */
979 if (current_binding_level == global_binding_level)
984 /* Reuse or create a struct for this binding level. */
986 if (free_binding_level)
988 newlevel = free_binding_level;
989 free_binding_level = free_binding_level->level_chain;
993 newlevel = make_binding_level ();
996 /* Add this level to the front of the chain (stack) of levels that
999 *newlevel = clear_binding_level;
1000 newlevel->tag_transparent
1002 || (current_binding_level
1003 ? current_binding_level->subblocks_tag_transparent
1005 newlevel->level_chain = current_binding_level;
1006 current_binding_level = newlevel;
1007 newlevel->keep = keep_next_level_flag;
1008 keep_next_level_flag = 0;
1009 newlevel->keep_if_subblocks = keep_next_if_subblocks;
1010 keep_next_if_subblocks = 0;
1013 /* Clear the limbo values of all identifiers defined in BLOCK or a subblock. */
1016 clear_limbo_values (block)
1021 for (tem = BLOCK_VARS (block); tem; tem = TREE_CHAIN (tem))
1022 if (DECL_NAME (tem) != 0)
1023 IDENTIFIER_LIMBO_VALUE (DECL_NAME (tem)) = 0;
1025 for (tem = BLOCK_SUBBLOCKS (block); tem; tem = TREE_CHAIN (tem))
1026 clear_limbo_values (tem);
1029 /* Exit a binding level.
1030 Pop the level off, and restore the state of the identifier-decl mappings
1031 that were in effect when this level was entered.
1033 If KEEP is nonzero, this level had explicit declarations, so
1034 and create a "block" (a BLOCK node) for the level
1035 to record its declarations and subblocks for symbol table output.
1037 If FUNCTIONBODY is nonzero, this level is the body of a function,
1038 so create a block as if KEEP were set and also clear out all
1041 If REVERSE is nonzero, reverse the order of decls before putting
1042 them into the BLOCK. */
1045 poplevel (keep, reverse, functionbody)
1051 /* The chain of decls was accumulated in reverse order.
1052 Put it into forward order, just for cleanliness. */
1054 tree tags = current_binding_level->tags;
1055 tree subblocks = current_binding_level->blocks;
1058 int block_previously_created;
1060 keep |= current_binding_level->keep;
1062 /* This warning is turned off because it causes warnings for
1063 declarations like `extern struct foo *x'. */
1065 /* Warn about incomplete structure types in this level. */
1066 for (link = tags; link; link = TREE_CHAIN (link))
1067 if (!COMPLETE_TYPE_P (TREE_VALUE (link)))
1069 tree type = TREE_VALUE (link);
1070 tree type_name = TYPE_NAME (type);
1071 char *id = IDENTIFIER_POINTER (TREE_CODE (type_name) == IDENTIFIER_NODE
1073 : DECL_NAME (type_name));
1074 switch (TREE_CODE (type))
1077 error ("`struct %s' incomplete in scope ending here", id);
1080 error ("`union %s' incomplete in scope ending here", id);
1083 error ("`enum %s' incomplete in scope ending here", id);
1089 /* Get the decls in the order they were written.
1090 Usually current_binding_level->names is in reverse order.
1091 But parameter decls were previously put in forward order. */
1094 current_binding_level->names
1095 = decls = nreverse (current_binding_level->names);
1097 decls = current_binding_level->names;
1099 /* Output any nested inline functions within this block
1100 if they weren't already output. */
1102 for (decl = decls; decl; decl = TREE_CHAIN (decl))
1103 if (TREE_CODE (decl) == FUNCTION_DECL
1104 && ! TREE_ASM_WRITTEN (decl)
1105 && DECL_INITIAL (decl) != 0
1106 && TREE_ADDRESSABLE (decl))
1108 /* If this decl was copied from a file-scope decl
1109 on account of a block-scope extern decl,
1110 propagate TREE_ADDRESSABLE to the file-scope decl.
1112 DECL_ABSTRACT_ORIGIN can be set to itself if warn_return_type is
1113 true, since then the decl goes through save_for_inline_copying. */
1114 if (DECL_ABSTRACT_ORIGIN (decl) != 0
1115 && DECL_ABSTRACT_ORIGIN (decl) != decl)
1116 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
1119 /* We used to warn about unused variables in expand_end_bindings,
1120 i.e. while generating RTL. But in function-at-a-time mode we may
1121 choose to never expand a function at all (e.g. auto inlining), so
1122 we do this explicitly now. */
1123 warn_about_unused_variables (getdecls ());
1125 /* If there were any declarations or structure tags in that level,
1126 or if this level is a function body,
1127 create a BLOCK to record them for the life of this function. */
1130 block_previously_created = (current_binding_level->this_block != 0);
1131 if (block_previously_created)
1132 block = current_binding_level->this_block;
1133 else if (keep || functionbody
1134 || (current_binding_level->keep_if_subblocks && subblocks != 0))
1135 block = make_node (BLOCK);
1138 BLOCK_VARS (block) = decls;
1139 BLOCK_SUBBLOCKS (block) = subblocks;
1142 /* In each subblock, record that this is its superior. */
1144 for (link = subblocks; link; link = TREE_CHAIN (link))
1145 BLOCK_SUPERCONTEXT (link) = block;
1147 /* Clear out the meanings of the local variables of this level. */
1149 for (link = decls; link; link = TREE_CHAIN (link))
1151 if (DECL_NAME (link) != 0)
1153 /* If the ident. was used or addressed via a local extern decl,
1154 don't forget that fact. */
1155 if (DECL_EXTERNAL (link))
1157 if (TREE_USED (link))
1158 TREE_USED (DECL_NAME (link)) = 1;
1159 if (TREE_ADDRESSABLE (link))
1160 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1162 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
1166 /* Restore all name-meanings of the outer levels
1167 that were shadowed by this level. */
1169 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1170 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1172 /* If the level being exited is the top level of a function,
1173 check over all the labels, and clear out the current
1174 (function local) meanings of their names. */
1178 clear_limbo_values (block);
1180 /* If this is the top level block of a function,
1181 the vars are the function's parameters.
1182 Don't leave them in the BLOCK because they are
1183 found in the FUNCTION_DECL instead. */
1185 BLOCK_VARS (block) = 0;
1187 /* Clear out the definitions of all label names,
1188 since their scopes end here,
1189 and add them to BLOCK_VARS. */
1191 for (link = named_labels; link; link = TREE_CHAIN (link))
1193 register tree label = TREE_VALUE (link);
1195 if (DECL_INITIAL (label) == 0)
1197 error_with_decl (label, "label `%s' used but not defined");
1198 /* Avoid crashing later. */
1199 define_label (input_filename, lineno,
1202 else if (warn_unused_label && !TREE_USED (label))
1203 warning_with_decl (label, "label `%s' defined but not used");
1204 IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
1206 /* Put the labels into the "variables" of the
1207 top-level block, so debugger can see them. */
1208 TREE_CHAIN (label) = BLOCK_VARS (block);
1209 BLOCK_VARS (block) = label;
1213 /* Pop the current level, and free the structure for reuse. */
1216 register struct binding_level *level = current_binding_level;
1217 current_binding_level = current_binding_level->level_chain;
1219 level->level_chain = free_binding_level;
1220 free_binding_level = level;
1223 /* Dispose of the block that we just made inside some higher level. */
1225 DECL_INITIAL (current_function_decl) = block;
1228 if (!block_previously_created)
1229 current_binding_level->blocks
1230 = chainon (current_binding_level->blocks, block);
1232 /* If we did not make a block for the level just exited,
1233 any blocks made for inner levels
1234 (since they cannot be recorded as subblocks in that level)
1235 must be carried forward so they will later become subblocks
1236 of something else. */
1238 current_binding_level->blocks
1239 = chainon (current_binding_level->blocks, subblocks);
1241 /* Set the TYPE_CONTEXTs for all of the tagged types belonging to this
1242 binding contour so that they point to the appropriate construct, i.e.
1243 either to the current FUNCTION_DECL node, or else to the BLOCK node
1244 we just constructed.
1246 Note that for tagged types whose scope is just the formal parameter
1247 list for some function type specification, we can't properly set
1248 their TYPE_CONTEXTs here, because we don't have a pointer to the
1249 appropriate FUNCTION_TYPE node readily available to us. For those
1250 cases, the TYPE_CONTEXTs of the relevant tagged type nodes get set
1251 in `grokdeclarator' as soon as we have created the FUNCTION_TYPE
1252 node which will represent the "scope" for these "parameter list local"
1256 for (link = tags; link; link = TREE_CHAIN (link))
1257 TYPE_CONTEXT (TREE_VALUE (link)) = current_function_decl;
1259 for (link = tags; link; link = TREE_CHAIN (link))
1260 TYPE_CONTEXT (TREE_VALUE (link)) = block;
1263 TREE_USED (block) = 1;
1268 /* Delete the node BLOCK from the current binding level.
1269 This is used for the block inside a stmt expr ({...})
1270 so that the block can be reinserted where appropriate. */
1273 delete_block (block)
1277 if (current_binding_level->blocks == block)
1278 current_binding_level->blocks = TREE_CHAIN (block);
1279 for (t = current_binding_level->blocks; t;)
1281 if (TREE_CHAIN (t) == block)
1282 TREE_CHAIN (t) = TREE_CHAIN (block);
1286 TREE_CHAIN (block) = NULL;
1287 /* Clear TREE_USED which is always set by poplevel.
1288 The flag is set again if insert_block is called. */
1289 TREE_USED (block) = 0;
1292 /* Insert BLOCK at the end of the list of subblocks of the
1293 current binding level. This is used when a BIND_EXPR is expanded,
1294 to handle the BLOCK node inside the BIND_EXPR. */
1297 insert_block (block)
1300 TREE_USED (block) = 1;
1301 current_binding_level->blocks
1302 = chainon (current_binding_level->blocks, block);
1305 /* Set the BLOCK node for the innermost scope
1306 (the one we are currently in). */
1310 register tree block;
1312 current_binding_level->this_block = block;
1318 register struct binding_level *newlevel;
1320 /* Reuse or create a struct for this binding level. */
1322 if (free_binding_level)
1324 newlevel = free_binding_level;
1325 free_binding_level = free_binding_level->level_chain;
1329 newlevel = make_binding_level ();
1332 /* Add this level to the front of the chain (stack) of label levels. */
1334 newlevel->level_chain = label_level_chain;
1335 label_level_chain = newlevel;
1337 newlevel->names = named_labels;
1338 newlevel->shadowed = shadowed_labels;
1340 shadowed_labels = 0;
1346 register struct binding_level *level = label_level_chain;
1349 /* Clear out the definitions of the declared labels in this level.
1350 Leave in the list any ordinary, non-declared labels. */
1351 for (link = named_labels, prev = 0; link;)
1353 if (C_DECLARED_LABEL_FLAG (TREE_VALUE (link)))
1355 if (DECL_SOURCE_LINE (TREE_VALUE (link)) == 0)
1357 error_with_decl (TREE_VALUE (link),
1358 "label `%s' used but not defined");
1359 /* Avoid crashing later. */
1360 define_label (input_filename, lineno,
1361 DECL_NAME (TREE_VALUE (link)));
1363 else if (warn_unused_label && !TREE_USED (TREE_VALUE (link)))
1364 warning_with_decl (TREE_VALUE (link),
1365 "label `%s' defined but not used");
1366 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) = 0;
1368 /* Delete this element from the list. */
1369 link = TREE_CHAIN (link);
1371 TREE_CHAIN (prev) = link;
1373 named_labels = link;
1378 link = TREE_CHAIN (link);
1382 /* Bring back all the labels that were shadowed. */
1383 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
1384 if (DECL_NAME (TREE_VALUE (link)) != 0)
1385 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
1386 = TREE_VALUE (link);
1388 named_labels = chainon (named_labels, level->names);
1389 shadowed_labels = level->shadowed;
1391 /* Pop the current level, and free the structure for reuse. */
1392 label_level_chain = label_level_chain->level_chain;
1393 level->level_chain = free_binding_level;
1394 free_binding_level = level;
1397 /* Push a definition or a declaration of struct, union or enum tag "name".
1398 "type" should be the type node.
1399 We assume that the tag "name" is not already defined.
1401 Note that the definition may really be just a forward reference.
1402 In that case, the TYPE_SIZE will be zero. */
1405 pushtag (name, type)
1408 register struct binding_level *b;
1410 /* Find the proper binding level for this type tag. */
1412 for (b = current_binding_level; b->tag_transparent; b = b->level_chain)
1417 /* Record the identifier as the type's name if it has none. */
1419 if (TYPE_NAME (type) == 0)
1420 TYPE_NAME (type) = name;
1423 b->tags = tree_cons (name, type, b->tags);
1425 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1426 tagged type we just added to the current binding level. This fake
1427 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1428 to output a representation of a tagged type, and it also gives
1429 us a convenient place to record the "scope start" address for the
1432 TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
1434 /* An approximation for now, so we can tell this is a function-scope tag.
1435 This will be updated in poplevel. */
1436 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1439 /* Handle when a new declaration NEWDECL
1440 has the same name as an old one OLDDECL
1441 in the same binding contour.
1442 Prints an error message if appropriate.
1444 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
1445 Otherwise, return 0.
1447 When DIFFERENT_BINDING_LEVEL is true, NEWDECL is an external declaration,
1448 and OLDDECL is in an outer binding level and should thus not be changed. */
1451 duplicate_decls (newdecl, olddecl, different_binding_level)
1452 register tree newdecl, olddecl;
1453 int different_binding_level;
1455 int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1456 int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1457 && DECL_INITIAL (newdecl) != 0);
1458 tree oldtype = TREE_TYPE (olddecl);
1459 tree newtype = TREE_TYPE (newdecl);
1462 if (DECL_P (olddecl))
1463 DECL_MACHINE_ATTRIBUTES (newdecl)
1464 = merge_machine_decl_attributes (olddecl, newdecl);
1466 if (TREE_CODE (newtype) == ERROR_MARK
1467 || TREE_CODE (oldtype) == ERROR_MARK)
1470 /* New decl is completely inconsistent with the old one =>
1471 tell caller to replace the old one.
1472 This is always an error except in the case of shadowing a builtin. */
1473 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1475 if (TREE_CODE (olddecl) == FUNCTION_DECL
1476 && (DECL_BUILT_IN (olddecl)
1477 || DECL_BUILT_IN_NONANSI (olddecl)))
1479 /* If you declare a built-in or predefined function name as static,
1480 the old definition is overridden,
1481 but optionally warn this was a bad choice of name. */
1482 if (!TREE_PUBLIC (newdecl))
1486 else if (DECL_BUILT_IN (olddecl))
1487 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1489 warning_with_decl (newdecl, "shadowing library function `%s'");
1491 /* Likewise, if the built-in is not ansi, then programs can
1492 override it even globally without an error. */
1493 else if (! DECL_BUILT_IN (olddecl))
1494 warning_with_decl (newdecl,
1495 "library function `%s' declared as non-function");
1497 else if (DECL_BUILT_IN_NONANSI (olddecl))
1498 warning_with_decl (newdecl,
1499 "built-in function `%s' declared as non-function");
1501 warning_with_decl (newdecl,
1502 "built-in function `%s' declared as non-function");
1506 error_with_decl (newdecl, "`%s' redeclared as different kind of symbol");
1507 error_with_decl (olddecl, "previous declaration of `%s'");
1513 /* For real parm decl following a forward decl,
1514 return 1 so old decl will be reused. */
1515 if (types_match && TREE_CODE (newdecl) == PARM_DECL
1516 && TREE_ASM_WRITTEN (olddecl) && ! TREE_ASM_WRITTEN (newdecl))
1519 /* The new declaration is the same kind of object as the old one.
1520 The declarations may partially match. Print warnings if they don't
1521 match enough. Ultimately, copy most of the information from the new
1522 decl to the old one, and keep using the old one. */
1524 if (flag_traditional && TREE_CODE (newdecl) == FUNCTION_DECL
1525 && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (newdecl)) == olddecl
1526 && DECL_INITIAL (olddecl) == 0)
1527 /* If -traditional, avoid error for redeclaring fcn
1528 after implicit decl. */
1530 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1531 && DECL_BUILT_IN (olddecl))
1533 /* A function declaration for a built-in function. */
1534 if (!TREE_PUBLIC (newdecl))
1536 /* If you declare a built-in function name as static, the
1537 built-in definition is overridden,
1538 but optionally warn this was a bad choice of name. */
1540 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1541 /* Discard the old built-in function. */
1544 else if (!types_match)
1546 /* Accept the return type of the new declaration if same modes. */
1547 tree oldreturntype = TREE_TYPE (oldtype);
1548 tree newreturntype = TREE_TYPE (newtype);
1550 if (TYPE_MODE (oldreturntype) == TYPE_MODE (newreturntype))
1552 /* Function types may be shared, so we can't just modify
1553 the return type of olddecl's function type. */
1555 = build_function_type (newreturntype,
1556 TYPE_ARG_TYPES (oldtype));
1558 types_match = comptypes (newtype, trytype);
1562 /* Accept harmless mismatch in first argument type also.
1564 if (TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0
1565 && TYPE_ARG_TYPES (oldtype) != 0
1566 && TREE_VALUE (TYPE_ARG_TYPES (newtype)) != 0
1567 && TREE_VALUE (TYPE_ARG_TYPES (oldtype)) != 0
1568 && (TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (newtype)))
1569 == TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (oldtype)))))
1571 /* Function types may be shared, so we can't just modify
1572 the return type of olddecl's function type. */
1574 = build_function_type (TREE_TYPE (oldtype),
1575 tree_cons (NULL_TREE,
1576 TREE_VALUE (TYPE_ARG_TYPES (newtype)),
1577 TREE_CHAIN (TYPE_ARG_TYPES (oldtype))));
1579 types_match = comptypes (newtype, trytype);
1583 if (! different_binding_level)
1584 TREE_TYPE (olddecl) = oldtype;
1588 /* If types don't match for a built-in, throw away the built-in. */
1589 warning_with_decl (newdecl, "conflicting types for built-in function `%s'");
1593 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1594 && DECL_SOURCE_LINE (olddecl) == 0)
1596 /* A function declaration for a predeclared function
1597 that isn't actually built in. */
1598 if (!TREE_PUBLIC (newdecl))
1600 /* If you declare it as static, the
1601 default definition is overridden. */
1604 else if (!types_match)
1606 /* If the types don't match, preserve volatility indication.
1607 Later on, we will discard everything else about the
1608 default declaration. */
1609 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1612 /* Permit char *foo () to match void *foo (...) if not pedantic,
1613 if one of them came from a system header file. */
1614 else if (!types_match
1615 && TREE_CODE (olddecl) == FUNCTION_DECL
1616 && TREE_CODE (newdecl) == FUNCTION_DECL
1617 && TREE_CODE (TREE_TYPE (oldtype)) == POINTER_TYPE
1618 && TREE_CODE (TREE_TYPE (newtype)) == POINTER_TYPE
1619 && (DECL_IN_SYSTEM_HEADER (olddecl)
1620 || DECL_IN_SYSTEM_HEADER (newdecl))
1621 && ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (newtype))) == void_type_node
1622 && TYPE_ARG_TYPES (oldtype) == 0
1623 && self_promoting_args_p (TYPE_ARG_TYPES (newtype))
1624 && TREE_TYPE (TREE_TYPE (oldtype)) == char_type_node)
1626 (TREE_TYPE (TREE_TYPE (newtype)) == char_type_node
1627 && TYPE_ARG_TYPES (newtype) == 0
1628 && self_promoting_args_p (TYPE_ARG_TYPES (oldtype))
1629 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)))
1632 pedwarn_with_decl (newdecl, "conflicting types for `%s'");
1633 /* Make sure we keep void * as ret type, not char *. */
1634 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)
1635 TREE_TYPE (newdecl) = newtype = oldtype;
1637 /* Set DECL_IN_SYSTEM_HEADER, so that if we see another declaration
1638 we will come back here again. */
1639 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1641 else if (!types_match
1642 /* Permit char *foo (int, ...); followed by char *foo ();
1644 && ! (TREE_CODE (olddecl) == FUNCTION_DECL
1646 /* Return types must still match. */
1647 && comptypes (TREE_TYPE (oldtype),
1648 TREE_TYPE (newtype))
1649 && TYPE_ARG_TYPES (newtype) == 0))
1651 error_with_decl (newdecl, "conflicting types for `%s'");
1652 /* Check for function type mismatch
1653 involving an empty arglist vs a nonempty one. */
1654 if (TREE_CODE (olddecl) == FUNCTION_DECL
1655 && comptypes (TREE_TYPE (oldtype),
1656 TREE_TYPE (newtype))
1657 && ((TYPE_ARG_TYPES (oldtype) == 0
1658 && DECL_INITIAL (olddecl) == 0)
1660 (TYPE_ARG_TYPES (newtype) == 0
1661 && DECL_INITIAL (newdecl) == 0)))
1663 /* Classify the problem further. */
1664 register tree t = TYPE_ARG_TYPES (oldtype);
1666 t = TYPE_ARG_TYPES (newtype);
1667 for (; t; t = TREE_CHAIN (t))
1669 register tree type = TREE_VALUE (t);
1671 if (TREE_CHAIN (t) == 0
1672 && TYPE_MAIN_VARIANT (type) != void_type_node)
1674 error ("A parameter list with an ellipsis can't match an empty parameter name list declaration.");
1678 if (simple_type_promotes_to (type) != NULL_TREE)
1680 error ("An argument type that has a default promotion can't match an empty parameter name list declaration.");
1685 error_with_decl (olddecl, "previous declaration of `%s'");
1689 errmsg = redeclaration_error_message (newdecl, olddecl);
1695 error_with_decl (newdecl, "redefinition of `%s'");
1698 error_with_decl (newdecl, "redeclaration of `%s'");
1701 error_with_decl (newdecl, "conflicting declarations of `%s'");
1707 error_with_decl (olddecl,
1708 ((DECL_INITIAL (olddecl)
1709 && current_binding_level == global_binding_level)
1710 ? "`%s' previously defined here"
1711 : "`%s' previously declared here"));
1713 else if (TREE_CODE (newdecl) == TYPE_DECL
1714 && (DECL_IN_SYSTEM_HEADER (olddecl)
1715 || DECL_IN_SYSTEM_HEADER (newdecl)))
1717 warning_with_decl (newdecl, "redefinition of `%s'");
1720 ((DECL_INITIAL (olddecl)
1721 && current_binding_level == global_binding_level)
1722 ? "`%s' previously defined here"
1723 : "`%s' previously declared here"));
1725 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1726 && DECL_INITIAL (olddecl) != 0
1727 && TYPE_ARG_TYPES (oldtype) == 0
1728 && TYPE_ARG_TYPES (newtype) != 0
1729 && TYPE_ACTUAL_ARG_TYPES (oldtype) != 0)
1731 register tree type, parm;
1733 /* Prototype decl follows defn w/o prototype. */
1735 for (parm = TYPE_ACTUAL_ARG_TYPES (oldtype),
1736 type = TYPE_ARG_TYPES (newtype),
1739 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type), nargs++)
1741 if (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == void_type_node
1742 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
1744 warning_with_decl (newdecl, "prototype for `%s' follows");
1745 warning_with_decl (olddecl, "non-prototype definition here");
1748 if (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == void_type_node
1749 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
1751 error_with_decl (newdecl,
1752 "prototype for `%s' follows and number of arguments doesn't match");
1753 error_with_decl (olddecl, "non-prototype definition here");
1757 /* Type for passing arg must be consistent
1758 with that declared for the arg. */
1759 if (! comptypes (TREE_VALUE (parm), TREE_VALUE (type))
1760 /* If -traditional, allow `unsigned int' instead of `int'
1761 in the prototype. */
1762 && (! (flag_traditional
1763 && TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == integer_type_node
1764 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == unsigned_type_node)))
1766 error_with_decl (newdecl,
1767 "prototype for `%s' follows and argument %d doesn't match",
1769 error_with_decl (olddecl, "non-prototype definition here");
1775 /* Warn about mismatches in various flags. */
1778 /* Warn if function is now inline
1779 but was previously declared not inline and has been called. */
1780 if (TREE_CODE (olddecl) == FUNCTION_DECL
1781 && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl)
1782 && TREE_USED (olddecl))
1783 warning_with_decl (newdecl,
1784 "`%s' declared inline after being called");
1785 if (TREE_CODE (olddecl) == FUNCTION_DECL
1786 && ! DECL_INLINE (olddecl) && DECL_INLINE (newdecl)
1787 && DECL_INITIAL (olddecl) != 0)
1788 warning_with_decl (newdecl,
1789 "`%s' declared inline after its definition");
1791 /* If pedantic, warn when static declaration follows a non-static
1792 declaration. Otherwise, do so only for functions. */
1793 if ((pedantic || TREE_CODE (olddecl) == FUNCTION_DECL)
1794 && TREE_PUBLIC (olddecl)
1795 && !TREE_PUBLIC (newdecl))
1796 warning_with_decl (newdecl, "static declaration for `%s' follows non-static");
1798 /* If warn_traditional, warn when a non-static function
1799 declaration follows a static one. */
1800 if (warn_traditional && !in_system_header
1801 && TREE_CODE (olddecl) == FUNCTION_DECL
1802 && !TREE_PUBLIC (olddecl)
1803 && TREE_PUBLIC (newdecl))
1804 warning_with_decl (newdecl, "non-static declaration for `%s' follows static");
1806 /* Warn when const declaration follows a non-const
1807 declaration, but not for functions. */
1808 if (TREE_CODE (olddecl) != FUNCTION_DECL
1809 && !TREE_READONLY (olddecl)
1810 && TREE_READONLY (newdecl))
1811 warning_with_decl (newdecl, "const declaration for `%s' follows non-const");
1812 /* These bits are logically part of the type, for variables.
1813 But not for functions
1814 (where qualifiers are not valid ANSI anyway). */
1815 else if (pedantic && TREE_CODE (olddecl) != FUNCTION_DECL
1816 && (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
1817 || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl)))
1818 pedwarn_with_decl (newdecl, "type qualifiers for `%s' conflict with previous decl");
1822 /* Optionally warn about more than one declaration for the same name. */
1823 if (errmsg == 0 && warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0
1824 /* Don't warn about a function declaration
1825 followed by a definition. */
1826 && !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0
1827 && DECL_INITIAL (olddecl) == 0)
1828 /* Don't warn about extern decl followed by (tentative) definition. */
1829 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
1831 warning_with_decl (newdecl, "redundant redeclaration of `%s' in same scope");
1832 warning_with_decl (olddecl, "previous declaration of `%s'");
1835 /* Copy all the DECL_... slots specified in the new decl
1836 except for any that we copy here from the old type.
1838 Past this point, we don't change OLDTYPE and NEWTYPE
1839 even if we change the types of NEWDECL and OLDDECL. */
1843 /* When copying info to olddecl, we store into write_olddecl
1844 instead. This allows us to avoid modifying olddecl when
1845 different_binding_level is true. */
1846 tree write_olddecl = different_binding_level ? newdecl : olddecl;
1848 /* Merge the data types specified in the two decls. */
1849 if (TREE_CODE (newdecl) != FUNCTION_DECL || !DECL_BUILT_IN (olddecl))
1851 if (different_binding_level)
1853 = build_type_attribute_variant
1855 merge_attributes (TYPE_ATTRIBUTES (newtype),
1856 TYPE_ATTRIBUTES (oldtype)));
1859 = TREE_TYPE (olddecl)
1860 = common_type (newtype, oldtype);
1863 /* Lay the type out, unless already done. */
1864 if (oldtype != TREE_TYPE (newdecl))
1866 if (TREE_TYPE (newdecl) != error_mark_node)
1867 layout_type (TREE_TYPE (newdecl));
1868 if (TREE_CODE (newdecl) != FUNCTION_DECL
1869 && TREE_CODE (newdecl) != TYPE_DECL
1870 && TREE_CODE (newdecl) != CONST_DECL)
1871 layout_decl (newdecl, 0);
1875 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1876 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1877 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
1878 DECL_MODE (newdecl) = DECL_MODE (olddecl);
1879 if (TREE_CODE (olddecl) != FUNCTION_DECL)
1880 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1882 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1883 DECL_USER_ALIGN (newdecl) |= DECL_ALIGN (olddecl);
1887 /* Keep the old rtl since we can safely use it. */
1888 DECL_RTL (newdecl) = DECL_RTL (olddecl);
1890 /* Merge the type qualifiers. */
1891 if (TREE_CODE (olddecl) == FUNCTION_DECL
1892 && DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
1893 && ! TREE_THIS_VOLATILE (newdecl))
1894 TREE_THIS_VOLATILE (write_olddecl) = 0;
1896 if (TREE_READONLY (newdecl))
1897 TREE_READONLY (write_olddecl) = 1;
1899 if (TREE_THIS_VOLATILE (newdecl))
1901 TREE_THIS_VOLATILE (write_olddecl) = 1;
1902 if (TREE_CODE (newdecl) == VAR_DECL
1903 /* If an automatic variable is re-declared in the same
1904 function scope, but the old declaration was not
1905 volatile, make_var_volatile() would crash because the
1906 variable would have been assigned to a pseudo, not a
1907 MEM. Since this duplicate declaration is invalid
1908 anyway, we just skip the call. */
1910 make_var_volatile (newdecl);
1913 /* Keep source location of definition rather than declaration. */
1914 /* When called with different_binding_level set, keep the old
1915 information so that meaningful diagnostics can be given. */
1916 if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0
1917 && ! different_binding_level)
1919 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
1920 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
1923 /* Merge the unused-warning information. */
1924 if (DECL_IN_SYSTEM_HEADER (olddecl))
1925 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1926 else if (DECL_IN_SYSTEM_HEADER (newdecl))
1927 DECL_IN_SYSTEM_HEADER (write_olddecl) = 1;
1929 /* Merge the initialization information. */
1930 /* When called with different_binding_level set, don't copy over
1931 DECL_INITIAL, so that we don't accidentally change function
1932 declarations into function definitions. */
1933 if (DECL_INITIAL (newdecl) == 0 && ! different_binding_level)
1934 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1936 /* Merge the section attribute.
1937 We want to issue an error if the sections conflict but that must be
1938 done later in decl_attributes since we are called before attributes
1940 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1941 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1943 /* Copy the assembler name.
1944 Currently, it can only be defined in the prototype. */
1945 DECL_ASSEMBLER_NAME (newdecl) = DECL_ASSEMBLER_NAME (olddecl);
1947 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1949 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
1950 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1952 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1953 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1954 DECL_NO_CHECK_MEMORY_USAGE (newdecl)
1955 |= DECL_NO_CHECK_MEMORY_USAGE (olddecl);
1956 DECL_NO_LIMIT_STACK (newdecl)
1957 |= DECL_NO_LIMIT_STACK (olddecl);
1960 /* If cannot merge, then use the new type and qualifiers,
1961 and don't preserve the old rtl. */
1962 else if (! different_binding_level)
1964 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1965 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1966 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1967 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1970 /* Merge the storage class information. */
1971 DECL_WEAK (newdecl) |= DECL_WEAK (olddecl);
1972 /* For functions, static overrides non-static. */
1973 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1975 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1976 /* This is since we don't automatically
1977 copy the attributes of NEWDECL into OLDDECL. */
1978 /* No need to worry about different_binding_level here because
1979 then TREE_PUBLIC (newdecl) was true. */
1980 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1981 /* If this clears `static', clear it in the identifier too. */
1982 if (! TREE_PUBLIC (olddecl))
1983 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1985 if (DECL_EXTERNAL (newdecl))
1987 if (! different_binding_level)
1989 /* Don't mess with these flags on local externs; they remain
1990 external even if there's a declaration at file scope which
1992 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1993 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1995 /* An extern decl does not override previous storage class. */
1996 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1997 if (! DECL_EXTERNAL (newdecl))
1998 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2002 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
2003 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
2006 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2008 /* If either decl says `inline', this fn is inline,
2009 unless its definition was passed already. */
2010 if (DECL_INLINE (newdecl) && DECL_INITIAL (olddecl) == 0)
2011 DECL_INLINE (olddecl) = 1;
2013 DECL_INLINE (newdecl) = DECL_INLINE (olddecl);
2015 if (DECL_BUILT_IN (olddecl))
2017 /* Get rid of any built-in function if new arg types don't match it
2018 or if we have a function definition. */
2019 if (! types_match || new_is_definition)
2021 if (! different_binding_level)
2023 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2024 DECL_BUILT_IN_CLASS (olddecl) = NOT_BUILT_IN;
2029 /* If redeclaring a builtin function, and not a definition,
2030 it stays built in. */
2031 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2032 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2035 /* Also preserve various other info from the definition. */
2036 else if (! new_is_definition)
2037 DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
2038 if (! new_is_definition)
2040 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2041 /* When called with different_binding_level set, don't copy over
2042 DECL_INITIAL, so that we don't accidentally change function
2043 declarations into function definitions. */
2044 if (! different_binding_level)
2045 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2046 DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
2047 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2048 if (DECL_INLINE (newdecl))
2049 DECL_ABSTRACT_ORIGIN (newdecl) = DECL_ABSTRACT_ORIGIN (olddecl);
2052 if (different_binding_level)
2055 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2056 But preserve OLDDECL's DECL_UID. */
2058 register unsigned olddecl_uid = DECL_UID (olddecl);
2060 memcpy ((char *) olddecl + sizeof (struct tree_common),
2061 (char *) newdecl + sizeof (struct tree_common),
2062 sizeof (struct tree_decl) - sizeof (struct tree_common));
2063 DECL_UID (olddecl) = olddecl_uid;
2066 /* NEWDECL contains the merged attribute lists.
2067 Update OLDDECL to be the same. */
2068 DECL_MACHINE_ATTRIBUTES (olddecl) = DECL_MACHINE_ATTRIBUTES (newdecl);
2073 /* Record a decl-node X as belonging to the current lexical scope.
2074 Check for errors (such as an incompatible declaration for the same
2075 name already seen in the same scope).
2077 Returns either X or an old decl for the same name.
2078 If an old decl is returned, it may have been smashed
2079 to agree with what X says. */
2086 register tree name = DECL_NAME (x);
2087 register struct binding_level *b = current_binding_level;
2089 DECL_CONTEXT (x) = current_function_decl;
2090 /* A local extern declaration for a function doesn't constitute nesting.
2091 A local auto declaration does, since it's a forward decl
2092 for a nested function coming later. */
2093 if ((TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
2094 && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x))
2095 DECL_CONTEXT (x) = 0;
2097 if (warn_nested_externs && DECL_EXTERNAL (x) && b != global_binding_level
2098 && x != IDENTIFIER_IMPLICIT_DECL (name)
2099 /* Don't print error messages for __FUNCTION__ and __PRETTY_FUNCTION__ */
2100 && !DECL_IN_SYSTEM_HEADER (x))
2101 warning ("nested extern declaration of `%s'", IDENTIFIER_POINTER (name));
2107 int different_binding_level = 0;
2109 t = lookup_name_current_level (name);
2110 /* Don't type check externs here when -traditional. This is so that
2111 code with conflicting declarations inside blocks will get warnings
2112 not errors. X11 for instance depends on this. */
2113 if (! t && DECL_EXTERNAL (x) && TREE_PUBLIC (x) && ! flag_traditional)
2115 t = IDENTIFIER_GLOBAL_VALUE (name);
2116 /* Type decls at global scope don't conflict with externs declared
2117 inside lexical blocks. */
2118 if (t && TREE_CODE (t) == TYPE_DECL)
2120 different_binding_level = 1;
2122 if (t != 0 && t == error_mark_node)
2123 /* error_mark_node is 0 for a while during initialization! */
2126 error_with_decl (x, "`%s' used prior to declaration");
2131 file = DECL_SOURCE_FILE (t);
2132 line = DECL_SOURCE_LINE (t);
2135 /* If this decl is `static' and an implicit decl was seen previously,
2136 warn. But don't complain if -traditional,
2137 since traditional compilers don't complain. */
2138 if (! flag_traditional && TREE_PUBLIC (name)
2139 /* Don't test for DECL_EXTERNAL, because grokdeclarator
2140 sets this for all functions. */
2141 && ! TREE_PUBLIC (x)
2142 && (TREE_CODE (x) == FUNCTION_DECL || b == global_binding_level)
2143 /* We used to warn also for explicit extern followed by static,
2144 but sometimes you need to do it that way. */
2145 && IDENTIFIER_IMPLICIT_DECL (name) != 0)
2147 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
2148 IDENTIFIER_POINTER (name));
2149 pedwarn_with_file_and_line
2150 (DECL_SOURCE_FILE (IDENTIFIER_IMPLICIT_DECL (name)),
2151 DECL_SOURCE_LINE (IDENTIFIER_IMPLICIT_DECL (name)),
2152 "previous declaration of `%s'",
2153 IDENTIFIER_POINTER (name));
2154 TREE_THIS_VOLATILE (name) = 1;
2157 if (t != 0 && duplicate_decls (x, t, different_binding_level))
2159 if (TREE_CODE (t) == PARM_DECL)
2161 /* Don't allow more than one "real" duplicate
2162 of a forward parm decl. */
2163 TREE_ASM_WRITTEN (t) = TREE_ASM_WRITTEN (x);
2169 /* If we are processing a typedef statement, generate a whole new
2170 ..._TYPE node (which will be just an variant of the existing
2171 ..._TYPE node with identical properties) and then install the
2172 TYPE_DECL node generated to represent the typedef name as the
2173 TYPE_NAME of this brand new (duplicate) ..._TYPE node.
2175 The whole point here is to end up with a situation where each
2176 and every ..._TYPE node the compiler creates will be uniquely
2177 associated with AT MOST one node representing a typedef name.
2178 This way, even though the compiler substitutes corresponding
2179 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
2180 early on, later parts of the compiler can always do the reverse
2181 translation and get back the corresponding typedef name. For
2184 typedef struct S MY_TYPE;
2187 Later parts of the compiler might only know that `object' was of
2188 type `struct S' if it were not for code just below. With this
2189 code however, later parts of the compiler see something like:
2191 struct S' == struct S
2192 typedef struct S' MY_TYPE;
2195 And they can then deduce (from the node for type struct S') that
2196 the original object declaration was:
2200 Being able to do this is important for proper support of protoize,
2201 and also for generating precise symbolic debugging information
2202 which takes full account of the programmer's (typedef) vocabulary.
2204 Obviously, we don't want to generate a duplicate ..._TYPE node if
2205 the TYPE_DECL node that we are now processing really represents a
2206 standard built-in type.
2208 Since all standard types are effectively declared at line zero
2209 in the source file, we can easily check to see if we are working
2210 on a standard type by checking the current value of lineno. */
2212 if (TREE_CODE (x) == TYPE_DECL)
2214 if (DECL_SOURCE_LINE (x) == 0)
2216 if (TYPE_NAME (TREE_TYPE (x)) == 0)
2217 TYPE_NAME (TREE_TYPE (x)) = x;
2219 else if (TREE_TYPE (x) != error_mark_node
2220 && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
2222 tree tt = TREE_TYPE (x);
2223 DECL_ORIGINAL_TYPE (x) = tt;
2224 tt = build_type_copy (tt);
2226 TREE_USED (tt) = TREE_USED (x);
2231 /* Multiple external decls of the same identifier ought to match.
2232 Check against both global declarations (when traditional) and out of
2233 scope (limbo) block level declarations.
2235 We get warnings about inline functions where they are defined.
2236 Avoid duplicate warnings where they are used. */
2238 && ! (TREE_CODE (x) == FUNCTION_DECL && DECL_INLINE (x)))
2242 if (flag_traditional && IDENTIFIER_GLOBAL_VALUE (name) != 0
2243 && (DECL_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
2244 || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name))))
2245 decl = IDENTIFIER_GLOBAL_VALUE (name);
2246 else if (IDENTIFIER_LIMBO_VALUE (name) != 0)
2247 /* Decls in limbo are always extern, so no need to check that. */
2248 decl = IDENTIFIER_LIMBO_VALUE (name);
2252 if (decl && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl))
2253 /* If old decl is built-in, we already warned if we should. */
2254 && !DECL_BUILT_IN (decl))
2256 pedwarn_with_decl (x,
2257 "type mismatch with previous external decl");
2258 pedwarn_with_decl (decl, "previous external decl of `%s'");
2262 /* If a function has had an implicit declaration, and then is defined,
2263 make sure they are compatible. */
2265 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
2266 && IDENTIFIER_GLOBAL_VALUE (name) == 0
2267 && TREE_CODE (x) == FUNCTION_DECL
2268 && ! comptypes (TREE_TYPE (x),
2269 TREE_TYPE (IDENTIFIER_IMPLICIT_DECL (name))))
2271 warning_with_decl (x, "type mismatch with previous implicit declaration");
2272 warning_with_decl (IDENTIFIER_IMPLICIT_DECL (name),
2273 "previous implicit declaration of `%s'");
2276 /* In PCC-compatibility mode, extern decls of vars with no current decl
2277 take effect at top level no matter where they are. */
2278 if (flag_traditional && DECL_EXTERNAL (x)
2279 && lookup_name (name) == 0)
2281 tree type = TREE_TYPE (x);
2283 /* But don't do this if the type contains temporary nodes. */
2286 if (type == error_mark_node)
2288 if (TYPE_CONTEXT (type))
2290 warning_with_decl (x, "type of external `%s' is not global");
2291 /* By exiting the loop early, we leave TYPE nonzero,
2292 and thus prevent globalization of the decl. */
2295 else if (TREE_CODE (type) == FUNCTION_TYPE
2296 && TYPE_ARG_TYPES (type) != 0)
2297 /* The types might not be truly local,
2298 but the list of arg types certainly is temporary.
2299 Since prototypes are nontraditional,
2300 ok not to do the traditional thing. */
2302 type = TREE_TYPE (type);
2306 b = global_binding_level;
2309 /* This name is new in its binding level.
2310 Install the new declaration and return it. */
2311 if (b == global_binding_level)
2313 /* Install a global value. */
2315 /* If the first global decl has external linkage,
2316 warn if we later see static one. */
2317 if (IDENTIFIER_GLOBAL_VALUE (name) == 0 && TREE_PUBLIC (x))
2318 TREE_PUBLIC (name) = 1;
2320 IDENTIFIER_GLOBAL_VALUE (name) = x;
2322 /* We no longer care about any previous block level declarations. */
2323 IDENTIFIER_LIMBO_VALUE (name) = 0;
2325 /* Don't forget if the function was used via an implicit decl. */
2326 if (IDENTIFIER_IMPLICIT_DECL (name)
2327 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
2328 TREE_USED (x) = 1, TREE_USED (name) = 1;
2330 /* Don't forget if its address was taken in that way. */
2331 if (IDENTIFIER_IMPLICIT_DECL (name)
2332 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
2333 TREE_ADDRESSABLE (x) = 1;
2335 /* Warn about mismatches against previous implicit decl. */
2336 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
2337 /* If this real decl matches the implicit, don't complain. */
2338 && ! (TREE_CODE (x) == FUNCTION_DECL
2339 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (x)))
2340 == integer_type_node)))
2341 pedwarn ("`%s' was previously implicitly declared to return `int'",
2342 IDENTIFIER_POINTER (name));
2344 /* If this decl is `static' and an `extern' was seen previously,
2345 that is erroneous. */
2346 if (TREE_PUBLIC (name)
2347 && ! TREE_PUBLIC (x) && ! DECL_EXTERNAL (x))
2349 /* Okay to redeclare an ANSI built-in as static. */
2350 if (t != 0 && DECL_BUILT_IN (t))
2352 /* Okay to declare a non-ANSI built-in as anything. */
2353 else if (t != 0 && DECL_BUILT_IN_NONANSI (t))
2355 /* Okay to have global type decl after an earlier extern
2356 declaration inside a lexical block. */
2357 else if (TREE_CODE (x) == TYPE_DECL)
2359 else if (IDENTIFIER_IMPLICIT_DECL (name))
2361 if (! TREE_THIS_VOLATILE (name))
2362 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
2363 IDENTIFIER_POINTER (name));
2366 pedwarn ("`%s' was declared `extern' and later `static'",
2367 IDENTIFIER_POINTER (name));
2372 /* Here to install a non-global value. */
2373 tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
2374 tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
2376 IDENTIFIER_LOCAL_VALUE (name) = x;
2378 /* If this is an extern function declaration, see if we
2379 have a global definition or declaration for the function. */
2382 && TREE_CODE (x) == FUNCTION_DECL
2383 && TREE_CODE (oldglobal) == FUNCTION_DECL
2384 && DECL_EXTERNAL (x) && ! DECL_INLINE (x))
2386 /* We have one. Their types must agree. */
2387 if (! comptypes (TREE_TYPE (x),
2388 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (name))))
2389 pedwarn_with_decl (x, "extern declaration of `%s' doesn't match global one");
2392 /* Inner extern decl is inline if global one is.
2393 Copy enough to really inline it. */
2394 if (DECL_INLINE (oldglobal))
2396 DECL_INLINE (x) = DECL_INLINE (oldglobal);
2397 DECL_INITIAL (x) = (current_function_decl == oldglobal
2398 ? 0 : DECL_INITIAL (oldglobal));
2399 DECL_SAVED_INSNS (x) = DECL_SAVED_INSNS (oldglobal);
2400 DECL_FRAME_SIZE (x) = DECL_FRAME_SIZE (oldglobal);
2401 DECL_ARGUMENTS (x) = DECL_ARGUMENTS (oldglobal);
2402 DECL_RESULT (x) = DECL_RESULT (oldglobal);
2403 TREE_ASM_WRITTEN (x) = TREE_ASM_WRITTEN (oldglobal);
2404 DECL_ABSTRACT_ORIGIN (x)
2405 = DECL_ABSTRACT_ORIGIN (oldglobal);
2407 /* Inner extern decl is built-in if global one is. */
2408 if (DECL_BUILT_IN (oldglobal))
2410 DECL_BUILT_IN_CLASS (x) = DECL_BUILT_IN_CLASS (oldglobal);
2411 DECL_FUNCTION_CODE (x) = DECL_FUNCTION_CODE (oldglobal);
2413 /* Keep the arg types from a file-scope fcn defn. */
2414 if (TYPE_ARG_TYPES (TREE_TYPE (oldglobal)) != 0
2415 && DECL_INITIAL (oldglobal)
2416 && TYPE_ARG_TYPES (TREE_TYPE (x)) == 0)
2417 TREE_TYPE (x) = TREE_TYPE (oldglobal);
2422 /* This case is probably sometimes the right thing to do. */
2423 /* If we have a local external declaration,
2424 then any file-scope declaration should not
2425 have been static. */
2426 if (oldlocal == 0 && oldglobal != 0
2427 && !TREE_PUBLIC (oldglobal)
2428 && DECL_EXTERNAL (x) && TREE_PUBLIC (x))
2429 warning ("`%s' locally external but globally static",
2430 IDENTIFIER_POINTER (name));
2433 /* If we have a local external declaration,
2434 and no file-scope declaration has yet been seen,
2435 then if we later have a file-scope decl it must not be static. */
2437 && DECL_EXTERNAL (x)
2441 TREE_PUBLIC (name) = 1;
2443 /* Save this decl, so that we can do type checking against
2444 other decls after it falls out of scope.
2446 Only save it once. This prevents temporary decls created in
2447 expand_inline_function from being used here, since this
2448 will have been set when the inline function was parsed.
2449 It also helps give slightly better warnings. */
2450 if (IDENTIFIER_LIMBO_VALUE (name) == 0)
2451 IDENTIFIER_LIMBO_VALUE (name) = x;
2454 /* Warn if shadowing an argument at the top level of the body. */
2455 if (oldlocal != 0 && !DECL_EXTERNAL (x)
2456 /* This warning doesn't apply to the parms of a nested fcn. */
2457 && ! current_binding_level->parm_flag
2458 /* Check that this is one level down from the parms. */
2459 && current_binding_level->level_chain->parm_flag
2460 /* Check that the decl being shadowed
2461 comes from the parm level, one level up. */
2462 && chain_member (oldlocal, current_binding_level->level_chain->names))
2464 if (TREE_CODE (oldlocal) == PARM_DECL)
2465 pedwarn ("declaration of `%s' shadows a parameter",
2466 IDENTIFIER_POINTER (name));
2468 pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
2469 IDENTIFIER_POINTER (name));
2472 /* Maybe warn if shadowing something else. */
2473 else if (warn_shadow && !DECL_EXTERNAL (x)
2474 /* No shadow warnings for internally generated vars. */
2475 && DECL_SOURCE_LINE (x) != 0
2476 /* No shadow warnings for vars made for inlining. */
2477 && ! DECL_FROM_INLINE (x))
2479 const char *id = IDENTIFIER_POINTER (name);
2481 if (TREE_CODE (x) == PARM_DECL
2482 && current_binding_level->level_chain->parm_flag)
2483 /* Don't warn about the parm names in function declarator
2484 within a function declarator.
2485 It would be nice to avoid warning in any function
2486 declarator in a declaration, as opposed to a definition,
2487 but there is no way to tell it's not a definition. */
2489 else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL)
2490 warning ("declaration of `%s' shadows a parameter", id);
2491 else if (oldlocal != 0)
2492 warning ("declaration of `%s' shadows previous local", id);
2493 else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
2494 && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
2495 warning ("declaration of `%s' shadows global declaration", id);
2498 /* If storing a local value, there may already be one (inherited).
2499 If so, record it for restoration when this binding level ends. */
2501 b->shadowed = tree_cons (name, oldlocal, b->shadowed);
2504 /* Keep count of variables in this level with incomplete type.
2505 If the input is erroneous, we can have error_mark in the type
2506 slot (e.g. "f(void a, ...)") - that doesn't count as an
2508 if (TREE_TYPE (x) != error_mark_node
2509 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2513 /* Put decls on list in reverse order.
2514 We will reverse them later if necessary. */
2515 TREE_CHAIN (x) = b->names;
2521 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */
2524 pushdecl_top_level (x)
2528 register struct binding_level *b = current_binding_level;
2530 current_binding_level = global_binding_level;
2532 current_binding_level = b;
2536 /* Generate an implicit declaration for identifier FUNCTIONID
2537 as a function of type int (). Print a warning if appropriate. */
2540 implicitly_declare (functionid)
2544 int traditional_warning = 0;
2545 /* Only one "implicit declaration" warning per identifier. */
2546 int implicit_warning;
2548 /* We used to reuse an old implicit decl here,
2549 but this loses with inline functions because it can clobber
2550 the saved decl chains. */
2552 if (IDENTIFIER_IMPLICIT_DECL (functionid) != 0)
2553 decl = IDENTIFIER_IMPLICIT_DECL (functionid);
2556 decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
2558 /* Warn of implicit decl following explicit local extern decl.
2559 This is probably a program designed for traditional C. */
2560 if (TREE_PUBLIC (functionid) && IDENTIFIER_GLOBAL_VALUE (functionid) == 0)
2561 traditional_warning = 1;
2563 /* Warn once of an implicit declaration. */
2564 implicit_warning = (IDENTIFIER_IMPLICIT_DECL (functionid) == 0);
2566 DECL_EXTERNAL (decl) = 1;
2567 TREE_PUBLIC (decl) = 1;
2569 /* Record that we have an implicit decl and this is it. */
2570 IDENTIFIER_IMPLICIT_DECL (functionid) = decl;
2572 /* ANSI standard says implicit declarations are in the innermost block.
2573 So we record the decl in the standard fashion.
2574 If flag_traditional is set, pushdecl does it top-level. */
2577 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
2578 maybe_objc_check_decl (decl);
2580 rest_of_decl_compilation (decl, NULL_PTR, 0, 0);
2582 if (implicit_warning)
2583 implicit_decl_warning (functionid);
2584 else if (warn_traditional && traditional_warning)
2585 warning ("function `%s' was previously declared within a block",
2586 IDENTIFIER_POINTER (functionid));
2588 /* Write a record describing this implicit function declaration to the
2589 prototypes file (if requested). */
2591 gen_aux_info_record (decl, 0, 1, 0);
2597 implicit_decl_warning (id)
2600 const char *name = IDENTIFIER_POINTER (id);
2601 if (mesg_implicit_function_declaration == 2)
2602 error ("implicit declaration of function `%s'", name);
2603 else if (mesg_implicit_function_declaration == 1)
2604 warning ("implicit declaration of function `%s'", name);
2607 /* Return zero if the declaration NEWDECL is valid
2608 when the declaration OLDDECL (assumed to be for the same name)
2609 has already been seen.
2610 Otherwise return 1 if NEWDECL is a redefinition, 2 if it is a redeclaration,
2611 and 3 if it is a conflicting declaration. */
2614 redeclaration_error_message (newdecl, olddecl)
2615 tree newdecl, olddecl;
2617 if (TREE_CODE (newdecl) == TYPE_DECL)
2619 if (flag_traditional && TREE_TYPE (newdecl) == TREE_TYPE (olddecl))
2621 /* pushdecl creates distinct types for TYPE_DECLs by calling
2622 build_type_copy, so the above comparison generally fails. We do
2623 another test against the TYPE_MAIN_VARIANT of the olddecl, which
2624 is equivalent to what this code used to do before the build_type_copy
2625 call. The variant type distinction should not matter for traditional
2626 code, because it doesn't have type qualifiers. */
2627 if (flag_traditional
2628 && TYPE_MAIN_VARIANT (TREE_TYPE (olddecl)) == TREE_TYPE (newdecl))
2630 if (DECL_IN_SYSTEM_HEADER (olddecl) || DECL_IN_SYSTEM_HEADER (newdecl))
2634 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2636 /* Declarations of functions can insist on internal linkage
2637 but they can't be inconsistent with internal linkage,
2638 so there can be no error on that account.
2639 However defining the same name twice is no good. */
2640 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0
2641 /* However, defining once as extern inline and a second
2642 time in another way is ok. */
2643 && ! (DECL_INLINE (olddecl) && DECL_EXTERNAL (olddecl)
2644 && ! (DECL_INLINE (newdecl) && DECL_EXTERNAL (newdecl))))
2648 else if (DECL_CONTEXT (newdecl) == NULL_TREE)
2650 /* Objects declared at top level: */
2651 /* If at least one is a reference, it's ok. */
2652 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2654 /* Reject two definitions. */
2655 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0)
2657 /* Now we have two tentative defs, or one tentative and one real def. */
2658 /* Insist that the linkage match. */
2659 if (TREE_PUBLIC (olddecl) != TREE_PUBLIC (newdecl))
2663 else if (current_binding_level->parm_flag
2664 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2668 /* Newdecl has block scope. If olddecl has block scope also, then
2669 reject two definitions, and reject a definition together with an
2670 external reference. Otherwise, it is OK, because newdecl must
2671 be an extern reference to olddecl. */
2672 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl))
2673 && DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl))
2679 /* Get the LABEL_DECL corresponding to identifier ID as a label.
2680 Create one if none exists so far for the current function.
2681 This function is called for both label definitions and label references. */
2687 register tree decl = IDENTIFIER_LABEL_VALUE (id);
2689 if (current_function_decl == 0)
2691 error ("label %s referenced outside of any function",
2692 IDENTIFIER_POINTER (id));
2696 /* Use a label already defined or ref'd with this name. */
2699 /* But not if it is inherited and wasn't declared to be inheritable. */
2700 if (DECL_CONTEXT (decl) != current_function_decl
2701 && ! C_DECLARED_LABEL_FLAG (decl))
2702 return shadow_label (id);
2706 decl = build_decl (LABEL_DECL, id, void_type_node);
2708 /* A label not explicitly declared must be local to where it's ref'd. */
2709 DECL_CONTEXT (decl) = current_function_decl;
2711 DECL_MODE (decl) = VOIDmode;
2713 /* Say where one reference is to the label,
2714 for the sake of the error if it is not defined. */
2715 DECL_SOURCE_LINE (decl) = lineno;
2716 DECL_SOURCE_FILE (decl) = input_filename;
2718 IDENTIFIER_LABEL_VALUE (id) = decl;
2720 named_labels = tree_cons (NULL_TREE, decl, named_labels);
2725 /* Make a label named NAME in the current function,
2726 shadowing silently any that may be inherited from containing functions
2727 or containing scopes.
2729 Note that valid use, if the label being shadowed
2730 comes from another scope in the same function,
2731 requires calling declare_nonlocal_label right away. */
2737 register tree decl = IDENTIFIER_LABEL_VALUE (name);
2743 /* Check to make sure that the label hasn't already been declared
2744 at this label scope */
2745 for (dup = named_labels; dup; dup = TREE_CHAIN (dup))
2746 if (TREE_VALUE (dup) == decl)
2748 error ("duplicate label declaration `%s'",
2749 IDENTIFIER_POINTER (name));
2750 error_with_decl (TREE_VALUE (dup),
2751 "this is a previous declaration");
2752 /* Just use the previous declaration. */
2753 return lookup_label (name);
2756 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2757 IDENTIFIER_LABEL_VALUE (name) = decl = 0;
2760 return lookup_label (name);
2763 /* Define a label, specifying the location in the source file.
2764 Return the LABEL_DECL node for the label, if the definition is valid.
2765 Otherwise return 0. */
2768 define_label (filename, line, name)
2769 const char *filename;
2773 tree decl = lookup_label (name);
2775 /* If label with this name is known from an outer context, shadow it. */
2776 if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl)
2778 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2779 IDENTIFIER_LABEL_VALUE (name) = 0;
2780 decl = lookup_label (name);
2783 if (warn_traditional && !in_system_header && lookup_name (name))
2784 warning_with_file_and_line (filename, line,
2785 "traditional C lacks a separate namespace for labels, identifier `%s' conflicts",
2786 IDENTIFIER_POINTER (name));
2788 if (DECL_INITIAL (decl) != 0)
2790 error_with_file_and_line (filename, line, "duplicate label `%s'",
2791 IDENTIFIER_POINTER (name));
2796 /* Mark label as having been defined. */
2797 DECL_INITIAL (decl) = error_mark_node;
2798 /* Say where in the source. */
2799 DECL_SOURCE_FILE (decl) = filename;
2800 DECL_SOURCE_LINE (decl) = line;
2805 /* Return the list of declarations of the current level.
2806 Note that this list is in reverse order unless/until
2807 you nreverse it; and when you do nreverse it, you must
2808 store the result back using `storedecls' or you will lose. */
2813 return current_binding_level->names;
2816 /* Return the list of type-tags (for structs, etc) of the current level. */
2821 return current_binding_level->tags;
2824 /* Store the list of declarations of the current level.
2825 This is done for the parameter declarations of a function being defined,
2826 after they are modified in the light of any missing parameters. */
2832 current_binding_level->names = decls;
2835 /* Similarly, store the list of tags of the current level. */
2841 current_binding_level->tags = tags;
2844 /* Given NAME, an IDENTIFIER_NODE,
2845 return the structure (or union or enum) definition for that name.
2846 Searches binding levels from BINDING_LEVEL up to the global level.
2847 If THISLEVEL_ONLY is nonzero, searches only the specified context
2848 (but skips any tag-transparent contexts to find one that is
2849 meaningful for tags).
2850 CODE says which kind of type the caller wants;
2851 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2852 If the wrong kind of type is found, an error is reported. */
2855 lookup_tag (code, name, binding_level, thislevel_only)
2856 enum tree_code code;
2857 struct binding_level *binding_level;
2861 register struct binding_level *level;
2863 for (level = binding_level; level; level = level->level_chain)
2866 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2868 if (TREE_PURPOSE (tail) == name)
2870 if (TREE_CODE (TREE_VALUE (tail)) != code)
2872 /* Definition isn't the kind we were looking for. */
2873 pending_invalid_xref = name;
2874 pending_invalid_xref_file = input_filename;
2875 pending_invalid_xref_line = lineno;
2877 return TREE_VALUE (tail);
2880 if (thislevel_only && ! level->tag_transparent)
2886 /* Print an error message now
2887 for a recent invalid struct, union or enum cross reference.
2888 We don't print them immediately because they are not invalid
2889 when used in the `struct foo;' construct for shadowing. */
2892 pending_xref_error ()
2894 if (pending_invalid_xref != 0)
2895 error_with_file_and_line (pending_invalid_xref_file,
2896 pending_invalid_xref_line,
2897 "`%s' defined as wrong kind of tag",
2898 IDENTIFIER_POINTER (pending_invalid_xref));
2899 pending_invalid_xref = 0;
2902 /* Given a type, find the tag that was defined for it and return the tag name.
2903 Otherwise return 0. */
2906 lookup_tag_reverse (type)
2909 register struct binding_level *level;
2911 for (level = current_binding_level; level; level = level->level_chain)
2914 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2916 if (TREE_VALUE (tail) == type)
2917 return TREE_PURPOSE (tail);
2923 /* Look up NAME in the current binding level and its superiors
2924 in the namespace of variables, functions and typedefs.
2925 Return a ..._DECL node of some kind representing its definition,
2926 or return 0 if it is undefined. */
2934 if (current_binding_level != global_binding_level
2935 && IDENTIFIER_LOCAL_VALUE (name))
2936 val = IDENTIFIER_LOCAL_VALUE (name);
2938 val = IDENTIFIER_GLOBAL_VALUE (name);
2942 /* Similar to `lookup_name' but look only at current binding level. */
2945 lookup_name_current_level (name)
2950 if (current_binding_level == global_binding_level)
2951 return IDENTIFIER_GLOBAL_VALUE (name);
2953 if (IDENTIFIER_LOCAL_VALUE (name) == 0)
2956 for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
2957 if (DECL_NAME (t) == name)
2963 /* Mark ARG for GC. */
2966 mark_binding_level (arg)
2969 struct binding_level *level = *(struct binding_level **) arg;
2971 for (; level != 0; level = level->level_chain)
2973 ggc_mark_tree (level->names);
2974 ggc_mark_tree (level->tags);
2975 ggc_mark_tree (level->shadowed);
2976 ggc_mark_tree (level->blocks);
2977 ggc_mark_tree (level->this_block);
2978 ggc_mark_tree (level->parm_order);
2982 /* Create the predefined scalar types of C,
2983 and some nodes representing standard constants (0, 1, (void *) 0).
2984 Initialize the global binding level.
2985 Make definitions for built-in primitive functions. */
2988 init_decl_processing ()
2990 register tree endlink;
2991 tree ptr_ftype_void, ptr_ftype_ptr;
2992 int wchar_type_size;
2993 tree array_domain_type;
2996 current_function_decl = NULL;
2997 named_labels = NULL;
2998 current_binding_level = NULL_BINDING_LEVEL;
2999 free_binding_level = NULL_BINDING_LEVEL;
3001 /* Make the binding_level structure for global names. */
3003 global_binding_level = current_binding_level;
3005 build_common_tree_nodes (flag_signed_char);
3007 /* Define `int' and `char' first so that dbx will output them first. */
3008 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_INT],
3009 integer_type_node));
3010 pushdecl (build_decl (TYPE_DECL, get_identifier ("char"),
3012 pushdecl (build_decl (TYPE_DECL, get_identifier ("long int"),
3013 long_integer_type_node));
3014 pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
3015 unsigned_type_node));
3016 pushdecl (build_decl (TYPE_DECL, get_identifier ("long unsigned int"),
3017 long_unsigned_type_node));
3018 pushdecl (build_decl (TYPE_DECL, get_identifier ("long long int"),
3019 long_long_integer_type_node));
3020 pushdecl (build_decl (TYPE_DECL, get_identifier ("long long unsigned int"),
3021 long_long_unsigned_type_node));
3022 pushdecl (build_decl (TYPE_DECL, get_identifier ("short int"),
3023 short_integer_type_node));
3024 pushdecl (build_decl (TYPE_DECL, get_identifier ("short unsigned int"),
3025 short_unsigned_type_node));
3026 pushdecl (build_decl (TYPE_DECL, get_identifier ("signed char"),
3027 signed_char_type_node));
3028 pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
3029 unsigned_char_type_node));
3030 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intQI_type_node));
3031 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intHI_type_node));
3032 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intSI_type_node));
3033 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intDI_type_node));
3034 #if HOST_BITS_PER_WIDE_INT >= 64
3035 pushdecl (build_decl (TYPE_DECL, NULL_TREE, intTI_type_node));
3037 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intQI_type_node));
3038 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intHI_type_node));
3039 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intSI_type_node));
3040 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intDI_type_node));
3041 #if HOST_BITS_PER_WIDE_INT >= 64
3042 pushdecl (build_decl (TYPE_DECL, NULL_TREE, unsigned_intTI_type_node));
3045 /* `unsigned long' is the standard type for sizeof.
3046 Traditionally, use a signed type.
3047 Note that stddef.h uses `unsigned long',
3048 and this must agree, even if long and int are the same size. */
3049 t = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
3050 signed_size_type_node = signed_type (t);
3051 if (flag_traditional && TREE_UNSIGNED (t))
3052 t = signed_type (t);
3054 c_size_type_node = t;
3057 /* Create the widest literal types. */
3058 widest_integer_literal_type_node
3059 = make_signed_type (HOST_BITS_PER_WIDE_INT * 2);
3060 widest_unsigned_literal_type_node
3061 = make_unsigned_type (HOST_BITS_PER_WIDE_INT * 2);
3062 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3063 widest_integer_literal_type_node));
3064 pushdecl (build_decl (TYPE_DECL, NULL_TREE,
3065 widest_unsigned_literal_type_node));
3067 build_common_tree_nodes_2 (flag_short_double);
3069 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_FLOAT],
3071 pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_DOUBLE],
3073 pushdecl (build_decl (TYPE_DECL, get_identifier ("long double"),
3074 long_double_type_node));
3075 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
3076 complex_integer_type_node));
3077 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
3078 complex_float_type_node));
3079 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
3080 complex_double_type_node));
3081 pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
3082 complex_long_double_type_node));
3083 pushdecl (build_decl (TYPE_DECL,
3084 ridpointers[(int) RID_VOID], void_type_node));
3086 #ifdef MD_INIT_BUILTINS
3090 wchar_type_node = get_identifier (flag_short_wchar
3091 ? "short unsigned int"
3093 wchar_type_node = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (wchar_type_node));
3094 wchar_type_size = TYPE_PRECISION (wchar_type_node);
3095 signed_wchar_type_node = signed_type (wchar_type_node);
3096 unsigned_wchar_type_node = unsigned_type (wchar_type_node);
3099 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WINT_TYPE)));
3102 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (INTMAX_TYPE)));
3104 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (UINTMAX_TYPE)));
3106 boolean_type_node = integer_type_node;
3107 boolean_true_node = integer_one_node;
3108 boolean_false_node = integer_zero_node;
3110 /* With GCC, C99's _Bool is always of size 1. */
3111 c_bool_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
3112 TREE_SET_CODE (c_bool_type_node, BOOLEAN_TYPE);
3113 TYPE_MAX_VALUE (c_bool_type_node) = build_int_2 (1, 0);
3114 TREE_TYPE (TYPE_MAX_VALUE (c_bool_type_node)) = c_bool_type_node;
3115 TYPE_PRECISION (c_bool_type_node) = 1;
3116 pushdecl (build_decl (TYPE_DECL, get_identifier ("_Bool"),
3118 c_bool_false_node = build_int_2 (0, 0);
3119 TREE_TYPE (c_bool_false_node) = c_bool_type_node;
3120 c_bool_true_node = build_int_2 (1, 0);
3121 TREE_TYPE (c_bool_true_node) = c_bool_type_node;
3123 string_type_node = build_pointer_type (char_type_node);
3124 const_string_type_node
3125 = build_pointer_type (build_type_variant (char_type_node, 1, 0));
3127 /* Make a type to be the domain of a few array types
3128 whose domains don't really matter.
3129 200 is small enough that it always fits in size_t
3130 and large enough that it can hold most function names for the
3131 initializations of __FUNCTION__ and __PRETTY_FUNCTION__. */
3132 array_domain_type = build_index_type (build_int_2 (200, 0));
3134 /* make a type for arrays of characters.
3135 With luck nothing will ever really depend on the length of this
3137 char_array_type_node = build_array_type (char_type_node, array_domain_type);
3139 /* Likewise for arrays of ints. */
3141 = build_array_type (integer_type_node, array_domain_type);
3143 /* This is for wide string constants. */
3144 wchar_array_type_node
3145 = build_array_type (wchar_type_node, array_domain_type);
3147 void_list_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
3149 default_function_type = build_function_type (integer_type_node, NULL_TREE);
3151 = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
3152 unsigned_ptrdiff_type_node = unsigned_type (ptrdiff_type_node);
3154 c_common_nodes_and_builtins ();
3156 endlink = void_list_node;
3157 ptr_ftype_void = build_function_type (ptr_type_node, endlink);
3159 = build_function_type (ptr_type_node,
3160 tree_cons (NULL_TREE, ptr_type_node, endlink));
3162 /* Types which are common to the fortran compiler and libf2c. When
3163 changing these, you also need to be concerned with f/com.h. */
3165 if (TYPE_PRECISION (float_type_node)
3166 == TYPE_PRECISION (long_integer_type_node))
3168 g77_integer_type_node = long_integer_type_node;
3169 g77_uinteger_type_node = long_unsigned_type_node;
3171 else if (TYPE_PRECISION (float_type_node)
3172 == TYPE_PRECISION (integer_type_node))
3174 g77_integer_type_node = integer_type_node;
3175 g77_uinteger_type_node = unsigned_type_node;
3178 g77_integer_type_node = g77_uinteger_type_node = NULL_TREE;
3180 if (g77_integer_type_node != NULL_TREE)
3182 pushdecl (build_decl (TYPE_DECL, get_identifier ("__g77_integer"),
3183 g77_integer_type_node));
3184 pushdecl (build_decl (TYPE_DECL, get_identifier ("__g77_uinteger"),
3185 g77_uinteger_type_node));
3188 if (TYPE_PRECISION (float_type_node) * 2
3189 == TYPE_PRECISION (long_integer_type_node))
3191 g77_longint_type_node = long_integer_type_node;
3192 g77_ulongint_type_node = long_unsigned_type_node;
3194 else if (TYPE_PRECISION (float_type_node) * 2
3195 == TYPE_PRECISION (long_long_integer_type_node))
3197 g77_longint_type_node = long_long_integer_type_node;
3198 g77_ulongint_type_node = long_long_unsigned_type_node;
3201 g77_longint_type_node = g77_ulongint_type_node = NULL_TREE;
3203 if (g77_longint_type_node != NULL_TREE)
3205 pushdecl (build_decl (TYPE_DECL, get_identifier ("__g77_longint"),
3206 g77_longint_type_node));
3207 pushdecl (build_decl (TYPE_DECL, get_identifier ("__g77_ulongint"),
3208 g77_ulongint_type_node));
3211 builtin_function ("__builtin_aggregate_incoming_address",
3212 build_function_type (ptr_type_node, NULL_TREE),
3213 BUILT_IN_AGGREGATE_INCOMING_ADDRESS,
3214 BUILT_IN_NORMAL, NULL_PTR);
3216 /* Hooks for the DWARF 2 __throw routine. */
3217 builtin_function ("__builtin_unwind_init",
3218 build_function_type (void_type_node, endlink),
3219 BUILT_IN_UNWIND_INIT, BUILT_IN_NORMAL, NULL_PTR);
3220 builtin_function ("__builtin_dwarf_cfa", ptr_ftype_void,
3221 BUILT_IN_DWARF_CFA, BUILT_IN_NORMAL, NULL_PTR);
3222 builtin_function ("__builtin_dwarf_fp_regnum",
3223 build_function_type (unsigned_type_node, endlink),
3224 BUILT_IN_DWARF_FP_REGNUM, BUILT_IN_NORMAL, NULL_PTR);
3225 builtin_function ("__builtin_init_dwarf_reg_size_table", void_ftype_ptr,
3226 BUILT_IN_INIT_DWARF_REG_SIZES, BUILT_IN_NORMAL, NULL_PTR);
3227 builtin_function ("__builtin_frob_return_addr", ptr_ftype_ptr,
3228 BUILT_IN_FROB_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR);
3229 builtin_function ("__builtin_extract_return_addr", ptr_ftype_ptr,
3230 BUILT_IN_EXTRACT_RETURN_ADDR, BUILT_IN_NORMAL, NULL_PTR);
3232 ("__builtin_eh_return",
3233 build_function_type (void_type_node,
3234 tree_cons (NULL_TREE, ptr_type_node,
3235 tree_cons (NULL_TREE,
3236 type_for_mode (ptr_mode, 0),
3237 tree_cons (NULL_TREE,
3240 BUILT_IN_EH_RETURN, BUILT_IN_NORMAL, NULL_PTR);
3242 pedantic_lvalues = pedantic;
3244 /* Create the global bindings for __FUNCTION__, __PRETTY_FUNCTION__,
3246 function_id_node = get_identifier ("__FUNCTION__");
3247 pretty_function_id_node = get_identifier ("__PRETTY_FUNCTION__");
3248 func_id_node = get_identifier ("__func__");
3249 make_fname_decl = c_make_fname_decl;
3250 declare_function_name ();
3252 start_identifier_warnings ();
3254 /* Prepare to check format strings against argument lists. */
3255 init_function_format_info ();
3257 incomplete_decl_finalize_hook = finish_incomplete_decl;
3259 /* Record our roots. */
3261 ggc_add_tree_root (c_global_trees, CTI_MAX);
3262 ggc_add_root (&c_stmt_tree, 1, sizeof c_stmt_tree, mark_stmt_tree);
3263 ggc_add_tree_root (&c_scope_stmt_stack, 1);
3264 ggc_add_tree_root (&named_labels, 1);
3265 ggc_add_tree_root (&shadowed_labels, 1);
3266 ggc_add_root (¤t_binding_level, 1, sizeof current_binding_level,
3267 mark_binding_level);
3268 ggc_add_root (&label_level_chain, 1, sizeof label_level_chain,
3269 mark_binding_level);
3270 ggc_add_tree_root (&static_ctors, 1);
3271 ggc_add_tree_root (&static_dtors, 1);
3274 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3275 decl, NAME is the initialization string and TYPE_DEP indicates whether
3276 NAME depended on the type of the function. As we don't yet implement
3277 delayed emission of static data, we mark the decl as emitted
3278 so it is not placed in the output. Anything using it must therefore pull
3279 out the STRING_CST initializer directly. This does mean that these names
3280 are string merging candidates, which is wrong for C99's __func__. FIXME. */
3283 c_make_fname_decl (id, name, type_dep)
3286 int type_dep ATTRIBUTE_UNUSED;
3288 tree decl, type, init;
3289 size_t length = strlen (name);
3291 type = build_array_type
3292 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
3293 build_index_type (build_int_2 (length, 0)));
3295 decl = build_decl (VAR_DECL, id, type);
3296 TREE_STATIC (decl) = 1;
3297 TREE_READONLY (decl) = 1;
3298 TREE_ASM_WRITTEN (decl) = 1;
3299 DECL_SOURCE_LINE (decl) = 0;
3300 DECL_ARTIFICIAL (decl) = 1;
3301 DECL_IN_SYSTEM_HEADER (decl) = 1;
3302 DECL_IGNORED_P (decl) = 1;
3303 init = build_string (length + 1, name);
3304 TREE_TYPE (init) = type;
3305 DECL_INITIAL (decl) = init;
3306 finish_decl (pushdecl (decl), init, NULL_TREE);
3311 /* Return a definition for a builtin function named NAME and whose data type
3312 is TYPE. TYPE should be a function type with argument types.
3313 FUNCTION_CODE tells later passes how to compile calls to this function.
3314 See tree.h for its possible values.
3316 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3317 the name to be called if we can't opencode the function. */
3320 builtin_function (name, type, function_code, class, library_name)
3324 enum built_in_class class;
3325 const char *library_name;
3327 tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
3328 DECL_EXTERNAL (decl) = 1;
3329 TREE_PUBLIC (decl) = 1;
3330 /* If -traditional, permit redefining a builtin function any way you like.
3331 (Though really, if the program redefines these functions,
3332 it probably won't work right unless compiled with -fno-builtin.) */
3333 if (flag_traditional && name[0] != '_')
3334 DECL_BUILT_IN_NONANSI (decl) = 1;
3336 DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
3337 make_decl_rtl (decl, NULL_PTR, 1);
3339 DECL_BUILT_IN_CLASS (decl) = class;
3340 DECL_FUNCTION_CODE (decl) = function_code;
3342 /* Warn if a function in the namespace for users
3343 is used without an occasion to consider it declared. */
3344 if (name[0] != '_' || name[1] != '_')
3345 C_DECL_ANTICIPATED (decl) = 1;
3350 /* Called when a declaration is seen that contains no names to declare.
3351 If its type is a reference to a structure, union or enum inherited
3352 from a containing scope, shadow that tag name for the current scope
3353 with a forward reference.
3354 If its type defines a new named structure or union
3355 or defines an enum, it is valid but we need not do anything here.
3356 Otherwise, it is an error. */
3359 shadow_tag (declspecs)
3362 shadow_tag_warned (declspecs, 0);
3366 shadow_tag_warned (declspecs, warned)
3369 /* 1 => we have done a pedwarn. 2 => we have done a warning, but
3376 pending_invalid_xref = 0;
3378 /* Remove the attributes from declspecs, since they will confuse the
3380 split_specs_attrs (declspecs, &specs, &attrs);
3382 for (link = specs; link; link = TREE_CHAIN (link))
3384 register tree value = TREE_VALUE (link);
3385 register enum tree_code code = TREE_CODE (value);
3387 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3388 /* Used to test also that TYPE_SIZE (value) != 0.
3389 That caused warning for `struct foo;' at top level in the file. */
3391 register tree name = lookup_tag_reverse (value);
3398 if (warned != 1 && code != ENUMERAL_TYPE)
3399 /* Empty unnamed enum OK */
3401 pedwarn ("unnamed struct/union that defines no instances");
3407 t = lookup_tag (code, name, current_binding_level, 1);
3411 t = make_node (code);
3418 if (!warned && ! in_system_header)
3420 warning ("useless keyword or type name in empty declaration");
3427 error ("two types specified in one empty declaration");
3432 pedwarn ("empty declaration");
3436 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3439 groktypename (typename)
3442 if (TREE_CODE (typename) != TREE_LIST)
3444 return grokdeclarator (TREE_VALUE (typename),
3445 TREE_PURPOSE (typename),
3449 /* Return a PARM_DECL node for a given pair of specs and declarator. */
3452 groktypename_in_parm_context (typename)
3455 if (TREE_CODE (typename) != TREE_LIST)
3457 return grokdeclarator (TREE_VALUE (typename),
3458 TREE_PURPOSE (typename),
3462 /* Decode a declarator in an ordinary declaration or data definition.
3463 This is called as soon as the type information and variable name
3464 have been parsed, before parsing the initializer if any.
3465 Here we create the ..._DECL node, fill in its type,
3466 and put it on the list of decls for the current context.
3467 The ..._DECL node is returned as the value.
3469 Exception: for arrays where the length is not specified,
3470 the type is left null, to be filled in by `finish_decl'.
3472 Function definitions do not come here; they go to start_function
3473 instead. However, external and forward declarations of functions
3474 do go through here. Structure field declarations are done by
3475 grokfield and not through here. */
3478 start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
3479 tree declarator, declspecs;
3481 tree attributes, prefix_attributes;
3483 register tree decl = grokdeclarator (declarator, declspecs,
3484 NORMAL, initialized);
3487 if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
3488 && MAIN_NAME_P (DECL_NAME (decl)))
3489 warning_with_decl (decl, "`%s' is usually a function");
3492 /* Is it valid for this decl to have an initializer at all?
3493 If not, set INITIALIZED to zero, which will indirectly
3494 tell `finish_decl' to ignore the initializer once it is parsed. */
3495 switch (TREE_CODE (decl))
3498 /* typedef foo = bar means give foo the same type as bar.
3499 We haven't parsed bar yet, so `finish_decl' will fix that up.
3500 Any other case of an initialization in a TYPE_DECL is an error. */
3501 if (pedantic || list_length (declspecs) > 1)
3503 error ("typedef `%s' is initialized",
3504 IDENTIFIER_POINTER (DECL_NAME (decl)));
3510 error ("function `%s' is initialized like a variable",
3511 IDENTIFIER_POINTER (DECL_NAME (decl)));
3516 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3517 error ("parameter `%s' is initialized",
3518 IDENTIFIER_POINTER (DECL_NAME (decl)));
3523 /* Don't allow initializations for incomplete types
3524 except for arrays which might be completed by the initialization. */
3526 /* This can happen if the array size is an undefined macro. We already
3527 gave a warning, so we don't need another one. */
3528 if (TREE_TYPE (decl) == error_mark_node)
3530 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3532 /* A complete type is ok if size is fixed. */
3534 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3535 || C_DECL_VARIABLE_SIZE (decl))
3537 error ("variable-sized object may not be initialized");
3541 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3543 error ("variable `%s' has initializer but incomplete type",
3544 IDENTIFIER_POINTER (DECL_NAME (decl)));
3547 else if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
3549 error ("elements of array `%s' have incomplete type",
3550 IDENTIFIER_POINTER (DECL_NAME (decl)));
3558 /* Seems redundant with grokdeclarator. */
3559 if (current_binding_level != global_binding_level
3560 && DECL_EXTERNAL (decl)
3561 && TREE_CODE (decl) != FUNCTION_DECL)
3562 warning ("declaration of `%s' has `extern' and is initialized",
3563 IDENTIFIER_POINTER (DECL_NAME (decl)));
3565 DECL_EXTERNAL (decl) = 0;
3566 if (current_binding_level == global_binding_level)
3567 TREE_STATIC (decl) = 1;
3569 /* Tell `pushdecl' this is an initialized decl
3570 even though we don't yet have the initializer expression.
3571 Also tell `finish_decl' it may store the real initializer. */
3572 DECL_INITIAL (decl) = error_mark_node;
3575 /* If this is a function declaration, write a record describing it to the
3576 prototypes file (if requested). */
3578 if (TREE_CODE (decl) == FUNCTION_DECL)
3579 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3581 /* ANSI specifies that a tentative definition which is not merged with
3582 a non-tentative definition behaves exactly like a definition with an
3583 initializer equal to zero. (Section 3.7.2)
3584 -fno-common gives strict ANSI behavior. Usually you don't want it.
3585 This matters only for variables with external linkage. */
3586 if (! flag_no_common || ! TREE_PUBLIC (decl))
3587 DECL_COMMON (decl) = 1;
3589 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
3590 SET_DEFAULT_DECL_ATTRIBUTES (decl, attributes);
3593 /* Set attributes here so if duplicate decl, will have proper attributes. */
3594 decl_attributes (decl, attributes, prefix_attributes);
3596 /* Add this decl to the current binding level.
3597 TEM may equal DECL or it may be a previous decl of the same name. */
3598 tem = pushdecl (decl);
3600 /* For a local variable, define the RTL now. */
3601 if (current_binding_level != global_binding_level
3602 /* But not if this is a duplicate decl
3603 and we preserved the rtl from the previous one
3604 (which may or may not happen). */
3605 && DECL_RTL (tem) == 0
3606 && !DECL_CONTEXT (tem))
3608 if (TREE_TYPE (tem) != error_mark_node
3609 && COMPLETE_TYPE_P (TREE_TYPE (tem)))
3611 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
3612 && DECL_INITIAL (tem) != 0)
3619 /* Finish processing of a declaration;
3620 install its initial value.
3621 If the length of an array type is not known before,
3622 it must be determined now, from the initial value, or it is an error. */
3625 finish_decl (decl, init, asmspec_tree)
3629 register tree type = TREE_TYPE (decl);
3630 int was_incomplete = (DECL_SIZE (decl) == 0);
3631 const char *asmspec = 0;
3633 /* If a name was specified, get the string. */
3635 asmspec = TREE_STRING_POINTER (asmspec_tree);
3637 /* If `start_decl' didn't like having an initialization, ignore it now. */
3639 if (init != 0 && DECL_INITIAL (decl) == 0)
3641 /* Don't crash if parm is initialized. */
3642 if (TREE_CODE (decl) == PARM_DECL)
3647 if (TREE_CODE (decl) != TYPE_DECL)
3648 store_init_value (decl, init);
3651 /* typedef foo = bar; store the type of bar as the type of foo. */
3652 TREE_TYPE (decl) = TREE_TYPE (init);
3653 DECL_INITIAL (decl) = init = 0;
3657 /* Deduce size of array from initialization, if not already known */
3659 if (TREE_CODE (type) == ARRAY_TYPE
3660 && TYPE_DOMAIN (type) == 0
3661 && TREE_CODE (decl) != TYPE_DECL)
3664 = (TREE_STATIC (decl)
3665 /* Even if pedantic, an external linkage array
3666 may have incomplete type at first. */
3667 ? pedantic && !TREE_PUBLIC (decl)
3668 : !DECL_EXTERNAL (decl));
3670 = complete_array_type (type, DECL_INITIAL (decl), do_default);
3672 /* Get the completed type made by complete_array_type. */
3673 type = TREE_TYPE (decl);
3676 error_with_decl (decl, "initializer fails to determine size of `%s'");
3678 else if (failure == 2)
3681 error_with_decl (decl, "array size missing in `%s'");
3682 /* If a `static' var's size isn't known,
3683 make it extern as well as static, so it does not get
3685 If it is not `static', then do not mark extern;
3686 finish_incomplete_decl will give it a default size
3687 and it will get allocated. */
3688 else if (!pedantic && TREE_STATIC (decl) && ! TREE_PUBLIC (decl))
3689 DECL_EXTERNAL (decl) = 1;
3692 /* TYPE_MAX_VALUE is always one less than the number of elements
3693 in the array, because we start counting at zero. Therefore,
3694 warn only if the value is less than zero. */
3695 else if (pedantic && TYPE_DOMAIN (type) != 0
3696 && tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) < 0)
3697 error_with_decl (decl, "zero or negative size array `%s'");
3699 layout_decl (decl, 0);
3702 if (TREE_CODE (decl) == VAR_DECL)
3704 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
3705 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
3706 layout_decl (decl, 0);
3708 if (DECL_SIZE (decl) == 0
3709 /* Don't give an error if we already gave one earlier. */
3710 && TREE_TYPE (decl) != error_mark_node
3711 && (TREE_STATIC (decl)
3713 /* A static variable with an incomplete type
3714 is an error if it is initialized.
3715 Also if it is not file scope.
3716 Otherwise, let it through, but if it is not `extern'
3717 then it may cause an error message later. */
3718 (DECL_INITIAL (decl) != 0
3719 || DECL_CONTEXT (decl) != 0)
3721 /* An automatic variable with an incomplete type
3723 !DECL_EXTERNAL (decl)))
3725 error_with_decl (decl, "storage size of `%s' isn't known");
3726 TREE_TYPE (decl) = error_mark_node;
3729 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3730 && DECL_SIZE (decl) != 0)
3732 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3733 constant_expression_warning (DECL_SIZE (decl));
3735 error_with_decl (decl, "storage size of `%s' isn't constant");
3738 if (TREE_USED (type))
3739 TREE_USED (decl) = 1;
3742 /* If this is a function and an assembler name is specified, it isn't
3743 builtin any more. Also reset DECL_RTL so we can give it its new
3745 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
3747 DECL_BUILT_IN_CLASS (decl) = NOT_BUILT_IN;
3748 DECL_RTL (decl) = 0;
3749 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
3752 /* Output the assembler code and/or RTL code for variables and functions,
3753 unless the type is an undefined structure or union.
3754 If not, it will get done when the type is completed. */
3756 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3758 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3759 maybe_objc_check_decl (decl);
3761 if (!DECL_CONTEXT (decl))
3762 rest_of_decl_compilation (decl, asmspec,
3763 (DECL_CONTEXT (decl) == 0
3764 || TREE_ASM_WRITTEN (decl)), 0);
3769 DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
3770 DECL_C_HARD_REGISTER (decl) = 1;
3772 add_decl_stmt (decl);
3775 if (DECL_CONTEXT (decl) != 0)
3777 /* Recompute the RTL of a local array now
3778 if it used to be an incomplete type. */
3780 && ! TREE_STATIC (decl) && ! DECL_EXTERNAL (decl))
3782 /* If we used it already as memory, it must stay in memory. */
3783 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3784 /* If it's still incomplete now, no init will save it. */
3785 if (DECL_SIZE (decl) == 0)
3786 DECL_INITIAL (decl) = 0;
3791 if (TREE_CODE (decl) == TYPE_DECL)
3793 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3794 maybe_objc_check_decl (decl);
3795 rest_of_decl_compilation (decl, NULL_PTR, DECL_CONTEXT (decl) == 0, 0);
3798 /* At the end of a declaration, throw away any variable type sizes
3799 of types defined inside that declaration. There is no use
3800 computing them in the following function definition. */
3801 if (current_binding_level == global_binding_level)
3802 get_pending_sizes ();
3805 /* If DECL has a cleanup, build and return that cleanup here.
3806 This is a callback called by expand_expr. */
3809 maybe_build_cleanup (decl)
3810 tree decl ATTRIBUTE_UNUSED;
3812 /* There are no cleanups in C. */
3816 /* Given a parsed parameter declaration,
3817 decode it into a PARM_DECL and push that on the current binding level.
3818 Also, for the sake of forward parm decls,
3819 record the given order of parms in `parm_order'. */
3822 push_parm_decl (parm)
3826 int old_immediate_size_expand = immediate_size_expand;
3827 /* Don't try computing parm sizes now -- wait till fn is called. */
3828 immediate_size_expand = 0;
3830 decl = grokdeclarator (TREE_VALUE (TREE_PURPOSE (parm)),
3831 TREE_PURPOSE (TREE_PURPOSE (parm)), PARM, 0);
3832 decl_attributes (decl, TREE_VALUE (TREE_VALUE (parm)),
3833 TREE_PURPOSE (TREE_VALUE (parm)));
3836 if (DECL_NAME (decl))
3839 olddecl = lookup_name (DECL_NAME (decl));
3840 if (pedantic && olddecl != 0 && TREE_CODE (olddecl) == TYPE_DECL)
3841 pedwarn_with_decl (decl,
3842 "ANSI C forbids parameter `%s' shadowing typedef");
3846 decl = pushdecl (decl);
3848 immediate_size_expand = old_immediate_size_expand;
3850 current_binding_level->parm_order
3851 = tree_cons (NULL_TREE, decl, current_binding_level->parm_order);
3853 /* Add this decl to the current binding level. */
3854 finish_decl (decl, NULL_TREE, NULL_TREE);
3857 /* Clear the given order of parms in `parm_order'.
3858 Used at start of parm list,
3859 and also at semicolon terminating forward decls. */
3864 current_binding_level->parm_order = NULL_TREE;
3867 /* Make TYPE a complete type based on INITIAL_VALUE.
3868 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
3869 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
3872 complete_array_type (type, initial_value, do_default)
3877 register tree maxindex = NULL_TREE;
3882 /* Note MAXINDEX is really the maximum index,
3883 one less than the size. */
3884 if (TREE_CODE (initial_value) == STRING_CST)
3887 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
3888 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
3891 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3893 tree elts = CONSTRUCTOR_ELTS (initial_value);
3894 maxindex = build_int_2 (-1, -1);
3895 for (; elts; elts = TREE_CHAIN (elts))
3897 if (TREE_PURPOSE (elts))
3898 maxindex = TREE_PURPOSE (elts);
3900 maxindex = fold (build (PLUS_EXPR, integer_type_node,
3901 maxindex, integer_one_node));
3903 maxindex = copy_node (maxindex);
3907 /* Make an error message unless that happened already. */
3908 if (initial_value != error_mark_node)
3911 /* Prevent further error messages. */
3912 maxindex = build_int_2 (0, 0);
3919 maxindex = build_int_2 (0, 0);
3925 TYPE_DOMAIN (type) = build_index_type (maxindex);
3926 if (!TREE_TYPE (maxindex))
3927 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
3930 /* Lay out the type now that we can get the real answer. */
3937 /* Given declspecs and a declarator,
3938 determine the name and type of the object declared
3939 and construct a ..._DECL node for it.
3940 (In one case we can return a ..._TYPE node instead.
3941 For invalid input we sometimes return 0.)
3943 DECLSPECS is a chain of tree_list nodes whose value fields
3944 are the storage classes and type specifiers.
3946 DECL_CONTEXT says which syntactic context this declaration is in:
3947 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3948 FUNCDEF for a function definition. Like NORMAL but a few different
3949 error messages in each case. Return value may be zero meaning
3950 this definition is too screwy to try to parse.
3951 PARM for a parameter declaration (either within a function prototype
3952 or before a function body). Make a PARM_DECL, or return void_type_node.
3953 TYPENAME if for a typename (in a cast or sizeof).
3954 Don't make a DECL node; just return the ..._TYPE node.
3955 FIELD for a struct or union field; make a FIELD_DECL.
3956 BITFIELD for a field with specified width.
3957 INITIALIZED is 1 if the decl has an initializer.
3959 In the TYPENAME case, DECLARATOR is really an absolute declarator.
3960 It may also be so in the PARM case, for a prototype where the
3961 argument type is specified but not the name.
3963 This function is where the complicated C meanings of `static'
3964 and `extern' are interpreted. */
3967 grokdeclarator (declarator, declspecs, decl_context, initialized)
3970 enum decl_context decl_context;
3975 tree type = NULL_TREE;
3980 int type_quals = TYPE_UNQUALIFIED;
3982 int explicit_int = 0;
3983 int explicit_char = 0;
3984 int defaulted_int = 0;
3985 tree typedef_decl = 0;
3987 tree typedef_type = 0;
3988 int funcdef_flag = 0;
3989 enum tree_code innermost_code = ERROR_MARK;
3991 int size_varies = 0;
3992 tree decl_machine_attr = NULL_TREE;
3994 if (decl_context == BITFIELD)
3995 bitfield = 1, decl_context = FIELD;
3997 if (decl_context == FUNCDEF)
3998 funcdef_flag = 1, decl_context = NORMAL;
4000 /* Look inside a declarator for the name being declared
4001 and get it as a string, for an error message. */
4003 register tree decl = declarator;
4007 switch (TREE_CODE (decl))
4012 innermost_code = TREE_CODE (decl);
4013 decl = TREE_OPERAND (decl, 0);
4016 case IDENTIFIER_NODE:
4017 name = IDENTIFIER_POINTER (decl);
4028 /* A function definition's declarator must have the form of
4029 a function declarator. */
4031 if (funcdef_flag && innermost_code != CALL_EXPR)
4034 /* Anything declared one level down from the top level
4035 must be one of the parameters of a function
4036 (because the body is at least two levels down). */
4038 /* If this looks like a function definition, make it one,
4039 even if it occurs where parms are expected.
4040 Then store_parm_decls will reject it and not use it as a parm. */
4041 if (decl_context == NORMAL && !funcdef_flag
4042 && current_binding_level->parm_flag)
4043 decl_context = PARM;
4045 /* Look through the decl specs and record which ones appear.
4046 Some typespecs are defined as built-in typenames.
4047 Others, the ones that are modifiers of other types,
4048 are represented by bits in SPECBITS: set the bits for
4049 the modifiers that appear. Storage class keywords are also in SPECBITS.
4051 If there is a typedef name or a type, store the type in TYPE.
4052 This includes builtin typedefs such as `int'.
4054 Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
4055 and did not come from a user typedef.
4057 Set LONGLONG if `long' is mentioned twice. */
4059 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
4061 register tree id = TREE_VALUE (spec);
4063 if (id == ridpointers[(int) RID_INT])
4065 if (id == ridpointers[(int) RID_CHAR])
4068 if (TREE_CODE (id) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (id))
4070 enum rid i = C_RID_CODE (id);
4071 if (i <= RID_LAST_MODIFIER)
4073 if (i == RID_LONG && specbits & (1<<i))
4076 error ("`long long long' is too long for GCC");
4079 if (pedantic && !flag_isoc99 && ! in_system_header
4081 pedwarn ("ISO C89 does not support `long long'");
4085 else if (specbits & (1 << i))
4086 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
4092 error ("two or more data types in declaration of `%s'", name);
4093 /* Actual typedefs come to us as TYPE_DECL nodes. */
4094 else if (TREE_CODE (id) == TYPE_DECL)
4096 type = TREE_TYPE (id);
4097 decl_machine_attr = DECL_MACHINE_ATTRIBUTES (id);
4100 /* Built-in types come as identifiers. */
4101 else if (TREE_CODE (id) == IDENTIFIER_NODE)
4103 register tree t = lookup_name (id);
4104 if (TREE_TYPE (t) == error_mark_node)
4106 else if (!t || TREE_CODE (t) != TYPE_DECL)
4107 error ("`%s' fails to be a typedef or built in type",
4108 IDENTIFIER_POINTER (id));
4111 type = TREE_TYPE (t);
4115 else if (TREE_CODE (id) != ERROR_MARK)
4122 typedef_type = type;
4124 size_varies = C_TYPE_VARIABLE_SIZE (type);
4126 /* No type at all: default to `int', and set DEFAULTED_INT
4127 because it was not a user-defined typedef. */
4131 if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4132 | (1 << (int) RID_SIGNED)
4133 | (1 << (int) RID_UNSIGNED)
4134 | (1 << (int) RID_COMPLEX))))
4135 /* Don't warn about typedef foo = bar. */
4136 && ! (specbits & (1 << (int) RID_TYPEDEF) && initialized)
4137 && ! in_system_header)
4139 /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type
4140 and this is a function, or if -Wimplicit; prefer the former
4141 warning since it is more explicit. */
4142 if ((warn_implicit_int || warn_return_type) && funcdef_flag)
4143 warn_about_return_type = 1;
4144 else if (warn_implicit_int || flag_isoc99)
4145 pedwarn_c99 ("type defaults to `int' in declaration of `%s'",
4150 type = integer_type_node;
4153 /* Now process the modifiers that were specified
4154 and check for invalid combinations. */
4156 /* Long double is a special combination. */
4158 if ((specbits & 1 << (int) RID_LONG) && ! longlong
4159 && TYPE_MAIN_VARIANT (type) == double_type_node)
4161 specbits &= ~(1 << (int) RID_LONG);
4162 type = long_double_type_node;
4165 /* Check all other uses of type modifiers. */
4167 if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4168 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
4172 if ((specbits & 1 << (int) RID_LONG)
4173 && (specbits & 1 << (int) RID_SHORT))
4174 error ("both long and short specified for `%s'", name);
4175 else if (((specbits & 1 << (int) RID_LONG)
4176 || (specbits & 1 << (int) RID_SHORT))
4178 error ("long or short specified with char for `%s'", name);
4179 else if (((specbits & 1 << (int) RID_LONG)
4180 || (specbits & 1 << (int) RID_SHORT))
4181 && TREE_CODE (type) == REAL_TYPE)
4183 static int already = 0;
4185 error ("long or short specified with floating type for `%s'", name);
4186 if (! already && ! pedantic)
4188 error ("the only valid combination is `long double'");
4192 else if ((specbits & 1 << (int) RID_SIGNED)
4193 && (specbits & 1 << (int) RID_UNSIGNED))
4194 error ("both signed and unsigned specified for `%s'", name);
4195 else if (TREE_CODE (type) != INTEGER_TYPE)
4196 error ("long, short, signed or unsigned invalid for `%s'", name);
4200 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
4202 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
4204 if (flag_pedantic_errors)
4209 /* Discard the type modifiers if they are invalid. */
4212 specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4213 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
4218 if ((specbits & (1 << (int) RID_COMPLEX))
4219 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
4221 error ("complex invalid for `%s'", name);
4222 specbits &= ~(1 << (int) RID_COMPLEX);
4225 /* Decide whether an integer type is signed or not.
4226 Optionally treat bitfields as signed by default. */
4227 if (specbits & 1 << (int) RID_UNSIGNED
4228 /* Traditionally, all bitfields are unsigned. */
4229 || (bitfield && flag_traditional
4230 && (! explicit_flag_signed_bitfields || !flag_signed_bitfields))
4231 || (bitfield && ! flag_signed_bitfields
4232 && (explicit_int || defaulted_int || explicit_char
4233 /* A typedef for plain `int' without `signed'
4234 can be controlled just like plain `int'. */
4235 || ! (typedef_decl != 0
4236 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4237 && TREE_CODE (type) != ENUMERAL_TYPE
4238 && !(specbits & 1 << (int) RID_SIGNED)))
4241 type = long_long_unsigned_type_node;
4242 else if (specbits & 1 << (int) RID_LONG)
4243 type = long_unsigned_type_node;
4244 else if (specbits & 1 << (int) RID_SHORT)
4245 type = short_unsigned_type_node;
4246 else if (type == char_type_node)
4247 type = unsigned_char_type_node;
4248 else if (typedef_decl)
4249 type = unsigned_type (type);
4251 type = unsigned_type_node;
4253 else if ((specbits & 1 << (int) RID_SIGNED)
4254 && type == char_type_node)
4255 type = signed_char_type_node;
4257 type = long_long_integer_type_node;
4258 else if (specbits & 1 << (int) RID_LONG)
4259 type = long_integer_type_node;
4260 else if (specbits & 1 << (int) RID_SHORT)
4261 type = short_integer_type_node;
4263 if (specbits & 1 << (int) RID_COMPLEX)
4265 if (pedantic && !flag_isoc99)
4266 pedwarn ("ISO C89 does not support complex types");
4267 /* If we just have "complex", it is equivalent to
4268 "complex double", but if any modifiers at all are specified it is
4269 the complex form of TYPE. E.g, "complex short" is
4270 "complex short int". */
4272 if (defaulted_int && ! longlong
4273 && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4274 | (1 << (int) RID_SIGNED)
4275 | (1 << (int) RID_UNSIGNED))))
4278 pedwarn ("ISO C does not support plain `complex' meaning `double complex'");
4279 type = complex_double_type_node;
4281 else if (type == integer_type_node)
4284 pedwarn ("ISO C does not support complex integer types");
4285 type = complex_integer_type_node;
4287 else if (type == float_type_node)
4288 type = complex_float_type_node;
4289 else if (type == double_type_node)
4290 type = complex_double_type_node;
4291 else if (type == long_double_type_node)
4292 type = complex_long_double_type_node;
4296 pedwarn ("ISO C does not support complex integer types");
4297 type = build_complex_type (type);
4301 /* Figure out the type qualifiers for the declaration. There are
4302 two ways a declaration can become qualified. One is something
4303 like `const int i' where the `const' is explicit. Another is
4304 something like `typedef const int CI; CI i' where the type of the
4305 declaration contains the `const'. */
4306 constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (type);
4307 restrictp = !! (specbits & 1 << (int) RID_RESTRICT) + TYPE_RESTRICT (type);
4308 volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
4309 inlinep = !! (specbits & (1 << (int) RID_INLINE));
4310 if (constp > 1 && ! flag_isoc99)
4311 pedwarn ("duplicate `const'");
4312 if (restrictp > 1 && ! flag_isoc99)
4313 pedwarn ("duplicate `restrict'");
4314 if (volatilep > 1 && ! flag_isoc99)
4315 pedwarn ("duplicate `volatile'");
4316 if (! flag_gen_aux_info && (TYPE_QUALS (type)))
4317 type = TYPE_MAIN_VARIANT (type);
4318 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4319 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4320 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4322 /* Warn if two storage classes are given. Default to `auto'. */
4327 if (specbits & 1 << (int) RID_AUTO) nclasses++;
4328 if (specbits & 1 << (int) RID_STATIC) nclasses++;
4329 if (specbits & 1 << (int) RID_EXTERN) nclasses++;
4330 if (specbits & 1 << (int) RID_REGISTER) nclasses++;
4331 if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
4333 /* Warn about storage classes that are invalid for certain
4334 kinds of declarations (parameters, typenames, etc.). */
4337 error ("multiple storage classes in declaration of `%s'", name);
4338 else if (funcdef_flag
4340 & ((1 << (int) RID_REGISTER)
4341 | (1 << (int) RID_AUTO)
4342 | (1 << (int) RID_TYPEDEF))))
4344 if (specbits & 1 << (int) RID_AUTO
4345 && (pedantic || current_binding_level == global_binding_level))
4346 pedwarn ("function definition declared `auto'");
4347 if (specbits & 1 << (int) RID_REGISTER)
4348 error ("function definition declared `register'");
4349 if (specbits & 1 << (int) RID_TYPEDEF)
4350 error ("function definition declared `typedef'");
4351 specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4352 | (1 << (int) RID_AUTO));
4354 else if (decl_context != NORMAL && nclasses > 0)
4356 if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
4360 switch (decl_context)
4363 error ("storage class specified for structure field `%s'",
4367 error ("storage class specified for parameter `%s'", name);
4370 error ("storage class specified for typename");
4373 specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4374 | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
4375 | (1 << (int) RID_EXTERN));
4378 else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
4380 /* `extern' with initialization is invalid if not at top level. */
4381 if (current_binding_level == global_binding_level)
4382 warning ("`%s' initialized and declared `extern'", name);
4384 error ("`%s' has both `extern' and initializer", name);
4386 else if (specbits & 1 << (int) RID_EXTERN && funcdef_flag
4387 && current_binding_level != global_binding_level)
4388 error ("nested function `%s' declared `extern'", name);
4389 else if (current_binding_level == global_binding_level
4390 && specbits & (1 << (int) RID_AUTO))
4391 error ("top-level declaration of `%s' specifies `auto'", name);
4394 /* Now figure out the structure of the declarator proper.
4395 Descend through it, creating more complex types, until we reach
4396 the declared identifier (or NULL_TREE, in an absolute declarator). */
4398 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
4400 if (type == error_mark_node)
4402 declarator = TREE_OPERAND (declarator, 0);
4406 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
4407 an INDIRECT_REF (for *...),
4408 a CALL_EXPR (for ...(...)),
4409 an identifier (for the name being declared)
4410 or a null pointer (for the place in an absolute declarator
4411 where the name was omitted).
4412 For the last two cases, we have just exited the loop.
4414 At this point, TYPE is the type of elements of an array,
4415 or for a function to return, or for a pointer to point to.
4416 After this sequence of ifs, TYPE is the type of the
4417 array or function or pointer, and DECLARATOR has had its
4418 outermost layer removed. */
4420 if (TREE_CODE (declarator) == ARRAY_REF)
4422 register tree itype = NULL_TREE;
4423 register tree size = TREE_OPERAND (declarator, 1);
4424 /* The index is a signed object `sizetype' bits wide. */
4425 tree index_type = signed_type (sizetype);
4427 declarator = TREE_OPERAND (declarator, 0);
4429 /* Check for some types that there cannot be arrays of. */
4431 if (VOID_TYPE_P (type))
4433 error ("declaration of `%s' as array of voids", name);
4434 type = error_mark_node;
4437 if (TREE_CODE (type) == FUNCTION_TYPE)
4439 error ("declaration of `%s' as array of functions", name);
4440 type = error_mark_node;
4443 if (size == error_mark_node)
4444 type = error_mark_node;
4446 if (type == error_mark_node)
4449 /* If size was specified, set ITYPE to a range-type for that size.
4450 Otherwise, ITYPE remains null. finish_decl may figure it out
4451 from an initial value. */
4455 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4456 STRIP_TYPE_NOPS (size);
4458 if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
4459 && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
4461 error ("size of array `%s' has non-integer type", name);
4462 size = integer_one_node;
4465 if (pedantic && integer_zerop (size))
4466 pedwarn ("ISO C forbids zero-size array `%s'", name);
4468 if (TREE_CODE (size) == INTEGER_CST)
4470 constant_expression_warning (size);
4471 if (tree_int_cst_sgn (size) < 0)
4473 error ("size of array `%s' is negative", name);
4474 size = integer_one_node;
4479 /* Make sure the array size remains visibly nonconstant
4480 even if it is (eg) a const variable with known value. */
4485 if (TREE_CONSTANT (size))
4486 pedwarn ("ISO C89 forbids array `%s' whose size can't be evaluated",
4489 pedwarn ("ISO C89 forbids variable-size array `%s'",
4494 if (integer_zerop (size))
4496 /* A zero-length array cannot be represented with an
4497 unsigned index type, which is what we'll get with
4498 build_index_type. Create an open-ended range instead. */
4499 itype = build_range_type (sizetype, size, NULL_TREE);
4503 /* Compute the maximum valid index, that is, size - 1.
4504 Do the calculation in index_type, so that if it is
4505 a variable the computations will be done in the
4507 itype = fold (build (MINUS_EXPR, index_type,
4508 convert (index_type, size),
4509 convert (index_type, size_one_node)));
4511 /* If that overflowed, the array is too big.
4512 ??? While a size of INT_MAX+1 technically shouldn't
4513 cause an overflow (because we subtract 1), the overflow
4514 is recorded during the conversion to index_type, before
4515 the subtraction. Handling this case seems like an
4516 unnecessary complication. */
4517 if (TREE_OVERFLOW (itype))
4519 error ("size of array `%s' is too large", name);
4520 type = error_mark_node;
4525 itype = variable_size (itype);
4526 itype = build_index_type (itype);
4529 else if (decl_context == FIELD)
4531 /* ??? Need to check somewhere that this is a structure
4532 and not a union, that this field is last, and that
4533 this structure has at least one other named member. */
4535 if (pedantic && !flag_isoc99 && !in_system_header)
4536 pedwarn ("ISO C89 does not support flexible array members");
4538 /* ISO C99 Flexible array members are effectively identical
4539 to GCC's zero-length array extension. */
4540 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4544 /* This had bad results for pointers to arrays, as in
4545 union incomplete (*foo)[4]; */
4546 /* Complain about arrays of incomplete types, except in typedefs. */
4548 if (!COMPLETE_TYPE_P (type)
4549 /* Avoid multiple warnings for nested array types. */
4550 && TREE_CODE (type) != ARRAY_TYPE
4551 && !(specbits & (1 << (int) RID_TYPEDEF))
4552 && !C_TYPE_BEING_DEFINED (type))
4553 warning ("array type has incomplete element type");
4557 /* We shouldn't have a function type here at all!
4558 Functions aren't allowed as array elements. */
4559 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4560 && (constp || volatilep))
4561 pedwarn ("ANSI C forbids const or volatile function types");
4564 /* Build the array type itself, then merge any constancy or
4565 volatility into the target type. We must do it in this order
4566 to ensure that the TYPE_MAIN_VARIANT field of the array type
4567 is set correctly. */
4569 type = build_array_type (type, itype);
4571 type = c_build_qualified_type (type, type_quals);
4574 /* Don't clear these; leave them set so that the array type
4575 or the variable is itself const or volatile. */
4576 type_quals = TYPE_UNQUALIFIED;
4580 C_TYPE_VARIABLE_SIZE (type) = 1;
4582 else if (TREE_CODE (declarator) == CALL_EXPR)
4586 /* Declaring a function type.
4587 Make sure we have a valid type for the function to return. */
4588 if (type == error_mark_node)
4593 /* Warn about some types functions can't return. */
4595 if (TREE_CODE (type) == FUNCTION_TYPE)
4597 error ("`%s' declared as function returning a function", name);
4598 type = integer_type_node;
4600 if (TREE_CODE (type) == ARRAY_TYPE)
4602 error ("`%s' declared as function returning an array", name);
4603 type = integer_type_node;
4606 #ifndef TRADITIONAL_RETURN_FLOAT
4607 /* Traditionally, declaring return type float means double. */
4609 if (flag_traditional && TYPE_MAIN_VARIANT (type) == float_type_node)
4610 type = double_type_node;
4611 #endif /* TRADITIONAL_RETURN_FLOAT */
4613 /* Construct the function type and go to the next
4614 inner layer of declarator. */
4616 arg_types = grokparms (TREE_OPERAND (declarator, 1),
4618 /* Say it's a definition
4619 only for the CALL_EXPR
4620 closest to the identifier. */
4621 && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE);
4622 /* Type qualifiers before the return type of the function
4623 qualify the return type, not the function type. */
4626 /* Type qualifiers on a function return type are normally
4627 permitted by the standard but have no effect, so give a
4628 warning at -W. Qualifiers on a void return type have
4629 meaning as a GNU extension, and are banned on function
4630 definitions in ISO C. FIXME: strictly we shouldn't
4631 pedwarn for qualified void return types except on function
4632 definitions, but not doing so could lead to the undesirable
4633 state of a "volatile void" function return type not being
4634 warned about, and a use of the function being compiled
4635 with GNU semantics, with no diagnostics under -pedantic. */
4636 if (VOID_TYPE_P (type) && pedantic && !in_system_header)
4637 pedwarn ("ISO C forbids qualified void function return type");
4638 else if (extra_warnings
4639 && !(VOID_TYPE_P (type)
4640 && type_quals == TYPE_QUAL_VOLATILE))
4641 warning ("type qualifiers ignored on function return type");
4643 type = c_build_qualified_type (type, type_quals);
4645 type_quals = TYPE_UNQUALIFIED;
4647 type = build_function_type (type, arg_types);
4648 declarator = TREE_OPERAND (declarator, 0);
4650 /* Set the TYPE_CONTEXTs for each tagged type which is local to
4651 the formal parameter list of this FUNCTION_TYPE to point to
4652 the FUNCTION_TYPE node itself. */
4657 for (link = last_function_parm_tags;
4659 link = TREE_CHAIN (link))
4660 TYPE_CONTEXT (TREE_VALUE (link)) = type;
4663 else if (TREE_CODE (declarator) == INDIRECT_REF)
4665 /* Merge any constancy or volatility into the target type
4668 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4670 pedwarn ("ISO C forbids qualified function types");
4672 type = c_build_qualified_type (type, type_quals);
4673 type_quals = TYPE_UNQUALIFIED;
4676 type = build_pointer_type (type);
4678 /* Process a list of type modifier keywords
4679 (such as const or volatile) that were given inside the `*'. */
4681 if (TREE_TYPE (declarator))
4683 register tree typemodlist;
4689 for (typemodlist = TREE_TYPE (declarator); typemodlist;
4690 typemodlist = TREE_CHAIN (typemodlist))
4692 tree qualifier = TREE_VALUE (typemodlist);
4694 if (C_IS_RESERVED_WORD (qualifier))
4696 if (C_RID_CODE (qualifier) == RID_CONST)
4698 else if (C_RID_CODE (qualifier) == RID_VOLATILE)
4700 else if (C_RID_CODE (qualifier) == RID_RESTRICT)
4710 error ("invalid type modifier within pointer declarator");
4711 if (constp > 1 && ! flag_isoc99)
4712 pedwarn ("duplicate `const'");
4713 if (volatilep > 1 && ! flag_isoc99)
4714 pedwarn ("duplicate `volatile'");
4715 if (restrictp > 1 && ! flag_isoc99)
4716 pedwarn ("duplicate `restrict'");
4718 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4719 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4720 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4723 declarator = TREE_OPERAND (declarator, 0);
4730 /* Now TYPE has the actual type. */
4732 /* Did array size calculations overflow? */
4734 if (TREE_CODE (type) == ARRAY_TYPE
4735 && COMPLETE_TYPE_P (type)
4736 && TREE_OVERFLOW (TYPE_SIZE (type)))
4737 error ("size of array `%s' is too large", name);
4739 /* If this is declaring a typedef name, return a TYPE_DECL. */
4741 if (specbits & (1 << (int) RID_TYPEDEF))
4744 /* Note that the grammar rejects storage classes
4745 in typenames, fields or parameters */
4746 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4748 pedwarn ("ISO C forbids qualified function types");
4750 type = c_build_qualified_type (type, type_quals);
4751 decl = build_decl (TYPE_DECL, declarator, type);
4752 if ((specbits & (1 << (int) RID_SIGNED))
4753 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4754 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4758 /* Detect the case of an array type of unspecified size
4759 which came, as such, direct from a typedef name.
4760 We must copy the type, so that each identifier gets
4761 a distinct type, so that each identifier's size can be
4762 controlled separately by its own initializer. */
4764 if (type != 0 && typedef_type != 0
4765 && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0
4766 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
4768 type = build_array_type (TREE_TYPE (type), 0);
4770 C_TYPE_VARIABLE_SIZE (type) = 1;
4773 /* If this is a type name (such as, in a cast or sizeof),
4774 compute the type and return it now. */
4776 if (decl_context == TYPENAME)
4778 /* Note that the grammar rejects storage classes
4779 in typenames, fields or parameters */
4780 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4782 pedwarn ("ISO C forbids const or volatile function types");
4784 type = c_build_qualified_type (type, type_quals);
4788 /* Aside from typedefs and type names (handle above),
4789 `void' at top level (not within pointer)
4790 is allowed only in public variables.
4791 We don't complain about parms either, but that is because
4792 a better error message can be made later. */
4794 if (VOID_TYPE_P (type) && decl_context != PARM
4795 && ! ((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4796 && ((specbits & (1 << (int) RID_EXTERN))
4797 || (current_binding_level == global_binding_level
4799 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
4801 error ("variable or field `%s' declared void", name);
4802 type = integer_type_node;
4805 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4806 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
4811 if (decl_context == PARM)
4813 tree type_as_written = type;
4816 /* A parameter declared as an array of T is really a pointer to T.
4817 One declared as a function is really a pointer to a function. */
4819 if (TREE_CODE (type) == ARRAY_TYPE)
4821 /* Transfer const-ness of array into that of type pointed to. */
4822 type = TREE_TYPE (type);
4824 type = c_build_qualified_type (type, type_quals);
4825 type = build_pointer_type (type);
4826 type_quals = TYPE_UNQUALIFIED;
4829 else if (TREE_CODE (type) == FUNCTION_TYPE)
4831 if (pedantic && type_quals)
4832 pedwarn ("ISO C forbids qualified function types");
4834 type = c_build_qualified_type (type, type_quals);
4835 type = build_pointer_type (type);
4836 type_quals = TYPE_UNQUALIFIED;
4839 decl = build_decl (PARM_DECL, declarator, type);
4841 C_DECL_VARIABLE_SIZE (decl) = 1;
4843 /* Compute the type actually passed in the parmlist,
4844 for the case where there is no prototype.
4845 (For example, shorts and chars are passed as ints.)
4846 When there is a prototype, this is overridden later. */
4848 if (type == error_mark_node)
4849 promoted_type = type;
4852 promoted_type = simple_type_promotes_to (type);
4853 if (! promoted_type)
4854 promoted_type = type;
4857 DECL_ARG_TYPE (decl) = promoted_type;
4858 DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
4860 else if (decl_context == FIELD)
4862 /* Structure field. It may not be a function. */
4864 if (TREE_CODE (type) == FUNCTION_TYPE)
4866 error ("field `%s' declared as a function", name);
4867 type = build_pointer_type (type);
4869 else if (TREE_CODE (type) != ERROR_MARK
4870 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4872 error ("field `%s' has incomplete type", name);
4873 type = error_mark_node;
4875 /* Move type qualifiers down to element of an array. */
4876 if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4878 type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4880 TYPE_DOMAIN (type));
4882 /* Leave the field const or volatile as well. */
4883 type_quals = TYPE_UNQUALIFIED;
4886 decl = build_decl (FIELD_DECL, declarator, type);
4887 DECL_NONADDRESSABLE_P (decl) = bitfield;
4890 C_DECL_VARIABLE_SIZE (decl) = 1;
4892 else if (TREE_CODE (type) == FUNCTION_TYPE)
4894 /* Every function declaration is "external"
4895 except for those which are inside a function body
4896 in which `auto' is used.
4897 That is a case not specified by ANSI C,
4898 and we use it for forward declarations for nested functions. */
4899 int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
4900 || current_binding_level == global_binding_level);
4902 if (specbits & (1 << (int) RID_AUTO)
4903 && (pedantic || current_binding_level == global_binding_level))
4904 pedwarn ("invalid storage class for function `%s'", name);
4905 if (specbits & (1 << (int) RID_REGISTER))
4906 error ("invalid storage class for function `%s'", name);
4907 /* Function declaration not at top level.
4908 Storage classes other than `extern' are not allowed
4909 and `extern' makes no difference. */
4910 if (current_binding_level != global_binding_level
4911 && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
4913 pedwarn ("invalid storage class for function `%s'", name);
4915 decl = build_decl (FUNCTION_DECL, declarator, type);
4916 decl = build_decl_attribute_variant (decl, decl_machine_attr);
4918 if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl))
4919 pedwarn ("ISO C forbids qualified function types");
4921 /* GNU C interprets a `volatile void' return type to indicate
4922 that the function does not return. */
4923 if ((type_quals & TYPE_QUAL_VOLATILE)
4924 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4925 warning ("`noreturn' function returns non-void value");
4928 DECL_EXTERNAL (decl) = 1;
4929 /* Record absence of global scope for `static' or `auto'. */
4931 = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
4933 /* Record presence of `inline', if it is reasonable. */
4936 if (MAIN_NAME_P (declarator))
4937 warning ("cannot inline function `main'");
4939 /* Assume that otherwise the function can be inlined. */
4940 DECL_INLINE (decl) = 1;
4942 if (specbits & (1 << (int) RID_EXTERN))
4943 current_extern_inline = 1;
4948 /* It's a variable. */
4949 /* An uninitialized decl with `extern' is a reference. */
4950 int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
4952 /* Move type qualifiers down to element of an array. */
4953 if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4955 type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4957 TYPE_DOMAIN (type));
4958 #if 0 /* Leave the variable const or volatile as well. */
4959 type_quals = TYPE_UNQUALIFIED;
4963 decl = build_decl (VAR_DECL, declarator, type);
4965 C_DECL_VARIABLE_SIZE (decl) = 1;
4968 pedwarn_with_decl (decl, "variable `%s' declared `inline'");
4970 DECL_EXTERNAL (decl) = extern_ref;
4971 /* At top level, the presence of a `static' or `register' storage
4972 class specifier, or the absence of all storage class specifiers
4973 makes this declaration a definition (perhaps tentative). Also,
4974 the absence of both `static' and `register' makes it public. */
4975 if (current_binding_level == global_binding_level)
4979 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)));
4980 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
4982 /* Not at top level, only `static' makes a static definition. */
4985 TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
4986 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
4990 /* Record `register' declaration for warnings on &
4991 and in case doing stupid register allocation. */
4993 if (specbits & (1 << (int) RID_REGISTER))
4994 DECL_REGISTER (decl) = 1;
4996 /* Record constancy and volatility. */
4997 c_apply_type_quals_to_decl (type_quals, decl);
4999 /* If a type has volatile components, it should be stored in memory.
5000 Otherwise, the fact that those components are volatile
5001 will be ignored, and would even crash the compiler. */
5002 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
5003 mark_addressable (decl);
5009 /* Decode the parameter-list info for a function type or function definition.
5010 The argument is the value returned by `get_parm_info' (or made in parse.y
5011 if there is an identifier list instead of a parameter decl list).
5012 These two functions are separate because when a function returns
5013 or receives functions then each is called multiple times but the order
5014 of calls is different. The last call to `grokparms' is always the one
5015 that contains the formal parameter names of a function definition.
5017 Store in `last_function_parms' a chain of the decls of parms.
5018 Also store in `last_function_parm_tags' a chain of the struct, union,
5019 and enum tags declared among the parms.
5021 Return a list of arg types to use in the FUNCTION_TYPE for this function.
5023 FUNCDEF_FLAG is nonzero for a function definition, 0 for
5024 a mere declaration. A nonempty identifier-list gets an error message
5025 when FUNCDEF_FLAG is zero. */
5028 grokparms (parms_info, funcdef_flag)
5032 tree first_parm = TREE_CHAIN (parms_info);
5034 last_function_parms = TREE_PURPOSE (parms_info);
5035 last_function_parm_tags = TREE_VALUE (parms_info);
5037 if (warn_strict_prototypes && first_parm == 0 && !funcdef_flag
5038 && !in_system_header)
5039 warning ("function declaration isn't a prototype");
5042 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
5045 pedwarn ("parameter names (without types) in function declaration");
5047 last_function_parms = first_parm;
5054 /* We no longer test FUNCDEF_FLAG.
5055 If the arg types are incomplete in a declaration,
5056 they must include undefined tags.
5057 These tags can never be defined in the scope of the declaration,
5058 so the types can never be completed,
5059 and no call can be compiled successfully. */
5061 /* In a fcn definition, arg types must be complete. */
5064 for (parm = last_function_parms, typelt = first_parm;
5066 parm = TREE_CHAIN (parm))
5067 /* Skip over any enumeration constants declared here. */
5068 if (TREE_CODE (parm) == PARM_DECL)
5070 /* Barf if the parameter itself has an incomplete type. */
5071 tree type = TREE_VALUE (typelt);
5072 if (!COMPLETE_TYPE_P (type))
5074 if (funcdef_flag && DECL_NAME (parm) != 0)
5075 error ("parameter `%s' has incomplete type",
5076 IDENTIFIER_POINTER (DECL_NAME (parm)));
5078 warning ("parameter has incomplete type");
5081 TREE_VALUE (typelt) = error_mark_node;
5082 TREE_TYPE (parm) = error_mark_node;
5086 /* This has been replaced by parm_tags_warning, which
5087 uses a more accurate criterion for what to warn
5091 /* Now warn if is a pointer to an incomplete type. */
5092 while (TREE_CODE (type) == POINTER_TYPE
5093 || TREE_CODE (type) == REFERENCE_TYPE)
5094 type = TREE_TYPE (type);
5095 type = TYPE_MAIN_VARIANT (type);
5096 if (!COMPLETE_TYPE_P (type))
5098 if (DECL_NAME (parm) != 0)
5099 warning ("parameter `%s' points to incomplete type",
5100 IDENTIFIER_POINTER (DECL_NAME (parm)));
5102 warning ("parameter points to incomplete type");
5106 typelt = TREE_CHAIN (typelt);
5113 /* Return a tree_list node with info on a parameter list just parsed.
5114 The TREE_PURPOSE is a chain of decls of those parms.
5115 The TREE_VALUE is a list of structure, union and enum tags defined.
5116 The TREE_CHAIN is a list of argument types to go in the FUNCTION_TYPE.
5117 This tree_list node is later fed to `grokparms'.
5119 VOID_AT_END nonzero means append `void' to the end of the type-list.
5120 Zero means the parmlist ended with an ellipsis so don't append `void'. */
5123 get_parm_info (void_at_end)
5126 register tree decl, t;
5127 register tree types = 0;
5129 tree tags = gettags ();
5130 tree parms = getdecls ();
5132 tree order = current_binding_level->parm_order;
5134 /* Just `void' (and no ellipsis) is special. There are really no parms.
5135 But if the `void' is qualified (by `const' or `volatile') or has a
5136 storage class specifier (`register'), then the behavior is undefined;
5137 by not counting it as the special case of `void' we will cause an
5138 error later. Typedefs for `void' are OK (see DR#157). */
5139 if (void_at_end && parms != 0
5140 && TREE_CHAIN (parms) == 0
5141 && VOID_TYPE_P (TREE_TYPE (parms))
5142 && ! TREE_THIS_VOLATILE (parms)
5143 && ! TREE_READONLY (parms)
5144 && ! DECL_REGISTER (parms)
5145 && DECL_NAME (parms) == 0)
5148 storedecls (NULL_TREE);
5149 return tree_cons (NULL_TREE, NULL_TREE,
5150 tree_cons (NULL_TREE, void_type_node, NULL_TREE));
5153 /* Extract enumerator values and other non-parms declared with the parms.
5154 Likewise any forward parm decls that didn't have real parm decls. */
5155 for (decl = parms; decl;)
5157 tree next = TREE_CHAIN (decl);
5159 if (TREE_CODE (decl) != PARM_DECL)
5161 TREE_CHAIN (decl) = new_parms;
5164 else if (TREE_ASM_WRITTEN (decl))
5166 error_with_decl (decl,
5167 "parameter `%s' has just a forward declaration");
5168 TREE_CHAIN (decl) = new_parms;
5174 /* Put the parm decls back in the order they were in in the parm list. */
5175 for (t = order; t; t = TREE_CHAIN (t))
5178 TREE_CHAIN (TREE_VALUE (t)) = TREE_VALUE (TREE_CHAIN (t));
5180 TREE_CHAIN (TREE_VALUE (t)) = 0;
5183 new_parms = chainon (order ? nreverse (TREE_VALUE (order)) : 0,
5186 /* Store the parmlist in the binding level since the old one
5187 is no longer a valid list. (We have changed the chain pointers.) */
5188 storedecls (new_parms);
5190 for (decl = new_parms; decl; decl = TREE_CHAIN (decl))
5191 /* There may also be declarations for enumerators if an enumeration
5192 type is declared among the parms. Ignore them here. */
5193 if (TREE_CODE (decl) == PARM_DECL)
5195 /* Since there is a prototype,
5196 args are passed in their declared types. */
5197 tree type = TREE_TYPE (decl);
5198 DECL_ARG_TYPE (decl) = type;
5199 if (PROMOTE_PROTOTYPES
5200 && (TREE_CODE (type) == INTEGER_TYPE
5201 || TREE_CODE (type) == ENUMERAL_TYPE)
5202 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5203 DECL_ARG_TYPE (decl) = integer_type_node;
5205 types = tree_cons (NULL_TREE, TREE_TYPE (decl), types);
5206 if (VOID_TYPE_P (TREE_VALUE (types)) && ! erred
5207 && DECL_NAME (decl) == 0)
5209 error ("`void' in parameter list must be the entire list");
5215 return tree_cons (new_parms, tags,
5216 nreverse (tree_cons (NULL_TREE, void_type_node, types)));
5218 return tree_cons (new_parms, tags, nreverse (types));
5221 /* At end of parameter list, warn about any struct, union or enum tags
5222 defined within. Do so because these types cannot ever become complete. */
5225 parmlist_tags_warning ()
5230 for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
5232 enum tree_code code = TREE_CODE (TREE_VALUE (elt));
5233 /* An anonymous union parm type is meaningful as a GNU extension.
5234 So don't warn for that. */
5235 if (code == UNION_TYPE && TREE_PURPOSE (elt) == 0 && !pedantic)
5237 if (TREE_PURPOSE (elt) != 0)
5238 warning ("`%s %s' declared inside parameter list",
5239 (code == RECORD_TYPE ? "struct"
5240 : code == UNION_TYPE ? "union"
5242 IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
5245 /* For translation these need to be seperate warnings */
5246 if (code == RECORD_TYPE)
5247 warning ("anonymous struct declared inside parameter list");
5248 else if (code == UNION_TYPE)
5249 warning ("anonymous union declared inside parameter list");
5251 warning ("anonymous enum declared inside parameter list");
5255 warning ("its scope is only this definition or declaration, which is probably not what you want.");
5261 /* Get the struct, enum or union (CODE says which) with tag NAME.
5262 Define the tag as a forward-reference if it is not defined. */
5265 xref_tag (code, name)
5266 enum tree_code code;
5269 /* If a cross reference is requested, look up the type
5270 already defined for this tag and return it. */
5272 register tree ref = lookup_tag (code, name, current_binding_level, 0);
5273 /* Even if this is the wrong type of tag, return what we found.
5274 There will be an error message anyway, from pending_xref_error.
5275 If we create an empty xref just for an invalid use of the type,
5276 the main result is to create lots of superfluous error messages. */
5280 /* If no such tag is yet defined, create a forward-reference node
5281 and record it as the "definition".
5282 When a real declaration of this type is found,
5283 the forward-reference will be altered into a real type. */
5285 ref = make_node (code);
5286 if (code == ENUMERAL_TYPE)
5288 /* (In ANSI, Enums can be referred to only if already defined.) */
5290 pedwarn ("ISO C forbids forward references to `enum' types");
5291 /* Give the type a default layout like unsigned int
5292 to avoid crashing if it does not get defined. */
5293 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
5294 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
5295 TYPE_USER_ALIGN (ref) = 0;
5296 TREE_UNSIGNED (ref) = 1;
5297 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
5298 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
5299 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
5302 pushtag (name, ref);
5307 /* Make sure that the tag NAME is defined *in the current binding level*
5308 at least as a forward reference.
5309 CODE says which kind of tag NAME ought to be. */
5312 start_struct (code, name)
5313 enum tree_code code;
5316 /* If there is already a tag defined at this binding level
5317 (as a forward reference), just return it. */
5319 register tree ref = 0;
5322 ref = lookup_tag (code, name, current_binding_level, 1);
5323 if (ref && TREE_CODE (ref) == code)
5325 C_TYPE_BEING_DEFINED (ref) = 1;
5326 TYPE_PACKED (ref) = flag_pack_struct;
5327 if (TYPE_FIELDS (ref))
5328 error ("redefinition of `%s %s'",
5329 code == UNION_TYPE ? "union" : "struct",
5330 IDENTIFIER_POINTER (name));
5335 /* Otherwise create a forward-reference just so the tag is in scope. */
5337 ref = make_node (code);
5338 pushtag (name, ref);
5339 C_TYPE_BEING_DEFINED (ref) = 1;
5340 TYPE_PACKED (ref) = flag_pack_struct;
5344 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
5345 of a structure component, returning a FIELD_DECL node.
5346 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.
5348 This is done during the parsing of the struct declaration.
5349 The FIELD_DECL nodes are chained together and the lot of them
5350 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
5353 grokfield (filename, line, declarator, declspecs, width)
5354 const char *filename ATTRIBUTE_UNUSED;
5355 int line ATTRIBUTE_UNUSED;
5356 tree declarator, declspecs, width;
5360 value = grokdeclarator (declarator, declspecs, width ? BITFIELD : FIELD, 0);
5362 finish_decl (value, NULL_TREE, NULL_TREE);
5363 DECL_INITIAL (value) = width;
5365 maybe_objc_check_decl (value);
5369 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5370 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5371 ATTRIBUTES are attributes to be applied to the structure. */
5374 finish_struct (t, fieldlist, attributes)
5380 int toplevel = global_binding_level == current_binding_level;
5382 /* If this type was previously laid out as a forward reference,
5383 make sure we lay it out again. */
5387 decl_attributes (t, attributes, NULL_TREE);
5389 /* Nameless union parm types are useful as GCC extension. */
5390 if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic)
5391 /* Otherwise, warn about any struct or union def. in parmlist. */
5392 if (in_parm_level_p ())
5395 pedwarn ("%s defined inside parms",
5396 TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
5397 else if (! flag_traditional)
5398 warning ("%s defined inside parms",
5399 TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
5404 for (x = fieldlist; x; x = TREE_CHAIN (x))
5405 if (DECL_NAME (x) != 0)
5409 pedwarn ("%s has no %s",
5410 TREE_CODE (t) == UNION_TYPE ? _("union") : _("struct"),
5411 fieldlist ? _("named members") : _("members"));
5414 /* Install struct as DECL_CONTEXT of each field decl.
5415 Also process specified field sizes,m which is found in the DECL_INITIAL.
5416 Store 0 there, except for ": 0" fields (so we can find them
5417 and delete them, below). */
5419 for (x = fieldlist; x; x = TREE_CHAIN (x))
5421 DECL_CONTEXT (x) = t;
5422 DECL_PACKED (x) |= TYPE_PACKED (t);
5424 /* If any field is const, the structure type is pseudo-const. */
5425 if (TREE_READONLY (x))
5426 C_TYPE_FIELDS_READONLY (t) = 1;
5429 /* A field that is pseudo-const makes the structure likewise. */
5430 tree t1 = TREE_TYPE (x);
5431 while (TREE_CODE (t1) == ARRAY_TYPE)
5432 t1 = TREE_TYPE (t1);
5433 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5434 && C_TYPE_FIELDS_READONLY (t1))
5435 C_TYPE_FIELDS_READONLY (t) = 1;
5438 /* Any field that is volatile means variables of this type must be
5439 treated in some ways as volatile. */
5440 if (TREE_THIS_VOLATILE (x))
5441 C_TYPE_FIELDS_VOLATILE (t) = 1;
5443 /* Any field of nominal variable size implies structure is too. */
5444 if (C_DECL_VARIABLE_SIZE (x))
5445 C_TYPE_VARIABLE_SIZE (t) = 1;
5447 /* Detect invalid nested redefinition. */
5448 if (TREE_TYPE (x) == t)
5449 error ("nested redefinition of `%s'",
5450 IDENTIFIER_POINTER (TYPE_NAME (t)));
5452 /* Detect invalid bit-field size. */
5453 if (DECL_INITIAL (x))
5454 STRIP_NOPS (DECL_INITIAL (x));
5455 if (DECL_INITIAL (x))
5457 if (TREE_CODE (DECL_INITIAL (x)) == INTEGER_CST)
5458 constant_expression_warning (DECL_INITIAL (x));
5462 "bit-field `%s' width not an integer constant");
5463 DECL_INITIAL (x) = NULL;
5467 /* Detect invalid bit-field type. */
5468 if (DECL_INITIAL (x)
5469 && TREE_CODE (TREE_TYPE (x)) != INTEGER_TYPE
5470 && TREE_CODE (TREE_TYPE (x)) != BOOLEAN_TYPE
5471 && TREE_CODE (TREE_TYPE (x)) != ENUMERAL_TYPE)
5473 error_with_decl (x, "bit-field `%s' has invalid type");
5474 DECL_INITIAL (x) = NULL;
5477 if (DECL_INITIAL (x) && pedantic
5478 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != integer_type_node
5479 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != unsigned_type_node
5480 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != c_bool_type_node
5481 /* Accept an enum that's equivalent to int or unsigned int. */
5482 && !(TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE
5483 && (TYPE_PRECISION (TREE_TYPE (x))
5484 == TYPE_PRECISION (integer_type_node))))
5485 pedwarn_with_decl (x, "bit-field `%s' type invalid in ISO C");
5487 /* Detect and ignore out of range field width and process valid
5489 if (DECL_INITIAL (x))
5492 if (TYPE_MAIN_VARIANT (TREE_TYPE (x)) == c_bool_type_node)
5493 max_width = CHAR_TYPE_SIZE;
5495 max_width = TYPE_PRECISION (TREE_TYPE (x));
5496 if (tree_int_cst_sgn (DECL_INITIAL (x)) < 0)
5497 error_with_decl (x, "negative width in bit-field `%s'");
5498 else if (0 < compare_tree_int (DECL_INITIAL (x), max_width))
5499 pedwarn_with_decl (x, "width of `%s' exceeds its type");
5500 else if (integer_zerop (DECL_INITIAL (x)) && DECL_NAME (x) != 0)
5501 error_with_decl (x, "zero width for bit-field `%s'");
5504 /* The test above has assured us that TREE_INT_CST_HIGH is 0. */
5505 unsigned HOST_WIDE_INT width
5506 = TREE_INT_CST_LOW (DECL_INITIAL (x));
5508 if (TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE
5509 && (width < min_precision (TYPE_MIN_VALUE (TREE_TYPE (x)),
5510 TREE_UNSIGNED (TREE_TYPE (x)))
5512 < min_precision (TYPE_MAX_VALUE (TREE_TYPE (x)),
5513 TREE_UNSIGNED (TREE_TYPE (x))))))
5514 warning_with_decl (x,
5515 "`%s' is narrower than values of its type");
5517 DECL_SIZE (x) = bitsize_int (width);
5518 DECL_BIT_FIELD (x) = 1;
5519 SET_DECL_C_BIT_FIELD (x);
5523 /* field size 0 => force desired amount of alignment. */
5524 #ifdef EMPTY_FIELD_BOUNDARY
5525 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), EMPTY_FIELD_BOUNDARY);
5527 #ifdef PCC_BITFIELD_TYPE_MATTERS
5528 if (PCC_BITFIELD_TYPE_MATTERS)
5530 DECL_ALIGN (x) = MAX (DECL_ALIGN (x),
5531 TYPE_ALIGN (TREE_TYPE (x)));
5532 DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
5539 else if (TREE_TYPE (x) != error_mark_node)
5541 unsigned int min_align = (DECL_PACKED (x) ? BITS_PER_UNIT
5542 : TYPE_ALIGN (TREE_TYPE (x)));
5544 /* Non-bit-fields are aligned for their type, except packed
5545 fields which require only BITS_PER_UNIT alignment. */
5546 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), min_align);
5547 if (! DECL_PACKED (x))
5548 DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
5551 DECL_INITIAL (x) = 0;
5554 /* Delete all duplicate fields from the fieldlist */
5555 for (x = fieldlist; x && TREE_CHAIN (x);)
5556 /* Anonymous fields aren't duplicates. */
5557 if (DECL_NAME (TREE_CHAIN (x)) == 0)
5561 register tree y = fieldlist;
5565 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5571 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5573 error_with_decl (TREE_CHAIN (x), "duplicate member `%s'");
5574 TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
5580 /* Now we have the nearly final fieldlist. Record it,
5581 then lay out the structure or union (including the fields). */
5583 TYPE_FIELDS (t) = fieldlist;
5587 /* Delete all zero-width bit-fields from the fieldlist */
5589 tree *fieldlistp = &fieldlist;
5591 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp))
5592 *fieldlistp = TREE_CHAIN (*fieldlistp);
5594 fieldlistp = &TREE_CHAIN (*fieldlistp);
5597 /* Now we have the truly final field list.
5598 Store it in this type and in the variants. */
5600 TYPE_FIELDS (t) = fieldlist;
5602 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5604 TYPE_FIELDS (x) = TYPE_FIELDS (t);
5605 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5606 TYPE_ALIGN (x) = TYPE_ALIGN (t);
5607 TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t);
5610 /* If this was supposed to be a transparent union, but we can't
5611 make it one, warn and turn off the flag. */
5612 if (TREE_CODE (t) == UNION_TYPE
5613 && TYPE_TRANSPARENT_UNION (t)
5614 && TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))
5616 TYPE_TRANSPARENT_UNION (t) = 0;
5617 warning ("union cannot be made transparent");
5620 /* If this structure or union completes the type of any previous
5621 variable declaration, lay it out and output its rtl. */
5623 if (current_binding_level->n_incomplete != 0)
5626 for (decl = current_binding_level->names; decl; decl = TREE_CHAIN (decl))
5628 if (TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TYPE_MAIN_VARIANT (t)
5629 && TREE_CODE (decl) != TYPE_DECL)
5631 layout_decl (decl, 0);
5632 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
5633 maybe_objc_check_decl (decl);
5634 rest_of_decl_compilation (decl, NULL_PTR, toplevel, 0);
5637 --current_binding_level->n_incomplete;
5639 else if (!COMPLETE_TYPE_P (TREE_TYPE (decl))
5640 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5642 tree element = TREE_TYPE (decl);
5643 while (TREE_CODE (element) == ARRAY_TYPE)
5644 element = TREE_TYPE (element);
5646 layout_array_type (TREE_TYPE (decl));
5651 /* Finish debugging output for this type. */
5652 rest_of_type_compilation (t, toplevel);
5657 /* Lay out the type T, and its element type, and so on. */
5660 layout_array_type (t)
5663 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5664 layout_array_type (TREE_TYPE (t));
5668 /* Begin compiling the definition of an enumeration type.
5669 NAME is its name (or null if anonymous).
5670 Returns the type object, as yet incomplete.
5671 Also records info about it so that build_enumerator
5672 may be used to declare the individual values as they are read. */
5678 register tree enumtype = 0;
5680 /* If this is the real definition for a previous forward reference,
5681 fill in the contents in the same object that used to be the
5682 forward reference. */
5685 enumtype = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 1);
5687 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5689 enumtype = make_node (ENUMERAL_TYPE);
5690 pushtag (name, enumtype);
5693 C_TYPE_BEING_DEFINED (enumtype) = 1;
5695 if (TYPE_VALUES (enumtype) != 0)
5697 /* This enum is a named one that has been declared already. */
5698 error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
5700 /* Completely replace its old definition.
5701 The old enumerators remain defined, however. */
5702 TYPE_VALUES (enumtype) = 0;
5705 enum_next_value = integer_zero_node;
5708 if (flag_short_enums)
5709 TYPE_PACKED (enumtype) = 1;
5714 /* After processing and defining all the values of an enumeration type,
5715 install their decls in the enumeration type and finish it off.
5716 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5717 and ATTRIBUTES are the specified attributes.
5718 Returns ENUMTYPE. */
5721 finish_enum (enumtype, values, attributes)
5726 register tree pair, tem;
5727 tree minnode = 0, maxnode = 0, enum_value_type;
5728 int precision, unsign;
5729 int toplevel = (global_binding_level == current_binding_level);
5731 if (in_parm_level_p ())
5732 warning ("enum defined inside parms");
5734 decl_attributes (enumtype, attributes, NULL_TREE);
5736 /* Calculate the maximum value of any enumerator in this type. */
5738 if (values == error_mark_node)
5739 minnode = maxnode = integer_zero_node;
5742 minnode = maxnode = TREE_VALUE (values);
5743 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5745 tree value = TREE_VALUE (pair);
5746 if (tree_int_cst_lt (maxnode, value))
5748 if (tree_int_cst_lt (value, minnode))
5753 /* Construct the final type of this enumeration. It is the same
5754 as one of the integral types - the narrowest one that fits, except
5755 that normally we only go as narrow as int - and signed iff any of
5756 the values are negative. */
5757 unsign = (tree_int_cst_sgn (minnode) >= 0);
5758 precision = MAX (min_precision (minnode, unsign),
5759 min_precision (maxnode, unsign));
5760 if (!TYPE_PACKED (enumtype))
5761 precision = MAX (precision, TYPE_PRECISION (integer_type_node));
5762 if (type_for_size (precision, unsign) == 0)
5764 warning ("enumeration values exceed range of largest integer");
5765 precision = TYPE_PRECISION (long_long_integer_type_node);
5768 if (precision == TYPE_PRECISION (integer_type_node))
5769 enum_value_type = type_for_size (precision, 0);
5771 enum_value_type = enumtype;
5773 TYPE_MIN_VALUE (enumtype) = minnode;
5774 TYPE_MAX_VALUE (enumtype) = maxnode;
5775 TYPE_PRECISION (enumtype) = precision;
5776 TREE_UNSIGNED (enumtype) = unsign;
5777 TYPE_SIZE (enumtype) = 0;
5778 layout_type (enumtype);
5780 if (values != error_mark_node)
5782 /* Change the type of the enumerators to be the enum type. We
5783 need to do this irrespective of the size of the enum, for
5784 proper type checking. Replace the DECL_INITIALs of the
5785 enumerators, and the value slots of the list, with copies
5786 that have the enum type; they cannot be modified in place
5787 because they may be shared (e.g. integer_zero_node) Finally,
5788 change the purpose slots to point to the names of the decls. */
5789 for (pair = values; pair; pair = TREE_CHAIN (pair))
5791 tree enu = TREE_PURPOSE (pair);
5793 TREE_TYPE (enu) = enumtype;
5794 DECL_SIZE (enu) = TYPE_SIZE (enumtype);
5795 DECL_SIZE_UNIT (enu) = TYPE_SIZE_UNIT (enumtype);
5796 DECL_ALIGN (enu) = TYPE_ALIGN (enumtype);
5797 DECL_USER_ALIGN (enu) = TYPE_USER_ALIGN (enumtype);
5798 DECL_MODE (enu) = TYPE_MODE (enumtype);
5800 /* The ISO C Standard mandates enumerators to have type int,
5801 even though the underlying type of an enum type is
5802 unspecified. Here we convert any enumerators that fit in
5803 an int to type int, to avoid promotions to unsigned types
5804 when comparing integers with enumerators that fit in the
5805 int range. When -pedantic is given, build_enumerator()
5806 would have already taken care of those that don't fit. */
5807 if (int_fits_type_p (DECL_INITIAL (enu), enum_value_type))
5808 DECL_INITIAL (enu) = convert (enum_value_type, DECL_INITIAL (enu));
5810 DECL_INITIAL (enu) = convert (enumtype, DECL_INITIAL (enu));
5812 TREE_PURPOSE (pair) = DECL_NAME (enu);
5813 TREE_VALUE (pair) = DECL_INITIAL (enu);
5816 TYPE_VALUES (enumtype) = values;
5819 /* Fix up all variant types of this enum type. */
5820 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5822 if (tem == enumtype)
5824 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5825 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5826 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5827 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5828 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5829 TYPE_MODE (tem) = TYPE_MODE (enumtype);
5830 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5831 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5832 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5833 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
5836 /* Finish debugging output for this type. */
5837 rest_of_type_compilation (enumtype, toplevel);
5842 /* Build and install a CONST_DECL for one value of the
5843 current enumeration type (one that was begun with start_enum).
5844 Return a tree-list containing the CONST_DECL and its value.
5845 Assignment of sequential values by default is handled here. */
5848 build_enumerator (name, value)
5851 register tree decl, type;
5853 /* Validate and default VALUE. */
5855 /* Remove no-op casts from the value. */
5857 STRIP_TYPE_NOPS (value);
5861 if (TREE_CODE (value) == INTEGER_CST)
5863 value = default_conversion (value);
5864 constant_expression_warning (value);
5868 error ("enumerator value for `%s' not integer constant",
5869 IDENTIFIER_POINTER (name));
5874 /* Default based on previous value. */
5875 /* It should no longer be possible to have NON_LVALUE_EXPR
5879 value = enum_next_value;
5881 error ("overflow in enumeration values");
5884 if (pedantic && ! int_fits_type_p (value, integer_type_node))
5886 pedwarn ("ISO C restricts enumerator values to range of `int'");
5887 value = convert (integer_type_node, value);
5890 /* Set basis for default for next value. */
5891 enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5892 enum_overflow = tree_int_cst_lt (enum_next_value, value);
5894 /* Now create a declaration for the enum value name. */
5896 type = TREE_TYPE (value);
5897 type = type_for_size (MAX (TYPE_PRECISION (type),
5898 TYPE_PRECISION (integer_type_node)),
5900 || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node))
5901 && TREE_UNSIGNED (type)));
5903 decl = build_decl (CONST_DECL, name, type);
5904 DECL_INITIAL (decl) = convert (type, value);
5907 return tree_cons (decl, value, NULL_TREE);
5911 /* Create the FUNCTION_DECL for a function definition.
5912 DECLSPECS, DECLARATOR, PREFIX_ATTRIBUTES and ATTRIBUTES are the parts of
5913 the declaration; they describe the function's name and the type it returns,
5914 but twisted together in a fashion that parallels the syntax of C.
5916 This function creates a binding context for the function body
5917 as well as setting up the FUNCTION_DECL in current_function_decl.
5919 Returns 1 on success. If the DECLARATOR is not suitable for a function
5920 (it defines a datum instead), we return 0, which tells
5921 yyparse to report a parse error. */
5924 start_function (declspecs, declarator, prefix_attributes, attributes)
5925 tree declarator, declspecs, prefix_attributes, attributes;
5927 tree decl1, old_decl;
5929 int old_immediate_size_expand = immediate_size_expand;
5931 current_function_returns_value = 0; /* Assume, until we see it does. */
5932 current_function_returns_null = 0;
5933 warn_about_return_type = 0;
5934 current_extern_inline = 0;
5935 c_function_varargs = 0;
5937 shadowed_labels = 0;
5939 /* Don't expand any sizes in the return type of the function. */
5940 immediate_size_expand = 0;
5942 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1);
5944 /* If the declarator is not suitable for a function definition,
5945 cause a syntax error. */
5948 immediate_size_expand = old_immediate_size_expand;
5952 decl_attributes (decl1, prefix_attributes, attributes);
5954 announce_function (decl1);
5956 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
5958 error ("return type is an incomplete type");
5959 /* Make it return void instead. */
5961 = build_function_type (void_type_node,
5962 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
5965 if (warn_about_return_type)
5966 pedwarn_c99 ("return type defaults to `int'");
5968 /* Save the parm names or decls from this function's declarator
5969 where store_parm_decls will find them. */
5970 current_function_parms = last_function_parms;
5971 current_function_parm_tags = last_function_parm_tags;
5973 /* Make the init_value nonzero so pushdecl knows this is not tentative.
5974 error_mark_node is replaced below (in poplevel) with the BLOCK. */
5975 DECL_INITIAL (decl1) = error_mark_node;
5977 /* If this definition isn't a prototype and we had a prototype declaration
5978 before, copy the arg type info from that prototype.
5979 But not if what we had before was a builtin function. */
5980 old_decl = lookup_name_current_level (DECL_NAME (decl1));
5981 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
5982 && !DECL_BUILT_IN (old_decl)
5983 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
5984 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (old_decl))))
5985 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
5987 TREE_TYPE (decl1) = TREE_TYPE (old_decl);
5988 current_function_prototype_file = DECL_SOURCE_FILE (old_decl);
5989 current_function_prototype_line = DECL_SOURCE_LINE (old_decl);
5992 /* If there is no explicit declaration, look for any out-of-scope implicit
5995 old_decl = IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1));
5997 /* Optionally warn of old-fashioned def with no previous prototype. */
5998 if (warn_strict_prototypes
5999 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
6000 && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
6001 warning ("function declaration isn't a prototype");
6002 /* Optionally warn of any global def with no previous prototype. */
6003 else if (warn_missing_prototypes
6004 && TREE_PUBLIC (decl1)
6005 && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0)
6006 && ! MAIN_NAME_P (DECL_NAME (decl1)))
6007 warning_with_decl (decl1, "no previous prototype for `%s'");
6008 /* Optionally warn of any def with no previous prototype
6009 if the function has already been used. */
6010 else if (warn_missing_prototypes
6011 && old_decl != 0 && TREE_USED (old_decl)
6012 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
6013 warning_with_decl (decl1,
6014 "`%s' was used with no prototype before its definition");
6015 /* Optionally warn of any global def with no previous declaration. */
6016 else if (warn_missing_declarations
6017 && TREE_PUBLIC (decl1)
6019 && ! MAIN_NAME_P (DECL_NAME (decl1)))
6020 warning_with_decl (decl1, "no previous declaration for `%s'");
6021 /* Optionally warn of any def with no previous declaration
6022 if the function has already been used. */
6023 else if (warn_missing_declarations
6024 && old_decl != 0 && TREE_USED (old_decl)
6025 && old_decl == IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)))
6026 warning_with_decl (decl1,
6027 "`%s' was used with no declaration before its definition");
6029 /* This is a definition, not a reference.
6030 So normally clear DECL_EXTERNAL.
6031 However, `extern inline' acts like a declaration
6032 except for defining how to inline. So set DECL_EXTERNAL in that case. */
6033 DECL_EXTERNAL (decl1) = current_extern_inline;
6035 #ifdef SET_DEFAULT_DECL_ATTRIBUTES
6036 SET_DEFAULT_DECL_ATTRIBUTES (decl1, attributes);
6039 /* This function exists in static storage.
6040 (This does not mean `static' in the C sense!) */
6041 TREE_STATIC (decl1) = 1;
6043 /* A nested function is not global. */
6044 if (current_function_decl != 0)
6045 TREE_PUBLIC (decl1) = 0;
6047 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
6048 if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
6053 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
6054 != integer_type_node)
6055 pedwarn_with_decl (decl1, "return type of `%s' is not `int'");
6057 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
6058 args = TREE_CHAIN (args))
6060 tree type = args ? TREE_VALUE (args) : 0;
6062 if (type == void_type_node)
6069 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
6070 pedwarn_with_decl (decl1,
6071 "first argument of `%s' should be `int'");
6075 if (TREE_CODE (type) != POINTER_TYPE
6076 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6077 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6079 pedwarn_with_decl (decl1,
6080 "second argument of `%s' should be `char **'");
6084 if (TREE_CODE (type) != POINTER_TYPE
6085 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6086 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6088 pedwarn_with_decl (decl1,
6089 "third argument of `%s' should probably be `char **'");
6094 /* It is intentional that this message does not mention the third
6095 argument, which is warned for only pedantically, because it's
6096 blessed by mention in an appendix of the standard. */
6097 if (argct > 0 && (argct < 2 || argct > 3))
6098 pedwarn_with_decl (decl1, "`%s' takes only zero or two arguments");
6100 if (argct == 3 && pedantic)
6101 pedwarn_with_decl (decl1, "third argument of `%s' is deprecated");
6103 if (! TREE_PUBLIC (decl1))
6104 pedwarn_with_decl (decl1, "`%s' is normally a non-static function");
6107 /* Record the decl so that the function name is defined.
6108 If we already have a decl for this name, and it is a FUNCTION_DECL,
6109 use the old decl. */
6111 current_function_decl = pushdecl (decl1);
6114 declare_parm_level (1);
6115 current_binding_level->subblocks_tag_transparent = 1;
6117 make_function_rtl (current_function_decl);
6119 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
6120 /* Promote the value to int before returning it. */
6121 if (C_PROMOTING_INTEGER_TYPE_P (restype))
6123 /* It retains unsignedness if traditional
6124 or if not really getting wider. */
6125 if (TREE_UNSIGNED (restype)
6126 && (flag_traditional
6127 || (TYPE_PRECISION (restype)
6128 == TYPE_PRECISION (integer_type_node))))
6129 restype = unsigned_type_node;
6131 restype = integer_type_node;
6133 DECL_RESULT (current_function_decl)
6134 = build_decl (RESULT_DECL, NULL_TREE, restype);
6136 /* If this fcn was already referenced via a block-scope `extern' decl
6137 (or an implicit decl), propagate certain information about the usage. */
6138 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
6139 TREE_ADDRESSABLE (current_function_decl) = 1;
6141 immediate_size_expand = old_immediate_size_expand;
6146 /* Record that this function is going to be a varargs function.
6147 This is called before store_parm_decls, which is too early
6148 to call mark_varargs directly. */
6153 c_function_varargs = 1;
6156 /* Store the parameter declarations into the current function declaration.
6157 This is called after parsing the parameter declarations, before
6158 digesting the body of the function.
6160 For an old-style definition, modify the function's type
6161 to specify at least the number of arguments. */
6166 register tree fndecl = current_function_decl;
6169 /* This is either a chain of PARM_DECLs (if a prototype was used)
6170 or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */
6171 tree specparms = current_function_parms;
6173 /* This is a list of types declared among parms in a prototype. */
6174 tree parmtags = current_function_parm_tags;
6176 /* This is a chain of PARM_DECLs from old-style parm declarations. */
6177 register tree parmdecls = getdecls ();
6179 /* This is a chain of any other decls that came in among the parm
6180 declarations. If a parm is declared with enum {foo, bar} x;
6181 then CONST_DECLs for foo and bar are put here. */
6184 /* Nonzero if this definition is written with a prototype. */
6187 if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST)
6189 /* This case is when the function was defined with an ANSI prototype.
6190 The parms already have decls, so we need not do anything here
6191 except record them as in effect
6192 and complain if any redundant old-style parm decls were written. */
6203 error_with_decl (fndecl,
6204 "parm types given both in parmlist and separately");
6205 /* Get rid of the erroneous decls; don't keep them on
6206 the list of parms, since they might not be PARM_DECLs. */
6207 for (decl = current_binding_level->names;
6208 decl; decl = TREE_CHAIN (decl))
6209 if (DECL_NAME (decl))
6210 IDENTIFIER_LOCAL_VALUE (DECL_NAME (decl)) = 0;
6211 for (link = current_binding_level->shadowed;
6212 link; link = TREE_CHAIN (link))
6213 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
6214 current_binding_level->names = 0;
6215 current_binding_level->shadowed = 0;
6218 specparms = nreverse (specparms);
6219 for (parm = specparms; parm; parm = next)
6221 next = TREE_CHAIN (parm);
6222 if (TREE_CODE (parm) == PARM_DECL)
6224 if (DECL_NAME (parm) == 0)
6225 error_with_decl (parm, "parameter name omitted");
6226 else if (TREE_CODE (TREE_TYPE (parm)) != ERROR_MARK
6227 && VOID_TYPE_P (TREE_TYPE (parm)))
6229 error_with_decl (parm, "parameter `%s' declared void");
6230 /* Change the type to error_mark_node so this parameter
6231 will be ignored by assign_parms. */
6232 TREE_TYPE (parm) = error_mark_node;
6238 /* If we find an enum constant or a type tag,
6239 put it aside for the moment. */
6240 TREE_CHAIN (parm) = 0;
6241 others = chainon (others, parm);
6245 /* Get the decls in their original chain order
6246 and record in the function. */
6247 DECL_ARGUMENTS (fndecl) = getdecls ();
6250 /* If this function takes a variable number of arguments,
6251 add a phony parameter to the end of the parm list,
6252 to represent the position of the first unnamed argument. */
6253 if (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))))
6256 tree dummy = build_decl (PARM_DECL, NULL_TREE, void_type_node);
6257 /* Let's hope the address of the unnamed parm
6258 won't depend on its type. */
6259 TREE_TYPE (dummy) = integer_type_node;
6260 DECL_ARG_TYPE (dummy) = integer_type_node;
6261 DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), dummy);
6265 /* Now pushdecl the enum constants. */
6266 for (parm = others; parm; parm = next)
6268 next = TREE_CHAIN (parm);
6269 if (DECL_NAME (parm) == 0)
6271 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
6273 else if (TREE_CODE (parm) != PARM_DECL)
6277 storetags (chainon (parmtags, gettags ()));
6281 /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
6282 each with a parm name as the TREE_VALUE.
6284 PARMDECLS is a chain of declarations for parameters.
6285 Warning! It can also contain CONST_DECLs which are not parameters
6286 but are names of enumerators of any enum types
6287 declared among the parameters.
6289 First match each formal parameter name with its declaration.
6290 Associate decls with the names and store the decls
6291 into the TREE_PURPOSE slots. */
6293 /* We use DECL_WEAK as a flag to show which parameters have been
6294 seen already since it is not used on PARM_DECL or CONST_DECL. */
6295 for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
6296 DECL_WEAK (parm) = 0;
6298 for (parm = specparms; parm; parm = TREE_CHAIN (parm))
6300 register tree tail, found = NULL;
6302 if (TREE_VALUE (parm) == 0)
6304 error_with_decl (fndecl,
6305 "parameter name missing from parameter list");
6306 TREE_PURPOSE (parm) = 0;
6310 /* See if any of the parmdecls specifies this parm by name.
6311 Ignore any enumerator decls. */
6312 for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
6313 if (DECL_NAME (tail) == TREE_VALUE (parm)
6314 && TREE_CODE (tail) == PARM_DECL)
6320 /* If declaration already marked, we have a duplicate name.
6321 Complain, and don't use this decl twice. */
6322 if (found && DECL_WEAK (found))
6324 error_with_decl (found, "multiple parameters named `%s'");
6328 /* If the declaration says "void", complain and ignore it. */
6329 if (found && VOID_TYPE_P (TREE_TYPE (found)))
6331 error_with_decl (found, "parameter `%s' declared void");
6332 TREE_TYPE (found) = integer_type_node;
6333 DECL_ARG_TYPE (found) = integer_type_node;
6334 layout_decl (found, 0);
6337 /* Traditionally, a parm declared float is actually a double. */
6338 if (found && flag_traditional
6339 && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == float_type_node)
6341 TREE_TYPE (found) = double_type_node;
6342 DECL_ARG_TYPE (found) = double_type_node;
6343 layout_decl (found, 0);
6346 /* If no declaration found, default to int. */
6349 found = build_decl (PARM_DECL, TREE_VALUE (parm),
6351 DECL_ARG_TYPE (found) = TREE_TYPE (found);
6352 DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
6353 DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
6355 pedwarn_with_decl (found, "type of `%s' defaults to `int'");
6356 else if (extra_warnings)
6357 warning_with_decl (found, "type of `%s' defaults to `int'");
6361 TREE_PURPOSE (parm) = found;
6363 /* Mark this decl as "already found". */
6364 DECL_WEAK (found) = 1;
6367 /* Put anything which is on the parmdecls chain and which is
6368 not a PARM_DECL onto the list NONPARMS. (The types of
6369 non-parm things which might appear on the list include
6370 enumerators and NULL-named TYPE_DECL nodes.) Complain about
6371 any actual PARM_DECLs not matched with any names. */
6374 for (parm = parmdecls; parm;)
6376 tree next = TREE_CHAIN (parm);
6377 TREE_CHAIN (parm) = 0;
6379 if (TREE_CODE (parm) != PARM_DECL)
6380 nonparms = chainon (nonparms, parm);
6383 /* Complain about args with incomplete types. */
6384 if (!COMPLETE_TYPE_P (TREE_TYPE (parm)))
6386 error_with_decl (parm, "parameter `%s' has incomplete type");
6387 TREE_TYPE (parm) = error_mark_node;
6390 if (! DECL_WEAK (parm))
6392 error_with_decl (parm,
6393 "declaration for parameter `%s' but no such parameter");
6394 /* Pretend the parameter was not missing.
6395 This gets us to a standard state and minimizes
6396 further error messages. */
6398 = chainon (specparms,
6399 tree_cons (parm, NULL_TREE, NULL_TREE));
6406 /* Chain the declarations together in the order of the list of
6407 names. Store that chain in the function decl, replacing the
6410 DECL_ARGUMENTS (fndecl) = 0;
6413 for (last = 0; parm; parm = TREE_CHAIN (parm))
6414 if (TREE_PURPOSE (parm))
6417 DECL_ARGUMENTS (fndecl) = TREE_PURPOSE (parm);
6419 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6420 last = TREE_PURPOSE (parm);
6421 TREE_CHAIN (last) = 0;
6425 /* If there was a previous prototype,
6426 set the DECL_ARG_TYPE of each argument according to
6427 the type previously specified, and report any mismatches. */
6429 if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6432 for (parm = DECL_ARGUMENTS (fndecl),
6433 type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6434 parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6435 != void_type_node));
6436 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6438 if (parm == 0 || type == 0
6439 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6441 error ("number of arguments doesn't match prototype");
6442 error_with_file_and_line (current_function_prototype_file,
6443 current_function_prototype_line,
6444 "prototype declaration");
6447 /* Type for passing arg must be consistent
6448 with that declared for the arg. */
6449 if (! comptypes (DECL_ARG_TYPE (parm), TREE_VALUE (type)))
6451 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6452 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6454 /* Adjust argument to match prototype. E.g. a previous
6455 `int foo(float);' prototype causes
6456 `int foo(x) float x; {...}' to be treated like
6457 `int foo(float x) {...}'. This is particularly
6458 useful for argument types like uid_t. */
6459 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6461 if (PROMOTE_PROTOTYPES
6462 && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
6463 || TREE_CODE (TREE_TYPE (parm)) == ENUMERAL_TYPE)
6464 && TYPE_PRECISION (TREE_TYPE (parm))
6465 < TYPE_PRECISION (integer_type_node))
6466 DECL_ARG_TYPE (parm) = integer_type_node;
6470 pedwarn ("promoted argument `%s' doesn't match prototype",
6471 IDENTIFIER_POINTER (DECL_NAME (parm)));
6472 warning_with_file_and_line
6473 (current_function_prototype_file,
6474 current_function_prototype_line,
6475 "prototype declaration");
6478 /* If -traditional, allow `int' argument to match
6479 `unsigned' prototype. */
6480 else if (! (flag_traditional
6481 && TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == integer_type_node
6482 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == unsigned_type_node))
6484 error ("argument `%s' doesn't match prototype",
6485 IDENTIFIER_POINTER (DECL_NAME (parm)));
6486 error_with_file_and_line (current_function_prototype_file,
6487 current_function_prototype_line,
6488 "prototype declaration");
6492 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6495 /* Otherwise, create a prototype that would match. */
6499 tree actual = 0, last = 0, type;
6501 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6503 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6505 TREE_CHAIN (last) = type;
6510 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6512 TREE_CHAIN (last) = type;
6516 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6517 of the type of this function, but we need to avoid having this
6518 affect the types of other similarly-typed functions, so we must
6519 first force the generation of an identical (but separate) type
6520 node for the relevant function type. The new node we create
6521 will be a variant of the main variant of the original function
6524 TREE_TYPE (fndecl) = build_type_copy (TREE_TYPE (fndecl));
6526 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6529 /* Now store the final chain of decls for the arguments
6530 as the decl-chain of the current lexical scope.
6531 Put the enumerators in as well, at the front so that
6532 DECL_ARGUMENTS is not modified. */
6534 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
6537 /* Make sure the binding level for the top of the function body
6538 gets a BLOCK if there are any in the function.
6539 Otherwise, the dbx output is wrong. */
6541 keep_next_if_subblocks = 1;
6543 /* ??? This might be an improvement,
6544 but needs to be thought about some more. */
6546 keep_next_level_flag = 1;
6549 /* Write a record describing this function definition to the prototypes
6550 file (if requested). */
6552 gen_aux_info_record (fndecl, 1, 0, prototype);
6554 /* Initialize the RTL code for the function. */
6556 init_function_start (fndecl, input_filename, lineno);
6558 /* Begin the statement tree for this function. */
6559 DECL_LANG_SPECIFIC (current_function_decl)
6560 =((struct lang_decl *) ggc_alloc (sizeof (struct lang_decl)));
6561 begin_stmt_tree (&DECL_SAVED_TREE (current_function_decl));
6563 /* This function is being processed in whole-function mode. */
6564 cfun->x_whole_function_mode_p = 1;
6566 /* Even though we're inside a function body, we still don't want to
6567 call expand_expr to calculate the size of a variable-sized array.
6568 We haven't necessarily assigned RTL to all variables yet, so it's
6569 not safe to try to expand expressions involving them. */
6570 immediate_size_expand = 0;
6571 cfun->x_dont_save_pending_sizes_p = 1;
6574 /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
6575 each with a parm name as the TREE_VALUE. A null pointer as TREE_VALUE
6576 stands for an ellipsis in the identifier list.
6578 PARMLIST is the data returned by get_parm_info for the
6579 parmlist that follows the semicolon.
6581 We return a value of the same sort that get_parm_info returns,
6582 except that it describes the combination of identifiers and parmlist. */
6585 combine_parm_decls (specparms, parmlist, void_at_end)
6586 tree specparms, parmlist;
6589 register tree fndecl = current_function_decl;
6592 tree parmdecls = TREE_PURPOSE (parmlist);
6594 /* This is a chain of any other decls that came in among the parm
6595 declarations. They were separated already by get_parm_info,
6596 so we just need to keep them separate. */
6597 tree nonparms = TREE_VALUE (parmlist);
6601 for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
6602 DECL_WEAK (parm) = 0;
6604 for (parm = specparms; parm; parm = TREE_CHAIN (parm))
6606 register tree tail, found = NULL;
6608 /* See if any of the parmdecls specifies this parm by name. */
6609 for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
6610 if (DECL_NAME (tail) == TREE_VALUE (parm))
6616 /* If declaration already marked, we have a duplicate name.
6617 Complain, and don't use this decl twice. */
6618 if (found && DECL_WEAK (found))
6620 error_with_decl (found, "multiple parameters named `%s'");
6624 /* If the declaration says "void", complain and ignore it. */
6625 if (found && VOID_TYPE_P (TREE_TYPE (found)))
6627 error_with_decl (found, "parameter `%s' declared void");
6628 TREE_TYPE (found) = integer_type_node;
6629 DECL_ARG_TYPE (found) = integer_type_node;
6630 layout_decl (found, 0);
6633 /* Traditionally, a parm declared float is actually a double. */
6634 if (found && flag_traditional
6635 && TYPE_MAIN_VARIANT (TREE_TYPE (found)) == float_type_node)
6637 TREE_TYPE (found) = double_type_node;
6638 DECL_ARG_TYPE (found) = double_type_node;
6639 layout_decl (found, 0);
6642 /* If no declaration found, default to int. */
6645 found = build_decl (PARM_DECL, TREE_VALUE (parm),
6647 DECL_ARG_TYPE (found) = TREE_TYPE (found);
6648 DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
6649 DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
6650 error_with_decl (found, "type of parameter `%s' is not declared");
6654 TREE_PURPOSE (parm) = found;
6656 /* Mark this decl as "already found". */
6657 DECL_WEAK (found) = 1;
6660 /* Complain about any actual PARM_DECLs not matched with any names. */
6662 for (parm = parmdecls; parm;)
6664 tree next = TREE_CHAIN (parm);
6665 TREE_CHAIN (parm) = 0;
6667 /* Complain about args with incomplete types. */
6668 if (!COMPLETE_TYPE_P (TREE_TYPE (parm)))
6670 error_with_decl (parm, "parameter `%s' has incomplete type");
6671 TREE_TYPE (parm) = error_mark_node;
6674 if (! DECL_WEAK (parm))
6676 error_with_decl (parm,
6677 "declaration for parameter `%s' but no such parameter");
6678 /* Pretend the parameter was not missing.
6679 This gets us to a standard state and minimizes
6680 further error messages. */
6682 = chainon (specparms,
6683 tree_cons (parm, NULL_TREE, NULL_TREE));
6689 /* Chain the declarations together in the order of the list of names.
6690 At the same time, build up a list of their types, in reverse order. */
6696 for (last = 0; parm; parm = TREE_CHAIN (parm))
6697 if (TREE_PURPOSE (parm))
6700 parmdecls = TREE_PURPOSE (parm);
6702 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6703 last = TREE_PURPOSE (parm);
6704 TREE_CHAIN (last) = 0;
6706 types = tree_cons (NULL_TREE, TREE_TYPE (parm), types);
6711 return tree_cons (parmdecls, nonparms,
6712 nreverse (tree_cons (NULL_TREE, void_type_node, types)));
6714 return tree_cons (parmdecls, nonparms, nreverse (types));
6717 /* Finish up a function declaration and compile that function
6718 all the way to assembler language output. The free the storage
6719 for the function definition.
6721 This is called after parsing the body of the function definition.
6723 NESTED is nonzero if the function being finished is nested in another. */
6726 finish_function (nested)
6729 register tree fndecl = current_function_decl;
6731 /* TREE_READONLY (fndecl) = 1;
6732 This caused &foo to be of type ptr-to-const-function
6733 which then got a warning when stored in a ptr-to-function variable. */
6736 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6738 /* Must mark the RESULT_DECL as being in this function. */
6740 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6742 /* Obey `register' declarations if `setjmp' is called in this fn. */
6743 if (flag_traditional && current_function_calls_setjmp)
6745 setjmp_protect (DECL_INITIAL (fndecl));
6746 setjmp_protect_args ();
6749 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6751 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6752 != integer_type_node)
6754 /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6755 If warn_main is -1 (-Wno-main) we don't want to be warned. */
6757 pedwarn_with_decl (fndecl, "return type of `%s' is not `int'");
6761 #ifdef DEFAULT_MAIN_RETURN
6762 /* Make it so that `main' always returns success by default. */
6763 DEFAULT_MAIN_RETURN;
6766 c_expand_return (integer_zero_node);
6771 /* Tie off the statement tree for this function. */
6772 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
6773 /* Clear out memory we no longer need. */
6774 free_after_parsing (cfun);
6775 /* Since we never call rest_of_compilation, we never clear
6776 CFUN. Do so explicitly. */
6777 free_after_compilation (cfun);
6782 /* Generate RTL for the body of this function. */
6783 c_expand_body (fndecl, nested);
6784 /* Let the error reporting routines know that we're outside a
6785 function. For a nested function, this value is used in
6786 pop_c_function_context and then reset via pop_function_context. */
6787 current_function_decl = NULL;
6788 c_function_name_declared_p = 0;
6792 /* Generate the RTL for the body of FNDECL. If NESTED_P is non-zero,
6793 then we are already in the process of generating RTL for another
6797 c_expand_body (fndecl, nested_p)
6801 /* There's no reason to do any of the work here if we're only doing
6802 semantic analysis; this code just generates RTL. */
6803 if (flag_syntax_only)
6806 /* Squirrel away our current state. */
6808 push_function_context ();
6810 /* Initialize the RTL code for the function. */
6811 current_function_decl = fndecl;
6812 init_function_start (fndecl, input_filename, DECL_SOURCE_LINE (fndecl));
6814 /* This function is being processed in whole-function mode. */
6815 cfun->x_whole_function_mode_p = 1;
6817 /* Even though we're inside a function body, we still don't want to
6818 call expand_expr to calculate the size of a variable-sized array.
6819 We haven't necessarily assigned RTL to all variables yet, so it's
6820 not safe to try to expand expressions involving them. */
6821 immediate_size_expand = 0;
6822 cfun->x_dont_save_pending_sizes_p = 1;
6824 /* If this is a varargs function, inform function.c. */
6825 if (c_function_varargs)
6828 /* Set up parameters and prepare for return, for the function. */
6829 expand_function_start (fndecl, 0);
6831 /* If this function is `main', emit a call to `__main'
6832 to run global initializers, etc. */
6833 if (DECL_NAME (fndecl)
6834 && MAIN_NAME_P (DECL_NAME (fndecl))
6835 && DECL_CONTEXT (fndecl) == NULL_TREE)
6836 expand_main_function ();
6838 /* Generate the RTL for this function. */
6839 expand_stmt (DECL_SAVED_TREE (fndecl));
6840 /* Allow the body of the function to be garbage collected. */
6841 DECL_SAVED_TREE (fndecl) = NULL_TREE;
6843 /* We hard-wired immediate_size_expand to zero in start_function.
6844 expand_function_end will decrement this variable. So, we set the
6845 variable to one here, so that after the decrement it will remain
6847 immediate_size_expand = 1;
6849 /* Allow language dialects to perform special processing. */
6850 if (lang_expand_function_end)
6851 (*lang_expand_function_end) ();
6853 /* Generate rtl for function exit. */
6854 expand_function_end (input_filename, lineno, 0);
6856 /* If this is a nested function, protect the local variables in the stack
6857 above us from being collected while we're compiling this function. */
6859 ggc_push_context ();
6861 /* Run the optimizers and output the assembler code for this function. */
6862 rest_of_compilation (fndecl);
6864 /* Undo the GC context switch. */
6868 /* With just -W, complain only if function returns both with
6869 and without a value. */
6871 && current_function_returns_value
6872 && current_function_returns_null)
6873 warning ("this function may return with or without a value");
6875 /* If requested, warn about function definitions where the function will
6876 return a value (usually of some struct or union type) which itself will
6877 take up a lot of stack space. */
6879 if (warn_larger_than && !DECL_EXTERNAL (fndecl) && TREE_TYPE (fndecl))
6881 tree ret_type = TREE_TYPE (TREE_TYPE (fndecl));
6883 if (ret_type && TREE_CODE (TYPE_SIZE_UNIT (ret_type)) == INTEGER_CST
6884 && 0 < compare_tree_int (TYPE_SIZE_UNIT (ret_type),
6887 unsigned int size_as_int
6888 = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (ret_type));
6890 if (compare_tree_int (TYPE_SIZE_UNIT (ret_type), size_as_int) == 0)
6891 warning_with_decl (fndecl,
6892 "size of return value of `%s' is %u bytes",
6895 warning_with_decl (fndecl,
6896 "size of return value of `%s' is larger than %d bytes",
6901 if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested_p)
6903 /* Stop pointing to the local nodes about to be freed.
6904 But DECL_INITIAL must remain nonzero so we know this
6905 was an actual function definition.
6906 For a nested function, this is done in pop_c_function_context.
6907 If rest_of_compilation set this to 0, leave it 0. */
6908 if (DECL_INITIAL (fndecl) != 0)
6909 DECL_INITIAL (fndecl) = error_mark_node;
6911 DECL_ARGUMENTS (fndecl) = 0;
6914 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6916 #ifndef ASM_OUTPUT_CONSTRUCTOR
6917 if (! flag_gnu_linker)
6918 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6921 assemble_constructor (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)));
6924 if (DECL_STATIC_DESTRUCTOR (fndecl))
6926 #ifndef ASM_OUTPUT_DESTRUCTOR
6927 if (! flag_gnu_linker)
6928 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6931 assemble_destructor (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)));
6936 /* Return to the enclosing function. */
6937 pop_function_context ();
6938 /* If the nested function was inline, write it out if that is
6940 if (!TREE_ASM_WRITTEN (fndecl) && TREE_ADDRESSABLE (fndecl))
6942 push_function_context ();
6943 output_inline_function (fndecl);
6944 pop_function_context ();
6950 /* Check the declarations given in a for-loop for satisfying the C99
6953 check_for_loop_decls ()
6959 /* If we get here, declarations have been used in a for loop without
6960 the C99 for loop scope. This doesn't make much sense, so don't
6962 error ("`for' loop initial declaration used outside C99 mode");
6965 /* C99 subclause 6.8.5 paragraph 3:
6967 [#3] The declaration part of a for statement shall only
6968 declare identifiers for objects having storage class auto or
6971 It isn't clear whether, in this sentence, "identifiers" binds to
6972 "shall only declare" or to "objects" - that is, whether all identifiers
6973 declared must be identifiers for objects, or whether the restriction
6974 only applies to those that are. (A question on this in comp.std.c
6975 in November 2000 received no answer.) We implement the strictest
6976 interpretation, to avoid creating an extension which later causes
6979 for (t = gettags (); t; t = TREE_CHAIN (t))
6981 if (TREE_PURPOSE (t) != 0)
6982 error ("`%s %s' declared in `for' loop initial declaration",
6983 (TREE_CODE (TREE_VALUE (t)) == RECORD_TYPE ? "struct"
6984 : TREE_CODE (TREE_VALUE (t)) == UNION_TYPE ? "union"
6986 IDENTIFIER_POINTER (TREE_PURPOSE (t)));
6988 for (t = getdecls (); t; t = TREE_CHAIN (t))
6990 if (TREE_CODE (t) != VAR_DECL && DECL_NAME (t))
6991 error_with_decl (t, "declaration of non-variable `%s' in `for' loop initial declaration");
6992 else if (TREE_STATIC (t))
6993 error_with_decl (t, "declaration of static variable `%s' in `for' loop initial declaration");
6994 else if (DECL_EXTERNAL (t))
6995 error_with_decl (t, "declaration of `extern' variable `%s' in `for' loop initial declaration");
6999 /* Save and restore the variables in this file and elsewhere
7000 that keep track of the progress of compilation of the current function.
7001 Used for nested functions. */
7003 struct c_language_function
7005 struct language_function base;
7007 tree shadowed_labels;
7010 int warn_about_return_type;
7012 struct binding_level *binding_level;
7015 /* Save and reinitialize the variables
7016 used during compilation of a C function. */
7019 push_c_function_context (f)
7022 struct c_language_function *p;
7023 p = ((struct c_language_function *)
7024 xmalloc (sizeof (struct c_language_function)));
7025 f->language = (struct language_function *) p;
7027 p->base.x_stmt_tree = c_stmt_tree;
7028 p->base.x_scope_stmt_stack = c_scope_stmt_stack;
7029 p->base.x_function_name_declared_p = c_function_name_declared_p;
7030 p->named_labels = named_labels;
7031 p->shadowed_labels = shadowed_labels;
7032 p->returns_value = current_function_returns_value;
7033 p->returns_null = current_function_returns_null;
7034 p->warn_about_return_type = warn_about_return_type;
7035 p->extern_inline = current_extern_inline;
7036 p->binding_level = current_binding_level;
7039 /* Restore the variables used during compilation of a C function. */
7042 pop_c_function_context (f)
7045 struct c_language_function *p
7046 = (struct c_language_function *) f->language;
7049 /* Bring back all the labels that were shadowed. */
7050 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
7051 if (DECL_NAME (TREE_VALUE (link)) != 0)
7052 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
7053 = TREE_VALUE (link);
7055 if (DECL_SAVED_INSNS (current_function_decl) == 0
7056 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
7058 /* Stop pointing to the local nodes about to be freed. */
7059 /* But DECL_INITIAL must remain nonzero so we know this
7060 was an actual function definition. */
7061 DECL_INITIAL (current_function_decl) = error_mark_node;
7062 DECL_ARGUMENTS (current_function_decl) = 0;
7065 c_stmt_tree = p->base.x_stmt_tree;
7066 c_scope_stmt_stack = p->base.x_scope_stmt_stack;
7067 c_function_name_declared_p = p->base.x_function_name_declared_p;
7068 named_labels = p->named_labels;
7069 shadowed_labels = p->shadowed_labels;
7070 current_function_returns_value = p->returns_value;
7071 current_function_returns_null = p->returns_null;
7072 warn_about_return_type = p->warn_about_return_type;
7073 current_extern_inline = p->extern_inline;
7074 current_binding_level = p->binding_level;
7080 /* Mark the language specific parts of F for GC. */
7083 mark_c_function_context (f)
7086 struct c_language_function *p
7087 = (struct c_language_function *) f->language;
7092 mark_c_language_function (&p->base);
7093 ggc_mark_tree (p->shadowed_labels);
7094 ggc_mark_tree (p->named_labels);
7095 mark_binding_level (&p->binding_level);
7098 /* Copy the DECL_LANG_SEPECIFIC data associated with NODE. */
7101 copy_lang_decl (decl)
7104 struct lang_decl *ld;
7106 if (!DECL_LANG_SPECIFIC (decl))
7109 ld = (struct lang_decl *) ggc_alloc (sizeof (struct lang_decl));
7110 memcpy ((char *) ld, (char *) DECL_LANG_SPECIFIC (decl),
7111 sizeof (struct lang_decl));
7112 DECL_LANG_SPECIFIC (decl) = ld;
7115 /* Mark the language specific bits in T for GC. */
7121 if (TREE_CODE (t) == IDENTIFIER_NODE)
7123 struct lang_identifier *i = (struct lang_identifier *) t;
7124 ggc_mark_tree (i->global_value);
7125 ggc_mark_tree (i->local_value);
7126 ggc_mark_tree (i->label_value);
7127 ggc_mark_tree (i->implicit_decl);
7128 ggc_mark_tree (i->error_locus);
7129 ggc_mark_tree (i->limbo_value);
7131 else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t))
7132 ggc_mark (TYPE_LANG_SPECIFIC (t));
7133 else if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
7135 ggc_mark (DECL_LANG_SPECIFIC (t));
7136 c_mark_lang_decl (&DECL_LANG_SPECIFIC (t)->base);
7140 /* The functions below are required for functionality of doing
7141 function at once processing in the C front end. Currently these
7142 functions are not called from anywhere in the C front end, but as
7143 these changes continue, that will change. */
7145 /* Returns non-zero if the current statement is a full expression,
7146 i.e. temporaries created during that statement should be destroyed
7147 at the end of the statement. */
7150 stmts_are_full_exprs_p ()
7155 /* Returns the stmt_tree (if any) to which statements are currently
7156 being added. If there is no active statement-tree, NULL is
7160 current_stmt_tree ()
7162 return &c_stmt_tree;
7165 /* Returns the stack of SCOPE_STMTs for the current function. */
7168 current_scope_stmt_stack ()
7170 return &c_scope_stmt_stack;
7173 /* Nonzero if TYPE is an anonymous union or struct type. Always 0 in
7177 anon_aggr_type_p (node)
7178 tree node ATTRIBUTE_UNUSED;
7183 /* Dummy function in place of callback used by C++. */
7186 extract_interface_info ()
7190 /* Return a new COMPOUND_STMT, after adding it to the current
7194 c_begin_compound_stmt ()
7198 /* Create the COMPOUND_STMT. */
7199 stmt = add_stmt (build_stmt (COMPOUND_STMT, NULL_TREE));
7200 /* If we haven't already declared __FUNCTION__ and its ilk then this
7201 is the opening curly brace of the function. Declare them now. */
7202 if (!c_function_name_declared_p)
7204 c_function_name_declared_p = 1;
7205 declare_function_name ();
7211 /* Expand T (a DECL_STMT) if it declares an entity not handled by the
7215 c_expand_decl_stmt (t)
7218 tree decl = DECL_STMT_DECL (t);
7220 /* Expand nested functions. */
7221 if (TREE_CODE (decl) == FUNCTION_DECL
7222 && DECL_CONTEXT (decl) == current_function_decl
7223 && DECL_SAVED_TREE (decl))
7224 c_expand_body (decl, /*nested_p=*/1);