Makefile.in (tree.o): Depend on HASHTAB_H.
[platform/upstream/gcc.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000 Free Software Foundation, Inc.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22
23 /* This file contains the low level primitives for operating on tree nodes,
24    including allocation, list operations, interning of identifiers,
25    construction of data type nodes and statement nodes,
26    and construction of type conversion nodes.  It also contains
27    tables index by tree code that describe how to take apart
28    nodes of that code.
29
30    It is intended to be language-independent, but occasionally
31    calls language-dependent routines defined (for C) in typecheck.c.
32
33    The low-level allocation routines oballoc and permalloc
34    are used also for allocating many other kinds of objects
35    by all passes of the compiler.  */
36
37 #include "config.h"
38 #include "system.h"
39 #include "flags.h"
40 #include "tree.h"
41 #include "tm_p.h"
42 #include "function.h"
43 #include "obstack.h"
44 #include "toplev.h"
45 #include "ggc.h"
46 #include "hashtab.h"
47
48 #define obstack_chunk_alloc xmalloc
49 #define obstack_chunk_free free
50 /* obstack.[ch] explicitly declined to prototype this. */
51 extern int _obstack_allocated_p PARAMS ((struct obstack *h, PTR obj));
52
53 static void unsave_expr_now_r PARAMS ((tree));
54
55 /* Tree nodes of permanent duration are allocated in this obstack.
56    They are the identifier nodes, and everything outside of
57    the bodies and parameters of function definitions.  */
58
59 struct obstack permanent_obstack;
60
61 /* The initial RTL, and all ..._TYPE nodes, in a function
62    are allocated in this obstack.  Usually they are freed at the
63    end of the function, but if the function is inline they are saved.
64    For top-level functions, this is maybepermanent_obstack.
65    Separate obstacks are made for nested functions.  */
66
67 struct obstack *function_maybepermanent_obstack;
68
69 /* This is the function_maybepermanent_obstack for top-level functions.  */
70
71 struct obstack maybepermanent_obstack;
72
73 /* The contents of the current function definition are allocated
74    in this obstack, and all are freed at the end of the function.
75    For top-level functions, this is temporary_obstack.
76    Separate obstacks are made for nested functions.  */
77
78 struct obstack *function_obstack;
79
80 /* This is used for reading initializers of global variables.  */
81
82 struct obstack temporary_obstack;
83
84 /* The tree nodes of an expression are allocated
85    in this obstack, and all are freed at the end of the expression.  */
86
87 struct obstack momentary_obstack;
88
89 /* The tree nodes of a declarator are allocated
90    in this obstack, and all are freed when the declarator
91    has been parsed.  */
92
93 static struct obstack temp_decl_obstack;
94
95 /* This points at either permanent_obstack
96    or the current function_maybepermanent_obstack.  */
97
98 struct obstack *saveable_obstack;
99
100 /* This is same as saveable_obstack during parse and expansion phase;
101    it points to the current function's obstack during optimization.
102    This is the obstack to be used for creating rtl objects.  */
103
104 struct obstack *rtl_obstack;
105
106 /* This points at either permanent_obstack or the current function_obstack.  */
107
108 struct obstack *current_obstack;
109
110 /* This points at either permanent_obstack or the current function_obstack
111    or momentary_obstack.  */
112
113 struct obstack *expression_obstack;
114
115 /* Stack of obstack selections for push_obstacks and pop_obstacks.  */
116
117 struct obstack_stack
118 {
119   struct obstack_stack *next;
120   struct obstack *current;
121   struct obstack *saveable;
122   struct obstack *expression;
123   struct obstack *rtl;
124 };
125
126 struct obstack_stack *obstack_stack;
127
128 /* Obstack for allocating struct obstack_stack entries.  */
129
130 static struct obstack obstack_stack_obstack;
131
132 /* Addresses of first objects in some obstacks.
133    This is for freeing their entire contents.  */
134 char *maybepermanent_firstobj;
135 char *temporary_firstobj;
136 char *momentary_firstobj;
137 char *temp_decl_firstobj;
138
139 /* This is used to preserve objects (mainly array initializers) that need to
140    live until the end of the current function, but no further.  */
141 char *momentary_function_firstobj;
142
143 /* Nonzero means all ..._TYPE nodes should be allocated permanently.  */
144
145 int all_types_permanent;
146
147 /* Stack of places to restore the momentary obstack back to.  */
148    
149 struct momentary_level
150 {
151   /* Pointer back to previous such level.  */
152   struct momentary_level *prev;
153   /* First object allocated within this level.  */
154   char *base;
155   /* Value of expression_obstack saved at entry to this level.  */
156   struct obstack *obstack;
157 };
158
159 struct momentary_level *momentary_stack;
160
161 /* Table indexed by tree code giving a string containing a character
162    classifying the tree code.  Possibilities are
163    t, d, s, c, r, <, 1, 2 and e.  See tree.def for details.  */
164
165 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
166
167 char tree_code_type[MAX_TREE_CODES] = {
168 #include "tree.def"
169 };
170 #undef DEFTREECODE
171
172 /* Table indexed by tree code giving number of expression
173    operands beyond the fixed part of the node structure.
174    Not used for types or decls.  */
175
176 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
177
178 int tree_code_length[MAX_TREE_CODES] = {
179 #include "tree.def"
180 };
181 #undef DEFTREECODE
182
183 /* Names of tree components.
184    Used for printing out the tree and error messages.  */
185 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
186
187 const char *tree_code_name[MAX_TREE_CODES] = {
188 #include "tree.def"
189 };
190 #undef DEFTREECODE
191
192 /* Statistics-gathering stuff.  */
193 typedef enum
194 {
195   d_kind,
196   t_kind,
197   b_kind,
198   s_kind,
199   r_kind,
200   e_kind,
201   c_kind,
202   id_kind,
203   op_id_kind,
204   perm_list_kind,
205   temp_list_kind,
206   vec_kind,
207   x_kind,
208   lang_decl,
209   lang_type,
210   all_kinds
211 } tree_node_kind;
212
213 int tree_node_counts[(int)all_kinds];
214 int tree_node_sizes[(int)all_kinds];
215 int id_string_size = 0;
216
217 static const char * const tree_node_kind_names[] = {
218   "decls",
219   "types",
220   "blocks",
221   "stmts",
222   "refs",
223   "exprs",
224   "constants",
225   "identifiers",
226   "op_identifiers",
227   "perm_tree_lists",
228   "temp_tree_lists",
229   "vecs",
230   "random kinds",
231   "lang_decl kinds",
232   "lang_type kinds"
233 };
234
235 /* Hash table for uniquizing IDENTIFIER_NODEs by name.  */
236
237 #define MAX_HASH_TABLE 1009
238 static tree hash_table[MAX_HASH_TABLE]; /* id hash buckets */
239
240 /* 0 while creating built-in identifiers.  */
241 static int do_identifier_warnings;
242
243 /* Unique id for next decl created.  */
244 static int next_decl_uid;
245 /* Unique id for next type created.  */
246 static int next_type_uid = 1;
247
248 /* The language-specific function for alias analysis.  If NULL, the
249    language does not do any special alias analysis.  */
250 int (*lang_get_alias_set) PARAMS ((tree));
251
252 /* Here is how primitive or already-canonicalized types' hash
253    codes are made.  */
254 #define TYPE_HASH(TYPE) ((unsigned long) (TYPE) & 0777777)
255
256 /* Since we cannot rehash a type after it is in the table, we have to
257    keep the hash code.  */
258
259 struct type_hash
260 {
261   unsigned long hash;
262   tree type;
263 };
264
265 /* Initial size of the hash table (rounded to next prime). */
266 #define TYPE_HASH_INITIAL_SIZE 1000
267
268 /* Now here is the hash table.  When recording a type, it is added to
269    the slot whose index is the hash code.  Note that the hash table is
270    used for several kinds of types (function types, array types and
271    array index range types, for now).  While all these live in the
272    same table, they are completely independent, and the hash code is
273    computed differently for each of these.  */
274
275 htab_t type_hash_table;
276
277 static void build_real_from_int_cst_1 PARAMS ((PTR));
278 static void set_type_quals PARAMS ((tree, int));
279 static void append_random_chars PARAMS ((char *));
280 static void mark_type_hash PARAMS ((void *));
281 static int type_hash_eq PARAMS ((const void*, const void*));
282 static unsigned int type_hash_hash PARAMS ((const void*));
283 static void print_type_hash_statistics PARAMS((void));
284
285 /* If non-null, these are language-specific helper functions for
286    unsave_expr_now.  If present, LANG_UNSAVE is called before its
287    argument (an UNSAVE_EXPR) is to be unsaved, and all other
288    processing in unsave_expr_now is aborted.  LANG_UNSAVE_EXPR_NOW is
289    called from unsave_expr_1 for language-specific tree codes.  */
290 void (*lang_unsave) PARAMS ((tree *));
291 void (*lang_unsave_expr_now) PARAMS ((tree));
292
293 /* If non-null, a language specific version of safe_for_unsave. */
294 int (*lang_safe_for_unsave) PARAMS ((tree));
295
296 /* The string used as a placeholder instead of a source file name for
297    built-in tree nodes.  The variable, which is dynamically allocated,
298    should be used; the macro is only used to initialize it.  */
299
300 static char *built_in_filename;
301 #define BUILT_IN_FILENAME ("<built-in>")
302 \f
303 tree global_trees[TI_MAX];
304 tree integer_types[itk_none];
305 \f
306 /* Init the principal obstacks.  */
307
308 void
309 init_obstacks ()
310 {
311   gcc_obstack_init (&obstack_stack_obstack);
312   gcc_obstack_init (&permanent_obstack);
313
314   gcc_obstack_init (&temporary_obstack);
315   temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
316   gcc_obstack_init (&momentary_obstack);
317   momentary_firstobj = (char *) obstack_alloc (&momentary_obstack, 0);
318   momentary_function_firstobj = momentary_firstobj;
319   gcc_obstack_init (&maybepermanent_obstack);
320   maybepermanent_firstobj
321     = (char *) obstack_alloc (&maybepermanent_obstack, 0);
322   gcc_obstack_init (&temp_decl_obstack);
323   temp_decl_firstobj = (char *) obstack_alloc (&temp_decl_obstack, 0);
324
325   function_obstack = &temporary_obstack;
326   function_maybepermanent_obstack = &maybepermanent_obstack;
327   current_obstack = &permanent_obstack;
328   expression_obstack = &permanent_obstack;
329   rtl_obstack = saveable_obstack = &permanent_obstack;
330
331   /* Init the hash table of identifiers.  */
332   bzero ((char *) hash_table, sizeof hash_table);
333   ggc_add_tree_root (hash_table, sizeof hash_table / sizeof (tree));
334
335   /* Initialize the hash table of types.  */
336   type_hash_table = htab_create (TYPE_HASH_INITIAL_SIZE, type_hash_hash, 
337                                  type_hash_eq, 0);
338   ggc_add_root (&type_hash_table, 1, sizeof type_hash_table, mark_type_hash);
339   ggc_add_tree_root (global_trees, TI_MAX);
340   ggc_add_tree_root (integer_types, itk_none);
341 }
342
343 void
344 gcc_obstack_init (obstack)
345      struct obstack *obstack;
346 {
347   /* Let particular systems override the size of a chunk.  */
348 #ifndef OBSTACK_CHUNK_SIZE
349 #define OBSTACK_CHUNK_SIZE 0
350 #endif
351   /* Let them override the alloc and free routines too.  */
352 #ifndef OBSTACK_CHUNK_ALLOC
353 #define OBSTACK_CHUNK_ALLOC xmalloc
354 #endif
355 #ifndef OBSTACK_CHUNK_FREE
356 #define OBSTACK_CHUNK_FREE free
357 #endif
358   _obstack_begin (obstack, OBSTACK_CHUNK_SIZE, 0,
359                   (void *(*) PARAMS ((long))) OBSTACK_CHUNK_ALLOC,
360                   (void (*) PARAMS ((void *))) OBSTACK_CHUNK_FREE);
361 }
362
363 /* Save all variables describing the current status into the structure
364    *P.  This function is called whenever we start compiling one
365    function in the midst of compiling another.  For example, when
366    compiling a nested function, or, in C++, a template instantiation
367    that is required by the function we are currently compiling.
368
369    CONTEXT is the decl_function_context for the function we're about to
370    compile; if it isn't current_function_decl, we have to play some games.  */
371
372 void
373 save_tree_status (p)
374      struct function *p;
375 {
376   p->all_types_permanent = all_types_permanent;
377   p->momentary_stack = momentary_stack;
378   p->maybepermanent_firstobj = maybepermanent_firstobj;
379   p->temporary_firstobj = temporary_firstobj;
380   p->momentary_firstobj = momentary_firstobj;
381   p->momentary_function_firstobj = momentary_function_firstobj;
382   p->function_obstack = function_obstack;
383   p->function_maybepermanent_obstack = function_maybepermanent_obstack;
384   p->current_obstack = current_obstack;
385   p->expression_obstack = expression_obstack;
386   p->saveable_obstack = saveable_obstack;
387   p->rtl_obstack = rtl_obstack;
388
389   function_maybepermanent_obstack
390     = (struct obstack *) xmalloc (sizeof (struct obstack));
391   gcc_obstack_init (function_maybepermanent_obstack);
392   maybepermanent_firstobj
393     = (char *) obstack_finish (function_maybepermanent_obstack);
394
395   function_obstack = (struct obstack *) xmalloc (sizeof (struct obstack));
396   gcc_obstack_init (function_obstack);
397
398   current_obstack = &permanent_obstack;
399   expression_obstack = &permanent_obstack;
400   rtl_obstack = saveable_obstack = &permanent_obstack;
401
402   temporary_firstobj = (char *) obstack_alloc (&temporary_obstack, 0);
403   momentary_firstobj = (char *) obstack_finish (&momentary_obstack);
404   momentary_function_firstobj = momentary_firstobj;
405 }
406
407 /* Restore all variables describing the current status from the structure *P.
408    This is used after a nested function.  */
409
410 void
411 restore_tree_status (p)
412      struct function *p;
413 {
414   all_types_permanent = p->all_types_permanent;
415   momentary_stack = p->momentary_stack;
416
417   obstack_free (&momentary_obstack, momentary_function_firstobj);
418
419   /* Free saveable storage used by the function just compiled and not
420      saved.  */
421   obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
422   if (obstack_empty_p (function_maybepermanent_obstack))
423     {
424       obstack_free (function_maybepermanent_obstack, NULL);
425       free (function_maybepermanent_obstack);
426     }
427
428   obstack_free (&temporary_obstack, temporary_firstobj);
429   obstack_free (&momentary_obstack, momentary_function_firstobj);
430
431   obstack_free (function_obstack, NULL);
432   free (function_obstack);
433
434   temporary_firstobj = p->temporary_firstobj;
435   momentary_firstobj = p->momentary_firstobj;
436   momentary_function_firstobj = p->momentary_function_firstobj;
437   maybepermanent_firstobj = p->maybepermanent_firstobj;
438   function_obstack = p->function_obstack;
439   function_maybepermanent_obstack = p->function_maybepermanent_obstack;
440   current_obstack = p->current_obstack;
441   expression_obstack = p->expression_obstack;
442   saveable_obstack = p->saveable_obstack;
443   rtl_obstack = p->rtl_obstack;
444 }
445 \f
446 /* Start allocating on the temporary (per function) obstack.
447    This is done in start_function before parsing the function body,
448    and before each initialization at top level, and to go back
449    to temporary allocation after doing permanent_allocation.  */
450
451 void
452 temporary_allocation ()
453 {
454   /* Note that function_obstack at top level points to temporary_obstack.
455      But within a nested function context, it is a separate obstack.  */
456   current_obstack = function_obstack;
457   expression_obstack = function_obstack;
458   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
459   momentary_stack = 0;
460 }
461
462 /* Start allocating on the permanent obstack but don't
463    free the temporary data.  After calling this, call
464    `permanent_allocation' to fully resume permanent allocation status.  */
465
466 void
467 end_temporary_allocation ()
468 {
469   current_obstack = &permanent_obstack;
470   expression_obstack = &permanent_obstack;
471   rtl_obstack = saveable_obstack = &permanent_obstack;
472 }
473
474 /* Resume allocating on the temporary obstack, undoing
475    effects of `end_temporary_allocation'.  */
476
477 void
478 resume_temporary_allocation ()
479 {
480   current_obstack = function_obstack;
481   expression_obstack = function_obstack;
482   rtl_obstack = saveable_obstack = function_maybepermanent_obstack;
483 }
484
485 /* While doing temporary allocation, switch to allocating in such a
486    way as to save all nodes if the function is inlined.  Call
487    resume_temporary_allocation to go back to ordinary temporary
488    allocation.  */
489
490 void
491 saveable_allocation ()
492 {
493   /* Note that function_obstack at top level points to temporary_obstack.
494      But within a nested function context, it is a separate obstack.  */
495   expression_obstack = current_obstack = saveable_obstack;
496 }
497
498 /* Switch to current obstack CURRENT and maybepermanent obstack SAVEABLE,
499    recording the previously current obstacks on a stack.
500    This does not free any storage in any obstack.  */
501
502 void
503 push_obstacks (current, saveable)
504      struct obstack *current, *saveable;
505 {
506   struct obstack_stack *p;
507
508   p = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
509                                               (sizeof (struct obstack_stack)));
510
511   p->current = current_obstack;
512   p->saveable = saveable_obstack;
513   p->expression = expression_obstack;
514   p->rtl = rtl_obstack;
515   p->next = obstack_stack;
516   obstack_stack = p;
517
518   current_obstack = current;
519   expression_obstack = current;
520   rtl_obstack = saveable_obstack = saveable;
521 }
522
523 /* Save the current set of obstacks, but don't change them.  */
524
525 void
526 push_obstacks_nochange ()
527 {
528   struct obstack_stack *p;
529   
530   p = (struct obstack_stack *) obstack_alloc (&obstack_stack_obstack,
531                                               (sizeof (struct obstack_stack)));
532
533   p->current = current_obstack;
534   p->saveable = saveable_obstack;
535   p->expression = expression_obstack;
536   p->rtl = rtl_obstack;
537   p->next = obstack_stack;
538   obstack_stack = p;
539 }
540
541 /* Pop the obstack selection stack.  */
542
543 void
544 pop_obstacks ()
545 {
546   struct obstack_stack *p;
547
548   p = obstack_stack;
549   obstack_stack = p->next;
550
551   current_obstack = p->current;
552   saveable_obstack = p->saveable;
553   expression_obstack = p->expression;
554   rtl_obstack = p->rtl;
555
556   obstack_free (&obstack_stack_obstack, p);
557 }
558
559 /* Nonzero if temporary allocation is currently in effect.
560    Zero if currently doing permanent allocation.  */
561
562 int
563 allocation_temporary_p ()
564 {
565   return current_obstack != &permanent_obstack;
566 }
567
568 /* Go back to allocating on the permanent obstack
569    and free everything in the temporary obstack.
570
571    FUNCTION_END is true only if we have just finished compiling a function.
572    In that case, we also free preserved initial values on the momentary
573    obstack.  */
574
575 void
576 permanent_allocation (function_end)
577      int function_end;
578 {
579   /* Free up previous temporary obstack data */
580   obstack_free (&temporary_obstack, temporary_firstobj);
581   if (function_end)
582     {
583       obstack_free (&momentary_obstack, momentary_function_firstobj);
584       momentary_firstobj = momentary_function_firstobj;
585     }
586   else
587     obstack_free (&momentary_obstack, momentary_firstobj);
588
589   obstack_free (function_maybepermanent_obstack, maybepermanent_firstobj);
590   obstack_free (&temp_decl_obstack, temp_decl_firstobj);
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
700 /* Allocate SIZE bytes in the expression obstack
701    and return a pointer to them.  */
702
703 char *
704 expralloc (size)
705      int size;
706 {
707   return (char *) obstack_alloc (expression_obstack, size);
708 }
709 \f
710 /* Print out which obstack an object is in.  */
711
712 void
713 print_obstack_name (object, file, prefix)
714      char *object;
715      FILE *file;
716      const char *prefix;
717 {
718   struct obstack *obstack = NULL;
719   const char *obstack_name = NULL;
720   struct function *p;
721
722   for (p = outer_function_chain; p; p = p->next)
723     {
724       if (_obstack_allocated_p (p->function_obstack, object))
725         {
726           obstack = p->function_obstack;
727           obstack_name = "containing function obstack";
728         }
729       if (_obstack_allocated_p (p->function_maybepermanent_obstack, object))
730         {
731           obstack = p->function_maybepermanent_obstack;
732           obstack_name = "containing function maybepermanent obstack";
733         }
734     }
735
736   if (_obstack_allocated_p (&obstack_stack_obstack, object))
737     {
738       obstack = &obstack_stack_obstack;
739       obstack_name = "obstack_stack_obstack";
740     }
741   else if (_obstack_allocated_p (function_obstack, object))
742     {
743       obstack = function_obstack;
744       obstack_name = "function obstack";
745     }
746   else if (_obstack_allocated_p (&permanent_obstack, object))
747     {
748       obstack = &permanent_obstack;
749       obstack_name = "permanent_obstack";
750     }
751   else if (_obstack_allocated_p (&momentary_obstack, object))
752     {
753       obstack = &momentary_obstack;
754       obstack_name = "momentary_obstack";
755     }
756   else if (_obstack_allocated_p (function_maybepermanent_obstack, object))
757     {
758       obstack = function_maybepermanent_obstack;
759       obstack_name = "function maybepermanent obstack";
760     }
761   else if (_obstack_allocated_p (&temp_decl_obstack, object))
762     {
763       obstack = &temp_decl_obstack;
764       obstack_name = "temp_decl_obstack";
765     }
766
767   /* Check to see if the object is in the free area of the obstack.  */
768   if (obstack != NULL)
769     {
770       if (object >= obstack->next_free
771           && object < obstack->chunk_limit)
772         fprintf (file, "%s in free portion of obstack %s",
773                  prefix, obstack_name);
774       else
775         fprintf (file, "%s allocated from %s", prefix, obstack_name);
776     }
777   else
778     fprintf (file, "%s not allocated from any obstack", prefix);
779 }
780
781 void
782 debug_obstack (object)
783      char *object;
784 {
785   print_obstack_name (object, stderr, "object");
786   fprintf (stderr, ".\n");
787 }
788
789 /* Return 1 if OBJ is in the permanent obstack.
790    This is slow, and should be used only for debugging.
791    Use TREE_PERMANENT for other purposes.  */
792
793 int
794 object_permanent_p (obj)
795      tree obj;
796 {
797   return _obstack_allocated_p (&permanent_obstack, obj);
798 }
799 \f
800 /* Start a level of momentary allocation.
801    In C, each compound statement has its own level
802    and that level is freed at the end of each statement.
803    All expression nodes are allocated in the momentary allocation level.  */
804
805 void
806 push_momentary ()
807 {
808   struct momentary_level *tem
809     = (struct momentary_level *) obstack_alloc (&momentary_obstack,
810                                                 sizeof (struct momentary_level));
811   tem->prev = momentary_stack;
812   tem->base = (char *) obstack_base (&momentary_obstack);
813   tem->obstack = expression_obstack;
814   momentary_stack = tem;
815   expression_obstack = &momentary_obstack;
816 }
817
818 /* Set things up so the next clear_momentary will only clear memory
819    past our present position in momentary_obstack.  */
820
821 void
822 preserve_momentary ()
823 {
824   momentary_stack->base = (char *) obstack_base (&momentary_obstack);
825 }
826
827 /* Free all the storage in the current momentary-allocation level.
828    In C, this happens at the end of each statement.  */
829
830 void
831 clear_momentary ()
832 {
833   obstack_free (&momentary_obstack, momentary_stack->base);
834 }
835
836 /* Discard a level of momentary allocation.
837    In C, this happens at the end of each compound statement.
838    Restore the status of expression node allocation
839    that was in effect before this level was created.  */
840
841 void
842 pop_momentary ()
843 {
844   struct momentary_level *tem = momentary_stack;
845   momentary_stack = tem->prev;
846   expression_obstack = tem->obstack;
847   /* We can't free TEM from the momentary_obstack, because there might
848      be objects above it which have been saved.  We can free back to the
849      stack of the level we are popping off though.  */
850   obstack_free (&momentary_obstack, tem->base);
851 }
852
853 /* Pop back to the previous level of momentary allocation,
854    but don't free any momentary data just yet.  */
855
856 void
857 pop_momentary_nofree ()
858 {
859   struct momentary_level *tem = momentary_stack;
860   momentary_stack = tem->prev;
861   expression_obstack = tem->obstack;
862 }
863
864 /* Call when starting to parse a declaration:
865    make expressions in the declaration last the length of the function.
866    Returns an argument that should be passed to resume_momentary later.  */
867
868 int
869 suspend_momentary ()
870 {
871   register int tem = expression_obstack == &momentary_obstack;
872   expression_obstack = saveable_obstack;
873   return tem;
874 }
875
876 /* Call when finished parsing a declaration:
877    restore the treatment of node-allocation that was
878    in effect before the suspension.
879    YES should be the value previously returned by suspend_momentary.  */
880
881 void
882 resume_momentary (yes)
883      int yes;
884 {
885   if (yes)
886     expression_obstack = &momentary_obstack;
887 }
888 \f
889 /* Init the tables indexed by tree code.
890    Note that languages can add to these tables to define their own codes.  */
891
892 void
893 init_tree_codes ()
894 {
895   built_in_filename
896     = ggc_alloc_string (BUILT_IN_FILENAME, sizeof (BUILT_IN_FILENAME));
897   ggc_add_string_root (&built_in_filename, 1);
898 }
899
900 /* Return a newly allocated node of code CODE.
901    Initialize the node's unique id and its TREE_PERMANENT flag.
902    Note that if garbage collection is in use, TREE_PERMANENT will
903    always be zero - we want to eliminate use of TREE_PERMANENT.
904    For decl and type nodes, some other fields are initialized.
905    The rest of the node is initialized to zero.
906
907    Achoo!  I got a code in the node.  */
908
909 tree
910 make_node (code)
911      enum tree_code code;
912 {
913   register tree t;
914   register int type = TREE_CODE_CLASS (code);
915   register int length = 0;
916   register struct obstack *obstack = current_obstack;
917 #ifdef GATHER_STATISTICS
918   register tree_node_kind kind;
919 #endif
920
921   switch (type)
922     {
923     case 'd':  /* A decl node */
924 #ifdef GATHER_STATISTICS
925       kind = d_kind;
926 #endif
927       length = sizeof (struct tree_decl);
928       /* All decls in an inline function need to be saved.  */
929       if (obstack != &permanent_obstack)
930         obstack = saveable_obstack;
931
932       /* PARM_DECLs go on the context of the parent. If this is a nested
933          function, then we must allocate the PARM_DECL on the parent's
934          obstack, so that they will live to the end of the parent's
935          closing brace.  This is necessary in case we try to inline the
936          function into its parent.
937
938          PARM_DECLs of top-level functions do not have this problem.  However,
939          we allocate them where we put the FUNCTION_DECL for languages such as
940          Ada that need to consult some flags in the PARM_DECLs of the function
941          when calling it. 
942
943          See comment in restore_tree_status for why we can't put this
944          in function_obstack.  */
945       if (code == PARM_DECL && obstack != &permanent_obstack)
946         {
947           tree context = 0;
948           if (current_function_decl)
949             context = decl_function_context (current_function_decl);
950
951           if (context)
952             obstack
953               = find_function_data (context)->function_maybepermanent_obstack;
954         }
955       break;
956
957     case 't':  /* a type node */
958 #ifdef GATHER_STATISTICS
959       kind = t_kind;
960 #endif
961       length = sizeof (struct tree_type);
962       /* All data types are put where we can preserve them if nec.  */
963       if (obstack != &permanent_obstack)
964         obstack = all_types_permanent ? &permanent_obstack : saveable_obstack;
965       break;
966
967     case 'b':  /* a lexical block */
968 #ifdef GATHER_STATISTICS
969       kind = b_kind;
970 #endif
971       length = sizeof (struct tree_block);
972       /* All BLOCK nodes are put where we can preserve them if nec.  */
973       if (obstack != &permanent_obstack)
974         obstack = saveable_obstack;
975       break;
976
977     case 's':  /* an expression with side effects */
978 #ifdef GATHER_STATISTICS
979       kind = s_kind;
980       goto usual_kind;
981 #endif
982     case 'r':  /* a reference */
983 #ifdef GATHER_STATISTICS
984       kind = r_kind;
985       goto usual_kind;
986 #endif
987     case 'e':  /* an expression */
988     case '<':  /* a comparison expression */
989     case '1':  /* a unary arithmetic expression */
990     case '2':  /* a binary arithmetic expression */
991 #ifdef GATHER_STATISTICS
992       kind = e_kind;
993     usual_kind:
994 #endif
995       obstack = expression_obstack;
996       /* All BIND_EXPR nodes are put where we can preserve them if nec.  */
997       if (code == BIND_EXPR && obstack != &permanent_obstack)
998         obstack = saveable_obstack;
999       length = sizeof (struct tree_exp)
1000         + (tree_code_length[(int) code] - 1) * sizeof (char *);
1001       break;
1002
1003     case 'c':  /* a constant */
1004 #ifdef GATHER_STATISTICS
1005       kind = c_kind;
1006 #endif
1007       obstack = expression_obstack;
1008
1009       /* We can't use tree_code_length for INTEGER_CST, since the number of
1010          words is machine-dependent due to varying length of HOST_WIDE_INT,
1011          which might be wider than a pointer (e.g., long long).  Similarly
1012          for REAL_CST, since the number of words is machine-dependent due
1013          to varying size and alignment of `double'.  */
1014
1015       if (code == INTEGER_CST)
1016         length = sizeof (struct tree_int_cst);
1017       else if (code == REAL_CST)
1018         length = sizeof (struct tree_real_cst);
1019       else
1020         length = sizeof (struct tree_common)
1021           + tree_code_length[(int) code] * sizeof (char *);
1022       break;
1023
1024     case 'x':  /* something random, like an identifier.  */
1025 #ifdef GATHER_STATISTICS
1026       if (code == IDENTIFIER_NODE)
1027         kind = id_kind;
1028       else if (code == OP_IDENTIFIER)
1029         kind = op_id_kind;
1030       else if (code == TREE_VEC)
1031         kind = vec_kind;
1032       else
1033         kind = x_kind;
1034 #endif
1035       length = sizeof (struct tree_common)
1036         + tree_code_length[(int) code] * sizeof (char *);
1037       /* Identifier nodes are always permanent since they are
1038          unique in a compiler run.  */
1039       if (code == IDENTIFIER_NODE) obstack = &permanent_obstack;
1040       break;
1041
1042     default:
1043       abort ();
1044     }
1045
1046   if (ggc_p)
1047     t = ggc_alloc_tree (length);
1048   else
1049     {
1050       t = (tree) obstack_alloc (obstack, length);
1051       memset ((PTR) t, 0, length);
1052     }
1053
1054 #ifdef GATHER_STATISTICS
1055   tree_node_counts[(int)kind]++;
1056   tree_node_sizes[(int)kind] += length;
1057 #endif
1058
1059   TREE_SET_CODE (t, code);
1060   TREE_SET_PERMANENT (t);
1061
1062   switch (type)
1063     {
1064     case 's':
1065       TREE_SIDE_EFFECTS (t) = 1;
1066       TREE_TYPE (t) = void_type_node;
1067       break;
1068
1069     case 'd':
1070       if (code != FUNCTION_DECL)
1071         DECL_ALIGN (t) = 1;
1072       DECL_IN_SYSTEM_HEADER (t) = in_system_header;
1073       DECL_SOURCE_LINE (t) = lineno;
1074       DECL_SOURCE_FILE (t) = 
1075         (input_filename) ? input_filename : built_in_filename;
1076       DECL_UID (t) = next_decl_uid++;
1077       /* Note that we have not yet computed the alias set for this
1078          declaration.  */
1079       DECL_POINTER_ALIAS_SET (t) = -1;
1080       break;
1081
1082     case 't':
1083       TYPE_UID (t) = next_type_uid++;
1084       TYPE_ALIGN (t) = 1;
1085       TYPE_MAIN_VARIANT (t) = t;
1086       TYPE_OBSTACK (t) = obstack;
1087       TYPE_ATTRIBUTES (t) = NULL_TREE;
1088 #ifdef SET_DEFAULT_TYPE_ATTRIBUTES
1089       SET_DEFAULT_TYPE_ATTRIBUTES (t);
1090 #endif
1091       /* Note that we have not yet computed the alias set for this
1092          type.  */
1093       TYPE_ALIAS_SET (t) = -1;
1094       break;
1095
1096     case 'c':
1097       TREE_CONSTANT (t) = 1;
1098       break;
1099
1100     case 'e':
1101       switch (code)
1102         {
1103         case INIT_EXPR:
1104         case MODIFY_EXPR:
1105         case VA_ARG_EXPR:
1106         case RTL_EXPR:
1107         case PREDECREMENT_EXPR:
1108         case PREINCREMENT_EXPR:
1109         case POSTDECREMENT_EXPR:
1110         case POSTINCREMENT_EXPR:
1111           /* All of these have side-effects, no matter what their
1112              operands are.  */
1113           TREE_SIDE_EFFECTS (t) = 1;
1114           break;
1115           
1116         default:
1117           break;
1118         }
1119       break;
1120     }
1121
1122   return t;
1123 }
1124
1125 /* A front-end can reset this to an appropriate function if types need
1126    special handling.  */
1127
1128 tree (*make_lang_type_fn) PARAMS ((enum tree_code)) = make_node;
1129
1130 /* Return a new type (with the indicated CODE), doing whatever
1131    language-specific processing is required.  */
1132
1133 tree 
1134 make_lang_type (code)
1135      enum tree_code code;
1136 {
1137   return (*make_lang_type_fn) (code);
1138 }
1139 \f
1140 /* Return a new node with the same contents as NODE except that its
1141    TREE_CHAIN is zero and it has a fresh uid.  Unlike make_node, this
1142    function always performs the allocation on the CURRENT_OBSTACK;
1143    it's up to the caller to pick the right obstack before calling this
1144    function.  */
1145
1146 tree
1147 copy_node (node)
1148      tree node;
1149 {
1150   register tree t;
1151   register enum tree_code code = TREE_CODE (node);
1152   register int length = 0;
1153
1154   switch (TREE_CODE_CLASS (code))
1155     {
1156     case 'd':  /* A decl node */
1157       length = sizeof (struct tree_decl);
1158       break;
1159
1160     case 't':  /* a type node */
1161       length = sizeof (struct tree_type);
1162       break;
1163
1164     case 'b':  /* a lexical block node */
1165       length = sizeof (struct tree_block);
1166       break;
1167
1168     case 'r':  /* a reference */
1169     case 'e':  /* an expression */
1170     case 's':  /* an expression with side effects */
1171     case '<':  /* a comparison expression */
1172     case '1':  /* a unary arithmetic expression */
1173     case '2':  /* a binary arithmetic expression */
1174       length = sizeof (struct tree_exp)
1175         + (tree_code_length[(int) code] - 1) * sizeof (char *);
1176       break;
1177
1178     case 'c':  /* a constant */
1179       /* We can't use tree_code_length for INTEGER_CST, since the number of
1180          words is machine-dependent due to varying length of HOST_WIDE_INT,
1181          which might be wider than a pointer (e.g., long long).  Similarly
1182          for REAL_CST, since the number of words is machine-dependent due
1183          to varying size and alignment of `double'.  */
1184       if (code == INTEGER_CST)
1185         length = sizeof (struct tree_int_cst);
1186       else if (code == REAL_CST)
1187         length = sizeof (struct tree_real_cst);
1188       else
1189         length = (sizeof (struct tree_common)
1190                   + tree_code_length[(int) code] * sizeof (char *));
1191       break;
1192
1193     case 'x':  /* something random, like an identifier.  */
1194       length = sizeof (struct tree_common)
1195         + tree_code_length[(int) code] * sizeof (char *);
1196       if (code == TREE_VEC)
1197         length += (TREE_VEC_LENGTH (node) - 1) * sizeof (char *);
1198     }
1199
1200   if (ggc_p)
1201     t = ggc_alloc_tree (length);
1202   else
1203     t = (tree) obstack_alloc (current_obstack, length);
1204   memcpy (t, node, length);
1205
1206   TREE_CHAIN (t) = 0;
1207   TREE_ASM_WRITTEN (t) = 0;
1208
1209   if (TREE_CODE_CLASS (code) == 'd')
1210     DECL_UID (t) = next_decl_uid++;
1211   else if (TREE_CODE_CLASS (code) == 't')
1212     {
1213       TYPE_UID (t) = next_type_uid++;
1214       TYPE_OBSTACK (t) = current_obstack;
1215
1216       /* The following is so that the debug code for
1217          the copy is different from the original type.
1218          The two statements usually duplicate each other
1219          (because they clear fields of the same union),
1220          but the optimizer should catch that.  */
1221       TYPE_SYMTAB_POINTER (t) = 0;
1222       TYPE_SYMTAB_ADDRESS (t) = 0;
1223     }
1224
1225   TREE_SET_PERMANENT (t);
1226
1227   return t;
1228 }
1229
1230 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1231    For example, this can copy a list made of TREE_LIST nodes.  */
1232
1233 tree
1234 copy_list (list)
1235      tree list;
1236 {
1237   tree head;
1238   register tree prev, next;
1239
1240   if (list == 0)
1241     return 0;
1242
1243   head = prev = copy_node (list);
1244   next = TREE_CHAIN (list);
1245   while (next)
1246     {
1247       TREE_CHAIN (prev) = copy_node (next);
1248       prev = TREE_CHAIN (prev);
1249       next = TREE_CHAIN (next);
1250     }
1251   return head;
1252 }
1253 \f
1254 #define HASHBITS 30
1255
1256 /* Return an IDENTIFIER_NODE whose name is TEXT (a null-terminated string).
1257    If an identifier with that name has previously been referred to,
1258    the same node is returned this time.  */
1259
1260 tree
1261 get_identifier (text)
1262      register const char *text;
1263 {
1264   register int hi;
1265   register int i;
1266   register tree idp;
1267   register int len, hash_len;
1268
1269   /* Compute length of text in len.  */
1270   len = strlen (text);
1271
1272   /* Decide how much of that length to hash on */
1273   hash_len = len;
1274   if (warn_id_clash && len > id_clash_len)
1275     hash_len = id_clash_len;
1276
1277   /* Compute hash code */
1278   hi = hash_len * 613 + (unsigned) text[0];
1279   for (i = 1; i < hash_len; i += 2)
1280     hi = ((hi * 613) + (unsigned) (text[i]));
1281
1282   hi &= (1 << HASHBITS) - 1;
1283   hi %= MAX_HASH_TABLE;
1284   
1285   /* Search table for identifier */
1286   for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1287     if (IDENTIFIER_LENGTH (idp) == len
1288         && IDENTIFIER_POINTER (idp)[0] == text[0]
1289         && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1290       return idp;               /* <-- return if found */
1291
1292   /* Not found; optionally warn about a similar identifier */
1293   if (warn_id_clash && do_identifier_warnings && len >= id_clash_len)
1294     for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1295       if (!strncmp (IDENTIFIER_POINTER (idp), text, id_clash_len))
1296         {
1297           warning ("`%s' and `%s' identical in first %d characters",
1298                    IDENTIFIER_POINTER (idp), text, id_clash_len);
1299           break;
1300         }
1301
1302   if (tree_code_length[(int) IDENTIFIER_NODE] < 0)
1303     abort ();                   /* set_identifier_size hasn't been called.  */
1304
1305   /* Not found, create one, add to chain */
1306   idp = make_node (IDENTIFIER_NODE);
1307   IDENTIFIER_LENGTH (idp) = len;
1308 #ifdef GATHER_STATISTICS
1309   id_string_size += len;
1310 #endif
1311
1312   if (ggc_p)
1313     IDENTIFIER_POINTER (idp) = ggc_alloc_string (text, len);
1314   else
1315     IDENTIFIER_POINTER (idp) = obstack_copy0 (&permanent_obstack, text, len);
1316
1317   TREE_CHAIN (idp) = hash_table[hi];
1318   hash_table[hi] = idp;
1319   return idp;                   /* <-- return if created */
1320 }
1321
1322 /* If an identifier with the name TEXT (a null-terminated string) has
1323    previously been referred to, return that node; otherwise return
1324    NULL_TREE.  */
1325
1326 tree
1327 maybe_get_identifier (text)
1328      register const char *text;
1329 {
1330   register int hi;
1331   register int i;
1332   register tree idp;
1333   register int len, hash_len;
1334
1335   /* Compute length of text in len.  */
1336   len = strlen (text);
1337
1338   /* Decide how much of that length to hash on */
1339   hash_len = len;
1340   if (warn_id_clash && len > id_clash_len)
1341     hash_len = id_clash_len;
1342
1343   /* Compute hash code */
1344   hi = hash_len * 613 + (unsigned) text[0];
1345   for (i = 1; i < hash_len; i += 2)
1346     hi = ((hi * 613) + (unsigned) (text[i]));
1347
1348   hi &= (1 << HASHBITS) - 1;
1349   hi %= MAX_HASH_TABLE;
1350   
1351   /* Search table for identifier */
1352   for (idp = hash_table[hi]; idp; idp = TREE_CHAIN (idp))
1353     if (IDENTIFIER_LENGTH (idp) == len
1354         && IDENTIFIER_POINTER (idp)[0] == text[0]
1355         && !bcmp (IDENTIFIER_POINTER (idp), text, len))
1356       return idp;               /* <-- return if found */
1357
1358   return NULL_TREE;
1359 }
1360
1361 /* Enable warnings on similar identifiers (if requested).
1362    Done after the built-in identifiers are created.  */
1363
1364 void
1365 start_identifier_warnings ()
1366 {
1367   do_identifier_warnings = 1;
1368 }
1369
1370 /* Record the size of an identifier node for the language in use.
1371    SIZE is the total size in bytes.
1372    This is called by the language-specific files.  This must be
1373    called before allocating any identifiers.  */
1374
1375 void
1376 set_identifier_size (size)
1377      int size;
1378 {
1379   tree_code_length[(int) IDENTIFIER_NODE]
1380     = (size - sizeof (struct tree_common)) / sizeof (tree);
1381 }
1382 \f
1383 /* Return a newly constructed INTEGER_CST node whose constant value
1384    is specified by the two ints LOW and HI.
1385    The TREE_TYPE is set to `int'. 
1386
1387    This function should be used via the `build_int_2' macro.  */
1388
1389 tree
1390 build_int_2_wide (low, hi)
1391      HOST_WIDE_INT low, hi;
1392 {
1393   register tree t = make_node (INTEGER_CST);
1394
1395   TREE_INT_CST_LOW (t) = low;
1396   TREE_INT_CST_HIGH (t) = hi;
1397   TREE_TYPE (t) = integer_type_node;
1398   return t;
1399 }
1400
1401 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1402
1403 tree
1404 build_real (type, d)
1405      tree type;
1406      REAL_VALUE_TYPE d;
1407 {
1408   tree v;
1409   int overflow = 0;
1410
1411   /* Check for valid float value for this type on this target machine;
1412      if not, can print error message and store a valid value in D.  */
1413 #ifdef CHECK_FLOAT_VALUE
1414   CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1415 #endif
1416
1417   v = make_node (REAL_CST);
1418   TREE_TYPE (v) = type;
1419   TREE_REAL_CST (v) = d;
1420   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1421   return v;
1422 }
1423
1424 /* Return a new REAL_CST node whose type is TYPE
1425    and whose value is the integer value of the INTEGER_CST node I.  */
1426
1427 #if !defined (REAL_IS_NOT_DOUBLE) || defined (REAL_ARITHMETIC)
1428
1429 REAL_VALUE_TYPE
1430 real_value_from_int_cst (type, i)
1431      tree type ATTRIBUTE_UNUSED, i;
1432 {
1433   REAL_VALUE_TYPE d;
1434
1435 #ifdef REAL_ARITHMETIC
1436   /* Clear all bits of the real value type so that we can later do
1437      bitwise comparisons to see if two values are the same.  */
1438   bzero ((char *) &d, sizeof d);
1439
1440   if (! TREE_UNSIGNED (TREE_TYPE (i)))
1441     REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1442                          TYPE_MODE (type));
1443   else
1444     REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
1445                                   TREE_INT_CST_HIGH (i), TYPE_MODE (type));
1446 #else /* not REAL_ARITHMETIC */
1447   /* Some 386 compilers mishandle unsigned int to float conversions,
1448      so introduce a temporary variable E to avoid those bugs.  */
1449   if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
1450     {
1451       REAL_VALUE_TYPE e;
1452
1453       d = (double) (~ TREE_INT_CST_HIGH (i));
1454       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1455             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1456       d *= e;
1457       e = (double) (~ TREE_INT_CST_LOW (i));
1458       d += e;
1459       d = (- d - 1.0);
1460     }
1461   else
1462     {
1463       REAL_VALUE_TYPE e;
1464
1465       d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
1466       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1467             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1468       d *= e;
1469       e = (double) TREE_INT_CST_LOW (i);
1470       d += e;
1471     }
1472 #endif /* not REAL_ARITHMETIC */
1473   return d;
1474 }
1475
1476 /* Args to pass to and from build_real_from_int_cst_1.  */
1477
1478 struct brfic_args
1479 {
1480   tree type;                    /* Input: type to conver to. */
1481   tree i;                       /* Input: operand to convert */
1482   REAL_VALUE_TYPE d;            /* Output: floating point value. */
1483 };
1484
1485 /* Convert an integer to a floating point value while protected by a floating
1486    point exception handler.  */
1487
1488 static void
1489 build_real_from_int_cst_1 (data)
1490   PTR data;
1491 {
1492   struct brfic_args *args = (struct brfic_args *) data;
1493   
1494 #ifdef REAL_ARITHMETIC
1495   args->d = real_value_from_int_cst (args->type, args->i);
1496 #else
1497   args->d
1498     = REAL_VALUE_TRUNCATE (TYPE_MODE (args->type),
1499                            real_value_from_int_cst (args->type, args->i));
1500 #endif
1501 }
1502
1503 /* Given a tree representing an integer constant I, return a tree
1504    representing the same value as a floating-point constant of type TYPE.
1505    We cannot perform this operation if there is no way of doing arithmetic
1506    on floating-point values.  */
1507
1508 tree
1509 build_real_from_int_cst (type, i)
1510      tree type;
1511      tree i;
1512 {
1513   tree v;
1514   int overflow = TREE_OVERFLOW (i);
1515   REAL_VALUE_TYPE d;
1516   struct brfic_args args;
1517
1518   v = make_node (REAL_CST);
1519   TREE_TYPE (v) = type;
1520
1521   /* Setup input for build_real_from_int_cst_1() */
1522   args.type = type;
1523   args.i = i;
1524
1525   if (do_float_handler (build_real_from_int_cst_1, (PTR) &args))
1526     /* Receive output from build_real_from_int_cst_1() */
1527     d = args.d;
1528   else
1529     {
1530       /* We got an exception from build_real_from_int_cst_1() */
1531       d = dconst0;
1532       overflow = 1;
1533     }
1534   
1535   /* Check for valid float value for this type on this target machine.  */
1536
1537 #ifdef CHECK_FLOAT_VALUE
1538   CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1539 #endif
1540
1541   TREE_REAL_CST (v) = d;
1542   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1543   return v;
1544 }
1545
1546 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1547
1548 /* Return a newly constructed STRING_CST node whose value is
1549    the LEN characters at STR.
1550    The TREE_TYPE is not initialized.  */
1551
1552 tree
1553 build_string (len, str)
1554      int len;
1555      const char *str;
1556 {
1557   /* Put the string in saveable_obstack since it will be placed in the RTL
1558      for an "asm" statement and will also be kept around a while if
1559      deferring constant output in varasm.c.  */
1560
1561   register tree s = make_node (STRING_CST);
1562
1563   TREE_STRING_LENGTH (s) = len;
1564   if (ggc_p)
1565     TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
1566   else
1567     TREE_STRING_POINTER (s) = obstack_copy0 (saveable_obstack, str, len);
1568
1569   return s;
1570 }
1571
1572 /* Return a newly constructed COMPLEX_CST node whose value is
1573    specified by the real and imaginary parts REAL and IMAG.
1574    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
1575    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
1576
1577 tree
1578 build_complex (type, real, imag)
1579      tree type;
1580      tree real, imag;
1581 {
1582   register tree t = make_node (COMPLEX_CST);
1583
1584   TREE_REALPART (t) = real;
1585   TREE_IMAGPART (t) = imag;
1586   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1587   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1588   TREE_CONSTANT_OVERFLOW (t)
1589     = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1590   return t;
1591 }
1592
1593 /* Build a newly constructed TREE_VEC node of length LEN.  */
1594
1595 tree
1596 make_tree_vec (len)
1597      int len;
1598 {
1599   register tree t;
1600   register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec);
1601   register struct obstack *obstack = current_obstack;
1602
1603 #ifdef GATHER_STATISTICS
1604   tree_node_counts[(int)vec_kind]++;
1605   tree_node_sizes[(int)vec_kind] += length;
1606 #endif
1607
1608   if (ggc_p)
1609     t = ggc_alloc_tree (length);
1610   else
1611     {
1612       t = (tree) obstack_alloc (obstack, length);
1613       bzero ((PTR) t, length);
1614     }
1615
1616   TREE_SET_CODE (t, TREE_VEC);
1617   TREE_VEC_LENGTH (t) = len;
1618   TREE_SET_PERMANENT (t);
1619
1620   return t;
1621 }
1622 \f
1623 /* Return 1 if EXPR is the integer constant zero or a complex constant
1624    of zero.  */
1625
1626 int
1627 integer_zerop (expr)
1628      tree expr;
1629 {
1630   STRIP_NOPS (expr);
1631
1632   return ((TREE_CODE (expr) == INTEGER_CST
1633            && ! TREE_CONSTANT_OVERFLOW (expr)
1634            && TREE_INT_CST_LOW (expr) == 0
1635            && TREE_INT_CST_HIGH (expr) == 0)
1636           || (TREE_CODE (expr) == COMPLEX_CST
1637               && integer_zerop (TREE_REALPART (expr))
1638               && integer_zerop (TREE_IMAGPART (expr))));
1639 }
1640
1641 /* Return 1 if EXPR is the integer constant one or the corresponding
1642    complex constant.  */
1643
1644 int
1645 integer_onep (expr)
1646      tree expr;
1647 {
1648   STRIP_NOPS (expr);
1649
1650   return ((TREE_CODE (expr) == INTEGER_CST
1651            && ! TREE_CONSTANT_OVERFLOW (expr)
1652            && TREE_INT_CST_LOW (expr) == 1
1653            && TREE_INT_CST_HIGH (expr) == 0)
1654           || (TREE_CODE (expr) == COMPLEX_CST
1655               && integer_onep (TREE_REALPART (expr))
1656               && integer_zerop (TREE_IMAGPART (expr))));
1657 }
1658
1659 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1660    it contains.  Likewise for the corresponding complex constant.  */
1661
1662 int
1663 integer_all_onesp (expr)
1664      tree expr;
1665 {
1666   register int prec;
1667   register int uns;
1668
1669   STRIP_NOPS (expr);
1670
1671   if (TREE_CODE (expr) == COMPLEX_CST
1672       && integer_all_onesp (TREE_REALPART (expr))
1673       && integer_zerop (TREE_IMAGPART (expr)))
1674     return 1;
1675
1676   else if (TREE_CODE (expr) != INTEGER_CST
1677            || TREE_CONSTANT_OVERFLOW (expr))
1678     return 0;
1679
1680   uns = TREE_UNSIGNED (TREE_TYPE (expr));
1681   if (!uns)
1682     return (TREE_INT_CST_LOW (expr) == ~ (unsigned HOST_WIDE_INT) 0
1683             && TREE_INT_CST_HIGH (expr) == -1);
1684
1685   /* Note that using TYPE_PRECISION here is wrong.  We care about the
1686      actual bits, not the (arbitrary) range of the type.  */
1687   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1688   if (prec >= HOST_BITS_PER_WIDE_INT)
1689     {
1690       HOST_WIDE_INT high_value;
1691       int shift_amount;
1692
1693       shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1694
1695       if (shift_amount > HOST_BITS_PER_WIDE_INT)
1696         /* Can not handle precisions greater than twice the host int size.  */
1697         abort ();
1698       else if (shift_amount == HOST_BITS_PER_WIDE_INT)
1699         /* Shifting by the host word size is undefined according to the ANSI
1700            standard, so we must handle this as a special case.  */
1701         high_value = -1;
1702       else
1703         high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1704
1705       return (TREE_INT_CST_LOW (expr) == ~ (unsigned HOST_WIDE_INT) 0
1706               && TREE_INT_CST_HIGH (expr) == high_value);
1707     }
1708   else
1709     return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
1710 }
1711
1712 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1713    one bit on).  */
1714
1715 int
1716 integer_pow2p (expr)
1717      tree expr;
1718 {
1719   int prec;
1720   HOST_WIDE_INT high, low;
1721
1722   STRIP_NOPS (expr);
1723
1724   if (TREE_CODE (expr) == COMPLEX_CST
1725       && integer_pow2p (TREE_REALPART (expr))
1726       && integer_zerop (TREE_IMAGPART (expr)))
1727     return 1;
1728
1729   if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1730     return 0;
1731
1732   prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1733           ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1734   high = TREE_INT_CST_HIGH (expr);
1735   low = TREE_INT_CST_LOW (expr);
1736
1737   /* First clear all bits that are beyond the type's precision in case
1738      we've been sign extended.  */
1739
1740   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1741     ;
1742   else if (prec > HOST_BITS_PER_WIDE_INT)
1743     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1744   else
1745     {
1746       high = 0;
1747       if (prec < HOST_BITS_PER_WIDE_INT)
1748         low &= ~((HOST_WIDE_INT) (-1) << prec);
1749     }
1750
1751   if (high == 0 && low == 0)
1752     return 0;
1753
1754   return ((high == 0 && (low & (low - 1)) == 0)
1755           || (low == 0 && (high & (high - 1)) == 0));
1756 }
1757
1758 /* Return the power of two represented by a tree node known to be a
1759    power of two.  */
1760
1761 int
1762 tree_log2 (expr)
1763      tree expr;
1764 {
1765   int prec;
1766   HOST_WIDE_INT high, low;
1767
1768   STRIP_NOPS (expr);
1769
1770   if (TREE_CODE (expr) == COMPLEX_CST)
1771     return tree_log2 (TREE_REALPART (expr));
1772
1773   prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1774           ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1775
1776   high = TREE_INT_CST_HIGH (expr);
1777   low = TREE_INT_CST_LOW (expr);
1778
1779   /* First clear all bits that are beyond the type's precision in case
1780      we've been sign extended.  */
1781
1782   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1783     ;
1784   else if (prec > HOST_BITS_PER_WIDE_INT)
1785     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1786   else
1787     {
1788       high = 0;
1789       if (prec < HOST_BITS_PER_WIDE_INT)
1790         low &= ~((HOST_WIDE_INT) (-1) << prec);
1791     }
1792
1793   return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1794           :  exact_log2 (low));
1795 }
1796
1797 /* Similar, but return the largest integer Y such that 2 ** Y is less
1798    than or equal to EXPR.  */
1799
1800 int
1801 tree_floor_log2 (expr)
1802      tree expr;
1803 {
1804   int prec;
1805   HOST_WIDE_INT high, low;
1806
1807   STRIP_NOPS (expr);
1808
1809   if (TREE_CODE (expr) == COMPLEX_CST)
1810     return tree_log2 (TREE_REALPART (expr));
1811
1812   prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1813           ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1814
1815   high = TREE_INT_CST_HIGH (expr);
1816   low = TREE_INT_CST_LOW (expr);
1817
1818   /* First clear all bits that are beyond the type's precision in case
1819      we've been sign extended.  Ignore if type's precision hasn't been set
1820      since what we are doing is setting it.  */
1821
1822   if (prec == 2 * HOST_BITS_PER_WIDE_INT || prec == 0)
1823     ;
1824   else if (prec > HOST_BITS_PER_WIDE_INT)
1825     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1826   else
1827     {
1828       high = 0;
1829       if (prec < HOST_BITS_PER_WIDE_INT)
1830         low &= ~((HOST_WIDE_INT) (-1) << prec);
1831     }
1832
1833   return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
1834           : floor_log2 (low));
1835 }
1836
1837 /* Return 1 if EXPR is the real constant zero.  */
1838
1839 int
1840 real_zerop (expr)
1841      tree expr;
1842 {
1843   STRIP_NOPS (expr);
1844
1845   return ((TREE_CODE (expr) == REAL_CST
1846            && ! TREE_CONSTANT_OVERFLOW (expr)
1847            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1848           || (TREE_CODE (expr) == COMPLEX_CST
1849               && real_zerop (TREE_REALPART (expr))
1850               && real_zerop (TREE_IMAGPART (expr))));
1851 }
1852
1853 /* Return 1 if EXPR is the real constant one in real or complex form.  */
1854
1855 int
1856 real_onep (expr)
1857      tree expr;
1858 {
1859   STRIP_NOPS (expr);
1860
1861   return ((TREE_CODE (expr) == REAL_CST
1862            && ! TREE_CONSTANT_OVERFLOW (expr)
1863            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1864           || (TREE_CODE (expr) == COMPLEX_CST
1865               && real_onep (TREE_REALPART (expr))
1866               && real_zerop (TREE_IMAGPART (expr))));
1867 }
1868
1869 /* Return 1 if EXPR is the real constant two.  */
1870
1871 int
1872 real_twop (expr)
1873      tree expr;
1874 {
1875   STRIP_NOPS (expr);
1876
1877   return ((TREE_CODE (expr) == REAL_CST
1878            && ! TREE_CONSTANT_OVERFLOW (expr)
1879            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1880           || (TREE_CODE (expr) == COMPLEX_CST
1881               && real_twop (TREE_REALPART (expr))
1882               && real_zerop (TREE_IMAGPART (expr))));
1883 }
1884
1885 /* Nonzero if EXP is a constant or a cast of a constant.  */
1886  
1887 int
1888 really_constant_p (exp)
1889      tree exp;
1890 {
1891   /* This is not quite the same as STRIP_NOPS.  It does more.  */
1892   while (TREE_CODE (exp) == NOP_EXPR
1893          || TREE_CODE (exp) == CONVERT_EXPR
1894          || TREE_CODE (exp) == NON_LVALUE_EXPR)
1895     exp = TREE_OPERAND (exp, 0);
1896   return TREE_CONSTANT (exp);
1897 }
1898 \f
1899 /* Return first list element whose TREE_VALUE is ELEM.
1900    Return 0 if ELEM is not in LIST.  */
1901
1902 tree
1903 value_member (elem, list)
1904      tree elem, list;
1905 {
1906   while (list)
1907     {
1908       if (elem == TREE_VALUE (list))
1909         return list;
1910       list = TREE_CHAIN (list);
1911     }
1912   return NULL_TREE;
1913 }
1914
1915 /* Return first list element whose TREE_PURPOSE is ELEM.
1916    Return 0 if ELEM is not in LIST.  */
1917
1918 tree
1919 purpose_member (elem, list)
1920      tree elem, list;
1921 {
1922   while (list)
1923     {
1924       if (elem == TREE_PURPOSE (list))
1925         return list;
1926       list = TREE_CHAIN (list);
1927     }
1928   return NULL_TREE;
1929 }
1930
1931 /* Return first list element whose BINFO_TYPE is ELEM.
1932    Return 0 if ELEM is not in LIST.  */
1933
1934 tree
1935 binfo_member (elem, list)
1936      tree elem, list;
1937 {
1938   while (list)
1939     {
1940       if (elem == BINFO_TYPE (list))
1941         return list;
1942       list = TREE_CHAIN (list);
1943     }
1944   return NULL_TREE;
1945 }
1946
1947 /* Return nonzero if ELEM is part of the chain CHAIN.  */
1948
1949 int
1950 chain_member (elem, chain)
1951      tree elem, chain;
1952 {
1953   while (chain)
1954     {
1955       if (elem == chain)
1956         return 1;
1957       chain = TREE_CHAIN (chain);
1958     }
1959
1960   return 0;
1961 }
1962
1963 /* Return nonzero if ELEM is equal to TREE_VALUE (CHAIN) for any piece of
1964    chain CHAIN.  This and the next function are currently unused, but
1965    are retained for completeness.  */
1966
1967 int
1968 chain_member_value (elem, chain)
1969      tree elem, chain;
1970 {
1971   while (chain)
1972     {
1973       if (elem == TREE_VALUE (chain))
1974         return 1;
1975       chain = TREE_CHAIN (chain);
1976     }
1977
1978   return 0;
1979 }
1980
1981 /* Return nonzero if ELEM is equal to TREE_PURPOSE (CHAIN)
1982    for any piece of chain CHAIN.  */
1983
1984 int
1985 chain_member_purpose (elem, chain)
1986      tree elem, chain;
1987 {
1988   while (chain)
1989     {
1990       if (elem == TREE_PURPOSE (chain))
1991         return 1;
1992       chain = TREE_CHAIN (chain);
1993     }
1994
1995   return 0;
1996 }
1997
1998 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1999    We expect a null pointer to mark the end of the chain.
2000    This is the Lisp primitive `length'.  */
2001
2002 int
2003 list_length (t)
2004      tree t;
2005 {
2006   register tree tail;
2007   register int len = 0;
2008
2009   for (tail = t; tail; tail = TREE_CHAIN (tail))
2010     len++;
2011
2012   return len;
2013 }
2014
2015 /* Returns the number of FIELD_DECLs in TYPE.  */
2016
2017 int
2018 fields_length (type)
2019      tree type;
2020 {
2021   tree t = TYPE_FIELDS (type);
2022   int count = 0;
2023
2024   for (; t; t = TREE_CHAIN (t))
2025     if (TREE_CODE (t) == FIELD_DECL)
2026       ++count;
2027
2028   return count;
2029 }
2030
2031 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2032    by modifying the last node in chain 1 to point to chain 2.
2033    This is the Lisp primitive `nconc'.  */
2034
2035 tree
2036 chainon (op1, op2)
2037      tree op1, op2;
2038 {
2039
2040   if (op1)
2041     {
2042       register tree t1;
2043 #ifdef ENABLE_TREE_CHECKING
2044       register tree t2;
2045 #endif
2046
2047       for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2048         ;
2049       TREE_CHAIN (t1) = op2;
2050 #ifdef ENABLE_TREE_CHECKING
2051       for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2052         if (t2 == t1)
2053           abort ();  /* Circularity created.  */
2054 #endif
2055       return op1;
2056     }
2057   else return op2;
2058 }
2059
2060 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
2061
2062 tree
2063 tree_last (chain)
2064      register tree chain;
2065 {
2066   register tree next;
2067   if (chain)
2068     while ((next = TREE_CHAIN (chain)))
2069       chain = next;
2070   return chain;
2071 }
2072
2073 /* Reverse the order of elements in the chain T,
2074    and return the new head of the chain (old last element).  */
2075
2076 tree
2077 nreverse (t)
2078      tree t;
2079 {
2080   register tree prev = 0, decl, next;
2081   for (decl = t; decl; decl = next)
2082     {
2083       next = TREE_CHAIN (decl);
2084       TREE_CHAIN (decl) = prev;
2085       prev = decl;
2086     }
2087   return prev;
2088 }
2089
2090 /* Given a chain CHAIN of tree nodes,
2091    construct and return a list of those nodes.  */
2092
2093 tree
2094 listify (chain)
2095      tree chain;
2096 {
2097   tree result = NULL_TREE;
2098   tree in_tail = chain;
2099   tree out_tail = NULL_TREE;
2100
2101   while (in_tail)
2102     {
2103       tree next = tree_cons (NULL_TREE, in_tail, NULL_TREE);
2104       if (out_tail)
2105         TREE_CHAIN (out_tail) = next;
2106       else
2107         result = next;
2108       out_tail = next;
2109       in_tail = TREE_CHAIN (in_tail);
2110     }
2111
2112   return result;
2113 }
2114 \f
2115 /* Return a newly created TREE_LIST node whose
2116    purpose and value fields are PARM and VALUE.  */
2117
2118 tree
2119 build_tree_list (parm, value)
2120      tree parm, value;
2121 {
2122   register tree t = make_node (TREE_LIST);
2123   TREE_PURPOSE (t) = parm;
2124   TREE_VALUE (t) = value;
2125   return t;
2126 }
2127
2128 /* Similar, but build on the temp_decl_obstack.  */
2129
2130 tree
2131 build_decl_list (parm, value)
2132      tree parm, value;
2133 {
2134   register tree node;
2135   register struct obstack *ambient_obstack = current_obstack;
2136
2137   current_obstack = &temp_decl_obstack;
2138   node = build_tree_list (parm, value);
2139   current_obstack = ambient_obstack;
2140   return node;
2141 }
2142
2143 /* Similar, but build on the expression_obstack.  */
2144
2145 tree
2146 build_expr_list (parm, value)
2147      tree parm, value;
2148 {
2149   register tree node;
2150   register struct obstack *ambient_obstack = current_obstack;
2151
2152   current_obstack = expression_obstack;
2153   node = build_tree_list (parm, value);
2154   current_obstack = ambient_obstack;
2155   return node;
2156 }
2157
2158 /* Return a newly created TREE_LIST node whose
2159    purpose and value fields are PARM and VALUE
2160    and whose TREE_CHAIN is CHAIN.  */
2161
2162 tree
2163 tree_cons (purpose, value, chain)
2164      tree purpose, value, chain;
2165 {
2166   register tree node;
2167
2168   if (ggc_p)
2169     node = ggc_alloc_tree (sizeof (struct tree_list));
2170   else
2171     {
2172       node = (tree) obstack_alloc (current_obstack, sizeof (struct tree_list));
2173       memset (node, 0, sizeof (struct tree_common));
2174     }
2175
2176 #ifdef GATHER_STATISTICS
2177   tree_node_counts[(int)x_kind]++;
2178   tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
2179 #endif
2180
2181   TREE_SET_CODE (node, TREE_LIST);
2182   TREE_SET_PERMANENT (node);
2183
2184   TREE_CHAIN (node) = chain;
2185   TREE_PURPOSE (node) = purpose;
2186   TREE_VALUE (node) = value;
2187   return node;
2188 }
2189
2190 /* Similar, but build on the temp_decl_obstack.  */
2191
2192 tree
2193 decl_tree_cons (purpose, value, chain)
2194      tree purpose, value, chain;
2195 {
2196   register tree node;
2197   register struct obstack *ambient_obstack = current_obstack;
2198
2199   current_obstack = &temp_decl_obstack;
2200   node = tree_cons (purpose, value, chain);
2201   current_obstack = ambient_obstack;
2202   return node;
2203 }
2204
2205 /* Similar, but build on the expression_obstack.  */
2206
2207 tree
2208 expr_tree_cons (purpose, value, chain)
2209      tree purpose, value, chain;
2210 {
2211   register tree node;
2212   register struct obstack *ambient_obstack = current_obstack;
2213
2214   current_obstack = expression_obstack;
2215   node = tree_cons (purpose, value, chain);
2216   current_obstack = ambient_obstack;
2217   return node;
2218 }
2219
2220 /* Same as `tree_cons' but make a permanent object.  */
2221
2222 tree
2223 perm_tree_cons (purpose, value, chain)
2224      tree purpose, value, chain;
2225 {
2226   register tree node;
2227   register struct obstack *ambient_obstack = current_obstack;
2228
2229   current_obstack = &permanent_obstack;
2230   node = tree_cons (purpose, value, chain);
2231   current_obstack = ambient_obstack;
2232   return node;
2233 }
2234
2235 /* Same as `tree_cons', but make this node temporary, regardless.  */
2236
2237 tree
2238 temp_tree_cons (purpose, value, chain)
2239      tree purpose, value, chain;
2240 {
2241   register tree node;
2242   register struct obstack *ambient_obstack = current_obstack;
2243
2244   current_obstack = &temporary_obstack;
2245   node = tree_cons (purpose, value, chain);
2246   current_obstack = ambient_obstack;
2247   return node;
2248 }
2249
2250 /* Same as `tree_cons', but save this node if the function's RTL is saved.  */
2251
2252 tree
2253 saveable_tree_cons (purpose, value, chain)
2254      tree purpose, value, chain;
2255 {
2256   register tree node;
2257   register struct obstack *ambient_obstack = current_obstack;
2258
2259   current_obstack = saveable_obstack;
2260   node = tree_cons (purpose, value, chain);
2261   current_obstack = ambient_obstack;
2262   return node;
2263 }
2264 \f
2265 /* Return the size nominally occupied by an object of type TYPE
2266    when it resides in memory.  The value is measured in units of bytes,
2267    and its data type is that normally used for type sizes
2268    (which is the first type created by make_signed_type or
2269    make_unsigned_type).  */
2270
2271 tree
2272 size_in_bytes (type)
2273      tree type;
2274 {
2275   tree t;
2276
2277   if (type == error_mark_node)
2278     return integer_zero_node;
2279
2280   type = TYPE_MAIN_VARIANT (type);
2281   t = TYPE_SIZE_UNIT (type);
2282
2283   if (t == 0)
2284     {
2285       incomplete_type_error (NULL_TREE, type);
2286       return integer_zero_node;
2287     }
2288
2289   if (TREE_CODE (t) == INTEGER_CST)
2290     force_fit_type (t, 0);
2291
2292   return t;
2293 }
2294
2295 /* Return the size of TYPE (in bytes) as a wide integer
2296    or return -1 if the size can vary or is larger than an integer.  */
2297
2298 HOST_WIDE_INT
2299 int_size_in_bytes (type)
2300      tree type;
2301 {
2302   tree t;
2303
2304   if (type == error_mark_node)
2305     return 0;
2306
2307   type = TYPE_MAIN_VARIANT (type);
2308   t = TYPE_SIZE_UNIT (type);
2309   if (t == 0
2310       || TREE_CODE (t) != INTEGER_CST
2311       || TREE_OVERFLOW (t)
2312       || TREE_INT_CST_HIGH (t) != 0
2313       /* If the result would appear negative, it's too big to represent.  */
2314       || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
2315     return -1;
2316
2317   return TREE_INT_CST_LOW (t);
2318 }
2319 \f
2320 /* Return the bit position of FIELD, in bits from the start of the record.
2321    This is a tree of type bitsizetype.  */
2322
2323 tree
2324 bit_position (field)
2325      tree field;
2326 {
2327   return DECL_FIELD_BITPOS (field);
2328 }
2329
2330 /* Likewise, but return as an integer.  Abort if it cannot be represented
2331    in that way (since it could be a signed value, we don't have the option
2332    of returning -1 like int_size_in_byte can.  */
2333
2334 HOST_WIDE_INT
2335 int_bit_position (field)
2336      tree field;
2337 {
2338   return tree_low_cst (bit_position (field), 0);
2339 }
2340 \f
2341 /* Return the strictest alignment, in bits, that T is known to have.  */
2342
2343 unsigned int
2344 expr_align (t)
2345      tree t;
2346 {
2347   unsigned int align0, align1;
2348
2349   switch (TREE_CODE (t))
2350     {
2351     case NOP_EXPR:  case CONVERT_EXPR:  case NON_LVALUE_EXPR:
2352       /* If we have conversions, we know that the alignment of the
2353          object must meet each of the alignments of the types.  */
2354       align0 = expr_align (TREE_OPERAND (t, 0));
2355       align1 = TYPE_ALIGN (TREE_TYPE (t));
2356       return MAX (align0, align1);
2357
2358     case SAVE_EXPR:         case COMPOUND_EXPR:       case MODIFY_EXPR:
2359     case INIT_EXPR:         case TARGET_EXPR:         case WITH_CLEANUP_EXPR:
2360     case WITH_RECORD_EXPR:  case CLEANUP_POINT_EXPR:  case UNSAVE_EXPR:
2361       /* These don't change the alignment of an object.  */
2362       return expr_align (TREE_OPERAND (t, 0));
2363
2364     case COND_EXPR:
2365       /* The best we can do is say that the alignment is the least aligned
2366          of the two arms.  */
2367       align0 = expr_align (TREE_OPERAND (t, 1));
2368       align1 = expr_align (TREE_OPERAND (t, 2));
2369       return MIN (align0, align1);
2370
2371     case LABEL_DECL:     case CONST_DECL:
2372     case VAR_DECL:       case PARM_DECL:   case RESULT_DECL:
2373       if (DECL_ALIGN (t) != 0)
2374         return DECL_ALIGN (t);
2375       break;
2376
2377     case FUNCTION_DECL:
2378       return FUNCTION_BOUNDARY;
2379
2380     default:
2381       break;
2382     }
2383
2384   /* Otherwise take the alignment from that of the type.  */
2385   return TYPE_ALIGN (TREE_TYPE (t));
2386 }
2387 \f
2388 /* Return, as a tree node, the number of elements for TYPE (which is an
2389    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
2390
2391 tree
2392 array_type_nelts (type)
2393      tree type;
2394 {
2395   tree index_type, min, max;
2396
2397   /* If they did it with unspecified bounds, then we should have already
2398      given an error about it before we got here.  */
2399   if (! TYPE_DOMAIN (type))
2400     return error_mark_node;
2401
2402   index_type = TYPE_DOMAIN (type);
2403   min = TYPE_MIN_VALUE (index_type);
2404   max = TYPE_MAX_VALUE (index_type);
2405
2406   return (integer_zerop (min)
2407           ? max
2408           : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
2409 }
2410 \f
2411 /* Return nonzero if arg is static -- a reference to an object in
2412    static storage.  This is not the same as the C meaning of `static'.  */
2413
2414 int
2415 staticp (arg)
2416      tree arg;
2417 {
2418   switch (TREE_CODE (arg))
2419     {
2420     case FUNCTION_DECL:
2421       /* Nested functions aren't static, since taking their address
2422          involves a trampoline.  */
2423        return (decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
2424               && ! DECL_NON_ADDR_CONST_P (arg);
2425
2426     case VAR_DECL:
2427       return (TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2428              && ! DECL_NON_ADDR_CONST_P (arg);
2429
2430     case CONSTRUCTOR:
2431       return TREE_STATIC (arg);
2432
2433     case STRING_CST:
2434       return 1;
2435
2436       /* If we are referencing a bitfield, we can't evaluate an
2437          ADDR_EXPR at compile time and so it isn't a constant.  */
2438     case COMPONENT_REF:
2439       return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
2440               && staticp (TREE_OPERAND (arg, 0)));
2441
2442     case BIT_FIELD_REF:
2443       return 0;
2444
2445 #if 0
2446        /* This case is technically correct, but results in setting
2447           TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2448           compile time.  */
2449     case INDIRECT_REF:
2450       return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2451 #endif
2452
2453     case ARRAY_REF:
2454       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2455           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2456         return staticp (TREE_OPERAND (arg, 0));
2457
2458     default:
2459       return 0;
2460     }
2461 }
2462 \f
2463 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2464    Do this to any expression which may be used in more than one place,
2465    but must be evaluated only once.
2466
2467    Normally, expand_expr would reevaluate the expression each time.
2468    Calling save_expr produces something that is evaluated and recorded
2469    the first time expand_expr is called on it.  Subsequent calls to
2470    expand_expr just reuse the recorded value.
2471
2472    The call to expand_expr that generates code that actually computes
2473    the value is the first call *at compile time*.  Subsequent calls
2474    *at compile time* generate code to use the saved value.
2475    This produces correct result provided that *at run time* control
2476    always flows through the insns made by the first expand_expr
2477    before reaching the other places where the save_expr was evaluated.
2478    You, the caller of save_expr, must make sure this is so.
2479
2480    Constants, and certain read-only nodes, are returned with no
2481    SAVE_EXPR because that is safe.  Expressions containing placeholders
2482    are not touched; see tree.def for an explanation of what these
2483    are used for.  */
2484
2485 tree
2486 save_expr (expr)
2487      tree expr;
2488 {
2489   register tree t = fold (expr);
2490
2491   /* We don't care about whether this can be used as an lvalue in this
2492      context.  */
2493   while (TREE_CODE (t) == NON_LVALUE_EXPR)
2494     t = TREE_OPERAND (t, 0);
2495
2496   /* If the tree evaluates to a constant, then we don't want to hide that
2497      fact (i.e. this allows further folding, and direct checks for constants).
2498      However, a read-only object that has side effects cannot be bypassed.
2499      Since it is no problem to reevaluate literals, we just return the 
2500      literal node.  */
2501
2502   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
2503       || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK)
2504     return t;
2505
2506   /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2507      it means that the size or offset of some field of an object depends on
2508      the value within another field.
2509
2510      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2511      and some variable since it would then need to be both evaluated once and
2512      evaluated more than once.  Front-ends must assure this case cannot
2513      happen by surrounding any such subexpressions in their own SAVE_EXPR
2514      and forcing evaluation at the proper time.  */
2515   if (contains_placeholder_p (t))
2516     return t;
2517
2518   t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
2519
2520   /* This expression might be placed ahead of a jump to ensure that the
2521      value was computed on both sides of the jump.  So make sure it isn't
2522      eliminated as dead.  */
2523   TREE_SIDE_EFFECTS (t) = 1;
2524   return t;
2525 }
2526
2527 /* Arrange for an expression to be expanded multiple independent
2528    times.  This is useful for cleanup actions, as the backend can
2529    expand them multiple times in different places.  */
2530
2531 tree
2532 unsave_expr (expr)
2533      tree expr;
2534 {
2535   tree t;
2536
2537   /* If this is already protected, no sense in protecting it again.  */
2538   if (TREE_CODE (expr) == UNSAVE_EXPR)
2539     return expr;
2540
2541   t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
2542   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
2543   return t;
2544 }
2545
2546 /* Returns the index of the first non-tree operand for CODE, or the number
2547    of operands if all are trees.  */
2548
2549 int
2550 first_rtl_op (code)
2551      enum tree_code code;
2552 {
2553   switch (code)
2554     {
2555     case SAVE_EXPR:
2556       return 2;
2557     case GOTO_SUBROUTINE_EXPR:
2558     case RTL_EXPR:
2559       return 0;
2560     case CALL_EXPR:
2561       return 2;
2562     case WITH_CLEANUP_EXPR:
2563       /* Should be defined to be 2.  */
2564       return 1;
2565     case METHOD_CALL_EXPR:
2566       return 3;
2567     default:
2568       return tree_code_length [(int) code];
2569     }
2570 }
2571
2572 /* Perform any modifications to EXPR required when it is unsaved.  Does
2573    not recurse into EXPR's subtrees.  */
2574
2575 void
2576 unsave_expr_1 (expr)
2577      tree expr;
2578 {
2579   switch (TREE_CODE (expr))
2580     {
2581     case SAVE_EXPR:
2582       if (! SAVE_EXPR_PERSISTENT_P (expr))
2583         SAVE_EXPR_RTL (expr) = 0;
2584       break;
2585
2586     case TARGET_EXPR:
2587       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
2588       TREE_OPERAND (expr, 3) = NULL_TREE;
2589       break;
2590       
2591     case RTL_EXPR:
2592       /* I don't yet know how to emit a sequence multiple times.  */
2593       if (RTL_EXPR_SEQUENCE (expr) != 0)
2594         abort ();
2595       break;
2596
2597     case CALL_EXPR:
2598       CALL_EXPR_RTL (expr) = 0;
2599       break;
2600
2601     default:
2602       if (lang_unsave_expr_now != 0)
2603         (*lang_unsave_expr_now) (expr);
2604       break;
2605     }
2606 }
2607
2608 /* Helper function for unsave_expr_now.  */
2609
2610 static void
2611 unsave_expr_now_r (expr)
2612      tree expr;
2613 {
2614   enum tree_code code;
2615
2616   /* There's nothing to do for NULL_TREE.  */
2617   if (expr == 0)
2618     return;
2619
2620   unsave_expr_1 (expr);
2621
2622   code = TREE_CODE (expr);
2623   if (code == CALL_EXPR 
2624       && TREE_OPERAND (expr, 1)
2625       && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
2626     {
2627       tree exp = TREE_OPERAND (expr, 1);
2628       while (exp)
2629         {
2630           unsave_expr_now_r (TREE_VALUE (exp));
2631           exp = TREE_CHAIN (exp);
2632         }
2633     }
2634  
2635   switch (TREE_CODE_CLASS (code))
2636     {
2637     case 'c':  /* a constant */
2638     case 't':  /* a type node */
2639     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
2640     case 'd':  /* A decl node */
2641     case 'b':  /* A block node */
2642       break;
2643
2644     case 'e':  /* an expression */
2645     case 'r':  /* a reference */
2646     case 's':  /* an expression with side effects */
2647     case '<':  /* a comparison expression */
2648     case '2':  /* a binary arithmetic expression */
2649     case '1':  /* a unary arithmetic expression */
2650       {
2651         int i;
2652         
2653         for (i = first_rtl_op (code) - 1; i >= 0; i--)
2654           unsave_expr_now_r (TREE_OPERAND (expr, i));
2655       }
2656       break;
2657
2658     default:
2659       abort ();
2660     }
2661 }
2662
2663 /* Modify a tree in place so that all the evaluate only once things
2664    are cleared out.  Return the EXPR given.  */
2665
2666 tree
2667 unsave_expr_now (expr)
2668      tree expr;
2669 {
2670   if (lang_unsave!= 0)
2671     (*lang_unsave) (&expr);
2672   else
2673     unsave_expr_now_r (expr);
2674
2675   return expr;
2676 }
2677
2678 /* Return nonzero if it is safe to unsave EXPR, else return zero.
2679    It is not safe to unsave EXPR if it contains any embedded RTL_EXPRs.  */
2680
2681 int
2682 safe_for_unsave (expr)
2683      tree expr;
2684 {
2685   enum tree_code code;
2686   register int i;
2687   int first_rtl;
2688
2689   if (expr == NULL_TREE)
2690     return 1;
2691
2692   code = TREE_CODE (expr);
2693   first_rtl = first_rtl_op (code);
2694   switch (code)
2695     {
2696     case RTL_EXPR:
2697       return 0;
2698
2699     case CALL_EXPR:
2700       if (TREE_OPERAND (expr, 1)
2701           && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
2702         {
2703           tree exp = TREE_OPERAND (expr, 1);
2704           while (exp)
2705             {
2706               if (! safe_for_unsave (TREE_VALUE (exp)))
2707                 return 0;
2708               exp = TREE_CHAIN (exp);
2709             }
2710         }
2711       break;
2712
2713     default:
2714       if (lang_safe_for_unsave)
2715         switch ((*lang_safe_for_unsave) (expr))
2716           {
2717           case -1:
2718             break;
2719           case 0:
2720             return 0;
2721           case 1:
2722             return 1;
2723           default:
2724             abort ();
2725           }
2726       break;
2727     }
2728
2729   switch (TREE_CODE_CLASS (code))
2730     {
2731     case 'c':  /* a constant */
2732     case 't':  /* a type node */
2733     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
2734     case 'd':  /* A decl node */
2735     case 'b':  /* A block node */
2736       return 1;
2737
2738     case 'e':  /* an expression */
2739     case 'r':  /* a reference */
2740     case 's':  /* an expression with side effects */
2741     case '<':  /* a comparison expression */
2742     case '2':  /* a binary arithmetic expression */
2743     case '1':  /* a unary arithmetic expression */
2744       for (i = first_rtl - 1; i >= 0; i--)
2745         if (! safe_for_unsave (TREE_OPERAND (expr, i)))
2746           return 0;
2747       return 1;
2748
2749     default:
2750       return 0;
2751     }
2752 }
2753 \f
2754 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2755    or offset that depends on a field within a record.  */
2756
2757 int
2758 contains_placeholder_p (exp)
2759      tree exp;
2760 {
2761   register enum tree_code code = TREE_CODE (exp);
2762   int result;
2763
2764   /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2765      in it since it is supplying a value for it.  */
2766   if (code == WITH_RECORD_EXPR)
2767     return 0;
2768   else if (code == PLACEHOLDER_EXPR)
2769     return 1;
2770
2771   switch (TREE_CODE_CLASS (code))
2772     {
2773     case 'r':
2774       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2775          position computations since they will be converted into a
2776          WITH_RECORD_EXPR involving the reference, which will assume
2777          here will be valid.  */
2778       return contains_placeholder_p (TREE_OPERAND (exp, 0));
2779
2780     case 'x':
2781       if (code == TREE_LIST)
2782         return (contains_placeholder_p (TREE_VALUE (exp))
2783                 || (TREE_CHAIN (exp) != 0
2784                     && contains_placeholder_p (TREE_CHAIN (exp))));
2785       break;
2786                                         
2787     case '1':
2788     case '2':  case '<':
2789     case 'e':
2790       switch (code)
2791         {
2792         case COMPOUND_EXPR:
2793           /* Ignoring the first operand isn't quite right, but works best. */
2794           return contains_placeholder_p (TREE_OPERAND (exp, 1));
2795
2796         case RTL_EXPR:
2797         case CONSTRUCTOR:
2798           return 0;
2799
2800         case COND_EXPR:
2801           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2802                   || contains_placeholder_p (TREE_OPERAND (exp, 1))
2803                   || contains_placeholder_p (TREE_OPERAND (exp, 2)));
2804
2805         case SAVE_EXPR:
2806           /* If we already know this doesn't have a placeholder, don't
2807              check again.  */
2808           if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
2809             return 0;
2810
2811           SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
2812           result = contains_placeholder_p (TREE_OPERAND (exp, 0));
2813           if (result)
2814             SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
2815
2816           return result;
2817
2818         case CALL_EXPR:
2819           return (TREE_OPERAND (exp, 1) != 0
2820                   && contains_placeholder_p (TREE_OPERAND (exp, 1)));
2821
2822         default:
2823           break;
2824         }
2825
2826       switch (tree_code_length[(int) code])
2827         {
2828         case 1:
2829           return contains_placeholder_p (TREE_OPERAND (exp, 0));
2830         case 2:
2831           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2832                   || contains_placeholder_p (TREE_OPERAND (exp, 1)));
2833         default:
2834           return 0;
2835         }
2836
2837     default:
2838       return 0;
2839     }
2840   return 0;
2841 }
2842
2843 /* Return 1 if EXP contains any expressions that produce cleanups for an
2844    outer scope to deal with.  Used by fold.  */
2845
2846 int
2847 has_cleanups (exp)
2848      tree exp;
2849 {
2850   int i, nops, cmp;
2851
2852   if (! TREE_SIDE_EFFECTS (exp))
2853     return 0;
2854
2855   switch (TREE_CODE (exp))
2856     {
2857     case TARGET_EXPR:
2858     case GOTO_SUBROUTINE_EXPR:
2859     case WITH_CLEANUP_EXPR:
2860       return 1;
2861
2862     case CLEANUP_POINT_EXPR:
2863       return 0;
2864
2865     case CALL_EXPR:
2866       for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
2867         {
2868           cmp = has_cleanups (TREE_VALUE (exp));
2869           if (cmp)
2870             return cmp;
2871         }
2872       return 0;
2873
2874     default:
2875       break;
2876     }
2877
2878   /* This general rule works for most tree codes.  All exceptions should be
2879      handled above.  If this is a language-specific tree code, we can't
2880      trust what might be in the operand, so say we don't know
2881      the situation.  */
2882   if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
2883     return -1;
2884
2885   nops = first_rtl_op (TREE_CODE (exp));
2886   for (i = 0; i < nops; i++)
2887     if (TREE_OPERAND (exp, i) != 0)
2888       {
2889         int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
2890         if (type == 'e' || type == '<' || type == '1' || type == '2'
2891             || type == 'r' || type == 's')
2892           {
2893             cmp = has_cleanups (TREE_OPERAND (exp, i));
2894             if (cmp)
2895               return cmp;
2896           }
2897       }
2898
2899   return 0;
2900 }
2901 \f
2902 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2903    return a tree with all occurrences of references to F in a
2904    PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
2905    contains only arithmetic expressions or a CALL_EXPR with a
2906    PLACEHOLDER_EXPR occurring only in its arglist.  */
2907
2908 tree
2909 substitute_in_expr (exp, f, r)
2910      tree exp;
2911      tree f;
2912      tree r;
2913 {
2914   enum tree_code code = TREE_CODE (exp);
2915   tree op0, op1, op2;
2916   tree new;
2917   tree inner;
2918
2919   switch (TREE_CODE_CLASS (code))
2920     {
2921     case 'c':
2922     case 'd':
2923       return exp;
2924
2925     case 'x':
2926       if (code == PLACEHOLDER_EXPR)
2927         return exp;
2928       else if (code == TREE_LIST)
2929         {
2930           op0 = (TREE_CHAIN (exp) == 0
2931                  ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
2932           op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
2933           if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2934             return exp;
2935
2936           return tree_cons (TREE_PURPOSE (exp), op1, op0);
2937         }
2938
2939       abort ();
2940
2941     case '1':
2942     case '2':
2943     case '<':
2944     case 'e':
2945       switch (tree_code_length[(int) code])
2946         {
2947         case 1:
2948           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2949           if (op0 == TREE_OPERAND (exp, 0))
2950             return exp;
2951           
2952           new = fold (build1 (code, TREE_TYPE (exp), op0));
2953           break;
2954
2955         case 2:
2956           /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2957              could, but we don't support it.  */
2958           if (code == RTL_EXPR)
2959             return exp;
2960           else if (code == CONSTRUCTOR)
2961             abort ();
2962
2963           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2964           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2965           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2966             return exp;
2967
2968           new = fold (build (code, TREE_TYPE (exp), op0, op1));
2969           break;
2970
2971         case 3:
2972           /* It cannot be that anything inside a SAVE_EXPR contains a
2973              PLACEHOLDER_EXPR.  */
2974           if (code == SAVE_EXPR)
2975             return exp;
2976
2977           else if (code == CALL_EXPR)
2978             {
2979               op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2980               if (op1 == TREE_OPERAND (exp, 1))
2981                 return exp;
2982
2983               return build (code, TREE_TYPE (exp),
2984                             TREE_OPERAND (exp, 0), op1, NULL_TREE);
2985             }
2986
2987           else if (code != COND_EXPR)
2988             abort ();
2989
2990           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2991           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2992           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2993           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2994               && op2 == TREE_OPERAND (exp, 2))
2995             return exp;
2996
2997           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2998           break;
2999
3000         default:
3001           abort ();
3002         }
3003
3004       break;
3005
3006     case 'r':
3007       switch (code)
3008         {
3009         case COMPONENT_REF:
3010           /* If this expression is getting a value from a PLACEHOLDER_EXPR
3011              and it is the right field, replace it with R.  */
3012           for (inner = TREE_OPERAND (exp, 0);
3013                TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
3014                inner = TREE_OPERAND (inner, 0))
3015             ;
3016           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
3017               && TREE_OPERAND (exp, 1) == f)
3018             return r;
3019
3020           /* If this expression hasn't been completed let, leave it 
3021              alone.  */
3022           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
3023               && TREE_TYPE (inner) == 0)
3024             return exp;
3025
3026           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3027           if (op0 == TREE_OPERAND (exp, 0))
3028             return exp;
3029
3030           new = fold (build (code, TREE_TYPE (exp), op0,
3031                              TREE_OPERAND (exp, 1)));
3032           break;
3033
3034         case BIT_FIELD_REF:
3035           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3036           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
3037           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
3038           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3039               && op2 == TREE_OPERAND (exp, 2))
3040             return exp;
3041
3042           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
3043           break;
3044
3045         case INDIRECT_REF:
3046         case BUFFER_REF:
3047           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
3048           if (op0 == TREE_OPERAND (exp, 0))
3049             return exp;
3050
3051           new = fold (build1 (code, TREE_TYPE (exp), op0));
3052           break;
3053
3054         default:
3055           abort ();
3056         }
3057       break;
3058       
3059     default:
3060       abort ();
3061     }
3062
3063   TREE_READONLY (new) = TREE_READONLY (exp);
3064   return new;
3065 }
3066 \f
3067 /* Stabilize a reference so that we can use it any number of times
3068    without causing its operands to be evaluated more than once.
3069    Returns the stabilized reference.  This works by means of save_expr,
3070    so see the caveats in the comments about save_expr.
3071
3072    Also allows conversion expressions whose operands are references.
3073    Any other kind of expression is returned unchanged.  */
3074
3075 tree
3076 stabilize_reference (ref)
3077      tree ref;
3078 {
3079   register tree result;
3080   register enum tree_code code = TREE_CODE (ref);
3081
3082   switch (code)
3083     {
3084     case VAR_DECL:
3085     case PARM_DECL:
3086     case RESULT_DECL:
3087       /* No action is needed in this case.  */
3088       return ref;
3089
3090     case NOP_EXPR:
3091     case CONVERT_EXPR:
3092     case FLOAT_EXPR:
3093     case FIX_TRUNC_EXPR:
3094     case FIX_FLOOR_EXPR:
3095     case FIX_ROUND_EXPR:
3096     case FIX_CEIL_EXPR:
3097       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3098       break;
3099
3100     case INDIRECT_REF:
3101       result = build_nt (INDIRECT_REF,
3102                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3103       break;
3104
3105     case COMPONENT_REF:
3106       result = build_nt (COMPONENT_REF,
3107                          stabilize_reference (TREE_OPERAND (ref, 0)),
3108                          TREE_OPERAND (ref, 1));
3109       break;
3110
3111     case BIT_FIELD_REF:
3112       result = build_nt (BIT_FIELD_REF,
3113                          stabilize_reference (TREE_OPERAND (ref, 0)),
3114                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3115                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
3116       break;
3117
3118     case ARRAY_REF:
3119       result = build_nt (ARRAY_REF,
3120                          stabilize_reference (TREE_OPERAND (ref, 0)),
3121                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
3122       break;
3123
3124     case COMPOUND_EXPR:
3125       /* We cannot wrap the first expression in a SAVE_EXPR, as then
3126          it wouldn't be ignored.  This matters when dealing with
3127          volatiles.  */
3128       return stabilize_reference_1 (ref);
3129
3130     case RTL_EXPR:
3131       result = build1 (INDIRECT_REF, TREE_TYPE (ref),
3132                        save_expr (build1 (ADDR_EXPR,
3133                                           build_pointer_type (TREE_TYPE (ref)),
3134                                           ref)));
3135       break;
3136
3137
3138       /* If arg isn't a kind of lvalue we recognize, make no change.
3139          Caller should recognize the error for an invalid lvalue.  */
3140     default:
3141       return ref;
3142
3143     case ERROR_MARK:
3144       return error_mark_node;
3145     }
3146
3147   TREE_TYPE (result) = TREE_TYPE (ref);
3148   TREE_READONLY (result) = TREE_READONLY (ref);
3149   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3150   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3151
3152   return result;
3153 }
3154
3155 /* Subroutine of stabilize_reference; this is called for subtrees of
3156    references.  Any expression with side-effects must be put in a SAVE_EXPR
3157    to ensure that it is only evaluated once.
3158
3159    We don't put SAVE_EXPR nodes around everything, because assigning very
3160    simple expressions to temporaries causes us to miss good opportunities
3161    for optimizations.  Among other things, the opportunity to fold in the
3162    addition of a constant into an addressing mode often gets lost, e.g.
3163    "y[i+1] += x;".  In general, we take the approach that we should not make
3164    an assignment unless we are forced into it - i.e., that any non-side effect
3165    operator should be allowed, and that cse should take care of coalescing
3166    multiple utterances of the same expression should that prove fruitful.  */
3167
3168 tree
3169 stabilize_reference_1 (e)
3170      tree e;
3171 {
3172   register tree result;
3173   register enum tree_code code = TREE_CODE (e);
3174
3175   /* We cannot ignore const expressions because it might be a reference
3176      to a const array but whose index contains side-effects.  But we can
3177      ignore things that are actual constant or that already have been
3178      handled by this function.  */
3179
3180   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
3181     return e;
3182
3183   switch (TREE_CODE_CLASS (code))
3184     {
3185     case 'x':
3186     case 't':
3187     case 'd':
3188     case 'b':
3189     case '<':
3190     case 's':
3191     case 'e':
3192     case 'r':
3193       /* If the expression has side-effects, then encase it in a SAVE_EXPR
3194          so that it will only be evaluated once.  */
3195       /* The reference (r) and comparison (<) classes could be handled as
3196          below, but it is generally faster to only evaluate them once.  */
3197       if (TREE_SIDE_EFFECTS (e))
3198         return save_expr (e);
3199       return e;
3200
3201     case 'c':
3202       /* Constants need no processing.  In fact, we should never reach
3203          here.  */
3204       return e;
3205       
3206     case '2':
3207       /* Division is slow and tends to be compiled with jumps,
3208          especially the division by powers of 2 that is often
3209          found inside of an array reference.  So do it just once.  */
3210       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3211           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3212           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3213           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3214         return save_expr (e);
3215       /* Recursively stabilize each operand.  */
3216       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3217                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
3218       break;
3219
3220     case '1':
3221       /* Recursively stabilize each operand.  */
3222       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3223       break;
3224
3225     default:
3226       abort ();
3227     }
3228   
3229   TREE_TYPE (result) = TREE_TYPE (e);
3230   TREE_READONLY (result) = TREE_READONLY (e);
3231   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3232   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3233
3234   return result;
3235 }
3236 \f
3237 /* Low-level constructors for expressions.  */
3238
3239 /* Build an expression of code CODE, data type TYPE,
3240    and operands as specified by the arguments ARG1 and following arguments.
3241    Expressions and reference nodes can be created this way.
3242    Constants, decls, types and misc nodes cannot be.  */
3243
3244 tree
3245 build VPARAMS ((enum tree_code code, tree tt, ...))
3246 {
3247 #ifndef ANSI_PROTOTYPES
3248   enum tree_code code;
3249   tree tt;
3250 #endif
3251   va_list p;
3252   register tree t;
3253   register int length;
3254   register int i;
3255   int fro;
3256
3257   VA_START (p, tt);
3258
3259 #ifndef ANSI_PROTOTYPES
3260   code = va_arg (p, enum tree_code);
3261   tt = va_arg (p, tree);
3262 #endif
3263
3264   t = make_node (code);
3265   length = tree_code_length[(int) code];
3266   TREE_TYPE (t) = tt;
3267
3268   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
3269      the result based on those same flags for the arguments.  But, if
3270      the arguments aren't really even `tree' expressions, we shouldn't
3271      be trying to do this.  */
3272   fro = first_rtl_op (code);
3273
3274   if (length == 2)
3275     {
3276       /* This is equivalent to the loop below, but faster.  */
3277       register tree arg0 = va_arg (p, tree);
3278       register tree arg1 = va_arg (p, tree);
3279       TREE_OPERAND (t, 0) = arg0;
3280       TREE_OPERAND (t, 1) = arg1;
3281       if (arg0 && fro > 0)
3282         {
3283           if (TREE_SIDE_EFFECTS (arg0))
3284             TREE_SIDE_EFFECTS (t) = 1;
3285         }
3286       if (arg1 && fro > 1)
3287         {
3288           if (TREE_SIDE_EFFECTS (arg1))
3289             TREE_SIDE_EFFECTS (t) = 1;
3290         }
3291     }
3292   else if (length == 1)
3293     {
3294       register tree arg0 = va_arg (p, tree);
3295
3296       /* Call build1 for this!  */
3297       if (TREE_CODE_CLASS (code) != 's')
3298         abort ();
3299       TREE_OPERAND (t, 0) = arg0;
3300       if (fro > 0)
3301         {
3302           if (arg0 && TREE_SIDE_EFFECTS (arg0))
3303             TREE_SIDE_EFFECTS (t) = 1;
3304         }
3305     }
3306   else
3307     {
3308       for (i = 0; i < length; i++)
3309         {
3310           register tree operand = va_arg (p, tree);
3311           TREE_OPERAND (t, i) = operand;
3312           if (operand && fro > i)
3313             {
3314               if (TREE_SIDE_EFFECTS (operand))
3315                 TREE_SIDE_EFFECTS (t) = 1;
3316             }
3317         }
3318     }
3319   va_end (p);
3320   return t;
3321 }
3322
3323 /* Same as above, but only builds for unary operators.
3324    Saves lions share of calls to `build'; cuts down use
3325    of varargs, which is expensive for RISC machines.  */
3326
3327 tree
3328 build1 (code, type, node)
3329      enum tree_code code;
3330      tree type;
3331      tree node;
3332 {
3333   register struct obstack *obstack = expression_obstack;
3334   register int length;
3335 #ifdef GATHER_STATISTICS
3336   register tree_node_kind kind;
3337 #endif
3338   register tree t;
3339
3340 #ifdef GATHER_STATISTICS
3341   if (TREE_CODE_CLASS (code) == 'r')
3342     kind = r_kind;
3343   else
3344     kind = e_kind;
3345 #endif
3346
3347   length = sizeof (struct tree_exp);
3348
3349   if (ggc_p)
3350     t = ggc_alloc_tree (length);
3351   else
3352     {
3353       t = (tree) obstack_alloc (obstack, length);
3354       memset ((PTR) t, 0, length);
3355     }
3356
3357 #ifdef GATHER_STATISTICS
3358   tree_node_counts[(int)kind]++;
3359   tree_node_sizes[(int)kind] += length;
3360 #endif
3361
3362   TREE_TYPE (t) = type;
3363   TREE_SET_CODE (t, code);
3364   TREE_SET_PERMANENT (t);
3365
3366   TREE_OPERAND (t, 0) = node;
3367   if (node && first_rtl_op (code) != 0)
3368     {
3369       if (TREE_SIDE_EFFECTS (node))
3370         TREE_SIDE_EFFECTS (t) = 1;
3371     }
3372
3373   switch (code)
3374     {
3375     case INIT_EXPR:
3376     case MODIFY_EXPR:
3377     case VA_ARG_EXPR:
3378     case RTL_EXPR:
3379     case PREDECREMENT_EXPR:
3380     case PREINCREMENT_EXPR:
3381     case POSTDECREMENT_EXPR:
3382     case POSTINCREMENT_EXPR:
3383       /* All of these have side-effects, no matter what their
3384          operands are.  */
3385       TREE_SIDE_EFFECTS (t) = 1;
3386       break;
3387           
3388     default:
3389       break;
3390     }
3391
3392   return t;
3393 }
3394
3395 /* Similar except don't specify the TREE_TYPE
3396    and leave the TREE_SIDE_EFFECTS as 0.
3397    It is permissible for arguments to be null,
3398    or even garbage if their values do not matter.  */
3399
3400 tree
3401 build_nt VPARAMS ((enum tree_code code, ...))
3402 {
3403 #ifndef ANSI_PROTOTYPES
3404   enum tree_code code;
3405 #endif
3406   va_list p;
3407   register tree t;
3408   register int length;
3409   register int i;
3410
3411   VA_START (p, code);
3412
3413 #ifndef ANSI_PROTOTYPES
3414   code = va_arg (p, enum tree_code);
3415 #endif
3416
3417   t = make_node (code);
3418   length = tree_code_length[(int) code];
3419
3420   for (i = 0; i < length; i++)
3421     TREE_OPERAND (t, i) = va_arg (p, tree);
3422
3423   va_end (p);
3424   return t;
3425 }
3426
3427 /* Similar to `build_nt', except we build
3428    on the temp_decl_obstack, regardless.  */
3429
3430 tree
3431 build_parse_node VPARAMS ((enum tree_code code, ...))
3432 {
3433 #ifndef ANSI_PROTOTYPES
3434   enum tree_code code;
3435 #endif
3436   register struct obstack *ambient_obstack = expression_obstack;
3437   va_list p;
3438   register tree t;
3439   register int length;
3440   register int i;
3441
3442   VA_START (p, code);
3443
3444 #ifndef ANSI_PROTOTYPES
3445   code = va_arg (p, enum tree_code);
3446 #endif
3447
3448   expression_obstack = &temp_decl_obstack;
3449
3450   t = make_node (code);
3451   length = tree_code_length[(int) code];
3452
3453   for (i = 0; i < length; i++)
3454     TREE_OPERAND (t, i) = va_arg (p, tree);
3455
3456   va_end (p);
3457   expression_obstack = ambient_obstack;
3458   return t;
3459 }
3460
3461 #if 0
3462 /* Commented out because this wants to be done very
3463    differently.  See cp-lex.c.  */
3464 tree
3465 build_op_identifier (op1, op2)
3466      tree op1, op2;
3467 {
3468   register tree t = make_node (OP_IDENTIFIER);
3469   TREE_PURPOSE (t) = op1;
3470   TREE_VALUE (t) = op2;
3471   return t;
3472 }
3473 #endif
3474 \f
3475 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3476    We do NOT enter this node in any sort of symbol table.
3477
3478    layout_decl is used to set up the decl's storage layout.
3479    Other slots are initialized to 0 or null pointers.  */
3480
3481 tree
3482 build_decl (code, name, type)
3483      enum tree_code code;
3484      tree name, type;
3485 {
3486   register tree t;
3487
3488   t = make_node (code);
3489
3490 /*  if (type == error_mark_node)
3491     type = integer_type_node; */
3492 /* That is not done, deliberately, so that having error_mark_node
3493    as the type can suppress useless errors in the use of this variable.  */
3494
3495   DECL_NAME (t) = name;
3496   DECL_ASSEMBLER_NAME (t) = name;
3497   TREE_TYPE (t) = type;
3498
3499   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3500     layout_decl (t, 0);
3501   else if (code == FUNCTION_DECL)
3502     DECL_MODE (t) = FUNCTION_MODE;
3503
3504   return t;
3505 }
3506 \f
3507 /* BLOCK nodes are used to represent the structure of binding contours
3508    and declarations, once those contours have been exited and their contents
3509    compiled.  This information is used for outputting debugging info.  */
3510
3511 tree
3512 build_block (vars, tags, subblocks, supercontext, chain)
3513      tree vars, tags ATTRIBUTE_UNUSED, subblocks, supercontext, chain;
3514 {
3515   register tree block = make_node (BLOCK);
3516
3517   BLOCK_VARS (block) = vars;
3518   BLOCK_SUBBLOCKS (block) = subblocks;
3519   BLOCK_SUPERCONTEXT (block) = supercontext;
3520   BLOCK_CHAIN (block) = chain;
3521   return block;
3522 }
3523
3524 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3525    location where an expression or an identifier were encountered. It
3526    is necessary for languages where the frontend parser will handle
3527    recursively more than one file (Java is one of them).  */
3528
3529 tree
3530 build_expr_wfl (node, file, line, col)
3531      tree node;
3532      const char *file;
3533      int line, col;
3534 {
3535   static const char *last_file = 0;
3536   static tree last_filenode = NULL_TREE;
3537   register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
3538
3539   EXPR_WFL_NODE (wfl) = node;
3540   EXPR_WFL_SET_LINECOL (wfl, line, col);
3541   if (file != last_file)
3542     {
3543       last_file = file;
3544       last_filenode = file ? get_identifier (file) : NULL_TREE;
3545     }
3546
3547   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
3548   if (node)
3549     {
3550       TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
3551       TREE_TYPE (wfl) = TREE_TYPE (node);
3552     }
3553
3554   return wfl;
3555 }
3556 \f
3557 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3558    is ATTRIBUTE.  */
3559
3560 tree
3561 build_decl_attribute_variant (ddecl, attribute)
3562      tree ddecl, attribute;
3563 {
3564   DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
3565   return ddecl;
3566 }
3567
3568 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3569    is ATTRIBUTE.
3570
3571    Record such modified types already made so we don't make duplicates.  */
3572
3573 tree
3574 build_type_attribute_variant (ttype, attribute)
3575      tree ttype, attribute;
3576 {
3577   if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3578     {
3579       unsigned int hashcode;
3580       tree ntype;
3581
3582       push_obstacks (TYPE_OBSTACK (ttype), TYPE_OBSTACK (ttype));
3583       ntype = copy_node (ttype);
3584
3585       TYPE_POINTER_TO (ntype) = 0;
3586       TYPE_REFERENCE_TO (ntype) = 0;
3587       TYPE_ATTRIBUTES (ntype) = attribute;
3588
3589       /* Create a new main variant of TYPE.  */
3590       TYPE_MAIN_VARIANT (ntype) = ntype;
3591       TYPE_NEXT_VARIANT (ntype) = 0;
3592       set_type_quals (ntype, TYPE_UNQUALIFIED);
3593
3594       hashcode = (TYPE_HASH (TREE_CODE (ntype))
3595                   + TYPE_HASH (TREE_TYPE (ntype))
3596                   + attribute_hash_list (attribute));
3597
3598       switch (TREE_CODE (ntype))
3599         {
3600         case FUNCTION_TYPE:
3601           hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
3602           break;
3603         case ARRAY_TYPE:
3604           hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
3605           break;
3606         case INTEGER_TYPE:
3607           hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
3608           break;
3609         case REAL_TYPE:
3610           hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
3611           break;
3612         default:
3613           break;
3614         }
3615
3616       ntype = type_hash_canon (hashcode, ntype);
3617       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3618       pop_obstacks ();
3619     }
3620
3621   return ttype;
3622 }
3623
3624 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3625    or type TYPE and 0 otherwise.  Validity is determined the configuration
3626    macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE.  */
3627
3628 int
3629 valid_machine_attribute (attr_name, attr_args, decl, type)
3630   tree attr_name;
3631   tree attr_args ATTRIBUTE_UNUSED;
3632   tree decl ATTRIBUTE_UNUSED;
3633   tree type ATTRIBUTE_UNUSED;
3634 {
3635   int validated = 0;
3636 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3637   tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
3638 #endif
3639 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3640   tree type_attr_list = TYPE_ATTRIBUTES (type);
3641 #endif
3642
3643   if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
3644     abort ();
3645
3646 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3647   if (decl != 0
3648       && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name,
3649                                        attr_args))
3650     {
3651       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3652                                     decl_attr_list);
3653
3654       if (attr != NULL_TREE)
3655         {
3656           /* Override existing arguments.  Declarations are unique so we can
3657              modify this in place.  */
3658           TREE_VALUE (attr) = attr_args;
3659         }
3660       else
3661         {
3662           decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3663           decl = build_decl_attribute_variant (decl, decl_attr_list);
3664         }
3665
3666       validated = 1;
3667     }
3668 #endif
3669
3670 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3671   if (validated)
3672     /* Don't apply the attribute to both the decl and the type.  */;
3673   else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name,
3674                                          attr_args))
3675     {
3676       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3677                                     type_attr_list);
3678
3679       if (attr != NULL_TREE)
3680         {
3681           /* Override existing arguments.
3682              ??? This currently works since attribute arguments are not
3683              included in `attribute_hash_list'.  Something more complicated
3684              may be needed in the future.  */
3685           TREE_VALUE (attr) = attr_args;
3686         }
3687       else
3688         {
3689           /* If this is part of a declaration, create a type variant,
3690              otherwise, this is part of a type definition, so add it 
3691              to the base type.  */
3692           type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3693           if (decl != 0)
3694             type = build_type_attribute_variant (type, type_attr_list);
3695           else
3696             TYPE_ATTRIBUTES (type) = type_attr_list;
3697         }
3698
3699       if (decl != 0)
3700         TREE_TYPE (decl) = type;
3701
3702       validated = 1;
3703     }
3704
3705   /* Handle putting a type attribute on pointer-to-function-type by putting
3706      the attribute on the function type.  */
3707   else if (POINTER_TYPE_P (type)
3708            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3709            && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3710                                             attr_name, attr_args))
3711     {
3712       tree inner_type = TREE_TYPE (type);
3713       tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3714       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3715                                     type_attr_list);
3716
3717       if (attr != NULL_TREE)
3718         TREE_VALUE (attr) = attr_args;
3719       else
3720         {
3721           inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3722           inner_type = build_type_attribute_variant (inner_type,
3723                                                      inner_attr_list);
3724         }
3725
3726       if (decl != 0)
3727         TREE_TYPE (decl) = build_pointer_type (inner_type);
3728       else
3729         {
3730           /* Clear TYPE_POINTER_TO for the old inner type, since
3731              `type' won't be pointing to it anymore.  */
3732           TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE;
3733           TREE_TYPE (type) = inner_type;
3734         }
3735
3736       validated = 1;
3737     }
3738 #endif
3739
3740   return validated;
3741 }
3742
3743 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3744    or zero if not.
3745
3746    We try both `text' and `__text__', ATTR may be either one.  */
3747 /* ??? It might be a reasonable simplification to require ATTR to be only
3748    `text'.  One might then also require attribute lists to be stored in
3749    their canonicalized form.  */
3750
3751 int
3752 is_attribute_p (attr, ident)
3753      const char *attr;
3754      tree ident;
3755 {
3756   int ident_len, attr_len;
3757   char *p;
3758
3759   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3760     return 0;
3761
3762   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3763     return 1;
3764
3765   p = IDENTIFIER_POINTER (ident);
3766   ident_len = strlen (p);
3767   attr_len = strlen (attr);
3768
3769   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3770   if (attr[0] == '_')
3771     {
3772       if (attr[1] != '_'
3773           || attr[attr_len - 2] != '_'
3774           || attr[attr_len - 1] != '_')
3775         abort ();
3776       if (ident_len == attr_len - 4
3777           && strncmp (attr + 2, p, attr_len - 4) == 0)
3778         return 1;
3779     }
3780   else
3781     {
3782       if (ident_len == attr_len + 4
3783           && p[0] == '_' && p[1] == '_'
3784           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3785           && strncmp (attr, p + 2, attr_len) == 0)
3786         return 1;
3787     }
3788
3789   return 0;
3790 }
3791
3792 /* Given an attribute name and a list of attributes, return a pointer to the
3793    attribute's list element if the attribute is part of the list, or NULL_TREE
3794    if not found.  */
3795
3796 tree
3797 lookup_attribute (attr_name, list)
3798      const char *attr_name;
3799      tree list;
3800 {
3801   tree l;
3802
3803   for (l = list; l; l = TREE_CHAIN (l))
3804     {
3805       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3806         abort ();
3807       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3808         return l;
3809     }
3810
3811   return NULL_TREE;
3812 }
3813
3814 /* Return an attribute list that is the union of a1 and a2.  */
3815
3816 tree
3817 merge_attributes (a1, a2)
3818      register tree a1, a2;
3819 {
3820   tree attributes;
3821
3822   /* Either one unset?  Take the set one.  */
3823
3824   if ((attributes = a1) == 0)
3825     attributes = a2;
3826
3827   /* One that completely contains the other?  Take it.  */
3828
3829   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3830   {
3831     if (attribute_list_contained (a2, a1))
3832       attributes = a2;
3833     else
3834       {
3835         /* Pick the longest list, and hang on the other list.  */
3836         /* ??? For the moment we punt on the issue of attrs with args.  */
3837
3838         if (list_length (a1) < list_length (a2))
3839           attributes = a2, a2 = a1;
3840
3841         for (; a2 != 0; a2 = TREE_CHAIN (a2))
3842           if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3843                                 attributes) == NULL_TREE)
3844             {
3845               a1 = copy_node (a2);
3846               TREE_CHAIN (a1) = attributes;
3847               attributes = a1;
3848             }
3849       }
3850   }
3851   return attributes;
3852 }
3853
3854 /* Given types T1 and T2, merge their attributes and return
3855    the result.  */
3856
3857 tree
3858 merge_machine_type_attributes (t1, t2)
3859      tree t1, t2;
3860 {
3861 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3862   return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2);
3863 #else
3864   return merge_attributes (TYPE_ATTRIBUTES (t1),
3865                            TYPE_ATTRIBUTES (t2));
3866 #endif
3867 }
3868
3869 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3870    the result.  */
3871
3872 tree
3873 merge_machine_decl_attributes (olddecl, newdecl)
3874      tree olddecl, newdecl;
3875 {
3876 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3877   return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl);
3878 #else
3879   return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl),
3880                            DECL_MACHINE_ATTRIBUTES (newdecl));
3881 #endif
3882 }
3883 \f
3884 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3885    of the various TYPE_QUAL values.  */
3886
3887 static void
3888 set_type_quals (type, type_quals)
3889      tree type;
3890      int  type_quals;
3891 {
3892   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3893   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3894   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3895 }
3896
3897 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3898    the same kind of data as TYPE describes.  Variants point to the
3899    "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3900    and it points to a chain of other variants so that duplicate
3901    variants are never made.  Only main variants should ever appear as
3902    types of expressions.  */
3903
3904 tree
3905 build_qualified_type (type, type_quals)
3906      tree type;
3907      int type_quals;
3908 {
3909   register tree t;
3910   
3911   /* Search the chain of variants to see if there is already one there just
3912      like the one we need to have.  If so, use that existing one.  We must
3913      preserve the TYPE_NAME, since there is code that depends on this.  */
3914
3915   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3916     if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type))
3917       return t;
3918
3919   /* We need a new one.  */
3920   t = build_type_copy (type);
3921   set_type_quals (t, type_quals);
3922   return t;
3923 }
3924
3925 /* Create a new variant of TYPE, equivalent but distinct.
3926    This is so the caller can modify it.  */
3927
3928 tree
3929 build_type_copy (type)
3930      tree type;
3931 {
3932   register tree t, m = TYPE_MAIN_VARIANT (type);
3933   register struct obstack *ambient_obstack = current_obstack;
3934
3935   current_obstack = TYPE_OBSTACK (type);
3936   t = copy_node (type);
3937   current_obstack = ambient_obstack;
3938
3939   TYPE_POINTER_TO (t) = 0;
3940   TYPE_REFERENCE_TO (t) = 0;
3941
3942   /* Add this type to the chain of variants of TYPE.  */
3943   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3944   TYPE_NEXT_VARIANT (m) = t;
3945
3946   return t;
3947 }
3948 \f
3949 /* Hashing of types so that we don't make duplicates.
3950    The entry point is `type_hash_canon'.  */
3951
3952 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3953    with types in the TREE_VALUE slots), by adding the hash codes
3954    of the individual types.  */
3955
3956 unsigned int
3957 type_hash_list (list)
3958      tree list;
3959 {
3960   unsigned int hashcode;
3961   register tree tail;
3962
3963   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3964     hashcode += TYPE_HASH (TREE_VALUE (tail));
3965
3966   return hashcode;
3967 }
3968
3969 /* These are the Hashtable callback functions.  */
3970
3971 /* Returns true if the types are equal.  */
3972
3973 static int
3974 type_hash_eq (va, vb)
3975      const void *va;
3976      const void *vb;
3977 {
3978   const struct type_hash *a = va, *b = vb;
3979   if (a->hash == b->hash
3980       && TREE_CODE (a->type) == TREE_CODE (b->type)
3981       && TREE_TYPE (a->type) == TREE_TYPE (b->type)
3982       && attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3983                                TYPE_ATTRIBUTES (b->type))
3984       && TYPE_ALIGN (a->type) == TYPE_ALIGN (b->type)
3985       && (TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3986           || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3987                                  TYPE_MAX_VALUE (b->type)))
3988       && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3989           || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3990                                  TYPE_MIN_VALUE (b->type)))
3991       /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
3992       && (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
3993           || (TYPE_DOMAIN (a->type)
3994               && TREE_CODE (TYPE_DOMAIN (a->type)) == TREE_LIST
3995               && TYPE_DOMAIN (b->type)
3996               && TREE_CODE (TYPE_DOMAIN (b->type)) == TREE_LIST
3997               && type_list_equal (TYPE_DOMAIN (a->type),
3998                                   TYPE_DOMAIN (b->type)))))
3999     return 1;
4000   return 0;
4001 }
4002
4003 /* Return the cached hash value.  */
4004
4005 static unsigned int
4006 type_hash_hash (item)
4007      const void *item;
4008 {
4009   return ((const struct type_hash*)item)->hash;
4010 }
4011
4012 /* Look in the type hash table for a type isomorphic to TYPE.
4013    If one is found, return it.  Otherwise return 0.  */
4014
4015 tree
4016 type_hash_lookup (hashcode, type)
4017      unsigned int hashcode;
4018      tree type;
4019 {
4020   struct type_hash *h, in;
4021
4022   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
4023      must call that routine before comparing TYPE_ALIGNs. */
4024   layout_type (type);
4025
4026   in.hash = hashcode;
4027   in.type = type;
4028
4029   h = htab_find_with_hash (type_hash_table, &in, hashcode);
4030   if (h)
4031     return h->type;
4032   return NULL_TREE;
4033 }
4034
4035 /* Add an entry to the type-hash-table
4036    for a type TYPE whose hash code is HASHCODE.  */
4037
4038 void
4039 type_hash_add (hashcode, type)
4040      unsigned int hashcode;
4041      tree type;
4042 {
4043   struct type_hash *h;
4044   void **loc;
4045
4046   h = (struct type_hash *) permalloc (sizeof (struct type_hash));
4047   h->hash = hashcode;
4048   h->type = type;
4049   loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, 1);
4050   *(struct type_hash**)loc = h;
4051 }
4052
4053 /* Given TYPE, and HASHCODE its hash code, return the canonical
4054    object for an identical type if one already exists.
4055    Otherwise, return TYPE, and record it as the canonical object
4056    if it is a permanent object.
4057
4058    To use this function, first create a type of the sort you want.
4059    Then compute its hash code from the fields of the type that
4060    make it different from other similar types.
4061    Then call this function and use the value.
4062    This function frees the type you pass in if it is a duplicate.  */
4063
4064 /* Set to 1 to debug without canonicalization.  Never set by program.  */
4065 int debug_no_type_hash = 0;
4066
4067 tree
4068 type_hash_canon (hashcode, type)
4069      unsigned int hashcode;
4070      tree type;
4071 {
4072   tree t1;
4073
4074   if (debug_no_type_hash)
4075     return type;
4076
4077   t1 = type_hash_lookup (hashcode, type);
4078   if (t1 != 0)
4079     {
4080       if (!ggc_p)
4081         obstack_free (TYPE_OBSTACK (type), type);
4082
4083 #ifdef GATHER_STATISTICS
4084       tree_node_counts[(int)t_kind]--;
4085       tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
4086 #endif
4087       return t1;
4088     }
4089
4090   /* If this is a permanent type, record it for later reuse.  */
4091   if (ggc_p || TREE_PERMANENT (type))
4092     type_hash_add (hashcode, type);
4093
4094   return type;
4095 }
4096
4097 /* Callback function for htab_traverse.  */
4098
4099 static int
4100 mark_hash_entry (entry, param)
4101      void **entry;
4102      void *param ATTRIBUTE_UNUSED;
4103 {
4104   struct type_hash *p = *(struct type_hash **)entry;
4105   ggc_mark_tree (p->type);
4106   /* Continue scan.  */
4107   return 1;
4108 }
4109
4110 /* Mark ARG (which is really a htab_t *) for GC.  */
4111
4112 static void
4113 mark_type_hash (arg)
4114      void *arg;
4115 {
4116   htab_t t = *(htab_t *) arg;
4117   htab_traverse (t, mark_hash_entry, 0);
4118 }
4119
4120 static void
4121 print_type_hash_statistics ()
4122 {
4123   fprintf (stderr, "Type hash: size %d, %d elements, %f collisions\n",
4124            htab_size (type_hash_table), htab_elements (type_hash_table),
4125            htab_collisions (type_hash_table));
4126 }
4127
4128 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
4129    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
4130    by adding the hash codes of the individual attributes.  */
4131
4132 unsigned int
4133 attribute_hash_list (list)
4134      tree list;
4135 {
4136   unsigned int hashcode;
4137   register tree tail;
4138
4139   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
4140     /* ??? Do we want to add in TREE_VALUE too? */
4141     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
4142   return hashcode;
4143 }
4144
4145 /* Given two lists of attributes, return true if list l2 is
4146    equivalent to l1.  */
4147
4148 int
4149 attribute_list_equal (l1, l2)
4150      tree l1, l2;
4151 {
4152    return attribute_list_contained (l1, l2)
4153           && attribute_list_contained (l2, l1);
4154 }
4155
4156 /* Given two lists of attributes, return true if list L2 is
4157    completely contained within L1.  */
4158 /* ??? This would be faster if attribute names were stored in a canonicalized
4159    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
4160    must be used to show these elements are equivalent (which they are).  */
4161 /* ??? It's not clear that attributes with arguments will always be handled
4162    correctly.  */
4163
4164 int
4165 attribute_list_contained (l1, l2)
4166      tree l1, l2;
4167 {
4168   register tree t1, t2;
4169
4170   /* First check the obvious, maybe the lists are identical.  */
4171   if (l1 == l2)
4172      return 1;
4173
4174   /* Maybe the lists are similar.  */
4175   for (t1 = l1, t2 = l2;
4176        t1 != 0 && t2 != 0
4177         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
4178         && TREE_VALUE (t1) == TREE_VALUE (t2);
4179        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
4180
4181   /* Maybe the lists are equal.  */
4182   if (t1 == 0 && t2 == 0)
4183      return 1;
4184
4185   for (; t2 != 0; t2 = TREE_CHAIN (t2))
4186     {
4187       tree attr
4188         = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
4189
4190       if (attr == 0)
4191         return 0;
4192
4193       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
4194         return 0;
4195     }
4196
4197   return 1;
4198 }
4199
4200 /* Given two lists of types
4201    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
4202    return 1 if the lists contain the same types in the same order.
4203    Also, the TREE_PURPOSEs must match.  */
4204
4205 int
4206 type_list_equal (l1, l2)
4207      tree l1, l2;
4208 {
4209   register tree t1, t2;
4210
4211   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
4212     if (TREE_VALUE (t1) != TREE_VALUE (t2)
4213         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
4214             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
4215                   && (TREE_TYPE (TREE_PURPOSE (t1))
4216                       == TREE_TYPE (TREE_PURPOSE (t2))))))
4217       return 0;
4218
4219   return t1 == t2;
4220 }
4221
4222 /* Nonzero if integer constants T1 and T2
4223    represent the same constant value.  */
4224
4225 int
4226 tree_int_cst_equal (t1, t2)
4227      tree t1, t2;
4228 {
4229   if (t1 == t2)
4230     return 1;
4231
4232   if (t1 == 0 || t2 == 0)
4233     return 0;
4234
4235   if (TREE_CODE (t1) == INTEGER_CST
4236       && TREE_CODE (t2) == INTEGER_CST
4237       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4238       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
4239     return 1;
4240
4241   return 0;
4242 }
4243
4244 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4245    The precise way of comparison depends on their data type.  */
4246
4247 int
4248 tree_int_cst_lt (t1, t2)
4249      tree t1, t2;
4250 {
4251   if (t1 == t2)
4252     return 0;
4253
4254   if (! TREE_UNSIGNED (TREE_TYPE (t1)))
4255     return INT_CST_LT (t1, t2);
4256
4257   return INT_CST_LT_UNSIGNED (t1, t2);
4258 }
4259
4260 /* Return 1 if T is an INTEGER_CST that can be represented in a single
4261    HOST_WIDE_INT value.  If POS is nonzero, the result must be positive.  */
4262
4263 int
4264 host_integerp (t, pos)
4265      tree t;
4266      int pos;
4267 {
4268   return (TREE_CODE (t) == INTEGER_CST
4269           && ! TREE_OVERFLOW (t)
4270           && ((TREE_INT_CST_HIGH (t) == 0
4271                && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4272               || (! pos && TREE_INT_CST_HIGH (t) == -1
4273                   && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)));
4274 }
4275
4276 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4277    INTEGER_CST and there is no overflow.  POS is nonzero if the result must
4278    be positive.  Abort if we cannot satisfy the above conditions.  */
4279
4280 HOST_WIDE_INT
4281 tree_low_cst (t, pos)
4282      tree t;
4283      int pos;
4284 {
4285   if (host_integerp (t, pos))
4286     return TREE_INT_CST_LOW (t);
4287   else
4288     abort ();
4289 }  
4290
4291 /* Return the most significant bit of the integer constant T.  */
4292
4293 int
4294 tree_int_cst_msb (t)
4295      tree t;
4296 {
4297   register int prec;
4298   HOST_WIDE_INT h;
4299   HOST_WIDE_INT l;
4300
4301   /* Note that using TYPE_PRECISION here is wrong.  We care about the
4302      actual bits, not the (arbitrary) range of the type.  */
4303   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4304   rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4305                  2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4306   return (l & 1) == 1;
4307   }
4308
4309 /* Return an indication of the sign of the integer constant T.
4310    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4311    Note that -1 will never be returned it T's type is unsigned.  */
4312
4313 int
4314 tree_int_cst_sgn (t)
4315      tree t;
4316 {
4317   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4318     return 0;
4319   else if (TREE_UNSIGNED (TREE_TYPE (t)))
4320     return 1;
4321   else if (TREE_INT_CST_HIGH (t) < 0)
4322     return -1;
4323   else
4324     return 1;
4325 }
4326
4327 /* Compare two constructor-element-type constants.  Return 1 if the lists
4328    are known to be equal; otherwise return 0.  */
4329
4330 int
4331 simple_cst_list_equal (l1, l2)
4332      tree l1, l2;
4333 {
4334   while (l1 != NULL_TREE && l2 != NULL_TREE)
4335     {
4336       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4337         return 0;
4338
4339       l1 = TREE_CHAIN (l1);
4340       l2 = TREE_CHAIN (l2);
4341     }
4342
4343   return l1 == l2;
4344 }
4345
4346 /* Return truthvalue of whether T1 is the same tree structure as T2.
4347    Return 1 if they are the same.
4348    Return 0 if they are understandably different.
4349    Return -1 if either contains tree structure not understood by
4350    this function.  */
4351
4352 int
4353 simple_cst_equal (t1, t2)
4354      tree t1, t2;
4355 {
4356   register enum tree_code code1, code2;
4357   int cmp;
4358   int i;
4359
4360   if (t1 == t2)
4361     return 1;
4362   if (t1 == 0 || t2 == 0)
4363     return 0;
4364
4365   code1 = TREE_CODE (t1);
4366   code2 = TREE_CODE (t2);
4367
4368   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4369     {
4370       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4371           || code2 == NON_LVALUE_EXPR)
4372         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4373       else
4374         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4375     }
4376
4377   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4378            || code2 == NON_LVALUE_EXPR)
4379     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4380
4381   if (code1 != code2)
4382     return 0;
4383
4384   switch (code1)
4385     {
4386     case INTEGER_CST:
4387       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4388               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4389
4390     case REAL_CST:
4391       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4392
4393     case STRING_CST:
4394       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4395               && ! bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4396                          TREE_STRING_LENGTH (t1)));
4397
4398     case CONSTRUCTOR:
4399       if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
4400         return 1;
4401       else
4402         abort ();
4403
4404     case SAVE_EXPR:
4405       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4406
4407     case CALL_EXPR:
4408       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4409       if (cmp <= 0)
4410         return cmp;
4411       return
4412         simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4413
4414     case TARGET_EXPR:
4415       /* Special case: if either target is an unallocated VAR_DECL,
4416          it means that it's going to be unified with whatever the
4417          TARGET_EXPR is really supposed to initialize, so treat it
4418          as being equivalent to anything.  */
4419       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4420            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4421            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
4422           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4423               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4424               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
4425         cmp = 1;
4426       else
4427         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4428
4429       if (cmp <= 0)
4430         return cmp;
4431
4432       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4433
4434     case WITH_CLEANUP_EXPR:
4435       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4436       if (cmp <= 0)
4437         return cmp;
4438
4439       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
4440
4441     case COMPONENT_REF:
4442       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4443         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4444
4445       return 0;
4446
4447     case VAR_DECL:
4448     case PARM_DECL:
4449     case CONST_DECL:
4450     case FUNCTION_DECL:
4451       return 0;
4452       
4453     default:
4454       break;
4455     }
4456
4457   /* This general rule works for most tree codes.  All exceptions should be
4458      handled above.  If this is a language-specific tree code, we can't
4459      trust what might be in the operand, so say we don't know
4460      the situation.  */
4461   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4462     return -1;
4463
4464   switch (TREE_CODE_CLASS (code1))
4465     {
4466     case '1':
4467     case '2':
4468     case '<':
4469     case 'e':
4470     case 'r':
4471     case 's':
4472       cmp = 1;
4473       for (i = 0; i < tree_code_length[(int) code1]; i++)
4474         {
4475           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4476           if (cmp <= 0)
4477             return cmp;
4478         }
4479
4480       return cmp;
4481
4482     default:
4483       return -1;
4484     }
4485 }
4486
4487 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4488    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
4489    than U, respectively.  */
4490
4491 int
4492 compare_tree_int (t, u)
4493      tree t;
4494      unsigned int u;
4495 {
4496   if (tree_int_cst_sgn (t) < 0)
4497     return -1;
4498   else if (TREE_INT_CST_HIGH (t) != 0)
4499     return 1;
4500   else if (TREE_INT_CST_LOW (t) == u)
4501     return 0;
4502   else if (TREE_INT_CST_LOW (t) < u)
4503     return -1;
4504   else
4505     return 1;
4506 }
4507 \f
4508 /* Constructors for pointer, array and function types.
4509    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4510    constructed by language-dependent code, not here.)  */
4511
4512 /* Construct, lay out and return the type of pointers to TO_TYPE.
4513    If such a type has already been constructed, reuse it.  */
4514
4515 tree
4516 build_pointer_type (to_type)
4517      tree to_type;
4518 {
4519   register tree t = TYPE_POINTER_TO (to_type);
4520
4521   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4522
4523   if (t != 0)
4524     return t;
4525
4526   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4527   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4528   t = make_node (POINTER_TYPE);
4529   pop_obstacks ();
4530
4531   TREE_TYPE (t) = to_type;
4532
4533   /* Record this type as the pointer to TO_TYPE.  */
4534   TYPE_POINTER_TO (to_type) = t;
4535
4536   /* Lay out the type.  This function has many callers that are concerned
4537      with expression-construction, and this simplifies them all.
4538      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
4539   layout_type (t);
4540
4541   return t;
4542 }
4543
4544 /* Build the node for the type of references-to-TO_TYPE.  */
4545
4546 tree
4547 build_reference_type (to_type)
4548      tree to_type;
4549 {
4550   register tree t = TYPE_REFERENCE_TO (to_type);
4551
4552   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4553
4554   if (t)
4555     return t;
4556
4557   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4558   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4559   t = make_node (REFERENCE_TYPE);
4560   pop_obstacks ();
4561
4562   TREE_TYPE (t) = to_type;
4563
4564   /* Record this type as the pointer to TO_TYPE.  */
4565   TYPE_REFERENCE_TO (to_type) = t;
4566
4567   layout_type (t);
4568
4569   return t;
4570 }
4571
4572 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4573    MAXVAL should be the maximum value in the domain
4574    (one less than the length of the array).
4575
4576    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4577    We don't enforce this limit, that is up to caller (e.g. language front end).
4578    The limit exists because the result is a signed type and we don't handle
4579    sizes that use more than one HOST_WIDE_INT.  */
4580
4581 tree
4582 build_index_type (maxval)
4583      tree maxval;
4584 {
4585   register tree itype = make_node (INTEGER_TYPE);
4586
4587   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4588   TYPE_MIN_VALUE (itype) = size_zero_node;
4589
4590   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4591   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4592   pop_obstacks ();
4593
4594   TYPE_MODE (itype) = TYPE_MODE (sizetype);
4595   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4596   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4597   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4598   if (TREE_CODE (maxval) == INTEGER_CST)
4599     {
4600       int maxint = TREE_INT_CST_LOW (maxval);
4601
4602       /* If the domain should be empty, make sure the maxval
4603          remains -1 and is not spoiled by truncation.  */
4604       if (tree_int_cst_sgn (maxval) < 0)
4605         {
4606           TYPE_MAX_VALUE (itype) = build_int_2 (-1, -1);
4607           TREE_TYPE (TYPE_MAX_VALUE (itype)) = sizetype;
4608         }
4609
4610       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4611     }
4612   else
4613     return itype;
4614 }
4615
4616 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4617    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4618    low bound LOWVAL and high bound HIGHVAL.
4619    if TYPE==NULL_TREE, sizetype is used.  */
4620
4621 tree
4622 build_range_type (type, lowval, highval)
4623      tree type, lowval, highval;
4624 {
4625   register tree itype = make_node (INTEGER_TYPE);
4626
4627   TREE_TYPE (itype) = type;
4628   if (type == NULL_TREE)
4629     type = sizetype;
4630
4631   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4632   TYPE_MIN_VALUE (itype) = convert (type, lowval);
4633   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4634   pop_obstacks ();
4635
4636   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4637   TYPE_MODE (itype) = TYPE_MODE (type);
4638   TYPE_SIZE (itype) = TYPE_SIZE (type);
4639   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4640   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4641   if (TREE_CODE (lowval) == INTEGER_CST)
4642     {
4643       HOST_WIDE_INT lowint, highint;
4644       int maxint;
4645
4646       lowint = TREE_INT_CST_LOW (lowval);
4647       if (highval && TREE_CODE (highval) == INTEGER_CST)
4648         highint = TREE_INT_CST_LOW (highval);
4649       else
4650         highint = (~(unsigned HOST_WIDE_INT) 0) >> 1;
4651
4652       maxint = (int) (highint - lowint);
4653
4654       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4655     }
4656   else
4657     return itype;
4658 }
4659
4660 /* Just like build_index_type, but takes lowval and highval instead
4661    of just highval (maxval).  */
4662
4663 tree
4664 build_index_2_type (lowval,highval)
4665      tree lowval, highval;
4666 {
4667   return build_range_type (NULL_TREE, lowval, highval);
4668 }
4669
4670 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4671    Needed because when index types are not hashed, equal index types
4672    built at different times appear distinct, even though structurally,
4673    they are not.  */
4674
4675 int
4676 index_type_equal (itype1, itype2)
4677      tree itype1, itype2;
4678 {
4679   if (TREE_CODE (itype1) != TREE_CODE (itype2))
4680     return 0;
4681
4682   if (TREE_CODE (itype1) == INTEGER_TYPE)
4683     {
4684       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
4685           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
4686           || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
4687           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
4688         return 0;
4689
4690       if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
4691                                  TYPE_MIN_VALUE (itype2))
4692           && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
4693                                     TYPE_MAX_VALUE (itype2)))
4694         return 1;
4695     }
4696
4697   return 0;
4698 }
4699
4700 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4701    and number of elements specified by the range of values of INDEX_TYPE.
4702    If such a type has already been constructed, reuse it.  */
4703
4704 tree
4705 build_array_type (elt_type, index_type)
4706      tree elt_type, index_type;
4707 {
4708   register tree t;
4709   unsigned int hashcode;
4710
4711   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4712     {
4713       error ("arrays of functions are not meaningful");
4714       elt_type = integer_type_node;
4715     }
4716
4717   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
4718   build_pointer_type (elt_type);
4719
4720   /* Allocate the array after the pointer type,
4721      in case we free it in type_hash_canon.  */
4722   t = make_node (ARRAY_TYPE);
4723   TREE_TYPE (t) = elt_type;
4724   TYPE_DOMAIN (t) = index_type;
4725
4726   if (index_type == 0)
4727     {
4728       return t;
4729     }
4730
4731   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
4732   t = type_hash_canon (hashcode, t);
4733
4734   if (TYPE_SIZE (t) == 0)
4735     layout_type (t);
4736   return t;
4737 }
4738
4739 /* Return the TYPE of the elements comprising
4740    the innermost dimension of ARRAY.  */
4741
4742 tree
4743 get_inner_array_type (array)
4744     tree array;
4745 {
4746   tree type = TREE_TYPE (array);
4747
4748   while (TREE_CODE (type) == ARRAY_TYPE)
4749     type = TREE_TYPE (type);
4750
4751   return type;
4752 }
4753
4754 /* Construct, lay out and return
4755    the type of functions returning type VALUE_TYPE
4756    given arguments of types ARG_TYPES.
4757    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4758    are data type nodes for the arguments of the function.
4759    If such a type has already been constructed, reuse it.  */
4760
4761 tree
4762 build_function_type (value_type, arg_types)
4763      tree value_type, arg_types;
4764 {
4765   register tree t;
4766   unsigned int hashcode;
4767
4768   if (TREE_CODE (value_type) == FUNCTION_TYPE)
4769     {
4770       error ("function return type cannot be function");
4771       value_type = integer_type_node;
4772     }
4773
4774   /* Make a node of the sort we want.  */
4775   t = make_node (FUNCTION_TYPE);
4776   TREE_TYPE (t) = value_type;
4777   TYPE_ARG_TYPES (t) = arg_types;
4778
4779   /* If we already have such a type, use the old one and free this one.  */
4780   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
4781   t = type_hash_canon (hashcode, t);
4782
4783   if (TYPE_SIZE (t) == 0)
4784     layout_type (t);
4785   return t;
4786 }
4787
4788 /* Construct, lay out and return the type of methods belonging to class
4789    BASETYPE and whose arguments and values are described by TYPE.
4790    If that type exists already, reuse it.
4791    TYPE must be a FUNCTION_TYPE node.  */
4792
4793 tree
4794 build_method_type (basetype, type)
4795      tree basetype, type;
4796 {
4797   register tree t;
4798   unsigned int hashcode;
4799
4800   /* Make a node of the sort we want.  */
4801   t = make_node (METHOD_TYPE);
4802
4803   if (TREE_CODE (type) != FUNCTION_TYPE)
4804     abort ();
4805
4806   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4807   TREE_TYPE (t) = TREE_TYPE (type);
4808
4809   /* The actual arglist for this function includes a "hidden" argument
4810      which is "this".  Put it into the list of argument types.  */
4811
4812   TYPE_ARG_TYPES (t)
4813     = tree_cons (NULL_TREE,
4814                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
4815
4816   /* If we already have such a type, use the old one and free this one.  */
4817   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4818   t = type_hash_canon (hashcode, t);
4819
4820   if (TYPE_SIZE (t) == 0)
4821     layout_type (t);
4822
4823   return t;
4824 }
4825
4826 /* Construct, lay out and return the type of offsets to a value
4827    of type TYPE, within an object of type BASETYPE.
4828    If a suitable offset type exists already, reuse it.  */
4829
4830 tree
4831 build_offset_type (basetype, type)
4832      tree basetype, type;
4833 {
4834   register tree t;
4835   unsigned int hashcode;
4836
4837   /* Make a node of the sort we want.  */
4838   t = make_node (OFFSET_TYPE);
4839
4840   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4841   TREE_TYPE (t) = type;
4842
4843   /* If we already have such a type, use the old one and free this one.  */
4844   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4845   t = type_hash_canon (hashcode, t);
4846
4847   if (TYPE_SIZE (t) == 0)
4848     layout_type (t);
4849
4850   return t;
4851 }
4852
4853 /* Create a complex type whose components are COMPONENT_TYPE.  */
4854
4855 tree
4856 build_complex_type (component_type)
4857      tree component_type;
4858 {
4859   register tree t;
4860   unsigned int hashcode;
4861
4862   /* Make a node of the sort we want.  */
4863   t = make_node (COMPLEX_TYPE);
4864
4865   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4866   set_type_quals (t, TYPE_QUALS (component_type));
4867
4868   /* If we already have such a type, use the old one and free this one.  */
4869   hashcode = TYPE_HASH (component_type);
4870   t = type_hash_canon (hashcode, t);
4871
4872   if (TYPE_SIZE (t) == 0)
4873     layout_type (t);
4874
4875   /* If we are writing Dwarf2 output we need to create a name,
4876      since complex is a fundamental type.  */
4877   if (write_symbols == DWARF2_DEBUG && ! TYPE_NAME (t))
4878     {
4879       const char *name;
4880       if (component_type == char_type_node)
4881         name = "complex char";
4882       else if (component_type == signed_char_type_node)
4883         name = "complex signed char";
4884       else if (component_type == unsigned_char_type_node)
4885         name = "complex unsigned char";
4886       else if (component_type == short_integer_type_node)
4887         name = "complex short int";
4888       else if (component_type == short_unsigned_type_node)
4889         name = "complex short unsigned int";
4890       else if (component_type == integer_type_node)
4891         name = "complex int";
4892       else if (component_type == unsigned_type_node)
4893         name = "complex unsigned int";
4894       else if (component_type == long_integer_type_node)
4895         name = "complex long int";
4896       else if (component_type == long_unsigned_type_node)
4897         name = "complex long unsigned int";
4898       else if (component_type == long_long_integer_type_node)
4899         name = "complex long long int";
4900       else if (component_type == long_long_unsigned_type_node)
4901         name = "complex long long unsigned int";
4902       else
4903         name = 0;
4904
4905       if (name != 0)
4906         TYPE_NAME (t) = get_identifier (name);
4907     }
4908
4909   return t;
4910 }
4911 \f
4912 /* Return OP, stripped of any conversions to wider types as much as is safe.
4913    Converting the value back to OP's type makes a value equivalent to OP.
4914
4915    If FOR_TYPE is nonzero, we return a value which, if converted to
4916    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4917
4918    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4919    narrowest type that can hold the value, even if they don't exactly fit.
4920    Otherwise, bit-field references are changed to a narrower type
4921    only if they can be fetched directly from memory in that type.
4922
4923    OP must have integer, real or enumeral type.  Pointers are not allowed!
4924
4925    There are some cases where the obvious value we could return
4926    would regenerate to OP if converted to OP's type, 
4927    but would not extend like OP to wider types.
4928    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4929    For example, if OP is (unsigned short)(signed char)-1,
4930    we avoid returning (signed char)-1 if FOR_TYPE is int,
4931    even though extending that to an unsigned short would regenerate OP,
4932    since the result of extending (signed char)-1 to (int)
4933    is different from (int) OP.  */
4934
4935 tree
4936 get_unwidened (op, for_type)
4937      register tree op;
4938      tree for_type;
4939 {
4940   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4941   register tree type = TREE_TYPE (op);
4942   register unsigned final_prec
4943     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4944   register int uns
4945     = (for_type != 0 && for_type != type
4946        && final_prec > TYPE_PRECISION (type)
4947        && TREE_UNSIGNED (type));
4948   register tree win = op;
4949
4950   while (TREE_CODE (op) == NOP_EXPR)
4951     {
4952       register int bitschange
4953         = TYPE_PRECISION (TREE_TYPE (op))
4954           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4955
4956       /* Truncations are many-one so cannot be removed.
4957          Unless we are later going to truncate down even farther.  */
4958       if (bitschange < 0
4959           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4960         break;
4961
4962       /* See what's inside this conversion.  If we decide to strip it,
4963          we will set WIN.  */
4964       op = TREE_OPERAND (op, 0);
4965
4966       /* If we have not stripped any zero-extensions (uns is 0),
4967          we can strip any kind of extension.
4968          If we have previously stripped a zero-extension,
4969          only zero-extensions can safely be stripped.
4970          Any extension can be stripped if the bits it would produce
4971          are all going to be discarded later by truncating to FOR_TYPE.  */
4972
4973       if (bitschange > 0)
4974         {
4975           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4976             win = op;
4977           /* TREE_UNSIGNED says whether this is a zero-extension.
4978              Let's avoid computing it if it does not affect WIN
4979              and if UNS will not be needed again.  */
4980           if ((uns || TREE_CODE (op) == NOP_EXPR)
4981               && TREE_UNSIGNED (TREE_TYPE (op)))
4982             {
4983               uns = 1;
4984               win = op;
4985             }
4986         }
4987     }
4988
4989   if (TREE_CODE (op) == COMPONENT_REF
4990       /* Since type_for_size always gives an integer type.  */
4991       && TREE_CODE (type) != REAL_TYPE
4992       /* Don't crash if field not laid out yet.  */
4993       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4994     {
4995       unsigned int innerprec
4996         = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4997
4998       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
4999
5000       /* We can get this structure field in the narrowest type it fits in.
5001          If FOR_TYPE is 0, do this only for a field that matches the
5002          narrower type exactly and is aligned for it
5003          The resulting extension to its nominal type (a fullword type)
5004          must fit the same conditions as for other extensions.  */
5005
5006       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5007           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5008           && (! uns || final_prec <= innerprec
5009               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
5010           && type != 0)
5011         {
5012           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5013                        TREE_OPERAND (op, 1));
5014           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5015           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5016         }
5017     }
5018   return win;
5019 }
5020 \f
5021 /* Return OP or a simpler expression for a narrower value
5022    which can be sign-extended or zero-extended to give back OP.
5023    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5024    or 0 if the value should be sign-extended.  */
5025
5026 tree
5027 get_narrower (op, unsignedp_ptr)
5028      register tree op;
5029      int *unsignedp_ptr;
5030 {
5031   register int uns = 0;
5032   int first = 1;
5033   register tree win = op;
5034
5035   while (TREE_CODE (op) == NOP_EXPR)
5036     {
5037       register int bitschange
5038         = (TYPE_PRECISION (TREE_TYPE (op))
5039            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5040
5041       /* Truncations are many-one so cannot be removed.  */
5042       if (bitschange < 0)
5043         break;
5044
5045       /* See what's inside this conversion.  If we decide to strip it,
5046          we will set WIN.  */
5047       op = TREE_OPERAND (op, 0);
5048
5049       if (bitschange > 0)
5050         {
5051           /* An extension: the outermost one can be stripped,
5052              but remember whether it is zero or sign extension.  */
5053           if (first)
5054             uns = TREE_UNSIGNED (TREE_TYPE (op));
5055           /* Otherwise, if a sign extension has been stripped,
5056              only sign extensions can now be stripped;
5057              if a zero extension has been stripped, only zero-extensions.  */
5058           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
5059             break;
5060           first = 0;
5061         }
5062       else /* bitschange == 0 */
5063         {
5064           /* A change in nominal type can always be stripped, but we must
5065              preserve the unsignedness.  */
5066           if (first)
5067             uns = TREE_UNSIGNED (TREE_TYPE (op));
5068           first = 0;
5069         }
5070
5071       win = op;
5072     }
5073
5074   if (TREE_CODE (op) == COMPONENT_REF
5075       /* Since type_for_size always gives an integer type.  */
5076       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
5077     {
5078       unsigned int innerprec
5079         = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
5080
5081       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
5082
5083       /* We can get this structure field in a narrower type that fits it,
5084          but the resulting extension to its nominal type (a fullword type)
5085          must satisfy the same conditions as for other extensions.
5086
5087          Do this only for fields that are aligned (not bit-fields),
5088          because when bit-field insns will be used there is no
5089          advantage in doing this.  */
5090
5091       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5092           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
5093           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
5094           && type != 0)
5095         {
5096           if (first)
5097             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
5098           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5099                        TREE_OPERAND (op, 1));
5100           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5101           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5102         }
5103     }
5104   *unsignedp_ptr = uns;
5105   return win;
5106 }
5107 \f
5108 /* Nonzero if integer constant C has a value that is permissible
5109    for type TYPE (an INTEGER_TYPE).  */
5110
5111 int
5112 int_fits_type_p (c, type)
5113      tree c, type;
5114 {
5115   if (TREE_UNSIGNED (type))
5116     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
5117                && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
5118             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
5119                   && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
5120             /* Negative ints never fit unsigned types.  */
5121             && ! (TREE_INT_CST_HIGH (c) < 0
5122                   && ! TREE_UNSIGNED (TREE_TYPE (c))));
5123   else
5124     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
5125                && INT_CST_LT (TYPE_MAX_VALUE (type), c))
5126             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
5127                   && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
5128             /* Unsigned ints with top bit set never fit signed types.  */
5129             && ! (TREE_INT_CST_HIGH (c) < 0
5130                   && TREE_UNSIGNED (TREE_TYPE (c))));
5131 }
5132
5133 /* Given a DECL or TYPE, return the scope in which it was declared, or
5134    NUL_TREE if there is no containing scope.  */
5135
5136 tree
5137 get_containing_scope (t)
5138      tree t;
5139 {
5140   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
5141 }
5142
5143 /* Return the innermost context enclosing DECL that is
5144    a FUNCTION_DECL, or zero if none.  */
5145
5146 tree
5147 decl_function_context (decl)
5148      tree decl;
5149 {
5150   tree context;
5151
5152   if (TREE_CODE (decl) == ERROR_MARK)
5153     return 0;
5154
5155   if (TREE_CODE (decl) == SAVE_EXPR)
5156     context = SAVE_EXPR_CONTEXT (decl);
5157   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
5158      where we look up the function at runtime.  Such functions always take
5159      a first argument of type 'pointer to real context'.
5160
5161      C++ should really be fixed to use DECL_CONTEXT for the real context,
5162      and use something else for the "virtual context".  */
5163   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
5164     context = TYPE_MAIN_VARIANT
5165       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
5166   else
5167     context = DECL_CONTEXT (decl);
5168
5169   while (context && TREE_CODE (context) != FUNCTION_DECL)
5170     {
5171       if (TREE_CODE (context) == BLOCK)
5172         context = BLOCK_SUPERCONTEXT (context);
5173       else 
5174         context = get_containing_scope (context);
5175     }
5176
5177   return context;
5178 }
5179
5180 /* Return the innermost context enclosing DECL that is
5181    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
5182    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
5183
5184 tree
5185 decl_type_context (decl)
5186      tree decl;
5187 {
5188   tree context = DECL_CONTEXT (decl);
5189
5190   while (context)
5191     {
5192       if (TREE_CODE (context) == RECORD_TYPE
5193           || TREE_CODE (context) == UNION_TYPE
5194           || TREE_CODE (context) == QUAL_UNION_TYPE)
5195         return context;
5196
5197       if (TREE_CODE (context) == TYPE_DECL
5198           || TREE_CODE (context) == FUNCTION_DECL)
5199         context = DECL_CONTEXT (context);
5200
5201       else if (TREE_CODE (context) == BLOCK)
5202         context = BLOCK_SUPERCONTEXT (context);
5203
5204       else
5205         /* Unhandled CONTEXT!?  */
5206         abort ();
5207     }
5208   return NULL_TREE;
5209 }
5210
5211 /* CALL is a CALL_EXPR.  Return the declaration for the function
5212    called, or NULL_TREE if the called function cannot be 
5213    determined.  */
5214
5215 tree
5216 get_callee_fndecl (call)
5217      tree call;
5218 {
5219   tree addr;
5220
5221   /* It's invalid to call this function with anything but a
5222      CALL_EXPR.  */
5223   if (TREE_CODE (call) != CALL_EXPR)
5224     abort ();
5225
5226   /* The first operand to the CALL is the address of the function
5227      called.  */
5228   addr = TREE_OPERAND (call, 0);
5229
5230   /* If the address is just `&f' for some function `f', then we know
5231      that `f' is being called.  */
5232   if (TREE_CODE (addr) == ADDR_EXPR
5233       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
5234     return TREE_OPERAND (addr, 0);
5235
5236   /* We couldn't figure out what was being called.  */
5237   return NULL_TREE;
5238 }
5239
5240 /* Print debugging information about the obstack O, named STR.  */
5241
5242 void
5243 print_obstack_statistics (str, o)
5244      const char *str;
5245      struct obstack *o;
5246 {
5247   struct _obstack_chunk *chunk = o->chunk;
5248   int n_chunks = 1;
5249   int n_alloc = 0;
5250
5251   n_alloc += o->next_free - chunk->contents;
5252   chunk = chunk->prev;
5253   while (chunk)
5254     {
5255       n_chunks += 1;
5256       n_alloc += chunk->limit - &chunk->contents[0];
5257       chunk = chunk->prev;
5258     }
5259   fprintf (stderr, "obstack %s: %u bytes, %d chunks\n",
5260            str, n_alloc, n_chunks);
5261 }
5262
5263 /* Print debugging information about tree nodes generated during the compile,
5264    and any language-specific information.  */
5265
5266 void
5267 dump_tree_statistics ()
5268 {
5269 #ifdef GATHER_STATISTICS
5270   int i;
5271   int total_nodes, total_bytes;
5272 #endif
5273
5274   fprintf (stderr, "\n??? tree nodes created\n\n");
5275 #ifdef GATHER_STATISTICS
5276   fprintf (stderr, "Kind                  Nodes     Bytes\n");
5277   fprintf (stderr, "-------------------------------------\n");
5278   total_nodes = total_bytes = 0;
5279   for (i = 0; i < (int) all_kinds; i++)
5280     {
5281       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
5282                tree_node_counts[i], tree_node_sizes[i]);
5283       total_nodes += tree_node_counts[i];
5284       total_bytes += tree_node_sizes[i];
5285     }
5286   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
5287   fprintf (stderr, "-------------------------------------\n");
5288   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
5289   fprintf (stderr, "-------------------------------------\n");
5290 #else
5291   fprintf (stderr, "(No per-node statistics)\n");
5292 #endif
5293   print_obstack_statistics ("permanent_obstack", &permanent_obstack);
5294   print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
5295   print_obstack_statistics ("temporary_obstack", &temporary_obstack);
5296   print_obstack_statistics ("momentary_obstack", &momentary_obstack);
5297   print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
5298   print_type_hash_statistics ();
5299   print_lang_statistics ();
5300 }
5301 \f
5302 #define FILE_FUNCTION_PREFIX_LEN 9
5303
5304 #ifndef NO_DOLLAR_IN_LABEL
5305 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
5306 #else /* NO_DOLLAR_IN_LABEL */
5307 #ifndef NO_DOT_IN_LABEL
5308 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
5309 #else /* NO_DOT_IN_LABEL */
5310 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
5311 #endif  /* NO_DOT_IN_LABEL */
5312 #endif  /* NO_DOLLAR_IN_LABEL */
5313
5314 extern char *first_global_object_name;
5315 extern char *weak_global_object_name;
5316
5317 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
5318    clashes in cases where we can't reliably choose a unique name.
5319
5320    Derived from mkstemp.c in libiberty.  */
5321
5322 static void
5323 append_random_chars (template)
5324      char *template;
5325 {
5326   static const char letters[]
5327     = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
5328   static unsigned HOST_WIDE_INT value;
5329   unsigned HOST_WIDE_INT v;
5330
5331 #ifdef HAVE_GETTIMEOFDAY
5332   struct timeval tv;
5333 #endif
5334
5335   template += strlen (template);
5336
5337 #ifdef HAVE_GETTIMEOFDAY
5338   /* Get some more or less random data.  */
5339   gettimeofday (&tv, NULL);
5340   value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
5341 #else
5342   value += getpid ();
5343 #endif
5344
5345   v = value;
5346
5347   /* Fill in the random bits.  */
5348   template[0] = letters[v % 62];
5349   v /= 62;
5350   template[1] = letters[v % 62];
5351   v /= 62;
5352   template[2] = letters[v % 62];
5353   v /= 62;
5354   template[3] = letters[v % 62];
5355   v /= 62;
5356   template[4] = letters[v % 62];
5357   v /= 62;
5358   template[5] = letters[v % 62];
5359
5360   template[6] = '\0';
5361 }
5362
5363 /* Generate a name for a function unique to this translation unit.
5364    TYPE is some string to identify the purpose of this function to the
5365    linker or collect2.  */
5366
5367 tree
5368 get_file_function_name_long (type)
5369      const char *type;
5370 {
5371   char *buf;
5372   register char *p;
5373
5374   if (first_global_object_name)
5375     p = first_global_object_name;
5376   else
5377     {
5378       /* We don't have anything that we know to be unique to this translation
5379          unit, so use what we do have and throw in some randomness.  */
5380
5381       const char *name = weak_global_object_name;
5382       const char *file = main_input_filename;
5383
5384       if (! name)
5385         name = "";
5386       if (! file)
5387         file = input_filename;
5388
5389       p = (char *) alloca (7 + strlen (name) + strlen (file));
5390
5391       sprintf (p, "%s%s", name, file);
5392       append_random_chars (p);
5393     }
5394
5395   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
5396                          + strlen (type));
5397
5398   /* Set up the name of the file-level functions we may need. 
5399      Use a global object (which is already required to be unique over
5400      the program) rather than the file name (which imposes extra
5401      constraints).  */
5402   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
5403
5404   /* Don't need to pull weird characters out of global names.  */
5405   if (p != first_global_object_name)
5406     {
5407       for (p = buf+11; *p; p++)
5408         if (! ( ISDIGIT(*p)
5409 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
5410 #ifndef ASM_IDENTIFY_GCC        /* this is required if `.' is invalid -- k. raeburn */
5411                || *p == '.'
5412 #endif
5413 #endif
5414 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5415                || *p == '$'
5416 #endif
5417 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5418                || *p == '.'
5419 #endif
5420                || ISUPPER(*p)
5421                || ISLOWER(*p)))
5422           *p = '_';
5423     }
5424
5425   return get_identifier (buf);
5426 }
5427
5428 /* If KIND=='I', return a suitable global initializer (constructor) name.
5429    If KIND=='D', return a suitable global clean-up (destructor) name.  */
5430
5431 tree
5432 get_file_function_name (kind)
5433      int kind;
5434 {
5435   char p[2];
5436
5437   p[0] = kind;
5438   p[1] = 0;
5439
5440   return get_file_function_name_long (p);
5441 }
5442 \f
5443 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5444    The result is placed in BUFFER (which has length BIT_SIZE),
5445    with one bit in each char ('\000' or '\001').
5446
5447    If the constructor is constant, NULL_TREE is returned.
5448    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5449
5450 tree
5451 get_set_constructor_bits (init, buffer, bit_size)
5452      tree init;
5453      char *buffer;
5454      int bit_size;
5455 {
5456   int i;
5457   tree vals;
5458   HOST_WIDE_INT domain_min
5459     = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
5460   tree non_const_bits = NULL_TREE;
5461   for (i = 0; i < bit_size; i++)
5462     buffer[i] = 0;
5463
5464   for (vals = TREE_OPERAND (init, 1); 
5465        vals != NULL_TREE; vals = TREE_CHAIN (vals))
5466     {
5467       if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
5468           || (TREE_PURPOSE (vals) != NULL_TREE
5469               && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
5470         non_const_bits
5471           = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
5472       else if (TREE_PURPOSE (vals) != NULL_TREE)
5473         {
5474           /* Set a range of bits to ones.  */
5475           HOST_WIDE_INT lo_index
5476             = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
5477           HOST_WIDE_INT hi_index
5478             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5479
5480           if (lo_index < 0 || lo_index >= bit_size
5481             || hi_index < 0 || hi_index >= bit_size)
5482             abort ();
5483           for ( ; lo_index <= hi_index; lo_index++)
5484             buffer[lo_index] = 1;
5485         }
5486       else
5487         {
5488           /* Set a single bit to one.  */
5489           HOST_WIDE_INT index
5490             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5491           if (index < 0 || index >= bit_size)
5492             {
5493               error ("invalid initializer for bit string");
5494               return NULL_TREE;
5495             }
5496           buffer[index] = 1;
5497         }
5498     }
5499   return non_const_bits;
5500 }
5501
5502 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5503    The result is placed in BUFFER (which is an array of bytes).
5504    If the constructor is constant, NULL_TREE is returned.
5505    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5506
5507 tree
5508 get_set_constructor_bytes (init, buffer, wd_size)
5509      tree init;
5510      unsigned char *buffer;
5511      int wd_size;
5512 {
5513   int i;
5514   int set_word_size = BITS_PER_UNIT;
5515   int bit_size = wd_size * set_word_size;
5516   int bit_pos = 0;
5517   unsigned char *bytep = buffer;
5518   char *bit_buffer = (char *) alloca(bit_size);
5519   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5520
5521   for (i = 0; i < wd_size; i++)
5522     buffer[i] = 0;
5523
5524   for (i = 0; i < bit_size; i++)
5525     {
5526       if (bit_buffer[i])
5527         {
5528           if (BYTES_BIG_ENDIAN)
5529             *bytep |= (1 << (set_word_size - 1 - bit_pos));
5530           else
5531             *bytep |= 1 << bit_pos;
5532         }
5533       bit_pos++;
5534       if (bit_pos >= set_word_size)
5535         bit_pos = 0, bytep++;
5536     }
5537   return non_const_bits;
5538 }
5539 \f
5540 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5541 /* Complain that the tree code of NODE does not match the expected CODE.
5542    FILE, LINE, and FUNCTION are of the caller.  */
5543 void
5544 tree_check_failed (node, code, file, line, function)
5545      const tree node;
5546      enum tree_code code;
5547      const char *file;
5548      int line;
5549      const char *function;
5550 {
5551   error ("Tree check: expected %s, have %s",
5552          tree_code_name[code], tree_code_name[TREE_CODE (node)]);
5553   fancy_abort (file, line, function);
5554 }
5555
5556 /* Similar to above, except that we check for a class of tree
5557    code, given in CL.  */
5558 void
5559 tree_class_check_failed (node, cl, file, line, function)
5560      const tree node;
5561      char cl;
5562      const char *file;
5563      int line;
5564      const char *function;
5565 {
5566   error ("Tree check: expected class '%c', have '%c' (%s)",
5567          cl, TREE_CODE_CLASS (TREE_CODE (node)),
5568          tree_code_name[TREE_CODE (node)]);
5569   fancy_abort (file, line, function);
5570 }
5571
5572 #endif /* ENABLE_TREE_CHECKING */
5573
5574 /* Return the alias set for T, which may be either a type or an
5575    expression.  */
5576
5577 int
5578 get_alias_set (t)
5579      tree t;
5580 {
5581   if (! flag_strict_aliasing || lang_get_alias_set == 0)
5582     /* If we're not doing any lanaguage-specific alias analysis, just
5583        assume everything aliases everything else.  */
5584     return 0;
5585   else
5586     return (*lang_get_alias_set) (t);
5587 }
5588
5589 /* Return a brand-new alias set.  */
5590
5591 int
5592 new_alias_set ()
5593 {
5594   static int last_alias_set;
5595
5596   if (flag_strict_aliasing)
5597     return ++last_alias_set;
5598   else
5599     return 0;
5600 }
5601 \f
5602 #ifndef CHAR_TYPE_SIZE
5603 #define CHAR_TYPE_SIZE BITS_PER_UNIT
5604 #endif
5605
5606 #ifndef SHORT_TYPE_SIZE
5607 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
5608 #endif
5609
5610 #ifndef INT_TYPE_SIZE
5611 #define INT_TYPE_SIZE BITS_PER_WORD
5612 #endif
5613
5614 #ifndef LONG_TYPE_SIZE
5615 #define LONG_TYPE_SIZE BITS_PER_WORD
5616 #endif
5617
5618 #ifndef LONG_LONG_TYPE_SIZE
5619 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
5620 #endif
5621
5622 #ifndef FLOAT_TYPE_SIZE
5623 #define FLOAT_TYPE_SIZE BITS_PER_WORD
5624 #endif
5625
5626 #ifndef DOUBLE_TYPE_SIZE
5627 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5628 #endif
5629
5630 #ifndef LONG_DOUBLE_TYPE_SIZE
5631 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5632 #endif
5633
5634 /* Create nodes for all integer types (and error_mark_node) using the sizes
5635    of C datatypes.  The caller should call set_sizetype soon after calling
5636    this function to select one of the types as sizetype.  */
5637    
5638 void
5639 build_common_tree_nodes (signed_char)
5640      int signed_char;
5641 {
5642   error_mark_node = make_node (ERROR_MARK);
5643   TREE_TYPE (error_mark_node) = error_mark_node;
5644
5645   initialize_sizetypes ();
5646
5647   /* Define both `signed char' and `unsigned char'.  */
5648   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5649   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5650
5651   /* Define `char', which is like either `signed char' or `unsigned char'
5652      but not the same as either.  */
5653   char_type_node
5654     = (signed_char
5655        ? make_signed_type (CHAR_TYPE_SIZE)
5656        : make_unsigned_type (CHAR_TYPE_SIZE));
5657
5658   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5659   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5660   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5661   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5662   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5663   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5664   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5665   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5666
5667   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5668   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5669   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5670   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5671   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5672
5673   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5674   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5675   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5676   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5677   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5678 }
5679
5680 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5681    It will create several other common tree nodes.  */
5682
5683 void
5684 build_common_tree_nodes_2 (short_double)
5685      int short_double;
5686 {
5687   /* Define these next since types below may used them.  */
5688   integer_zero_node = build_int_2 (0, 0);
5689   TREE_TYPE (integer_zero_node) = integer_type_node;
5690   integer_one_node = build_int_2 (1, 0);
5691   TREE_TYPE (integer_one_node) = integer_type_node;
5692
5693   size_zero_node = build_int_2 (0, 0);
5694   TREE_TYPE (size_zero_node) = sizetype;
5695   size_one_node = build_int_2 (1, 0);
5696   TREE_TYPE (size_one_node) = sizetype;
5697
5698   void_type_node = make_node (VOID_TYPE);
5699   layout_type (void_type_node);
5700
5701   /* We are not going to have real types in C with less than byte alignment,
5702      so we might as well not have any types that claim to have it.  */
5703   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5704
5705   null_pointer_node = build_int_2 (0, 0);
5706   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5707   layout_type (TREE_TYPE (null_pointer_node));
5708
5709   ptr_type_node = build_pointer_type (void_type_node);
5710   const_ptr_type_node
5711     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5712
5713   float_type_node = make_node (REAL_TYPE);
5714   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5715   layout_type (float_type_node);
5716
5717   double_type_node = make_node (REAL_TYPE);
5718   if (short_double)
5719     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5720   else
5721     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5722   layout_type (double_type_node);
5723
5724   long_double_type_node = make_node (REAL_TYPE);
5725   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5726   layout_type (long_double_type_node);
5727
5728   complex_integer_type_node = make_node (COMPLEX_TYPE);
5729   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5730   layout_type (complex_integer_type_node);
5731
5732   complex_float_type_node = make_node (COMPLEX_TYPE);
5733   TREE_TYPE (complex_float_type_node) = float_type_node;
5734   layout_type (complex_float_type_node);
5735
5736   complex_double_type_node = make_node (COMPLEX_TYPE);
5737   TREE_TYPE (complex_double_type_node) = double_type_node;
5738   layout_type (complex_double_type_node);
5739
5740   complex_long_double_type_node = make_node (COMPLEX_TYPE);
5741   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5742   layout_type (complex_long_double_type_node);
5743
5744 #ifdef BUILD_VA_LIST_TYPE
5745   BUILD_VA_LIST_TYPE(va_list_type_node);
5746 #else
5747   va_list_type_node = ptr_type_node;
5748 #endif
5749 }