OSDN Git Service

* alias.c: Minor reformatting.
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 88, 92-98, 1999 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 PROTO ((struct obstack *h, PTR obj));
50
51 static void unsave_expr_now_r PROTO ((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) PROTO((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 PROTO((PTR));
275 static void set_type_quals PROTO((tree, int));
276 static void append_random_chars PROTO((char *));
277 static void mark_type_hash PROTO ((void *));
278 static void fix_sizetype PROTO ((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) PROTO((tree *));
286 void (*lang_unsave_expr_now) PROTO((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 *(*) PROTO ((long))) OBSTACK_CHUNK_ALLOC,
352                   (void (*) PROTO ((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) PROTO((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, i;
1424 {
1425   REAL_VALUE_TYPE d;
1426
1427 #ifdef REAL_ARITHMETIC
1428   if (! TREE_UNSIGNED (TREE_TYPE (i)))
1429     REAL_VALUE_FROM_INT (d, TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1430                          TYPE_MODE (type));
1431   else
1432     REAL_VALUE_FROM_UNSIGNED_INT (d, TREE_INT_CST_LOW (i),
1433                                   TREE_INT_CST_HIGH (i), TYPE_MODE (type));
1434 #else /* not REAL_ARITHMETIC */
1435   /* Some 386 compilers mishandle unsigned int to float conversions,
1436      so introduce a temporary variable E to avoid those bugs.  */
1437   if (TREE_INT_CST_HIGH (i) < 0 && ! TREE_UNSIGNED (TREE_TYPE (i)))
1438     {
1439       REAL_VALUE_TYPE e;
1440
1441       d = (double) (~ TREE_INT_CST_HIGH (i));
1442       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1443             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1444       d *= e;
1445       e = (double) (unsigned HOST_WIDE_INT) (~ TREE_INT_CST_LOW (i));
1446       d += e;
1447       d = (- d - 1.0);
1448     }
1449   else
1450     {
1451       REAL_VALUE_TYPE e;
1452
1453       d = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (i);
1454       e = ((double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2))
1455             * (double) ((HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT / 2)));
1456       d *= e;
1457       e = (double) (unsigned HOST_WIDE_INT) TREE_INT_CST_LOW (i);
1458       d += e;
1459     }
1460 #endif /* not REAL_ARITHMETIC */
1461   return d;
1462 }
1463
1464 /* Args to pass to and from build_real_from_int_cst_1.  */
1465
1466 struct brfic_args
1467 {
1468   tree type;                    /* Input: type to conver to. */
1469   tree i;                       /* Input: operand to convert */
1470   REAL_VALUE_TYPE d;            /* Output: floating point value. */
1471 };
1472
1473 /* Convert an integer to a floating point value while protected by a floating
1474    point exception handler.  */
1475
1476 static void
1477 build_real_from_int_cst_1 (data)
1478   PTR data;
1479 {
1480   struct brfic_args *args = (struct brfic_args *) data;
1481   
1482 #ifdef REAL_ARITHMETIC
1483   args->d = real_value_from_int_cst (args->type, args->i);
1484 #else
1485   args->d
1486     = REAL_VALUE_TRUNCATE (TYPE_MODE (args->type),
1487                            real_value_from_int_cst (args->type, args->i));
1488 #endif
1489 }
1490
1491 /* Given a tree representing an integer constant I, return a tree
1492    representing the same value as a floating-point constant of type TYPE.
1493    We cannot perform this operation if there is no way of doing arithmetic
1494    on floating-point values.  */
1495
1496 tree
1497 build_real_from_int_cst (type, i)
1498      tree type;
1499      tree i;
1500 {
1501   tree v;
1502   int overflow = TREE_OVERFLOW (i);
1503   REAL_VALUE_TYPE d;
1504   struct brfic_args args;
1505
1506   v = make_node (REAL_CST);
1507   TREE_TYPE (v) = type;
1508
1509   /* Setup input for build_real_from_int_cst_1() */
1510   args.type = type;
1511   args.i = i;
1512
1513   if (do_float_handler (build_real_from_int_cst_1, (PTR) &args))
1514     /* Receive output from build_real_from_int_cst_1() */
1515     d = args.d;
1516   else
1517     {
1518       /* We got an exception from build_real_from_int_cst_1() */
1519       d = dconst0;
1520       overflow = 1;
1521     }
1522   
1523   /* Check for valid float value for this type on this target machine.  */
1524
1525 #ifdef CHECK_FLOAT_VALUE
1526   CHECK_FLOAT_VALUE (TYPE_MODE (type), d, overflow);
1527 #endif
1528
1529   TREE_REAL_CST (v) = d;
1530   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
1531   return v;
1532 }
1533
1534 #endif /* not REAL_IS_NOT_DOUBLE, or REAL_ARITHMETIC */
1535
1536 /* Return a newly constructed STRING_CST node whose value is
1537    the LEN characters at STR.
1538    The TREE_TYPE is not initialized.  */
1539
1540 tree
1541 build_string (len, str)
1542      int len;
1543      const char *str;
1544 {
1545   /* Put the string in saveable_obstack since it will be placed in the RTL
1546      for an "asm" statement and will also be kept around a while if
1547      deferring constant output in varasm.c.  */
1548
1549   register tree s = make_node (STRING_CST);
1550
1551   TREE_STRING_LENGTH (s) = len;
1552   if (ggc_p)
1553     TREE_STRING_POINTER (s) = ggc_alloc_string (str, len);
1554   else
1555     TREE_STRING_POINTER (s) = obstack_copy0 (saveable_obstack, str, len);
1556
1557   return s;
1558 }
1559
1560 /* Return a newly constructed COMPLEX_CST node whose value is
1561    specified by the real and imaginary parts REAL and IMAG.
1562    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
1563    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
1564
1565 tree
1566 build_complex (type, real, imag)
1567      tree type;
1568      tree real, imag;
1569 {
1570   register tree t = make_node (COMPLEX_CST);
1571
1572   TREE_REALPART (t) = real;
1573   TREE_IMAGPART (t) = imag;
1574   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1575   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1576   TREE_CONSTANT_OVERFLOW (t)
1577     = TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
1578   return t;
1579 }
1580
1581 /* Build a newly constructed TREE_VEC node of length LEN.  */
1582
1583 tree
1584 make_tree_vec (len)
1585      int len;
1586 {
1587   register tree t;
1588   register int length = (len-1) * sizeof (tree) + sizeof (struct tree_vec);
1589   register struct obstack *obstack = current_obstack;
1590
1591 #ifdef GATHER_STATISTICS
1592   tree_node_counts[(int)vec_kind]++;
1593   tree_node_sizes[(int)vec_kind] += length;
1594 #endif
1595
1596   if (ggc_p)
1597     t = ggc_alloc_tree (length);
1598   else
1599     {
1600       t = (tree) obstack_alloc (obstack, length);
1601       bzero ((PTR) t, length);
1602     }
1603
1604   TREE_SET_CODE (t, TREE_VEC);
1605   TREE_VEC_LENGTH (t) = len;
1606   if (obstack == &permanent_obstack)
1607     TREE_PERMANENT (t) = 1;
1608
1609   return t;
1610 }
1611 \f
1612 /* Return 1 if EXPR is the integer constant zero or a complex constant
1613    of zero.  */
1614
1615 int
1616 integer_zerop (expr)
1617      tree expr;
1618 {
1619   STRIP_NOPS (expr);
1620
1621   return ((TREE_CODE (expr) == INTEGER_CST
1622            && ! TREE_CONSTANT_OVERFLOW (expr)
1623            && TREE_INT_CST_LOW (expr) == 0
1624            && TREE_INT_CST_HIGH (expr) == 0)
1625           || (TREE_CODE (expr) == COMPLEX_CST
1626               && integer_zerop (TREE_REALPART (expr))
1627               && integer_zerop (TREE_IMAGPART (expr))));
1628 }
1629
1630 /* Return 1 if EXPR is the integer constant one or the corresponding
1631    complex constant.  */
1632
1633 int
1634 integer_onep (expr)
1635      tree expr;
1636 {
1637   STRIP_NOPS (expr);
1638
1639   return ((TREE_CODE (expr) == INTEGER_CST
1640            && ! TREE_CONSTANT_OVERFLOW (expr)
1641            && TREE_INT_CST_LOW (expr) == 1
1642            && TREE_INT_CST_HIGH (expr) == 0)
1643           || (TREE_CODE (expr) == COMPLEX_CST
1644               && integer_onep (TREE_REALPART (expr))
1645               && integer_zerop (TREE_IMAGPART (expr))));
1646 }
1647
1648 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1649    it contains.  Likewise for the corresponding complex constant.  */
1650
1651 int
1652 integer_all_onesp (expr)
1653      tree expr;
1654 {
1655   register int prec;
1656   register int uns;
1657
1658   STRIP_NOPS (expr);
1659
1660   if (TREE_CODE (expr) == COMPLEX_CST
1661       && integer_all_onesp (TREE_REALPART (expr))
1662       && integer_zerop (TREE_IMAGPART (expr)))
1663     return 1;
1664
1665   else if (TREE_CODE (expr) != INTEGER_CST
1666            || TREE_CONSTANT_OVERFLOW (expr))
1667     return 0;
1668
1669   uns = TREE_UNSIGNED (TREE_TYPE (expr));
1670   if (!uns)
1671     return TREE_INT_CST_LOW (expr) == -1 && TREE_INT_CST_HIGH (expr) == -1;
1672
1673   /* Note that using TYPE_PRECISION here is wrong.  We care about the
1674      actual bits, not the (arbitrary) range of the type.  */
1675   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (expr)));
1676   if (prec >= HOST_BITS_PER_WIDE_INT)
1677     {
1678       int high_value, shift_amount;
1679
1680       shift_amount = prec - HOST_BITS_PER_WIDE_INT;
1681
1682       if (shift_amount > HOST_BITS_PER_WIDE_INT)
1683         /* Can not handle precisions greater than twice the host int size.  */
1684         abort ();
1685       else if (shift_amount == HOST_BITS_PER_WIDE_INT)
1686         /* Shifting by the host word size is undefined according to the ANSI
1687            standard, so we must handle this as a special case.  */
1688         high_value = -1;
1689       else
1690         high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
1691
1692       return TREE_INT_CST_LOW (expr) == -1
1693         && TREE_INT_CST_HIGH (expr) == high_value;
1694     }
1695   else
1696     return TREE_INT_CST_LOW (expr) == ((HOST_WIDE_INT) 1 << prec) - 1;
1697 }
1698
1699 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
1700    one bit on).  */
1701
1702 int
1703 integer_pow2p (expr)
1704      tree expr;
1705 {
1706   int prec;
1707   HOST_WIDE_INT high, low;
1708
1709   STRIP_NOPS (expr);
1710
1711   if (TREE_CODE (expr) == COMPLEX_CST
1712       && integer_pow2p (TREE_REALPART (expr))
1713       && integer_zerop (TREE_IMAGPART (expr)))
1714     return 1;
1715
1716   if (TREE_CODE (expr) != INTEGER_CST || TREE_CONSTANT_OVERFLOW (expr))
1717     return 0;
1718
1719   prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1720           ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1721   high = TREE_INT_CST_HIGH (expr);
1722   low = TREE_INT_CST_LOW (expr);
1723
1724   /* First clear all bits that are beyond the type's precision in case
1725      we've been sign extended.  */
1726
1727   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1728     ;
1729   else if (prec > HOST_BITS_PER_WIDE_INT)
1730     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1731   else
1732     {
1733       high = 0;
1734       if (prec < HOST_BITS_PER_WIDE_INT)
1735         low &= ~((HOST_WIDE_INT) (-1) << prec);
1736     }
1737
1738   if (high == 0 && low == 0)
1739     return 0;
1740
1741   return ((high == 0 && (low & (low - 1)) == 0)
1742           || (low == 0 && (high & (high - 1)) == 0));
1743 }
1744
1745 /* Return the power of two represented by a tree node known to be a
1746    power of two.  */
1747
1748 int
1749 tree_log2 (expr)
1750      tree expr;
1751 {
1752   int prec;
1753   HOST_WIDE_INT high, low;
1754
1755   STRIP_NOPS (expr);
1756
1757   if (TREE_CODE (expr) == COMPLEX_CST)
1758     return tree_log2 (TREE_REALPART (expr));
1759
1760   prec = (POINTER_TYPE_P (TREE_TYPE (expr))
1761           ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr)));
1762
1763   high = TREE_INT_CST_HIGH (expr);
1764   low = TREE_INT_CST_LOW (expr);
1765
1766   /* First clear all bits that are beyond the type's precision in case
1767      we've been sign extended.  */
1768
1769   if (prec == 2 * HOST_BITS_PER_WIDE_INT)
1770     ;
1771   else if (prec > HOST_BITS_PER_WIDE_INT)
1772     high &= ~((HOST_WIDE_INT) (-1) << (prec - HOST_BITS_PER_WIDE_INT));
1773   else
1774     {
1775       high = 0;
1776       if (prec < HOST_BITS_PER_WIDE_INT)
1777         low &= ~((HOST_WIDE_INT) (-1) << prec);
1778     }
1779
1780   return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
1781           :  exact_log2 (low));
1782 }
1783
1784 /* Return 1 if EXPR is the real constant zero.  */
1785
1786 int
1787 real_zerop (expr)
1788      tree expr;
1789 {
1790   STRIP_NOPS (expr);
1791
1792   return ((TREE_CODE (expr) == REAL_CST
1793            && ! TREE_CONSTANT_OVERFLOW (expr)
1794            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0))
1795           || (TREE_CODE (expr) == COMPLEX_CST
1796               && real_zerop (TREE_REALPART (expr))
1797               && real_zerop (TREE_IMAGPART (expr))));
1798 }
1799
1800 /* Return 1 if EXPR is the real constant one in real or complex form.  */
1801
1802 int
1803 real_onep (expr)
1804      tree expr;
1805 {
1806   STRIP_NOPS (expr);
1807
1808   return ((TREE_CODE (expr) == REAL_CST
1809            && ! TREE_CONSTANT_OVERFLOW (expr)
1810            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1))
1811           || (TREE_CODE (expr) == COMPLEX_CST
1812               && real_onep (TREE_REALPART (expr))
1813               && real_zerop (TREE_IMAGPART (expr))));
1814 }
1815
1816 /* Return 1 if EXPR is the real constant two.  */
1817
1818 int
1819 real_twop (expr)
1820      tree expr;
1821 {
1822   STRIP_NOPS (expr);
1823
1824   return ((TREE_CODE (expr) == REAL_CST
1825            && ! TREE_CONSTANT_OVERFLOW (expr)
1826            && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst2))
1827           || (TREE_CODE (expr) == COMPLEX_CST
1828               && real_twop (TREE_REALPART (expr))
1829               && real_zerop (TREE_IMAGPART (expr))));
1830 }
1831
1832 /* Nonzero if EXP is a constant or a cast of a constant.  */
1833  
1834 int
1835 really_constant_p (exp)
1836      tree exp;
1837 {
1838   /* This is not quite the same as STRIP_NOPS.  It does more.  */
1839   while (TREE_CODE (exp) == NOP_EXPR
1840          || TREE_CODE (exp) == CONVERT_EXPR
1841          || TREE_CODE (exp) == NON_LVALUE_EXPR)
1842     exp = TREE_OPERAND (exp, 0);
1843   return TREE_CONSTANT (exp);
1844 }
1845 \f
1846 /* Return first list element whose TREE_VALUE is ELEM.
1847    Return 0 if ELEM is not in LIST.  */
1848
1849 tree
1850 value_member (elem, list)
1851      tree elem, list;
1852 {
1853   while (list)
1854     {
1855       if (elem == TREE_VALUE (list))
1856         return list;
1857       list = TREE_CHAIN (list);
1858     }
1859   return NULL_TREE;
1860 }
1861
1862 /* Return first list element whose TREE_PURPOSE is ELEM.
1863    Return 0 if ELEM is not in LIST.  */
1864
1865 tree
1866 purpose_member (elem, list)
1867      tree elem, list;
1868 {
1869   while (list)
1870     {
1871       if (elem == TREE_PURPOSE (list))
1872         return list;
1873       list = TREE_CHAIN (list);
1874     }
1875   return NULL_TREE;
1876 }
1877
1878 /* Return first list element whose BINFO_TYPE is ELEM.
1879    Return 0 if ELEM is not in LIST.  */
1880
1881 tree
1882 binfo_member (elem, list)
1883      tree elem, list;
1884 {
1885   while (list)
1886     {
1887       if (elem == BINFO_TYPE (list))
1888         return list;
1889       list = TREE_CHAIN (list);
1890     }
1891   return NULL_TREE;
1892 }
1893
1894 /* Return nonzero if ELEM is part of the chain CHAIN.  */
1895
1896 int
1897 chain_member (elem, chain)
1898      tree elem, chain;
1899 {
1900   while (chain)
1901     {
1902       if (elem == chain)
1903         return 1;
1904       chain = TREE_CHAIN (chain);
1905     }
1906
1907   return 0;
1908 }
1909
1910 /* Return nonzero if ELEM is equal to TREE_VALUE (CHAIN) for any piece of
1911    chain CHAIN.  This and the next function are currently unused, but
1912    are retained for completeness.  */
1913
1914 int
1915 chain_member_value (elem, chain)
1916      tree elem, chain;
1917 {
1918   while (chain)
1919     {
1920       if (elem == TREE_VALUE (chain))
1921         return 1;
1922       chain = TREE_CHAIN (chain);
1923     }
1924
1925   return 0;
1926 }
1927
1928 /* Return nonzero if ELEM is equal to TREE_PURPOSE (CHAIN)
1929    for any piece of chain CHAIN.  */
1930
1931 int
1932 chain_member_purpose (elem, chain)
1933      tree elem, chain;
1934 {
1935   while (chain)
1936     {
1937       if (elem == TREE_PURPOSE (chain))
1938         return 1;
1939       chain = TREE_CHAIN (chain);
1940     }
1941
1942   return 0;
1943 }
1944
1945 /* Return the length of a chain of nodes chained through TREE_CHAIN.
1946    We expect a null pointer to mark the end of the chain.
1947    This is the Lisp primitive `length'.  */
1948
1949 int
1950 list_length (t)
1951      tree t;
1952 {
1953   register tree tail;
1954   register int len = 0;
1955
1956   for (tail = t; tail; tail = TREE_CHAIN (tail))
1957     len++;
1958
1959   return len;
1960 }
1961
1962 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
1963    by modifying the last node in chain 1 to point to chain 2.
1964    This is the Lisp primitive `nconc'.  */
1965
1966 tree
1967 chainon (op1, op2)
1968      tree op1, op2;
1969 {
1970
1971   if (op1)
1972     {
1973       register tree t1;
1974 #ifdef ENABLE_CHECKING
1975       register tree t2;
1976 #endif
1977
1978       for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
1979         ;
1980       TREE_CHAIN (t1) = op2;
1981 #ifdef ENABLE_CHECKING
1982       for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
1983         if (t2 == t1)
1984           abort ();  /* Circularity created.  */
1985 #endif
1986       return op1;
1987     }
1988   else return op2;
1989 }
1990
1991 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
1992
1993 tree
1994 tree_last (chain)
1995      register tree chain;
1996 {
1997   register tree next;
1998   if (chain)
1999     while ((next = TREE_CHAIN (chain)))
2000       chain = next;
2001   return chain;
2002 }
2003
2004 /* Reverse the order of elements in the chain T,
2005    and return the new head of the chain (old last element).  */
2006
2007 tree
2008 nreverse (t)
2009      tree t;
2010 {
2011   register tree prev = 0, decl, next;
2012   for (decl = t; decl; decl = next)
2013     {
2014       next = TREE_CHAIN (decl);
2015       TREE_CHAIN (decl) = prev;
2016       prev = decl;
2017     }
2018   return prev;
2019 }
2020
2021 /* Given a chain CHAIN of tree nodes,
2022    construct and return a list of those nodes.  */
2023
2024 tree
2025 listify (chain)
2026      tree chain;
2027 {
2028   tree result = NULL_TREE;
2029   tree in_tail = chain;
2030   tree out_tail = NULL_TREE;
2031
2032   while (in_tail)
2033     {
2034       tree next = tree_cons (NULL_TREE, in_tail, NULL_TREE);
2035       if (out_tail)
2036         TREE_CHAIN (out_tail) = next;
2037       else
2038         result = next;
2039       out_tail = next;
2040       in_tail = TREE_CHAIN (in_tail);
2041     }
2042
2043   return result;
2044 }
2045 \f
2046 /* Return a newly created TREE_LIST node whose
2047    purpose and value fields are PARM and VALUE.  */
2048
2049 tree
2050 build_tree_list (parm, value)
2051      tree parm, value;
2052 {
2053   register tree t = make_node (TREE_LIST);
2054   TREE_PURPOSE (t) = parm;
2055   TREE_VALUE (t) = value;
2056   return t;
2057 }
2058
2059 /* Similar, but build on the temp_decl_obstack.  */
2060
2061 tree
2062 build_decl_list (parm, value)
2063      tree parm, value;
2064 {
2065   register tree node;
2066   register struct obstack *ambient_obstack = current_obstack;
2067
2068   current_obstack = &temp_decl_obstack;
2069   node = build_tree_list (parm, value);
2070   current_obstack = ambient_obstack;
2071   return node;
2072 }
2073
2074 /* Similar, but build on the expression_obstack.  */
2075
2076 tree
2077 build_expr_list (parm, value)
2078      tree parm, value;
2079 {
2080   register tree node;
2081   register struct obstack *ambient_obstack = current_obstack;
2082
2083   current_obstack = expression_obstack;
2084   node = build_tree_list (parm, value);
2085   current_obstack = ambient_obstack;
2086   return node;
2087 }
2088
2089 /* Return a newly created TREE_LIST node whose
2090    purpose and value fields are PARM and VALUE
2091    and whose TREE_CHAIN is CHAIN.  */
2092
2093 tree
2094 tree_cons (purpose, value, chain)
2095      tree purpose, value, chain;
2096 {
2097   register tree node;
2098
2099   if (ggc_p)
2100     node = ggc_alloc_tree (sizeof (struct tree_list));
2101   else
2102     {
2103       node = (tree) obstack_alloc (current_obstack, sizeof (struct tree_list));
2104       memset (node, 0, sizeof (struct tree_common));
2105     }
2106
2107 #ifdef GATHER_STATISTICS
2108   tree_node_counts[(int)x_kind]++;
2109   tree_node_sizes[(int)x_kind] += sizeof (struct tree_list);
2110 #endif
2111
2112
2113   TREE_SET_CODE (node, TREE_LIST);
2114   if (current_obstack == &permanent_obstack)
2115     TREE_PERMANENT (node) = 1;
2116
2117   TREE_CHAIN (node) = chain;
2118   TREE_PURPOSE (node) = purpose;
2119   TREE_VALUE (node) = value;
2120   return node;
2121 }
2122
2123 /* Similar, but build on the temp_decl_obstack.  */
2124
2125 tree
2126 decl_tree_cons (purpose, value, chain)
2127      tree purpose, value, chain;
2128 {
2129   register tree node;
2130   register struct obstack *ambient_obstack = current_obstack;
2131
2132   current_obstack = &temp_decl_obstack;
2133   node = tree_cons (purpose, value, chain);
2134   current_obstack = ambient_obstack;
2135   return node;
2136 }
2137
2138 /* Similar, but build on the expression_obstack.  */
2139
2140 tree
2141 expr_tree_cons (purpose, value, chain)
2142      tree purpose, value, chain;
2143 {
2144   register tree node;
2145   register struct obstack *ambient_obstack = current_obstack;
2146
2147   current_obstack = expression_obstack;
2148   node = tree_cons (purpose, value, chain);
2149   current_obstack = ambient_obstack;
2150   return node;
2151 }
2152
2153 /* Same as `tree_cons' but make a permanent object.  */
2154
2155 tree
2156 perm_tree_cons (purpose, value, chain)
2157      tree purpose, value, chain;
2158 {
2159   register tree node;
2160   register struct obstack *ambient_obstack = current_obstack;
2161
2162   current_obstack = &permanent_obstack;
2163   node = tree_cons (purpose, value, chain);
2164   current_obstack = ambient_obstack;
2165   return node;
2166 }
2167
2168 /* Same as `tree_cons', but make this node temporary, regardless.  */
2169
2170 tree
2171 temp_tree_cons (purpose, value, chain)
2172      tree purpose, value, chain;
2173 {
2174   register tree node;
2175   register struct obstack *ambient_obstack = current_obstack;
2176
2177   current_obstack = &temporary_obstack;
2178   node = tree_cons (purpose, value, chain);
2179   current_obstack = ambient_obstack;
2180   return node;
2181 }
2182
2183 /* Same as `tree_cons', but save this node if the function's RTL is saved.  */
2184
2185 tree
2186 saveable_tree_cons (purpose, value, chain)
2187      tree purpose, value, chain;
2188 {
2189   register tree node;
2190   register struct obstack *ambient_obstack = current_obstack;
2191
2192   current_obstack = saveable_obstack;
2193   node = tree_cons (purpose, value, chain);
2194   current_obstack = ambient_obstack;
2195   return node;
2196 }
2197 \f
2198 /* Return the size nominally occupied by an object of type TYPE
2199    when it resides in memory.  The value is measured in units of bytes,
2200    and its data type is that normally used for type sizes
2201    (which is the first type created by make_signed_type or
2202    make_unsigned_type).  */
2203
2204 tree
2205 size_in_bytes (type)
2206      tree type;
2207 {
2208   tree t;
2209
2210   if (type == error_mark_node)
2211     return integer_zero_node;
2212
2213   type = TYPE_MAIN_VARIANT (type);
2214   t = TYPE_SIZE_UNIT (type);
2215
2216   if (t == 0)
2217     {
2218       incomplete_type_error (NULL_TREE, type);
2219       return integer_zero_node;
2220     }
2221
2222   if (TREE_CODE (t) == INTEGER_CST)
2223     force_fit_type (t, 0);
2224
2225   return t;
2226 }
2227
2228 /* Return the size of TYPE (in bytes) as a wide integer
2229    or return -1 if the size can vary or is larger than an integer.  */
2230
2231 HOST_WIDE_INT
2232 int_size_in_bytes (type)
2233      tree type;
2234 {
2235   tree t;
2236
2237   if (type == error_mark_node)
2238     return 0;
2239
2240   type = TYPE_MAIN_VARIANT (type);
2241   t = TYPE_SIZE_UNIT (type);
2242   if (t == 0
2243       || TREE_CODE (t) != INTEGER_CST
2244       || TREE_OVERFLOW (t)
2245       || TREE_INT_CST_HIGH (t) != 0)
2246     return -1;
2247
2248   return TREE_INT_CST_LOW (t);
2249 }
2250 \f
2251 /* Return, as a tree node, the number of elements for TYPE (which is an
2252    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
2253
2254 tree
2255 array_type_nelts (type)
2256      tree type;
2257 {
2258   tree index_type, min, max;
2259
2260   /* If they did it with unspecified bounds, then we should have already
2261      given an error about it before we got here.  */
2262   if (! TYPE_DOMAIN (type))
2263     return error_mark_node;
2264
2265   index_type = TYPE_DOMAIN (type);
2266   min = TYPE_MIN_VALUE (index_type);
2267   max = TYPE_MAX_VALUE (index_type);
2268
2269   return (integer_zerop (min)
2270           ? max
2271           : fold (build (MINUS_EXPR, TREE_TYPE (max), max, min)));
2272 }
2273 \f
2274 /* Return nonzero if arg is static -- a reference to an object in
2275    static storage.  This is not the same as the C meaning of `static'.  */
2276
2277 int
2278 staticp (arg)
2279      tree arg;
2280 {
2281   switch (TREE_CODE (arg))
2282     {
2283     case FUNCTION_DECL:
2284       /* Nested functions aren't static, since taking their address
2285          involves a trampoline.  */
2286        return (decl_function_context (arg) == 0 || DECL_NO_STATIC_CHAIN (arg))
2287               && ! DECL_NON_ADDR_CONST_P (arg);
2288
2289     case VAR_DECL:
2290       return (TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2291              && ! DECL_NON_ADDR_CONST_P (arg);
2292
2293     case CONSTRUCTOR:
2294       return TREE_STATIC (arg);
2295
2296     case STRING_CST:
2297       return 1;
2298
2299       /* If we are referencing a bitfield, we can't evaluate an
2300          ADDR_EXPR at compile time and so it isn't a constant.  */
2301     case COMPONENT_REF:
2302       return (! DECL_BIT_FIELD (TREE_OPERAND (arg, 1))
2303               && staticp (TREE_OPERAND (arg, 0)));
2304
2305     case BIT_FIELD_REF:
2306       return 0;
2307
2308 #if 0
2309        /* This case is technically correct, but results in setting
2310           TREE_CONSTANT on ADDR_EXPRs that cannot be evaluated at
2311           compile time.  */
2312     case INDIRECT_REF:
2313       return TREE_CONSTANT (TREE_OPERAND (arg, 0));
2314 #endif
2315
2316     case ARRAY_REF:
2317       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2318           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2319         return staticp (TREE_OPERAND (arg, 0));
2320
2321     default:
2322       return 0;
2323     }
2324 }
2325 \f
2326 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
2327    Do this to any expression which may be used in more than one place,
2328    but must be evaluated only once.
2329
2330    Normally, expand_expr would reevaluate the expression each time.
2331    Calling save_expr produces something that is evaluated and recorded
2332    the first time expand_expr is called on it.  Subsequent calls to
2333    expand_expr just reuse the recorded value.
2334
2335    The call to expand_expr that generates code that actually computes
2336    the value is the first call *at compile time*.  Subsequent calls
2337    *at compile time* generate code to use the saved value.
2338    This produces correct result provided that *at run time* control
2339    always flows through the insns made by the first expand_expr
2340    before reaching the other places where the save_expr was evaluated.
2341    You, the caller of save_expr, must make sure this is so.
2342
2343    Constants, and certain read-only nodes, are returned with no
2344    SAVE_EXPR because that is safe.  Expressions containing placeholders
2345    are not touched; see tree.def for an explanation of what these
2346    are used for.  */
2347
2348 tree
2349 save_expr (expr)
2350      tree expr;
2351 {
2352   register tree t = fold (expr);
2353
2354   /* We don't care about whether this can be used as an lvalue in this
2355      context.  */
2356   while (TREE_CODE (t) == NON_LVALUE_EXPR)
2357     t = TREE_OPERAND (t, 0);
2358
2359   /* If the tree evaluates to a constant, then we don't want to hide that
2360      fact (i.e. this allows further folding, and direct checks for constants).
2361      However, a read-only object that has side effects cannot be bypassed.
2362      Since it is no problem to reevaluate literals, we just return the 
2363      literal node.  */
2364
2365   if (TREE_CONSTANT (t) || (TREE_READONLY (t) && ! TREE_SIDE_EFFECTS (t))
2366       || TREE_CODE (t) == SAVE_EXPR || TREE_CODE (t) == ERROR_MARK)
2367     return t;
2368
2369   /* If T contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
2370      it means that the size or offset of some field of an object depends on
2371      the value within another field.
2372
2373      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
2374      and some variable since it would then need to be both evaluated once and
2375      evaluated more than once.  Front-ends must assure this case cannot
2376      happen by surrounding any such subexpressions in their own SAVE_EXPR
2377      and forcing evaluation at the proper time.  */
2378   if (contains_placeholder_p (t))
2379     return t;
2380
2381   t = build (SAVE_EXPR, TREE_TYPE (expr), t, current_function_decl, NULL_TREE);
2382
2383   /* This expression might be placed ahead of a jump to ensure that the
2384      value was computed on both sides of the jump.  So make sure it isn't
2385      eliminated as dead.  */
2386   TREE_SIDE_EFFECTS (t) = 1;
2387   return t;
2388 }
2389
2390 /* Arrange for an expression to be expanded multiple independent
2391    times.  This is useful for cleanup actions, as the backend can
2392    expand them multiple times in different places.  */
2393
2394 tree
2395 unsave_expr (expr)
2396      tree expr;
2397 {
2398   tree t;
2399
2400   /* If this is already protected, no sense in protecting it again.  */
2401   if (TREE_CODE (expr) == UNSAVE_EXPR)
2402     return expr;
2403
2404   t = build1 (UNSAVE_EXPR, TREE_TYPE (expr), expr);
2405   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (expr);
2406   return t;
2407 }
2408
2409 /* Returns the index of the first non-tree operand for CODE, or the number
2410    of operands if all are trees.  */
2411
2412 int
2413 first_rtl_op (code)
2414      enum tree_code code;
2415 {
2416   switch (code)
2417     {
2418     case SAVE_EXPR:
2419       return 2;
2420     case GOTO_SUBROUTINE_EXPR:
2421     case RTL_EXPR:
2422       return 0;
2423     case CALL_EXPR:
2424       return 2;
2425     case WITH_CLEANUP_EXPR:
2426       /* Should be defined to be 2.  */
2427       return 1;
2428     case METHOD_CALL_EXPR:
2429       return 3;
2430     default:
2431       return tree_code_length [(int) code];
2432     }
2433 }
2434
2435 /* Perform any modifications to EXPR required when it is unsaved.  Does
2436    not recurse into EXPR's subtrees.  */
2437
2438 void
2439 unsave_expr_1 (expr)
2440      tree expr;
2441 {
2442   switch (TREE_CODE (expr))
2443     {
2444     case SAVE_EXPR:
2445       if (! SAVE_EXPR_PERSISTENT_P (expr))
2446         SAVE_EXPR_RTL (expr) = 0;
2447       break;
2448
2449     case TARGET_EXPR:
2450       TREE_OPERAND (expr, 1) = TREE_OPERAND (expr, 3);
2451       TREE_OPERAND (expr, 3) = NULL_TREE;
2452       break;
2453       
2454     case RTL_EXPR:
2455       /* I don't yet know how to emit a sequence multiple times.  */
2456       if (RTL_EXPR_SEQUENCE (expr) != 0)
2457         abort ();
2458       break;
2459
2460     case CALL_EXPR:
2461       CALL_EXPR_RTL (expr) = 0;
2462       break;
2463
2464     default:
2465       if (lang_unsave_expr_now != 0)
2466         (*lang_unsave_expr_now) (expr);
2467       break;
2468     }
2469 }
2470
2471 /* Helper function for unsave_expr_now.  */
2472
2473 static void
2474 unsave_expr_now_r (expr)
2475      tree expr;
2476 {
2477   enum tree_code code;
2478
2479   /* There's nothing to do for NULL_TREE.  */
2480   if (expr == 0)
2481     return;
2482
2483   unsave_expr_1 (expr);
2484
2485   code = TREE_CODE (expr);
2486   if (code == CALL_EXPR 
2487       && TREE_OPERAND (expr, 1)
2488       && TREE_CODE (TREE_OPERAND (expr, 1)) == TREE_LIST)
2489     {
2490       tree exp = TREE_OPERAND (expr, 1);
2491       while (exp)
2492         {
2493           unsave_expr_now_r (TREE_VALUE (exp));
2494           exp = TREE_CHAIN (exp);
2495         }
2496     }
2497  
2498   switch (TREE_CODE_CLASS (code))
2499     {
2500     case 'c':  /* a constant */
2501     case 't':  /* a type node */
2502     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
2503     case 'd':  /* A decl node */
2504     case 'b':  /* A block node */
2505       break;
2506
2507     case 'e':  /* an expression */
2508     case 'r':  /* a reference */
2509     case 's':  /* an expression with side effects */
2510     case '<':  /* a comparison expression */
2511     case '2':  /* a binary arithmetic expression */
2512     case '1':  /* a unary arithmetic expression */
2513       {
2514         int i;
2515         
2516         for (i = first_rtl_op (code) - 1; i >= 0; i--)
2517           unsave_expr_now_r (TREE_OPERAND (expr, i));
2518       }
2519       break;
2520
2521     default:
2522       abort ();
2523     }
2524 }
2525
2526 /* Modify a tree in place so that all the evaluate only once things
2527    are cleared out.  Return the EXPR given.  */
2528
2529 tree
2530 unsave_expr_now (expr)
2531      tree expr;
2532 {
2533   if (lang_unsave!= 0)
2534     (*lang_unsave) (&expr);
2535   else
2536     unsave_expr_now_r (expr);
2537
2538   return expr;
2539 }
2540 \f
2541 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
2542    or offset that depends on a field within a record.  */
2543
2544 int
2545 contains_placeholder_p (exp)
2546      tree exp;
2547 {
2548   register enum tree_code code = TREE_CODE (exp);
2549   int result;
2550
2551   /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
2552      in it since it is supplying a value for it.  */
2553   if (code == WITH_RECORD_EXPR)
2554     return 0;
2555   else if (code == PLACEHOLDER_EXPR)
2556     return 1;
2557
2558   switch (TREE_CODE_CLASS (code))
2559     {
2560     case 'r':
2561       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
2562          position computations since they will be converted into a
2563          WITH_RECORD_EXPR involving the reference, which will assume
2564          here will be valid.  */
2565       return contains_placeholder_p (TREE_OPERAND (exp, 0));
2566
2567     case 'x':
2568       if (code == TREE_LIST)
2569         return (contains_placeholder_p (TREE_VALUE (exp))
2570                 || (TREE_CHAIN (exp) != 0
2571                     && contains_placeholder_p (TREE_CHAIN (exp))));
2572       break;
2573                                         
2574     case '1':
2575     case '2':  case '<':
2576     case 'e':
2577       switch (code)
2578         {
2579         case COMPOUND_EXPR:
2580           /* Ignoring the first operand isn't quite right, but works best. */
2581           return contains_placeholder_p (TREE_OPERAND (exp, 1));
2582
2583         case RTL_EXPR:
2584         case CONSTRUCTOR:
2585           return 0;
2586
2587         case COND_EXPR:
2588           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2589                   || contains_placeholder_p (TREE_OPERAND (exp, 1))
2590                   || contains_placeholder_p (TREE_OPERAND (exp, 2)));
2591
2592         case SAVE_EXPR:
2593           /* If we already know this doesn't have a placeholder, don't
2594              check again.  */
2595           if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
2596             return 0;
2597
2598           SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
2599           result = contains_placeholder_p (TREE_OPERAND (exp, 0));
2600           if (result)
2601             SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
2602
2603           return result;
2604
2605         case CALL_EXPR:
2606           return (TREE_OPERAND (exp, 1) != 0
2607                   && contains_placeholder_p (TREE_OPERAND (exp, 1)));
2608
2609         default:
2610           break;
2611         }
2612
2613       switch (tree_code_length[(int) code])
2614         {
2615         case 1:
2616           return contains_placeholder_p (TREE_OPERAND (exp, 0));
2617         case 2:
2618           return (contains_placeholder_p (TREE_OPERAND (exp, 0))
2619                   || contains_placeholder_p (TREE_OPERAND (exp, 1)));
2620         default:
2621           return 0;
2622         }
2623
2624     default:
2625       return 0;
2626     }
2627   return 0;
2628 }
2629
2630 /* Return 1 if EXP contains any expressions that produce cleanups for an
2631    outer scope to deal with.  Used by fold.  */
2632
2633 int
2634 has_cleanups (exp)
2635      tree exp;
2636 {
2637   int i, nops, cmp;
2638
2639   if (! TREE_SIDE_EFFECTS (exp))
2640     return 0;
2641
2642   switch (TREE_CODE (exp))
2643     {
2644     case TARGET_EXPR:
2645     case GOTO_SUBROUTINE_EXPR:
2646     case WITH_CLEANUP_EXPR:
2647       return 1;
2648
2649     case CLEANUP_POINT_EXPR:
2650       return 0;
2651
2652     case CALL_EXPR:
2653       for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
2654         {
2655           cmp = has_cleanups (TREE_VALUE (exp));
2656           if (cmp)
2657             return cmp;
2658         }
2659       return 0;
2660
2661     default:
2662       break;
2663     }
2664
2665   /* This general rule works for most tree codes.  All exceptions should be
2666      handled above.  If this is a language-specific tree code, we can't
2667      trust what might be in the operand, so say we don't know
2668      the situation.  */
2669   if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
2670     return -1;
2671
2672   nops = first_rtl_op (TREE_CODE (exp));
2673   for (i = 0; i < nops; i++)
2674     if (TREE_OPERAND (exp, i) != 0)
2675       {
2676         int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
2677         if (type == 'e' || type == '<' || type == '1' || type == '2'
2678             || type == 'r' || type == 's')
2679           {
2680             cmp = has_cleanups (TREE_OPERAND (exp, i));
2681             if (cmp)
2682               return cmp;
2683           }
2684       }
2685
2686   return 0;
2687 }
2688 \f
2689 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
2690    return a tree with all occurrences of references to F in a
2691    PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
2692    contains only arithmetic expressions or a CALL_EXPR with a
2693    PLACEHOLDER_EXPR occurring only in its arglist.  */
2694
2695 tree
2696 substitute_in_expr (exp, f, r)
2697      tree exp;
2698      tree f;
2699      tree r;
2700 {
2701   enum tree_code code = TREE_CODE (exp);
2702   tree op0, op1, op2;
2703   tree new;
2704   tree inner;
2705
2706   switch (TREE_CODE_CLASS (code))
2707     {
2708     case 'c':
2709     case 'd':
2710       return exp;
2711
2712     case 'x':
2713       if (code == PLACEHOLDER_EXPR)
2714         return exp;
2715       else if (code == TREE_LIST)
2716         {
2717           op0 = (TREE_CHAIN (exp) == 0
2718                  ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
2719           op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
2720           if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
2721             return exp;
2722
2723           return tree_cons (TREE_PURPOSE (exp), op1, op0);
2724         }
2725
2726       abort ();
2727
2728     case '1':
2729     case '2':
2730     case '<':
2731     case 'e':
2732       switch (tree_code_length[(int) code])
2733         {
2734         case 1:
2735           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2736           if (op0 == TREE_OPERAND (exp, 0))
2737             return exp;
2738           
2739           new = fold (build1 (code, TREE_TYPE (exp), op0));
2740           break;
2741
2742         case 2:
2743           /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
2744              could, but we don't support it.  */
2745           if (code == RTL_EXPR)
2746             return exp;
2747           else if (code == CONSTRUCTOR)
2748             abort ();
2749
2750           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2751           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2752           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
2753             return exp;
2754
2755           new = fold (build (code, TREE_TYPE (exp), op0, op1));
2756           break;
2757
2758         case 3:
2759           /* It cannot be that anything inside a SAVE_EXPR contains a
2760              PLACEHOLDER_EXPR.  */
2761           if (code == SAVE_EXPR)
2762             return exp;
2763
2764           else if (code == CALL_EXPR)
2765             {
2766               op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2767               if (op1 == TREE_OPERAND (exp, 1))
2768                 return exp;
2769
2770               return build (code, TREE_TYPE (exp),
2771                             TREE_OPERAND (exp, 0), op1, NULL_TREE);
2772             }
2773
2774           else if (code != COND_EXPR)
2775             abort ();
2776
2777           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2778           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2779           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2780           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2781               && op2 == TREE_OPERAND (exp, 2))
2782             return exp;
2783
2784           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2785           break;
2786
2787         default:
2788           abort ();
2789         }
2790
2791       break;
2792
2793     case 'r':
2794       switch (code)
2795         {
2796         case COMPONENT_REF:
2797           /* If this expression is getting a value from a PLACEHOLDER_EXPR
2798              and it is the right field, replace it with R.  */
2799           for (inner = TREE_OPERAND (exp, 0);
2800                TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2801                inner = TREE_OPERAND (inner, 0))
2802             ;
2803           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2804               && TREE_OPERAND (exp, 1) == f)
2805             return r;
2806
2807           /* If this expression hasn't been completed let, leave it 
2808              alone.  */
2809           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2810               && TREE_TYPE (inner) == 0)
2811             return exp;
2812
2813           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2814           if (op0 == TREE_OPERAND (exp, 0))
2815             return exp;
2816
2817           new = fold (build (code, TREE_TYPE (exp), op0,
2818                              TREE_OPERAND (exp, 1)));
2819           break;
2820
2821         case BIT_FIELD_REF:
2822           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2823           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2824           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2825           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2826               && op2 == TREE_OPERAND (exp, 2))
2827             return exp;
2828
2829           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2830           break;
2831
2832         case INDIRECT_REF:
2833         case BUFFER_REF:
2834           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2835           if (op0 == TREE_OPERAND (exp, 0))
2836             return exp;
2837
2838           new = fold (build1 (code, TREE_TYPE (exp), op0));
2839           break;
2840
2841         default:
2842           abort ();
2843         }
2844       break;
2845       
2846     default:
2847       abort ();
2848     }
2849
2850   TREE_READONLY (new) = TREE_READONLY (exp);
2851   return new;
2852 }
2853 \f
2854 /* Stabilize a reference so that we can use it any number of times
2855    without causing its operands to be evaluated more than once.
2856    Returns the stabilized reference.  This works by means of save_expr,
2857    so see the caveats in the comments about save_expr.
2858
2859    Also allows conversion expressions whose operands are references.
2860    Any other kind of expression is returned unchanged.  */
2861
2862 tree
2863 stabilize_reference (ref)
2864      tree ref;
2865 {
2866   register tree result;
2867   register enum tree_code code = TREE_CODE (ref);
2868
2869   switch (code)
2870     {
2871     case VAR_DECL:
2872     case PARM_DECL:
2873     case RESULT_DECL:
2874       /* No action is needed in this case.  */
2875       return ref;
2876
2877     case NOP_EXPR:
2878     case CONVERT_EXPR:
2879     case FLOAT_EXPR:
2880     case FIX_TRUNC_EXPR:
2881     case FIX_FLOOR_EXPR:
2882     case FIX_ROUND_EXPR:
2883     case FIX_CEIL_EXPR:
2884       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2885       break;
2886
2887     case INDIRECT_REF:
2888       result = build_nt (INDIRECT_REF,
2889                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2890       break;
2891
2892     case COMPONENT_REF:
2893       result = build_nt (COMPONENT_REF,
2894                          stabilize_reference (TREE_OPERAND (ref, 0)),
2895                          TREE_OPERAND (ref, 1));
2896       break;
2897
2898     case BIT_FIELD_REF:
2899       result = build_nt (BIT_FIELD_REF,
2900                          stabilize_reference (TREE_OPERAND (ref, 0)),
2901                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2902                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2903       break;
2904
2905     case ARRAY_REF:
2906       result = build_nt (ARRAY_REF,
2907                          stabilize_reference (TREE_OPERAND (ref, 0)),
2908                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2909       break;
2910
2911     case COMPOUND_EXPR:
2912       /* We cannot wrap the first expression in a SAVE_EXPR, as then
2913          it wouldn't be ignored.  This matters when dealing with
2914          volatiles.  */
2915       return stabilize_reference_1 (ref);
2916
2917     case RTL_EXPR:
2918       result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2919                        save_expr (build1 (ADDR_EXPR,
2920                                           build_pointer_type (TREE_TYPE (ref)),
2921                                           ref)));
2922       break;
2923
2924
2925       /* If arg isn't a kind of lvalue we recognize, make no change.
2926          Caller should recognize the error for an invalid lvalue.  */
2927     default:
2928       return ref;
2929
2930     case ERROR_MARK:
2931       return error_mark_node;
2932     }
2933
2934   TREE_TYPE (result) = TREE_TYPE (ref);
2935   TREE_READONLY (result) = TREE_READONLY (ref);
2936   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2937   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2938   TREE_RAISES (result) = TREE_RAISES (ref);
2939
2940   return result;
2941 }
2942
2943 /* Subroutine of stabilize_reference; this is called for subtrees of
2944    references.  Any expression with side-effects must be put in a SAVE_EXPR
2945    to ensure that it is only evaluated once.
2946
2947    We don't put SAVE_EXPR nodes around everything, because assigning very
2948    simple expressions to temporaries causes us to miss good opportunities
2949    for optimizations.  Among other things, the opportunity to fold in the
2950    addition of a constant into an addressing mode often gets lost, e.g.
2951    "y[i+1] += x;".  In general, we take the approach that we should not make
2952    an assignment unless we are forced into it - i.e., that any non-side effect
2953    operator should be allowed, and that cse should take care of coalescing
2954    multiple utterances of the same expression should that prove fruitful.  */
2955
2956 tree
2957 stabilize_reference_1 (e)
2958      tree e;
2959 {
2960   register tree result;
2961   register enum tree_code code = TREE_CODE (e);
2962
2963   /* We cannot ignore const expressions because it might be a reference
2964      to a const array but whose index contains side-effects.  But we can
2965      ignore things that are actual constant or that already have been
2966      handled by this function.  */
2967
2968   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
2969     return e;
2970
2971   switch (TREE_CODE_CLASS (code))
2972     {
2973     case 'x':
2974     case 't':
2975     case 'd':
2976     case 'b':
2977     case '<':
2978     case 's':
2979     case 'e':
2980     case 'r':
2981       /* If the expression has side-effects, then encase it in a SAVE_EXPR
2982          so that it will only be evaluated once.  */
2983       /* The reference (r) and comparison (<) classes could be handled as
2984          below, but it is generally faster to only evaluate them once.  */
2985       if (TREE_SIDE_EFFECTS (e))
2986         return save_expr (e);
2987       return e;
2988
2989     case 'c':
2990       /* Constants need no processing.  In fact, we should never reach
2991          here.  */
2992       return e;
2993       
2994     case '2':
2995       /* Division is slow and tends to be compiled with jumps,
2996          especially the division by powers of 2 that is often
2997          found inside of an array reference.  So do it just once.  */
2998       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2999           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3000           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3001           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3002         return save_expr (e);
3003       /* Recursively stabilize each operand.  */
3004       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3005                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
3006       break;
3007
3008     case '1':
3009       /* Recursively stabilize each operand.  */
3010       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3011       break;
3012
3013     default:
3014       abort ();
3015     }
3016   
3017   TREE_TYPE (result) = TREE_TYPE (e);
3018   TREE_READONLY (result) = TREE_READONLY (e);
3019   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3020   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3021   TREE_RAISES (result) = TREE_RAISES (e);
3022
3023   return result;
3024 }
3025 \f
3026 /* Low-level constructors for expressions.  */
3027
3028 /* Build an expression of code CODE, data type TYPE,
3029    and operands as specified by the arguments ARG1 and following arguments.
3030    Expressions and reference nodes can be created this way.
3031    Constants, decls, types and misc nodes cannot be.  */
3032
3033 tree
3034 build VPROTO((enum tree_code code, tree tt, ...))
3035 {
3036 #ifndef ANSI_PROTOTYPES
3037   enum tree_code code;
3038   tree tt;
3039 #endif
3040   va_list p;
3041   register tree t;
3042   register int length;
3043   register int i;
3044   int fro;
3045
3046   VA_START (p, tt);
3047
3048 #ifndef ANSI_PROTOTYPES
3049   code = va_arg (p, enum tree_code);
3050   tt = va_arg (p, tree);
3051 #endif
3052
3053   t = make_node (code);
3054   length = tree_code_length[(int) code];
3055   TREE_TYPE (t) = tt;
3056
3057   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_RAISED for
3058      the result based on those same flags for the arguments.  But, if
3059      the arguments aren't really even `tree' expressions, we shouldn't
3060      be trying to do this.  */
3061   fro = first_rtl_op (code);
3062
3063   if (length == 2)
3064     {
3065       /* This is equivalent to the loop below, but faster.  */
3066       register tree arg0 = va_arg (p, tree);
3067       register tree arg1 = va_arg (p, tree);
3068       TREE_OPERAND (t, 0) = arg0;
3069       TREE_OPERAND (t, 1) = arg1;
3070       if (arg0 && fro > 0)
3071         {
3072           if (TREE_SIDE_EFFECTS (arg0))
3073             TREE_SIDE_EFFECTS (t) = 1;
3074           if (TREE_RAISES (arg0))
3075             TREE_RAISES (t) = 1;
3076         }
3077       if (arg1 && fro > 1)
3078         {
3079           if (TREE_SIDE_EFFECTS (arg1))
3080             TREE_SIDE_EFFECTS (t) = 1;
3081           if (TREE_RAISES (arg1))
3082             TREE_RAISES (t) = 1;
3083         }
3084     }
3085   else if (length == 1)
3086     {
3087       register tree arg0 = va_arg (p, tree);
3088
3089       /* Call build1 for this!  */
3090       if (TREE_CODE_CLASS (code) != 's')
3091         abort ();
3092       TREE_OPERAND (t, 0) = arg0;
3093       if (fro > 0)
3094         {
3095           if (arg0 && TREE_SIDE_EFFECTS (arg0))
3096             TREE_SIDE_EFFECTS (t) = 1;
3097           TREE_RAISES (t) = (arg0 && TREE_RAISES (arg0));
3098         }
3099     }
3100   else
3101     {
3102       for (i = 0; i < length; i++)
3103         {
3104           register tree operand = va_arg (p, tree);
3105           TREE_OPERAND (t, i) = operand;
3106           if (operand && fro > i)
3107             {
3108               if (TREE_SIDE_EFFECTS (operand))
3109                 TREE_SIDE_EFFECTS (t) = 1;
3110               if (TREE_RAISES (operand))
3111                 TREE_RAISES (t) = 1;
3112             }
3113         }
3114     }
3115   va_end (p);
3116   return t;
3117 }
3118
3119 /* Same as above, but only builds for unary operators.
3120    Saves lions share of calls to `build'; cuts down use
3121    of varargs, which is expensive for RISC machines.  */
3122
3123 tree
3124 build1 (code, type, node)
3125      enum tree_code code;
3126      tree type;
3127      tree node;
3128 {
3129   register struct obstack *obstack = expression_obstack;
3130   register int length;
3131 #ifdef GATHER_STATISTICS
3132   register tree_node_kind kind;
3133 #endif
3134   register tree t;
3135
3136 #ifdef GATHER_STATISTICS
3137   if (TREE_CODE_CLASS (code) == 'r')
3138     kind = r_kind;
3139   else
3140     kind = e_kind;
3141 #endif
3142
3143   length = sizeof (struct tree_exp);
3144
3145   if (ggc_p)
3146     t = ggc_alloc_tree (length);
3147   else
3148     {
3149       t = (tree) obstack_alloc (obstack, length);
3150       memset ((PTR) t, 0, length);
3151     }
3152
3153 #ifdef GATHER_STATISTICS
3154   tree_node_counts[(int)kind]++;
3155   tree_node_sizes[(int)kind] += length;
3156 #endif
3157
3158   TREE_TYPE (t) = type;
3159   TREE_SET_CODE (t, code);
3160
3161   if (obstack == &permanent_obstack)
3162     TREE_PERMANENT (t) = 1;
3163
3164   TREE_OPERAND (t, 0) = node;
3165   if (node && first_rtl_op (code) != 0)
3166     {
3167       if (TREE_SIDE_EFFECTS (node))
3168         TREE_SIDE_EFFECTS (t) = 1;
3169       if (TREE_RAISES (node))
3170         TREE_RAISES (t) = 1;
3171     }
3172
3173   switch (code)
3174     {
3175     case INIT_EXPR:
3176     case MODIFY_EXPR:
3177     case VA_ARG_EXPR:
3178     case RTL_EXPR:
3179     case PREDECREMENT_EXPR:
3180     case PREINCREMENT_EXPR:
3181     case POSTDECREMENT_EXPR:
3182     case POSTINCREMENT_EXPR:
3183       /* All of these have side-effects, no matter what their
3184          operands are.  */
3185       TREE_SIDE_EFFECTS (t) = 1;
3186       break;
3187           
3188     default:
3189       break;
3190     }
3191
3192   return t;
3193 }
3194
3195 /* Similar except don't specify the TREE_TYPE
3196    and leave the TREE_SIDE_EFFECTS as 0.
3197    It is permissible for arguments to be null,
3198    or even garbage if their values do not matter.  */
3199
3200 tree
3201 build_nt VPROTO((enum tree_code code, ...))
3202 {
3203 #ifndef ANSI_PROTOTYPES
3204   enum tree_code code;
3205 #endif
3206   va_list p;
3207   register tree t;
3208   register int length;
3209   register int i;
3210
3211   VA_START (p, code);
3212
3213 #ifndef ANSI_PROTOTYPES
3214   code = va_arg (p, enum tree_code);
3215 #endif
3216
3217   t = make_node (code);
3218   length = tree_code_length[(int) code];
3219
3220   for (i = 0; i < length; i++)
3221     TREE_OPERAND (t, i) = va_arg (p, tree);
3222
3223   va_end (p);
3224   return t;
3225 }
3226
3227 /* Similar to `build_nt', except we build
3228    on the temp_decl_obstack, regardless.  */
3229
3230 tree
3231 build_parse_node VPROTO((enum tree_code code, ...))
3232 {
3233 #ifndef ANSI_PROTOTYPES
3234   enum tree_code code;
3235 #endif
3236   register struct obstack *ambient_obstack = expression_obstack;
3237   va_list p;
3238   register tree t;
3239   register int length;
3240   register int i;
3241
3242   VA_START (p, code);
3243
3244 #ifndef ANSI_PROTOTYPES
3245   code = va_arg (p, enum tree_code);
3246 #endif
3247
3248   expression_obstack = &temp_decl_obstack;
3249
3250   t = make_node (code);
3251   length = tree_code_length[(int) code];
3252
3253   for (i = 0; i < length; i++)
3254     TREE_OPERAND (t, i) = va_arg (p, tree);
3255
3256   va_end (p);
3257   expression_obstack = ambient_obstack;
3258   return t;
3259 }
3260
3261 #if 0
3262 /* Commented out because this wants to be done very
3263    differently.  See cp-lex.c.  */
3264 tree
3265 build_op_identifier (op1, op2)
3266      tree op1, op2;
3267 {
3268   register tree t = make_node (OP_IDENTIFIER);
3269   TREE_PURPOSE (t) = op1;
3270   TREE_VALUE (t) = op2;
3271   return t;
3272 }
3273 #endif
3274 \f
3275 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
3276    We do NOT enter this node in any sort of symbol table.
3277
3278    layout_decl is used to set up the decl's storage layout.
3279    Other slots are initialized to 0 or null pointers.  */
3280
3281 tree
3282 build_decl (code, name, type)
3283      enum tree_code code;
3284      tree name, type;
3285 {
3286   register tree t;
3287
3288   t = make_node (code);
3289
3290 /*  if (type == error_mark_node)
3291     type = integer_type_node; */
3292 /* That is not done, deliberately, so that having error_mark_node
3293    as the type can suppress useless errors in the use of this variable.  */
3294
3295   DECL_NAME (t) = name;
3296   DECL_ASSEMBLER_NAME (t) = name;
3297   TREE_TYPE (t) = type;
3298
3299   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
3300     layout_decl (t, 0);
3301   else if (code == FUNCTION_DECL)
3302     DECL_MODE (t) = FUNCTION_MODE;
3303
3304   return t;
3305 }
3306 \f
3307 /* BLOCK nodes are used to represent the structure of binding contours
3308    and declarations, once those contours have been exited and their contents
3309    compiled.  This information is used for outputting debugging info.  */
3310
3311 tree
3312 build_block (vars, tags, subblocks, supercontext, chain)
3313      tree vars, tags, subblocks, supercontext, chain;
3314 {
3315   register tree block = make_node (BLOCK);
3316
3317   BLOCK_VARS (block) = vars;
3318   BLOCK_SUBBLOCKS (block) = subblocks;
3319   BLOCK_SUPERCONTEXT (block) = supercontext;
3320   BLOCK_CHAIN (block) = chain;
3321   return block;
3322 }
3323
3324 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
3325    location where an expression or an identifier were encountered. It
3326    is necessary for languages where the frontend parser will handle
3327    recursively more than one file (Java is one of them).  */
3328
3329 tree
3330 build_expr_wfl (node, file, line, col)
3331      tree node;
3332      const char *file;
3333      int line, col;
3334 {
3335   static const char *last_file = 0;
3336   static tree last_filenode = NULL_TREE;
3337   register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
3338
3339   EXPR_WFL_NODE (wfl) = node;
3340   EXPR_WFL_SET_LINECOL (wfl, line, col);
3341   if (file != last_file)
3342     {
3343       last_file = file;
3344       last_filenode = file ? get_identifier (file) : NULL_TREE;
3345     }
3346
3347   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
3348   if (node)
3349     {
3350       TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
3351       TREE_TYPE (wfl) = TREE_TYPE (node);
3352     }
3353
3354   return wfl;
3355 }
3356 \f
3357 /* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
3358    is ATTRIBUTE.  */
3359
3360 tree
3361 build_decl_attribute_variant (ddecl, attribute)
3362      tree ddecl, attribute;
3363 {
3364   DECL_MACHINE_ATTRIBUTES (ddecl) = attribute;
3365   return ddecl;
3366 }
3367
3368 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3369    is ATTRIBUTE.
3370
3371    Record such modified types already made so we don't make duplicates.  */
3372
3373 tree
3374 build_type_attribute_variant (ttype, attribute)
3375      tree ttype, attribute;
3376 {
3377   if ( ! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3378     {
3379       register int hashcode;
3380       tree ntype;
3381
3382       push_obstacks (TYPE_OBSTACK (ttype), TYPE_OBSTACK (ttype));
3383       ntype = copy_node (ttype);
3384
3385       TYPE_POINTER_TO (ntype) = 0;
3386       TYPE_REFERENCE_TO (ntype) = 0;
3387       TYPE_ATTRIBUTES (ntype) = attribute;
3388
3389       /* Create a new main variant of TYPE.  */
3390       TYPE_MAIN_VARIANT (ntype) = ntype;
3391       TYPE_NEXT_VARIANT (ntype) = 0;
3392       set_type_quals (ntype, TYPE_UNQUALIFIED);
3393
3394       hashcode = TYPE_HASH (TREE_CODE (ntype))
3395                  + TYPE_HASH (TREE_TYPE (ntype))
3396                  + attribute_hash_list (attribute);
3397
3398       switch (TREE_CODE (ntype))
3399         {
3400         case FUNCTION_TYPE:
3401           hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
3402           break;
3403         case ARRAY_TYPE:
3404           hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
3405           break;
3406         case INTEGER_TYPE:
3407           hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
3408           break;
3409         case REAL_TYPE:
3410           hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
3411           break;
3412         default:
3413           break;
3414         }
3415
3416       ntype = type_hash_canon (hashcode, ntype);
3417       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3418       pop_obstacks ();
3419     }
3420
3421   return ttype;
3422 }
3423
3424 /* Return a 1 if ATTR_NAME and ATTR_ARGS is valid for either declaration DECL
3425    or type TYPE and 0 otherwise.  Validity is determined the configuration
3426    macros VALID_MACHINE_DECL_ATTRIBUTE and VALID_MACHINE_TYPE_ATTRIBUTE.  */
3427
3428 int
3429 valid_machine_attribute (attr_name, attr_args, decl, type)
3430   tree attr_name;
3431   tree attr_args ATTRIBUTE_UNUSED;
3432   tree decl ATTRIBUTE_UNUSED;
3433   tree type ATTRIBUTE_UNUSED;
3434 {
3435   int validated = 0;
3436 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3437   tree decl_attr_list = decl != 0 ? DECL_MACHINE_ATTRIBUTES (decl) : 0;
3438 #endif
3439 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3440   tree type_attr_list = TYPE_ATTRIBUTES (type);
3441 #endif
3442
3443   if (TREE_CODE (attr_name) != IDENTIFIER_NODE)
3444     abort ();
3445
3446 #ifdef VALID_MACHINE_DECL_ATTRIBUTE
3447   if (decl != 0
3448       && VALID_MACHINE_DECL_ATTRIBUTE (decl, decl_attr_list, attr_name,
3449                                        attr_args))
3450     {
3451       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3452                                     decl_attr_list);
3453
3454       if (attr != NULL_TREE)
3455         {
3456           /* Override existing arguments.  Declarations are unique so we can
3457              modify this in place.  */
3458           TREE_VALUE (attr) = attr_args;
3459         }
3460       else
3461         {
3462           decl_attr_list = tree_cons (attr_name, attr_args, decl_attr_list);
3463           decl = build_decl_attribute_variant (decl, decl_attr_list);
3464         }
3465
3466       validated = 1;
3467     }
3468 #endif
3469
3470 #ifdef VALID_MACHINE_TYPE_ATTRIBUTE
3471   if (validated)
3472     /* Don't apply the attribute to both the decl and the type.  */;
3473   else if (VALID_MACHINE_TYPE_ATTRIBUTE (type, type_attr_list, attr_name,
3474                                          attr_args))
3475     {
3476       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3477                                     type_attr_list);
3478
3479       if (attr != NULL_TREE)
3480         {
3481           /* Override existing arguments.
3482              ??? This currently works since attribute arguments are not
3483              included in `attribute_hash_list'.  Something more complicated
3484              may be needed in the future.  */
3485           TREE_VALUE (attr) = attr_args;
3486         }
3487       else
3488         {
3489           /* If this is part of a declaration, create a type variant,
3490              otherwise, this is part of a type definition, so add it 
3491              to the base type.  */
3492           type_attr_list = tree_cons (attr_name, attr_args, type_attr_list);
3493           if (decl != 0)
3494             type = build_type_attribute_variant (type, type_attr_list);
3495           else
3496             TYPE_ATTRIBUTES (type) = type_attr_list;
3497         }
3498
3499       if (decl != 0)
3500         TREE_TYPE (decl) = type;
3501
3502       validated = 1;
3503     }
3504
3505   /* Handle putting a type attribute on pointer-to-function-type by putting
3506      the attribute on the function type.  */
3507   else if (POINTER_TYPE_P (type)
3508            && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
3509            && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list,
3510                                             attr_name, attr_args))
3511     {
3512       tree inner_type = TREE_TYPE (type);
3513       tree inner_attr_list = TYPE_ATTRIBUTES (inner_type);
3514       tree attr = lookup_attribute (IDENTIFIER_POINTER (attr_name),
3515                                     type_attr_list);
3516
3517       if (attr != NULL_TREE)
3518         TREE_VALUE (attr) = attr_args;
3519       else
3520         {
3521           inner_attr_list = tree_cons (attr_name, attr_args, inner_attr_list);
3522           inner_type = build_type_attribute_variant (inner_type,
3523                                                      inner_attr_list);
3524         }
3525
3526       if (decl != 0)
3527         TREE_TYPE (decl) = build_pointer_type (inner_type);
3528       else
3529         {
3530           /* Clear TYPE_POINTER_TO for the old inner type, since
3531              `type' won't be pointing to it anymore.  */
3532           TYPE_POINTER_TO (TREE_TYPE (type)) = NULL_TREE;
3533           TREE_TYPE (type) = inner_type;
3534         }
3535
3536       validated = 1;
3537     }
3538 #endif
3539
3540   return validated;
3541 }
3542
3543 /* Return non-zero if IDENT is a valid name for attribute ATTR,
3544    or zero if not.
3545
3546    We try both `text' and `__text__', ATTR may be either one.  */
3547 /* ??? It might be a reasonable simplification to require ATTR to be only
3548    `text'.  One might then also require attribute lists to be stored in
3549    their canonicalized form.  */
3550
3551 int
3552 is_attribute_p (attr, ident)
3553      const char *attr;
3554      tree ident;
3555 {
3556   int ident_len, attr_len;
3557   char *p;
3558
3559   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3560     return 0;
3561
3562   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
3563     return 1;
3564
3565   p = IDENTIFIER_POINTER (ident);
3566   ident_len = strlen (p);
3567   attr_len = strlen (attr);
3568
3569   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3570   if (attr[0] == '_')
3571     {
3572       if (attr[1] != '_'
3573           || attr[attr_len - 2] != '_'
3574           || attr[attr_len - 1] != '_')
3575         abort ();
3576       if (ident_len == attr_len - 4
3577           && strncmp (attr + 2, p, attr_len - 4) == 0)
3578         return 1;
3579     }
3580   else
3581     {
3582       if (ident_len == attr_len + 4
3583           && p[0] == '_' && p[1] == '_'
3584           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3585           && strncmp (attr, p + 2, attr_len) == 0)
3586         return 1;
3587     }
3588
3589   return 0;
3590 }
3591
3592 /* Given an attribute name and a list of attributes, return a pointer to the
3593    attribute's list element if the attribute is part of the list, or NULL_TREE
3594    if not found.  */
3595
3596 tree
3597 lookup_attribute (attr_name, list)
3598      const char *attr_name;
3599      tree list;
3600 {
3601   tree l;
3602
3603   for (l = list; l; l = TREE_CHAIN (l))
3604     {
3605       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
3606         abort ();
3607       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
3608         return l;
3609     }
3610
3611   return NULL_TREE;
3612 }
3613
3614 /* Return an attribute list that is the union of a1 and a2.  */
3615
3616 tree
3617 merge_attributes (a1, a2)
3618      register tree a1, a2;
3619 {
3620   tree attributes;
3621
3622   /* Either one unset?  Take the set one.  */
3623
3624   if ((attributes = a1) == 0)
3625     attributes = a2;
3626
3627   /* One that completely contains the other?  Take it.  */
3628
3629   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3630   {
3631     if (attribute_list_contained (a2, a1))
3632       attributes = a2;
3633     else
3634       {
3635         /* Pick the longest list, and hang on the other list.  */
3636         /* ??? For the moment we punt on the issue of attrs with args.  */
3637
3638         if (list_length (a1) < list_length (a2))
3639           attributes = a2, a2 = a1;
3640
3641         for (; a2 != 0; a2 = TREE_CHAIN (a2))
3642           if (lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3643                                 attributes) == NULL_TREE)
3644             {
3645               a1 = copy_node (a2);
3646               TREE_CHAIN (a1) = attributes;
3647               attributes = a1;
3648             }
3649       }
3650   }
3651   return attributes;
3652 }
3653
3654 /* Given types T1 and T2, merge their attributes and return
3655    the result.  */
3656
3657 tree
3658 merge_machine_type_attributes (t1, t2)
3659      tree t1, t2;
3660 {
3661 #ifdef MERGE_MACHINE_TYPE_ATTRIBUTES
3662   return MERGE_MACHINE_TYPE_ATTRIBUTES (t1, t2);
3663 #else
3664   return merge_attributes (TYPE_ATTRIBUTES (t1),
3665                            TYPE_ATTRIBUTES (t2));
3666 #endif
3667 }
3668
3669 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3670    the result.  */
3671
3672 tree
3673 merge_machine_decl_attributes (olddecl, newdecl)
3674      tree olddecl, newdecl;
3675 {
3676 #ifdef MERGE_MACHINE_DECL_ATTRIBUTES
3677   return MERGE_MACHINE_DECL_ATTRIBUTES (olddecl, newdecl);
3678 #else
3679   return merge_attributes (DECL_MACHINE_ATTRIBUTES (olddecl),
3680                            DECL_MACHINE_ATTRIBUTES (newdecl));
3681 #endif
3682 }
3683 \f
3684 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3685    of the various TYPE_QUAL values.  */
3686
3687 static void
3688 set_type_quals (type, type_quals)
3689      tree type;
3690      int  type_quals;
3691 {
3692   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3693   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3694   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3695 }
3696
3697 /* Given a type node TYPE and a TYPE_QUALIFIER_SET, return a type for
3698    the same kind of data as TYPE describes.  Variants point to the
3699    "main variant" (which has no qualifiers set) via TYPE_MAIN_VARIANT,
3700    and it points to a chain of other variants so that duplicate
3701    variants are never made.  Only main variants should ever appear as
3702    types of expressions.  */
3703
3704 tree
3705 build_qualified_type (type, type_quals)
3706      tree type;
3707      int type_quals;
3708 {
3709   register tree t;
3710   
3711   /* Search the chain of variants to see if there is already one there just
3712      like the one we need to have.  If so, use that existing one.  We must
3713      preserve the TYPE_NAME, since there is code that depends on this.  */
3714
3715   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3716     if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type))
3717       return t;
3718
3719   /* We need a new one.  */
3720   t = build_type_copy (type);
3721   set_type_quals (t, type_quals);
3722   return t;
3723 }
3724
3725 /* Create a new variant of TYPE, equivalent but distinct.
3726    This is so the caller can modify it.  */
3727
3728 tree
3729 build_type_copy (type)
3730      tree type;
3731 {
3732   register tree t, m = TYPE_MAIN_VARIANT (type);
3733   register struct obstack *ambient_obstack = current_obstack;
3734
3735   current_obstack = TYPE_OBSTACK (type);
3736   t = copy_node (type);
3737   current_obstack = ambient_obstack;
3738
3739   TYPE_POINTER_TO (t) = 0;
3740   TYPE_REFERENCE_TO (t) = 0;
3741
3742   /* Add this type to the chain of variants of TYPE.  */
3743   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3744   TYPE_NEXT_VARIANT (m) = t;
3745
3746   return t;
3747 }
3748 \f
3749 /* Hashing of types so that we don't make duplicates.
3750    The entry point is `type_hash_canon'.  */
3751
3752 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3753    with types in the TREE_VALUE slots), by adding the hash codes
3754    of the individual types.  */
3755
3756 int
3757 type_hash_list (list)
3758      tree list;
3759 {
3760   register int hashcode;
3761   register tree tail;
3762
3763   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3764     hashcode += TYPE_HASH (TREE_VALUE (tail));
3765
3766   return hashcode;
3767 }
3768
3769 /* Look in the type hash table for a type isomorphic to TYPE.
3770    If one is found, return it.  Otherwise return 0.  */
3771
3772 tree
3773 type_hash_lookup (hashcode, type)
3774      int hashcode;
3775      tree type;
3776 {
3777   register struct type_hash *h;
3778
3779   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3780      must call that routine before comparing TYPE_ALIGNs. */
3781   layout_type (type);
3782
3783   for (h = type_hash_table[hashcode % TYPE_HASH_SIZE]; h; h = h->next)
3784     if (h->hashcode == hashcode
3785         && TREE_CODE (h->type) == TREE_CODE (type)
3786         && TREE_TYPE (h->type) == TREE_TYPE (type)
3787         && attribute_list_equal (TYPE_ATTRIBUTES (h->type),
3788                                    TYPE_ATTRIBUTES (type))
3789         && TYPE_ALIGN (h->type) == TYPE_ALIGN (type)
3790         && (TYPE_MAX_VALUE (h->type) == TYPE_MAX_VALUE (type)
3791             || tree_int_cst_equal (TYPE_MAX_VALUE (h->type),
3792                                    TYPE_MAX_VALUE (type)))
3793         && (TYPE_MIN_VALUE (h->type) == TYPE_MIN_VALUE (type)
3794             || tree_int_cst_equal (TYPE_MIN_VALUE (h->type),
3795                                    TYPE_MIN_VALUE (type)))
3796         /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
3797         && (TYPE_DOMAIN (h->type) == TYPE_DOMAIN (type)
3798             || (TYPE_DOMAIN (h->type)
3799                 && TREE_CODE (TYPE_DOMAIN (h->type)) == TREE_LIST
3800                 && TYPE_DOMAIN (type)
3801                 && TREE_CODE (TYPE_DOMAIN (type)) == TREE_LIST
3802                 && type_list_equal (TYPE_DOMAIN (h->type),
3803                                     TYPE_DOMAIN (type)))))
3804       return h->type;
3805
3806   return 0;
3807 }
3808
3809 /* Add an entry to the type-hash-table
3810    for a type TYPE whose hash code is HASHCODE.  */
3811
3812 void
3813 type_hash_add (hashcode, type)
3814      int hashcode;
3815      tree type;
3816 {
3817   register struct type_hash *h;
3818
3819   h = (struct type_hash *) permalloc (sizeof (struct type_hash));
3820   h->hashcode = hashcode;
3821   h->type = type;
3822   h->next = type_hash_table[hashcode % TYPE_HASH_SIZE];
3823   type_hash_table[hashcode % TYPE_HASH_SIZE] = h;
3824 }
3825
3826 /* Given TYPE, and HASHCODE its hash code, return the canonical
3827    object for an identical type if one already exists.
3828    Otherwise, return TYPE, and record it as the canonical object
3829    if it is a permanent object.
3830
3831    To use this function, first create a type of the sort you want.
3832    Then compute its hash code from the fields of the type that
3833    make it different from other similar types.
3834    Then call this function and use the value.
3835    This function frees the type you pass in if it is a duplicate.  */
3836
3837 /* Set to 1 to debug without canonicalization.  Never set by program.  */
3838 int debug_no_type_hash = 0;
3839
3840 tree
3841 type_hash_canon (hashcode, type)
3842      int hashcode;
3843      tree type;
3844 {
3845   tree t1;
3846
3847   if (debug_no_type_hash)
3848     return type;
3849
3850   t1 = type_hash_lookup (hashcode, type);
3851   if (t1 != 0)
3852     {
3853       if (!ggc_p)
3854         obstack_free (TYPE_OBSTACK (type), type);
3855
3856 #ifdef GATHER_STATISTICS
3857       tree_node_counts[(int)t_kind]--;
3858       tree_node_sizes[(int)t_kind] -= sizeof (struct tree_type);
3859 #endif
3860       return t1;
3861     }
3862
3863   /* If this is a permanent type, record it for later reuse.  */
3864   if (ggc_p || TREE_PERMANENT (type))
3865     type_hash_add (hashcode, type);
3866
3867   return type;
3868 }
3869
3870 /* Mark ARG (which is really a struct type_hash **) for GC.  */
3871
3872 static void
3873 mark_type_hash (arg)
3874      void *arg;
3875 {
3876   struct type_hash *t = *(struct type_hash **) arg;
3877
3878   while (t)
3879     {
3880       ggc_mark_tree (t->type);
3881       t = t->next;
3882     }
3883 }
3884
3885 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3886    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3887    by adding the hash codes of the individual attributes.  */
3888
3889 int
3890 attribute_hash_list (list)
3891      tree list;
3892 {
3893   register int hashcode;
3894   register tree tail;
3895
3896   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3897     /* ??? Do we want to add in TREE_VALUE too? */
3898     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3899   return hashcode;
3900 }
3901
3902 /* Given two lists of attributes, return true if list l2 is
3903    equivalent to l1.  */
3904
3905 int
3906 attribute_list_equal (l1, l2)
3907      tree l1, l2;
3908 {
3909    return attribute_list_contained (l1, l2)
3910           && attribute_list_contained (l2, l1);
3911 }
3912
3913 /* Given two lists of attributes, return true if list L2 is
3914    completely contained within L1.  */
3915 /* ??? This would be faster if attribute names were stored in a canonicalized
3916    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3917    must be used to show these elements are equivalent (which they are).  */
3918 /* ??? It's not clear that attributes with arguments will always be handled
3919    correctly.  */
3920
3921 int
3922 attribute_list_contained (l1, l2)
3923      tree l1, l2;
3924 {
3925   register tree t1, t2;
3926
3927   /* First check the obvious, maybe the lists are identical.  */
3928   if (l1 == l2)
3929      return 1;
3930
3931   /* Maybe the lists are similar.  */
3932   for (t1 = l1, t2 = l2;
3933        t1 != 0 && t2 != 0
3934         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3935         && TREE_VALUE (t1) == TREE_VALUE (t2);
3936        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3937
3938   /* Maybe the lists are equal.  */
3939   if (t1 == 0 && t2 == 0)
3940      return 1;
3941
3942   for (; t2 != 0; t2 = TREE_CHAIN (t2))
3943     {
3944       tree attr
3945         = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3946
3947       if (attr == 0)
3948         return 0;
3949
3950       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3951         return 0;
3952     }
3953
3954   return 1;
3955 }
3956
3957 /* Given two lists of types
3958    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3959    return 1 if the lists contain the same types in the same order.
3960    Also, the TREE_PURPOSEs must match.  */
3961
3962 int
3963 type_list_equal (l1, l2)
3964      tree l1, l2;
3965 {
3966   register tree t1, t2;
3967
3968   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3969     if (TREE_VALUE (t1) != TREE_VALUE (t2)
3970         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3971             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3972                   && (TREE_TYPE (TREE_PURPOSE (t1))
3973                       == TREE_TYPE (TREE_PURPOSE (t2))))))
3974       return 0;
3975
3976   return t1 == t2;
3977 }
3978
3979 /* Nonzero if integer constants T1 and T2
3980    represent the same constant value.  */
3981
3982 int
3983 tree_int_cst_equal (t1, t2)
3984      tree t1, t2;
3985 {
3986   if (t1 == t2)
3987     return 1;
3988
3989   if (t1 == 0 || t2 == 0)
3990     return 0;
3991
3992   if (TREE_CODE (t1) == INTEGER_CST
3993       && TREE_CODE (t2) == INTEGER_CST
3994       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3995       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3996     return 1;
3997
3998   return 0;
3999 }
4000
4001 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
4002    The precise way of comparison depends on their data type.  */
4003
4004 int
4005 tree_int_cst_lt (t1, t2)
4006      tree t1, t2;
4007 {
4008   if (t1 == t2)
4009     return 0;
4010
4011   if (! TREE_UNSIGNED (TREE_TYPE (t1)))
4012     return INT_CST_LT (t1, t2);
4013
4014   return INT_CST_LT_UNSIGNED (t1, t2);
4015 }
4016
4017 /* Return an indication of the sign of the integer constant T.
4018    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4019    Note that -1 will never be returned it T's type is unsigned.  */
4020
4021 int
4022 tree_int_cst_sgn (t)
4023      tree t;
4024 {
4025   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4026     return 0;
4027   else if (TREE_UNSIGNED (TREE_TYPE (t)))
4028     return 1;
4029   else if (TREE_INT_CST_HIGH (t) < 0)
4030     return -1;
4031   else
4032     return 1;
4033 }
4034
4035 /* Compare two constructor-element-type constants.  Return 1 if the lists
4036    are known to be equal; otherwise return 0.  */
4037
4038 int
4039 simple_cst_list_equal (l1, l2)
4040      tree l1, l2;
4041 {
4042   while (l1 != NULL_TREE && l2 != NULL_TREE)
4043     {
4044       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4045         return 0;
4046
4047       l1 = TREE_CHAIN (l1);
4048       l2 = TREE_CHAIN (l2);
4049     }
4050
4051   return l1 == l2;
4052 }
4053
4054 /* Return truthvalue of whether T1 is the same tree structure as T2.
4055    Return 1 if they are the same.
4056    Return 0 if they are understandably different.
4057    Return -1 if either contains tree structure not understood by
4058    this function.  */
4059
4060 int
4061 simple_cst_equal (t1, t2)
4062      tree t1, t2;
4063 {
4064   register enum tree_code code1, code2;
4065   int cmp;
4066   int i;
4067
4068   if (t1 == t2)
4069     return 1;
4070   if (t1 == 0 || t2 == 0)
4071     return 0;
4072
4073   code1 = TREE_CODE (t1);
4074   code2 = TREE_CODE (t2);
4075
4076   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4077     {
4078       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4079           || code2 == NON_LVALUE_EXPR)
4080         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4081       else
4082         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4083     }
4084
4085   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4086            || code2 == NON_LVALUE_EXPR)
4087     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4088
4089   if (code1 != code2)
4090     return 0;
4091
4092   switch (code1)
4093     {
4094     case INTEGER_CST:
4095       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4096               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4097
4098     case REAL_CST:
4099       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4100
4101     case STRING_CST:
4102       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4103               && ! bcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4104                          TREE_STRING_LENGTH (t1)));
4105
4106     case CONSTRUCTOR:
4107       if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
4108         return 1;
4109       else
4110         abort ();
4111
4112     case SAVE_EXPR:
4113       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4114
4115     case CALL_EXPR:
4116       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4117       if (cmp <= 0)
4118         return cmp;
4119       return
4120         simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4121
4122     case TARGET_EXPR:
4123       /* Special case: if either target is an unallocated VAR_DECL,
4124          it means that it's going to be unified with whatever the
4125          TARGET_EXPR is really supposed to initialize, so treat it
4126          as being equivalent to anything.  */
4127       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4128            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4129            && DECL_RTL (TREE_OPERAND (t1, 0)) == 0)
4130           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4131               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4132               && DECL_RTL (TREE_OPERAND (t2, 0)) == 0))
4133         cmp = 1;
4134       else
4135         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4136
4137       if (cmp <= 0)
4138         return cmp;
4139
4140       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4141
4142     case WITH_CLEANUP_EXPR:
4143       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4144       if (cmp <= 0)
4145         return cmp;
4146
4147       return simple_cst_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t1, 2));
4148
4149     case COMPONENT_REF:
4150       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4151         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4152
4153       return 0;
4154
4155     case VAR_DECL:
4156     case PARM_DECL:
4157     case CONST_DECL:
4158     case FUNCTION_DECL:
4159       return 0;
4160       
4161     default:
4162       break;
4163     }
4164
4165   /* This general rule works for most tree codes.  All exceptions should be
4166      handled above.  If this is a language-specific tree code, we can't
4167      trust what might be in the operand, so say we don't know
4168      the situation.  */
4169   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4170     return -1;
4171
4172   switch (TREE_CODE_CLASS (code1))
4173     {
4174     case '1':
4175     case '2':
4176     case '<':
4177     case 'e':
4178     case 'r':
4179     case 's':
4180       cmp = 1;
4181       for (i = 0; i < tree_code_length[(int) code1]; i++)
4182         {
4183           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4184           if (cmp <= 0)
4185             return cmp;
4186         }
4187
4188       return cmp;
4189
4190     default:
4191       return -1;
4192     }
4193 }
4194 \f
4195 /* Constructors for pointer, array and function types.
4196    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4197    constructed by language-dependent code, not here.)  */
4198
4199 /* Construct, lay out and return the type of pointers to TO_TYPE.
4200    If such a type has already been constructed, reuse it.  */
4201
4202 tree
4203 build_pointer_type (to_type)
4204      tree to_type;
4205 {
4206   register tree t = TYPE_POINTER_TO (to_type);
4207
4208   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4209
4210   if (t != 0)
4211     return t;
4212
4213   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4214   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4215   t = make_node (POINTER_TYPE);
4216   pop_obstacks ();
4217
4218   TREE_TYPE (t) = to_type;
4219
4220   /* Record this type as the pointer to TO_TYPE.  */
4221   TYPE_POINTER_TO (to_type) = t;
4222
4223   /* Lay out the type.  This function has many callers that are concerned
4224      with expression-construction, and this simplifies them all.
4225      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
4226   layout_type (t);
4227
4228   return t;
4229 }
4230
4231 /* Build the node for the type of references-to-TO_TYPE.  */
4232
4233 tree
4234 build_reference_type (to_type)
4235      tree to_type;
4236 {
4237   register tree t = TYPE_REFERENCE_TO (to_type);
4238
4239   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
4240
4241   if (t)
4242     return t;
4243
4244   /* We need a new one.  Put this in the same obstack as TO_TYPE.   */
4245   push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type));
4246   t = make_node (REFERENCE_TYPE);
4247   pop_obstacks ();
4248
4249   TREE_TYPE (t) = to_type;
4250
4251   /* Record this type as the pointer to TO_TYPE.  */
4252   TYPE_REFERENCE_TO (to_type) = t;
4253
4254   layout_type (t);
4255
4256   return t;
4257 }
4258
4259 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4260    MAXVAL should be the maximum value in the domain
4261    (one less than the length of the array).
4262
4263    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4264    We don't enforce this limit, that is up to caller (e.g. language front end).
4265    The limit exists because the result is a signed type and we don't handle
4266    sizes that use more than one HOST_WIDE_INT.  */
4267
4268 tree
4269 build_index_type (maxval)
4270      tree maxval;
4271 {
4272   register tree itype = make_node (INTEGER_TYPE);
4273
4274   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4275   TYPE_MIN_VALUE (itype) = size_zero_node;
4276
4277   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4278   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
4279   pop_obstacks ();
4280
4281   TYPE_MODE (itype) = TYPE_MODE (sizetype);
4282   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4283   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4284   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4285   if (TREE_CODE (maxval) == INTEGER_CST)
4286     {
4287       int maxint = (int) TREE_INT_CST_LOW (maxval);
4288       /* If the domain should be empty, make sure the maxval
4289          remains -1 and is not spoiled by truncation.  */
4290       if (INT_CST_LT (maxval, integer_zero_node))
4291         {
4292           TYPE_MAX_VALUE (itype) = build_int_2 (-1, -1);
4293           TREE_TYPE (TYPE_MAX_VALUE (itype)) = sizetype;
4294         }
4295       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4296     }
4297   else
4298     return itype;
4299 }
4300
4301 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4302    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4303    low bound LOWVAL and high bound HIGHVAL.
4304    if TYPE==NULL_TREE, sizetype is used.  */
4305
4306 tree
4307 build_range_type (type, lowval, highval)
4308      tree type, lowval, highval;
4309 {
4310   register tree itype = make_node (INTEGER_TYPE);
4311
4312   TREE_TYPE (itype) = type;
4313   if (type == NULL_TREE)
4314     type = sizetype;
4315
4316   push_obstacks (TYPE_OBSTACK (itype), TYPE_OBSTACK (itype));
4317   TYPE_MIN_VALUE (itype) = convert (type, lowval);
4318   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4319   pop_obstacks ();
4320
4321   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4322   TYPE_MODE (itype) = TYPE_MODE (type);
4323   TYPE_SIZE (itype) = TYPE_SIZE (type);
4324   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4325   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4326   if (TREE_CODE (lowval) == INTEGER_CST)
4327     {
4328       HOST_WIDE_INT lowint, highint;
4329       int maxint;
4330
4331       lowint = TREE_INT_CST_LOW (lowval);
4332       if (highval && TREE_CODE (highval) == INTEGER_CST)
4333         highint = TREE_INT_CST_LOW (highval);
4334       else
4335         highint = (~(unsigned HOST_WIDE_INT)0) >> 1;
4336
4337       maxint = (int) (highint - lowint);
4338       return type_hash_canon (maxint < 0 ? ~maxint : maxint, itype);
4339     }
4340   else
4341     return itype;
4342 }
4343
4344 /* Just like build_index_type, but takes lowval and highval instead
4345    of just highval (maxval).  */
4346
4347 tree
4348 build_index_2_type (lowval,highval)
4349      tree lowval, highval;
4350 {
4351   return build_range_type (NULL_TREE, lowval, highval);
4352 }
4353
4354 /* Return nonzero iff ITYPE1 and ITYPE2 are equal (in the LISP sense).
4355    Needed because when index types are not hashed, equal index types
4356    built at different times appear distinct, even though structurally,
4357    they are not.  */
4358
4359 int
4360 index_type_equal (itype1, itype2)
4361      tree itype1, itype2;
4362 {
4363   if (TREE_CODE (itype1) != TREE_CODE (itype2))
4364     return 0;
4365
4366   if (TREE_CODE (itype1) == INTEGER_TYPE)
4367     {
4368       if (TYPE_PRECISION (itype1) != TYPE_PRECISION (itype2)
4369           || TYPE_MODE (itype1) != TYPE_MODE (itype2)
4370           || simple_cst_equal (TYPE_SIZE (itype1), TYPE_SIZE (itype2)) != 1
4371           || TYPE_ALIGN (itype1) != TYPE_ALIGN (itype2))
4372         return 0;
4373
4374       if (1 == simple_cst_equal (TYPE_MIN_VALUE (itype1),
4375                                  TYPE_MIN_VALUE (itype2))
4376           && 1 == simple_cst_equal (TYPE_MAX_VALUE (itype1),
4377                                     TYPE_MAX_VALUE (itype2)))
4378         return 1;
4379     }
4380
4381   return 0;
4382 }
4383
4384 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4385    and number of elements specified by the range of values of INDEX_TYPE.
4386    If such a type has already been constructed, reuse it.  */
4387
4388 tree
4389 build_array_type (elt_type, index_type)
4390      tree elt_type, index_type;
4391 {
4392   register tree t;
4393   int hashcode;
4394
4395   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4396     {
4397       error ("arrays of functions are not meaningful");
4398       elt_type = integer_type_node;
4399     }
4400
4401   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
4402   build_pointer_type (elt_type);
4403
4404   /* Allocate the array after the pointer type,
4405      in case we free it in type_hash_canon.  */
4406   t = make_node (ARRAY_TYPE);
4407   TREE_TYPE (t) = elt_type;
4408   TYPE_DOMAIN (t) = index_type;
4409
4410   if (index_type == 0)
4411     {
4412       return t;
4413     }
4414
4415   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
4416   t = type_hash_canon (hashcode, t);
4417
4418   if (TYPE_SIZE (t) == 0)
4419     layout_type (t);
4420   return t;
4421 }
4422
4423 /* Return the TYPE of the elements comprising
4424    the innermost dimension of ARRAY.  */
4425
4426 tree
4427 get_inner_array_type (array)
4428     tree array;
4429 {
4430   tree type = TREE_TYPE (array);
4431
4432   while (TREE_CODE (type) == ARRAY_TYPE)
4433     type = TREE_TYPE (type);
4434
4435   return type;
4436 }
4437
4438 /* Construct, lay out and return
4439    the type of functions returning type VALUE_TYPE
4440    given arguments of types ARG_TYPES.
4441    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4442    are data type nodes for the arguments of the function.
4443    If such a type has already been constructed, reuse it.  */
4444
4445 tree
4446 build_function_type (value_type, arg_types)
4447      tree value_type, arg_types;
4448 {
4449   register tree t;
4450   int hashcode;
4451
4452   if (TREE_CODE (value_type) == FUNCTION_TYPE)
4453     {
4454       error ("function return type cannot be function");
4455       value_type = integer_type_node;
4456     }
4457
4458   /* Make a node of the sort we want.  */
4459   t = make_node (FUNCTION_TYPE);
4460   TREE_TYPE (t) = value_type;
4461   TYPE_ARG_TYPES (t) = arg_types;
4462
4463   /* If we already have such a type, use the old one and free this one.  */
4464   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
4465   t = type_hash_canon (hashcode, t);
4466
4467   if (TYPE_SIZE (t) == 0)
4468     layout_type (t);
4469   return t;
4470 }
4471
4472 /* Construct, lay out and return the type of methods belonging to class
4473    BASETYPE and whose arguments and values are described by TYPE.
4474    If that type exists already, reuse it.
4475    TYPE must be a FUNCTION_TYPE node.  */
4476
4477 tree
4478 build_method_type (basetype, type)
4479      tree basetype, type;
4480 {
4481   register tree t;
4482   int hashcode;
4483
4484   /* Make a node of the sort we want.  */
4485   t = make_node (METHOD_TYPE);
4486
4487   if (TREE_CODE (type) != FUNCTION_TYPE)
4488     abort ();
4489
4490   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4491   TREE_TYPE (t) = TREE_TYPE (type);
4492
4493   /* The actual arglist for this function includes a "hidden" argument
4494      which is "this".  Put it into the list of argument types.  */
4495
4496   TYPE_ARG_TYPES (t)
4497     = tree_cons (NULL_TREE,
4498                  build_pointer_type (basetype), TYPE_ARG_TYPES (type));
4499
4500   /* If we already have such a type, use the old one and free this one.  */
4501   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4502   t = type_hash_canon (hashcode, t);
4503
4504   if (TYPE_SIZE (t) == 0)
4505     layout_type (t);
4506
4507   return t;
4508 }
4509
4510 /* Construct, lay out and return the type of offsets to a value
4511    of type TYPE, within an object of type BASETYPE.
4512    If a suitable offset type exists already, reuse it.  */
4513
4514 tree
4515 build_offset_type (basetype, type)
4516      tree basetype, type;
4517 {
4518   register tree t;
4519   int hashcode;
4520
4521   /* Make a node of the sort we want.  */
4522   t = make_node (OFFSET_TYPE);
4523
4524   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4525   TREE_TYPE (t) = type;
4526
4527   /* If we already have such a type, use the old one and free this one.  */
4528   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
4529   t = type_hash_canon (hashcode, t);
4530
4531   if (TYPE_SIZE (t) == 0)
4532     layout_type (t);
4533
4534   return t;
4535 }
4536
4537 /* Create a complex type whose components are COMPONENT_TYPE.  */
4538
4539 tree
4540 build_complex_type (component_type)
4541      tree component_type;
4542 {
4543   register tree t;
4544   int hashcode;
4545
4546   /* Make a node of the sort we want.  */
4547   t = make_node (COMPLEX_TYPE);
4548
4549   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4550   set_type_quals (t, TYPE_QUALS (component_type));
4551
4552   /* If we already have such a type, use the old one and free this one.  */
4553   hashcode = TYPE_HASH (component_type);
4554   t = type_hash_canon (hashcode, t);
4555
4556   if (TYPE_SIZE (t) == 0)
4557     layout_type (t);
4558
4559   /* If we are writing Dwarf2 output we need to create a name,
4560      since complex is a fundamental type.  */
4561   if (write_symbols == DWARF2_DEBUG && ! TYPE_NAME (t))
4562     {
4563       const char *name;
4564       if (component_type == char_type_node)
4565         name = "complex char";
4566       else if (component_type == signed_char_type_node)
4567         name = "complex signed char";
4568       else if (component_type == unsigned_char_type_node)
4569         name = "complex unsigned char";
4570       else if (component_type == short_integer_type_node)
4571         name = "complex short int";
4572       else if (component_type == short_unsigned_type_node)
4573         name = "complex short unsigned int";
4574       else if (component_type == integer_type_node)
4575         name = "complex int";
4576       else if (component_type == unsigned_type_node)
4577         name = "complex unsigned int";
4578       else if (component_type == long_integer_type_node)
4579         name = "complex long int";
4580       else if (component_type == long_unsigned_type_node)
4581         name = "complex long unsigned int";
4582       else if (component_type == long_long_integer_type_node)
4583         name = "complex long long int";
4584       else if (component_type == long_long_unsigned_type_node)
4585         name = "complex long long unsigned int";
4586       else
4587         name = 0;
4588
4589       if (name != 0)
4590         TYPE_NAME (t) = get_identifier (name);
4591     }
4592
4593   return t;
4594 }
4595 \f
4596 /* Return OP, stripped of any conversions to wider types as much as is safe.
4597    Converting the value back to OP's type makes a value equivalent to OP.
4598
4599    If FOR_TYPE is nonzero, we return a value which, if converted to
4600    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4601
4602    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4603    narrowest type that can hold the value, even if they don't exactly fit.
4604    Otherwise, bit-field references are changed to a narrower type
4605    only if they can be fetched directly from memory in that type.
4606
4607    OP must have integer, real or enumeral type.  Pointers are not allowed!
4608
4609    There are some cases where the obvious value we could return
4610    would regenerate to OP if converted to OP's type, 
4611    but would not extend like OP to wider types.
4612    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4613    For example, if OP is (unsigned short)(signed char)-1,
4614    we avoid returning (signed char)-1 if FOR_TYPE is int,
4615    even though extending that to an unsigned short would regenerate OP,
4616    since the result of extending (signed char)-1 to (int)
4617    is different from (int) OP.  */
4618
4619 tree
4620 get_unwidened (op, for_type)
4621      register tree op;
4622      tree for_type;
4623 {
4624   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4625   register tree type = TREE_TYPE (op);
4626   register unsigned final_prec
4627     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4628   register int uns
4629     = (for_type != 0 && for_type != type
4630        && final_prec > TYPE_PRECISION (type)
4631        && TREE_UNSIGNED (type));
4632   register tree win = op;
4633
4634   while (TREE_CODE (op) == NOP_EXPR)
4635     {
4636       register int bitschange
4637         = TYPE_PRECISION (TREE_TYPE (op))
4638           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4639
4640       /* Truncations are many-one so cannot be removed.
4641          Unless we are later going to truncate down even farther.  */
4642       if (bitschange < 0
4643           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4644         break;
4645
4646       /* See what's inside this conversion.  If we decide to strip it,
4647          we will set WIN.  */
4648       op = TREE_OPERAND (op, 0);
4649
4650       /* If we have not stripped any zero-extensions (uns is 0),
4651          we can strip any kind of extension.
4652          If we have previously stripped a zero-extension,
4653          only zero-extensions can safely be stripped.
4654          Any extension can be stripped if the bits it would produce
4655          are all going to be discarded later by truncating to FOR_TYPE.  */
4656
4657       if (bitschange > 0)
4658         {
4659           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4660             win = op;
4661           /* TREE_UNSIGNED says whether this is a zero-extension.
4662              Let's avoid computing it if it does not affect WIN
4663              and if UNS will not be needed again.  */
4664           if ((uns || TREE_CODE (op) == NOP_EXPR)
4665               && TREE_UNSIGNED (TREE_TYPE (op)))
4666             {
4667               uns = 1;
4668               win = op;
4669             }
4670         }
4671     }
4672
4673   if (TREE_CODE (op) == COMPONENT_REF
4674       /* Since type_for_size always gives an integer type.  */
4675       && TREE_CODE (type) != REAL_TYPE
4676       /* Don't crash if field not laid out yet.  */
4677       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4678     {
4679       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4680       type = type_for_size (innerprec, TREE_UNSIGNED (TREE_OPERAND (op, 1)));
4681
4682       /* We can get this structure field in the narrowest type it fits in.
4683          If FOR_TYPE is 0, do this only for a field that matches the
4684          narrower type exactly and is aligned for it
4685          The resulting extension to its nominal type (a fullword type)
4686          must fit the same conditions as for other extensions.  */
4687
4688       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4689           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4690           && (! uns || final_prec <= innerprec
4691               || TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4692           && type != 0)
4693         {
4694           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4695                        TREE_OPERAND (op, 1));
4696           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4697           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4698           TREE_RAISES (win) = TREE_RAISES (op);
4699         }
4700     }
4701   return win;
4702 }
4703 \f
4704 /* Return OP or a simpler expression for a narrower value
4705    which can be sign-extended or zero-extended to give back OP.
4706    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4707    or 0 if the value should be sign-extended.  */
4708
4709 tree
4710 get_narrower (op, unsignedp_ptr)
4711      register tree op;
4712      int *unsignedp_ptr;
4713 {
4714   register int uns = 0;
4715   int first = 1;
4716   register tree win = op;
4717
4718   while (TREE_CODE (op) == NOP_EXPR)
4719     {
4720       register int bitschange
4721         = (TYPE_PRECISION (TREE_TYPE (op))
4722            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
4723
4724       /* Truncations are many-one so cannot be removed.  */
4725       if (bitschange < 0)
4726         break;
4727
4728       /* See what's inside this conversion.  If we decide to strip it,
4729          we will set WIN.  */
4730       op = TREE_OPERAND (op, 0);
4731
4732       if (bitschange > 0)
4733         {
4734           /* An extension: the outermost one can be stripped,
4735              but remember whether it is zero or sign extension.  */
4736           if (first)
4737             uns = TREE_UNSIGNED (TREE_TYPE (op));
4738           /* Otherwise, if a sign extension has been stripped,
4739              only sign extensions can now be stripped;
4740              if a zero extension has been stripped, only zero-extensions.  */
4741           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4742             break;
4743           first = 0;
4744         }
4745       else /* bitschange == 0 */
4746         {
4747           /* A change in nominal type can always be stripped, but we must
4748              preserve the unsignedness.  */
4749           if (first)
4750             uns = TREE_UNSIGNED (TREE_TYPE (op));
4751           first = 0;
4752         }
4753
4754       win = op;
4755     }
4756
4757   if (TREE_CODE (op) == COMPONENT_REF
4758       /* Since type_for_size always gives an integer type.  */
4759       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE)
4760     {
4761       unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1)));
4762       tree type = type_for_size (innerprec, TREE_UNSIGNED (op));
4763
4764       /* We can get this structure field in a narrower type that fits it,
4765          but the resulting extension to its nominal type (a fullword type)
4766          must satisfy the same conditions as for other extensions.
4767
4768          Do this only for fields that are aligned (not bit-fields),
4769          because when bit-field insns will be used there is no
4770          advantage in doing this.  */
4771
4772       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4773           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4774           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4775           && type != 0)
4776         {
4777           if (first)
4778             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4779           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4780                        TREE_OPERAND (op, 1));
4781           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4782           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4783           TREE_RAISES (win) = TREE_RAISES (op);
4784         }
4785     }
4786   *unsignedp_ptr = uns;
4787   return win;
4788 }
4789 \f
4790 /* Nonzero if integer constant C has a value that is permissible
4791    for type TYPE (an INTEGER_TYPE).  */
4792
4793 int
4794 int_fits_type_p (c, type)
4795      tree c, type;
4796 {
4797   if (TREE_UNSIGNED (type))
4798     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4799                && INT_CST_LT_UNSIGNED (TYPE_MAX_VALUE (type), c))
4800             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4801                   && INT_CST_LT_UNSIGNED (c, TYPE_MIN_VALUE (type)))
4802             /* Negative ints never fit unsigned types.  */
4803             && ! (TREE_INT_CST_HIGH (c) < 0
4804                   && ! TREE_UNSIGNED (TREE_TYPE (c))));
4805   else
4806     return (! (TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST
4807                && INT_CST_LT (TYPE_MAX_VALUE (type), c))
4808             && ! (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST
4809                   && INT_CST_LT (c, TYPE_MIN_VALUE (type)))
4810             /* Unsigned ints with top bit set never fit signed types.  */
4811             && ! (TREE_INT_CST_HIGH (c) < 0
4812                   && TREE_UNSIGNED (TREE_TYPE (c))));
4813 }
4814
4815 /* Given a DECL or TYPE, return the scope in which it was declared, or
4816    NUL_TREE if there is no containing scope.  */
4817
4818 tree
4819 get_containing_scope (t)
4820      tree t;
4821 {
4822   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
4823 }
4824
4825 /* Return the innermost context enclosing DECL that is
4826    a FUNCTION_DECL, or zero if none.  */
4827
4828 tree
4829 decl_function_context (decl)
4830      tree decl;
4831 {
4832   tree context;
4833
4834   if (TREE_CODE (decl) == ERROR_MARK)
4835     return 0;
4836
4837   if (TREE_CODE (decl) == SAVE_EXPR)
4838     context = SAVE_EXPR_CONTEXT (decl);
4839   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
4840      where we look up the function at runtime.  Such functions always take
4841      a first argument of type 'pointer to real context'.
4842
4843      C++ should really be fixed to use DECL_CONTEXT for the real context,
4844      and use something else for the "virtual context".  */
4845   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
4846     context = TYPE_MAIN_VARIANT
4847       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4848   else
4849     context = DECL_CONTEXT (decl);
4850
4851   while (context && TREE_CODE (context) != FUNCTION_DECL)
4852     {
4853       if (TREE_CODE (context) == BLOCK)
4854         context = BLOCK_SUPERCONTEXT (context);
4855       else 
4856         context = get_containing_scope (context);
4857     }
4858
4859   return context;
4860 }
4861
4862 /* Return the innermost context enclosing DECL that is
4863    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4864    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
4865
4866 tree
4867 decl_type_context (decl)
4868      tree decl;
4869 {
4870   tree context = DECL_CONTEXT (decl);
4871
4872   while (context)
4873     {
4874       if (TREE_CODE (context) == RECORD_TYPE
4875           || TREE_CODE (context) == UNION_TYPE
4876           || TREE_CODE (context) == QUAL_UNION_TYPE)
4877         return context;
4878
4879       if (TREE_CODE (context) == TYPE_DECL
4880           || TREE_CODE (context) == FUNCTION_DECL)
4881         context = DECL_CONTEXT (context);
4882
4883       else if (TREE_CODE (context) == BLOCK)
4884         context = BLOCK_SUPERCONTEXT (context);
4885
4886       else
4887         /* Unhandled CONTEXT!?  */
4888         abort ();
4889     }
4890   return NULL_TREE;
4891 }
4892
4893 /* CALL is a CALL_EXPR.  Return the declaration for the function
4894    called, or NULL_TREE if the called function cannot be 
4895    determined.  */
4896
4897 tree
4898 get_callee_fndecl (call)
4899      tree call;
4900 {
4901   tree addr;
4902
4903   /* It's invalid to call this function with anything but a
4904      CALL_EXPR.  */
4905   if (TREE_CODE (call) != CALL_EXPR)
4906     abort ();
4907
4908   /* The first operand to the CALL is the address of the function
4909      called.  */
4910   addr = TREE_OPERAND (call, 0);
4911
4912   /* If the address is just `&f' for some function `f', then we know
4913      that `f' is being called.  */
4914   if (TREE_CODE (addr) == ADDR_EXPR
4915       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
4916     return TREE_OPERAND (addr, 0);
4917
4918   /* We couldn't figure out what was being called.  */
4919   return NULL_TREE;
4920 }
4921
4922 /* Print debugging information about the obstack O, named STR.  */
4923
4924 void
4925 print_obstack_statistics (str, o)
4926      const char *str;
4927      struct obstack *o;
4928 {
4929   struct _obstack_chunk *chunk = o->chunk;
4930   int n_chunks = 1;
4931   int n_alloc = 0;
4932
4933   n_alloc += o->next_free - chunk->contents;
4934   chunk = chunk->prev;
4935   while (chunk)
4936     {
4937       n_chunks += 1;
4938       n_alloc += chunk->limit - &chunk->contents[0];
4939       chunk = chunk->prev;
4940     }
4941   fprintf (stderr, "obstack %s: %u bytes, %d chunks\n",
4942            str, n_alloc, n_chunks);
4943 }
4944
4945 /* Print debugging information about tree nodes generated during the compile,
4946    and any language-specific information.  */
4947
4948 void
4949 dump_tree_statistics ()
4950 {
4951 #ifdef GATHER_STATISTICS
4952   int i;
4953   int total_nodes, total_bytes;
4954 #endif
4955
4956   fprintf (stderr, "\n??? tree nodes created\n\n");
4957 #ifdef GATHER_STATISTICS
4958   fprintf (stderr, "Kind                  Nodes     Bytes\n");
4959   fprintf (stderr, "-------------------------------------\n");
4960   total_nodes = total_bytes = 0;
4961   for (i = 0; i < (int) all_kinds; i++)
4962     {
4963       fprintf (stderr, "%-20s %6d %9d\n", tree_node_kind_names[i],
4964                tree_node_counts[i], tree_node_sizes[i]);
4965       total_nodes += tree_node_counts[i];
4966       total_bytes += tree_node_sizes[i];
4967     }
4968   fprintf (stderr, "%-20s        %9d\n", "identifier names", id_string_size);
4969   fprintf (stderr, "-------------------------------------\n");
4970   fprintf (stderr, "%-20s %6d %9d\n", "Total", total_nodes, total_bytes);
4971   fprintf (stderr, "-------------------------------------\n");
4972 #else
4973   fprintf (stderr, "(No per-node statistics)\n");
4974 #endif
4975   print_obstack_statistics ("permanent_obstack", &permanent_obstack);
4976   print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack);
4977   print_obstack_statistics ("temporary_obstack", &temporary_obstack);
4978   print_obstack_statistics ("momentary_obstack", &momentary_obstack);
4979   print_obstack_statistics ("temp_decl_obstack", &temp_decl_obstack);
4980   print_lang_statistics ();
4981 }
4982 \f
4983 #define FILE_FUNCTION_PREFIX_LEN 9
4984
4985 #ifndef NO_DOLLAR_IN_LABEL
4986 #define FILE_FUNCTION_FORMAT "_GLOBAL_$%s$%s"
4987 #else /* NO_DOLLAR_IN_LABEL */
4988 #ifndef NO_DOT_IN_LABEL
4989 #define FILE_FUNCTION_FORMAT "_GLOBAL_.%s.%s"
4990 #else /* NO_DOT_IN_LABEL */
4991 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4992 #endif  /* NO_DOT_IN_LABEL */
4993 #endif  /* NO_DOLLAR_IN_LABEL */
4994
4995 extern char *first_global_object_name;
4996 extern char *weak_global_object_name;
4997
4998 /* Appends 6 random characters to TEMPLATE to (hopefully) avoid name
4999    clashes in cases where we can't reliably choose a unique name.
5000
5001    Derived from mkstemp.c in libiberty.  */
5002
5003 static void
5004 append_random_chars (template)
5005      char *template;
5006 {
5007   static const char letters[]
5008     = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
5009   static unsigned HOST_WIDE_INT value;
5010   unsigned HOST_WIDE_INT v;
5011
5012 #ifdef HAVE_GETTIMEOFDAY
5013   struct timeval tv;
5014 #endif
5015
5016   template += strlen (template);
5017
5018 #ifdef HAVE_GETTIMEOFDAY
5019   /* Get some more or less random data.  */
5020   gettimeofday (&tv, NULL);
5021   value += ((unsigned HOST_WIDE_INT) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
5022 #else
5023   value += getpid ();
5024 #endif
5025
5026   v = value;
5027
5028   /* Fill in the random bits.  */
5029   template[0] = letters[v % 62];
5030   v /= 62;
5031   template[1] = letters[v % 62];
5032   v /= 62;
5033   template[2] = letters[v % 62];
5034   v /= 62;
5035   template[3] = letters[v % 62];
5036   v /= 62;
5037   template[4] = letters[v % 62];
5038   v /= 62;
5039   template[5] = letters[v % 62];
5040
5041   template[6] = '\0';
5042 }
5043
5044 /* Generate a name for a function unique to this translation unit.
5045    TYPE is some string to identify the purpose of this function to the
5046    linker or collect2.  */
5047
5048 tree
5049 get_file_function_name_long (type)
5050      const char *type;
5051 {
5052   char *buf;
5053   register char *p;
5054
5055   if (first_global_object_name)
5056     p = first_global_object_name;
5057   else
5058     {
5059       /* We don't have anything that we know to be unique to this translation
5060          unit, so use what we do have and throw in some randomness.  */
5061
5062       const char *name = weak_global_object_name;
5063       const char *file = main_input_filename;
5064
5065       if (! name)
5066         name = "";
5067       if (! file)
5068         file = input_filename;
5069
5070       p = (char *) alloca (7 + strlen (name) + strlen (file));
5071
5072       sprintf (p, "%s%s", name, file);
5073       append_random_chars (p);
5074     }
5075
5076   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
5077                          + strlen (type));
5078
5079   /* Set up the name of the file-level functions we may need. 
5080      Use a global object (which is already required to be unique over
5081      the program) rather than the file name (which imposes extra
5082      constraints).  */
5083   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
5084
5085   /* Don't need to pull weird characters out of global names.  */
5086   if (p != first_global_object_name)
5087     {
5088       for (p = buf+11; *p; p++)
5089         if (! ( ISDIGIT(*p)
5090 #if 0 /* we always want labels, which are valid C++ identifiers (+ `$') */
5091 #ifndef ASM_IDENTIFY_GCC        /* this is required if `.' is invalid -- k. raeburn */
5092                || *p == '.'
5093 #endif
5094 #endif
5095 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5096                || *p == '$'
5097 #endif
5098 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5099                || *p == '.'
5100 #endif
5101                || ISUPPER(*p)
5102                || ISLOWER(*p)))
5103           *p = '_';
5104     }
5105
5106   return get_identifier (buf);
5107 }
5108
5109 /* If KIND=='I', return a suitable global initializer (constructor) name.
5110    If KIND=='D', return a suitable global clean-up (destructor) name.  */
5111
5112 tree
5113 get_file_function_name (kind)
5114      int kind;
5115 {
5116   char p[2];
5117
5118   p[0] = kind;
5119   p[1] = 0;
5120
5121   return get_file_function_name_long (p);
5122 }
5123 \f
5124 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5125    The result is placed in BUFFER (which has length BIT_SIZE),
5126    with one bit in each char ('\000' or '\001').
5127
5128    If the constructor is constant, NULL_TREE is returned.
5129    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5130
5131 tree
5132 get_set_constructor_bits (init, buffer, bit_size)
5133      tree init;
5134      char *buffer;
5135      int bit_size;
5136 {
5137   int i;
5138   tree vals;
5139   HOST_WIDE_INT domain_min
5140     = TREE_INT_CST_LOW (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))));
5141   tree non_const_bits = NULL_TREE;
5142   for (i = 0; i < bit_size; i++)
5143     buffer[i] = 0;
5144
5145   for (vals = TREE_OPERAND (init, 1); 
5146        vals != NULL_TREE; vals = TREE_CHAIN (vals))
5147     {
5148       if (TREE_CODE (TREE_VALUE (vals)) != INTEGER_CST
5149           || (TREE_PURPOSE (vals) != NULL_TREE
5150               && TREE_CODE (TREE_PURPOSE (vals)) != INTEGER_CST))
5151         non_const_bits
5152           = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
5153       else if (TREE_PURPOSE (vals) != NULL_TREE)
5154         {
5155           /* Set a range of bits to ones.  */
5156           HOST_WIDE_INT lo_index
5157             = TREE_INT_CST_LOW (TREE_PURPOSE (vals)) - domain_min;
5158           HOST_WIDE_INT hi_index
5159             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5160           if (lo_index < 0 || lo_index >= bit_size
5161             || hi_index < 0 || hi_index >= bit_size)
5162             abort ();
5163           for ( ; lo_index <= hi_index; lo_index++)
5164             buffer[lo_index] = 1;
5165         }
5166       else
5167         {
5168           /* Set a single bit to one.  */
5169           HOST_WIDE_INT index
5170             = TREE_INT_CST_LOW (TREE_VALUE (vals)) - domain_min;
5171           if (index < 0 || index >= bit_size)
5172             {
5173               error ("invalid initializer for bit string");
5174               return NULL_TREE;
5175             }
5176           buffer[index] = 1;
5177         }
5178     }
5179   return non_const_bits;
5180 }
5181
5182 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
5183    The result is placed in BUFFER (which is an array of bytes).
5184    If the constructor is constant, NULL_TREE is returned.
5185    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
5186
5187 tree
5188 get_set_constructor_bytes (init, buffer, wd_size)
5189      tree init;
5190      unsigned char *buffer;
5191      int wd_size;
5192 {
5193   int i;
5194   int set_word_size = BITS_PER_UNIT;
5195   int bit_size = wd_size * set_word_size;
5196   int bit_pos = 0;
5197   unsigned char *bytep = buffer;
5198   char *bit_buffer = (char *) alloca(bit_size);
5199   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
5200
5201   for (i = 0; i < wd_size; i++)
5202     buffer[i] = 0;
5203
5204   for (i = 0; i < bit_size; i++)
5205     {
5206       if (bit_buffer[i])
5207         {
5208           if (BYTES_BIG_ENDIAN)
5209             *bytep |= (1 << (set_word_size - 1 - bit_pos));
5210           else
5211             *bytep |= 1 << bit_pos;
5212         }
5213       bit_pos++;
5214       if (bit_pos >= set_word_size)
5215         bit_pos = 0, bytep++;
5216     }
5217   return non_const_bits;
5218 }
5219 \f
5220 #if defined ENABLE_CHECKING && (GCC_VERSION >= 2007)
5221 /* Complain that the tree code of NODE does not match the expected CODE.
5222    FILE, LINE, and FUNCTION are of the caller.  */
5223 void
5224 tree_check_failed (node, code, file, line, function)
5225      const tree node;
5226      enum tree_code code;
5227      const char *file;
5228      int line;
5229      const char *function;
5230 {
5231   error ("Tree check: expected %s, have %s",
5232          tree_code_name[code], tree_code_name[TREE_CODE (node)]);
5233   fancy_abort (file, line, function);
5234 }
5235
5236 /* Similar to above, except that we check for a class of tree
5237    code, given in CL.  */
5238 void
5239 tree_class_check_failed (node, cl, file, line, function)
5240      const tree node;
5241      char cl;
5242      const char *file;
5243      int line;
5244      const char *function;
5245 {
5246   error ("Tree check: expected class '%c', have '%c' (%s)",
5247          cl, TREE_CODE_CLASS (TREE_CODE (node)),
5248          tree_code_name[TREE_CODE (node)]);
5249   fancy_abort (file, line, function);
5250 }
5251
5252 #endif /* ENABLE_CHECKING */
5253
5254 /* Return the alias set for T, which may be either a type or an
5255    expression.  */
5256
5257 int
5258 get_alias_set (t)
5259      tree t;
5260 {
5261   if (! flag_strict_aliasing || lang_get_alias_set == 0)
5262     /* If we're not doing any lanaguage-specific alias analysis, just
5263        assume everything aliases everything else.  */
5264     return 0;
5265   else
5266     return (*lang_get_alias_set) (t);
5267 }
5268
5269 /* Return a brand-new alias set.  */
5270
5271 int
5272 new_alias_set ()
5273 {
5274   static int last_alias_set;
5275
5276   if (flag_strict_aliasing)
5277     return ++last_alias_set;
5278   else
5279     return 0;
5280 }
5281 \f
5282 #ifndef CHAR_TYPE_SIZE
5283 #define CHAR_TYPE_SIZE BITS_PER_UNIT
5284 #endif
5285
5286 #ifndef SHORT_TYPE_SIZE
5287 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
5288 #endif
5289
5290 #ifndef INT_TYPE_SIZE
5291 #define INT_TYPE_SIZE BITS_PER_WORD
5292 #endif
5293
5294 #ifndef LONG_TYPE_SIZE
5295 #define LONG_TYPE_SIZE BITS_PER_WORD
5296 #endif
5297
5298 #ifndef LONG_LONG_TYPE_SIZE
5299 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
5300 #endif
5301
5302 #ifndef FLOAT_TYPE_SIZE
5303 #define FLOAT_TYPE_SIZE BITS_PER_WORD
5304 #endif
5305
5306 #ifndef DOUBLE_TYPE_SIZE
5307 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5308 #endif
5309
5310 #ifndef LONG_DOUBLE_TYPE_SIZE
5311 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
5312 #endif
5313
5314 /* Create nodes for all integer types (and error_mark_node) using the sizes
5315    of C datatypes.  The caller should call set_sizetype soon after calling
5316    this function to select one of the types as sizetype.  */
5317    
5318 void
5319 build_common_tree_nodes (signed_char)
5320      int signed_char;
5321 {
5322   error_mark_node = make_node (ERROR_MARK);
5323   TREE_TYPE (error_mark_node) = error_mark_node;
5324
5325   /* Define both `signed char' and `unsigned char'.  */
5326   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5327   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5328
5329   /* Define `char', which is like either `signed char' or `unsigned char'
5330      but not the same as either.  */
5331   char_type_node
5332     = (signed_char
5333        ? make_signed_type (CHAR_TYPE_SIZE)
5334        : make_unsigned_type (CHAR_TYPE_SIZE));
5335
5336   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5337   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5338   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5339   /* Define an unsigned integer first.  make_unsigned_type and make_signed_type
5340      both call set_sizetype for the first type that we create, and we want this
5341      to be large enough to hold the sizes of various types until we switch to
5342      the real sizetype.  */
5343   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5344   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5345   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5346   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5347   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5348
5349   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
5350   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
5351   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
5352   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
5353   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
5354
5355   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
5356   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
5357   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
5358   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
5359   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
5360 }
5361
5362 /* For type TYPE, fill in the proper type for TYPE_SIZE and TYPE_SIZE_UNIT.  */
5363
5364 static void
5365 fix_sizetype (type)
5366      tree type;
5367 {
5368   TREE_TYPE (TYPE_SIZE (type)) = bitsizetype;
5369   TREE_TYPE (TYPE_SIZE_UNIT (type)) = sizetype;
5370 }
5371
5372 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5373    It will fix the previously made nodes to have proper references to
5374    sizetype, and it will create several other common tree nodes.  */
5375
5376 void
5377 build_common_tree_nodes_2 (short_double)
5378      int short_double;
5379 {
5380   fix_sizetype (signed_char_type_node);
5381   fix_sizetype (unsigned_char_type_node);
5382   fix_sizetype (char_type_node);
5383   fix_sizetype (short_integer_type_node);
5384   fix_sizetype (short_unsigned_type_node);
5385   fix_sizetype (integer_type_node);
5386   fix_sizetype (unsigned_type_node);
5387   fix_sizetype (long_unsigned_type_node);
5388   fix_sizetype (long_integer_type_node);
5389   fix_sizetype (long_long_integer_type_node);
5390   fix_sizetype (long_long_unsigned_type_node);
5391
5392   fix_sizetype (intQI_type_node);
5393   fix_sizetype (intHI_type_node);
5394   fix_sizetype (intSI_type_node);
5395   fix_sizetype (intDI_type_node);
5396   fix_sizetype (intTI_type_node);
5397   fix_sizetype (unsigned_intQI_type_node);
5398   fix_sizetype (unsigned_intHI_type_node);
5399   fix_sizetype (unsigned_intSI_type_node);
5400   fix_sizetype (unsigned_intDI_type_node);
5401   fix_sizetype (unsigned_intTI_type_node);
5402
5403   integer_zero_node = build_int_2 (0, 0);
5404   TREE_TYPE (integer_zero_node) = integer_type_node;
5405   integer_one_node = build_int_2 (1, 0);
5406   TREE_TYPE (integer_one_node) = integer_type_node;
5407
5408   size_zero_node = build_int_2 (0, 0);
5409   TREE_TYPE (size_zero_node) = sizetype;
5410   size_one_node = build_int_2 (1, 0);
5411   TREE_TYPE (size_one_node) = sizetype;
5412
5413   void_type_node = make_node (VOID_TYPE);
5414   layout_type (void_type_node); /* Uses size_zero_node */
5415
5416   /* We are not going to have real types in C with less than byte alignment,
5417      so we might as well not have any types that claim to have it.  */
5418   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5419
5420   null_pointer_node = build_int_2 (0, 0);
5421   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
5422   layout_type (TREE_TYPE (null_pointer_node));
5423
5424   ptr_type_node = build_pointer_type (void_type_node);
5425   const_ptr_type_node
5426     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5427
5428   float_type_node = make_node (REAL_TYPE);
5429   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5430   layout_type (float_type_node);
5431
5432   double_type_node = make_node (REAL_TYPE);
5433   if (short_double)
5434     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5435   else
5436     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5437   layout_type (double_type_node);
5438
5439   long_double_type_node = make_node (REAL_TYPE);
5440   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5441   layout_type (long_double_type_node);
5442
5443   complex_integer_type_node = make_node (COMPLEX_TYPE);
5444   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5445   layout_type (complex_integer_type_node);
5446
5447   complex_float_type_node = make_node (COMPLEX_TYPE);
5448   TREE_TYPE (complex_float_type_node) = float_type_node;
5449   layout_type (complex_float_type_node);
5450
5451   complex_double_type_node = make_node (COMPLEX_TYPE);
5452   TREE_TYPE (complex_double_type_node) = double_type_node;
5453   layout_type (complex_double_type_node);
5454
5455   complex_long_double_type_node = make_node (COMPLEX_TYPE);
5456   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5457   layout_type (complex_long_double_type_node);
5458
5459 #ifdef BUILD_VA_LIST_TYPE
5460   BUILD_VA_LIST_TYPE(va_list_type_node);
5461 #else
5462   va_list_type_node = ptr_type_node;
5463 #endif
5464 }