OSDN Git Service

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