OSDN Git Service

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