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