2002-05-17 David S. Miller <davem@redhat.com>
[official-gcc.git] / gcc / c-decl.c
blob854cd7309fd9960adefc28ffdda1cca6f4376816
1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 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. */
29 #include "config.h"
30 #include "system.h"
31 #include "intl.h"
32 #include "tree.h"
33 #include "tree-inline.h"
34 #include "rtl.h"
35 #include "flags.h"
36 #include "function.h"
37 #include "output.h"
38 #include "expr.h"
39 #include "c-tree.h"
40 #include "c-lex.h"
41 #include "toplev.h"
42 #include "ggc.h"
43 #include "tm_p.h"
44 #include "cpplib.h"
45 #include "target.h"
46 #include "debug.h"
47 #include "timevar.h"
48 #include "c-common.h"
49 #include "c-pragma.h"
51 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
52 enum decl_context
53 { NORMAL, /* Ordinary declaration */
54 FUNCDEF, /* Function definition */
55 PARM, /* Declaration of parm before function body */
56 FIELD, /* Declaration inside struct or union */
57 BITFIELD, /* Likewise but with specified width */
58 TYPENAME}; /* Typename (inside cast or sizeof) */
61 /* Nonzero if we have seen an invalid cross reference
62 to a struct, union, or enum, but not yet printed the message. */
64 tree pending_invalid_xref;
65 /* File and line to appear in the eventual error message. */
66 const char *pending_invalid_xref_file;
67 int pending_invalid_xref_line;
69 /* While defining an enum type, this is 1 plus the last enumerator
70 constant value. Note that will do not have to save this or `enum_overflow'
71 around nested function definition since such a definition could only
72 occur in an enum value expression and we don't use these variables in
73 that case. */
75 static tree enum_next_value;
77 /* Nonzero means that there was overflow computing enum_next_value. */
79 static int enum_overflow;
81 /* Parsing a function declarator leaves a list of parameter names
82 or a chain or parameter decls here. */
84 static tree last_function_parms;
86 /* Parsing a function declarator leaves here a chain of structure
87 and enum types declared in the parmlist. */
89 static tree last_function_parm_tags;
91 /* After parsing the declarator that starts a function definition,
92 `start_function' puts here the list of parameter names or chain of decls.
93 `store_parm_decls' finds it here. */
95 static tree current_function_parms;
97 /* Similar, for last_function_parm_tags. */
98 static tree current_function_parm_tags;
100 /* Similar, for the file and line that the prototype came from if this is
101 an old-style definition. */
102 static const char *current_function_prototype_file;
103 static int current_function_prototype_line;
105 /* The current statement tree. */
107 static struct stmt_tree_s c_stmt_tree;
109 /* The current scope statement stack. */
111 static tree c_scope_stmt_stack;
113 /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
114 that have names. Here so we can clear out their names' definitions
115 at the end of the function. */
117 static tree named_labels;
119 /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
121 static tree shadowed_labels;
123 /* Nonzero when store_parm_decls is called indicates a varargs function.
124 Value not meaningful after store_parm_decls. */
126 static int c_function_varargs;
128 /* Set to 0 at beginning of a function definition, set to 1 if
129 a return statement that specifies a return value is seen. */
131 int current_function_returns_value;
133 /* Set to 0 at beginning of a function definition, set to 1 if
134 a return statement with no argument is seen. */
136 int current_function_returns_null;
138 /* Set to 0 at beginning of a function definition, set to 1 if
139 a call to a noreturn function is seen. */
141 int current_function_returns_abnormally;
143 /* Set to nonzero by `grokdeclarator' for a function
144 whose return type is defaulted, if warnings for this are desired. */
146 static int warn_about_return_type;
148 /* Nonzero when starting a function declared `extern inline'. */
150 static int current_extern_inline;
152 /* For each binding contour we allocate a binding_level structure
153 * which records the names defined in that contour.
154 * Contours include:
155 * 0) the global one
156 * 1) one for each function definition,
157 * where internal declarations of the parameters appear.
158 * 2) one for each compound statement,
159 * to record its declarations.
161 * The current meaning of a name can be found by searching the levels from
162 * the current one out to the global one.
165 /* Note that the information in the `names' component of the global contour
166 is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
168 struct binding_level
170 /* A chain of _DECL nodes for all variables, constants, functions,
171 and typedef types. These are in the reverse of the order supplied.
173 tree names;
175 /* A list of structure, union and enum definitions,
176 * for looking up tag names.
177 * It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
178 * or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
179 * or ENUMERAL_TYPE node.
181 tree tags;
183 /* For each level, a list of shadowed outer-level local definitions
184 to be restored when this level is popped.
185 Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
186 whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
187 tree shadowed;
189 /* For each level (except not the global one),
190 a chain of BLOCK nodes for all the levels
191 that were entered and exited one level down. */
192 tree blocks;
194 /* The BLOCK node for this level, if one has been preallocated.
195 If 0, the BLOCK is allocated (if needed) when the level is popped. */
196 tree this_block;
198 /* The binding level which this one is contained in (inherits from). */
199 struct binding_level *level_chain;
201 /* Nonzero for the level that holds the parameters of a function. */
202 char parm_flag;
204 /* Nonzero if this level "doesn't exist" for tags. */
205 char tag_transparent;
207 /* Nonzero if sublevels of this level "don't exist" for tags.
208 This is set in the parm level of a function definition
209 while reading the function body, so that the outermost block
210 of the function body will be tag-transparent. */
211 char subblocks_tag_transparent;
213 /* Nonzero means make a BLOCK for this level regardless of all else. */
214 char keep;
216 /* Nonzero means make a BLOCK if this level has any subblocks. */
217 char keep_if_subblocks;
219 /* Number of decls in `names' that have incomplete
220 structure or union types. */
221 int n_incomplete;
223 /* A list of decls giving the (reversed) specified order of parms,
224 not including any forward-decls in the parmlist.
225 This is so we can put the parms in proper order for assign_parms. */
226 tree parm_order;
229 #define NULL_BINDING_LEVEL (struct binding_level *) NULL
231 /* The binding level currently in effect. */
233 static struct binding_level *current_binding_level;
235 /* A chain of binding_level structures awaiting reuse. */
237 static struct binding_level *free_binding_level;
239 /* The outermost binding level, for names of file scope.
240 This is created when the compiler is started and exists
241 through the entire run. */
243 static struct binding_level *global_binding_level;
245 /* Binding level structures are initialized by copying this one. */
247 static struct binding_level clear_binding_level
248 = {NULL, NULL, NULL, NULL, NULL, NULL_BINDING_LEVEL, 0, 0, 0, 0, 0, 0,
249 NULL};
251 /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
253 static int keep_next_level_flag;
255 /* Nonzero means make a BLOCK for the next level pushed
256 if it has subblocks. */
258 static int keep_next_if_subblocks;
260 /* The chain of outer levels of label scopes.
261 This uses the same data structure used for binding levels,
262 but it works differently: each link in the chain records
263 saved values of named_labels and shadowed_labels for
264 a label binding level outside the current one. */
266 static struct binding_level *label_level_chain;
268 /* Functions called automatically at the beginning and end of execution. */
270 tree static_ctors, static_dtors;
272 /* Forward declarations. */
274 static struct binding_level * make_binding_level PARAMS ((void));
275 static void mark_binding_level PARAMS ((void *));
276 static void clear_limbo_values PARAMS ((tree));
277 static int duplicate_decls PARAMS ((tree, tree, int));
278 static int redeclaration_error_message PARAMS ((tree, tree));
279 static void storedecls PARAMS ((tree));
280 static void storetags PARAMS ((tree));
281 static tree lookup_tag PARAMS ((enum tree_code, tree,
282 struct binding_level *, int));
283 static tree lookup_tag_reverse PARAMS ((tree));
284 static tree grokdeclarator PARAMS ((tree, tree, enum decl_context,
285 int));
286 static tree grokparms PARAMS ((tree, int));
287 static void layout_array_type PARAMS ((tree));
288 static tree c_make_fname_decl PARAMS ((tree, int));
289 static void c_expand_body PARAMS ((tree, int, int));
290 static void warn_if_shadowing PARAMS ((tree, tree));
292 /* C-specific option variables. */
294 /* Nonzero means allow type mismatches in conditional expressions;
295 just make their values `void'. */
297 int flag_cond_mismatch;
299 /* Nonzero means don't recognize the keyword `asm'. */
301 int flag_no_asm;
303 /* Nonzero means enable C89 Amendment 1 features. */
305 int flag_isoc94 = 0;
307 /* Nonzero means use the ISO C99 dialect of C. */
309 int flag_isoc99 = 0;
311 /* Nonzero means that we have builtin functions, and main is an int */
313 int flag_hosted = 1;
315 /* Nonzero means add default format_arg attributes for functions not
316 in ISO C. */
318 int flag_noniso_default_format_attributes = 1;
320 /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
322 int flag_signed_bitfields = 1;
323 int explicit_flag_signed_bitfields = 0;
325 /* Nonzero means warn about use of implicit int. */
327 int warn_implicit_int;
329 /* Nonzero means warn about usage of long long when `-pedantic'. */
331 int warn_long_long = 1;
333 /* Nonzero means message about use of implicit function declarations;
334 1 means warning; 2 means error. */
336 int mesg_implicit_function_declaration = -1;
338 /* Nonzero means give string constants the type `const char *'
339 to get extra warnings from them. These warnings will be too numerous
340 to be useful, except in thoroughly ANSIfied programs. */
342 int flag_const_strings;
344 /* Nonzero means warn about pointer casts that can drop a type qualifier
345 from the pointer target type. */
347 int warn_cast_qual;
349 /* Nonzero means warn when casting a function call to a type that does
350 not match the return type (e.g. (float)sqrt() or (anything*)malloc()
351 when there is no previous declaration of sqrt or malloc. */
353 int warn_bad_function_cast;
355 /* Warn about functions which might be candidates for format attributes. */
357 int warn_missing_format_attribute;
359 /* Warn about traditional constructs whose meanings changed in ANSI C. */
361 int warn_traditional;
363 /* Nonzero means warn about sizeof(function) or addition/subtraction
364 of function pointers. */
366 int warn_pointer_arith;
368 /* Nonzero means warn for non-prototype function decls
369 or non-prototyped defs without previous prototype. */
371 int warn_strict_prototypes;
373 /* Nonzero means warn for any global function def
374 without separate previous prototype decl. */
376 int warn_missing_prototypes;
378 /* Nonzero means warn for any global function def
379 without separate previous decl. */
381 int warn_missing_declarations;
383 /* Nonzero means warn about multiple (redundant) decls for the same single
384 variable or function. */
386 int warn_redundant_decls = 0;
388 /* Nonzero means warn about extern declarations of objects not at
389 file-scope level and about *all* declarations of functions (whether
390 extern or static) not at file-scope level. Note that we exclude
391 implicit function declarations. To get warnings about those, use
392 -Wimplicit. */
394 int warn_nested_externs = 0;
396 /* Warn about a subscript that has type char. */
398 int warn_char_subscripts = 0;
400 /* Warn if a type conversion is done that might have confusing results. */
402 int warn_conversion;
404 /* Warn if adding () is suggested. */
406 int warn_parentheses;
408 /* Warn if initializer is not completely bracketed. */
410 int warn_missing_braces;
412 /* Warn if main is suspicious. */
414 int warn_main;
416 /* Warn about #pragma directives that are not recognised. */
418 int warn_unknown_pragmas = 0; /* Tri state variable. */
420 /* Warn about comparison of signed and unsigned values.
421 If -1, neither -Wsign-compare nor -Wno-sign-compare has been specified. */
423 int warn_sign_compare = -1;
425 /* Warn about testing equality of floating point numbers. */
427 int warn_float_equal = 0;
429 /* Nonzero means `$' can be in an identifier. */
431 #ifndef DOLLARS_IN_IDENTIFIERS
432 #define DOLLARS_IN_IDENTIFIERS 1
433 #endif
434 int dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
436 /* States indicating how grokdeclarator() should handle declspecs marked
437 with __attribute__((deprecated)). An object declared as
438 __attribute__((deprecated)) suppresses warnings of uses of other
439 deprecated items. */
441 enum deprecated_states {
442 DEPRECATED_NORMAL,
443 DEPRECATED_SUPPRESS
446 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
448 /* Decode the string P as a language-specific option for C.
449 Return the number of strings consumed. Should not complain
450 if it does not recognise the option. */
453 c_decode_option (argc, argv)
454 int argc ATTRIBUTE_UNUSED;
455 char **argv;
457 int strings_processed;
458 char *p = argv[0];
460 static const struct {
461 /* The name of the option. */
462 const char *option;
463 /* If non-NULL, a flag variable to set to 0 or 1. If NULL,
464 this means that cpp handles this option. */
465 int *flag;
466 } warn_options[] = {
467 /* This list is in alphabetical order. Keep it like that. */
468 { "bad-function-cast", &warn_bad_function_cast },
469 { "cast-qual", &warn_cast_qual },
470 { "char-subscripts", &warn_char_subscripts },
471 { "comment", NULL },
472 { "comments", NULL },
473 { "conversion", &warn_conversion },
474 { "div-by-zero", &warn_div_by_zero },
475 { "float-equal", &warn_float_equal },
476 { "format-extra-args", &warn_format_extra_args },
477 { "format-nonliteral", &warn_format_nonliteral },
478 { "format-security", &warn_format_security },
479 { "format-y2k", &warn_format_y2k },
480 { "implicit-function-declaration", &mesg_implicit_function_declaration },
481 { "implicit-int", &warn_implicit_int },
482 { "import", NULL },
483 { "long-long", &warn_long_long },
484 { "main", &warn_main },
485 { "missing-braces", &warn_missing_braces },
486 { "missing-declarations", &warn_missing_declarations },
487 { "missing-format-attribute", &warn_missing_format_attribute },
488 { "missing-prototypes", &warn_missing_prototypes },
489 { "multichar", &warn_multichar },
490 { "nested-externs", &warn_nested_externs },
491 { "parentheses", &warn_parentheses },
492 { "pointer-arith", &warn_pointer_arith },
493 { "redundant-decls", &warn_redundant_decls },
494 { "return-type", &warn_return_type },
495 { "sequence-point", &warn_sequence_point },
496 { "sign-compare", &warn_sign_compare },
497 { "strict-prototypes", &warn_strict_prototypes },
498 { "traditional", &warn_traditional },
499 { "trigraphs", NULL },
500 { "undef", NULL },
501 { "write-strings", &flag_const_strings }
504 strings_processed = cpp_handle_option (parse_in, argc, argv, 0);
506 if (!strcmp (p, "-fhosted") || !strcmp (p, "-fno-freestanding"))
508 flag_hosted = 1;
509 flag_no_builtin = 0;
511 else if (!strcmp (p, "-ffreestanding") || !strcmp (p, "-fno-hosted"))
513 flag_hosted = 0;
514 flag_no_builtin = 1;
515 /* warn_main will be 2 if set by -Wall, 1 if set by -Wmain */
516 if (warn_main == 2)
517 warn_main = 0;
519 else if (!strncmp (p, "-std=", 5))
521 /* Select the appropriate language standard. We currently
522 recognize:
523 -std=iso9899:1990 same as -ansi
524 -std=iso9899:199409 ISO C as modified in amend. 1
525 -std=iso9899:1999 ISO C 99
526 -std=c89 same as -std=iso9899:1990
527 -std=c99 same as -std=iso9899:1999
528 -std=gnu89 default, iso9899:1990 + gnu extensions
529 -std=gnu99 iso9899:1999 + gnu extensions
531 const char *const argstart = &p[5];
533 if (!strcmp (argstart, "iso9899:1990")
534 || !strcmp (argstart, "c89"))
536 iso_1990:
537 flag_isoc94 = 0;
538 iso_1994:
539 flag_writable_strings = 0;
540 flag_no_asm = 1;
541 flag_no_nonansi_builtin = 1;
542 flag_noniso_default_format_attributes = 0;
543 flag_isoc99 = 0;
544 flag_iso = 1;
546 else if (!strcmp (argstart, "iso9899:199409"))
548 flag_isoc94 = 1;
549 goto iso_1994;
551 else if (!strcmp (argstart, "iso9899:199x")
552 || !strcmp (argstart, "iso9899:1999")
553 || !strcmp (argstart, "c9x")
554 || !strcmp (argstart, "c99"))
556 flag_writable_strings = 0;
557 flag_no_asm = 1;
558 flag_no_nonansi_builtin = 1;
559 flag_noniso_default_format_attributes = 0;
560 flag_isoc99 = 1;
561 flag_isoc94 = 1;
562 flag_iso = 1;
564 else if (!strcmp (argstart, "gnu89"))
566 flag_writable_strings = 0;
567 flag_no_asm = 0;
568 flag_no_nonansi_builtin = 0;
569 flag_noniso_default_format_attributes = 1;
570 flag_isoc99 = 0;
571 flag_isoc94 = 0;
573 else if (!strcmp (argstart, "gnu9x") || !strcmp (argstart, "gnu99"))
575 flag_writable_strings = 0;
576 flag_no_asm = 0;
577 flag_no_nonansi_builtin = 0;
578 flag_noniso_default_format_attributes = 1;
579 flag_isoc99 = 1;
580 flag_isoc94 = 1;
582 else if (!strcmp (argstart, "c++98"))
583 ; /* Handled by cpplib. */
584 else
585 error ("unknown C standard `%s'", argstart);
587 else if (!strcmp (p, "-fdollars-in-identifiers"))
588 dollars_in_ident = 1;
589 else if (!strcmp (p, "-fno-dollars-in-identifiers"))
590 dollars_in_ident = 0;
591 else if (!strcmp (p, "-fsigned-char"))
592 flag_signed_char = 1;
593 else if (!strcmp (p, "-funsigned-char"))
594 flag_signed_char = 0;
595 else if (!strcmp (p, "-fno-signed-char"))
596 flag_signed_char = 0;
597 else if (!strcmp (p, "-fno-unsigned-char"))
598 flag_signed_char = 1;
599 else if (!strcmp (p, "-fsigned-bitfields")
600 || !strcmp (p, "-fno-unsigned-bitfields"))
602 flag_signed_bitfields = 1;
603 explicit_flag_signed_bitfields = 1;
605 else if (!strcmp (p, "-funsigned-bitfields")
606 || !strcmp (p, "-fno-signed-bitfields"))
608 flag_signed_bitfields = 0;
609 explicit_flag_signed_bitfields = 1;
611 else if (!strcmp (p, "-fshort-enums"))
612 flag_short_enums = 1;
613 else if (!strcmp (p, "-fno-short-enums"))
614 flag_short_enums = 0;
615 else if (!strcmp (p, "-fshort-wchar"))
616 flag_short_wchar = 1;
617 else if (!strcmp (p, "-fno-short-wchar"))
618 flag_short_wchar = 0;
619 else if (!strcmp (p, "-fcond-mismatch"))
620 flag_cond_mismatch = 1;
621 else if (!strcmp (p, "-fno-cond-mismatch"))
622 flag_cond_mismatch = 0;
623 else if (!strcmp (p, "-fshort-double"))
624 flag_short_double = 1;
625 else if (!strcmp (p, "-fno-short-double"))
626 flag_short_double = 0;
627 else if (!strcmp (p, "-fasm"))
628 flag_no_asm = 0;
629 else if (!strcmp (p, "-fno-asm"))
630 flag_no_asm = 1;
631 else if (!strcmp (p, "-fbuiltin"))
632 flag_no_builtin = 0;
633 else if (!strcmp (p, "-fno-builtin"))
634 flag_no_builtin = 1;
635 else if (!strncmp (p, "-fno-builtin-", strlen ("-fno-builtin-")))
636 disable_builtin_function (p + strlen ("-fno-builtin-"));
637 else if (p[0] == '-' && p[1] == 'f' && dump_switch_p (p + 2))
639 else if (!strcmp (p, "-ansi"))
640 goto iso_1990;
641 else if (!strcmp (p, "-undef"))
642 flag_undef = 1;
643 else if (!strcmp (p, "-Werror-implicit-function-declaration"))
644 mesg_implicit_function_declaration = 2;
645 else if (!strncmp (p, "-Wformat=", 9))
646 set_Wformat (atoi (p + 9));
647 else if (!strcmp (p, "-Wformat"))
648 set_Wformat (1);
649 else if (!strcmp (p, "-Wno-format"))
650 set_Wformat (0);
651 else if (!strcmp (p, "-Wimplicit"))
653 warn_implicit_int = 1;
654 if (mesg_implicit_function_declaration != 2)
655 mesg_implicit_function_declaration = 1;
657 else if (!strcmp (p, "-Wno-implicit"))
658 warn_implicit_int = 0, mesg_implicit_function_declaration = 0;
659 else if (!strcmp (p, "-Wno-main"))
660 warn_main = -1;
661 else if (!strcmp (p, "-Wunknown-pragmas"))
662 /* Set to greater than 1, so that even unknown pragmas in system
663 headers will be warned about. */
664 warn_unknown_pragmas = 2;
665 else if (!strcmp (p, "-Wno-unknown-pragmas"))
666 warn_unknown_pragmas = 0;
667 else if (!strcmp (p, "-Wall"))
669 /* We save the value of warn_uninitialized, since if they put
670 -Wuninitialized on the command line, we need to generate a
671 warning about not using it without also specifying -O. */
672 if (warn_uninitialized != 1)
673 warn_uninitialized = 2;
674 warn_implicit_int = 1;
675 mesg_implicit_function_declaration = 1;
676 warn_return_type = 1;
677 set_Wunused (1);
678 warn_switch = 1;
679 set_Wformat (1);
680 warn_char_subscripts = 1;
681 warn_parentheses = 1;
682 warn_sequence_point = 1;
683 warn_missing_braces = 1;
684 /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding can turn
685 it off only if it's not explicit. */
686 warn_main = 2;
687 /* Only warn about unknown pragmas that are not in system headers. */
688 warn_unknown_pragmas = 1;
690 else if (!strcmp (p, "-E"))
691 flag_preprocess_only = 1;
692 else
694 size_t i;
695 for (i = 0; i < sizeof (warn_options) / sizeof (warn_options[0]); i++)
696 if (strncmp (p, "-W", 2) == 0
697 && warn_options[i].flag
698 && (strcmp (p+2, warn_options[i].option) == 0
699 || (strncmp (p+2, "no-", 3) == 0
700 && strcmp (p+5, warn_options[i].option) == 0)))
702 *(warn_options[i].flag) = strncmp (p+2, "no-", 3) != 0;
703 return 1;
705 return strings_processed;
708 return 1;
711 void
712 c_print_identifier (file, node, indent)
713 FILE *file;
714 tree node;
715 int indent;
717 print_node (file, "global", IDENTIFIER_GLOBAL_VALUE (node), indent + 4);
718 print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
719 print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
720 print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
721 print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4);
722 print_node (file, "limbo value", IDENTIFIER_LIMBO_VALUE (node), indent + 4);
723 if (C_IS_RESERVED_WORD (node))
725 tree rid = ridpointers[C_RID_CODE (node)];
726 indent_to (file, indent + 4);
727 fprintf (file, "rid ");
728 fprintf (file, HOST_PTR_PRINTF, (void *)rid);
729 fprintf (file, " \"%s\"", IDENTIFIER_POINTER (rid));
733 /* Hook called at end of compilation to assume 1 elt
734 for a top-level tentative array defn that wasn't complete before. */
736 void
737 c_finish_incomplete_decl (decl)
738 tree decl;
740 if (TREE_CODE (decl) == VAR_DECL)
742 tree type = TREE_TYPE (decl);
743 if (type != error_mark_node
744 && TREE_CODE (type) == ARRAY_TYPE
745 && ! DECL_EXTERNAL (decl)
746 && TYPE_DOMAIN (type) == 0)
748 warning_with_decl (decl, "array `%s' assumed to have one element");
750 complete_array_type (type, NULL_TREE, 1);
752 layout_decl (decl, 0);
757 /* Create a new `struct binding_level'. */
759 static struct binding_level *
760 make_binding_level ()
762 /* NOSTRICT */
763 return (struct binding_level *) xmalloc (sizeof (struct binding_level));
766 /* Nonzero if we are currently in the global binding level. */
769 global_bindings_p ()
771 return current_binding_level == global_binding_level;
774 void
775 keep_next_level ()
777 keep_next_level_flag = 1;
780 /* Nonzero if the current level needs to have a BLOCK made. */
783 kept_level_p ()
785 return ((current_binding_level->keep_if_subblocks
786 && current_binding_level->blocks != 0)
787 || current_binding_level->keep
788 || current_binding_level->names != 0
789 || (current_binding_level->tags != 0
790 && !current_binding_level->tag_transparent));
793 /* Identify this binding level as a level of parameters.
794 DEFINITION_FLAG is 1 for a definition, 0 for a declaration.
795 But it turns out there is no way to pass the right value for
796 DEFINITION_FLAG, so we ignore it. */
798 void
799 declare_parm_level (definition_flag)
800 int definition_flag ATTRIBUTE_UNUSED;
802 current_binding_level->parm_flag = 1;
805 /* Nonzero if currently making parm declarations. */
808 in_parm_level_p ()
810 return current_binding_level->parm_flag;
813 /* Enter a new binding level.
814 If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
815 not for that of tags. */
817 void
818 pushlevel (tag_transparent)
819 int tag_transparent;
821 struct binding_level *newlevel = NULL_BINDING_LEVEL;
823 /* If this is the top level of a function,
824 just make sure that NAMED_LABELS is 0. */
826 if (current_binding_level == global_binding_level)
828 named_labels = 0;
831 /* Reuse or create a struct for this binding level. */
833 if (free_binding_level)
835 newlevel = free_binding_level;
836 free_binding_level = free_binding_level->level_chain;
838 else
840 newlevel = make_binding_level ();
843 /* Add this level to the front of the chain (stack) of levels that
844 are active. */
846 *newlevel = clear_binding_level;
847 newlevel->tag_transparent
848 = (tag_transparent
849 || (current_binding_level
850 ? current_binding_level->subblocks_tag_transparent
851 : 0));
852 newlevel->level_chain = current_binding_level;
853 current_binding_level = newlevel;
854 newlevel->keep = keep_next_level_flag;
855 keep_next_level_flag = 0;
856 newlevel->keep_if_subblocks = keep_next_if_subblocks;
857 keep_next_if_subblocks = 0;
860 /* Clear the limbo values of all identifiers defined in BLOCK or a subblock. */
862 static void
863 clear_limbo_values (block)
864 tree block;
866 tree tem;
868 for (tem = BLOCK_VARS (block); tem; tem = TREE_CHAIN (tem))
869 if (DECL_NAME (tem) != 0)
870 IDENTIFIER_LIMBO_VALUE (DECL_NAME (tem)) = 0;
872 for (tem = BLOCK_SUBBLOCKS (block); tem; tem = TREE_CHAIN (tem))
873 clear_limbo_values (tem);
876 /* Exit a binding level.
877 Pop the level off, and restore the state of the identifier-decl mappings
878 that were in effect when this level was entered.
880 If KEEP is nonzero, this level had explicit declarations, so
881 and create a "block" (a BLOCK node) for the level
882 to record its declarations and subblocks for symbol table output.
884 If FUNCTIONBODY is nonzero, this level is the body of a function,
885 so create a block as if KEEP were set and also clear out all
886 label names.
888 If REVERSE is nonzero, reverse the order of decls before putting
889 them into the BLOCK. */
891 tree
892 poplevel (keep, reverse, functionbody)
893 int keep;
894 int reverse;
895 int functionbody;
897 tree link;
898 /* The chain of decls was accumulated in reverse order.
899 Put it into forward order, just for cleanliness. */
900 tree decls;
901 tree tags = current_binding_level->tags;
902 tree subblocks = current_binding_level->blocks;
903 tree block = 0;
904 tree decl;
905 int block_previously_created;
907 keep |= current_binding_level->keep;
909 /* This warning is turned off because it causes warnings for
910 declarations like `extern struct foo *x'. */
911 #if 0
912 /* Warn about incomplete structure types in this level. */
913 for (link = tags; link; link = TREE_CHAIN (link))
914 if (!COMPLETE_TYPE_P (TREE_VALUE (link)))
916 tree type = TREE_VALUE (link);
917 tree type_name = TYPE_NAME (type);
918 char *id = IDENTIFIER_POINTER (TREE_CODE (type_name) == IDENTIFIER_NODE
919 ? type_name
920 : DECL_NAME (type_name));
921 switch (TREE_CODE (type))
923 case RECORD_TYPE:
924 error ("`struct %s' incomplete in scope ending here", id);
925 break;
926 case UNION_TYPE:
927 error ("`union %s' incomplete in scope ending here", id);
928 break;
929 case ENUMERAL_TYPE:
930 error ("`enum %s' incomplete in scope ending here", id);
931 break;
934 #endif /* 0 */
936 /* Get the decls in the order they were written.
937 Usually current_binding_level->names is in reverse order.
938 But parameter decls were previously put in forward order. */
940 if (reverse)
941 current_binding_level->names
942 = decls = nreverse (current_binding_level->names);
943 else
944 decls = current_binding_level->names;
946 /* Output any nested inline functions within this block
947 if they weren't already output. */
949 for (decl = decls; decl; decl = TREE_CHAIN (decl))
950 if (TREE_CODE (decl) == FUNCTION_DECL
951 && ! TREE_ASM_WRITTEN (decl)
952 && DECL_INITIAL (decl) != 0
953 && TREE_ADDRESSABLE (decl))
955 /* If this decl was copied from a file-scope decl
956 on account of a block-scope extern decl,
957 propagate TREE_ADDRESSABLE to the file-scope decl.
959 DECL_ABSTRACT_ORIGIN can be set to itself if warn_return_type is
960 true, since then the decl goes through save_for_inline_copying. */
961 if (DECL_ABSTRACT_ORIGIN (decl) != 0
962 && DECL_ABSTRACT_ORIGIN (decl) != decl)
963 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (decl)) = 1;
966 /* We used to warn about unused variables in expand_end_bindings,
967 i.e. while generating RTL. But in function-at-a-time mode we may
968 choose to never expand a function at all (e.g. auto inlining), so
969 we do this explicitly now. */
970 warn_about_unused_variables (getdecls ());
972 /* If there were any declarations or structure tags in that level,
973 or if this level is a function body,
974 create a BLOCK to record them for the life of this function. */
976 block = 0;
977 block_previously_created = (current_binding_level->this_block != 0);
978 if (block_previously_created)
979 block = current_binding_level->this_block;
980 else if (keep || functionbody
981 || (current_binding_level->keep_if_subblocks && subblocks != 0))
982 block = make_node (BLOCK);
983 if (block != 0)
985 BLOCK_VARS (block) = decls;
986 BLOCK_SUBBLOCKS (block) = subblocks;
989 /* In each subblock, record that this is its superior. */
991 for (link = subblocks; link; link = TREE_CHAIN (link))
992 BLOCK_SUPERCONTEXT (link) = block;
994 /* Clear out the meanings of the local variables of this level. */
996 for (link = decls; link; link = TREE_CHAIN (link))
998 if (DECL_NAME (link) != 0)
1000 /* If the ident. was used or addressed via a local extern decl,
1001 don't forget that fact. */
1002 if (DECL_EXTERNAL (link))
1004 if (TREE_USED (link))
1005 TREE_USED (DECL_NAME (link)) = 1;
1006 if (TREE_ADDRESSABLE (link))
1007 TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
1009 IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
1013 /* Restore all name-meanings of the outer levels
1014 that were shadowed by this level. */
1016 for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
1017 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
1019 /* If the level being exited is the top level of a function,
1020 check over all the labels, and clear out the current
1021 (function local) meanings of their names. */
1023 if (functionbody)
1025 clear_limbo_values (block);
1027 /* If this is the top level block of a function,
1028 the vars are the function's parameters.
1029 Don't leave them in the BLOCK because they are
1030 found in the FUNCTION_DECL instead. */
1032 BLOCK_VARS (block) = 0;
1034 /* Clear out the definitions of all label names,
1035 since their scopes end here,
1036 and add them to BLOCK_VARS. */
1038 for (link = named_labels; link; link = TREE_CHAIN (link))
1040 tree label = TREE_VALUE (link);
1042 if (DECL_INITIAL (label) == 0)
1044 error_with_decl (label, "label `%s' used but not defined");
1045 /* Avoid crashing later. */
1046 define_label (input_filename, lineno,
1047 DECL_NAME (label));
1049 else if (warn_unused_label && !TREE_USED (label))
1050 warning_with_decl (label, "label `%s' defined but not used");
1051 IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
1053 /* Put the labels into the "variables" of the
1054 top-level block, so debugger can see them. */
1055 TREE_CHAIN (label) = BLOCK_VARS (block);
1056 BLOCK_VARS (block) = label;
1060 /* Pop the current level, and free the structure for reuse. */
1063 struct binding_level *level = current_binding_level;
1064 current_binding_level = current_binding_level->level_chain;
1066 level->level_chain = free_binding_level;
1067 free_binding_level = level;
1070 /* Dispose of the block that we just made inside some higher level. */
1071 if (functionbody)
1072 DECL_INITIAL (current_function_decl) = block;
1073 else if (block)
1075 if (!block_previously_created)
1076 current_binding_level->blocks
1077 = chainon (current_binding_level->blocks, block);
1079 /* If we did not make a block for the level just exited,
1080 any blocks made for inner levels
1081 (since they cannot be recorded as subblocks in that level)
1082 must be carried forward so they will later become subblocks
1083 of something else. */
1084 else if (subblocks)
1085 current_binding_level->blocks
1086 = chainon (current_binding_level->blocks, subblocks);
1088 /* Set the TYPE_CONTEXTs for all of the tagged types belonging to this
1089 binding contour so that they point to the appropriate construct, i.e.
1090 either to the current FUNCTION_DECL node, or else to the BLOCK node
1091 we just constructed.
1093 Note that for tagged types whose scope is just the formal parameter
1094 list for some function type specification, we can't properly set
1095 their TYPE_CONTEXTs here, because we don't have a pointer to the
1096 appropriate FUNCTION_TYPE node readily available to us. For those
1097 cases, the TYPE_CONTEXTs of the relevant tagged type nodes get set
1098 in `grokdeclarator' as soon as we have created the FUNCTION_TYPE
1099 node which will represent the "scope" for these "parameter list local"
1100 tagged types. */
1102 if (functionbody)
1103 for (link = tags; link; link = TREE_CHAIN (link))
1104 TYPE_CONTEXT (TREE_VALUE (link)) = current_function_decl;
1105 else if (block)
1106 for (link = tags; link; link = TREE_CHAIN (link))
1107 TYPE_CONTEXT (TREE_VALUE (link)) = block;
1109 if (block)
1110 TREE_USED (block) = 1;
1112 return block;
1115 /* Insert BLOCK at the end of the list of subblocks of the
1116 current binding level. This is used when a BIND_EXPR is expanded,
1117 to handle the BLOCK node inside the BIND_EXPR. */
1119 void
1120 insert_block (block)
1121 tree block;
1123 TREE_USED (block) = 1;
1124 current_binding_level->blocks
1125 = chainon (current_binding_level->blocks, block);
1128 /* Set the BLOCK node for the innermost scope
1129 (the one we are currently in). */
1131 void
1132 set_block (block)
1133 tree block;
1135 current_binding_level->this_block = block;
1136 current_binding_level->names = chainon (current_binding_level->names,
1137 BLOCK_VARS (block));
1138 current_binding_level->blocks = chainon (current_binding_level->blocks,
1139 BLOCK_SUBBLOCKS (block));
1142 void
1143 push_label_level ()
1145 struct binding_level *newlevel;
1147 /* Reuse or create a struct for this binding level. */
1149 if (free_binding_level)
1151 newlevel = free_binding_level;
1152 free_binding_level = free_binding_level->level_chain;
1154 else
1156 newlevel = make_binding_level ();
1159 /* Add this level to the front of the chain (stack) of label levels. */
1161 newlevel->level_chain = label_level_chain;
1162 label_level_chain = newlevel;
1164 newlevel->names = named_labels;
1165 newlevel->shadowed = shadowed_labels;
1166 named_labels = 0;
1167 shadowed_labels = 0;
1170 void
1171 pop_label_level ()
1173 struct binding_level *level = label_level_chain;
1174 tree link, prev;
1176 /* Clear out the definitions of the declared labels in this level.
1177 Leave in the list any ordinary, non-declared labels. */
1178 for (link = named_labels, prev = 0; link;)
1180 if (C_DECLARED_LABEL_FLAG (TREE_VALUE (link)))
1182 if (DECL_SOURCE_LINE (TREE_VALUE (link)) == 0)
1184 error_with_decl (TREE_VALUE (link),
1185 "label `%s' used but not defined");
1186 /* Avoid crashing later. */
1187 define_label (input_filename, lineno,
1188 DECL_NAME (TREE_VALUE (link)));
1190 else if (warn_unused_label && !TREE_USED (TREE_VALUE (link)))
1191 warning_with_decl (TREE_VALUE (link),
1192 "label `%s' defined but not used");
1193 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) = 0;
1195 /* Delete this element from the list. */
1196 link = TREE_CHAIN (link);
1197 if (prev)
1198 TREE_CHAIN (prev) = link;
1199 else
1200 named_labels = link;
1202 else
1204 prev = link;
1205 link = TREE_CHAIN (link);
1209 /* Bring back all the labels that were shadowed. */
1210 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
1211 if (DECL_NAME (TREE_VALUE (link)) != 0)
1212 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
1213 = TREE_VALUE (link);
1215 named_labels = chainon (named_labels, level->names);
1216 shadowed_labels = level->shadowed;
1218 /* Pop the current level, and free the structure for reuse. */
1219 label_level_chain = label_level_chain->level_chain;
1220 level->level_chain = free_binding_level;
1221 free_binding_level = level;
1224 /* Push a definition or a declaration of struct, union or enum tag "name".
1225 "type" should be the type node.
1226 We assume that the tag "name" is not already defined.
1228 Note that the definition may really be just a forward reference.
1229 In that case, the TYPE_SIZE will be zero. */
1231 void
1232 pushtag (name, type)
1233 tree name, type;
1235 struct binding_level *b;
1237 /* Find the proper binding level for this type tag. */
1239 for (b = current_binding_level; b->tag_transparent; b = b->level_chain)
1240 continue;
1242 if (name)
1244 /* Record the identifier as the type's name if it has none. */
1246 if (TYPE_NAME (type) == 0)
1247 TYPE_NAME (type) = name;
1250 b->tags = tree_cons (name, type, b->tags);
1252 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1253 tagged type we just added to the current binding level. This fake
1254 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1255 to output a representation of a tagged type, and it also gives
1256 us a convenient place to record the "scope start" address for the
1257 tagged type. */
1259 TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL_TREE, type));
1261 /* An approximation for now, so we can tell this is a function-scope tag.
1262 This will be updated in poplevel. */
1263 TYPE_CONTEXT (type) = DECL_CONTEXT (TYPE_STUB_DECL (type));
1266 /* Handle when a new declaration NEWDECL
1267 has the same name as an old one OLDDECL
1268 in the same binding contour.
1269 Prints an error message if appropriate.
1271 If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
1272 Otherwise, return 0.
1274 When DIFFERENT_BINDING_LEVEL is true, NEWDECL is an external declaration,
1275 and OLDDECL is in an outer binding level and should thus not be changed. */
1277 static int
1278 duplicate_decls (newdecl, olddecl, different_binding_level)
1279 tree newdecl, olddecl;
1280 int different_binding_level;
1282 int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1283 int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1284 && DECL_INITIAL (newdecl) != 0);
1285 tree oldtype = TREE_TYPE (olddecl);
1286 tree newtype = TREE_TYPE (newdecl);
1287 int errmsg = 0;
1289 if (DECL_P (olddecl))
1291 if (TREE_CODE (newdecl) == FUNCTION_DECL
1292 && TREE_CODE (olddecl) == FUNCTION_DECL
1293 && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1295 if (DECL_DECLARED_INLINE_P (newdecl)
1296 && DECL_UNINLINABLE (newdecl)
1297 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1298 /* Already warned elsewhere. */;
1299 else if (DECL_DECLARED_INLINE_P (olddecl)
1300 && DECL_UNINLINABLE (olddecl)
1301 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1302 /* Already warned. */;
1303 else if (DECL_DECLARED_INLINE_P (newdecl)
1304 && ! DECL_DECLARED_INLINE_P (olddecl)
1305 && DECL_UNINLINABLE (olddecl)
1306 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1308 warning_with_decl (newdecl,
1309 "function `%s' redeclared as inline");
1310 warning_with_decl (olddecl,
1311 "previous declaration of function `%s' with attribute noinline");
1313 else if (DECL_DECLARED_INLINE_P (olddecl)
1314 && DECL_UNINLINABLE (newdecl)
1315 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1317 warning_with_decl (newdecl,
1318 "function `%s' redeclared with attribute noinline");
1319 warning_with_decl (olddecl,
1320 "previous declaration of function `%s' was inline");
1324 DECL_ATTRIBUTES (newdecl)
1325 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1328 if (TREE_CODE (newtype) == ERROR_MARK
1329 || TREE_CODE (oldtype) == ERROR_MARK)
1330 types_match = 0;
1332 /* New decl is completely inconsistent with the old one =>
1333 tell caller to replace the old one.
1334 This is always an error except in the case of shadowing a builtin. */
1335 if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1337 if (TREE_CODE (olddecl) == FUNCTION_DECL
1338 && (DECL_BUILT_IN (olddecl)
1339 || DECL_BUILT_IN_NONANSI (olddecl)))
1341 /* If you declare a built-in or predefined function name as static,
1342 the old definition is overridden,
1343 but optionally warn this was a bad choice of name. */
1344 if (!TREE_PUBLIC (newdecl))
1346 if (!warn_shadow)
1348 else if (DECL_BUILT_IN (olddecl))
1349 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1350 else
1351 warning_with_decl (newdecl, "shadowing library function `%s'");
1353 /* Likewise, if the built-in is not ansi, then programs can
1354 override it even globally without an error. */
1355 else if (! DECL_BUILT_IN (olddecl))
1356 warning_with_decl (newdecl,
1357 "library function `%s' declared as non-function");
1359 else if (DECL_BUILT_IN_NONANSI (olddecl))
1360 warning_with_decl (newdecl,
1361 "built-in function `%s' declared as non-function");
1362 else
1363 warning_with_decl (newdecl,
1364 "built-in function `%s' declared as non-function");
1366 else
1368 error_with_decl (newdecl, "`%s' redeclared as different kind of symbol");
1369 error_with_decl (olddecl, "previous declaration of `%s'");
1372 return 0;
1375 /* For real parm decl following a forward decl,
1376 return 1 so old decl will be reused. */
1377 if (types_match && TREE_CODE (newdecl) == PARM_DECL
1378 && TREE_ASM_WRITTEN (olddecl) && ! TREE_ASM_WRITTEN (newdecl))
1379 return 1;
1381 /* The new declaration is the same kind of object as the old one.
1382 The declarations may partially match. Print warnings if they don't
1383 match enough. Ultimately, copy most of the information from the new
1384 decl to the old one, and keep using the old one. */
1386 if (TREE_CODE (olddecl) == FUNCTION_DECL && DECL_BUILT_IN (olddecl))
1388 /* A function declaration for a built-in function. */
1389 if (!TREE_PUBLIC (newdecl))
1391 /* If you declare a built-in function name as static, the
1392 built-in definition is overridden,
1393 but optionally warn this was a bad choice of name. */
1394 if (warn_shadow)
1395 warning_with_decl (newdecl, "shadowing built-in function `%s'");
1396 /* Discard the old built-in function. */
1397 return 0;
1399 else if (!types_match)
1401 /* Accept the return type of the new declaration if same modes. */
1402 tree oldreturntype = TREE_TYPE (oldtype);
1403 tree newreturntype = TREE_TYPE (newtype);
1405 if (TYPE_MODE (oldreturntype) == TYPE_MODE (newreturntype))
1407 /* Function types may be shared, so we can't just modify
1408 the return type of olddecl's function type. */
1409 tree trytype
1410 = build_function_type (newreturntype,
1411 TYPE_ARG_TYPES (oldtype));
1412 trytype = build_type_attribute_variant (trytype,
1413 TYPE_ATTRIBUTES (oldtype));
1415 types_match = comptypes (newtype, trytype);
1416 if (types_match)
1417 oldtype = trytype;
1419 /* Accept harmless mismatch in first argument type also.
1420 This is for the ffs and fprintf builtins. */
1421 if (TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0
1422 && TYPE_ARG_TYPES (oldtype) != 0
1423 && TREE_VALUE (TYPE_ARG_TYPES (newtype)) != 0
1424 && TREE_VALUE (TYPE_ARG_TYPES (oldtype)) != 0
1425 && (TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (newtype)))
1426 == TYPE_MODE (TREE_VALUE (TYPE_ARG_TYPES (oldtype)))))
1428 /* Function types may be shared, so we can't just modify
1429 the return type of olddecl's function type. */
1430 tree trytype
1431 = build_function_type (TREE_TYPE (oldtype),
1432 tree_cons (NULL_TREE,
1433 TREE_VALUE (TYPE_ARG_TYPES (newtype)),
1434 TREE_CHAIN (TYPE_ARG_TYPES (oldtype))));
1435 trytype = build_type_attribute_variant (trytype,
1436 TYPE_ATTRIBUTES (oldtype));
1438 types_match = comptypes (newtype, trytype);
1439 if (types_match)
1440 oldtype = trytype;
1442 if (! different_binding_level)
1443 TREE_TYPE (olddecl) = oldtype;
1445 else if (TYPE_ARG_TYPES (oldtype) == NULL
1446 && TYPE_ARG_TYPES (newtype) != NULL)
1448 /* For bcmp, bzero, fputs the builtin type has arguments not
1449 specified. Use the ones from the prototype so that type checking
1450 is done for them. */
1451 tree trytype
1452 = build_function_type (TREE_TYPE (oldtype),
1453 TYPE_ARG_TYPES (newtype));
1454 trytype = build_type_attribute_variant (trytype,
1455 TYPE_ATTRIBUTES (oldtype));
1457 oldtype = trytype;
1458 if (! different_binding_level)
1459 TREE_TYPE (olddecl) = oldtype;
1461 if (!types_match)
1463 /* If types don't match for a built-in, throw away the built-in. */
1464 warning_with_decl (newdecl, "conflicting types for built-in function `%s'");
1465 return 0;
1468 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1469 && DECL_SOURCE_LINE (olddecl) == 0)
1471 /* A function declaration for a predeclared function
1472 that isn't actually built in. */
1473 if (!TREE_PUBLIC (newdecl))
1475 /* If you declare it as static, the
1476 default definition is overridden. */
1477 return 0;
1479 else if (!types_match)
1481 /* If the types don't match, preserve volatility indication.
1482 Later on, we will discard everything else about the
1483 default declaration. */
1484 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1487 /* Permit char *foo () to match void *foo (...) if not pedantic,
1488 if one of them came from a system header file. */
1489 else if (!types_match
1490 && TREE_CODE (olddecl) == FUNCTION_DECL
1491 && TREE_CODE (newdecl) == FUNCTION_DECL
1492 && TREE_CODE (TREE_TYPE (oldtype)) == POINTER_TYPE
1493 && TREE_CODE (TREE_TYPE (newtype)) == POINTER_TYPE
1494 && (DECL_IN_SYSTEM_HEADER (olddecl)
1495 || DECL_IN_SYSTEM_HEADER (newdecl))
1496 && ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (newtype))) == void_type_node
1497 && TYPE_ARG_TYPES (oldtype) == 0
1498 && self_promoting_args_p (TYPE_ARG_TYPES (newtype))
1499 && TREE_TYPE (TREE_TYPE (oldtype)) == char_type_node)
1501 (TREE_TYPE (TREE_TYPE (newtype)) == char_type_node
1502 && TYPE_ARG_TYPES (newtype) == 0
1503 && self_promoting_args_p (TYPE_ARG_TYPES (oldtype))
1504 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)))
1506 if (pedantic)
1507 pedwarn_with_decl (newdecl, "conflicting types for `%s'");
1508 /* Make sure we keep void * as ret type, not char *. */
1509 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (oldtype))) == void_type_node)
1510 TREE_TYPE (newdecl) = newtype = oldtype;
1512 /* Set DECL_IN_SYSTEM_HEADER, so that if we see another declaration
1513 we will come back here again. */
1514 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1516 else if (!types_match
1517 /* Permit char *foo (int, ...); followed by char *foo ();
1518 if not pedantic. */
1519 && ! (TREE_CODE (olddecl) == FUNCTION_DECL
1520 && ! pedantic
1521 /* Return types must still match. */
1522 && comptypes (TREE_TYPE (oldtype),
1523 TREE_TYPE (newtype))
1524 && TYPE_ARG_TYPES (newtype) == 0))
1526 error_with_decl (newdecl, "conflicting types for `%s'");
1527 /* Check for function type mismatch
1528 involving an empty arglist vs a nonempty one. */
1529 if (TREE_CODE (olddecl) == FUNCTION_DECL
1530 && comptypes (TREE_TYPE (oldtype),
1531 TREE_TYPE (newtype))
1532 && ((TYPE_ARG_TYPES (oldtype) == 0
1533 && DECL_INITIAL (olddecl) == 0)
1535 (TYPE_ARG_TYPES (newtype) == 0
1536 && DECL_INITIAL (newdecl) == 0)))
1538 /* Classify the problem further. */
1539 tree t = TYPE_ARG_TYPES (oldtype);
1540 if (t == 0)
1541 t = TYPE_ARG_TYPES (newtype);
1542 for (; t; t = TREE_CHAIN (t))
1544 tree type = TREE_VALUE (t);
1546 if (TREE_CHAIN (t) == 0
1547 && TYPE_MAIN_VARIANT (type) != void_type_node)
1549 error ("a parameter list with an ellipsis can't match an empty parameter name list declaration");
1550 break;
1553 if (c_type_promotes_to (type) != type)
1555 error ("an argument type that has a default promotion can't match an empty parameter name list declaration");
1556 break;
1560 error_with_decl (olddecl, "previous declaration of `%s'");
1562 else
1564 errmsg = redeclaration_error_message (newdecl, olddecl);
1565 if (errmsg)
1567 switch (errmsg)
1569 case 1:
1570 error_with_decl (newdecl, "redefinition of `%s'");
1571 break;
1572 case 2:
1573 error_with_decl (newdecl, "redeclaration of `%s'");
1574 break;
1575 case 3:
1576 error_with_decl (newdecl, "conflicting declarations of `%s'");
1577 break;
1578 default:
1579 abort ();
1582 error_with_decl (olddecl,
1583 ((DECL_INITIAL (olddecl)
1584 && current_binding_level == global_binding_level)
1585 ? "`%s' previously defined here"
1586 : "`%s' previously declared here"));
1587 return 0;
1589 else if (TREE_CODE (newdecl) == TYPE_DECL
1590 && (DECL_IN_SYSTEM_HEADER (olddecl)
1591 || DECL_IN_SYSTEM_HEADER (newdecl)))
1593 warning_with_decl (newdecl, "redefinition of `%s'");
1594 warning_with_decl
1595 (olddecl,
1596 ((DECL_INITIAL (olddecl)
1597 && current_binding_level == global_binding_level)
1598 ? "`%s' previously defined here"
1599 : "`%s' previously declared here"));
1601 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1602 && DECL_INITIAL (olddecl) != 0
1603 && TYPE_ARG_TYPES (oldtype) == 0
1604 && TYPE_ARG_TYPES (newtype) != 0
1605 && TYPE_ACTUAL_ARG_TYPES (oldtype) != 0)
1607 tree type, parm;
1608 int nargs;
1609 /* Prototype decl follows defn w/o prototype. */
1611 for (parm = TYPE_ACTUAL_ARG_TYPES (oldtype),
1612 type = TYPE_ARG_TYPES (newtype),
1613 nargs = 1;
1615 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type), nargs++)
1617 if (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == void_type_node
1618 && TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
1620 warning_with_decl (newdecl, "prototype for `%s' follows");
1621 warning_with_decl (olddecl, "non-prototype definition here");
1622 break;
1624 if (TYPE_MAIN_VARIANT (TREE_VALUE (parm)) == void_type_node
1625 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
1627 error_with_decl (newdecl,
1628 "prototype for `%s' follows and number of arguments doesn't match");
1629 error_with_decl (olddecl, "non-prototype definition here");
1630 errmsg = 1;
1631 break;
1633 /* Type for passing arg must be consistent
1634 with that declared for the arg. */
1635 if (! comptypes (TREE_VALUE (parm), TREE_VALUE (type)))
1637 error_with_decl (newdecl,
1638 "prototype for `%s' follows and argument %d doesn't match",
1639 nargs);
1640 error_with_decl (olddecl, "non-prototype definition here");
1641 errmsg = 1;
1642 break;
1646 /* Warn about mismatches in various flags. */
1647 else
1649 /* Warn if function is now inline
1650 but was previously declared not inline and has been called. */
1651 if (TREE_CODE (olddecl) == FUNCTION_DECL
1652 && ! DECL_DECLARED_INLINE_P (olddecl)
1653 && DECL_DECLARED_INLINE_P (newdecl)
1654 && TREE_USED (olddecl))
1655 warning_with_decl (newdecl,
1656 "`%s' declared inline after being called");
1657 if (TREE_CODE (olddecl) == FUNCTION_DECL
1658 && ! DECL_DECLARED_INLINE_P (olddecl)
1659 && DECL_DECLARED_INLINE_P (newdecl)
1660 && DECL_INITIAL (olddecl) != 0)
1661 warning_with_decl (newdecl,
1662 "`%s' declared inline after its definition");
1664 /* If pedantic, warn when static declaration follows a non-static
1665 declaration. Otherwise, do so only for functions. */
1666 if ((pedantic || TREE_CODE (olddecl) == FUNCTION_DECL)
1667 && TREE_PUBLIC (olddecl)
1668 && !TREE_PUBLIC (newdecl))
1669 warning_with_decl (newdecl, "static declaration for `%s' follows non-static");
1671 /* If warn_traditional, warn when a non-static function
1672 declaration follows a static one. */
1673 if (warn_traditional && !in_system_header
1674 && TREE_CODE (olddecl) == FUNCTION_DECL
1675 && !TREE_PUBLIC (olddecl)
1676 && TREE_PUBLIC (newdecl))
1677 warning_with_decl (newdecl, "non-static declaration for `%s' follows static");
1679 /* Warn when const declaration follows a non-const
1680 declaration, but not for functions. */
1681 if (TREE_CODE (olddecl) != FUNCTION_DECL
1682 && !TREE_READONLY (olddecl)
1683 && TREE_READONLY (newdecl))
1684 warning_with_decl (newdecl, "const declaration for `%s' follows non-const");
1685 /* These bits are logically part of the type, for variables.
1686 But not for functions
1687 (where qualifiers are not valid ANSI anyway). */
1688 else if (pedantic && TREE_CODE (olddecl) != FUNCTION_DECL
1689 && (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
1690 || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl)))
1691 pedwarn_with_decl (newdecl, "type qualifiers for `%s' conflict with previous decl");
1695 /* Optionally warn about more than one declaration for the same name. */
1696 if (errmsg == 0 && warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0
1697 /* Don't warn about a function declaration
1698 followed by a definition. */
1699 && !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0
1700 && DECL_INITIAL (olddecl) == 0)
1701 /* Don't warn about extern decl followed by (tentative) definition. */
1702 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)))
1704 warning_with_decl (newdecl, "redundant redeclaration of `%s' in same scope");
1705 warning_with_decl (olddecl, "previous declaration of `%s'");
1708 /* Copy all the DECL_... slots specified in the new decl
1709 except for any that we copy here from the old type.
1711 Past this point, we don't change OLDTYPE and NEWTYPE
1712 even if we change the types of NEWDECL and OLDDECL. */
1714 if (types_match)
1716 /* When copying info to olddecl, we store into write_olddecl
1717 instead. This allows us to avoid modifying olddecl when
1718 different_binding_level is true. */
1719 tree write_olddecl = different_binding_level ? newdecl : olddecl;
1721 /* Merge the data types specified in the two decls. */
1722 if (TREE_CODE (newdecl) != FUNCTION_DECL || !DECL_BUILT_IN (olddecl))
1724 if (different_binding_level)
1726 if (TYPE_ARG_TYPES (oldtype) != 0
1727 && TYPE_ARG_TYPES (newtype) == 0)
1728 TREE_TYPE (newdecl) = common_type (newtype, oldtype);
1729 else
1730 TREE_TYPE (newdecl)
1731 = build_type_attribute_variant
1732 (newtype,
1733 merge_attributes (TYPE_ATTRIBUTES (newtype),
1734 TYPE_ATTRIBUTES (oldtype)));
1736 else
1737 TREE_TYPE (newdecl)
1738 = TREE_TYPE (olddecl)
1739 = common_type (newtype, oldtype);
1742 /* Lay the type out, unless already done. */
1743 if (oldtype != TREE_TYPE (newdecl))
1745 if (TREE_TYPE (newdecl) != error_mark_node)
1746 layout_type (TREE_TYPE (newdecl));
1747 if (TREE_CODE (newdecl) != FUNCTION_DECL
1748 && TREE_CODE (newdecl) != TYPE_DECL
1749 && TREE_CODE (newdecl) != CONST_DECL)
1750 layout_decl (newdecl, 0);
1752 else
1754 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1755 DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1756 DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
1757 DECL_MODE (newdecl) = DECL_MODE (olddecl);
1758 if (TREE_CODE (olddecl) != FUNCTION_DECL)
1759 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1761 DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1762 DECL_USER_ALIGN (newdecl) |= DECL_ALIGN (olddecl);
1766 /* Keep the old rtl since we can safely use it. */
1767 COPY_DECL_RTL (olddecl, newdecl);
1769 /* Merge the type qualifiers. */
1770 if (TREE_CODE (olddecl) == FUNCTION_DECL
1771 && DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
1772 && ! TREE_THIS_VOLATILE (newdecl))
1773 TREE_THIS_VOLATILE (write_olddecl) = 0;
1775 if (TREE_READONLY (newdecl))
1776 TREE_READONLY (write_olddecl) = 1;
1778 if (TREE_THIS_VOLATILE (newdecl))
1780 TREE_THIS_VOLATILE (write_olddecl) = 1;
1781 if (TREE_CODE (newdecl) == VAR_DECL
1782 /* If an automatic variable is re-declared in the same
1783 function scope, but the old declaration was not
1784 volatile, make_var_volatile() would crash because the
1785 variable would have been assigned to a pseudo, not a
1786 MEM. Since this duplicate declaration is invalid
1787 anyway, we just skip the call. */
1788 && errmsg == 0)
1789 make_var_volatile (newdecl);
1792 /* Keep source location of definition rather than declaration. */
1793 /* When called with different_binding_level set, keep the old
1794 information so that meaningful diagnostics can be given. */
1795 if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0
1796 && ! different_binding_level)
1798 DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
1799 DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
1802 /* Merge the unused-warning information. */
1803 if (DECL_IN_SYSTEM_HEADER (olddecl))
1804 DECL_IN_SYSTEM_HEADER (newdecl) = 1;
1805 else if (DECL_IN_SYSTEM_HEADER (newdecl))
1806 DECL_IN_SYSTEM_HEADER (write_olddecl) = 1;
1808 /* Merge the initialization information. */
1809 /* When called with different_binding_level set, don't copy over
1810 DECL_INITIAL, so that we don't accidentally change function
1811 declarations into function definitions. */
1812 if (DECL_INITIAL (newdecl) == 0 && ! different_binding_level)
1813 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1815 /* Merge the section attribute.
1816 We want to issue an error if the sections conflict but that must be
1817 done later in decl_attributes since we are called before attributes
1818 are assigned. */
1819 if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1820 DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1822 /* Copy the assembler name.
1823 Currently, it can only be defined in the prototype. */
1824 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
1826 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1828 DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
1829 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1830 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1831 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1832 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1835 /* If cannot merge, then use the new type and qualifiers,
1836 and don't preserve the old rtl. */
1837 else if (! different_binding_level)
1839 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1840 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1841 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1842 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1845 /* Merge the storage class information. */
1846 merge_weak (newdecl, olddecl);
1848 /* For functions, static overrides non-static. */
1849 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1851 TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1852 /* This is since we don't automatically
1853 copy the attributes of NEWDECL into OLDDECL. */
1854 /* No need to worry about different_binding_level here because
1855 then TREE_PUBLIC (newdecl) was true. */
1856 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1857 /* If this clears `static', clear it in the identifier too. */
1858 if (! TREE_PUBLIC (olddecl))
1859 TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1861 if (DECL_EXTERNAL (newdecl))
1863 if (! different_binding_level)
1865 /* Don't mess with these flags on local externs; they remain
1866 external even if there's a declaration at file scope which
1867 isn't. */
1868 TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1869 DECL_EXTERNAL (newdecl) = DECL_EXTERNAL (olddecl);
1871 /* An extern decl does not override previous storage class. */
1872 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1873 if (! DECL_EXTERNAL (newdecl))
1874 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1876 else
1878 TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1879 TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1882 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1884 /* If we're redefining a function previously defined as extern
1885 inline, make sure we emit debug info for the inline before we
1886 throw it away, in case it was inlined into a function that hasn't
1887 been written out yet. */
1888 if (new_is_definition && DECL_INITIAL (olddecl) && TREE_USED (olddecl))
1890 (*debug_hooks->outlining_inline_function) (olddecl);
1892 /* The new defn must not be inline. */
1893 DECL_INLINE (newdecl) = 0;
1894 DECL_UNINLINABLE (newdecl) = 1;
1896 else
1898 /* If either decl says `inline', this fn is inline,
1899 unless its definition was passed already. */
1900 if (DECL_DECLARED_INLINE_P (newdecl)
1901 || DECL_DECLARED_INLINE_P (olddecl))
1902 DECL_DECLARED_INLINE_P (newdecl) = 1;
1904 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
1905 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
1908 if (DECL_BUILT_IN (olddecl))
1910 /* Get rid of any built-in function if new arg types don't match it
1911 or if we have a function definition. */
1912 if (! types_match || new_is_definition)
1914 if (! different_binding_level)
1916 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1917 DECL_BUILT_IN_CLASS (olddecl) = NOT_BUILT_IN;
1920 else
1922 /* If redeclaring a builtin function, and not a definition,
1923 it stays built in. */
1924 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
1925 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
1929 /* Also preserve various other info from the definition. */
1930 if (! new_is_definition)
1932 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1933 /* When called with different_binding_level set, don't copy over
1934 DECL_INITIAL, so that we don't accidentally change function
1935 declarations into function definitions. */
1936 if (! different_binding_level)
1937 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1938 DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
1939 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1940 DECL_NUM_STMTS (newdecl) = DECL_NUM_STMTS (olddecl);
1941 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1943 /* Set DECL_INLINE on the declaration if we've got a body
1944 from which to instantiate. */
1945 if (DECL_INLINE (olddecl) && ! DECL_UNINLINABLE (newdecl))
1947 DECL_INLINE (newdecl) = 1;
1948 DECL_ABSTRACT_ORIGIN (newdecl)
1949 = (different_binding_level
1950 ? DECL_ORIGIN (olddecl)
1951 : DECL_ABSTRACT_ORIGIN (olddecl));
1954 else
1956 /* If a previous declaration said inline, mark the
1957 definition as inlinable. */
1958 if (DECL_DECLARED_INLINE_P (newdecl)
1959 && ! DECL_UNINLINABLE (newdecl))
1960 DECL_INLINE (newdecl) = 1;
1963 if (different_binding_level)
1964 return 0;
1966 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1967 But preserve OLDDECL's DECL_UID. */
1969 unsigned olddecl_uid = DECL_UID (olddecl);
1971 memcpy ((char *) olddecl + sizeof (struct tree_common),
1972 (char *) newdecl + sizeof (struct tree_common),
1973 sizeof (struct tree_decl) - sizeof (struct tree_common));
1974 DECL_UID (olddecl) = olddecl_uid;
1977 /* NEWDECL contains the merged attribute lists.
1978 Update OLDDECL to be the same. */
1979 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
1981 return 1;
1984 /* Check whether decl-node X shadows an existing declaration.
1985 OLDLOCAL is the old IDENTIFIER_LOCAL_VALUE of the DECL_NAME of X,
1986 which might be a NULL_TREE. */
1987 static void
1988 warn_if_shadowing (x, oldlocal)
1989 tree x, oldlocal;
1991 tree name;
1993 if (DECL_EXTERNAL (x))
1994 return;
1996 name = DECL_NAME (x);
1998 /* Warn if shadowing an argument at the top level of the body. */
1999 if (oldlocal != 0
2000 /* This warning doesn't apply to the parms of a nested fcn. */
2001 && ! current_binding_level->parm_flag
2002 /* Check that this is one level down from the parms. */
2003 && current_binding_level->level_chain->parm_flag
2004 /* Check that the decl being shadowed
2005 comes from the parm level, one level up. */
2006 && chain_member (oldlocal, current_binding_level->level_chain->names))
2008 if (TREE_CODE (oldlocal) == PARM_DECL)
2009 pedwarn ("declaration of `%s' shadows a parameter",
2010 IDENTIFIER_POINTER (name));
2011 else
2012 pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
2013 IDENTIFIER_POINTER (name));
2015 /* Maybe warn if shadowing something else. */
2016 else if (warn_shadow
2017 /* No shadow warnings for internally generated vars. */
2018 && DECL_SOURCE_LINE (x) != 0
2019 /* No shadow warnings for vars made for inlining. */
2020 && ! DECL_FROM_INLINE (x))
2022 if (TREE_CODE (x) == PARM_DECL
2023 && current_binding_level->level_chain->parm_flag)
2024 /* Don't warn about the parm names in function declarator
2025 within a function declarator.
2026 It would be nice to avoid warning in any function
2027 declarator in a declaration, as opposed to a definition,
2028 but there is no way to tell it's not a definition. */
2030 else if (oldlocal)
2032 if (TREE_CODE (oldlocal) == PARM_DECL)
2033 shadow_warning ("a parameter", name, oldlocal);
2034 else
2035 shadow_warning ("a previous local", name, oldlocal);
2037 else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
2038 && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
2039 shadow_warning ("a global declaration", name,
2040 IDENTIFIER_GLOBAL_VALUE (name));
2044 /* Record a decl-node X as belonging to the current lexical scope.
2045 Check for errors (such as an incompatible declaration for the same
2046 name already seen in the same scope).
2048 Returns either X or an old decl for the same name.
2049 If an old decl is returned, it may have been smashed
2050 to agree with what X says. */
2052 tree
2053 pushdecl (x)
2054 tree x;
2056 tree t;
2057 tree name = DECL_NAME (x);
2058 struct binding_level *b = current_binding_level;
2060 /* Functions need the lang_decl data. */
2061 if (TREE_CODE (x) == FUNCTION_DECL && ! DECL_LANG_SPECIFIC (x))
2062 DECL_LANG_SPECIFIC (x) = (struct lang_decl *)
2063 ggc_alloc_cleared (sizeof (struct lang_decl));
2065 DECL_CONTEXT (x) = current_function_decl;
2066 /* A local extern declaration for a function doesn't constitute nesting.
2067 A local auto declaration does, since it's a forward decl
2068 for a nested function coming later. */
2069 if ((TREE_CODE (x) == FUNCTION_DECL || TREE_CODE (x) == VAR_DECL)
2070 && DECL_INITIAL (x) == 0 && DECL_EXTERNAL (x))
2071 DECL_CONTEXT (x) = 0;
2073 if (name)
2075 int different_binding_level = 0;
2077 if (warn_nested_externs
2078 && DECL_EXTERNAL (x)
2079 && b != global_binding_level
2080 && x != IDENTIFIER_IMPLICIT_DECL (name)
2081 /* No error messages for __FUNCTION__ and __PRETTY_FUNCTION__. */
2082 && !DECL_IN_SYSTEM_HEADER (x))
2083 warning ("nested extern declaration of `%s'",
2084 IDENTIFIER_POINTER (name));
2086 t = lookup_name_current_level (name);
2087 if (! t && DECL_EXTERNAL (x) && TREE_PUBLIC (x))
2089 t = IDENTIFIER_GLOBAL_VALUE (name);
2090 /* Type decls at global scope don't conflict with externs declared
2091 inside lexical blocks. */
2092 if (! t || TREE_CODE (t) == TYPE_DECL)
2093 /* If there's no visible global declaration, try for an
2094 invisible one. */
2095 t = IDENTIFIER_LIMBO_VALUE (name);
2096 different_binding_level = 1;
2098 if (t != 0 && t == error_mark_node)
2099 /* error_mark_node is 0 for a while during initialization! */
2101 t = 0;
2102 error_with_decl (x, "`%s' used prior to declaration");
2105 /* If this decl is `static' and an implicit decl was seen previously,
2106 warn. */
2107 if (TREE_PUBLIC (name)
2108 /* Don't test for DECL_EXTERNAL, because grokdeclarator
2109 sets this for all functions. */
2110 && ! TREE_PUBLIC (x)
2111 && (TREE_CODE (x) == FUNCTION_DECL || b == global_binding_level)
2112 /* We used to warn also for explicit extern followed by static,
2113 but sometimes you need to do it that way. */
2114 && IDENTIFIER_IMPLICIT_DECL (name) != 0)
2116 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
2117 IDENTIFIER_POINTER (name));
2118 pedwarn_with_file_and_line
2119 (DECL_SOURCE_FILE (IDENTIFIER_IMPLICIT_DECL (name)),
2120 DECL_SOURCE_LINE (IDENTIFIER_IMPLICIT_DECL (name)),
2121 "previous declaration of `%s'",
2122 IDENTIFIER_POINTER (name));
2123 TREE_THIS_VOLATILE (name) = 1;
2126 if (t != 0 && duplicate_decls (x, t, different_binding_level))
2128 if (TREE_CODE (t) == PARM_DECL)
2130 /* Don't allow more than one "real" duplicate
2131 of a forward parm decl. */
2132 TREE_ASM_WRITTEN (t) = TREE_ASM_WRITTEN (x);
2133 return t;
2135 return t;
2138 /* If we are processing a typedef statement, generate a whole new
2139 ..._TYPE node (which will be just an variant of the existing
2140 ..._TYPE node with identical properties) and then install the
2141 TYPE_DECL node generated to represent the typedef name as the
2142 TYPE_NAME of this brand new (duplicate) ..._TYPE node.
2144 The whole point here is to end up with a situation where each
2145 and every ..._TYPE node the compiler creates will be uniquely
2146 associated with AT MOST one node representing a typedef name.
2147 This way, even though the compiler substitutes corresponding
2148 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
2149 early on, later parts of the compiler can always do the reverse
2150 translation and get back the corresponding typedef name. For
2151 example, given:
2153 typedef struct S MY_TYPE;
2154 MY_TYPE object;
2156 Later parts of the compiler might only know that `object' was of
2157 type `struct S' if it were not for code just below. With this
2158 code however, later parts of the compiler see something like:
2160 struct S' == struct S
2161 typedef struct S' MY_TYPE;
2162 struct S' object;
2164 And they can then deduce (from the node for type struct S') that
2165 the original object declaration was:
2167 MY_TYPE object;
2169 Being able to do this is important for proper support of protoize,
2170 and also for generating precise symbolic debugging information
2171 which takes full account of the programmer's (typedef) vocabulary.
2173 Obviously, we don't want to generate a duplicate ..._TYPE node if
2174 the TYPE_DECL node that we are now processing really represents a
2175 standard built-in type.
2177 Since all standard types are effectively declared at line zero
2178 in the source file, we can easily check to see if we are working
2179 on a standard type by checking the current value of lineno. */
2181 if (TREE_CODE (x) == TYPE_DECL)
2183 if (DECL_SOURCE_LINE (x) == 0)
2185 if (TYPE_NAME (TREE_TYPE (x)) == 0)
2186 TYPE_NAME (TREE_TYPE (x)) = x;
2188 else if (TREE_TYPE (x) != error_mark_node
2189 && DECL_ORIGINAL_TYPE (x) == NULL_TREE)
2191 tree tt = TREE_TYPE (x);
2192 DECL_ORIGINAL_TYPE (x) = tt;
2193 tt = build_type_copy (tt);
2194 TYPE_NAME (tt) = x;
2195 TREE_USED (tt) = TREE_USED (x);
2196 TREE_TYPE (x) = tt;
2200 /* Multiple external decls of the same identifier ought to match.
2201 We get warnings about inline functions where they are defined.
2202 Avoid duplicate warnings where they are used. */
2203 if (TREE_PUBLIC (x)
2204 && ! (TREE_CODE (x) == FUNCTION_DECL && DECL_INLINE (x)))
2206 tree decl;
2208 if (IDENTIFIER_LIMBO_VALUE (name) != 0)
2209 /* Decls in limbo are always extern, so no need to check that. */
2210 decl = IDENTIFIER_LIMBO_VALUE (name);
2211 else
2212 decl = 0;
2214 if (decl && ! comptypes (TREE_TYPE (x), TREE_TYPE (decl))
2215 /* If old decl is built-in, we already warned if we should. */
2216 && !DECL_BUILT_IN (decl))
2218 pedwarn_with_decl (x,
2219 "type mismatch with previous external decl");
2220 pedwarn_with_decl (decl, "previous external decl of `%s'");
2224 /* If a function has had an implicit declaration, and then is defined,
2225 make sure they are compatible. */
2227 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
2228 && IDENTIFIER_GLOBAL_VALUE (name) == 0
2229 && TREE_CODE (x) == FUNCTION_DECL
2230 && ! comptypes (TREE_TYPE (x),
2231 TREE_TYPE (IDENTIFIER_IMPLICIT_DECL (name))))
2233 warning_with_decl (x, "type mismatch with previous implicit declaration");
2234 warning_with_decl (IDENTIFIER_IMPLICIT_DECL (name),
2235 "previous implicit declaration of `%s'");
2238 /* This name is new in its binding level.
2239 Install the new declaration and return it. */
2240 if (b == global_binding_level)
2242 /* Install a global value. */
2244 /* If the first global decl has external linkage,
2245 warn if we later see static one. */
2246 if (IDENTIFIER_GLOBAL_VALUE (name) == 0 && TREE_PUBLIC (x))
2247 TREE_PUBLIC (name) = 1;
2249 IDENTIFIER_GLOBAL_VALUE (name) = x;
2251 /* We no longer care about any previous block level declarations. */
2252 IDENTIFIER_LIMBO_VALUE (name) = 0;
2254 /* Don't forget if the function was used via an implicit decl. */
2255 if (IDENTIFIER_IMPLICIT_DECL (name)
2256 && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
2257 TREE_USED (x) = 1, TREE_USED (name) = 1;
2259 /* Don't forget if its address was taken in that way. */
2260 if (IDENTIFIER_IMPLICIT_DECL (name)
2261 && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
2262 TREE_ADDRESSABLE (x) = 1;
2264 /* Warn about mismatches against previous implicit decl. */
2265 if (IDENTIFIER_IMPLICIT_DECL (name) != 0
2266 /* If this real decl matches the implicit, don't complain. */
2267 && ! (TREE_CODE (x) == FUNCTION_DECL
2268 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (x)))
2269 == integer_type_node)))
2270 pedwarn ("`%s' was previously implicitly declared to return `int'",
2271 IDENTIFIER_POINTER (name));
2273 /* If this decl is `static' and an `extern' was seen previously,
2274 that is erroneous. */
2275 if (TREE_PUBLIC (name)
2276 && ! TREE_PUBLIC (x) && ! DECL_EXTERNAL (x))
2278 /* Okay to redeclare an ANSI built-in as static. */
2279 if (t != 0 && DECL_BUILT_IN (t))
2281 /* Okay to declare a non-ANSI built-in as anything. */
2282 else if (t != 0 && DECL_BUILT_IN_NONANSI (t))
2284 /* Okay to have global type decl after an earlier extern
2285 declaration inside a lexical block. */
2286 else if (TREE_CODE (x) == TYPE_DECL)
2288 else if (IDENTIFIER_IMPLICIT_DECL (name))
2290 if (! TREE_THIS_VOLATILE (name))
2291 pedwarn ("`%s' was declared implicitly `extern' and later `static'",
2292 IDENTIFIER_POINTER (name));
2294 else
2295 pedwarn ("`%s' was declared `extern' and later `static'",
2296 IDENTIFIER_POINTER (name));
2299 else
2301 /* Here to install a non-global value. */
2302 tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
2303 tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
2305 IDENTIFIER_LOCAL_VALUE (name) = x;
2307 /* If this is an extern function declaration, see if we
2308 have a global definition or declaration for the function. */
2309 if (oldlocal == 0
2310 && oldglobal != 0
2311 && TREE_CODE (x) == FUNCTION_DECL
2312 && TREE_CODE (oldglobal) == FUNCTION_DECL
2313 && DECL_EXTERNAL (x)
2314 && ! DECL_DECLARED_INLINE_P (x))
2316 /* We have one. Their types must agree. */
2317 if (! comptypes (TREE_TYPE (x),
2318 TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (name))))
2319 pedwarn_with_decl (x, "extern declaration of `%s' doesn't match global one");
2320 else
2322 /* Inner extern decl is inline if global one is.
2323 Copy enough to really inline it. */
2324 if (DECL_DECLARED_INLINE_P (oldglobal))
2326 DECL_DECLARED_INLINE_P (x)
2327 = DECL_DECLARED_INLINE_P (oldglobal);
2328 DECL_INLINE (x) = DECL_INLINE (oldglobal);
2329 DECL_INITIAL (x) = (current_function_decl == oldglobal
2330 ? 0 : DECL_INITIAL (oldglobal));
2331 DECL_SAVED_INSNS (x) = DECL_SAVED_INSNS (oldglobal);
2332 DECL_NUM_STMTS (x) = DECL_NUM_STMTS (oldglobal);
2333 DECL_ARGUMENTS (x) = DECL_ARGUMENTS (oldglobal);
2334 DECL_RESULT (x) = DECL_RESULT (oldglobal);
2335 TREE_ASM_WRITTEN (x) = TREE_ASM_WRITTEN (oldglobal);
2336 DECL_ABSTRACT_ORIGIN (x)
2337 = DECL_ABSTRACT_ORIGIN (oldglobal);
2339 /* Inner extern decl is built-in if global one is. */
2340 if (DECL_BUILT_IN (oldglobal))
2342 DECL_BUILT_IN_CLASS (x) = DECL_BUILT_IN_CLASS (oldglobal);
2343 DECL_FUNCTION_CODE (x) = DECL_FUNCTION_CODE (oldglobal);
2345 /* Keep the arg types from a file-scope fcn defn. */
2346 if (TYPE_ARG_TYPES (TREE_TYPE (oldglobal)) != 0
2347 && DECL_INITIAL (oldglobal)
2348 && TYPE_ARG_TYPES (TREE_TYPE (x)) == 0)
2349 TREE_TYPE (x) = TREE_TYPE (oldglobal);
2353 #if 0
2354 /* This case is probably sometimes the right thing to do. */
2355 /* If we have a local external declaration,
2356 then any file-scope declaration should not
2357 have been static. */
2358 if (oldlocal == 0 && oldglobal != 0
2359 && !TREE_PUBLIC (oldglobal)
2360 && DECL_EXTERNAL (x) && TREE_PUBLIC (x))
2361 warning ("`%s' locally external but globally static",
2362 IDENTIFIER_POINTER (name));
2363 #endif
2365 /* If we have a local external declaration,
2366 and no file-scope declaration has yet been seen,
2367 then if we later have a file-scope decl it must not be static. */
2368 if (oldlocal == 0
2369 && DECL_EXTERNAL (x)
2370 && TREE_PUBLIC (x))
2372 if (oldglobal == 0)
2373 TREE_PUBLIC (name) = 1;
2375 /* Save this decl, so that we can do type checking against
2376 other decls after it falls out of scope.
2378 Only save it once. This prevents temporary decls created in
2379 expand_inline_function from being used here, since this
2380 will have been set when the inline function was parsed.
2381 It also helps give slightly better warnings. */
2382 if (IDENTIFIER_LIMBO_VALUE (name) == 0)
2383 IDENTIFIER_LIMBO_VALUE (name) = x;
2386 warn_if_shadowing (x, oldlocal);
2388 /* If storing a local value, there may already be one (inherited).
2389 If so, record it for restoration when this binding level ends. */
2390 if (oldlocal != 0)
2391 b->shadowed = tree_cons (name, oldlocal, b->shadowed);
2394 /* Keep count of variables in this level with incomplete type.
2395 If the input is erroneous, we can have error_mark in the type
2396 slot (e.g. "f(void a, ...)") - that doesn't count as an
2397 incomplete type. */
2398 if (TREE_TYPE (x) != error_mark_node
2399 && !COMPLETE_TYPE_P (TREE_TYPE (x)))
2401 tree element = TREE_TYPE (x);
2403 while (TREE_CODE (element) == ARRAY_TYPE)
2404 element = TREE_TYPE (element);
2405 if (TREE_CODE (element) == RECORD_TYPE
2406 || TREE_CODE (element) == UNION_TYPE)
2407 ++b->n_incomplete;
2411 /* Put decls on list in reverse order.
2412 We will reverse them later if necessary. */
2413 TREE_CHAIN (x) = b->names;
2414 b->names = x;
2416 return x;
2419 /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */
2421 tree
2422 pushdecl_top_level (x)
2423 tree x;
2425 tree t;
2426 struct binding_level *b = current_binding_level;
2428 current_binding_level = global_binding_level;
2429 t = pushdecl (x);
2430 current_binding_level = b;
2431 return t;
2434 /* Generate an implicit declaration for identifier FUNCTIONID
2435 as a function of type int (). Print a warning if appropriate. */
2437 tree
2438 implicitly_declare (functionid)
2439 tree functionid;
2441 tree decl;
2442 int traditional_warning = 0;
2443 /* Only one "implicit declaration" warning per identifier. */
2444 int implicit_warning;
2446 /* We used to reuse an old implicit decl here,
2447 but this loses with inline functions because it can clobber
2448 the saved decl chains. */
2449 #if 0
2450 if (IDENTIFIER_IMPLICIT_DECL (functionid) != 0)
2451 decl = IDENTIFIER_IMPLICIT_DECL (functionid);
2452 else
2453 #endif
2454 decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
2456 /* Warn of implicit decl following explicit local extern decl.
2457 This is probably a program designed for traditional C. */
2458 if (TREE_PUBLIC (functionid) && IDENTIFIER_GLOBAL_VALUE (functionid) == 0)
2459 traditional_warning = 1;
2461 /* Warn once of an implicit declaration. */
2462 implicit_warning = (IDENTIFIER_IMPLICIT_DECL (functionid) == 0);
2464 DECL_EXTERNAL (decl) = 1;
2465 TREE_PUBLIC (decl) = 1;
2467 /* Record that we have an implicit decl and this is it. */
2468 IDENTIFIER_IMPLICIT_DECL (functionid) = decl;
2470 /* ANSI standard says implicit declarations are in the innermost block.
2471 So we record the decl in the standard fashion. */
2472 pushdecl (decl);
2474 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
2475 maybe_objc_check_decl (decl);
2477 rest_of_decl_compilation (decl, NULL, 0, 0);
2479 if (implicit_warning)
2480 implicit_decl_warning (functionid);
2481 else if (warn_traditional && traditional_warning)
2482 warning ("function `%s' was previously declared within a block",
2483 IDENTIFIER_POINTER (functionid));
2485 /* Write a record describing this implicit function declaration to the
2486 prototypes file (if requested). */
2488 gen_aux_info_record (decl, 0, 1, 0);
2490 /* Possibly apply some default attributes to this implicit declaration. */
2491 decl_attributes (&decl, NULL_TREE, 0);
2493 return decl;
2496 void
2497 implicit_decl_warning (id)
2498 tree id;
2500 const char *name = IDENTIFIER_POINTER (id);
2501 if (mesg_implicit_function_declaration == 2)
2502 error ("implicit declaration of function `%s'", name);
2503 else if (mesg_implicit_function_declaration == 1)
2504 warning ("implicit declaration of function `%s'", name);
2507 /* Return zero if the declaration NEWDECL is valid
2508 when the declaration OLDDECL (assumed to be for the same name)
2509 has already been seen.
2510 Otherwise return 1 if NEWDECL is a redefinition, 2 if it is a redeclaration,
2511 and 3 if it is a conflicting declaration. */
2513 static int
2514 redeclaration_error_message (newdecl, olddecl)
2515 tree newdecl, olddecl;
2517 if (TREE_CODE (newdecl) == TYPE_DECL)
2519 /* Do not complain about type redeclarations where at least one
2520 declaration was in a system header. */
2521 if (DECL_IN_SYSTEM_HEADER (olddecl) || DECL_IN_SYSTEM_HEADER (newdecl))
2522 return 0;
2523 return 1;
2525 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2527 /* Declarations of functions can insist on internal linkage
2528 but they can't be inconsistent with internal linkage,
2529 so there can be no error on that account.
2530 However defining the same name twice is no good. */
2531 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0
2532 /* However, defining once as extern inline and a second
2533 time in another way is ok. */
2534 && ! (DECL_DECLARED_INLINE_P (olddecl) && DECL_EXTERNAL (olddecl)
2535 && ! (DECL_DECLARED_INLINE_P (newdecl)
2536 && DECL_EXTERNAL (newdecl))))
2537 return 1;
2538 return 0;
2540 else if (DECL_CONTEXT (newdecl) == NULL_TREE)
2542 /* Objects declared at top level: */
2543 /* If at least one is a reference, it's ok. */
2544 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2545 return 0;
2546 /* Reject two definitions. */
2547 if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0)
2548 return 1;
2549 /* Now we have two tentative defs, or one tentative and one real def. */
2550 /* Insist that the linkage match. */
2551 if (TREE_PUBLIC (olddecl) != TREE_PUBLIC (newdecl))
2552 return 3;
2553 return 0;
2555 else if (current_binding_level->parm_flag
2556 && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
2557 return 0;
2558 else
2560 /* Newdecl has block scope. If olddecl has block scope also, then
2561 reject two definitions, and reject a definition together with an
2562 external reference. Otherwise, it is OK, because newdecl must
2563 be an extern reference to olddecl. */
2564 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl))
2565 && DECL_CONTEXT (newdecl) == DECL_CONTEXT (olddecl))
2566 return 2;
2567 return 0;
2571 /* Get the LABEL_DECL corresponding to identifier ID as a label.
2572 Create one if none exists so far for the current function.
2573 This function is called for both label definitions and label references. */
2575 tree
2576 lookup_label (id)
2577 tree id;
2579 tree decl = IDENTIFIER_LABEL_VALUE (id);
2581 if (current_function_decl == 0)
2583 error ("label %s referenced outside of any function",
2584 IDENTIFIER_POINTER (id));
2585 return 0;
2588 /* Use a label already defined or ref'd with this name. */
2589 if (decl != 0)
2591 /* But not if it is inherited and wasn't declared to be inheritable. */
2592 if (DECL_CONTEXT (decl) != current_function_decl
2593 && ! C_DECLARED_LABEL_FLAG (decl))
2594 return shadow_label (id);
2595 return decl;
2598 decl = build_decl (LABEL_DECL, id, void_type_node);
2600 /* A label not explicitly declared must be local to where it's ref'd. */
2601 DECL_CONTEXT (decl) = current_function_decl;
2603 DECL_MODE (decl) = VOIDmode;
2605 /* Say where one reference is to the label,
2606 for the sake of the error if it is not defined. */
2607 DECL_SOURCE_LINE (decl) = lineno;
2608 DECL_SOURCE_FILE (decl) = input_filename;
2610 IDENTIFIER_LABEL_VALUE (id) = decl;
2612 named_labels = tree_cons (NULL_TREE, decl, named_labels);
2614 return decl;
2617 /* Make a label named NAME in the current function,
2618 shadowing silently any that may be inherited from containing functions
2619 or containing scopes.
2621 Note that valid use, if the label being shadowed
2622 comes from another scope in the same function,
2623 requires calling declare_nonlocal_label right away. */
2625 tree
2626 shadow_label (name)
2627 tree name;
2629 tree decl = IDENTIFIER_LABEL_VALUE (name);
2631 if (decl != 0)
2633 tree dup;
2635 /* Check to make sure that the label hasn't already been declared
2636 at this label scope */
2637 for (dup = named_labels; dup; dup = TREE_CHAIN (dup))
2638 if (TREE_VALUE (dup) == decl)
2640 error ("duplicate label declaration `%s'",
2641 IDENTIFIER_POINTER (name));
2642 error_with_decl (TREE_VALUE (dup),
2643 "this is a previous declaration");
2644 /* Just use the previous declaration. */
2645 return lookup_label (name);
2648 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2649 IDENTIFIER_LABEL_VALUE (name) = decl = 0;
2652 return lookup_label (name);
2655 /* Define a label, specifying the location in the source file.
2656 Return the LABEL_DECL node for the label, if the definition is valid.
2657 Otherwise return 0. */
2659 tree
2660 define_label (filename, line, name)
2661 const char *filename;
2662 int line;
2663 tree name;
2665 tree decl = lookup_label (name);
2667 /* If label with this name is known from an outer context, shadow it. */
2668 if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl)
2670 shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2671 IDENTIFIER_LABEL_VALUE (name) = 0;
2672 decl = lookup_label (name);
2675 if (warn_traditional && !in_system_header && lookup_name (name))
2676 warning_with_file_and_line (filename, line,
2677 "traditional C lacks a separate namespace for labels, identifier `%s' conflicts",
2678 IDENTIFIER_POINTER (name));
2680 if (DECL_INITIAL (decl) != 0)
2682 error_with_file_and_line (filename, line, "duplicate label `%s'",
2683 IDENTIFIER_POINTER (name));
2684 return 0;
2686 else
2688 /* Mark label as having been defined. */
2689 DECL_INITIAL (decl) = error_mark_node;
2690 /* Say where in the source. */
2691 DECL_SOURCE_FILE (decl) = filename;
2692 DECL_SOURCE_LINE (decl) = line;
2693 return decl;
2697 /* Return the list of declarations of the current level.
2698 Note that this list is in reverse order unless/until
2699 you nreverse it; and when you do nreverse it, you must
2700 store the result back using `storedecls' or you will lose. */
2702 tree
2703 getdecls ()
2705 return current_binding_level->names;
2708 /* Return the list of type-tags (for structs, etc) of the current level. */
2710 tree
2711 gettags ()
2713 return current_binding_level->tags;
2716 /* Store the list of declarations of the current level.
2717 This is done for the parameter declarations of a function being defined,
2718 after they are modified in the light of any missing parameters. */
2720 static void
2721 storedecls (decls)
2722 tree decls;
2724 current_binding_level->names = decls;
2727 /* Similarly, store the list of tags of the current level. */
2729 static void
2730 storetags (tags)
2731 tree tags;
2733 current_binding_level->tags = tags;
2736 /* Given NAME, an IDENTIFIER_NODE,
2737 return the structure (or union or enum) definition for that name.
2738 Searches binding levels from BINDING_LEVEL up to the global level.
2739 If THISLEVEL_ONLY is nonzero, searches only the specified context
2740 (but skips any tag-transparent contexts to find one that is
2741 meaningful for tags).
2742 CODE says which kind of type the caller wants;
2743 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2744 If the wrong kind of type is found, an error is reported. */
2746 static tree
2747 lookup_tag (code, name, binding_level, thislevel_only)
2748 enum tree_code code;
2749 struct binding_level *binding_level;
2750 tree name;
2751 int thislevel_only;
2753 struct binding_level *level;
2754 int thislevel = 1;
2756 for (level = binding_level; level; level = level->level_chain)
2758 tree tail;
2759 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2761 if (TREE_PURPOSE (tail) == name)
2763 if (TREE_CODE (TREE_VALUE (tail)) != code)
2765 /* Definition isn't the kind we were looking for. */
2766 pending_invalid_xref = name;
2767 pending_invalid_xref_file = input_filename;
2768 pending_invalid_xref_line = lineno;
2769 /* If in the same binding level as a declaration as a tag
2770 of a different type, this must not be allowed to
2771 shadow that tag, so give the error immediately.
2772 (For example, "struct foo; union foo;" is invalid.) */
2773 if (thislevel)
2774 pending_xref_error ();
2776 return TREE_VALUE (tail);
2779 if (! level->tag_transparent)
2781 if (thislevel_only)
2782 return NULL_TREE;
2783 thislevel = 0;
2786 return NULL_TREE;
2789 /* Print an error message now
2790 for a recent invalid struct, union or enum cross reference.
2791 We don't print them immediately because they are not invalid
2792 when used in the `struct foo;' construct for shadowing. */
2794 void
2795 pending_xref_error ()
2797 if (pending_invalid_xref != 0)
2798 error_with_file_and_line (pending_invalid_xref_file,
2799 pending_invalid_xref_line,
2800 "`%s' defined as wrong kind of tag",
2801 IDENTIFIER_POINTER (pending_invalid_xref));
2802 pending_invalid_xref = 0;
2805 /* Given a type, find the tag that was defined for it and return the tag name.
2806 Otherwise return 0. */
2808 static tree
2809 lookup_tag_reverse (type)
2810 tree type;
2812 struct binding_level *level;
2814 for (level = current_binding_level; level; level = level->level_chain)
2816 tree tail;
2817 for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2819 if (TREE_VALUE (tail) == type)
2820 return TREE_PURPOSE (tail);
2823 return NULL_TREE;
2826 /* Look up NAME in the current binding level and its superiors
2827 in the namespace of variables, functions and typedefs.
2828 Return a ..._DECL node of some kind representing its definition,
2829 or return 0 if it is undefined. */
2831 tree
2832 lookup_name (name)
2833 tree name;
2835 tree val;
2837 if (current_binding_level != global_binding_level
2838 && IDENTIFIER_LOCAL_VALUE (name))
2839 val = IDENTIFIER_LOCAL_VALUE (name);
2840 else
2841 val = IDENTIFIER_GLOBAL_VALUE (name);
2842 return val;
2845 /* Similar to `lookup_name' but look only at current binding level. */
2847 tree
2848 lookup_name_current_level (name)
2849 tree name;
2851 tree t;
2853 if (current_binding_level == global_binding_level)
2854 return IDENTIFIER_GLOBAL_VALUE (name);
2856 if (IDENTIFIER_LOCAL_VALUE (name) == 0)
2857 return 0;
2859 for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
2860 if (DECL_NAME (t) == name)
2861 break;
2863 return t;
2866 /* Mark ARG for GC. */
2868 static void
2869 mark_binding_level (arg)
2870 void *arg;
2872 struct binding_level *level = *(struct binding_level **) arg;
2874 for (; level != 0; level = level->level_chain)
2876 ggc_mark_tree (level->names);
2877 ggc_mark_tree (level->tags);
2878 ggc_mark_tree (level->shadowed);
2879 ggc_mark_tree (level->blocks);
2880 ggc_mark_tree (level->this_block);
2881 ggc_mark_tree (level->parm_order);
2885 /* Create the predefined scalar types of C,
2886 and some nodes representing standard constants (0, 1, (void *) 0).
2887 Initialize the global binding level.
2888 Make definitions for built-in primitive functions. */
2890 void
2891 c_init_decl_processing ()
2893 tree endlink;
2894 tree ptr_ftype_void, ptr_ftype_ptr;
2896 /* Adds some ggc roots, and reserved words for c-parse.in. */
2897 c_parse_init ();
2899 current_function_decl = NULL;
2900 named_labels = NULL;
2901 current_binding_level = NULL_BINDING_LEVEL;
2902 free_binding_level = NULL_BINDING_LEVEL;
2904 /* Make the binding_level structure for global names. */
2905 pushlevel (0);
2906 global_binding_level = current_binding_level;
2908 build_common_tree_nodes (flag_signed_char);
2910 c_common_nodes_and_builtins ();
2912 boolean_type_node = integer_type_node;
2913 boolean_true_node = integer_one_node;
2914 boolean_false_node = integer_zero_node;
2916 c_bool_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
2917 TREE_SET_CODE (c_bool_type_node, BOOLEAN_TYPE);
2918 TYPE_MAX_VALUE (c_bool_type_node) = build_int_2 (1, 0);
2919 TREE_TYPE (TYPE_MAX_VALUE (c_bool_type_node)) = c_bool_type_node;
2920 TYPE_PRECISION (c_bool_type_node) = 1;
2921 pushdecl (build_decl (TYPE_DECL, get_identifier ("_Bool"),
2922 c_bool_type_node));
2923 c_bool_false_node = build_int_2 (0, 0);
2924 TREE_TYPE (c_bool_false_node) = c_bool_type_node;
2925 c_bool_true_node = build_int_2 (1, 0);
2926 TREE_TYPE (c_bool_true_node) = c_bool_type_node;
2928 endlink = void_list_node;
2929 ptr_ftype_void = build_function_type (ptr_type_node, endlink);
2930 ptr_ftype_ptr
2931 = build_function_type (ptr_type_node,
2932 tree_cons (NULL_TREE, ptr_type_node, endlink));
2934 pedantic_lvalues = pedantic;
2936 make_fname_decl = c_make_fname_decl;
2937 start_fname_decls ();
2939 /* Record our roots. */
2941 ggc_add_tree_root (c_global_trees, CTI_MAX);
2942 ggc_add_root (&c_stmt_tree, 1, sizeof c_stmt_tree, mark_stmt_tree);
2943 ggc_add_tree_root (&c_scope_stmt_stack, 1);
2944 ggc_add_tree_root (&named_labels, 1);
2945 ggc_add_tree_root (&shadowed_labels, 1);
2946 ggc_add_root (&current_binding_level, 1, sizeof current_binding_level,
2947 mark_binding_level);
2948 ggc_add_root (&label_level_chain, 1, sizeof label_level_chain,
2949 mark_binding_level);
2950 ggc_add_tree_root (&static_ctors, 1);
2951 ggc_add_tree_root (&static_dtors, 1);
2954 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
2955 decl, NAME is the initialization string and TYPE_DEP indicates whether
2956 NAME depended on the type of the function. As we don't yet implement
2957 delayed emission of static data, we mark the decl as emitted
2958 so it is not placed in the output. Anything using it must therefore pull
2959 out the STRING_CST initializer directly. This does mean that these names
2960 are string merging candidates, which is wrong for C99's __func__. FIXME. */
2962 static tree
2963 c_make_fname_decl (id, type_dep)
2964 tree id;
2965 int type_dep;
2967 const char *name = fname_as_string (type_dep);
2968 tree decl, type, init;
2969 size_t length = strlen (name);
2971 type = build_array_type
2972 (build_qualified_type (char_type_node, TYPE_QUAL_CONST),
2973 build_index_type (size_int (length)));
2975 decl = build_decl (VAR_DECL, id, type);
2976 /* We don't push the decl, so have to set its context here. */
2977 DECL_CONTEXT (decl) = current_function_decl;
2979 TREE_STATIC (decl) = 1;
2980 TREE_READONLY (decl) = 1;
2981 DECL_ARTIFICIAL (decl) = 1;
2983 init = build_string (length + 1, name);
2984 TREE_TYPE (init) = type;
2985 DECL_INITIAL (decl) = init;
2987 TREE_USED (decl) = 1;
2989 finish_decl (decl, init, NULL_TREE);
2991 return decl;
2994 /* Return a definition for a builtin function named NAME and whose data type
2995 is TYPE. TYPE should be a function type with argument types.
2996 FUNCTION_CODE tells later passes how to compile calls to this function.
2997 See tree.h for its possible values.
2999 If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
3000 the name to be called if we can't opencode the function. */
3002 tree
3003 builtin_function (name, type, function_code, class, library_name)
3004 const char *name;
3005 tree type;
3006 int function_code;
3007 enum built_in_class class;
3008 const char *library_name;
3010 tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
3011 DECL_EXTERNAL (decl) = 1;
3012 TREE_PUBLIC (decl) = 1;
3013 if (library_name)
3014 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
3015 make_decl_rtl (decl, NULL);
3016 pushdecl (decl);
3017 DECL_BUILT_IN_CLASS (decl) = class;
3018 DECL_FUNCTION_CODE (decl) = function_code;
3020 /* The return builtins leave the current function. */
3021 if (function_code == BUILT_IN_RETURN || function_code == BUILT_IN_EH_RETURN)
3022 TREE_THIS_VOLATILE (decl) = 1;
3024 /* Warn if a function in the namespace for users
3025 is used without an occasion to consider it declared. */
3026 if (name[0] != '_' || name[1] != '_')
3027 C_DECL_ANTICIPATED (decl) = 1;
3029 /* Possibly apply some default attributes to this built-in function. */
3030 decl_attributes (&decl, NULL_TREE, 0);
3032 return decl;
3035 /* Apply default attributes to a function, if a system function with default
3036 attributes. */
3038 void
3039 c_insert_default_attributes (decl)
3040 tree decl;
3042 if (!TREE_PUBLIC (decl))
3043 return;
3044 c_common_insert_default_attributes (decl);
3047 /* Called when a declaration is seen that contains no names to declare.
3048 If its type is a reference to a structure, union or enum inherited
3049 from a containing scope, shadow that tag name for the current scope
3050 with a forward reference.
3051 If its type defines a new named structure or union
3052 or defines an enum, it is valid but we need not do anything here.
3053 Otherwise, it is an error. */
3055 void
3056 shadow_tag (declspecs)
3057 tree declspecs;
3059 shadow_tag_warned (declspecs, 0);
3062 void
3063 shadow_tag_warned (declspecs, warned)
3064 tree declspecs;
3065 int warned;
3066 /* 1 => we have done a pedwarn. 2 => we have done a warning, but
3067 no pedwarn. */
3069 int found_tag = 0;
3070 tree link;
3071 tree specs, attrs;
3073 pending_invalid_xref = 0;
3075 /* Remove the attributes from declspecs, since they will confuse the
3076 following code. */
3077 split_specs_attrs (declspecs, &specs, &attrs);
3079 for (link = specs; link; link = TREE_CHAIN (link))
3081 tree value = TREE_VALUE (link);
3082 enum tree_code code = TREE_CODE (value);
3084 if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
3085 /* Used to test also that TYPE_SIZE (value) != 0.
3086 That caused warning for `struct foo;' at top level in the file. */
3088 tree name = lookup_tag_reverse (value);
3089 tree t;
3091 found_tag++;
3093 if (name == 0)
3095 if (warned != 1 && code != ENUMERAL_TYPE)
3096 /* Empty unnamed enum OK */
3098 pedwarn ("unnamed struct/union that defines no instances");
3099 warned = 1;
3102 else
3104 t = lookup_tag (code, name, current_binding_level, 1);
3106 if (t == 0)
3108 t = make_node (code);
3109 pushtag (name, t);
3113 else
3115 if (!warned && ! in_system_header)
3117 warning ("useless keyword or type name in empty declaration");
3118 warned = 2;
3123 if (found_tag > 1)
3124 error ("two types specified in one empty declaration");
3126 if (warned != 1)
3128 if (found_tag == 0)
3129 pedwarn ("empty declaration");
3133 /* Construct an array declarator. EXPR is the expression inside [], or
3134 NULL_TREE. QUALS are the type qualifiers inside the [] (to be applied
3135 to the pointer to which a parameter array is converted). STATIC_P is
3136 non-zero if "static" is inside the [], zero otherwise. VLA_UNSPEC_P
3137 is non-zero is the array is [*], a VLA of unspecified length which is
3138 nevertheless a complete type (not currently implemented by GCC),
3139 zero otherwise. The declarator is constructed as an ARRAY_REF
3140 (to be decoded by grokdeclarator), whose operand 0 is what's on the
3141 left of the [] (filled by in set_array_declarator_type) and operand 1
3142 is the expression inside; whose TREE_TYPE is the type qualifiers and
3143 which has TREE_STATIC set if "static" is used. */
3145 tree
3146 build_array_declarator (expr, quals, static_p, vla_unspec_p)
3147 tree expr;
3148 tree quals;
3149 int static_p;
3150 int vla_unspec_p;
3152 tree decl;
3153 decl = build_nt (ARRAY_REF, NULL_TREE, expr);
3154 TREE_TYPE (decl) = quals;
3155 TREE_STATIC (decl) = (static_p ? 1 : 0);
3156 if (pedantic && !flag_isoc99)
3158 if (static_p || quals != NULL_TREE)
3159 pedwarn ("ISO C89 does not support `static' or type qualifiers in parameter array declarators");
3160 if (vla_unspec_p)
3161 pedwarn ("ISO C89 does not support `[*]' array declarators");
3163 if (vla_unspec_p)
3164 warning ("GCC does not yet properly implement `[*]' array declarators");
3165 return decl;
3168 /* Set the type of an array declarator. DECL is the declarator, as
3169 constructed by build_array_declarator; TYPE is what appears on the left
3170 of the [] and goes in operand 0. ABSTRACT_P is non-zero if it is an
3171 abstract declarator, zero otherwise; this is used to reject static and
3172 type qualifiers in abstract declarators, where they are not in the
3173 C99 grammar. */
3175 tree
3176 set_array_declarator_type (decl, type, abstract_p)
3177 tree decl;
3178 tree type;
3179 int abstract_p;
3181 TREE_OPERAND (decl, 0) = type;
3182 if (abstract_p && (TREE_TYPE (decl) != NULL_TREE || TREE_STATIC (decl)))
3183 error ("static or type qualifiers in abstract declarator");
3184 return decl;
3187 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3189 tree
3190 groktypename (typename)
3191 tree typename;
3193 tree specs, attrs;
3195 if (TREE_CODE (typename) != TREE_LIST)
3196 return typename;
3198 split_specs_attrs (TREE_PURPOSE (typename), &specs, &attrs);
3200 typename = grokdeclarator (TREE_VALUE (typename), specs, TYPENAME, 0);
3202 /* Apply attributes. */
3203 decl_attributes (&typename, attrs, 0);
3205 return typename;
3208 /* Return a PARM_DECL node for a given pair of specs and declarator. */
3210 tree
3211 groktypename_in_parm_context (typename)
3212 tree typename;
3214 if (TREE_CODE (typename) != TREE_LIST)
3215 return typename;
3216 return grokdeclarator (TREE_VALUE (typename),
3217 TREE_PURPOSE (typename),
3218 PARM, 0);
3221 /* Decode a declarator in an ordinary declaration or data definition.
3222 This is called as soon as the type information and variable name
3223 have been parsed, before parsing the initializer if any.
3224 Here we create the ..._DECL node, fill in its type,
3225 and put it on the list of decls for the current context.
3226 The ..._DECL node is returned as the value.
3228 Exception: for arrays where the length is not specified,
3229 the type is left null, to be filled in by `finish_decl'.
3231 Function definitions do not come here; they go to start_function
3232 instead. However, external and forward declarations of functions
3233 do go through here. Structure field declarations are done by
3234 grokfield and not through here. */
3236 tree
3237 start_decl (declarator, declspecs, initialized, attributes)
3238 tree declarator, declspecs;
3239 int initialized;
3240 tree attributes;
3242 tree decl;
3243 tree tem;
3245 /* An object declared as __attribute__((deprecated)) suppresses
3246 warnings of uses of other deprecated items. */
3247 if (lookup_attribute ("deprecated", attributes))
3248 deprecated_state = DEPRECATED_SUPPRESS;
3250 decl = grokdeclarator (declarator, declspecs,
3251 NORMAL, initialized);
3253 deprecated_state = DEPRECATED_NORMAL;
3255 if (warn_main > 0 && TREE_CODE (decl) != FUNCTION_DECL
3256 && MAIN_NAME_P (DECL_NAME (decl)))
3257 warning_with_decl (decl, "`%s' is usually a function");
3259 if (initialized)
3260 /* Is it valid for this decl to have an initializer at all?
3261 If not, set INITIALIZED to zero, which will indirectly
3262 tell `finish_decl' to ignore the initializer once it is parsed. */
3263 switch (TREE_CODE (decl))
3265 case TYPE_DECL:
3266 /* typedef foo = bar means give foo the same type as bar.
3267 We haven't parsed bar yet, so `finish_decl' will fix that up.
3268 Any other case of an initialization in a TYPE_DECL is an error. */
3269 if (pedantic || list_length (declspecs) > 1)
3271 error ("typedef `%s' is initialized",
3272 IDENTIFIER_POINTER (DECL_NAME (decl)));
3273 initialized = 0;
3275 break;
3277 case FUNCTION_DECL:
3278 error ("function `%s' is initialized like a variable",
3279 IDENTIFIER_POINTER (DECL_NAME (decl)));
3280 initialized = 0;
3281 break;
3283 case PARM_DECL:
3284 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3285 error ("parameter `%s' is initialized",
3286 IDENTIFIER_POINTER (DECL_NAME (decl)));
3287 initialized = 0;
3288 break;
3290 default:
3291 /* Don't allow initializations for incomplete types
3292 except for arrays which might be completed by the initialization. */
3294 /* This can happen if the array size is an undefined macro. We already
3295 gave a warning, so we don't need another one. */
3296 if (TREE_TYPE (decl) == error_mark_node)
3297 initialized = 0;
3298 else if (COMPLETE_TYPE_P (TREE_TYPE (decl)))
3300 /* A complete type is ok if size is fixed. */
3302 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
3303 || C_DECL_VARIABLE_SIZE (decl))
3305 error ("variable-sized object may not be initialized");
3306 initialized = 0;
3309 else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
3311 error ("variable `%s' has initializer but incomplete type",
3312 IDENTIFIER_POINTER (DECL_NAME (decl)));
3313 initialized = 0;
3315 else if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
3317 error ("elements of array `%s' have incomplete type",
3318 IDENTIFIER_POINTER (DECL_NAME (decl)));
3319 initialized = 0;
3323 if (initialized)
3325 #if 0
3326 /* Seems redundant with grokdeclarator. */
3327 if (current_binding_level != global_binding_level
3328 && DECL_EXTERNAL (decl)
3329 && TREE_CODE (decl) != FUNCTION_DECL)
3330 warning ("declaration of `%s' has `extern' and is initialized",
3331 IDENTIFIER_POINTER (DECL_NAME (decl)));
3332 #endif
3333 DECL_EXTERNAL (decl) = 0;
3334 if (current_binding_level == global_binding_level)
3335 TREE_STATIC (decl) = 1;
3337 /* Tell `pushdecl' this is an initialized decl
3338 even though we don't yet have the initializer expression.
3339 Also tell `finish_decl' it may store the real initializer. */
3340 DECL_INITIAL (decl) = error_mark_node;
3343 /* If this is a function declaration, write a record describing it to the
3344 prototypes file (if requested). */
3346 if (TREE_CODE (decl) == FUNCTION_DECL)
3347 gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
3349 /* ANSI specifies that a tentative definition which is not merged with
3350 a non-tentative definition behaves exactly like a definition with an
3351 initializer equal to zero. (Section 3.7.2)
3352 -fno-common gives strict ANSI behavior. Usually you don't want it.
3353 This matters only for variables with external linkage. */
3354 if (!initialized && (! flag_no_common || ! TREE_PUBLIC (decl)))
3355 DECL_COMMON (decl) = 1;
3357 /* Set attributes here so if duplicate decl, will have proper attributes. */
3358 decl_attributes (&decl, attributes, 0);
3360 /* If #pragma weak was used, mark the decl weak now. */
3361 if (current_binding_level == global_binding_level)
3362 maybe_apply_pragma_weak (decl);
3364 if (TREE_CODE (decl) == FUNCTION_DECL
3365 && DECL_DECLARED_INLINE_P (decl)
3366 && DECL_UNINLINABLE (decl)
3367 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
3368 warning_with_decl (decl,
3369 "inline function `%s' given attribute noinline");
3371 /* Add this decl to the current binding level.
3372 TEM may equal DECL or it may be a previous decl of the same name. */
3373 tem = pushdecl (decl);
3375 /* For a local variable, define the RTL now. */
3376 if (current_binding_level != global_binding_level
3377 /* But not if this is a duplicate decl
3378 and we preserved the rtl from the previous one
3379 (which may or may not happen). */
3380 && !DECL_RTL_SET_P (tem)
3381 && !DECL_CONTEXT (tem))
3383 if (TREE_TYPE (tem) != error_mark_node
3384 && COMPLETE_TYPE_P (TREE_TYPE (tem)))
3385 expand_decl (tem);
3386 else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
3387 && DECL_INITIAL (tem) != 0)
3388 expand_decl (tem);
3391 return tem;
3394 /* Finish processing of a declaration;
3395 install its initial value.
3396 If the length of an array type is not known before,
3397 it must be determined now, from the initial value, or it is an error. */
3399 void
3400 finish_decl (decl, init, asmspec_tree)
3401 tree decl, init;
3402 tree asmspec_tree;
3404 tree type = TREE_TYPE (decl);
3405 int was_incomplete = (DECL_SIZE (decl) == 0);
3406 const char *asmspec = 0;
3408 /* If a name was specified, get the string. */
3409 if (current_binding_level == global_binding_level)
3410 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
3411 if (asmspec_tree)
3412 asmspec = TREE_STRING_POINTER (asmspec_tree);
3414 /* If `start_decl' didn't like having an initialization, ignore it now. */
3415 if (init != 0 && DECL_INITIAL (decl) == 0)
3416 init = 0;
3418 /* Don't crash if parm is initialized. */
3419 if (TREE_CODE (decl) == PARM_DECL)
3420 init = 0;
3422 if (init)
3424 if (TREE_CODE (decl) != TYPE_DECL)
3425 store_init_value (decl, init);
3426 else
3428 /* typedef foo = bar; store the type of bar as the type of foo. */
3429 TREE_TYPE (decl) = TREE_TYPE (init);
3430 DECL_INITIAL (decl) = init = 0;
3434 /* Deduce size of array from initialization, if not already known */
3435 if (TREE_CODE (type) == ARRAY_TYPE
3436 && TYPE_DOMAIN (type) == 0
3437 && TREE_CODE (decl) != TYPE_DECL)
3439 int do_default
3440 = (TREE_STATIC (decl)
3441 /* Even if pedantic, an external linkage array
3442 may have incomplete type at first. */
3443 ? pedantic && !TREE_PUBLIC (decl)
3444 : !DECL_EXTERNAL (decl));
3445 int failure
3446 = complete_array_type (type, DECL_INITIAL (decl), do_default);
3448 /* Get the completed type made by complete_array_type. */
3449 type = TREE_TYPE (decl);
3451 if (failure == 1)
3452 error_with_decl (decl, "initializer fails to determine size of `%s'");
3454 else if (failure == 2)
3456 if (do_default)
3457 error_with_decl (decl, "array size missing in `%s'");
3458 /* If a `static' var's size isn't known,
3459 make it extern as well as static, so it does not get
3460 allocated.
3461 If it is not `static', then do not mark extern;
3462 finish_incomplete_decl will give it a default size
3463 and it will get allocated. */
3464 else if (!pedantic && TREE_STATIC (decl) && ! TREE_PUBLIC (decl))
3465 DECL_EXTERNAL (decl) = 1;
3468 /* TYPE_MAX_VALUE is always one less than the number of elements
3469 in the array, because we start counting at zero. Therefore,
3470 warn only if the value is less than zero. */
3471 else if (pedantic && TYPE_DOMAIN (type) != 0
3472 && tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) < 0)
3473 error_with_decl (decl, "zero or negative size array `%s'");
3475 layout_decl (decl, 0);
3478 if (TREE_CODE (decl) == VAR_DECL)
3480 if (DECL_SIZE (decl) == 0 && TREE_TYPE (decl) != error_mark_node
3481 && COMPLETE_TYPE_P (TREE_TYPE (decl)))
3482 layout_decl (decl, 0);
3484 if (DECL_SIZE (decl) == 0
3485 /* Don't give an error if we already gave one earlier. */
3486 && TREE_TYPE (decl) != error_mark_node
3487 && (TREE_STATIC (decl)
3489 /* A static variable with an incomplete type
3490 is an error if it is initialized.
3491 Also if it is not file scope.
3492 Otherwise, let it through, but if it is not `extern'
3493 then it may cause an error message later. */
3494 (DECL_INITIAL (decl) != 0
3495 || DECL_CONTEXT (decl) != 0)
3497 /* An automatic variable with an incomplete type
3498 is an error. */
3499 !DECL_EXTERNAL (decl)))
3501 error_with_decl (decl, "storage size of `%s' isn't known");
3502 TREE_TYPE (decl) = error_mark_node;
3505 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
3506 && DECL_SIZE (decl) != 0)
3508 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
3509 constant_expression_warning (DECL_SIZE (decl));
3510 else
3511 error_with_decl (decl, "storage size of `%s' isn't constant");
3514 if (TREE_USED (type))
3515 TREE_USED (decl) = 1;
3518 /* If this is a function and an assembler name is specified, it isn't
3519 builtin any more. Also reset DECL_RTL so we can give it its new
3520 name. */
3521 if (TREE_CODE (decl) == FUNCTION_DECL && asmspec)
3523 DECL_BUILT_IN_CLASS (decl) = NOT_BUILT_IN;
3524 SET_DECL_RTL (decl, NULL_RTX);
3525 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
3528 /* Output the assembler code and/or RTL code for variables and functions,
3529 unless the type is an undefined structure or union.
3530 If not, it will get done when the type is completed. */
3532 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
3534 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3535 maybe_objc_check_decl (decl);
3537 if (!DECL_CONTEXT (decl))
3539 if (DECL_INITIAL (decl) == NULL_TREE
3540 || DECL_INITIAL (decl) == error_mark_node)
3541 /* Don't output anything
3542 when a tentative file-scope definition is seen.
3543 But at end of compilation, do output code for them. */
3544 DECL_DEFER_OUTPUT (decl) = 1;
3545 rest_of_decl_compilation (decl, asmspec,
3546 (DECL_CONTEXT (decl) == 0
3547 || TREE_ASM_WRITTEN (decl)), 0);
3549 else
3551 /* This is a local variable. If there is an ASMSPEC, the
3552 user has requested that we handle it specially. */
3553 if (asmspec)
3555 /* In conjunction with an ASMSPEC, the `register'
3556 keyword indicates that we should place the variable
3557 in a particular register. */
3558 if (DECL_REGISTER (decl))
3559 DECL_C_HARD_REGISTER (decl) = 1;
3561 /* If this is not a static variable, issue a warning.
3562 It doesn't make any sense to give an ASMSPEC for an
3563 ordinary, non-register local variable. Historically,
3564 GCC has accepted -- but ignored -- the ASMSPEC in
3565 this case. */
3566 if (TREE_CODE (decl) == VAR_DECL
3567 && !DECL_REGISTER (decl)
3568 && !TREE_STATIC (decl))
3569 warning_with_decl (decl,
3570 "ignoring asm-specifier for non-static local variable `%s'");
3571 else
3572 SET_DECL_ASSEMBLER_NAME (decl, get_identifier (asmspec));
3575 if (TREE_CODE (decl) != FUNCTION_DECL)
3576 add_decl_stmt (decl);
3579 if (DECL_CONTEXT (decl) != 0)
3581 /* Recompute the RTL of a local array now
3582 if it used to be an incomplete type. */
3583 if (was_incomplete
3584 && ! TREE_STATIC (decl) && ! DECL_EXTERNAL (decl))
3586 /* If we used it already as memory, it must stay in memory. */
3587 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
3588 /* If it's still incomplete now, no init will save it. */
3589 if (DECL_SIZE (decl) == 0)
3590 DECL_INITIAL (decl) = 0;
3595 if (TREE_CODE (decl) == TYPE_DECL)
3597 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3598 maybe_objc_check_decl (decl);
3599 rest_of_decl_compilation (decl, NULL, DECL_CONTEXT (decl) == 0, 0);
3602 /* At the end of a declaration, throw away any variable type sizes
3603 of types defined inside that declaration. There is no use
3604 computing them in the following function definition. */
3605 if (current_binding_level == global_binding_level)
3606 get_pending_sizes ();
3609 /* Given a parsed parameter declaration,
3610 decode it into a PARM_DECL and push that on the current binding level.
3611 Also, for the sake of forward parm decls,
3612 record the given order of parms in `parm_order'. */
3614 void
3615 push_parm_decl (parm)
3616 tree parm;
3618 tree decl;
3619 int old_immediate_size_expand = immediate_size_expand;
3620 /* Don't try computing parm sizes now -- wait till fn is called. */
3621 immediate_size_expand = 0;
3623 decl = grokdeclarator (TREE_VALUE (TREE_PURPOSE (parm)),
3624 TREE_PURPOSE (TREE_PURPOSE (parm)), PARM, 0);
3625 decl_attributes (&decl, TREE_VALUE (parm), 0);
3627 #if 0
3628 if (DECL_NAME (decl))
3630 tree olddecl;
3631 olddecl = lookup_name (DECL_NAME (decl));
3632 if (pedantic && olddecl != 0 && TREE_CODE (olddecl) == TYPE_DECL)
3633 pedwarn_with_decl (decl,
3634 "ISO C forbids parameter `%s' shadowing typedef");
3636 #endif
3638 decl = pushdecl (decl);
3640 immediate_size_expand = old_immediate_size_expand;
3642 current_binding_level->parm_order
3643 = tree_cons (NULL_TREE, decl, current_binding_level->parm_order);
3645 /* Add this decl to the current binding level. */
3646 finish_decl (decl, NULL_TREE, NULL_TREE);
3649 /* Clear the given order of parms in `parm_order'.
3650 Used at start of parm list,
3651 and also at semicolon terminating forward decls. */
3653 void
3654 clear_parm_order ()
3656 current_binding_level->parm_order = NULL_TREE;
3659 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
3660 literal, which may be an incomplete array type completed by the
3661 initializer; INIT is a CONSTRUCTOR that initializes the compound
3662 literal. */
3664 tree
3665 build_compound_literal (type, init)
3666 tree type;
3667 tree init;
3669 /* We do not use start_decl here because we have a type, not a declarator;
3670 and do not use finish_decl because the decl should be stored inside
3671 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_STMT. */
3672 tree decl = build_decl (VAR_DECL, NULL_TREE, type);
3673 tree complit;
3674 tree stmt;
3675 DECL_EXTERNAL (decl) = 0;
3676 TREE_PUBLIC (decl) = 0;
3677 TREE_STATIC (decl) = (current_binding_level == global_binding_level);
3678 DECL_CONTEXT (decl) = current_function_decl;
3679 TREE_USED (decl) = 1;
3680 TREE_TYPE (decl) = type;
3681 store_init_value (decl, init);
3683 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
3685 int failure = complete_array_type (type, DECL_INITIAL (decl), 1);
3686 if (failure)
3687 abort ();
3690 type = TREE_TYPE (decl);
3691 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
3692 return error_mark_node;
3694 stmt = build_stmt (DECL_STMT, decl);
3695 complit = build1 (COMPOUND_LITERAL_EXPR, TREE_TYPE (decl), stmt);
3696 TREE_SIDE_EFFECTS (complit) = 1;
3698 layout_decl (decl, 0);
3700 if (TREE_STATIC (decl))
3702 /* This decl needs a name for the assembler output. We also need
3703 a unique suffix to be added to the name, for which DECL_CONTEXT
3704 must be set. */
3705 DECL_NAME (decl) = get_identifier ("__compound_literal");
3706 DECL_CONTEXT (decl) = complit;
3707 rest_of_decl_compilation (decl, NULL, 1, 0);
3708 DECL_CONTEXT (decl) = NULL_TREE;
3711 return complit;
3714 /* Make TYPE a complete type based on INITIAL_VALUE.
3715 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
3716 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
3719 complete_array_type (type, initial_value, do_default)
3720 tree type;
3721 tree initial_value;
3722 int do_default;
3724 tree maxindex = NULL_TREE;
3725 int value = 0;
3727 if (initial_value)
3729 /* Note MAXINDEX is really the maximum index,
3730 one less than the size. */
3731 if (TREE_CODE (initial_value) == STRING_CST)
3733 int eltsize
3734 = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
3735 maxindex = build_int_2 ((TREE_STRING_LENGTH (initial_value)
3736 / eltsize) - 1, 0);
3738 else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3740 tree elts = CONSTRUCTOR_ELTS (initial_value);
3741 maxindex = build_int_2 (-1, -1);
3742 for (; elts; elts = TREE_CHAIN (elts))
3744 if (TREE_PURPOSE (elts))
3745 maxindex = TREE_PURPOSE (elts);
3746 else
3747 maxindex = fold (build (PLUS_EXPR, integer_type_node,
3748 maxindex, integer_one_node));
3750 maxindex = copy_node (maxindex);
3752 else
3754 /* Make an error message unless that happened already. */
3755 if (initial_value != error_mark_node)
3756 value = 1;
3758 /* Prevent further error messages. */
3759 maxindex = build_int_2 (0, 0);
3763 if (!maxindex)
3765 if (do_default)
3766 maxindex = build_int_2 (0, 0);
3767 value = 2;
3770 if (maxindex)
3772 TYPE_DOMAIN (type) = build_index_type (maxindex);
3773 if (!TREE_TYPE (maxindex))
3774 TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
3777 /* Lay out the type now that we can get the real answer. */
3779 layout_type (type);
3781 return value;
3784 /* Given declspecs and a declarator,
3785 determine the name and type of the object declared
3786 and construct a ..._DECL node for it.
3787 (In one case we can return a ..._TYPE node instead.
3788 For invalid input we sometimes return 0.)
3790 DECLSPECS is a chain of tree_list nodes whose value fields
3791 are the storage classes and type specifiers.
3793 DECL_CONTEXT says which syntactic context this declaration is in:
3794 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3795 FUNCDEF for a function definition. Like NORMAL but a few different
3796 error messages in each case. Return value may be zero meaning
3797 this definition is too screwy to try to parse.
3798 PARM for a parameter declaration (either within a function prototype
3799 or before a function body). Make a PARM_DECL, or return void_type_node.
3800 TYPENAME if for a typename (in a cast or sizeof).
3801 Don't make a DECL node; just return the ..._TYPE node.
3802 FIELD for a struct or union field; make a FIELD_DECL.
3803 BITFIELD for a field with specified width.
3804 INITIALIZED is 1 if the decl has an initializer.
3806 In the TYPENAME case, DECLARATOR is really an absolute declarator.
3807 It may also be so in the PARM case, for a prototype where the
3808 argument type is specified but not the name.
3810 This function is where the complicated C meanings of `static'
3811 and `extern' are interpreted. */
3813 static tree
3814 grokdeclarator (declarator, declspecs, decl_context, initialized)
3815 tree declspecs;
3816 tree declarator;
3817 enum decl_context decl_context;
3818 int initialized;
3820 int specbits = 0;
3821 tree spec;
3822 tree type = NULL_TREE;
3823 int longlong = 0;
3824 int constp;
3825 int restrictp;
3826 int volatilep;
3827 int type_quals = TYPE_UNQUALIFIED;
3828 int inlinep;
3829 int explicit_int = 0;
3830 int explicit_char = 0;
3831 int defaulted_int = 0;
3832 tree typedef_decl = 0;
3833 const char *name;
3834 tree typedef_type = 0;
3835 int funcdef_flag = 0;
3836 enum tree_code innermost_code = ERROR_MARK;
3837 int bitfield = 0;
3838 int size_varies = 0;
3839 tree decl_attr = NULL_TREE;
3840 tree array_ptr_quals = NULL_TREE;
3841 int array_parm_static = 0;
3842 tree returned_attrs = NULL_TREE;
3844 if (decl_context == BITFIELD)
3845 bitfield = 1, decl_context = FIELD;
3847 if (decl_context == FUNCDEF)
3848 funcdef_flag = 1, decl_context = NORMAL;
3850 /* Look inside a declarator for the name being declared
3851 and get it as a string, for an error message. */
3853 tree decl = declarator;
3854 name = 0;
3856 while (decl)
3857 switch (TREE_CODE (decl))
3859 case ARRAY_REF:
3860 case INDIRECT_REF:
3861 case CALL_EXPR:
3862 innermost_code = TREE_CODE (decl);
3863 decl = TREE_OPERAND (decl, 0);
3864 break;
3866 case TREE_LIST:
3867 decl = TREE_VALUE (decl);
3868 break;
3870 case IDENTIFIER_NODE:
3871 name = IDENTIFIER_POINTER (decl);
3872 decl = 0;
3873 break;
3875 default:
3876 abort ();
3878 if (name == 0)
3879 name = "type name";
3882 /* A function definition's declarator must have the form of
3883 a function declarator. */
3885 if (funcdef_flag && innermost_code != CALL_EXPR)
3886 return 0;
3888 /* Anything declared one level down from the top level
3889 must be one of the parameters of a function
3890 (because the body is at least two levels down). */
3892 /* If this looks like a function definition, make it one,
3893 even if it occurs where parms are expected.
3894 Then store_parm_decls will reject it and not use it as a parm. */
3895 if (decl_context == NORMAL && !funcdef_flag
3896 && current_binding_level->parm_flag)
3897 decl_context = PARM;
3899 /* Look through the decl specs and record which ones appear.
3900 Some typespecs are defined as built-in typenames.
3901 Others, the ones that are modifiers of other types,
3902 are represented by bits in SPECBITS: set the bits for
3903 the modifiers that appear. Storage class keywords are also in SPECBITS.
3905 If there is a typedef name or a type, store the type in TYPE.
3906 This includes builtin typedefs such as `int'.
3908 Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
3909 and did not come from a user typedef.
3911 Set LONGLONG if `long' is mentioned twice. */
3913 for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
3915 tree id = TREE_VALUE (spec);
3917 /* If the entire declaration is itself tagged as deprecated then
3918 suppress reports of deprecated items. */
3919 if (id && TREE_DEPRECATED (id))
3921 if (deprecated_state != DEPRECATED_SUPPRESS)
3922 warn_deprecated_use (id);
3925 if (id == ridpointers[(int) RID_INT])
3926 explicit_int = 1;
3927 if (id == ridpointers[(int) RID_CHAR])
3928 explicit_char = 1;
3930 if (TREE_CODE (id) == IDENTIFIER_NODE && C_IS_RESERVED_WORD (id))
3932 enum rid i = C_RID_CODE (id);
3933 if ((int) i <= (int) RID_LAST_MODIFIER)
3935 if (i == RID_LONG && (specbits & (1 << (int) i)))
3937 if (longlong)
3938 error ("`long long long' is too long for GCC");
3939 else
3941 if (pedantic && !flag_isoc99 && ! in_system_header
3942 && warn_long_long)
3943 pedwarn ("ISO C89 does not support `long long'");
3944 longlong = 1;
3947 else if (specbits & (1 << (int) i))
3948 pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
3949 specbits |= 1 << (int) i;
3950 goto found;
3953 if (type)
3954 error ("two or more data types in declaration of `%s'", name);
3955 /* Actual typedefs come to us as TYPE_DECL nodes. */
3956 else if (TREE_CODE (id) == TYPE_DECL)
3958 if (TREE_TYPE (id) == error_mark_node)
3959 ; /* Allow the type to default to int to avoid cascading errors. */
3960 else
3962 type = TREE_TYPE (id);
3963 decl_attr = DECL_ATTRIBUTES (id);
3964 typedef_decl = id;
3967 /* Built-in types come as identifiers. */
3968 else if (TREE_CODE (id) == IDENTIFIER_NODE)
3970 tree t = lookup_name (id);
3971 if (TREE_TYPE (t) == error_mark_node)
3973 else if (!t || TREE_CODE (t) != TYPE_DECL)
3974 error ("`%s' fails to be a typedef or built in type",
3975 IDENTIFIER_POINTER (id));
3976 else
3978 type = TREE_TYPE (t);
3979 typedef_decl = t;
3982 else if (TREE_CODE (id) != ERROR_MARK)
3983 type = id;
3985 found:
3989 typedef_type = type;
3990 if (type)
3991 size_varies = C_TYPE_VARIABLE_SIZE (type);
3993 /* No type at all: default to `int', and set DEFAULTED_INT
3994 because it was not a user-defined typedef. */
3996 if (type == 0)
3998 if ((! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3999 | (1 << (int) RID_SIGNED)
4000 | (1 << (int) RID_UNSIGNED)
4001 | (1 << (int) RID_COMPLEX))))
4002 /* Don't warn about typedef foo = bar. */
4003 && ! (specbits & (1 << (int) RID_TYPEDEF) && initialized)
4004 && ! in_system_header)
4006 /* Issue a warning if this is an ISO C 99 program or if -Wreturn-type
4007 and this is a function, or if -Wimplicit; prefer the former
4008 warning since it is more explicit. */
4009 if ((warn_implicit_int || warn_return_type || flag_isoc99)
4010 && funcdef_flag)
4011 warn_about_return_type = 1;
4012 else if (warn_implicit_int || flag_isoc99)
4013 pedwarn_c99 ("type defaults to `int' in declaration of `%s'",
4014 name);
4017 defaulted_int = 1;
4018 type = integer_type_node;
4021 /* Now process the modifiers that were specified
4022 and check for invalid combinations. */
4024 /* Long double is a special combination. */
4026 if ((specbits & 1 << (int) RID_LONG) && ! longlong
4027 && TYPE_MAIN_VARIANT (type) == double_type_node)
4029 specbits &= ~(1 << (int) RID_LONG);
4030 type = long_double_type_node;
4033 /* Check all other uses of type modifiers. */
4035 if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4036 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
4038 int ok = 0;
4040 if ((specbits & 1 << (int) RID_LONG)
4041 && (specbits & 1 << (int) RID_SHORT))
4042 error ("both long and short specified for `%s'", name);
4043 else if (((specbits & 1 << (int) RID_LONG)
4044 || (specbits & 1 << (int) RID_SHORT))
4045 && explicit_char)
4046 error ("long or short specified with char for `%s'", name);
4047 else if (((specbits & 1 << (int) RID_LONG)
4048 || (specbits & 1 << (int) RID_SHORT))
4049 && TREE_CODE (type) == REAL_TYPE)
4051 static int already = 0;
4053 error ("long or short specified with floating type for `%s'", name);
4054 if (! already && ! pedantic)
4056 error ("the only valid combination is `long double'");
4057 already = 1;
4060 else if ((specbits & 1 << (int) RID_SIGNED)
4061 && (specbits & 1 << (int) RID_UNSIGNED))
4062 error ("both signed and unsigned specified for `%s'", name);
4063 else if (TREE_CODE (type) != INTEGER_TYPE)
4064 error ("long, short, signed or unsigned invalid for `%s'", name);
4065 else
4067 ok = 1;
4068 if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
4070 pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
4071 name);
4072 if (flag_pedantic_errors)
4073 ok = 0;
4077 /* Discard the type modifiers if they are invalid. */
4078 if (! ok)
4080 specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4081 | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
4082 longlong = 0;
4086 if ((specbits & (1 << (int) RID_COMPLEX))
4087 && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
4089 error ("complex invalid for `%s'", name);
4090 specbits &= ~(1 << (int) RID_COMPLEX);
4093 /* Decide whether an integer type is signed or not.
4094 Optionally treat bitfields as signed by default. */
4095 if (specbits & 1 << (int) RID_UNSIGNED
4096 || (bitfield && ! flag_signed_bitfields
4097 && (explicit_int || defaulted_int || explicit_char
4098 /* A typedef for plain `int' without `signed'
4099 can be controlled just like plain `int'. */
4100 || ! (typedef_decl != 0
4101 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4102 && TREE_CODE (type) != ENUMERAL_TYPE
4103 && !(specbits & 1 << (int) RID_SIGNED)))
4105 if (longlong)
4106 type = long_long_unsigned_type_node;
4107 else if (specbits & 1 << (int) RID_LONG)
4108 type = long_unsigned_type_node;
4109 else if (specbits & 1 << (int) RID_SHORT)
4110 type = short_unsigned_type_node;
4111 else if (type == char_type_node)
4112 type = unsigned_char_type_node;
4113 else if (typedef_decl)
4114 type = c_common_unsigned_type (type);
4115 else
4116 type = unsigned_type_node;
4118 else if ((specbits & 1 << (int) RID_SIGNED)
4119 && type == char_type_node)
4120 type = signed_char_type_node;
4121 else if (longlong)
4122 type = long_long_integer_type_node;
4123 else if (specbits & 1 << (int) RID_LONG)
4124 type = long_integer_type_node;
4125 else if (specbits & 1 << (int) RID_SHORT)
4126 type = short_integer_type_node;
4128 if (specbits & 1 << (int) RID_COMPLEX)
4130 if (pedantic && !flag_isoc99)
4131 pedwarn ("ISO C89 does not support complex types");
4132 /* If we just have "complex", it is equivalent to
4133 "complex double", but if any modifiers at all are specified it is
4134 the complex form of TYPE. E.g, "complex short" is
4135 "complex short int". */
4137 if (defaulted_int && ! longlong
4138 && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
4139 | (1 << (int) RID_SIGNED)
4140 | (1 << (int) RID_UNSIGNED))))
4142 if (pedantic)
4143 pedwarn ("ISO C does not support plain `complex' meaning `double complex'");
4144 type = complex_double_type_node;
4146 else if (type == integer_type_node)
4148 if (pedantic)
4149 pedwarn ("ISO C does not support complex integer types");
4150 type = complex_integer_type_node;
4152 else if (type == float_type_node)
4153 type = complex_float_type_node;
4154 else if (type == double_type_node)
4155 type = complex_double_type_node;
4156 else if (type == long_double_type_node)
4157 type = complex_long_double_type_node;
4158 else
4160 if (pedantic)
4161 pedwarn ("ISO C does not support complex integer types");
4162 type = build_complex_type (type);
4166 /* Figure out the type qualifiers for the declaration. There are
4167 two ways a declaration can become qualified. One is something
4168 like `const int i' where the `const' is explicit. Another is
4169 something like `typedef const int CI; CI i' where the type of the
4170 declaration contains the `const'. */
4171 constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (type);
4172 restrictp = !! (specbits & 1 << (int) RID_RESTRICT) + TYPE_RESTRICT (type);
4173 volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
4174 inlinep = !! (specbits & (1 << (int) RID_INLINE));
4175 if (constp > 1 && ! flag_isoc99)
4176 pedwarn ("duplicate `const'");
4177 if (restrictp > 1 && ! flag_isoc99)
4178 pedwarn ("duplicate `restrict'");
4179 if (volatilep > 1 && ! flag_isoc99)
4180 pedwarn ("duplicate `volatile'");
4181 if (! flag_gen_aux_info && (TYPE_QUALS (type)))
4182 type = TYPE_MAIN_VARIANT (type);
4183 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4184 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4185 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4187 /* Warn if two storage classes are given. Default to `auto'. */
4190 int nclasses = 0;
4192 if (specbits & 1 << (int) RID_AUTO) nclasses++;
4193 if (specbits & 1 << (int) RID_STATIC) nclasses++;
4194 if (specbits & 1 << (int) RID_EXTERN) nclasses++;
4195 if (specbits & 1 << (int) RID_REGISTER) nclasses++;
4196 if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
4198 /* Warn about storage classes that are invalid for certain
4199 kinds of declarations (parameters, typenames, etc.). */
4201 if (nclasses > 1)
4202 error ("multiple storage classes in declaration of `%s'", name);
4203 else if (funcdef_flag
4204 && (specbits
4205 & ((1 << (int) RID_REGISTER)
4206 | (1 << (int) RID_AUTO)
4207 | (1 << (int) RID_TYPEDEF))))
4209 if (specbits & 1 << (int) RID_AUTO
4210 && (pedantic || current_binding_level == global_binding_level))
4211 pedwarn ("function definition declared `auto'");
4212 if (specbits & 1 << (int) RID_REGISTER)
4213 error ("function definition declared `register'");
4214 if (specbits & 1 << (int) RID_TYPEDEF)
4215 error ("function definition declared `typedef'");
4216 specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4217 | (1 << (int) RID_AUTO));
4219 else if (decl_context != NORMAL && nclasses > 0)
4221 if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
4223 else
4225 switch (decl_context)
4227 case FIELD:
4228 error ("storage class specified for structure field `%s'",
4229 name);
4230 break;
4231 case PARM:
4232 error ("storage class specified for parameter `%s'", name);
4233 break;
4234 default:
4235 error ("storage class specified for typename");
4236 break;
4238 specbits &= ~((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
4239 | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
4240 | (1 << (int) RID_EXTERN));
4243 else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
4245 /* `extern' with initialization is invalid if not at top level. */
4246 if (current_binding_level == global_binding_level)
4247 warning ("`%s' initialized and declared `extern'", name);
4248 else
4249 error ("`%s' has both `extern' and initializer", name);
4251 else if (specbits & 1 << (int) RID_EXTERN && funcdef_flag
4252 && current_binding_level != global_binding_level)
4253 error ("nested function `%s' declared `extern'", name);
4254 else if (current_binding_level == global_binding_level
4255 && specbits & (1 << (int) RID_AUTO))
4256 error ("top-level declaration of `%s' specifies `auto'", name);
4259 /* Now figure out the structure of the declarator proper.
4260 Descend through it, creating more complex types, until we reach
4261 the declared identifier (or NULL_TREE, in an absolute declarator). */
4263 while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
4265 if (type == error_mark_node)
4267 declarator = TREE_OPERAND (declarator, 0);
4268 continue;
4271 /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
4272 an INDIRECT_REF (for *...),
4273 a CALL_EXPR (for ...(...)),
4274 a TREE_LIST (for nested attributes),
4275 an identifier (for the name being declared)
4276 or a null pointer (for the place in an absolute declarator
4277 where the name was omitted).
4278 For the last two cases, we have just exited the loop.
4280 At this point, TYPE is the type of elements of an array,
4281 or for a function to return, or for a pointer to point to.
4282 After this sequence of ifs, TYPE is the type of the
4283 array or function or pointer, and DECLARATOR has had its
4284 outermost layer removed. */
4286 if (array_ptr_quals != NULL_TREE || array_parm_static)
4288 /* Only the innermost declarator (making a parameter be of
4289 array type which is converted to pointer type)
4290 may have static or type qualifiers. */
4291 error ("static or type qualifiers in non-parameter array declarator");
4292 array_ptr_quals = NULL_TREE;
4293 array_parm_static = 0;
4296 if (TREE_CODE (declarator) == TREE_LIST)
4298 /* We encode a declarator with embedded attributes using
4299 a TREE_LIST. */
4300 tree attrs = TREE_PURPOSE (declarator);
4301 tree inner_decl;
4302 int attr_flags = 0;
4303 declarator = TREE_VALUE (declarator);
4304 inner_decl = declarator;
4305 while (inner_decl != NULL_TREE
4306 && TREE_CODE (inner_decl) == TREE_LIST)
4307 inner_decl = TREE_VALUE (inner_decl);
4308 if (inner_decl == NULL_TREE
4309 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
4310 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
4311 else if (TREE_CODE (inner_decl) == CALL_EXPR)
4312 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
4313 else if (TREE_CODE (inner_decl) == ARRAY_REF)
4314 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
4315 returned_attrs = decl_attributes (&type,
4316 chainon (returned_attrs, attrs),
4317 attr_flags);
4319 else if (TREE_CODE (declarator) == ARRAY_REF)
4321 tree itype = NULL_TREE;
4322 tree size = TREE_OPERAND (declarator, 1);
4323 /* The index is a signed object `sizetype' bits wide. */
4324 tree index_type = c_common_signed_type (sizetype);
4326 array_ptr_quals = TREE_TYPE (declarator);
4327 array_parm_static = TREE_STATIC (declarator);
4329 declarator = TREE_OPERAND (declarator, 0);
4331 /* Check for some types that there cannot be arrays of. */
4333 if (VOID_TYPE_P (type))
4335 error ("declaration of `%s' as array of voids", name);
4336 type = error_mark_node;
4339 if (TREE_CODE (type) == FUNCTION_TYPE)
4341 error ("declaration of `%s' as array of functions", name);
4342 type = error_mark_node;
4345 if (size == error_mark_node)
4346 type = error_mark_node;
4348 if (type == error_mark_node)
4349 continue;
4351 /* If size was specified, set ITYPE to a range-type for that size.
4352 Otherwise, ITYPE remains null. finish_decl may figure it out
4353 from an initial value. */
4355 if (size)
4357 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
4358 STRIP_TYPE_NOPS (size);
4360 if (! INTEGRAL_TYPE_P (TREE_TYPE (size)))
4362 error ("size of array `%s' has non-integer type", name);
4363 size = integer_one_node;
4366 if (pedantic && integer_zerop (size))
4367 pedwarn ("ISO C forbids zero-size array `%s'", name);
4369 if (TREE_CODE (size) == INTEGER_CST)
4371 constant_expression_warning (size);
4372 if (tree_int_cst_sgn (size) < 0)
4374 error ("size of array `%s' is negative", name);
4375 size = integer_one_node;
4378 else
4380 /* Make sure the array size remains visibly nonconstant
4381 even if it is (eg) a const variable with known value. */
4382 size_varies = 1;
4384 if (!flag_isoc99 && pedantic)
4386 if (TREE_CONSTANT (size))
4387 pedwarn ("ISO C89 forbids array `%s' whose size can't be evaluated",
4388 name);
4389 else
4390 pedwarn ("ISO C89 forbids variable-size array `%s'",
4391 name);
4395 if (integer_zerop (size))
4397 /* A zero-length array cannot be represented with an
4398 unsigned index type, which is what we'll get with
4399 build_index_type. Create an open-ended range instead. */
4400 itype = build_range_type (sizetype, size, NULL_TREE);
4402 else
4404 /* Compute the maximum valid index, that is, size - 1.
4405 Do the calculation in index_type, so that if it is
4406 a variable the computations will be done in the
4407 proper mode. */
4408 itype = fold (build (MINUS_EXPR, index_type,
4409 convert (index_type, size),
4410 convert (index_type, size_one_node)));
4412 /* If that overflowed, the array is too big.
4413 ??? While a size of INT_MAX+1 technically shouldn't
4414 cause an overflow (because we subtract 1), the overflow
4415 is recorded during the conversion to index_type, before
4416 the subtraction. Handling this case seems like an
4417 unnecessary complication. */
4418 if (TREE_OVERFLOW (itype))
4420 error ("size of array `%s' is too large", name);
4421 type = error_mark_node;
4422 continue;
4425 if (size_varies)
4426 itype = variable_size (itype);
4427 itype = build_index_type (itype);
4430 else if (decl_context == FIELD)
4432 if (pedantic && !flag_isoc99 && !in_system_header)
4433 pedwarn ("ISO C89 does not support flexible array members");
4435 /* ISO C99 Flexible array members are effectively identical
4436 to GCC's zero-length array extension. */
4437 itype = build_range_type (sizetype, size_zero_node, NULL_TREE);
4440 /* If pedantic, complain about arrays of incomplete types. */
4442 if (pedantic && !COMPLETE_TYPE_P (type))
4443 pedwarn ("array type has incomplete element type");
4445 #if 0
4446 /* We shouldn't have a function type here at all!
4447 Functions aren't allowed as array elements. */
4448 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4449 && (constp || volatilep))
4450 pedwarn ("ISO C forbids const or volatile function types");
4451 #endif
4453 /* Build the array type itself, then merge any constancy or
4454 volatility into the target type. We must do it in this order
4455 to ensure that the TYPE_MAIN_VARIANT field of the array type
4456 is set correctly. */
4458 type = build_array_type (type, itype);
4459 if (type_quals)
4460 type = c_build_qualified_type (type, type_quals);
4462 if (size_varies)
4463 C_TYPE_VARIABLE_SIZE (type) = 1;
4465 /* The GCC extension for zero-length arrays differs from
4466 ISO flexible array members in that sizeof yields zero. */
4467 if (size && integer_zerop (size))
4469 layout_type (type);
4470 TYPE_SIZE (type) = bitsize_zero_node;
4471 TYPE_SIZE_UNIT (type) = size_zero_node;
4473 if (decl_context != PARM
4474 && (array_ptr_quals != NULL_TREE || array_parm_static))
4476 error ("static or type qualifiers in non-parameter array declarator");
4477 array_ptr_quals = NULL_TREE;
4478 array_parm_static = 0;
4481 else if (TREE_CODE (declarator) == CALL_EXPR)
4483 tree arg_types;
4485 /* Declaring a function type.
4486 Make sure we have a valid type for the function to return. */
4487 if (type == error_mark_node)
4488 continue;
4490 size_varies = 0;
4492 /* Warn about some types functions can't return. */
4494 if (TREE_CODE (type) == FUNCTION_TYPE)
4496 error ("`%s' declared as function returning a function", name);
4497 type = integer_type_node;
4499 if (TREE_CODE (type) == ARRAY_TYPE)
4501 error ("`%s' declared as function returning an array", name);
4502 type = integer_type_node;
4505 /* Construct the function type and go to the next
4506 inner layer of declarator. */
4508 arg_types = grokparms (TREE_OPERAND (declarator, 1),
4509 funcdef_flag
4510 /* Say it's a definition
4511 only for the CALL_EXPR
4512 closest to the identifier. */
4513 && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE);
4514 /* Type qualifiers before the return type of the function
4515 qualify the return type, not the function type. */
4516 if (type_quals)
4518 /* Type qualifiers on a function return type are normally
4519 permitted by the standard but have no effect, so give a
4520 warning at -W. Qualifiers on a void return type have
4521 meaning as a GNU extension, and are banned on function
4522 definitions in ISO C. FIXME: strictly we shouldn't
4523 pedwarn for qualified void return types except on function
4524 definitions, but not doing so could lead to the undesirable
4525 state of a "volatile void" function return type not being
4526 warned about, and a use of the function being compiled
4527 with GNU semantics, with no diagnostics under -pedantic. */
4528 if (VOID_TYPE_P (type) && pedantic && !in_system_header)
4529 pedwarn ("ISO C forbids qualified void function return type");
4530 else if (extra_warnings
4531 && !(VOID_TYPE_P (type)
4532 && type_quals == TYPE_QUAL_VOLATILE))
4533 warning ("type qualifiers ignored on function return type");
4535 type = c_build_qualified_type (type, type_quals);
4537 type_quals = TYPE_UNQUALIFIED;
4539 type = build_function_type (type, arg_types);
4540 declarator = TREE_OPERAND (declarator, 0);
4542 /* Set the TYPE_CONTEXTs for each tagged type which is local to
4543 the formal parameter list of this FUNCTION_TYPE to point to
4544 the FUNCTION_TYPE node itself. */
4547 tree link;
4549 for (link = last_function_parm_tags;
4550 link;
4551 link = TREE_CHAIN (link))
4552 TYPE_CONTEXT (TREE_VALUE (link)) = type;
4555 else if (TREE_CODE (declarator) == INDIRECT_REF)
4557 /* Merge any constancy or volatility into the target type
4558 for the pointer. */
4560 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4561 && type_quals)
4562 pedwarn ("ISO C forbids qualified function types");
4563 if (type_quals)
4564 type = c_build_qualified_type (type, type_quals);
4565 type_quals = TYPE_UNQUALIFIED;
4566 size_varies = 0;
4568 type = build_pointer_type (type);
4570 /* Process a list of type modifier keywords
4571 (such as const or volatile) that were given inside the `*'. */
4573 if (TREE_TYPE (declarator))
4575 tree typemodlist;
4576 int erred = 0;
4578 constp = 0;
4579 volatilep = 0;
4580 restrictp = 0;
4581 for (typemodlist = TREE_TYPE (declarator); typemodlist;
4582 typemodlist = TREE_CHAIN (typemodlist))
4584 tree qualifier = TREE_VALUE (typemodlist);
4586 if (C_IS_RESERVED_WORD (qualifier))
4588 if (C_RID_CODE (qualifier) == RID_CONST)
4589 constp++;
4590 else if (C_RID_CODE (qualifier) == RID_VOLATILE)
4591 volatilep++;
4592 else if (C_RID_CODE (qualifier) == RID_RESTRICT)
4593 restrictp++;
4594 else
4595 erred++;
4597 else
4598 erred++;
4601 if (erred)
4602 error ("invalid type modifier within pointer declarator");
4603 if (constp > 1 && ! flag_isoc99)
4604 pedwarn ("duplicate `const'");
4605 if (volatilep > 1 && ! flag_isoc99)
4606 pedwarn ("duplicate `volatile'");
4607 if (restrictp > 1 && ! flag_isoc99)
4608 pedwarn ("duplicate `restrict'");
4610 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4611 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4612 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4615 declarator = TREE_OPERAND (declarator, 0);
4617 else
4618 abort ();
4622 /* Now TYPE has the actual type. */
4624 /* Did array size calculations overflow? */
4626 if (TREE_CODE (type) == ARRAY_TYPE
4627 && COMPLETE_TYPE_P (type)
4628 && TREE_OVERFLOW (TYPE_SIZE (type)))
4630 error ("size of array `%s' is too large", name);
4631 /* If we proceed with the array type as it is, we'll eventually
4632 crash in tree_low_cst(). */
4633 type = error_mark_node;
4636 /* If this is declaring a typedef name, return a TYPE_DECL. */
4638 if (specbits & (1 << (int) RID_TYPEDEF))
4640 tree decl;
4641 /* Note that the grammar rejects storage classes
4642 in typenames, fields or parameters */
4643 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4644 && type_quals)
4645 pedwarn ("ISO C forbids qualified function types");
4646 if (type_quals)
4647 type = c_build_qualified_type (type, type_quals);
4648 decl = build_decl (TYPE_DECL, declarator, type);
4649 if ((specbits & (1 << (int) RID_SIGNED))
4650 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
4651 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
4652 decl_attributes (&decl, returned_attrs, 0);
4653 return decl;
4656 /* Detect the case of an array type of unspecified size
4657 which came, as such, direct from a typedef name.
4658 We must copy the type, so that each identifier gets
4659 a distinct type, so that each identifier's size can be
4660 controlled separately by its own initializer. */
4662 if (type != 0 && typedef_type != 0
4663 && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0
4664 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
4666 type = build_array_type (TREE_TYPE (type), 0);
4667 if (size_varies)
4668 C_TYPE_VARIABLE_SIZE (type) = 1;
4671 /* If this is a type name (such as, in a cast or sizeof),
4672 compute the type and return it now. */
4674 if (decl_context == TYPENAME)
4676 /* Note that the grammar rejects storage classes
4677 in typenames, fields or parameters */
4678 if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
4679 && type_quals)
4680 pedwarn ("ISO C forbids const or volatile function types");
4681 if (type_quals)
4682 type = c_build_qualified_type (type, type_quals);
4683 decl_attributes (&type, returned_attrs, 0);
4684 return type;
4687 /* Aside from typedefs and type names (handle above),
4688 `void' at top level (not within pointer)
4689 is allowed only in public variables.
4690 We don't complain about parms either, but that is because
4691 a better error message can be made later. */
4693 if (VOID_TYPE_P (type) && decl_context != PARM
4694 && ! ((decl_context != FIELD && TREE_CODE (type) != FUNCTION_TYPE)
4695 && ((specbits & (1 << (int) RID_EXTERN))
4696 || (current_binding_level == global_binding_level
4697 && !(specbits
4698 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)))))))
4700 error ("variable or field `%s' declared void", name);
4701 type = integer_type_node;
4704 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4705 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
4708 tree decl;
4710 if (decl_context == PARM)
4712 tree type_as_written;
4713 tree promoted_type;
4715 /* A parameter declared as an array of T is really a pointer to T.
4716 One declared as a function is really a pointer to a function. */
4718 if (TREE_CODE (type) == ARRAY_TYPE)
4720 /* Transfer const-ness of array into that of type pointed to. */
4721 type = TREE_TYPE (type);
4722 if (type_quals)
4723 type = c_build_qualified_type (type, type_quals);
4724 type = build_pointer_type (type);
4725 type_quals = TYPE_UNQUALIFIED;
4726 if (array_ptr_quals)
4728 tree new_ptr_quals, new_ptr_attrs;
4729 int erred = 0;
4730 split_specs_attrs (array_ptr_quals, &new_ptr_quals, &new_ptr_attrs);
4731 /* We don't yet implement attributes in this context. */
4732 if (new_ptr_attrs != NULL_TREE)
4733 warning ("attributes in parameter array declarator ignored");
4735 constp = 0;
4736 volatilep = 0;
4737 restrictp = 0;
4738 for (; new_ptr_quals; new_ptr_quals = TREE_CHAIN (new_ptr_quals))
4740 tree qualifier = TREE_VALUE (new_ptr_quals);
4742 if (C_IS_RESERVED_WORD (qualifier))
4744 if (C_RID_CODE (qualifier) == RID_CONST)
4745 constp++;
4746 else if (C_RID_CODE (qualifier) == RID_VOLATILE)
4747 volatilep++;
4748 else if (C_RID_CODE (qualifier) == RID_RESTRICT)
4749 restrictp++;
4750 else
4751 erred++;
4753 else
4754 erred++;
4757 if (erred)
4758 error ("invalid type modifier within array declarator");
4760 type_quals = ((constp ? TYPE_QUAL_CONST : 0)
4761 | (restrictp ? TYPE_QUAL_RESTRICT : 0)
4762 | (volatilep ? TYPE_QUAL_VOLATILE : 0));
4764 size_varies = 0;
4766 else if (TREE_CODE (type) == FUNCTION_TYPE)
4768 if (pedantic && type_quals)
4769 pedwarn ("ISO C forbids qualified function types");
4770 if (type_quals)
4771 type = c_build_qualified_type (type, type_quals);
4772 type = build_pointer_type (type);
4773 type_quals = TYPE_UNQUALIFIED;
4775 else if (type_quals)
4776 type = c_build_qualified_type (type, type_quals);
4778 type_as_written = type;
4780 decl = build_decl (PARM_DECL, declarator, type);
4781 if (size_varies)
4782 C_DECL_VARIABLE_SIZE (decl) = 1;
4784 /* Compute the type actually passed in the parmlist,
4785 for the case where there is no prototype.
4786 (For example, shorts and chars are passed as ints.)
4787 When there is a prototype, this is overridden later. */
4789 if (type == error_mark_node)
4790 promoted_type = type;
4791 else
4792 promoted_type = c_type_promotes_to (type);
4794 DECL_ARG_TYPE (decl) = promoted_type;
4795 DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
4797 else if (decl_context == FIELD)
4799 /* Structure field. It may not be a function. */
4801 if (TREE_CODE (type) == FUNCTION_TYPE)
4803 error ("field `%s' declared as a function", name);
4804 type = build_pointer_type (type);
4806 else if (TREE_CODE (type) != ERROR_MARK
4807 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type))
4809 error ("field `%s' has incomplete type", name);
4810 type = error_mark_node;
4812 /* Move type qualifiers down to element of an array. */
4813 if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4815 type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4816 type_quals),
4817 TYPE_DOMAIN (type));
4818 #if 0
4819 /* Leave the field const or volatile as well. */
4820 type_quals = TYPE_UNQUALIFIED;
4821 #endif
4823 decl = build_decl (FIELD_DECL, declarator, type);
4824 DECL_NONADDRESSABLE_P (decl) = bitfield;
4826 if (size_varies)
4827 C_DECL_VARIABLE_SIZE (decl) = 1;
4829 else if (TREE_CODE (type) == FUNCTION_TYPE)
4831 /* Every function declaration is "external"
4832 except for those which are inside a function body
4833 in which `auto' is used.
4834 That is a case not specified by ANSI C,
4835 and we use it for forward declarations for nested functions. */
4836 int extern_ref = (!(specbits & (1 << (int) RID_AUTO))
4837 || current_binding_level == global_binding_level);
4839 if (specbits & (1 << (int) RID_AUTO)
4840 && (pedantic || current_binding_level == global_binding_level))
4841 pedwarn ("invalid storage class for function `%s'", name);
4842 if (specbits & (1 << (int) RID_REGISTER))
4843 error ("invalid storage class for function `%s'", name);
4844 /* Function declaration not at top level.
4845 Storage classes other than `extern' are not allowed
4846 and `extern' makes no difference. */
4847 if (current_binding_level != global_binding_level
4848 && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
4849 && pedantic)
4850 pedwarn ("invalid storage class for function `%s'", name);
4852 decl = build_decl (FUNCTION_DECL, declarator, type);
4853 decl = build_decl_attribute_variant (decl, decl_attr);
4855 DECL_LANG_SPECIFIC (decl) = (struct lang_decl *)
4856 ggc_alloc_cleared (sizeof (struct lang_decl));
4858 if (pedantic && type_quals && ! DECL_IN_SYSTEM_HEADER (decl))
4859 pedwarn ("ISO C forbids qualified function types");
4861 /* GNU C interprets a `volatile void' return type to indicate
4862 that the function does not return. */
4863 if ((type_quals & TYPE_QUAL_VOLATILE)
4864 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
4865 warning ("`noreturn' function returns non-void value");
4867 if (extern_ref)
4868 DECL_EXTERNAL (decl) = 1;
4869 /* Record absence of global scope for `static' or `auto'. */
4870 TREE_PUBLIC (decl)
4871 = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
4873 if (defaulted_int)
4874 C_FUNCTION_IMPLICIT_INT (decl) = 1;
4876 /* Record presence of `inline', if it is reasonable. */
4877 if (MAIN_NAME_P (declarator))
4879 if (inlinep)
4880 warning ("cannot inline function `main'");
4882 else if (inlinep)
4884 /* Assume that otherwise the function can be inlined. */
4885 DECL_DECLARED_INLINE_P (decl) = 1;
4887 /* Do not mark bare declarations as DECL_INLINE. Doing so
4888 in the presence of multiple declarations can result in
4889 the abstract origin pointing between the declarations,
4890 which will confuse dwarf2out. */
4891 if (initialized)
4893 DECL_INLINE (decl) = 1;
4894 if (specbits & (1 << (int) RID_EXTERN))
4895 current_extern_inline = 1;
4898 /* If -finline-functions, assume it can be inlined. This does
4899 two things: let the function be deferred until it is actually
4900 needed, and let dwarf2 know that the function is inlinable. */
4901 else if (flag_inline_trees == 2 && initialized)
4903 DECL_INLINE (decl) = 1;
4904 DECL_DECLARED_INLINE_P (decl) = 0;
4907 else
4909 /* It's a variable. */
4910 /* An uninitialized decl with `extern' is a reference. */
4911 int extern_ref = !initialized && (specbits & (1 << (int) RID_EXTERN));
4913 /* Move type qualifiers down to element of an array. */
4914 if (TREE_CODE (type) == ARRAY_TYPE && type_quals)
4916 int saved_align = TYPE_ALIGN(type);
4917 type = build_array_type (c_build_qualified_type (TREE_TYPE (type),
4918 type_quals),
4919 TYPE_DOMAIN (type));
4920 TYPE_ALIGN (type) = saved_align;
4921 #if 0 /* Leave the variable const or volatile as well. */
4922 type_quals = TYPE_UNQUALIFIED;
4923 #endif
4925 else if (type_quals)
4926 type = c_build_qualified_type (type, type_quals);
4928 decl = build_decl (VAR_DECL, declarator, type);
4929 if (size_varies)
4930 C_DECL_VARIABLE_SIZE (decl) = 1;
4932 if (inlinep)
4933 pedwarn_with_decl (decl, "variable `%s' declared `inline'");
4935 DECL_EXTERNAL (decl) = extern_ref;
4936 /* At top level, the presence of a `static' or `register' storage
4937 class specifier, or the absence of all storage class specifiers
4938 makes this declaration a definition (perhaps tentative). Also,
4939 the absence of both `static' and `register' makes it public. */
4940 if (current_binding_level == global_binding_level)
4942 TREE_PUBLIC (decl)
4943 = !(specbits
4944 & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)));
4945 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
4947 /* Not at top level, only `static' makes a static definition. */
4948 else
4950 TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
4951 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
4955 /* Record `register' declaration for warnings on &
4956 and in case doing stupid register allocation. */
4958 if (specbits & (1 << (int) RID_REGISTER))
4959 DECL_REGISTER (decl) = 1;
4961 /* Record constancy and volatility. */
4962 c_apply_type_quals_to_decl (type_quals, decl);
4964 /* If a type has volatile components, it should be stored in memory.
4965 Otherwise, the fact that those components are volatile
4966 will be ignored, and would even crash the compiler. */
4967 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4968 c_mark_addressable (decl);
4970 decl_attributes (&decl, returned_attrs, 0);
4972 return decl;
4976 /* Decode the parameter-list info for a function type or function definition.
4977 The argument is the value returned by `get_parm_info' (or made in parse.y
4978 if there is an identifier list instead of a parameter decl list).
4979 These two functions are separate because when a function returns
4980 or receives functions then each is called multiple times but the order
4981 of calls is different. The last call to `grokparms' is always the one
4982 that contains the formal parameter names of a function definition.
4984 Store in `last_function_parms' a chain of the decls of parms.
4985 Also store in `last_function_parm_tags' a chain of the struct, union,
4986 and enum tags declared among the parms.
4988 Return a list of arg types to use in the FUNCTION_TYPE for this function.
4990 FUNCDEF_FLAG is nonzero for a function definition, 0 for
4991 a mere declaration. A nonempty identifier-list gets an error message
4992 when FUNCDEF_FLAG is zero. */
4994 static tree
4995 grokparms (parms_info, funcdef_flag)
4996 tree parms_info;
4997 int funcdef_flag;
4999 tree first_parm = TREE_CHAIN (parms_info);
5001 last_function_parms = TREE_PURPOSE (parms_info);
5002 last_function_parm_tags = TREE_VALUE (parms_info);
5004 if (warn_strict_prototypes && first_parm == 0 && !funcdef_flag
5005 && !in_system_header)
5006 warning ("function declaration isn't a prototype");
5008 if (first_parm != 0
5009 && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
5011 if (! funcdef_flag)
5012 pedwarn ("parameter names (without types) in function declaration");
5014 last_function_parms = first_parm;
5015 return 0;
5017 else
5019 tree parm;
5020 tree typelt;
5021 /* We no longer test FUNCDEF_FLAG.
5022 If the arg types are incomplete in a declaration,
5023 they must include undefined tags.
5024 These tags can never be defined in the scope of the declaration,
5025 so the types can never be completed,
5026 and no call can be compiled successfully. */
5027 #if 0
5028 /* In a fcn definition, arg types must be complete. */
5029 if (funcdef_flag)
5030 #endif
5031 for (parm = last_function_parms, typelt = first_parm;
5032 parm;
5033 parm = TREE_CHAIN (parm))
5034 /* Skip over any enumeration constants declared here. */
5035 if (TREE_CODE (parm) == PARM_DECL)
5037 /* Barf if the parameter itself has an incomplete type. */
5038 tree type = TREE_VALUE (typelt);
5039 if (type == error_mark_node)
5040 continue;
5041 if (!COMPLETE_TYPE_P (type))
5043 if (funcdef_flag && DECL_NAME (parm) != 0)
5044 error ("parameter `%s' has incomplete type",
5045 IDENTIFIER_POINTER (DECL_NAME (parm)));
5046 else
5047 warning ("parameter has incomplete type");
5048 if (funcdef_flag)
5050 TREE_VALUE (typelt) = error_mark_node;
5051 TREE_TYPE (parm) = error_mark_node;
5054 #if 0
5055 /* This has been replaced by parm_tags_warning, which
5056 uses a more accurate criterion for what to warn
5057 about. */
5058 else
5060 /* Now warn if is a pointer to an incomplete type. */
5061 while (TREE_CODE (type) == POINTER_TYPE
5062 || TREE_CODE (type) == REFERENCE_TYPE)
5063 type = TREE_TYPE (type);
5064 type = TYPE_MAIN_VARIANT (type);
5065 if (!COMPLETE_TYPE_P (type))
5067 if (DECL_NAME (parm) != 0)
5068 warning ("parameter `%s' points to incomplete type",
5069 IDENTIFIER_POINTER (DECL_NAME (parm)));
5070 else
5071 warning ("parameter points to incomplete type");
5074 #endif
5075 typelt = TREE_CHAIN (typelt);
5078 return first_parm;
5082 /* Return a tree_list node with info on a parameter list just parsed.
5083 The TREE_PURPOSE is a chain of decls of those parms.
5084 The TREE_VALUE is a list of structure, union and enum tags defined.
5085 The TREE_CHAIN is a list of argument types to go in the FUNCTION_TYPE.
5086 This tree_list node is later fed to `grokparms'.
5088 VOID_AT_END nonzero means append `void' to the end of the type-list.
5089 Zero means the parmlist ended with an ellipsis so don't append `void'. */
5091 tree
5092 get_parm_info (void_at_end)
5093 int void_at_end;
5095 tree decl, t;
5096 tree types = 0;
5097 int erred = 0;
5098 tree tags = gettags ();
5099 tree parms = getdecls ();
5100 tree new_parms = 0;
5101 tree order = current_binding_level->parm_order;
5103 /* Just `void' (and no ellipsis) is special. There are really no parms.
5104 But if the `void' is qualified (by `const' or `volatile') or has a
5105 storage class specifier (`register'), then the behavior is undefined;
5106 by not counting it as the special case of `void' we will cause an
5107 error later. Typedefs for `void' are OK (see DR#157). */
5108 if (void_at_end && parms != 0
5109 && TREE_CHAIN (parms) == 0
5110 && VOID_TYPE_P (TREE_TYPE (parms))
5111 && ! TREE_THIS_VOLATILE (parms)
5112 && ! TREE_READONLY (parms)
5113 && ! DECL_REGISTER (parms)
5114 && DECL_NAME (parms) == 0)
5116 parms = NULL_TREE;
5117 storedecls (NULL_TREE);
5118 return tree_cons (NULL_TREE, NULL_TREE,
5119 tree_cons (NULL_TREE, void_type_node, NULL_TREE));
5122 /* Extract enumerator values and other non-parms declared with the parms.
5123 Likewise any forward parm decls that didn't have real parm decls. */
5124 for (decl = parms; decl;)
5126 tree next = TREE_CHAIN (decl);
5128 if (TREE_CODE (decl) != PARM_DECL)
5130 TREE_CHAIN (decl) = new_parms;
5131 new_parms = decl;
5133 else if (TREE_ASM_WRITTEN (decl))
5135 error_with_decl (decl,
5136 "parameter `%s' has just a forward declaration");
5137 TREE_CHAIN (decl) = new_parms;
5138 new_parms = decl;
5140 decl = next;
5143 /* Put the parm decls back in the order they were in in the parm list. */
5144 for (t = order; t; t = TREE_CHAIN (t))
5146 if (TREE_CHAIN (t))
5147 TREE_CHAIN (TREE_VALUE (t)) = TREE_VALUE (TREE_CHAIN (t));
5148 else
5149 TREE_CHAIN (TREE_VALUE (t)) = 0;
5152 new_parms = chainon (order ? nreverse (TREE_VALUE (order)) : 0,
5153 new_parms);
5155 /* Store the parmlist in the binding level since the old one
5156 is no longer a valid list. (We have changed the chain pointers.) */
5157 storedecls (new_parms);
5159 for (decl = new_parms; decl; decl = TREE_CHAIN (decl))
5160 /* There may also be declarations for enumerators if an enumeration
5161 type is declared among the parms. Ignore them here. */
5162 if (TREE_CODE (decl) == PARM_DECL)
5164 /* Since there is a prototype,
5165 args are passed in their declared types. */
5166 tree type = TREE_TYPE (decl);
5167 DECL_ARG_TYPE (decl) = type;
5168 if (PROMOTE_PROTOTYPES
5169 && INTEGRAL_TYPE_P (type)
5170 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5171 DECL_ARG_TYPE (decl) = integer_type_node;
5173 types = tree_cons (NULL_TREE, TREE_TYPE (decl), types);
5174 if (VOID_TYPE_P (TREE_VALUE (types)) && ! erred
5175 && DECL_NAME (decl) == 0)
5177 error ("`void' in parameter list must be the entire list");
5178 erred = 1;
5182 if (void_at_end)
5183 return tree_cons (new_parms, tags,
5184 nreverse (tree_cons (NULL_TREE, void_type_node, types)));
5186 return tree_cons (new_parms, tags, nreverse (types));
5189 /* At end of parameter list, warn about any struct, union or enum tags
5190 defined within. Do so because these types cannot ever become complete. */
5192 void
5193 parmlist_tags_warning ()
5195 tree elt;
5196 static int already;
5198 for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
5200 enum tree_code code = TREE_CODE (TREE_VALUE (elt));
5201 /* An anonymous union parm type is meaningful as a GNU extension.
5202 So don't warn for that. */
5203 if (code == UNION_TYPE && TREE_PURPOSE (elt) == 0 && !pedantic)
5204 continue;
5205 if (TREE_PURPOSE (elt) != 0)
5207 if (code == RECORD_TYPE)
5208 warning ("`struct %s' declared inside parameter list",
5209 IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
5210 else if (code == UNION_TYPE)
5211 warning ("`union %s' declared inside parameter list",
5212 IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
5213 else
5214 warning ("`enum %s' declared inside parameter list",
5215 IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
5217 else
5219 /* For translation these need to be separate warnings */
5220 if (code == RECORD_TYPE)
5221 warning ("anonymous struct declared inside parameter list");
5222 else if (code == UNION_TYPE)
5223 warning ("anonymous union declared inside parameter list");
5224 else
5225 warning ("anonymous enum declared inside parameter list");
5227 if (! already)
5229 warning ("its scope is only this definition or declaration, which is probably not what you want");
5230 already = 1;
5235 /* Get the struct, enum or union (CODE says which) with tag NAME.
5236 Define the tag as a forward-reference if it is not defined. */
5238 tree
5239 xref_tag (code, name)
5240 enum tree_code code;
5241 tree name;
5243 /* If a cross reference is requested, look up the type
5244 already defined for this tag and return it. */
5246 tree ref = lookup_tag (code, name, current_binding_level, 0);
5247 /* If this is the right type of tag, return what we found.
5248 (This reference will be shadowed by shadow_tag later if appropriate.)
5249 If this is the wrong type of tag, do not return it. If it was the
5250 wrong type in the same binding level, we will have had an error
5251 message already; if in a different binding level and declaring
5252 a name, pending_xref_error will give an error message; but if in a
5253 different binding level and not declaring a name, this tag should
5254 shadow the previous declaration of a different type of tag, and
5255 this would not work properly if we return the reference found.
5256 (For example, with "struct foo" in an outer scope, "union foo;"
5257 must shadow that tag with a new one of union type.) */
5258 if (ref && TREE_CODE (ref) == code)
5259 return ref;
5261 /* If no such tag is yet defined, create a forward-reference node
5262 and record it as the "definition".
5263 When a real declaration of this type is found,
5264 the forward-reference will be altered into a real type. */
5266 ref = make_node (code);
5267 if (code == ENUMERAL_TYPE)
5269 /* Give the type a default layout like unsigned int
5270 to avoid crashing if it does not get defined. */
5271 TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
5272 TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
5273 TYPE_USER_ALIGN (ref) = 0;
5274 TREE_UNSIGNED (ref) = 1;
5275 TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
5276 TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
5277 TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
5280 pushtag (name, ref);
5282 return ref;
5285 /* Make sure that the tag NAME is defined *in the current binding level*
5286 at least as a forward reference.
5287 CODE says which kind of tag NAME ought to be. */
5289 tree
5290 start_struct (code, name)
5291 enum tree_code code;
5292 tree name;
5294 /* If there is already a tag defined at this binding level
5295 (as a forward reference), just return it. */
5297 tree ref = 0;
5299 if (name != 0)
5300 ref = lookup_tag (code, name, current_binding_level, 1);
5301 if (ref && TREE_CODE (ref) == code)
5303 C_TYPE_BEING_DEFINED (ref) = 1;
5304 TYPE_PACKED (ref) = flag_pack_struct;
5305 if (TYPE_FIELDS (ref))
5307 if (code == UNION_TYPE)
5308 error ("redefinition of `union %s'",
5309 IDENTIFIER_POINTER (name));
5310 else
5311 error ("redefinition of `struct %s'",
5312 IDENTIFIER_POINTER (name));
5315 return ref;
5318 /* Otherwise create a forward-reference just so the tag is in scope. */
5320 ref = make_node (code);
5321 pushtag (name, ref);
5322 C_TYPE_BEING_DEFINED (ref) = 1;
5323 TYPE_PACKED (ref) = flag_pack_struct;
5324 return ref;
5327 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
5328 of a structure component, returning a FIELD_DECL node.
5329 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.
5331 This is done during the parsing of the struct declaration.
5332 The FIELD_DECL nodes are chained together and the lot of them
5333 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
5335 tree
5336 grokfield (filename, line, declarator, declspecs, width)
5337 const char *filename ATTRIBUTE_UNUSED;
5338 int line ATTRIBUTE_UNUSED;
5339 tree declarator, declspecs, width;
5341 tree value;
5343 if (declarator == NULL_TREE && width == NULL_TREE)
5345 /* This is an unnamed decl. We only support unnamed
5346 structs/unions, so check for other things and refuse them. */
5347 if (TREE_CODE (TREE_VALUE (declspecs)) != RECORD_TYPE
5348 && TREE_CODE (TREE_VALUE (declspecs)) != UNION_TYPE)
5350 error ("unnamed fields of type other than struct or union are not allowed");
5351 return NULL_TREE;
5355 value = grokdeclarator (declarator, declspecs, width ? BITFIELD : FIELD, 0);
5357 finish_decl (value, NULL_TREE, NULL_TREE);
5358 DECL_INITIAL (value) = width;
5360 maybe_objc_check_decl (value);
5361 return value;
5364 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5365 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5366 ATTRIBUTES are attributes to be applied to the structure. */
5368 tree
5369 finish_struct (t, fieldlist, attributes)
5370 tree t;
5371 tree fieldlist;
5372 tree attributes;
5374 tree x;
5375 int toplevel = global_binding_level == current_binding_level;
5376 int saw_named_field;
5378 /* If this type was previously laid out as a forward reference,
5379 make sure we lay it out again. */
5381 TYPE_SIZE (t) = 0;
5383 decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5385 /* Nameless union parm types are useful as GCC extension. */
5386 if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic)
5387 /* Otherwise, warn about any struct or union def. in parmlist. */
5388 if (in_parm_level_p ())
5390 if (pedantic)
5391 pedwarn ("%s defined inside parms",
5392 TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
5393 else
5394 warning ("%s defined inside parms",
5395 TREE_CODE (t) == UNION_TYPE ? _("union") : _("structure"));
5398 if (pedantic)
5400 for (x = fieldlist; x; x = TREE_CHAIN (x))
5401 if (DECL_NAME (x) != 0)
5402 break;
5404 if (x == 0)
5405 pedwarn ("%s has no %s",
5406 TREE_CODE (t) == UNION_TYPE ? _("union") : _("struct"),
5407 fieldlist ? _("named members") : _("members"));
5410 /* Install struct as DECL_CONTEXT of each field decl.
5411 Also process specified field sizes,m which is found in the DECL_INITIAL.
5412 Store 0 there, except for ": 0" fields (so we can find them
5413 and delete them, below). */
5415 saw_named_field = 0;
5416 for (x = fieldlist; x; x = TREE_CHAIN (x))
5418 DECL_CONTEXT (x) = t;
5419 DECL_PACKED (x) |= TYPE_PACKED (t);
5421 /* If any field is const, the structure type is pseudo-const. */
5422 if (TREE_READONLY (x))
5423 C_TYPE_FIELDS_READONLY (t) = 1;
5424 else
5426 /* A field that is pseudo-const makes the structure likewise. */
5427 tree t1 = TREE_TYPE (x);
5428 while (TREE_CODE (t1) == ARRAY_TYPE)
5429 t1 = TREE_TYPE (t1);
5430 if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
5431 && C_TYPE_FIELDS_READONLY (t1))
5432 C_TYPE_FIELDS_READONLY (t) = 1;
5435 /* Any field that is volatile means variables of this type must be
5436 treated in some ways as volatile. */
5437 if (TREE_THIS_VOLATILE (x))
5438 C_TYPE_FIELDS_VOLATILE (t) = 1;
5440 /* Any field of nominal variable size implies structure is too. */
5441 if (C_DECL_VARIABLE_SIZE (x))
5442 C_TYPE_VARIABLE_SIZE (t) = 1;
5444 /* Detect invalid nested redefinition. */
5445 if (TREE_TYPE (x) == t)
5446 error ("nested redefinition of `%s'",
5447 IDENTIFIER_POINTER (TYPE_NAME (t)));
5449 /* Detect invalid bit-field size. */
5450 if (DECL_INITIAL (x))
5451 STRIP_NOPS (DECL_INITIAL (x));
5452 if (DECL_INITIAL (x))
5454 if (TREE_CODE (DECL_INITIAL (x)) == INTEGER_CST)
5455 constant_expression_warning (DECL_INITIAL (x));
5456 else
5458 error_with_decl (x,
5459 "bit-field `%s' width not an integer constant");
5460 DECL_INITIAL (x) = NULL;
5464 /* Detect invalid bit-field type. */
5465 if (DECL_INITIAL (x)
5466 && TREE_CODE (TREE_TYPE (x)) != INTEGER_TYPE
5467 && TREE_CODE (TREE_TYPE (x)) != BOOLEAN_TYPE
5468 && TREE_CODE (TREE_TYPE (x)) != ENUMERAL_TYPE)
5470 error_with_decl (x, "bit-field `%s' has invalid type");
5471 DECL_INITIAL (x) = NULL;
5474 if (DECL_INITIAL (x) && pedantic
5475 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != integer_type_node
5476 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != unsigned_type_node
5477 && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != c_bool_type_node
5478 /* Accept an enum that's equivalent to int or unsigned int. */
5479 && !(TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE
5480 && (TYPE_PRECISION (TREE_TYPE (x))
5481 == TYPE_PRECISION (integer_type_node))))
5482 pedwarn_with_decl (x, "bit-field `%s' type invalid in ISO C");
5484 /* Detect and ignore out of range field width and process valid
5485 field widths. */
5486 if (DECL_INITIAL (x))
5488 int max_width
5489 = (TYPE_MAIN_VARIANT (TREE_TYPE (x)) == c_bool_type_node
5490 ? CHAR_TYPE_SIZE : TYPE_PRECISION (TREE_TYPE (x)));
5492 if (tree_int_cst_sgn (DECL_INITIAL (x)) < 0)
5493 error_with_decl (x, "negative width in bit-field `%s'");
5494 else if (0 < compare_tree_int (DECL_INITIAL (x), max_width))
5495 pedwarn_with_decl (x, "width of `%s' exceeds its type");
5496 else if (integer_zerop (DECL_INITIAL (x)) && DECL_NAME (x) != 0)
5497 error_with_decl (x, "zero width for bit-field `%s'");
5498 else
5500 /* The test above has assured us that TREE_INT_CST_HIGH is 0. */
5501 unsigned HOST_WIDE_INT width
5502 = tree_low_cst (DECL_INITIAL (x), 1);
5504 if (TREE_CODE (TREE_TYPE (x)) == ENUMERAL_TYPE
5505 && (width < min_precision (TYPE_MIN_VALUE (TREE_TYPE (x)),
5506 TREE_UNSIGNED (TREE_TYPE (x)))
5507 || (width
5508 < min_precision (TYPE_MAX_VALUE (TREE_TYPE (x)),
5509 TREE_UNSIGNED (TREE_TYPE (x))))))
5510 warning_with_decl (x,
5511 "`%s' is narrower than values of its type");
5513 DECL_SIZE (x) = bitsize_int (width);
5514 DECL_BIT_FIELD (x) = 1;
5515 SET_DECL_C_BIT_FIELD (x);
5517 if (width == 0
5518 && ! (* targetm.ms_bitfield_layout_p) (t))
5520 /* field size 0 => force desired amount of alignment. */
5521 #ifdef EMPTY_FIELD_BOUNDARY
5522 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), EMPTY_FIELD_BOUNDARY);
5523 #endif
5524 #ifdef PCC_BITFIELD_TYPE_MATTERS
5525 if (PCC_BITFIELD_TYPE_MATTERS)
5527 DECL_ALIGN (x) = MAX (DECL_ALIGN (x),
5528 TYPE_ALIGN (TREE_TYPE (x)));
5529 DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
5531 #endif
5536 else if (TREE_TYPE (x) != error_mark_node)
5538 unsigned int min_align = (DECL_PACKED (x) ? BITS_PER_UNIT
5539 : TYPE_ALIGN (TREE_TYPE (x)));
5541 /* Non-bit-fields are aligned for their type, except packed
5542 fields which require only BITS_PER_UNIT alignment. */
5543 DECL_ALIGN (x) = MAX (DECL_ALIGN (x), min_align);
5544 if (! DECL_PACKED (x))
5545 DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
5548 DECL_INITIAL (x) = 0;
5550 /* Detect flexible array member in an invalid context. */
5551 if (TREE_CODE (TREE_TYPE (x)) == ARRAY_TYPE
5552 && TYPE_SIZE (TREE_TYPE (x)) == NULL_TREE
5553 && TYPE_DOMAIN (TREE_TYPE (x)) != NULL_TREE
5554 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x))) == NULL_TREE)
5556 if (TREE_CODE (t) == UNION_TYPE)
5557 error_with_decl (x, "flexible array member in union");
5558 else if (TREE_CHAIN (x) != NULL_TREE)
5559 error_with_decl (x, "flexible array member not at end of struct");
5560 else if (! saw_named_field)
5561 error_with_decl (x, "flexible array member in otherwise empty struct");
5563 if (DECL_NAME (x))
5564 saw_named_field = 1;
5567 /* Delete all duplicate fields from the fieldlist */
5568 for (x = fieldlist; x && TREE_CHAIN (x);)
5569 /* Anonymous fields aren't duplicates. */
5570 if (DECL_NAME (TREE_CHAIN (x)) == 0)
5571 x = TREE_CHAIN (x);
5572 else
5574 tree y = fieldlist;
5576 while (1)
5578 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5579 break;
5580 if (y == x)
5581 break;
5582 y = TREE_CHAIN (y);
5584 if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
5586 error_with_decl (TREE_CHAIN (x), "duplicate member `%s'");
5587 TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
5589 else
5590 x = TREE_CHAIN (x);
5593 /* Now we have the nearly final fieldlist. Record it,
5594 then lay out the structure or union (including the fields). */
5596 TYPE_FIELDS (t) = fieldlist;
5598 layout_type (t);
5600 /* Delete all zero-width bit-fields from the fieldlist */
5602 tree *fieldlistp = &fieldlist;
5603 while (*fieldlistp)
5604 if (TREE_CODE (*fieldlistp) == FIELD_DECL && DECL_INITIAL (*fieldlistp))
5605 *fieldlistp = TREE_CHAIN (*fieldlistp);
5606 else
5607 fieldlistp = &TREE_CHAIN (*fieldlistp);
5610 /* Now we have the truly final field list.
5611 Store it in this type and in the variants. */
5613 TYPE_FIELDS (t) = fieldlist;
5615 for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
5617 TYPE_FIELDS (x) = TYPE_FIELDS (t);
5618 TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
5619 TYPE_ALIGN (x) = TYPE_ALIGN (t);
5620 TYPE_USER_ALIGN (x) = TYPE_USER_ALIGN (t);
5623 /* If this was supposed to be a transparent union, but we can't
5624 make it one, warn and turn off the flag. */
5625 if (TREE_CODE (t) == UNION_TYPE
5626 && TYPE_TRANSPARENT_UNION (t)
5627 && TYPE_MODE (t) != DECL_MODE (TYPE_FIELDS (t)))
5629 TYPE_TRANSPARENT_UNION (t) = 0;
5630 warning ("union cannot be made transparent");
5633 /* If this structure or union completes the type of any previous
5634 variable declaration, lay it out and output its rtl. */
5636 if (current_binding_level->n_incomplete != 0)
5638 tree decl;
5639 for (decl = current_binding_level->names; decl; decl = TREE_CHAIN (decl))
5641 if (TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TYPE_MAIN_VARIANT (t)
5642 && TREE_CODE (decl) != TYPE_DECL)
5644 layout_decl (decl, 0);
5645 /* This is a no-op in c-lang.c or something real in objc-actions.c. */
5646 maybe_objc_check_decl (decl);
5647 rest_of_decl_compilation (decl, NULL, toplevel, 0);
5648 if (! toplevel)
5649 expand_decl (decl);
5650 if (--current_binding_level->n_incomplete == 0)
5651 break;
5653 else if (!COMPLETE_TYPE_P (TREE_TYPE (decl))
5654 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
5656 tree element = TREE_TYPE (decl);
5657 while (TREE_CODE (element) == ARRAY_TYPE)
5658 element = TREE_TYPE (element);
5659 if (element == t)
5661 layout_array_type (TREE_TYPE (decl));
5662 if (TREE_CODE (decl) != TYPE_DECL)
5664 layout_decl (decl, 0);
5665 maybe_objc_check_decl (decl);
5666 rest_of_decl_compilation (decl, NULL, toplevel, 0);
5667 if (! toplevel)
5668 expand_decl (decl);
5670 if (--current_binding_level->n_incomplete == 0)
5671 break;
5677 /* Finish debugging output for this type. */
5678 rest_of_type_compilation (t, toplevel);
5680 return t;
5683 /* Lay out the type T, and its element type, and so on. */
5685 static void
5686 layout_array_type (t)
5687 tree t;
5689 if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
5690 layout_array_type (TREE_TYPE (t));
5691 layout_type (t);
5694 /* Begin compiling the definition of an enumeration type.
5695 NAME is its name (or null if anonymous).
5696 Returns the type object, as yet incomplete.
5697 Also records info about it so that build_enumerator
5698 may be used to declare the individual values as they are read. */
5700 tree
5701 start_enum (name)
5702 tree name;
5704 tree enumtype = 0;
5706 /* If this is the real definition for a previous forward reference,
5707 fill in the contents in the same object that used to be the
5708 forward reference. */
5710 if (name != 0)
5711 enumtype = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 1);
5713 if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
5715 enumtype = make_node (ENUMERAL_TYPE);
5716 pushtag (name, enumtype);
5719 C_TYPE_BEING_DEFINED (enumtype) = 1;
5721 if (TYPE_VALUES (enumtype) != 0)
5723 /* This enum is a named one that has been declared already. */
5724 error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
5726 /* Completely replace its old definition.
5727 The old enumerators remain defined, however. */
5728 TYPE_VALUES (enumtype) = 0;
5731 enum_next_value = integer_zero_node;
5732 enum_overflow = 0;
5734 if (flag_short_enums)
5735 TYPE_PACKED (enumtype) = 1;
5737 return enumtype;
5740 /* After processing and defining all the values of an enumeration type,
5741 install their decls in the enumeration type and finish it off.
5742 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5743 and ATTRIBUTES are the specified attributes.
5744 Returns ENUMTYPE. */
5746 tree
5747 finish_enum (enumtype, values, attributes)
5748 tree enumtype;
5749 tree values;
5750 tree attributes;
5752 tree pair, tem;
5753 tree minnode = 0, maxnode = 0, enum_value_type;
5754 int precision, unsign;
5755 int toplevel = (global_binding_level == current_binding_level);
5757 if (in_parm_level_p ())
5758 warning ("enum defined inside parms");
5760 decl_attributes (&enumtype, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
5762 /* Calculate the maximum value of any enumerator in this type. */
5764 if (values == error_mark_node)
5765 minnode = maxnode = integer_zero_node;
5766 else
5768 minnode = maxnode = TREE_VALUE (values);
5769 for (pair = TREE_CHAIN (values); pair; pair = TREE_CHAIN (pair))
5771 tree value = TREE_VALUE (pair);
5772 if (tree_int_cst_lt (maxnode, value))
5773 maxnode = value;
5774 if (tree_int_cst_lt (value, minnode))
5775 minnode = value;
5779 /* Construct the final type of this enumeration. It is the same
5780 as one of the integral types - the narrowest one that fits, except
5781 that normally we only go as narrow as int - and signed iff any of
5782 the values are negative. */
5783 unsign = (tree_int_cst_sgn (minnode) >= 0);
5784 precision = MAX (min_precision (minnode, unsign),
5785 min_precision (maxnode, unsign));
5786 if (TYPE_PACKED (enumtype) || precision > TYPE_PRECISION (integer_type_node))
5788 tree narrowest = c_common_type_for_size (precision, unsign);
5789 if (narrowest == 0)
5791 warning ("enumeration values exceed range of largest integer");
5792 narrowest = long_long_integer_type_node;
5795 precision = TYPE_PRECISION (narrowest);
5797 else
5798 precision = TYPE_PRECISION (integer_type_node);
5800 if (precision == TYPE_PRECISION (integer_type_node))
5801 enum_value_type = c_common_type_for_size (precision, 0);
5802 else
5803 enum_value_type = enumtype;
5805 TYPE_MIN_VALUE (enumtype) = minnode;
5806 TYPE_MAX_VALUE (enumtype) = maxnode;
5807 TYPE_PRECISION (enumtype) = precision;
5808 TREE_UNSIGNED (enumtype) = unsign;
5809 TYPE_SIZE (enumtype) = 0;
5810 layout_type (enumtype);
5812 if (values != error_mark_node)
5814 /* Change the type of the enumerators to be the enum type. We
5815 need to do this irrespective of the size of the enum, for
5816 proper type checking. Replace the DECL_INITIALs of the
5817 enumerators, and the value slots of the list, with copies
5818 that have the enum type; they cannot be modified in place
5819 because they may be shared (e.g. integer_zero_node) Finally,
5820 change the purpose slots to point to the names of the decls. */
5821 for (pair = values; pair; pair = TREE_CHAIN (pair))
5823 tree enu = TREE_PURPOSE (pair);
5825 TREE_TYPE (enu) = enumtype;
5826 DECL_SIZE (enu) = TYPE_SIZE (enumtype);
5827 DECL_SIZE_UNIT (enu) = TYPE_SIZE_UNIT (enumtype);
5828 DECL_ALIGN (enu) = TYPE_ALIGN (enumtype);
5829 DECL_USER_ALIGN (enu) = TYPE_USER_ALIGN (enumtype);
5830 DECL_MODE (enu) = TYPE_MODE (enumtype);
5832 /* The ISO C Standard mandates enumerators to have type int,
5833 even though the underlying type of an enum type is
5834 unspecified. Here we convert any enumerators that fit in
5835 an int to type int, to avoid promotions to unsigned types
5836 when comparing integers with enumerators that fit in the
5837 int range. When -pedantic is given, build_enumerator()
5838 would have already taken care of those that don't fit. */
5839 if (int_fits_type_p (DECL_INITIAL (enu), enum_value_type))
5840 DECL_INITIAL (enu) = convert (enum_value_type, DECL_INITIAL (enu));
5841 else
5842 DECL_INITIAL (enu) = convert (enumtype, DECL_INITIAL (enu));
5844 TREE_PURPOSE (pair) = DECL_NAME (enu);
5845 TREE_VALUE (pair) = DECL_INITIAL (enu);
5848 TYPE_VALUES (enumtype) = values;
5851 /* Fix up all variant types of this enum type. */
5852 for (tem = TYPE_MAIN_VARIANT (enumtype); tem; tem = TYPE_NEXT_VARIANT (tem))
5854 if (tem == enumtype)
5855 continue;
5856 TYPE_VALUES (tem) = TYPE_VALUES (enumtype);
5857 TYPE_MIN_VALUE (tem) = TYPE_MIN_VALUE (enumtype);
5858 TYPE_MAX_VALUE (tem) = TYPE_MAX_VALUE (enumtype);
5859 TYPE_SIZE (tem) = TYPE_SIZE (enumtype);
5860 TYPE_SIZE_UNIT (tem) = TYPE_SIZE_UNIT (enumtype);
5861 TYPE_MODE (tem) = TYPE_MODE (enumtype);
5862 TYPE_PRECISION (tem) = TYPE_PRECISION (enumtype);
5863 TYPE_ALIGN (tem) = TYPE_ALIGN (enumtype);
5864 TYPE_USER_ALIGN (tem) = TYPE_USER_ALIGN (enumtype);
5865 TREE_UNSIGNED (tem) = TREE_UNSIGNED (enumtype);
5868 /* Finish debugging output for this type. */
5869 rest_of_type_compilation (enumtype, toplevel);
5871 return enumtype;
5874 /* Build and install a CONST_DECL for one value of the
5875 current enumeration type (one that was begun with start_enum).
5876 Return a tree-list containing the CONST_DECL and its value.
5877 Assignment of sequential values by default is handled here. */
5879 tree
5880 build_enumerator (name, value)
5881 tree name, value;
5883 tree decl, type;
5885 /* Validate and default VALUE. */
5887 /* Remove no-op casts from the value. */
5888 if (value)
5889 STRIP_TYPE_NOPS (value);
5891 if (value != 0)
5893 if (TREE_CODE (value) == INTEGER_CST)
5895 value = default_conversion (value);
5896 constant_expression_warning (value);
5898 else
5900 error ("enumerator value for `%s' not integer constant",
5901 IDENTIFIER_POINTER (name));
5902 value = 0;
5906 /* Default based on previous value. */
5907 /* It should no longer be possible to have NON_LVALUE_EXPR
5908 in the default. */
5909 if (value == 0)
5911 value = enum_next_value;
5912 if (enum_overflow)
5913 error ("overflow in enumeration values");
5916 if (pedantic && ! int_fits_type_p (value, integer_type_node))
5918 pedwarn ("ISO C restricts enumerator values to range of `int'");
5919 value = convert (integer_type_node, value);
5922 /* Set basis for default for next value. */
5923 enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
5924 enum_overflow = tree_int_cst_lt (enum_next_value, value);
5926 /* Now create a declaration for the enum value name. */
5928 type = TREE_TYPE (value);
5929 type = c_common_type_for_size (MAX (TYPE_PRECISION (type),
5930 TYPE_PRECISION (integer_type_node)),
5931 (TYPE_PRECISION (type)
5932 >= TYPE_PRECISION (integer_type_node)
5933 && TREE_UNSIGNED (type)));
5935 decl = build_decl (CONST_DECL, name, type);
5936 DECL_INITIAL (decl) = convert (type, value);
5937 pushdecl (decl);
5939 return tree_cons (decl, value, NULL_TREE);
5943 /* Create the FUNCTION_DECL for a function definition.
5944 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
5945 the declaration; they describe the function's name and the type it returns,
5946 but twisted together in a fashion that parallels the syntax of C.
5948 This function creates a binding context for the function body
5949 as well as setting up the FUNCTION_DECL in current_function_decl.
5951 Returns 1 on success. If the DECLARATOR is not suitable for a function
5952 (it defines a datum instead), we return 0, which tells
5953 yyparse to report a parse error. */
5956 start_function (declspecs, declarator, attributes)
5957 tree declarator, declspecs, attributes;
5959 tree decl1, old_decl;
5960 tree restype;
5961 int old_immediate_size_expand = immediate_size_expand;
5963 current_function_returns_value = 0; /* Assume, until we see it does. */
5964 current_function_returns_null = 0;
5965 current_function_returns_abnormally = 0;
5966 warn_about_return_type = 0;
5967 current_extern_inline = 0;
5968 c_function_varargs = 0;
5969 named_labels = 0;
5970 shadowed_labels = 0;
5972 /* Don't expand any sizes in the return type of the function. */
5973 immediate_size_expand = 0;
5975 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1);
5977 /* If the declarator is not suitable for a function definition,
5978 cause a syntax error. */
5979 if (decl1 == 0)
5981 immediate_size_expand = old_immediate_size_expand;
5982 return 0;
5985 decl_attributes (&decl1, attributes, 0);
5987 /* If #pragma weak was used, mark the decl weak now. */
5988 if (current_binding_level == global_binding_level)
5989 maybe_apply_pragma_weak (decl1);
5991 if (DECL_DECLARED_INLINE_P (decl1)
5992 && DECL_UNINLINABLE (decl1)
5993 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1)))
5994 warning_with_decl (decl1,
5995 "inline function `%s' given attribute noinline");
5997 announce_function (decl1);
5999 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1))))
6001 error ("return type is an incomplete type");
6002 /* Make it return void instead. */
6003 TREE_TYPE (decl1)
6004 = build_function_type (void_type_node,
6005 TYPE_ARG_TYPES (TREE_TYPE (decl1)));
6008 if (warn_about_return_type)
6009 pedwarn_c99 ("return type defaults to `int'");
6011 /* Save the parm names or decls from this function's declarator
6012 where store_parm_decls will find them. */
6013 current_function_parms = last_function_parms;
6014 current_function_parm_tags = last_function_parm_tags;
6016 /* Make the init_value nonzero so pushdecl knows this is not tentative.
6017 error_mark_node is replaced below (in poplevel) with the BLOCK. */
6018 DECL_INITIAL (decl1) = error_mark_node;
6020 /* If this definition isn't a prototype and we had a prototype declaration
6021 before, copy the arg type info from that prototype.
6022 But not if what we had before was a builtin function. */
6023 old_decl = lookup_name_current_level (DECL_NAME (decl1));
6024 if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
6025 && !DECL_BUILT_IN (old_decl)
6026 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
6027 == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (old_decl))))
6028 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
6030 TREE_TYPE (decl1) = TREE_TYPE (old_decl);
6031 current_function_prototype_file = DECL_SOURCE_FILE (old_decl);
6032 current_function_prototype_line = DECL_SOURCE_LINE (old_decl);
6035 /* If there is no explicit declaration, look for any out-of-scope implicit
6036 declarations. */
6037 if (old_decl == 0)
6038 old_decl = IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1));
6040 /* Optionally warn of old-fashioned def with no previous prototype. */
6041 if (warn_strict_prototypes
6042 && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
6043 && !(old_decl != 0
6044 && (TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0
6045 || (DECL_BUILT_IN (old_decl)
6046 && ! C_DECL_ANTICIPATED (old_decl)))))
6047 warning ("function declaration isn't a prototype");
6048 /* Optionally warn of any global def with no previous prototype. */
6049 else if (warn_missing_prototypes
6050 && TREE_PUBLIC (decl1)
6051 && !(old_decl != 0
6052 && (TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0
6053 || (DECL_BUILT_IN (old_decl)
6054 && ! C_DECL_ANTICIPATED (old_decl))))
6055 && ! MAIN_NAME_P (DECL_NAME (decl1)))
6056 warning_with_decl (decl1, "no previous prototype for `%s'");
6057 /* Optionally warn of any def with no previous prototype
6058 if the function has already been used. */
6059 else if (warn_missing_prototypes
6060 && old_decl != 0 && TREE_USED (old_decl)
6061 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0)
6062 warning_with_decl (decl1,
6063 "`%s' was used with no prototype before its definition");
6064 /* Optionally warn of any global def with no previous declaration. */
6065 else if (warn_missing_declarations
6066 && TREE_PUBLIC (decl1)
6067 && old_decl == 0
6068 && ! MAIN_NAME_P (DECL_NAME (decl1)))
6069 warning_with_decl (decl1, "no previous declaration for `%s'");
6070 /* Optionally warn of any def with no previous declaration
6071 if the function has already been used. */
6072 else if (warn_missing_declarations
6073 && old_decl != 0 && TREE_USED (old_decl)
6074 && old_decl == IDENTIFIER_IMPLICIT_DECL (DECL_NAME (decl1)))
6075 warning_with_decl (decl1,
6076 "`%s' was used with no declaration before its definition");
6078 /* This is a definition, not a reference.
6079 So normally clear DECL_EXTERNAL.
6080 However, `extern inline' acts like a declaration
6081 except for defining how to inline. So set DECL_EXTERNAL in that case. */
6082 DECL_EXTERNAL (decl1) = current_extern_inline;
6084 /* This function exists in static storage.
6085 (This does not mean `static' in the C sense!) */
6086 TREE_STATIC (decl1) = 1;
6088 /* A nested function is not global. */
6089 if (current_function_decl != 0)
6090 TREE_PUBLIC (decl1) = 0;
6092 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
6093 if (warn_main > 0 && MAIN_NAME_P (DECL_NAME (decl1)))
6095 tree args;
6096 int argct = 0;
6098 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1)))
6099 != integer_type_node)
6100 pedwarn_with_decl (decl1, "return type of `%s' is not `int'");
6102 for (args = TYPE_ARG_TYPES (TREE_TYPE (decl1)); args;
6103 args = TREE_CHAIN (args))
6105 tree type = args ? TREE_VALUE (args) : 0;
6107 if (type == void_type_node)
6108 break;
6110 ++argct;
6111 switch (argct)
6113 case 1:
6114 if (TYPE_MAIN_VARIANT (type) != integer_type_node)
6115 pedwarn_with_decl (decl1,
6116 "first argument of `%s' should be `int'");
6117 break;
6119 case 2:
6120 if (TREE_CODE (type) != POINTER_TYPE
6121 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6122 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6123 != char_type_node))
6124 pedwarn_with_decl (decl1,
6125 "second argument of `%s' should be `char **'");
6126 break;
6128 case 3:
6129 if (TREE_CODE (type) != POINTER_TYPE
6130 || TREE_CODE (TREE_TYPE (type)) != POINTER_TYPE
6131 || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (type)))
6132 != char_type_node))
6133 pedwarn_with_decl (decl1,
6134 "third argument of `%s' should probably be `char **'");
6135 break;
6139 /* It is intentional that this message does not mention the third
6140 argument because it's only mentioned in an appendix of the
6141 standard. */
6142 if (argct > 0 && (argct < 2 || argct > 3))
6143 pedwarn_with_decl (decl1, "`%s' takes only zero or two arguments");
6145 if (! TREE_PUBLIC (decl1))
6146 pedwarn_with_decl (decl1, "`%s' is normally a non-static function");
6149 /* Record the decl so that the function name is defined.
6150 If we already have a decl for this name, and it is a FUNCTION_DECL,
6151 use the old decl. */
6153 current_function_decl = pushdecl (decl1);
6155 pushlevel (0);
6156 declare_parm_level (1);
6157 current_binding_level->subblocks_tag_transparent = 1;
6159 make_decl_rtl (current_function_decl, NULL);
6161 restype = TREE_TYPE (TREE_TYPE (current_function_decl));
6162 /* Promote the value to int before returning it. */
6163 if (c_promoting_integer_type_p (restype))
6165 /* It retains unsignedness if not really getting wider. */
6166 if (TREE_UNSIGNED (restype)
6167 && (TYPE_PRECISION (restype)
6168 == TYPE_PRECISION (integer_type_node)))
6169 restype = unsigned_type_node;
6170 else
6171 restype = integer_type_node;
6173 DECL_RESULT (current_function_decl)
6174 = build_decl (RESULT_DECL, NULL_TREE, restype);
6176 /* If this fcn was already referenced via a block-scope `extern' decl
6177 (or an implicit decl), propagate certain information about the usage. */
6178 if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
6179 TREE_ADDRESSABLE (current_function_decl) = 1;
6181 immediate_size_expand = old_immediate_size_expand;
6183 start_fname_decls ();
6185 return 1;
6188 /* Record that this function is going to be a varargs function.
6189 This is called before store_parm_decls, which is too early
6190 to call mark_varargs directly. */
6192 void
6193 c_mark_varargs ()
6195 c_function_varargs = 1;
6198 /* Store the parameter declarations into the current function declaration.
6199 This is called after parsing the parameter declarations, before
6200 digesting the body of the function.
6202 For an old-style definition, modify the function's type
6203 to specify at least the number of arguments. */
6205 void
6206 store_parm_decls ()
6208 tree fndecl = current_function_decl;
6209 tree parm;
6211 /* This is either a chain of PARM_DECLs (if a prototype was used)
6212 or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */
6213 tree specparms = current_function_parms;
6215 /* This is a list of types declared among parms in a prototype. */
6216 tree parmtags = current_function_parm_tags;
6218 /* This is a chain of PARM_DECLs from old-style parm declarations. */
6219 tree parmdecls = getdecls ();
6221 /* This is a chain of any other decls that came in among the parm
6222 declarations. If a parm is declared with enum {foo, bar} x;
6223 then CONST_DECLs for foo and bar are put here. */
6224 tree nonparms = 0;
6226 /* The function containing FNDECL, if any. */
6227 tree context = decl_function_context (fndecl);
6229 /* Nonzero if this definition is written with a prototype. */
6230 int prototype = 0;
6232 int saved_warn_shadow = warn_shadow;
6234 /* Don't re-emit shadow warnings. */
6235 warn_shadow = 0;
6237 if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST)
6239 /* This case is when the function was defined with an ANSI prototype.
6240 The parms already have decls, so we need not do anything here
6241 except record them as in effect
6242 and complain if any redundant old-style parm decls were written. */
6244 tree next;
6245 tree others = 0;
6247 prototype = 1;
6249 if (parmdecls != 0)
6251 tree decl, link;
6253 error_with_decl (fndecl,
6254 "parm types given both in parmlist and separately");
6255 /* Get rid of the erroneous decls; don't keep them on
6256 the list of parms, since they might not be PARM_DECLs. */
6257 for (decl = current_binding_level->names;
6258 decl; decl = TREE_CHAIN (decl))
6259 if (DECL_NAME (decl))
6260 IDENTIFIER_LOCAL_VALUE (DECL_NAME (decl)) = 0;
6261 for (link = current_binding_level->shadowed;
6262 link; link = TREE_CHAIN (link))
6263 IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
6264 current_binding_level->names = 0;
6265 current_binding_level->shadowed = 0;
6268 specparms = nreverse (specparms);
6269 for (parm = specparms; parm; parm = next)
6271 next = TREE_CHAIN (parm);
6272 if (TREE_CODE (parm) == PARM_DECL)
6274 if (DECL_NAME (parm) == 0)
6275 error_with_decl (parm, "parameter name omitted");
6276 else if (TREE_CODE (TREE_TYPE (parm)) != ERROR_MARK
6277 && VOID_TYPE_P (TREE_TYPE (parm)))
6279 error_with_decl (parm, "parameter `%s' declared void");
6280 /* Change the type to error_mark_node so this parameter
6281 will be ignored by assign_parms. */
6282 TREE_TYPE (parm) = error_mark_node;
6284 pushdecl (parm);
6286 else
6288 /* If we find an enum constant or a type tag,
6289 put it aside for the moment. */
6290 TREE_CHAIN (parm) = 0;
6291 others = chainon (others, parm);
6295 /* Get the decls in their original chain order
6296 and record in the function. */
6297 DECL_ARGUMENTS (fndecl) = getdecls ();
6299 #if 0
6300 /* If this function takes a variable number of arguments,
6301 add a phony parameter to the end of the parm list,
6302 to represent the position of the first unnamed argument. */
6303 if (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))))
6304 != void_type_node)
6306 tree dummy = build_decl (PARM_DECL, NULL_TREE, void_type_node);
6307 /* Let's hope the address of the unnamed parm
6308 won't depend on its type. */
6309 TREE_TYPE (dummy) = integer_type_node;
6310 DECL_ARG_TYPE (dummy) = integer_type_node;
6311 DECL_ARGUMENTS (fndecl) = chainon (DECL_ARGUMENTS (fndecl), dummy);
6313 #endif
6315 /* Now pushdecl the enum constants. */
6316 for (parm = others; parm; parm = next)
6318 next = TREE_CHAIN (parm);
6319 if (DECL_NAME (parm) == 0)
6321 else if (TYPE_MAIN_VARIANT (TREE_TYPE (parm)) == void_type_node)
6323 else if (TREE_CODE (parm) != PARM_DECL)
6324 pushdecl (parm);
6327 storetags (chainon (parmtags, gettags ()));
6329 else
6331 /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
6332 each with a parm name as the TREE_VALUE.
6334 PARMDECLS is a chain of declarations for parameters.
6335 Warning! It can also contain CONST_DECLs which are not parameters
6336 but are names of enumerators of any enum types
6337 declared among the parameters.
6339 First match each formal parameter name with its declaration.
6340 Associate decls with the names and store the decls
6341 into the TREE_PURPOSE slots. */
6343 /* We use DECL_WEAK as a flag to show which parameters have been
6344 seen already since it is not used on PARM_DECL or CONST_DECL. */
6345 for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
6346 DECL_WEAK (parm) = 0;
6348 for (parm = specparms; parm; parm = TREE_CHAIN (parm))
6350 tree tail, found = NULL;
6352 if (TREE_VALUE (parm) == 0)
6354 error_with_decl (fndecl,
6355 "parameter name missing from parameter list");
6356 TREE_PURPOSE (parm) = 0;
6357 continue;
6360 /* See if any of the parmdecls specifies this parm by name.
6361 Ignore any enumerator decls. */
6362 for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
6363 if (DECL_NAME (tail) == TREE_VALUE (parm)
6364 && TREE_CODE (tail) == PARM_DECL)
6366 found = tail;
6367 break;
6370 /* If declaration already marked, we have a duplicate name.
6371 Complain, and don't use this decl twice. */
6372 if (found && DECL_WEAK (found))
6374 error_with_decl (found, "multiple parameters named `%s'");
6375 found = 0;
6378 /* If the declaration says "void", complain and ignore it. */
6379 if (found && VOID_TYPE_P (TREE_TYPE (found)))
6381 error_with_decl (found, "parameter `%s' declared void");
6382 TREE_TYPE (found) = integer_type_node;
6383 DECL_ARG_TYPE (found) = integer_type_node;
6384 layout_decl (found, 0);
6387 /* If no declaration found, default to int. */
6388 if (!found)
6390 found = build_decl (PARM_DECL, TREE_VALUE (parm),
6391 integer_type_node);
6392 DECL_ARG_TYPE (found) = TREE_TYPE (found);
6393 DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
6394 DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
6395 if (flag_isoc99)
6396 pedwarn_with_decl (found, "type of `%s' defaults to `int'");
6397 else if (extra_warnings)
6398 warning_with_decl (found, "type of `%s' defaults to `int'");
6399 pushdecl (found);
6402 TREE_PURPOSE (parm) = found;
6404 /* Mark this decl as "already found". */
6405 DECL_WEAK (found) = 1;
6408 /* Put anything which is on the parmdecls chain and which is
6409 not a PARM_DECL onto the list NONPARMS. (The types of
6410 non-parm things which might appear on the list include
6411 enumerators and NULL-named TYPE_DECL nodes.) Complain about
6412 any actual PARM_DECLs not matched with any names. */
6414 nonparms = 0;
6415 for (parm = parmdecls; parm;)
6417 tree next = TREE_CHAIN (parm);
6418 TREE_CHAIN (parm) = 0;
6420 if (TREE_CODE (parm) != PARM_DECL)
6421 nonparms = chainon (nonparms, parm);
6422 else
6424 /* Complain about args with incomplete types. */
6425 if (!COMPLETE_TYPE_P (TREE_TYPE (parm)))
6427 error_with_decl (parm, "parameter `%s' has incomplete type");
6428 TREE_TYPE (parm) = error_mark_node;
6431 if (! DECL_WEAK (parm))
6433 error_with_decl (parm,
6434 "declaration for parameter `%s' but no such parameter");
6435 /* Pretend the parameter was not missing.
6436 This gets us to a standard state and minimizes
6437 further error messages. */
6438 specparms
6439 = chainon (specparms,
6440 tree_cons (parm, NULL_TREE, NULL_TREE));
6444 parm = next;
6447 /* Chain the declarations together in the order of the list of
6448 names. Store that chain in the function decl, replacing the
6449 list of names. */
6450 parm = specparms;
6451 DECL_ARGUMENTS (fndecl) = 0;
6453 tree last;
6454 for (last = 0; parm; parm = TREE_CHAIN (parm))
6455 if (TREE_PURPOSE (parm))
6457 if (last == 0)
6458 DECL_ARGUMENTS (fndecl) = TREE_PURPOSE (parm);
6459 else
6460 TREE_CHAIN (last) = TREE_PURPOSE (parm);
6461 last = TREE_PURPOSE (parm);
6462 TREE_CHAIN (last) = 0;
6466 /* If there was a previous prototype,
6467 set the DECL_ARG_TYPE of each argument according to
6468 the type previously specified, and report any mismatches. */
6470 if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
6472 tree type;
6473 for (parm = DECL_ARGUMENTS (fndecl),
6474 type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
6475 parm || (type && (TYPE_MAIN_VARIANT (TREE_VALUE (type))
6476 != void_type_node));
6477 parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
6479 if (parm == 0 || type == 0
6480 || TYPE_MAIN_VARIANT (TREE_VALUE (type)) == void_type_node)
6482 error ("number of arguments doesn't match prototype");
6483 error_with_file_and_line (current_function_prototype_file,
6484 current_function_prototype_line,
6485 "prototype declaration");
6486 break;
6488 /* Type for passing arg must be consistent with that
6489 declared for the arg. ISO C says we take the unqualified
6490 type for parameters declared with qualified type. */
6491 if (! comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm)),
6492 TYPE_MAIN_VARIANT (TREE_VALUE (type))))
6494 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm))
6495 == TYPE_MAIN_VARIANT (TREE_VALUE (type)))
6497 /* Adjust argument to match prototype. E.g. a previous
6498 `int foo(float);' prototype causes
6499 `int foo(x) float x; {...}' to be treated like
6500 `int foo(float x) {...}'. This is particularly
6501 useful for argument types like uid_t. */
6502 DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
6504 if (PROMOTE_PROTOTYPES
6505 && INTEGRAL_TYPE_P (TREE_TYPE (parm))
6506 && TYPE_PRECISION (TREE_TYPE (parm))
6507 < TYPE_PRECISION (integer_type_node))
6508 DECL_ARG_TYPE (parm) = integer_type_node;
6510 if (pedantic)
6512 pedwarn ("promoted argument `%s' doesn't match prototype",
6513 IDENTIFIER_POINTER (DECL_NAME (parm)));
6514 warning_with_file_and_line
6515 (current_function_prototype_file,
6516 current_function_prototype_line,
6517 "prototype declaration");
6520 else
6522 error ("argument `%s' doesn't match prototype",
6523 IDENTIFIER_POINTER (DECL_NAME (parm)));
6524 error_with_file_and_line (current_function_prototype_file,
6525 current_function_prototype_line,
6526 "prototype declaration");
6530 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
6533 /* Otherwise, create a prototype that would match. */
6535 else
6537 tree actual = 0, last = 0, type;
6539 for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
6541 type = tree_cons (NULL_TREE, DECL_ARG_TYPE (parm), NULL_TREE);
6542 if (last)
6543 TREE_CHAIN (last) = type;
6544 else
6545 actual = type;
6546 last = type;
6548 type = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
6549 if (last)
6550 TREE_CHAIN (last) = type;
6551 else
6552 actual = type;
6554 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6555 of the type of this function, but we need to avoid having this
6556 affect the types of other similarly-typed functions, so we must
6557 first force the generation of an identical (but separate) type
6558 node for the relevant function type. The new node we create
6559 will be a variant of the main variant of the original function
6560 type. */
6562 TREE_TYPE (fndecl) = build_type_copy (TREE_TYPE (fndecl));
6564 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
6567 /* Now store the final chain of decls for the arguments
6568 as the decl-chain of the current lexical scope.
6569 Put the enumerators in as well, at the front so that
6570 DECL_ARGUMENTS is not modified. */
6572 storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
6575 /* Make sure the binding level for the top of the function body
6576 gets a BLOCK if there are any in the function.
6577 Otherwise, the dbx output is wrong. */
6579 keep_next_if_subblocks = 1;
6581 /* ??? This might be an improvement,
6582 but needs to be thought about some more. */
6583 #if 0
6584 keep_next_level_flag = 1;
6585 #endif
6587 /* Write a record describing this function definition to the prototypes
6588 file (if requested). */
6590 gen_aux_info_record (fndecl, 1, 0, prototype);
6592 /* Initialize the RTL code for the function. */
6593 init_function_start (fndecl, input_filename, lineno);
6595 /* Begin the statement tree for this function. */
6596 begin_stmt_tree (&DECL_SAVED_TREE (current_function_decl));
6598 /* If this is a nested function, save away the sizes of any
6599 variable-size types so that we can expand them when generating
6600 RTL. */
6601 if (context)
6603 tree t;
6605 DECL_LANG_SPECIFIC (fndecl)->pending_sizes
6606 = nreverse (get_pending_sizes ());
6607 for (t = DECL_LANG_SPECIFIC (fndecl)->pending_sizes;
6609 t = TREE_CHAIN (t))
6610 SAVE_EXPR_CONTEXT (TREE_VALUE (t)) = context;
6613 /* This function is being processed in whole-function mode. */
6614 cfun->x_whole_function_mode_p = 1;
6616 /* Even though we're inside a function body, we still don't want to
6617 call expand_expr to calculate the size of a variable-sized array.
6618 We haven't necessarily assigned RTL to all variables yet, so it's
6619 not safe to try to expand expressions involving them. */
6620 immediate_size_expand = 0;
6621 cfun->x_dont_save_pending_sizes_p = 1;
6623 warn_shadow = saved_warn_shadow;
6626 /* Finish up a function declaration and compile that function
6627 all the way to assembler language output. The free the storage
6628 for the function definition.
6630 This is called after parsing the body of the function definition.
6632 NESTED is nonzero if the function being finished is nested in another.
6633 CAN_DEFER_P is nonzero if the function may be deferred. */
6635 void
6636 finish_function (nested, can_defer_p)
6637 int nested;
6638 int can_defer_p;
6640 tree fndecl = current_function_decl;
6642 #if 0
6643 /* This caused &foo to be of type ptr-to-const-function which then
6644 got a warning when stored in a ptr-to-function variable. */
6645 TREE_READONLY (fndecl) = 1;
6646 #endif
6648 poplevel (1, 0, 1);
6649 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
6651 /* Must mark the RESULT_DECL as being in this function. */
6653 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
6655 if (MAIN_NAME_P (DECL_NAME (fndecl)) && flag_hosted)
6657 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl)))
6658 != integer_type_node)
6660 /* If warn_main is 1 (-Wmain) or 2 (-Wall), we have already warned.
6661 If warn_main is -1 (-Wno-main) we don't want to be warned. */
6662 if (! warn_main)
6663 pedwarn_with_decl (fndecl, "return type of `%s' is not `int'");
6665 else
6667 #ifdef DEFAULT_MAIN_RETURN
6668 /* Make it so that `main' always returns success by default. */
6669 DEFAULT_MAIN_RETURN;
6670 #else
6671 if (flag_isoc99)
6672 c_expand_return (integer_zero_node);
6673 #endif
6677 finish_fname_decls ();
6679 /* Tie off the statement tree for this function. */
6680 finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
6682 /* Complain if there's just no return statement. */
6683 if (warn_return_type
6684 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl))) != VOID_TYPE
6685 && !current_function_returns_value && !current_function_returns_null
6686 /* Don't complain if we abort. */
6687 && !current_function_returns_abnormally
6688 /* Don't warn for main(). */
6689 && !MAIN_NAME_P (DECL_NAME (fndecl))
6690 /* Or if they didn't actually specify a return type. */
6691 && !C_FUNCTION_IMPLICIT_INT (fndecl)
6692 /* Normally, with -Wreturn-type, flow will complain. Unless we're an
6693 inline function, as we might never be compiled separately. */
6694 && DECL_INLINE (fndecl))
6695 warning ("no return statement in function returning non-void");
6697 /* Clear out memory we no longer need. */
6698 free_after_parsing (cfun);
6699 /* Since we never call rest_of_compilation, we never clear
6700 CFUN. Do so explicitly. */
6701 free_after_compilation (cfun);
6702 cfun = NULL;
6704 if (! nested)
6706 /* Generate RTL for the body of this function. */
6707 c_expand_body (fndecl, nested, can_defer_p);
6709 /* Let the error reporting routines know that we're outside a
6710 function. For a nested function, this value is used in
6711 c_pop_function_context and then reset via pop_function_context. */
6712 current_function_decl = NULL;
6716 /* Generate the RTL for a deferred function FNDECL. */
6718 void
6719 c_expand_deferred_function (fndecl)
6720 tree fndecl;
6722 /* DECL_INLINE or DECL_RESULT might got cleared after the inline
6723 function was deferred, e.g. in duplicate_decls. */
6724 if (DECL_INLINE (fndecl) && DECL_RESULT (fndecl))
6726 c_expand_body (fndecl, 0, 0);
6727 current_function_decl = NULL;
6731 /* Generate the RTL for the body of FNDECL. If NESTED_P is non-zero,
6732 then we are already in the process of generating RTL for another
6733 function. If can_defer_p is zero, we won't attempt to defer the
6734 generation of RTL. */
6736 static void
6737 c_expand_body (fndecl, nested_p, can_defer_p)
6738 tree fndecl;
6739 int nested_p, can_defer_p;
6741 int uninlinable = 1;
6743 /* There's no reason to do any of the work here if we're only doing
6744 semantic analysis; this code just generates RTL. */
6745 if (flag_syntax_only)
6746 return;
6748 if (flag_inline_trees)
6750 /* First, cache whether the current function is inlinable. Some
6751 predicates depend on cfun and current_function_decl to
6752 function completely. */
6753 timevar_push (TV_INTEGRATION);
6754 uninlinable = ! tree_inlinable_function_p (fndecl);
6756 if (! uninlinable && can_defer_p
6757 /* Save function tree for inlining. Should return 0 if the
6758 language does not support function deferring or the
6759 function could not be deferred. */
6760 && defer_fn (fndecl))
6762 /* Let the back-end know that this function exists. */
6763 (*debug_hooks->deferred_inline_function) (fndecl);
6764 timevar_pop (TV_INTEGRATION);
6765 return;
6768 /* Then, inline any functions called in it. */
6769 optimize_inline_calls (fndecl);
6770 timevar_pop (TV_INTEGRATION);
6773 timevar_push (TV_EXPAND);
6775 if (nested_p)
6777 /* Make sure that we will evaluate variable-sized types involved
6778 in our function's type. */
6779 expand_pending_sizes (DECL_LANG_SPECIFIC (fndecl)->pending_sizes);
6780 /* Squirrel away our current state. */
6781 push_function_context ();
6784 /* Initialize the RTL code for the function. */
6785 current_function_decl = fndecl;
6786 input_filename = DECL_SOURCE_FILE (fndecl);
6787 init_function_start (fndecl, input_filename, DECL_SOURCE_LINE (fndecl));
6789 /* This function is being processed in whole-function mode. */
6790 cfun->x_whole_function_mode_p = 1;
6792 /* Even though we're inside a function body, we still don't want to
6793 call expand_expr to calculate the size of a variable-sized array.
6794 We haven't necessarily assigned RTL to all variables yet, so it's
6795 not safe to try to expand expressions involving them. */
6796 immediate_size_expand = 0;
6797 cfun->x_dont_save_pending_sizes_p = 1;
6799 /* If this is a varargs function, inform function.c. */
6800 if (c_function_varargs)
6801 mark_varargs ();
6803 /* Set up parameters and prepare for return, for the function. */
6804 expand_function_start (fndecl, 0);
6806 /* If this function is `main', emit a call to `__main'
6807 to run global initializers, etc. */
6808 if (DECL_NAME (fndecl)
6809 && MAIN_NAME_P (DECL_NAME (fndecl))
6810 && DECL_CONTEXT (fndecl) == NULL_TREE)
6811 expand_main_function ();
6813 /* Generate the RTL for this function. */
6814 expand_stmt (DECL_SAVED_TREE (fndecl));
6815 if (uninlinable)
6817 /* Allow the body of the function to be garbage collected. */
6818 DECL_SAVED_TREE (fndecl) = NULL_TREE;
6821 /* We hard-wired immediate_size_expand to zero above.
6822 expand_function_end will decrement this variable. So, we set the
6823 variable to one here, so that after the decrement it will remain
6824 zero. */
6825 immediate_size_expand = 1;
6827 /* Allow language dialects to perform special processing. */
6828 if (lang_expand_function_end)
6829 (*lang_expand_function_end) ();
6831 /* Generate rtl for function exit. */
6832 expand_function_end (input_filename, lineno, 0);
6834 /* If this is a nested function, protect the local variables in the stack
6835 above us from being collected while we're compiling this function. */
6836 if (nested_p)
6837 ggc_push_context ();
6839 /* Run the optimizers and output the assembler code for this function. */
6840 rest_of_compilation (fndecl);
6842 /* Undo the GC context switch. */
6843 if (nested_p)
6844 ggc_pop_context ();
6846 /* With just -W, complain only if function returns both with
6847 and without a value. */
6848 if (extra_warnings
6849 && current_function_returns_value
6850 && current_function_returns_null)
6851 warning ("this function may return with or without a value");
6853 /* If requested, warn about function definitions where the function will
6854 return a value (usually of some struct or union type) which itself will
6855 take up a lot of stack space. */
6857 if (warn_larger_than && !DECL_EXTERNAL (fndecl) && TREE_TYPE (fndecl))
6859 tree ret_type = TREE_TYPE (TREE_TYPE (fndecl));
6861 if (ret_type && TYPE_SIZE_UNIT (ret_type)
6862 && TREE_CODE (TYPE_SIZE_UNIT (ret_type)) == INTEGER_CST
6863 && 0 < compare_tree_int (TYPE_SIZE_UNIT (ret_type),
6864 larger_than_size))
6866 unsigned int size_as_int
6867 = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (ret_type));
6869 if (compare_tree_int (TYPE_SIZE_UNIT (ret_type), size_as_int) == 0)
6870 warning_with_decl (fndecl,
6871 "size of return value of `%s' is %u bytes",
6872 size_as_int);
6873 else
6874 warning_with_decl (fndecl,
6875 "size of return value of `%s' is larger than %d bytes",
6876 larger_than_size);
6880 if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested_p
6881 && ! flag_inline_trees)
6883 /* Stop pointing to the local nodes about to be freed.
6884 But DECL_INITIAL must remain nonzero so we know this
6885 was an actual function definition.
6886 For a nested function, this is done in c_pop_function_context.
6887 If rest_of_compilation set this to 0, leave it 0. */
6888 if (DECL_INITIAL (fndecl) != 0)
6889 DECL_INITIAL (fndecl) = error_mark_node;
6891 DECL_ARGUMENTS (fndecl) = 0;
6894 if (DECL_STATIC_CONSTRUCTOR (fndecl))
6896 if (targetm.have_ctors_dtors)
6897 (* targetm.asm_out.constructor) (XEXP (DECL_RTL (fndecl), 0),
6898 DEFAULT_INIT_PRIORITY);
6899 else
6900 static_ctors = tree_cons (NULL_TREE, fndecl, static_ctors);
6903 if (DECL_STATIC_DESTRUCTOR (fndecl))
6905 if (targetm.have_ctors_dtors)
6906 (* targetm.asm_out.destructor) (XEXP (DECL_RTL (fndecl), 0),
6907 DEFAULT_INIT_PRIORITY);
6908 else
6909 static_dtors = tree_cons (NULL_TREE, fndecl, static_dtors);
6912 if (nested_p)
6913 /* Return to the enclosing function. */
6914 pop_function_context ();
6915 timevar_pop (TV_EXPAND);
6918 /* Check the declarations given in a for-loop for satisfying the C99
6919 constraints. */
6920 void
6921 check_for_loop_decls ()
6923 tree t;
6925 if (!flag_isoc99)
6927 /* If we get here, declarations have been used in a for loop without
6928 the C99 for loop scope. This doesn't make much sense, so don't
6929 allow it. */
6930 error ("`for' loop initial declaration used outside C99 mode");
6931 return;
6933 /* C99 subclause 6.8.5 paragraph 3:
6935 [#3] The declaration part of a for statement shall only
6936 declare identifiers for objects having storage class auto or
6937 register.
6939 It isn't clear whether, in this sentence, "identifiers" binds to
6940 "shall only declare" or to "objects" - that is, whether all identifiers
6941 declared must be identifiers for objects, or whether the restriction
6942 only applies to those that are. (A question on this in comp.std.c
6943 in November 2000 received no answer.) We implement the strictest
6944 interpretation, to avoid creating an extension which later causes
6945 problems. */
6947 for (t = gettags (); t; t = TREE_CHAIN (t))
6949 if (TREE_PURPOSE (t) != 0)
6951 enum tree_code code = TREE_CODE (TREE_VALUE (t));
6953 if (code == RECORD_TYPE)
6954 error ("`struct %s' declared in `for' loop initial declaration",
6955 IDENTIFIER_POINTER (TREE_PURPOSE (t)));
6956 else if (code == UNION_TYPE)
6957 error ("`union %s' declared in `for' loop initial declaration",
6958 IDENTIFIER_POINTER (TREE_PURPOSE (t)));
6959 else
6960 error ("`enum %s' declared in `for' loop initial declaration",
6961 IDENTIFIER_POINTER (TREE_PURPOSE (t)));
6965 for (t = getdecls (); t; t = TREE_CHAIN (t))
6967 if (TREE_CODE (t) != VAR_DECL && DECL_NAME (t))
6968 error_with_decl (t, "declaration of non-variable `%s' in `for' loop initial declaration");
6969 else if (TREE_STATIC (t))
6970 error_with_decl (t, "declaration of static variable `%s' in `for' loop initial declaration");
6971 else if (DECL_EXTERNAL (t))
6972 error_with_decl (t, "declaration of `extern' variable `%s' in `for' loop initial declaration");
6976 /* Save and restore the variables in this file and elsewhere
6977 that keep track of the progress of compilation of the current function.
6978 Used for nested functions. */
6980 struct c_language_function
6982 struct language_function base;
6983 tree named_labels;
6984 tree shadowed_labels;
6985 int returns_value;
6986 int returns_null;
6987 int returns_abnormally;
6988 int warn_about_return_type;
6989 int extern_inline;
6990 struct binding_level *binding_level;
6993 /* Save and reinitialize the variables
6994 used during compilation of a C function. */
6996 void
6997 c_push_function_context (f)
6998 struct function *f;
7000 struct c_language_function *p;
7001 p = ((struct c_language_function *)
7002 xmalloc (sizeof (struct c_language_function)));
7003 f->language = (struct language_function *) p;
7005 p->base.x_stmt_tree = c_stmt_tree;
7006 p->base.x_scope_stmt_stack = c_scope_stmt_stack;
7007 p->named_labels = named_labels;
7008 p->shadowed_labels = shadowed_labels;
7009 p->returns_value = current_function_returns_value;
7010 p->returns_null = current_function_returns_null;
7011 p->returns_abnormally = current_function_returns_abnormally;
7012 p->warn_about_return_type = warn_about_return_type;
7013 p->extern_inline = current_extern_inline;
7014 p->binding_level = current_binding_level;
7017 /* Restore the variables used during compilation of a C function. */
7019 void
7020 c_pop_function_context (f)
7021 struct function *f;
7023 struct c_language_function *p
7024 = (struct c_language_function *) f->language;
7025 tree link;
7027 /* Bring back all the labels that were shadowed. */
7028 for (link = shadowed_labels; link; link = TREE_CHAIN (link))
7029 if (DECL_NAME (TREE_VALUE (link)) != 0)
7030 IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
7031 = TREE_VALUE (link);
7033 if (DECL_SAVED_INSNS (current_function_decl) == 0
7034 && DECL_SAVED_TREE (current_function_decl) == NULL_TREE)
7036 /* Stop pointing to the local nodes about to be freed. */
7037 /* But DECL_INITIAL must remain nonzero so we know this
7038 was an actual function definition. */
7039 DECL_INITIAL (current_function_decl) = error_mark_node;
7040 DECL_ARGUMENTS (current_function_decl) = 0;
7043 c_stmt_tree = p->base.x_stmt_tree;
7044 c_scope_stmt_stack = p->base.x_scope_stmt_stack;
7045 named_labels = p->named_labels;
7046 shadowed_labels = p->shadowed_labels;
7047 current_function_returns_value = p->returns_value;
7048 current_function_returns_null = p->returns_null;
7049 current_function_returns_abnormally = p->returns_abnormally;
7050 warn_about_return_type = p->warn_about_return_type;
7051 current_extern_inline = p->extern_inline;
7052 current_binding_level = p->binding_level;
7054 free (p);
7055 f->language = 0;
7058 /* Mark the language specific parts of F for GC. */
7060 void
7061 c_mark_function_context (f)
7062 struct function *f;
7064 struct c_language_function *p
7065 = (struct c_language_function *) f->language;
7067 if (p == 0)
7068 return;
7070 mark_c_language_function (&p->base);
7071 ggc_mark_tree (p->shadowed_labels);
7072 ggc_mark_tree (p->named_labels);
7073 mark_binding_level (&p->binding_level);
7076 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
7078 void
7079 c_dup_lang_specific_decl (decl)
7080 tree decl;
7082 struct lang_decl *ld;
7084 if (!DECL_LANG_SPECIFIC (decl))
7085 return;
7087 ld = (struct lang_decl *) ggc_alloc (sizeof (struct lang_decl));
7088 memcpy ((char *) ld, (char *) DECL_LANG_SPECIFIC (decl),
7089 sizeof (struct lang_decl));
7090 DECL_LANG_SPECIFIC (decl) = ld;
7093 /* Mark the language specific bits in T for GC. */
7095 void
7096 c_mark_tree (t)
7097 tree t;
7099 if (TREE_CODE (t) == IDENTIFIER_NODE)
7101 struct lang_identifier *i = (struct lang_identifier *) t;
7102 ggc_mark_tree (i->global_value);
7103 ggc_mark_tree (i->local_value);
7104 ggc_mark_tree (i->label_value);
7105 ggc_mark_tree (i->implicit_decl);
7106 ggc_mark_tree (i->error_locus);
7107 ggc_mark_tree (i->limbo_value);
7109 else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t))
7110 ggc_mark (TYPE_LANG_SPECIFIC (t));
7111 else if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
7113 ggc_mark (DECL_LANG_SPECIFIC (t));
7114 c_mark_lang_decl (&DECL_LANG_SPECIFIC (t)->base);
7115 ggc_mark_tree (DECL_LANG_SPECIFIC (t)->pending_sizes);
7119 /* The functions below are required for functionality of doing
7120 function at once processing in the C front end. Currently these
7121 functions are not called from anywhere in the C front end, but as
7122 these changes continue, that will change. */
7124 /* Returns non-zero if the current statement is a full expression,
7125 i.e. temporaries created during that statement should be destroyed
7126 at the end of the statement. */
7129 stmts_are_full_exprs_p ()
7131 return 0;
7134 /* Returns the stmt_tree (if any) to which statements are currently
7135 being added. If there is no active statement-tree, NULL is
7136 returned. */
7138 stmt_tree
7139 current_stmt_tree ()
7141 return &c_stmt_tree;
7144 /* Returns the stack of SCOPE_STMTs for the current function. */
7146 tree *
7147 current_scope_stmt_stack ()
7149 return &c_scope_stmt_stack;
7152 /* Nonzero if TYPE is an anonymous union or struct type. Always 0 in
7153 C. */
7156 anon_aggr_type_p (node)
7157 tree node ATTRIBUTE_UNUSED;
7159 return 0;
7162 /* Dummy function in place of callback used by C++. */
7164 void
7165 extract_interface_info ()
7169 /* Return a new COMPOUND_STMT, after adding it to the current
7170 statement tree. */
7172 tree
7173 c_begin_compound_stmt ()
7175 tree stmt;
7177 /* Create the COMPOUND_STMT. */
7178 stmt = add_stmt (build_stmt (COMPOUND_STMT, NULL_TREE));
7180 return stmt;
7183 /* Expand T (a DECL_STMT) if it declares an entity not handled by the
7184 common code. */
7186 void
7187 c_expand_decl_stmt (t)
7188 tree t;
7190 tree decl = DECL_STMT_DECL (t);
7192 /* Expand nested functions. */
7193 if (TREE_CODE (decl) == FUNCTION_DECL
7194 && DECL_CONTEXT (decl) == current_function_decl
7195 && DECL_SAVED_TREE (decl))
7196 c_expand_body (decl, /*nested_p=*/1, /*can_defer_p=*/0);
7199 /* Return the IDENTIFIER_GLOBAL_VALUE of T, for use in common code, since
7200 the definition of IDENTIFIER_GLOBAL_VALUE is different for C and C++. */
7202 tree
7203 identifier_global_value (t)
7204 tree t;
7206 return IDENTIFIER_GLOBAL_VALUE (t);
7209 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
7210 otherwise the name is found in ridpointers from RID_INDEX. */
7212 void
7213 record_builtin_type (rid_index, name, type)
7214 enum rid rid_index;
7215 const char *name;
7216 tree type;
7218 tree id;
7219 if (name == 0)
7220 id = ridpointers[(int) rid_index];
7221 else
7222 id = get_identifier (name);
7223 pushdecl (build_decl (TYPE_DECL, id, type));
7226 /* Build the void_list_node (void_type_node having been created). */
7227 tree
7228 build_void_list_node ()
7230 tree t = build_tree_list (NULL_TREE, void_type_node);
7231 return t;