OSDN Git Service

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