OSDN Git Service

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