OSDN Git Service

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