OSDN Git Service

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