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