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