OSDN Git Service

(i386_return_pops_args): Libcalls ignore TARGET_RTD.
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 88, 92, 93, 94, 95, 1996 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, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA.  */
20
21
22 /* This file contains the low level primitives for operating on tree nodes,
23    including allocation, list operations, interning of identifiers,
24    construction of data type nodes and statement nodes,
25    and construction of type conversion nodes.  It also contains
26    tables index by tree code that describe how to take apart
27    nodes of that code.
28
29    It is intended to be language-independent, but occasionally
30    calls language-dependent routines defined (for C) in typecheck.c.
31
32    The low-level allocation routines oballoc and permalloc
33    are used also for allocating many other kinds of objects
34    by all passes of the compiler.  */
35
36 #include <setjmp.h>
37 #include "config.h"
38 #include "flags.h"
39 #include "tree.h"
40 #include "except.h"
41 #include "function.h"
42 #include "obstack.h"
43 #ifdef __STDC__
44 #include <stdarg.h>
45 #else
46 #include <varargs.h>
47 #endif
48 #include <stdio.h>
49
50 #define obstack_chunk_alloc xmalloc
51 #define obstack_chunk_free free
52
53 /* Tree nodes of permanent duration are allocated in this obstack.
54    They are the identifier nodes, and everything outside of
55    the bodies and parameters of function definitions.  */
56
57 struct obstack permanent_obstack;
58
59 /* The initial RTL, and all ..._TYPE nodes, in a function
60    are allocated in this obstack.  Usually they are freed at the
61    end of the function, but if the function is inline they are saved.
62    For top-level functions, this is maybepermanent_obstack.
63    Separate obstacks are made for nested functions.  */
64
65 struct obstack *function_maybepermanent_obstack;
66
67 /* This is the function_maybepermanent_obstack for top-level functions.  */
68
69 struct obstack maybepermanent_obstack;
70
71 /* This is a list of function_maybepermanent_obstacks for top-level inline
72    functions that are compiled in the middle of compiling other functions.  */
73
74 struct simple_obstack_stack *toplev_inline_obstacks;
75
76 /* This is a list of function_maybepermanent_obstacks for inline functions
77    nested in the current function that were compiled in the middle of
78    compiling other functions.  */
79
80 struct simple_obstack_stack *inline_obstacks;
81
82 /* The contents of the current function definition are allocated
83    in this obstack, and all are freed at the end of the function.
84    For top-level functions, this is temporary_obstack.
85    Separate obstacks are made for nested functions.  */
86
87 struct obstack *function_obstack;
88
89 /* This is used for reading initializers of global variables.  */
90
91 struct obstack temporary_obstack;
92
93 /* The tree nodes of an expression are allocated
94    in this obstack, and all are freed at the end of the expression.  */
95
96 struct obstack momentary_obstack;
97
98 /* The tree nodes of a declarator are allocated
99    in this obstack, and all are freed when the declarator
100    has been parsed.  */
101
102 static struct obstack temp_decl_obstack;
103
104 /* This points at either permanent_obstack
105    or the current function_maybepermanent_obstack.  */
106
107 struct obstack *saveable_obstack;
108
109 /* This is same as saveable_obstack during parse and expansion phase;
110    it points to the current function's obstack during optimization.
111    This is the obstack to be used for creating rtl objects.  */
112
113 struct obstack *rtl_obstack;
114
115 /* This points at either permanent_obstack or the current function_obstack.  */
116
117 struct obstack *current_obstack;
118
119 /* This points at either permanent_obstack or the current function_obstack
120    or momentary_obstack.  */
121
122 struct obstack *expression_obstack;
123
124 /* Stack of obstack selections for push_obstacks and pop_obstacks.  */
125
126 struct obstack_stack
127 {
128   struct obstack_stack *next;
129   struct obstack *current;
130   struct obstack *saveable;
131   struct obstack *expression;
132   struct obstack *rtl;
133 };
134
135 struct obstack_stack *obstack_stack;
136
137 /* Obstack for allocating struct obstack_stack entries.  */
138
139 static struct obstack obstack_stack_obstack;
140
141 /* Addresses of first objects in some obstacks.
142    This is for freeing their entire contents.  */
143 char *maybepermanent_firstobj;
144 char *temporary_firstobj;
145 char *momentary_firstobj;
146 char *temp_decl_firstobj;
147
148 /* This is used to preserve objects (mainly array initializers) that need to
149    live until the end of the current function, but no further.  */
150 char *momentary_function_firstobj;
151
152 /* Nonzero means all ..._TYPE nodes should be allocated permanently.  */
153
154 int all_types_permanent;
155
156 /* Stack of places to restore the momentary obstack back to.  */
157    
158 struct momentary_level
159 {
160   /* Pointer back to previous such level.  */
161   struct momentary_level *prev;
162   /* First object allocated within this level.  */
163   char *base;
164   /* Value of expression_obstack saved at entry to this level.  */
165   struct obstack *obstack;
166 };
167
168 struct momentary_level *momentary_stack;
169
170 /* Table indexed by tree code giving a string containing a character
171    classifying the tree code.  Possibilities are
172    t, d, s, c, r, <, 1, 2 and e.  See tree.def for details.  */
173
174 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
175
176 char *standard_tree_code_type[] = {
177 #include "tree.def"
178 };
179 #undef DEFTREECODE
180
181 /* Table indexed by tree code giving number of expression
182    operands beyond the fixed part of the node structure.
183    Not used for types or decls.  */
184
185 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
186
187 int standard_tree_code_length[] = {
188 #include "tree.def"
189 };
190 #undef DEFTREECODE
191
192 /* Names of tree components.
193    Used for printing out the tree and error messages.  */
194 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
195
196 char *standard_tree_code_name[] = {
197 #include "tree.def"
198 };
199 #undef DEFTREECODE
200
201 /* Table indexed by tree code giving a string containing a character
202    classifying the tree code.  Possibilities are
203    t, d, s, c, r, e, <, 1 and 2.  See tree.def for details.  */
204
205 char **tree_code_type;
206
207 /* Table indexed by tree code giving number of expression
208    operands beyond the fixed part of the node structure.
209    Not used for types or decls.  */
210
211 int *tree_code_length;
212
213 /* Table indexed by tree code giving name of tree code, as a string.  */
214
215 char **tree_code_name;
216
217 /* Statistics-gathering stuff.  */
218 typedef enum
219 {
220   d_kind,
221   t_kind,
222   b_kind,
223   s_kind,
224   r_kind,
225   e_kind,
226   c_kind,
227   id_kind,
228   op_id_kind,
229   perm_list_kind,
230   temp_list_kind,
231   vec_kind,
232   x_kind,
233   lang_decl,
234   lang_type,
235   all_kinds
236 } tree_node_kind;
237
238 int tree_node_counts[(int)all_kinds];
239 int tree_node_sizes[(int)all_kinds];
240 int id_string_size = 0;
241
242 char *tree_node_kind_names[] = {
243   "decls",
244   "types",
245   "blocks",
246   "stmts",
247   "refs",
248   "exprs",
249   "constants",
250   "identifiers",
251   "op_identifiers",
252   "perm_tree_lists",
253   "temp_tree_lists",
254   "vecs",
255   "random kinds",
256   "lang_decl kinds",
257   "lang_type kinds"
258 };
259
260 /* Hash table for uniquizing IDENTIFIER_NODEs by name.  */
261
262 #define MAX_HASH_TABLE 1009
263 static tree hash_table[MAX_HASH_TABLE]; /* id hash buckets */
264
265 /* 0 while creating built-in identifiers.  */
266 static int do_identifier_warnings;
267
268 /* Unique id for next decl created.  */
269 static int next_decl_uid;
270 /* Unique id for next type created.  */
271 static int next_type_uid = 1;
272
273 /* Here is how primitive or already-canonicalized types' hash
274    codes are made.  */
275 #define TYPE_HASH(TYPE) ((HOST_WIDE_INT) (TYPE) & 0777777)
276
277 extern char *mode_name[];
278
279 void gcc_obstack_init ();
280 \f
281 /* Init the principal obstacks.  */
282
283 void
284 init_obstacks ()
285 {
286   gcc_obstack_init (&obstack_stack_obstack);
287   gcc_obstack_init (&permanent_obstack);
288
289   gcc_obstack_init (&temporary_obstack);
290   temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
291   gcc_obstack_init (&momentary_obstack);
292   momentary_firstobj = (char *) obstack_alloc (&momentary_obstack, 0);
293   momentary_function_firstobj = momentary_firstobj;
294   gcc_obstack_init (&maybepermanent_obstack);
295   maybepermanent_firstobj
296     = (char *) obstack_alloc (&maybepermanent_obstack, 0);
297   gcc_obstack_init (&temp_decl_obstack);
298   temp_decl_firstobj = (char *) obstack_alloc (&temp_decl_obstack, 0);
299
300   function_obstack = &temporary_obstack;
301   function_maybepermanent_obstack = &maybepermanent_obstack;
302   current_obstack = &permanent_obstack;
303   expression_obstack = &permanent_obstack;
304   rtl_obstack = saveable_obstack = &permanent_obstack;
305
306   /* Init the hash table of identifiers.  */
307   bzero ((char *) hash_table, sizeof hash_table);
308 }
309
310 void
311 gcc_obstack_init (obstack)
312      struct obstack *obstack;
313 {
314   /* Let particular systems override the size of a chunk.  */
315 #ifndef OBSTACK_CHUNK_SIZE
316 #define OBSTACK_CHUNK_SIZE 0
317 #endif
318   /* Let them override the alloc and free routines too.  */
319 #ifndef OBSTACK_CHUNK_ALLOC
320 #define OBSTACK_CHUNK_ALLOC xmalloc
321 #endif
322 #ifndef OBSTACK_CHUNK_FREE
323 #define OBSTACK_CHUNK_FREE free
324 #endif
325   _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0,
326                   (void *(*) ()) OBSTACK_CHUNK_ALLOC,
327                   (void (*) ()) OBSTACK_CHUNK_FREE);
328 }
329
330 /* Save all variables describing the current status into the structure *P.
331    This is used before starting a nested function.
332
333    CONTEXT is the decl_function_context for the function we're about to
334    compile; if it isn't current_function_decl, we have to play some games.  */
335
336 void
337 save_tree_status (p, context)
338      struct function *p;
339      tree context;
340 {
341   p->all_types_permanent = all_types_permanent;
342   p->momentary_stack = momentary_stack;
343   p->maybepermanent_firstobj = maybepermanent_firstobj;
344   p->temporary_firstobj = temporary_firstobj;
345   p->momentary_firstobj = momentary_firstobj;
346   p->momentary_function_firstobj = momentary_function_firstobj;
347   p->function_obstack = function_obstack;
348   p->function_maybepermanent_obstack = function_maybepermanent_obstack;
349   p->current_obstack = current_obstack;
350   p->expression_obstack = expression_obstack;
351   p->saveable_obstack = saveable_obstack;
352   p->rtl_obstack = rtl_obstack;
353   p->inline_obstacks = inline_obstacks;
354
355   if (context == current_function_decl)
356     /* Objects that need to be saved in this function can be in the nonsaved
357        obstack of the enclosing function since they can't possibly be needed
358        once it has returned.  */
359     function_maybepermanent_obstack = function_obstack;
360   else
361     {
362       /* We're compiling a function which isn't nested in the current
363          function.  We need to create a new maybepermanent_obstack for this
364          function, since it can't go onto any of the existing obstacks.  */
365       struct simple_obstack_stack **head;
366       struct simple_obstack_stack *current;
367
368       if (context == NULL_TREE)
369         head = &toplev_inline_obstacks;
370       else
371         {
372           struct function *f = find_function_data (context);
373           head = &f->inline_obstacks;
374         }
375
376       current = ((struct simple_obstack_stack *)
377                  xmalloc (sizeof (struct simple_obstack_stack)));
378
379       current->obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
380       function_maybepermanent_obstack = current->obstack;
381       gcc_obstack_init (function_maybepermanent_obstack);
382
383       current->next = *head;
384       *head = current;
385     }      
386
387   maybepermanent_firstobj
388     = (char *) obstack_finish (function_maybepermanent_obstack);
389
390   function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
391   gcc_obstack_init (function_obstack);
392
393   current_obstack = &permanent_obstack;
394   expression_obstack = &permanent_obstack;
395   rtl_obstack = saveable_obstack = &permanent_obstack;
396
397   temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
398   momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
399   momentary_function_firstobj = momentary_firstobj;
400 }
401
402 /* Restore all variables describing the current status from the structure *P.
403    This is used after a nested function.  */
404
405 void
406 restore_tree_status (p)
407      struct function *p;
408 {
409   all_types_permanent = p->all_types_permanent;
410   momentary_stack = p->momentary_stack;
411
412   obstack_free (&momentary_obstack, momentary_function_firstobj);
413
414   /* Free saveable storage used by the function just compiled and not
415      saved.
416
417      CAUTION: This is in function_obstack of the containing function.
418      So we must be sure that we never allocate from that obstack during
419      the compilation of a nested function if we expect it to survive
420      past the nested function's end.  */
421   obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
422
423   obstack_free (function_obstack, 0);
424   free (function_obstack);
425
426   temporary_firstobj = p->temporary_firstobj;
427   momentary_firstobj = p->momentary_firstobj;
428   momentary_function_firstobj = p->momentary_function_firstobj;
429   maybepermanent_firstobj = p->maybepermanent_firstobj;
430   function_obstack = p->function_obstack;
431   function_maybepermanent_obstack = p->function_maybepermanent_obstack;
432   current_obstack = p->current_obstack;
433   expression_obstack = p->expression_obstack;
434   saveable_obstack = p->saveable_obstack;
435   rtl_obstack = p->rtl_obstack;
436   inline_obstacks = p->inline_obstacks;
437 }
438 \f
439 /* Start allocating on the temporary (per function) obstack.
440    This is done in start_function before parsing the function body,
441    and before each initialization at top level, and to go back
442    to temporary allocation after doing permanent_allocation.  */
443
444 void
445 temporary_allocation ()
446 {
447   /* Note that function_obstack at top level points to temporary_obstack.
448      But within a nested function context, it is a separate obstack.  */
449   current_obstack = function_obstack;
450   expression_obstack = function_obstack;
451   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
452   momentary_stack = 0;
453   inline_obstacks = 0;
454 }
455
456 /* Start allocating on the permanent obstack but don't
457    free the temporary data.  After calling this, call
458    `permanent_allocation' to fully resume permanent allocation status.  */
459
460 void
461 end_temporary_allocation ()
462 {
463   current_obstack = &permanent_obstack;
464   expression_obstack = &permanent_obstack;
465   rtl_obstack = saveable_obstack = &permanent_obstack;
466 }
467
468 /* Resume allocating on the temporary obstack, undoing
469    effects of `end_temporary_allocation'.  */
470
471 void
472 resume_temporary_allocation ()
473 {
474   current_obstack = function_obstack;
475   expression_obstack = function_obstack;
476   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
477 }
478
479 /* While doing temporary allocation, switch to allocating in such a
480    way as to save all nodes if the function is inlined.  Call
481    resume_temporary_allocation to go back to ordinary temporary
482    allocation.  */
483
484 void
485 saveable_allocation ()
486 {
487   /* Note that function_obstack at top level points to temporary_obstack.
488      But within a nested function context, it is a separate obstack.  */
489   expression_obstack = current_obstack = saveable_obstack;
490 }
491
492 /* Switch to current obstack CURRENT and maybepermanent obstack SAVEABLE,
493    recording the previously current obstacks on a stack.
494    This does not free any storage in any obstack.  */
495
496 void
497 push_obstacks (current, saveable)
498      struct obstack *current, *saveable;
499 {
500   struct obstack_stack *p
501     = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
502                                               (sizeof (struct obstack_stack)));
503
504   p->current = current_obstack;
505   p->saveable = saveable_obstack;
506   p->expression = expression_obstack;
507   p->rtl = rtl_obstack;
508   p->next = obstack_stack;
509   obstack_stack = p;
510
511   current_obstack = current;
512   expression_obstack = current;
513   rtl_obstack = saveable_obstack = saveable;
514 }
515
516 /* Save the current set of obstacks, but don't change them.  */
517
518 void
519 push_obstacks_nochange ()
520 {
521   struct obstack_stack *p
522     = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
523                                               (sizeof (struct obstack_stack)));
524
525   p->current = current_obstack;
526   p->saveable = saveable_obstack;
527   p->expression = expression_obstack;
528   p->rtl = rtl_obstack;
529   p->next = obstack_stack;
530   obstack_stack = p;
531 }
532
533 /* Pop the obstack selection stack.  */
534
535 void
536 pop_obstacks ()
537 {
538   struct obstack_stack *p = obstack_stack;
539   obstack_stack = p->next;
540
541   current_obstack = p->current;
542   saveable_obstack = p->saveable;
543   expression_obstack = p->expression;
544   rtl_obstack = p->rtl;
545
546   obstack_free (&obstack_stack_obstack, p);
547 }
548
549 /* Nonzero if temporary allocation is currently in effect.
550    Zero if currently doing permanent allocation.  */
551
552 int
553 allocation_temporary_p ()
554 {
555   return current_obstack != &permanent_obstack;
556 }
557
558 /* Go back to allocating on the permanent obstack
559    and free everything in the temporary obstack.
560
561    FUNCTION_END is true only if we have just finished compiling a function.
562    In that case, we also free preserved initial values on the momentary
563    obstack.  */
564
565 void
566 permanent_allocation (function_end)
567      int function_end;
568 {
569   /* Free up previous temporary obstack data */
570   obstack_free (&temporary_obstack, temporary_firstobj);
571   if (function_end)
572     {
573       obstack_free (&momentary_obstack, momentary_function_firstobj);
574       momentary_firstobj = momentary_function_firstobj;
575     }
576   else
577     obstack_free (&momentary_obstack, momentary_firstobj);
578   obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
579   obstack_free (&temp_decl_obstack, temp_decl_firstobj);
580
581   /* Free up the maybepermanent_obstacks for any of our nested functions
582      which were compiled at a lower level.  */
583   while (inline_obstacks)
584     {
585       struct simple_obstack_stack *current = inline_obstacks;
586       inline_obstacks = current->next;
587       obstack_free (current->obstack, 0);
588       free (current->obstack);
589       free (current);
590     }
591
592   current_obstack = &permanent_obstack;
593   expression_obstack = &permanent_obstack;
594   rtl_obstack = saveable_obstack = &permanent_obstack;
595 }
596
597 /* Save permanently everything on the maybepermanent_obstack.  */
598
599 void
600 preserve_data ()
601 {
602   maybepermanent_firstobj
603     = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
604 }
605
606 void
607 preserve_initializer ()
608 {
609   struct momentary_level *tem;
610   char *old_momentary;
611
612   temporary_firstobj
613     = (char *) obstack_alloc (&temporary_obstack, 0);
614   maybepermanent_firstobj
615     = (char *) obstack_alloc (function_maybepermanent_obstack, 0);
616
617   old_momentary = momentary_firstobj;
618   momentary_firstobj
619     = (char *) obstack_alloc (&momentary_obstack, 0);
620   if (momentary_firstobj != old_momentary)
621     for (tem = momentary_stack; tem; tem = tem->prev)
622       tem->base = momentary_firstobj;
623 }
624
625 /* Start allocating new rtl in current_obstack.
626    Use resume_temporary_allocation
627    to go back to allocating rtl in saveable_obstack.  */
628
629 void
630 rtl_in_current_obstack ()
631 {
632   rtl_obstack = current_obstack;
633 }
634
635 /* Start allocating rtl from saveable_obstack.  Intended to be used after
636    a call to push_obstacks_nochange.  */
637
638 void
639 rtl_in_saveable_obstack ()
640 {
641   rtl_obstack = saveable_obstack;
642 }
643 \f
644 /* Allocate SIZE bytes in the current obstack
645    and return a pointer to them.
646    In practice the current obstack is always the temporary one.  */
647
648 char *
649 oballoc (size)
650      int size;
651 {
652   return (char *) obstack_alloc (current_obstack, size);
653 }
654
655 /* Free the object PTR in the current obstack
656    as well as everything allocated since PTR.
657    In practice the current obstack is always the temporary one.  */
658
659 void
660 obfree (ptr)
661      char *ptr;
662 {
663   obstack_free (current_obstack, ptr);
664 }
665
666 /* Allocate SIZE bytes in the permanent obstack
667    and return a pointer to them.  */
668
669 char *
670 permalloc (size)
671      int size;
672 {
673   return (char *) obstack_alloc (&permanent_obstack, size);
674 }
675
676 /* Allocate NELEM items of SIZE bytes in the permanent obstack
677    and return a pointer to them.  The storage is cleared before
678    returning the value.  */
679
680 char *
681 perm_calloc (nelem, size)
682      int nelem;
683      long size;
684 {
685   char *rval = (char *) obstack_alloc (&permanent_obstack, nelem * size);
686   bzero (rval, nelem * size);
687   return rval;
688 }
689
690 /* Allocate SIZE bytes in the saveable obstack
691    and return a pointer to them.  */
692
693 char *
694 savealloc (size)
695      int size;
696 {
697   return (char *) obstack_alloc (saveable_obstack, size);
698 }
699 \f
700 /* Print out which obstack an object is in.  */
701
702 void
703 print_obstack_name (object, file, prefix)
704      char *object;
705      FILE *file;
706      char *prefix;
707 {
708   struct obstack *obstack = NULL;
709   char *obstack_name = NULL;
710   struct function *p;
711
712   for (p = outer_function_chain; p; p = p->next)
713     {
714       if (_obstack_allocated_p (p->function_obstack, object))
715         {
716           obstack = p->function_obstack;
717           obstack_name = "containing function obstack";
718         }
719       if (_obstack_allocated_p (p->function_maybepermanent_obstack, object))
720         {
721           obstack = p->function_maybepermanent_obstack;
722           obstack_name = "containing function maybepermanent obstack";
723         }
724     }
725
726   if (_obstack_allocated_p (&obstack_stack_obstack, object))
727     {
728       obstack = &obstack_stack_obstack;
729       obstack_name = "obstack_stack_obstack";
730     }
731   else if (_obstack_allocated_p (function_obstack, object))
732     {
733       obstack = function_obstack;
734       obstack_name = "function obstack";
735     }
736   else if (_obstack_allocated_p (&permanent_obstack, object))
737     {
738       obstack = &permanent_obstack;
739       obstack_name = "permanent_obstack";
740     }
741   else if (_obstack_allocated_p (&momentary_obstack, object))
742     {
743       obstack = &momentary_obstack;
744       obstack_name = "momentary_obstack";
745     }
746   else if (_obstack_allocated_p (function_maybepermanent_obstack, object))
747     {
748       obstack = function_maybepermanent_obstack;
749       obstack_name = "function maybepermanent obstack";
750     }
751   else if (_obstack_allocated_p (&temp_decl_obstack, object))
752     {
753       obstack = &temp_decl_obstack;
754       obstack_name = "temp_decl_obstack";
755     }
756
757   /* Check to see if the object is in the free area of the obstack.  */
758   if (obstack != NULL)
759     {
760       if (object >= obstack->next_free
761           && object < obstack->chunk_limit)
762         fprintf (file, "%s in free portion of obstack %s",
763                  prefix, obstack_name);
764       else
765         fprintf (file, "%s allocated from %s", prefix, obstack_name);
766     }
767   else
768     fprintf (file, "%s not allocated from any obstack", prefix);
769 }
770
771 void
772 debug_obstack (object)
773      char *object;
774 {
775   print_obstack_name (object, stderr, "object");
776   fprintf (stderr, ".\n");
777 }
778
779 /* Return 1 if OBJ is in the permanent obstack.
780    This is slow, and should be used only for debugging.
781    Use TREE_PERMANENT for other purposes.  */
782
783 int
784 object_permanent_p (obj)
785      tree obj;
786 {
787   return _obstack_allocated_p (&permanent_obstack, obj);
788 }
789 \f
790 /* Start a level of momentary allocation.
791    In C, each compound statement has its own level
792    and that level is freed at the end of each statement.
793    All expression nodes are allocated in the momentary allocation level.  */
794
795 void
796 push_momentary ()
797 {
798   struct momentary_level *tem
799     = (struct momentary_level *) obstack_alloc (&momentary_obstack,
800                                                 sizeof (struct momentary_level));
801   tem->prev = momentary_stack;
802   tem->base = (char *) obstack_base (&momentary_obstack);
803   tem->obstack = expression_obstack;
804   momentary_stack = tem;
805   expression_obstack = &momentary_obstack;
806 }
807
808 /* Set things up so the next clear_momentary will only clear memory
809    past our present position in momentary_obstack.  */
810
811 void
812 preserve_momentary ()
813 {
814   momentary_stack->base = (char *) obstack_base (&momentary_obstack);
815 }
816
817 /* Free all the storage in the current momentary-allocation level.
818    In C, this happens at the end of each statement.  */
819
820 void
821 clear_momentary ()
822 {
823   obstack_free (&momentary_obstack, momentary_stack->base);
824 }
825
826 /* Discard a level of momentary allocation.
827    In C, this happens at the end of each compound statement.
828    Restore the status of expression node allocation
829    that was in effect before this level was created.  */
830
831 void
832 pop_momentary ()
833 {
834   struct momentary_level *tem = momentary_stack;
835   momentary_stack = tem->prev;
836   expression_obstack = tem->obstack;
837   /* We can't free TEM from the momentary_obstack, because there might
838      be objects above it which have been saved.  We can free back to the
839      stack of the level we are popping off though.  */
840   obstack_free (&momentary_obstack, tem->base);
841 }
842
843 /* Pop back to the previous level of momentary allocation,
844    but don't free any momentary data just yet.  */
845
846 void
847 pop_momentary_nofree ()
848 {
849   struct momentary_level *tem = momentary_stack;
850   momentary_stack = tem->prev;
851   expression_obstack = tem->obstack;
852 }
853
854 /* Call when starting to parse a declaration:
855    make expressions in the declaration last the length of the function.
856    Returns an argument that should be passed to resume_momentary later.  */
857
858 int
859 suspend_momentary ()
860 {
861   register int tem = expression_obstack == &momentary_obstack;
862   expression_obstack = saveable_obstack;
863   return tem;
864 }
865
866 /* Call when finished parsing a declaration:
867    restore the treatment of node-allocation that was
868    in effect before the suspension.
869    YES should be the value previously returned by suspend_momentary.  */
870
871 void
872 resume_momentary (yes)
873      int yes;
874 {
875   if (yes)
876     expression_obstack = &momentary_obstack;
877 }
878 \f
879 /* Init the tables indexed by tree code.
880    Note that languages can add to these tables to define their own codes.  */
881
882 void
883 init_tree_codes ()
884 {
885   tree_code_type = (char **) xmalloc (sizeof (standard_tree_code_type));
886   tree_code_length = (int *) xmalloc (sizeof (standard_tree_code_length));
887   tree_code_name = (char **) xmalloc (sizeof (standard_tree_code_name));
888   bcopy ((char *) standard_tree_code_type, (char *) tree_code_type,
889          sizeof (standard_tree_code_type));
890   bcopy ((char *) standard_tree_code_length, (char *) tree_code_length,
891          sizeof (standard_tree_code_length));
892   bcopy ((char *) standard_tree_code_name, (char *) tree_code_name,
893          sizeof (standard_tree_code_name));
894 }
895
896 /* Return a newly allocated node of code CODE.
897    Initialize the node's unique id and its TREE_PERMANENT flag.
898    For decl and type nodes, some other fields are initialized.
899    The rest of the node is initialized to zero.
900
901    Achoo!  I got a code in the node.  */
902
903 tree
904 make_node (code)
905      enum tree_code code;
906 {
907   register tree t;
908   register int type = TREE_CODE_CLASS (code);
909   register int length;
910   register struct obstack *obstack = current_obstack;
911   register int i;
912   register tree_node_kind kind;
913
914   switch (type)
915     {
916     case 'd':  /* A decl node */
917 #ifdef GATHER_STATISTICS
918       kind = d_kind;
919 #endif
920       length = sizeof (struct tree_decl);
921       /* All decls in an inline function need to be saved.  */
922       if (obstack != &permanent_obstack)
923         obstack = saveable_obstack;
924
925       /* PARM_DECLs go on the context of the parent. If this is a nested
926          function, then we must allocate the PARM_DECL on the parent's
927          obstack, so that they will live to the end of the parent's
928          closing brace.  This is necessary in case we try to inline the
929          function into its parent.
930
931          PARM_DECLs of top-level functions do not have this problem.  However,
932          we allocate them where we put the FUNCTION_DECL for languages such as
933          Ada that need to consult some flags in the PARM_DECLs of the function
934          when calling it. 
935
936          See comment in restore_tree_status for why we can't put this
937          in function_obstack.  */
938       if (code == PARM_DECL && obstack != &permanent_obstack)
939         {
940           tree context = 0;
941           if (current_function_decl)
942             context = decl_function_context (current_function_decl);
943
944           if (context)
945             obstack
946               = find_function_data (context)->function_maybepermanent_obstack;
947         }
948       break;
949
950     case 't':  /* a type node */
951 #ifdef GATHER_STATISTICS
952       kind = t_kind;
953 #endif
954       length = sizeof (struct tree_type);
955       /* All data types are put where we can preserve them if nec.  */
956       if (obstack != &permanent_obstack)
957         obstack = all_types_permanent ? &permanent_obstack : saveable_obstack;
958       break;
959
960     case 'b':  /* a lexical block */
961 #ifdef GATHER_STATISTICS
962       kind = b_kind;
963 #endif
964       length = sizeof (struct tree_block);
965       /* All BLOCK nodes are put where we can preserve them if nec.  */
966       if (obstack != &permanent_obstack)
967         obstack = saveable_obstack;
968       break;
969
970     case 's':  /* an expression with side effects */
971 #ifdef GATHER_STATISTICS
972       kind = s_kind;
973       goto usual_kind;
974 #endif
975     case 'r':  /* a reference */
976 #ifdef GATHER_STATISTICS
977       kind = r_kind;
978       goto usual_kind;
979 #endif
980     case 'e':  /* an expression */
981     case '<':  /* a comparison expression */
982     case '1':  /* a unary arithmetic expression */
983     case '2':  /* a binary arithmetic expression */
984 #ifdef GATHER_STATISTICS
985       kind = e_kind;
986     usual_kind:
987 #endif
988       obstack = expression_obstack;
989       /* All BIND_EXPR nodes are put where we can preserve them if nec.  */
990       if (code == BIND_EXPR && obstack != &permanent_obstack)
991         obstack = saveable_obstack;
992       length = sizeof (struct tree_exp)
993         + (tree_code_length[(int) code] - 1) * sizeof (char *);
994       break;
995
996     case 'c':  /* a constant */
997 #ifdef GATHER_STATISTICS
998       kind = c_kind;
999 #endif
1000       obstack = expression_obstack;
1001
1002       /* We can't use tree_code_length for INTEGER_CST, since the number of
1003          words is machine-dependent due to varying length of HOST_WIDE_INT,
1004          which might be wider than a pointer (e.g., long long).  Similarly
1005          for REAL_CST, since the number of words is machine-dependent due
1006          to varying size and alignment of `double'.  */
1007
1008       if (code == INTEGER_CST)
1009         length = sizeof (struct tree_int_cst);
1010       else if (code == REAL_CST)
1011         length = sizeof (struct tree_real_cst);
1012       else
1013         length = sizeof (struct tree_common)
1014           + tree_code_length[(int) code] * sizeof (char *);
1015       break;
1016
1017     case 'x':  /* something random, like an identifier.  */
1018 #ifdef GATHER_STATISTICS
1019       if (code == IDENTIFIER_NODE)
1020         kind = id_kind;
1021       else if (code == OP_IDENTIFIER)
1022         kind = op_id_kind;
1023       else if (code == TREE_VEC)
1024         kind = vec_kind;
1025       else
1026         kind = x_kind;
1027 #endif
1028       length = sizeof (struct tree_common)
1029         + tree_code_length[(int) code] * sizeof (char *);
1030       /* Identifier nodes are always permanent since they are
1031          unique in a compiler run.  */
1032       if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
1033       break;
1034
1035     default:
1036       abort ();
1037     }
1038
1039   t = (tree) obstack_alloc (obstack, length);
1040
1041 #ifdef GATHER_STATISTICS
1042   tree_node_counts[(int)kind]++;
1043   tree_node_sizes[(int)kind] += length;
1044 #endif
1045
1046   /* Clear a word at a time.  */
1047   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
1048     ((int *) t)[i] = 0;
1049   /* Clear any extra bytes.  */
1050   for (i = length / sizeof (int) * sizeof (int); i < length; i++)
1051     ((char *) t)[i] = 0;
1052
1053   TREE_SET_CODE (t, code);
1054   if (obstack == &permanent_obstack)
1055     TREE_PERMANENT (t) = 1;
1056
1057   switch (type)
1058     {
1059     case 's':
1060       TREE_SIDE_EFFECTS (t) = 1;
1061       TREE_TYPE (t) = void_type_node;
1062       break;
1063
1064     case 'd':
1065       if (code != FUNCTION_DECL)
1066         DECL_ALIGN (t) = 1;
1067       DECL_IN_SYSTEM_HEADER (t)
1068         = in_system_header && (obstack == &permanent_obstack);
1069       DECL_SOURCE_LINE (t) = lineno;
1070       DECL_SOURCE_FILE (t) = (input_filename) ? input_filename : "<built-in>";
1071       DECL_UID (t) = next_decl_uid++;
1072       break;
1073
1074     case 't':
1075       TYPE_UID (t) = next_type_uid++;
1076       TYPE_ALIGN (t) = 1;
1077       TYPE_MAIN_VARIANT (t) = t;
1078       TYPE_OBSTACK (t) = obstack;
1079       TYPE_ATTRIBUTES (t) = NULL_TREE;
1080 #ifdef SET_DEFAULT_TYPE_ATTRIBUTES
1081       SET_DEFAULT_TYPE_ATTRIBUTES (t);
1082 #endif
1083       break;
1084
1085     case 'c':
1086       TREE_CONSTANT (t) = 1;
1087       break;
1088     }
1089
1090   return t;
1091 }
1092 \f
1093 /* Return a new node with the same contents as NODE
1094    except that its TREE_CHAIN is zero and it has a fresh uid.  */
1095
1096 tree
1097 copy_node (node)
1098      tree node;
1099 {
1100   register tree t;
1101   register enum tree_code code = TREE_CODE (node);
1102   register int length;
1103   register int i;
1104
1105   switch (TREE_CODE_CLASS (code))
1106     {
1107     case 'd':  /* A decl node */
1108       length = sizeof (struct tree_decl);
1109       break;
1110
1111     case 't':  /* a type node */
1112       length = sizeof (struct tree_type);
1113       break;
1114
1115     case 'b':  /* a lexical block node */
1116       length = sizeof (struct tree_block);
1117       break;
1118
1119     case 'r':  /* a reference */
1120     case 'e':  /* an expression */
1121     case 's':  /* an expression with side effects */
1122     case '<':  /* a comparison expression */
1123     case '1':  /* a unary arithmetic expression */
1124     case '2':  /* a binary arithmetic expression */
1125       length = sizeof (struct tree_exp)
1126         + (tree_code_length[(int) code] - 1) * sizeof (char *);
1127       break;
1128
1129     case 'c':  /* a constant */
1130       /* We can't use tree_code_length for INTEGER_CST, since the number of
1131          words is machine-dependent due to varying length of HOST_WIDE_INT,
1132          which might be wider than a pointer (e.g., long long).  Similarly
1133          for REAL_CST, since the number of words is machine-dependent due
1134          to varying size and alignment of `double'.  */
1135       if (code == INTEGER_CST)
1136         length = sizeof (struct tree_int_cst);
1137       else if (code == REAL_CST)
1138         length = sizeof (struct tree_real_cst);
1139       else
1140         length = (sizeof (struct tree_common)
1141                   + tree_code_length[(int) code] * sizeof (char *));
1142       break;
1143
1144     case 'x':  /* something random, like an identifier.  */
1145       length = sizeof (struct tree_common)
1146         + tree_code_length[(int) code] * sizeof (char *);
1147       if (code == TREE_VEC)
1148         length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
1149     }
1150
1151   t = (tree) obstack_alloc (current_obstack, length);
1152
1153   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
1154     ((int *) t)[i] = ((int *) node)[i];
1155   /* Clear any extra bytes.  */
1156   for (i = length / sizeof (int) * sizeof (int); i < length; i++)
1157     ((char *) t)[i] = ((char *) node)[i];
1158
1159   TREE_CHAIN (t) = 0;
1160
1161   if (TREE_CODE_CLASS (code) == 'd')
1162     DECL_UID (t) = next_decl_uid++;
1163   else if (TREE_CODE_CLASS (code) == 't')
1164     {
1165       TYPE_UID (t) = next_type_uid++;
1166       TYPE_OBSTACK (t) = current_obstack;
1167
1168       /* The following is so that the debug code for
1169          the copy is different from the original type.
1170          The two statements usually duplicate each other
1171          (because they clear fields of the same union),
1172          but the optimizer should catch that.  */
1173       TYPE_SYMTAB_POINTER (t) = 0;
1174       TYPE_SYMTAB_ADDRESS (t) = 0;
1175     }
1176
1177   TREE_PERMANENT (t) = (current_obstack == &permanent_obstack);
1178
1179   return t;
1180 }
1181
1182 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1183    For example, this can copy a list made of TREE_LIST nodes.  */
1184
1185 tree
1186 copy_list (list)
1187      tree list;
1188 {
1189   tree head;
1190   register tree prev, next;
1191
1192   if (list == 0)
1193     return 0;
1194
1195   head = prev = copy_node (list);
1196   next = TREE_CHAIN (list);
1197   while (next)
1198     {
1199       TREE_CHAIN (prev) = copy_node (next);
1200       prev = TREE_CHAIN (prev);
1201       next = TREE_CHAIN (next);
1202     }
1203   return head;
1204 }
1205 \f
1206 #define HASHBITS 30
1207
1208 /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string).
1209    If an identifier with that name has previously been referred to,
1210    the same node is returned this time.  */
1211
1212 tree
1213 get_identifier (text)
1214      register char *text;
1215 {
1216   register int hi;
1217   register int i;
1218   register tree idp;
1219   register int len, hash_len;
1220
1221   /* Compute length of text in len.  */
1222   for (len = 0; text[len]; len++);
1223
1224   /* Decide how much of that length to hash on */
1225   hash_len = len;
1226   if (warn_id_clash && len > id_clash_len)
1227     hash_len = id_clash_len;
1228
1229   /* Compute hash code */
1230   hi = hash_len * 613 + (unsigned) text[0];
1231   for (i = 1; i < hash_len; i += 2)
1232     hi = ((hi * 613) + (unsigned) (text[i]));
1233
1234   hi &= (1 << HASHBITS) - 1;
1235   hi %= MAX_HASH_TABLE;
1236   
1237   /* Search table for identifier */
1238   for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1239     if (IDENTIFIER_LENGTH (idp) == len
1240         && IDENTIFIER_POINTER (idp)[0] == text[0]
1241         && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1242       return idp;               /* <-- return if found */
1243
1244   /* Not found; optionally warn about a similar identifier */
1245   if (warn_id_clash && do_identifier_warnings && len >= id_clash_len)
1246     for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1247       if (!strncmp (IDENTIFIER_POINTER (idp), text, id_clash_len))
1248         {
1249           warning ("`%s' and `%s' identical in first %d characters",
1250                    IDENTIFIER_POINTER (idp), text, id_clash_len);
1251           break;
1252         }
1253
1254   if (tree_code_length[(int) IDENTIFIER_NODE] < 0)
1255     abort ();                   /* set_identifier_size hasn't been called.  */
1256
1257   /* Not found, create one, add to chain */
1258   idp = make_node (IDENTIFIER_NODE);
1259   IDENTIFIER_LENGTH (idp) = len;
1260 #ifdef GATHER_STATISTICS
1261   id_string_size += len;
1262 #endif
1263
1264   IDENTIFIER_POINTER (idp) = obstack_copy0 (&permanent_obstack, text, len);
1265
1266   TREE_CHAIN (idp) = hash_table[hi];
1267   hash_table[hi] = idp;
1268   return idp;                   /* <-- return if created */
1269 }
1270
1271 /* If an identifier with the name TEXT (a null-terminated string) has
1272    previously been referred to, return that node; otherwise return
1273    NULL_TREE.  */
1274
1275 tree
1276 maybe_get_identifier (text)
1277      register char *text;
1278 {
1279   register int hi;
1280   register int i;
1281   register tree idp;
1282   register int len, hash_len;
1283
1284   /* Compute length of text in len.  */
1285   for (len = 0; text[len]; len++);
1286
1287   /* Decide how much of that length to hash on */
1288   hash_len = len;
1289   if (warn_id_clash && len > id_clash_len)
1290     hash_len = id_clash_len;
1291
1292   /* Compute hash code */
1293   hi = hash_len * 613 + (unsigned) text[0];
1294   for (i = 1; i < hash_len; i += 2)
1295     hi = ((hi * 613) + (unsigned) (text[i]));
1296
1297   hi &= (1 << HASHBITS) - 1;
1298   hi %= MAX_HASH_TABLE;
1299   
1300   /* Search table for identifier */
1301   for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1302     if (IDENTIFIER_LENGTH (idp) == len
1303         && IDENTIFIER_POINTER (idp)[0] == text[0]
1304         && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1305       return idp;               /* <-- return if found */
1306
1307   return NULL_TREE;
1308 }
1309
1310 /* Enable warnings on similar identifiers (if requested).
1311    Done after the built-in identifiers are created.  */
1312
1313 void
1314 start_identifier_warnings ()
1315 {
1316   do_identifier_warnings = 1;
1317 }
1318
1319 /* Record the size of an identifier node for the language in use.
1320    SIZE is the total size in bytes.
1321    This is called by the language-specific files.  This must be
1322    called before allocating any identifiers.  */
1323
1324 void
1325 set_identifier_size (size)
1326      int size;
1327 {
1328   tree_code_length[(int) IDENTIFIER_NODE]
1329     = (size - sizeof (struct tree_common)) / sizeof (tree);
1330 }
1331 \f
1332 /* Return a newly constructed INTEGER_CST node whose constant value
1333    is specified by the two ints LOW and HI.
1334    The TREE_TYPE is set to `int'. 
1335
1336    This function should be used via the `build_int_2' macro.  */
1337
1338 tree
1339 build_int_2_wide (low, hi)
1340      HOST_WIDE_INT low, hi;
1341 {
1342   register tree t = make_node (INTEGER_CST);
1343   TREE_INT_CST_LOW (t) = low;
1344   TREE_INT_CST_HIGH (t) = hi;
1345   TREE_TYPE (t) = integer_type_node;
1346   return t;
1347 }
1348
1349 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1350
1351 tree
1352 build_real (type, d)
1353      tree type;
1354      REAL_VALUE_TYPE d;
1355 {
1356   tree v;
1357   int overflow = 0;
1358
1359   /* Check for valid float value for this type on this target machine;
1360      if not, can print error message and store a valid value in D.  */
1361 #ifdef CHECK_FLOAT_VALUE
1362   CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1363 #endif
1364
1365   v = make_node (REAL_CST);
1366   TREE_TYPE (v) = type;
1367   TREE_REAL_CST (v) = d;
1368   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1369   return v;
1370 }
1371
1372 /* Return a new REAL_CST node whose type is TYPE
1373    and whose value is the integer value of the INTEGER_CST node I.  */
1374
1375 #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
1376
1377 REAL_VALUE_TYPE
1378 real_value_from_int_cst (type, i)
1379      tree type, i;
1380 {
1381   REAL_VALUE_TYPE d;
1382   REAL_VALUE_TYPE e;
1383   /* Some 386 compilers mishandle unsigned int to float conversions,
1384      so introduce a temporary variable E to avoid those bugs.  */
1385
1386 #ifdef REAL_ARITHMETIC
1387   if (! TREE_UNSIGNED (TREE_TYPE (i)))
1388     REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1389                          TYPE_MODE (type));
1390   else
1391     REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
1392                                   TREE_INT_CST_HIGH (i), TYPE_MODE (type));
1393 #else /* not REAL_ARITHMETIC */
1394   if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
1395     {
1396       d = (double) (~ TREE_INT_CST_HIGH (i));
1397       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1398             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1399       d *= e;
1400       e = (double) (unsigned HOST_WIDE_INT) (~ TREE_INT_CST_LOW (i));
1401       d += e;
1402       d = (- d - 1.0);
1403     }
1404   else
1405     {
1406       d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
1407       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1408             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1409       d *= e;
1410       e = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (i);
1411       d += e;
1412     }
1413 #endif /* not REAL_ARITHMETIC */
1414   return d;
1415 }
1416
1417 /* This function can't be implemented if we can't do arithmetic
1418    on the float representation.  */
1419
1420 tree
1421 build_real_from_int_cst (type, i)
1422      tree type;
1423      tree i;
1424 {
1425   tree v;
1426   int overflow = TREE_OVERFLOW (i);
1427   REAL_VALUE_TYPE d;
1428   jmp_buf float_error;
1429
1430   v = make_node (REAL_CST);
1431   TREE_TYPE (v) = type;
1432
1433   if (setjmp (float_error))
1434     {
1435       d = dconst0;
1436       overflow = 1;
1437       goto got_it;
1438     }
1439
1440   set_float_handler (float_error);
1441
1442 #ifdef REAL_ARITHMETIC
1443   d = real_value_from_int_cst (type, i);
1444 #else
1445   d = REAL_VALUE_TRUNCATE (TYPE_MODE (type),
1446                            real_value_from_int_cst (type, i));
1447 #endif
1448
1449   /* Check for valid float value for this type on this target machine.  */
1450
1451  got_it:
1452   set_float_handler (NULL_PTR);
1453
1454 #ifdef CHECK_FLOAT_VALUE
1455   CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1456 #endif
1457
1458   TREE_REAL_CST (v) = d;
1459   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1460   return v;
1461 }
1462
1463 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1464
1465 /* Return a newly constructed STRING_CST node whose value is
1466    the LEN characters at STR.
1467    The TREE_TYPE is not initialized.  */
1468
1469 tree
1470 build_string (len, str)
1471      int len;
1472      char *str;
1473 {
1474   /* Put the string in saveable_obstack since it will be placed in the RTL
1475      for an "asm" statement and will also be kept around a while if
1476      deferring constant output in varasm.c.  */
1477
1478   register tree s = make_node (STRING_CST);
1479   TREE_STRING_LENGTH (s) = len;
1480   TREE_STRING_POINTER (s) = obstack_copy0 (saveable_obstack, str, len);
1481   return s;
1482 }
1483
1484 /* Return a newly constructed COMPLEX_CST node whose value is
1485    specified by the real and imaginary parts REAL and IMAG.
1486    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
1487    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
1488
1489 tree
1490 build_complex (type, real, imag)
1491      tree type;
1492      tree real, imag;
1493 {
1494   register tree t = make_node (COMPLEX_CST);
1495
1496   TREE_REALPART (t) = real;
1497   TREE_IMAGPART (t) = imag;
1498   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1499   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1500   TREE_CONSTANT_OVERFLOW (t)
1501     = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1502   return t;
1503 }
1504
1505 /* Build a newly constructed TREE_VEC node of length LEN.  */
1506
1507 tree
1508 make_tree_vec (len)
1509      int len;
1510 {
1511   register tree t;
1512   register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec);
1513   register struct obstack *obstack = current_obstack;
1514   register int i;
1515
1516 #ifdef GATHER_STATISTICS
1517   tree_node_counts[(int)vec_kind]++;
1518   tree_node_sizes[(int)vec_kind] += length;
1519 #endif
1520
1521   t = (tree) obstack_alloc (obstack, length);
1522
1523   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
1524     ((int *) t)[i] = 0;
1525
1526   TREE_SET_CODE (t, TREE_VEC);
1527   TREE_VEC_LENGTH (t) = len;
1528   if (obstack == &permanent_obstack)
1529     TREE_PERMANENT (t) = 1;
1530
1531   return t;
1532 }
1533 \f
1534 /* Return 1 if EXPR is the integer constant zero or a complex constant
1535    of zero.  */
1536
1537 int
1538 integer_zerop (expr)
1539      tree expr;
1540 {
1541   STRIP_NOPS (expr);
1542
1543   return ((TREE_CODE (expr) == INTEGER_CST
1544            && ! TREE_CONSTANT_OVERFLOW (expr)
1545            && TREE_INT_CST_LOW (expr) == 0
1546            && TREE_INT_CST_HIGH (expr) == 0)
1547           || (TREE_CODE (expr) == COMPLEX_CST
1548               && integer_zerop (TREE_REALPART (expr))
1549               && integer_zerop (TREE_IMAGPART (expr))));
1550 }
1551
1552 /* Return 1 if EXPR is the integer constant one or the corresponding
1553    complex constant.  */
1554
1555 int
1556 integer_onep (expr)
1557      tree expr;
1558 {
1559   STRIP_NOPS (expr);
1560
1561   return ((TREE_CODE (expr) == INTEGER_CST
1562            && ! TREE_CONSTANT_OVERFLOW (expr)
1563            && TREE_INT_CST_LOW (expr) == 1
1564            && TREE_INT_CST_HIGH (expr) == 0)
1565           || (TREE_CODE (expr) == COMPLEX_CST
1566               && integer_onep (TREE_REALPART (expr))
1567               && integer_zerop (TREE_IMAGPART (expr))));
1568 }
1569
1570 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1571    it contains.  Likewise for the corresponding complex constant.  */
1572
1573 int
1574 integer_all_onesp (expr)
1575      tree expr;
1576 {
1577   register int prec;
1578   register int uns;
1579
1580   STRIP_NOPS (expr);
1581
1582   if (TREE_CODE (expr) == COMPLEX_CST
1583       && integer_all_onesp (TREE_REALPART (expr))
1584       && integer_zerop (TREE_IMAGPART (expr)))
1585     return 1;
1586
1587   else if (TREE_CODE (expr) != INTEGER_CST
1588            || TREE_CONSTANT_OVERFLOW (expr))
1589     return 0;
1590
1591   uns = TREE_UNSIGNED (TREE_TYPE (expr));
1592   if (!uns)
1593     return TREE_INT_CST_LOW (expr) == -1 && TREE_INT_CST_HIGH (expr) == -1;
1594
1595   /* Note that using TYPE_PRECISION here is wrong.  We care about the
1596      actual bits, not the (arbitrary) range of the type.  */
1597   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1598   if (prec >= HOST_BITS_PER_WIDE_INT)
1599     {
1600       int high_value, shift_amount;
1601
1602       shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1603
1604       if (shift_amount > HOST_BITS_PER_WIDE_INT)
1605         /* Can not handle precisions greater than twice the host int size.  */
1606         abort ();
1607       else if (shift_amount == HOST_BITS_PER_WIDE_INT)
1608         /* Shifting by the host word size is undefined according to the ANSI
1609            standard, so we must handle this as a special case.  */
1610         high_value = -1;
1611       else
1612         high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1613
1614       return TREE_INT_CST_LOW (expr) == -1
1615         && TREE_INT_CST_HIGH (expr) == high_value;
1616     }
1617   else
1618     return TREE_INT_CST_LOW (expr) == ((HOST_WIDE_INT) 1 << prec) - 1;
1619 }
1620
1621 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1622    one bit on).  */
1623
1624 int
1625 integer_pow2p (expr)
1626      tree expr;
1627 {
1628   HOST_WIDE_INT high, low;
1629
1630   STRIP_NOPS (expr);
1631
1632   if (TREE_CODE (expr) == COMPLEX_CST
1633       && integer_pow2p (TREE_REALPART (expr))
1634       && integer_zerop (TREE_IMAGPART (expr)))
1635     return 1;
1636
1637   if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1638     return 0;
1639
1640   high = TREE_INT_CST_HIGH (expr);
1641   low = TREE_INT_CST_LOW (expr);
1642
1643   if (high == 0 && low == 0)
1644     return 0;
1645
1646   return ((high == 0 && (low & (low - 1)) == 0)
1647           || (low == 0 && (high & (high - 1)) == 0));
1648 }
1649
1650 /* Return 1 if EXPR is the real constant zero.  */
1651
1652 int
1653 real_zerop (expr)
1654      tree expr;
1655 {
1656   STRIP_NOPS (expr);
1657
1658   return ((TREE_CODE (expr) == REAL_CST
1659            && ! TREE_CONSTANT_OVERFLOW (expr)
1660            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1661           || (TREE_CODE (expr) == COMPLEX_CST
1662               && real_zerop (TREE_REALPART (expr))
1663               && real_zerop (TREE_IMAGPART (expr))));
1664 }
1665
1666 /* Return 1 if EXPR is the real constant one in real or complex form.  */
1667
1668 int
1669 real_onep (expr)
1670      tree expr;
1671 {
1672   STRIP_NOPS (expr);
1673
1674   return ((TREE_CODE (expr) == REAL_CST
1675            && ! TREE_CONSTANT_OVERFLOW (expr)
1676            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1677           || (TREE_CODE (expr) == COMPLEX_CST
1678               && real_onep (TREE_REALPART (expr))
1679               && real_zerop (TREE_IMAGPART (expr))));
1680 }
1681
1682 /* Return 1 if EXPR is the real constant two.  */
1683
1684 int
1685 real_twop (expr)
1686      tree expr;
1687 {
1688   STRIP_NOPS (expr);
1689
1690   return ((TREE_CODE (expr) == REAL_CST
1691            && ! TREE_CONSTANT_OVERFLOW (expr)
1692            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1693           || (TREE_CODE (expr) == COMPLEX_CST
1694               && real_twop (TREE_REALPART (expr))
1695               && real_zerop (TREE_IMAGPART (expr))));
1696 }
1697
1698 /* Nonzero if EXP is a constant or a cast of a constant.  */
1699  
1700 int
1701 really_constant_p (exp)
1702      tree exp;
1703 {
1704   /* This is not quite the same as STRIP_NOPS.  It does more.  */
1705   while (TREE_CODE (exp) == NOP_EXPR
1706          || TREE_CODE (exp) == CONVERT_EXPR
1707          || TREE_CODE (exp) == NON_LVALUE_EXPR)
1708     exp = TREE_OPERAND (exp, 0);
1709   return TREE_CONSTANT (exp);
1710 }
1711 \f
1712 /* Return first list element whose TREE_VALUE is ELEM.
1713    Return 0 if ELEM is not in LIST.  */
1714
1715 tree
1716 value_member (elem, list)
1717      tree elem, list;
1718 {
1719   while (list)
1720     {
1721       if (elem == TREE_VALUE (list))
1722         return list;
1723       list = TREE_CHAIN (list);
1724     }
1725   return NULL_TREE;
1726 }
1727
1728 /* Return first list element whose TREE_PURPOSE is ELEM.
1729    Return 0 if ELEM is not in LIST.  */
1730
1731 tree
1732 purpose_member (elem, list)
1733      tree elem, list;
1734 {
1735   while (list)
1736     {
1737       if (elem == TREE_PURPOSE (list))
1738         return list;
1739       list = TREE_CHAIN (list);
1740     }
1741   return NULL_TREE;
1742 }
1743
1744 /* Return first list element whose BINFO_TYPE is ELEM.
1745    Return 0 if ELEM is not in LIST.  */
1746
1747 tree
1748 binfo_member (elem, list)
1749      tree elem, list;
1750 {
1751   while (list)
1752     {
1753       if (elem == BINFO_TYPE (list))
1754         return list;
1755       list = TREE_CHAIN (list);
1756     }
1757   return NULL_TREE;
1758 }
1759
1760 /* Return nonzero if ELEM is part of the chain CHAIN.  */
1761
1762 int
1763 chain_member (elem, chain)
1764      tree elem, chain;
1765 {
1766   while (chain)
1767     {
1768       if (elem == chain)
1769         return 1;
1770       chain = TREE_CHAIN (chain);
1771     }
1772
1773   return 0;
1774 }
1775
1776 /* Return nonzero if ELEM is equal to TREE_VALUE (CHAIN) for any piece of
1777    chain CHAIN.  */
1778 /* ??? This function was added for machine specific attributes but is no
1779    longer used.  It could be deleted if we could confirm all front ends
1780    don't use it.  */
1781
1782 int
1783 chain_member_value (elem, chain)
1784      tree elem, chain;
1785 {
1786   while (chain)
1787     {
1788       if (elem == TREE_VALUE (chain))
1789         return 1;
1790       chain = TREE_CHAIN (chain);
1791     }
1792
1793   return 0;
1794 }
1795
1796 /* Return nonzero if ELEM is equal to TREE_PURPOSE (CHAIN)
1797    for any piece of chain CHAIN.  */
1798 /* ??? This function was added for machine specific attributes but is no
1799    longer used.  It could be deleted if we could confirm all front ends
1800    don't use it.  */
1801
1802 int
1803 chain_member_purpose (elem, chain)
1804      tree elem, chain;
1805 {
1806   while (chain)
1807     {
1808       if (elem == TREE_PURPOSE (chain))
1809         return 1;
1810       chain = TREE_CHAIN (chain);
1811     }
1812
1813   return 0;
1814 }
1815
1816 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1817    We expect a null pointer to mark the end of the chain.
1818    This is the Lisp primitive `length'.  */
1819
1820 int
1821 list_length (t)
1822      tree t;
1823 {
1824   register tree tail;
1825   register int len = 0;
1826
1827   for (tail = t; tail; tail = TREE_CHAIN (tail))
1828     len++;
1829
1830   return len;
1831 }
1832
1833 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1834    by modifying the last node in chain 1 to point to chain 2.
1835    This is the Lisp primitive `nconc'.  */
1836
1837 tree
1838 chainon (op1, op2)
1839      tree op1, op2;
1840 {
1841
1842   if (op1)
1843     {
1844       register tree t1;
1845       register tree t2;
1846
1847       for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1848         ;
1849       TREE_CHAIN (t1) = op2;
1850       for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1851         if (t2 == t1)
1852           abort ();  /* Circularity created.  */
1853       return op1;
1854     }
1855   else return op2;
1856 }
1857
1858 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
1859
1860 tree
1861 tree_last (chain)
1862      register tree chain;
1863 {
1864   register tree next;
1865   if (chain)
1866     while (next = TREE_CHAIN (chain))
1867       chain = next;
1868   return chain;
1869 }
1870
1871 /* Reverse the order of elements in the chain T,
1872    and return the new head of the chain (old last element).  */
1873
1874 tree
1875 nreverse (t)
1876      tree t;
1877 {
1878   register tree prev = 0, decl, next;
1879   for (decl = t; decl; decl = next)
1880     {
1881       next = TREE_CHAIN (decl);
1882       TREE_CHAIN (decl) = prev;
1883       prev = decl;
1884     }
1885   return prev;
1886 }
1887
1888 /* Given a chain CHAIN of tree nodes,
1889    construct and return a list of those nodes.  */
1890
1891 tree
1892 listify (chain)
1893      tree chain;
1894 {
1895   tree result = NULL_TREE;
1896   tree in_tail = chain;
1897   tree out_tail = NULL_TREE;
1898
1899   while (in_tail)
1900     {
1901       tree next = tree_cons (NULL_TREE, in_tail, NULL_TREE);
1902       if (out_tail)
1903         TREE_CHAIN (out_tail) = next;
1904       else
1905         result = next;
1906       out_tail = next;
1907       in_tail = TREE_CHAIN (in_tail);
1908     }
1909
1910   return result;
1911 }
1912 \f
1913 /* Return a newly created TREE_LIST node whose
1914    purpose and value fields are PARM and VALUE.  */
1915
1916 tree
1917 build_tree_list (parm, value)
1918      tree parm, value;
1919 {
1920   register tree t = make_node (TREE_LIST);
1921   TREE_PURPOSE (t) = parm;
1922   TREE_VALUE (t) = value;
1923   return t;
1924 }
1925
1926 /* Similar, but build on the temp_decl_obstack.  */
1927
1928 tree
1929 build_decl_list (parm, value)
1930      tree parm, value;
1931 {
1932   register tree node;
1933   register struct obstack *ambient_obstack = current_obstack;
1934   current_obstack = &temp_decl_obstack;
1935   node = build_tree_list (parm, value);
1936   current_obstack = ambient_obstack;
1937   return node;
1938 }
1939
1940 /* Return a newly created TREE_LIST node whose
1941    purpose and value fields are PARM and VALUE
1942    and whose TREE_CHAIN is CHAIN.  */
1943
1944 tree
1945 tree_cons (purpose, value, chain)
1946      tree purpose, value, chain;
1947 {
1948 #if 0
1949   register tree node = make_node (TREE_LIST);
1950 #else
1951   register int i;
1952   register tree node = (tree) obstack_alloc (current_obstack, sizeof (struct tree_list));
1953 #ifdef GATHER_STATISTICS
1954   tree_node_counts[(int)x_kind]++;
1955   tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
1956 #endif
1957
1958   for (i = (sizeof (struct tree_common) / sizeof (int)) - 1; i >= 0; i--)
1959     ((int *) node)[i] = 0;
1960
1961   TREE_SET_CODE (node, TREE_LIST);
1962   if (current_obstack == &permanent_obstack)
1963     TREE_PERMANENT (node) = 1;
1964 #endif
1965
1966   TREE_CHAIN (node) = chain;
1967   TREE_PURPOSE (node) = purpose;
1968   TREE_VALUE (node) = value;
1969   return node;
1970 }
1971
1972 /* Similar, but build on the temp_decl_obstack.  */
1973
1974 tree
1975 decl_tree_cons (purpose, value, chain)
1976      tree purpose, value, chain;
1977 {
1978   register tree node;
1979   register struct obstack *ambient_obstack = current_obstack;
1980   current_obstack = &temp_decl_obstack;
1981   node = tree_cons (purpose, value, chain);
1982   current_obstack = ambient_obstack;
1983   return node;
1984 }
1985
1986 /* Same as `tree_cons' but make a permanent object.  */
1987
1988 tree
1989 perm_tree_cons (purpose, value, chain)
1990      tree purpose, value, chain;
1991 {
1992   register tree node;
1993   register struct obstack *ambient_obstack = current_obstack;
1994   current_obstack = &permanent_obstack;
1995
1996   node = tree_cons (purpose, value, chain);
1997   current_obstack = ambient_obstack;
1998   return node;
1999 }
2000
2001 /* Same as `tree_cons', but make this node temporary, regardless.  */
2002
2003 tree
2004 temp_tree_cons (purpose, value, chain)
2005      tree purpose, value, chain;
2006 {
2007   register tree node;
2008   register struct obstack *ambient_obstack = current_obstack;
2009   current_obstack = &temporary_obstack;
2010
2011   node = tree_cons (purpose, value, chain);
2012   current_obstack = ambient_obstack;
2013   return node;
2014 }
2015
2016 /* Same as `tree_cons', but save this node if the function's RTL is saved.  */
2017
2018 tree
2019 saveable_tree_cons (purpose, value, chain)
2020      tree purpose, value, chain;
2021 {
2022   register tree node;
2023   register struct obstack *ambient_obstack = current_obstack;
2024   current_obstack = saveable_obstack;
2025
2026   node = tree_cons (purpose, value, chain);
2027   current_obstack = ambient_obstack;
2028   return node;
2029 }
2030 \f
2031 /* Return the size nominally occupied by an object of type TYPE
2032    when it resides in memory.  The value is measured in units of bytes,
2033    and its data type is that normally used for type sizes
2034    (which is the first type created by make_signed_type or
2035    make_unsigned_type).  */
2036
2037 tree
2038 size_in_bytes (type)
2039      tree type;
2040 {
2041   tree t;
2042
2043   if (type == error_mark_node)
2044     return integer_zero_node;
2045   type = TYPE_MAIN_VARIANT (type);
2046   if (TYPE_SIZE (type) == 0)
2047     {
2048       incomplete_type_error (NULL_TREE, type);
2049       return integer_zero_node;
2050     }
2051   t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
2052                   size_int (BITS_PER_UNIT));
2053   if (TREE_CODE (t) == INTEGER_CST)
2054     force_fit_type (t, 0);
2055   return t;
2056 }
2057
2058 /* Return the size of TYPE (in bytes) as an integer,
2059    or return -1 if the size can vary.  */
2060
2061 int
2062 int_size_in_bytes (type)
2063      tree type;
2064 {
2065   unsigned int size;
2066   if (type == error_mark_node)
2067     return 0;
2068   type = TYPE_MAIN_VARIANT (type);
2069   if (TYPE_SIZE (type) == 0)
2070     return -1;
2071   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
2072     return -1;
2073   if (TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0)
2074     {
2075       tree t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type),
2076                            size_int (BITS_PER_UNIT));
2077       return TREE_INT_CST_LOW (t);
2078     }
2079   size = TREE_INT_CST_LOW (TYPE_SIZE (type));
2080   return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
2081 }
2082 \f
2083 /* Return, as a tree node, the number of elements for TYPE (which is an
2084    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
2085
2086 tree
2087 array_type_nelts (type)
2088      tree type;
2089 {
2090   tree index_type = TYPE_DOMAIN (type);
2091
2092   return (integer_zerop (TYPE_MIN_VALUE (index_type))
2093           ? TYPE_MAX_VALUE (index_type)
2094           : fold (build (MINUS_EXPR, TREE_TYPE (TYPE_MAX_VALUE (index_type)),
2095                          TYPE_MAX_VALUE (index_type),
2096                          TYPE_MIN_VALUE (index_type))));
2097 }
2098 \f
2099 /* Return nonzero if arg is static -- a reference to an object in
2100    static storage.  This is not the same as the C meaning of `static'.  */
2101
2102 int
2103 staticp (arg)
2104      tree arg;
2105 {
2106   switch (TREE_CODE (arg))
2107     {
2108     case FUNCTION_DECL:
2109       /* Nested functions aren't static, since taking their address
2110          involves a trampoline.  */
2111        return decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg);
2112     case VAR_DECL:
2113       return TREE_STATIC (arg) || DECL_EXTERNAL (arg);
2114
2115     case CONSTRUCTOR:
2116       return TREE_STATIC (arg);
2117
2118     case STRING_CST:
2119       return 1;
2120
2121     case COMPONENT_REF:
2122     case BIT_FIELD_REF:
2123       return staticp (TREE_OPERAND (arg, 0));
2124
2125 #if 0
2126        /* This case is technically correct, but results in setting
2127           TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2128           compile time.  */
2129     case INDIRECT_REF:
2130       return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2131 #endif
2132
2133     case ARRAY_REF:
2134       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2135           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2136         return staticp (TREE_OPERAND (arg, 0));
2137     }
2138
2139   return 0;
2140 }
2141 \f
2142 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2143    Do this to any expression which may be used in more than one place,
2144    but must be evaluated only once.
2145
2146    Normally, expand_expr would reevaluate the expression each time.
2147    Calling save_expr produces something that is evaluated and recorded
2148    the first time expand_expr is called on it.  Subsequent calls to
2149    expand_expr just reuse the recorded value.
2150
2151    The call to expand_expr that generates code that actually computes
2152    the value is the first call *at compile time*.  Subsequent calls
2153    *at compile time* generate code to use the saved value.
2154    This produces correct result provided that *at run time* control
2155    always flows through the insns made by the first expand_expr
2156    before reaching the other places where the save_expr was evaluated.
2157    You, the caller of save_expr, must make sure this is so.
2158
2159    Constants, and certain read-only nodes, are returned with no
2160    SAVE_EXPR because that is safe.  Expressions containing placeholders
2161    are not touched; see tree.def for an explanation of what these
2162    are used for.  */
2163
2164 tree
2165 save_expr (expr)
2166      tree expr;
2167 {
2168   register tree t = fold (expr);
2169
2170   /* We don't care about whether this can be used as an lvalue in this
2171      context.  */
2172   while (TREE_CODE (t) == NON_LVALUE_EXPR)
2173     t = TREE_OPERAND (t, 0);
2174
2175   /* If the tree evaluates to a constant, then we don't want to hide that
2176      fact (i.e. this allows further folding, and direct checks for constants).
2177      However, a read-only object that has side effects cannot be bypassed.
2178      Since it is no problem to reevaluate literals, we just return the 
2179      literal node.  */
2180
2181   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
2182       || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK)
2183     return t;
2184
2185   /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2186      it means that the size or offset of some field of an object depends on
2187      the value within another field.
2188
2189      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2190      and some variable since it would then need to be both evaluated once and
2191      evaluated more than once.  Front-ends must assure this case cannot
2192      happen by surrounding any such subexpressions in their own SAVE_EXPR
2193      and forcing evaluation at the proper time.  */
2194   if (contains_placeholder_p (t))
2195     return t;
2196
2197   t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
2198
2199   /* This expression might be placed ahead of a jump to ensure that the
2200      value was computed on both sides of the jump.  So make sure it isn't
2201      eliminated as dead.  */
2202   TREE_SIDE_EFFECTS (t) = 1;
2203   return t;
2204 }
2205
2206 /* Arrange for an expression to be expanded multiple independent
2207    times.  This is useful for cleanup actions, as the backend can
2208    expand them multiple times in different places.  */
2209
2210 tree
2211 unsave_expr (expr)
2212      tree expr;
2213 {
2214   tree t;
2215
2216   /* If this is already protected, no sense in protecting it again.  */
2217   if (TREE_CODE (expr) == UNSAVE_EXPR)
2218     return expr;
2219
2220   t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
2221   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
2222   return t;
2223 }
2224
2225 /* Modify a tree in place so that all the evaluate only once things
2226    are cleared out.  Return the EXPR given.  */
2227
2228 tree
2229 unsave_expr_now (expr)
2230      tree expr;
2231 {
2232   enum tree_code code;
2233   register int i;
2234
2235   if (expr == NULL_TREE)
2236     return expr;
2237
2238   code = TREE_CODE (expr);
2239   switch (code)
2240     {
2241     case SAVE_EXPR:
2242       SAVE_EXPR_RTL (expr) = 0;
2243       break;
2244
2245     case TARGET_EXPR:
2246       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
2247       TREE_OPERAND (expr, 3) = NULL_TREE;
2248       break;
2249       
2250     case RTL_EXPR:
2251       /* I don't yet know how to emit a sequence multiple times.  */
2252       if (RTL_EXPR_SEQUENCE (expr) != 0)
2253         abort ();
2254       break;
2255
2256     case CALL_EXPR:
2257       CALL_EXPR_RTL (expr) = 0;
2258       if (TREE_OPERAND (expr, 1)
2259           && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
2260         {
2261           tree exp = TREE_OPERAND (expr, 1);
2262           while (exp)
2263             {
2264               unsave_expr_now (TREE_VALUE (exp));
2265               exp = TREE_CHAIN (exp);
2266             }
2267         }
2268       break;
2269     }
2270
2271   switch (TREE_CODE_CLASS (code))
2272     {
2273     case 'c':  /* a constant */
2274     case 't':  /* a type node */
2275     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
2276     case 'd':  /* A decl node */
2277     case 'b':  /* A block node */
2278       return expr;
2279
2280     case 'e':  /* an expression */
2281     case 'r':  /* a reference */
2282     case 's':  /* an expression with side effects */
2283     case '<':  /* a comparison expression */
2284     case '2':  /* a binary arithmetic expression */
2285     case '1':  /* a unary arithmetic expression */
2286       for (i = tree_code_length[(int) code] - 1; i >= 0; i--)
2287         unsave_expr_now (TREE_OPERAND (expr, i));
2288       return expr;
2289
2290     default:
2291       abort ();
2292     }
2293 }
2294 \f
2295 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2296    or offset that depends on a field within a record.
2297
2298    Note that we only allow such expressions within simple arithmetic
2299    or a COND_EXPR.  */
2300
2301 int
2302 contains_placeholder_p (exp)
2303      tree exp;
2304 {
2305   register enum tree_code code = TREE_CODE (exp);
2306   tree inner;
2307
2308   /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2309      in it since it is supplying a value for it.  */
2310   if (code == WITH_RECORD_EXPR)
2311     return 0;
2312   else if (code == PLACEHOLDER_EXPR)
2313     return 1;
2314
2315   switch (TREE_CODE_CLASS (code))
2316     {
2317     case 'r':
2318       for (inner = TREE_OPERAND (exp, 0);
2319            TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2320            inner = TREE_OPERAND (inner, 0))
2321         ;
2322       return TREE_CODE (inner) == PLACEHOLDER_EXPR;
2323
2324     case '1':
2325     case '2':  case '<':
2326     case 'e':
2327       switch (tree_code_length[(int) code])
2328         {
2329         case 1:
2330           return contains_placeholder_p (TREE_OPERAND (exp, 0));
2331         case 2:
2332           return (code != RTL_EXPR
2333                   && code != CONSTRUCTOR
2334                   && ! (code == SAVE_EXPR && SAVE_EXPR_RTL (exp) != 0)
2335                   && code != WITH_RECORD_EXPR
2336                   && (contains_placeholder_p (TREE_OPERAND (exp, 0))
2337                       || contains_placeholder_p (TREE_OPERAND (exp, 1))));
2338         case 3:
2339           return (code == COND_EXPR
2340                   && (contains_placeholder_p (TREE_OPERAND (exp, 0))
2341                       || contains_placeholder_p (TREE_OPERAND (exp, 1))
2342                       || contains_placeholder_p (TREE_OPERAND (exp, 2))));
2343         }
2344     }
2345
2346   return 0;
2347 }
2348 \f
2349 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2350    return a tree with all occurrences of references to F in a
2351    PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
2352    contains only arithmetic expressions.  */
2353
2354 tree
2355 substitute_in_expr (exp, f, r)
2356      tree exp;
2357      tree f;
2358      tree r;
2359 {
2360   enum tree_code code = TREE_CODE (exp);
2361   tree op0, op1, op2;
2362   tree new = 0;
2363   tree inner;
2364
2365   switch (TREE_CODE_CLASS (code))
2366     {
2367     case 'c':
2368     case 'd':
2369       return exp;
2370
2371     case 'x':
2372       if (code == PLACEHOLDER_EXPR)
2373         return exp;
2374       break;
2375
2376     case '1':
2377     case '2':
2378     case '<':
2379     case 'e':
2380       switch (tree_code_length[(int) code])
2381         {
2382         case 1:
2383           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2384           if (op0 == TREE_OPERAND (exp, 0))
2385             return exp;
2386           
2387           new = fold (build1 (code, TREE_TYPE (exp), op0));
2388           break;
2389
2390         case 2:
2391           /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2392              could, but we don't support it.  */
2393           if (code == RTL_EXPR)
2394             return exp;
2395           else if (code == CONSTRUCTOR)
2396             abort ();
2397
2398           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2399           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2400           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2401             return exp;
2402
2403           new = fold (build (code, TREE_TYPE (exp), op0, op1));
2404           break;
2405
2406         case 3:
2407           /* It cannot be that anything inside a SAVE_EXPR contains a
2408              PLACEHOLDER_EXPR.  */
2409           if (code == SAVE_EXPR)
2410             return exp;
2411
2412           if (code != COND_EXPR)
2413             abort ();
2414
2415           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2416           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2417           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2418           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2419               && op2 == TREE_OPERAND (exp, 2))
2420             return exp;
2421
2422           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2423         }
2424
2425       break;
2426
2427     case 'r':
2428       switch (code)
2429         {
2430         case COMPONENT_REF:
2431           /* If this expression is getting a value from a PLACEHOLDER_EXPR
2432              and it is the right field, replace it with R.  */
2433           for (inner = TREE_OPERAND (exp, 0);
2434                TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2435                inner = TREE_OPERAND (inner, 0))
2436             ;
2437           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2438               && TREE_OPERAND (exp, 1) == f)
2439             return r;
2440
2441           /* If this expression hasn't been completed let, leave it 
2442              alone.  */
2443           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2444               && TREE_TYPE (inner) == 0)
2445             return exp;
2446
2447           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2448           if (op0 == TREE_OPERAND (exp, 0))
2449             return exp;
2450
2451           new = fold (build (code, TREE_TYPE (exp), op0,
2452                              TREE_OPERAND (exp, 1)));
2453           break;
2454
2455         case BIT_FIELD_REF:
2456           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2457           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2458           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2459           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2460               && op2 == TREE_OPERAND (exp, 2))
2461             return exp;
2462
2463           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2464           break;
2465
2466         case INDIRECT_REF:
2467         case BUFFER_REF:
2468           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2469           if (op0 == TREE_OPERAND (exp, 0))
2470             return exp;
2471
2472           new = fold (build1 (code, TREE_TYPE (exp), op0));
2473           break;
2474         }
2475     }
2476
2477   /* If it wasn't one of the cases we handle, give up.  */
2478   if (new == 0)
2479     abort ();
2480
2481   TREE_READONLY (new) = TREE_READONLY (exp);
2482   return new;
2483 }
2484 \f
2485 /* Stabilize a reference so that we can use it any number of times
2486    without causing its operands to be evaluated more than once.
2487    Returns the stabilized reference.  This works by means of save_expr,
2488    so see the caveats in the comments about save_expr.
2489
2490    Also allows conversion expressions whose operands are references.
2491    Any other kind of expression is returned unchanged.  */
2492
2493 tree
2494 stabilize_reference (ref)
2495      tree ref;
2496 {
2497   register tree result;
2498   register enum tree_code code = TREE_CODE (ref);
2499
2500   switch (code)
2501     {
2502     case VAR_DECL:
2503     case PARM_DECL:
2504     case RESULT_DECL:
2505       /* No action is needed in this case.  */
2506       return ref;
2507
2508     case NOP_EXPR:
2509     case CONVERT_EXPR:
2510     case FLOAT_EXPR:
2511     case FIX_TRUNC_EXPR:
2512     case FIX_FLOOR_EXPR:
2513     case FIX_ROUND_EXPR:
2514     case FIX_CEIL_EXPR:
2515       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2516       break;
2517
2518     case INDIRECT_REF:
2519       result = build_nt (INDIRECT_REF,
2520                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2521       break;
2522
2523     case COMPONENT_REF:
2524       result = build_nt (COMPONENT_REF,
2525                          stabilize_reference (TREE_OPERAND (ref, 0)),
2526                          TREE_OPERAND (ref, 1));
2527       break;
2528
2529     case BIT_FIELD_REF:
2530       result = build_nt (BIT_FIELD_REF,
2531                          stabilize_reference (TREE_OPERAND (ref, 0)),
2532                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2533                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2534       break;
2535
2536     case ARRAY_REF:
2537       result = build_nt (ARRAY_REF,
2538                          stabilize_reference (TREE_OPERAND (ref, 0)),
2539                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2540       break;
2541
2542     case COMPOUND_EXPR:
2543       /* We cannot wrap the first expression in a SAVE_EXPR, as then
2544          it wouldn't be ignored.  This matters when dealing with
2545          volatiles.  */
2546       return stabilize_reference_1 (ref);
2547
2548     case RTL_EXPR:
2549       result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2550                        save_expr (build1 (ADDR_EXPR,
2551                                           build_pointer_type (TREE_TYPE (ref)),
2552                                           ref)));
2553       break;
2554
2555
2556       /* If arg isn't a kind of lvalue we recognize, make no change.
2557          Caller should recognize the error for an invalid lvalue.  */
2558     default:
2559       return ref;
2560
2561     case ERROR_MARK:
2562       return error_mark_node;
2563     }
2564
2565   TREE_TYPE (result) = TREE_TYPE (ref);
2566   TREE_READONLY (result) = TREE_READONLY (ref);
2567   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2568   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2569   TREE_RAISES (result) = TREE_RAISES (ref);
2570
2571   return result;
2572 }
2573
2574 /* Subroutine of stabilize_reference; this is called for subtrees of
2575    references.  Any expression with side-effects must be put in a SAVE_EXPR
2576    to ensure that it is only evaluated once.
2577
2578    We don't put SAVE_EXPR nodes around everything, because assigning very
2579    simple expressions to temporaries causes us to miss good opportunities
2580    for optimizations.  Among other things, the opportunity to fold in the
2581    addition of a constant into an addressing mode often gets lost, e.g.
2582    "y[i+1] += x;".  In general, we take the approach that we should not make
2583    an assignment unless we are forced into it - i.e., that any non-side effect
2584    operator should be allowed, and that cse should take care of coalescing
2585    multiple utterances of the same expression should that prove fruitful.  */
2586
2587 tree
2588 stabilize_reference_1 (e)
2589      tree e;
2590 {
2591   register tree result;
2592   register enum tree_code code = TREE_CODE (e);
2593
2594   /* We cannot ignore const expressions because it might be a reference
2595      to a const array but whose index contains side-effects.  But we can
2596      ignore things that are actual constant or that already have been
2597      handled by this function.  */
2598
2599   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
2600     return e;
2601
2602   switch (TREE_CODE_CLASS (code))
2603     {
2604     case 'x':
2605     case 't':
2606     case 'd':
2607     case 'b':
2608     case '<':
2609     case 's':
2610     case 'e':
2611     case 'r':
2612       /* If the expression has side-effects, then encase it in a SAVE_EXPR
2613          so that it will only be evaluated once.  */
2614       /* The reference (r) and comparison (<) classes could be handled as
2615          below, but it is generally faster to only evaluate them once.  */
2616       if (TREE_SIDE_EFFECTS (e))
2617         return save_expr (e);
2618       return e;
2619
2620     case 'c':
2621       /* Constants need no processing.  In fact, we should never reach
2622          here.  */
2623       return e;
2624       
2625     case '2':
2626       /* Division is slow and tends to be compiled with jumps,
2627          especially the division by powers of 2 that is often
2628          found inside of an array reference.  So do it just once.  */
2629       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2630           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2631           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2632           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2633         return save_expr (e);
2634       /* Recursively stabilize each operand.  */
2635       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2636                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
2637       break;
2638
2639     case '1':
2640       /* Recursively stabilize each operand.  */
2641       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2642       break;
2643
2644     default:
2645       abort ();
2646     }
2647   
2648   TREE_TYPE (result) = TREE_TYPE (e);
2649   TREE_READONLY (result) = TREE_READONLY (e);
2650   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2651   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2652   TREE_RAISES (result) = TREE_RAISES (e);
2653
2654   return result;
2655 }
2656 \f
2657 /* Low-level constructors for expressions.  */
2658
2659 /* Build an expression of code CODE, data type TYPE,
2660    and operands as specified by the arguments ARG1 and following arguments.
2661    Expressions and reference nodes can be created this way.
2662    Constants, decls, types and misc nodes cannot be.  */
2663
2664 tree
2665 build VPROTO((enum tree_code code, tree tt, ...))
2666 {
2667 #ifndef __STDC__
2668   enum tree_code code;
2669   tree tt;
2670 #endif
2671   va_list p;
2672   register tree t;
2673   register int length;
2674   register int i;
2675
2676   VA_START (p, tt);
2677
2678 #ifndef __STDC__
2679   code = va_arg (p, enum tree_code);
2680   tt = va_arg (p, tree);
2681 #endif
2682
2683   t = make_node (code);
2684   length = tree_code_length[(int) code];
2685   TREE_TYPE (t) = tt;
2686
2687   if (length == 2)
2688     {
2689       /* This is equivalent to the loop below, but faster.  */
2690       register tree arg0 = va_arg (p, tree);
2691       register tree arg1 = va_arg (p, tree);
2692       TREE_OPERAND (t, 0) = arg0;
2693       TREE_OPERAND (t, 1) = arg1;
2694       if ((arg0 && TREE_SIDE_EFFECTS (arg0))
2695           || (arg1 && TREE_SIDE_EFFECTS (arg1)))
2696         TREE_SIDE_EFFECTS (t) = 1;
2697       TREE_RAISES (t)
2698         = (arg0 && TREE_RAISES (arg0)) || (arg1 && TREE_RAISES (arg1));
2699     }
2700   else if (length == 1)
2701     {
2702       register tree arg0 = va_arg (p, tree);
2703
2704       /* Call build1 for this!  */
2705       if (TREE_CODE_CLASS (code) != 's')
2706         abort ();
2707       TREE_OPERAND (t, 0) = arg0;
2708       if (arg0 && TREE_SIDE_EFFECTS (arg0))
2709         TREE_SIDE_EFFECTS (t) = 1;
2710       TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
2711     }
2712   else
2713     {
2714       for (i = 0; i < length; i++)
2715         {
2716           register tree operand = va_arg (p, tree);
2717           TREE_OPERAND (t, i) = operand;
2718           if (operand)
2719             {
2720               if (TREE_SIDE_EFFECTS (operand))
2721                 TREE_SIDE_EFFECTS (t) = 1;
2722               if (TREE_RAISES (operand))
2723                 TREE_RAISES (t) = 1;
2724             }
2725         }
2726     }
2727   va_end (p);
2728   return t;
2729 }
2730
2731 /* Same as above, but only builds for unary operators.
2732    Saves lions share of calls to `build'; cuts down use
2733    of varargs, which is expensive for RISC machines.  */
2734
2735 tree
2736 build1 (code, type, node)
2737      enum tree_code code;
2738      tree type;
2739      tree node;
2740 {
2741   register struct obstack *obstack = expression_obstack;
2742   register int i, length;
2743   register tree_node_kind kind;
2744   register tree t;
2745
2746 #ifdef GATHER_STATISTICS
2747   if (TREE_CODE_CLASS (code) == 'r')
2748     kind = r_kind;
2749   else
2750     kind = e_kind;
2751 #endif
2752
2753   length = sizeof (struct tree_exp);
2754
2755   t = (tree) obstack_alloc (obstack, length);
2756
2757 #ifdef GATHER_STATISTICS
2758   tree_node_counts[(int)kind]++;
2759   tree_node_sizes[(int)kind] += length;
2760 #endif
2761
2762   for (i = (length / sizeof (int)) - 1; i >= 0; i--)
2763     ((int *) t)[i] = 0;
2764
2765   TREE_TYPE (t) = type;
2766   TREE_SET_CODE (t, code);
2767
2768   if (obstack == &permanent_obstack)
2769     TREE_PERMANENT (t) = 1;
2770
2771   TREE_OPERAND (t, 0) = node;
2772   if (node)
2773     {
2774       if (TREE_SIDE_EFFECTS (node))
2775         TREE_SIDE_EFFECTS (t) = 1;
2776       if (TREE_RAISES (node))
2777         TREE_RAISES (t) = 1;
2778     }
2779
2780   return t;
2781 }
2782
2783 /* Similar except don't specify the TREE_TYPE
2784    and leave the TREE_SIDE_EFFECTS as 0.
2785    It is permissible for arguments to be null,
2786    or even garbage if their values do not matter.  */
2787
2788 tree
2789 build_nt VPROTO((enum tree_code code, ...))
2790 {
2791 #ifndef __STDC__
2792   enum tree_code code;
2793 #endif
2794   va_list p;
2795   register tree t;
2796   register int length;
2797   register int i;
2798
2799   VA_START (p, code);
2800
2801 #ifndef __STDC__
2802   code = va_arg (p, enum tree_code);
2803 #endif
2804
2805   t = make_node (code);
2806   length = tree_code_length[(int) code];
2807
2808   for (i = 0; i < length; i++)
2809     TREE_OPERAND (t, i) = va_arg (p, tree);
2810
2811   va_end (p);
2812   return t;
2813 }
2814
2815 /* Similar to `build_nt', except we build
2816    on the temp_decl_obstack, regardless.  */
2817
2818 tree
2819 build_parse_node VPROTO((enum tree_code code, ...))
2820 {
2821 #ifndef __STDC__
2822   enum tree_code code;
2823 #endif
2824   register struct obstack *ambient_obstack = expression_obstack;
2825   va_list p;
2826   register tree t;
2827   register int length;
2828   register int i;
2829
2830   VA_START (p, code);
2831
2832 #ifndef __STDC__
2833   code = va_arg (p, enum tree_code);
2834 #endif
2835
2836   expression_obstack = &temp_decl_obstack;
2837
2838   t = make_node (code);
2839   length = tree_code_length[(int) code];
2840
2841   for (i = 0; i < length; i++)
2842     TREE_OPERAND (t, i) = va_arg (p, tree);
2843
2844   va_end (p);
2845   expression_obstack = ambient_obstack;
2846   return t;
2847 }
2848
2849 #if 0
2850 /* Commented out because this wants to be done very
2851    differently.  See cp-lex.c.  */
2852 tree
2853 build_op_identifier (op1, op2)
2854      tree op1, op2;
2855 {
2856   register tree t = make_node (OP_IDENTIFIER);
2857   TREE_PURPOSE (t) = op1;
2858   TREE_VALUE (t) = op2;
2859   return t;
2860 }
2861 #endif
2862 \f
2863 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2864    We do NOT enter this node in any sort of symbol table.
2865
2866    layout_decl is used to set up the decl's storage layout.
2867    Other slots are initialized to 0 or null pointers.  */
2868
2869 tree
2870 build_decl (code, name, type)
2871      enum tree_code code;
2872      tree name, type;
2873 {
2874   register tree t;
2875
2876   t = make_node (code);
2877
2878 /*  if (type == error_mark_node)
2879     type = integer_type_node; */
2880 /* That is not done, deliberately, so that having error_mark_node
2881    as the type can suppress useless errors in the use of this variable.  */
2882
2883   DECL_NAME (t) = name;
2884   DECL_ASSEMBLER_NAME (t) = name;
2885   TREE_TYPE (t) = type;
2886
2887   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2888     layout_decl (t, 0);
2889   else if (code == FUNCTION_DECL)
2890     DECL_MODE (t) = FUNCTION_MODE;
2891
2892   return t;
2893 }
2894 \f
2895 /* BLOCK nodes are used to represent the structure of binding contours
2896    and declarations, once those contours have been exited and their contents
2897    compiled.  This information is used for outputting debugging info.  */
2898
2899 tree
2900 build_block (vars, tags, subblocks, supercontext, chain)
2901      tree vars, tags, subblocks, supercontext, chain;
2902 {
2903   register tree block = make_node (BLOCK);
2904   BLOCK_VARS (block) = vars;
2905   BLOCK_TYPE_TAGS (block) = tags;
2906   BLOCK_SUBBLOCKS (block) = subblocks;
2907   BLOCK_SUPERCONTEXT (block) = supercontext;
2908   BLOCK_CHAIN (block) = chain;
2909   return block;
2910 }
2911 \f
2912 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
2913    is ATTRIBUTE.  */
2914
2915 tree
2916 build_decl_attribute_variant (ddecl, attribute)
2917      tree ddecl, attribute;
2918 {
2919   DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
2920   return ddecl;
2921 }
2922
2923 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2924    is ATTRIBUTE.
2925
2926    Record such modified types already made so we don't make duplicates.  */
2927
2928 tree
2929 build_type_attribute_variant (ttype, attribute)
2930      tree ttype, attribute;
2931 {
2932   if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2933     {
2934       register int hashcode;
2935       register struct obstack *ambient_obstack = current_obstack;
2936       tree ntype;
2937
2938       if (ambient_obstack != &permanent_obstack)
2939         current_obstack = TYPE_OBSTACK (ttype);
2940
2941       ntype = copy_node (ttype);
2942       current_obstack = ambient_obstack;
2943
2944       TYPE_POINTER_TO (ntype) = 0;
2945       TYPE_REFERENCE_TO (ntype) = 0;
2946       TYPE_ATTRIBUTES (ntype) = attribute;
2947
2948       /* Create a new main variant of TYPE.  */
2949       TYPE_MAIN_VARIANT (ntype) = ntype;
2950       TYPE_NEXT_VARIANT (ntype) = 0;
2951       TYPE_READONLY (ntype) = TYPE_VOLATILE (ntype) = 0;
2952
2953       hashcode = TYPE_HASH (TREE_CODE (ntype))
2954                  + TYPE_HASH (TREE_TYPE (ntype))
2955                  + attribute_hash_list (attribute);
2956
2957       switch (TREE_CODE (ntype))
2958         {
2959           case FUNCTION_TYPE:
2960             hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
2961             break;
2962           case ARRAY_TYPE:
2963             hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
2964             break;
2965           case INTEGER_TYPE:
2966             hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
2967             break;
2968           case REAL_TYPE:
2969             hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
2970             break;
2971         }
2972
2973       ntype = type_hash_canon (hashcode, ntype);
2974       ttype = build_type_variant (ntype, TYPE_READONLY (ttype),
2975                                   TYPE_VOLATILE (ttype));
2976     }
2977
2978   return ttype;
2979 }
2980
2981 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
2982    or type TYPE and 0 otherwise.  Validity is determined the configuration
2983    macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE.  */
2984
2985 int
2986 valid_machine_attribute (attr_name, attr_args, decl, type)
2987      tree attr_name, attr_args;
2988      tree decl;
2989      tree type;
2990 {
2991   int valid = 0;
2992   tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
2993   tree type_attr_list = TYPE_ATTRIBUTES (type);
2994
2995   if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
2996     abort ();
2997
2998 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
2999   if (decl != 0
3000       && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name, attr_args))
3001     {
3002       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3003                                     decl_attr_list);
3004
3005       if (attr != NULL_TREE)
3006         {
3007           /* Override existing arguments.  Declarations are unique so we can
3008              modify this in place.  */
3009           TREE_VALUE (attr) = attr_args;
3010         }
3011       else
3012         {
3013           decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3014           decl = build_decl_attribute_variant (decl, decl_attr_list);
3015         }
3016
3017       valid = 1;
3018     }
3019 #endif
3020
3021 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3022   if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name, attr_args))
3023     {
3024       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3025                                     type_attr_list);
3026
3027       if (attr != NULL_TREE)
3028         {
3029           /* Override existing arguments.
3030              ??? This currently works since attribute arguments are not
3031              included in `attribute_hash_list'.  Something more complicated
3032              may be needed in the future.  */
3033           TREE_VALUE (attr) = attr_args;
3034         }
3035       else
3036         {
3037           type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3038           type = build_type_attribute_variant (type, type_attr_list);
3039         }
3040       if (decl != 0)
3041         TREE_TYPE (decl) = type;
3042       valid = 1;
3043     }
3044
3045   /* Handle putting a type attribute on pointer-to-function-type by putting
3046      the attribute on the function type.  */
3047   else if (TREE_CODE (type) == POINTER_TYPE
3048            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3049            && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3050                                             attr_name, attr_args))
3051     {
3052       tree inner_type = TREE_TYPE (type);
3053       tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3054       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3055                                     type_attr_list);
3056
3057       if (attr != NULL_TREE)
3058         TREE_VALUE (attr) = attr_args;
3059       else
3060         {
3061           inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3062           inner_type = build_type_attribute_variant (inner_type,
3063                                                      inner_attr_list);
3064         }
3065
3066       if (decl != 0)
3067         TREE_TYPE (decl) = build_pointer_type (inner_type);
3068
3069       valid = 1;
3070     }
3071 #endif
3072
3073   return valid;
3074 }
3075
3076 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3077    or zero if not.
3078
3079    We try both `text' and `__text__', ATTR may be either one.  */
3080 /* ??? It might be a reasonable simplification to require ATTR to be only
3081    `text'.  One might then also require attribute lists to be stored in
3082    their canonicalized form.  */
3083
3084 int
3085 is_attribute_p (attr, ident)
3086      char *attr;
3087      tree ident;
3088 {
3089   int ident_len, attr_len;
3090   char *p;
3091
3092   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3093     return 0;
3094
3095   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3096     return 1;
3097
3098   p = IDENTIFIER_POINTER (ident);
3099   ident_len = strlen (p);
3100   attr_len = strlen (attr);
3101
3102   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3103   if (attr[0] == '_')
3104     {
3105       if (attr[1] != '_'
3106           || attr[attr_len - 2] != '_'
3107           || attr[attr_len - 1] != '_')
3108         abort ();
3109       if (ident_len == attr_len - 4
3110           && strncmp (attr + 2, p, attr_len - 4) == 0)
3111         return 1;
3112     }
3113   else
3114     {
3115       if (ident_len == attr_len + 4
3116           && p[0] == '_' && p[1] == '_'
3117           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3118           && strncmp (attr, p + 2, attr_len) == 0)
3119         return 1;
3120     }
3121
3122   return 0;
3123 }
3124
3125 /* Given an attribute name and a list of attributes, return a pointer to the
3126    attribute's list element if the attribute is part of the list, or NULL_TREE
3127    if not found.  */
3128
3129 tree
3130 lookup_attribute (attr_name, list)
3131      char *attr_name;
3132      tree list;
3133 {
3134   tree l;
3135
3136   for (l = list; l; l = TREE_CHAIN (l))
3137     {
3138       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3139         abort ();
3140       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3141         return l;
3142     }
3143
3144   return NULL_TREE;
3145 }
3146
3147 /* Return an attribute list that is the union of a1 and a2.  */
3148
3149 tree
3150 merge_attributes (a1, a2)
3151      register tree a1, a2;
3152 {
3153   tree attributes;
3154
3155   /* Either one unset?  Take the set one.  */
3156
3157   if (! (attributes = a1))
3158     attributes = a2;
3159
3160   /* One that completely contains the other?  Take it.  */
3161
3162   else if (a2 && ! attribute_list_contained (a1, a2))
3163     if (attribute_list_contained (a2, a1))
3164       attributes = a2;
3165     else
3166       {
3167         /* Pick the longest list, and hang on the other list.  */
3168         /* ??? For the moment we punt on the issue of attrs with args.  */
3169
3170         if (list_length (a1) < list_length (a2))
3171           attributes = a2, a2 = a1;
3172
3173         for (; a2; a2 = TREE_CHAIN (a2))
3174           if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3175                                 attributes) == NULL_TREE)
3176             {
3177               a1 = copy_node (a2);
3178               TREE_CHAIN (a1) = attributes;
3179               attributes = a1;
3180             }
3181       }
3182   return attributes;
3183 }
3184 \f
3185 /* Return a type like TYPE except that its TYPE_READONLY is CONSTP
3186    and its TYPE_VOLATILE is VOLATILEP.
3187
3188    Such variant types already made are recorded so that duplicates
3189    are not made.
3190
3191    A variant types should never be used as the type of an expression.
3192    Always copy the variant information into the TREE_READONLY
3193    and TREE_THIS_VOLATILE of the expression, and then give the expression
3194    as its type the "main variant", the variant whose TYPE_READONLY
3195    and TYPE_VOLATILE are zero.  Use TYPE_MAIN_VARIANT to find the
3196    main variant.  */
3197
3198 tree
3199 build_type_variant (type, constp, volatilep)
3200      tree type;
3201      int constp, volatilep;
3202 {
3203   register tree t;
3204
3205   /* Treat any nonzero argument as 1.  */
3206   constp = !!constp;
3207   volatilep = !!volatilep;
3208
3209   /* Search the chain of variants to see if there is already one there just
3210      like the one we need to have.  If so, use that existing one.  We must
3211      preserve the TYPE_NAME, since there is code that depends on this.  */
3212
3213   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3214     if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
3215         && TYPE_NAME (t) == TYPE_NAME (type))
3216       return t;
3217
3218   /* We need a new one.  */
3219
3220   t = build_type_copy (type);
3221   TYPE_READONLY (t) = constp;
3222   TYPE_VOLATILE (t) = volatilep;
3223
3224   return t;
3225 }
3226
3227 /* Give TYPE a new main variant: NEW_MAIN.
3228    This is the right thing to do only when something else
3229    about TYPE is modified in place.  */
3230
3231 void
3232 change_main_variant (type, new_main)
3233      tree type, new_main;
3234 {
3235   tree t;
3236   tree omain = TYPE_MAIN_VARIANT (type);
3237
3238   /* Remove TYPE from the TYPE_NEXT_VARIANT chain of its main variant.  */
3239   if (TYPE_NEXT_VARIANT (omain) == type)
3240     TYPE_NEXT_VARIANT (omain) = TYPE_NEXT_VARIANT (type);
3241   else
3242     for (t = TYPE_NEXT_VARIANT (omain); t && TYPE_NEXT_VARIANT (t);
3243          t = TYPE_NEXT_VARIANT (t))
3244       if (TYPE_NEXT_VARIANT (t) == type)
3245         {
3246           TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (type);
3247           break;
3248         }
3249
3250   TYPE_MAIN_VARIANT (type) = new_main;
3251   TYPE_NEXT_VARIANT (type) = TYPE_NEXT_VARIANT (new_main);
3252   TYPE_NEXT_VARIANT (new_main) = type;
3253 }
3254
3255 /* Create a new variant of TYPE, equivalent but distinct.
3256    This is so the caller can modify it.  */
3257
3258 tree
3259 build_type_copy (type)
3260      tree type;
3261 {
3262   register tree t, m = TYPE_MAIN_VARIANT (type);
3263   register struct obstack *ambient_obstack = current_obstack;
3264
3265   current_obstack = TYPE_OBSTACK (type);
3266   t = copy_node (type);
3267   current_obstack = ambient_obstack;
3268
3269   TYPE_POINTER_TO (t) = 0;
3270   TYPE_REFERENCE_TO (t) = 0;
3271
3272   /* Add this type to the chain of variants of TYPE.  */
3273   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3274   TYPE_NEXT_VARIANT (m) = t;
3275
3276   return t;
3277 }
3278 \f
3279 /* Hashing of types so that we don't make duplicates.
3280    The entry point is `type_hash_canon'.  */
3281
3282 /* Each hash table slot is a bucket containing a chain
3283    of these structures.  */
3284
3285 struct type_hash
3286 {
3287   struct type_hash *next;       /* Next structure in the bucket.  */
3288   int hashcode;                 /* Hash code of this type.  */
3289   tree type;                    /* The type recorded here.  */
3290 };
3291
3292 /* Now here is the hash table.  When recording a type, it is added
3293    to the slot whose index is the hash code mod the table size.
3294    Note that the hash table is used for several kinds of types
3295    (function types, array types and array index range types, for now).
3296    While all these live in the same table, they are completely independent,
3297    and the hash code is computed differently for each of these.  */
3298
3299 #define TYPE_HASH_SIZE 59
3300 struct type_hash *type_hash_table[TYPE_HASH_SIZE];
3301
3302 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3303    with types in the TREE_VALUE slots), by adding the hash codes
3304    of the individual types.  */
3305
3306 int
3307 type_hash_list (list)
3308      tree list;
3309 {
3310   register int hashcode;
3311   register tree tail;
3312   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3313     hashcode += TYPE_HASH (TREE_VALUE (tail));
3314   return hashcode;
3315 }
3316
3317 /* Look in the type hash table for a type isomorphic to TYPE.
3318    If one is found, return it.  Otherwise return 0.  */
3319
3320 tree
3321 type_hash_lookup (hashcode, type)
3322      int hashcode;
3323      tree type;
3324 {
3325   register struct type_hash *h;
3326   for (h = type_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
3327     if (h->hashcode == hashcode
3328         && TREE_CODE (h->type) == TREE_CODE (type)
3329         && TREE_TYPE (h->type) == TREE_TYPE (type)
3330         && attribute_list_equal (TYPE_ATTRIBUTES (h->type),
3331                                    TYPE_ATTRIBUTES (type))
3332         && (TYPE_MAX_VALUE (h->type) == TYPE_MAX_VALUE (type)
3333             || tree_int_cst_equal (TYPE_MAX_VALUE (h->type),
3334                                    TYPE_MAX_VALUE (type)))
3335         && (TYPE_MIN_VALUE (h->type) == TYPE_MIN_VALUE (type)
3336             || tree_int_cst_equal (TYPE_MIN_VALUE (h->type),
3337                                    TYPE_MIN_VALUE (type)))
3338         /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
3339         && (TYPE_DOMAIN (h->type) == TYPE_DOMAIN (type)
3340             || (TYPE_DOMAIN (h->type)
3341                 && TREE_CODE (TYPE_DOMAIN (h->type)) == TREE_LIST
3342                 && TYPE_DOMAIN (type)
3343                 && TREE_CODE (TYPE_DOMAIN (type)) == TREE_LIST
3344                 && type_list_equal (TYPE_DOMAIN (h->type),
3345                                     TYPE_DOMAIN (type)))))
3346       return h->type;
3347   return 0;
3348 }
3349
3350 /* Add an entry to the type-hash-table
3351    for a type TYPE whose hash code is HASHCODE.  */
3352
3353 void
3354 type_hash_add (hashcode, type)
3355      int hashcode;
3356      tree type;
3357 {
3358   register struct type_hash *h;
3359
3360   h = (struct type_hash *) oballoc (sizeof (struct type_hash));
3361   h->hashcode = hashcode;
3362   h->type = type;
3363   h->next = type_hash_table[hashcode % TYPE_HASH_SIZE];
3364   type_hash_table[hashcode % TYPE_HASH_SIZE] = h;
3365 }
3366
3367 /* Given TYPE, and HASHCODE its hash code, return the canonical
3368    object for an identical type if one already exists.
3369    Otherwise, return TYPE, and record it as the canonical object
3370    if it is a permanent object.
3371
3372    To use this function, first create a type of the sort you want.
3373    Then compute its hash code from the fields of the type that
3374    make it different from other similar types.
3375    Then call this function and use the value.
3376    This function frees the type you pass in if it is a duplicate.  */
3377
3378 /* Set to 1 to debug without canonicalization.  Never set by program.  */
3379 int debug_no_type_hash = 0;
3380
3381 tree
3382 type_hash_canon (hashcode, type)
3383      int hashcode;
3384      tree type;
3385 {
3386   tree t1;
3387
3388   if (debug_no_type_hash)
3389     return type;
3390
3391   t1 = type_hash_lookup (hashcode, type);
3392   if (t1 != 0)
3393     {
3394       obstack_free (TYPE_OBSTACK (type), type);
3395 #ifdef GATHER_STATISTICS
3396       tree_node_counts[(int)t_kind]--;
3397       tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
3398 #endif
3399       return t1;
3400     }
3401
3402   /* If this is a permanent type, record it for later reuse.  */
3403   if (TREE_PERMANENT (type))
3404     type_hash_add (hashcode, type);
3405
3406   return type;
3407 }
3408
3409 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3410    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3411    by adding the hash codes of the individual attributes.  */
3412
3413 int
3414 attribute_hash_list (list)
3415      tree list;
3416 {
3417   register int hashcode;
3418   register tree tail;
3419   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3420     /* ??? Do we want to add in TREE_VALUE too? */
3421     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3422   return hashcode;
3423 }
3424
3425 /* Given two lists of attributes, return true if list l2 is
3426    equivalent to l1.  */
3427
3428 int
3429 attribute_list_equal (l1, l2)
3430      tree l1, l2;
3431 {
3432    return attribute_list_contained (l1, l2)
3433           && attribute_list_contained (l2, l1);
3434 }
3435
3436 /* Given two lists of attributes, return true if list L2 is
3437    completely contained within L1.  */
3438 /* ??? This would be faster if attribute names were stored in a canonicalized
3439    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3440    must be used to show these elements are equivalent (which they are).  */
3441 /* ??? It's not clear that attributes with arguments will always be handled
3442    correctly.  */
3443
3444 int
3445 attribute_list_contained (l1, l2)
3446      tree l1, l2;
3447 {
3448   register tree t1, t2;
3449
3450   /* First check the obvious, maybe the lists are identical.  */
3451   if (l1 == l2)
3452      return 1;
3453
3454   /* Maybe the lists are similar.  */
3455   for (t1 = l1, t2 = l2;
3456        t1 && t2
3457         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3458         && TREE_VALUE (t1) == TREE_VALUE (t2);
3459        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3460
3461   /* Maybe the lists are equal.  */
3462   if (t1 == 0 && t2 == 0)
3463      return 1;
3464
3465   for (; t2; t2 = TREE_CHAIN (t2))
3466     {
3467       tree attr
3468         = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3469
3470       if (attr == NULL_TREE)
3471         return 0;
3472       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3473         return 0;
3474     }
3475
3476   return 1;
3477 }
3478
3479 /* Given two lists of types
3480    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3481    return 1 if the lists contain the same types in the same order.
3482    Also, the TREE_PURPOSEs must match.  */
3483
3484 int
3485 type_list_equal (l1, l2)
3486      tree l1, l2;
3487 {
3488   register tree t1, t2;
3489
3490   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3491     if (TREE_VALUE (t1) != TREE_VALUE (t2)
3492         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3493             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3494                   && (TREE_TYPE (TREE_PURPOSE (t1))
3495                       == TREE_TYPE (TREE_PURPOSE (t2))))))
3496       return 0;
3497
3498   return t1 == t2;
3499 }
3500
3501 /* Nonzero if integer constants T1 and T2
3502    represent the same constant value.  */
3503
3504 int
3505 tree_int_cst_equal (t1, t2)
3506      tree t1, t2;
3507 {
3508   if (t1 == t2)
3509     return 1;
3510   if (t1 == 0 || t2 == 0)
3511     return 0;
3512   if (TREE_CODE (t1) == INTEGER_CST
3513       && TREE_CODE (t2) == INTEGER_CST
3514       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3515       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3516     return 1;
3517   return 0;
3518 }
3519
3520 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3521    The precise way of comparison depends on their data type.  */
3522
3523 int
3524 tree_int_cst_lt (t1, t2)
3525      tree t1, t2;
3526 {
3527   if (t1 == t2)
3528     return 0;
3529
3530   if (!TREE_UNSIGNED (TREE_TYPE (t1)))
3531     return INT_CST_LT (t1, t2);
3532   return INT_CST_LT_UNSIGNED (t1, t2);
3533 }
3534
3535 /* Return an indication of the sign of the integer constant T.
3536    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3537    Note that -1 will never be returned it T's type is unsigned.  */
3538
3539 int
3540 tree_int_cst_sgn (t)
3541      tree t;
3542 {
3543   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3544     return 0;
3545   else if (TREE_UNSIGNED (TREE_TYPE (t)))
3546     return 1;
3547   else if (TREE_INT_CST_HIGH (t) < 0)
3548     return -1;
3549   else
3550     return 1;
3551 }
3552
3553 /* Compare two constructor-element-type constants.  Return 1 if the lists
3554    are known to be equal; otherwise return 0.  */
3555
3556 int
3557 simple_cst_list_equal (l1, l2)
3558      tree l1, l2;
3559 {
3560   while (l1 != NULL_TREE && l2 != NULL_TREE)
3561     {
3562       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3563         return 0;
3564
3565       l1 = TREE_CHAIN (l1);
3566       l2 = TREE_CHAIN (l2);
3567     }
3568
3569   return (l1 == l2);
3570 }
3571
3572 /* Return truthvalue of whether T1 is the same tree structure as T2.
3573    Return 1 if they are the same.
3574    Return 0 if they are understandably different.
3575    Return -1 if either contains tree structure not understood by
3576    this function.  */
3577
3578 int
3579 simple_cst_equal (t1, t2)
3580      tree t1, t2;
3581 {
3582   register enum tree_code code1, code2;
3583   int cmp;
3584
3585   if (t1 == t2)
3586     return 1;
3587   if (t1 == 0 || t2 == 0)
3588     return 0;
3589
3590   code1 = TREE_CODE (t1);
3591   code2 = TREE_CODE (t2);
3592
3593   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3594     if (code2 == NOP_EXPR || code2 == CONVERT_EXPR || code2 == NON_LVALUE_EXPR)
3595       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3596     else
3597       return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3598   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3599            || code2 == NON_LVALUE_EXPR)
3600     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3601
3602   if (code1 != code2)
3603     return 0;
3604
3605   switch (code1)
3606     {
3607     case INTEGER_CST:
3608       return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3609         && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
3610
3611     case REAL_CST:
3612       return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
3613
3614     case STRING_CST:
3615       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3616         && !bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3617                   TREE_STRING_LENGTH (t1));
3618
3619     case CONSTRUCTOR:
3620       abort ();
3621
3622     case SAVE_EXPR:
3623       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3624
3625     case CALL_EXPR:
3626       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3627       if (cmp <= 0)
3628         return cmp;
3629       return simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3630
3631     case TARGET_EXPR:
3632       /* Special case: if either target is an unallocated VAR_DECL,
3633          it means that it's going to be unified with whatever the
3634          TARGET_EXPR is really supposed to initialize, so treat it
3635          as being equivalent to anything.  */
3636       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3637            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
3638            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
3639           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3640               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
3641               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
3642         cmp = 1;
3643       else
3644         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3645       if (cmp <= 0)
3646         return cmp;
3647       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3648
3649     case WITH_CLEANUP_EXPR:
3650       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3651       if (cmp <= 0)
3652         return cmp;
3653       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
3654
3655     case COMPONENT_REF:
3656       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3657         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3658       return 0;
3659
3660     case VAR_DECL:
3661     case PARM_DECL:
3662     case CONST_DECL:
3663     case FUNCTION_DECL:
3664       return 0;
3665     }
3666
3667   /* This general rule works for most tree codes.  All exceptions should be
3668      handled above.  If this is a language-specific tree code, we can't
3669      trust what might be in the operand, so say we don't know
3670      the situation.  */
3671   if ((int) code1
3672       >= sizeof standard_tree_code_type / sizeof standard_tree_code_type[0])
3673     return -1;
3674
3675   switch (TREE_CODE_CLASS (code1))
3676     {
3677       int i;
3678     case '1':
3679     case '2':
3680     case '<':
3681     case 'e':
3682     case 'r':
3683     case 's':
3684       cmp = 1;
3685       for (i=0; i<tree_code_length[(int) code1]; ++i)
3686         {
3687           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
3688           if (cmp <= 0)
3689             return cmp;
3690         }
3691       return cmp;
3692     }
3693
3694   return -1;
3695 }
3696 \f
3697 /* Constructors for pointer, array and function types.
3698    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
3699    constructed by language-dependent code, not here.)  */
3700
3701 /* Construct, lay out and return the type of pointers to TO_TYPE.
3702    If such a type has already been constructed, reuse it.  */
3703
3704 tree
3705 build_pointer_type (to_type)
3706      tree to_type;
3707 {
3708   register tree t = TYPE_POINTER_TO (to_type);
3709
3710   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
3711
3712   if (t)
3713     return t;
3714
3715   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
3716   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
3717   t = make_node (POINTER_TYPE);
3718   pop_obstacks ();
3719
3720   TREE_TYPE (t) = to_type;
3721
3722   /* Record this type as the pointer to TO_TYPE.  */
3723   TYPE_POINTER_TO (to_type) = t;
3724
3725   /* Lay out the type.  This function has many callers that are concerned
3726      with expression-construction, and this simplifies them all.
3727      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
3728   layout_type (t);
3729
3730   return t;
3731 }
3732
3733 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
3734    MAXVAL should be the maximum value in the domain
3735    (one less than the length of the array).  */
3736
3737 tree
3738 build_index_type (maxval)
3739      tree maxval;
3740 {
3741   register tree itype = make_node (INTEGER_TYPE);
3742   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
3743   TYPE_MIN_VALUE (itype) = build_int_2 (0, 0);
3744   TREE_TYPE (TYPE_MIN_VALUE (itype)) = sizetype;
3745   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
3746   TYPE_MODE (itype) = TYPE_MODE (sizetype);
3747   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
3748   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
3749   if (TREE_CODE (maxval) == INTEGER_CST)
3750     {
3751       int maxint = (int) TREE_INT_CST_LOW (maxval);
3752       /* If the domain should be empty, make sure the maxval
3753          remains -1 and is not spoiled by truncation.  */
3754       if (INT_CST_LT (maxval, integer_zero_node))
3755         {
3756           TYPE_MAX_VALUE (itype) = build_int_2 (-1, -1);
3757           TREE_TYPE (TYPE_MAX_VALUE (itype)) = sizetype;
3758         }
3759       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
3760     }
3761   else
3762     return itype;
3763 }
3764
3765 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
3766    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
3767    low bound LOWVAL and high bound HIGHVAL.
3768    if TYPE==NULL_TREE, sizetype is used.  */
3769
3770 tree
3771 build_range_type (type, lowval, highval)
3772      tree type, lowval, highval;
3773 {
3774   register tree itype = make_node (INTEGER_TYPE);
3775   TREE_TYPE (itype) = type;
3776   if (type == NULL_TREE)
3777     type = sizetype;
3778   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
3779   TYPE_MIN_VALUE (itype) = convert (type, lowval);
3780   TYPE_MAX_VALUE (itype) = convert (type, highval);
3781   TYPE_MODE (itype) = TYPE_MODE (type);
3782   TYPE_SIZE (itype) = TYPE_SIZE (type);
3783   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
3784   if ((TREE_CODE (lowval) == INTEGER_CST)
3785       && (TREE_CODE (highval) == INTEGER_CST))
3786     {
3787       HOST_WIDE_INT highint = TREE_INT_CST_LOW (highval);
3788       HOST_WIDE_INT lowint = TREE_INT_CST_LOW (lowval);
3789       int maxint = (int) (highint - lowint);
3790       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
3791     }
3792   else
3793     return itype;
3794 }
3795
3796 /* Just like build_index_type, but takes lowval and highval instead
3797    of just highval (maxval).  */
3798
3799 tree
3800 build_index_2_type (lowval,highval)
3801      tree lowval, highval;
3802 {
3803   return build_range_type (NULL_TREE, lowval, highval);
3804 }
3805
3806 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
3807    Needed because when index types are not hashed, equal index types
3808    built at different times appear distinct, even though structurally,
3809    they are not.  */
3810
3811 int
3812 index_type_equal (itype1, itype2)
3813      tree itype1, itype2;
3814 {
3815   if (TREE_CODE (itype1) != TREE_CODE (itype2))
3816     return 0;
3817   if (TREE_CODE (itype1) == INTEGER_TYPE)
3818     {
3819       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
3820           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
3821           || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
3822           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
3823         return 0;
3824       if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
3825                                  TYPE_MIN_VALUE (itype2))
3826           && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
3827                                     TYPE_MAX_VALUE (itype2)))
3828         return 1;
3829     }
3830
3831   return 0;
3832 }
3833
3834 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
3835    and number of elements specified by the range of values of INDEX_TYPE.
3836    If such a type has already been constructed, reuse it.  */
3837
3838 tree
3839 build_array_type (elt_type, index_type)
3840      tree elt_type, index_type;
3841 {
3842   register tree t;
3843   int hashcode;
3844
3845   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
3846     {
3847       error ("arrays of functions are not meaningful");
3848       elt_type = integer_type_node;
3849     }
3850
3851   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
3852   build_pointer_type (elt_type);
3853
3854   /* Allocate the array after the pointer type,
3855      in case we free it in type_hash_canon.  */
3856   t = make_node (ARRAY_TYPE);
3857   TREE_TYPE (t) = elt_type;
3858   TYPE_DOMAIN (t) = index_type;
3859
3860   if (index_type == 0)
3861     {
3862       return t;
3863     }
3864
3865   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
3866   t = type_hash_canon (hashcode, t);
3867
3868 #if 0 /* This led to crashes, because it could put a temporary node
3869          on the TYPE_NEXT_VARIANT chain of a permanent one.  */
3870   /* The main variant of an array type should always
3871      be an array whose element type is the main variant.  */
3872   if (elt_type != TYPE_MAIN_VARIANT (elt_type))
3873     change_main_variant (t, build_array_type (TYPE_MAIN_VARIANT (elt_type),
3874                                               index_type));
3875 #endif
3876
3877   if (TYPE_SIZE (t) == 0)
3878     layout_type (t);
3879   return t;
3880 }
3881
3882 /* Construct, lay out and return
3883    the type of functions returning type VALUE_TYPE
3884    given arguments of types ARG_TYPES.
3885    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
3886    are data type nodes for the arguments of the function.
3887    If such a type has already been constructed, reuse it.  */
3888
3889 tree
3890 build_function_type (value_type, arg_types)
3891      tree value_type, arg_types;
3892 {
3893   register tree t;
3894   int hashcode;
3895
3896   if (TREE_CODE (value_type) == FUNCTION_TYPE)
3897     {
3898       error ("function return type cannot be function");
3899       value_type = integer_type_node;
3900     }
3901
3902   /* Make a node of the sort we want.  */
3903   t = make_node (FUNCTION_TYPE);
3904   TREE_TYPE (t) = value_type;
3905   TYPE_ARG_TYPES (t) = arg_types;
3906
3907   /* If we already have such a type, use the old one and free this one.  */
3908   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
3909   t = type_hash_canon (hashcode, t);
3910
3911   if (TYPE_SIZE (t) == 0)
3912     layout_type (t);
3913   return t;
3914 }
3915
3916 /* Build the node for the type of references-to-TO_TYPE.  */
3917
3918 tree
3919 build_reference_type (to_type)
3920      tree to_type;
3921 {
3922   register tree t = TYPE_REFERENCE_TO (to_type);
3923   register struct obstack *ambient_obstack = current_obstack;
3924   register struct obstack *ambient_saveable_obstack = saveable_obstack;
3925
3926   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
3927
3928   if (t)
3929     return t;
3930
3931   /* We need a new one.  If TO_TYPE is permanent, make this permanent too.  */
3932   if (TREE_PERMANENT (to_type))
3933     {
3934       current_obstack = &permanent_obstack;
3935       saveable_obstack = &permanent_obstack;
3936     }
3937
3938   t = make_node (REFERENCE_TYPE);
3939   TREE_TYPE (t) = to_type;
3940
3941   /* Record this type as the pointer to TO_TYPE.  */
3942   TYPE_REFERENCE_TO (to_type) = t;
3943
3944   layout_type (t);
3945
3946   current_obstack = ambient_obstack;
3947   saveable_obstack = ambient_saveable_obstack;
3948   return t;
3949 }
3950
3951 /* Construct, lay out and return the type of methods belonging to class
3952    BASETYPE and whose arguments and values are described by TYPE.
3953    If that type exists already, reuse it.
3954    TYPE must be a FUNCTION_TYPE node.  */
3955
3956 tree
3957 build_method_type (basetype, type)
3958      tree basetype, type;
3959 {
3960   register tree t;
3961   int hashcode;
3962
3963   /* Make a node of the sort we want.  */
3964   t = make_node (METHOD_TYPE);
3965
3966   if (TREE_CODE (type) != FUNCTION_TYPE)
3967     abort ();
3968
3969   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
3970   TREE_TYPE (t) = TREE_TYPE (type);
3971
3972   /* The actual arglist for this function includes a "hidden" argument
3973      which is "this".  Put it into the list of argument types.  */
3974
3975   TYPE_ARG_TYPES (t)
3976     = tree_cons (NULL_TREE,
3977                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
3978
3979   /* If we already have such a type, use the old one and free this one.  */
3980   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
3981   t = type_hash_canon (hashcode, t);
3982
3983   if (TYPE_SIZE (t) == 0)
3984     layout_type (t);
3985
3986   return t;
3987 }
3988
3989 /* Construct, lay out and return the type of offsets to a value
3990    of type TYPE, within an object of type BASETYPE.
3991    If a suitable offset type exists already, reuse it.  */
3992
3993 tree
3994 build_offset_type (basetype, type)
3995      tree basetype, type;
3996 {
3997   register tree t;
3998   int hashcode;
3999
4000   /* Make a node of the sort we want.  */
4001   t = make_node (OFFSET_TYPE);
4002
4003   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4004   TREE_TYPE (t) = type;
4005
4006   /* If we already have such a type, use the old one and free this one.  */
4007   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4008   t = type_hash_canon (hashcode, t);
4009
4010   if (TYPE_SIZE (t) == 0)
4011     layout_type (t);
4012
4013   return t;
4014 }
4015
4016 /* Create a complex type whose components are COMPONENT_TYPE.  */
4017
4018 tree
4019 build_complex_type (component_type)
4020      tree component_type;
4021 {
4022   register tree t;
4023   int hashcode;
4024
4025   /* Make a node of the sort we want.  */
4026   t = make_node (COMPLEX_TYPE);
4027
4028   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4029   TYPE_VOLATILE (t) = TYPE_VOLATILE (component_type);
4030   TYPE_READONLY (t) = TYPE_READONLY (component_type);
4031
4032   /* If we already have such a type, use the old one and free this one.  */
4033   hashcode = TYPE_HASH (component_type);
4034   t = type_hash_canon (hashcode, t);
4035
4036   if (TYPE_SIZE (t) == 0)
4037     layout_type (t);
4038
4039   return t;
4040 }
4041 \f
4042 /* Return OP, stripped of any conversions to wider types as much as is safe.
4043    Converting the value back to OP's type makes a value equivalent to OP.
4044
4045    If FOR_TYPE is nonzero, we return a value which, if converted to
4046    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4047
4048    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4049    narrowest type that can hold the value, even if they don't exactly fit.
4050    Otherwise, bit-field references are changed to a narrower type
4051    only if they can be fetched directly from memory in that type.
4052
4053    OP must have integer, real or enumeral type.  Pointers are not allowed!
4054
4055    There are some cases where the obvious value we could return
4056    would regenerate to OP if converted to OP's type, 
4057    but would not extend like OP to wider types.
4058    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4059    For example, if OP is (unsigned short)(signed char)-1,
4060    we avoid returning (signed char)-1 if FOR_TYPE is int,
4061    even though extending that to an unsigned short would regenerate OP,
4062    since the result of extending (signed char)-1 to (int)
4063    is different from (int) OP.  */
4064
4065 tree
4066 get_unwidened (op, for_type)
4067      register tree op;
4068      tree for_type;
4069 {
4070   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4071   /* TYPE_PRECISION is safe in place of type_precision since
4072      pointer types are not allowed.  */
4073   register tree type = TREE_TYPE (op);
4074   register unsigned final_prec
4075     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4076   register int uns
4077     = (for_type != 0 && for_type != type
4078        && final_prec > TYPE_PRECISION (type)
4079        && TREE_UNSIGNED (type));
4080   register tree win = op;
4081
4082   while (TREE_CODE (op) == NOP_EXPR)
4083     {
4084       register int bitschange
4085         = TYPE_PRECISION (TREE_TYPE (op))
4086           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4087
4088       /* Truncations are many-one so cannot be removed.
4089          Unless we are later going to truncate down even farther.  */
4090       if (bitschange < 0
4091           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4092         break;
4093
4094       /* See what's inside this conversion.  If we decide to strip it,
4095          we will set WIN.  */
4096       op = TREE_OPERAND (op, 0);
4097
4098       /* If we have not stripped any zero-extensions (uns is 0),
4099          we can strip any kind of extension.
4100          If we have previously stripped a zero-extension,
4101          only zero-extensions can safely be stripped.
4102          Any extension can be stripped if the bits it would produce
4103          are all going to be discarded later by truncating to FOR_TYPE.  */
4104
4105       if (bitschange > 0)
4106         {
4107           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4108             win = op;
4109           /* TREE_UNSIGNED says whether this is a zero-extension.
4110              Let's avoid computing it if it does not affect WIN
4111              and if UNS will not be needed again.  */
4112           if ((uns || TREE_CODE (op) == NOP_EXPR)
4113               && TREE_UNSIGNED (TREE_TYPE (op)))
4114             {
4115               uns = 1;
4116               win = op;
4117             }
4118         }
4119     }
4120
4121   if (TREE_CODE (op) == COMPONENT_REF
4122       /* Since type_for_size always gives an integer type.  */
4123       && TREE_CODE (type) != REAL_TYPE)
4124     {
4125       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4126       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
4127
4128       /* We can get this structure field in the narrowest type it fits in.
4129          If FOR_TYPE is 0, do this only for a field that matches the
4130          narrower type exactly and is aligned for it
4131          The resulting extension to its nominal type (a fullword type)
4132          must fit the same conditions as for other extensions.  */
4133
4134       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4135           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4136           && (! uns || final_prec <= innerprec
4137               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4138           && type != 0)
4139         {
4140           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4141                        TREE_OPERAND (op, 1));
4142           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4143           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4144           TREE_RAISES (win) = TREE_RAISES (op);
4145         }
4146     }
4147   return win;
4148 }
4149 \f
4150 /* Return OP or a simpler expression for a narrower value
4151    which can be sign-extended or zero-extended to give back OP.
4152    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4153    or 0 if the value should be sign-extended.  */
4154
4155 tree
4156 get_narrower (op, unsignedp_ptr)
4157      register tree op;
4158      int *unsignedp_ptr;
4159 {
4160   register int uns = 0;
4161   int first = 1;
4162   register tree win = op;
4163
4164   while (TREE_CODE (op) == NOP_EXPR)
4165     {
4166       register int bitschange
4167         = TYPE_PRECISION (TREE_TYPE (op))
4168           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4169
4170       /* Truncations are many-one so cannot be removed.  */
4171       if (bitschange < 0)
4172         break;
4173
4174       /* See what's inside this conversion.  If we decide to strip it,
4175          we will set WIN.  */
4176       op = TREE_OPERAND (op, 0);
4177
4178       if (bitschange > 0)
4179         {
4180           /* An extension: the outermost one can be stripped,
4181              but remember whether it is zero or sign extension.  */
4182           if (first)
4183             uns = TREE_UNSIGNED (TREE_TYPE (op));
4184           /* Otherwise, if a sign extension has been stripped,
4185              only sign extensions can now be stripped;
4186              if a zero extension has been stripped, only zero-extensions.  */
4187           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4188             break;
4189           first = 0;
4190         }
4191       else /* bitschange == 0 */
4192         {
4193           /* A change in nominal type can always be stripped, but we must
4194              preserve the unsignedness.  */
4195           if (first)
4196             uns = TREE_UNSIGNED (TREE_TYPE (op));
4197           first = 0;
4198         }
4199
4200       win = op;
4201     }
4202
4203   if (TREE_CODE (op) == COMPONENT_REF
4204       /* Since type_for_size always gives an integer type.  */
4205       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
4206     {
4207       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4208       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
4209
4210       /* We can get this structure field in a narrower type that fits it,
4211          but the resulting extension to its nominal type (a fullword type)
4212          must satisfy the same conditions as for other extensions.
4213
4214          Do this only for fields that are aligned (not bit-fields),
4215          because when bit-field insns will be used there is no
4216          advantage in doing this.  */
4217
4218       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4219           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4220           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4221           && type != 0)
4222         {
4223           if (first)
4224             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4225           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4226                        TREE_OPERAND (op, 1));
4227           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4228           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4229           TREE_RAISES (win) = TREE_RAISES (op);
4230         }
4231     }
4232   *unsignedp_ptr = uns;
4233   return win;
4234 }
4235 \f
4236 /* Return the precision of a type, for arithmetic purposes.
4237    Supports all types on which arithmetic is possible
4238    (including pointer types).
4239    It's not clear yet what will be right for complex types.  */
4240
4241 int
4242 type_precision (type)
4243      register tree type;
4244 {
4245   return ((TREE_CODE (type) == INTEGER_TYPE
4246            || TREE_CODE (type) == ENUMERAL_TYPE
4247            || TREE_CODE (type) == REAL_TYPE)
4248           ? TYPE_PRECISION (type) : POINTER_SIZE);
4249 }
4250
4251 /* Nonzero if integer constant C has a value that is permissible
4252    for type TYPE (an INTEGER_TYPE).  */
4253
4254 int
4255 int_fits_type_p (c, type)
4256      tree c, type;
4257 {
4258   if (TREE_UNSIGNED (type))
4259     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4260                && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
4261             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4262                   && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type))));
4263   else
4264     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4265                && INT_CST_LT (TYPE_MAX_VALUE (type), c))
4266             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4267                   && INT_CST_LT (c, TYPE_MIN_VALUE (type))));
4268 }
4269
4270 /* Return the innermost context enclosing DECL that is
4271    a FUNCTION_DECL, or zero if none.  */
4272
4273 tree
4274 decl_function_context (decl)
4275      tree decl;
4276 {
4277   tree context;
4278
4279   if (TREE_CODE (decl) == ERROR_MARK)
4280     return 0;
4281
4282   if (TREE_CODE (decl) == SAVE_EXPR)
4283     context = SAVE_EXPR_CONTEXT (decl);
4284   else
4285     context = DECL_CONTEXT (decl);
4286
4287   while (context && TREE_CODE (context) != FUNCTION_DECL)
4288     {
4289       if (TREE_CODE (context) == RECORD_TYPE
4290           || TREE_CODE (context) == UNION_TYPE
4291           || TREE_CODE (context) == QUAL_UNION_TYPE)
4292         context = TYPE_CONTEXT (context);
4293       else if (TREE_CODE (context) == TYPE_DECL)
4294         context = DECL_CONTEXT (context);
4295       else if (TREE_CODE (context) == BLOCK)
4296         context = BLOCK_SUPERCONTEXT (context);
4297       else
4298         /* Unhandled CONTEXT !?  */
4299         abort ();
4300     }
4301
4302   return context;
4303 }
4304
4305 /* Return the innermost context enclosing DECL that is
4306    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4307    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
4308
4309 tree
4310 decl_type_context (decl)
4311      tree decl;
4312 {
4313   tree context = DECL_CONTEXT (decl);
4314
4315   while (context)
4316     {
4317       if (TREE_CODE (context) == RECORD_TYPE
4318           || TREE_CODE (context) == UNION_TYPE
4319           || TREE_CODE (context) == QUAL_UNION_TYPE)
4320         return context;
4321       if (TREE_CODE (context) == TYPE_DECL
4322           || TREE_CODE (context) == FUNCTION_DECL)
4323         context = DECL_CONTEXT (context);
4324       else if (TREE_CODE (context) == BLOCK)
4325         context = BLOCK_SUPERCONTEXT (context);
4326       else
4327         /* Unhandled CONTEXT!?  */
4328         abort ();
4329     }
4330   return NULL_TREE;
4331 }
4332
4333 void
4334 print_obstack_statistics (str, o)
4335      char *str;
4336      struct obstack *o;
4337 {
4338   struct _obstack_chunk *chunk = o->chunk;
4339   int n_chunks = 0;
4340   int n_alloc = 0;
4341
4342   while (chunk)
4343     {
4344       n_chunks += 1;
4345       n_alloc += chunk->limit - &chunk->contents[0];
4346       chunk = chunk->prev;
4347     }
4348   fprintf (stderr, "obstack %s: %d bytes, %d chunks\n",
4349            str, n_alloc, n_chunks);
4350 }
4351 void
4352 dump_tree_statistics ()
4353 {
4354   int i;
4355   int total_nodes, total_bytes;
4356
4357   fprintf (stderr, "\n??? tree nodes created\n\n");
4358 #ifdef GATHER_STATISTICS
4359   fprintf (stderr, "Kind                  Nodes     Bytes\n");
4360   fprintf (stderr, "-------------------------------------\n");
4361   total_nodes = total_bytes = 0;
4362   for (i = 0; i < (int) all_kinds; i++)
4363     {
4364       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
4365                tree_node_counts[i], tree_node_sizes[i]);
4366       total_nodes += tree_node_counts[i];
4367       total_bytes += tree_node_sizes[i];
4368     }
4369   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
4370   fprintf (stderr, "-------------------------------------\n");
4371   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
4372   fprintf (stderr, "-------------------------------------\n");
4373 #else
4374   fprintf (stderr, "(No per-node statistics)\n");
4375 #endif
4376   print_lang_statistics ();
4377 }
4378 \f
4379 #define FILE_FUNCTION_PREFIX_LEN 9
4380
4381 #ifndef NO_DOLLAR_IN_LABEL
4382 #define FILE_FUNCTION_FORMAT "_GLOBAL_$D$%s"
4383 #else /* NO_DOLLAR_IN_LABEL */
4384 #ifndef NO_DOT_IN_LABEL
4385 #define FILE_FUNCTION_FORMAT "_GLOBAL_.D.%s"
4386 #else /* NO_DOT_IN_LABEL */
4387 #define FILE_FUNCTION_FORMAT "_GLOBAL__D_%s"
4388 #endif  /* NO_DOT_IN_LABEL */
4389 #endif  /* NO_DOLLAR_IN_LABEL */
4390
4391 extern char * first_global_object_name;
4392
4393 /* If KIND=='I', return a suitable global initializer (constructor) name.
4394    If KIND=='D', return a suitable global clean-up (destructor) name.  */
4395
4396 tree
4397 get_file_function_name (kind)
4398      int kind;
4399 {
4400   char *buf;
4401   register char *p;
4402
4403   if (first_global_object_name)
4404     p = first_global_object_name;
4405   else if (main_input_filename)
4406     p = main_input_filename;
4407   else
4408     p = input_filename;
4409
4410   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p));
4411
4412   /* Set up the name of the file-level functions we may need.  */
4413   /* Use a global object (which is already required to be unique over
4414      the program) rather than the file name (which imposes extra
4415      constraints).  -- Raeburn@MIT.EDU, 10 Jan 1990.  */
4416   sprintf (buf, FILE_FUNCTION_FORMAT, p);
4417
4418   /* Don't need to pull weird characters out of global names.  */
4419   if (p != first_global_object_name)
4420     {
4421       for (p = buf+11; *p; p++)
4422         if (! ((*p >= '0' && *p <= '9')
4423 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
4424 #ifndef ASM_IDENTIFY_GCC        /* this is required if `.' is invalid -- k. raeburn */
4425                || *p == '.'
4426 #endif
4427 #endif
4428 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
4429                || *p == '$'
4430 #endif
4431 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
4432                || *p == '.'
4433 #endif
4434                || (*p >= 'A' && *p <= 'Z')
4435                || (*p >= 'a' && *p <= 'z')))
4436           *p = '_';
4437     }
4438
4439   buf[FILE_FUNCTION_PREFIX_LEN] = kind;
4440
4441   return get_identifier (buf);
4442 }
4443 \f
4444 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4445    The result is placed in BUFFER (which has length BIT_SIZE),
4446    with one bit in each char ('\000' or '\001').
4447
4448    If the constructor is constant, NULL_TREE is returned.
4449    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
4450
4451 tree
4452 get_set_constructor_bits (init, buffer, bit_size)
4453      tree init;
4454      char *buffer;
4455      int bit_size;
4456 {
4457   int i;
4458   tree vals;
4459   HOST_WIDE_INT domain_min
4460     = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
4461   tree non_const_bits = NULL_TREE;
4462   for (i = 0; i < bit_size; i++)
4463     buffer[i] = 0;
4464
4465   for (vals = TREE_OPERAND (init, 1); 
4466        vals != NULL_TREE; vals = TREE_CHAIN (vals))
4467     {
4468       if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
4469           || (TREE_PURPOSE (vals) != NULL_TREE
4470               && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
4471         non_const_bits =
4472           tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
4473       else if (TREE_PURPOSE (vals) != NULL_TREE)
4474         {
4475           /* Set a range of bits to ones.  */
4476           HOST_WIDE_INT lo_index
4477             = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
4478           HOST_WIDE_INT hi_index
4479             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
4480           if (lo_index < 0 || lo_index >= bit_size
4481             || hi_index < 0 || hi_index >= bit_size)
4482             abort ();
4483           for ( ; lo_index <= hi_index; lo_index++)
4484             buffer[lo_index] = 1;
4485         }
4486       else
4487         {
4488           /* Set a single bit to one.  */
4489           HOST_WIDE_INT index
4490             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
4491           if (index < 0 || index >= bit_size)
4492             {
4493               error ("invalid initializer for bit string");
4494               return NULL_TREE;
4495             }
4496           buffer[index] = 1;
4497         }
4498     }
4499   return non_const_bits;
4500 }
4501
4502 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4503    The result is placed in BUFFER (which is an array of bytes).
4504    If the constructor is constant, NULL_TREE is returned.
4505    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
4506
4507 tree
4508 get_set_constructor_bytes (init, buffer, wd_size)
4509      tree init;
4510      unsigned char *buffer;
4511      int wd_size;
4512 {
4513   int i;
4514   tree vals = TREE_OPERAND (init, 1);
4515   int set_word_size = BITS_PER_UNIT;
4516   int bit_size = wd_size * set_word_size;
4517   int bit_pos = 0;
4518   unsigned char *bytep = buffer;
4519   char *bit_buffer = (char *) alloca(bit_size);
4520   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
4521
4522   for (i = 0; i < wd_size; i++)
4523     buffer[i] = 0;
4524
4525   for (i = 0; i < bit_size; i++)
4526     {
4527       if (bit_buffer[i])
4528         {
4529           if (BYTES_BIG_ENDIAN)
4530             *bytep |= (1 << (set_word_size - 1 - bit_pos));
4531           else
4532             *bytep |= 1 << bit_pos;
4533         }
4534       bit_pos++;
4535       if (bit_pos >= set_word_size)
4536         bit_pos = 0, bytep++;
4537     }
4538   return non_const_bits;
4539 }