OSDN Git Service

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