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