OSDN Git Service

(chainon): Check for op2 being the last elt of the chain.
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20
21 /* This file contains the low level primitives for operating on tree nodes,
22    including allocation, list operations, interning of identifiers,
23    construction of data type nodes and statement nodes,
24    and construction of type conversion nodes.  It also contains
25    tables index by tree code that describe how to take apart
26    nodes of that code.
27
28    It is intended to be language-independent, but occasionally
29    calls language-dependent routines defined (for C) in typecheck.c.
30
31    The low-level allocation routines oballoc and permalloc
32    are used also for allocating many other kinds of objects
33    by all passes of the compiler.  */
34
35 #include "config.h"
36 #include "flags.h"
37 #include "tree.h"
38 #include "function.h"
39 #include "obstack.h"
40 #include "gvarargs.h"
41 #include <stdio.h>
42
43 #define obstack_chunk_alloc xmalloc
44 #define obstack_chunk_free free
45
46 /* Tree nodes of permanent duration are allocated in this obstack.
47    They are the identifier nodes, and everything outside of
48    the bodies and parameters of function definitions.  */
49
50 struct obstack permanent_obstack;
51
52 /* The initial RTL, and all ..._TYPE nodes, in a function
53    are allocated in this obstack.  Usually they are freed at the
54    end of the function, but if the function is inline they are saved.
55    For top-level functions, this is maybepermanent_obstack.
56    Separate obstacks are made for nested functions.  */
57
58 struct obstack *function_maybepermanent_obstack;
59
60 /* This is the function_maybepermanent_obstack for top-level functions.  */
61
62 struct obstack maybepermanent_obstack;
63
64 /* The contents of the current function definition are allocated
65    in this obstack, and all are freed at the end of the function.
66    For top-level functions, this is temporary_obstack.
67    Separate obstacks are made for nested functions.  */
68
69 struct obstack *function_obstack;
70
71 /* This is used for reading initializers of global variables.  */
72
73 struct obstack temporary_obstack;
74
75 /* The tree nodes of an expression are allocated
76    in this obstack, and all are freed at the end of the expression.  */
77
78 struct obstack momentary_obstack;
79
80 /* The tree nodes of a declarator are allocated
81    in this obstack, and all are freed when the declarator
82    has been parsed.  */
83
84 static struct obstack temp_decl_obstack;
85
86 /* This points at either permanent_obstack
87    or the current function_maybepermanent_obstack.  */
88
89 struct obstack *saveable_obstack;
90
91 /* This is same as saveable_obstack during parse and expansion phase;
92    it points to the current function's obstack during optimization.
93    This is the obstack to be used for creating rtl objects.  */
94
95 struct obstack *rtl_obstack;
96
97 /* This points at either permanent_obstack or the current function_obstack.  */
98
99 struct obstack *current_obstack;
100
101 /* This points at either permanent_obstack or the current function_obstack
102    or momentary_obstack.  */
103
104 struct obstack *expression_obstack;
105
106 /* Stack of obstack selections for push_obstacks and pop_obstacks.  */
107
108 struct obstack_stack
109 {
110   struct obstack_stack *next;
111   struct obstack *current;
112   struct obstack *saveable;
113   struct obstack *expression;
114   struct obstack *rtl;
115 };
116
117 struct obstack_stack *obstack_stack;
118
119 /* Obstack for allocating struct obstack_stack entries.  */
120
121 static struct obstack obstack_stack_obstack;
122
123 /* Addresses of first objects in some obstacks.
124    This is for freeing their entire contents.  */
125 char *maybepermanent_firstobj;
126 char *temporary_firstobj;
127 char *momentary_firstobj;
128 char *temp_decl_firstobj;
129
130 /* Nonzero means all ..._TYPE nodes should be allocated permanently.  */
131
132 int all_types_permanent;
133
134 /* Stack of places to restore the momentary obstack back to.  */
135    
136 struct momentary_level
137 {
138   /* Pointer back to previous such level.  */
139   struct momentary_level *prev;
140   /* First object allocated within this level.  */
141   char *base;
142   /* Value of expression_obstack saved at entry to this level.  */
143   struct obstack *obstack;
144 };
145
146 struct momentary_level *momentary_stack;
147
148 /* Table indexed by tree code giving a string containing a character
149    classifying the tree code.  Possibilities are
150    t, d, s, c, r, <, 1, 2 and e.  See tree.def for details.  */
151
152 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
153
154 char *standard_tree_code_type[] = {
155 #include "tree.def"
156 };
157 #undef DEFTREECODE
158
159 /* Table indexed by tree code giving number of expression
160    operands beyond the fixed part of the node structure.
161    Not used for types or decls.  */
162
163 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
164
165 int standard_tree_code_length[] = {
166 #include "tree.def"
167 };
168 #undef DEFTREECODE
169
170 /* Names of tree components.
171    Used for printing out the tree and error messages.  */
172 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
173
174 char *standard_tree_code_name[] = {
175 #include "tree.def"
176 };
177 #undef DEFTREECODE
178
179 /* Table indexed by tree code giving a string containing a character
180    classifying the tree code.  Possibilities are
181    t, d, s, c, r, e, <, 1 and 2.  See tree.def for details.  */
182
183 char **tree_code_type;
184
185 /* Table indexed by tree code giving number of expression
186    operands beyond the fixed part of the node structure.
187    Not used for types or decls.  */
188
189 int *tree_code_length;
190
191 /* Table indexed by tree code giving name of tree code, as a string.  */
192
193 char **tree_code_name;
194
195 /* Statistics-gathering stuff.  */
196 typedef enum
197 {
198   d_kind,
199   t_kind,
200   b_kind,
201   s_kind,
202   r_kind,
203   e_kind,
204   c_kind,
205   id_kind,
206   op_id_kind,
207   perm_list_kind,
208   temp_list_kind,
209   vec_kind,
210   x_kind,
211   lang_decl,
212   lang_type,
213   all_kinds
214 } tree_node_kind;
215
216 int tree_node_counts[(int)all_kinds];
217 int tree_node_sizes[(int)all_kinds];
218 int id_string_size = 0;
219
220 char *tree_node_kind_names[] = {
221   "decls",
222   "types",
223   "blocks",
224   "stmts",
225   "refs",
226   "exprs",
227   "constants",
228   "identifiers",
229   "op_identifiers",
230   "perm_tree_lists",
231   "temp_tree_lists",
232   "vecs",
233   "random kinds",
234   "lang_decl kinds",
235   "lang_type kinds"
236 };
237
238 /* Hash table for uniquizing IDENTIFIER_NODEs by name.  */
239
240 #define MAX_HASH_TABLE 1009
241 static tree hash_table[MAX_HASH_TABLE]; /* id hash buckets */
242
243 /* 0 while creating built-in identifiers.  */
244 static int do_identifier_warnings;
245
246 /* Unique id for next decl created.  */
247 static int next_decl_uid;
248
249 extern char *mode_name[];
250
251 void gcc_obstack_init ();
252 static tree stabilize_reference_1 ();
253 \f
254 /* Init the principal obstacks.  */
255
256 void
257 init_obstacks ()
258 {
259   gcc_obstack_init (&obstack_stack_obstack);
260   gcc_obstack_init (&permanent_obstack);
261
262   gcc_obstack_init (&temporary_obstack);
263   temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
264   gcc_obstack_init (&momentary_obstack);
265   momentary_firstobj = (char *) obstack_alloc (&momentary_obstack, 0);
266   gcc_obstack_init (&maybepermanent_obstack);
267   maybepermanent_firstobj
268     = (char *) obstack_alloc (&maybepermanent_obstack, 0);
269   gcc_obstack_init (&temp_decl_obstack);
270   temp_decl_firstobj = (char *) obstack_alloc (&temp_decl_obstack, 0);
271
272   function_obstack = &temporary_obstack;
273   function_maybepermanent_obstack = &maybepermanent_obstack;
274   current_obstack = &permanent_obstack;
275   expression_obstack = &permanent_obstack;
276   rtl_obstack = saveable_obstack = &permanent_obstack;
277
278   /* Init the hash table of identifiers.  */
279   bzero (hash_table, sizeof hash_table);
280 }
281
282 void
283 gcc_obstack_init (obstack)
284      struct obstack *obstack;
285 {
286   /* Let particular systems override the size of a chunk.  */
287 #ifndef OBSTACK_CHUNK_SIZE
288 #define OBSTACK_CHUNK_SIZE 0
289 #endif
290   /* Let them override the alloc and free routines too.  */
291 #ifndef OBSTACK_CHUNK_ALLOC
292 #define OBSTACK_CHUNK_ALLOC xmalloc
293 #endif
294 #ifndef OBSTACK_CHUNK_FREE
295 #define OBSTACK_CHUNK_FREE free
296 #endif
297   _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0,
298                   (void *(*) ()) OBSTACK_CHUNK_ALLOC,
299                   (void (*) ()) OBSTACK_CHUNK_FREE);
300 }
301
302 /* Save all variables describing the current status into the structure *P.
303    This is used before starting a nested function.  */
304
305 void
306 save_tree_status (p)
307      struct function *p;
308 {
309   p->all_types_permanent = all_types_permanent;
310   p->momentary_stack = momentary_stack;
311   p->maybepermanent_firstobj = maybepermanent_firstobj;
312   p->momentary_firstobj = momentary_firstobj;
313   p->function_obstack = function_obstack;
314   p->function_maybepermanent_obstack = function_maybepermanent_obstack;
315   p->current_obstack = current_obstack;
316   p->expression_obstack = expression_obstack;
317   p->saveable_obstack = saveable_obstack;
318   p->rtl_obstack = rtl_obstack;
319
320   function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
321   gcc_obstack_init (function_obstack);
322
323   function_maybepermanent_obstack
324     = (struct obstack *) xmalloc (sizeof (struct obstack));
325   gcc_obstack_init (function_maybepermanent_obstack);
326
327   current_obstack = &permanent_obstack;
328   expression_obstack = &permanent_obstack;
329   rtl_obstack = saveable_obstack = &permanent_obstack;
330
331   momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
332   maybepermanent_firstobj
333     = (char *) obstack_finish (function_maybepermanent_obstack);
334 }
335
336 /* Restore all variables describing the current status from the structure *P.
337    This is used after a nested function.  */
338
339 void
340 restore_tree_status (p)
341      struct function *p;
342 {
343   all_types_permanent = p->all_types_permanent;
344   momentary_stack = p->momentary_stack;
345
346   obstack_free (&momentary_obstack, momentary_firstobj);
347   obstack_free (function_obstack, 0);
348   obstack_free (function_maybepermanent_obstack, 0);
349   free (function_obstack);
350
351   momentary_firstobj = p->momentary_firstobj;
352   maybepermanent_firstobj = p->maybepermanent_firstobj;
353   function_obstack = p->function_obstack;
354   function_maybepermanent_obstack = p->function_maybepermanent_obstack;
355   current_obstack = p->current_obstack;
356   expression_obstack = p->expression_obstack;
357   saveable_obstack = p->saveable_obstack;
358   rtl_obstack = p->rtl_obstack;
359 }
360 \f
361 /* Start allocating on the temporary (per function) obstack.
362    This is done in start_function before parsing the function body,
363    and before each initialization at top level, and to go back
364    to temporary allocation after doing end_temporary_allocation.  */
365
366 void
367 temporary_allocation ()
368 {
369   /* Note that function_obstack at top level points to temporary_obstack.
370      But within a nested function context, it is a separate obstack.  */
371   current_obstack = function_obstack;
372   expression_obstack = function_obstack;
373   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
374   momentary_stack = 0;
375 }
376
377 /* Start allocating on the permanent obstack but don't
378    free the temporary data.  After calling this, call
379    `permanent_allocation' to fully resume permanent allocation status.  */
380
381 void
382 end_temporary_allocation ()
383 {
384   current_obstack = &permanent_obstack;
385   expression_obstack = &permanent_obstack;
386   rtl_obstack = saveable_obstack = &permanent_obstack;
387 }
388
389 /* Resume allocating on the temporary obstack, undoing
390    effects of `end_temporary_allocation'.  */
391
392 void
393 resume_temporary_allocation ()
394 {
395   current_obstack = function_obstack;
396   expression_obstack = function_obstack;
397   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
398 }
399
400 /* While doing temporary allocation, switch to allocating in such a
401    way as to save all nodes if the function is inlined.  Call
402    resume_temporary_allocation to go back to ordinary temporary
403    allocation.  */
404
405 void
406 saveable_allocation ()
407 {
408   /* Note that function_obstack at top level points to temporary_obstack.
409      But within a nested function context, it is a separate obstack.  */
410   expression_obstack = current_obstack = saveable_obstack;
411 }
412
413 /* Switch to current obstack CURRENT and maybepermanent obstack SAVEABLE,
414    recording the previously current obstacks on a stack.
415    This does not free any storage in any obstack.  */
416
417 void
418 push_obstacks (current, saveable)
419      struct obstack *current, *saveable;
420 {
421   struct obstack_stack *p
422     = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
423                                               (sizeof (struct obstack_stack)));
424
425   p->current = current_obstack;
426   p->saveable = saveable_obstack;
427   p->expression = expression_obstack;
428   p->rtl = rtl_obstack;
429   p->next = obstack_stack;
430   obstack_stack = p;
431
432   current_obstack = current;
433   expression_obstack = current;
434   rtl_obstack = saveable_obstack = saveable;
435 }
436
437 /* Save the current set of obstacks, but don't change them.  */
438
439 void
440 push_obstacks_nochange ()
441 {
442   struct obstack_stack *p
443     = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
444                                               (sizeof (struct obstack_stack)));
445
446   p->current = current_obstack;
447   p->saveable = saveable_obstack;
448   p->expression = expression_obstack;
449   p->rtl = rtl_obstack;
450   p->next = obstack_stack;
451   obstack_stack = p;
452 }
453
454 /* Pop the obstack selection stack.  */
455
456 void
457 pop_obstacks ()
458 {
459   struct obstack_stack *p = obstack_stack;
460   obstack_stack = p->next;
461
462   current_obstack = p->current;
463   saveable_obstack = p->saveable;
464   expression_obstack = p->expression;
465   rtl_obstack = p->rtl;
466
467   obstack_free (&obstack_stack_obstack, p);
468 }
469
470 /* Nonzero if temporary allocation is currently in effect.
471    Zero if currently doing permanent allocation.  */
472
473 int
474 allocation_temporary_p ()
475 {
476   return current_obstack != &permanent_obstack;
477 }
478
479 /* Go back to allocating on the permanent obstack
480    and free everything in the temporary obstack.
481    This is done in finish_function after fully compiling a function.  */
482
483 void
484 permanent_allocation ()
485 {
486   /* Free up previous temporary obstack data */
487   obstack_free (&temporary_obstack, temporary_firstobj);
488   obstack_free (&momentary_obstack, momentary_firstobj);
489   obstack_free (&maybepermanent_obstack, maybepermanent_firstobj);
490   obstack_free (&temp_decl_obstack, temp_decl_firstobj);
491
492   current_obstack = &permanent_obstack;
493   expression_obstack = &permanent_obstack;
494   rtl_obstack = saveable_obstack = &permanent_obstack;
495 }
496
497 /* Save permanently everything on the maybepermanent_obstack.  */
498
499 void
500 preserve_data ()
501 {
502   maybepermanent_firstobj
503     = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
504 }
505
506 void
507 preserve_initializer ()
508 {
509   temporary_firstobj
510     = (char *) obstack_alloc (&temporary_obstack, 0);
511   momentary_firstobj
512     = (char *) obstack_alloc (&momentary_obstack, 0);
513   maybepermanent_firstobj
514     = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
515 }
516
517 /* Start allocating new rtl in current_obstack.
518    Use resume_temporary_allocation
519    to go back to allocating rtl in saveable_obstack.  */
520
521 void
522 rtl_in_current_obstack ()
523 {
524   rtl_obstack = current_obstack;
525 }
526
527 /* Temporarily allocate rtl from saveable_obstack.  Return 1 if we were
528    previously allocating it from current_obstack.  */
529
530 int
531 rtl_in_saveable_obstack ()
532 {
533   if (rtl_obstack == current_obstack)
534     {
535       rtl_obstack = saveable_obstack;
536       return 1;
537     }
538   else
539     return 0;
540 }
541 \f
542 /* Allocate SIZE bytes in the current obstack
543    and return a pointer to them.
544    In practice the current obstack is always the temporary one.  */
545
546 char *
547 oballoc (size)
548      int size;
549 {
550   return (char *) obstack_alloc (current_obstack, size);
551 }
552
553 /* Free the object PTR in the current obstack
554    as well as everything allocated since PTR.
555    In practice the current obstack is always the temporary one.  */
556
557 void
558 obfree (ptr)
559      char *ptr;
560 {
561   obstack_free (current_obstack, ptr);
562 }
563
564 /* Allocate SIZE bytes in the permanent obstack
565    and return a pointer to them.  */
566
567 char *
568 permalloc (size)
569      int size;
570 {
571   return (char *) obstack_alloc (&permanent_obstack, size);
572 }
573
574 /* Allocate NELEM items of SIZE bytes in the permanent obstack
575    and return a pointer to them.  The storage is cleared before
576    returning the value.  */
577
578 char *
579 perm_calloc (nelem, size)
580      int nelem;
581      long size;
582 {
583   char *rval = (char *) obstack_alloc (&permanent_obstack, nelem * size);
584   bzero (rval, nelem * size);
585   return rval;
586 }
587
588 /* Allocate SIZE bytes in the saveable obstack
589    and return a pointer to them.  */
590
591 char *
592 savealloc (size)
593      int size;
594 {
595   return (char *) obstack_alloc (saveable_obstack, size);
596 }
597 \f
598 /* Print out which obstack an object is in.  */
599
600 void
601 debug_obstack (object)
602      char *object;
603 {
604   struct obstack *obstack = NULL;
605   char *obstack_name = NULL;
606   struct function *p;
607
608   for (p = outer_function_chain; p; p = p->next)
609     {
610       if (_obstack_allocated_p (p->function_obstack, object))
611         {
612           obstack = p->function_obstack;
613           obstack_name = "containing function obstack";
614         }
615       if (_obstack_allocated_p (p->function_maybepermanent_obstack, object))
616         {
617           obstack = p->function_maybepermanent_obstack;
618           obstack_name = "containing function maybepermanent obstack";
619         }
620     }
621
622   if (_obstack_allocated_p (&obstack_stack_obstack, object))
623     {
624       obstack = &obstack_stack_obstack;
625       obstack_name = "obstack_stack_obstack";
626     }
627   else if (_obstack_allocated_p (function_obstack, object))
628     {
629       obstack = function_obstack;
630       obstack_name = "function obstack";
631     }
632   else if (_obstack_allocated_p (&permanent_obstack, object))
633     {
634       obstack = &permanent_obstack;
635       obstack_name = "permanent_obstack";
636     }
637   else if (_obstack_allocated_p (&momentary_obstack, object))
638     {
639       obstack = &momentary_obstack;
640       obstack_name = "momentary_obstack";
641     }
642   else if (_obstack_allocated_p (function_maybepermanent_obstack, object))
643     {
644       obstack = function_maybepermanent_obstack;
645       obstack_name = "function maybepermanent obstack";
646     }
647   else if (_obstack_allocated_p (&temp_decl_obstack, object))
648     {
649       obstack = &temp_decl_obstack;
650       obstack_name = "temp_decl_obstack";
651     }
652
653   /* Check to see if the object is in the free area of the obstack. */
654   if (obstack != NULL)
655     {
656       if (object >= obstack->next_free
657           && object < obstack->chunk_limit)
658         fprintf (stderr, "object in free portion of obstack %s.\n",
659                  obstack_name);
660       else
661         fprintf (stderr, "object allocated from %s.\n", obstack_name);
662     }
663   else
664     fprintf (stderr, "object not allocated from any obstack.\n");
665 }
666
667 /* Return 1 if OBJ is in the permanent obstack.
668    This is slow, and should be used only for debugging.
669    Use TREE_PERMANENT for other purposes.  */
670
671 int
672 object_permanent_p (obj)
673      tree obj;
674 {
675   return _obstack_allocated_p (&permanent_obstack, obj);
676 }
677 \f
678 /* Start a level of momentary allocation.
679    In C, each compound statement has its own level
680    and that level is freed at the end of each statement.
681    All expression nodes are allocated in the momentary allocation level.  */
682
683 void
684 push_momentary ()
685 {
686   struct momentary_level *tem
687     = (struct momentary_level *) obstack_alloc (&momentary_obstack,
688                                                 sizeof (struct momentary_level));
689   tem->prev = momentary_stack;
690   tem->base = (char *) obstack_base (&momentary_obstack);
691   tem->obstack = expression_obstack;
692   momentary_stack = tem;
693   expression_obstack = &momentary_obstack;
694 }
695
696 /* Free all the storage in the current momentary-allocation level.
697    In C, this happens at the end of each statement.  */
698
699 void
700 clear_momentary ()
701 {
702   obstack_free (&momentary_obstack, momentary_stack->base);
703 }
704
705 /* Discard a level of momentary allocation.
706    In C, this happens at the end of each compound statement.
707    Restore the status of expression node allocation
708    that was in effect before this level was created.  */
709
710 void
711 pop_momentary ()
712 {
713   struct momentary_level *tem = momentary_stack;
714   momentary_stack = tem->prev;
715   expression_obstack = tem->obstack;
716   obstack_free (&momentary_obstack, tem);
717 }
718
719 /* Call when starting to parse a declaration:
720    make expressions in the declaration last the length of the function.
721    Returns an argument that should be passed to resume_momentary later.  */
722
723 int
724 suspend_momentary ()
725 {
726   register int tem = expression_obstack == &momentary_obstack;
727   expression_obstack = saveable_obstack;
728   return tem;
729 }
730
731 /* Call when finished parsing a declaration:
732    restore the treatment of node-allocation that was
733    in effect before the suspension.
734    YES should be the value previously returned by suspend_momentary.  */
735
736 void
737 resume_momentary (yes)
738      int yes;
739 {
740   if (yes)
741     expression_obstack = &momentary_obstack;
742 }
743 \f
744 /* Init the tables indexed by tree code.
745    Note that languages can add to these tables to define their own codes.  */
746
747 void
748 init_tree_codes ()
749 {
750   tree_code_type = (char **) xmalloc (sizeof (standard_tree_code_type));
751   tree_code_length = (int *) xmalloc (sizeof (standard_tree_code_length));
752   tree_code_name = (char **) xmalloc (sizeof (standard_tree_code_name));
753   bcopy (standard_tree_code_type, tree_code_type,
754          sizeof (standard_tree_code_type));
755   bcopy (standard_tree_code_length, tree_code_length,
756          sizeof (standard_tree_code_length));
757   bcopy (standard_tree_code_name, tree_code_name,
758          sizeof (standard_tree_code_name));
759 }
760
761 /* Return a newly allocated node of code CODE.
762    Initialize the node's unique id and its TREE_PERMANENT flag.
763    For decl and type nodes, some other fields are initialized.
764    The rest of the node is initialized to zero.
765
766    Achoo!  I got a code in the node.  */
767
768 tree
769 make_node (code)
770      enum tree_code code;
771 {
772   register tree t;
773   register int type = TREE_CODE_CLASS (code);
774   register int length;
775   register struct obstack *obstack = current_obstack;
776   register int i;
777   register tree_node_kind kind;
778
779   switch (type)
780     {
781     case 'd':  /* A decl node */
782 #ifdef GATHER_STATISTICS
783       kind = d_kind;
784 #endif
785       length = sizeof (struct tree_decl);
786       /* All decls in an inline function need to be saved.  */
787       if (obstack != &permanent_obstack)
788         obstack = saveable_obstack;
789       /* PARM_DECLs always go on saveable_obstack, not permanent,
790          even though we may make them before the function turns
791          on temporary allocation.  */
792       else if (code == PARM_DECL)
793         obstack = function_maybepermanent_obstack;
794       break;
795
796     case 't':  /* a type node */
797 #ifdef GATHER_STATISTICS
798       kind = t_kind;
799 #endif
800       length = sizeof (struct tree_type);
801       /* All data types are put where we can preserve them if nec.  */
802       if (obstack != &permanent_obstack)
803         obstack = all_types_permanent ? &permanent_obstack : saveable_obstack;
804       break;
805
806     case 'b':  /* a lexical block */
807 #ifdef GATHER_STATISTICS
808       kind = b_kind;
809 #endif
810       length = sizeof (struct tree_block);
811       /* All BLOCK nodes are put where we can preserve them if nec.  */
812       if (obstack != &permanent_obstack)
813         obstack = saveable_obstack;
814       break;
815
816     case 's':  /* an expression with side effects */
817 #ifdef GATHER_STATISTICS
818       kind = s_kind;
819       goto usual_kind;
820 #endif
821     case 'r':  /* a reference */
822 #ifdef GATHER_STATISTICS
823       kind = r_kind;
824       goto usual_kind;
825 #endif
826     case 'e':  /* an expression */
827     case '<':  /* a comparison expression */
828     case '1':  /* a unary arithmetic expression */
829     case '2':  /* a binary arithmetic expression */
830 #ifdef GATHER_STATISTICS
831       kind = e_kind;
832     usual_kind:
833 #endif
834       obstack = expression_obstack;
835       /* All BIND_EXPR nodes are put where we can preserve them if nec.  */
836       if (code == BIND_EXPR && obstack != &permanent_obstack)
837         obstack = saveable_obstack;
838       length = sizeof (struct tree_exp)
839         + (tree_code_length[(int) code] - 1) * sizeof (char *);
840       break;
841
842     case 'c':  /* a constant */
843 #ifdef GATHER_STATISTICS
844       kind = c_kind;
845 #endif
846       obstack = expression_obstack;
847       /* We can't use tree_code_length for this, since the number of words
848          is machine-dependent due to varying alignment of `double'.  */
849       if (code == REAL_CST)
850         {
851           length = sizeof (struct tree_real_cst);
852           break;
853         }
854
855     case 'x':  /* something random, like an identifier.  */
856 #ifdef GATHER_STATISTICS
857       if (code == IDENTIFIER_NODE)
858         kind = id_kind;
859       else if (code == OP_IDENTIFIER)
860         kind = op_id_kind;
861       else if (code == TREE_VEC)
862         kind = vec_kind;
863       else
864         kind = x_kind;
865 #endif
866       length = sizeof (struct tree_common)
867         + tree_code_length[(int) code] * sizeof (char *);
868       /* Identifier nodes are always permanent since they are
869          unique in a compiler run.  */
870       if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
871     }
872
873   t = (tree) obstack_alloc (obstack, length);
874
875 #ifdef GATHER_STATISTICS
876   tree_node_counts[(int)kind]++;
877   tree_node_sizes[(int)kind] += length;
878 #endif
879
880   /* We assume here that the length of a tree node is a multiple of the
881      size of an int.  Rounding up won't work because it would clobber
882      the next object.  */
883   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
884     ((int *) t)[i] = 0;
885
886   TREE_SET_CODE (t, code);
887   if (obstack == &permanent_obstack)
888     TREE_PERMANENT (t) = 1;
889
890   switch (type)
891     {
892     case 's':
893       TREE_SIDE_EFFECTS (t) = 1;
894       TREE_TYPE (t) = void_type_node;
895       break;
896
897     case 'd':
898       if (code != FUNCTION_DECL)
899       DECL_IN_SYSTEM_HEADER (t)
900         = in_system_header && (obstack == &permanent_obstack);
901       DECL_ALIGN (t) = 1;
902       DECL_SOURCE_LINE (t) = lineno;
903       DECL_SOURCE_FILE (t) = (input_filename) ? input_filename : "<built-in>";
904       DECL_UID (t) = next_decl_uid++;
905       break;
906
907     case 't':
908       {
909         static unsigned next_type_uid = 1;
910
911         TYPE_UID (t) = next_type_uid++;
912       }
913       TYPE_ALIGN (t) = 1;
914       TYPE_MAIN_VARIANT (t) = t;
915       break;
916
917     case 'c':
918       TREE_CONSTANT (t) = 1;
919       break;
920     }
921
922   return t;
923 }
924 \f
925 /* Return a new node with the same contents as NODE
926    except that its TREE_CHAIN is zero and it has a fresh uid.  */
927
928 tree
929 copy_node (node)
930      tree node;
931 {
932   register tree t;
933   register enum tree_code code = TREE_CODE (node);
934   register int length;
935   register int i;
936
937   switch (TREE_CODE_CLASS (code))
938     {
939     case 'd':  /* A decl node */
940       length = sizeof (struct tree_decl);
941       break;
942
943     case 't':  /* a type node */
944       length = sizeof (struct tree_type);
945       break;
946
947     case 'b':  /* a lexical block node */
948       length = sizeof (struct tree_block);
949       break;
950
951     case 'r':  /* a reference */
952     case 'e':  /* an expression */
953     case 's':  /* an expression with side effects */
954     case '<':  /* a comparison expression */
955     case '1':  /* a unary arithmetic expression */
956     case '2':  /* a binary arithmetic expression */
957       length = sizeof (struct tree_exp)
958         + (tree_code_length[(int) code] - 1) * sizeof (char *);
959       break;
960
961     case 'c':  /* a constant */
962       /* We can't use tree_code_length for this, since the number of words
963          is machine-dependent due to varying alignment of `double'.  */
964       if (code == REAL_CST)
965         {
966           length = sizeof (struct tree_real_cst);
967           break;
968         }
969
970     case 'x':  /* something random, like an identifier.  */
971       length = sizeof (struct tree_common)
972         + tree_code_length[(int) code] * sizeof (char *);
973       if (code == TREE_VEC)
974         length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
975     }
976
977   t = (tree) obstack_alloc (current_obstack, length);
978
979   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
980     ((int *) t)[i] = ((int *) node)[i];
981
982   TREE_CHAIN (t) = 0;
983
984   TREE_PERMANENT (t) = (current_obstack == &permanent_obstack);
985
986   return t;
987 }
988
989 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
990    For example, this can copy a list made of TREE_LIST nodes.  */
991
992 tree
993 copy_list (list)
994      tree list;
995 {
996   tree head;
997   register tree prev, next;
998
999   if (list == 0)
1000     return 0;
1001
1002   head = prev = copy_node (list);
1003   next = TREE_CHAIN (list);
1004   while (next)
1005     {
1006       TREE_CHAIN (prev) = copy_node (next);
1007       prev = TREE_CHAIN (prev);
1008       next = TREE_CHAIN (next);
1009     }
1010   return head;
1011 }
1012 \f
1013 #define HASHBITS 30
1014
1015 /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string).
1016    If an identifier with that name has previously been referred to,
1017    the same node is returned this time.  */
1018
1019 tree
1020 get_identifier (text)
1021      register char *text;
1022 {
1023   register int hi;
1024   register int i;
1025   register tree idp;
1026   register int len, hash_len;
1027
1028   /* Compute length of text in len.  */
1029   for (len = 0; text[len]; len++);
1030
1031   /* Decide how much of that length to hash on */
1032   hash_len = len;
1033   if (warn_id_clash && len > id_clash_len)
1034     hash_len = id_clash_len;
1035
1036   /* Compute hash code */
1037   hi = hash_len * 613 + (unsigned)text[0];
1038   for (i = 1; i < hash_len; i += 2)
1039     hi = ((hi * 613) + (unsigned)(text[i]));
1040
1041   hi &= (1 << HASHBITS) - 1;
1042   hi %= MAX_HASH_TABLE;
1043   
1044   /* Search table for identifier */
1045   for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1046     if (IDENTIFIER_LENGTH (idp) == len
1047         && IDENTIFIER_POINTER (idp)[0] == text[0]
1048         && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1049       return idp;               /* <-- return if found */
1050
1051   /* Not found; optionally warn about a similar identifier */
1052   if (warn_id_clash && do_identifier_warnings && len >= id_clash_len)
1053     for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1054       if (!strncmp (IDENTIFIER_POINTER (idp), text, id_clash_len))
1055         {
1056           warning ("`%s' and `%s' identical in first %d characters",
1057                    IDENTIFIER_POINTER (idp), text, id_clash_len);
1058           break;
1059         }
1060
1061   if (tree_code_length[(int) IDENTIFIER_NODE] < 0)
1062     abort ();                   /* set_identifier_size hasn't been called.  */
1063
1064   /* Not found, create one, add to chain */
1065   idp = make_node (IDENTIFIER_NODE);
1066   IDENTIFIER_LENGTH (idp) = len;
1067 #ifdef GATHER_STATISTICS
1068   id_string_size += len;
1069 #endif
1070
1071   IDENTIFIER_POINTER (idp) = obstack_copy0 (&permanent_obstack, text, len);
1072
1073   TREE_CHAIN (idp) = hash_table[hi];
1074   hash_table[hi] = idp;
1075   return idp;                   /* <-- return if created */
1076 }
1077
1078 /* Enable warnings on similar identifiers (if requested).
1079    Done after the built-in identifiers are created.  */
1080
1081 void
1082 start_identifier_warnings ()
1083 {
1084   do_identifier_warnings = 1;
1085 }
1086
1087 /* Record the size of an identifier node for the language in use.
1088    SIZE is the total size in bytes.
1089    This is called by the language-specific files.  This must be
1090    called before allocating any identifiers.  */
1091
1092 void
1093 set_identifier_size (size)
1094      int size;
1095 {
1096   tree_code_length[(int) IDENTIFIER_NODE]
1097     = (size - sizeof (struct tree_common)) / sizeof (tree);
1098 }
1099 \f
1100 /* Return a newly constructed INTEGER_CST node whose constant value
1101    is specified by the two ints LOW and HI.
1102    The TREE_TYPE is set to `int'. 
1103
1104    This function should be used via the `build_int_2' macro.  */
1105
1106 tree
1107 build_int_2_wide (low, hi)
1108      HOST_WIDE_INT low, hi;
1109 {
1110   register tree t = make_node (INTEGER_CST);
1111   TREE_INT_CST_LOW (t) = low;
1112   TREE_INT_CST_HIGH (t) = hi;
1113   TREE_TYPE (t) = integer_type_node;
1114   return t;
1115 }
1116
1117 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1118
1119 tree
1120 build_real (type, d)
1121      tree type;
1122      REAL_VALUE_TYPE d;
1123 {
1124   tree v;
1125
1126   /* Check for valid float value for this type on this target machine;
1127      if not, can print error message and store a valid value in D.  */
1128 #ifdef CHECK_FLOAT_VALUE
1129   CHECK_FLOAT_VALUE (TYPE_MODE (type), d);
1130 #endif
1131
1132   v = make_node (REAL_CST);
1133   TREE_TYPE (v) = type;
1134   TREE_REAL_CST (v) = d;
1135   return v;
1136 }
1137
1138 /* Return a new REAL_CST node whose type is TYPE
1139    and whose value is the integer value of the INTEGER_CST node I.  */
1140
1141 #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
1142
1143 REAL_VALUE_TYPE
1144 real_value_from_int_cst (i)
1145      tree i;
1146 {
1147   REAL_VALUE_TYPE d;
1148 #ifdef REAL_ARITHMETIC
1149   REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i));
1150 #else /* not REAL_ARITHMETIC */
1151   if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
1152     {
1153       d = (double) (~ TREE_INT_CST_HIGH (i));
1154       d *= ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1155             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1156       d += (double) (unsigned HOST_WIDE_INT) (~ TREE_INT_CST_LOW (i));
1157       d = (- d - 1.0);
1158     }
1159   else
1160     {
1161       d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
1162       d *= ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1163             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1164       d += (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (i);
1165     }
1166 #endif /* not REAL_ARITHMETIC */
1167   return d;
1168 }
1169
1170 /* This function can't be implemented if we can't do arithmetic
1171    on the float representation.  */
1172
1173 tree
1174 build_real_from_int_cst (type, i)
1175      tree type;
1176      tree i;
1177 {
1178   tree v;
1179   REAL_VALUE_TYPE d;
1180
1181   v = make_node (REAL_CST);
1182   TREE_TYPE (v) = type;
1183
1184   d = REAL_VALUE_TRUNCATE (TYPE_MODE (type), real_value_from_int_cst (i));
1185   /* Check for valid float value for this type on this target machine;
1186      if not, can print error message and store a valid value in D.  */
1187 #ifdef CHECK_FLOAT_VALUE
1188   CHECK_FLOAT_VALUE (TYPE_MODE (type), d);
1189 #endif
1190
1191   TREE_REAL_CST (v) = d;
1192   return v;
1193 }
1194
1195 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1196
1197 /* Return a newly constructed STRING_CST node whose value is
1198    the LEN characters at STR.
1199    The TREE_TYPE is not initialized.  */
1200
1201 tree
1202 build_string (len, str)
1203      int len;
1204      char *str;
1205 {
1206   register tree s = make_node (STRING_CST);
1207   TREE_STRING_LENGTH (s) = len;
1208   TREE_STRING_POINTER (s) = obstack_copy0 (saveable_obstack, str, len);
1209   return s;
1210 }
1211
1212 /* Return a newly constructed COMPLEX_CST node whose value is
1213    specified by the real and imaginary parts REAL and IMAG.
1214    Both REAL and IMAG should be constant nodes.
1215    The TREE_TYPE is not initialized.  */
1216
1217 tree
1218 build_complex (real, imag)
1219      tree real, imag;
1220 {
1221   register tree t = make_node (COMPLEX_CST);
1222   TREE_REALPART (t) = real;
1223   TREE_IMAGPART (t) = imag;
1224   return t;
1225 }
1226
1227 /* Build a newly constructed TREE_VEC node of length LEN.  */
1228 tree
1229 make_tree_vec (len)
1230      int len;
1231 {
1232   register tree t;
1233   register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec);
1234   register struct obstack *obstack = current_obstack;
1235   register int i;
1236
1237 #ifdef GATHER_STATISTICS
1238   tree_node_counts[(int)vec_kind]++;
1239   tree_node_sizes[(int)vec_kind] += length;
1240 #endif
1241
1242   t = (tree) obstack_alloc (obstack, length);
1243
1244   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
1245     ((int *) t)[i] = 0;
1246
1247   TREE_SET_CODE (t, TREE_VEC);
1248   TREE_VEC_LENGTH (t) = len;
1249   if (obstack == &permanent_obstack)
1250     TREE_PERMANENT (t) = 1;
1251
1252   return t;
1253 }
1254 \f
1255 /* Return 1 if EXPR is the integer constant zero.  */
1256
1257 int
1258 integer_zerop (expr)
1259      tree expr;
1260 {
1261   STRIP_NOPS (expr);
1262
1263   return (TREE_CODE (expr) == INTEGER_CST
1264           && TREE_INT_CST_LOW (expr) == 0
1265           && TREE_INT_CST_HIGH (expr) == 0);
1266 }
1267
1268 /* Return 1 if EXPR is the integer constant one.  */
1269
1270 int
1271 integer_onep (expr)
1272      tree expr;
1273 {
1274   STRIP_NOPS (expr);
1275
1276   return (TREE_CODE (expr) == INTEGER_CST
1277           && TREE_INT_CST_LOW (expr) == 1
1278           && TREE_INT_CST_HIGH (expr) == 0);
1279 }
1280
1281 /* Return 1 if EXPR is an integer containing all 1's
1282    in as much precision as it contains.  */
1283
1284 int
1285 integer_all_onesp (expr)
1286      tree expr;
1287 {
1288   register int prec;
1289   register int uns;
1290
1291   STRIP_NOPS (expr);
1292
1293   if (TREE_CODE (expr) != INTEGER_CST)
1294     return 0;
1295
1296   uns = TREE_UNSIGNED (TREE_TYPE (expr));
1297   if (!uns)
1298     return TREE_INT_CST_LOW (expr) == -1 && TREE_INT_CST_HIGH (expr) == -1;
1299
1300   prec = TYPE_PRECISION (TREE_TYPE (expr));
1301   if (prec >= HOST_BITS_PER_WIDE_INT)
1302     {
1303       int high_value, shift_amount;
1304
1305       shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1306
1307       if (shift_amount > HOST_BITS_PER_WIDE_INT)
1308         /* Can not handle precisions greater than twice the host int size.  */
1309         abort ();
1310       else if (shift_amount == HOST_BITS_PER_WIDE_INT)
1311         /* Shifting by the host word size is undefined according to the ANSI
1312            standard, so we must handle this as a special case.  */
1313         high_value = -1;
1314       else
1315         high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1316
1317       return TREE_INT_CST_LOW (expr) == -1
1318         && TREE_INT_CST_HIGH (expr) == high_value;
1319     }
1320   else
1321     return TREE_INT_CST_LOW (expr) == ((HOST_WIDE_INT) 1 << prec) - 1;
1322 }
1323
1324 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1325    one bit on).  */
1326
1327 int
1328 integer_pow2p (expr)
1329      tree expr;
1330 {
1331   HOST_WIDE_INT high, low;
1332
1333   STRIP_NOPS (expr);
1334
1335   if (TREE_CODE (expr) != INTEGER_CST)
1336     return 0;
1337
1338   high = TREE_INT_CST_HIGH (expr);
1339   low = TREE_INT_CST_LOW (expr);
1340
1341   if (high == 0 && low == 0)
1342     return 0;
1343
1344   return ((high == 0 && (low & (low - 1)) == 0)
1345           || (low == 0 && (high & (high - 1)) == 0));
1346 }
1347
1348 /* Return 1 if EXPR is the real constant zero.  */
1349
1350 int
1351 real_zerop (expr)
1352      tree expr;
1353 {
1354   STRIP_NOPS (expr);
1355
1356   return (TREE_CODE (expr) == REAL_CST
1357           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0));
1358 }
1359
1360 /* Return 1 if EXPR is the real constant one.  */
1361
1362 int
1363 real_onep (expr)
1364      tree expr;
1365 {
1366   STRIP_NOPS (expr);
1367
1368   return (TREE_CODE (expr) == REAL_CST
1369           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1));
1370 }
1371
1372 /* Return 1 if EXPR is the real constant two.  */
1373
1374 int
1375 real_twop (expr)
1376      tree expr;
1377 {
1378   STRIP_NOPS (expr);
1379
1380   return (TREE_CODE (expr) == REAL_CST
1381           && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2));
1382 }
1383
1384 /* Nonzero if EXP is a constant or a cast of a constant.  */
1385  
1386 int
1387 really_constant_p (exp)
1388      tree exp;
1389 {
1390   /* This is not quite the same as STRIP_NOPS.  It does more.  */
1391   while (TREE_CODE (exp) == NOP_EXPR
1392          || TREE_CODE (exp) == CONVERT_EXPR
1393          || TREE_CODE (exp) == NON_LVALUE_EXPR)
1394     exp = TREE_OPERAND (exp, 0);
1395   return TREE_CONSTANT (exp);
1396 }
1397 \f
1398 /* Return first list element whose TREE_VALUE is ELEM.
1399    Return 0 if ELEM is not it LIST.  */
1400
1401 tree
1402 value_member (elem, list)
1403      tree elem, list;
1404 {
1405   while (list)
1406     {
1407       if (elem == TREE_VALUE (list))
1408         return list;
1409       list = TREE_CHAIN (list);
1410     }
1411   return NULL_TREE;
1412 }
1413
1414 /* Return first list element whose TREE_PURPOSE is ELEM.
1415    Return 0 if ELEM is not it LIST.  */
1416
1417 tree
1418 purpose_member (elem, list)
1419      tree elem, list;
1420 {
1421   while (list)
1422     {
1423       if (elem == TREE_PURPOSE (list))
1424         return list;
1425       list = TREE_CHAIN (list);
1426     }
1427   return NULL_TREE;
1428 }
1429
1430 /* Return first list element whose BINFO_TYPE is ELEM.
1431    Return 0 if ELEM is not it LIST.  */
1432
1433 tree
1434 binfo_member (elem, list)
1435      tree elem, list;
1436 {
1437   while (list)
1438     {
1439       if (elem == BINFO_TYPE (list))
1440         return list;
1441       list = TREE_CHAIN (list);
1442     }
1443   return NULL_TREE;
1444 }
1445
1446 /* Return nonzero if ELEM is part of the chain CHAIN.  */
1447
1448 int
1449 chain_member (elem, chain)
1450      tree elem, chain;
1451 {
1452   while (chain)
1453     {
1454       if (elem == chain)
1455         return 1;
1456       chain = TREE_CHAIN (chain);
1457     }
1458
1459   return 0;
1460 }
1461
1462 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1463    We expect a null pointer to mark the end of the chain.
1464    This is the Lisp primitive `length'.  */
1465
1466 int
1467 list_length (t)
1468      tree t;
1469 {
1470   register tree tail;
1471   register int len = 0;
1472
1473   for (tail = t; tail; tail = TREE_CHAIN (tail))
1474     len++;
1475
1476   return len;
1477 }
1478
1479 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1480    by modifying the last node in chain 1 to point to chain 2.
1481    This is the Lisp primitive `nconc'.  */
1482
1483 tree
1484 chainon (op1, op2)
1485      tree op1, op2;
1486 {
1487   tree t;
1488
1489   if (op1)
1490     {
1491       for (t = op1; TREE_CHAIN (t); t = TREE_CHAIN (t))
1492         if (t == op2) abort (); /* Circularity being created */
1493       if (t == op2) abort ();   /* Circularity being created */
1494       TREE_CHAIN (t) = op2;
1495       return op1;
1496     }
1497   else return op2;
1498 }
1499
1500 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
1501
1502 tree
1503 tree_last (chain)
1504      register tree chain;
1505 {
1506   register tree next;
1507   if (chain)
1508     while (next = TREE_CHAIN (chain))
1509       chain = next;
1510   return chain;
1511 }
1512
1513 /* Reverse the order of elements in the chain T,
1514    and return the new head of the chain (old last element).  */
1515
1516 tree
1517 nreverse (t)
1518      tree t;
1519 {
1520   register tree prev = 0, decl, next;
1521   for (decl = t; decl; decl = next)
1522     {
1523       next = TREE_CHAIN (decl);
1524       TREE_CHAIN (decl) = prev;
1525       prev = decl;
1526     }
1527   return prev;
1528 }
1529
1530 /* Given a chain CHAIN of tree nodes,
1531    construct and return a list of those nodes.  */
1532
1533 tree
1534 listify (chain)
1535      tree chain;
1536 {
1537   tree result = NULL_TREE;
1538   tree in_tail = chain;
1539   tree out_tail = NULL_TREE;
1540
1541   while (in_tail)
1542     {
1543       tree next = tree_cons (NULL_TREE, in_tail, NULL_TREE);
1544       if (out_tail)
1545         TREE_CHAIN (out_tail) = next;
1546       else
1547         result = next;
1548       out_tail = next;
1549       in_tail = TREE_CHAIN (in_tail);
1550     }
1551
1552   return result;
1553 }
1554 \f
1555 /* Return a newly created TREE_LIST node whose
1556    purpose and value fields are PARM and VALUE.  */
1557
1558 tree
1559 build_tree_list (parm, value)
1560      tree parm, value;
1561 {
1562   register tree t = make_node (TREE_LIST);
1563   TREE_PURPOSE (t) = parm;
1564   TREE_VALUE (t) = value;
1565   return t;
1566 }
1567
1568 /* Similar, but build on the temp_decl_obstack.  */
1569
1570 tree
1571 build_decl_list (parm, value)
1572      tree parm, value;
1573 {
1574   register tree node;
1575   register struct obstack *ambient_obstack = current_obstack;
1576   current_obstack = &temp_decl_obstack;
1577   node = build_tree_list (parm, value);
1578   current_obstack = ambient_obstack;
1579   return node;
1580 }
1581
1582 /* Return a newly created TREE_LIST node whose
1583    purpose and value fields are PARM and VALUE
1584    and whose TREE_CHAIN is CHAIN.  */
1585
1586 tree
1587 tree_cons (purpose, value, chain)
1588      tree purpose, value, chain;
1589 {
1590 #if 0
1591   register tree node = make_node (TREE_LIST);
1592 #else
1593   register int i;
1594   register tree node = (tree) obstack_alloc (current_obstack, sizeof (struct tree_list));
1595 #ifdef GATHER_STATISTICS
1596   tree_node_counts[(int)x_kind]++;
1597   tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
1598 #endif
1599
1600   for (i = (sizeof (struct tree_common) / sizeof (int)) - 1; i >= 0; i--)
1601     ((int *) node)[i] = 0;
1602
1603   TREE_SET_CODE (node, TREE_LIST);
1604   if (current_obstack == &permanent_obstack)
1605     TREE_PERMANENT (node) = 1;
1606 #endif
1607
1608   TREE_CHAIN (node) = chain;
1609   TREE_PURPOSE (node) = purpose;
1610   TREE_VALUE (node) = value;
1611   return node;
1612 }
1613
1614 /* Similar, but build on the temp_decl_obstack.  */
1615
1616 tree
1617 decl_tree_cons (purpose, value, chain)
1618      tree purpose, value, chain;
1619 {
1620   register tree node;
1621   register struct obstack *ambient_obstack = current_obstack;
1622   current_obstack = &temp_decl_obstack;
1623   node = tree_cons (purpose, value, chain);
1624   current_obstack = ambient_obstack;
1625   return node;
1626 }
1627
1628 /* Same as `tree_cons' but make a permanent object.  */
1629
1630 tree
1631 perm_tree_cons (purpose, value, chain)
1632      tree purpose, value, chain;
1633 {
1634   register tree node;
1635   register struct obstack *ambient_obstack = current_obstack;
1636   current_obstack = &permanent_obstack;
1637
1638   node = tree_cons (purpose, value, chain);
1639   current_obstack = ambient_obstack;
1640   return node;
1641 }
1642
1643 /* Same as `tree_cons', but make this node temporary, regardless.  */
1644
1645 tree
1646 temp_tree_cons (purpose, value, chain)
1647      tree purpose, value, chain;
1648 {
1649   register tree node;
1650   register struct obstack *ambient_obstack = current_obstack;
1651   current_obstack = &temporary_obstack;
1652
1653   node = tree_cons (purpose, value, chain);
1654   current_obstack = ambient_obstack;
1655   return node;
1656 }
1657
1658 /* Same as `tree_cons', but save this node if the function's RTL is saved.  */
1659
1660 tree
1661 saveable_tree_cons (purpose, value, chain)
1662      tree purpose, value, chain;
1663 {
1664   register tree node;
1665   register struct obstack *ambient_obstack = current_obstack;
1666   current_obstack = saveable_obstack;
1667
1668   node = tree_cons (purpose, value, chain);
1669   current_obstack = ambient_obstack;
1670   return node;
1671 }
1672 \f
1673 /* Return the size nominally occupied by an object of type TYPE
1674    when it resides in memory.  The value is measured in units of bytes,
1675    and its data type is that normally used for type sizes
1676    (which is the first type created by make_signed_type or
1677    make_unsigned_type).  */
1678
1679 tree
1680 size_in_bytes (type)
1681      tree type;
1682 {
1683   if (type == error_mark_node)
1684     return integer_zero_node;
1685   type = TYPE_MAIN_VARIANT (type);
1686   if (TYPE_SIZE (type) == 0)
1687     {
1688       incomplete_type_error (NULL_TREE, type);
1689       return integer_zero_node;
1690     }
1691   return size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
1692                      size_int (BITS_PER_UNIT));
1693 }
1694
1695 /* Return the size of TYPE (in bytes) as an integer,
1696    or return -1 if the size can vary.  */
1697
1698 int
1699 int_size_in_bytes (type)
1700      tree type;
1701 {
1702   int size;
1703   if (type == error_mark_node)
1704     return 0;
1705   type = TYPE_MAIN_VARIANT (type);
1706   if (TYPE_SIZE (type) == 0)
1707     return -1;
1708   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
1709     return -1;
1710   size = TREE_INT_CST_LOW (TYPE_SIZE (type));
1711   return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
1712 }
1713
1714 /* Return, as an INTEGER_CST node, the number of elements for
1715    TYPE (which is an ARRAY_TYPE) minus one. 
1716    This counts only elements of the top array.  */
1717
1718 tree
1719 array_type_nelts (type)
1720      tree type;
1721 {
1722   tree index_type = TYPE_DOMAIN (type);
1723   return (tree_int_cst_equal (TYPE_MIN_VALUE (index_type), integer_zero_node)
1724           ? TYPE_MAX_VALUE (index_type)
1725           : fold (build (MINUS_EXPR, integer_type_node,
1726                          TYPE_MAX_VALUE (index_type),
1727                          TYPE_MIN_VALUE (index_type))));
1728 }
1729 \f
1730 /* Return nonzero if arg is static -- a reference to an object in
1731    static storage.  This is not the same as the C meaning of `static'.  */
1732
1733 int
1734 staticp (arg)
1735      tree arg;
1736 {
1737   switch (TREE_CODE (arg))
1738     {
1739     case VAR_DECL:
1740     case FUNCTION_DECL:
1741     case CONSTRUCTOR:
1742       return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
1743
1744     case STRING_CST:
1745       return 1;
1746
1747     case COMPONENT_REF:
1748     case BIT_FIELD_REF:
1749       return staticp (TREE_OPERAND (arg, 0));
1750
1751     case INDIRECT_REF:
1752       return TREE_CONSTANT (TREE_OPERAND (arg, 0));
1753
1754     case ARRAY_REF:
1755       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
1756           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
1757         return staticp (TREE_OPERAND (arg, 0));
1758     }
1759
1760   return 0;
1761 }
1762 \f
1763 /* This should be applied to any node which may be used in more than one place,
1764    but must be evaluated only once.  Normally, the code generator would
1765    reevaluate the node each time; this forces it to compute it once and save
1766    the result.  This is done by encapsulating the node in a SAVE_EXPR.  */
1767
1768 tree
1769 save_expr (expr)
1770      tree expr;
1771 {
1772   register tree t = fold (expr);
1773
1774   /* We don't care about whether this can be used as an lvalue in this
1775      context.  */
1776   while (TREE_CODE (t) == NON_LVALUE_EXPR)
1777     t = TREE_OPERAND (t, 0);
1778
1779   /* If the tree evaluates to a constant, then we don't want to hide that
1780      fact (i.e. this allows further folding, and direct checks for constants).
1781      However, a read-only object that has side effects cannot be bypassed.
1782      Since it is no problem to reevaluate literals, we just return the 
1783      literal node. */
1784
1785   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
1786       || TREE_CODE (t) == SAVE_EXPR)
1787     return t;
1788
1789   t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
1790
1791   /* This expression might be placed ahead of a jump to ensure that the
1792      value was computed on both sides of the jump.  So make sure it isn't
1793      eliminated as dead.  */
1794   TREE_SIDE_EFFECTS (t) = 1;
1795   return t;
1796 }
1797
1798 /* Stabilize a reference so that we can use it any number of times
1799    without causing its operands to be evaluated more than once.
1800    Returns the stabilized reference.
1801
1802    Also allows conversion expressions whose operands are references.
1803    Any other kind of expression is returned unchanged.  */
1804
1805 tree
1806 stabilize_reference (ref)
1807      tree ref;
1808 {
1809   register tree result;
1810   register enum tree_code code = TREE_CODE (ref);
1811
1812   switch (code)
1813     {
1814     case VAR_DECL:
1815     case PARM_DECL:
1816     case RESULT_DECL:
1817       /* No action is needed in this case.  */
1818       return ref;
1819
1820     case NOP_EXPR:
1821     case CONVERT_EXPR:
1822     case FLOAT_EXPR:
1823     case FIX_TRUNC_EXPR:
1824     case FIX_FLOOR_EXPR:
1825     case FIX_ROUND_EXPR:
1826     case FIX_CEIL_EXPR:
1827       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
1828       break;
1829
1830     case INDIRECT_REF:
1831       result = build_nt (INDIRECT_REF,
1832                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
1833       break;
1834
1835     case COMPONENT_REF:
1836       result = build_nt (COMPONENT_REF,
1837                          stabilize_reference (TREE_OPERAND (ref, 0)),
1838                          TREE_OPERAND (ref, 1));
1839       break;
1840
1841     case BIT_FIELD_REF:
1842       result = build_nt (BIT_FIELD_REF,
1843                          stabilize_reference (TREE_OPERAND (ref, 0)),
1844                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
1845                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
1846       break;
1847
1848     case ARRAY_REF:
1849       result = build_nt (ARRAY_REF,
1850                          stabilize_reference (TREE_OPERAND (ref, 0)),
1851                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
1852       break;
1853
1854       /* If arg isn't a kind of lvalue we recognize, make no change.
1855          Caller should recognize the error for an invalid lvalue.  */
1856     default:
1857       return ref;
1858
1859     case ERROR_MARK:
1860       return error_mark_node;
1861     }
1862
1863   TREE_TYPE (result) = TREE_TYPE (ref);
1864   TREE_READONLY (result) = TREE_READONLY (ref);
1865   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
1866   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
1867   TREE_RAISES (result) = TREE_RAISES (ref);
1868
1869   return result;
1870 }
1871
1872 /* Subroutine of stabilize_reference; this is called for subtrees of
1873    references.  Any expression with side-effects must be put in a SAVE_EXPR
1874    to ensure that it is only evaluated once.
1875
1876    We don't put SAVE_EXPR nodes around everything, because assigning very
1877    simple expressions to temporaries causes us to miss good opportunities
1878    for optimizations.  Among other things, the opportunity to fold in the
1879    addition of a constant into an addressing mode often gets lost, e.g.
1880    "y[i+1] += x;".  In general, we take the approach that we should not make
1881    an assignment unless we are forced into it - i.e., that any non-side effect
1882    operator should be allowed, and that cse should take care of coalescing
1883    multiple utterances of the same expression should that prove fruitful.  */
1884
1885 static tree
1886 stabilize_reference_1 (e)
1887      tree e;
1888 {
1889   register tree result;
1890   register int length;
1891   register enum tree_code code = TREE_CODE (e);
1892
1893   /* We cannot ignore const expressions because it might be a reference
1894      to a const array but whose index contains side-effects.  But we can
1895      ignore things that are actual constant or that already have been
1896      handled by this function.  */
1897
1898   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
1899     return e;
1900
1901   switch (TREE_CODE_CLASS (code))
1902     {
1903     case 'x':
1904     case 't':
1905     case 'd':
1906     case 'b':
1907     case '<':
1908     case 's':
1909     case 'e':
1910     case 'r':
1911       /* If the expression has side-effects, then encase it in a SAVE_EXPR
1912          so that it will only be evaluated once.  */
1913       /* The reference (r) and comparison (<) classes could be handled as
1914          below, but it is generally faster to only evaluate them once.  */
1915       if (TREE_SIDE_EFFECTS (e))
1916         return save_expr (e);
1917       return e;
1918
1919     case 'c':
1920       /* Constants need no processing.  In fact, we should never reach
1921          here.  */
1922       return e;
1923       
1924     case '2':
1925       /* Recursively stabilize each operand.  */
1926       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
1927                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
1928       break;
1929
1930     case '1':
1931       /* Recursively stabilize each operand.  */
1932       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
1933       break;
1934     }
1935   
1936   TREE_TYPE (result) = TREE_TYPE (e);
1937   TREE_READONLY (result) = TREE_READONLY (e);
1938   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
1939   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
1940   TREE_RAISES (result) = TREE_RAISES (e);
1941
1942   return result;
1943 }
1944 \f
1945 /* Low-level constructors for expressions.  */
1946
1947 /* Build an expression of code CODE, data type TYPE,
1948    and operands as specified by the arguments ARG1 and following arguments.
1949    Expressions and reference nodes can be created this way.
1950    Constants, decls, types and misc nodes cannot be.  */
1951
1952 tree
1953 build (va_alist)
1954      va_dcl
1955 {
1956   va_list p;
1957   enum tree_code code;
1958   register tree t;
1959   register int length;
1960   register int i;
1961
1962   va_start (p);
1963
1964   code = va_arg (p, enum tree_code);
1965   t = make_node (code);
1966   length = tree_code_length[(int) code];
1967   TREE_TYPE (t) = va_arg (p, tree);
1968
1969   if (length == 2)
1970     {
1971       /* This is equivalent to the loop below, but faster.  */
1972       register tree arg0 = va_arg (p, tree);
1973       register tree arg1 = va_arg (p, tree);
1974       TREE_OPERAND (t, 0) = arg0;
1975       TREE_OPERAND (t, 1) = arg1;
1976       if ((arg0 && TREE_SIDE_EFFECTS (arg0))
1977           || (arg1 && TREE_SIDE_EFFECTS (arg1)))
1978         TREE_SIDE_EFFECTS (t) = 1;
1979       TREE_RAISES (t)
1980         = (arg0 && TREE_RAISES (arg0)) || (arg1 && TREE_RAISES (arg1));
1981     }
1982   else if (length == 1)
1983     {
1984       register tree arg0 = va_arg (p, tree);
1985
1986       /* Call build1 for this!  */
1987       if (TREE_CODE_CLASS (code) != 's')
1988         abort ();
1989       TREE_OPERAND (t, 0) = arg0;
1990       if (arg0 && TREE_SIDE_EFFECTS (arg0))
1991         TREE_SIDE_EFFECTS (t) = 1;
1992       TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
1993     }
1994   else
1995     {
1996       for (i = 0; i < length; i++)
1997         {
1998           register tree operand = va_arg (p, tree);
1999           TREE_OPERAND (t, i) = operand;
2000           if (operand)
2001             {
2002               if (TREE_SIDE_EFFECTS (operand))
2003                 TREE_SIDE_EFFECTS (t) = 1;
2004               if (TREE_RAISES (operand))
2005                 TREE_RAISES (t) = 1;
2006             }
2007         }
2008     }
2009   va_end (p);
2010   return t;
2011 }
2012
2013 /* Same as above, but only builds for unary operators.
2014    Saves lions share of calls to `build'; cuts down use
2015    of varargs, which is expensive for RISC machines.  */
2016 tree
2017 build1 (code, type, node)
2018      enum tree_code code;
2019      tree type;
2020      tree node;
2021 {
2022   register struct obstack *obstack = current_obstack;
2023   register int i, length;
2024   register tree_node_kind kind;
2025   register tree t;
2026
2027 #ifdef GATHER_STATISTICS
2028   if (TREE_CODE_CLASS (code) == 'r')
2029     kind = r_kind;
2030   else
2031     kind = e_kind;
2032 #endif
2033
2034   obstack = expression_obstack;
2035   length = sizeof (struct tree_exp);
2036
2037   t = (tree) obstack_alloc (obstack, length);
2038
2039 #ifdef GATHER_STATISTICS
2040   tree_node_counts[(int)kind]++;
2041   tree_node_sizes[(int)kind] += length;
2042 #endif
2043
2044   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
2045     ((int *) t)[i] = 0;
2046
2047   TREE_TYPE (t) = type;
2048   TREE_SET_CODE (t, code);
2049
2050   if (obstack == &permanent_obstack)
2051     TREE_PERMANENT (t) = 1;
2052
2053   TREE_OPERAND (t, 0) = node;
2054   if (node)
2055     {
2056       if (TREE_SIDE_EFFECTS (node))
2057         TREE_SIDE_EFFECTS (t) = 1;
2058       if (TREE_RAISES (node))
2059         TREE_RAISES (t) = 1;
2060     }
2061
2062   return t;
2063 }
2064
2065 /* Similar except don't specify the TREE_TYPE
2066    and leave the TREE_SIDE_EFFECTS as 0.
2067    It is permissible for arguments to be null,
2068    or even garbage if their values do not matter.  */
2069
2070 tree
2071 build_nt (va_alist)
2072      va_dcl
2073 {
2074   va_list p;
2075   register enum tree_code code;
2076   register tree t;
2077   register int length;
2078   register int i;
2079
2080   va_start (p);
2081
2082   code = va_arg (p, enum tree_code);
2083   t = make_node (code);
2084   length = tree_code_length[(int) code];
2085
2086   for (i = 0; i < length; i++)
2087     TREE_OPERAND (t, i) = va_arg (p, tree);
2088
2089   va_end (p);
2090   return t;
2091 }
2092
2093 /* Similar to `build_nt', except we build
2094    on the temp_decl_obstack, regardless.  */
2095
2096 tree
2097 build_parse_node (va_alist)
2098      va_dcl
2099 {
2100   register struct obstack *ambient_obstack = expression_obstack;
2101   va_list p;
2102   register enum tree_code code;
2103   register tree t;
2104   register int length;
2105   register int i;
2106
2107   expression_obstack = &temp_decl_obstack;
2108
2109   va_start (p);
2110
2111   code = va_arg (p, enum tree_code);
2112   t = make_node (code);
2113   length = tree_code_length[(int) code];
2114
2115   for (i = 0; i < length; i++)
2116     TREE_OPERAND (t, i) = va_arg (p, tree);
2117
2118   va_end (p);
2119   expression_obstack = ambient_obstack;
2120   return t;
2121 }
2122
2123 #if 0
2124 /* Commented out because this wants to be done very
2125    differently.  See cp-lex.c.  */
2126 tree
2127 build_op_identifier (op1, op2)
2128      tree op1, op2;
2129 {
2130   register tree t = make_node (OP_IDENTIFIER);
2131   TREE_PURPOSE (t) = op1;
2132   TREE_VALUE (t) = op2;
2133   return t;
2134 }
2135 #endif
2136 \f
2137 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2138    We do NOT enter this node in any sort of symbol table.
2139
2140    layout_decl is used to set up the decl's storage layout.
2141    Other slots are initialized to 0 or null pointers.  */
2142
2143 tree
2144 build_decl (code, name, type)
2145      enum tree_code code;
2146      tree name, type;
2147 {
2148   register tree t;
2149
2150   t = make_node (code);
2151
2152 /*  if (type == error_mark_node)
2153     type = integer_type_node; */
2154 /* That is not done, deliberately, so that having error_mark_node
2155    as the type can suppress useless errors in the use of this variable.  */
2156
2157   DECL_NAME (t) = name;
2158   DECL_ASSEMBLER_NAME (t) = name;
2159   TREE_TYPE (t) = type;
2160
2161   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2162     layout_decl (t, 0);
2163   else if (code == FUNCTION_DECL)
2164     DECL_MODE (t) = FUNCTION_MODE;
2165
2166   return t;
2167 }
2168 \f
2169 /* BLOCK nodes are used to represent the structure of binding contours
2170    and declarations, once those contours have been exited and their contents
2171    compiled.  This information is used for outputting debugging info.  */
2172
2173 tree
2174 build_block (vars, tags, subblocks, supercontext, chain)
2175      tree vars, tags, subblocks, supercontext, chain;
2176 {
2177   register tree block = make_node (BLOCK);
2178   BLOCK_VARS (block) = vars;
2179   BLOCK_TYPE_TAGS (block) = tags;
2180   BLOCK_SUBBLOCKS (block) = subblocks;
2181   BLOCK_SUPERCONTEXT (block) = supercontext;
2182   BLOCK_CHAIN (block) = chain;
2183   return block;
2184 }
2185 \f
2186 /* Return a type like TYPE except that its TYPE_READONLY is CONSTP
2187    and its TYPE_VOLATILE is VOLATILEP.
2188
2189    Such variant types already made are recorded so that duplicates
2190    are not made.
2191
2192    A variant types should never be used as the type of an expression.
2193    Always copy the variant information into the TREE_READONLY
2194    and TREE_THIS_VOLATILE of the expression, and then give the expression
2195    as its type the "main variant", the variant whose TYPE_READONLY
2196    and TYPE_VOLATILE are zero.  Use TYPE_MAIN_VARIANT to find the
2197    main variant.  */
2198
2199 tree
2200 build_type_variant (type, constp, volatilep)
2201      tree type;
2202      int constp, volatilep;
2203 {
2204   register tree t, m = TYPE_MAIN_VARIANT (type);
2205   register struct obstack *ambient_obstack = current_obstack;
2206
2207   /* Treat any nonzero argument as 1.  */
2208   constp = !!constp;
2209   volatilep = !!volatilep;
2210
2211   /* If not generating auxiliary info, search the chain of variants to see
2212      if there is already one there just like the one we need to have.  If so,
2213      use that existing one.
2214
2215      We don't do this in the case where we are generating aux info because
2216      in that case we want each typedef names to get it's own distinct type
2217      node, even if the type of this new typedef is the same as some other
2218      (existing) type.  */
2219
2220   if (!flag_gen_aux_info)
2221     for (t = m; t; t = TYPE_NEXT_VARIANT (t))
2222       if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t))
2223         return t;
2224
2225   /* We need a new one.  */
2226   current_obstack
2227     = TREE_PERMANENT (type) ? &permanent_obstack : saveable_obstack;
2228
2229   t = copy_node (type);
2230   TYPE_READONLY (t) = constp;
2231   TYPE_VOLATILE (t) = volatilep;
2232   TYPE_POINTER_TO (t) = 0;
2233   TYPE_REFERENCE_TO (t) = 0;
2234
2235   /* Add this type to the chain of variants of TYPE.  */
2236   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
2237   TYPE_NEXT_VARIANT (m) = t;
2238
2239   current_obstack = ambient_obstack;
2240   return t;
2241 }
2242
2243 /* Create a new variant of TYPE, equivalent but distinct.
2244    This is so the caller can modify it.  */
2245
2246 tree
2247 build_type_copy (type)
2248      tree type;
2249 {
2250   register tree t, m = TYPE_MAIN_VARIANT (type);
2251   register struct obstack *ambient_obstack = current_obstack;
2252
2253   current_obstack
2254     = TREE_PERMANENT (type) ? &permanent_obstack : saveable_obstack;
2255
2256   t = copy_node (type);
2257   TYPE_POINTER_TO (t) = 0;
2258   TYPE_REFERENCE_TO (t) = 0;
2259
2260   /* Add this type to the chain of variants of TYPE.  */
2261   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
2262   TYPE_NEXT_VARIANT (m) = t;
2263
2264   current_obstack = ambient_obstack;
2265   return t;
2266 }
2267 \f
2268 /* Hashing of types so that we don't make duplicates.
2269    The entry point is `type_hash_canon'.  */
2270
2271 /* Each hash table slot is a bucket containing a chain
2272    of these structures.  */
2273
2274 struct type_hash
2275 {
2276   struct type_hash *next;       /* Next structure in the bucket.  */
2277   int hashcode;                 /* Hash code of this type.  */
2278   tree type;                    /* The type recorded here.  */
2279 };
2280
2281 /* Now here is the hash table.  When recording a type, it is added
2282    to the slot whose index is the hash code mod the table size.
2283    Note that the hash table is used for several kinds of types
2284    (function types, array types and array index range types, for now).
2285    While all these live in the same table, they are completely independent,
2286    and the hash code is computed differently for each of these.  */
2287
2288 #define TYPE_HASH_SIZE 59
2289 struct type_hash *type_hash_table[TYPE_HASH_SIZE];
2290
2291 /* Here is how primitive or already-canonicalized types' hash
2292    codes are made.  */
2293 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
2294
2295 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
2296    with types in the TREE_VALUE slots), by adding the hash codes
2297    of the individual types.  */
2298
2299 int
2300 type_hash_list (list)
2301      tree list;
2302 {
2303   register int hashcode;
2304   register tree tail;
2305   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
2306     hashcode += TYPE_HASH (TREE_VALUE (tail));
2307   return hashcode;
2308 }
2309
2310 /* Look in the type hash table for a type isomorphic to TYPE.
2311    If one is found, return it.  Otherwise return 0.  */
2312
2313 tree
2314 type_hash_lookup (hashcode, type)
2315      int hashcode;
2316      tree type;
2317 {
2318   register struct type_hash *h;
2319   for (h = type_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
2320     if (h->hashcode == hashcode
2321         && TREE_CODE (h->type) == TREE_CODE (type)
2322         && TREE_TYPE (h->type) == TREE_TYPE (type)
2323         && (TYPE_MAX_VALUE (h->type) == TYPE_MAX_VALUE (type)
2324             || tree_int_cst_equal (TYPE_MAX_VALUE (h->type),
2325                                    TYPE_MAX_VALUE (type)))
2326         && (TYPE_MIN_VALUE (h->type) == TYPE_MIN_VALUE (type)
2327             || tree_int_cst_equal (TYPE_MIN_VALUE (h->type),
2328                                    TYPE_MIN_VALUE (type)))
2329         && (TYPE_DOMAIN (h->type) == TYPE_DOMAIN (type)
2330             || (TYPE_DOMAIN (h->type)
2331                 && TREE_CODE (TYPE_DOMAIN (h->type)) == TREE_LIST
2332                 && TYPE_DOMAIN (type)
2333                 && TREE_CODE (TYPE_DOMAIN (type)) == TREE_LIST
2334                 && type_list_equal (TYPE_DOMAIN (h->type), TYPE_DOMAIN (type)))))
2335       return h->type;
2336   return 0;
2337 }
2338
2339 /* Add an entry to the type-hash-table
2340    for a type TYPE whose hash code is HASHCODE.  */
2341
2342 void
2343 type_hash_add (hashcode, type)
2344      int hashcode;
2345      tree type;
2346 {
2347   register struct type_hash *h;
2348
2349   h = (struct type_hash *) oballoc (sizeof (struct type_hash));
2350   h->hashcode = hashcode;
2351   h->type = type;
2352   h->next = type_hash_table[hashcode % TYPE_HASH_SIZE];
2353   type_hash_table[hashcode % TYPE_HASH_SIZE] = h;
2354 }
2355
2356 /* Given TYPE, and HASHCODE its hash code, return the canonical
2357    object for an identical type if one already exists.
2358    Otherwise, return TYPE, and record it as the canonical object
2359    if it is a permanent object.
2360
2361    To use this function, first create a type of the sort you want.
2362    Then compute its hash code from the fields of the type that
2363    make it different from other similar types.
2364    Then call this function and use the value.
2365    This function frees the type you pass in if it is a duplicate.  */
2366
2367 /* Set to 1 to debug without canonicalization.  Never set by program.  */
2368 int debug_no_type_hash = 0;
2369
2370 tree
2371 type_hash_canon (hashcode, type)
2372      int hashcode;
2373      tree type;
2374 {
2375   tree t1;
2376
2377   if (debug_no_type_hash)
2378     return type;
2379
2380   t1 = type_hash_lookup (hashcode, type);
2381   if (t1 != 0)
2382     {
2383       struct obstack *o
2384         = TREE_PERMANENT (type) ? &permanent_obstack : saveable_obstack;
2385       obstack_free (o, type);
2386 #ifdef GATHER_STATISTICS
2387       tree_node_counts[(int)t_kind]--;
2388       tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
2389 #endif
2390       return t1;
2391     }
2392
2393   /* If this is a new type, record it for later reuse.  */
2394   if (current_obstack == &permanent_obstack)
2395     type_hash_add (hashcode, type);
2396
2397   return type;
2398 }
2399
2400 /* Given two lists of types
2401    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
2402    return 1 if the lists contain the same types in the same order.
2403    Also, the TREE_PURPOSEs must match.  */
2404
2405 int
2406 type_list_equal (l1, l2)
2407      tree l1, l2;
2408 {
2409   register tree t1, t2;
2410   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
2411     {
2412       if (TREE_VALUE (t1) != TREE_VALUE (t2))
2413         return 0;
2414       if (TREE_PURPOSE (t1) != TREE_PURPOSE (t2))
2415         {
2416           int cmp = simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2));
2417           if (cmp < 0)
2418             abort ();
2419           if (cmp == 0)
2420             return 0;
2421         }
2422     }
2423
2424   return t1 == t2;
2425 }
2426
2427 /* Nonzero if integer constants T1 and T2
2428    represent the same constant value.  */
2429
2430 int
2431 tree_int_cst_equal (t1, t2)
2432      tree t1, t2;
2433 {
2434   if (t1 == t2)
2435     return 1;
2436   if (t1 == 0 || t2 == 0)
2437     return 0;
2438   if (TREE_CODE (t1) == INTEGER_CST
2439       && TREE_CODE (t2) == INTEGER_CST
2440       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2441       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
2442     return 1;
2443   return 0;
2444 }
2445
2446 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
2447    The precise way of comparison depends on their data type.  */
2448
2449 int
2450 tree_int_cst_lt (t1, t2)
2451      tree t1, t2;
2452 {
2453   if (t1 == t2)
2454     return 0;
2455
2456   if (!TREE_UNSIGNED (TREE_TYPE (t1)))
2457     return INT_CST_LT (t1, t2);
2458   return INT_CST_LT_UNSIGNED (t1, t2);
2459 }
2460
2461 /* Compare two constructor-element-type constants.  */
2462 int
2463 simple_cst_list_equal (l1, l2)
2464      tree l1, l2;
2465 {
2466   while (l1 != NULL_TREE && l2 != NULL_TREE)
2467     {
2468       int cmp = simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2));
2469       if (cmp < 0)
2470         abort ();
2471       if (cmp == 0)
2472         return 0;
2473       l1 = TREE_CHAIN (l1);
2474       l2 = TREE_CHAIN (l2);
2475     }
2476   return (l1 == l2);
2477 }
2478
2479 /* Return truthvalue of whether T1 is the same tree structure as T2.
2480    Return 1 if they are the same.
2481    Return 0 if they are understandably different.
2482    Return -1 if either contains tree structure not understood by
2483    this function.  */
2484
2485 int
2486 simple_cst_equal (t1, t2)
2487      tree t1, t2;
2488 {
2489   register enum tree_code code1, code2;
2490   int cmp;
2491
2492   if (t1 == t2)
2493     return 1;
2494   if (t1 == 0 || t2 == 0)
2495     return 0;
2496
2497   code1 = TREE_CODE (t1);
2498   code2 = TREE_CODE (t2);
2499
2500   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
2501     if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
2502       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2503     else
2504       return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
2505   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
2506            || code2 == NON_LVALUE_EXPR)
2507     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
2508
2509   if (code1 != code2)
2510     return 0;
2511
2512   switch (code1)
2513     {
2514     case INTEGER_CST:
2515       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2516         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2517
2518     case REAL_CST:
2519       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2520
2521     case STRING_CST:
2522       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
2523         && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
2524                   TREE_STRING_LENGTH (t1));
2525
2526     case CONSTRUCTOR:
2527       abort ();
2528
2529     case SAVE_EXPR:
2530       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2531
2532     case CALL_EXPR:
2533       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2534       if (cmp <= 0)
2535         return cmp;
2536       return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2537
2538     case TARGET_EXPR:
2539       /* Special case: if either target is an unallocated VAR_DECL,
2540          it means that it's going to be unified with whatever the
2541          TARGET_EXPR is really supposed to initialize, so treat it
2542          as being equivalent to anything.  */
2543       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
2544            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
2545            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
2546           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
2547               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
2548               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
2549         cmp = 1;
2550       else
2551         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2552       if (cmp <= 0)
2553         return cmp;
2554       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2555
2556     case WITH_CLEANUP_EXPR:
2557       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2558       if (cmp <= 0)
2559         return cmp;
2560       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
2561
2562     case COMPONENT_REF:
2563       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
2564         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2565       return 0;
2566
2567     case BIT_FIELD_REF:
2568       return (simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
2569               && simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1))
2570               && simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2)));
2571
2572     case VAR_DECL:
2573     case PARM_DECL:
2574     case CONST_DECL:
2575     case FUNCTION_DECL:
2576       return 0;
2577
2578     case PLUS_EXPR:
2579     case MINUS_EXPR:
2580     case MULT_EXPR:
2581     case TRUNC_DIV_EXPR:
2582     case TRUNC_MOD_EXPR:
2583     case LSHIFT_EXPR:
2584     case RSHIFT_EXPR:
2585       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2586       if (cmp <= 0)
2587         return cmp;
2588       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2589
2590     case NEGATE_EXPR:
2591     case ADDR_EXPR:
2592     case REFERENCE_EXPR:
2593     case INDIRECT_REF:
2594       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2595
2596     default:
2597 #if 0
2598       return lang_simple_cst_equal (t1, t2);
2599 #else
2600       return -1;
2601 #endif
2602     }
2603 }
2604 \f
2605 /* Constructors for pointer, array and function types.
2606    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
2607    constructed by language-dependent code, not here.)  */
2608
2609 /* Construct, lay out and return the type of pointers to TO_TYPE.
2610    If such a type has already been constructed, reuse it.  */
2611
2612 tree
2613 build_pointer_type (to_type)
2614      tree to_type;
2615 {
2616   register tree t = TYPE_POINTER_TO (to_type);
2617   register struct obstack *ambient_obstack = current_obstack;
2618   register struct obstack *ambient_saveable_obstack = saveable_obstack;
2619
2620   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
2621
2622   if (t)
2623     return t;
2624
2625   /* We need a new one.  If TO_TYPE is permanent, make this permanent too.  */
2626   if (TREE_PERMANENT (to_type))
2627     {
2628       current_obstack = &permanent_obstack;
2629       saveable_obstack = &permanent_obstack;
2630     }
2631
2632   t = make_node (POINTER_TYPE);
2633   TREE_TYPE (t) = to_type;
2634
2635   /* Record this type as the pointer to TO_TYPE.  */
2636   TYPE_POINTER_TO (to_type) = t;
2637
2638   /* Lay out the type.  This function has many callers that are concerned
2639      with expression-construction, and this simplifies them all.
2640      Also, it guarantees the TYPE_SIZE is permanent if the type is.  */
2641   layout_type (t);
2642
2643   current_obstack = ambient_obstack;
2644   saveable_obstack = ambient_saveable_obstack;
2645   return t;
2646 }
2647
2648 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
2649    MAXVAL should be the maximum value in the domain
2650    (one less than the length of the array).  */
2651
2652 tree
2653 build_index_type (maxval)
2654      tree maxval;
2655 {
2656   register tree itype = make_node (INTEGER_TYPE);
2657   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
2658   TYPE_MIN_VALUE (itype) = build_int_2 (0, 0);
2659   TREE_TYPE (TYPE_MIN_VALUE (itype)) = sizetype;
2660   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
2661   TYPE_MODE (itype) = TYPE_MODE (sizetype);
2662   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
2663   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
2664   if (TREE_CODE (maxval) == INTEGER_CST)
2665     {
2666       HOST_WIDE_INT maxint = TREE_INT_CST_LOW (maxval);
2667       return type_hash_canon (maxint > 0 ? maxint : - maxint, itype);
2668     }
2669   else
2670     return itype;
2671 }
2672
2673 /* Just like build_index_type, but takes lowval and highval instead
2674    of just highval (maxval). */
2675
2676 tree
2677 build_index_2_type (lowval,highval)
2678      tree lowval, highval;
2679 {
2680   register tree itype = make_node (INTEGER_TYPE);
2681   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
2682   TYPE_MIN_VALUE (itype) = convert (sizetype, lowval);
2683   TYPE_MAX_VALUE (itype) = convert (sizetype, highval);
2684   TYPE_MODE (itype) = TYPE_MODE (sizetype);
2685   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
2686   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
2687   if ((TREE_CODE (lowval) == INTEGER_CST)
2688       && (TREE_CODE (highval) == INTEGER_CST))
2689     {
2690       HOST_WIDE_INT highint = TREE_INT_CST_LOW (highval);
2691       HOST_WIDE_INT lowint = TREE_INT_CST_LOW (lowval);
2692       HOST_WIDE_INT maxint = highint - lowint;
2693       return type_hash_canon (maxint > 0 ? maxint : - maxint, itype);
2694     }
2695   else
2696     return itype;
2697 }
2698
2699 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
2700    Needed because when index types are not hashed, equal index types
2701    built at different times appear distinct, even though structurally,
2702    they are not.  */
2703
2704 int
2705 index_type_equal (itype1, itype2)
2706      tree itype1, itype2;
2707 {
2708   if (TREE_CODE (itype1) != TREE_CODE (itype2))
2709     return 0;
2710   if (TREE_CODE (itype1) == INTEGER_TYPE)
2711     {
2712       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
2713           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
2714           || ! simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2))
2715           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
2716         return 0;
2717       if (simple_cst_equal (TYPE_MIN_VALUE (itype1), TYPE_MIN_VALUE (itype2))
2718           && simple_cst_equal (TYPE_MAX_VALUE (itype1), TYPE_MAX_VALUE (itype2)))
2719         return 1;
2720     }
2721   return 0;
2722 }
2723
2724 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
2725    and number of elements specified by the range of values of INDEX_TYPE.
2726    If such a type has already been constructed, reuse it.  */
2727
2728 tree
2729 build_array_type (elt_type, index_type)
2730      tree elt_type, index_type;
2731 {
2732   register tree t;
2733   int hashcode;
2734
2735   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
2736     {
2737       error ("arrays of functions are not meaningful");
2738       elt_type = integer_type_node;
2739     }
2740
2741   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
2742   build_pointer_type (elt_type);
2743
2744   /* Allocate the array after the pointer type,
2745      in case we free it in type_hash_canon.  */
2746   t = make_node (ARRAY_TYPE);
2747   TREE_TYPE (t) = elt_type;
2748   TYPE_DOMAIN (t) = index_type;
2749
2750   if (index_type == 0)
2751     return t;
2752
2753   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
2754   t = type_hash_canon (hashcode, t);
2755
2756   if (TYPE_SIZE (t) == 0)
2757     layout_type (t);
2758   return t;
2759 }
2760
2761 /* Construct, lay out and return
2762    the type of functions returning type VALUE_TYPE
2763    given arguments of types ARG_TYPES.
2764    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
2765    are data type nodes for the arguments of the function.
2766    If such a type has already been constructed, reuse it.  */
2767
2768 tree
2769 build_function_type (value_type, arg_types)
2770      tree value_type, arg_types;
2771 {
2772   register tree t;
2773   int hashcode;
2774
2775   if (TREE_CODE (value_type) == FUNCTION_TYPE
2776       || TREE_CODE (value_type) == ARRAY_TYPE)
2777     {
2778       error ("function return type cannot be function or array");
2779       value_type = integer_type_node;
2780     }
2781
2782   /* Make a node of the sort we want.  */
2783   t = make_node (FUNCTION_TYPE);
2784   TREE_TYPE (t) = value_type;
2785   TYPE_ARG_TYPES (t) = arg_types;
2786
2787   /* If we already have such a type, use the old one and free this one.  */
2788   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
2789   t = type_hash_canon (hashcode, t);
2790
2791   if (TYPE_SIZE (t) == 0)
2792     layout_type (t);
2793   return t;
2794 }
2795
2796 /* Build the node for the type of references-to-TO_TYPE.  */
2797
2798 tree
2799 build_reference_type (to_type)
2800      tree to_type;
2801 {
2802   register tree t = TYPE_REFERENCE_TO (to_type);
2803   register struct obstack *ambient_obstack = current_obstack;
2804   register struct obstack *ambient_saveable_obstack = saveable_obstack;
2805
2806   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
2807
2808   if (t)
2809     return t;
2810
2811   /* We need a new one.  If TO_TYPE is permanent, make this permanent too.  */
2812   if (TREE_PERMANENT (to_type))
2813     {
2814       current_obstack = &permanent_obstack;
2815       saveable_obstack = &permanent_obstack;
2816     }
2817
2818   t = make_node (REFERENCE_TYPE);
2819   TREE_TYPE (t) = to_type;
2820
2821   /* Record this type as the pointer to TO_TYPE.  */
2822   TYPE_REFERENCE_TO (to_type) = t;
2823
2824   layout_type (t);
2825
2826   current_obstack = ambient_obstack;
2827   saveable_obstack = ambient_saveable_obstack;
2828   return t;
2829 }
2830
2831 /* Construct, lay out and return the type of methods belonging to class
2832    BASETYPE and whose arguments and values are described by TYPE.
2833    If that type exists already, reuse it.
2834    TYPE must be a FUNCTION_TYPE node.  */
2835
2836 tree
2837 build_method_type (basetype, type)
2838      tree basetype, type;
2839 {
2840   register tree t;
2841   int hashcode;
2842
2843   /* Make a node of the sort we want.  */
2844   t = make_node (METHOD_TYPE);
2845
2846   if (TREE_CODE (type) != FUNCTION_TYPE)
2847     abort ();
2848
2849   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
2850   TREE_TYPE (t) = TREE_TYPE (type);
2851
2852   /* The actual arglist for this function includes a "hidden" argument
2853      which is "this".  Put it into the list of argument types.  */
2854
2855   TYPE_ARG_TYPES (t)
2856     = tree_cons (NULL_TREE,
2857                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
2858
2859   /* If we already have such a type, use the old one and free this one.  */
2860   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
2861   t = type_hash_canon (hashcode, t);
2862
2863   if (TYPE_SIZE (t) == 0)
2864     layout_type (t);
2865
2866   return t;
2867 }
2868
2869 /* Construct, lay out and return the type of methods belonging to class
2870    BASETYPE and whose arguments and values are described by TYPE.
2871    If that type exists already, reuse it.
2872    TYPE must be a FUNCTION_TYPE node.  */
2873
2874 tree
2875 build_offset_type (basetype, type)
2876      tree basetype, type;
2877 {
2878   register tree t;
2879   int hashcode;
2880
2881   /* Make a node of the sort we want.  */
2882   t = make_node (OFFSET_TYPE);
2883
2884   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
2885   TREE_TYPE (t) = type;
2886
2887   /* If we already have such a type, use the old one and free this one.  */
2888   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
2889   t = type_hash_canon (hashcode, t);
2890
2891   if (TYPE_SIZE (t) == 0)
2892     layout_type (t);
2893
2894   return t;
2895 }
2896
2897 /* Create a complex type whose components are COMPONENT_TYPE.  */
2898
2899 tree
2900 build_complex_type (component_type)
2901      tree component_type;
2902 {
2903   register tree t;
2904   int hashcode;
2905
2906   /* Make a node of the sort we want.  */
2907   t = make_node (COMPLEX_TYPE);
2908
2909   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
2910   TYPE_VOLATILE (t) = TYPE_VOLATILE (component_type);
2911   TYPE_READONLY (t) = TYPE_READONLY (component_type);
2912
2913   /* If we already have such a type, use the old one and free this one.  */
2914   hashcode = TYPE_HASH (component_type);
2915   t = type_hash_canon (hashcode, t);
2916
2917   if (TYPE_SIZE (t) == 0)
2918     layout_type (t);
2919
2920   return t;
2921 }
2922 \f
2923 /* Return OP, stripped of any conversions to wider types as much as is safe.
2924    Converting the value back to OP's type makes a value equivalent to OP.
2925
2926    If FOR_TYPE is nonzero, we return a value which, if converted to
2927    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
2928
2929    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
2930    narrowest type that can hold the value, even if they don't exactly fit.
2931    Otherwise, bit-field references are changed to a narrower type
2932    only if they can be fetched directly from memory in that type.
2933
2934    OP must have integer, real or enumeral type.  Pointers are not allowed!
2935
2936    There are some cases where the obvious value we could return
2937    would regenerate to OP if converted to OP's type, 
2938    but would not extend like OP to wider types.
2939    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
2940    For example, if OP is (unsigned short)(signed char)-1,
2941    we avoid returning (signed char)-1 if FOR_TYPE is int,
2942    even though extending that to an unsigned short would regenerate OP,
2943    since the result of extending (signed char)-1 to (int)
2944    is different from (int) OP.  */
2945
2946 tree
2947 get_unwidened (op, for_type)
2948      register tree op;
2949      tree for_type;
2950 {
2951   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
2952   /* TYPE_PRECISION is safe in place of type_precision since
2953      pointer types are not allowed.  */
2954   register tree type = TREE_TYPE (op);
2955   register unsigned final_prec
2956     = TYPE_PRECISION (for_type != 0 ? for_type : type);
2957   register int uns
2958     = (for_type != 0 && for_type != type
2959        && final_prec > TYPE_PRECISION (type)
2960        && TREE_UNSIGNED (type));
2961   register tree win = op;
2962
2963   while (TREE_CODE (op) == NOP_EXPR)
2964     {
2965       register int bitschange
2966         = TYPE_PRECISION (TREE_TYPE (op))
2967           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
2968
2969       /* Truncations are many-one so cannot be removed.
2970          Unless we are later going to truncate down even farther.  */
2971       if (bitschange < 0
2972           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
2973         break;
2974
2975       /* See what's inside this conversion.  If we decide to strip it,
2976          we will set WIN.  */
2977       op = TREE_OPERAND (op, 0);
2978
2979       /* If we have not stripped any zero-extensions (uns is 0),
2980          we can strip any kind of extension.
2981          If we have previously stripped a zero-extension,
2982          only zero-extensions can safely be stripped.
2983          Any extension can be stripped if the bits it would produce
2984          are all going to be discarded later by truncating to FOR_TYPE.  */
2985
2986       if (bitschange > 0)
2987         {
2988           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
2989             win = op;
2990           /* TREE_UNSIGNED says whether this is a zero-extension.
2991              Let's avoid computing it if it does not affect WIN
2992              and if UNS will not be needed again.  */
2993           if ((uns || TREE_CODE (op) == NOP_EXPR)
2994               && TREE_UNSIGNED (TREE_TYPE (op)))
2995             {
2996               uns = 1;
2997               win = op;
2998             }
2999         }
3000     }
3001
3002   if (TREE_CODE (op) == COMPONENT_REF
3003       /* Since type_for_size always gives an integer type.  */
3004       && TREE_CODE (type) != REAL_TYPE)
3005     {
3006       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
3007       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
3008
3009       /* We can get this structure field in the narrowest type it fits in.
3010          If FOR_TYPE is 0, do this only for a field that matches the
3011          narrower type exactly and is aligned for it
3012          The resulting extension to its nominal type (a fullword type)
3013          must fit the same conditions as for other extensions.  */
3014
3015       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
3016           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
3017           && (! uns || final_prec <= innerprec
3018               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
3019           && type != 0)
3020         {
3021           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
3022                        TREE_OPERAND (op, 1));
3023           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
3024           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
3025           TREE_RAISES (win) = TREE_RAISES (op);
3026         }
3027     }
3028   return win;
3029 }
3030 \f
3031 /* Return OP or a simpler expression for a narrower value
3032    which can be sign-extended or zero-extended to give back OP.
3033    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
3034    or 0 if the value should be sign-extended.  */
3035
3036 tree
3037 get_narrower (op, unsignedp_ptr)
3038      register tree op;
3039      int *unsignedp_ptr;
3040 {
3041   register int uns = 0;
3042   int first = 1;
3043   register tree win = op;
3044
3045   while (TREE_CODE (op) == NOP_EXPR)
3046     {
3047       register int bitschange
3048         = TYPE_PRECISION (TREE_TYPE (op))
3049           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
3050
3051       /* Truncations are many-one so cannot be removed.  */
3052       if (bitschange < 0)
3053         break;
3054
3055       /* See what's inside this conversion.  If we decide to strip it,
3056          we will set WIN.  */
3057       op = TREE_OPERAND (op, 0);
3058
3059       if (bitschange > 0)
3060         {
3061           /* An extension: the outermost one can be stripped,
3062              but remember whether it is zero or sign extension.  */
3063           if (first)
3064             uns = TREE_UNSIGNED (TREE_TYPE (op));
3065           /* Otherwise, if a sign extension has been stripped,
3066              only sign extensions can now be stripped;
3067              if a zero extension has been stripped, only zero-extensions.  */
3068           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
3069             break;
3070           first = 0;
3071         }
3072       /* A change in nominal type can always be stripped.  */
3073
3074       win = op;
3075     }
3076
3077   if (TREE_CODE (op) == COMPONENT_REF
3078       /* Since type_for_size always gives an integer type.  */
3079       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
3080     {
3081       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
3082       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
3083
3084       /* We can get this structure field in a narrower type that fits it,
3085          but the resulting extension to its nominal type (a fullword type)
3086          must satisfy the same conditions as for other extensions.
3087
3088          Do this only for fields that are aligned (not bit-fields),
3089          because when bit-field insns will be used there is no
3090          advantage in doing this.  */
3091
3092       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
3093           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
3094           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
3095           && type != 0)
3096         {
3097           if (first)
3098             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
3099           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
3100                        TREE_OPERAND (op, 1));
3101           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
3102           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
3103           TREE_RAISES (win) = TREE_RAISES (op);
3104         }
3105     }
3106   *unsignedp_ptr = uns;
3107   return win;
3108 }
3109 \f
3110 /* Return the precision of a type, for arithmetic purposes.
3111    Supports all types on which arithmetic is possible
3112    (including pointer types).
3113    It's not clear yet what will be right for complex types.  */
3114
3115 int
3116 type_precision (type)
3117      register tree type;
3118 {
3119   return ((TREE_CODE (type) == INTEGER_TYPE
3120            || TREE_CODE (type) == ENUMERAL_TYPE
3121            || TREE_CODE (type) == REAL_TYPE)
3122           ? TYPE_PRECISION (type) : POINTER_SIZE);
3123 }
3124
3125 /* Nonzero if integer constant C has a value that is permissible
3126    for type TYPE (an INTEGER_TYPE).  */
3127
3128 int
3129 int_fits_type_p (c, type)
3130      tree c, type;
3131 {
3132   if (TREE_UNSIGNED (type))
3133     return (!INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c)
3134             && !INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)));
3135   else
3136     return (!INT_CST_LT (TYPE_MAX_VALUE (type), c)
3137             && !INT_CST_LT (c, TYPE_MIN_VALUE (type)));
3138 }
3139
3140 /* Return the innermost context enclosing DECL that is
3141    a FUNCTION_DECL, or zero if none.  */
3142
3143 tree
3144 decl_function_context (decl)
3145      tree decl;
3146 {
3147   tree context;
3148
3149   if (TREE_CODE (decl) == ERROR_MARK)
3150     return 0;
3151
3152   if (TREE_CODE (decl) == SAVE_EXPR)
3153     context = SAVE_EXPR_CONTEXT (decl);
3154   else
3155     context = DECL_CONTEXT (decl);
3156
3157   while (context && TREE_CODE (context) != FUNCTION_DECL)
3158     {
3159       if (TREE_CODE (context) == RECORD_TYPE
3160           || TREE_CODE (context) == UNION_TYPE)
3161         context = TYPE_CONTEXT (context);
3162       else if (TREE_CODE (context) == TYPE_DECL)
3163         context = DECL_CONTEXT (context);
3164       else if (TREE_CODE (context) == BLOCK)
3165         context = BLOCK_SUPERCONTEXT (context);
3166       else
3167         /* Unhandled CONTEXT !?  */
3168         abort ();
3169     }
3170
3171   return context;
3172 }
3173
3174 /* Return the innermost context enclosing DECL that is
3175    a RECORD_TYPE or UNION_TYPE, or zero if none.
3176    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
3177
3178 tree
3179 decl_type_context (decl)
3180      tree decl;
3181 {
3182   tree context = DECL_CONTEXT (decl);
3183
3184   while (context)
3185     {
3186       if (TREE_CODE (context) == RECORD_TYPE
3187           || TREE_CODE (context) == UNION_TYPE)
3188         return context;
3189       if (TREE_CODE (context) == TYPE_DECL
3190           || TREE_CODE (context) == FUNCTION_DECL)
3191         context = DECL_CONTEXT (context);
3192       else if (TREE_CODE (context) == BLOCK)
3193         context = BLOCK_SUPERCONTEXT (context);
3194       else
3195         /* Unhandled CONTEXT!?  */
3196         abort ();
3197     }
3198   return NULL_TREE;
3199 }
3200
3201 void
3202 print_obstack_statistics (str, o)
3203      char *str;
3204      struct obstack *o;
3205 {
3206   struct _obstack_chunk *chunk = o->chunk;
3207   int n_chunks = 0;
3208   int n_alloc = 0;
3209
3210   while (chunk)
3211     {
3212       n_chunks += 1;
3213       n_alloc += chunk->limit - &chunk->contents[0];
3214       chunk = chunk->prev;
3215     }
3216   fprintf (stderr, "obstack %s: %d bytes, %d chunks\n",
3217            str, n_alloc, n_chunks);
3218 }
3219 void
3220 dump_tree_statistics ()
3221 {
3222   int i;
3223   int total_nodes, total_bytes;
3224
3225   fprintf (stderr, "\n??? tree nodes created\n\n");
3226 #ifdef GATHER_STATISTICS
3227   fprintf (stderr, "Kind                  Nodes     Bytes\n");
3228   fprintf (stderr, "-------------------------------------\n");
3229   total_nodes = total_bytes = 0;
3230   for (i = 0; i < (int) all_kinds; i++)
3231     {
3232       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
3233                tree_node_counts[i], tree_node_sizes[i]);
3234       total_nodes += tree_node_counts[i];
3235       total_bytes += tree_node_sizes[i];
3236     }
3237   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
3238   fprintf (stderr, "-------------------------------------\n");
3239   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
3240   fprintf (stderr, "-------------------------------------\n");
3241 #else
3242   fprintf (stderr, "(No per-node statistics)\n");
3243 #endif
3244   print_lang_statistics ();
3245 }