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