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