|
|
1.1 root 1: /* Process declarations and variables for C compiler.
2: Copyright (C) 1987 Free Software Foundation, Inc.
3:
4: This file is part of GNU CC.
5:
6: GNU CC is distributed in the hope that it will be useful,
7: but WITHOUT ANY WARRANTY. No author or distributor
8: accepts responsibility to anyone for the consequences of using it
9: or for whether it serves any particular purpose or works at all,
10: unless he says so in writing. Refer to the GNU CC General Public
11: License for full details.
12:
13: Everyone is granted permission to copy, modify and redistribute
14: GNU CC, but only under the conditions described in the
15: GNU CC General Public License. A copy of this license is
16: supposed to have been given to you along with GNU CC so you
17: can know your rights and responsibilities. It should be in a
18: file named COPYING. Among other things, the copyright notice
19: and this notice must be preserved on all copies. */
20:
21:
22: /* Process declarations and symbol lookup for C front end.
23: Also constructs types; the standard scalar types at initialization,
24: and structure, union, array and enum types when they are declared. */
25:
26: /* ??? not all decl nodes are given the most useful possible
27: line numbers. For example, the CONST_DECLs for enum values. */
28:
29: #include "config.h"
30: #include "parse.h"
31: #include "tree.h"
32: #include "c-tree.h"
33:
34: /* In grokdeclarator, distinguish syntactic contexts of declarators. */
35: enum decl_context
36: { NORMAL, /* Ordinary declaration */
37: PARM, /* Declaration of parm before function body */
38: FIELD, /* Declaration inside struct or union */
39: TYPENAME}; /* Typename (inside cast or sizeof) */
40:
41: #define NULL 0
42: #define min(X,Y) ((X) < (Y) ? (X) : (Y))
43:
44: static tree grokparms (), grokdeclarator ();
45: static tree make_index_type ();
46: static void builtin_function ();
47:
48: static tree lookup_labelname ();
49: static tree lookup_tag ();
50: static tree lookup_name_current_level ();
51:
52: /* a node which has tree code ERROR_MARK, and whose type is itself.
53: All erroneous expressions are replaced with this node. All functions
54: that accept nodes as arguments should avoid generating error messages
55: if this node is one of the arguments, since it is undesirable to get
56: multiple error messages from one error in the input. */
57:
58: tree error_mark_node;
59:
60: /* INTEGER_TYPE and REAL_TYPE nodes for the standard data types */
61:
62: tree short_integer_type_node;
63: tree integer_type_node;
64: tree long_integer_type_node;
65:
66: tree short_unsigned_type_node;
67: tree unsigned_type_node;
68: tree long_unsigned_type_node;
69:
70: tree unsigned_char_type_node;
71: tree char_type_node;
72:
73: tree float_type_node;
74: tree double_type_node;
75: tree long_double_type_node;
76:
77: /* a VOID_TYPE node. */
78:
79: tree void_type_node;
80:
81: /* A node for type `void *'. */
82:
83: tree ptr_type_node;
84:
85: /* A node for type `char *'. */
86:
87: tree string_type_node;
88:
89: /* Type `char[256]' or something like it.
90: Used when an array of char is needed and the size is irrelevant. */
91:
92: tree char_array_type_node;
93:
94: /* type `int ()' -- used for implicit declaration of functions. */
95:
96: tree default_function_type;
97:
98: /* function types `double (double)' and `double (double, double)', etc. */
99:
100: tree double_ftype_double, double_ftype_double_double;
101: tree int_ftype_int, long_ftype_long;
102:
103: /* Function type `void (void *, void *, int)' and similar ones */
104:
105: tree void_ftype_ptr_ptr_int, int_ftype_ptr_ptr_int, void_ftype_ptr_int_int;
106:
107: /* Two expressions that are constants with value zero.
108: The first is of type `int', the second of type `void *'. */
109:
110: tree integer_zero_node;
111: tree null_pointer_node;
112:
113: /* A node for the integer constant 1. */
114:
115: tree integer_one_node;
116:
117: /* An identifier whose name is <value>. This is used as the "name"
118: of the RESULT_DECLs for values of functions. */
119:
120: tree value_identifier;
121:
122: /* Enumeration type currently being built, or 0 if not doing that now. */
123:
124: tree current_enum_type;
125:
126: /* Default value for next enumerator of enumeration type currently being read,
127: or undefined at other times. */
128:
129: int enum_next_value;
130:
131: /* Parsing a function declarator leaves a list of parameter names here.
132: If the declarator is the beginning of a function definition,
133: the names are stored into the function declaration when it is created. */
134:
135: static tree last_function_parm_names;
136:
137: /* A list (chain of TREE_LIST nodes) of all LABEL_STMTs in the function
138: that have names. Here so we can clear out their names' definitions
139: at the end of the function. */
140:
141: static tree named_labels;
142:
143: /* A list of all GOTO_STMT nodes in the current function,
144: so we can fill in the LABEL_STMTs they go to once all are defined. */
145:
146: static tree all_gotos;
147:
148: /* Set to 0 at beginning of a function definition, set to 1 if
149: a return statement that specifies a return value is seen. */
150:
151: int current_function_returns_value;
152:
153: /* For each binding contour we allocate a binding_level structure
154: * which records the names defined in that contour.
155: * Contours include:
156: * 0) the global one
157: * 1) one for each function definition,
158: * where internal declarations of the parameters appear.
159: * 2) one for each compound statement,
160: * to record its declarations.
161: *
162: * The current meaning of a name can be found by searching the levels from
163: * the current one out to the global one.
164: */
165:
166: /* Note that the information in the `names' component of the global contour
167: is duplicated in the IDENTIFIER_GLOBAL_VALUEs of all identifiers. */
168:
169: static struct binding_level
170: {
171: /* A chain of _DECL nodes for all variables, constants, functions,
172: and typedef types. These are in the reverse of the order supplied.
173: */
174: tree names;
175:
176: /* A list of structure, union and enum definitions,
177: * for looking up tag names.
178: * It is a chain of TREE_LIST nodes, each of whose TREE_PURPOSE is a name,
179: * or NULL_TREE; and whose TREE_VALUE is a RECORD_TYPE, UNION_TYPE,
180: * or ENUMERAL_TYPE node.
181: */
182: tree tags;
183:
184: /* For each level, a list of shadowed outer-level local definitions
185: to be restored when this level is popped.
186: Each link is a TREE_LIST whose TREE_PURPOSE is an identifier and
187: whose TREE_VALUE is its old definition (a kind of ..._DECL node). */
188: tree shadowed;
189:
190: /* The binding level which this one is contained in (inherits from). */
191: struct binding_level *level_chain;
192: };
193:
194: #define NULL_BINDING_LEVEL (struct binding_level *) NULL
195:
196: /* The binding level currently in effect. */
197:
198: static struct binding_level *current_binding_level;
199:
200: /* A chain of binding_level structures awaiting reuse. */
201:
202: static struct binding_level *free_binding_level;
203:
204: /* The outermost binding level, for names of file scope.
205: This is created when the compiler is started and exists
206: through the entire run. */
207:
208: static struct binding_level *global_binding_level;
209:
210: /* Binding level structures are initialized by copying this one. */
211:
212: static struct binding_level clear_binding_level =
213: {NULL, NULL, NULL, NULL};
214:
215: /* Create a new `struct binding_level'. */
216:
217: static
218: struct binding_level *
219: make_binding_level ()
220: {
221: /* NOSTRICT */
222: return (struct binding_level *) xmalloc (sizeof (struct binding_level));
223: }
224:
225: /* Enter a new binding level. */
226:
227: void
228: pushlevel ()
229: {
230: register struct binding_level *newlevel = NULL_BINDING_LEVEL;
231:
232: /* If this is the top level of a function,
233: just make sure that ALL_GOTOS and NAMED_LABELS are 0.
234: They should have been set to 0 at the end of the previous function. */
235:
236: if (current_binding_level == global_binding_level)
237: {
238: if (all_gotos || named_labels)
239: abort ();
240: }
241:
242: /* Reuse or create a struct for this binding level. */
243:
244: if (free_binding_level)
245: {
246: newlevel = free_binding_level;
247: free_binding_level = free_binding_level->level_chain;
248: }
249: else
250: {
251: newlevel = make_binding_level ();
252: }
253:
254: /* Add this level to the front of the chain (stack) of levels that
255: are active. */
256:
257: *newlevel = clear_binding_level;
258: newlevel->level_chain = current_binding_level;
259: current_binding_level = newlevel;
260: }
261:
262: /* Exit a binding level. */
263:
264: void
265: poplevel ()
266: {
267: register tree link;
268:
269: /* Clear out the meanings of the local variables of this level. */
270:
271: for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
272: IDENTIFIER_LOCAL_VALUE (DECL_NAME (link)) = 0;
273:
274: /* Restore all name-meanings of the outer levels
275: that were shadowed by this level. */
276:
277: for (link = current_binding_level->shadowed; link; link = TREE_CHAIN (link))
278: IDENTIFIER_LOCAL_VALUE (TREE_PURPOSE (link)) = TREE_VALUE (link);
279:
280: /* If the level being exited is the top level of a function,
281: match all goto statements with their labels. */
282:
283: if (current_binding_level->level_chain == global_binding_level)
284: {
285: /* Search for labels for any unresolved gotos. */
286:
287: for (link = all_gotos; link; link = TREE_CHAIN (link))
288: {
289: register tree stmt = TREE_VALUE (link);
290: register tree label = lookup_labelname (STMT_BODY (stmt));
291:
292: if (label)
293: STMT_BODY (stmt) = label;
294: else
295: {
296: yylineerror (STMT_SOURCE_LINE (stmt),
297: "no label %s visible for goto",
298: IDENTIFIER_POINTER (STMT_BODY (stmt)));
299: STMT_BODY (stmt) = NULL_TREE;
300: }
301: }
302:
303: /* Then clear out the definitions of all label names,
304: since their scopes end here. */
305:
306: for (link = named_labels; link; link = TREE_CHAIN (link))
307: IDENTIFIER_LABEL_VALUE (DECL_NAME (STMT_BODY (TREE_VALUE (link)))) = 0;
308:
309: named_labels = 0;
310: all_gotos = 0;
311: }
312:
313: /* Pop the current level, and free the structure for reuse. */
314:
315: {
316: register struct binding_level *level = current_binding_level;
317: current_binding_level = current_binding_level->level_chain;
318:
319: level->level_chain = free_binding_level;
320: free_binding_level = level;
321: }
322: }
323:
324: /* Push a definition of struct, union or enum tag "name".
325: "type" should be the type node.
326: Note that the definition may really be just a forward reference.
327: In that case, the TYPE_SIZE will be zero. */
328:
329: void
330: pushtag (name, type)
331: tree name, type;
332: {
333: register tree t;
334:
335: /* If the type has a name, check for duplicate definitions of the name. */
336:
337: if (name)
338: {
339: for (t = current_binding_level->tags; t; t = TREE_CHAIN (t))
340: if (TREE_PURPOSE (t) == name)
341: {
342: yyerror ("redeclaration of struct, union or enum tag %s",
343: IDENTIFIER_POINTER (name));
344: return;
345: }
346:
347: /* Record the identifier as the type's name if it has none. */
348:
349: if (TYPE_NAME (type) == 0)
350: TYPE_NAME (type) = name;
351: }
352:
353: current_binding_level->tags
354: = tree_cons (name, type, current_binding_level->tags);
355: }
356:
357:
358: /* Handle when a new declaration X has the same name as an old one T
359: in the same binding contour.
360: May alter the old decl to say what the new one says.
361:
362: Returns the old decl T if the two are more or less compatible;
363: returns the new one X if they are thoroughly alien. */
364:
365: static tree
366: duplicate_decls (x, t)
367: register tree x, t;
368: {
369: /* At top level in file, if the old definition is "tentative" and
370: this one is close enough, no error. */
371: if (! allowed_redeclaration (x, t,
372: current_binding_level == global_binding_level))
373: yylineerror (DECL_SOURCE_LINE (x), "redeclaration of %s",
374: IDENTIFIER_POINTER (DECL_NAME (x)));
375:
376: /* Install latest semantics. */
377: if (TREE_CODE (t) == TREE_CODE (x))
378: {
379: bcopy ((char *) x + sizeof (struct tree_shared),
380: (char *) t + sizeof (struct tree_shared),
381: sizeof (struct tree_decl) - sizeof (struct tree_shared));
382: TREE_TYPE (t) = TREE_TYPE (x);
383: DECL_ARGUMENTS (t) = DECL_ARGUMENTS (x);
384: DECL_RESULT (t) = DECL_RESULT (x);
385: DECL_SOURCE_FILE (t) = DECL_SOURCE_FILE (x);
386: DECL_SOURCE_LINE (t) = DECL_SOURCE_LINE (x);
387: TREE_STATIC (t) = TREE_STATIC (x);
388: TREE_EXTERNAL (t) = TREE_EXTERNAL (x);
389: TREE_PUBLIC (t) = TREE_PUBLIC (x);
390: if (DECL_INITIAL (x))
391: DECL_INITIAL (t) = DECL_INITIAL (x);
392: return t;
393: }
394: return x;
395: }
396:
397: /* Record a decl-node X as belonging to the current lexical scope.
398: Check for errors (such as an incompatible declaration for the same
399: name already seen in the same scope).
400:
401: Returns either X or an old decl for the same name.
402: If an old decl is returned, it has been smashed
403: to agree with what X says. */
404:
405: tree
406: pushdecl (x)
407: tree x;
408: {
409: register tree t;
410: register tree name = DECL_NAME (x);
411:
412: if (name)
413: {
414: t = lookup_name_current_level (name);
415: if (t)
416: return duplicate_decls (x, t);
417:
418: /* If declaring a type as a typedef, and the type has no known
419: typedef name, install this TYPE_DECL as its typedef name. */
420: if (TREE_CODE (x) == TYPE_DECL)
421: if (TYPE_NAME (TREE_TYPE (x)) == 0
422: || TREE_CODE (TYPE_NAME (TREE_TYPE (x))) != TYPE_DECL)
423: TYPE_NAME (TREE_TYPE (x)) = x;
424: }
425:
426: /* This name is new.
427: Install the new declaration and return it. */
428: if (current_binding_level == global_binding_level)
429: {
430: IDENTIFIER_GLOBAL_VALUE (name) = x;
431: }
432: else
433: {
434: /* If storing a local value, there may already be one (inherited).
435: If so, record it for restoration when this binding level ends. */
436: if (IDENTIFIER_LOCAL_VALUE (name))
437: current_binding_level->shadowed
438: = tree_cons (name, IDENTIFIER_LOCAL_VALUE (name),
439: current_binding_level->shadowed);
440: IDENTIFIER_LOCAL_VALUE (name) = x;
441: }
442:
443: /* Put decls on list in reverse order.
444: We will reverse them later if necessary. */
445: current_binding_level->names = chainon (x, current_binding_level->names);
446:
447: return x;
448: }
449:
450: /* Record a C label name. X is a LABEL_STMT and its STMT_BODY is a LABEL_DECL.
451: That is where we find the name. */
452:
453: void
454: pushlabel (x)
455: tree x;
456: {
457: register tree decl = STMT_BODY (x);
458:
459: if (0 == DECL_NAME (decl))
460: return;
461:
462: if (IDENTIFIER_LABEL_VALUE (DECL_NAME (decl)))
463: yyerror ("duplicate label %s",
464: IDENTIFIER_POINTER (DECL_NAME (decl)));
465: else
466: IDENTIFIER_LABEL_VALUE (DECL_NAME (decl)) = decl;
467:
468: named_labels
469: = tree_cons (NULL_TREE, x, named_labels);
470: }
471:
472: /* Record the goto statement X on the list of all gotos in the
473: current function. The list is used to find them all at
474: the end of the function so that their target labels can be found then. */
475:
476: void
477: pushgoto (x)
478: tree x;
479: {
480: all_gotos = tree_cons (NULL_TREE, x, all_gotos);
481: }
482:
483: /* Return the list of declarations of the current level.
484: They are pushed on the list in reverse order since that is easiest.
485: We reverse them to the correct order here. */
486:
487: tree
488: getdecls ()
489: {
490: return
491: current_binding_level->names = nreverse (current_binding_level->names);
492: }
493:
494: /* Return the list of type-tags (for structs, etc) of the current level. */
495:
496: tree
497: gettags ()
498: {
499: return current_binding_level->tags;
500: }
501:
502: /* Store the list of declarations of the current level.
503: This is done for the parameter declarations of a function being defined,
504: after they are modified in the light of any missing parameters. */
505:
506: void
507: storedecls (decls)
508: tree decls;
509: {
510: current_binding_level->names = decls;
511: }
512:
513: /* Given NAME, an IDENTIFIER_NODE,
514: return the structure (or union or enum) definition for that name.
515: Searches binding levels from BINDING_LEVEL up to the global level.
516: If THISLEVEL_ONLY is nonzero, searches only the specified context.
517: FORM says which kind of type the caller wants;
518: it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
519: If the wrong kind of type is found, an error is reported. */
520:
521: static tree
522: lookup_tag (form, name, binding_level, thislevel_only)
523: enum tree_code form;
524: struct binding_level *binding_level;
525: tree name;
526: int thislevel_only;
527: {
528: register struct binding_level *level;
529:
530: for (level = binding_level; level; level = level->level_chain)
531: {
532: register tree tail;
533: for (tail = level->tags; tail; tail = TREE_CHAIN (tail))
534: {
535: if (TREE_PURPOSE (tail) == name)
536: {
537: if (TREE_CODE (TREE_VALUE (tail)) != form)
538: {
539: /* Definition isn't the kind we were looking for. */
540: yyerror ("%s defined as wrong kind of tag",
541: IDENTIFIER_POINTER (name));
542: }
543: return TREE_VALUE (tail);
544: }
545: }
546: if (thislevel_only)
547: return NULL_TREE;
548: }
549: return NULL_TREE;
550: }
551:
552: /* Look up NAME in the current binding level and its superiors
553: in the namespace of variables, functions and typedefs.
554: Return a ..._DECL node of some kind representing its definition,
555: or return 0 if it is undefined. */
556:
557: tree
558: lookup_name (name)
559: tree name;
560: {
561: if (current_binding_level != global_binding_level
562: && IDENTIFIER_LOCAL_VALUE (name))
563: return IDENTIFIER_LOCAL_VALUE (name);
564: return IDENTIFIER_GLOBAL_VALUE (name);
565: }
566:
567: /* Similar to `lookup_name' but look only at current binding level. */
568:
569: static tree
570: lookup_name_current_level (name)
571: tree name;
572: {
573: register tree t;
574:
575: if (current_binding_level == global_binding_level)
576: return IDENTIFIER_GLOBAL_VALUE (name);
577:
578: if (IDENTIFIER_LOCAL_VALUE (name) == 0)
579: return 0;
580:
581: for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
582: if (DECL_NAME (t) == name)
583: break;
584:
585: return t;
586: }
587:
588: /* Return the definition of NAME as a label (a LABEL-DECL node),
589: or 0 if it has no definition as a label. */
590:
591: static
592: tree
593: lookup_labelname (name)
594: tree name;
595: {
596: return IDENTIFIER_LABEL_VALUE (name);
597: }
598:
599: /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
600: STATICP nonzero means this is declared `static' in the C sense;
601: EXTERNP means it is declared `extern' in the C sense.
602: The name's definition is *not* entered in the symbol table.
603:
604: The source file and line number are left 0.
605: layout_decl is used to set up the decl's storage layout.
606: are initialized to 0 or null pointers. */
607:
608: tree
609: build_decl (code, name, type, staticp, externp)
610: enum tree_code code;
611: tree name, type;
612: int staticp, externp;
613: {
614: register tree t;
615:
616: t = make_node (code);
617:
618: /* if (type == error_mark_node)
619: type = integer_type_node; */
620: /* That is not done, deliberately, so that having error_mark_node
621: as the type can suppress useless errors in the use of this variable. */
622:
623: DECL_NAME (t) = name;
624: TREE_TYPE (t) = type;
625: DECL_ARGUMENTS (t) = NULL_TREE;
626: DECL_INITIAL (t) = NULL_TREE;
627: if (externp)
628: TREE_EXTERNAL (t) = 1;
629: if (staticp)
630: TREE_STATIC (t) = 1;
631:
632: if (current_binding_level == global_binding_level)
633: {
634: if (!TREE_STATIC (t))
635: TREE_PUBLIC (t) = 1;
636: TREE_STATIC (t) = (code != FUNCTION_DECL);
637: }
638:
639: if (TREE_EXTERNAL (t))
640: TREE_STATIC (t) = 0;
641:
642: if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
643: layout_decl (t, 0);
644: else if (code == FUNCTION_DECL)
645: /* all functions considered external unless def in this file */
646: {
647: TREE_EXTERNAL (t) = 1;
648: DECL_MODE (t) = FUNCTION_MODE;
649: }
650: return t;
651: }
652:
653: /* Create a LABEL_STMT statement node containing a LABEL_DECL named NAME.
654: NAME may be a null pointer.
655: FILE ane LINENUM say where in the source the label is.
656: CONTEXT is the LET_STMT node which is the context of this label name.
657: The label name definition is entered in the symbol table. */
658:
659: tree
660: build_label (filename, line, name, context)
661: char *filename;
662: int line;
663: tree name;
664: tree context;
665: {
666: register tree t = make_node (LABEL_STMT);
667: register tree decl = build_decl (LABEL_DECL, name, NULL_TREE, 1, 0);
668:
669: STMT_SOURCE_FILE (t) = filename;
670: STMT_SOURCE_LINE (t) = line;
671: STMT_BODY (t) = decl;
672: DECL_SOURCE_FILE (decl) = filename;
673: DECL_SOURCE_LINE (decl) = line;
674: DECL_MODE (decl) = VOIDmode;
675: DECL_CONTEXT (decl) = context;
676: pushlabel (t);
677: return t;
678: }
679:
680: /* Store the data into a LET_STMT node.
681: Each C braced grouping with declarations is represented
682: by a LET_STMT node. The node is created when the open-brace is read,
683: but the contents to put in it are not known until the close-brace.
684: This function is called at the time of the close-brace
685: to install the proper contents.
686:
687: BLOCK is the LET_STMT node itself.
688: DCLS is the chain of declarations within the grouping.
689: TAGS is the chain of struct, union and enum tags defined within it.
690: STMTS is the chain of statements making up the inside of the grouping. */
691:
692: finish_block (block, dcls, tags, stmts)
693: tree block, dcls, tags, stmts;
694: {
695: register tree tem;
696:
697: /* In each decl, record the block it belongs to. */
698: for (tem = dcls; tem; tem = TREE_CHAIN (tem))
699: DECL_CONTEXT (tem) = block;
700:
701: STMT_VARS (block) = dcls;
702: STMT_BODY (block) = stmts;
703: STMT_TYPE_TAGS (block) = tags;
704: }
705:
706: finish_tree ()
707: {
708: }
709:
710: /* Create the predefined scalar types of C,
711: and some nodes representing standard constants (0, 1, (void *)0).
712: Initialize the global binding level.
713: Make definitions for built-in primitive functions. */
714:
715: void
716: init_decl_processing ()
717: {
718: register tree endlink;
719:
720: named_labels = NULL;
721: all_gotos = NULL;
722: current_binding_level = NULL_BINDING_LEVEL;
723: free_binding_level = NULL_BINDING_LEVEL;
724: pushlevel (); /* make the binding_level structure for global names */
725: global_binding_level = current_binding_level;
726:
727: value_identifier = get_identifier ("<value>");
728:
729: /* This must be the first type made and laid out,
730: so that it will get used as the type for expressions
731: for the sizes of types. */
732:
733: integer_type_node = make_signed_type (BITS_PER_WORD);
734: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_INT],
735: integer_type_node, 1, 0));
736:
737: error_mark_node = make_node (ERROR_MARK);
738: TREE_TYPE (error_mark_node) = error_mark_node;
739:
740: short_integer_type_node = make_signed_type (BITS_PER_UNIT * min (UNITS_PER_WORD / 2, 2));
741: pushdecl (build_decl (TYPE_DECL, get_identifier ("short int"),
742: short_integer_type_node, 1, 0));
743:
744: long_integer_type_node = make_signed_type (BITS_PER_WORD);
745: pushdecl (build_decl (TYPE_DECL, get_identifier ("long int"),
746: long_integer_type_node, 1, 0));
747:
748: short_unsigned_type_node = make_unsigned_type (BITS_PER_UNIT * min (UNITS_PER_WORD / 2, 2));
749: pushdecl (build_decl (TYPE_DECL, get_identifier ("short unsigned int"),
750: short_unsigned_type_node, 1, 0));
751:
752: unsigned_type_node = make_unsigned_type (BITS_PER_WORD);
753: pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
754: unsigned_type_node, 1, 0));
755:
756: long_unsigned_type_node = make_unsigned_type (BITS_PER_WORD);
757: pushdecl (build_decl (TYPE_DECL, get_identifier ("long unsigned int"),
758: long_unsigned_type_node, 1, 0));
759:
760: char_type_node = make_signed_type (BITS_PER_UNIT);
761: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_CHAR],
762: char_type_node, 1, 0));
763:
764: unsigned_char_type_node = make_unsigned_type (BITS_PER_UNIT);
765: pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
766: unsigned_char_type_node, 1, 0));
767:
768: float_type_node = make_node (REAL_TYPE);
769: TYPE_PRECISION (float_type_node) = BITS_PER_WORD;
770: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_FLOAT],
771: float_type_node, 1, 0));
772: layout_type (float_type_node);
773:
774: double_type_node = make_node (REAL_TYPE);
775: TYPE_PRECISION (double_type_node) = 2 * BITS_PER_WORD;
776: pushdecl (build_decl (TYPE_DECL, ridpointers[(int) RID_DOUBLE],
777: double_type_node, 1, 0));
778: layout_type (double_type_node);
779:
780: long_double_type_node = make_node (REAL_TYPE);
781: TYPE_PRECISION (long_double_type_node) = 2 * BITS_PER_WORD;
782: pushdecl (build_decl (TYPE_DECL, get_identifier ("long double"),
783: long_double_type_node, 1, 0));
784: layout_type (long_double_type_node);
785:
786: integer_zero_node = build_int_2 (0, 0);
787: TREE_TYPE (integer_zero_node) = integer_type_node;
788: integer_one_node = build_int_2 (1, 0);
789: TREE_TYPE (integer_one_node) = integer_type_node;
790:
791: void_type_node = make_node (VOID_TYPE);
792: pushdecl (build_decl (TYPE_DECL,
793: ridpointers[(int) RID_VOID], void_type_node,
794: 1, 0));
795: layout_type (void_type_node); /* Uses integer_zero_node */
796:
797: null_pointer_node = build_int_2 (0, 0);
798: TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
799: layout_type (TREE_TYPE (null_pointer_node));
800:
801: string_type_node = build_pointer_type (char_type_node);
802: layout_type (string_type_node);
803:
804: /* make a type for arrays of 256 characters.
805: 256 is picked randomly because we have a type for integers from 0 to 255.
806: With luck nothing will ever really depend on the length of this
807: array type. */
808: char_array_type_node
809: = build_array_type (char_type_node, unsigned_char_type_node);
810: layout_type (char_array_type_node);
811:
812: default_function_type
813: = build_function_type (integer_type_node, NULL_TREE);
814: layout_type (default_function_type);
815:
816: ptr_type_node = build_pointer_type (void_type_node);
817: endlink = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
818:
819: double_ftype_double
820: = build_function_type (double_type_node,
821: tree_cons (NULL_TREE, double_type_node, endlink));
822:
823: double_ftype_double_double
824: = build_function_type (double_type_node,
825: tree_cons (NULL_TREE, double_type_node,
826: tree_cons (NULL_TREE,
827: double_type_node, endlink)));
828:
829: int_ftype_int
830: = build_function_type (integer_type_node,
831: tree_cons (NULL_TREE, integer_type_node, endlink));
832:
833: long_ftype_long
834: = build_function_type (long_integer_type_node,
835: tree_cons (NULL_TREE,
836: long_integer_type_node, endlink));
837:
838: void_ftype_ptr_ptr_int
839: = build_function_type (void_type_node,
840: tree_cons (NULL_TREE, ptr_type_node,
841: tree_cons (NULL_TREE, ptr_type_node,
842: tree_cons (NULL_TREE,
843: integer_type_node,
844: endlink))));
845:
846: int_ftype_ptr_ptr_int
847: = build_function_type (integer_type_node,
848: tree_cons (NULL_TREE, ptr_type_node,
849: tree_cons (NULL_TREE, ptr_type_node,
850: tree_cons (NULL_TREE,
851: integer_type_node,
852: endlink))));
853:
854: void_ftype_ptr_int_int
855: = build_function_type (void_type_node,
856: tree_cons (NULL_TREE, ptr_type_node,
857: tree_cons (NULL_TREE, integer_type_node,
858: tree_cons (NULL_TREE,
859: integer_type_node,
860: endlink))));
861:
862: builtin_function ("_builtin_alloca",
863: build_function_type (ptr_type_node,
864: tree_cons (NULL_TREE,
865: integer_type_node,
866: endlink)),
867: BUILT_IN_ALLOCA);
868:
869: builtin_function ("_builtin_abs", int_ftype_int, BUILT_IN_ABS);
870: builtin_function ("_builtin_fabs", double_ftype_double, BUILT_IN_FABS);
871: builtin_function ("_builtin_labs", long_ftype_long, BUILT_IN_LABS);
872: /* builtin_function ("_builtin_div", default_ftype, BUILT_IN_DIV);
873: builtin_function ("_builtin_ldiv", default_ftype, BUILT_IN_LDIV); */
874: builtin_function ("_builtin_ffloor", double_ftype_double, BUILT_IN_FFLOOR);
875: builtin_function ("_builtin_fceil", double_ftype_double, BUILT_IN_FCEIL);
876: builtin_function ("_builtin_fmod", double_ftype_double_double, BUILT_IN_FMOD);
877: builtin_function ("_builtin_frem", double_ftype_double_double, BUILT_IN_FREM);
878: builtin_function ("_builtin_memcpy", void_ftype_ptr_ptr_int, BUILT_IN_MEMCPY);
879: builtin_function ("_builtin_memcmp", int_ftype_ptr_ptr_int, BUILT_IN_MEMCMP);
880: builtin_function ("_builtin_memset", void_ftype_ptr_int_int, BUILT_IN_MEMSET);
881: builtin_function ("_builtin_fsqrt", double_ftype_double, BUILT_IN_FSQRT);
882: builtin_function ("_builtin_getexp", double_ftype_double, BUILT_IN_GETEXP);
883: builtin_function ("_builtin_getman", double_ftype_double, BUILT_IN_GETMAN);
884: }
885:
886: /* Make a definition for a builtin function named NAME and whose data type
887: is TYPE. TYPE should be a function type with argument types.
888: FUNCTION_CODE tells later passes how to compile calls to this function.
889: See tree.h for its possible values. */
890:
891: static void
892: builtin_function (name, type, function_code)
893: char *name;
894: tree type;
895: enum built_in_function function_code;
896: {
897: tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type, 0, 1);
898: make_function_rtl (decl);
899: pushdecl (decl);
900: DECL_SET_FUNCTION_CODE (decl, function_code);
901: }
902:
903: /* Validate a structure, union or enum type: make sure it
904: is not just a forward reference.
905: If it is valid, return it. Otherwise, return error_mark_node.
906: Callers may want to use the returned value instead of the original type. */
907:
908: tree
909: resolve_tags (type)
910: tree type;
911: {
912: register char *errmsg = NULL;
913:
914: switch (TREE_CODE (type))
915: {
916: case RECORD_TYPE:
917: errmsg = "undefined struct tag %s";
918: break;
919:
920: case UNION_TYPE:
921: errmsg = "undefined union tag %s";
922: break;
923:
924: case ENUMERAL_TYPE:
925: errmsg = "undefined enum tag %s";
926: break;
927:
928: default:
929: return type;
930: }
931:
932: if (TYPE_SIZE (type) != 0)
933: return type;
934:
935: yyerror (errmsg, IDENTIFIER_POINTER (TYPE_NAME (type)));
936: return error_mark_node;
937: }
938:
939: /* Called when a declaration is seen that contains no names to declare.
940: If its type is a reference to a structure, union or enum inherited
941: from a containing scope, shadow that tag name for the current scope
942: with a forward reference.
943: If its type defines a new named structure or union
944: or defines an enum, it is valid but we need not do anything here.
945: Otherwise, it is an error. */
946:
947: void
948: shadow_tag (declspecs)
949: tree declspecs;
950: {
951: register tree link;
952:
953: for (link = declspecs; link; link = TREE_CHAIN (link))
954: {
955: register tree value = TREE_VALUE (link);
956: register enum tree_code code = TREE_CODE (value);
957: if ((code == RECORD_TYPE || code == UNION_TYPE || code == ENUMERAL_TYPE)
958: && TYPE_SIZE (value) != 0)
959: {
960: register tree name = TYPE_NAME (value);
961: register tree t = lookup_tag (code, name, current_binding_level, 1);
962: if (t == 0)
963: {
964: t = make_node (code);
965: pushtag (name, t);
966: return;
967: }
968: if (name != 0 || code == ENUMERAL_TYPE)
969: return;
970: }
971: }
972: warning ("empty declaration");
973: }
974:
975: /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
976:
977: tree
978: groktypename (typename)
979: tree typename;
980: {
981: return grokdeclarator (TREE_VALUE (typename),
982: TREE_PURPOSE (typename),
983: TYPENAME);
984: }
985:
986: /* Decode a declarator in an ordinary declaration or data definition.
987: This is called as soon as the type information and variable name
988: have been parsed, before parsing the initializer if any.
989: Here we create the ..._DECL node, fill in its type,
990: and put it on the list of decls for the current context.
991: The ..._DECL node is returned as the value.
992:
993: Exception: for arrays where the length is not specified,
994: the type is left null, to be filled in by `finish_decl'.
995:
996: Function definitions do not come here; they go to start_function
997: instead. However, external and forward declarations of functions
998: do go through here. Structure field declarations are done by
999: grokfield and not through here. */
1000:
1001: tree
1002: start_decl (declarator, declspecs, initialized)
1003: tree declspecs, declarator;
1004: int initialized;
1005: {
1006: register tree decl = grokdeclarator (declarator, declspecs, NORMAL);
1007: if (initialized)
1008: TREE_EXTERNAL (decl) = 0;
1009: return pushdecl (decl);
1010: }
1011:
1012: /* Finish processing of a declaration;
1013: install its line number and initial value.
1014: If the length of an array type is not known before,
1015: it must be determined now, from the initial value, or it is an error. */
1016:
1017: void
1018: finish_decl (filename, line, decl, init)
1019: char *filename;
1020: int line;
1021: tree decl, init;
1022: {
1023: register tree type = TREE_TYPE (decl);
1024:
1025: if (init) store_init_value (decl, init);
1026:
1027: /* deduce size of array from initialization, if not already known */
1028:
1029: if (TREE_CODE (type) == ARRAY_TYPE
1030: && TYPE_DOMAIN (type) == 0)
1031: {
1032: register tree maxindex = NULL_TREE;
1033:
1034: if (init)
1035: {
1036: /* Note MAXINDEX is really the maximum index,
1037: one less than the size. */
1038: if (TREE_CODE (init) == ADDR_EXPR
1039: && TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
1040: maxindex = build_int_2 (TREE_STRING_LENGTH (TREE_OPERAND (init, 0)) - 1, 0);
1041: else if (TREE_CODE (init) == CONSTRUCTOR)
1042: {
1043: int nelts = list_length (TREE_OPERAND (DECL_INITIAL (decl), 0));
1044: maxindex = build_int_2 (nelts - 1, 0);
1045: }
1046: }
1047:
1048: if (!maxindex)
1049: {
1050: if (!pedantic)
1051: TREE_EXTERNAL (decl) = 1;
1052: else if (!TREE_EXTERNAL (decl))
1053: {
1054: yylineerror (line, "size missing in array declaration");
1055: maxindex = build_int_2 (0, 0);
1056: }
1057: }
1058:
1059: if (maxindex)
1060: {
1061: if (pedantic && integer_zerop (maxindex))
1062: yylineerror (line, "zero-size array");
1063: TYPE_DOMAIN (type) = make_index_type (maxindex);
1064: if (!TREE_TYPE (maxindex))
1065: TREE_TYPE (maxindex) = TYPE_DOMAIN (type);
1066: }
1067:
1068: layout_type (type);
1069:
1070: layout_decl (decl, 0);
1071: }
1072:
1073: /* Output the assembler code for the variable. */
1074:
1075: rest_of_compilation (decl, current_binding_level == global_binding_level);
1076: }
1077:
1078: /* Given declspecs and a declarator,
1079: determine the name and type of the object declared.
1080: DECLSPECS is a chain of tree_list nodes whose value fields
1081: are the storage classes and type specifiers.
1082:
1083: DECL_CONTEXT says which syntactic context this declaration is in:
1084: NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
1085: PARM for a paramater declaration (either within a function prototype
1086: or before a function body). Make a PARM_DECL.
1087: TYPENAME if for a typename (in a cast or sizeof).
1088: Don't make a DECL node; just return the type.
1089: FIELD for a struct or union field; make a FIELD_DECL.
1090:
1091: In the TYPENAME case, DECLARATOR is really an absolute declarator.
1092: It may also be so in the PARM case, for a prototype where the
1093: argument type is specified but not the name. */
1094:
1095: static tree
1096: grokdeclarator (declarator, declspecs, decl_context)
1097: tree declspecs;
1098: tree declarator;
1099: enum decl_context decl_context;
1100: {
1101: int specbits = 0;
1102: tree spec;
1103: tree type = NULL_TREE;
1104: int longlong = 0;
1105: int constp;
1106: int volatilep;
1107: int explicit_int = 0;
1108:
1109: /* Anything declared one level down from the top level
1110: must be one of the parameters of a function
1111: (because the body is at least two levels down). */
1112:
1113: if (decl_context == NORMAL
1114: && current_binding_level->level_chain == global_binding_level)
1115: decl_context = PARM;
1116:
1117: /* Look through the decl specs and record which ones appear.
1118: Some typespecs are defined as built-in typenames.
1119: Others, the ones that are modifiers of other types,
1120: are represented by bits in SPECBITS: set the bits for
1121: the modifiers that appear. Storage class keywords are also in SPECBITS.
1122:
1123: If there is a typedef name or a type, store the type in TYPE.
1124: This includes builtin typedefs such as `int'.
1125:
1126: Set EXPLICIT_INT if the type is `int' or `char' and did not
1127: come from a user typedef.
1128:
1129: Set LONGLONG if `long' is mentioned twice. */
1130:
1131: for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
1132: {
1133: register int i;
1134: register tree id = TREE_VALUE (spec);
1135:
1136: if (id == ridpointers[(int) RID_INT]
1137: || id == ridpointers[(int) RID_CHAR])
1138: explicit_int = 1;
1139:
1140: for (i = (int) RID_FIRST_MODIFIER; i < (int) RID_MAX; i++)
1141: {
1142: if (ridpointers[i] == id)
1143: {
1144: if (i == (int) RID_LONG && specbits & (1<<i))
1145: longlong = 1;
1146: specbits |= 1 << i;
1147: goto found;
1148: }
1149: }
1150: if (type) yyerror ("two or more data types in declaration");
1151: else if (TREE_CODE (id) == RECORD_TYPE || TREE_CODE (id) == UNION_TYPE || TREE_CODE (id) == ENUMERAL_TYPE)
1152: type = id;
1153: else
1154: {
1155: register tree t = lookup_name (id);
1156: if (!t || TREE_CODE (t) != TYPE_DECL)
1157: yyerror ("%s fails to be a typedef or built in type",
1158: IDENTIFIER_POINTER (id));
1159: else type = TREE_TYPE (t);
1160: }
1161:
1162: found: {}
1163: }
1164:
1165: /* No type at all: default to `int', and set EXPLICIT_INT
1166: because it was not a user-defined typedef. */
1167:
1168: if (type == 0)
1169: {
1170: explicit_int = 1;
1171: type = integer_type_node;
1172: }
1173:
1174: /* Now process the modifiers that were specified
1175: and check for invalid combinations. */
1176:
1177: /* Long double is a special combination. */
1178:
1179: if ((specbits & 1 << RID_LONG) && type == double_type_node)
1180: {
1181: specbits &= ~ (1 << RID_LONG);
1182: type = long_double_type_node;
1183: }
1184:
1185: /* Check all other uses of type modifiers. */
1186:
1187: if (specbits & ((1 << RID_LONG) | (1 << RID_SHORT)
1188: | (1 << RID_UNSIGNED) | (1 << RID_SIGNED)))
1189: {
1190: if (!explicit_int)
1191: yyerror ("long, short, signed or unsigned used invalidly");
1192: else if ((specbits & 1 << RID_LONG) && (specbits & 1 << RID_SHORT))
1193: yyerror ("long and short specified together");
1194: else if ((specbits & 1 << RID_SIGNED) && (specbits & 1 << RID_UNSIGNED))
1195: yyerror ("signed and unsigned specified together");
1196: else
1197: {
1198: if (specbits & 1 << RID_UNSIGNED)
1199: {
1200: if (specbits & 1 << RID_LONG)
1201: type = long_unsigned_type_node;
1202: else if (specbits & 1 << RID_SHORT)
1203: type = short_unsigned_type_node;
1204: else if (type == char_type_node)
1205: type = unsigned_char_type_node;
1206: else
1207: type = unsigned_type_node;
1208: }
1209: else if (specbits & 1 << RID_LONG)
1210: type = long_integer_type_node;
1211: else if (specbits & 1 << RID_SHORT)
1212: type = short_integer_type_node;
1213: }
1214: }
1215:
1216: /* Set CONSTP if this declaration is `const', whether by
1217: explicit specification or via a typedef.
1218: Likewise for VOLATILEP. */
1219:
1220: constp = (specbits & 1 << RID_CONST) | TREE_READONLY (type);
1221: volatilep = (specbits & 1 << RID_VOLATILE) | TREE_VOLATILE (type);
1222: type = TYPE_MAIN_VARIANT (type);
1223:
1224: /* Warn if two storage classes are given. Default to `auto'. */
1225:
1226: {
1227: int nclasses = 0;
1228:
1229: if (specbits & 1 << RID_AUTO) nclasses++;
1230: if (specbits & 1 << RID_STATIC) nclasses++;
1231: if (specbits & 1 << RID_EXTERN) nclasses++;
1232: if (specbits & 1 << RID_REGISTER) nclasses++;
1233: if (specbits & 1 << RID_TYPEDEF) nclasses++;
1234:
1235: if (nclasses == 0) specbits |= 1 << RID_AUTO;
1236:
1237: /* Warn about storage classes that are invalid for certain
1238: kinds of declarations (parameters, typenames, etc.). */
1239:
1240: if (nclasses > 1)
1241: yyerror ("two or more storage classes in declaration");
1242: else if (decl_context != NORMAL && nclasses > 0)
1243: {
1244: if (decl_context == PARM && specbits & 1 << RID_REGISTER)
1245: ;
1246: else if (decl_context == FIELD)
1247: yyerror ("storage class specified in structure field");
1248: else yyerror (decl_context == PARM
1249: ? "storage class specified in parameter list"
1250: : "storage class specified in typename");
1251: }
1252: else if (current_binding_level == global_binding_level
1253: && nclasses > 0)
1254: {
1255: if (specbits & (1 << RID_AUTO))
1256: yyerror ("auto specified in external declaration");
1257: if (specbits & (1 << RID_REGISTER))
1258: yyerror ("auto specified in external declaration");
1259: }
1260: }
1261:
1262: /* Now figure out the structure of the declarator proper.
1263: Descend through it, creating more complex types, until we reach
1264: the declared identifier (or NULL_TREE, in an absolute declarator). */
1265:
1266: while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE)
1267: {
1268: /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
1269: an INDIRECT_REF (for *...),
1270: a CALL_EXPR (for ...(...)),
1271: an identifier (for the name being declared)
1272: or a null pointer (for the place in an absolute declarator
1273: where the name was omitted).
1274: For the last two cases, we have just exited the loop.
1275:
1276: At this point, TYPE is the type of elements of an array,
1277: or for a function to return, or for a pointer to point to.
1278: After this sequence of ifs, TYPE is the type of the
1279: array or function or pointer, and DECLARATOR has had its
1280: outermost layer removed. */
1281:
1282: if (TREE_CODE (declarator) == ARRAY_REF)
1283: {
1284: register tree itype = NULL_TREE;
1285: register tree size = TREE_OPERAND (declarator, 1);
1286:
1287: /* Make sure we have a valid type for the array elements. */
1288: type = resolve_tags (type);
1289: /* Make a variant that is const or volatile as needed. */
1290: if (constp || volatilep)
1291: type = build_type_variant (type, constp, volatilep);
1292: /* Record that any const-ness or volatility are taken care of. */
1293: constp = 0;
1294: volatilep = 0;
1295:
1296: /* Check for some types that there cannot be arrays of. */
1297:
1298: if (type == void_type_node)
1299: {
1300: yyerror ("array of voids declared");
1301: type = integer_type_node;
1302: }
1303:
1304: if (TREE_CODE (type) == FUNCTION_TYPE)
1305: {
1306: yyerror ("array of functions declared");
1307: type = integer_type_node;
1308: }
1309:
1310: /* If size was specified, set ITYPE to a range-type for that size.
1311: Otherwise, ITYPE remains null. finish_decl may figure it out
1312: from an initial value. */
1313:
1314: if (size)
1315: {
1316: if (TREE_LITERAL (size))
1317: itype = make_index_type (build_int_2 (TREE_INT_CST_LOW (size) - 1, 0));
1318: else
1319: itype = make_index_type (build_binary_op (MINUS_EXPR, size, integer_one_node));
1320: }
1321:
1322: /* Build the array type itself. */
1323:
1324: type = build_array_type (type, itype);
1325:
1326: /* Make sure there is a valid pointer type
1327: for automatic coercion of array to pointer. */
1328:
1329: layout_type (TYPE_POINTER_TO (TREE_TYPE (type)));
1330:
1331: declarator = TREE_OPERAND (declarator, 0);
1332:
1333: /* if size unknown, don't lay it out until finish_decl */
1334: if (!itype) goto nolayout;
1335: }
1336: else if (TREE_CODE (declarator) == CALL_EXPR)
1337: {
1338: /* Declaring a function type.
1339: Make sure we have a valid type for the function to return. */
1340: type = resolve_tags (type);
1341:
1342: /* Is this an error? Should they be merged into TYPE here? */
1343: constp = 0;
1344: volatilep = 0;
1345:
1346: /* Warn about some types functions can't return. */
1347:
1348: if (TREE_CODE (type) == FUNCTION_TYPE)
1349: {
1350: yyerror ("function returning a function declared");
1351: type = integer_type_node;
1352: }
1353: if (TREE_CODE (type) == ARRAY_TYPE)
1354: {
1355: yyerror ("function returning an array declared");
1356: type = integer_type_node;
1357: }
1358:
1359: /* Construct the function type and go to the next
1360: inner layer of declarator. */
1361:
1362: type =
1363: build_function_type (type,
1364: grokparms (TREE_OPERAND (declarator, 1)));
1365: declarator = TREE_OPERAND (declarator, 0);
1366: }
1367: else if (TREE_CODE (declarator) == INDIRECT_REF)
1368: {
1369: /* Merge any constancy or volatility into the target type
1370: for the pointer. */
1371:
1372: if (constp || volatilep)
1373: type = build_type_variant (type, constp, volatilep);
1374: constp = 0;
1375: volatilep = 0;
1376:
1377: type = build_pointer_type (type);
1378:
1379: /* Process a list of type modifier keywords
1380: (such as const or volatile) that were given inside the `*'. */
1381:
1382: if (TREE_TYPE (declarator))
1383: {
1384: register tree typemodlist;
1385: for (typemodlist = TREE_TYPE (declarator); typemodlist;
1386: typemodlist = TREE_CHAIN (typemodlist))
1387: {
1388: if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_CONST])
1389: constp = 1;
1390: if (TREE_VALUE (typemodlist) == ridpointers[(int) RID_VOLATILE])
1391: volatilep = 1;
1392: }
1393: }
1394:
1395: declarator = TREE_OPERAND (declarator, 0);
1396: }
1397: else
1398: abort ();
1399:
1400: layout_type (type);
1401:
1402: /* @@ Should perhaps replace the following code by changes in
1403: * @@ stor_layout.c. */
1404: if (TREE_CODE (type) == FUNCTION_DECL)
1405: {
1406: /* A function variable in C should be Pmode rather than EPmode
1407: because it has just the address of a function, no static chain.*/
1408: TYPE_MODE (type) = Pmode;
1409: }
1410:
1411: nolayout: ;
1412: }
1413:
1414: /* Now TYPE has the actual type; but if it is an ARRAY_TYPE
1415: then it has not been laid out of its size wasn't specified. */
1416:
1417: /* If this is declaring a typedef name, return a TYPE_DECL. */
1418:
1419: if (specbits & 1 << RID_TYPEDEF)
1420: {
1421: /* Note that the grammar rejects storage classes
1422: in typenames, fields or parameters */
1423: if (constp || volatilep)
1424: type = build_type_variant (type, constp, volatilep);
1425: return build_decl (TYPE_DECL, declarator, type, 0, 0);
1426: }
1427:
1428: /* It is ok to typedef a forward reference to a structure tag,
1429: but using it for other purposes requires it to be defined
1430: (except when it's inside a pointer; but in that case, what we
1431: get here would be a pointer type and `resolve_tags' would do nothing. */
1432:
1433: type = resolve_tags (type);
1434:
1435: /* If this is a type name (such as, in a cast or sizeof),
1436: compute the type and return it now. */
1437:
1438: if (decl_context == TYPENAME)
1439: {
1440: /* Note that the grammar rejects storage classes
1441: in typenames, fields or parameters */
1442: if (constp || volatilep)
1443: type = build_type_variant (type, constp, volatilep);
1444: return type;
1445: }
1446:
1447: /* `void' at top level (not within pointer)
1448: is allowed only in typedefs or type names. */
1449:
1450: if (type == void_type_node)
1451: {
1452: yyerror ("variable or field %s declared void",
1453: IDENTIFIER_POINTER (declarator));
1454: type = integer_type_node;
1455: }
1456:
1457: /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
1458: or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
1459:
1460: {
1461: register tree decl;
1462:
1463: if (decl_context == PARM)
1464: {
1465: /* A parameter declared as an array of T is really a pointer to T.
1466: One declared as a function is really a pointer to a function. */
1467:
1468: if (TREE_CODE (type) == ARRAY_TYPE)
1469: type = build_pointer_type (TREE_TYPE (type));
1470: if (TREE_CODE (type) == FUNCTION_TYPE)
1471: {
1472: type = build_pointer_type (type);
1473: layout_type (type);
1474: }
1475:
1476: decl = build_decl (PARM_DECL, declarator, type, 0, 0);
1477: DECL_ARG_TYPE (decl) = type;
1478: if (type == float_type_node)
1479: DECL_ARG_TYPE (decl) = double_type_node;
1480: else if (TREE_CODE (type) == INTEGER_TYPE
1481: && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
1482: DECL_ARG_TYPE (decl) = integer_type_node;
1483: }
1484: else if (decl_context == FIELD)
1485: {
1486: /* Structure field. It may not be a function. */
1487:
1488: if (TREE_CODE (type) == FUNCTION_TYPE)
1489: {
1490: yyerror ("field %s declared as a function",
1491: IDENTIFIER_POINTER (declarator));
1492: type = build_pointer_type (type);
1493: layout_type (type);
1494: }
1495: decl = build_decl (FIELD_DECL, declarator, type, 0, 0);
1496: }
1497: else
1498: {
1499: /* Declaration in ordinary context
1500: is either a variable or a function depending on TYPE. */
1501:
1502: decl = build_decl (((TREE_CODE (type) == FUNCTION_TYPE)
1503: ? FUNCTION_DECL : VAR_DECL),
1504: declarator, type,
1505: specbits & 1 << RID_STATIC,
1506: specbits & 1 << RID_EXTERN);
1507:
1508:
1509: /* For function declaration,
1510: store list of parameter names in the parameters field.
1511: finish_function will replace it with
1512: chained declarations of them. */
1513:
1514: if (TREE_CODE (type) == FUNCTION_TYPE)
1515: DECL_ARGUMENTS (decl) = last_function_parm_names;
1516: }
1517:
1518: /* Record `register' declaration for warnings on &
1519: and in case doing stupid register allocation. */
1520:
1521: if (specbits & 1 << RID_REGISTER)
1522: TREE_REGDECL (decl) = 1;
1523:
1524: /* Record constancy and volatility. */
1525:
1526: if (constp)
1527: TREE_READONLY (decl) = 1;
1528: if (volatilep)
1529: {
1530: TREE_VOLATILE (decl) = 1;
1531: TREE_THIS_VOLATILE (decl) = 1;
1532: }
1533:
1534: return decl;
1535: }
1536: }
1537:
1538: /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
1539: MAXVAL should be the maximum value in the domain
1540: (one less than the length of the array). */
1541:
1542: static
1543: tree
1544: make_index_type (maxval)
1545: tree maxval;
1546: {
1547: register tree itype = make_node (INTEGER_TYPE);
1548: TYPE_PRECISION (itype) = BITS_PER_WORD;
1549: TYPE_MIN_VALUE (itype) = build_int_2 (0, 0);
1550: TREE_TYPE (TYPE_MIN_VALUE (itype)) = itype;
1551: TYPE_MAX_VALUE (itype) = maxval;
1552: TREE_TYPE (maxval) = itype;
1553: TYPE_MODE (itype) = SImode;
1554: TYPE_SIZE (itype) = TYPE_SIZE (integer_type_node);
1555: TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (integer_type_node);
1556: TYPE_ALIGN (itype) = TYPE_ALIGN (integer_type_node);
1557: return itype;
1558: }
1559:
1560: /* Decode the list of parameter types for a function type.
1561: Given the list of things declared inside the parens,
1562: return a list of types.
1563:
1564: The list we receive can have three kinds of elements:
1565: an IDENTIFIER_NODE for names given without types,
1566: a TREE_LIST node for arguments given as typespecs or names with typespecs,
1567: or void_type_node, to mark the end of an argument list
1568: when additional arguments are not permitted (... was not used).
1569:
1570: If all elements of the input list contain types,
1571: we return a list of the types.
1572: If all elements contain no type (except perhaps a void_type_node
1573: at the end), we return a null list.
1574: If some have types and some do not, it is an error, and we
1575: return a null list.
1576:
1577: Also stores a list of names (IDENTIFIER_NODEs)
1578: in last_function_parm_names. The list links have the names
1579: as the TREE_VALUE and their types (if specified) as the TREE_PURPOSE. */
1580:
1581: static
1582: tree
1583: grokparms (first_parm)
1584: tree first_parm;
1585: {
1586: register tree parm;
1587: tree result = NULL_TREE;
1588: tree names = NULL_TREE;
1589: int notfirst = 0;
1590: int erring = 0;
1591:
1592: for (parm = first_parm;
1593: parm != NULL_TREE;
1594: parm = TREE_CHAIN (parm))
1595: {
1596: register tree parm_node = TREE_VALUE (parm);
1597: register tree name, type;
1598: if (TREE_CODE (parm_node) == VOID_TYPE)
1599: {
1600: name = 0;
1601: if (result != 0)
1602: result = chainon (result, build_tree_list (0, parm_node));
1603: break;
1604: }
1605: else if (TREE_CODE (parm_node) == IDENTIFIER_NODE)
1606: {
1607: name = parm_node;
1608: type = 0;
1609: }
1610: else
1611: {
1612: name = TREE_VALUE (parm_node);
1613: type = TREE_TYPE (grokdeclarator (TREE_VALUE (parm_node),
1614: TREE_PURPOSE (parm_node),
1615: PARM));
1616: }
1617:
1618: if (notfirst && !erring && (type != 0) != (result != 0))
1619: {
1620: yyerror ("types sometimes given and sometimes omitted in parameter list");
1621: erring = 1;
1622: }
1623: notfirst = 1;
1624:
1625: names = chainon (names, build_tree_list (type, name));
1626: if (type != 0)
1627: result = chainon (result, build_tree_list (0, type));
1628: }
1629:
1630: last_function_parm_names = names;
1631: if (erring)
1632: return 0;
1633: return result;
1634: }
1635:
1636: /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
1637: of a structure component, returning a FIELD_DECL node.
1638: WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.
1639:
1640: This is done during the parsing of the struct declaration.
1641: The FIELD_DECL nodes are chained together and the lot of them
1642: are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
1643:
1644: tree
1645: grokfield (filename, line, declarator, declspecs, width)
1646: char *filename;
1647: int line;
1648: tree declarator, declspecs, width;
1649: {
1650: register tree value = grokdeclarator (declarator, declspecs, FIELD);
1651: register tree semantics = TREE_TYPE (value);
1652:
1653: finish_decl (filename, line, value, NULL);
1654: DECL_INITIAL (value) = width;
1655: DECL_ALIGN (value) = TYPE_ALIGN (semantics);
1656: return value;
1657: }
1658:
1659: /* Create a RECORD_TYPE or UNION_TYPE node for a C struct or union declaration.
1660: CODE says which one; it is RECORD_TYPE or UNION_TYPE.
1661: FILENAME and LINE say where the declaration is located in the source.
1662: NAME is the name of the struct or union tag, or 0 if there is none.
1663: FIELDLIST is a chain of FIELD_DECL nodes for the fields.
1664: XREF is nonzero to make a cross reference to a struct or union
1665: defined elsewhere; this is how `struct foo' with no members
1666: is handled. */
1667:
1668: tree
1669: build_struct (code, filename, line, name, fieldlist, xref)
1670: enum tree_code code;
1671: char *filename;
1672: int line;
1673: tree name, fieldlist;
1674: int xref;
1675: {
1676: register tree t;
1677: register tree x;
1678:
1679: if (xref)
1680: {
1681: /* If a cross reference is requested, look up the type
1682: already defined for this tag and return it. */
1683:
1684: register tree ref = lookup_tag (code, name, current_binding_level, 0);
1685: if (ref) return ref;
1686:
1687: /* If no such tag is yet defined, create a forward-reference node
1688: and record it as the "definition".
1689: When a real declaration of this type is found,
1690: the forward-reference will be altered into a real type. */
1691:
1692: t = make_node (code);
1693: pushtag (name, t);
1694: return t;
1695: }
1696:
1697: /* If we have previously made forward reference to this type,
1698: fill in the contents in the same object that used to be the
1699: forward reference. */
1700:
1701: if (name)
1702: t = lookup_tag (code, name, current_binding_level, 1);
1703: else
1704: t = 0;
1705:
1706: /* Otherwise, create a new node for this type. */
1707:
1708: if (t == 0)
1709: {
1710: t = make_node (code);
1711: pushtag (name, t);
1712: }
1713:
1714: /* Install struct as DECL_CONTEXT of each field decl.
1715: Also process specified field sizes.
1716: Set DECL_SIZE_UNIT to the specified size, or 0 if none specified.
1717: The specified size is found in the DECL_INITIAL.
1718: Store 0 there, except for ": 0" fields (so we can find them
1719: and delete them, below). */
1720:
1721: for (x = fieldlist; x; x = TREE_CHAIN (x))
1722: {
1723: DECL_CONTEXT (x) = t;
1724: DECL_SIZE_UNIT (x) = 0;
1725: /* detect invalid field size */
1726: if (DECL_INITIAL (x) && TREE_CODE (DECL_INITIAL (x)) != INTEGER_CST)
1727: {
1728: yylineerror (DECL_SOURCE_LINE (x),
1729: "structure field %s width not an integer constant",
1730: IDENTIFIER_POINTER (DECL_NAME (x)));
1731: DECL_INITIAL (x) = NULL;
1732: }
1733: /* process valid field size */
1734: if (DECL_INITIAL (x))
1735: {
1736: register int prec = TREE_INT_CST_LOW (DECL_INITIAL (x));
1737:
1738: if (prec == 0)
1739: {
1740: /* field size 0 => mark following field as "aligned" */
1741: if (TREE_CHAIN (x))
1742: DECL_ALIGN (TREE_CHAIN (x)) = BITS_PER_WORD;
1743: }
1744: else
1745: {
1746: DECL_INITIAL (x) = NULL;
1747: DECL_SIZE_UNIT (x) = prec > 0 ? prec : - prec;
1748: TREE_PACKED (x) = 1;
1749: }
1750: }
1751: }
1752: /* delete all ": 0" fields from the front of the fieldlist */
1753: while (fieldlist
1754: && DECL_INITIAL (fieldlist))
1755: fieldlist = TREE_CHAIN (fieldlist);
1756: /* delete all such fields from the rest of the fieldlist */
1757: for (x = fieldlist; x;)
1758: {
1759: if (TREE_CHAIN (x) && DECL_INITIAL (TREE_CHAIN (x)))
1760: TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x));
1761: else x = TREE_CHAIN (x);
1762: }
1763:
1764: TYPE_FIELDS (t) = fieldlist;
1765:
1766: layout_type (t);
1767:
1768: /* Round the size up to be a multiple of the required alignment */
1769: TYPE_SIZE (t)
1770: = convert_units (TYPE_SIZE (t), TYPE_SIZE_UNIT (t), TYPE_ALIGN (t));
1771: TYPE_SIZE_UNIT (t) = TYPE_ALIGN (t);
1772:
1773: return t;
1774: }
1775:
1776: /* Begin compiling the definition of an enumeration type.
1777: NAME is its name (or null if anonymous).
1778: Returns the type object, as yet incomplete.
1779: Also records info about it so that build_enumerator
1780: may be used to declare the individual values as they are read. */
1781:
1782: tree
1783: start_enum (name)
1784: tree name;
1785: {
1786: register tree enumtype = 0;
1787:
1788: /* If this is the real definition for a previous forward reference,
1789: fill in the contents in the same object that used to be the
1790: forward reference. */
1791:
1792: if (name != 0)
1793: enumtype = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 1);
1794:
1795: if (enumtype == 0)
1796: {
1797: enumtype = make_node (ENUMERAL_TYPE);
1798: pushtag (name, enumtype);
1799: }
1800:
1801: if (TYPE_VALUES (enumtype) != 0)
1802: {
1803: /* This enum is a named one that has been declared already. */
1804: yyerror ("redeclaration of enum %s", IDENTIFIER_POINTER (name));
1805:
1806: /* Completely replace its old definition.
1807: The old enumerators remain defined, however. */
1808: TYPE_VALUES (enumtype) = 0;
1809: }
1810:
1811: /* Initially, set up this enum as like `int'
1812: so that we can create the enumerators' declarations and values.
1813: Later on, the precision of the type may be changed and
1814: it may be layed out again. */
1815:
1816: TYPE_PRECISION (enumtype) = TYPE_PRECISION (integer_type_node);
1817: TYPE_SIZE (enumtype) = 0;
1818: fixup_unsigned_type (enumtype);
1819:
1820: enum_next_value = 0;
1821: current_enum_type = enumtype;
1822:
1823: return enumtype;
1824: }
1825:
1826: /* Return the enumeration type tagged with NAME
1827: or create and return a forward reference to such a type. */
1828:
1829: tree
1830: xref_enum (name)
1831: tree name;
1832: {
1833: register tree ref = lookup_tag (ENUMERAL_TYPE, name, current_binding_level, 0);
1834: /* If we find an already-defined enum type, or a previous
1835: forward reference, return it. */
1836: if (ref) return ref;
1837:
1838: /* If this is a forward reference for the first time,
1839: record it as the "definition". */
1840: ref = make_node (ENUMERAL_TYPE);
1841: pushtag (name, ref);
1842: return ref;
1843: }
1844:
1845: /* After processing and defining all the values of an enumeration type,
1846: install their decls in the enumeration type and finish it off.
1847: ENUMTYPE is the type object and VALUES a list of name-value pairs.
1848: Returns ENUMTYPE. */
1849:
1850: tree
1851: finish_enum (enumtype, values)
1852: register tree enumtype, values;
1853: {
1854: register tree pair = values;
1855: register long maxvalue = 0;
1856: register int i;
1857:
1858: TYPE_VALUES (enumtype) = values;
1859:
1860: /* Calculate the maximum value of any enumerator in this type. */
1861:
1862: for (pair = values; pair; pair = TREE_CHAIN (pair))
1863: {
1864: int value = TREE_INT_CST_LOW (TREE_VALUE (pair));
1865: if (value > maxvalue)
1866: maxvalue = value;
1867: }
1868:
1869: #if 0
1870: /* Determine the precision this type needs, lay it out, and define it. */
1871:
1872: for (i = maxvalue; i; i >>= 1)
1873: TYPE_PRECISION (enumtype)++;
1874:
1875: if (!TYPE_PRECISION (enumtype))
1876: TYPE_PRECISION (enumtype) = 1;
1877: #endif
1878:
1879: /* Cancel the laying out previously done for the enum type,
1880: so that fixup_unsigned_type will do it over. */
1881: TYPE_SIZE (enumtype) = 0;
1882:
1883: fixup_unsigned_type (enumtype);
1884: TREE_INT_CST_LOW (TYPE_MAX_VALUE (enumtype)) = maxvalue;
1885:
1886: current_enum_type = 0;
1887:
1888: return enumtype;
1889: }
1890:
1891: /* Build and install a CONST_DECL for one value of the
1892: current enumeration type (one that was begun with start_enum).
1893: Return a tree-list containing the name and its value.
1894: Assignment of sequential values by default is handled here. */
1895:
1896: tree
1897: build_enumerator (name, value)
1898: tree name, value;
1899: {
1900: register tree decl;
1901:
1902: /* Validate and default VALUE. */
1903:
1904: if (value != 0 && TREE_CODE (value) != INTEGER_CST)
1905: {
1906: yyerror ("enumerator value for %s not integer constant",
1907: IDENTIFIER_POINTER (name));
1908: value = 0;
1909: }
1910:
1911: if (value == 0)
1912: value = build_int_2 (enum_next_value, 0);
1913:
1914: /* Set default for following value. */
1915:
1916: enum_next_value = TREE_INT_CST_LOW (value) + 1;
1917:
1918: /* Now create a declaration for the enum value name. */
1919:
1920: decl = build_decl (CONST_DECL, name,
1921: current_enum_type, 0, 0);
1922: DECL_INITIAL (decl) = value;
1923: TREE_TYPE (value) = current_enum_type;
1924: pushdecl (decl);
1925:
1926: return build_tree_list (name, value);
1927: }
1928:
1929: /* Create the FUNCTION_DECL for a function definition.
1930: LINE1 is the line number that the definition absolutely begins on.
1931: LINE2 is the line number that the name of the function appears on.
1932: DECLSPECS and DECLARATOR are the parts of the declaration;
1933: they describe the function's name and the type it returns,
1934: but twisted together in a fashion that parallels the syntax of C.
1935:
1936: This function creates a binding context for the function body
1937: as well as setting up the FUNCTION_DECL in current_function_decl.
1938:
1939: Returns 1 on success. If the DECLARATOR is not suitable for a function
1940: (it defines a datum instead), we return 0, which tells
1941: yyparse to report a parse error. */
1942:
1943: int
1944: start_function (declspecs, declarator)
1945: tree declarator, declspecs;
1946: {
1947: tree pushed_decl, decl1;
1948:
1949: current_function_returns_value = 0; /* assume it doesn't until we see it does. */
1950:
1951: decl1 = grokdeclarator (declarator, declspecs, NORMAL);
1952: if (TREE_CODE (decl1) != FUNCTION_DECL)
1953: return 0;
1954:
1955: current_function_decl = decl1;
1956:
1957: announce_function (current_function_decl);
1958:
1959: /* Make the init_value nonzero so pushdecl knows this is not tentative.
1960: 1 is not a legitimate value,
1961: but it is replaced below with the LET_STMT. */
1962: DECL_INITIAL (current_function_decl) = (tree)1;
1963: pushed_decl = pushdecl (current_function_decl);
1964:
1965: /* If this is an erroneous redeclaration of something not a function,
1966: return the original declaration (that nobody else can see)
1967: to avoid bombing out reading in the body of the function. */
1968:
1969: if (TREE_CODE (pushed_decl) == FUNCTION_DECL)
1970: current_function_decl = pushed_decl;
1971:
1972: pushlevel ();
1973:
1974: make_function_rtl (current_function_decl);
1975:
1976: /* Allocate further tree nodes temporarily during compilation
1977: of this function only. */
1978: temporary_allocation ();
1979:
1980: current_block = build_let (NULL, NULL, NULL, NULL, NULL, NULL);
1981: DECL_INITIAL (current_function_decl) = current_block;
1982: DECL_RESULT (current_function_decl)
1983: = build_decl (RESULT_DECL, value_identifier,
1984: TREE_TYPE (TREE_TYPE (current_function_decl)), 0, 0);
1985:
1986: /* Make the FUNCTION_DECL's contents appear in a local tree dump
1987: and make the FUNCTION_DECL itself not appear in the permanent dump. */
1988:
1989: TREE_PERMANENT (current_function_decl) = 0;
1990:
1991: /* Must mark the RESULT_DECL as being in this function. */
1992:
1993: DECL_CONTEXT (DECL_RESULT (current_function_decl)) = current_block;
1994:
1995: return 1;
1996: }
1997:
1998: /* Store the parameter declarations into the current function declaration.
1999: This is called after parsing the parameter declarations, before
2000: digesting the body of the function. */
2001:
2002: void
2003: store_parm_decls ()
2004: {
2005: register tree parmdecls = getdecls ();
2006: register tree fndecl = current_function_decl;
2007: register tree block = DECL_INITIAL (fndecl);
2008: register tree parm;
2009:
2010: /* First match each formal parameter name with its declaration.
2011: The DECL_ARGUMENTS is a chain of TREE_LIST nodes
2012: each with a parm name as the TREE_VALUE.
2013: (A declared type may be in the TREE_PURPOSE.)
2014:
2015: Associate decls with the names and store the decls
2016: into the TREE_PURPOSE slots. */
2017:
2018: for (parm = DECL_ARGUMENTS (fndecl); parm; parm = TREE_CHAIN (parm))
2019: {
2020: register tree tail, found = NULL;
2021:
2022: if (TREE_VALUE (parm) == 0)
2023: {
2024: yylineerror (DECL_SOURCE_LINE (fndecl),
2025: "parameter name missing from parameter list");
2026: TREE_PURPOSE (parm) = 0;
2027: continue;
2028: }
2029:
2030: /* See if any of the parmdecls specifies this parm by name. */
2031: for (tail = parmdecls; tail; tail = TREE_CHAIN (tail))
2032: if (DECL_NAME (tail) == TREE_VALUE (parm))
2033: {
2034: found = tail;
2035: break;
2036: }
2037:
2038: /* If declaration already marked, we have a duplicate name.
2039: Complain, and don't use this decl twice. */
2040: if (found && DECL_CONTEXT (found) != 0)
2041: {
2042: yylineerror (DECL_SOURCE_LINE (fndecl),
2043: "multiple parameters named %s",
2044: IDENTIFIER_POINTER (TREE_VALUE (parm)));
2045: found = 0;
2046: }
2047:
2048: /* See if the type was given in the arglist.
2049: If so, that overrides any parmdecl. */
2050: if (TREE_PURPOSE (parm) != 0)
2051: {
2052: /* Error to have type in the arglist and have a parmdecl. */
2053: if (found)
2054: yylineerror (DECL_SOURCE_LINE (fndecl),
2055: "type for parameter %s given twice",
2056: IDENTIFIER_POINTER (TREE_VALUE (parm)));
2057:
2058: found = build_decl (PARM_DECL, TREE_VALUE (parm),
2059: TREE_PURPOSE (parm), 0, 0);
2060: DECL_ARG_TYPE (found) == TREE_TYPE (found);
2061:
2062: DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
2063: DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
2064: /* Note that this pushdecl is needed despite the storedecls below
2065: in order to make the name know about its decl. */
2066: pushdecl (found);
2067: }
2068:
2069: /* If no declaration found, default to int. */
2070: if (!found)
2071: {
2072: found = build_decl (PARM_DECL, TREE_VALUE (parm),
2073: integer_type_node, 0, 0);
2074: DECL_ARG_TYPE (found) = TREE_TYPE (found);
2075: DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
2076: DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
2077: pushdecl (found);
2078: }
2079:
2080: TREE_PURPOSE (parm) = found;
2081:
2082: /* Mark this declaration as belonging to this function. */
2083:
2084: DECL_CONTEXT (found) = block;
2085: }
2086:
2087: /* Complain about declarations not matched with any names. */
2088:
2089: for (parm = parmdecls; parm; parm = TREE_CHAIN (parm))
2090: {
2091: if (DECL_CONTEXT (parm) == 0)
2092: yylineerror (DECL_SOURCE_LINE (parm),
2093: "declaration for parameter %s but no such parameter",
2094: IDENTIFIER_POINTER (DECL_NAME (parm)));
2095: }
2096:
2097: /* Chain the declarations together in the order of the list of names. */
2098: /* Store that chain in the function decl, replacing the list of names. */
2099: parm = DECL_ARGUMENTS (fndecl);
2100: DECL_ARGUMENTS (fndecl) = 0;
2101: {
2102: register tree last;
2103: for (last = 0; parm; parm = TREE_CHAIN (parm))
2104: if (TREE_PURPOSE (parm))
2105: {
2106: if (last == 0)
2107: DECL_ARGUMENTS (fndecl) = TREE_PURPOSE (parm);
2108: else
2109: TREE_CHAIN (last) = TREE_PURPOSE (parm);
2110: last = TREE_PURPOSE (parm);
2111: TREE_CHAIN (last) = 0;
2112: }
2113: }
2114:
2115: /* Now store the final chain of decls for the arguments
2116: as the decl-chain of the current lexical scope. */
2117:
2118: storedecls (DECL_ARGUMENTS (fndecl));
2119:
2120: /* Compute the offset of each parameter wrt the entire arglist
2121: and store it in the parameter's decl node. */
2122:
2123: layout_parms (fndecl);
2124: }
2125:
2126: /* Finish up a function declaration and compile that function
2127: all the way to assembler language output. The free the storage
2128: for the function definition.
2129:
2130: This is called after parsing the body of the function definition.
2131: STMTS is the chain of statements that makes up the function body. */
2132:
2133: void
2134: finish_function (filename, line, stmts)
2135: char *filename;
2136: int line;
2137: tree stmts;
2138: {
2139: register tree fndecl = current_function_decl;
2140: register tree block = DECL_INITIAL (fndecl);
2141: int old_uid;
2142:
2143: register tree link;
2144:
2145: /* TREE_READONLY (fndecl) = 1;
2146: This caused &foo to be of type ptr-to-const-function
2147: which then got a warning when stored in a ptr-to-function variable. */
2148:
2149: TREE_EXTERNAL (fndecl) = 0;
2150: TREE_STATIC (fndecl) = 1;
2151:
2152: finish_block (block, NULL_TREE, NULL, stmts);
2153:
2154: DECL_SOURCE_FILE (block) = filename;
2155: DECL_SOURCE_LINE (block) = line;
2156:
2157: poplevel ();
2158: current_switch_stmt = NULL;
2159: current_block = NULL;
2160:
2161: rest_of_compilation (fndecl, 1);
2162:
2163: /* Free all the tree nodes making up this function. */
2164: /* Switch back to allocating nodes permanently
2165: until we start another function. */
2166: permanent_allocation ();
2167:
2168: /* Stop pointing to the local nodes about to be freed. */
2169: /* But DECL_INITIAL must remain nonzero so we know this
2170: was an actual function definition. */
2171: DECL_INITIAL (fndecl) = (tree) 1;
2172: DECL_ARGUMENTS (fndecl) = 0;
2173: DECL_RESULT (fndecl) = 0;
2174: }
2175:
2176: tree
2177: implicitly_declare (functionid)
2178: tree functionid;
2179: {
2180: register tree decl
2181: = build_decl (FUNCTION_DECL, functionid,
2182: default_function_type, 0, 1);
2183:
2184: /* ANSI standard says implicit declarations are in the innermost block */
2185: pushdecl (decl);
2186: return decl;
2187: }
2188:
2189: /* Return nonzero if the declaration new is legal
2190: when the declaration old (assumed to be for the same name)
2191: has already been seen. */
2192:
2193: int
2194: allowed_redeclaration (new, old, global)
2195: tree new, old;
2196: int global;
2197: {
2198: if (!comptypes (TREE_TYPE (new), TREE_TYPE (old)))
2199: return 0;
2200:
2201: if (global)
2202: {
2203: /* Reject two definitions. */
2204: if (DECL_INITIAL (old) != 0 && DECL_INITIAL (new) != 0)
2205: return 0;
2206: /* Reject two tentative definitions with different linkage. */
2207: if (!TREE_EXTERNAL (new) && !TREE_EXTERNAL (old)
2208: && TREE_STATIC (old) != TREE_STATIC (new))
2209: return 0;
2210: return 1;
2211: }
2212: else if (TREE_CODE (TREE_TYPE (new)) == FUNCTION_TYPE)
2213: {
2214: /* Declarations of functions inside blocks
2215: are just references, and do not determine linkage. */
2216: return 1;
2217: }
2218: else
2219: {
2220: /* Reject two definitions, and reject a definition
2221: together with an external reference. */
2222: return TREE_EXTERNAL (new) && TREE_EXTERNAL (old);
2223: }
2224: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.