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