OSDN Git Service

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