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