OSDN Git Service

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