|
|
1.1 root 1: /* Process declarations and variables for C compiler.
2: Copyright (C) 1988, 1992 Free Software Foundation, Inc.
3:
4: This file is part of GNU CC.
5:
6: GNU CC is free software; you can redistribute it and/or modify
7: it under the terms of the GNU General Public License as published by
8: the Free Software Foundation; either version 2, or (at your option)
9: any later version.
10:
11: GNU CC is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: GNU General Public License for more details.
15:
16: You should have received a copy of the GNU General Public License
17: along with GNU CC; see the file COPYING. If not, write to
18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19:
20:
21: /* Process declarations and symbol lookup for C front end.
22: Also constructs types; the standard scalar types at initialization,
23: and structure, union, array and enum types when they are declared. */
24:
25: /* ??? not all decl nodes are given the most useful possible
26: line numbers. For example, the CONST_DECLs for enum values. */
27:
28: #include "config.h"
29: #include "tree.h"
30: #include "flags.h"
31: #include "c-tree.h"
32: #include "c-lex.h"
33: #include <stdio.h>
34:
35: /* In grokdeclarator, distinguish syntactic contexts of declarators. */
36: enum decl_context
37: { NORMAL, /* Ordinary declaration */
38: FUNCDEF, /* Function definition */
39: PARM, /* Declaration of parm before function body */
40: FIELD, /* Declaration inside struct or union */
41: BITFIELD, /* Likewise but with specified width */
42: TYPENAME}; /* Typename (inside cast or sizeof) */
43:
44: #undef NULL
45: #define NULL 0
46:
47: #ifndef CHAR_TYPE_SIZE
48: #define CHAR_TYPE_SIZE BITS_PER_UNIT
49: #endif
50:
51: #ifndef SHORT_TYPE_SIZE
52: #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
53: #endif
54:
55: #ifndef INT_TYPE_SIZE
56: #define INT_TYPE_SIZE BITS_PER_WORD
57: #endif
58:
59: #ifndef LONG_TYPE_SIZE
60: #define LONG_TYPE_SIZE BITS_PER_WORD
61: #endif
62:
63: #ifndef LONG_LONG_TYPE_SIZE
64: #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
65: #endif
66:
67: #ifndef WCHAR_UNSIGNED
68: #define WCHAR_UNSIGNED 0
69: #endif
70:
71: #ifndef FLOAT_TYPE_SIZE
72: #define FLOAT_TYPE_SIZE BITS_PER_WORD
73: #endif
74:
75: #ifndef DOUBLE_TYPE_SIZE
76: #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
77: #endif
78:
79: #ifndef LONG_DOUBLE_TYPE_SIZE
80: #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
81: #endif
82:
83: /* We let tm.h override the types used here, to handle trivial differences
84: such as the choice of unsigned int or long unsigned int for size_t.
85: When machines start needing nontrivial differences in the size type,
86: it would be best to do something here to figure out automatically
87: from other information what type to use. */
88:
89: #ifndef SIZE_TYPE
90: #define SIZE_TYPE "long unsigned int"
91: #endif
92:
93: #ifndef PTRDIFF_TYPE
94: #define PTRDIFF_TYPE "long int"
95: #endif
96:
97: #ifndef WCHAR_TYPE
98: #define WCHAR_TYPE "int"
99: #endif
100:
101: /* a node which has tree code ERROR_MARK, and whose type is itself.
102: All erroneous expressions are replaced with this node. All functions
103: that accept nodes as arguments should avoid generating error messages
104: if this node is one of the arguments, since it is undesirable to get
105: multiple error messages from one error in the input. */
106:
107: tree error_mark_node;
108:
109: /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
110:
111: tree short_integer_type_node;
112: tree integer_type_node;
113: tree long_integer_type_node;
114: tree long_long_integer_type_node;
115:
116: tree short_unsigned_type_node;
117: tree unsigned_type_node;
118: tree long_unsigned_type_node;
119: tree long_long_unsigned_type_node;
120:
121: tree ptrdiff_type_node;
122:
123: tree unsigned_char_type_node;
124: tree signed_char_type_node;
125: tree char_type_node;
126: tree wchar_type_node;
127: tree signed_wchar_type_node;
128: tree unsigned_wchar_type_node;
129:
130: tree float_type_node;
131: tree double_type_node;
132: tree long_double_type_node;
133:
134: /* a VOID_TYPE node. */
135:
136: tree void_type_node;
137:
138: /* Nodes for types `void *' and `const void *'. */
139:
140: tree ptr_type_node, const_ptr_type_node;
141:
142: /* Nodes for types `char *' and `const char *'. */
143:
144: tree string_type_node, const_string_type_node;
145:
146: /* Type `char[256]' or something like it.
147: Used when an array of char is needed and the size is irrelevant. */
148:
149: tree char_array_type_node;
150:
151: /* Type `int[256]' or something like it.
152: Used when an array of int needed and the size is irrelevant. */
153:
154: tree int_array_type_node;
155:
156: /* Type `wchar_t[256]' or something like it.
157: Used when a wide string literal is created. */
158:
159: tree wchar_array_type_node;
160:
161: /* type `int ()' -- used for implicit declaration of functions. */
162:
163: tree default_function_type;
164:
165: /* function types `double (double)' and `double (double, double)', etc. */
166:
167: tree double_ftype_double, double_ftype_double_double;
168: tree int_ftype_int, long_ftype_long;
169:
170: /* Function type `void (void *, void *, int)' and similar ones */
171:
172: tree void_ftype_ptr_ptr_int, int_ftype_ptr_ptr_int, void_ftype_ptr_int_int;
173:
174: /* Function type `char *(char *, char *)' and similar ones */
175: tree string_ftype_ptr_ptr, int_ftype_string_string;
176:
177: /* Function type `size_t (const char *)' */
178: tree sizet_ftype_string;
179:
180: /* Function type `int (const void *, const void *, size_t)' */
181: tree int_ftype_cptr_cptr_sizet;
182:
183: /* Two expressions that are constants with value zero.
184: The first is of type `int', the second of type `void *'. */
185:
186: tree integer_zero_node;
187: tree null_pointer_node;
188:
189: /* A node for the integer constant 1. */
190:
191: tree integer_one_node;
192:
193: /* Nonzero if we have seen an invalid cross reference
194: to a struct, union, or enum, but not yet printed the message. */
195:
196: tree pending_invalid_xref;
197: /* File and line to appear in the eventual error message. */
198: char *pending_invalid_xref_file;
199: int pending_invalid_xref_line;
200:
201: /* While defining an enum type, this is 1 plus the last enumerator
202: constant value. */
203:
204: static tree enum_next_value;
205:
206: /* Parsing a function declarator leaves a list of parameter names
207: or a chain or parameter decls here. */
208:
209: static tree last_function_parms;
210:
211: /* Parsing a function declarator leaves here a chain of structure
212: and enum types declared in the parmlist. */
213:
214: static tree last_function_parm_tags;
215:
216: /* After parsing the declarator that starts a function definition,
217: `start_function' puts here the list of parameter names or chain of decls.
218: `store_parm_decls' finds it here. */
219:
220: static tree current_function_parms;
221:
222: /* Similar, for last_function_parm_tags. */
223: static tree current_function_parm_tags;
224:
225: /* A list (chain of TREE_LIST nodes) of all LABEL_DECLs in the function
226: that have names. Here so we can clear out their names' definitions
227: at the end of the function. */
228:
229: tree named_labels;
230:
231: /* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
232:
233: static tree shadowed_labels;
234:
235: /* Nonzero when store_parm_decls is called indicates a varargs function.
236: Value not meaningful after store_parm_decls. */
237:
238: static int c_function_varargs;
239:
240: /* The FUNCTION_DECL for the function currently being compiled,
241: or 0 if between functions. */
242: tree current_function_decl;
243:
244: /* Set to 0 at beginning of a function definition, set to 1 if
245: a return statement that specifies a return value is seen. */
246:
247: int current_function_returns_value;
248:
249: /* Set to 0 at beginning of a function definition, set to 1 if
250: a return statement with no argument is seen. */
251:
252: int current_function_returns_null;
253:
254: /* Set to nonzero by `grokdeclarator' for a function
255: whose return type is defaulted, if warnings for this are desired. */
256:
257: static int warn_about_return_type;
258:
259: /* Nonzero when starting a function delcared `extern inline'. */
260:
261: static int current_extern_inline;
262:
263: /* For each binding contour we allocate a binding_level structure
264: * which records the names defined in that contour.
265: * Contours include:
266: * 0) the global one
267: * 1) one for each function definition,
268: * where internal declarations of the parameters appear.
269: * 2) one for each compound statement,
270: * to record its declarations.
271: *
272: * The current meaning of a name can be found by searching the levels from
273: * the current one out to the global one.
274: */
275:
276: /* Note that the information in the `names' component of the global contour
277: is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
278:
279: struct binding_level
280: {
281: /* A chain of _DECL nodes for all variables, constants, functions,
282: and typedef types. These are in the reverse of the order supplied.
283: */
284: tree names;
285:
286: /* A list of structure, union and enum definitions,
287: * for looking up tag names.
288: * It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
289: * or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
290: * or ENUMERAL_TYPE node.
291: */
292: tree tags;
293:
294: /* For each level, a list of shadowed outer-level local definitions
295: to be restored when this level is popped.
296: Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
297: whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
298: tree shadowed;
299:
300: /* For each level (except not the global one),
301: a chain of BLOCK nodes for all the levels
302: that were entered and exited one level down. */
303: tree blocks;
304:
305: /* The binding level which this one is contained in (inherits from). */
306: struct binding_level *level_chain;
307:
308: /* Nonzero for the level that holds the parameters of a function. */
309: /* 2 for a definition, 1 for a declaration. */
310: char parm_flag;
311:
312: /* Nonzero if this level "doesn't exist" for tags. */
313: char tag_transparent;
314:
315: /* Nonzero if sublevels of this level "don't exist" for tags.
316: This is set in the parm level of a function definition
317: while reading the function body, so that the outermost block
318: of the function body will be tag-transparent. */
319: char subblocks_tag_transparent;
320:
321: /* Nonzero means make a BLOCK for this level regardless of all else. */
322: char keep;
323:
324: /* Nonzero means make a BLOCK if this level has any subblocks. */
325: char keep_if_subblocks;
326:
327: /* Number of decls in `names' that have incomplete
328: structure or union types. */
329: int n_incomplete;
330:
331: /* A list of decls giving the (reversed) specified order of parms,
332: not including any forward-decls in the parmlist.
333: This is so we can put the parms in proper order for assign_parms. */
334: tree parm_order;
335: };
336:
337: #define NULL_BINDING_LEVEL (struct binding_level *) NULL
338:
339: /* The binding level currently in effect. */
340:
341: static struct binding_level *current_binding_level;
342:
343: /* A chain of binding_level structures awaiting reuse. */
344:
345: static struct binding_level *free_binding_level;
346:
347: /* The outermost binding level, for names of file scope.
348: This is created when the compiler is started and exists
349: through the entire run. */
350:
351: static struct binding_level *global_binding_level;
352:
353: /* Binding level structures are initialized by copying this one. */
354:
355: static struct binding_level clear_binding_level
356: = {NULL, NULL, NULL, NULL, NULL, 0, 0, 0};
357:
358: /* Nonzero means unconditionally make a BLOCK for the next level pushed. */
359:
360: static int keep_next_level_flag;
361:
362: /* Nonzero means make a BLOCK for the next level pushed
363: if it has subblocks. */
364:
365: static int keep_next_if_subblocks;
366:
367: /* The chain of outer levels of label scopes.
368: This uses the same data structure used for binding levels,
369: but it works differently: each link in the chain records
370: saved values of named_labels and shadowed_labels for
371: a label binding level outside the current one. */
372:
373: static struct binding_level *label_level_chain;
374:
375: /* Forward declarations. */
376:
377: static tree grokparms (), grokdeclarator ();
378: tree pushdecl ();
379: static tree builtin_function ();
380:
381: static tree lookup_tag ();
382: static tree lookup_tag_reverse ();
383: static tree lookup_name_current_level ();
384: static char *redeclaration_error_message ();
385: static void layout_array_type ();
386:
387: /* C-specific option variables. */
388:
389: /* Nonzero means allow type mismatches in conditional expressions;
390: just make their values `void'. */
391:
392: int flag_cond_mismatch;
393:
394: /* Nonzero means give `double' the same size as `float'. */
395:
396: int flag_short_double;
397:
398: /* Nonzero means don't recognize the keyword `asm'. */
399:
400: int flag_no_asm;
401:
402: /* Nonzero means don't recognize the non-ANSI builtin functions. */
403:
404: int flag_no_builtin;
405:
406: /* Nonzero means do some things the same way PCC does. */
407:
408: int flag_traditional;
409:
410: /* Nonzero means to treat bitfields as signed unless they say `unsigned'. */
411:
412: int flag_signed_bitfields = 1;
413:
414: /* Nonzero means handle `#ident' directives. 0 means ignore them. */
415:
416: int flag_no_ident = 0;
417:
418: /* Nonzero means warn about implicit declarations. */
419:
420: int warn_implicit;
421:
422: /* Nonzero means give string constants the type `const char *'
423: to get extra warnings from them. These warnings will be too numerous
424: to be useful, except in thoroughly ANSIfied programs. */
425:
426: int warn_write_strings;
427:
428: /* Nonzero means warn about pointer casts that can drop a type qualifier
429: from the pointer target type. */
430:
431: int warn_cast_qual;
432:
433: /* Warn about traditional constructs whose meanings changed in ANSI C. */
434:
435: int warn_traditional;
436:
437: /* Nonzero means warn about sizeof(function) or addition/subtraction
438: of function pointers. */
439:
440: int warn_pointer_arith;
441:
442: /* Nonzero means warn for non-prototype function decls
443: or non-prototyped defs without previous prototype. */
444:
445: int warn_strict_prototypes;
446:
447: /* Nonzero means warn for any global function def
448: without separate previous prototype decl. */
449:
450: int warn_missing_prototypes;
451:
452: /* Nonzero means warn about multiple (redundant) decls for the same single
453: variable or function. */
454:
455: int warn_redundant_decls = 0;
456:
457: /* Nonzero means warn about extern declarations of objects not at
458: file-scope level and about *all* declarations of functions (whether
459: extern or static) not at file-scope level. Note that we exclude
460: implicit function declarations. To get warnings about those, use
461: -Wimplicit. */
462:
463: int warn_nested_externs = 0;
464:
465: /* Warn about *printf or *scanf format/argument anomalies. */
466:
467: int warn_format;
468:
469: /* Warn about a subscript that has type char. */
470:
471: int warn_char_subscripts = 0;
472:
473: /* Warn if a type conversion is done that might have confusing results. */
474:
475: int warn_conversion;
476:
477: /* Warn if adding () is suggested. */
478:
479: int warn_parentheses = 1;
480:
481: /* Nonzero means `$' can be in an identifier.
482: See cccp.c for reasons why this breaks some obscure ANSI C programs. */
483:
484: #ifndef DOLLARS_IN_IDENTIFIERS
485: #define DOLLARS_IN_IDENTIFIERS 1
486: #endif
487: int dollars_in_ident = DOLLARS_IN_IDENTIFIERS > 1;
488:
489: char *language_string = "GNU C";
490:
491: /* Decode the string P as a language-specific option for C.
492: Return 1 if it is recognized (and handle it);
493: return 0 if not recognized. */
494:
495: int
496: c_decode_option (p)
497: char *p;
498: {
499: if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional"))
500: {
501: flag_traditional = 1;
502: flag_writable_strings = 1;
503: #if DOLLARS_IN_IDENTIFIERS > 0
504: dollars_in_ident = 1;
505: #endif
506: }
507: else if (!strcmp (p, "-fnotraditional"))
508: ;
509: else if (!strcmp (p, "-fsigned-char"))
510: flag_signed_char = 1;
511: else if (!strcmp (p, "-funsigned-char"))
512: flag_signed_char = 0;
513: else if (!strcmp (p, "-fno-signed-char"))
514: flag_signed_char = 0;
515: else if (!strcmp (p, "-fno-unsigned-char"))
516: flag_signed_char = 1;
517: else if (!strcmp (p, "-fsigned-bitfields"))
518: flag_signed_bitfields = 1;
519: else if (!strcmp (p, "-funsigned-bitfields"))
520: flag_signed_bitfields = 0;
521: else if (!strcmp (p, "-fno-signed-bitfields"))
522: flag_signed_bitfields = 0;
523: else if (!strcmp (p, "-fno-unsigned-bitfields"))
524: flag_signed_bitfields = 1;
525: else if (!strcmp (p, "-fshort-enums"))
526: flag_short_enums = 1;
527: else if (!strcmp (p, "-fno-short-enums"))
528: flag_short_enums = 0;
529: else if (!strcmp (p, "-fcond-mismatch"))
530: flag_cond_mismatch = 1;
531: else if (!strcmp (p, "-fno-cond-mismatch"))
532: flag_cond_mismatch = 0;
533: else if (!strcmp (p, "-fshort-double"))
534: flag_short_double = 1;
535: else if (!strcmp (p, "-fno-short-double"))
536: flag_short_double = 0;
537: else if (!strcmp (p, "-fasm"))
538: flag_no_asm = 0;
539: else if (!strcmp (p, "-fno-asm"))
540: flag_no_asm = 1;
541: else if (!strcmp (p, "-fbuiltin"))
542: flag_no_builtin = 0;
543: else if (!strcmp (p, "-fno-builtin"))
544: flag_no_builtin = 1;
545: else if (!strcmp (p, "-fno-ident"))
546: flag_no_ident = 1;
547: else if (!strcmp (p, "-fident"))
548: flag_no_ident = 0;
549: else if (!strcmp (p, "-ansi"))
550: flag_no_asm = 1, flag_no_builtin = 1, dollars_in_ident = 0;
551: else if (!strcmp (p, "-Wimplicit"))
552: warn_implicit = 1;
553: else if (!strcmp (p, "-Wno-implicit"))
554: warn_implicit = 0;
555: else if (!strcmp (p, "-Wwrite-strings"))
556: warn_write_strings = 1;
557: else if (!strcmp (p, "-Wno-write-strings"))
558: warn_write_strings = 0;
559: else if (!strcmp (p, "-Wcast-qual"))
560: warn_cast_qual = 1;
561: else if (!strcmp (p, "-Wno-cast-qual"))
562: warn_cast_qual = 0;
563: else if (!strcmp (p, "-Wpointer-arith"))
564: warn_pointer_arith = 1;
565: else if (!strcmp (p, "-Wno-pointer-arith"))
566: warn_pointer_arith = 0;
567: else if (!strcmp (p, "-Wstrict-prototypes"))
568: warn_strict_prototypes = 1;
569: else if (!strcmp (p, "-Wno-strict-prototypes"))
570: warn_strict_prototypes = 0;
571: else if (!strcmp (p, "-Wmissing-prototypes"))
572: warn_missing_prototypes = 1;
573: else if (!strcmp (p, "-Wno-missing-prototypes"))
574: warn_missing_prototypes = 0;
575: else if (!strcmp (p, "-Wredundant-decls"))
576: warn_redundant_decls = 1;
577: else if (!strcmp (p, "-Wnoredundant-decls"))
578: warn_redundant_decls = 0;
579: else if (!strcmp (p, "-Wnested-externs"))
580: warn_nested_externs = 1;
581: else if (!strcmp (p, "-Wno-nested-externs"))
582: warn_nested_externs = 0;
583: else if (!strcmp (p, "-Wtraditional"))
584: warn_traditional = 1;
585: else if (!strcmp (p, "-Wno-traditional"))
586: warn_traditional = 0;
587: else if (!strcmp (p, "-Wformat"))
588: warn_format = 1;
589: else if (!strcmp (p, "-Wno-format"))
590: warn_format = 0;
591: else if (!strcmp (p, "-Wchar-subscripts"))
592: warn_char_subscripts = 1;
593: else if (!strcmp (p, "-Wno-char-subscripts"))
594: warn_char_subscripts = 0;
595: else if (!strcmp (p, "-Wconversion"))
596: warn_conversion = 1;
597: else if (!strcmp (p, "-Wno-conversion"))
598: warn_conversion = 0;
599: else if (!strcmp (p, "-Wparentheses"))
600: warn_parentheses = 1;
601: else if (!strcmp (p, "-Wno-parentheses"))
602: warn_parentheses = 0;
603: else if (!strcmp (p, "-Wcomment"))
604: ; /* cpp handles this one. */
605: else if (!strcmp (p, "-Wno-comment"))
606: ; /* cpp handles this one. */
607: else if (!strcmp (p, "-Wcomments"))
608: ; /* cpp handles this one. */
609: else if (!strcmp (p, "-Wno-comments"))
610: ; /* cpp handles this one. */
611: else if (!strcmp (p, "-Wtrigraphs"))
612: ; /* cpp handles this one. */
613: else if (!strcmp (p, "-Wno-trigraphs"))
614: ; /* cpp handles this one. */
615: else if (!strcmp (p, "-Wall"))
616: {
617: extra_warnings = 1;
618: warn_uninitialized = 1;
619: warn_implicit = 1;
620: warn_return_type = 1;
621: warn_unused = 1;
622: warn_switch = 1;
623: warn_format = 1;
624: warn_char_subscripts = 1;
625: }
626: else
627: return 0;
628:
629: return 1;
630: }
631:
632: /* Hooks for print_node. */
633:
634: void
635: print_lang_decl ()
636: {
637: }
638:
639: void
640: print_lang_type ()
641: {
642: }
643:
644: void
645: print_lang_identifier (file, node, indent)
646: FILE *file;
647: tree node;
648: int indent;
649: {
650: print_node (file, "global", IDENTIFIER_GLOBAL_VALUE (node), indent + 4);
651: print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
652: print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
653: print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
654: print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4);
655: }
656:
657: /* Create a new `struct binding_level'. */
658:
659: static
660: struct binding_level *
661: make_binding_level ()
662: {
663: /* NOSTRICT */
664: return (struct binding_level *) xmalloc (sizeof (struct binding_level));
665: }
666:
667: /* Nonzero if we are currently in the global binding level. */
668:
669: int
670: global_bindings_p ()
671: {
672: return current_binding_level == global_binding_level;
673: }
674:
675: void
676: keep_next_level ()
677: {
678: keep_next_level_flag = 1;
679: }
680:
681: /* Nonzero if the current level needs to have a BLOCK made. */
682:
683: int
684: kept_level_p ()
685: {
686: return ((current_binding_level->keep_if_subblocks
687: && current_binding_level->blocks != 0)
688: || current_binding_level->keep
689: || current_binding_level->names != 0
690: || (current_binding_level->tags != 0
691: && !current_binding_level->tag_transparent));
692: }
693:
694: /* Identify this binding level as a level of parameters.
695: DEFINITION_FLAG is 1 for a definition, 0 for a declaration. */
696:
697: void
698: declare_parm_level (definition_flag)
699: int definition_flag;
700: {
701: current_binding_level->parm_flag = 1 + definition_flag;
702: }
703:
704: /* Nonzero if currently making parm declarations. */
705:
706: int
707: in_parm_level_p ()
708: {
709: return current_binding_level->parm_flag;
710: }
711:
712: /* Enter a new binding level.
713: If TAG_TRANSPARENT is nonzero, do so only for the name space of variables,
714: not for that of tags. */
715:
716: void
717: pushlevel (tag_transparent)
718: int tag_transparent;
719: {
720: register struct binding_level *newlevel = NULL_BINDING_LEVEL;
721:
722: /* If this is the top level of a function,
723: just make sure that NAMED_LABELS is 0. */
724:
725: if (current_binding_level == global_binding_level)
726: {
727: named_labels = 0;
728: }
729:
730: /* Reuse or create a struct for this binding level. */
731:
732: if (free_binding_level)
733: {
734: newlevel = free_binding_level;
735: free_binding_level = free_binding_level->level_chain;
736: }
737: else
738: {
739: newlevel = make_binding_level ();
740: }
741:
742: /* Add this level to the front of the chain (stack) of levels that
743: are active. */
744:
745: *newlevel = clear_binding_level;
746: newlevel->tag_transparent
747: = (tag_transparent
748: || (current_binding_level
749: ? current_binding_level->subblocks_tag_transparent
750: : 0));
751: newlevel->level_chain = current_binding_level;
752: current_binding_level = newlevel;
753: newlevel->keep = keep_next_level_flag;
754: keep_next_level_flag = 0;
755: newlevel->keep_if_subblocks = keep_next_if_subblocks;
756: keep_next_if_subblocks = 0;
757: }
758:
759: /* Exit a binding level.
760: Pop the level off, and restore the state of the identifier-decl mappings
761: that were in effect when this level was entered.
762:
763: If KEEP is nonzero, this level had explicit declarations, so
764: and create a "block" (a BLOCK node) for the level
765: to record its declarations and subblocks for symbol table output.
766:
767: If FUNCTIONBODY is nonzero, this level is the body of a function,
768: so create a block as if KEEP were set and also clear out all
769: label names.
770:
771: If REVERSE is nonzero, reverse the order of decls before putting
772: them into the BLOCK. */
773:
774: tree
775: poplevel (keep, reverse, functionbody)
776: int keep;
777: int reverse;
778: int functionbody;
779: {
780: register tree link;
781: /* The chain of decls was accumulated in reverse order.
782: Put it into forward order, just for cleanliness. */
783: tree decls;
784: tree tags = current_binding_level->tags;
785: tree subblocks = current_binding_level->blocks;
786: tree block = 0;
787: tree decl;
788:
789: keep |= current_binding_level->keep;
790:
791: /* This warning is turned off because it causes warnings for
792: declarations like `extern struct foo *x'. */
793: #if 0
794: /* Warn about incomplete structure types in this level. */
795: for (link = tags; link; link = TREE_CHAIN (link))
796: if (TYPE_SIZE (TREE_VALUE (link)) == 0)
797: {
798: tree type = TREE_VALUE (link);
799: char *errmsg;
800: switch (TREE_CODE (type))
801: {
802: case RECORD_TYPE:
803: errmsg = "`struct %s' incomplete in scope ending here";
804: break;
805: case UNION_TYPE:
806: errmsg = "`union %s' incomplete in scope ending here";
807: break;
808: case ENUMERAL_TYPE:
809: errmsg = "`enum %s' incomplete in scope ending here";
810: break;
811: }
812: if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
813: error (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
814: else
815: /* If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. */
816: error (errmsg, IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
817: }
818: #endif /* 0 */
819:
820: /* Get the decls in the order they were written.
821: Usually current_binding_level->names is in reverse order.
822: But parameter decls were previously put in forward order. */
823:
824: if (reverse)
825: current_binding_level->names
826: = decls = nreverse (current_binding_level->names);
827: else
828: decls = current_binding_level->names;
829:
830: /* Output any nested inline functions within this block
831: if they weren't already output. */
832:
833: for (decl = decls; decl; decl = TREE_CHAIN (decl))
834: if (TREE_CODE (decl) == FUNCTION_DECL
835: && ! TREE_ASM_WRITTEN (decl)
836: && DECL_INITIAL (decl) != 0
837: && TREE_ADDRESSABLE (decl))
838: output_inline_function (decl);
839:
840: /* If there were any declarations or structure tags in that level,
841: or if this level is a function body,
842: create a BLOCK to record them for the life of this function. */
843:
844: if (keep || functionbody
845: || (current_binding_level->keep_if_subblocks && subblocks != 0))
846: block = build_block (keep ? decls : 0, keep ? tags : 0,
847: subblocks, 0, 0);
848:
849: /* In each subblock, record that this is its superior. */
850:
851: for (link = subblocks; link; link = TREE_CHAIN (link))
852: BLOCK_SUPERCONTEXT (link) = block;
853:
854: /* Clear out the meanings of the local variables of this level. */
855:
856: for (link = decls; link; link = TREE_CHAIN (link))
857: {
858: if (DECL_NAME (link) != 0)
859: {
860: /* If the ident. was used or addressed via a local extern decl,
861: don't forget that fact. */
862: if (TREE_EXTERNAL (link))
863: {
864: if (TREE_USED (link))
865: TREE_USED (DECL_NAME (link)) = 1;
866: if (TREE_ADDRESSABLE (link))
867: TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (link)) = 1;
868: }
869: IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
870: }
871: }
872:
873: /* Restore all name-meanings of the outer levels
874: that were shadowed by this level. */
875:
876: for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
877: IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
878:
879: /* If the level being exited is the top level of a function,
880: check over all the labels, and clear out the current
881: (function local) meanings of their names. */
882:
883: if (functionbody)
884: {
885: /* If this is the top level block of a function,
886: the vars are the function's parameters.
887: Don't leave them in the BLOCK because they are
888: found in the FUNCTION_DECL instead. */
889:
890: BLOCK_VARS (block) = 0;
891:
892: /* Clear out the definitions of all label names,
893: since their scopes end here,
894: and add them to BLOCK_VARS. */
895:
896: for (link = named_labels; link; link = TREE_CHAIN (link))
897: {
898: register tree label = TREE_VALUE (link);
899:
900: if (DECL_INITIAL (label) == 0)
901: {
902: error_with_decl (label, "label `%s' used but not defined");
903: /* Avoid crashing later. */
904: define_label (input_filename, lineno,
905: DECL_NAME (label));
906: }
907: else if (warn_unused && !TREE_USED (label))
908: warning_with_decl (label, "label `%s' defined but not used");
909: IDENTIFIER_LABEL_VALUE (DECL_NAME (label)) = 0;
910:
911: /* Put the labels into the "variables" of the
912: top-level block, so debugger can see them. */
913: TREE_CHAIN (label) = BLOCK_VARS (block);
914: BLOCK_VARS (block) = label;
915: }
916: }
917:
918: /* Pop the current level, and free the structure for reuse. */
919:
920: {
921: register struct binding_level *level = current_binding_level;
922: current_binding_level = current_binding_level->level_chain;
923:
924: level->level_chain = free_binding_level;
925: free_binding_level = level;
926: }
927:
928: /* Dispose of the block that we just made inside some higher level. */
929: if (functionbody)
930: DECL_INITIAL (current_function_decl) = block;
931: else if (block)
932: current_binding_level->blocks
933: = chainon (current_binding_level->blocks, block);
934: /* If we did not make a block for the level just exited,
935: any blocks made for inner levels
936: (since they cannot be recorded as subblocks in that level)
937: must be carried forward so they will later become subblocks
938: of something else. */
939: else if (subblocks)
940: current_binding_level->blocks
941: = chainon (current_binding_level->blocks, subblocks);
942:
943: /* Set the TYPE_CONTEXTs for all of the tagged types belonging to this
944: binding contour so that they point to the appropriate construct, i.e.
945: either to the current FUNCTION_DECL node, or else to the BLOCK node
946: we just constructed.
947:
948: Note that for tagged types whose scope is just the formal parameter
949: list for some function type specification, we can't properly set
950: their TYPE_CONTEXTs here, because we don't have a pointer to the
951: appropriate FUNCTION_TYPE node readily available to us. For those
952: cases, the TYPE_CONTEXTs of the relevant tagged type nodes get set
953: in `grokdeclarator' as soon as we have created the FUNCTION_TYPE
954: node which will represent the "scope" for these "parameter list local"
955: tagged types.
956: */
957:
958: if (functionbody)
959: for (link = tags; link; link = TREE_CHAIN (link))
960: TYPE_CONTEXT (TREE_VALUE (link)) = current_function_decl;
961: else if (block)
962: for (link = tags; link; link = TREE_CHAIN (link))
963: TYPE_CONTEXT (TREE_VALUE (link)) = block;
964:
965: if (block)
966: TREE_USED (block) = 1;
967: return block;
968: }
969:
970: void
971: push_label_level ()
972: {
973: register struct binding_level *newlevel;
974:
975: /* Reuse or create a struct for this binding level. */
976:
977: if (free_binding_level)
978: {
979: newlevel = free_binding_level;
980: free_binding_level = free_binding_level->level_chain;
981: }
982: else
983: {
984: newlevel = make_binding_level ();
985: }
986:
987: /* Add this level to the front of the chain (stack) of label levels. */
988:
989: newlevel->level_chain = label_level_chain;
990: label_level_chain = newlevel;
991:
992: newlevel->names = named_labels;
993: newlevel->shadowed = shadowed_labels;
994: named_labels = 0;
995: shadowed_labels = 0;
996: }
997:
998: void
999: pop_label_level ()
1000: {
1001: register struct binding_level *level = label_level_chain;
1002: tree link, prev;
1003:
1004: /* Clear out the definitions of the declared labels in this level.
1005: Leave in the list any ordinary, non-declared labels. */
1006: for (link = named_labels, prev = 0; link;)
1007: {
1008: if (C_DECLARED_LABEL_FLAG (TREE_VALUE (link)))
1009: {
1010: if (DECL_SOURCE_LINE (TREE_VALUE (link)) == 0)
1011: {
1012: error_with_decl ("label `%s' used but not defined",
1013: TREE_VALUE (link));
1014: /* Avoid crashing later. */
1015: define_label (input_filename, lineno,
1016: DECL_NAME (TREE_VALUE (link)));
1017: }
1018: else if (warn_unused && !TREE_USED (TREE_VALUE (link)))
1019: warning_with_decl (TREE_VALUE (link),
1020: "label `%s' defined but not used");
1021: IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link))) = 0;
1022:
1023: /* Delete this element from the list. */
1024: link = TREE_CHAIN (link);
1025: if (prev)
1026: TREE_CHAIN (prev) = link;
1027: else
1028: named_labels = link;
1029: }
1030: else
1031: {
1032: prev = link;
1033: link = TREE_CHAIN (link);
1034: }
1035: }
1036:
1037: /* Bring back all the labels that were shadowed. */
1038: for (link = shadowed_labels; link; link = TREE_CHAIN (link))
1039: if (DECL_NAME (TREE_VALUE (link)) != 0)
1040: IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
1041: = TREE_VALUE (link);
1042:
1043: named_labels = chainon (named_labels, level->names);
1044: shadowed_labels = level->shadowed;
1045:
1046: /* Pop the current level, and free the structure for reuse. */
1047: label_level_chain = label_level_chain->level_chain;
1048: level->level_chain = free_binding_level;
1049: free_binding_level = level;
1050: }
1051:
1052: /* Push a definition or a declaration of struct, union or enum tag "name".
1053: "type" should be the type node.
1054: We assume that the tag "name" is not already defined.
1055:
1056: Note that the definition may really be just a forward reference.
1057: In that case, the TYPE_SIZE will be zero. */
1058:
1059: void
1060: pushtag (name, type)
1061: tree name, type;
1062: {
1063: register struct binding_level *b;
1064:
1065: /* Find the proper binding level for this type tag. */
1066:
1067: for (b = current_binding_level; b->tag_transparent; b = b->level_chain)
1068: continue;
1069:
1070: if (name)
1071: {
1072: /* Record the identifier as the type's name if it has none. */
1073:
1074: if (TYPE_NAME (type) == 0)
1075: TYPE_NAME (type) = name;
1076:
1077: if (b == global_binding_level)
1078: b->tags = perm_tree_cons (name, type, b->tags);
1079: else
1080: b->tags = saveable_tree_cons (name, type, b->tags);
1081: }
1082:
1083: /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1084: tagged type we just added to the current binding level. This fake
1085: NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1086: to output a a representation of a tagged type, and it also gives
1087: us a convenient place to record the "scope start" address for the
1088: tagged type. */
1089:
1090: TYPE_STUB_DECL (type) = pushdecl (build_decl (TYPE_DECL, NULL, type));
1091: }
1092:
1093: /* Handle when a new declaration NEWDECL
1094: has the same name as an old one OLDDECL
1095: in the same binding contour.
1096: Prints an error message if appropriate.
1097:
1098: If safely possible, alter OLDDECL to look like NEWDECL, and return 1.
1099: Otherwise, return 0. */
1100:
1101: static int
1102: duplicate_decls (newdecl, olddecl)
1103: register tree newdecl, olddecl;
1104: {
1105: int types_match = comptypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1106: int new_is_definition = (TREE_CODE (newdecl) == FUNCTION_DECL
1107: && DECL_INITIAL (newdecl) != 0);
1108:
1109: if (TREE_CODE (TREE_TYPE (newdecl)) == ERROR_MARK
1110: || TREE_CODE (TREE_TYPE (olddecl)) == ERROR_MARK)
1111: types_match = 0;
1112:
1113: /* New decl is completely inconsistent with the old one =>
1114: tell caller to replace the old one.
1115: This is always an error except in the case of shadowing a builtin. */
1116: if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1117: {
1118: if (TREE_CODE (olddecl) == FUNCTION_DECL
1119: && DECL_BUILT_IN (olddecl))
1120: {
1121: /* If you declare a built-in function name as static, the
1122: built-in definition is overridden,
1123: but optionally warn this was a bad choice of name. */
1124: if (!TREE_PUBLIC (newdecl))
1125: {
1126: if (warn_shadow)
1127: warning_with_decl (newdecl, "shadowing built-in function `%s'");
1128: }
1129: /* Likewise, if the built-in is not ansi, then programs can
1130: overide it even globally without an error. */
1131: else if (DECL_BUILT_IN_NONANSI (olddecl))
1132: warning_with_decl (newdecl,
1133: "built-in function `%s' declared as non-function");
1134: else
1135: error_with_decl (newdecl,
1136: "built-in function `%s' declared as non-function");
1137: }
1138: else if (TREE_CODE (olddecl) == FUNCTION_DECL
1139: && DECL_BUILT_IN_NONANSI (olddecl))
1140: {
1141: /* If overriding decl is static,
1142: optionally warn this was a bad choice of name. */
1143: if (!TREE_PUBLIC (newdecl))
1144: {
1145: if (warn_shadow)
1146: warning_with_decl (newdecl, "shadowing library function `%s'");
1147: }
1148: /* Otherwise, always warn. */
1149: else
1150: warning_with_decl (newdecl,
1151: "library function `%s' declared as non-function");
1152: }
1153: else
1154: {
1155: error_with_decl (newdecl, "`%s' redeclared as different kind of symbol");
1156: error_with_decl (olddecl, "previous declaration of `%s'");
1157: }
1158:
1159: return 0;
1160: }
1161:
1162: /* For real parm decl following a forward decl,
1163: return 1 so old decl will be reused. */
1164: if (types_match && TREE_CODE (newdecl) == PARM_DECL
1165: && TREE_ASM_WRITTEN (olddecl) && ! TREE_ASM_WRITTEN (newdecl))
1166: return 1;
1167:
1168: /* The new declaration is the same kind of object as the old one.
1169: The declarations may partially match. Print warnings if they don't
1170: match enough. Ultimately, copy most of the information from the new
1171: decl to the old one, and keep using the old one. */
1172:
1173: if (flag_traditional && TREE_CODE (newdecl) == FUNCTION_DECL
1174: && IDENTIFIER_IMPLICIT_DECL (DECL_NAME (newdecl)) == olddecl
1175: && DECL_INITIAL (olddecl) == 0)
1176: /* If -traditional, avoid error for redeclaring fcn
1177: after implicit decl. */
1178: ;
1179: else if (TREE_CODE (olddecl) == FUNCTION_DECL
1180: && DECL_BUILT_IN (olddecl))
1181: {
1182: if (!TREE_PUBLIC (newdecl))
1183: {
1184: /* If you declare a built-in function name as static, the
1185: built-in definition is overridden,
1186: but optionally warn this was a bad choice of name. */
1187: if (warn_shadow)
1188: warning_with_decl (newdecl, "shadowing built-in function `%s'");
1189: /* Discard the old built-in function. */
1190: return 0;
1191: }
1192: else if (!types_match)
1193: warning_with_decl (newdecl, "conflicting types for built-in function `%s'");
1194: }
1195: else if (TREE_CODE (olddecl) == FUNCTION_DECL
1196: && DECL_BUILT_IN_NONANSI (olddecl))
1197: {
1198: if (!TREE_PUBLIC (newdecl))
1199: {
1200: /* If you declare a built-in function name as static, the
1201: built-in definition is overridden,
1202: but optionally warn this was a bad choice of name. */
1203: if (warn_shadow)
1204: warning_with_decl (newdecl, "shadowing library function `%s'");
1205: /* Discard the old built-in function. */
1206: return 0;
1207: }
1208: else if (!types_match)
1209: warning_with_decl (newdecl, "conflicting types for library function `%s'");
1210: }
1211: else if (!types_match
1212: /* Permit char *foo (int, ...); followed by char *foo ();
1213: if not pedantic. */
1214: && ! (TREE_CODE (olddecl) == FUNCTION_DECL
1215: && ! pedantic
1216: /* Return types must still match. */
1217: && comptypes (TREE_TYPE (TREE_TYPE (olddecl)),
1218: TREE_TYPE (TREE_TYPE (newdecl)))
1219: && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) == 0))
1220: {
1221: error_with_decl (newdecl, "conflicting types for `%s'");
1222: /* Check for function type mismatch
1223: involving an empty arglist vs a nonempty one. */
1224: if (TREE_CODE (olddecl) == FUNCTION_DECL
1225: && comptypes (TREE_TYPE (TREE_TYPE (olddecl)),
1226: TREE_TYPE (TREE_TYPE (newdecl)))
1227: && ((TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == 0
1228: && DECL_INITIAL (olddecl) == 0)
1229: ||
1230: (TYPE_ARG_TYPES (TREE_TYPE (newdecl)) == 0
1231: && DECL_INITIAL (newdecl) == 0)))
1232: {
1233: /* Classify the problem further. */
1234: register tree t = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1235: if (t == 0)
1236: t = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1237: for (; t; t = TREE_CHAIN (t))
1238: {
1239: register tree type = TREE_VALUE (t);
1240:
1241: if (TREE_CHAIN (t) == 0 && type != void_type_node)
1242: {
1243: error ("A parameter list with an ellipsis can't match");
1244: error ("an empty parameter name list declaration.");
1245: break;
1246: }
1247:
1248: if (type == float_type_node
1249: || (TREE_CODE (type) == INTEGER_TYPE
1250: && (TYPE_PRECISION (type)
1251: < TYPE_PRECISION (integer_type_node))))
1252: {
1253: error ("An argument type that has a default promotion");
1254: error ("can't match an empty parameter name list declaration.");
1255: break;
1256: }
1257: }
1258: }
1259: error_with_decl (olddecl, "previous declaration of `%s'");
1260: }
1261: else
1262: {
1263: char *errmsg = redeclaration_error_message (newdecl, olddecl);
1264: if (errmsg)
1265: {
1266: error_with_decl (newdecl, errmsg);
1267: error_with_decl (olddecl,
1268: "`%s' previously declared here");
1269: }
1270: else if (TREE_CODE (olddecl) == FUNCTION_DECL
1271: && DECL_INITIAL (olddecl) != 0
1272: && TYPE_ARG_TYPES (TREE_TYPE (olddecl)) == 0
1273: && TYPE_ARG_TYPES (TREE_TYPE (newdecl)) != 0)
1274: {
1275: register tree type, parm;
1276: register int nargs;
1277: /* Prototype decl follows defn w/o prototype. */
1278:
1279: for (parm = TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (olddecl)),
1280: type = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1281: nargs = 1;
1282: (TREE_VALUE (parm) != void_type_node
1283: || TREE_VALUE (type) != void_type_node);
1284: parm = TREE_CHAIN (parm), type = TREE_CHAIN (type), nargs++)
1285: {
1286: if (TREE_VALUE (parm) == void_type_node
1287: || TREE_VALUE (type) == void_type_node)
1288: {
1289: errmsg = "prototype for `%s' follows and number of arguments";
1290: break;
1291: }
1292: /* Type for passing arg must be consistent
1293: with that declared for the arg. */
1294: if (! comptypes (TREE_VALUE (parm), TREE_VALUE (type))
1295: /* If -traditional, allow `unsigned int' instead of `int'
1296: in the prototype. */
1297: && (! (flag_traditional
1298: && TREE_VALUE (parm) == integer_type_node
1299: && TREE_VALUE (type) == unsigned_type_node)))
1300: {
1301: errmsg = "prototype for `%s' follows and argument %d";
1302: break;
1303: }
1304: }
1305: if (errmsg)
1306: {
1307: error_with_decl (newdecl, errmsg, nargs);
1308: error_with_decl (olddecl,
1309: "doesn't match non-prototype definition here");
1310: }
1311: else
1312: {
1313: warning_with_decl (newdecl, "prototype for `%s' follows");
1314: warning_with_decl (olddecl, "non-prototype definition here");
1315: }
1316: }
1317: /* Warn if function is now inline
1318: but was previously declared not inline and has been called. */
1319: else
1320: {
1321: if (TREE_CODE (olddecl) == FUNCTION_DECL
1322: && ! TREE_INLINE (olddecl) && TREE_INLINE (newdecl)
1323: && TREE_USED (olddecl))
1324: warning_with_decl (newdecl,
1325: "`%s' declared inline after being called");
1326: if (TREE_CODE (olddecl) == FUNCTION_DECL
1327: && TREE_INLINE (olddecl) != TREE_INLINE (newdecl))
1328: warning_with_decl (newdecl,
1329: "`%s' declarations disagree about `inline'");
1330: /* It is nice to warn when a function is declared
1331: global first and then static. */
1332: if (TREE_CODE (olddecl) == FUNCTION_DECL
1333: && TREE_PUBLIC (olddecl)
1334: && !TREE_PUBLIC (newdecl))
1335: warning_with_decl (newdecl, "static declaration for `%s' follows non-static");
1336:
1337: /* These bits are logically part of the type. */
1338: if (pedantic
1339: && (TREE_READONLY (newdecl) != TREE_READONLY (olddecl)
1340: || TREE_THIS_VOLATILE (newdecl) != TREE_THIS_VOLATILE (olddecl)))
1341: pedwarn_with_decl (newdecl, "type qualifiers for `%s' conflict with previous decl");
1342: }
1343: }
1344:
1345: /* Copy all the DECL_... slots specified in the new decl
1346: except for any that we copy here from the old type. */
1347:
1348: if (types_match)
1349: {
1350: tree oldtype = TREE_TYPE (olddecl);
1351: /* Merge the data types specified in the two decls. */
1352: if (TREE_CODE (newdecl) != FUNCTION_DECL || !DECL_BUILT_IN (olddecl))
1353: TREE_TYPE (newdecl)
1354: = TREE_TYPE (olddecl)
1355: = common_type (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1356:
1357: /* Lay the type out, unless already done. */
1358: if (oldtype != TREE_TYPE (newdecl))
1359: {
1360: if (TREE_TYPE (newdecl) != error_mark_node)
1361: layout_type (TREE_TYPE (newdecl));
1362: if (TREE_CODE (newdecl) != FUNCTION_DECL
1363: && TREE_CODE (newdecl) != TYPE_DECL
1364: && TREE_CODE (newdecl) != CONST_DECL)
1365: layout_decl (newdecl, 0);
1366: }
1367: else
1368: {
1369: /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1370: DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
1371: if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
1372: DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
1373: }
1374:
1375: /* Merge the type qualifiers. */
1376: if (DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
1377: && !TREE_THIS_VOLATILE (newdecl))
1378: TREE_THIS_VOLATILE (olddecl) = 0;
1379: if (TREE_READONLY (newdecl))
1380: TREE_READONLY (olddecl) = 1;
1381: if (TREE_THIS_VOLATILE (newdecl))
1382: TREE_THIS_VOLATILE (olddecl) = 1;
1383:
1384: /* Keep source location of definition rather than declaration. */
1385: if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0)
1386: {
1387: DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl);
1388: DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl);
1389: }
1390:
1391: /* Merge the initialization information. */
1392: if (DECL_INITIAL (newdecl) == 0)
1393: DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1394: /* Keep the old rtl since we can safely use it. */
1395: DECL_RTL (newdecl) = DECL_RTL (olddecl);
1396: }
1397: /* If cannot merge, then use the new type and qualifiers,
1398: and don't preserve the old rtl. */
1399: else
1400: {
1401: TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1402: TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1403: TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1404: TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1405: }
1406:
1407: /* Merge the storage class information. */
1408: /* For functions, static overrides non-static. */
1409: if (TREE_CODE (newdecl) == FUNCTION_DECL)
1410: {
1411: TREE_PUBLIC (newdecl) &= TREE_PUBLIC (olddecl);
1412: /* This is since we don't automatically
1413: copy the attributes of NEWDECL into OLDDECL. */
1414: TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1415: /* If this clears `static', clear it in the identifier too. */
1416: if (! TREE_PUBLIC (olddecl))
1417: TREE_PUBLIC (DECL_NAME (olddecl)) = 0;
1418: }
1419: if (TREE_EXTERNAL (newdecl))
1420: {
1421: TREE_STATIC (newdecl) = TREE_STATIC (olddecl);
1422: TREE_EXTERNAL (newdecl) = TREE_EXTERNAL (olddecl);
1423: /* An extern decl does not override previous storage class. */
1424: TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1425: }
1426: else
1427: {
1428: TREE_STATIC (olddecl) = TREE_STATIC (newdecl);
1429: TREE_EXTERNAL (olddecl) = 0;
1430: TREE_PUBLIC (olddecl) = TREE_PUBLIC (newdecl);
1431: }
1432: /* If either decl says `inline', this fn is inline,
1433: unless its definition was passed already. */
1434: if (TREE_INLINE (newdecl) && DECL_INITIAL (olddecl) == 0)
1435: TREE_INLINE (olddecl) = 1;
1436:
1437: /* Get rid of any built-in function if new arg types don't match it
1438: or if we have a function definition. */
1439: if (TREE_CODE (newdecl) == FUNCTION_DECL
1440: && DECL_BUILT_IN (olddecl)
1441: && (!types_match || new_is_definition))
1442: {
1443: TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1444: DECL_BUILT_IN (olddecl) = 0;
1445: }
1446:
1447: /* If redeclaring a builtin function, and not a definition,
1448: it stays built in.
1449: Also preserve various other info from the definition. */
1450: if (TREE_CODE (newdecl) == FUNCTION_DECL && !new_is_definition)
1451: {
1452: if (DECL_BUILT_IN (olddecl))
1453: {
1454: DECL_BUILT_IN (newdecl) = 1;
1455: DECL_SET_FUNCTION_CODE (newdecl, DECL_FUNCTION_CODE (olddecl));
1456: }
1457: else
1458: DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
1459:
1460: DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
1461: DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1462: DECL_SAVED_INSNS (newdecl) = DECL_SAVED_INSNS (olddecl);
1463: DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
1464: }
1465:
1466: bcopy ((char *) newdecl + sizeof (struct tree_common),
1467: (char *) olddecl + sizeof (struct tree_common),
1468: sizeof (struct tree_decl) - sizeof (struct tree_common));
1469:
1470: return 1;
1471: }
1472:
1473: /* Record a decl-node X as belonging to the current lexical scope.
1474: Check for errors (such as an incompatible declaration for the same
1475: name already seen in the same scope).
1476:
1477: Returns either X or an old decl for the same name.
1478: If an old decl is returned, it may have been smashed
1479: to agree with what X says. */
1480:
1481: tree
1482: pushdecl (x)
1483: tree x;
1484: {
1485: register tree t;
1486: register tree name = DECL_NAME (x);
1487: register struct binding_level *b = current_binding_level;
1488:
1489: DECL_CONTEXT (x) = current_function_decl;
1490: /* A local declaration for a function doesn't constitute nesting. */
1491: if (TREE_CODE (x) == FUNCTION_DECL && DECL_INITIAL (x) == 0)
1492: DECL_CONTEXT (x) = 0;
1493:
1494: if (warn_nested_externs && TREE_EXTERNAL (x) && b != global_binding_level
1495: && x != IDENTIFIER_IMPLICIT_DECL (name))
1496: warning ("nested extern declaration of `%s'", IDENTIFIER_POINTER (name));
1497:
1498: if (name)
1499: {
1500: char *file;
1501: int line;
1502:
1503: t = lookup_name_current_level (name);
1504: if (t != 0 && t == error_mark_node)
1505: /* error_mark_node is 0 for a while during initialization! */
1506: {
1507: t = 0;
1508: error_with_decl (x, "`%s' used prior to declaration");
1509: }
1510:
1511: if (t != 0)
1512: {
1513: file = DECL_SOURCE_FILE (t);
1514: line = DECL_SOURCE_LINE (t);
1515: }
1516:
1517: if (t != 0 && duplicate_decls (x, t))
1518: {
1519: if (TREE_CODE (t) == PARM_DECL)
1520: {
1521: /* Don't allow more than one "real" duplicate
1522: of a forward parm decl. */
1523: TREE_ASM_WRITTEN (t) = TREE_ASM_WRITTEN (x);
1524: return t;
1525: }
1526: /* If this decl is `static' and an implicit decl was seen previously,
1527: warn. But don't complain if -traditional,
1528: since traditional compilers don't complain. */
1529: if (!flag_traditional && TREE_PUBLIC (name)
1530: && ! TREE_PUBLIC (x) && ! TREE_EXTERNAL (x)
1531: /* We used to warn also for explicit extern followed by static,
1532: but sometimes you need to do it that way. */
1533: && IDENTIFIER_IMPLICIT_DECL (name) != 0)
1534: {
1535: pedwarn ("`%s' was declared implicitly `extern' and later `static'",
1536: IDENTIFIER_POINTER (name));
1537: pedwarn_with_file_and_line (file, line,
1538: "previous declaration of `%s'",
1539: IDENTIFIER_POINTER (name));
1540: }
1541: if (warn_redundant_decls && line != 0)
1542: {
1543: warning ("redundant redeclaration of `%s' in same scope",
1544: IDENTIFIER_POINTER (name));
1545: warning_with_file_and_line (file, line,
1546: "previous declaration of `%s'",
1547: IDENTIFIER_POINTER (name));
1548: }
1549: return t;
1550: }
1551:
1552: /* If declaring a type as a typedef, and the type has no known
1553: typedef name, install this TYPE_DECL as its typedef name. If
1554: generating prototypes, *don't* assign the current name to the
1555: existing type node, but rather give the name its own associated
1556: type node. This new type node is created as a type variant of
1557: the existing type node, but it is essentially identical to the
1558: existing one. Obviously, we don't generate these type variants
1559: if the node that we are working on is a standard type and it has
1560: not yet been assigned a name. In that case we must allow the
1561: standard type to given its standard name (by the compiler).
1562: Since all standard types are effectively declared at line zero
1563: in the source file, we can easily check to see if we are working
1564: on a standard type by checking the current value of lineno. */
1565:
1566: if (TREE_CODE (x) == TYPE_DECL)
1567: {
1568: if (DECL_SOURCE_LINE (x) == 0 || !flag_gen_aux_info)
1569: {
1570: if (TYPE_NAME (TREE_TYPE (x)) == 0)
1571: TYPE_NAME (TREE_TYPE (x)) = x;
1572: }
1573: else
1574: {
1575: tree tt = TREE_TYPE (x);
1576:
1577: tt = c_build_type_variant (tt,
1578: TYPE_READONLY (tt), TYPE_VOLATILE (tt));
1579: TYPE_NAME (tt) = x;
1580: TREE_TYPE (x) = tt;
1581: }
1582: }
1583:
1584: /* Multiple external decls of the same identifier ought to match. */
1585:
1586: if (TREE_EXTERNAL (x) && IDENTIFIER_GLOBAL_VALUE (name) != 0
1587: && (TREE_EXTERNAL (IDENTIFIER_GLOBAL_VALUE (name))
1588: || TREE_PUBLIC (IDENTIFIER_GLOBAL_VALUE (name)))
1589: /* We get warnings about inline functions where they are defined.
1590: Avoid duplicate warnings where they are used. */
1591: && !TREE_INLINE (x))
1592: {
1593: if (! comptypes (TREE_TYPE (x),
1594: TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (name))))
1595: {
1596: pedwarn_with_decl (x,
1597: "type mismatch with previous external decl");
1598: pedwarn_with_decl (IDENTIFIER_GLOBAL_VALUE (name),
1599: "previous external decl of `%s'");
1600: }
1601: }
1602:
1603: /* If a function has had an implicit declaration, and then is defined,
1604: make sure they are compatible. */
1605:
1606: if (IDENTIFIER_IMPLICIT_DECL (name) != 0
1607: && IDENTIFIER_GLOBAL_VALUE (name) == 0
1608: && TREE_CODE (x) == FUNCTION_DECL
1609: && ! comptypes (TREE_TYPE (x),
1610: TREE_TYPE (IDENTIFIER_IMPLICIT_DECL (name))))
1611: {
1612: warning_with_decl (x, "type mismatch with previous implicit declaration");
1613: warning_with_decl (x, "previous implicit declaration of `%s'");
1614: }
1615:
1616: /* In PCC-compatibility mode, extern decls of vars with no current decl
1617: take effect at top level no matter where they are. */
1618: if (flag_traditional && TREE_EXTERNAL (x)
1619: && lookup_name (name) == 0)
1620: {
1621: tree type = TREE_TYPE (x);
1622:
1623: /* But don't do this if the type contains temporary nodes. */
1624: while (type)
1625: {
1626: if (type == error_mark_node)
1627: break;
1628: if (! TREE_PERMANENT (type))
1629: {
1630: warning_with_decl (x, "type of external `%s' is not global");
1631: /* By exiting the loop early, we leave TYPE nonzero,
1632: and thus prevent globalization of the decl. */
1633: break;
1634: }
1635: else if (TREE_CODE (type) == FUNCTION_TYPE
1636: && TYPE_ARG_TYPES (type) != 0)
1637: /* The types might not be truly local,
1638: but the list of arg types certainly is temporary.
1639: Since prototypes are nontraditional,
1640: ok not to do the traditional thing. */
1641: break;
1642: type = TREE_TYPE (type);
1643: }
1644:
1645: if (type == 0)
1646: b = global_binding_level;
1647: }
1648:
1649: /* This name is new in its binding level.
1650: Install the new declaration and return it. */
1651: if (b == global_binding_level)
1652: {
1653: /* Install a global value. */
1654:
1655: /* If the first global decl has external linkage,
1656: warn if we later see static one. */
1657: if (IDENTIFIER_GLOBAL_VALUE (name) == 0 && TREE_PUBLIC (x))
1658: TREE_PUBLIC (name) = 1;
1659:
1660: IDENTIFIER_GLOBAL_VALUE (name) = x;
1661:
1662: /* Don't forget if the function was used via an implicit decl. */
1663: if (IDENTIFIER_IMPLICIT_DECL (name)
1664: && TREE_USED (IDENTIFIER_IMPLICIT_DECL (name)))
1665: TREE_USED (x) = 1, TREE_USED (name) = 1;
1666:
1667: /* Don't forget if its address was taken in that way. */
1668: if (IDENTIFIER_IMPLICIT_DECL (name)
1669: && TREE_ADDRESSABLE (IDENTIFIER_IMPLICIT_DECL (name)))
1670: TREE_ADDRESSABLE (x) = 1;
1671:
1672: /* Warn about mismatches against previous implicit decl. */
1673: if (IDENTIFIER_IMPLICIT_DECL (name) != 0
1674: /* If this real decl matches the implicit, don't complain. */
1675: && ! (TREE_CODE (x) == FUNCTION_DECL
1676: && TREE_TYPE (TREE_TYPE (x)) == integer_type_node))
1677: pedwarn ("`%s' was previously implicitly declared to return `int'",
1678: IDENTIFIER_POINTER (name));
1679:
1680: /* If this decl is `static' and an `extern' was seen previously,
1681: that is erroneous. */
1682: if (TREE_PUBLIC (name)
1683: && ! TREE_PUBLIC (x) && ! TREE_EXTERNAL (x))
1684: {
1685: if (IDENTIFIER_IMPLICIT_DECL (name))
1686: pedwarn ("`%s' was declared implicitly `extern' and later `static'",
1687: IDENTIFIER_POINTER (name));
1688: else
1689: pedwarn ("`%s' was declared `extern' and later `static'",
1690: IDENTIFIER_POINTER (name));
1691: }
1692: }
1693: else
1694: {
1695: /* Here to install a non-global value. */
1696: tree oldlocal = IDENTIFIER_LOCAL_VALUE (name);
1697: tree oldglobal = IDENTIFIER_GLOBAL_VALUE (name);
1698: IDENTIFIER_LOCAL_VALUE (name) = x;
1699:
1700: /* If this is an extern function declaration, see if we
1701: have a global definition for the function. */
1702: if (oldlocal == 0
1703: && TREE_EXTERNAL (x) && !TREE_INLINE (x)
1704: && oldglobal != 0
1705: && TREE_CODE (x) == FUNCTION_DECL
1706: && TREE_CODE (oldglobal) == FUNCTION_DECL)
1707: {
1708: /* We have one. Their types must agree. */
1709: if (! comptypes (TREE_TYPE (x),
1710: TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (name))))
1711: pedwarn_with_decl (x, "local declaration of `%s' doesn't match global one");
1712: /* If the global one is inline, make the local one inline. */
1713: else if (TREE_INLINE (oldglobal)
1714: || DECL_BUILT_IN (oldglobal)
1715: || (TYPE_ARG_TYPES (TREE_TYPE (oldglobal)) != 0
1716: && TYPE_ARG_TYPES (TREE_TYPE (x)) == 0))
1717: IDENTIFIER_LOCAL_VALUE (name) = oldglobal;
1718: }
1719:
1720: #if 0 /* This case is probably sometimes the right thing to do. */
1721: /* If we have a local external declaration,
1722: then any file-scope declaration should not
1723: have been static. */
1724: if (oldlocal == 0 && oldglobal != 0
1725: && !TREE_PUBLIC (oldglobal)
1726: && TREE_EXTERNAL (x) && TREE_PUBLIC (x))
1727: warning ("`%s' locally external but globally static",
1728: IDENTIFIER_POINTER (name));
1729: #endif
1730:
1731: /* If we have a local external declaration,
1732: and no file-scope declaration has yet been seen,
1733: then if we later have a file-scope decl it must not be static. */
1734: if (oldlocal == 0
1735: && oldglobal == 0
1736: && TREE_EXTERNAL (x)
1737: && TREE_PUBLIC (x))
1738: {
1739: TREE_PUBLIC (name) = 1;
1740: }
1741:
1742: /* Warn if shadowing an argument at the top level of the body. */
1743: if (oldlocal != 0 && !TREE_EXTERNAL (x)
1744: /* This warning doesn't apply to the parms of a nested fcn. */
1745: && ! current_binding_level->parm_flag
1746: /* Check that this is one level down from the parms. */
1747: && current_binding_level->level_chain->parm_flag
1748: /* Check that the decl being shadowed
1749: comes from the parm level, one level up. */
1750: && chain_member (oldlocal, current_binding_level->level_chain->names))
1751: {
1752: if (TREE_CODE (oldlocal) == PARM_DECL)
1753: pedwarn ("declaration of `%s' shadows a parameter",
1754: IDENTIFIER_POINTER (name));
1755: else
1756: pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
1757: IDENTIFIER_POINTER (name));
1758: }
1759:
1760: /* Maybe warn if shadowing something else. */
1761: else if (warn_shadow && !TREE_EXTERNAL (x)
1762: /* No shadow warnings for vars made for inlining. */
1763: && ! DECL_FROM_INLINE (x))
1764: {
1765: char *warnstring = 0;
1766:
1767: if (TREE_CODE (x) == PARM_DECL
1768: && current_binding_level->parm_flag == 1)
1769: /* Don't warn about the parm names in a declaration. */
1770: ;
1771: else if (oldlocal != 0 && TREE_CODE (oldlocal) == PARM_DECL)
1772: warnstring = "declaration of `%s' shadows a parameter";
1773: else if (oldlocal != 0)
1774: warnstring = "declaration of `%s' shadows previous local";
1775: else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
1776: && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
1777: warnstring = "declaration of `%s' shadows global declaration";
1778:
1779: if (warnstring)
1780: warning (warnstring, IDENTIFIER_POINTER (name));
1781: }
1782:
1783: /* If storing a local value, there may already be one (inherited).
1784: If so, record it for restoration when this binding level ends. */
1785: if (oldlocal != 0)
1786: b->shadowed = tree_cons (name, oldlocal, b->shadowed);
1787: }
1788:
1789: /* Keep count of variables in this level with incomplete type. */
1790: if (TYPE_SIZE (TREE_TYPE (x)) == 0)
1791: ++b->n_incomplete;
1792: }
1793:
1794: /* Put decls on list in reverse order.
1795: We will reverse them later if necessary. */
1796: TREE_CHAIN (x) = b->names;
1797: b->names = x;
1798:
1799: return x;
1800: }
1801:
1802: /* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */
1803:
1804: tree
1805: pushdecl_top_level (x)
1806: tree x;
1807: {
1808: register tree t;
1809: register struct binding_level *b = current_binding_level;
1810:
1811: current_binding_level = global_binding_level;
1812: t = pushdecl (x);
1813: current_binding_level = b;
1814: return t;
1815: }
1816:
1817: /* Generate an implicit declaration for identifier FUNCTIONID
1818: as a function of type int (). Print a warning if appropriate. */
1819:
1820: tree
1821: implicitly_declare (functionid)
1822: tree functionid;
1823: {
1824: register tree decl;
1825: int traditional_warning = 0;
1826: /* Only one "implicit declaration" warning per identifier. */
1827: int implicit_warning;
1828:
1829: /* Save the decl permanently so we can warn if definition follows. */
1830: push_obstacks_nochange ();
1831: end_temporary_allocation ();
1832:
1833: /* We used to reuse an old implicit decl here,
1834: but this loses with inline functions because it can clobber
1835: the saved decl chains. */
1836: /* if (IDENTIFIER_IMPLICIT_DECL (functionid) != 0)
1837: decl = IDENTIFIER_IMPLICIT_DECL (functionid);
1838: else */
1839: decl = build_decl (FUNCTION_DECL, functionid, default_function_type);
1840:
1841: /* Warn of implicit decl following explicit local extern decl.
1842: This is probably a program designed for traditional C. */
1843: if (TREE_PUBLIC (functionid) && IDENTIFIER_GLOBAL_VALUE (functionid) == 0)
1844: traditional_warning = 1;
1845:
1846: /* Warn once of an implicit declaration. */
1847: implicit_warning = (IDENTIFIER_IMPLICIT_DECL (functionid) == 0);
1848:
1849: TREE_EXTERNAL (decl) = 1;
1850: TREE_PUBLIC (decl) = 1;
1851:
1852: /* Record that we have an implicit decl and this is it. */
1853: IDENTIFIER_IMPLICIT_DECL (functionid) = decl;
1854:
1855: /* ANSI standard says implicit declarations are in the innermost block.
1856: So we record the decl in the standard fashion.
1857: If flag_traditional is set, pushdecl does it top-level. */
1858: pushdecl (decl);
1859:
1860: /* This is a no-op in c-lang.c or something real in objc-actions.c. */
1861: maybe_objc_check_decl (decl);
1862:
1863: rest_of_decl_compilation (decl, 0, 0, 0);
1864:
1865: if (warn_implicit && implicit_warning)
1866: warning ("implicit declaration of function `%s'",
1867: IDENTIFIER_POINTER (functionid));
1868: else if (warn_traditional && traditional_warning)
1869: warning ("function `%s' was previously declared within a block",
1870: IDENTIFIER_POINTER (functionid));
1871:
1872: /* Write a record describing this implicit function declaration to the
1873: prototypes file (if requested). */
1874:
1875: gen_aux_info_record (decl, 0, 1, 0);
1876:
1877: pop_obstacks ();
1878:
1879: return decl;
1880: }
1881:
1882: /* Return zero if the declaration NEWDECL is valid
1883: when the declaration OLDDECL (assumed to be for the same name)
1884: has already been seen.
1885: Otherwise return an error message format string with a %s
1886: where the identifier should go. */
1887:
1888: static char *
1889: redeclaration_error_message (newdecl, olddecl)
1890: tree newdecl, olddecl;
1891: {
1892: if (TREE_CODE (newdecl) == TYPE_DECL)
1893: {
1894: if (flag_traditional && TREE_TYPE (newdecl) == TREE_TYPE (olddecl))
1895: return 0;
1896: return "redefinition of `%s'";
1897: }
1898: else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1899: {
1900: /* Declarations of functions can insist on internal linkage
1901: but they can't be inconsistent with internal linkage,
1902: so there can be no error on that account.
1903: However defining the same name twice is no good. */
1904: if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0
1905: /* However, defining once as extern inline and a second
1906: time in another way is ok. */
1907: && !(TREE_INLINE (olddecl) && TREE_EXTERNAL (olddecl)
1908: && !(TREE_INLINE (newdecl) && TREE_EXTERNAL (newdecl))))
1909: return "redefinition of `%s'";
1910: return 0;
1911: }
1912: else if (current_binding_level == global_binding_level)
1913: {
1914: /* Objects declared at top level: */
1915: /* If at least one is a reference, it's ok. */
1916: if (TREE_EXTERNAL (newdecl) || TREE_EXTERNAL (olddecl))
1917: return 0;
1918: /* Reject two definitions. */
1919: if (DECL_INITIAL (olddecl) != 0 && DECL_INITIAL (newdecl) != 0)
1920: return "redefinition of `%s'";
1921: /* Now we have two tentative defs, or one tentative and one real def. */
1922: /* Insist that the linkage match. */
1923: if (TREE_PUBLIC (olddecl) != TREE_PUBLIC (newdecl))
1924: return "conflicting declarations of `%s'";
1925: return 0;
1926: }
1927: else if (current_binding_level->parm_flag
1928: && TREE_ASM_WRITTEN (olddecl) && !TREE_ASM_WRITTEN (newdecl))
1929: return 0;
1930: else
1931: {
1932: /* Objects declared with block scope: */
1933: /* Reject two definitions, and reject a definition
1934: together with an external reference. */
1935: if (!(TREE_EXTERNAL (newdecl) && TREE_EXTERNAL (olddecl)))
1936: return "redeclaration of `%s'";
1937: return 0;
1938: }
1939: }
1940:
1941: /* Get the LABEL_DECL corresponding to identifier ID as a label.
1942: Create one if none exists so far for the current function.
1943: This function is called for both label definitions and label references. */
1944:
1945: tree
1946: lookup_label (id)
1947: tree id;
1948: {
1949: register tree decl = IDENTIFIER_LABEL_VALUE (id);
1950:
1951: /* Use a label already defined or ref'd with this name. */
1952: if (decl != 0)
1953: {
1954: /* But not if it is inherited and wasn't declared to be inheritable. */
1955: if (DECL_CONTEXT (decl) != current_function_decl
1956: && ! C_DECLARED_LABEL_FLAG (decl))
1957: return shadow_label (id);
1958: return decl;
1959: }
1960:
1961: decl = build_decl (LABEL_DECL, id, void_type_node);
1962:
1963: /* A label not explicitly declared must be local to where it's ref'd. */
1964: DECL_CONTEXT (decl) = current_function_decl;
1965:
1966: DECL_MODE (decl) = VOIDmode;
1967:
1968: /* Say where one reference is to the label,
1969: for the sake of the error if it is not defined. */
1970: DECL_SOURCE_LINE (decl) = lineno;
1971: DECL_SOURCE_FILE (decl) = input_filename;
1972:
1973: IDENTIFIER_LABEL_VALUE (id) = decl;
1974:
1975: named_labels = tree_cons (NULL_TREE, decl, named_labels);
1976:
1977: return decl;
1978: }
1979:
1980: /* Make a label named NAME in the current function,
1981: shadowing silently any that may be inherited from containing functions
1982: or containing scopes.
1983:
1984: Note that valid use, if the label being shadowed
1985: comes from another scope in the same function,
1986: requires calling declare_nonlocal_label right away. */
1987:
1988: tree
1989: shadow_label (name)
1990: tree name;
1991: {
1992: register tree decl = IDENTIFIER_LABEL_VALUE (name);
1993:
1994: if (decl != 0)
1995: {
1996: shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
1997: IDENTIFIER_LABEL_VALUE (name) = decl = 0;
1998: }
1999:
2000: return lookup_label (name);
2001: }
2002:
2003: /* Define a label, specifying the location in the source file.
2004: Return the LABEL_DECL node for the label, if the definition is valid.
2005: Otherwise return 0. */
2006:
2007: tree
2008: define_label (filename, line, name)
2009: char *filename;
2010: int line;
2011: tree name;
2012: {
2013: tree decl = lookup_label (name);
2014:
2015: /* If label with this name is known from an outer context, shadow it. */
2016: if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl)
2017: {
2018: shadowed_labels = tree_cons (NULL_TREE, decl, shadowed_labels);
2019: IDENTIFIER_LABEL_VALUE (name) = 0;
2020: decl = lookup_label (name);
2021: }
2022:
2023: if (DECL_INITIAL (decl) != 0)
2024: {
2025: error_with_decl (decl, "duplicate label `%s'");
2026: return 0;
2027: }
2028: else
2029: {
2030: /* Mark label as having been defined. */
2031: DECL_INITIAL (decl) = error_mark_node;
2032: /* Say where in the source. */
2033: DECL_SOURCE_FILE (decl) = filename;
2034: DECL_SOURCE_LINE (decl) = line;
2035: return decl;
2036: }
2037: }
2038:
2039: /* Return the list of declarations of the current level.
2040: Note that this list is in reverse order unless/until
2041: you nreverse it; and when you do nreverse it, you must
2042: store the result back using `storedecls' or you will lose. */
2043:
2044: tree
2045: getdecls ()
2046: {
2047: return current_binding_level->names;
2048: }
2049:
2050: /* Return the list of type-tags (for structs, etc) of the current level. */
2051:
2052: tree
2053: gettags ()
2054: {
2055: return current_binding_level->tags;
2056: }
2057:
2058: /* Store the list of declarations of the current level.
2059: This is done for the parameter declarations of a function being defined,
2060: after they are modified in the light of any missing parameters. */
2061:
2062: static void
2063: storedecls (decls)
2064: tree decls;
2065: {
2066: current_binding_level->names = decls;
2067: }
2068:
2069: /* Similarly, store the list of tags of the current level. */
2070:
2071: static void
2072: storetags (tags)
2073: tree tags;
2074: {
2075: current_binding_level->tags = tags;
2076: }
2077:
2078: /* Given NAME, an IDENTIFIER_NODE,
2079: return the structure (or union or enum) definition for that name.
2080: Searches binding levels from BINDING_LEVEL up to the global level.
2081: If THISLEVEL_ONLY is nonzero, searches only the specified context
2082: (but skips any tag-transparent contexts to find one that is
2083: meaningful for tags).
2084: CODE says which kind of type the caller wants;
2085: it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2086: If the wrong kind of type is found, an error is reported. */
2087:
2088: static tree
2089: lookup_tag (code, name, binding_level, thislevel_only)
2090: enum tree_code code;
2091: struct binding_level *binding_level;
2092: tree name;
2093: int thislevel_only;
2094: {
2095: register struct binding_level *level;
2096:
2097: for (level = binding_level; level; level = level->level_chain)
2098: {
2099: register tree tail;
2100: for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2101: {
2102: if (TREE_PURPOSE (tail) == name)
2103: {
2104: if (TREE_CODE (TREE_VALUE (tail)) != code)
2105: {
2106: /* Definition isn't the kind we were looking for. */
2107: pending_invalid_xref = name;
2108: pending_invalid_xref_file = input_filename;
2109: pending_invalid_xref_line = lineno;
2110: }
2111: return TREE_VALUE (tail);
2112: }
2113: }
2114: if (thislevel_only && ! level->tag_transparent)
2115: return NULL_TREE;
2116: }
2117: return NULL_TREE;
2118: }
2119:
2120: /* Print an error message now
2121: for a recent invalid struct, union or enum cross reference.
2122: We don't print them immediately because they are not invalid
2123: when used in the `struct foo;' construct for shadowing. */
2124:
2125: void
2126: pending_xref_error ()
2127: {
2128: if (pending_invalid_xref != 0)
2129: error_with_file_and_line (pending_invalid_xref_file,
2130: pending_invalid_xref_line,
2131: "`%s' defined as wrong kind of tag",
2132: IDENTIFIER_POINTER (pending_invalid_xref));
2133: pending_invalid_xref = 0;
2134: }
2135:
2136: /* Given a type, find the tag that was defined for it and return the tag name.
2137: Otherwise return 0. */
2138:
2139: static tree
2140: lookup_tag_reverse (type)
2141: tree type;
2142: {
2143: register struct binding_level *level;
2144:
2145: for (level = current_binding_level; level; level = level->level_chain)
2146: {
2147: register tree tail;
2148: for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
2149: {
2150: if (TREE_VALUE (tail) == type)
2151: return TREE_PURPOSE (tail);
2152: }
2153: }
2154: return NULL_TREE;
2155: }
2156:
2157: /* Look up NAME in the current binding level and its superiors
2158: in the namespace of variables, functions and typedefs.
2159: Return a ..._DECL node of some kind representing its definition,
2160: or return 0 if it is undefined. */
2161:
2162: tree
2163: lookup_name (name)
2164: tree name;
2165: {
2166: register tree val;
2167: if (current_binding_level != global_binding_level
2168: && IDENTIFIER_LOCAL_VALUE (name))
2169: val = IDENTIFIER_LOCAL_VALUE (name);
2170: else
2171: val = IDENTIFIER_GLOBAL_VALUE (name);
2172: return val;
2173: }
2174:
2175: /* Similar to `lookup_name' but look only at current binding level. */
2176:
2177: static tree
2178: lookup_name_current_level (name)
2179: tree name;
2180: {
2181: register tree t;
2182:
2183: if (current_binding_level == global_binding_level)
2184: return IDENTIFIER_GLOBAL_VALUE (name);
2185:
2186: if (IDENTIFIER_LOCAL_VALUE (name) == 0)
2187: return 0;
2188:
2189: for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
2190: if (DECL_NAME (t) == name)
2191: break;
2192:
2193: return t;
2194: }
2195:
2196: /* Create the predefined scalar types of C,
2197: and some nodes representing standard constants (0, 1, (void *)0).
2198: Initialize the global binding level.
2199: Make definitions for built-in primitive functions. */
2200:
2201: void
2202: init_decl_processing ()
2203: {
2204: register tree endlink;
2205: /* Either char* or void*. */
2206: tree traditional_ptr_type_node;
2207: /* Data type of memcpy. */
2208: tree memcpy_ftype;
2209: int wchar_type_size;
2210: tree temp;
2211:
2212: current_function_decl = NULL;
2213: named_labels = NULL;
2214: current_binding_level = NULL_BINDING_LEVEL;
2215: free_binding_level = NULL_BINDING_LEVEL;
2216: pushlevel (0); /* make the binding_level structure for global names */
2217: global_binding_level = current_binding_level;
2218:
2219: /* Define `int' and `char' first so that dbx will output them first. */
2220:
2221: integer_type_node = make_signed_type (INT_TYPE_SIZE);
2222: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_INT],
2223: integer_type_node));
2224:
2225: /* Define `char', which is like either `signed char' or `unsigned char'
2226: but not the same as either. */
2227:
2228: char_type_node =
2229: (flag_signed_char
2230: ? make_signed_type (CHAR_TYPE_SIZE)
2231: : make_unsigned_type (CHAR_TYPE_SIZE));
2232: pushdecl (build_decl (TYPE_DECL, get_identifier ("char"),
2233: char_type_node));
2234:
2235: long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
2236: pushdecl (build_decl (TYPE_DECL, get_identifier ("long int"),
2237: long_integer_type_node));
2238:
2239: unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
2240: pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
2241: unsigned_type_node));
2242:
2243: long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
2244: pushdecl (build_decl (TYPE_DECL, get_identifier ("long unsigned int"),
2245: long_unsigned_type_node));
2246:
2247: /* `unsigned long' is the standard type for sizeof.
2248: Traditionally, use a signed type.
2249: Note that stddef.h uses `unsigned long',
2250: and this must agree, even of long and int are the same size. */
2251: if (flag_traditional)
2252: sizetype = long_integer_type_node;
2253: else
2254: sizetype
2255: = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (SIZE_TYPE)));
2256:
2257: ptrdiff_type_node
2258: = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (PTRDIFF_TYPE)));
2259:
2260: TREE_TYPE (TYPE_SIZE (integer_type_node)) = sizetype;
2261: TREE_TYPE (TYPE_SIZE (char_type_node)) = sizetype;
2262: TREE_TYPE (TYPE_SIZE (unsigned_type_node)) = sizetype;
2263: TREE_TYPE (TYPE_SIZE (long_unsigned_type_node)) = sizetype;
2264: TREE_TYPE (TYPE_SIZE (long_integer_type_node)) = sizetype;
2265:
2266: error_mark_node = make_node (ERROR_MARK);
2267: TREE_TYPE (error_mark_node) = error_mark_node;
2268:
2269: short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
2270: pushdecl (build_decl (TYPE_DECL, get_identifier ("short int"),
2271: short_integer_type_node));
2272:
2273: long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
2274: pushdecl (build_decl (TYPE_DECL, get_identifier ("long long int"),
2275: long_long_integer_type_node));
2276:
2277: short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
2278: pushdecl (build_decl (TYPE_DECL, get_identifier ("short unsigned int"),
2279: short_unsigned_type_node));
2280:
2281: long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
2282: pushdecl (build_decl (TYPE_DECL, get_identifier ("long long unsigned int"),
2283: long_long_unsigned_type_node));
2284:
2285: /* Define both `signed char' and `unsigned char'. */
2286: signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
2287: pushdecl (build_decl (TYPE_DECL, get_identifier ("signed char"),
2288: signed_char_type_node));
2289:
2290: unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
2291: pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
2292: unsigned_char_type_node));
2293:
2294: float_type_node = make_node (REAL_TYPE);
2295: TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
2296: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_FLOAT],
2297: float_type_node));
2298: layout_type (float_type_node);
2299:
2300: double_type_node = make_node (REAL_TYPE);
2301: if (flag_short_double)
2302: TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
2303: else
2304: TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
2305: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_DOUBLE],
2306: double_type_node));
2307: layout_type (double_type_node);
2308:
2309: long_double_type_node = make_node (REAL_TYPE);
2310: TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
2311: pushdecl (build_decl (TYPE_DECL, get_identifier ("long double"),
2312: long_double_type_node));
2313: layout_type (long_double_type_node);
2314:
2315: wchar_type_node
2316: = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (get_identifier (WCHAR_TYPE)));
2317: wchar_type_size = TYPE_PRECISION (wchar_type_node);
2318: signed_wchar_type_node = type_for_size (wchar_type_size, 0);
2319: unsigned_wchar_type_node = type_for_size (wchar_type_size, 1);
2320:
2321: integer_zero_node = build_int_2 (0, 0);
2322: TREE_TYPE (integer_zero_node) = integer_type_node;
2323: integer_one_node = build_int_2 (1, 0);
2324: TREE_TYPE (integer_one_node) = integer_type_node;
2325:
2326: size_zero_node = build_int_2 (0, 0);
2327: TREE_TYPE (size_zero_node) = sizetype;
2328: size_one_node = build_int_2 (1, 0);
2329: TREE_TYPE (size_one_node) = sizetype;
2330:
2331: void_type_node = make_node (VOID_TYPE);
2332: pushdecl (build_decl (TYPE_DECL,
2333: ridpointers[(int) RID_VOID], void_type_node));
2334: layout_type (void_type_node); /* Uses integer_zero_node */
2335: /* We are not going to have real types in C with less than byte alignment,
2336: so we might as well not have any types that claim to have it. */
2337: TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
2338:
2339: null_pointer_node = build_int_2 (0, 0);
2340: TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
2341: layout_type (TREE_TYPE (null_pointer_node));
2342:
2343: string_type_node = build_pointer_type (char_type_node);
2344: const_string_type_node
2345: = build_pointer_type (build_type_variant (char_type_node, 1, 0));
2346:
2347: /* make a type for arrays of 256 characters.
2348: 256 is picked randomly because we have a type for integers from 0 to 255.
2349: With luck nothing will ever really depend on the length of this
2350: array type. */
2351: char_array_type_node
2352: = build_array_type (char_type_node, unsigned_char_type_node);
2353: /* Likewise for arrays of ints. */
2354: int_array_type_node
2355: = build_array_type (integer_type_node, unsigned_char_type_node);
2356: /* This is for wide string constants. */
2357: wchar_array_type_node
2358: = build_array_type (wchar_type_node, unsigned_char_type_node);
2359:
2360: default_function_type
2361: = build_function_type (integer_type_node, NULL_TREE);
2362:
2363: ptr_type_node = build_pointer_type (void_type_node);
2364: const_ptr_type_node
2365: = build_pointer_type (build_type_variant (void_type_node, 1, 0));
2366:
2367: endlink = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
2368:
2369: double_ftype_double
2370: = build_function_type (double_type_node,
2371: tree_cons (NULL_TREE, double_type_node, endlink));
2372:
2373: double_ftype_double_double
2374: = build_function_type (double_type_node,
2375: tree_cons (NULL_TREE, double_type_node,
2376: tree_cons (NULL_TREE,
2377: double_type_node, endlink)));
2378:
2379: int_ftype_int
2380: = build_function_type (integer_type_node,
2381: tree_cons (NULL_TREE, integer_type_node, endlink));
2382:
2383: long_ftype_long
2384: = build_function_type (long_integer_type_node,
2385: tree_cons (NULL_TREE,
2386: long_integer_type_node, endlink));
2387:
2388: void_ftype_ptr_ptr_int
2389: = build_function_type (void_type_node,
2390: tree_cons (NULL_TREE, ptr_type_node,
2391: tree_cons (NULL_TREE, ptr_type_node,
2392: tree_cons (NULL_TREE,
2393: integer_type_node,
2394: endlink))));
2395:
2396: int_ftype_cptr_cptr_sizet
2397: = build_function_type (integer_type_node,
2398: tree_cons (NULL_TREE, const_ptr_type_node,
2399: tree_cons (NULL_TREE, const_ptr_type_node,
2400: tree_cons (NULL_TREE,
2401: sizetype,
2402: endlink))));
2403:
2404: void_ftype_ptr_int_int
2405: = build_function_type (void_type_node,
2406: tree_cons (NULL_TREE, ptr_type_node,
2407: tree_cons (NULL_TREE, integer_type_node,
2408: tree_cons (NULL_TREE,
2409: integer_type_node,
2410: endlink))));
2411:
2412: string_ftype_ptr_ptr /* strcpy prototype */
2413: = build_function_type (string_type_node,
2414: tree_cons (NULL_TREE, string_type_node,
2415: tree_cons (NULL_TREE,
2416: const_string_type_node,
2417: endlink)));
2418:
2419: int_ftype_string_string /* strcmp prototype */
2420: = build_function_type (integer_type_node,
2421: tree_cons (NULL_TREE, const_string_type_node,
2422: tree_cons (NULL_TREE,
2423: const_string_type_node,
2424: endlink)));
2425:
2426: sizet_ftype_string /* strlen prototype */
2427: = build_function_type (sizetype,
2428: tree_cons (NULL_TREE, const_string_type_node,
2429: endlink));
2430:
2431: traditional_ptr_type_node
2432: = (flag_traditional ? string_type_node : ptr_type_node);
2433:
2434: memcpy_ftype /* memcpy prototype */
2435: = build_function_type (traditional_ptr_type_node,
2436: tree_cons (NULL_TREE, ptr_type_node,
2437: tree_cons (NULL_TREE, const_ptr_type_node,
2438: tree_cons (NULL_TREE,
2439: sizetype,
2440: endlink))));
2441:
2442: /* ``integer_tpe_node'' mispelling corrected: North-Keys 30 Mar 91 */
2443: builtin_function ("__builtin_constant_p",
2444: build_function_type (integer_type_node, endlink),
2445: BUILT_IN_CONSTANT_P, 0);
2446:
2447: builtin_function ("__builtin_return_address",
2448: build_function_type (integer_type_node,
2449: tree_cons (NULL_TREE,
2450: unsigned_type_node,
2451: endlink)),
2452: BUILT_IN_RETURN_ADDRESS, 0);
2453:
2454: builtin_function ("__builtin_frame_address",
2455: build_function_type (integer_type_node,
2456: tree_cons (NULL_TREE,
2457: unsigned_type_node,
2458: endlink)),
2459: BUILT_IN_FRAME_ADDRESS, 0);
2460:
2461: builtin_function ("__builtin_alloca",
2462: build_function_type (ptr_type_node,
2463: tree_cons (NULL_TREE,
2464: sizetype,
2465: endlink)),
2466: BUILT_IN_ALLOCA, "alloca");
2467: if (! flag_no_builtin)
2468: {
2469: tree exit_type;
2470: temp = builtin_function ("alloca",
2471: build_function_type (ptr_type_node,
2472: tree_cons (NULL_TREE,
2473: sizetype,
2474: endlink)),
2475: BUILT_IN_ALLOCA, 0);
2476: /* Suppress error if redefined as a non-function. */
2477: DECL_BUILT_IN_NONANSI (temp) = 1;
2478: /* Declare these functions volatile
2479: to avoid spurious "control drops through" warnings. */
2480: /* Don't specify the argument types, to avoid errors
2481: from certain code which isn't valid in ANSI but which exists. */
2482: temp = builtin_function ("abort",
2483: build_function_type (void_type_node, 0),
2484: NOT_BUILT_IN, 0);
2485: TREE_THIS_VOLATILE (temp) = 1;
2486: TREE_SIDE_EFFECTS (temp) = 1;
2487: /* Suppress error if redefined as a non-function. */
2488: DECL_BUILT_IN_NONANSI (temp) = 1;
2489: exit_type = build_function_type (void_type_node, 0);
2490: temp = builtin_function ("exit", exit_type, NOT_BUILT_IN, 0);
2491: TREE_THIS_VOLATILE (temp) = 1;
2492: TREE_SIDE_EFFECTS (temp) = 1;
2493: /* Suppress error if redefined as a non-function. */
2494: DECL_BUILT_IN_NONANSI (temp) = 1;
2495: temp = builtin_function ("_exit", exit_type, NOT_BUILT_IN, 0);
2496: TREE_THIS_VOLATILE (temp) = 1;
2497: TREE_SIDE_EFFECTS (temp) = 1;
2498: /* Suppress error if redefined as a non-function. */
2499: DECL_BUILT_IN_NONANSI (temp) = 1;
2500: }
2501:
2502: builtin_function ("__builtin_abs", int_ftype_int, BUILT_IN_ABS, 0);
2503: builtin_function ("__builtin_fabs", double_ftype_double, BUILT_IN_FABS, 0);
2504: builtin_function ("__builtin_labs", long_ftype_long, BUILT_IN_LABS, 0);
2505: builtin_function ("__builtin_ffs", int_ftype_int, BUILT_IN_FFS, 0);
2506: builtin_function ("__builtin_saveregs", default_function_type,
2507: BUILT_IN_SAVEREGS, 0);
2508: /* EXPAND_BUILTIN_VARARGS is obsolete. */
2509: #if 0
2510: builtin_function ("__builtin_varargs",
2511: build_function_type (ptr_type_node,
2512: tree_cons (NULL_TREE,
2513: integer_type_node,
2514: endlink)),
2515: BUILT_IN_VARARGS, 0);
2516: #endif
2517: builtin_function ("__builtin_classify_type", default_function_type,
2518: BUILT_IN_CLASSIFY_TYPE, 0);
2519: builtin_function ("__builtin_next_arg",
2520: build_function_type (ptr_type_node, endlink),
2521: BUILT_IN_NEXT_ARG, 0);
2522: builtin_function ("__builtin_args_info",
2523: build_function_type (integer_type_node,
2524: tree_cons (NULL_TREE,
2525: integer_type_node,
2526: endlink)),
2527: BUILT_IN_ARGS_INFO, 0);
2528:
2529: /* Currently under experimentation. */
2530: builtin_function ("__builtin_memcpy", memcpy_ftype,
2531: BUILT_IN_MEMCPY, "memcpy");
2532: builtin_function ("__builtin_memcmp", int_ftype_cptr_cptr_sizet,
2533: BUILT_IN_MEMCMP, "memcmp");
2534: builtin_function ("__builtin_strcmp", int_ftype_string_string,
2535: BUILT_IN_STRCMP, "strcmp");
2536: builtin_function ("__builtin_strcpy", string_ftype_ptr_ptr,
2537: BUILT_IN_STRCPY, "strcpy");
2538: builtin_function ("__builtin_strlen", sizet_ftype_string,
2539: BUILT_IN_STRLEN, "strlen");
2540: /* In an ANSI C program, it is okay to supply built-in meanings
2541: for these functions, since applications cannot validly use them
2542: with any other meaning.
2543: However, a traditional C program can do so. */
2544: if (!flag_traditional)
2545: {
2546: builtin_function ("abs", int_ftype_int, BUILT_IN_ABS, 0);
2547: builtin_function ("fabs", double_ftype_double, BUILT_IN_FABS, 0);
2548: builtin_function ("labs", long_ftype_long, BUILT_IN_LABS, 0);
2549: builtin_function ("memcpy", memcpy_ftype, BUILT_IN_MEMCPY, 0);
2550: builtin_function ("memcmp", int_ftype_cptr_cptr_sizet, BUILT_IN_MEMCMP, 0);
2551: builtin_function ("strcmp", int_ftype_string_string, BUILT_IN_STRCMP, 0);
2552: builtin_function ("strcpy", string_ftype_ptr_ptr, BUILT_IN_STRCPY, 0);
2553: builtin_function ("strlen", sizet_ftype_string, BUILT_IN_STRLEN, 0);
2554: }
2555:
2556: #if 0
2557: /* Support for these has not been written in either expand_builtin
2558: or build_function_call. */
2559: builtin_function ("__builtin_div", default_ftype, BUILT_IN_DIV, 0);
2560: builtin_function ("__builtin_ldiv", default_ftype, BUILT_IN_LDIV, 0);
2561: builtin_function ("__builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR, 0);
2562: builtin_function ("__builtin_fceil", double_ftype_double, BUILT_IN_FCEIL, 0);
2563: builtin_function ("__builtin_fmod", double_ftype_double_double, BUILT_IN_FMOD, 0);
2564: builtin_function ("__builtin_frem", double_ftype_double_double, BUILT_IN_FREM, 0);
2565: builtin_function ("__builtin_memset", ptr_ftype_ptr_int_int, BUILT_IN_MEMSET, 0);
2566: builtin_function ("__builtin_fsqrt", double_ftype_double, BUILT_IN_FSQRT, 0);
2567: builtin_function ("__builtin_getexp", double_ftype_double, BUILT_IN_GETEXP, 0);
2568: builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN, 0);
2569: #endif
2570:
2571: start_identifier_warnings ();
2572:
2573: init_format_info_table ();
2574: }
2575:
2576: /* Return a definition for a builtin function named NAME and whose data type
2577: is TYPE. TYPE should be a function type with argument types.
2578: FUNCTION_CODE tells later passes how to compile calls to this function.
2579: See tree.h for its possible values.
2580:
2581: If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
2582: the name to be called if we can't opencode the function. */
2583:
2584: static tree
2585: builtin_function (name, type, function_code, library_name)
2586: char *name;
2587: tree type;
2588: enum built_in_function function_code;
2589: char *library_name;
2590: {
2591: tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
2592: TREE_EXTERNAL (decl) = 1;
2593: TREE_PUBLIC (decl) = 1;
2594: if (library_name)
2595: DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
2596: make_decl_rtl (decl, 0, 1);
2597: pushdecl (decl);
2598: if (function_code != NOT_BUILT_IN)
2599: {
2600: DECL_BUILT_IN (decl) = 1;
2601: DECL_SET_FUNCTION_CODE (decl, function_code);
2602: }
2603:
2604: return decl;
2605: }
2606:
2607: /* Called when a declaration is seen that contains no names to declare.
2608: If its type is a reference to a structure, union or enum inherited
2609: from a containing scope, shadow that tag name for the current scope
2610: with a forward reference.
2611: If its type defines a new named structure or union
2612: or defines an enum, it is valid but we need not do anything here.
2613: Otherwise, it is an error. */
2614:
2615: void
2616: shadow_tag (declspecs)
2617: tree declspecs;
2618: {
2619: int found_tag = 0;
2620: int warned = 0;
2621: register tree link;
2622:
2623: pending_invalid_xref = 0;
2624:
2625: for (link = declspecs; link; link = TREE_CHAIN (link))
2626: {
2627: register tree value = TREE_VALUE (link);
2628: register enum tree_code code = TREE_CODE (value);
2629:
2630: if (code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
2631: /* Used to test also that TYPE_SIZE (value) != 0.
2632: That caused warning for `struct foo;' at top level in the file. */
2633: {
2634: register tree name = lookup_tag_reverse (value);
2635: register tree t;
2636:
2637: found_tag++;
2638:
2639: if (name == 0)
2640: {
2641: if (code != ENUMERAL_TYPE) /* Empty unnamed enum OK */
2642: {
2643: pedwarn ("unnamed struct/union that defines no instances");
2644: warned = 1;
2645: }
2646: }
2647: else
2648: {
2649: t = lookup_tag (code, name, current_binding_level, 1);
2650:
2651: if (t == 0)
2652: {
2653: t = make_node (code);
2654: pushtag (name, t);
2655: }
2656: }
2657: }
2658: else
2659: {
2660: if (!warned)
2661: warning ("useless keyword or type name in empty declaration");
2662: warned = 1;
2663: }
2664: }
2665:
2666: if (!warned)
2667: {
2668: if (found_tag > 1)
2669: error ("two types specified in one empty declaration");
2670: if (found_tag == 0)
2671: pedwarn ("empty declaration");
2672: }
2673: }
2674:
2675: /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
2676:
2677: tree
2678: groktypename (typename)
2679: tree typename;
2680: {
2681: if (TREE_CODE (typename) != TREE_LIST)
2682: return typename;
2683: return grokdeclarator (TREE_VALUE (typename),
2684: TREE_PURPOSE (typename),
2685: TYPENAME, 0);
2686: }
2687:
2688: /* Return a PARM_DECL node for a given pair of specs and declarator. */
2689:
2690: tree
2691: groktypename_in_parm_context (typename)
2692: tree typename;
2693: {
2694: if (TREE_CODE (typename) != TREE_LIST)
2695: return typename;
2696: return grokdeclarator (TREE_VALUE (typename),
2697: TREE_PURPOSE (typename),
2698: PARM, 0);
2699: }
2700:
2701: /* Decode a declarator in an ordinary declaration or data definition.
2702: This is called as soon as the type information and variable name
2703: have been parsed, before parsing the initializer if any.
2704: Here we create the ..._DECL node, fill in its type,
2705: and put it on the list of decls for the current context.
2706: The ..._DECL node is returned as the value.
2707:
2708: Exception: for arrays where the length is not specified,
2709: the type is left null, to be filled in by `finish_decl'.
2710:
2711: Function definitions do not come here; they go to start_function
2712: instead. However, external and forward declarations of functions
2713: do go through here. Structure field declarations are done by
2714: grokfield and not through here. */
2715:
2716: /* Set this to zero to debug not using the temporary obstack
2717: to parse initializers. */
2718: int debug_temp_inits = 1;
2719:
2720: tree
2721: start_decl (declarator, declspecs, initialized)
2722: tree declspecs, declarator;
2723: int initialized;
2724: {
2725: register tree decl = grokdeclarator (declarator, declspecs,
2726: NORMAL, initialized);
2727: register tree tem;
2728: int init_written = initialized;
2729:
2730: /* The corresponding pop_obstacks is in finish_decl. */
2731: push_obstacks_nochange ();
2732:
2733: if (initialized)
2734: /* Is it valid for this decl to have an initializer at all?
2735: If not, set INITIALIZED to zero, which will indirectly
2736: tell `finish_decl' to ignore the initializer once it is parsed. */
2737: switch (TREE_CODE (decl))
2738: {
2739: case TYPE_DECL:
2740: /* typedef foo = bar means give foo the same type as bar.
2741: We haven't parsed bar yet, so `finish_decl' will fix that up.
2742: Any other case of an initialization in a TYPE_DECL is an error. */
2743: if (pedantic || list_length (declspecs) > 1)
2744: {
2745: error ("typedef `%s' is initialized",
2746: IDENTIFIER_POINTER (DECL_NAME (decl)));
2747: initialized = 0;
2748: }
2749: break;
2750:
2751: case FUNCTION_DECL:
2752: error ("function `%s' is initialized like a variable",
2753: IDENTIFIER_POINTER (DECL_NAME (decl)));
2754: initialized = 0;
2755: break;
2756:
2757: case PARM_DECL:
2758: /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
2759: error ("parameter `%s' is initialized",
2760: IDENTIFIER_POINTER (DECL_NAME (decl)));
2761: initialized = 0;
2762: break;
2763:
2764: default:
2765: /* Don't allow initializations for incomplete types
2766: except for arrays which might be completed by the initialization. */
2767: if (TYPE_SIZE (TREE_TYPE (decl)) != 0)
2768: {
2769: /* A complete type is ok if size is fixed. */
2770:
2771: if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl))) != INTEGER_CST
2772: || C_DECL_VARIABLE_SIZE (decl))
2773: {
2774: error ("variable-sized object may not be initialized");
2775: initialized = 0;
2776: }
2777: }
2778: else if (TREE_CODE (TREE_TYPE (decl)) != ARRAY_TYPE)
2779: {
2780: error ("variable `%s' has initializer but incomplete type",
2781: IDENTIFIER_POINTER (DECL_NAME (decl)));
2782: initialized = 0;
2783: }
2784: else if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl))) == 0)
2785: {
2786: error ("elements of array `%s' have incomplete type",
2787: IDENTIFIER_POINTER (DECL_NAME (decl)));
2788: initialized = 0;
2789: }
2790: }
2791:
2792: if (initialized)
2793: {
2794: #if 0 /* Seems redundant with grokdeclarator. */
2795: if (current_binding_level != global_binding_level
2796: && TREE_EXTERNAL (decl)
2797: && TREE_CODE (decl) != FUNCTION_DECL)
2798: warning ("declaration of `%s' has `extern' and is initialized",
2799: IDENTIFIER_POINTER (DECL_NAME (decl)));
2800: #endif
2801: TREE_EXTERNAL (decl) = 0;
2802: if (current_binding_level == global_binding_level)
2803: TREE_STATIC (decl) = 1;
2804:
2805: /* Tell `pushdecl' this is an initialized decl
2806: even though we don't yet have the initializer expression.
2807: Also tell `finish_decl' it may store the real initializer. */
2808: DECL_INITIAL (decl) = error_mark_node;
2809: }
2810:
2811: /* If this is a function declaration, write a record describing it to the
2812: prototypes file (if requested). */
2813:
2814: if (TREE_CODE (decl) == FUNCTION_DECL)
2815: gen_aux_info_record (decl, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl)) != 0);
2816:
2817: /* Add this decl to the current binding level.
2818: TEM may equal DECL or it may be a previous decl of the same name. */
2819: tem = pushdecl (decl);
2820:
2821: /* For a local variable, define the RTL now. */
2822: if (current_binding_level != global_binding_level
2823: /* But not if this is a duplicate decl
2824: and we preserved the rtl from the previous one
2825: (which may or may not happen). */
2826: && DECL_RTL (tem) == 0)
2827: {
2828: if (TYPE_SIZE (TREE_TYPE (tem)) != 0)
2829: expand_decl (tem);
2830: else if (TREE_CODE (TREE_TYPE (tem)) == ARRAY_TYPE
2831: && DECL_INITIAL (tem) != 0)
2832: expand_decl (tem);
2833: }
2834:
2835: if (init_written)
2836: {
2837: /* When parsing and digesting the initializer,
2838: use temporary storage. Do this even if we will ignore the value. */
2839: if (current_binding_level == global_binding_level && debug_temp_inits)
2840: temporary_allocation ();
2841: }
2842:
2843: return tem;
2844: }
2845:
2846: /* Finish processing of a declaration;
2847: install its initial value.
2848: If the length of an array type is not known before,
2849: it must be determined now, from the initial value, or it is an error. */
2850:
2851: void
2852: finish_decl (decl, init, asmspec_tree)
2853: tree decl, init;
2854: tree asmspec_tree;
2855: {
2856: register tree type = TREE_TYPE (decl);
2857: int was_incomplete = (DECL_SIZE (decl) == 0);
2858: int temporary = allocation_temporary_p ();
2859: char *asmspec = 0;
2860:
2861: if (asmspec_tree)
2862: asmspec = TREE_STRING_POINTER (asmspec_tree);
2863:
2864: /* If `start_decl' didn't like having an initialization, ignore it now. */
2865:
2866: if (init != 0 && DECL_INITIAL (decl) == 0)
2867: init = 0;
2868: /* Don't crash if parm is initialized. */
2869: if (TREE_CODE (decl) == PARM_DECL)
2870: init = 0;
2871:
2872: if (init)
2873: {
2874: if (TREE_CODE (decl) != TYPE_DECL)
2875: store_init_value (decl, init);
2876: else
2877: {
2878: /* typedef foo = bar; store the type of bar as the type of foo. */
2879: TREE_TYPE (decl) = TREE_TYPE (init);
2880: DECL_INITIAL (decl) = init = 0;
2881: }
2882: }
2883:
2884: /* For top-level declaration, the initial value was read in
2885: the temporary obstack. MAXINDEX, rtl, etc. to be made below
2886: must go in the permanent obstack; but don't discard the
2887: temporary data yet. */
2888:
2889: if (current_binding_level == global_binding_level && temporary)
2890: end_temporary_allocation ();
2891:
2892: /* Deduce size of array from initialization, if not already known */
2893:
2894: if (TREE_CODE (type) == ARRAY_TYPE
2895: && TYPE_DOMAIN (type) == 0
2896: && TREE_CODE (decl) != TYPE_DECL)
2897: {
2898: int do_default
2899: = (TREE_STATIC (decl)
2900: /* Even if pedantic, an external linkage array
2901: may have incomplete type at first. */
2902: ? pedantic && !TREE_PUBLIC (decl)
2903: : !TREE_EXTERNAL (decl));
2904: int failure
2905: = complete_array_type (type, DECL_INITIAL (decl), do_default);
2906:
2907: /* Get the completed type made by complete_array_type. */
2908: type = TREE_TYPE (decl);
2909:
2910: if (failure == 1)
2911: error_with_decl (decl, "initializer fails to determine size of `%s'");
2912:
2913: if (failure == 2)
2914: {
2915: if (do_default)
2916: error_with_decl (decl, "array size missing in `%s'");
2917: else if (!pedantic && TREE_STATIC (decl))
2918: TREE_EXTERNAL (decl) = 1;
2919: }
2920:
2921: if (pedantic && TYPE_DOMAIN (type) != 0
2922: && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)),
2923: integer_zero_node))
2924: error_with_decl (decl, "zero-size array `%s'");
2925:
2926: layout_decl (decl, 0);
2927: }
2928:
2929: if (TREE_CODE (decl) == VAR_DECL)
2930: {
2931: if (TREE_STATIC (decl) && DECL_SIZE (decl) == 0)
2932: {
2933: /* A static variable with an incomplete type:
2934: that is an error if it is initialized or `static'.
2935: Otherwise, let it through, but if it is not `extern'
2936: then it may cause an error message later. */
2937: if (! (TREE_PUBLIC (decl) && DECL_INITIAL (decl) == 0))
2938: error_with_decl (decl, "storage size of `%s' isn't known");
2939: }
2940: else if (!TREE_EXTERNAL (decl) && DECL_SIZE (decl) == 0)
2941: {
2942: /* An automatic variable with an incomplete type:
2943: that is an error. */
2944: error_with_decl (decl, "storage size of `%s' isn't known");
2945: TREE_TYPE (decl) = error_mark_node;
2946: }
2947:
2948: if ((TREE_EXTERNAL (decl) || TREE_STATIC (decl))
2949: && DECL_SIZE (decl) != 0
2950: && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
2951: error_with_decl (decl, "storage size of `%s' isn't constant");
2952: }
2953:
2954: /* Output the assembler code and/or RTL code for variables and functions,
2955: unless the type is an undefined structure or union.
2956: If not, it will get done when the type is completed. */
2957:
2958: if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2959: {
2960: if (flag_traditional && allocation_temporary_p ())
2961: {
2962: push_obstacks_nochange ();
2963: end_temporary_allocation ();
2964: /* This is a no-op in c-lang.c or something real in objc-actions.c. */
2965: maybe_objc_check_decl (decl);
2966: rest_of_decl_compilation (decl, asmspec,
2967: current_binding_level == global_binding_level,
2968: 0);
2969: pop_obstacks ();
2970: }
2971: else
2972: {
2973: /* This is a no-op in c-lang.c or something real in objc-actions.c. */
2974: maybe_objc_check_decl (decl);
2975: rest_of_decl_compilation (decl, asmspec,
2976: current_binding_level == global_binding_level,
2977: 0);
2978: }
2979: if (current_binding_level != global_binding_level)
2980: {
2981: /* Recompute the RTL of a local array now
2982: if it used to be an incomplete type. */
2983: if (was_incomplete
2984: && ! TREE_STATIC (decl) && ! TREE_EXTERNAL (decl))
2985: {
2986: /* If we used it already as memory, it must stay in memory. */
2987: TREE_ADDRESSABLE (decl) = TREE_USED (decl);
2988: /* If it's still incomplete now, no init will save it. */
2989: if (DECL_SIZE (decl) == 0)
2990: DECL_INITIAL (decl) = 0;
2991: expand_decl (decl);
2992: }
2993: /* Compute and store the initial value. */
2994: expand_decl_init (decl);
2995: }
2996: }
2997:
2998: if (TREE_CODE (decl) == TYPE_DECL)
2999: {
3000: /* This is a no-op in c-lang.c or something real in objc-actions.c. */
3001: maybe_objc_check_decl (decl);
3002: rest_of_decl_compilation (decl, 0,
3003: current_binding_level == global_binding_level,
3004: 0);
3005: }
3006:
3007: if (temporary && TREE_PERMANENT (decl))
3008: {
3009: /* We need to remember that this array HAD an initialization,
3010: but discard the actual temporary nodes,
3011: since we can't have a permanent node keep pointing to them. */
3012: if (DECL_INITIAL (decl) != 0)
3013: DECL_INITIAL (decl) = error_mark_node;
3014: }
3015:
3016: /* Resume permanent allocation, if not within a function. */
3017: /* The corresponding push_obstacks_nochange is in start_decl,
3018: and in push_parm_decl and in grokfield. */
3019: pop_obstacks ();
3020: if (current_binding_level == global_binding_level && temporary)
3021: /* Actually free the temporary space that we no longer need. */
3022: permanent_allocation ();
3023:
3024: /* At the end of a declaration, throw away any variable type sizes
3025: of types defined inside that declaration. There is no use
3026: computing them in the following function definition. */
3027: if (current_binding_level == global_binding_level)
3028: get_pending_sizes ();
3029: }
3030:
3031: /* If DECL has a cleanup, build and return that cleanup here.
3032: This is a callback called by expand_expr. */
3033:
3034: tree
3035: maybe_build_cleanup (decl)
3036: tree decl;
3037: {
3038: /* There are no cleanups in C. */
3039: return NULL_TREE;
3040: }
3041:
3042: /* Given a parsed parameter declaration,
3043: decode it into a PARM_DECL and push that on the current binding level.
3044: Also, for the sake of forward parm decls,
3045: record the given order of parms in `parm_order'. */
3046:
3047: void
3048: push_parm_decl (parm)
3049: tree parm;
3050: {
3051: tree decl;
3052:
3053: /* The corresponding pop_obstacks is in finish_decl. */
3054: push_obstacks_nochange ();
3055:
3056: decl = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm), PARM, 0);
3057: decl = pushdecl (decl);
3058:
3059: current_binding_level->parm_order
3060: = tree_cons (NULL_TREE, decl, current_binding_level->parm_order);
3061:
3062: /* Add this decl to the current binding level. */
3063: finish_decl (decl, NULL_TREE, NULL_TREE);
3064: }
3065:
3066: /* Clear the given order of parms in `parm_order'.
3067: Used at start of parm list,
3068: and also at semicolon terminating forward decls. */
3069:
3070: void
3071: clear_parm_order ()
3072: {
3073: current_binding_level->parm_order = NULL_TREE;
3074: }
3075:
3076: /* Make TYPE a complete type based on INITIAL_VALUE.
3077: Return 0 if successful, 1 if INITIAL_VALUE can't be decyphered,
3078: 2 if there was no information (in which case assume 1 if DO_DEFAULT). */
3079:
3080: int
3081: complete_array_type (type, initial_value, do_default)
3082: tree type;
3083: tree initial_value;
3084: int do_default;
3085: {
3086: register tree maxindex = NULL_TREE;
3087: int value = 0;
3088:
3089: if (initial_value)
3090: {
3091: /* Note MAXINDEX is really the maximum index,
3092: one less than the size. */
3093: if (TREE_CODE (initial_value) == STRING_CST)
3094: {
3095: int eltsize
3096: = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value)));
3097: maxindex = build_int_2 (TREE_STRING_LENGTH (initial_value) / eltsize - 1, 0);
3098: }
3099: else if (TREE_CODE (initial_value) == CONSTRUCTOR)
3100: {
3101: register int nelts
3102: = list_length (CONSTRUCTOR_ELTS (initial_value));
3103: maxindex = build_int_2 (nelts - 1, 0);
3104: }
3105: else
3106: {
3107: /* Make an error message unless that happened already. */
3108: if (initial_value != error_mark_node)
3109: value = 1;
3110:
3111: /* Prevent further error messages. */
3112: maxindex = build_int_2 (1, 0);
3113: }
3114: }
3115:
3116: if (!maxindex)
3117: {
3118: if (do_default)
3119: maxindex = build_int_2 (1, 0);
3120: value = 2;
3121: }
3122:
3123: if (maxindex)
3124: {
3125: TYPE_DOMAIN (type) = build_index_type (maxindex);
3126: if (!TREE_TYPE (maxindex))
3127: TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
3128: }
3129:
3130: /* Lay out the type now that we can get the real answer. */
3131:
3132: layout_type (type);
3133:
3134: return value;
3135: }
3136:
3137: /* Given declspecs and a declarator,
3138: determine the name and type of the object declared
3139: and construct a ..._DECL node for it.
3140: (In one case we can return a ..._TYPE node instead.
3141: For invalid input we sometimes return 0.)
3142:
3143: DECLSPECS is a chain of tree_list nodes whose value fields
3144: are the storage classes and type specifiers.
3145:
3146: DECL_CONTEXT says which syntactic context this declaration is in:
3147: NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3148: FUNCDEF for a function definition. Like NORMAL but a few different
3149: error messages in each case. Return value may be zero meaning
3150: this definition is too screwy to try to parse.
3151: PARM for a parameter declaration (either within a function prototype
3152: or before a function body). Make a PARM_DECL, or return void_type_node.
3153: TYPENAME if for a typename (in a cast or sizeof).
3154: Don't make a DECL node; just return the ..._TYPE node.
3155: FIELD for a struct or union field; make a FIELD_DECL.
3156: BITFIELD for a field with specified width.
3157: INITIALIZED is 1 if the decl has an initializer.
3158:
3159: In the TYPENAME case, DECLARATOR is really an absolute declarator.
3160: It may also be so in the PARM case, for a prototype where the
3161: argument type is specified but not the name.
3162:
3163: This function is where the complicated C meanings of `static'
3164: and `extern' are intrepreted. */
3165:
3166: static tree
3167: grokdeclarator (declarator, declspecs, decl_context, initialized)
3168: tree declspecs;
3169: tree declarator;
3170: enum decl_context decl_context;
3171: int initialized;
3172: {
3173: int specbits = 0;
3174: tree spec;
3175: tree type = NULL_TREE;
3176: int longlong = 0;
3177: int constp;
3178: int volatilep;
3179: int inlinep;
3180: int explicit_int = 0;
3181: int explicit_char = 0;
3182: tree typedef_decl = 0;
3183: char *name;
3184: tree typedef_type = 0;
3185: int funcdef_flag = 0;
3186: enum tree_code innermost_code = ERROR_MARK;
3187: int bitfield = 0;
3188: int variable_size = 0;
3189:
3190: if (decl_context == BITFIELD)
3191: bitfield = 1, decl_context = FIELD;
3192:
3193: if (decl_context == FUNCDEF)
3194: funcdef_flag = 1, decl_context = NORMAL;
3195:
3196: push_obstacks_nochange ();
3197:
3198: if (flag_traditional && allocation_temporary_p ())
3199: end_temporary_allocation ();
3200:
3201: /* Look inside a declarator for the name being declared
3202: and get it as a string, for an error message. */
3203: {
3204: register tree decl = declarator;
3205: name = 0;
3206:
3207: while (decl)
3208: switch (TREE_CODE (decl))
3209: {
3210: case ARRAY_REF:
3211: case INDIRECT_REF:
3212: case CALL_EXPR:
3213: innermost_code = TREE_CODE (decl);
3214: decl = TREE_OPERAND (decl, 0);
3215: break;
3216:
3217: case IDENTIFIER_NODE:
3218: name = IDENTIFIER_POINTER (decl);
3219: decl = 0;
3220: break;
3221:
3222: default:
3223: abort ();
3224: }
3225: if (name == 0)
3226: name = "type name";
3227: }
3228:
3229: /* A function definition's declarator must have the form of
3230: a function declarator. */
3231:
3232: if (funcdef_flag && innermost_code != CALL_EXPR)
3233: return 0;
3234:
3235: /* Anything declared one level down from the top level
3236: must be one of the parameters of a function
3237: (because the body is at least two levels down). */
3238:
3239: /* If this looks like a function definition, make it one,
3240: even if it occurs where parms are expected.
3241: Then store_parm_decls will reject it and not use it as a parm. */
3242: if (decl_context == NORMAL && !funcdef_flag
3243: && current_binding_level->level_chain == global_binding_level)
3244: decl_context = PARM;
3245:
3246: /* Look through the decl specs and record which ones appear.
3247: Some typespecs are defined as built-in typenames.
3248: Others, the ones that are modifiers of other types,
3249: are represented by bits in SPECBITS: set the bits for
3250: the modifiers that appear. Storage class keywords are also in SPECBITS.
3251:
3252: If there is a typedef name or a type, store the type in TYPE.
3253: This includes builtin typedefs such as `int'.
3254:
3255: Set EXPLICIT_INT or EXPLICIT_CHAR if the type is `int' or `char'
3256: and did not come from a user typedef.
3257:
3258: Set LONGLONG if `long' is mentioned twice. */
3259:
3260: for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
3261: {
3262: register int i;
3263: register tree id = TREE_VALUE (spec);
3264:
3265: if (id == ridpointers[(int) RID_INT])
3266: explicit_int = 1;
3267: if (id == ridpointers[(int) RID_CHAR])
3268: explicit_char = 1;
3269:
3270: if (TREE_CODE (id) == IDENTIFIER_NODE)
3271: for (i = (int) RID_FIRST_MODIFIER; i < (int) RID_MAX; i++)
3272: {
3273: if (ridpointers[i] == id)
3274: {
3275: if (i == (int) RID_LONG && specbits & (1<<i))
3276: {
3277: if (pedantic)
3278: pedwarn ("duplicate `%s'", IDENTIFIER_POINTER (id));
3279: else if (longlong)
3280: warning ("`long long long' is too long for GCC");
3281: else
3282: longlong = 1;
3283: }
3284: else if (specbits & (1 << i))
3285: warning ("duplicate `%s'", IDENTIFIER_POINTER (id));
3286: specbits |= 1 << i;
3287: goto found;
3288: }
3289: }
3290: if (type)
3291: error ("two or more data types in declaration of `%s'", name);
3292: /* Actual typedefs come to us as TYPE_DECL nodes. */
3293: else if (TREE_CODE (id) == TYPE_DECL)
3294: {
3295: type = TREE_TYPE (id);
3296: typedef_decl = id;
3297: }
3298: /* Built-in types come as identifiers. */
3299: else if (TREE_CODE (id) == IDENTIFIER_NODE)
3300: {
3301: register tree t = lookup_name (id);
3302: if (TREE_TYPE (t) == error_mark_node)
3303: ;
3304: else if (!t || TREE_CODE (t) != TYPE_DECL)
3305: error ("`%s' fails to be a typedef or built in type",
3306: IDENTIFIER_POINTER (id));
3307: else
3308: {
3309: type = TREE_TYPE (t);
3310: typedef_decl = t;
3311: }
3312: }
3313: else if (TREE_CODE (id) != ERROR_MARK)
3314: type = id;
3315:
3316: found: {}
3317: }
3318:
3319: typedef_type = type;
3320: if (type)
3321: variable_size = C_TYPE_VARIABLE_SIZE (type);
3322:
3323: /* No type at all: default to `int', and set EXPLICIT_INT
3324: because it was not a user-defined typedef. */
3325:
3326: if (type == 0)
3327: {
3328: if (funcdef_flag && warn_return_type
3329: && ! (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3330: | (1 << (int) RID_SIGNED) | (1 << (int) RID_UNSIGNED))))
3331: warn_about_return_type = 1;
3332: explicit_int = 1;
3333: type = integer_type_node;
3334: }
3335:
3336: /* Now process the modifiers that were specified
3337: and check for invalid combinations. */
3338:
3339: /* Long double is a special combination. */
3340:
3341: if ((specbits & 1 << (int) RID_LONG) && type == double_type_node)
3342: {
3343: specbits &= ~ (1 << (int) RID_LONG);
3344: type = long_double_type_node;
3345: }
3346:
3347: /* Check all other uses of type modifiers. */
3348:
3349: if (specbits & ((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3350: | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED)))
3351: {
3352: int ok = 0;
3353:
3354: if (TREE_CODE (type) != INTEGER_TYPE)
3355: error ("long, short, signed or unsigned invalid for `%s'", name);
3356: else if ((specbits & 1 << (int) RID_LONG)
3357: && (specbits & 1 << (int) RID_SHORT))
3358: error ("long and short specified together for `%s'", name);
3359: else if (((specbits & 1 << (int) RID_LONG)
3360: || (specbits & 1 << (int) RID_SHORT))
3361: && explicit_char)
3362: error ("long or short specified with char for `%s'", name);
3363: else if (((specbits & 1 << (int) RID_LONG)
3364: || (specbits & 1 << (int) RID_SHORT))
3365: && TREE_CODE (type) == REAL_TYPE)
3366: error ("long or short specified with floating type for `%s'", name);
3367: else if ((specbits & 1 << (int) RID_SIGNED)
3368: && (specbits & 1 << (int) RID_UNSIGNED))
3369: error ("signed and unsigned given together for `%s'", name);
3370: else
3371: {
3372: ok = 1;
3373: if (!explicit_int && !explicit_char && pedantic)
3374: {
3375: pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
3376: name);
3377: if (flag_pedantic_errors)
3378: ok = 0;
3379: }
3380: }
3381:
3382: /* Discard the type modifiers if they are invalid. */
3383: if (! ok)
3384: {
3385: specbits &= ~((1 << (int) RID_LONG) | (1 << (int) RID_SHORT)
3386: | (1 << (int) RID_UNSIGNED) | (1 << (int) RID_SIGNED));
3387: longlong = 0;
3388: }
3389: }
3390:
3391: /* Decide whether an integer type is signed or not.
3392: Optionally treat bitfields as signed by default. */
3393: if (specbits & 1 << (int) RID_UNSIGNED
3394: /* Traditionally, all bitfields are unsigned. */
3395: || (bitfield && flag_traditional)
3396: || (bitfield && ! flag_signed_bitfields
3397: && (explicit_int || explicit_char
3398: /* A typedef for plain `int' without `signed'
3399: can be controlled just like plain `int'. */
3400: || ! (typedef_decl != 0
3401: && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
3402: && TREE_CODE (type) != ENUMERAL_TYPE
3403: && !(specbits & 1 << (int) RID_SIGNED)))
3404: {
3405: if (longlong)
3406: type = long_long_unsigned_type_node;
3407: else if (specbits & 1 << (int) RID_LONG)
3408: type = long_unsigned_type_node;
3409: else if (specbits & 1 << (int) RID_SHORT)
3410: type = short_unsigned_type_node;
3411: else if (type == char_type_node)
3412: type = unsigned_char_type_node;
3413: else if (typedef_decl)
3414: type = unsigned_type (type);
3415: else
3416: type = unsigned_type_node;
3417: }
3418: else if ((specbits & 1 << (int) RID_SIGNED)
3419: && type == char_type_node)
3420: type = signed_char_type_node;
3421: else if (longlong)
3422: type = long_long_integer_type_node;
3423: else if (specbits & 1 << (int) RID_LONG)
3424: type = long_integer_type_node;
3425: else if (specbits & 1 << (int) RID_SHORT)
3426: type = short_integer_type_node;
3427:
3428: /* Set CONSTP if this declaration is `const', whether by
3429: explicit specification or via a typedef.
3430: Likewise for VOLATILEP. */
3431:
3432: constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (type);
3433: volatilep = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (type);
3434: inlinep = !! (specbits & (1 << (int) RID_INLINE));
3435: if (constp > 1)
3436: warning ("duplicate `const'");
3437: if (volatilep > 1)
3438: warning ("duplicate `volatile'");
3439: if (! flag_gen_aux_info && (TYPE_READONLY (type) || TYPE_VOLATILE (type)))
3440: type = TYPE_MAIN_VARIANT (type);
3441:
3442: /* Warn if two storage classes are given. Default to `auto'. */
3443:
3444: {
3445: int nclasses = 0;
3446:
3447: if (specbits & 1 << (int) RID_AUTO) nclasses++;
3448: if (specbits & 1 << (int) RID_STATIC) nclasses++;
3449: if (specbits & 1 << (int) RID_EXTERN) nclasses++;
3450: if (specbits & 1 << (int) RID_REGISTER) nclasses++;
3451: if (specbits & 1 << (int) RID_TYPEDEF) nclasses++;
3452:
3453: /* Warn about storage classes that are invalid for certain
3454: kinds of declarations (parameters, typenames, etc.). */
3455:
3456: if (nclasses > 1)
3457: error ("multiple storage classes in declaration of `%s'", name);
3458: else if (funcdef_flag
3459: && (specbits
3460: & ((1 << (int) RID_REGISTER)
3461: | (1 << (int) RID_AUTO)
3462: | (1 << (int) RID_TYPEDEF))))
3463: {
3464: if (specbits & 1 << (int) RID_AUTO
3465: && (pedantic || current_binding_level == global_binding_level))
3466: pedwarn ("function definition declared `auto'");
3467: if (specbits & 1 << (int) RID_REGISTER)
3468: error ("function definition declared `register'");
3469: if (specbits & 1 << (int) RID_TYPEDEF)
3470: error ("function definition declared `typedef'");
3471: specbits &= ~ ((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
3472: | (1 << (int) RID_AUTO));
3473: }
3474: else if (decl_context != NORMAL && nclasses > 0)
3475: {
3476: if (decl_context == PARM && specbits & 1 << (int) RID_REGISTER)
3477: ;
3478: else
3479: {
3480: error ((decl_context == FIELD
3481: ? "storage class specified for structure field `%s'"
3482: : (decl_context == PARM
3483: ? "storage class specified for parameter `%s'"
3484: : "storage class specified for typename")),
3485: name);
3486: specbits &= ~ ((1 << (int) RID_TYPEDEF) | (1 << (int) RID_REGISTER)
3487: | (1 << (int) RID_AUTO) | (1 << (int) RID_STATIC)
3488: | (1 << (int) RID_EXTERN));
3489: }
3490: }
3491: else if (specbits & 1 << (int) RID_EXTERN && initialized && ! funcdef_flag)
3492: {
3493: /* `extern' with initialization is invalid if not at top level. */
3494: if (current_binding_level == global_binding_level)
3495: warning ("`%s' initialized and declared `extern'", name);
3496: else
3497: error ("`%s' has both `extern' and initializer", name);
3498: }
3499: else if (specbits & 1 << (int) RID_EXTERN && funcdef_flag
3500: && current_binding_level != global_binding_level)
3501: error ("nested function `%s' declared `extern'", name);
3502: else if (current_binding_level == global_binding_level
3503: && specbits & (1 << (int) RID_AUTO))
3504: error ("top-level declaration of `%s' specifies `auto'", name);
3505: }
3506:
3507: /* Now figure out the structure of the declarator proper.
3508: Descend through it, creating more complex types, until we reach
3509: the declared identifier (or NULL_TREE, in an absolute declarator). */
3510:
3511: while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
3512: {
3513: if (type == error_mark_node)
3514: {
3515: declarator = TREE_OPERAND (declarator, 0);
3516: continue;
3517: }
3518:
3519: /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
3520: an INDIRECT_REF (for *...),
3521: a CALL_EXPR (for ...(...)),
3522: an identifier (for the name being declared)
3523: or a null pointer (for the place in an absolute declarator
3524: where the name was omitted).
3525: For the last two cases, we have just exited the loop.
3526:
3527: At this point, TYPE is the type of elements of an array,
3528: or for a function to return, or for a pointer to point to.
3529: After this sequence of ifs, TYPE is the type of the
3530: array or function or pointer, and DECLARATOR has had its
3531: outermost layer removed. */
3532:
3533: if (TREE_CODE (declarator) == ARRAY_REF)
3534: {
3535: register tree itype = NULL_TREE;
3536: register tree size = TREE_OPERAND (declarator, 1);
3537:
3538: declarator = TREE_OPERAND (declarator, 0);
3539:
3540: /* Check for some types that there cannot be arrays of. */
3541:
3542: if (type == void_type_node)
3543: {
3544: error ("declaration of `%s' as array of voids", name);
3545: type = error_mark_node;
3546: }
3547:
3548: if (TREE_CODE (type) == FUNCTION_TYPE)
3549: {
3550: error ("declaration of `%s' as array of functions", name);
3551: type = error_mark_node;
3552: }
3553:
3554: if (size == error_mark_node)
3555: type = error_mark_node;
3556:
3557: if (type == error_mark_node)
3558: continue;
3559:
3560: /* If size was specified, set ITYPE to a range-type for that size.
3561: Otherwise, ITYPE remains null. finish_decl may figure it out
3562: from an initial value. */
3563:
3564: if (size)
3565: {
3566: /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
3567: while (TREE_CODE (size) == NON_LVALUE_EXPR)
3568: size = TREE_OPERAND (size, 0);
3569:
3570: if (TREE_CODE (TREE_TYPE (size)) != INTEGER_TYPE
3571: && TREE_CODE (TREE_TYPE (size)) != ENUMERAL_TYPE)
3572: {
3573: error ("size of array `%s' has non-integer type", name);
3574: size = integer_one_node;
3575: }
3576: if (pedantic && integer_zerop (size))
3577: pedwarn ("ANSI C forbids zero-size array `%s'", name);
3578: if (TREE_CODE (size) == INTEGER_CST)
3579: {
3580: if (INT_CST_LT (size, integer_zero_node))
3581: {
3582: error ("size of array `%s' is negative", name);
3583: size = integer_one_node;
3584: }
3585: itype = build_index_type (build_int_2 (TREE_INT_CST_LOW (size) - 1, 0));
3586: }
3587: else
3588: {
3589: if (pedantic)
3590: pedwarn ("ANSI C forbids variable-size array `%s'", name);
3591: itype = build_binary_op (MINUS_EXPR, size, integer_one_node,
3592: 1);
3593: /* Make sure the array size remains visibly nonconstant
3594: even if it is (eg) a const variable with known value. */
3595: variable_size = 1;
3596: itype = build_index_type (save_expr (itype));
3597: }
3598: }
3599:
3600: #if 0 /* This had bad results for pointers to arrays, as in
3601: union incomplete (*foo)[4]; */
3602: /* Complain about arrays of incomplete types, except in typedefs. */
3603:
3604: if (TYPE_SIZE (type) == 0
3605: /* Avoid multiple warnings for nested array types. */
3606: && TREE_CODE (type) != ARRAY_TYPE
3607: && !(specbits & (1 << (int) RID_TYPEDEF))
3608: && !C_TYPE_BEING_DEFINED (type))
3609: warning ("array type has incomplete element type");
3610: #endif
3611:
3612: /* Build the array type itself.
3613: Merge any constancy or volatility into the target type. */
3614:
3615: #if 0 /* We shouldn't have a function type here at all!
3616: Functions aren't allowed as array elements. */
3617: if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
3618: && (constp || volatilep))
3619: pedwarn ("ANSI C forbids const or volatile function types");
3620: #endif
3621: if (constp || volatilep)
3622: type = c_build_type_variant (type, constp, volatilep);
3623:
3624: #if 0 /* don't clear these; leave them set so that the array type
3625: or the variable is itself const or volatile. */
3626: constp = 0;
3627: volatilep = 0;
3628: #endif
3629:
3630: type = build_array_type (type, itype);
3631: if (variable_size)
3632: C_TYPE_VARIABLE_SIZE (type) = 1;
3633: }
3634: else if (TREE_CODE (declarator) == CALL_EXPR)
3635: {
3636: tree arg_types;
3637:
3638: /* Declaring a function type.
3639: Make sure we have a valid type for the function to return. */
3640: if (type == error_mark_node)
3641: continue;
3642:
3643: variable_size = 0;
3644:
3645: /* Warn about some types functions can't return. */
3646:
3647: if (TREE_CODE (type) == FUNCTION_TYPE)
3648: {
3649: error ("`%s' declared as function returning a function", name);
3650: type = integer_type_node;
3651: }
3652: if (TREE_CODE (type) == ARRAY_TYPE)
3653: {
3654: error ("`%s' declared as function returning an array", name);
3655: type = integer_type_node;
3656: }
3657:
3658: #ifndef TRADITIONAL_RETURN_FLOAT
3659: /* Traditionally, declaring return type float means double. */
3660:
3661: if (flag_traditional && type == float_type_node)
3662: type = double_type_node;
3663: #endif /* TRADITIONAL_RETURN_FLOAT */
3664:
3665: /* Construct the function type and go to the next
3666: inner layer of declarator. */
3667:
3668: arg_types = grokparms (TREE_OPERAND (declarator, 1),
3669: funcdef_flag
3670: /* Say it's a definition
3671: only for the CALL_EXPR
3672: closest to the identifier. */
3673: && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE);
3674: #if 0 /* This seems to be false. We turn off temporary allocation
3675: above in this function if -traditional.
3676: And this code caused inconsistent results with prototypes:
3677: callers would ignore them, and pass arguments wrong. */
3678:
3679: /* Omit the arg types if -traditional, since the arg types
3680: and the list links might not be permanent. */
3681: type = build_function_type (type, flag_traditional ? 0 : arg_types);
3682: #endif
3683: type = build_function_type (type, arg_types);
3684: declarator = TREE_OPERAND (declarator, 0);
3685:
3686: /* Set the TYPE_CONTEXTs for each tagged type which is local to
3687: the formal parameter list of this FUNCTION_TYPE to point to
3688: the FUNCTION_TYPE node itself. */
3689:
3690: {
3691: register tree link;
3692:
3693: for (link = current_function_parm_tags;
3694: link;
3695: link = TREE_CHAIN (link))
3696: TYPE_CONTEXT (TREE_VALUE (link)) = type;
3697: }
3698: }
3699: else if (TREE_CODE (declarator) == INDIRECT_REF)
3700: {
3701: /* Merge any constancy or volatility into the target type
3702: for the pointer. */
3703:
3704: if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
3705: && (constp || volatilep))
3706: pedwarn ("ANSI C forbids const or volatile function types");
3707: if (constp || volatilep)
3708: type = c_build_type_variant (type, constp, volatilep);
3709: constp = 0;
3710: volatilep = 0;
3711: variable_size = 0;
3712:
3713: type = build_pointer_type (type);
3714:
3715: /* Process a list of type modifier keywords
3716: (such as const or volatile) that were given inside the `*'. */
3717:
3718: if (TREE_TYPE (declarator))
3719: {
3720: register tree typemodlist;
3721: int erred = 0;
3722: for (typemodlist = TREE_TYPE (declarator); typemodlist;
3723: typemodlist = TREE_CHAIN (typemodlist))
3724: {
3725: if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
3726: constp++;
3727: else if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
3728: volatilep++;
3729: else if (!erred)
3730: {
3731: erred = 1;
3732: error ("invalid type modifier within pointer declarator");
3733: }
3734: }
3735: if (constp > 1)
3736: warning ("duplicate `const'");
3737: if (volatilep > 1)
3738: warning ("duplicate `volatile'");
3739: }
3740:
3741: declarator = TREE_OPERAND (declarator, 0);
3742: }
3743: else
3744: abort ();
3745:
3746: }
3747:
3748: /* Now TYPE has the actual type. */
3749:
3750: /* If this is declaring a typedef name, return a TYPE_DECL. */
3751:
3752: if (specbits & (1 << (int) RID_TYPEDEF))
3753: {
3754: tree decl;
3755: /* Note that the grammar rejects storage classes
3756: in typenames, fields or parameters */
3757: if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
3758: && (constp || volatilep))
3759: pedwarn ("ANSI C forbids const or volatile function types");
3760: if (constp || volatilep)
3761: type = c_build_type_variant (type, constp, volatilep);
3762: pop_obstacks ();
3763: decl = build_decl (TYPE_DECL, declarator, type);
3764: if ((specbits & (1 << (int) RID_SIGNED))
3765: || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
3766: C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
3767: return decl;
3768: }
3769:
3770: /* Detect the case of an array type of unspecified size
3771: which came, as such, direct from a typedef name.
3772: We must copy the type, so that each identifier gets
3773: a distinct type, so that each identifier's size can be
3774: controlled separately by its own initializer. */
3775:
3776: if (type != 0 && typedef_type != 0
3777: && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type)
3778: && TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == 0)
3779: {
3780: type = build_array_type (TREE_TYPE (type), 0);
3781: if (variable_size)
3782: C_TYPE_VARIABLE_SIZE (type) = 1;
3783: }
3784:
3785: /* If this is a type name (such as, in a cast or sizeof),
3786: compute the type and return it now. */
3787:
3788: if (decl_context == TYPENAME)
3789: {
3790: /* Note that the grammar rejects storage classes
3791: in typenames, fields or parameters */
3792: if (pedantic && TREE_CODE (type) == FUNCTION_TYPE
3793: && (constp || volatilep))
3794: pedwarn ("ANSI C forbids const or volatile function types");
3795: if (constp || volatilep)
3796: type = c_build_type_variant (type, constp, volatilep);
3797: pop_obstacks ();
3798: return type;
3799: }
3800:
3801: /* `void' at top level (not within pointer)
3802: is allowed only in typedefs or type names.
3803: We don't complain about parms either, but that is because
3804: a better error message can be made later. */
3805:
3806: if (type == void_type_node && decl_context != PARM)
3807: {
3808: error ("variable or field `%s' declared void",
3809: IDENTIFIER_POINTER (declarator));
3810: type = integer_type_node;
3811: }
3812:
3813: /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
3814: or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
3815:
3816: {
3817: register tree decl;
3818:
3819: if (decl_context == PARM)
3820: {
3821: tree type_as_written = type;
3822:
3823: /* A parameter declared as an array of T is really a pointer to T.
3824: One declared as a function is really a pointer to a function. */
3825:
3826: if (TREE_CODE (type) == ARRAY_TYPE)
3827: {
3828: /* Transfer const-ness of array into that of type pointed to. */
3829: type = build_pointer_type
3830: (c_build_type_variant (TREE_TYPE (type), constp, volatilep));
3831: volatilep = constp = 0;
3832: variable_size = 0;
3833: }
3834: else if (TREE_CODE (type) == FUNCTION_TYPE)
3835: {
3836: if (pedantic && (constp || volatilep))
3837: pedwarn ("ANSI C forbids const or volatile function types");
3838: type = build_pointer_type (c_build_type_variant (type, constp, volatilep));
3839: volatilep = constp = 0;
3840: }
3841:
3842: if (initialized)
3843: error ("parameter `%s' is initialized", name);
3844:
3845: decl = build_decl (PARM_DECL, declarator, type);
3846: if (variable_size)
3847: C_DECL_VARIABLE_SIZE (decl) = 1;
3848:
3849: /* Compute the type actually passed in the parmlist,
3850: for the case where there is no prototype.
3851: (For example, shorts and chars are passed as ints.)
3852: When there is a prototype, this is overridden later. */
3853:
3854: DECL_ARG_TYPE (decl) = type;
3855: if (type == float_type_node)
3856: DECL_ARG_TYPE (decl) = double_type_node;
3857: else if (TREE_CODE (type) == INTEGER_TYPE
3858: && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
3859: DECL_ARG_TYPE (decl) = integer_type_node;
3860:
3861: DECL_ARG_TYPE_AS_WRITTEN (decl) = type_as_written;
3862: }
3863: else if (decl_context == FIELD)
3864: {
3865: /* Structure field. It may not be a function. */
3866:
3867: if (TREE_CODE (type) == FUNCTION_TYPE)
3868: {
3869: error ("field `%s' declared as a function",
3870: IDENTIFIER_POINTER (declarator));
3871: type = build_pointer_type (type);
3872: }
3873: else if (TREE_CODE (type) != ERROR_MARK && TYPE_SIZE (type) == 0)
3874: {
3875: error ("field `%s' has incomplete type",
3876: IDENTIFIER_POINTER (declarator));
3877: type = error_mark_node;
3878: }
3879: /* Move type qualifiers down to element of an array. */
3880: if (TREE_CODE (type) == ARRAY_TYPE && (constp || volatilep))
3881: {
3882: type = build_array_type (c_build_type_variant (TREE_TYPE (type),
3883: constp, volatilep),
3884: TYPE_DOMAIN (type));
3885: #if 0 /* Leave the field const or volatile as well. */
3886: constp = volatilep = 0;
3887: #endif
3888: }
3889: decl = build_decl (FIELD_DECL, declarator, type);
3890: if (variable_size)
3891: C_DECL_VARIABLE_SIZE (decl) = 1;
3892: }
3893: else if (TREE_CODE (type) == FUNCTION_TYPE)
3894: {
3895: if (specbits & (1 << (int) RID_AUTO)
3896: && (pedantic || current_binding_level == global_binding_level))
3897: pedwarn ("invalid storage class for function `%s'",
3898: IDENTIFIER_POINTER (declarator));
3899: if (specbits & (1 << (int) RID_REGISTER))
3900: error ("invalid storage class for function `%s'",
3901: IDENTIFIER_POINTER (declarator));
3902: /* Function declaration not at top level.
3903: Storage classes other than `extern' are not allowed
3904: and `extern' makes no difference. */
3905: if (current_binding_level != global_binding_level
3906: && (specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_INLINE)))
3907: && pedantic)
3908: pedwarn ("invalid storage class for function `%s'",
3909: IDENTIFIER_POINTER (declarator));
3910: decl = build_decl (FUNCTION_DECL, declarator, type);
3911:
3912: if (pedantic && (constp || volatilep))
3913: pedwarn ("ANSI C forbids const or volatile functions");
3914:
3915: /* Every function declaration is "external"
3916: except for those which are inside a function body
3917: in which `auto' is used.
3918: That is a case not specified by ANSI C,
3919: and we use it for forward declarations for nested functions. */
3920: if (!(specbits & (1 << (int) RID_AUTO))
3921: || current_binding_level == global_binding_level)
3922: TREE_EXTERNAL (decl) = 1;
3923: /* Record absence of global scope for `static' or `auto'. */
3924: TREE_PUBLIC (decl)
3925: = !(specbits & ((1 << (int) RID_STATIC) | (1 << (int) RID_AUTO)));
3926: /* Record presence of `inline', if it is reasonable. */
3927: if (inlinep)
3928: {
3929: tree last = tree_last (TYPE_ARG_TYPES (type));
3930:
3931: if (! strcmp (IDENTIFIER_POINTER (declarator), "main"))
3932: warning ("cannot inline function `main'");
3933: else if (last && TREE_VALUE (last) != void_type_node)
3934: warning ("inline declaration ignored for function with `...'");
3935: else
3936: /* Assume that otherwise the function can be inlined. */
3937: TREE_INLINE (decl) = 1;
3938:
3939: if (specbits & (1 << (int) RID_EXTERN))
3940: current_extern_inline = 1;
3941: }
3942: }
3943: else
3944: {
3945: /* It's a variable. */
3946:
3947: /* Move type qualifiers down to element of an array. */
3948: if (TREE_CODE (type) == ARRAY_TYPE && (constp || volatilep))
3949: {
3950: type = build_array_type (c_build_type_variant (TREE_TYPE (type),
3951: constp, volatilep),
3952: TYPE_DOMAIN (type));
3953: #if 0 /* Leave the variable const or volatile as well. */
3954: constp = volatilep = 0;
3955: #endif
3956: }
3957:
3958: decl = build_decl (VAR_DECL, declarator, type);
3959: if (variable_size)
3960: C_DECL_VARIABLE_SIZE (decl) = 1;
3961:
3962: if (inlinep)
3963: pedwarn_with_decl (decl, "variable `%s' declared `inline'");
3964:
3965: /* An uninitialized decl with `extern' is a reference. */
3966: TREE_EXTERNAL (decl)
3967: = !initialized && (specbits & (1 << (int) RID_EXTERN));
3968: /* At top level, either `static' or no s.c. makes a definition
3969: (perhaps tentative), and absence of `static' makes it public. */
3970: if (current_binding_level == global_binding_level)
3971: {
3972: TREE_PUBLIC (decl) = !(specbits & (1 << (int) RID_STATIC));
3973: TREE_STATIC (decl) = ! TREE_EXTERNAL (decl);
3974: }
3975: /* Not at top level, only `static' makes a static definition. */
3976: else
3977: {
3978: TREE_STATIC (decl) = (specbits & (1 << (int) RID_STATIC)) != 0;
3979: TREE_PUBLIC (decl) = TREE_EXTERNAL (decl);
3980: }
3981: }
3982:
3983: /* Record `register' declaration for warnings on &
3984: and in case doing stupid register allocation. */
3985:
3986: if (specbits & (1 << (int) RID_REGISTER))
3987: TREE_REGDECL (decl) = 1;
3988:
3989: /* Record constancy and volatility. */
3990:
3991: if (constp)
3992: TREE_READONLY (decl) = 1;
3993: if (volatilep)
3994: {
3995: TREE_SIDE_EFFECTS (decl) = 1;
3996: TREE_THIS_VOLATILE (decl) = 1;
3997: }
3998: /* If a type has volatile components, it should be stored in memory.
3999: Otherwise, the fact that those components are volatile
4000: will be ignored, and would even crash the compiler. */
4001: if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl)))
4002: mark_addressable (decl);
4003:
4004: pop_obstacks ();
4005:
4006: return decl;
4007: }
4008: }
4009:
4010: /* Make a variant type in the proper way for C, propagating qualifiers
4011: down to the element type of an array. */
4012:
4013: tree
4014: c_build_type_variant (type, constp, volatilep)
4015: tree type;
4016: int constp, volatilep;
4017: {
4018: if (TREE_CODE (type) == ARRAY_TYPE)
4019: type = build_array_type (c_build_type_variant (TREE_TYPE (type),
4020: constp, volatilep),
4021: TYPE_DOMAIN (type));
4022: return build_type_variant (type, constp, volatilep);
4023: }
4024:
4025: /* Decode the parameter-list info for a function type or function definition.
4026: The argument is the value returned by `get_parm_info' (or made in parse.y
4027: if there is an identifier list instead of a parameter decl list).
4028: These two functions are separate because when a function returns
4029: or receives functions then each is called multiple times but the order
4030: of calls is different. The last call to `grokparms' is always the one
4031: that contains the formal parameter names of a function definition.
4032:
4033: Store in `last_function_parms' a chain of the decls of parms.
4034: Also store in `last_function_parm_tags' a chain of the struct, union,
4035: and enum tags declared among the parms.
4036:
4037: Return a list of arg types to use in the FUNCTION_TYPE for this function.
4038:
4039: FUNCDEF_FLAG is nonzero for a function definition, 0 for
4040: a mere declaration. A nonempty identifier-list gets an error message
4041: when FUNCDEF_FLAG is zero. */
4042:
4043: static tree
4044: grokparms (parms_info, funcdef_flag)
4045: tree parms_info;
4046: int funcdef_flag;
4047: {
4048: tree first_parm = TREE_CHAIN (parms_info);
4049:
4050: last_function_parms = TREE_PURPOSE (parms_info);
4051: last_function_parm_tags = TREE_VALUE (parms_info);
4052:
4053: if (warn_strict_prototypes && first_parm == 0 && !funcdef_flag)
4054: warning ("function declaration isn't a prototype");
4055:
4056: if (first_parm != 0
4057: && TREE_CODE (TREE_VALUE (first_parm)) == IDENTIFIER_NODE)
4058: {
4059: if (! funcdef_flag)
4060: pedwarn ("parameter names (without types) in function declaration");
4061:
4062: last_function_parms = first_parm;
4063: return 0;
4064: }
4065: else
4066: {
4067: tree parm;
4068: tree typelt;
4069: /* We no longer test FUNCDEF_FLAG.
4070: If the arg types are incomplete in a declaration,
4071: they must include undefined tags.
4072: These tags can never be defined in the scope of the declaration,
4073: so the types can never be completed,
4074: and no call can be compiled successfully. */
4075: #if 0
4076: /* In a fcn definition, arg types must be complete. */
4077: if (funcdef_flag)
4078: #endif
4079: for (parm = last_function_parms, typelt = first_parm;
4080: parm;
4081: parm = TREE_CHAIN (parm))
4082: /* Skip over any enumeration constants declared here. */
4083: if (TREE_CODE (parm) == PARM_DECL)
4084: {
4085: /* Barf if the parameter itself has an incomplete type. */
4086: tree type = TREE_VALUE (typelt);
4087: if (TYPE_SIZE (type) == 0)
4088: {
4089: if (funcdef_flag && DECL_NAME (parm) != 0)
4090: error ("parameter `%s' has incomplete type",
4091: IDENTIFIER_POINTER (DECL_NAME (parm)));
4092: else
4093: warning ("parameter has incomplete type");
4094: if (funcdef_flag)
4095: {
4096: TREE_VALUE (typelt) = error_mark_node;
4097: TREE_TYPE (parm) = error_mark_node;
4098: }
4099: }
4100: #if 0 /* This has been replaced by parm_tags_warning
4101: which uses a more accurate criterion for what to warn about. */
4102: else
4103: {
4104: /* Now warn if is a pointer to an incomplete type. */
4105: while (TREE_CODE (type) == POINTER_TYPE
4106: || TREE_CODE (type) == REFERENCE_TYPE)
4107: type = TREE_TYPE (type);
4108: type = TYPE_MAIN_VARIANT (type);
4109: if (TYPE_SIZE (type) == 0)
4110: {
4111: if (DECL_NAME (parm) != 0)
4112: warning ("parameter `%s' points to incomplete type",
4113: IDENTIFIER_POINTER (DECL_NAME (parm)));
4114: else
4115: warning ("parameter points to incomplete type");
4116: }
4117: }
4118: #endif
4119: typelt = TREE_CHAIN (typelt);
4120: }
4121:
4122: return first_parm;
4123: }
4124: }
4125:
4126:
4127: /* Return a tree_list node with info on a parameter list just parsed.
4128: The TREE_PURPOSE is a chain of decls of those parms.
4129: The TREE_VALUE is a list of structure, union and enum tags defined.
4130: The TREE_CHAIN is a list of argument types to go in the FUNCTION_TYPE.
4131: This tree_list node is later fed to `grokparms'.
4132:
4133: VOID_AT_END nonzero means append `void' to the end of the type-list.
4134: Zero means the parmlist ended with an ellipsis so don't append `void'. */
4135:
4136: tree
4137: get_parm_info (void_at_end)
4138: int void_at_end;
4139: {
4140: register tree decl, t;
4141: register tree types = 0;
4142: int erred = 0;
4143: tree tags = gettags ();
4144: tree parms = getdecls ();
4145: tree new_parms = 0;
4146: tree order = current_binding_level->parm_order;
4147:
4148: /* Just `void' (and no ellipsis) is special. There are really no parms. */
4149: if (void_at_end && parms != 0
4150: && TREE_CHAIN (parms) == 0
4151: && TREE_TYPE (parms) == void_type_node
4152: && DECL_NAME (parms) == 0)
4153: {
4154: parms = NULL_TREE;
4155: storedecls (NULL_TREE);
4156: return saveable_tree_cons (NULL_TREE, NULL_TREE,
4157: saveable_tree_cons (NULL_TREE, void_type_node, NULL_TREE));
4158: }
4159:
4160: /* Extract enumerator values and other non-parms declared with the parms. */
4161: for (decl = parms; decl; )
4162: {
4163: tree next = TREE_CHAIN (decl);
4164:
4165: if (TREE_CODE (decl) != PARM_DECL)
4166: {
4167: TREE_CHAIN (decl) = new_parms;
4168: new_parms = decl;
4169: }
4170: decl = next;
4171: }
4172:
4173: /* Put the parm decls back in the order they were in in the parm list. */
4174: for (t = order; t; t = TREE_CHAIN (t))
4175: {
4176: if (TREE_CHAIN (t))
4177: TREE_CHAIN (TREE_VALUE (t)) = TREE_VALUE (TREE_CHAIN (t));
4178: else
4179: TREE_CHAIN (TREE_VALUE (t)) = 0;
4180: }
4181:
4182: new_parms = chainon (order ? nreverse (TREE_VALUE (order)) : 0,
4183: new_parms);
4184:
4185: /* Store the parmlist in the binding level since the old one
4186: is no longer a valid list. (We have changed the chain pointers.) */
4187: storedecls (new_parms);
4188:
4189: for (decl = new_parms; decl; decl = TREE_CHAIN (decl))
4190: /* There may also be declarations for enumerators if an enumeration
4191: type is declared among the parms. Ignore them here. */
4192: if (TREE_CODE (decl) == PARM_DECL)
4193: {
4194: /* Since there is a prototype,
4195: args are passed in their declared types. */
4196: tree type = TREE_TYPE (decl);
4197: DECL_ARG_TYPE (decl) = type;
4198: #ifdef PROMOTE_PROTOTYPES
4199: if (TREE_CODE (type) == INTEGER_TYPE
4200: && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
4201: DECL_ARG_TYPE (decl) = integer_type_node;
4202: #endif
4203:
4204: types = saveable_tree_cons (NULL_TREE, TREE_TYPE (decl), types);
4205: if (TREE_VALUE (types) == void_type_node && ! erred
4206: && DECL_NAME (decl) == 0)
4207: {
4208: error ("`void' in parameter list must be the entire list");
4209: erred = 1;
4210: }
4211: }
4212:
4213: if (void_at_end)
4214: return saveable_tree_cons (new_parms, tags,
4215: nreverse (saveable_tree_cons (NULL_TREE, void_type_node, types)));
4216:
4217: return saveable_tree_cons (new_parms, tags, nreverse (types));
4218: }
4219:
4220: /* At end of parameter list, warn about any struct, union or enum tags
4221: defined within. Do so because these types cannot ever become complete. */
4222:
4223: void
4224: parmlist_tags_warning ()
4225: {
4226: tree elt;
4227: static int already;
4228:
4229: for (elt = current_binding_level->tags; elt; elt = TREE_CHAIN (elt))
4230: {
4231: enum tree_code code = TREE_CODE (TREE_VALUE (elt));
4232: warning ("`%s %s' declared inside parameter list",
4233: (code == RECORD_TYPE ? "struct"
4234: : code == UNION_TYPE ? "union"
4235: : "enum"),
4236: IDENTIFIER_POINTER (TREE_PURPOSE (elt)));
4237: if (! already)
4238: {
4239: warning ("its scope is only this definition or declaration,");
4240: warning ("which is probably not what you want.");
4241: already = 1;
4242: }
4243: }
4244: }
4245:
4246: /* Get the struct, enum or union (CODE says which) with tag NAME.
4247: Define the tag as a forward-reference if it is not defined. */
4248:
4249: tree
4250: xref_tag (code, name)
4251: enum tree_code code;
4252: tree name;
4253: {
4254: int temporary = allocation_temporary_p ();
4255:
4256: /* If a cross reference is requested, look up the type
4257: already defined for this tag and return it. */
4258:
4259: register tree ref = lookup_tag (code, name, current_binding_level, 0);
4260: /* Even if this is the wrong type of tag, return what we found.
4261: There will be an error message anyway, from pending_xref_error.
4262: If we create an empty xref just for an invalid use of the type,
4263: the main result is to create lots of superflous error messages. */
4264: if (ref)
4265: return ref;
4266:
4267: push_obstacks_nochange ();
4268:
4269: if (current_binding_level == global_binding_level && temporary)
4270: end_temporary_allocation ();
4271:
4272: /* If no such tag is yet defined, create a forward-reference node
4273: and record it as the "definition".
4274: When a real declaration of this type is found,
4275: the forward-reference will be altered into a real type. */
4276:
4277: ref = make_node (code);
4278: if (code == ENUMERAL_TYPE)
4279: {
4280: /* (In ANSI, Enums can be referred to only if already defined.) */
4281: if (pedantic)
4282: pedwarn ("ANSI C forbids forward references to `enum' types");
4283: /* Give the type a default layout like unsigned int
4284: to avoid crashing if it does not get defined. */
4285: TYPE_MODE (ref) = TYPE_MODE (unsigned_type_node);
4286: TYPE_ALIGN (ref) = TYPE_ALIGN (unsigned_type_node);
4287: TREE_UNSIGNED (ref) = 1;
4288: TYPE_PRECISION (ref) = TYPE_PRECISION (unsigned_type_node);
4289: TYPE_MIN_VALUE (ref) = TYPE_MIN_VALUE (unsigned_type_node);
4290: TYPE_MAX_VALUE (ref) = TYPE_MAX_VALUE (unsigned_type_node);
4291: }
4292:
4293: pushtag (name, ref);
4294:
4295: pop_obstacks ();
4296:
4297: return ref;
4298: }
4299:
4300: /* Make sure that the tag NAME is defined *in the current binding level*
4301: at least as a forward reference.
4302: CODE says which kind of tag NAME ought to be. */
4303:
4304: tree
4305: start_struct (code, name)
4306: enum tree_code code;
4307: tree name;
4308: {
4309: /* If there is already a tag defined at this binding level
4310: (as a forward reference), just return it. */
4311:
4312: register tree ref = 0;
4313:
4314: if (name != 0)
4315: ref = lookup_tag (code, name, current_binding_level, 1);
4316: if (ref && TREE_CODE (ref) == code)
4317: {
4318: C_TYPE_BEING_DEFINED (ref) = 1;
4319: if (TYPE_FIELDS (ref))
4320: error ((code == UNION_TYPE ? "redefinition of `union %s'"
4321: : "redefinition of `struct %s'"),
4322: IDENTIFIER_POINTER (name));
4323:
4324: return ref;
4325: }
4326:
4327: /* Otherwise create a forward-reference just so the tag is in scope. */
4328:
4329: ref = make_node (code);
4330: pushtag (name, ref);
4331: C_TYPE_BEING_DEFINED (ref) = 1;
4332: return ref;
4333: }
4334:
4335: /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
4336: of a structure component, returning a FIELD_DECL node.
4337: WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.
4338:
4339: This is done during the parsing of the struct declaration.
4340: The FIELD_DECL nodes are chained together and the lot of them
4341: are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
4342:
4343: tree
4344: grokfield (filename, line, declarator, declspecs, width)
4345: char *filename;
4346: int line;
4347: tree declarator, declspecs, width;
4348: {
4349: tree value;
4350:
4351: /* The corresponding pop_obstacks is in finish_decl. */
4352: push_obstacks_nochange ();
4353:
4354: value = grokdeclarator (declarator, declspecs, width ? BITFIELD : FIELD, 0);
4355:
4356: finish_decl (value, NULL, NULL);
4357: DECL_INITIAL (value) = width;
4358:
4359: return value;
4360: }
4361:
4362: /* Function to help qsort sort FIELD_DECLs by name order. */
4363:
4364: static int
4365: field_decl_cmp (x, y)
4366: tree *x, *y;
4367: {
4368: return (long)DECL_NAME (*x) - (long)DECL_NAME (*y);
4369: }
4370:
4371: /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
4372: FIELDLIST is a chain of FIELD_DECL nodes for the fields. */
4373:
4374: tree
4375: finish_struct (t, fieldlist)
4376: register tree t, fieldlist;
4377: {
4378: register tree x;
4379: int old_momentary;
4380: int toplevel = global_binding_level == current_binding_level;
4381:
4382: /* If this type was previously laid out as a forward reference,
4383: make sure we lay it out again. */
4384:
4385: TYPE_SIZE (t) = 0;
4386:
4387: /* Nameless union parm types are useful as GCC extension. */
4388: if (! (TREE_CODE (t) == UNION_TYPE && TYPE_NAME (t) == 0) && !pedantic)
4389: /* Otherwise, warn about any struct or union def. in parmlist. */
4390: if (in_parm_level_p ())
4391: {
4392: if (pedantic)
4393: pedwarn ((TREE_CODE (t) == UNION_TYPE ? "union defined inside parms"
4394: : "structure defined inside parms"));
4395: else
4396: warning ((TREE_CODE (t) == UNION_TYPE ? "union defined inside parms"
4397: : "structure defined inside parms"));
4398: }
4399:
4400: old_momentary = suspend_momentary ();
4401:
4402: if (fieldlist == 0 && pedantic)
4403: pedwarn ((TREE_CODE (t) == UNION_TYPE ? "union has no members"
4404: : "structure has no members"));
4405:
4406: /* Install struct as DECL_CONTEXT of each field decl.
4407: Also process specified field sizes.
4408: Set DECL_FRAME_SIZE to the specified size, or 0 if none specified.
4409: The specified size is found in the DECL_INITIAL.
4410: Store 0 there, except for ": 0" fields (so we can find them
4411: and delete them, below). */
4412:
4413: for (x = fieldlist; x; x = TREE_CHAIN (x))
4414: {
4415: DECL_CONTEXT (x) = t;
4416: DECL_FRAME_SIZE (x) = 0;
4417:
4418: /* If any field is const, the structure type is pseudo-const. */
4419: if (TREE_READONLY (x))
4420: C_TYPE_FIELDS_READONLY (t) = 1;
4421: else
4422: {
4423: /* A field that is pseudo-const makes the structure likewise. */
4424: tree t1 = TREE_TYPE (x);
4425: while (TREE_CODE (t1) == ARRAY_TYPE)
4426: t1 = TREE_TYPE (t1);
4427: if ((TREE_CODE (t1) == RECORD_TYPE || TREE_CODE (t1) == UNION_TYPE)
4428: && C_TYPE_FIELDS_READONLY (t1))
4429: C_TYPE_FIELDS_READONLY (t) = 1;
4430: }
4431:
4432: /* Any field that is volatile means variables of this type must be
4433: treated in some ways as volatile. */
4434: if (TREE_THIS_VOLATILE (x))
4435: C_TYPE_FIELDS_VOLATILE (t) = 1;
4436:
4437: /* Any field of nominal variable size implies structure is too. */
4438: if (C_DECL_VARIABLE_SIZE (x))
4439: C_TYPE_VARIABLE_SIZE (t) = 1;
4440:
4441: /* Detect invalid bit-field size. */
4442: while (DECL_INITIAL (x)
4443: && TREE_CODE (DECL_INITIAL (x)) == NON_LVALUE_EXPR)
4444: DECL_INITIAL (x) = TREE_OPERAND (DECL_INITIAL (x), 0);
4445: if (DECL_INITIAL (x) && TREE_CODE (DECL_INITIAL (x)) != INTEGER_CST)
4446: {
4447: error_with_decl (x, "bit-field `%s' width not an integer constant");
4448: DECL_INITIAL (x) = NULL;
4449: }
4450:
4451: /* Detect invalid bit-field type. */
4452: if (DECL_INITIAL (x)
4453: && TREE_CODE (TREE_TYPE (x)) != INTEGER_TYPE
4454: && TREE_CODE (TREE_TYPE (x)) != ENUMERAL_TYPE)
4455: {
4456: error_with_decl (x, "bit-field `%s' has invalid type");
4457: DECL_INITIAL (x) = NULL;
4458: }
4459: if (DECL_INITIAL (x) && pedantic
4460: && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != integer_type_node
4461: && TYPE_MAIN_VARIANT (TREE_TYPE (x)) != unsigned_type_node)
4462: pedwarn_with_decl (x, "bit-field `%s' type invalid in ANSI C");
4463:
4464: /* Detect and ignore out of range field width. */
4465: if (DECL_INITIAL (x))
4466: {
4467: register int width = TREE_INT_CST_LOW (DECL_INITIAL (x));
4468:
4469: if (width < 0)
4470: {
4471: DECL_INITIAL (x) = NULL;
4472: error_with_decl (x, "negative width in bit-field `%s'");
4473: }
4474: else if (width == 0 && DECL_NAME (x) != 0)
4475: {
4476: error_with_decl (x, "zero width for bit-field `%s'");
4477: DECL_INITIAL (x) = NULL;
4478: }
4479: else if (width > TYPE_PRECISION (TREE_TYPE (x)))
4480: {
4481: DECL_INITIAL (x) = NULL;
4482: pedwarn_with_decl (x, "width of `%s' exceeds its type");
4483: }
4484: }
4485:
4486: /* Process valid field width. */
4487: if (DECL_INITIAL (x))
4488: {
4489: register int width = TREE_INT_CST_LOW (DECL_INITIAL (x));
4490:
4491: DECL_FRAME_SIZE (x) = width;
4492: DECL_BIT_FIELD (x) = 1;
4493: DECL_INITIAL (x) = NULL;
4494:
4495: if (width == 0)
4496: {
4497: /* field size 0 => force desired amount of alignment. */
4498: #ifdef EMPTY_FIELD_BOUNDARY
4499: DECL_ALIGN (x) = MAX (DECL_ALIGN (x), EMPTY_FIELD_BOUNDARY);
4500: #endif
4501: #ifdef PCC_BITFIELD_TYPE_MATTERS
4502: DECL_ALIGN (x) = MAX (DECL_ALIGN (x),
4503: TYPE_ALIGN (TREE_TYPE (x)));
4504: #endif
4505: }
4506: }
4507: else
4508: /* Non-bit-fields are aligned for their type. */
4509: DECL_ALIGN (x) = MAX (DECL_ALIGN (x), TYPE_ALIGN (TREE_TYPE (x)));
4510: }
4511:
4512: /* Now DECL_INITIAL is null on all members. */
4513:
4514: /* Delete all duplicate fields from the fieldlist */
4515: for (x = fieldlist; x && TREE_CHAIN (x);)
4516: /* Anonymous fields aren't duplicates. */
4517: if (DECL_NAME (TREE_CHAIN (x)) == 0)
4518: x = TREE_CHAIN (x);
4519: else
4520: {
4521: register tree y = fieldlist;
4522:
4523: while (1)
4524: {
4525: if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
4526: break;
4527: if (y == x)
4528: break;
4529: y = TREE_CHAIN (y);
4530: }
4531: if (DECL_NAME (y) == DECL_NAME (TREE_CHAIN (x)))
4532: {
4533: error_with_decl (TREE_CHAIN (x), "duplicate member `%s'");
4534: TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
4535: }
4536: else x = TREE_CHAIN (x);
4537: }
4538:
4539: /* Now we have the nearly final fieldlist. Record it,
4540: then lay out the structure or union (including the fields). */
4541:
4542: TYPE_FIELDS (t) = fieldlist;
4543:
4544: layout_type (t);
4545:
4546: /* Delete all zero-width bit-fields from the front of the fieldlist */
4547: while (fieldlist
4548: && DECL_INITIAL (fieldlist))
4549: fieldlist = TREE_CHAIN (fieldlist);
4550: /* Delete all such members from the rest of the fieldlist */
4551: for (x = fieldlist; x;)
4552: {
4553: if (TREE_CHAIN (x) && DECL_INITIAL (TREE_CHAIN (x)))
4554: TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
4555: else x = TREE_CHAIN (x);
4556: }
4557:
4558: /* Now we have the truly final field list.
4559: Store it in this type and in the variants. */
4560:
4561: TYPE_FIELDS (t) = fieldlist;
4562:
4563: /* If there are lots of fields, sort so we can look through them fast.
4564: We arbitrarily consider 16 or more elts to be "a lot". */
4565: {
4566: int len = 0;
4567:
4568: for (x = fieldlist; x; x = TREE_CHAIN (x))
4569: {
4570: if (len > 15)
4571: break;
4572: len += 1;
4573: }
4574: if (len > 15)
4575: {
4576: tree *field_array;
4577: char *space;
4578:
4579: len += list_length (x);
4580: /* Use the same allocation policy here that make_node uses, to
4581: ensure that this lives as long as the rest of the struct decl.
4582: All decls in an inline function need to be saved. */
4583: if (allocation_temporary_p ())
4584: space = savealloc (sizeof (struct lang_type) + len * sizeof (tree));
4585: else
4586: space = oballoc (sizeof (struct lang_type) + len * sizeof (tree));
4587:
4588: TYPE_LANG_SPECIFIC (t) = (struct lang_type *) space;
4589: TYPE_LANG_SPECIFIC (t)->len = len;
4590:
4591: field_array = &TYPE_LANG_SPECIFIC (t)->elts[0];
4592: len = 0;
4593: for (x = fieldlist; x; x = TREE_CHAIN (x))
4594: field_array[len++] = x;
4595:
4596: qsort (field_array, len, sizeof (tree), field_decl_cmp);
4597: }
4598: }
4599:
4600: for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
4601: {
4602: TYPE_FIELDS (x) = TYPE_FIELDS (t);
4603: TYPE_LANG_SPECIFIC (x) = TYPE_LANG_SPECIFIC (t);
4604: TYPE_ALIGN (x) = TYPE_ALIGN (t);
4605: }
4606:
4607: /* Promote each bit-field's type to int if it is narrower than that. */
4608: for (x = fieldlist; x; x = TREE_CHAIN (x))
4609: if (DECL_BIT_FIELD (x)
4610: && TREE_CODE (TREE_TYPE (x)) == INTEGER_TYPE
4611: && (TREE_INT_CST_LOW (DECL_SIZE (x))
4612: < TYPE_PRECISION (integer_type_node)))
4613: TREE_TYPE (x) = integer_type_node;
4614:
4615: /* If this structure or union completes the type of any previous
4616: variable declaration, lay it out and output its rtl. */
4617:
4618: if (current_binding_level->n_incomplete != 0)
4619: {
4620: tree decl;
4621: for (decl = current_binding_level->names; decl; decl = TREE_CHAIN (decl))
4622: {
4623: if (TREE_TYPE (decl) == t
4624: && TREE_CODE (decl) != TYPE_DECL)
4625: {
4626: layout_decl (decl, 0);
4627: /* This is a no-op in c-lang.c or something real in objc-actions.c. */
4628: maybe_objc_check_decl (decl);
4629: rest_of_decl_compilation (decl, 0, toplevel, 0);
4630: if (! toplevel)
4631: expand_decl (decl);
4632: --current_binding_level->n_incomplete;
4633: }
4634: else if (TYPE_SIZE (TREE_TYPE (decl)) == 0
4635: && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
4636: {
4637: tree element = TREE_TYPE (decl);
4638: while (TREE_CODE (element) == ARRAY_TYPE)
4639: element = TREE_TYPE (element);
4640: if (element == t)
4641: layout_array_type (TREE_TYPE (decl));
4642: }
4643: }
4644: }
4645:
4646: resume_momentary (old_momentary);
4647:
4648: /* Finish debugging output for this type. */
4649: rest_of_type_compilation (t, toplevel);
4650:
4651: return t;
4652: }
4653:
4654: /* Lay out the type T, and its element type, and so on. */
4655:
4656: static void
4657: layout_array_type (t)
4658: tree t;
4659: {
4660: if (TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
4661: layout_array_type (TREE_TYPE (t));
4662: layout_type (t);
4663: }
4664:
4665: /* Begin compiling the definition of an enumeration type.
4666: NAME is its name (or null if anonymous).
4667: Returns the type object, as yet incomplete.
4668: Also records info about it so that build_enumerator
4669: may be used to declare the individual values as they are read. */
4670:
4671: tree
4672: start_enum (name)
4673: tree name;
4674: {
4675: register tree enumtype = 0;
4676:
4677: /* If this is the real definition for a previous forward reference,
4678: fill in the contents in the same object that used to be the
4679: forward reference. */
4680:
4681: if (name != 0)
4682: enumtype = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 1);
4683:
4684: if (enumtype == 0 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
4685: {
4686: enumtype = make_node (ENUMERAL_TYPE);
4687: pushtag (name, enumtype);
4688: }
4689:
4690: C_TYPE_BEING_DEFINED (enumtype) = 1;
4691:
4692: if (TYPE_VALUES (enumtype) != 0)
4693: {
4694: /* This enum is a named one that has been declared already. */
4695: error ("redeclaration of `enum %s'", IDENTIFIER_POINTER (name));
4696:
4697: /* Completely replace its old definition.
4698: The old enumerators remain defined, however. */
4699: TYPE_VALUES (enumtype) = 0;
4700: }
4701:
4702: enum_next_value = integer_zero_node;
4703:
4704: return enumtype;
4705: }
4706:
4707: /* After processing and defining all the values of an enumeration type,
4708: install their decls in the enumeration type and finish it off.
4709: ENUMTYPE is the type object and VALUES a list of decl-value pairs.
4710: Returns ENUMTYPE. */
4711:
4712: tree
4713: finish_enum (enumtype, values)
4714: register tree enumtype, values;
4715: {
4716: register tree pair;
4717: tree minnode = 0, maxnode = 0;
4718: register long maxvalue = 0;
4719: register long minvalue = 0;
4720: register int i;
4721: unsigned precision = 0;
4722: int toplevel = global_binding_level == current_binding_level;
4723:
4724: if (in_parm_level_p ())
4725: warning ("enum defined inside parms");
4726:
4727: /* Calculate the maximum value of any enumerator in this type. */
4728:
4729: for (pair = values; pair; pair = TREE_CHAIN (pair))
4730: {
4731: tree value = TREE_VALUE (pair);
4732: if (pair == values)
4733: minnode = maxnode = TREE_VALUE (pair);
4734: else
4735: {
4736: if (tree_int_cst_lt (maxnode, value))
4737: maxnode = value;
4738: if (tree_int_cst_lt (value, minnode))
4739: minnode = value;
4740: }
4741: }
4742:
4743: TYPE_MIN_VALUE (enumtype) = minnode;
4744: TYPE_MAX_VALUE (enumtype) = maxnode;
4745:
4746: /* Determine the precision this type needs. */
4747:
4748: if (TREE_INT_CST_HIGH (minnode) >= 0
4749: ? tree_int_cst_lt (TYPE_MAX_VALUE (unsigned_type_node), maxnode)
4750: : (tree_int_cst_lt (minnode, TYPE_MIN_VALUE (integer_type_node))
4751: || tree_int_cst_lt (TYPE_MAX_VALUE (integer_type_node), maxnode)))
4752: precision = TYPE_PRECISION (long_long_integer_type_node);
4753: else
4754: {
4755: int maxvalue = TREE_INT_CST_LOW (maxnode);
4756: int minvalue = TREE_INT_CST_LOW (minnode);
4757:
4758: if (maxvalue > 0)
4759: precision = floor_log2 (maxvalue) + 1;
4760: if (minvalue < 0)
4761: {
4762: /* Compute number of bits to represent magnitude of a negative value.
4763: Add one to MINVALUE since range of negative numbers
4764: includes the power of two. */
4765: unsigned negprecision = floor_log2 (-minvalue - 1) + 1;
4766: if (negprecision > precision)
4767: precision = negprecision;
4768: precision += 1; /* room for sign bit */
4769: }
4770:
4771: if (!precision)
4772: precision = 1;
4773: }
4774:
4775: if (flag_short_enums || precision > TYPE_PRECISION (integer_type_node))
4776: /* Use the width of the narrowest normal C type which is wide enough. */
4777: TYPE_PRECISION (enumtype) = TYPE_PRECISION (type_for_size (precision, 1));
4778: else
4779: TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
4780:
4781: TYPE_SIZE (enumtype) = 0;
4782: layout_type (enumtype);
4783:
4784: /* An enum can have some negative values; then it is signed. */
4785: TREE_UNSIGNED (enumtype) = ! tree_int_cst_lt (minnode, integer_zero_node);
4786:
4787: /* If the enumerators might not fit in an int, change their type now. */
4788: /* It seems more useful in the debugger to leave these as int
4789: unless the enumerator is wider than int. */
4790: if (TYPE_PRECISION (enumtype) <= TYPE_PRECISION (integer_type_node))
4791: for (pair = values; pair; pair = TREE_CHAIN (pair))
4792: {
4793: TREE_TYPE (TREE_PURPOSE (pair)) = enumtype;
4794: DECL_SIZE (TREE_PURPOSE (pair)) = TYPE_SIZE (enumtype);
4795: DECL_ALIGN (TREE_PURPOSE (pair)) = TYPE_ALIGN (enumtype);
4796: }
4797:
4798: /* Replace the decl nodes in VALUES with their names. */
4799: for (pair = values; pair; pair = TREE_CHAIN (pair))
4800: TREE_PURPOSE (pair) = DECL_NAME (TREE_PURPOSE (pair));
4801:
4802: TYPE_VALUES (enumtype) = values;
4803:
4804: /* Finish debugging output for this type. */
4805: rest_of_type_compilation (enumtype, toplevel);
4806:
4807: return enumtype;
4808: }
4809:
4810: /* Build and install a CONST_DECL for one value of the
4811: current enumeration type (one that was begun with start_enum).
4812: Return a tree-list containing the CONST_DECL and its value.
4813: Assignment of sequential values by default is handled here. */
4814:
4815: tree
4816: build_enumerator (name, value)
4817: tree name, value;
4818: {
4819: register tree decl;
4820:
4821: /* Validate and default VALUE. */
4822:
4823: /* Remove no-op casts from the value. */
4824: while (value != 0
4825: && (TREE_CODE (value) == NOP_EXPR
4826: || TREE_CODE (value) == NON_LVALUE_EXPR))
4827: value = TREE_OPERAND (value, 0);
4828:
4829: if (value != 0 && TREE_CODE (value) != INTEGER_CST)
4830: {
4831: error ("enumerator value for `%s' not integer constant",
4832: IDENTIFIER_POINTER (name));
4833: value = 0;
4834: }
4835:
4836: /* Default based on previous value. */
4837: /* It should no longer be possible to have NON_LVALUE_EXPR
4838: in the default. */
4839: if (value == 0)
4840: value = enum_next_value;
4841:
4842: if (pedantic && ! int_fits_type_p (value, integer_type_node))
4843: {
4844: pedwarn ("ANSI C restricts enumerator values to range of `int'");
4845: value = integer_zero_node;
4846: }
4847:
4848: /* Set basis for default for next value. */
4849: enum_next_value = build_binary_op (PLUS_EXPR, value, integer_one_node, 0);
4850:
4851: /* Now create a declaration for the enum value name. */
4852:
4853: decl = build_decl (CONST_DECL, name, integer_type_node);
4854: DECL_INITIAL (decl) = value;
4855: TREE_TYPE (value) = integer_type_node;
4856: pushdecl (decl);
4857:
4858: return saveable_tree_cons (decl, value, NULL);
4859: }
4860:
4861: /* Create the FUNCTION_DECL for a function definition.
4862: DECLSPECS and DECLARATOR are the parts of the declaration;
4863: they describe the function's name and the type it returns,
4864: but twisted together in a fashion that parallels the syntax of C.
4865:
4866: This function creates a binding context for the function body
4867: as well as setting up the FUNCTION_DECL in current_function_decl.
4868:
4869: Returns 1 on success. If the DECLARATOR is not suitable for a function
4870: (it defines a datum instead), we return 0, which tells
4871: yyparse to report a parse error.
4872:
4873: NESTED is nonzero for a function nested within another function. */
4874:
4875: int
4876: start_function (declspecs, declarator, nested)
4877: tree declarator, declspecs;
4878: int nested;
4879: {
4880: tree decl1, old_decl;
4881: tree restype;
4882:
4883: current_function_returns_value = 0; /* Assume, until we see it does. */
4884: current_function_returns_null = 0;
4885: warn_about_return_type = 0;
4886: current_extern_inline = 0;
4887: c_function_varargs = 0;
4888: named_labels = 0;
4889: shadowed_labels = 0;
4890:
4891: decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1);
4892:
4893: /* If the declarator is not suitable for a function definition,
4894: cause a syntax error. */
4895: if (decl1 == 0)
4896: return 0;
4897:
4898: announce_function (decl1);
4899:
4900: if (TYPE_SIZE (TREE_TYPE (TREE_TYPE (decl1))) == 0)
4901: {
4902: error ("return-type is an incomplete type");
4903: /* Make it return void instead. */
4904: TREE_TYPE (decl1)
4905: = build_function_type (void_type_node,
4906: TYPE_ARG_TYPES (TREE_TYPE (decl1)));
4907: }
4908:
4909: if (warn_about_return_type)
4910: warning ("return-type defaults to `int'");
4911:
4912: /* Save the parm names or decls from this function's declarator
4913: where store_parm_decls will find them. */
4914: current_function_parms = last_function_parms;
4915: current_function_parm_tags = last_function_parm_tags;
4916:
4917: /* Make the init_value nonzero so pushdecl knows this is not tentative.
4918: error_mark_node is replaced below (in poplevel) with the BLOCK. */
4919: DECL_INITIAL (decl1) = error_mark_node;
4920:
4921: /* If this definition isn't a prototype and we had a prototype declaration
4922: before, copy the arg type info from that prototype.
4923: But not if what we had before was a builtin function. */
4924: old_decl = lookup_name_current_level (DECL_NAME (decl1));
4925: if (old_decl != 0 && TREE_CODE (TREE_TYPE (old_decl)) == FUNCTION_TYPE
4926: && !DECL_BUILT_IN (old_decl)
4927: && TREE_TYPE (TREE_TYPE (decl1)) == TREE_TYPE (TREE_TYPE (old_decl))
4928: && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0)
4929: TREE_TYPE (decl1) = TREE_TYPE (old_decl);
4930:
4931: /* Optionally warn of old-fashioned def with no previous prototype. */
4932: if (warn_strict_prototypes
4933: && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0
4934: && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
4935: warning ("function declaration isn't a prototype");
4936: /* Optionally warn of any global def with no previous prototype. */
4937: else if (warn_missing_prototypes
4938: && TREE_PUBLIC (decl1)
4939: && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
4940: warning_with_decl (decl1, "no previous prototype for `%s'");
4941: /* Optionally warn of any def with no previous prototype
4942: if the function has already been used. */
4943: else if (warn_missing_prototypes
4944: && old_decl != 0 && TREE_USED (old_decl)
4945: && !(old_decl != 0 && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) != 0))
4946: warning_with_decl (decl1, "`%s' was used with no prototype before its definition");
4947:
4948: /* This is a definition, not a reference.
4949: So normally clear TREE_EXTERNAL.
4950: However, `extern inline' acts like a declaration
4951: except for defining how to inline. So set TREE_EXTERNAL in that case. */
4952: TREE_EXTERNAL (decl1) = current_extern_inline;
4953:
4954: /* This function exists in static storage.
4955: (This does not mean `static' in the C sense!) */
4956: TREE_STATIC (decl1) = 1;
4957:
4958: /* A nested function is not global. */
4959: if (current_function_decl != 0)
4960: TREE_PUBLIC (decl1) = 0;
4961:
4962: /* Record the decl so that the function name is defined.
4963: If we already have a decl for this name, and it is a FUNCTION_DECL,
4964: use the old decl. */
4965:
4966: current_function_decl = pushdecl (decl1);
4967:
4968: pushlevel (0);
4969: declare_parm_level (1);
4970: current_binding_level->subblocks_tag_transparent = 1;
4971:
4972: make_function_rtl (current_function_decl);
4973:
4974: restype = TREE_TYPE (TREE_TYPE (current_function_decl));
4975: /* Promote the value to int before returning it. */
4976: if (TREE_CODE (restype) == INTEGER_TYPE
4977: && TYPE_PRECISION (restype) < TYPE_PRECISION (integer_type_node))
4978: restype = integer_type_node;
4979: DECL_RESULT (current_function_decl) = build_decl (RESULT_DECL, 0, restype);
4980:
4981: if (!nested)
4982: /* Allocate further tree nodes temporarily during compilation
4983: of this function only. */
4984: temporary_allocation ();
4985:
4986: /* If this fcn was already referenced via a block-scope `extern' decl
4987: (or an implicit decl), propagate certain information about the usage. */
4988: if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
4989: TREE_ADDRESSABLE (current_function_decl) = 1;
4990:
4991: return 1;
4992: }
4993:
4994: /* Record that this function is going to be a varargs function.
4995: This is called before store_parm_decls, which is too early
4996: to call mark_varargs directly. */
4997:
4998: void
4999: c_mark_varargs ()
5000: {
5001: c_function_varargs = 1;
5002: }
5003:
5004: /* Store the parameter declarations into the current function declaration.
5005: This is called after parsing the parameter declarations, before
5006: digesting the body of the function.
5007:
5008: For an old-style definition, modify the function's type
5009: to specify at least the number of arguments. */
5010:
5011: void
5012: store_parm_decls ()
5013: {
5014: register tree fndecl = current_function_decl;
5015: register tree parm;
5016:
5017: /* This is either a chain of PARM_DECLs (if a prototype was used)
5018: or a list of IDENTIFIER_NODEs (for an old-fashioned C definition). */
5019: tree specparms = current_function_parms;
5020:
5021: /* This is a list of types declared among parms in a prototype. */
5022: tree parmtags = current_function_parm_tags;
5023:
5024: /* This is a chain of PARM_DECLs from old-style parm declarations. */
5025: register tree parmdecls = getdecls ();
5026:
5027: /* This is a chain of any other decls that came in among the parm
5028: declarations. If a parm is declared with enum {foo, bar} x;
5029: then CONST_DECLs for foo and bar are put here. */
5030: tree nonparms = 0;
5031:
5032: /* Nonzero if this definition is written with a prototype. */
5033: int prototype = 0;
5034:
5035: if (specparms != 0 && TREE_CODE (specparms) != TREE_LIST)
5036: {
5037: /* This case is when the function was defined with an ANSI prototype.
5038: The parms already have decls, so we need not do anything here
5039: except record them as in effect
5040: and complain if any redundant old-style parm decls were written. */
5041:
5042: register tree next;
5043: tree others = 0;
5044:
5045: prototype = 1;
5046:
5047: if (parmdecls != 0)
5048: error_with_decl (fndecl,
5049: "parm types given both in parmlist and separately");
5050:
5051: specparms = nreverse (specparms);
5052: for (parm = specparms; parm; parm = next)
5053: {
5054: next = TREE_CHAIN (parm);
5055: if (TREE_CODE (parm) == PARM_DECL)
5056: {
5057: if (DECL_NAME (parm) == 0)
5058: error_with_decl (parm, "parameter name omitted");
5059: else if (TREE_TYPE (parm) == void_type_node)
5060: error_with_decl (parm, "parameter `%s' declared void");
5061: pushdecl (parm);
5062: }
5063: else
5064: {
5065: /* If we find an enum constant or a type tag,
5066: put it aside for the moment. */
5067: TREE_CHAIN (parm) = 0;
5068: others = chainon (others, parm);
5069: }
5070: }
5071:
5072: /* Get the decls in their original chain order
5073: and record in the function. */
5074: DECL_ARGUMENTS (fndecl) = getdecls ();
5075:
5076: #if 0
5077: /* If this function takes a variable number of arguments,
5078: add a phony parameter to the end of the parm list,
5079: to represent the position of the first unnamed argument. */
5080: if (TREE_VALUE (tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl))))
5081: != void_type_node)
5082: {
5083: tree dummy = build_decl (PARM_DECL, NULL_TREE, void_type_node);
5084: /* Let's hope the address of the unnamed parm
5085: won't depend on its type. */
5086: TREE_TYPE (dummy) = integer_type_node;
5087: DECL_ARG_TYPE (dummy) = integer_type_node;
5088: DECL_ARGUMENTS (fndecl)
5089: = chainon (DECL_ARGUMENTS (fndecl), dummy);
5090: }
5091: #endif
5092:
5093: /* Now pushdecl the enum constants. */
5094: for (parm = others; parm; parm = next)
5095: {
5096: next = TREE_CHAIN (parm);
5097: if (DECL_NAME (parm) == 0)
5098: ;
5099: else if (TREE_TYPE (parm) == void_type_node)
5100: ;
5101: else if (TREE_CODE (parm) != PARM_DECL)
5102: pushdecl (parm);
5103: }
5104:
5105: storetags (chainon (parmtags, gettags ()));
5106: }
5107: else
5108: {
5109: /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
5110: each with a parm name as the TREE_VALUE.
5111:
5112: PARMDECLS is a chain of declarations for parameters.
5113: Warning! It can also contain CONST_DECLs which are not parameters
5114: but are names of enumerators of any enum types
5115: declared among the parameters.
5116:
5117: First match each formal parameter name with its declaration.
5118: Associate decls with the names and store the decls
5119: into the TREE_PURPOSE slots. */
5120:
5121: for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
5122: DECL_RESULT (parm) = 0;
5123:
5124: for (parm = specparms; parm; parm = TREE_CHAIN (parm))
5125: {
5126: register tree tail, found = NULL;
5127:
5128: if (TREE_VALUE (parm) == 0)
5129: {
5130: error_with_decl (fndecl, "parameter name missing from parameter list");
5131: TREE_PURPOSE (parm) = 0;
5132: continue;
5133: }
5134:
5135: /* See if any of the parmdecls specifies this parm by name.
5136: Ignore any enumerator decls. */
5137: for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
5138: if (DECL_NAME (tail) == TREE_VALUE (parm)
5139: && TREE_CODE (tail) == PARM_DECL)
5140: {
5141: found = tail;
5142: break;
5143: }
5144:
5145: /* If declaration already marked, we have a duplicate name.
5146: Complain, and don't use this decl twice. */
5147: if (found && DECL_RESULT (found) != 0)
5148: {
5149: error_with_decl (found, "multiple parameters named `%s'");
5150: found = 0;
5151: }
5152:
5153: /* If the declaration says "void", complain and ignore it. */
5154: if (found && TREE_TYPE (found) == void_type_node)
5155: {
5156: error_with_decl (found, "parameter `%s' declared void");
5157: TREE_TYPE (found) = integer_type_node;
5158: DECL_ARG_TYPE (found) = integer_type_node;
5159: layout_decl (found, 0);
5160: }
5161:
5162: /* Traditionally, a parm declared float is actually a double. */
5163: if (found && flag_traditional
5164: && TREE_TYPE (found) == float_type_node)
5165: TREE_TYPE (found) = double_type_node;
5166:
5167: /* If no declaration found, default to int. */
5168: if (!found)
5169: {
5170: found = build_decl (PARM_DECL, TREE_VALUE (parm),
5171: integer_type_node);
5172: DECL_ARG_TYPE (found) = TREE_TYPE (found);
5173: DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
5174: DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
5175: if (extra_warnings)
5176: warning_with_decl (found, "type of `%s' defaults to `int'");
5177: pushdecl (found);
5178: }
5179:
5180: TREE_PURPOSE (parm) = found;
5181:
5182: /* Mark this decl as "already found" -- see test, above.
5183: It is safe to use DECL_RESULT for this
5184: since it is not used in PARM_DECLs or CONST_DECLs. */
5185: DECL_RESULT (found) = error_mark_node;
5186: }
5187:
5188: /* Put anything which is on the parmdecls chain and which is
5189: not a PARM_DECL onto the list NONPARMS. (The types of
5190: non-parm things which might appear on the list include
5191: enumerators and NULL-named TYPE_DECL nodes.) Complain about
5192: any actual PARM_DECLs not matched with any names. */
5193:
5194: nonparms = 0;
5195: for (parm = parmdecls; parm; )
5196: {
5197: tree next = TREE_CHAIN (parm);
5198: TREE_CHAIN (parm) = 0;
5199:
5200: if (TREE_CODE (parm) != PARM_DECL)
5201: nonparms = chainon (nonparms, parm);
5202: else
5203: {
5204: /* Complain about args with incomplete types. */
5205: if (TYPE_SIZE (TREE_TYPE (parm)) == 0)
5206: {
5207: error_with_decl (parm, "parameter `%s' has incomplete type");
5208: TREE_TYPE (parm) = error_mark_node;
5209: }
5210:
5211: if (DECL_RESULT (parm) == 0)
5212: {
5213: error_with_decl (parm,
5214: "declaration for parameter `%s' but no such parameter");
5215: /* Pretend the parameter was not missing.
5216: This gets us to a standard state and minimizes
5217: further error messages. */
5218: specparms
5219: = chainon (specparms,
5220: tree_cons (parm, NULL_TREE, NULL_TREE));
5221: }
5222: }
5223:
5224: parm = next;
5225: }
5226:
5227: /* Chain the declarations together in the order of the list of names. */
5228: /* Store that chain in the function decl, replacing the list of names. */
5229: parm = specparms;
5230: DECL_ARGUMENTS (fndecl) = 0;
5231: {
5232: register tree last;
5233: for (last = 0; parm; parm = TREE_CHAIN (parm))
5234: if (TREE_PURPOSE (parm))
5235: {
5236: if (last == 0)
5237: DECL_ARGUMENTS (fndecl) = TREE_PURPOSE (parm);
5238: else
5239: TREE_CHAIN (last) = TREE_PURPOSE (parm);
5240: last = TREE_PURPOSE (parm);
5241: TREE_CHAIN (last) = 0;
5242: }
5243: }
5244:
5245: /* If there was a previous prototype,
5246: set the DECL_ARG_TYPE of each argument according to
5247: the type previously specified, and report any mismatches. */
5248:
5249: if (TYPE_ARG_TYPES (TREE_TYPE (fndecl)))
5250: {
5251: register tree type;
5252: for (parm = DECL_ARGUMENTS (fndecl),
5253: type = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
5254: parm || (type && TREE_VALUE (type) != void_type_node);
5255: parm = TREE_CHAIN (parm), type = TREE_CHAIN (type))
5256: {
5257: if (parm == 0 || type == 0
5258: || TREE_VALUE (type) == void_type_node)
5259: {
5260: error ("number of arguments doesn't match prototype");
5261: break;
5262: }
5263: /* Type for passing arg must be consistent
5264: with that declared for the arg. */
5265: if (! comptypes (DECL_ARG_TYPE (parm), TREE_VALUE (type))
5266: /* If -traditional, allow `unsigned int' instead of `int'
5267: in the prototype. */
5268: && (! (flag_traditional
5269: && DECL_ARG_TYPE (parm) == integer_type_node
5270: && TREE_VALUE (type) == unsigned_type_node)))
5271: {
5272: error ("argument `%s' doesn't match function prototype",
5273: IDENTIFIER_POINTER (DECL_NAME (parm)));
5274: if (DECL_ARG_TYPE (parm) == integer_type_node
5275: && TREE_VALUE (type) == TREE_TYPE (parm))
5276: {
5277: error ("a formal parameter type that promotes to `int'");
5278: error ("can match only `int' in the prototype");
5279: }
5280: if (DECL_ARG_TYPE (parm) == double_type_node
5281: && TREE_VALUE (type) == TREE_TYPE (parm))
5282: {
5283: error ("a formal parameter type that promotes to `double'");
5284: error ("can match only `double' in the prototype");
5285: }
5286: }
5287: }
5288: TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = 0;
5289: }
5290:
5291: /* Otherwise, create a prototype that would match. */
5292:
5293: else
5294: {
5295: register tree actual, type;
5296: register tree last = 0;
5297:
5298: for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
5299: {
5300: type = perm_tree_cons (NULL, DECL_ARG_TYPE (parm), NULL);
5301: if (last)
5302: TREE_CHAIN (last) = type;
5303: else
5304: actual = type;
5305: last = type;
5306: }
5307: type = perm_tree_cons (NULL, void_type_node, NULL);
5308: if (last)
5309: TREE_CHAIN (last) = type;
5310: else
5311: actual = type;
5312:
5313: TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl)) = actual;
5314: }
5315:
5316: /* Now store the final chain of decls for the arguments
5317: as the decl-chain of the current lexical scope.
5318: Put the enumerators in as well, at the front so that
5319: DECL_ARGUMENTS is not modified. */
5320:
5321: storedecls (chainon (nonparms, DECL_ARGUMENTS (fndecl)));
5322: }
5323:
5324: /* Make sure the binding level for the top of the function body
5325: gets a BLOCK if there are any in the function.
5326: Otherwise, the dbx output is wrong. */
5327:
5328: keep_next_if_subblocks = 1;
5329:
5330: /* ??? This might be an improvement,
5331: but needs to be thought about some more. */
5332: #if 0
5333: keep_next_level_flag = 1;
5334: #endif
5335:
5336: /* Write a record describing this function definition to the prototypes
5337: file (if requested). */
5338:
5339: gen_aux_info_record (fndecl, 1, 0, prototype);
5340:
5341: /* Initialize the RTL code for the function. */
5342:
5343: init_function_start (fndecl, input_filename, lineno);
5344:
5345: /* If this is a varargs function, inform function.c. */
5346:
5347: if (c_function_varargs)
5348: mark_varargs ();
5349:
5350: /* Set up parameters and prepare for return, for the function. */
5351:
5352: expand_function_start (fndecl, 0);
5353:
5354: /* If this function is `main', emit a call to `__main'
5355: to run global initializers, etc. */
5356: if (DECL_NAME (fndecl)
5357: && strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main") == 0
5358: && DECL_CONTEXT (fndecl) == NULL_TREE)
5359: expand_main_function ();
5360: }
5361:
5362: /* SPECPARMS is an identifier list--a chain of TREE_LIST nodes
5363: each with a parm name as the TREE_VALUE. A null pointer as TREE_VALUE
5364: stands for an ellipsis in the identifier list.
5365:
5366: PARMLIST is the data returned by get_parm_info for the
5367: parmlist that follows the semicolon.
5368:
5369: We return a value of the same sort that get_parm_info returns,
5370: except that it describes the combination of identifiers and parmlist. */
5371:
5372: tree
5373: combine_parm_decls (specparms, parmlist, void_at_end)
5374: tree specparms, parmlist;
5375: int void_at_end;
5376: {
5377: register tree fndecl = current_function_decl;
5378: register tree parm;
5379:
5380: tree parmdecls = TREE_PURPOSE (parmlist);
5381:
5382: /* This is a chain of any other decls that came in among the parm
5383: declarations. They were separated already by get_parm_info,
5384: so we just need to keep them separate. */
5385: tree nonparms = TREE_VALUE (parmlist);
5386:
5387: tree types = 0;
5388:
5389: for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
5390: DECL_RESULT (parm) = 0;
5391:
5392: for (parm = specparms; parm; parm = TREE_CHAIN (parm))
5393: {
5394: register tree tail, found = NULL;
5395:
5396: /* See if any of the parmdecls specifies this parm by name. */
5397: for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
5398: if (DECL_NAME (tail) == TREE_VALUE (parm))
5399: {
5400: found = tail;
5401: break;
5402: }
5403:
5404: /* If declaration already marked, we have a duplicate name.
5405: Complain, and don't use this decl twice. */
5406: if (found && DECL_RESULT (found) != 0)
5407: {
5408: error_with_decl (found, "multiple parameters named `%s'");
5409: found = 0;
5410: }
5411:
5412: /* If the declaration says "void", complain and ignore it. */
5413: if (found && TREE_TYPE (found) == void_type_node)
5414: {
5415: error_with_decl (found, "parameter `%s' declared void");
5416: TREE_TYPE (found) = integer_type_node;
5417: DECL_ARG_TYPE (found) = integer_type_node;
5418: layout_decl (found, 0);
5419: }
5420:
5421: /* Traditionally, a parm declared float is actually a double. */
5422: if (found && flag_traditional
5423: && TREE_TYPE (found) == float_type_node)
5424: TREE_TYPE (found) = double_type_node;
5425:
5426: /* If no declaration found, default to int. */
5427: if (!found)
5428: {
5429: found = build_decl (PARM_DECL, TREE_VALUE (parm),
5430: integer_type_node);
5431: DECL_ARG_TYPE (found) = TREE_TYPE (found);
5432: DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
5433: DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
5434: error (found, "type of parameter `%s' is not declared");
5435: pushdecl (found);
5436: }
5437:
5438: TREE_PURPOSE (parm) = found;
5439:
5440: /* Mark this decl as "already found" -- see test, above.
5441: It is safe to use DECL_RESULT for this
5442: since it is not used in PARM_DECLs or CONST_DECLs. */
5443: DECL_RESULT (found) = error_mark_node;
5444: }
5445:
5446: /* Complain about any actual PARM_DECLs not matched with any names. */
5447:
5448: for (parm = parmdecls; parm; )
5449: {
5450: tree next = TREE_CHAIN (parm);
5451: TREE_CHAIN (parm) = 0;
5452:
5453: /* Complain about args with incomplete types. */
5454: if (TYPE_SIZE (TREE_TYPE (parm)) == 0)
5455: {
5456: error_with_decl (parm, "parameter `%s' has incomplete type");
5457: TREE_TYPE (parm) = error_mark_node;
5458: }
5459:
5460: if (DECL_RESULT (parm) == 0)
5461: {
5462: error_with_decl (parm,
5463: "declaration for parameter `%s' but no such parameter");
5464: /* Pretend the parameter was not missing.
5465: This gets us to a standard state and minimizes
5466: further error messages. */
5467: specparms
5468: = chainon (specparms,
5469: tree_cons (parm, NULL_TREE, NULL_TREE));
5470: }
5471:
5472: parm = next;
5473: }
5474:
5475: /* Chain the declarations together in the order of the list of names.
5476: At the same time, build up a list of their types, in reverse order. */
5477:
5478: parm = specparms;
5479: parmdecls = 0;
5480: {
5481: register tree last;
5482: for (last = 0; parm; parm = TREE_CHAIN (parm))
5483: if (TREE_PURPOSE (parm))
5484: {
5485: if (last == 0)
5486: parmdecls = TREE_PURPOSE (parm);
5487: else
5488: TREE_CHAIN (last) = TREE_PURPOSE (parm);
5489: last = TREE_PURPOSE (parm);
5490: TREE_CHAIN (last) = 0;
5491:
5492: types = saveable_tree_cons (NULL_TREE, TREE_TYPE (parm), types);
5493: }
5494: }
5495:
5496: if (void_at_end)
5497: return saveable_tree_cons (parmdecls, nonparms,
5498: nreverse (saveable_tree_cons (NULL_TREE, void_type_node, types)));
5499:
5500: return saveable_tree_cons (parmdecls, nonparms, nreverse (types));
5501: }
5502:
5503: /* Finish up a function declaration and compile that function
5504: all the way to assembler language output. The free the storage
5505: for the function definition.
5506:
5507: This is called after parsing the body of the function definition.
5508:
5509: NESTED is nonzero if the function being finished is nested in another. */
5510:
5511: void
5512: finish_function (nested)
5513: int nested;
5514: {
5515: register tree fndecl = current_function_decl;
5516:
5517: /* TREE_READONLY (fndecl) = 1;
5518: This caused &foo to be of type ptr-to-const-function
5519: which then got a warning when stored in a ptr-to-function variable. */
5520:
5521: poplevel (1, 0, 1);
5522:
5523: /* Must mark the RESULT_DECL as being in this function. */
5524:
5525: DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
5526:
5527: /* Obey `register' declarations if `setjmp' is called in this fn. */
5528: if (flag_traditional && current_function_calls_setjmp)
5529: {
5530: setjmp_protect (DECL_INITIAL (fndecl));
5531: setjmp_protect_args ();
5532: }
5533:
5534: #ifdef DEFAULT_MAIN_RETURN
5535: if (! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main"))
5536: {
5537: /* Make it so that `main' always returns success by default. */
5538: DEFAULT_MAIN_RETURN;
5539: }
5540: #endif
5541:
5542: /* Generate rtl for function exit. */
5543: expand_function_end (input_filename, lineno);
5544:
5545: /* So we can tell if jump_optimize sets it to 1. */
5546: can_reach_end = 0;
5547:
5548: /* Run the optimizers and output the assembler code for this function. */
5549: rest_of_compilation (fndecl);
5550:
5551: current_function_returns_null |= can_reach_end;
5552:
5553: if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
5554: warning ("`volatile' function does return");
5555: else if (warn_return_type && current_function_returns_null
5556: && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl))) != void_type_node)
5557: /* If this function returns non-void and control can drop through,
5558: complain. */
5559: warning ("control reaches end of non-void function");
5560: /* With just -W, complain only if function returns both with
5561: and without a value. */
5562: else if (extra_warnings
5563: && current_function_returns_value && current_function_returns_null)
5564: warning ("this function may return with or without a value");
5565:
5566: /* Free all the tree nodes making up this function. */
5567: /* Switch back to allocating nodes permanently
5568: until we start another function. */
5569: if (! nested)
5570: permanent_allocation ();
5571:
5572: if (DECL_SAVED_INSNS (fndecl) == 0 && ! nested)
5573: {
5574: /* Stop pointing to the local nodes about to be freed. */
5575: /* But DECL_INITIAL must remain nonzero so we know this
5576: was an actual function definition. */
5577: /* For a nested function, this is done in pop_c_function_context. */
5578: DECL_INITIAL (fndecl) = error_mark_node;
5579: DECL_ARGUMENTS (fndecl) = 0;
5580: }
5581:
5582: if (! nested)
5583: {
5584: /* Let the error reporting routines know that we're outside a
5585: function. For a nested function, this value is used in
5586: pop_c_function_context and then reset via pop_function_context. */
5587: current_function_decl = NULL;
5588: }
5589: }
5590:
5591: /* Save and restore the variables in this file and elsewhere
5592: that keep track of the progress of compilation of the current function.
5593: Used for nested functions. */
5594:
5595: struct c_function
5596: {
5597: struct c_function *next;
5598: tree enum_next_value;
5599: tree named_labels;
5600: tree shadowed_labels;
5601: int returns_value;
5602: int returns_null;
5603: int warn_about_return_type;
5604: int extern_inline;
5605: struct binding_level *binding_level;
5606: };
5607:
5608: struct c_function *c_function_chain;
5609:
5610: /* Save and reinitialize the variables
5611: used during compilation of a C function. */
5612:
5613: void
5614: push_c_function_context ()
5615: {
5616: struct c_function *p
5617: = (struct c_function *) xmalloc (sizeof (struct c_function));
5618:
5619: push_function_context ();
5620:
5621: p->next = c_function_chain;
5622: c_function_chain = p;
5623:
5624: p->enum_next_value = enum_next_value;
5625: p->named_labels = named_labels;
5626: p->shadowed_labels = shadowed_labels;
5627: p->returns_value = current_function_returns_value;
5628: p->returns_null = current_function_returns_null;
5629: p->warn_about_return_type = warn_about_return_type;
5630: p->extern_inline = current_extern_inline;
5631: p->binding_level = current_binding_level;
5632: }
5633:
5634: /* Restore the variables used during compilation of a C function. */
5635:
5636: void
5637: pop_c_function_context ()
5638: {
5639: struct c_function *p = c_function_chain;
5640: tree link;
5641:
5642: /* Bring back all the labels that were shadowed. */
5643: for (link = shadowed_labels; link; link = TREE_CHAIN (link))
5644: if (DECL_NAME (TREE_VALUE (link)) != 0)
5645: IDENTIFIER_LABEL_VALUE (DECL_NAME (TREE_VALUE (link)))
5646: = TREE_VALUE (link);
5647:
5648: if (DECL_SAVED_INSNS (current_function_decl) == 0)
5649: {
5650: /* Stop pointing to the local nodes about to be freed. */
5651: /* But DECL_INITIAL must remain nonzero so we know this
5652: was an actual function definition. */
5653: DECL_INITIAL (current_function_decl) = error_mark_node;
5654: DECL_ARGUMENTS (current_function_decl) = 0;
5655: }
5656:
5657: pop_function_context ();
5658:
5659: c_function_chain = p->next;
5660:
5661: enum_next_value = p->enum_next_value;
5662: named_labels = p->named_labels;
5663: shadowed_labels = p->shadowed_labels;
5664: current_function_returns_value = p->returns_value;
5665: current_function_returns_null = p->returns_null;
5666: warn_about_return_type = p->warn_about_return_type;
5667: current_extern_inline = p->extern_inline;
5668: current_binding_level = p->binding_level;
5669:
5670: free (p);
5671: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.