OSDN Git Service

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