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