* recog.c (preproces_constraints): Zero recog_op_alt before
[official-gcc.git] / gcc / tree.c
blobf0dc0ee4da5e439836168035009989adf73ac637
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987, 88, 92-98, 1999 Free Software Foundation, Inc.
4 This file is part of GNU CC.
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.
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.
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, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
22 /* This file contains the low level primitives for operating on tree nodes,
23 including allocation, list operations, interning of identifiers,
24 construction of data type nodes and statement nodes,
25 and construction of type conversion nodes. It also contains
26 tables index by tree code that describe how to take apart
27 nodes of that code.
29 It is intended to be language-independent, but occasionally
30 calls language-dependent routines defined (for C) in typecheck.c.
32 The low-level allocation routines oballoc and permalloc
33 are used also for allocating many other kinds of objects
34 by all passes of the compiler. */
36 #include "config.h"
37 #include "system.h"
38 #include "flags.h"
39 #include "tree.h"
40 #include "function.h"
41 #include "obstack.h"
42 #include "toplev.h"
44 #define obstack_chunk_alloc xmalloc
45 #define obstack_chunk_free free
46 /* obstack.[ch] explicitly declined to prototype this. */
47 extern int _obstack_allocated_p PROTO ((struct obstack *h, GENERIC_PTR obj));
49 /* Tree nodes of permanent duration are allocated in this obstack.
50 They are the identifier nodes, and everything outside of
51 the bodies and parameters of function definitions. */
53 struct obstack permanent_obstack;
55 /* The initial RTL, and all ..._TYPE nodes, in a function
56 are allocated in this obstack. Usually they are freed at the
57 end of the function, but if the function is inline they are saved.
58 For top-level functions, this is maybepermanent_obstack.
59 Separate obstacks are made for nested functions. */
61 struct obstack *function_maybepermanent_obstack;
63 /* This is the function_maybepermanent_obstack for top-level functions. */
65 struct obstack maybepermanent_obstack;
67 /* This is a list of function_maybepermanent_obstacks for top-level inline
68 functions that are compiled in the middle of compiling other functions. */
70 struct simple_obstack_stack *toplev_inline_obstacks;
72 /* Former elements of toplev_inline_obstacks that have been recycled. */
74 struct simple_obstack_stack *extra_inline_obstacks;
76 /* This is a list of function_maybepermanent_obstacks for inline functions
77 nested in the current function that were compiled in the middle of
78 compiling other functions. */
80 struct simple_obstack_stack *inline_obstacks;
82 /* The contents of the current function definition are allocated
83 in this obstack, and all are freed at the end of the function.
84 For top-level functions, this is temporary_obstack.
85 Separate obstacks are made for nested functions. */
87 struct obstack *function_obstack;
89 /* This is used for reading initializers of global variables. */
91 struct obstack temporary_obstack;
93 /* The tree nodes of an expression are allocated
94 in this obstack, and all are freed at the end of the expression. */
96 struct obstack momentary_obstack;
98 /* The tree nodes of a declarator are allocated
99 in this obstack, and all are freed when the declarator
100 has been parsed. */
102 static struct obstack temp_decl_obstack;
104 /* This points at either permanent_obstack
105 or the current function_maybepermanent_obstack. */
107 struct obstack *saveable_obstack;
109 /* This is same as saveable_obstack during parse and expansion phase;
110 it points to the current function's obstack during optimization.
111 This is the obstack to be used for creating rtl objects. */
113 struct obstack *rtl_obstack;
115 /* This points at either permanent_obstack or the current function_obstack. */
117 struct obstack *current_obstack;
119 /* This points at either permanent_obstack or the current function_obstack
120 or momentary_obstack. */
122 struct obstack *expression_obstack;
124 /* Stack of obstack selections for push_obstacks and pop_obstacks. */
126 struct obstack_stack
128 struct obstack_stack *next;
129 struct obstack *current;
130 struct obstack *saveable;
131 struct obstack *expression;
132 struct obstack *rtl;
135 struct obstack_stack *obstack_stack;
137 /* Obstack for allocating struct obstack_stack entries. */
139 static struct obstack obstack_stack_obstack;
141 /* Addresses of first objects in some obstacks.
142 This is for freeing their entire contents. */
143 char *maybepermanent_firstobj;
144 char *temporary_firstobj;
145 char *momentary_firstobj;
146 char *temp_decl_firstobj;
148 /* This is used to preserve objects (mainly array initializers) that need to
149 live until the end of the current function, but no further. */
150 char *momentary_function_firstobj;
152 /* Nonzero means all ..._TYPE nodes should be allocated permanently. */
154 int all_types_permanent;
156 /* Stack of places to restore the momentary obstack back to. */
158 struct momentary_level
160 /* Pointer back to previous such level. */
161 struct momentary_level *prev;
162 /* First object allocated within this level. */
163 char *base;
164 /* Value of expression_obstack saved at entry to this level. */
165 struct obstack *obstack;
168 struct momentary_level *momentary_stack;
170 /* Table indexed by tree code giving a string containing a character
171 classifying the tree code. Possibilities are
172 t, d, s, c, r, <, 1, 2 and e. See tree.def for details. */
174 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
176 char tree_code_type[MAX_TREE_CODES] = {
177 #include "tree.def"
179 #undef DEFTREECODE
181 /* Table indexed by tree code giving number of expression
182 operands beyond the fixed part of the node structure.
183 Not used for types or decls. */
185 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
187 int tree_code_length[MAX_TREE_CODES] = {
188 #include "tree.def"
190 #undef DEFTREECODE
192 /* Names of tree components.
193 Used for printing out the tree and error messages. */
194 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
196 char *tree_code_name[MAX_TREE_CODES] = {
197 #include "tree.def"
199 #undef DEFTREECODE
201 /* Statistics-gathering stuff. */
202 typedef enum
204 d_kind,
205 t_kind,
206 b_kind,
207 s_kind,
208 r_kind,
209 e_kind,
210 c_kind,
211 id_kind,
212 op_id_kind,
213 perm_list_kind,
214 temp_list_kind,
215 vec_kind,
216 x_kind,
217 lang_decl,
218 lang_type,
219 all_kinds
220 } tree_node_kind;
222 int tree_node_counts[(int)all_kinds];
223 int tree_node_sizes[(int)all_kinds];
224 int id_string_size = 0;
226 const char *tree_node_kind_names[] = {
227 "decls",
228 "types",
229 "blocks",
230 "stmts",
231 "refs",
232 "exprs",
233 "constants",
234 "identifiers",
235 "op_identifiers",
236 "perm_tree_lists",
237 "temp_tree_lists",
238 "vecs",
239 "random kinds",
240 "lang_decl kinds",
241 "lang_type kinds"
244 /* Hash table for uniquizing IDENTIFIER_NODEs by name. */
246 #define MAX_HASH_TABLE 1009
247 static tree hash_table[MAX_HASH_TABLE]; /* id hash buckets */
249 /* 0 while creating built-in identifiers. */
250 static int do_identifier_warnings;
252 /* Unique id for next decl created. */
253 static int next_decl_uid;
254 /* Unique id for next type created. */
255 static int next_type_uid = 1;
257 /* The language-specific function for alias analysis. If NULL, the
258 language does not do any special alias analysis. */
259 int (*lang_get_alias_set) PROTO((tree));
261 /* Here is how primitive or already-canonicalized types' hash
262 codes are made. */
263 #define TYPE_HASH(TYPE) ((unsigned long) (TYPE) & 0777777)
265 static void set_type_quals PROTO((tree, int));
266 static void append_random_chars PROTO((char *));
267 static void build_real_from_int_cst_1 PROTO((PTR));
269 extern char *mode_name[];
271 void gcc_obstack_init ();
273 /* Init the principal obstacks. */
275 void
276 init_obstacks ()
278 gcc_obstack_init (&obstack_stack_obstack);
279 gcc_obstack_init (&permanent_obstack);
281 gcc_obstack_init (&temporary_obstack);
282 temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
283 gcc_obstack_init (&momentary_obstack);
284 momentary_firstobj = (char *) obstack_alloc (&momentary_obstack, 0);
285 momentary_function_firstobj = momentary_firstobj;
286 gcc_obstack_init (&maybepermanent_obstack);
287 maybepermanent_firstobj
288 = (char *) obstack_alloc (&maybepermanent_obstack, 0);
289 gcc_obstack_init (&temp_decl_obstack);
290 temp_decl_firstobj = (char *) obstack_alloc (&temp_decl_obstack, 0);
292 function_obstack = &temporary_obstack;
293 function_maybepermanent_obstack = &maybepermanent_obstack;
294 current_obstack = &permanent_obstack;
295 expression_obstack = &permanent_obstack;
296 rtl_obstack = saveable_obstack = &permanent_obstack;
298 /* Init the hash table of identifiers. */
299 bzero ((char *) hash_table, sizeof hash_table);
302 void
303 gcc_obstack_init (obstack)
304 struct obstack *obstack;
306 /* Let particular systems override the size of a chunk. */
307 #ifndef OBSTACK_CHUNK_SIZE
308 #define OBSTACK_CHUNK_SIZE 0
309 #endif
310 /* Let them override the alloc and free routines too. */
311 #ifndef OBSTACK_CHUNK_ALLOC
312 #define OBSTACK_CHUNK_ALLOC xmalloc
313 #endif
314 #ifndef OBSTACK_CHUNK_FREE
315 #define OBSTACK_CHUNK_FREE free
316 #endif
317 _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0,
318 (void *(*) ()) OBSTACK_CHUNK_ALLOC,
319 (void (*) ()) OBSTACK_CHUNK_FREE);
322 /* Save all variables describing the current status into the structure
323 *P. This function is called whenever we start compiling one
324 function in the midst of compiling another. For example, when
325 compiling a nested function, or, in C++, a template instantiation
326 that is required by the function we are currently compiling.
328 CONTEXT is the decl_function_context for the function we're about to
329 compile; if it isn't current_function_decl, we have to play some games. */
331 void
332 save_tree_status (p, context)
333 struct function *p;
334 tree context;
336 p->all_types_permanent = all_types_permanent;
337 p->momentary_stack = momentary_stack;
338 p->maybepermanent_firstobj = maybepermanent_firstobj;
339 p->temporary_firstobj = temporary_firstobj;
340 p->momentary_firstobj = momentary_firstobj;
341 p->momentary_function_firstobj = momentary_function_firstobj;
342 p->function_obstack = function_obstack;
343 p->function_maybepermanent_obstack = function_maybepermanent_obstack;
344 p->current_obstack = current_obstack;
345 p->expression_obstack = expression_obstack;
346 p->saveable_obstack = saveable_obstack;
347 p->rtl_obstack = rtl_obstack;
348 p->inline_obstacks = inline_obstacks;
350 if (current_function_decl && context == current_function_decl)
351 /* Objects that need to be saved in this function can be in the nonsaved
352 obstack of the enclosing function since they can't possibly be needed
353 once it has returned. */
354 function_maybepermanent_obstack = function_obstack;
355 else
357 /* We're compiling a function which isn't nested in the current
358 function. We need to create a new maybepermanent_obstack for this
359 function, since it can't go onto any of the existing obstacks. */
360 struct simple_obstack_stack **head;
361 struct simple_obstack_stack *current;
363 if (context == NULL_TREE)
364 head = &toplev_inline_obstacks;
365 else
367 struct function *f = find_function_data (context);
368 head = &f->inline_obstacks;
371 if (context == NULL_TREE && extra_inline_obstacks)
373 current = extra_inline_obstacks;
374 extra_inline_obstacks = current->next;
376 else
378 current = ((struct simple_obstack_stack *)
379 xmalloc (sizeof (struct simple_obstack_stack)));
381 current->obstack
382 = (struct obstack *) xmalloc (sizeof (struct obstack));
383 gcc_obstack_init (current->obstack);
386 function_maybepermanent_obstack = current->obstack;
388 current->next = *head;
389 *head = current;
392 maybepermanent_firstobj
393 = (char *) obstack_finish (function_maybepermanent_obstack);
395 function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
396 gcc_obstack_init (function_obstack);
398 current_obstack = &permanent_obstack;
399 expression_obstack = &permanent_obstack;
400 rtl_obstack = saveable_obstack = &permanent_obstack;
402 temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
403 momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
404 momentary_function_firstobj = momentary_firstobj;
407 /* Restore all variables describing the current status from the structure *P.
408 This is used after a nested function. */
410 void
411 restore_tree_status (p, context)
412 struct function *p;
413 tree context;
415 all_types_permanent = p->all_types_permanent;
416 momentary_stack = p->momentary_stack;
418 obstack_free (&momentary_obstack, momentary_function_firstobj);
420 /* Free saveable storage used by the function just compiled and not
421 saved.
423 CAUTION: This is in function_obstack of the containing function.
424 So we must be sure that we never allocate from that obstack during
425 the compilation of a nested function if we expect it to survive
426 past the nested function's end. */
427 obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
429 /* If we were compiling a toplevel function, we can free this space now. */
430 if (context == NULL_TREE)
432 obstack_free (&temporary_obstack, temporary_firstobj);
433 obstack_free (&momentary_obstack, momentary_function_firstobj);
436 /* If we were compiling a toplevel function that we don't actually want
437 to save anything from, return the obstack to the pool. */
438 if (context == NULL_TREE
439 && obstack_empty_p (function_maybepermanent_obstack))
441 struct simple_obstack_stack *current, **p = &toplev_inline_obstacks;
443 if ((*p) != NULL)
445 while ((*p)->obstack != function_maybepermanent_obstack)
446 p = &((*p)->next);
447 current = *p;
448 *p = current->next;
450 current->next = extra_inline_obstacks;
451 extra_inline_obstacks = current;
455 obstack_free (function_obstack, 0);
456 free (function_obstack);
458 temporary_firstobj = p->temporary_firstobj;
459 momentary_firstobj = p->momentary_firstobj;
460 momentary_function_firstobj = p->momentary_function_firstobj;
461 maybepermanent_firstobj = p->maybepermanent_firstobj;
462 function_obstack = p->function_obstack;
463 function_maybepermanent_obstack = p->function_maybepermanent_obstack;
464 current_obstack = p->current_obstack;
465 expression_obstack = p->expression_obstack;
466 saveable_obstack = p->saveable_obstack;
467 rtl_obstack = p->rtl_obstack;
468 inline_obstacks = p->inline_obstacks;
471 /* Start allocating on the temporary (per function) obstack.
472 This is done in start_function before parsing the function body,
473 and before each initialization at top level, and to go back
474 to temporary allocation after doing permanent_allocation. */
476 void
477 temporary_allocation ()
479 /* Note that function_obstack at top level points to temporary_obstack.
480 But within a nested function context, it is a separate obstack. */
481 current_obstack = function_obstack;
482 expression_obstack = function_obstack;
483 rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
484 momentary_stack = 0;
485 inline_obstacks = 0;
488 /* Start allocating on the permanent obstack but don't
489 free the temporary data. After calling this, call
490 `permanent_allocation' to fully resume permanent allocation status. */
492 void
493 end_temporary_allocation ()
495 current_obstack = &permanent_obstack;
496 expression_obstack = &permanent_obstack;
497 rtl_obstack = saveable_obstack = &permanent_obstack;
500 /* Resume allocating on the temporary obstack, undoing
501 effects of `end_temporary_allocation'. */
503 void
504 resume_temporary_allocation ()
506 current_obstack = function_obstack;
507 expression_obstack = function_obstack;
508 rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
511 /* While doing temporary allocation, switch to allocating in such a
512 way as to save all nodes if the function is inlined. Call
513 resume_temporary_allocation to go back to ordinary temporary
514 allocation. */
516 void
517 saveable_allocation ()
519 /* Note that function_obstack at top level points to temporary_obstack.
520 But within a nested function context, it is a separate obstack. */
521 expression_obstack = current_obstack = saveable_obstack;
524 /* Switch to current obstack CURRENT and maybepermanent obstack SAVEABLE,
525 recording the previously current obstacks on a stack.
526 This does not free any storage in any obstack. */
528 void
529 push_obstacks (current, saveable)
530 struct obstack *current, *saveable;
532 struct obstack_stack *p
533 = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
534 (sizeof (struct obstack_stack)));
536 p->current = current_obstack;
537 p->saveable = saveable_obstack;
538 p->expression = expression_obstack;
539 p->rtl = rtl_obstack;
540 p->next = obstack_stack;
541 obstack_stack = p;
543 current_obstack = current;
544 expression_obstack = current;
545 rtl_obstack = saveable_obstack = saveable;
548 /* Save the current set of obstacks, but don't change them. */
550 void
551 push_obstacks_nochange ()
553 struct obstack_stack *p
554 = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
555 (sizeof (struct obstack_stack)));
557 p->current = current_obstack;
558 p->saveable = saveable_obstack;
559 p->expression = expression_obstack;
560 p->rtl = rtl_obstack;
561 p->next = obstack_stack;
562 obstack_stack = p;
565 /* Pop the obstack selection stack. */
567 void
568 pop_obstacks ()
570 struct obstack_stack *p = obstack_stack;
571 obstack_stack = p->next;
573 current_obstack = p->current;
574 saveable_obstack = p->saveable;
575 expression_obstack = p->expression;
576 rtl_obstack = p->rtl;
578 obstack_free (&obstack_stack_obstack, p);
581 /* Nonzero if temporary allocation is currently in effect.
582 Zero if currently doing permanent allocation. */
585 allocation_temporary_p ()
587 return current_obstack != &permanent_obstack;
590 /* Go back to allocating on the permanent obstack
591 and free everything in the temporary obstack.
593 FUNCTION_END is true only if we have just finished compiling a function.
594 In that case, we also free preserved initial values on the momentary
595 obstack. */
597 void
598 permanent_allocation (function_end)
599 int function_end;
601 /* Free up previous temporary obstack data */
602 obstack_free (&temporary_obstack, temporary_firstobj);
603 if (function_end)
605 obstack_free (&momentary_obstack, momentary_function_firstobj);
606 momentary_firstobj = momentary_function_firstobj;
608 else
609 obstack_free (&momentary_obstack, momentary_firstobj);
610 obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
611 obstack_free (&temp_decl_obstack, temp_decl_firstobj);
613 /* Free up the maybepermanent_obstacks for any of our nested functions
614 which were compiled at a lower level. */
615 while (inline_obstacks)
617 struct simple_obstack_stack *current = inline_obstacks;
618 inline_obstacks = current->next;
619 obstack_free (current->obstack, 0);
620 free (current->obstack);
621 free (current);
624 current_obstack = &permanent_obstack;
625 expression_obstack = &permanent_obstack;
626 rtl_obstack = saveable_obstack = &permanent_obstack;
629 /* Save permanently everything on the maybepermanent_obstack. */
631 void
632 preserve_data ()
634 maybepermanent_firstobj
635 = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
638 void
639 preserve_initializer ()
641 struct momentary_level *tem;
642 char *old_momentary;
644 temporary_firstobj
645 = (char *) obstack_alloc (&temporary_obstack, 0);
646 maybepermanent_firstobj
647 = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
649 old_momentary = momentary_firstobj;
650 momentary_firstobj
651 = (char *) obstack_alloc (&momentary_obstack, 0);
652 if (momentary_firstobj != old_momentary)
653 for (tem = momentary_stack; tem; tem = tem->prev)
654 tem->base = momentary_firstobj;
657 /* Start allocating new rtl in current_obstack.
658 Use resume_temporary_allocation
659 to go back to allocating rtl in saveable_obstack. */
661 void
662 rtl_in_current_obstack ()
664 rtl_obstack = current_obstack;
667 /* Start allocating rtl from saveable_obstack. Intended to be used after
668 a call to push_obstacks_nochange. */
670 void
671 rtl_in_saveable_obstack ()
673 rtl_obstack = saveable_obstack;
676 /* Allocate SIZE bytes in the current obstack
677 and return a pointer to them.
678 In practice the current obstack is always the temporary one. */
680 char *
681 oballoc (size)
682 int size;
684 return (char *) obstack_alloc (current_obstack, size);
687 /* Free the object PTR in the current obstack
688 as well as everything allocated since PTR.
689 In practice the current obstack is always the temporary one. */
691 void
692 obfree (ptr)
693 char *ptr;
695 obstack_free (current_obstack, ptr);
698 /* Allocate SIZE bytes in the permanent obstack
699 and return a pointer to them. */
701 char *
702 permalloc (size)
703 int size;
705 return (char *) obstack_alloc (&permanent_obstack, size);
708 /* Allocate NELEM items of SIZE bytes in the permanent obstack
709 and return a pointer to them. The storage is cleared before
710 returning the value. */
712 char *
713 perm_calloc (nelem, size)
714 int nelem;
715 long size;
717 char *rval = (char *) obstack_alloc (&permanent_obstack, nelem * size);
718 bzero (rval, nelem * size);
719 return rval;
722 /* Allocate SIZE bytes in the saveable obstack
723 and return a pointer to them. */
725 char *
726 savealloc (size)
727 int size;
729 return (char *) obstack_alloc (saveable_obstack, size);
732 /* Allocate SIZE bytes in the expression obstack
733 and return a pointer to them. */
735 char *
736 expralloc (size)
737 int size;
739 return (char *) obstack_alloc (expression_obstack, size);
742 /* Print out which obstack an object is in. */
744 void
745 print_obstack_name (object, file, prefix)
746 char *object;
747 FILE *file;
748 const char *prefix;
750 struct obstack *obstack = NULL;
751 const char *obstack_name = NULL;
752 struct function *p;
754 for (p = outer_function_chain; p; p = p->next)
756 if (_obstack_allocated_p (p->function_obstack, object))
758 obstack = p->function_obstack;
759 obstack_name = "containing function obstack";
761 if (_obstack_allocated_p (p->function_maybepermanent_obstack, object))
763 obstack = p->function_maybepermanent_obstack;
764 obstack_name = "containing function maybepermanent obstack";
768 if (_obstack_allocated_p (&obstack_stack_obstack, object))
770 obstack = &obstack_stack_obstack;
771 obstack_name = "obstack_stack_obstack";
773 else if (_obstack_allocated_p (function_obstack, object))
775 obstack = function_obstack;
776 obstack_name = "function obstack";
778 else if (_obstack_allocated_p (&permanent_obstack, object))
780 obstack = &permanent_obstack;
781 obstack_name = "permanent_obstack";
783 else if (_obstack_allocated_p (&momentary_obstack, object))
785 obstack = &momentary_obstack;
786 obstack_name = "momentary_obstack";
788 else if (_obstack_allocated_p (function_maybepermanent_obstack, object))
790 obstack = function_maybepermanent_obstack;
791 obstack_name = "function maybepermanent obstack";
793 else if (_obstack_allocated_p (&temp_decl_obstack, object))
795 obstack = &temp_decl_obstack;
796 obstack_name = "temp_decl_obstack";
799 /* Check to see if the object is in the free area of the obstack. */
800 if (obstack != NULL)
802 if (object >= obstack->next_free
803 && object < obstack->chunk_limit)
804 fprintf (file, "%s in free portion of obstack %s",
805 prefix, obstack_name);
806 else
807 fprintf (file, "%s allocated from %s", prefix, obstack_name);
809 else
810 fprintf (file, "%s not allocated from any obstack", prefix);
813 void
814 debug_obstack (object)
815 char *object;
817 print_obstack_name (object, stderr, "object");
818 fprintf (stderr, ".\n");
821 /* Return 1 if OBJ is in the permanent obstack.
822 This is slow, and should be used only for debugging.
823 Use TREE_PERMANENT for other purposes. */
826 object_permanent_p (obj)
827 tree obj;
829 return _obstack_allocated_p (&permanent_obstack, obj);
832 /* Start a level of momentary allocation.
833 In C, each compound statement has its own level
834 and that level is freed at the end of each statement.
835 All expression nodes are allocated in the momentary allocation level. */
837 void
838 push_momentary ()
840 struct momentary_level *tem
841 = (struct momentary_level *) obstack_alloc (&momentary_obstack,
842 sizeof (struct momentary_level));
843 tem->prev = momentary_stack;
844 tem->base = (char *) obstack_base (&momentary_obstack);
845 tem->obstack = expression_obstack;
846 momentary_stack = tem;
847 expression_obstack = &momentary_obstack;
850 /* Set things up so the next clear_momentary will only clear memory
851 past our present position in momentary_obstack. */
853 void
854 preserve_momentary ()
856 momentary_stack->base = (char *) obstack_base (&momentary_obstack);
859 /* Free all the storage in the current momentary-allocation level.
860 In C, this happens at the end of each statement. */
862 void
863 clear_momentary ()
865 obstack_free (&momentary_obstack, momentary_stack->base);
868 /* Discard a level of momentary allocation.
869 In C, this happens at the end of each compound statement.
870 Restore the status of expression node allocation
871 that was in effect before this level was created. */
873 void
874 pop_momentary ()
876 struct momentary_level *tem = momentary_stack;
877 momentary_stack = tem->prev;
878 expression_obstack = tem->obstack;
879 /* We can't free TEM from the momentary_obstack, because there might
880 be objects above it which have been saved. We can free back to the
881 stack of the level we are popping off though. */
882 obstack_free (&momentary_obstack, tem->base);
885 /* Pop back to the previous level of momentary allocation,
886 but don't free any momentary data just yet. */
888 void
889 pop_momentary_nofree ()
891 struct momentary_level *tem = momentary_stack;
892 momentary_stack = tem->prev;
893 expression_obstack = tem->obstack;
896 /* Call when starting to parse a declaration:
897 make expressions in the declaration last the length of the function.
898 Returns an argument that should be passed to resume_momentary later. */
901 suspend_momentary ()
903 register int tem = expression_obstack == &momentary_obstack;
904 expression_obstack = saveable_obstack;
905 return tem;
908 /* Call when finished parsing a declaration:
909 restore the treatment of node-allocation that was
910 in effect before the suspension.
911 YES should be the value previously returned by suspend_momentary. */
913 void
914 resume_momentary (yes)
915 int yes;
917 if (yes)
918 expression_obstack = &momentary_obstack;
921 /* Init the tables indexed by tree code.
922 Note that languages can add to these tables to define their own codes. */
924 void
925 init_tree_codes ()
930 /* Return a newly allocated node of code CODE.
931 Initialize the node's unique id and its TREE_PERMANENT flag.
932 For decl and type nodes, some other fields are initialized.
933 The rest of the node is initialized to zero.
935 Achoo! I got a code in the node. */
937 tree
938 make_node (code)
939 enum tree_code code;
941 register tree t;
942 register int type = TREE_CODE_CLASS (code);
943 register int length = 0;
944 register struct obstack *obstack = current_obstack;
945 #ifdef GATHER_STATISTICS
946 register tree_node_kind kind;
947 #endif
949 switch (type)
951 case 'd': /* A decl node */
952 #ifdef GATHER_STATISTICS
953 kind = d_kind;
954 #endif
955 length = sizeof (struct tree_decl);
956 /* All decls in an inline function need to be saved. */
957 if (obstack != &permanent_obstack)
958 obstack = saveable_obstack;
960 /* PARM_DECLs go on the context of the parent. If this is a nested
961 function, then we must allocate the PARM_DECL on the parent's
962 obstack, so that they will live to the end of the parent's
963 closing brace. This is necessary in case we try to inline the
964 function into its parent.
966 PARM_DECLs of top-level functions do not have this problem. However,
967 we allocate them where we put the FUNCTION_DECL for languages such as
968 Ada that need to consult some flags in the PARM_DECLs of the function
969 when calling it.
971 See comment in restore_tree_status for why we can't put this
972 in function_obstack. */
973 if (code == PARM_DECL && obstack != &permanent_obstack)
975 tree context = 0;
976 if (current_function_decl)
977 context = decl_function_context (current_function_decl);
979 if (context)
980 obstack
981 = find_function_data (context)->function_maybepermanent_obstack;
983 break;
985 case 't': /* a type node */
986 #ifdef GATHER_STATISTICS
987 kind = t_kind;
988 #endif
989 length = sizeof (struct tree_type);
990 /* All data types are put where we can preserve them if nec. */
991 if (obstack != &permanent_obstack)
992 obstack = all_types_permanent ? &permanent_obstack : saveable_obstack;
993 break;
995 case 'b': /* a lexical block */
996 #ifdef GATHER_STATISTICS
997 kind = b_kind;
998 #endif
999 length = sizeof (struct tree_block);
1000 /* All BLOCK nodes are put where we can preserve them if nec. */
1001 if (obstack != &permanent_obstack)
1002 obstack = saveable_obstack;
1003 break;
1005 case 's': /* an expression with side effects */
1006 #ifdef GATHER_STATISTICS
1007 kind = s_kind;
1008 goto usual_kind;
1009 #endif
1010 case 'r': /* a reference */
1011 #ifdef GATHER_STATISTICS
1012 kind = r_kind;
1013 goto usual_kind;
1014 #endif
1015 case 'e': /* an expression */
1016 case '<': /* a comparison expression */
1017 case '1': /* a unary arithmetic expression */
1018 case '2': /* a binary arithmetic expression */
1019 #ifdef GATHER_STATISTICS
1020 kind = e_kind;
1021 usual_kind:
1022 #endif
1023 obstack = expression_obstack;
1024 /* All BIND_EXPR nodes are put where we can preserve them if nec. */
1025 if (code == BIND_EXPR && obstack != &permanent_obstack)
1026 obstack = saveable_obstack;
1027 length = sizeof (struct tree_exp)
1028 + (tree_code_length[(int) code] - 1) * sizeof (char *);
1029 break;
1031 case 'c': /* a constant */
1032 #ifdef GATHER_STATISTICS
1033 kind = c_kind;
1034 #endif
1035 obstack = expression_obstack;
1037 /* We can't use tree_code_length for INTEGER_CST, since the number of
1038 words is machine-dependent due to varying length of HOST_WIDE_INT,
1039 which might be wider than a pointer (e.g., long long). Similarly
1040 for REAL_CST, since the number of words is machine-dependent due
1041 to varying size and alignment of `double'. */
1043 if (code == INTEGER_CST)
1044 length = sizeof (struct tree_int_cst);
1045 else if (code == REAL_CST)
1046 length = sizeof (struct tree_real_cst);
1047 else
1048 length = sizeof (struct tree_common)
1049 + tree_code_length[(int) code] * sizeof (char *);
1050 break;
1052 case 'x': /* something random, like an identifier. */
1053 #ifdef GATHER_STATISTICS
1054 if (code == IDENTIFIER_NODE)
1055 kind = id_kind;
1056 else if (code == OP_IDENTIFIER)
1057 kind = op_id_kind;
1058 else if (code == TREE_VEC)
1059 kind = vec_kind;
1060 else
1061 kind = x_kind;
1062 #endif
1063 length = sizeof (struct tree_common)
1064 + tree_code_length[(int) code] * sizeof (char *);
1065 /* Identifier nodes are always permanent since they are
1066 unique in a compiler run. */
1067 if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
1068 break;
1070 default:
1071 abort ();
1074 t = (tree) obstack_alloc (obstack, length);
1075 bzero ((PTR) t, length);
1077 #ifdef GATHER_STATISTICS
1078 tree_node_counts[(int)kind]++;
1079 tree_node_sizes[(int)kind] += length;
1080 #endif
1082 TREE_SET_CODE (t, code);
1083 if (obstack == &permanent_obstack)
1084 TREE_PERMANENT (t) = 1;
1086 switch (type)
1088 case 's':
1089 TREE_SIDE_EFFECTS (t) = 1;
1090 TREE_TYPE (t) = void_type_node;
1091 break;
1093 case 'd':
1094 if (code != FUNCTION_DECL)
1095 DECL_ALIGN (t) = 1;
1096 DECL_IN_SYSTEM_HEADER (t)
1097 = in_system_header && (obstack == &permanent_obstack);
1098 DECL_SOURCE_LINE (t) = lineno;
1099 DECL_SOURCE_FILE (t) = (input_filename) ? input_filename : "<built-in>";
1100 DECL_UID (t) = next_decl_uid++;
1101 /* Note that we have not yet computed the alias set for this
1102 declaration. */
1103 DECL_POINTER_ALIAS_SET (t) = -1;
1104 break;
1106 case 't':
1107 TYPE_UID (t) = next_type_uid++;
1108 TYPE_ALIGN (t) = 1;
1109 TYPE_MAIN_VARIANT (t) = t;
1110 TYPE_OBSTACK (t) = obstack;
1111 TYPE_ATTRIBUTES (t) = NULL_TREE;
1112 #ifdef SET_DEFAULT_TYPE_ATTRIBUTES
1113 SET_DEFAULT_TYPE_ATTRIBUTES (t);
1114 #endif
1115 /* Note that we have not yet computed the alias set for this
1116 type. */
1117 TYPE_ALIAS_SET (t) = -1;
1118 break;
1120 case 'c':
1121 TREE_CONSTANT (t) = 1;
1122 break;
1125 return t;
1128 /* Return a new node with the same contents as NODE
1129 except that its TREE_CHAIN is zero and it has a fresh uid. */
1131 tree
1132 copy_node (node)
1133 tree node;
1135 register tree t;
1136 register enum tree_code code = TREE_CODE (node);
1137 register int length = 0;
1139 switch (TREE_CODE_CLASS (code))
1141 case 'd': /* A decl node */
1142 length = sizeof (struct tree_decl);
1143 break;
1145 case 't': /* a type node */
1146 length = sizeof (struct tree_type);
1147 break;
1149 case 'b': /* a lexical block node */
1150 length = sizeof (struct tree_block);
1151 break;
1153 case 'r': /* a reference */
1154 case 'e': /* an expression */
1155 case 's': /* an expression with side effects */
1156 case '<': /* a comparison expression */
1157 case '1': /* a unary arithmetic expression */
1158 case '2': /* a binary arithmetic expression */
1159 length = sizeof (struct tree_exp)
1160 + (tree_code_length[(int) code] - 1) * sizeof (char *);
1161 break;
1163 case 'c': /* a constant */
1164 /* We can't use tree_code_length for INTEGER_CST, since the number of
1165 words is machine-dependent due to varying length of HOST_WIDE_INT,
1166 which might be wider than a pointer (e.g., long long). Similarly
1167 for REAL_CST, since the number of words is machine-dependent due
1168 to varying size and alignment of `double'. */
1169 if (code == INTEGER_CST)
1170 length = sizeof (struct tree_int_cst);
1171 else if (code == REAL_CST)
1172 length = sizeof (struct tree_real_cst);
1173 else
1174 length = (sizeof (struct tree_common)
1175 + tree_code_length[(int) code] * sizeof (char *));
1176 break;
1178 case 'x': /* something random, like an identifier. */
1179 length = sizeof (struct tree_common)
1180 + tree_code_length[(int) code] * sizeof (char *);
1181 if (code == TREE_VEC)
1182 length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
1185 t = (tree) obstack_alloc (current_obstack, length);
1186 memcpy (t, node, length);
1188 /* EXPR_WITH_FILE_LOCATION must keep filename info stored in TREE_CHAIN */
1189 if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
1190 TREE_CHAIN (t) = 0;
1191 TREE_ASM_WRITTEN (t) = 0;
1193 if (TREE_CODE_CLASS (code) == 'd')
1194 DECL_UID (t) = next_decl_uid++;
1195 else if (TREE_CODE_CLASS (code) == 't')
1197 TYPE_UID (t) = next_type_uid++;
1198 TYPE_OBSTACK (t) = current_obstack;
1200 /* The following is so that the debug code for
1201 the copy is different from the original type.
1202 The two statements usually duplicate each other
1203 (because they clear fields of the same union),
1204 but the optimizer should catch that. */
1205 TYPE_SYMTAB_POINTER (t) = 0;
1206 TYPE_SYMTAB_ADDRESS (t) = 0;
1209 TREE_PERMANENT (t) = (current_obstack == &permanent_obstack);
1211 return t;
1214 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1215 For example, this can copy a list made of TREE_LIST nodes. */
1217 tree
1218 copy_list (list)
1219 tree list;
1221 tree head;
1222 register tree prev, next;
1224 if (list == 0)
1225 return 0;
1227 head = prev = copy_node (list);
1228 next = TREE_CHAIN (list);
1229 while (next)
1231 TREE_CHAIN (prev) = copy_node (next);
1232 prev = TREE_CHAIN (prev);
1233 next = TREE_CHAIN (next);
1235 return head;
1238 #define HASHBITS 30
1240 /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string).
1241 If an identifier with that name has previously been referred to,
1242 the same node is returned this time. */
1244 tree
1245 get_identifier (text)
1246 register const char *text;
1248 register int hi;
1249 register int i;
1250 register tree idp;
1251 register int len, hash_len;
1253 /* Compute length of text in len. */
1254 len = strlen (text);
1256 /* Decide how much of that length to hash on */
1257 hash_len = len;
1258 if (warn_id_clash && (unsigned)len > id_clash_len)
1259 hash_len = id_clash_len;
1261 /* Compute hash code */
1262 hi = hash_len * 613 + (unsigned) text[0];
1263 for (i = 1; i < hash_len; i += 2)
1264 hi = ((hi * 613) + (unsigned) (text[i]));
1266 hi &= (1 << HASHBITS) - 1;
1267 hi %= MAX_HASH_TABLE;
1269 /* Search table for identifier */
1270 for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1271 if (IDENTIFIER_LENGTH (idp) == len
1272 && IDENTIFIER_POINTER (idp)[0] == text[0]
1273 && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1274 return idp; /* <-- return if found */
1276 /* Not found; optionally warn about a similar identifier */
1277 if (warn_id_clash && do_identifier_warnings && (unsigned)len >= id_clash_len)
1278 for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1279 if (!strncmp (IDENTIFIER_POINTER (idp), text, id_clash_len))
1281 warning ("`%s' and `%s' identical in first %d characters",
1282 IDENTIFIER_POINTER (idp), text, id_clash_len);
1283 break;
1286 if (tree_code_length[(int) IDENTIFIER_NODE] < 0)
1287 abort (); /* set_identifier_size hasn't been called. */
1289 /* Not found, create one, add to chain */
1290 idp = make_node (IDENTIFIER_NODE);
1291 IDENTIFIER_LENGTH (idp) = len;
1292 #ifdef GATHER_STATISTICS
1293 id_string_size += len;
1294 #endif
1296 IDENTIFIER_POINTER (idp) = obstack_copy0 (&permanent_obstack, text, len);
1298 TREE_CHAIN (idp) = hash_table[hi];
1299 hash_table[hi] = idp;
1300 return idp; /* <-- return if created */
1303 /* If an identifier with the name TEXT (a null-terminated string) has
1304 previously been referred to, return that node; otherwise return
1305 NULL_TREE. */
1307 tree
1308 maybe_get_identifier (text)
1309 register const char *text;
1311 register int hi;
1312 register int i;
1313 register tree idp;
1314 register int len, hash_len;
1316 /* Compute length of text in len. */
1317 len = strlen (text);
1319 /* Decide how much of that length to hash on */
1320 hash_len = len;
1321 if (warn_id_clash && (unsigned)len > id_clash_len)
1322 hash_len = id_clash_len;
1324 /* Compute hash code */
1325 hi = hash_len * 613 + (unsigned) text[0];
1326 for (i = 1; i < hash_len; i += 2)
1327 hi = ((hi * 613) + (unsigned) (text[i]));
1329 hi &= (1 << HASHBITS) - 1;
1330 hi %= MAX_HASH_TABLE;
1332 /* Search table for identifier */
1333 for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1334 if (IDENTIFIER_LENGTH (idp) == len
1335 && IDENTIFIER_POINTER (idp)[0] == text[0]
1336 && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1337 return idp; /* <-- return if found */
1339 return NULL_TREE;
1342 /* Enable warnings on similar identifiers (if requested).
1343 Done after the built-in identifiers are created. */
1345 void
1346 start_identifier_warnings ()
1348 do_identifier_warnings = 1;
1351 /* Record the size of an identifier node for the language in use.
1352 SIZE is the total size in bytes.
1353 This is called by the language-specific files. This must be
1354 called before allocating any identifiers. */
1356 void
1357 set_identifier_size (size)
1358 int size;
1360 tree_code_length[(int) IDENTIFIER_NODE]
1361 = (size - sizeof (struct tree_common)) / sizeof (tree);
1364 /* Return a newly constructed INTEGER_CST node whose constant value
1365 is specified by the two ints LOW and HI.
1366 The TREE_TYPE is set to `int'.
1368 This function should be used via the `build_int_2' macro. */
1370 tree
1371 build_int_2_wide (low, hi)
1372 HOST_WIDE_INT low, hi;
1374 register tree t = make_node (INTEGER_CST);
1375 TREE_INT_CST_LOW (t) = low;
1376 TREE_INT_CST_HIGH (t) = hi;
1377 TREE_TYPE (t) = integer_type_node;
1378 return t;
1381 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1383 tree
1384 build_real (type, d)
1385 tree type;
1386 REAL_VALUE_TYPE d;
1388 tree v;
1389 int overflow = 0;
1391 /* Check for valid float value for this type on this target machine;
1392 if not, can print error message and store a valid value in D. */
1393 #ifdef CHECK_FLOAT_VALUE
1394 CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1395 #endif
1397 v = make_node (REAL_CST);
1398 TREE_TYPE (v) = type;
1399 TREE_REAL_CST (v) = d;
1400 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1401 return v;
1404 /* Return a new REAL_CST node whose type is TYPE
1405 and whose value is the integer value of the INTEGER_CST node I. */
1407 #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
1409 REAL_VALUE_TYPE
1410 real_value_from_int_cst (type, i)
1411 tree type, i;
1413 REAL_VALUE_TYPE d;
1415 #ifdef REAL_ARITHMETIC
1416 if (! TREE_UNSIGNED (TREE_TYPE (i)))
1417 REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1418 TYPE_MODE (type));
1419 else
1420 REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
1421 TREE_INT_CST_HIGH (i), TYPE_MODE (type));
1422 #else /* not REAL_ARITHMETIC */
1423 /* Some 386 compilers mishandle unsigned int to float conversions,
1424 so introduce a temporary variable E to avoid those bugs. */
1425 if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
1427 REAL_VALUE_TYPE e;
1429 d = (double) (~ TREE_INT_CST_HIGH (i));
1430 e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1431 * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1432 d *= e;
1433 e = (double) (unsigned HOST_WIDE_INT) (~ TREE_INT_CST_LOW (i));
1434 d += e;
1435 d = (- d - 1.0);
1437 else
1439 REAL_VALUE_TYPE e;
1441 d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
1442 e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1443 * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1444 d *= e;
1445 e = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (i);
1446 d += e;
1448 #endif /* not REAL_ARITHMETIC */
1449 return d;
1452 struct brfic_args
1454 /* Input */
1455 tree type, i;
1456 /* Output */
1457 REAL_VALUE_TYPE d;
1460 static void
1461 build_real_from_int_cst_1 (data)
1462 PTR data;
1464 struct brfic_args * args = (struct brfic_args *) data;
1466 #ifdef REAL_ARITHMETIC
1467 args->d = real_value_from_int_cst (args->type, args->i);
1468 #else
1469 args->d =
1470 REAL_VALUE_TRUNCATE (TYPE_MODE (args->type),
1471 real_value_from_int_cst (args->type, args->i));
1472 #endif
1475 /* This function can't be implemented if we can't do arithmetic
1476 on the float representation. */
1478 tree
1479 build_real_from_int_cst (type, i)
1480 tree type;
1481 tree i;
1483 tree v;
1484 int overflow = TREE_OVERFLOW (i);
1485 REAL_VALUE_TYPE d;
1486 struct brfic_args args;
1488 v = make_node (REAL_CST);
1489 TREE_TYPE (v) = type;
1491 /* Setup input for build_real_from_int_cst_1() */
1492 args.type = type;
1493 args.i = i;
1495 if (do_float_handler (build_real_from_int_cst_1, (PTR) &args))
1497 /* Receive output from build_real_from_int_cst_1() */
1498 d = args.d;
1500 else
1502 /* We got an exception from build_real_from_int_cst_1() */
1503 d = dconst0;
1504 overflow = 1;
1507 /* Check for valid float value for this type on this target machine. */
1509 #ifdef CHECK_FLOAT_VALUE
1510 CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1511 #endif
1513 TREE_REAL_CST (v) = d;
1514 TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1515 return v;
1518 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1520 /* Return a newly constructed STRING_CST node whose value is
1521 the LEN characters at STR.
1522 The TREE_TYPE is not initialized. */
1524 tree
1525 build_string (len, str)
1526 int len;
1527 const char *str;
1529 /* Put the string in saveable_obstack since it will be placed in the RTL
1530 for an "asm" statement and will also be kept around a while if
1531 deferring constant output in varasm.c. */
1533 register tree s = make_node (STRING_CST);
1534 TREE_STRING_LENGTH (s) = len;
1535 TREE_STRING_POINTER (s) = obstack_copy0 (saveable_obstack, str, len);
1536 return s;
1539 /* Return a newly constructed COMPLEX_CST node whose value is
1540 specified by the real and imaginary parts REAL and IMAG.
1541 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1542 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1544 tree
1545 build_complex (type, real, imag)
1546 tree type;
1547 tree real, imag;
1549 register tree t = make_node (COMPLEX_CST);
1551 TREE_REALPART (t) = real;
1552 TREE_IMAGPART (t) = imag;
1553 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1554 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1555 TREE_CONSTANT_OVERFLOW (t)
1556 = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1557 return t;
1560 /* Build a newly constructed TREE_VEC node of length LEN. */
1562 tree
1563 make_tree_vec (len)
1564 int len;
1566 register tree t;
1567 register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec);
1568 register struct obstack *obstack = current_obstack;
1570 #ifdef GATHER_STATISTICS
1571 tree_node_counts[(int)vec_kind]++;
1572 tree_node_sizes[(int)vec_kind] += length;
1573 #endif
1575 t = (tree) obstack_alloc (obstack, length);
1576 bzero ((PTR) t, length);
1578 TREE_SET_CODE (t, TREE_VEC);
1579 TREE_VEC_LENGTH (t) = len;
1580 if (obstack == &permanent_obstack)
1581 TREE_PERMANENT (t) = 1;
1583 return t;
1586 /* Return 1 if EXPR is the integer constant zero or a complex constant
1587 of zero. */
1590 integer_zerop (expr)
1591 tree expr;
1593 STRIP_NOPS (expr);
1595 return ((TREE_CODE (expr) == INTEGER_CST
1596 && ! TREE_CONSTANT_OVERFLOW (expr)
1597 && TREE_INT_CST_LOW (expr) == 0
1598 && TREE_INT_CST_HIGH (expr) == 0)
1599 || (TREE_CODE (expr) == COMPLEX_CST
1600 && integer_zerop (TREE_REALPART (expr))
1601 && integer_zerop (TREE_IMAGPART (expr))));
1604 /* Return 1 if EXPR is the integer constant one or the corresponding
1605 complex constant. */
1608 integer_onep (expr)
1609 tree expr;
1611 STRIP_NOPS (expr);
1613 return ((TREE_CODE (expr) == INTEGER_CST
1614 && ! TREE_CONSTANT_OVERFLOW (expr)
1615 && TREE_INT_CST_LOW (expr) == 1
1616 && TREE_INT_CST_HIGH (expr) == 0)
1617 || (TREE_CODE (expr) == COMPLEX_CST
1618 && integer_onep (TREE_REALPART (expr))
1619 && integer_zerop (TREE_IMAGPART (expr))));
1622 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1623 it contains. Likewise for the corresponding complex constant. */
1626 integer_all_onesp (expr)
1627 tree expr;
1629 register int prec;
1630 register int uns;
1632 STRIP_NOPS (expr);
1634 if (TREE_CODE (expr) == COMPLEX_CST
1635 && integer_all_onesp (TREE_REALPART (expr))
1636 && integer_zerop (TREE_IMAGPART (expr)))
1637 return 1;
1639 else if (TREE_CODE (expr) != INTEGER_CST
1640 || TREE_CONSTANT_OVERFLOW (expr))
1641 return 0;
1643 uns = TREE_UNSIGNED (TREE_TYPE (expr));
1644 if (!uns)
1645 return TREE_INT_CST_LOW (expr) == -1 && TREE_INT_CST_HIGH (expr) == -1;
1647 /* Note that using TYPE_PRECISION here is wrong. We care about the
1648 actual bits, not the (arbitrary) range of the type. */
1649 prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1650 if (prec >= HOST_BITS_PER_WIDE_INT)
1652 int high_value, shift_amount;
1654 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1656 if (shift_amount > HOST_BITS_PER_WIDE_INT)
1657 /* Can not handle precisions greater than twice the host int size. */
1658 abort ();
1659 else if (shift_amount == HOST_BITS_PER_WIDE_INT)
1660 /* Shifting by the host word size is undefined according to the ANSI
1661 standard, so we must handle this as a special case. */
1662 high_value = -1;
1663 else
1664 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1666 return TREE_INT_CST_LOW (expr) == -1
1667 && TREE_INT_CST_HIGH (expr) == high_value;
1669 else
1670 return TREE_INT_CST_LOW (expr) == ((HOST_WIDE_INT) 1 << prec) - 1;
1673 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1674 one bit on). */
1677 integer_pow2p (expr)
1678 tree expr;
1680 int prec;
1681 HOST_WIDE_INT high, low;
1683 STRIP_NOPS (expr);
1685 if (TREE_CODE (expr) == COMPLEX_CST
1686 && integer_pow2p (TREE_REALPART (expr))
1687 && integer_zerop (TREE_IMAGPART (expr)))
1688 return 1;
1690 if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1691 return 0;
1693 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1694 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1695 high = TREE_INT_CST_HIGH (expr);
1696 low = TREE_INT_CST_LOW (expr);
1698 /* First clear all bits that are beyond the type's precision in case
1699 we've been sign extended. */
1701 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1703 else if (prec > HOST_BITS_PER_WIDE_INT)
1704 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1705 else
1707 high = 0;
1708 if (prec < HOST_BITS_PER_WIDE_INT)
1709 low &= ~((HOST_WIDE_INT) (-1) << prec);
1712 if (high == 0 && low == 0)
1713 return 0;
1715 return ((high == 0 && (low & (low - 1)) == 0)
1716 || (low == 0 && (high & (high - 1)) == 0));
1719 /* Return the power of two represented by a tree node known to be a
1720 power of two. */
1723 tree_log2 (expr)
1724 tree expr;
1726 int prec;
1727 HOST_WIDE_INT high, low;
1729 STRIP_NOPS (expr);
1731 if (TREE_CODE (expr) == COMPLEX_CST)
1732 return tree_log2 (TREE_REALPART (expr));
1734 prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1735 ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1737 high = TREE_INT_CST_HIGH (expr);
1738 low = TREE_INT_CST_LOW (expr);
1740 /* First clear all bits that are beyond the type's precision in case
1741 we've been sign extended. */
1743 if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1745 else if (prec > HOST_BITS_PER_WIDE_INT)
1746 high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1747 else
1749 high = 0;
1750 if (prec < HOST_BITS_PER_WIDE_INT)
1751 low &= ~((HOST_WIDE_INT) (-1) << prec);
1754 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1755 : exact_log2 (low));
1758 /* Return 1 if EXPR is the real constant zero. */
1761 real_zerop (expr)
1762 tree expr;
1764 STRIP_NOPS (expr);
1766 return ((TREE_CODE (expr) == REAL_CST
1767 && ! TREE_CONSTANT_OVERFLOW (expr)
1768 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1769 || (TREE_CODE (expr) == COMPLEX_CST
1770 && real_zerop (TREE_REALPART (expr))
1771 && real_zerop (TREE_IMAGPART (expr))));
1774 /* Return 1 if EXPR is the real constant one in real or complex form. */
1777 real_onep (expr)
1778 tree expr;
1780 STRIP_NOPS (expr);
1782 return ((TREE_CODE (expr) == REAL_CST
1783 && ! TREE_CONSTANT_OVERFLOW (expr)
1784 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1785 || (TREE_CODE (expr) == COMPLEX_CST
1786 && real_onep (TREE_REALPART (expr))
1787 && real_zerop (TREE_IMAGPART (expr))));
1790 /* Return 1 if EXPR is the real constant two. */
1793 real_twop (expr)
1794 tree expr;
1796 STRIP_NOPS (expr);
1798 return ((TREE_CODE (expr) == REAL_CST
1799 && ! TREE_CONSTANT_OVERFLOW (expr)
1800 && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1801 || (TREE_CODE (expr) == COMPLEX_CST
1802 && real_twop (TREE_REALPART (expr))
1803 && real_zerop (TREE_IMAGPART (expr))));
1806 /* Nonzero if EXP is a constant or a cast of a constant. */
1809 really_constant_p (exp)
1810 tree exp;
1812 /* This is not quite the same as STRIP_NOPS. It does more. */
1813 while (TREE_CODE (exp) == NOP_EXPR
1814 || TREE_CODE (exp) == CONVERT_EXPR
1815 || TREE_CODE (exp) == NON_LVALUE_EXPR)
1816 exp = TREE_OPERAND (exp, 0);
1817 return TREE_CONSTANT (exp);
1820 /* Return first list element whose TREE_VALUE is ELEM.
1821 Return 0 if ELEM is not in LIST. */
1823 tree
1824 value_member (elem, list)
1825 tree elem, list;
1827 while (list)
1829 if (elem == TREE_VALUE (list))
1830 return list;
1831 list = TREE_CHAIN (list);
1833 return NULL_TREE;
1836 /* Return first list element whose TREE_PURPOSE is ELEM.
1837 Return 0 if ELEM is not in LIST. */
1839 tree
1840 purpose_member (elem, list)
1841 tree elem, list;
1843 while (list)
1845 if (elem == TREE_PURPOSE (list))
1846 return list;
1847 list = TREE_CHAIN (list);
1849 return NULL_TREE;
1852 /* Return first list element whose BINFO_TYPE is ELEM.
1853 Return 0 if ELEM is not in LIST. */
1855 tree
1856 binfo_member (elem, list)
1857 tree elem, list;
1859 while (list)
1861 if (elem == BINFO_TYPE (list))
1862 return list;
1863 list = TREE_CHAIN (list);
1865 return NULL_TREE;
1868 /* Return nonzero if ELEM is part of the chain CHAIN. */
1871 chain_member (elem, chain)
1872 tree elem, chain;
1874 while (chain)
1876 if (elem == chain)
1877 return 1;
1878 chain = TREE_CHAIN (chain);
1881 return 0;
1884 /* Return nonzero if ELEM is equal to TREE_VALUE (CHAIN) for any piece of
1885 chain CHAIN. */
1886 /* ??? This function was added for machine specific attributes but is no
1887 longer used. It could be deleted if we could confirm all front ends
1888 don't use it. */
1891 chain_member_value (elem, chain)
1892 tree elem, chain;
1894 while (chain)
1896 if (elem == TREE_VALUE (chain))
1897 return 1;
1898 chain = TREE_CHAIN (chain);
1901 return 0;
1904 /* Return nonzero if ELEM is equal to TREE_PURPOSE (CHAIN)
1905 for any piece of chain CHAIN. */
1906 /* ??? This function was added for machine specific attributes but is no
1907 longer used. It could be deleted if we could confirm all front ends
1908 don't use it. */
1911 chain_member_purpose (elem, chain)
1912 tree elem, chain;
1914 while (chain)
1916 if (elem == TREE_PURPOSE (chain))
1917 return 1;
1918 chain = TREE_CHAIN (chain);
1921 return 0;
1924 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1925 We expect a null pointer to mark the end of the chain.
1926 This is the Lisp primitive `length'. */
1929 list_length (t)
1930 tree t;
1932 register tree tail;
1933 register int len = 0;
1935 for (tail = t; tail; tail = TREE_CHAIN (tail))
1936 len++;
1938 return len;
1941 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1942 by modifying the last node in chain 1 to point to chain 2.
1943 This is the Lisp primitive `nconc'. */
1945 tree
1946 chainon (op1, op2)
1947 tree op1, op2;
1950 if (op1)
1952 register tree t1;
1953 register tree t2;
1955 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1957 TREE_CHAIN (t1) = op2;
1958 #ifdef ENABLE_CHECKING
1959 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1960 if (t2 == t1)
1961 abort (); /* Circularity created. */
1962 #endif
1963 return op1;
1965 else return op2;
1968 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
1970 tree
1971 tree_last (chain)
1972 register tree chain;
1974 register tree next;
1975 if (chain)
1976 while ((next = TREE_CHAIN (chain)))
1977 chain = next;
1978 return chain;
1981 /* Reverse the order of elements in the chain T,
1982 and return the new head of the chain (old last element). */
1984 tree
1985 nreverse (t)
1986 tree t;
1988 register tree prev = 0, decl, next;
1989 for (decl = t; decl; decl = next)
1991 next = TREE_CHAIN (decl);
1992 TREE_CHAIN (decl) = prev;
1993 prev = decl;
1995 return prev;
1998 /* Given a chain CHAIN of tree nodes,
1999 construct and return a list of those nodes. */
2001 tree
2002 listify (chain)
2003 tree chain;
2005 tree result = NULL_TREE;
2006 tree in_tail = chain;
2007 tree out_tail = NULL_TREE;
2009 while (in_tail)
2011 tree next = tree_cons (NULL_TREE, in_tail, NULL_TREE);
2012 if (out_tail)
2013 TREE_CHAIN (out_tail) = next;
2014 else
2015 result = next;
2016 out_tail = next;
2017 in_tail = TREE_CHAIN (in_tail);
2020 return result;
2023 /* Return a newly created TREE_LIST node whose
2024 purpose and value fields are PARM and VALUE. */
2026 tree
2027 build_tree_list (parm, value)
2028 tree parm, value;
2030 register tree t = make_node (TREE_LIST);
2031 TREE_PURPOSE (t) = parm;
2032 TREE_VALUE (t) = value;
2033 return t;
2036 /* Similar, but build on the temp_decl_obstack. */
2038 tree
2039 build_decl_list (parm, value)
2040 tree parm, value;
2042 register tree node;
2043 register struct obstack *ambient_obstack = current_obstack;
2044 current_obstack = &temp_decl_obstack;
2045 node = build_tree_list (parm, value);
2046 current_obstack = ambient_obstack;
2047 return node;
2050 /* Similar, but build on the expression_obstack. */
2052 tree
2053 build_expr_list (parm, value)
2054 tree parm, value;
2056 register tree node;
2057 register struct obstack *ambient_obstack = current_obstack;
2058 current_obstack = expression_obstack;
2059 node = build_tree_list (parm, value);
2060 current_obstack = ambient_obstack;
2061 return node;
2064 /* Return a newly created TREE_LIST node whose
2065 purpose and value fields are PARM and VALUE
2066 and whose TREE_CHAIN is CHAIN. */
2068 tree
2069 tree_cons (purpose, value, chain)
2070 tree purpose, value, chain;
2072 #if 0
2073 register tree node = make_node (TREE_LIST);
2074 #else
2075 register int i;
2076 register tree node = (tree) obstack_alloc (current_obstack, sizeof (struct tree_list));
2077 #ifdef GATHER_STATISTICS
2078 tree_node_counts[(int)x_kind]++;
2079 tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
2080 #endif
2082 for (i = (sizeof (struct tree_common) / sizeof (int)) - 1; i >= 0; i--)
2083 ((int *) node)[i] = 0;
2085 TREE_SET_CODE (node, TREE_LIST);
2086 if (current_obstack == &permanent_obstack)
2087 TREE_PERMANENT (node) = 1;
2088 #endif
2090 TREE_CHAIN (node) = chain;
2091 TREE_PURPOSE (node) = purpose;
2092 TREE_VALUE (node) = value;
2093 return node;
2096 /* Similar, but build on the temp_decl_obstack. */
2098 tree
2099 decl_tree_cons (purpose, value, chain)
2100 tree purpose, value, chain;
2102 register tree node;
2103 register struct obstack *ambient_obstack = current_obstack;
2104 current_obstack = &temp_decl_obstack;
2105 node = tree_cons (purpose, value, chain);
2106 current_obstack = ambient_obstack;
2107 return node;
2110 /* Similar, but build on the expression_obstack. */
2112 tree
2113 expr_tree_cons (purpose, value, chain)
2114 tree purpose, value, chain;
2116 register tree node;
2117 register struct obstack *ambient_obstack = current_obstack;
2118 current_obstack = expression_obstack;
2119 node = tree_cons (purpose, value, chain);
2120 current_obstack = ambient_obstack;
2121 return node;
2124 /* Same as `tree_cons' but make a permanent object. */
2126 tree
2127 perm_tree_cons (purpose, value, chain)
2128 tree purpose, value, chain;
2130 register tree node;
2131 register struct obstack *ambient_obstack = current_obstack;
2132 current_obstack = &permanent_obstack;
2134 node = tree_cons (purpose, value, chain);
2135 current_obstack = ambient_obstack;
2136 return node;
2139 /* Same as `tree_cons', but make this node temporary, regardless. */
2141 tree
2142 temp_tree_cons (purpose, value, chain)
2143 tree purpose, value, chain;
2145 register tree node;
2146 register struct obstack *ambient_obstack = current_obstack;
2147 current_obstack = &temporary_obstack;
2149 node = tree_cons (purpose, value, chain);
2150 current_obstack = ambient_obstack;
2151 return node;
2154 /* Same as `tree_cons', but save this node if the function's RTL is saved. */
2156 tree
2157 saveable_tree_cons (purpose, value, chain)
2158 tree purpose, value, chain;
2160 register tree node;
2161 register struct obstack *ambient_obstack = current_obstack;
2162 current_obstack = saveable_obstack;
2164 node = tree_cons (purpose, value, chain);
2165 current_obstack = ambient_obstack;
2166 return node;
2169 /* Return the size nominally occupied by an object of type TYPE
2170 when it resides in memory. The value is measured in units of bytes,
2171 and its data type is that normally used for type sizes
2172 (which is the first type created by make_signed_type or
2173 make_unsigned_type). */
2175 tree
2176 size_in_bytes (type)
2177 tree type;
2179 tree t;
2181 if (type == error_mark_node)
2182 return integer_zero_node;
2184 type = TYPE_MAIN_VARIANT (type);
2185 t = TYPE_SIZE_UNIT (type);
2186 if (t == 0)
2188 incomplete_type_error (NULL_TREE, type);
2189 return integer_zero_node;
2191 if (TREE_CODE (t) == INTEGER_CST)
2192 force_fit_type (t, 0);
2194 return t;
2197 /* Return the size of TYPE (in bytes) as a wide integer
2198 or return -1 if the size can vary or is larger than an integer. */
2200 HOST_WIDE_INT
2201 int_size_in_bytes (type)
2202 tree type;
2204 tree t;
2206 if (type == error_mark_node)
2207 return 0;
2209 type = TYPE_MAIN_VARIANT (type);
2210 t = TYPE_SIZE_UNIT (type);
2211 if (t == 0
2212 || TREE_CODE (t) != INTEGER_CST
2213 || TREE_INT_CST_HIGH (t) != 0)
2214 return -1;
2216 return TREE_INT_CST_LOW (t);
2219 /* Return, as a tree node, the number of elements for TYPE (which is an
2220 ARRAY_TYPE) minus one. This counts only elements of the top array.
2222 Don't let any SAVE_EXPRs escape; if we are called as part of a cleanup
2223 action, they would get unsaved. */
2225 tree
2226 array_type_nelts (type)
2227 tree type;
2229 tree index_type, min, max;
2231 /* If they did it with unspecified bounds, then we should have already
2232 given an error about it before we got here. */
2233 if (! TYPE_DOMAIN (type))
2234 return error_mark_node;
2236 index_type = TYPE_DOMAIN (type);
2237 min = TYPE_MIN_VALUE (index_type);
2238 max = TYPE_MAX_VALUE (index_type);
2240 if (! TREE_CONSTANT (min))
2242 STRIP_NOPS (min);
2243 if (TREE_CODE (min) == SAVE_EXPR)
2244 min = build (RTL_EXPR, TREE_TYPE (TYPE_MIN_VALUE (index_type)), 0,
2245 SAVE_EXPR_RTL (min));
2246 else
2247 min = TYPE_MIN_VALUE (index_type);
2250 if (! TREE_CONSTANT (max))
2252 STRIP_NOPS (max);
2253 if (TREE_CODE (max) == SAVE_EXPR)
2254 max = build (RTL_EXPR, TREE_TYPE (TYPE_MAX_VALUE (index_type)), 0,
2255 SAVE_EXPR_RTL (max));
2256 else
2257 max = TYPE_MAX_VALUE (index_type);
2260 return (integer_zerop (min)
2261 ? max
2262 : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
2265 /* Return nonzero if arg is static -- a reference to an object in
2266 static storage. This is not the same as the C meaning of `static'. */
2269 staticp (arg)
2270 tree arg;
2272 switch (TREE_CODE (arg))
2274 case FUNCTION_DECL:
2275 /* Nested functions aren't static, since taking their address
2276 involves a trampoline. */
2277 return (decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
2278 && ! DECL_NON_ADDR_CONST_P (arg);
2280 case VAR_DECL:
2281 return (TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2282 && ! DECL_NON_ADDR_CONST_P (arg);
2284 case CONSTRUCTOR:
2285 return TREE_STATIC (arg);
2287 case STRING_CST:
2288 return 1;
2290 /* If we are referencing a bitfield, we can't evaluate an
2291 ADDR_EXPR at compile time and so it isn't a constant. */
2292 case COMPONENT_REF:
2293 return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
2294 && staticp (TREE_OPERAND (arg, 0)));
2296 case BIT_FIELD_REF:
2297 return 0;
2299 #if 0
2300 /* This case is technically correct, but results in setting
2301 TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2302 compile time. */
2303 case INDIRECT_REF:
2304 return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2305 #endif
2307 case ARRAY_REF:
2308 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2309 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2310 return staticp (TREE_OPERAND (arg, 0));
2312 default:
2313 return 0;
2317 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2318 Do this to any expression which may be used in more than one place,
2319 but must be evaluated only once.
2321 Normally, expand_expr would reevaluate the expression each time.
2322 Calling save_expr produces something that is evaluated and recorded
2323 the first time expand_expr is called on it. Subsequent calls to
2324 expand_expr just reuse the recorded value.
2326 The call to expand_expr that generates code that actually computes
2327 the value is the first call *at compile time*. Subsequent calls
2328 *at compile time* generate code to use the saved value.
2329 This produces correct result provided that *at run time* control
2330 always flows through the insns made by the first expand_expr
2331 before reaching the other places where the save_expr was evaluated.
2332 You, the caller of save_expr, must make sure this is so.
2334 Constants, and certain read-only nodes, are returned with no
2335 SAVE_EXPR because that is safe. Expressions containing placeholders
2336 are not touched; see tree.def for an explanation of what these
2337 are used for. */
2339 tree
2340 save_expr (expr)
2341 tree expr;
2343 register tree t = fold (expr);
2345 /* We don't care about whether this can be used as an lvalue in this
2346 context. */
2347 while (TREE_CODE (t) == NON_LVALUE_EXPR)
2348 t = TREE_OPERAND (t, 0);
2350 /* If the tree evaluates to a constant, then we don't want to hide that
2351 fact (i.e. this allows further folding, and direct checks for constants).
2352 However, a read-only object that has side effects cannot be bypassed.
2353 Since it is no problem to reevaluate literals, we just return the
2354 literal node. */
2356 if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
2357 || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK)
2358 return t;
2360 /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2361 it means that the size or offset of some field of an object depends on
2362 the value within another field.
2364 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2365 and some variable since it would then need to be both evaluated once and
2366 evaluated more than once. Front-ends must assure this case cannot
2367 happen by surrounding any such subexpressions in their own SAVE_EXPR
2368 and forcing evaluation at the proper time. */
2369 if (contains_placeholder_p (t))
2370 return t;
2372 t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
2374 /* This expression might be placed ahead of a jump to ensure that the
2375 value was computed on both sides of the jump. So make sure it isn't
2376 eliminated as dead. */
2377 TREE_SIDE_EFFECTS (t) = 1;
2378 return t;
2381 /* Arrange for an expression to be expanded multiple independent
2382 times. This is useful for cleanup actions, as the backend can
2383 expand them multiple times in different places. */
2385 tree
2386 unsave_expr (expr)
2387 tree expr;
2389 tree t;
2391 /* If this is already protected, no sense in protecting it again. */
2392 if (TREE_CODE (expr) == UNSAVE_EXPR)
2393 return expr;
2395 t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
2396 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
2397 return t;
2400 /* Returns the index of the first non-tree operand for CODE, or the number
2401 of operands if all are trees. */
2404 first_rtl_op (code)
2405 enum tree_code code;
2407 switch (code)
2409 case SAVE_EXPR:
2410 return 2;
2411 case GOTO_SUBROUTINE_EXPR:
2412 case RTL_EXPR:
2413 return 0;
2414 case CALL_EXPR:
2415 return 2;
2416 case WITH_CLEANUP_EXPR:
2417 /* Should be defined to be 2. */
2418 return 1;
2419 case METHOD_CALL_EXPR:
2420 return 3;
2421 default:
2422 return tree_code_length [(int) code];
2426 /* Modify a tree in place so that all the evaluate only once things
2427 are cleared out. Return the EXPR given. */
2429 tree
2430 unsave_expr_now (expr)
2431 tree expr;
2433 enum tree_code code;
2434 register int i;
2435 int first_rtl;
2437 if (expr == NULL_TREE)
2438 return expr;
2440 code = TREE_CODE (expr);
2441 first_rtl = first_rtl_op (code);
2442 switch (code)
2444 case SAVE_EXPR:
2445 SAVE_EXPR_RTL (expr) = 0;
2446 break;
2448 case TARGET_EXPR:
2449 TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
2450 TREE_OPERAND (expr, 3) = NULL_TREE;
2451 break;
2453 case RTL_EXPR:
2454 /* I don't yet know how to emit a sequence multiple times. */
2455 if (RTL_EXPR_SEQUENCE (expr) != 0)
2456 abort ();
2457 break;
2459 case CALL_EXPR:
2460 CALL_EXPR_RTL (expr) = 0;
2461 if (TREE_OPERAND (expr, 1)
2462 && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
2464 tree exp = TREE_OPERAND (expr, 1);
2465 while (exp)
2467 unsave_expr_now (TREE_VALUE (exp));
2468 exp = TREE_CHAIN (exp);
2471 break;
2473 default:
2474 break;
2477 switch (TREE_CODE_CLASS (code))
2479 case 'c': /* a constant */
2480 case 't': /* a type node */
2481 case 'x': /* something random, like an identifier or an ERROR_MARK. */
2482 case 'd': /* A decl node */
2483 case 'b': /* A block node */
2484 return expr;
2486 case 'e': /* an expression */
2487 case 'r': /* a reference */
2488 case 's': /* an expression with side effects */
2489 case '<': /* a comparison expression */
2490 case '2': /* a binary arithmetic expression */
2491 case '1': /* a unary arithmetic expression */
2492 for (i = first_rtl - 1; i >= 0; i--)
2493 unsave_expr_now (TREE_OPERAND (expr, i));
2494 return expr;
2496 default:
2497 abort ();
2501 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2502 or offset that depends on a field within a record. */
2505 contains_placeholder_p (exp)
2506 tree exp;
2508 register enum tree_code code = TREE_CODE (exp);
2509 int result;
2511 /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2512 in it since it is supplying a value for it. */
2513 if (code == WITH_RECORD_EXPR)
2514 return 0;
2515 else if (code == PLACEHOLDER_EXPR)
2516 return 1;
2518 switch (TREE_CODE_CLASS (code))
2520 case 'r':
2521 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2522 position computations since they will be converted into a
2523 WITH_RECORD_EXPR involving the reference, which will assume
2524 here will be valid. */
2525 return contains_placeholder_p (TREE_OPERAND (exp, 0));
2527 case 'x':
2528 if (code == TREE_LIST)
2529 return (contains_placeholder_p (TREE_VALUE (exp))
2530 || (TREE_CHAIN (exp) != 0
2531 && contains_placeholder_p (TREE_CHAIN (exp))));
2532 break;
2534 case '1':
2535 case '2': case '<':
2536 case 'e':
2537 switch (code)
2539 case COMPOUND_EXPR:
2540 /* Ignoring the first operand isn't quite right, but works best. */
2541 return contains_placeholder_p (TREE_OPERAND (exp, 1));
2543 case RTL_EXPR:
2544 case CONSTRUCTOR:
2545 return 0;
2547 case COND_EXPR:
2548 return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2549 || contains_placeholder_p (TREE_OPERAND (exp, 1))
2550 || contains_placeholder_p (TREE_OPERAND (exp, 2)));
2552 case SAVE_EXPR:
2553 /* If we already know this doesn't have a placeholder, don't
2554 check again. */
2555 if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
2556 return 0;
2558 SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
2559 result = contains_placeholder_p (TREE_OPERAND (exp, 0));
2560 if (result)
2561 SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
2563 return result;
2565 case CALL_EXPR:
2566 return (TREE_OPERAND (exp, 1) != 0
2567 && contains_placeholder_p (TREE_OPERAND (exp, 1)));
2569 default:
2570 break;
2573 switch (tree_code_length[(int) code])
2575 case 1:
2576 return contains_placeholder_p (TREE_OPERAND (exp, 0));
2577 case 2:
2578 return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2579 || contains_placeholder_p (TREE_OPERAND (exp, 1)));
2580 default:
2581 return 0;
2584 default:
2585 return 0;
2587 return 0;
2590 /* Return 1 if EXP contains any expressions that produce cleanups for an
2591 outer scope to deal with. Used by fold. */
2594 has_cleanups (exp)
2595 tree exp;
2597 int i, nops, cmp;
2599 if (! TREE_SIDE_EFFECTS (exp))
2600 return 0;
2602 switch (TREE_CODE (exp))
2604 case TARGET_EXPR:
2605 case GOTO_SUBROUTINE_EXPR:
2606 case WITH_CLEANUP_EXPR:
2607 return 1;
2609 case CLEANUP_POINT_EXPR:
2610 return 0;
2612 case CALL_EXPR:
2613 for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
2615 cmp = has_cleanups (TREE_VALUE (exp));
2616 if (cmp)
2617 return cmp;
2619 return 0;
2621 default:
2622 break;
2625 /* This general rule works for most tree codes. All exceptions should be
2626 handled above. If this is a language-specific tree code, we can't
2627 trust what might be in the operand, so say we don't know
2628 the situation. */
2629 if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
2630 return -1;
2632 nops = first_rtl_op (TREE_CODE (exp));
2633 for (i = 0; i < nops; i++)
2634 if (TREE_OPERAND (exp, i) != 0)
2636 int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
2637 if (type == 'e' || type == '<' || type == '1' || type == '2'
2638 || type == 'r' || type == 's')
2640 cmp = has_cleanups (TREE_OPERAND (exp, i));
2641 if (cmp)
2642 return cmp;
2646 return 0;
2649 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2650 return a tree with all occurrences of references to F in a
2651 PLACEHOLDER_EXPR replaced by R. Note that we assume here that EXP
2652 contains only arithmetic expressions or a CALL_EXPR with a
2653 PLACEHOLDER_EXPR occurring only in its arglist. */
2655 tree
2656 substitute_in_expr (exp, f, r)
2657 tree exp;
2658 tree f;
2659 tree r;
2661 enum tree_code code = TREE_CODE (exp);
2662 tree op0, op1, op2;
2663 tree new;
2664 tree inner;
2666 switch (TREE_CODE_CLASS (code))
2668 case 'c':
2669 case 'd':
2670 return exp;
2672 case 'x':
2673 if (code == PLACEHOLDER_EXPR)
2674 return exp;
2675 else if (code == TREE_LIST)
2677 op0 = (TREE_CHAIN (exp) == 0
2678 ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
2679 op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
2680 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2681 return exp;
2683 return tree_cons (TREE_PURPOSE (exp), op1, op0);
2686 abort ();
2688 case '1':
2689 case '2':
2690 case '<':
2691 case 'e':
2692 switch (tree_code_length[(int) code])
2694 case 1:
2695 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2696 if (op0 == TREE_OPERAND (exp, 0))
2697 return exp;
2699 new = fold (build1 (code, TREE_TYPE (exp), op0));
2700 break;
2702 case 2:
2703 /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2704 could, but we don't support it. */
2705 if (code == RTL_EXPR)
2706 return exp;
2707 else if (code == CONSTRUCTOR)
2708 abort ();
2710 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2711 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2712 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2713 return exp;
2715 new = fold (build (code, TREE_TYPE (exp), op0, op1));
2716 break;
2718 case 3:
2719 /* It cannot be that anything inside a SAVE_EXPR contains a
2720 PLACEHOLDER_EXPR. */
2721 if (code == SAVE_EXPR)
2722 return exp;
2724 else if (code == CALL_EXPR)
2726 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2727 if (op1 == TREE_OPERAND (exp, 1))
2728 return exp;
2730 return build (code, TREE_TYPE (exp),
2731 TREE_OPERAND (exp, 0), op1, NULL_TREE);
2734 else if (code != COND_EXPR)
2735 abort ();
2737 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2738 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2739 op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2740 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2741 && op2 == TREE_OPERAND (exp, 2))
2742 return exp;
2744 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2745 break;
2747 default:
2748 abort ();
2751 break;
2753 case 'r':
2754 switch (code)
2756 case COMPONENT_REF:
2757 /* If this expression is getting a value from a PLACEHOLDER_EXPR
2758 and it is the right field, replace it with R. */
2759 for (inner = TREE_OPERAND (exp, 0);
2760 TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2761 inner = TREE_OPERAND (inner, 0))
2763 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2764 && TREE_OPERAND (exp, 1) == f)
2765 return r;
2767 /* If this expression hasn't been completed let, leave it
2768 alone. */
2769 if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2770 && TREE_TYPE (inner) == 0)
2771 return exp;
2773 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2774 if (op0 == TREE_OPERAND (exp, 0))
2775 return exp;
2777 new = fold (build (code, TREE_TYPE (exp), op0,
2778 TREE_OPERAND (exp, 1)));
2779 break;
2781 case BIT_FIELD_REF:
2782 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2783 op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2784 op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2785 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2786 && op2 == TREE_OPERAND (exp, 2))
2787 return exp;
2789 new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2790 break;
2792 case INDIRECT_REF:
2793 case BUFFER_REF:
2794 op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2795 if (op0 == TREE_OPERAND (exp, 0))
2796 return exp;
2798 new = fold (build1 (code, TREE_TYPE (exp), op0));
2799 break;
2801 default:
2802 abort ();
2804 break;
2806 default:
2807 abort ();
2810 TREE_READONLY (new) = TREE_READONLY (exp);
2811 return new;
2814 /* Stabilize a reference so that we can use it any number of times
2815 without causing its operands to be evaluated more than once.
2816 Returns the stabilized reference. This works by means of save_expr,
2817 so see the caveats in the comments about save_expr.
2819 Also allows conversion expressions whose operands are references.
2820 Any other kind of expression is returned unchanged. */
2822 tree
2823 stabilize_reference (ref)
2824 tree ref;
2826 register tree result;
2827 register enum tree_code code = TREE_CODE (ref);
2829 switch (code)
2831 case VAR_DECL:
2832 case PARM_DECL:
2833 case RESULT_DECL:
2834 /* No action is needed in this case. */
2835 return ref;
2837 case NOP_EXPR:
2838 case CONVERT_EXPR:
2839 case FLOAT_EXPR:
2840 case FIX_TRUNC_EXPR:
2841 case FIX_FLOOR_EXPR:
2842 case FIX_ROUND_EXPR:
2843 case FIX_CEIL_EXPR:
2844 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2845 break;
2847 case INDIRECT_REF:
2848 result = build_nt (INDIRECT_REF,
2849 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2850 break;
2852 case COMPONENT_REF:
2853 result = build_nt (COMPONENT_REF,
2854 stabilize_reference (TREE_OPERAND (ref, 0)),
2855 TREE_OPERAND (ref, 1));
2856 break;
2858 case BIT_FIELD_REF:
2859 result = build_nt (BIT_FIELD_REF,
2860 stabilize_reference (TREE_OPERAND (ref, 0)),
2861 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2862 stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2863 break;
2865 case ARRAY_REF:
2866 result = build_nt (ARRAY_REF,
2867 stabilize_reference (TREE_OPERAND (ref, 0)),
2868 stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2869 break;
2871 case COMPOUND_EXPR:
2872 /* We cannot wrap the first expression in a SAVE_EXPR, as then
2873 it wouldn't be ignored. This matters when dealing with
2874 volatiles. */
2875 return stabilize_reference_1 (ref);
2877 case RTL_EXPR:
2878 result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2879 save_expr (build1 (ADDR_EXPR,
2880 build_pointer_type (TREE_TYPE (ref)),
2881 ref)));
2882 break;
2885 /* If arg isn't a kind of lvalue we recognize, make no change.
2886 Caller should recognize the error for an invalid lvalue. */
2887 default:
2888 return ref;
2890 case ERROR_MARK:
2891 return error_mark_node;
2894 TREE_TYPE (result) = TREE_TYPE (ref);
2895 TREE_READONLY (result) = TREE_READONLY (ref);
2896 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2897 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2898 TREE_RAISES (result) = TREE_RAISES (ref);
2900 return result;
2903 /* Subroutine of stabilize_reference; this is called for subtrees of
2904 references. Any expression with side-effects must be put in a SAVE_EXPR
2905 to ensure that it is only evaluated once.
2907 We don't put SAVE_EXPR nodes around everything, because assigning very
2908 simple expressions to temporaries causes us to miss good opportunities
2909 for optimizations. Among other things, the opportunity to fold in the
2910 addition of a constant into an addressing mode often gets lost, e.g.
2911 "y[i+1] += x;". In general, we take the approach that we should not make
2912 an assignment unless we are forced into it - i.e., that any non-side effect
2913 operator should be allowed, and that cse should take care of coalescing
2914 multiple utterances of the same expression should that prove fruitful. */
2916 tree
2917 stabilize_reference_1 (e)
2918 tree e;
2920 register tree result;
2921 register enum tree_code code = TREE_CODE (e);
2923 /* We cannot ignore const expressions because it might be a reference
2924 to a const array but whose index contains side-effects. But we can
2925 ignore things that are actual constant or that already have been
2926 handled by this function. */
2928 if (TREE_CONSTANT (e) || code == SAVE_EXPR)
2929 return e;
2931 switch (TREE_CODE_CLASS (code))
2933 case 'x':
2934 case 't':
2935 case 'd':
2936 case 'b':
2937 case '<':
2938 case 's':
2939 case 'e':
2940 case 'r':
2941 /* If the expression has side-effects, then encase it in a SAVE_EXPR
2942 so that it will only be evaluated once. */
2943 /* The reference (r) and comparison (<) classes could be handled as
2944 below, but it is generally faster to only evaluate them once. */
2945 if (TREE_SIDE_EFFECTS (e))
2946 return save_expr (e);
2947 return e;
2949 case 'c':
2950 /* Constants need no processing. In fact, we should never reach
2951 here. */
2952 return e;
2954 case '2':
2955 /* Division is slow and tends to be compiled with jumps,
2956 especially the division by powers of 2 that is often
2957 found inside of an array reference. So do it just once. */
2958 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2959 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2960 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2961 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2962 return save_expr (e);
2963 /* Recursively stabilize each operand. */
2964 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2965 stabilize_reference_1 (TREE_OPERAND (e, 1)));
2966 break;
2968 case '1':
2969 /* Recursively stabilize each operand. */
2970 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2971 break;
2973 default:
2974 abort ();
2977 TREE_TYPE (result) = TREE_TYPE (e);
2978 TREE_READONLY (result) = TREE_READONLY (e);
2979 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2980 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2981 TREE_RAISES (result) = TREE_RAISES (e);
2983 return result;
2986 /* Low-level constructors for expressions. */
2988 /* Build an expression of code CODE, data type TYPE,
2989 and operands as specified by the arguments ARG1 and following arguments.
2990 Expressions and reference nodes can be created this way.
2991 Constants, decls, types and misc nodes cannot be. */
2993 tree
2994 build VPROTO((enum tree_code code, tree tt, ...))
2996 #ifndef ANSI_PROTOTYPES
2997 enum tree_code code;
2998 tree tt;
2999 #endif
3000 va_list p;
3001 register tree t;
3002 register int length;
3003 register int i;
3005 VA_START (p, tt);
3007 #ifndef ANSI_PROTOTYPES
3008 code = va_arg (p, enum tree_code);
3009 tt = va_arg (p, tree);
3010 #endif
3012 t = make_node (code);
3013 length = tree_code_length[(int) code];
3014 TREE_TYPE (t) = tt;
3016 if (length == 2)
3018 /* This is equivalent to the loop below, but faster. */
3019 register tree arg0 = va_arg (p, tree);
3020 register tree arg1 = va_arg (p, tree);
3021 TREE_OPERAND (t, 0) = arg0;
3022 TREE_OPERAND (t, 1) = arg1;
3023 if ((arg0 && TREE_SIDE_EFFECTS (arg0))
3024 || (arg1 && TREE_SIDE_EFFECTS (arg1)))
3025 TREE_SIDE_EFFECTS (t) = 1;
3026 TREE_RAISES (t)
3027 = (arg0 && TREE_RAISES (arg0)) || (arg1 && TREE_RAISES (arg1));
3029 else if (length == 1)
3031 register tree arg0 = va_arg (p, tree);
3033 /* Call build1 for this! */
3034 if (TREE_CODE_CLASS (code) != 's')
3035 abort ();
3036 TREE_OPERAND (t, 0) = arg0;
3037 if (arg0 && TREE_SIDE_EFFECTS (arg0))
3038 TREE_SIDE_EFFECTS (t) = 1;
3039 TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
3041 else
3043 for (i = 0; i < length; i++)
3045 register tree operand = va_arg (p, tree);
3046 TREE_OPERAND (t, i) = operand;
3047 if (operand)
3049 if (TREE_SIDE_EFFECTS (operand))
3050 TREE_SIDE_EFFECTS (t) = 1;
3051 if (TREE_RAISES (operand))
3052 TREE_RAISES (t) = 1;
3056 va_end (p);
3057 return t;
3060 /* Same as above, but only builds for unary operators.
3061 Saves lions share of calls to `build'; cuts down use
3062 of varargs, which is expensive for RISC machines. */
3064 tree
3065 build1 (code, type, node)
3066 enum tree_code code;
3067 tree type;
3068 tree node;
3070 register struct obstack *obstack = expression_obstack;
3071 register int length;
3072 #ifdef GATHER_STATISTICS
3073 register tree_node_kind kind;
3074 #endif
3075 register tree t;
3077 #ifdef GATHER_STATISTICS
3078 if (TREE_CODE_CLASS (code) == 'r')
3079 kind = r_kind;
3080 else
3081 kind = e_kind;
3082 #endif
3084 length = sizeof (struct tree_exp);
3086 t = (tree) obstack_alloc (obstack, length);
3087 bzero ((PTR) t, length);
3089 #ifdef GATHER_STATISTICS
3090 tree_node_counts[(int)kind]++;
3091 tree_node_sizes[(int)kind] += length;
3092 #endif
3094 TREE_TYPE (t) = type;
3095 TREE_SET_CODE (t, code);
3097 if (obstack == &permanent_obstack)
3098 TREE_PERMANENT (t) = 1;
3100 TREE_OPERAND (t, 0) = node;
3101 if (node)
3103 if (TREE_SIDE_EFFECTS (node))
3104 TREE_SIDE_EFFECTS (t) = 1;
3105 if (TREE_RAISES (node))
3106 TREE_RAISES (t) = 1;
3109 return t;
3112 /* Similar except don't specify the TREE_TYPE
3113 and leave the TREE_SIDE_EFFECTS as 0.
3114 It is permissible for arguments to be null,
3115 or even garbage if their values do not matter. */
3117 tree
3118 build_nt VPROTO((enum tree_code code, ...))
3120 #ifndef ANSI_PROTOTYPES
3121 enum tree_code code;
3122 #endif
3123 va_list p;
3124 register tree t;
3125 register int length;
3126 register int i;
3128 VA_START (p, code);
3130 #ifndef ANSI_PROTOTYPES
3131 code = va_arg (p, enum tree_code);
3132 #endif
3134 t = make_node (code);
3135 length = tree_code_length[(int) code];
3137 for (i = 0; i < length; i++)
3138 TREE_OPERAND (t, i) = va_arg (p, tree);
3140 va_end (p);
3141 return t;
3144 /* Similar to `build_nt', except we build
3145 on the temp_decl_obstack, regardless. */
3147 tree
3148 build_parse_node VPROTO((enum tree_code code, ...))
3150 #ifndef ANSI_PROTOTYPES
3151 enum tree_code code;
3152 #endif
3153 register struct obstack *ambient_obstack = expression_obstack;
3154 va_list p;
3155 register tree t;
3156 register int length;
3157 register int i;
3159 VA_START (p, code);
3161 #ifndef ANSI_PROTOTYPES
3162 code = va_arg (p, enum tree_code);
3163 #endif
3165 expression_obstack = &temp_decl_obstack;
3167 t = make_node (code);
3168 length = tree_code_length[(int) code];
3170 for (i = 0; i < length; i++)
3171 TREE_OPERAND (t, i) = va_arg (p, tree);
3173 va_end (p);
3174 expression_obstack = ambient_obstack;
3175 return t;
3178 #if 0
3179 /* Commented out because this wants to be done very
3180 differently. See cp-lex.c. */
3181 tree
3182 build_op_identifier (op1, op2)
3183 tree op1, op2;
3185 register tree t = make_node (OP_IDENTIFIER);
3186 TREE_PURPOSE (t) = op1;
3187 TREE_VALUE (t) = op2;
3188 return t;
3190 #endif
3192 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3193 We do NOT enter this node in any sort of symbol table.
3195 layout_decl is used to set up the decl's storage layout.
3196 Other slots are initialized to 0 or null pointers. */
3198 tree
3199 build_decl (code, name, type)
3200 enum tree_code code;
3201 tree name, type;
3203 register tree t;
3205 t = make_node (code);
3207 /* if (type == error_mark_node)
3208 type = integer_type_node; */
3209 /* That is not done, deliberately, so that having error_mark_node
3210 as the type can suppress useless errors in the use of this variable. */
3212 DECL_NAME (t) = name;
3213 DECL_ASSEMBLER_NAME (t) = name;
3214 TREE_TYPE (t) = type;
3216 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3217 layout_decl (t, 0);
3218 else if (code == FUNCTION_DECL)
3219 DECL_MODE (t) = FUNCTION_MODE;
3221 return t;
3224 /* BLOCK nodes are used to represent the structure of binding contours
3225 and declarations, once those contours have been exited and their contents
3226 compiled. This information is used for outputting debugging info. */
3228 tree
3229 build_block (vars, tags, subblocks, supercontext, chain)
3230 tree vars, tags, subblocks, supercontext, chain;
3232 register tree block = make_node (BLOCK);
3233 BLOCK_VARS (block) = vars;
3234 BLOCK_TYPE_TAGS (block) = tags;
3235 BLOCK_SUBBLOCKS (block) = subblocks;
3236 BLOCK_SUPERCONTEXT (block) = supercontext;
3237 BLOCK_CHAIN (block) = chain;
3238 return block;
3241 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3242 location where an expression or an identifier were encountered. It
3243 is necessary for languages where the frontend parser will handle
3244 recursively more than one file (Java is one of them). */
3246 tree
3247 build_expr_wfl (node, file, line, col)
3248 tree node;
3249 const char *file;
3250 int line, col;
3252 static const char *last_file = 0;
3253 static tree last_filenode = NULL_TREE;
3254 register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
3256 EXPR_WFL_NODE (wfl) = node;
3257 EXPR_WFL_SET_LINECOL (wfl, line, col);
3258 if (file != last_file)
3260 last_file = file;
3261 last_filenode = file ? get_identifier (file) : NULL_TREE;
3263 EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
3264 if (node)
3266 TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
3267 TREE_TYPE (wfl) = TREE_TYPE (node);
3269 return wfl;
3272 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3273 is ATTRIBUTE. */
3275 tree
3276 build_decl_attribute_variant (ddecl, attribute)
3277 tree ddecl, attribute;
3279 DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
3280 return ddecl;
3283 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3284 is ATTRIBUTE.
3286 Record such modified types already made so we don't make duplicates. */
3288 tree
3289 build_type_attribute_variant (ttype, attribute)
3290 tree ttype, attribute;
3292 if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3294 register int hashcode;
3295 register struct obstack *ambient_obstack = current_obstack;
3296 tree ntype;
3298 if (ambient_obstack != &permanent_obstack)
3299 current_obstack = TYPE_OBSTACK (ttype);
3301 ntype = copy_node (ttype);
3303 TYPE_POINTER_TO (ntype) = 0;
3304 TYPE_REFERENCE_TO (ntype) = 0;
3305 TYPE_ATTRIBUTES (ntype) = attribute;
3307 /* Create a new main variant of TYPE. */
3308 TYPE_MAIN_VARIANT (ntype) = ntype;
3309 TYPE_NEXT_VARIANT (ntype) = 0;
3310 set_type_quals (ntype, TYPE_UNQUALIFIED);
3312 hashcode = TYPE_HASH (TREE_CODE (ntype))
3313 + TYPE_HASH (TREE_TYPE (ntype))
3314 + attribute_hash_list (attribute);
3316 switch (TREE_CODE (ntype))
3318 case FUNCTION_TYPE:
3319 hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
3320 break;
3321 case ARRAY_TYPE:
3322 hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
3323 break;
3324 case INTEGER_TYPE:
3325 hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
3326 break;
3327 case REAL_TYPE:
3328 hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
3329 break;
3330 default:
3331 break;
3334 ntype = type_hash_canon (hashcode, ntype);
3335 ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3337 /* We must restore the current obstack after the type_hash_canon call,
3338 because type_hash_canon calls type_hash_add for permanent types, and
3339 then type_hash_add calls oballoc expecting to get something permanent
3340 back. */
3341 current_obstack = ambient_obstack;
3344 return ttype;
3347 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3348 or type TYPE and 0 otherwise. Validity is determined the configuration
3349 macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE. */
3352 valid_machine_attribute (attr_name, attr_args, decl, type)
3353 tree attr_name;
3354 tree attr_args ATTRIBUTE_UNUSED;
3355 tree decl ATTRIBUTE_UNUSED;
3356 tree type ATTRIBUTE_UNUSED;
3358 int validated = 0;
3359 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3360 tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
3361 #endif
3362 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3363 tree type_attr_list = TYPE_ATTRIBUTES (type);
3364 #endif
3366 if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
3367 abort ();
3369 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3370 if (decl != 0
3371 && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name, attr_args))
3373 tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3374 decl_attr_list);
3376 if (attr != NULL_TREE)
3378 /* Override existing arguments. Declarations are unique so we can
3379 modify this in place. */
3380 TREE_VALUE (attr) = attr_args;
3382 else
3384 decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3385 decl = build_decl_attribute_variant (decl, decl_attr_list);
3388 validated = 1;
3390 #endif
3392 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3393 if (validated)
3394 /* Don't apply the attribute to both the decl and the type. */;
3395 else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name,
3396 attr_args))
3398 tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3399 type_attr_list);
3401 if (attr != NULL_TREE)
3403 /* Override existing arguments.
3404 ??? This currently works since attribute arguments are not
3405 included in `attribute_hash_list'. Something more complicated
3406 may be needed in the future. */
3407 TREE_VALUE (attr) = attr_args;
3409 else
3411 /* If this is part of a declaration, create a type variant,
3412 otherwise, this is part of a type definition, so add it
3413 to the base type. */
3414 type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3415 if (decl != 0)
3416 type = build_type_attribute_variant (type, type_attr_list);
3417 else
3418 TYPE_ATTRIBUTES (type) = type_attr_list;
3420 if (decl != 0)
3421 TREE_TYPE (decl) = type;
3422 validated = 1;
3425 /* Handle putting a type attribute on pointer-to-function-type by putting
3426 the attribute on the function type. */
3427 else if (POINTER_TYPE_P (type)
3428 && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3429 && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3430 attr_name, attr_args))
3432 tree inner_type = TREE_TYPE (type);
3433 tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3434 tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3435 type_attr_list);
3437 if (attr != NULL_TREE)
3438 TREE_VALUE (attr) = attr_args;
3439 else
3441 inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3442 inner_type = build_type_attribute_variant (inner_type,
3443 inner_attr_list);
3446 if (decl != 0)
3447 TREE_TYPE (decl) = build_pointer_type (inner_type);
3448 else
3450 /* Clear TYPE_POINTER_TO for the old inner type, since
3451 `type' won't be pointing to it anymore. */
3452 TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE;
3453 TREE_TYPE (type) = inner_type;
3456 validated = 1;
3458 #endif
3460 return validated;
3463 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3464 or zero if not.
3466 We try both `text' and `__text__', ATTR may be either one. */
3467 /* ??? It might be a reasonable simplification to require ATTR to be only
3468 `text'. One might then also require attribute lists to be stored in
3469 their canonicalized form. */
3472 is_attribute_p (attr, ident)
3473 const char *attr;
3474 tree ident;
3476 int ident_len, attr_len;
3477 char *p;
3479 if (TREE_CODE (ident) != IDENTIFIER_NODE)
3480 return 0;
3482 if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3483 return 1;
3485 p = IDENTIFIER_POINTER (ident);
3486 ident_len = strlen (p);
3487 attr_len = strlen (attr);
3489 /* If ATTR is `__text__', IDENT must be `text'; and vice versa. */
3490 if (attr[0] == '_')
3492 if (attr[1] != '_'
3493 || attr[attr_len - 2] != '_'
3494 || attr[attr_len - 1] != '_')
3495 abort ();
3496 if (ident_len == attr_len - 4
3497 && strncmp (attr + 2, p, attr_len - 4) == 0)
3498 return 1;
3500 else
3502 if (ident_len == attr_len + 4
3503 && p[0] == '_' && p[1] == '_'
3504 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3505 && strncmp (attr, p + 2, attr_len) == 0)
3506 return 1;
3509 return 0;
3512 /* Given an attribute name and a list of attributes, return a pointer to the
3513 attribute's list element if the attribute is part of the list, or NULL_TREE
3514 if not found. */
3516 tree
3517 lookup_attribute (attr_name, list)
3518 const char *attr_name;
3519 tree list;
3521 tree l;
3523 for (l = list; l; l = TREE_CHAIN (l))
3525 if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3526 abort ();
3527 if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3528 return l;
3531 return NULL_TREE;
3534 /* Return an attribute list that is the union of a1 and a2. */
3536 tree
3537 merge_attributes (a1, a2)
3538 register tree a1, a2;
3540 tree attributes;
3542 /* Either one unset? Take the set one. */
3544 if (! (attributes = a1))
3545 attributes = a2;
3547 /* One that completely contains the other? Take it. */
3549 else if (a2 && ! attribute_list_contained (a1, a2))
3551 if (attribute_list_contained (a2, a1))
3552 attributes = a2;
3553 else
3555 /* Pick the longest list, and hang on the other list. */
3556 /* ??? For the moment we punt on the issue of attrs with args. */
3558 if (list_length (a1) < list_length (a2))
3559 attributes = a2, a2 = a1;
3561 for (; a2; a2 = TREE_CHAIN (a2))
3562 if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3563 attributes) == NULL_TREE)
3565 a1 = copy_node (a2);
3566 TREE_CHAIN (a1) = attributes;
3567 attributes = a1;
3571 return attributes;
3574 /* Given types T1 and T2, merge their attributes and return
3575 the result. */
3577 tree
3578 merge_machine_type_attributes (t1, t2)
3579 tree t1, t2;
3581 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3582 return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2);
3583 #else
3584 return merge_attributes (TYPE_ATTRIBUTES (t1),
3585 TYPE_ATTRIBUTES (t2));
3586 #endif
3589 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3590 the result. */
3592 tree
3593 merge_machine_decl_attributes (olddecl, newdecl)
3594 tree olddecl, newdecl;
3596 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3597 return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl);
3598 #else
3599 return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl),
3600 DECL_MACHINE_ATTRIBUTES (newdecl));
3601 #endif
3604 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3605 of the various TYPE_QUAL values. */
3607 static void
3608 set_type_quals (type, type_quals)
3609 tree type;
3610 int type_quals;
3612 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3613 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3614 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3617 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3618 the same kind of data as TYPE describes. Variants point to the
3619 "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3620 and it points to a chain of other variants so that duplicate
3621 variants are never made. Only main variants should ever appear as
3622 types of expressions. */
3624 tree
3625 build_qualified_type (type, type_quals)
3626 tree type;
3627 int type_quals;
3629 register tree t;
3631 /* Search the chain of variants to see if there is already one there just
3632 like the one we need to have. If so, use that existing one. We must
3633 preserve the TYPE_NAME, since there is code that depends on this. */
3635 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3636 if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type))
3637 return t;
3639 /* We need a new one. */
3640 t = build_type_copy (type);
3641 set_type_quals (t, type_quals);
3642 return t;
3645 /* Create a new variant of TYPE, equivalent but distinct.
3646 This is so the caller can modify it. */
3648 tree
3649 build_type_copy (type)
3650 tree type;
3652 register tree t, m = TYPE_MAIN_VARIANT (type);
3653 register struct obstack *ambient_obstack = current_obstack;
3655 current_obstack = TYPE_OBSTACK (type);
3656 t = copy_node (type);
3657 current_obstack = ambient_obstack;
3659 TYPE_POINTER_TO (t) = 0;
3660 TYPE_REFERENCE_TO (t) = 0;
3662 /* Add this type to the chain of variants of TYPE. */
3663 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3664 TYPE_NEXT_VARIANT (m) = t;
3666 return t;
3669 /* Hashing of types so that we don't make duplicates.
3670 The entry point is `type_hash_canon'. */
3672 /* Each hash table slot is a bucket containing a chain
3673 of these structures. */
3675 struct type_hash
3677 struct type_hash *next; /* Next structure in the bucket. */
3678 int hashcode; /* Hash code of this type. */
3679 tree type; /* The type recorded here. */
3682 /* Now here is the hash table. When recording a type, it is added
3683 to the slot whose index is the hash code mod the table size.
3684 Note that the hash table is used for several kinds of types
3685 (function types, array types and array index range types, for now).
3686 While all these live in the same table, they are completely independent,
3687 and the hash code is computed differently for each of these. */
3689 #define TYPE_HASH_SIZE 59
3690 struct type_hash *type_hash_table[TYPE_HASH_SIZE];
3692 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3693 with types in the TREE_VALUE slots), by adding the hash codes
3694 of the individual types. */
3697 type_hash_list (list)
3698 tree list;
3700 register int hashcode;
3701 register tree tail;
3702 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3703 hashcode += TYPE_HASH (TREE_VALUE (tail));
3704 return hashcode;
3707 /* Look in the type hash table for a type isomorphic to TYPE.
3708 If one is found, return it. Otherwise return 0. */
3710 tree
3711 type_hash_lookup (hashcode, type)
3712 int hashcode;
3713 tree type;
3715 register struct type_hash *h;
3716 for (h = type_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
3717 if (h->hashcode == hashcode
3718 && TREE_CODE (h->type) == TREE_CODE (type)
3719 && TREE_TYPE (h->type) == TREE_TYPE (type)
3720 && attribute_list_equal (TYPE_ATTRIBUTES (h->type),
3721 TYPE_ATTRIBUTES (type))
3722 && (TYPE_MAX_VALUE (h->type) == TYPE_MAX_VALUE (type)
3723 || tree_int_cst_equal (TYPE_MAX_VALUE (h->type),
3724 TYPE_MAX_VALUE (type)))
3725 && (TYPE_MIN_VALUE (h->type) == TYPE_MIN_VALUE (type)
3726 || tree_int_cst_equal (TYPE_MIN_VALUE (h->type),
3727 TYPE_MIN_VALUE (type)))
3728 /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE. */
3729 && (TYPE_DOMAIN (h->type) == TYPE_DOMAIN (type)
3730 || (TYPE_DOMAIN (h->type)
3731 && TREE_CODE (TYPE_DOMAIN (h->type)) == TREE_LIST
3732 && TYPE_DOMAIN (type)
3733 && TREE_CODE (TYPE_DOMAIN (type)) == TREE_LIST
3734 && type_list_equal (TYPE_DOMAIN (h->type),
3735 TYPE_DOMAIN (type)))))
3736 return h->type;
3737 return 0;
3740 /* Add an entry to the type-hash-table
3741 for a type TYPE whose hash code is HASHCODE. */
3743 void
3744 type_hash_add (hashcode, type)
3745 int hashcode;
3746 tree type;
3748 register struct type_hash *h;
3750 h = (struct type_hash *) oballoc (sizeof (struct type_hash));
3751 h->hashcode = hashcode;
3752 h->type = type;
3753 h->next = type_hash_table[hashcode % TYPE_HASH_SIZE];
3754 type_hash_table[hashcode % TYPE_HASH_SIZE] = h;
3757 /* Given TYPE, and HASHCODE its hash code, return the canonical
3758 object for an identical type if one already exists.
3759 Otherwise, return TYPE, and record it as the canonical object
3760 if it is a permanent object.
3762 To use this function, first create a type of the sort you want.
3763 Then compute its hash code from the fields of the type that
3764 make it different from other similar types.
3765 Then call this function and use the value.
3766 This function frees the type you pass in if it is a duplicate. */
3768 /* Set to 1 to debug without canonicalization. Never set by program. */
3769 int debug_no_type_hash = 0;
3771 tree
3772 type_hash_canon (hashcode, type)
3773 int hashcode;
3774 tree type;
3776 tree t1;
3778 if (debug_no_type_hash)
3779 return type;
3781 t1 = type_hash_lookup (hashcode, type);
3782 if (t1 != 0)
3784 obstack_free (TYPE_OBSTACK (type), type);
3785 #ifdef GATHER_STATISTICS
3786 tree_node_counts[(int)t_kind]--;
3787 tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
3788 #endif
3789 return t1;
3792 /* If this is a permanent type, record it for later reuse. */
3793 if (TREE_PERMANENT (type))
3794 type_hash_add (hashcode, type);
3796 return type;
3799 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3800 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3801 by adding the hash codes of the individual attributes. */
3804 attribute_hash_list (list)
3805 tree list;
3807 register int hashcode;
3808 register tree tail;
3809 for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3810 /* ??? Do we want to add in TREE_VALUE too? */
3811 hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3812 return hashcode;
3815 /* Given two lists of attributes, return true if list l2 is
3816 equivalent to l1. */
3819 attribute_list_equal (l1, l2)
3820 tree l1, l2;
3822 return attribute_list_contained (l1, l2)
3823 && attribute_list_contained (l2, l1);
3826 /* Given two lists of attributes, return true if list L2 is
3827 completely contained within L1. */
3828 /* ??? This would be faster if attribute names were stored in a canonicalized
3829 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3830 must be used to show these elements are equivalent (which they are). */
3831 /* ??? It's not clear that attributes with arguments will always be handled
3832 correctly. */
3835 attribute_list_contained (l1, l2)
3836 tree l1, l2;
3838 register tree t1, t2;
3840 /* First check the obvious, maybe the lists are identical. */
3841 if (l1 == l2)
3842 return 1;
3844 /* Maybe the lists are similar. */
3845 for (t1 = l1, t2 = l2;
3846 t1 && t2
3847 && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3848 && TREE_VALUE (t1) == TREE_VALUE (t2);
3849 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3851 /* Maybe the lists are equal. */
3852 if (t1 == 0 && t2 == 0)
3853 return 1;
3855 for (; t2; t2 = TREE_CHAIN (t2))
3857 tree attr
3858 = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3860 if (attr == NULL_TREE)
3861 return 0;
3862 if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3863 return 0;
3866 return 1;
3869 /* Given two lists of types
3870 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3871 return 1 if the lists contain the same types in the same order.
3872 Also, the TREE_PURPOSEs must match. */
3875 type_list_equal (l1, l2)
3876 tree l1, l2;
3878 register tree t1, t2;
3880 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3881 if (TREE_VALUE (t1) != TREE_VALUE (t2)
3882 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3883 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3884 && (TREE_TYPE (TREE_PURPOSE (t1))
3885 == TREE_TYPE (TREE_PURPOSE (t2))))))
3886 return 0;
3888 return t1 == t2;
3891 /* Nonzero if integer constants T1 and T2
3892 represent the same constant value. */
3895 tree_int_cst_equal (t1, t2)
3896 tree t1, t2;
3898 if (t1 == t2)
3899 return 1;
3900 if (t1 == 0 || t2 == 0)
3901 return 0;
3902 if (TREE_CODE (t1) == INTEGER_CST
3903 && TREE_CODE (t2) == INTEGER_CST
3904 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3905 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3906 return 1;
3907 return 0;
3910 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3911 The precise way of comparison depends on their data type. */
3914 tree_int_cst_lt (t1, t2)
3915 tree t1, t2;
3917 if (t1 == t2)
3918 return 0;
3920 if (!TREE_UNSIGNED (TREE_TYPE (t1)))
3921 return INT_CST_LT (t1, t2);
3922 return INT_CST_LT_UNSIGNED (t1, t2);
3925 /* Return an indication of the sign of the integer constant T.
3926 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3927 Note that -1 will never be returned it T's type is unsigned. */
3930 tree_int_cst_sgn (t)
3931 tree t;
3933 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3934 return 0;
3935 else if (TREE_UNSIGNED (TREE_TYPE (t)))
3936 return 1;
3937 else if (TREE_INT_CST_HIGH (t) < 0)
3938 return -1;
3939 else
3940 return 1;
3943 /* Compare two constructor-element-type constants. Return 1 if the lists
3944 are known to be equal; otherwise return 0. */
3947 simple_cst_list_equal (l1, l2)
3948 tree l1, l2;
3950 while (l1 != NULL_TREE && l2 != NULL_TREE)
3952 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3953 return 0;
3955 l1 = TREE_CHAIN (l1);
3956 l2 = TREE_CHAIN (l2);
3959 return (l1 == l2);
3962 /* Return truthvalue of whether T1 is the same tree structure as T2.
3963 Return 1 if they are the same.
3964 Return 0 if they are understandably different.
3965 Return -1 if either contains tree structure not understood by
3966 this function. */
3969 simple_cst_equal (t1, t2)
3970 tree t1, t2;
3972 register enum tree_code code1, code2;
3973 int cmp;
3975 if (t1 == t2)
3976 return 1;
3977 if (t1 == 0 || t2 == 0)
3978 return 0;
3980 code1 = TREE_CODE (t1);
3981 code2 = TREE_CODE (t2);
3983 if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3985 if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3986 || code2 == NON_LVALUE_EXPR)
3987 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3988 else
3989 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3991 else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3992 || code2 == NON_LVALUE_EXPR)
3993 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3995 if (code1 != code2)
3996 return 0;
3998 switch (code1)
4000 case INTEGER_CST:
4001 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4002 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
4004 case REAL_CST:
4005 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4007 case STRING_CST:
4008 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4009 && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4010 TREE_STRING_LENGTH (t1));
4012 case CONSTRUCTOR:
4013 if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
4014 return 1;
4015 else
4016 abort ();
4018 case SAVE_EXPR:
4019 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4021 case CALL_EXPR:
4022 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4023 if (cmp <= 0)
4024 return cmp;
4025 return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4027 case TARGET_EXPR:
4028 /* Special case: if either target is an unallocated VAR_DECL,
4029 it means that it's going to be unified with whatever the
4030 TARGET_EXPR is really supposed to initialize, so treat it
4031 as being equivalent to anything. */
4032 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4033 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4034 && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
4035 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4036 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4037 && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
4038 cmp = 1;
4039 else
4040 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4041 if (cmp <= 0)
4042 return cmp;
4043 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4045 case WITH_CLEANUP_EXPR:
4046 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4047 if (cmp <= 0)
4048 return cmp;
4049 return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
4051 case COMPONENT_REF:
4052 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4053 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4054 return 0;
4056 case VAR_DECL:
4057 case PARM_DECL:
4058 case CONST_DECL:
4059 case FUNCTION_DECL:
4060 return 0;
4062 default:
4063 break;
4066 /* This general rule works for most tree codes. All exceptions should be
4067 handled above. If this is a language-specific tree code, we can't
4068 trust what might be in the operand, so say we don't know
4069 the situation. */
4070 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4071 return -1;
4073 switch (TREE_CODE_CLASS (code1))
4075 int i;
4076 case '1':
4077 case '2':
4078 case '<':
4079 case 'e':
4080 case 'r':
4081 case 's':
4082 cmp = 1;
4083 for (i=0; i<tree_code_length[(int) code1]; ++i)
4085 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4086 if (cmp <= 0)
4087 return cmp;
4089 return cmp;
4091 default:
4092 return -1;
4096 /* Constructors for pointer, array and function types.
4097 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4098 constructed by language-dependent code, not here.) */
4100 /* Construct, lay out and return the type of pointers to TO_TYPE.
4101 If such a type has already been constructed, reuse it. */
4103 tree
4104 build_pointer_type (to_type)
4105 tree to_type;
4107 register tree t = TYPE_POINTER_TO (to_type);
4109 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4111 if (t)
4112 return t;
4114 /* We need a new one. Put this in the same obstack as TO_TYPE. */
4115 push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4116 t = make_node (POINTER_TYPE);
4117 pop_obstacks ();
4119 TREE_TYPE (t) = to_type;
4121 /* Record this type as the pointer to TO_TYPE. */
4122 TYPE_POINTER_TO (to_type) = t;
4124 /* Lay out the type. This function has many callers that are concerned
4125 with expression-construction, and this simplifies them all.
4126 Also, it guarantees the TYPE_SIZE is in the same obstack as the type. */
4127 layout_type (t);
4129 return t;
4132 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4133 MAXVAL should be the maximum value in the domain
4134 (one less than the length of the array).
4136 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4137 We don't enforce this limit, that is up to caller (e.g. language front end).
4138 The limit exists because the result is a signed type and we don't handle
4139 sizes that use more than one HOST_WIDE_INT. */
4141 tree
4142 build_index_type (maxval)
4143 tree maxval;
4145 register tree itype = make_node (INTEGER_TYPE);
4147 TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4148 TYPE_MIN_VALUE (itype) = size_zero_node;
4150 push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4151 TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4152 pop_obstacks ();
4154 TYPE_MODE (itype) = TYPE_MODE (sizetype);
4155 TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4156 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4157 TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4158 if (TREE_CODE (maxval) == INTEGER_CST)
4160 int maxint = (int) TREE_INT_CST_LOW (maxval);
4161 /* If the domain should be empty, make sure the maxval
4162 remains -1 and is not spoiled by truncation. */
4163 if (INT_CST_LT (maxval, integer_zero_node))
4165 TYPE_MAX_VALUE (itype) = build_int_2 (-1, -1);
4166 TREE_TYPE (TYPE_MAX_VALUE (itype)) = sizetype;
4168 return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4170 else
4171 return itype;
4174 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4175 ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4176 low bound LOWVAL and high bound HIGHVAL.
4177 if TYPE==NULL_TREE, sizetype is used. */
4179 tree
4180 build_range_type (type, lowval, highval)
4181 tree type, lowval, highval;
4183 register tree itype = make_node (INTEGER_TYPE);
4185 TREE_TYPE (itype) = type;
4186 if (type == NULL_TREE)
4187 type = sizetype;
4189 push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4190 TYPE_MIN_VALUE (itype) = convert (type, lowval);
4191 TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4192 pop_obstacks ();
4194 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4195 TYPE_MODE (itype) = TYPE_MODE (type);
4196 TYPE_SIZE (itype) = TYPE_SIZE (type);
4197 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4198 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4199 if (TREE_CODE (lowval) == INTEGER_CST)
4201 HOST_WIDE_INT lowint, highint;
4202 int maxint;
4204 lowint = TREE_INT_CST_LOW (lowval);
4205 if (highval && TREE_CODE (highval) == INTEGER_CST)
4206 highint = TREE_INT_CST_LOW (highval);
4207 else
4208 highint = (~(unsigned HOST_WIDE_INT)0) >> 1;
4210 maxint = (int) (highint - lowint);
4211 return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4213 else
4214 return itype;
4217 /* Just like build_index_type, but takes lowval and highval instead
4218 of just highval (maxval). */
4220 tree
4221 build_index_2_type (lowval,highval)
4222 tree lowval, highval;
4224 return build_range_type (NULL_TREE, lowval, highval);
4227 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4228 Needed because when index types are not hashed, equal index types
4229 built at different times appear distinct, even though structurally,
4230 they are not. */
4233 index_type_equal (itype1, itype2)
4234 tree itype1, itype2;
4236 if (TREE_CODE (itype1) != TREE_CODE (itype2))
4237 return 0;
4238 if (TREE_CODE (itype1) == INTEGER_TYPE)
4240 if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
4241 || TYPE_MODE (itype1) != TYPE_MODE (itype2)
4242 || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
4243 || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
4244 return 0;
4245 if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
4246 TYPE_MIN_VALUE (itype2))
4247 && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
4248 TYPE_MAX_VALUE (itype2)))
4249 return 1;
4252 return 0;
4255 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4256 and number of elements specified by the range of values of INDEX_TYPE.
4257 If such a type has already been constructed, reuse it. */
4259 tree
4260 build_array_type (elt_type, index_type)
4261 tree elt_type, index_type;
4263 register tree t;
4264 int hashcode;
4266 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4268 error ("arrays of functions are not meaningful");
4269 elt_type = integer_type_node;
4272 /* Make sure TYPE_POINTER_TO (elt_type) is filled in. */
4273 build_pointer_type (elt_type);
4275 /* Allocate the array after the pointer type,
4276 in case we free it in type_hash_canon. */
4277 t = make_node (ARRAY_TYPE);
4278 TREE_TYPE (t) = elt_type;
4279 TYPE_DOMAIN (t) = index_type;
4281 if (index_type == 0)
4283 return t;
4286 hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
4287 t = type_hash_canon (hashcode, t);
4289 if (TYPE_SIZE (t) == 0)
4290 layout_type (t);
4291 return t;
4294 /* Return the TYPE of the elements comprising
4295 the innermost dimension of ARRAY. */
4297 tree
4298 get_inner_array_type (array)
4299 tree array;
4301 tree type = TREE_TYPE (array);
4303 while (TREE_CODE (type) == ARRAY_TYPE)
4304 type = TREE_TYPE (type);
4306 return type;
4309 /* Construct, lay out and return
4310 the type of functions returning type VALUE_TYPE
4311 given arguments of types ARG_TYPES.
4312 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4313 are data type nodes for the arguments of the function.
4314 If such a type has already been constructed, reuse it. */
4316 tree
4317 build_function_type (value_type, arg_types)
4318 tree value_type, arg_types;
4320 register tree t;
4321 int hashcode;
4323 if (TREE_CODE (value_type) == FUNCTION_TYPE)
4325 error ("function return type cannot be function");
4326 value_type = integer_type_node;
4329 /* Make a node of the sort we want. */
4330 t = make_node (FUNCTION_TYPE);
4331 TREE_TYPE (t) = value_type;
4332 TYPE_ARG_TYPES (t) = arg_types;
4334 /* If we already have such a type, use the old one and free this one. */
4335 hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
4336 t = type_hash_canon (hashcode, t);
4338 if (TYPE_SIZE (t) == 0)
4339 layout_type (t);
4340 return t;
4343 /* Build the node for the type of references-to-TO_TYPE. */
4345 tree
4346 build_reference_type (to_type)
4347 tree to_type;
4349 register tree t = TYPE_REFERENCE_TO (to_type);
4351 /* First, if we already have a type for pointers to TO_TYPE, use it. */
4353 if (t)
4354 return t;
4356 /* We need a new one. Put this in the same obstack as TO_TYPE. */
4357 push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4358 t = make_node (REFERENCE_TYPE);
4359 pop_obstacks ();
4361 TREE_TYPE (t) = to_type;
4363 /* Record this type as the pointer to TO_TYPE. */
4364 TYPE_REFERENCE_TO (to_type) = t;
4366 layout_type (t);
4368 return t;
4371 /* Construct, lay out and return the type of methods belonging to class
4372 BASETYPE and whose arguments and values are described by TYPE.
4373 If that type exists already, reuse it.
4374 TYPE must be a FUNCTION_TYPE node. */
4376 tree
4377 build_method_type (basetype, type)
4378 tree basetype, type;
4380 register tree t;
4381 int hashcode;
4383 /* Make a node of the sort we want. */
4384 t = make_node (METHOD_TYPE);
4386 if (TREE_CODE (type) != FUNCTION_TYPE)
4387 abort ();
4389 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4390 TREE_TYPE (t) = TREE_TYPE (type);
4392 /* The actual arglist for this function includes a "hidden" argument
4393 which is "this". Put it into the list of argument types. */
4395 TYPE_ARG_TYPES (t)
4396 = tree_cons (NULL_TREE,
4397 build_pointer_type (basetype), TYPE_ARG_TYPES (type));
4399 /* If we already have such a type, use the old one and free this one. */
4400 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4401 t = type_hash_canon (hashcode, t);
4403 if (TYPE_SIZE (t) == 0)
4404 layout_type (t);
4406 return t;
4409 /* Construct, lay out and return the type of offsets to a value
4410 of type TYPE, within an object of type BASETYPE.
4411 If a suitable offset type exists already, reuse it. */
4413 tree
4414 build_offset_type (basetype, type)
4415 tree basetype, type;
4417 register tree t;
4418 int hashcode;
4420 /* Make a node of the sort we want. */
4421 t = make_node (OFFSET_TYPE);
4423 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4424 TREE_TYPE (t) = type;
4426 /* If we already have such a type, use the old one and free this one. */
4427 hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4428 t = type_hash_canon (hashcode, t);
4430 if (TYPE_SIZE (t) == 0)
4431 layout_type (t);
4433 return t;
4436 /* Create a complex type whose components are COMPONENT_TYPE. */
4438 tree
4439 build_complex_type (component_type)
4440 tree component_type;
4442 register tree t;
4443 int hashcode;
4445 /* Make a node of the sort we want. */
4446 t = make_node (COMPLEX_TYPE);
4448 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4449 set_type_quals (t, TYPE_QUALS (component_type));
4451 /* If we already have such a type, use the old one and free this one. */
4452 hashcode = TYPE_HASH (component_type);
4453 t = type_hash_canon (hashcode, t);
4455 if (TYPE_SIZE (t) == 0)
4456 layout_type (t);
4458 return t;
4461 /* Return OP, stripped of any conversions to wider types as much as is safe.
4462 Converting the value back to OP's type makes a value equivalent to OP.
4464 If FOR_TYPE is nonzero, we return a value which, if converted to
4465 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4467 If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4468 narrowest type that can hold the value, even if they don't exactly fit.
4469 Otherwise, bit-field references are changed to a narrower type
4470 only if they can be fetched directly from memory in that type.
4472 OP must have integer, real or enumeral type. Pointers are not allowed!
4474 There are some cases where the obvious value we could return
4475 would regenerate to OP if converted to OP's type,
4476 but would not extend like OP to wider types.
4477 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4478 For example, if OP is (unsigned short)(signed char)-1,
4479 we avoid returning (signed char)-1 if FOR_TYPE is int,
4480 even though extending that to an unsigned short would regenerate OP,
4481 since the result of extending (signed char)-1 to (int)
4482 is different from (int) OP. */
4484 tree
4485 get_unwidened (op, for_type)
4486 register tree op;
4487 tree for_type;
4489 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
4490 register tree type = TREE_TYPE (op);
4491 register unsigned final_prec
4492 = TYPE_PRECISION (for_type != 0 ? for_type : type);
4493 register int uns
4494 = (for_type != 0 && for_type != type
4495 && final_prec > TYPE_PRECISION (type)
4496 && TREE_UNSIGNED (type));
4497 register tree win = op;
4499 while (TREE_CODE (op) == NOP_EXPR)
4501 register int bitschange
4502 = TYPE_PRECISION (TREE_TYPE (op))
4503 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4505 /* Truncations are many-one so cannot be removed.
4506 Unless we are later going to truncate down even farther. */
4507 if (bitschange < 0
4508 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4509 break;
4511 /* See what's inside this conversion. If we decide to strip it,
4512 we will set WIN. */
4513 op = TREE_OPERAND (op, 0);
4515 /* If we have not stripped any zero-extensions (uns is 0),
4516 we can strip any kind of extension.
4517 If we have previously stripped a zero-extension,
4518 only zero-extensions can safely be stripped.
4519 Any extension can be stripped if the bits it would produce
4520 are all going to be discarded later by truncating to FOR_TYPE. */
4522 if (bitschange > 0)
4524 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4525 win = op;
4526 /* TREE_UNSIGNED says whether this is a zero-extension.
4527 Let's avoid computing it if it does not affect WIN
4528 and if UNS will not be needed again. */
4529 if ((uns || TREE_CODE (op) == NOP_EXPR)
4530 && TREE_UNSIGNED (TREE_TYPE (op)))
4532 uns = 1;
4533 win = op;
4538 if (TREE_CODE (op) == COMPONENT_REF
4539 /* Since type_for_size always gives an integer type. */
4540 && TREE_CODE (type) != REAL_TYPE
4541 /* Don't crash if field not laid out yet. */
4542 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4544 unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4545 type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
4547 /* We can get this structure field in the narrowest type it fits in.
4548 If FOR_TYPE is 0, do this only for a field that matches the
4549 narrower type exactly and is aligned for it
4550 The resulting extension to its nominal type (a fullword type)
4551 must fit the same conditions as for other extensions. */
4553 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4554 && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4555 && (! uns || final_prec <= innerprec
4556 || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4557 && type != 0)
4559 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4560 TREE_OPERAND (op, 1));
4561 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4562 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4563 TREE_RAISES (win) = TREE_RAISES (op);
4566 return win;
4569 /* Return OP or a simpler expression for a narrower value
4570 which can be sign-extended or zero-extended to give back OP.
4571 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4572 or 0 if the value should be sign-extended. */
4574 tree
4575 get_narrower (op, unsignedp_ptr)
4576 register tree op;
4577 int *unsignedp_ptr;
4579 register int uns = 0;
4580 int first = 1;
4581 register tree win = op;
4583 while (TREE_CODE (op) == NOP_EXPR)
4585 register int bitschange
4586 = TYPE_PRECISION (TREE_TYPE (op))
4587 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4589 /* Truncations are many-one so cannot be removed. */
4590 if (bitschange < 0)
4591 break;
4593 /* See what's inside this conversion. If we decide to strip it,
4594 we will set WIN. */
4595 op = TREE_OPERAND (op, 0);
4597 if (bitschange > 0)
4599 /* An extension: the outermost one can be stripped,
4600 but remember whether it is zero or sign extension. */
4601 if (first)
4602 uns = TREE_UNSIGNED (TREE_TYPE (op));
4603 /* Otherwise, if a sign extension has been stripped,
4604 only sign extensions can now be stripped;
4605 if a zero extension has been stripped, only zero-extensions. */
4606 else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4607 break;
4608 first = 0;
4610 else /* bitschange == 0 */
4612 /* A change in nominal type can always be stripped, but we must
4613 preserve the unsignedness. */
4614 if (first)
4615 uns = TREE_UNSIGNED (TREE_TYPE (op));
4616 first = 0;
4619 win = op;
4622 if (TREE_CODE (op) == COMPONENT_REF
4623 /* Since type_for_size always gives an integer type. */
4624 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
4626 unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4627 tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
4629 /* We can get this structure field in a narrower type that fits it,
4630 but the resulting extension to its nominal type (a fullword type)
4631 must satisfy the same conditions as for other extensions.
4633 Do this only for fields that are aligned (not bit-fields),
4634 because when bit-field insns will be used there is no
4635 advantage in doing this. */
4637 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4638 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4639 && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4640 && type != 0)
4642 if (first)
4643 uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4644 win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4645 TREE_OPERAND (op, 1));
4646 TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4647 TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4648 TREE_RAISES (win) = TREE_RAISES (op);
4651 *unsignedp_ptr = uns;
4652 return win;
4655 /* Nonzero if integer constant C has a value that is permissible
4656 for type TYPE (an INTEGER_TYPE). */
4659 int_fits_type_p (c, type)
4660 tree c, type;
4662 if (TREE_UNSIGNED (type))
4663 return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4664 && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
4665 && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4666 && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
4667 /* Negative ints never fit unsigned types. */
4668 && ! (TREE_INT_CST_HIGH (c) < 0
4669 && ! TREE_UNSIGNED (TREE_TYPE (c))));
4670 else
4671 return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4672 && INT_CST_LT (TYPE_MAX_VALUE (type), c))
4673 && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4674 && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
4675 /* Unsigned ints with top bit set never fit signed types. */
4676 && ! (TREE_INT_CST_HIGH (c) < 0
4677 && TREE_UNSIGNED (TREE_TYPE (c))));
4680 /* Return the innermost context enclosing DECL that is
4681 a FUNCTION_DECL, or zero if none. */
4683 tree
4684 decl_function_context (decl)
4685 tree decl;
4687 tree context;
4689 if (TREE_CODE (decl) == ERROR_MARK)
4690 return 0;
4692 if (TREE_CODE (decl) == SAVE_EXPR)
4693 context = SAVE_EXPR_CONTEXT (decl);
4694 else
4695 context = DECL_CONTEXT (decl);
4697 while (context && TREE_CODE (context) != FUNCTION_DECL)
4699 if (TREE_CODE_CLASS (TREE_CODE (context)) == 't')
4700 context = TYPE_CONTEXT (context);
4701 else if (TREE_CODE_CLASS (TREE_CODE (context)) == 'd')
4702 context = DECL_CONTEXT (context);
4703 else if (TREE_CODE (context) == BLOCK)
4704 context = BLOCK_SUPERCONTEXT (context);
4705 else
4706 /* Unhandled CONTEXT !? */
4707 abort ();
4710 return context;
4713 /* Return the innermost context enclosing DECL that is
4714 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4715 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
4717 tree
4718 decl_type_context (decl)
4719 tree decl;
4721 tree context = DECL_CONTEXT (decl);
4723 while (context)
4725 if (TREE_CODE (context) == RECORD_TYPE
4726 || TREE_CODE (context) == UNION_TYPE
4727 || TREE_CODE (context) == QUAL_UNION_TYPE)
4728 return context;
4729 if (TREE_CODE (context) == TYPE_DECL
4730 || TREE_CODE (context) == FUNCTION_DECL)
4731 context = DECL_CONTEXT (context);
4732 else if (TREE_CODE (context) == BLOCK)
4733 context = BLOCK_SUPERCONTEXT (context);
4734 else
4735 /* Unhandled CONTEXT!? */
4736 abort ();
4738 return NULL_TREE;
4741 /* Print debugging information about the size of the
4742 toplev_inline_obstacks. */
4744 void
4745 print_inline_obstack_statistics ()
4747 struct simple_obstack_stack *current = toplev_inline_obstacks;
4748 int n_obstacks = 0;
4749 int n_alloc = 0;
4750 int n_chunks = 0;
4752 for (; current; current = current->next, ++n_obstacks)
4754 struct obstack *o = current->obstack;
4755 struct _obstack_chunk *chunk = o->chunk;
4757 n_alloc += o->next_free - chunk->contents;
4758 chunk = chunk->prev;
4759 ++n_chunks;
4760 for (; chunk; chunk = chunk->prev, ++n_chunks)
4761 n_alloc += chunk->limit - &chunk->contents[0];
4763 fprintf (stderr, "inline obstacks: %d obstacks, %d bytes, %d chunks\n",
4764 n_obstacks, n_alloc, n_chunks);
4767 /* Print debugging information about the obstack O, named STR. */
4769 void
4770 print_obstack_statistics (str, o)
4771 const char *str;
4772 struct obstack *o;
4774 struct _obstack_chunk *chunk = o->chunk;
4775 int n_chunks = 1;
4776 int n_alloc = 0;
4778 n_alloc += o->next_free - chunk->contents;
4779 chunk = chunk->prev;
4780 while (chunk)
4782 n_chunks += 1;
4783 n_alloc += chunk->limit - &chunk->contents[0];
4784 chunk = chunk->prev;
4786 fprintf (stderr, "obstack %s: %u bytes, %d chunks\n",
4787 str, n_alloc, n_chunks);
4790 /* Print debugging information about tree nodes generated during the compile,
4791 and any language-specific information. */
4793 void
4794 dump_tree_statistics ()
4796 #ifdef GATHER_STATISTICS
4797 int i;
4798 int total_nodes, total_bytes;
4799 #endif
4801 fprintf (stderr, "\n??? tree nodes created\n\n");
4802 #ifdef GATHER_STATISTICS
4803 fprintf (stderr, "Kind Nodes Bytes\n");
4804 fprintf (stderr, "-------------------------------------\n");
4805 total_nodes = total_bytes = 0;
4806 for (i = 0; i < (int) all_kinds; i++)
4808 fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
4809 tree_node_counts[i], tree_node_sizes[i]);
4810 total_nodes += tree_node_counts[i];
4811 total_bytes += tree_node_sizes[i];
4813 fprintf (stderr, "%-20s %9d\n", "identifier names", id_string_size);
4814 fprintf (stderr, "-------------------------------------\n");
4815 fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
4816 fprintf (stderr, "-------------------------------------\n");
4817 #else
4818 fprintf (stderr, "(No per-node statistics)\n");
4819 #endif
4820 print_obstack_statistics ("permanent_obstack", &permanent_obstack);
4821 print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
4822 print_obstack_statistics ("temporary_obstack", &temporary_obstack);
4823 print_obstack_statistics ("momentary_obstack", &momentary_obstack);
4824 print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
4825 print_inline_obstack_statistics ();
4826 print_lang_statistics ();
4829 #define FILE_FUNCTION_PREFIX_LEN 9
4831 #ifndef NO_DOLLAR_IN_LABEL
4832 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
4833 #else /* NO_DOLLAR_IN_LABEL */
4834 #ifndef NO_DOT_IN_LABEL
4835 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
4836 #else /* NO_DOT_IN_LABEL */
4837 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4838 #endif /* NO_DOT_IN_LABEL */
4839 #endif /* NO_DOLLAR_IN_LABEL */
4841 extern char * first_global_object_name;
4842 extern char * weak_global_object_name;
4844 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
4845 clashes in cases where we can't reliably choose a unique name.
4847 Derived from mkstemp.c in libiberty. */
4849 static void
4850 append_random_chars (template)
4851 char *template;
4853 static const char letters[]
4854 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
4855 static unsigned HOST_WIDE_INT value;
4856 unsigned HOST_WIDE_INT v;
4858 #ifdef HAVE_GETTIMEOFDAY
4859 struct timeval tv;
4860 #endif
4862 template += strlen (template);
4864 #ifdef HAVE_GETTIMEOFDAY
4865 /* Get some more or less random data. */
4866 gettimeofday (&tv, NULL);
4867 value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
4868 #else
4869 value += getpid ();
4870 #endif
4872 v = value;
4874 /* Fill in the random bits. */
4875 template[0] = letters[v % 62];
4876 v /= 62;
4877 template[1] = letters[v % 62];
4878 v /= 62;
4879 template[2] = letters[v % 62];
4880 v /= 62;
4881 template[3] = letters[v % 62];
4882 v /= 62;
4883 template[4] = letters[v % 62];
4884 v /= 62;
4885 template[5] = letters[v % 62];
4887 template[6] = '\0';
4890 /* Generate a name for a function unique to this translation unit.
4891 TYPE is some string to identify the purpose of this function to the
4892 linker or collect2. */
4894 tree
4895 get_file_function_name_long (type)
4896 const char *type;
4898 char *buf;
4899 register char *p;
4901 if (first_global_object_name)
4902 p = first_global_object_name;
4903 else
4905 /* We don't have anything that we know to be unique to this translation
4906 unit, so use what we do have and throw in some randomness. */
4908 const char *name = weak_global_object_name;
4909 const char *file = main_input_filename;
4911 if (! name)
4912 name = "";
4913 if (! file)
4914 file = input_filename;
4916 p = (char *) alloca (7 + strlen (name) + strlen (file));
4918 sprintf (p, "%s%s", name, file);
4919 append_random_chars (p);
4922 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
4923 + strlen (type));
4925 /* Set up the name of the file-level functions we may need. */
4926 /* Use a global object (which is already required to be unique over
4927 the program) rather than the file name (which imposes extra
4928 constraints). -- Raeburn@MIT.EDU, 10 Jan 1990. */
4929 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
4931 /* Don't need to pull weird characters out of global names. */
4932 if (p != first_global_object_name)
4934 for (p = buf+11; *p; p++)
4935 if (! ((*p >= '0' && *p <= '9')
4936 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
4937 #ifndef ASM_IDENTIFY_GCC /* this is required if `.' is invalid -- k. raeburn */
4938 || *p == '.'
4939 #endif
4940 #endif
4941 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
4942 || *p == '$'
4943 #endif
4944 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
4945 || *p == '.'
4946 #endif
4947 || (*p >= 'A' && *p <= 'Z')
4948 || (*p >= 'a' && *p <= 'z')))
4949 *p = '_';
4952 return get_identifier (buf);
4955 /* If KIND=='I', return a suitable global initializer (constructor) name.
4956 If KIND=='D', return a suitable global clean-up (destructor) name. */
4958 tree
4959 get_file_function_name (kind)
4960 int kind;
4962 char p[2];
4963 p[0] = kind;
4964 p[1] = 0;
4966 return get_file_function_name_long (p);
4970 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4971 The result is placed in BUFFER (which has length BIT_SIZE),
4972 with one bit in each char ('\000' or '\001').
4974 If the constructor is constant, NULL_TREE is returned.
4975 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
4977 tree
4978 get_set_constructor_bits (init, buffer, bit_size)
4979 tree init;
4980 char *buffer;
4981 int bit_size;
4983 int i;
4984 tree vals;
4985 HOST_WIDE_INT domain_min
4986 = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
4987 tree non_const_bits = NULL_TREE;
4988 for (i = 0; i < bit_size; i++)
4989 buffer[i] = 0;
4991 for (vals = TREE_OPERAND (init, 1);
4992 vals != NULL_TREE; vals = TREE_CHAIN (vals))
4994 if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
4995 || (TREE_PURPOSE (vals) != NULL_TREE
4996 && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
4997 non_const_bits
4998 = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
4999 else if (TREE_PURPOSE (vals) != NULL_TREE)
5001 /* Set a range of bits to ones. */
5002 HOST_WIDE_INT lo_index
5003 = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
5004 HOST_WIDE_INT hi_index
5005 = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5006 if (lo_index < 0 || lo_index >= bit_size
5007 || hi_index < 0 || hi_index >= bit_size)
5008 abort ();
5009 for ( ; lo_index <= hi_index; lo_index++)
5010 buffer[lo_index] = 1;
5012 else
5014 /* Set a single bit to one. */
5015 HOST_WIDE_INT index
5016 = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5017 if (index < 0 || index >= bit_size)
5019 error ("invalid initializer for bit string");
5020 return NULL_TREE;
5022 buffer[index] = 1;
5025 return non_const_bits;
5028 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5029 The result is placed in BUFFER (which is an array of bytes).
5030 If the constructor is constant, NULL_TREE is returned.
5031 Otherwise, a TREE_LIST of the non-constant elements is emitted. */
5033 tree
5034 get_set_constructor_bytes (init, buffer, wd_size)
5035 tree init;
5036 unsigned char *buffer;
5037 int wd_size;
5039 int i;
5040 int set_word_size = BITS_PER_UNIT;
5041 int bit_size = wd_size * set_word_size;
5042 int bit_pos = 0;
5043 unsigned char *bytep = buffer;
5044 char *bit_buffer = (char *) alloca(bit_size);
5045 tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5047 for (i = 0; i < wd_size; i++)
5048 buffer[i] = 0;
5050 for (i = 0; i < bit_size; i++)
5052 if (bit_buffer[i])
5054 if (BYTES_BIG_ENDIAN)
5055 *bytep |= (1 << (set_word_size - 1 - bit_pos));
5056 else
5057 *bytep |= 1 << bit_pos;
5059 bit_pos++;
5060 if (bit_pos >= set_word_size)
5061 bit_pos = 0, bytep++;
5063 return non_const_bits;
5066 #ifdef ENABLE_CHECKING
5068 /* Complain if the tree code does not match the expected one.
5069 NODE is the tree node in question, CODE is the expected tree code,
5070 and FILE and LINE are the filename and line number, respectively,
5071 of the line on which the check was done. If NONFATAL is nonzero,
5072 don't abort if the reference is invalid; instead, return 0.
5073 If the reference is valid, return NODE. */
5075 tree
5076 tree_check (node, code, file, line, nofatal)
5077 tree node;
5078 enum tree_code code;
5079 const char *file;
5080 int line;
5081 int nofatal;
5083 if (TREE_CODE (node) == code)
5084 return node;
5085 else if (nofatal)
5086 return 0;
5087 else
5088 fatal ("%s:%d: Expect %s, have %s\n", file, line,
5089 tree_code_name[code], tree_code_name[TREE_CODE (node)]);
5092 /* Similar to above, except that we check for a class of tree
5093 code, given in CL. */
5095 tree
5096 tree_class_check (node, cl, file, line, nofatal)
5097 tree node;
5098 char cl;
5099 const char *file;
5100 int line;
5101 int nofatal;
5103 if (TREE_CODE_CLASS (TREE_CODE (node)) == cl)
5104 return node;
5105 else if (nofatal)
5106 return 0;
5107 else
5108 fatal ("%s:%d: Expect '%c', have '%s'\n", file, line,
5109 cl, tree_code_name[TREE_CODE (node)]);
5112 /* Likewise, but complain if the tree node is not an expression. */
5114 tree
5115 expr_check (node, ignored, file, line, nofatal)
5116 tree node;
5117 int ignored;
5118 const char *file;
5119 int line;
5120 int nofatal;
5122 switch (TREE_CODE_CLASS (TREE_CODE (node)))
5124 case 'r':
5125 case 's':
5126 case 'e':
5127 case '<':
5128 case '1':
5129 case '2':
5130 break;
5132 default:
5133 if (nofatal)
5134 return 0;
5135 else
5136 fatal ("%s:%d: Expect expression, have '%s'\n", file, line,
5137 tree_code_name[TREE_CODE (node)]);
5140 return node;
5142 #endif
5144 /* Return the alias set for T, which may be either a type or an
5145 expression. */
5148 get_alias_set (t)
5149 tree t;
5151 if (!flag_strict_aliasing || !lang_get_alias_set)
5152 /* If we're not doing any lanaguage-specific alias analysis, just
5153 assume everything aliases everything else. */
5154 return 0;
5155 else
5156 return (*lang_get_alias_set) (t);
5159 /* Return a brand-new alias set. */
5162 new_alias_set ()
5164 static int last_alias_set;
5165 if (flag_strict_aliasing)
5166 return ++last_alias_set;
5167 else
5168 return 0;