OSDN Git Service

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