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