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