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