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