OSDN Git Service

* tree.c (get_unwidened): Reorder conditions so that the null pointer
[pf3gnuchains/gcc-fork.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 /* This file contains the low level primitives for operating on tree nodes,
23    including allocation, list operations, interning of identifiers,
24    construction of data type nodes and statement nodes,
25    and construction of type conversion nodes.  It also contains
26    tables index by tree code that describe how to take apart
27    nodes of that code.
28
29    It is intended to be language-independent, but occasionally
30    calls language-dependent routines defined (for C) in typecheck.c.  */
31
32 #include "config.h"
33 #include "system.h"
34 #include "coretypes.h"
35 #include "tm.h"
36 #include "flags.h"
37 #include "tree.h"
38 #include "real.h"
39 #include "tm_p.h"
40 #include "function.h"
41 #include "obstack.h"
42 #include "toplev.h"
43 #include "ggc.h"
44 #include "hashtab.h"
45 #include "output.h"
46 #include "target.h"
47 #include "langhooks.h"
48
49 /* obstack.[ch] explicitly declined to prototype this.  */
50 extern int _obstack_allocated_p (struct obstack *h, void *obj);
51
52 #ifdef GATHER_STATISTICS
53 /* Statistics-gathering stuff.  */
54
55 int tree_node_counts[(int) all_kinds];
56 int tree_node_sizes[(int) all_kinds];
57
58 /* Keep in sync with tree.h:enum tree_node_kind.  */
59 static const char * const tree_node_kind_names[] = {
60   "decls",
61   "types",
62   "blocks",
63   "stmts",
64   "refs",
65   "exprs",
66   "constants",
67   "identifiers",
68   "perm_tree_lists",
69   "temp_tree_lists",
70   "vecs",
71   "random kinds",
72   "lang_decl kinds",
73   "lang_type kinds"
74 };
75 #endif /* GATHER_STATISTICS */
76
77 /* Unique id for next decl created.  */
78 static GTY(()) int next_decl_uid;
79 /* Unique id for next type created.  */
80 static GTY(()) int next_type_uid = 1;
81
82 /* Since we cannot rehash a type after it is in the table, we have to
83    keep the hash code.  */
84
85 struct type_hash GTY(())
86 {
87   unsigned long hash;
88   tree type;
89 };
90
91 /* Initial size of the hash table (rounded to next prime).  */
92 #define TYPE_HASH_INITIAL_SIZE 1000
93
94 /* Now here is the hash table.  When recording a type, it is added to
95    the slot whose index is the hash code.  Note that the hash table is
96    used for several kinds of types (function types, array types and
97    array index range types, for now).  While all these live in the
98    same table, they are completely independent, and the hash code is
99    computed differently for each of these.  */
100
101 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
102      htab_t type_hash_table;
103
104 static void set_type_quals (tree, int);
105 static int type_hash_eq (const void *, const void *);
106 static hashval_t type_hash_hash (const void *);
107 static void print_type_hash_statistics (void);
108 static void finish_vector_type (tree);
109 static tree make_vector (enum machine_mode, tree, int);
110 static int type_hash_marked_p (const void *);
111
112 tree global_trees[TI_MAX];
113 tree integer_types[itk_none];
114 \f
115 /* Init tree.c.  */
116
117 void
118 init_ttree (void)
119 {
120   /* Initialize the hash table of types.  */
121   type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
122                                      type_hash_eq, 0);
123 }
124
125 \f
126 /* The name of the object as the assembler will see it (but before any
127    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
128    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
129 tree
130 decl_assembler_name (tree decl)
131 {
132   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
133     (*lang_hooks.set_decl_assembler_name) (decl);
134   return DECL_CHECK (decl)->decl.assembler_name;
135 }
136
137 /* Compute the number of bytes occupied by 'node'.  This routine only
138    looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH.  */
139 size_t
140 tree_size (tree node)
141 {
142   enum tree_code code = TREE_CODE (node);
143
144   switch (TREE_CODE_CLASS (code))
145     {
146     case 'd':  /* A decl node */
147       return sizeof (struct tree_decl);
148
149     case 't':  /* a type node */
150       return sizeof (struct tree_type);
151
152     case 'b':  /* a lexical block node */
153       return sizeof (struct tree_block);
154
155     case 'r':  /* a reference */
156     case 'e':  /* an expression */
157     case 's':  /* an expression with side effects */
158     case '<':  /* a comparison expression */
159     case '1':  /* a unary arithmetic expression */
160     case '2':  /* a binary arithmetic expression */
161       return (sizeof (struct tree_exp)
162               + TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
163
164     case 'c':  /* a constant */
165       switch (code)
166         {
167         case INTEGER_CST:       return sizeof (struct tree_int_cst);
168         case REAL_CST:          return sizeof (struct tree_real_cst);
169         case COMPLEX_CST:       return sizeof (struct tree_complex);
170         case VECTOR_CST:        return sizeof (struct tree_vector);
171         case STRING_CST:        return sizeof (struct tree_string);
172         default:
173           return (*lang_hooks.tree_size) (code);
174         }
175
176     case 'x':  /* something random, like an identifier.  */
177       switch (code)
178         {
179         case IDENTIFIER_NODE:   return lang_hooks.identifier_size;
180         case TREE_LIST:         return sizeof (struct tree_list);
181         case TREE_VEC:          return (sizeof (struct tree_vec)
182                                         + TREE_VEC_LENGTH(node) * sizeof(char *)
183                                         - sizeof (char *));
184
185         case ERROR_MARK:
186         case PLACEHOLDER_EXPR:  return sizeof (struct tree_common);
187
188         default:
189           return (*lang_hooks.tree_size) (code);
190         }
191
192     default:
193       abort ();
194     }
195 }
196
197 /* Return a newly allocated node of code CODE.
198    For decl and type nodes, some other fields are initialized.
199    The rest of the node is initialized to zero.
200
201    Achoo!  I got a code in the node.  */
202
203 tree
204 make_node (enum tree_code code)
205 {
206   tree t;
207   int type = TREE_CODE_CLASS (code);
208   size_t length;
209 #ifdef GATHER_STATISTICS
210   tree_node_kind kind;
211 #endif
212   struct tree_common ttmp;
213
214   /* We can't allocate a TREE_VEC without knowing how many elements
215      it will have.  */
216   if (code == TREE_VEC)
217     abort ();
218
219   TREE_SET_CODE ((tree)&ttmp, code);
220   length = tree_size ((tree)&ttmp);
221
222 #ifdef GATHER_STATISTICS
223   switch (type)
224     {
225     case 'd':  /* A decl node */
226       kind = d_kind;
227       break;
228
229     case 't':  /* a type node */
230       kind = t_kind;
231       break;
232
233     case 'b':  /* a lexical block */
234       kind = b_kind;
235       break;
236
237     case 's':  /* an expression with side effects */
238       kind = s_kind;
239       break;
240
241     case 'r':  /* a reference */
242       kind = r_kind;
243       break;
244
245     case 'e':  /* an expression */
246     case '<':  /* a comparison expression */
247     case '1':  /* a unary arithmetic expression */
248     case '2':  /* a binary arithmetic expression */
249       kind = e_kind;
250       break;
251
252     case 'c':  /* a constant */
253       kind = c_kind;
254       break;
255
256     case 'x':  /* something random, like an identifier.  */
257       if (code == IDENTIFIER_NODE)
258         kind = id_kind;
259       else if (code == TREE_VEC)
260         kind = vec_kind;
261       else
262         kind = x_kind;
263       break;
264
265     default:
266       abort ();
267     }
268
269   tree_node_counts[(int) kind]++;
270   tree_node_sizes[(int) kind] += length;
271 #endif
272
273   t = ggc_alloc_tree (length);
274
275   memset (t, 0, length);
276
277   TREE_SET_CODE (t, code);
278
279   switch (type)
280     {
281     case 's':
282       TREE_SIDE_EFFECTS (t) = 1;
283       break;
284
285     case 'd':
286       if (code != FUNCTION_DECL)
287         DECL_ALIGN (t) = 1;
288       DECL_USER_ALIGN (t) = 0;
289       DECL_IN_SYSTEM_HEADER (t) = in_system_header;
290       DECL_SOURCE_LOCATION (t) = input_location;
291       DECL_UID (t) = next_decl_uid++;
292
293       /* We have not yet computed the alias set for this declaration.  */
294       DECL_POINTER_ALIAS_SET (t) = -1;
295       break;
296
297     case 't':
298       TYPE_UID (t) = next_type_uid++;
299       TYPE_ALIGN (t) = char_type_node ? TYPE_ALIGN (char_type_node) : 0;
300       TYPE_USER_ALIGN (t) = 0;
301       TYPE_MAIN_VARIANT (t) = t;
302
303       /* Default to no attributes for type, but let target change that.  */
304       TYPE_ATTRIBUTES (t) = NULL_TREE;
305       (*targetm.set_default_type_attributes) (t);
306
307       /* We have not yet computed the alias set for this type.  */
308       TYPE_ALIAS_SET (t) = -1;
309       break;
310
311     case 'c':
312       TREE_CONSTANT (t) = 1;
313       break;
314
315     case 'e':
316       switch (code)
317         {
318         case INIT_EXPR:
319         case MODIFY_EXPR:
320         case VA_ARG_EXPR:
321         case RTL_EXPR:
322         case PREDECREMENT_EXPR:
323         case PREINCREMENT_EXPR:
324         case POSTDECREMENT_EXPR:
325         case POSTINCREMENT_EXPR:
326           /* All of these have side-effects, no matter what their
327              operands are.  */
328           TREE_SIDE_EFFECTS (t) = 1;
329           break;
330
331         default:
332           break;
333         }
334       break;
335     }
336
337   return t;
338 }
339 \f
340 /* Return a new node with the same contents as NODE except that its
341    TREE_CHAIN is zero and it has a fresh uid.  */
342
343 tree
344 copy_node (tree node)
345 {
346   tree t;
347   enum tree_code code = TREE_CODE (node);
348   size_t length;
349
350   length = tree_size (node);
351   t = ggc_alloc_tree (length);
352   memcpy (t, node, length);
353
354   TREE_CHAIN (t) = 0;
355   TREE_ASM_WRITTEN (t) = 0;
356
357   if (TREE_CODE_CLASS (code) == 'd')
358     DECL_UID (t) = next_decl_uid++;
359   else if (TREE_CODE_CLASS (code) == 't')
360     {
361       TYPE_UID (t) = next_type_uid++;
362       /* The following is so that the debug code for
363          the copy is different from the original type.
364          The two statements usually duplicate each other
365          (because they clear fields of the same union),
366          but the optimizer should catch that.  */
367       TYPE_SYMTAB_POINTER (t) = 0;
368       TYPE_SYMTAB_ADDRESS (t) = 0;
369     }
370
371   return t;
372 }
373
374 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
375    For example, this can copy a list made of TREE_LIST nodes.  */
376
377 tree
378 copy_list (tree list)
379 {
380   tree head;
381   tree prev, next;
382
383   if (list == 0)
384     return 0;
385
386   head = prev = copy_node (list);
387   next = TREE_CHAIN (list);
388   while (next)
389     {
390       TREE_CHAIN (prev) = copy_node (next);
391       prev = TREE_CHAIN (prev);
392       next = TREE_CHAIN (next);
393     }
394   return head;
395 }
396
397 \f
398 /* Return a newly constructed INTEGER_CST node whose constant value
399    is specified by the two ints LOW and HI.
400    The TREE_TYPE is set to `int'.
401
402    This function should be used via the `build_int_2' macro.  */
403
404 tree
405 build_int_2_wide (unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
406 {
407   tree t = make_node (INTEGER_CST);
408
409   TREE_INT_CST_LOW (t) = low;
410   TREE_INT_CST_HIGH (t) = hi;
411   TREE_TYPE (t) = integer_type_node;
412   return t;
413 }
414
415 /* Return a new VECTOR_CST node whose type is TYPE and whose values
416    are in a list pointed by VALS.  */
417
418 tree
419 build_vector (tree type, tree vals)
420 {
421   tree v = make_node (VECTOR_CST);
422   int over1 = 0, over2 = 0;
423   tree link;
424
425   TREE_VECTOR_CST_ELTS (v) = vals;
426   TREE_TYPE (v) = type;
427
428   /* Iterate through elements and check for overflow.  */
429   for (link = vals; link; link = TREE_CHAIN (link))
430     {
431       tree value = TREE_VALUE (link);
432
433       over1 |= TREE_OVERFLOW (value);
434       over2 |= TREE_CONSTANT_OVERFLOW (value);
435     }
436
437   TREE_OVERFLOW (v) = over1;
438   TREE_CONSTANT_OVERFLOW (v) = over2;
439
440   return v;
441 }
442
443 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
444    are in a list pointed to by VALS.  */
445 tree
446 build_constructor (tree type, tree vals)
447 {
448   tree c = make_node (CONSTRUCTOR);
449   TREE_TYPE (c) = type;
450   CONSTRUCTOR_ELTS (c) = vals;
451
452   /* ??? May not be necessary.  Mirrors what build does.  */
453   if (vals)
454     {
455       TREE_SIDE_EFFECTS (c) = TREE_SIDE_EFFECTS (vals);
456       TREE_READONLY (c) = TREE_READONLY (vals);
457       TREE_CONSTANT (c) = TREE_CONSTANT (vals);
458     }
459   else
460     TREE_CONSTANT (c) = 0;  /* safe side */
461
462   return c;
463 }
464
465 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
466
467 tree
468 build_real (tree type, REAL_VALUE_TYPE d)
469 {
470   tree v;
471   REAL_VALUE_TYPE *dp;
472   int overflow = 0;
473
474   /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
475      Consider doing it via real_convert now.  */
476
477   v = make_node (REAL_CST);
478   dp = ggc_alloc (sizeof (REAL_VALUE_TYPE));
479   memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
480
481   TREE_TYPE (v) = type;
482   TREE_REAL_CST_PTR (v) = dp;
483   TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow;
484   return v;
485 }
486
487 /* Return a new REAL_CST node whose type is TYPE
488    and whose value is the integer value of the INTEGER_CST node I.  */
489
490 REAL_VALUE_TYPE
491 real_value_from_int_cst (tree type, 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       return 2;
1626
1627     case TREE_LIST:
1628       for (exp = expr; exp != 0; exp = TREE_CHAIN (exp))
1629         {
1630           tmp = unsafe_for_reeval (TREE_VALUE (exp));
1631           unsafeness = MAX (tmp, unsafeness);
1632         }
1633
1634       return unsafeness;
1635
1636     case CALL_EXPR:
1637       tmp2 = unsafe_for_reeval (TREE_OPERAND (expr, 0));
1638       tmp = unsafe_for_reeval (TREE_OPERAND (expr, 1));
1639       return MAX (MAX (tmp, 1), tmp2);
1640
1641     case TARGET_EXPR:
1642       unsafeness = 1;
1643       break;
1644
1645     default:
1646       tmp = (*lang_hooks.unsafe_for_reeval) (expr);
1647       if (tmp >= 0)
1648         return tmp;
1649       break;
1650     }
1651
1652   switch (TREE_CODE_CLASS (code))
1653     {
1654     case 'c':  /* a constant */
1655     case 't':  /* a type node */
1656     case 'x':  /* something random, like an identifier or an ERROR_MARK.  */
1657     case 'd':  /* A decl node */
1658     case 'b':  /* A block node */
1659       return 0;
1660
1661     case 'e':  /* an expression */
1662     case 'r':  /* a reference */
1663     case 's':  /* an expression with side effects */
1664     case '<':  /* a comparison expression */
1665     case '2':  /* a binary arithmetic expression */
1666     case '1':  /* a unary arithmetic expression */
1667       for (i = first_rtl - 1; i >= 0; i--)
1668         {
1669           tmp = unsafe_for_reeval (TREE_OPERAND (expr, i));
1670           unsafeness = MAX (tmp, unsafeness);
1671         }
1672
1673       return unsafeness;
1674
1675     default:
1676       return 2;
1677     }
1678 }
1679 \f
1680 /* Return 1 if EXP contains a PLACEHOLDER_EXPR; i.e., if it represents a size
1681    or offset that depends on a field within a record.  */
1682
1683 bool
1684 contains_placeholder_p (tree exp)
1685 {
1686   enum tree_code code;
1687   int result;
1688
1689   if (!exp)
1690     return 0;
1691
1692   /* If we have a WITH_RECORD_EXPR, it "cancels" any PLACEHOLDER_EXPR
1693      in it since it is supplying a value for it.  */
1694   code = TREE_CODE (exp);
1695   if (code == WITH_RECORD_EXPR)
1696     return 0;
1697   else if (code == PLACEHOLDER_EXPR)
1698     return 1;
1699
1700   switch (TREE_CODE_CLASS (code))
1701     {
1702     case 'r':
1703       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
1704          position computations since they will be converted into a
1705          WITH_RECORD_EXPR involving the reference, which will assume
1706          here will be valid.  */
1707       return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1708
1709     case 'x':
1710       if (code == TREE_LIST)
1711         return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
1712                 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
1713       break;
1714
1715     case '1':
1716     case '2':  case '<':
1717     case 'e':
1718       switch (code)
1719         {
1720         case COMPOUND_EXPR:
1721           /* Ignoring the first operand isn't quite right, but works best.  */
1722           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1723
1724         case RTL_EXPR:
1725         case CONSTRUCTOR:
1726           return 0;
1727
1728         case COND_EXPR:
1729           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1730                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
1731                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
1732
1733         case SAVE_EXPR:
1734           /* If we already know this doesn't have a placeholder, don't
1735              check again.  */
1736           if (SAVE_EXPR_NOPLACEHOLDER (exp) || SAVE_EXPR_RTL (exp) != 0)
1737             return 0;
1738
1739           SAVE_EXPR_NOPLACEHOLDER (exp) = 1;
1740           result = CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1741           if (result)
1742             SAVE_EXPR_NOPLACEHOLDER (exp) = 0;
1743
1744           return result;
1745
1746         case CALL_EXPR:
1747           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
1748
1749         default:
1750           break;
1751         }
1752
1753       switch (TREE_CODE_LENGTH (code))
1754         {
1755         case 1:
1756           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
1757         case 2:
1758           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
1759                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
1760         default:
1761           return 0;
1762         }
1763
1764     default:
1765       return 0;
1766     }
1767   return 0;
1768 }
1769
1770 /* Return 1 if any part of the computation of TYPE involves a PLACEHOLDER_EXPR.
1771    This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and field
1772    positions.  */
1773
1774 bool
1775 type_contains_placeholder_p (tree type)
1776 {
1777   /* If the size contains a placeholder or the parent type (component type in
1778      the case of arrays) type involves a placeholder, this type does.  */
1779   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
1780       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
1781       || (TREE_TYPE (type) != 0
1782           && type_contains_placeholder_p (TREE_TYPE (type))))
1783     return 1;
1784
1785   /* Now do type-specific checks.  Note that the last part of the check above
1786      greatly limits what we have to do below.  */
1787   switch (TREE_CODE (type))
1788     {
1789     case VOID_TYPE:
1790     case COMPLEX_TYPE:
1791     case VECTOR_TYPE:
1792     case ENUMERAL_TYPE:
1793     case BOOLEAN_TYPE:
1794     case CHAR_TYPE:
1795     case POINTER_TYPE:
1796     case OFFSET_TYPE:
1797     case REFERENCE_TYPE:
1798     case METHOD_TYPE:
1799     case FILE_TYPE:
1800     case FUNCTION_TYPE:
1801       return 0;
1802
1803     case INTEGER_TYPE:
1804     case REAL_TYPE:
1805       /* Here we just check the bounds.  */
1806       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
1807               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
1808
1809     case ARRAY_TYPE:
1810     case SET_TYPE:
1811       /* We're already checked the component type (TREE_TYPE), so just check
1812          the index type.  */
1813       return type_contains_placeholder_p (TYPE_DOMAIN (type));
1814
1815     case RECORD_TYPE:
1816     case UNION_TYPE:
1817     case QUAL_UNION_TYPE:
1818       {
1819         static tree seen_types = 0;
1820         tree field;
1821         bool ret = 0;
1822
1823         /* We have to be careful here that we don't end up in infinite
1824            recursions due to a field of a type being a pointer to that type
1825            or to a mutually-recursive type.  So we store a list of record
1826            types that we've seen and see if this type is in them.  To save
1827            memory, we don't use a list for just one type.  Here we check
1828            whether we've seen this type before and store it if not.  */
1829         if (seen_types == 0)
1830           seen_types = type;
1831         else if (TREE_CODE (seen_types) != TREE_LIST)
1832           {
1833             if (seen_types == type)
1834               return 0;
1835
1836             seen_types = tree_cons (NULL_TREE, type,
1837                                     build_tree_list (NULL_TREE, seen_types));
1838           }
1839         else
1840           {
1841             if (value_member (type, seen_types) != 0)
1842               return 0;
1843
1844             seen_types = tree_cons (NULL_TREE, type, seen_types);
1845           }
1846
1847         for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1848           if (TREE_CODE (field) == FIELD_DECL
1849               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
1850                   || (TREE_CODE (type) == QUAL_UNION_TYPE
1851                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
1852                   || type_contains_placeholder_p (TREE_TYPE (field))))
1853             {
1854               ret = true;
1855               break;
1856             }
1857
1858         /* Now remove us from seen_types and return the result.  */
1859         if (seen_types == type)
1860           seen_types = 0;
1861         else
1862           seen_types = TREE_CHAIN (seen_types);
1863
1864         return ret;
1865       }
1866
1867     default:
1868       abort ();
1869     }
1870 }
1871
1872 /* Return 1 if EXP contains any expressions that produce cleanups for an
1873    outer scope to deal with.  Used by fold.  */
1874
1875 int
1876 has_cleanups (tree exp)
1877 {
1878   int i, nops, cmp;
1879
1880   if (! TREE_SIDE_EFFECTS (exp))
1881     return 0;
1882
1883   switch (TREE_CODE (exp))
1884     {
1885     case TARGET_EXPR:
1886     case GOTO_SUBROUTINE_EXPR:
1887     case WITH_CLEANUP_EXPR:
1888       return 1;
1889
1890     case CLEANUP_POINT_EXPR:
1891       return 0;
1892
1893     case CALL_EXPR:
1894       for (exp = TREE_OPERAND (exp, 1); exp; exp = TREE_CHAIN (exp))
1895         {
1896           cmp = has_cleanups (TREE_VALUE (exp));
1897           if (cmp)
1898             return cmp;
1899         }
1900       return 0;
1901
1902     default:
1903       break;
1904     }
1905
1906   /* This general rule works for most tree codes.  All exceptions should be
1907      handled above.  If this is a language-specific tree code, we can't
1908      trust what might be in the operand, so say we don't know
1909      the situation.  */
1910   if ((int) TREE_CODE (exp) >= (int) LAST_AND_UNUSED_TREE_CODE)
1911     return -1;
1912
1913   nops = first_rtl_op (TREE_CODE (exp));
1914   for (i = 0; i < nops; i++)
1915     if (TREE_OPERAND (exp, i) != 0)
1916       {
1917         int type = TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (exp, i)));
1918         if (type == 'e' || type == '<' || type == '1' || type == '2'
1919             || type == 'r' || type == 's')
1920           {
1921             cmp = has_cleanups (TREE_OPERAND (exp, i));
1922             if (cmp)
1923               return cmp;
1924           }
1925       }
1926
1927   return 0;
1928 }
1929 \f
1930 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
1931    return a tree with all occurrences of references to F in a
1932    PLACEHOLDER_EXPR replaced by R.   Note that we assume here that EXP
1933    contains only arithmetic expressions or a CALL_EXPR with a
1934    PLACEHOLDER_EXPR occurring only in its arglist.  */
1935
1936 tree
1937 substitute_in_expr (tree exp, tree f, tree r)
1938 {
1939   enum tree_code code = TREE_CODE (exp);
1940   tree op0, op1, op2;
1941   tree new;
1942   tree inner;
1943
1944   switch (TREE_CODE_CLASS (code))
1945     {
1946     case 'c':
1947     case 'd':
1948       return exp;
1949
1950     case 'x':
1951       if (code == PLACEHOLDER_EXPR)
1952         return exp;
1953       else if (code == TREE_LIST)
1954         {
1955           op0 = (TREE_CHAIN (exp) == 0
1956                  ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r));
1957           op1 = substitute_in_expr (TREE_VALUE (exp), f, r);
1958           if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
1959             return exp;
1960
1961           return tree_cons (TREE_PURPOSE (exp), op1, op0);
1962         }
1963
1964       abort ();
1965
1966     case '1':
1967     case '2':
1968     case '<':
1969     case 'e':
1970       switch (TREE_CODE_LENGTH (code))
1971         {
1972         case 1:
1973           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
1974           if (op0 == TREE_OPERAND (exp, 0))
1975             return exp;
1976
1977           if (code == NON_LVALUE_EXPR)
1978             return op0;
1979
1980           new = fold (build1 (code, TREE_TYPE (exp), op0));
1981           break;
1982
1983         case 2:
1984           /* An RTL_EXPR cannot contain a PLACEHOLDER_EXPR; a CONSTRUCTOR
1985              could, but we don't support it.  */
1986           if (code == RTL_EXPR)
1987             return exp;
1988           else if (code == CONSTRUCTOR)
1989             abort ();
1990
1991           op0 = TREE_OPERAND (exp, 0);
1992           op1 = TREE_OPERAND (exp, 1);
1993           if (CONTAINS_PLACEHOLDER_P (op0))
1994             op0 = substitute_in_expr (op0, f, r);
1995           if (CONTAINS_PLACEHOLDER_P (op1))
1996             op1 = substitute_in_expr (op1, f, r);
1997
1998           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
1999             return exp;
2000
2001           new = fold (build (code, TREE_TYPE (exp), op0, op1));
2002           break;
2003
2004         case 3:
2005           /* It cannot be that anything inside a SAVE_EXPR contains a
2006              PLACEHOLDER_EXPR.  */
2007           if (code == SAVE_EXPR)
2008             return exp;
2009
2010           else if (code == CALL_EXPR)
2011             {
2012               op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2013               if (op1 == TREE_OPERAND (exp, 1))
2014                 return exp;
2015
2016               return build (code, TREE_TYPE (exp),
2017                             TREE_OPERAND (exp, 0), op1, NULL_TREE);
2018             }
2019
2020           else if (code != COND_EXPR)
2021             abort ();
2022
2023           op0 = TREE_OPERAND (exp, 0);
2024           op1 = TREE_OPERAND (exp, 1);
2025           op2 = TREE_OPERAND (exp, 2);
2026
2027           if (CONTAINS_PLACEHOLDER_P (op0))
2028             op0 = substitute_in_expr (op0, f, r);
2029           if (CONTAINS_PLACEHOLDER_P (op1))
2030             op1 = substitute_in_expr (op1, f, r);
2031           if (CONTAINS_PLACEHOLDER_P (op2))
2032             op2 = substitute_in_expr (op2, f, r);
2033
2034           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2035               && op2 == TREE_OPERAND (exp, 2))
2036             return exp;
2037
2038           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2039           break;
2040
2041         default:
2042           abort ();
2043         }
2044
2045       break;
2046
2047     case 'r':
2048       switch (code)
2049         {
2050         case COMPONENT_REF:
2051           /* If this expression is getting a value from a PLACEHOLDER_EXPR
2052              and it is the right field, replace it with R.  */
2053           for (inner = TREE_OPERAND (exp, 0);
2054                TREE_CODE_CLASS (TREE_CODE (inner)) == 'r';
2055                inner = TREE_OPERAND (inner, 0))
2056             ;
2057           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2058               && TREE_OPERAND (exp, 1) == f)
2059             return r;
2060
2061           /* If this expression hasn't been completed let, leave it
2062              alone.  */
2063           if (TREE_CODE (inner) == PLACEHOLDER_EXPR
2064               && TREE_TYPE (inner) == 0)
2065             return exp;
2066
2067           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2068           if (op0 == TREE_OPERAND (exp, 0))
2069             return exp;
2070
2071           new = fold (build (code, TREE_TYPE (exp), op0,
2072                              TREE_OPERAND (exp, 1)));
2073           break;
2074
2075         case BIT_FIELD_REF:
2076           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2077           op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
2078           op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
2079           if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
2080               && op2 == TREE_OPERAND (exp, 2))
2081             return exp;
2082
2083           new = fold (build (code, TREE_TYPE (exp), op0, op1, op2));
2084           break;
2085
2086         case INDIRECT_REF:
2087         case BUFFER_REF:
2088           op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
2089           if (op0 == TREE_OPERAND (exp, 0))
2090             return exp;
2091
2092           new = fold (build1 (code, TREE_TYPE (exp), op0));
2093           break;
2094
2095         default:
2096           abort ();
2097         }
2098       break;
2099
2100     default:
2101       abort ();
2102     }
2103
2104   TREE_READONLY (new) = TREE_READONLY (exp);
2105   return new;
2106 }
2107 \f
2108 /* Stabilize a reference so that we can use it any number of times
2109    without causing its operands to be evaluated more than once.
2110    Returns the stabilized reference.  This works by means of save_expr,
2111    so see the caveats in the comments about save_expr.
2112
2113    Also allows conversion expressions whose operands are references.
2114    Any other kind of expression is returned unchanged.  */
2115
2116 tree
2117 stabilize_reference (tree ref)
2118 {
2119   tree result;
2120   enum tree_code code = TREE_CODE (ref);
2121
2122   switch (code)
2123     {
2124     case VAR_DECL:
2125     case PARM_DECL:
2126     case RESULT_DECL:
2127       /* No action is needed in this case.  */
2128       return ref;
2129
2130     case NOP_EXPR:
2131     case CONVERT_EXPR:
2132     case FLOAT_EXPR:
2133     case FIX_TRUNC_EXPR:
2134     case FIX_FLOOR_EXPR:
2135     case FIX_ROUND_EXPR:
2136     case FIX_CEIL_EXPR:
2137       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
2138       break;
2139
2140     case INDIRECT_REF:
2141       result = build_nt (INDIRECT_REF,
2142                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
2143       break;
2144
2145     case COMPONENT_REF:
2146       result = build_nt (COMPONENT_REF,
2147                          stabilize_reference (TREE_OPERAND (ref, 0)),
2148                          TREE_OPERAND (ref, 1));
2149       break;
2150
2151     case BIT_FIELD_REF:
2152       result = build_nt (BIT_FIELD_REF,
2153                          stabilize_reference (TREE_OPERAND (ref, 0)),
2154                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
2155                          stabilize_reference_1 (TREE_OPERAND (ref, 2)));
2156       break;
2157
2158     case ARRAY_REF:
2159       result = build_nt (ARRAY_REF,
2160                          stabilize_reference (TREE_OPERAND (ref, 0)),
2161                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2162       break;
2163
2164     case ARRAY_RANGE_REF:
2165       result = build_nt (ARRAY_RANGE_REF,
2166                          stabilize_reference (TREE_OPERAND (ref, 0)),
2167                          stabilize_reference_1 (TREE_OPERAND (ref, 1)));
2168       break;
2169
2170     case COMPOUND_EXPR:
2171       /* We cannot wrap the first expression in a SAVE_EXPR, as then
2172          it wouldn't be ignored.  This matters when dealing with
2173          volatiles.  */
2174       return stabilize_reference_1 (ref);
2175
2176     case RTL_EXPR:
2177       result = build1 (INDIRECT_REF, TREE_TYPE (ref),
2178                        save_expr (build1 (ADDR_EXPR,
2179                                           build_pointer_type (TREE_TYPE (ref)),
2180                                           ref)));
2181       break;
2182
2183       /* If arg isn't a kind of lvalue we recognize, make no change.
2184          Caller should recognize the error for an invalid lvalue.  */
2185     default:
2186       return ref;
2187
2188     case ERROR_MARK:
2189       return error_mark_node;
2190     }
2191
2192   TREE_TYPE (result) = TREE_TYPE (ref);
2193   TREE_READONLY (result) = TREE_READONLY (ref);
2194   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
2195   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
2196
2197   return result;
2198 }
2199
2200 /* Subroutine of stabilize_reference; this is called for subtrees of
2201    references.  Any expression with side-effects must be put in a SAVE_EXPR
2202    to ensure that it is only evaluated once.
2203
2204    We don't put SAVE_EXPR nodes around everything, because assigning very
2205    simple expressions to temporaries causes us to miss good opportunities
2206    for optimizations.  Among other things, the opportunity to fold in the
2207    addition of a constant into an addressing mode often gets lost, e.g.
2208    "y[i+1] += x;".  In general, we take the approach that we should not make
2209    an assignment unless we are forced into it - i.e., that any non-side effect
2210    operator should be allowed, and that cse should take care of coalescing
2211    multiple utterances of the same expression should that prove fruitful.  */
2212
2213 tree
2214 stabilize_reference_1 (tree e)
2215 {
2216   tree result;
2217   enum tree_code code = TREE_CODE (e);
2218
2219   /* We cannot ignore const expressions because it might be a reference
2220      to a const array but whose index contains side-effects.  But we can
2221      ignore things that are actual constant or that already have been
2222      handled by this function.  */
2223
2224   if (TREE_CONSTANT (e) || code == SAVE_EXPR)
2225     return e;
2226
2227   switch (TREE_CODE_CLASS (code))
2228     {
2229     case 'x':
2230     case 't':
2231     case 'd':
2232     case 'b':
2233     case '<':
2234     case 's':
2235     case 'e':
2236     case 'r':
2237       /* If the expression has side-effects, then encase it in a SAVE_EXPR
2238          so that it will only be evaluated once.  */
2239       /* The reference (r) and comparison (<) classes could be handled as
2240          below, but it is generally faster to only evaluate them once.  */
2241       if (TREE_SIDE_EFFECTS (e))
2242         return save_expr (e);
2243       return e;
2244
2245     case 'c':
2246       /* Constants need no processing.  In fact, we should never reach
2247          here.  */
2248       return e;
2249
2250     case '2':
2251       /* Division is slow and tends to be compiled with jumps,
2252          especially the division by powers of 2 that is often
2253          found inside of an array reference.  So do it just once.  */
2254       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
2255           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
2256           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
2257           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
2258         return save_expr (e);
2259       /* Recursively stabilize each operand.  */
2260       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
2261                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
2262       break;
2263
2264     case '1':
2265       /* Recursively stabilize each operand.  */
2266       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
2267       break;
2268
2269     default:
2270       abort ();
2271     }
2272
2273   TREE_TYPE (result) = TREE_TYPE (e);
2274   TREE_READONLY (result) = TREE_READONLY (e);
2275   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
2276   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
2277
2278   return result;
2279 }
2280 \f
2281 /* Low-level constructors for expressions.  */
2282
2283 /* Build an expression of code CODE, data type TYPE,
2284    and operands as specified by the arguments ARG1 and following arguments.
2285    Expressions and reference nodes can be created this way.
2286    Constants, decls, types and misc nodes cannot be.  */
2287
2288 tree
2289 build (enum tree_code code, tree tt, ...)
2290 {
2291   tree t;
2292   int length;
2293   int i;
2294   int fro;
2295   int constant;
2296   va_list p;
2297   tree node;
2298
2299   va_start (p, tt);
2300
2301   t = make_node (code);
2302   length = TREE_CODE_LENGTH (code);
2303   TREE_TYPE (t) = tt;
2304
2305   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2306      result based on those same flags for the arguments.  But if the
2307      arguments aren't really even `tree' expressions, we shouldn't be trying
2308      to do this.  */
2309   fro = first_rtl_op (code);
2310
2311   /* Expressions without side effects may be constant if their
2312      arguments are as well.  */
2313   constant = (TREE_CODE_CLASS (code) == '<'
2314               || TREE_CODE_CLASS (code) == '1'
2315               || TREE_CODE_CLASS (code) == '2'
2316               || TREE_CODE_CLASS (code) == 'c');
2317
2318   if (length == 2)
2319     {
2320       /* This is equivalent to the loop below, but faster.  */
2321       tree arg0 = va_arg (p, tree);
2322       tree arg1 = va_arg (p, tree);
2323
2324       TREE_OPERAND (t, 0) = arg0;
2325       TREE_OPERAND (t, 1) = arg1;
2326       TREE_READONLY (t) = 1;
2327       if (arg0 && fro > 0)
2328         {
2329           if (TREE_SIDE_EFFECTS (arg0))
2330             TREE_SIDE_EFFECTS (t) = 1;
2331           if (!TREE_READONLY (arg0))
2332             TREE_READONLY (t) = 0;
2333           if (!TREE_CONSTANT (arg0))
2334             constant = 0;
2335         }
2336
2337       if (arg1 && fro > 1)
2338         {
2339           if (TREE_SIDE_EFFECTS (arg1))
2340             TREE_SIDE_EFFECTS (t) = 1;
2341           if (!TREE_READONLY (arg1))
2342             TREE_READONLY (t) = 0;
2343           if (!TREE_CONSTANT (arg1))
2344             constant = 0;
2345         }
2346     }
2347   else if (length == 1)
2348     {
2349       tree arg0 = va_arg (p, tree);
2350
2351       /* The only one-operand cases we handle here are those with side-effects.
2352          Others are handled with build1.  So don't bother checked if the
2353          arg has side-effects since we'll already have set it.
2354
2355          ??? This really should use build1 too.  */
2356       if (TREE_CODE_CLASS (code) != 's')
2357         abort ();
2358       TREE_OPERAND (t, 0) = arg0;
2359     }
2360   else
2361     {
2362       for (i = 0; i < length; i++)
2363         {
2364           tree operand = va_arg (p, tree);
2365
2366           TREE_OPERAND (t, i) = operand;
2367           if (operand && fro > i)
2368             {
2369               if (TREE_SIDE_EFFECTS (operand))
2370                 TREE_SIDE_EFFECTS (t) = 1;
2371               if (!TREE_CONSTANT (operand))
2372                 constant = 0;
2373             }
2374         }
2375     }
2376   va_end (p);
2377
2378   TREE_CONSTANT (t) = constant;
2379   
2380   if (code == CALL_EXPR && !TREE_SIDE_EFFECTS (t))
2381     {
2382       /* Calls have side-effects, except those to const or
2383          pure functions.  */
2384       i = call_expr_flags (t);
2385       if (!(i & (ECF_CONST | ECF_PURE)))
2386         TREE_SIDE_EFFECTS (t) = 1;
2387
2388       /* And even those have side-effects if their arguments do.  */
2389       else for (node = TREE_OPERAND (t, 1); node; node = TREE_CHAIN (node))
2390         if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2391           {
2392             TREE_SIDE_EFFECTS (t) = 1;
2393             break;
2394           }
2395     }
2396
2397   return t;
2398 }
2399
2400 /* Same as above, but only builds for unary operators.
2401    Saves lions share of calls to `build'; cuts down use
2402    of varargs, which is expensive for RISC machines.  */
2403
2404 tree
2405 build1 (enum tree_code code, tree type, tree node)
2406 {
2407   int length = sizeof (struct tree_exp);
2408 #ifdef GATHER_STATISTICS
2409   tree_node_kind kind;
2410 #endif
2411   tree t;
2412
2413 #ifdef GATHER_STATISTICS
2414   switch (TREE_CODE_CLASS (code))
2415     {
2416     case 's':  /* an expression with side effects */
2417       kind = s_kind;
2418       break;
2419     case 'r':  /* a reference */
2420       kind = r_kind;
2421       break;
2422     default:
2423       kind = e_kind;
2424       break;
2425     }
2426
2427   tree_node_counts[(int) kind]++;
2428   tree_node_sizes[(int) kind] += length;
2429 #endif
2430
2431 #ifdef ENABLE_CHECKING
2432   if (TREE_CODE_CLASS (code) == '2'
2433       || TREE_CODE_CLASS (code) == '<'
2434       || TREE_CODE_LENGTH (code) != 1)
2435     abort ();
2436 #endif /* ENABLE_CHECKING */
2437
2438   t = ggc_alloc_tree (length);
2439
2440   memset (t, 0, sizeof (struct tree_common));
2441
2442   TREE_SET_CODE (t, code);
2443
2444   TREE_TYPE (t) = type;
2445   TREE_COMPLEXITY (t) = 0;
2446   TREE_OPERAND (t, 0) = node;
2447   if (node && first_rtl_op (code) != 0)
2448     {
2449       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2450       TREE_READONLY (t) = TREE_READONLY (node);
2451     }
2452
2453   if (TREE_CODE_CLASS (code) == 's')
2454     TREE_SIDE_EFFECTS (t) = 1;
2455   else switch (code)
2456     {
2457     case INIT_EXPR:
2458     case MODIFY_EXPR:
2459     case VA_ARG_EXPR:
2460     case RTL_EXPR:
2461     case PREDECREMENT_EXPR:
2462     case PREINCREMENT_EXPR:
2463     case POSTDECREMENT_EXPR:
2464     case POSTINCREMENT_EXPR:
2465       /* All of these have side-effects, no matter what their
2466          operands are.  */
2467       TREE_SIDE_EFFECTS (t) = 1;
2468       TREE_READONLY (t) = 0;
2469       break;
2470
2471     case INDIRECT_REF:
2472       /* Whether a dereference is readonly has nothing to do with whether
2473          its operand is readonly.  */
2474       TREE_READONLY (t) = 0;
2475       break;
2476
2477     case ADDR_EXPR:
2478       if (node)
2479         {
2480           /* The address of a volatile decl or reference does not have
2481              side-effects.  But be careful not to ignore side-effects from
2482              other sources deeper in the expression--if node is a _REF and
2483              one of its operands has side-effects, so do we.  */
2484           if (TREE_THIS_VOLATILE (node))
2485             {
2486               TREE_SIDE_EFFECTS (t) = 0;
2487               if (!DECL_P (node))
2488                 {
2489                   int i = first_rtl_op (TREE_CODE (node)) - 1;
2490                   for (; i >= 0; --i)
2491                     {
2492                       if (TREE_SIDE_EFFECTS (TREE_OPERAND (node, i)))
2493                         TREE_SIDE_EFFECTS (t) = 1;
2494                     }
2495                 }
2496             }
2497         }
2498       break;
2499
2500     default:
2501       if (TREE_CODE_CLASS (code) == '1' && node && TREE_CONSTANT (node))
2502         TREE_CONSTANT (t) = 1;
2503       break;
2504     }
2505
2506   return t;
2507 }
2508
2509 /* Similar except don't specify the TREE_TYPE
2510    and leave the TREE_SIDE_EFFECTS as 0.
2511    It is permissible for arguments to be null,
2512    or even garbage if their values do not matter.  */
2513
2514 tree
2515 build_nt (enum tree_code code, ...)
2516 {
2517   tree t;
2518   int length;
2519   int i;
2520   va_list p;
2521
2522   va_start (p, code);
2523
2524   t = make_node (code);
2525   length = TREE_CODE_LENGTH (code);
2526
2527   for (i = 0; i < length; i++)
2528     TREE_OPERAND (t, i) = va_arg (p, tree);
2529
2530   va_end (p);
2531   return t;
2532 }
2533 \f
2534 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2535    We do NOT enter this node in any sort of symbol table.
2536
2537    layout_decl is used to set up the decl's storage layout.
2538    Other slots are initialized to 0 or null pointers.  */
2539
2540 tree
2541 build_decl (enum tree_code code, tree name, tree type)
2542 {
2543   tree t;
2544
2545   t = make_node (code);
2546
2547 /*  if (type == error_mark_node)
2548     type = integer_type_node; */
2549 /* That is not done, deliberately, so that having error_mark_node
2550    as the type can suppress useless errors in the use of this variable.  */
2551
2552   DECL_NAME (t) = name;
2553   TREE_TYPE (t) = type;
2554
2555   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2556     layout_decl (t, 0);
2557   else if (code == FUNCTION_DECL)
2558     DECL_MODE (t) = FUNCTION_MODE;
2559
2560   return t;
2561 }
2562 \f
2563 /* BLOCK nodes are used to represent the structure of binding contours
2564    and declarations, once those contours have been exited and their contents
2565    compiled.  This information is used for outputting debugging info.  */
2566
2567 tree
2568 build_block (tree vars, tree tags ATTRIBUTE_UNUSED, tree subblocks,
2569              tree supercontext, tree chain)
2570 {
2571   tree block = make_node (BLOCK);
2572
2573   BLOCK_VARS (block) = vars;
2574   BLOCK_SUBBLOCKS (block) = subblocks;
2575   BLOCK_SUPERCONTEXT (block) = supercontext;
2576   BLOCK_CHAIN (block) = chain;
2577   return block;
2578 }
2579
2580 /* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
2581    location where an expression or an identifier were encountered. It
2582    is necessary for languages where the frontend parser will handle
2583    recursively more than one file (Java is one of them).  */
2584
2585 tree
2586 build_expr_wfl (tree node, const char *file, int line, int col)
2587 {
2588   static const char *last_file = 0;
2589   static tree last_filenode = NULL_TREE;
2590   tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
2591
2592   EXPR_WFL_NODE (wfl) = node;
2593   EXPR_WFL_SET_LINECOL (wfl, line, col);
2594   if (file != last_file)
2595     {
2596       last_file = file;
2597       last_filenode = file ? get_identifier (file) : NULL_TREE;
2598     }
2599
2600   EXPR_WFL_FILENAME_NODE (wfl) = last_filenode;
2601   if (node)
2602     {
2603       TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
2604       TREE_TYPE (wfl) = TREE_TYPE (node);
2605     }
2606
2607   return wfl;
2608 }
2609 \f
2610 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2611    is ATTRIBUTE.  */
2612
2613 tree
2614 build_decl_attribute_variant (tree ddecl, tree attribute)
2615 {
2616   DECL_ATTRIBUTES (ddecl) = attribute;
2617   return ddecl;
2618 }
2619
2620 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
2621    is ATTRIBUTE.
2622
2623    Record such modified types already made so we don't make duplicates.  */
2624
2625 tree
2626 build_type_attribute_variant (tree ttype, tree attribute)
2627 {
2628   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
2629     {
2630       unsigned int hashcode;
2631       tree ntype;
2632
2633       ntype = copy_node (ttype);
2634
2635       TYPE_POINTER_TO (ntype) = 0;
2636       TYPE_REFERENCE_TO (ntype) = 0;
2637       TYPE_ATTRIBUTES (ntype) = attribute;
2638
2639       /* Create a new main variant of TYPE.  */
2640       TYPE_MAIN_VARIANT (ntype) = ntype;
2641       TYPE_NEXT_VARIANT (ntype) = 0;
2642       set_type_quals (ntype, TYPE_UNQUALIFIED);
2643
2644       hashcode = (TYPE_HASH (TREE_CODE (ntype))
2645                   + TYPE_HASH (TREE_TYPE (ntype))
2646                   + attribute_hash_list (attribute));
2647
2648       switch (TREE_CODE (ntype))
2649         {
2650         case FUNCTION_TYPE:
2651           hashcode += TYPE_HASH (TYPE_ARG_TYPES (ntype));
2652           break;
2653         case ARRAY_TYPE:
2654           hashcode += TYPE_HASH (TYPE_DOMAIN (ntype));
2655           break;
2656         case INTEGER_TYPE:
2657           hashcode += TYPE_HASH (TYPE_MAX_VALUE (ntype));
2658           break;
2659         case REAL_TYPE:
2660           hashcode += TYPE_HASH (TYPE_PRECISION (ntype));
2661           break;
2662         default:
2663           break;
2664         }
2665
2666       ntype = type_hash_canon (hashcode, ntype);
2667       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
2668     }
2669
2670   return ttype;
2671 }
2672
2673 /* Return nonzero if IDENT is a valid name for attribute ATTR,
2674    or zero if not.
2675
2676    We try both `text' and `__text__', ATTR may be either one.  */
2677 /* ??? It might be a reasonable simplification to require ATTR to be only
2678    `text'.  One might then also require attribute lists to be stored in
2679    their canonicalized form.  */
2680
2681 int
2682 is_attribute_p (const char *attr, tree ident)
2683 {
2684   int ident_len, attr_len;
2685   const char *p;
2686
2687   if (TREE_CODE (ident) != IDENTIFIER_NODE)
2688     return 0;
2689
2690   if (strcmp (attr, IDENTIFIER_POINTER (ident)) == 0)
2691     return 1;
2692
2693   p = IDENTIFIER_POINTER (ident);
2694   ident_len = strlen (p);
2695   attr_len = strlen (attr);
2696
2697   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
2698   if (attr[0] == '_')
2699     {
2700       if (attr[1] != '_'
2701           || attr[attr_len - 2] != '_'
2702           || attr[attr_len - 1] != '_')
2703         abort ();
2704       if (ident_len == attr_len - 4
2705           && strncmp (attr + 2, p, attr_len - 4) == 0)
2706         return 1;
2707     }
2708   else
2709     {
2710       if (ident_len == attr_len + 4
2711           && p[0] == '_' && p[1] == '_'
2712           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
2713           && strncmp (attr, p + 2, attr_len) == 0)
2714         return 1;
2715     }
2716
2717   return 0;
2718 }
2719
2720 /* Given an attribute name and a list of attributes, return a pointer to the
2721    attribute's list element if the attribute is part of the list, or NULL_TREE
2722    if not found.  If the attribute appears more than once, this only
2723    returns the first occurrence; the TREE_CHAIN of the return value should
2724    be passed back in if further occurrences are wanted.  */
2725
2726 tree
2727 lookup_attribute (const char *attr_name, tree list)
2728 {
2729   tree l;
2730
2731   for (l = list; l; l = TREE_CHAIN (l))
2732     {
2733       if (TREE_CODE (TREE_PURPOSE (l)) != IDENTIFIER_NODE)
2734         abort ();
2735       if (is_attribute_p (attr_name, TREE_PURPOSE (l)))
2736         return l;
2737     }
2738
2739   return NULL_TREE;
2740 }
2741
2742 /* Return an attribute list that is the union of a1 and a2.  */
2743
2744 tree
2745 merge_attributes (tree a1, tree a2)
2746 {
2747   tree attributes;
2748
2749   /* Either one unset?  Take the set one.  */
2750
2751   if ((attributes = a1) == 0)
2752     attributes = a2;
2753
2754   /* One that completely contains the other?  Take it.  */
2755
2756   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
2757     {
2758       if (attribute_list_contained (a2, a1))
2759         attributes = a2;
2760       else
2761         {
2762           /* Pick the longest list, and hang on the other list.  */
2763
2764           if (list_length (a1) < list_length (a2))
2765             attributes = a2, a2 = a1;
2766
2767           for (; a2 != 0; a2 = TREE_CHAIN (a2))
2768             {
2769               tree a;
2770               for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2771                                          attributes);
2772                    a != NULL_TREE;
2773                    a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
2774                                          TREE_CHAIN (a)))
2775                 {
2776                   if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
2777                     break;
2778                 }
2779               if (a == NULL_TREE)
2780                 {
2781                   a1 = copy_node (a2);
2782                   TREE_CHAIN (a1) = attributes;
2783                   attributes = a1;
2784                 }
2785             }
2786         }
2787     }
2788   return attributes;
2789 }
2790
2791 /* Given types T1 and T2, merge their attributes and return
2792   the result.  */
2793
2794 tree
2795 merge_type_attributes (tree t1, tree t2)
2796 {
2797   return merge_attributes (TYPE_ATTRIBUTES (t1),
2798                            TYPE_ATTRIBUTES (t2));
2799 }
2800
2801 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
2802    the result.  */
2803
2804 tree
2805 merge_decl_attributes (tree olddecl, tree newdecl)
2806 {
2807   return merge_attributes (DECL_ATTRIBUTES (olddecl),
2808                            DECL_ATTRIBUTES (newdecl));
2809 }
2810
2811 #ifdef TARGET_DLLIMPORT_DECL_ATTRIBUTES
2812
2813 /* Specialization of merge_decl_attributes for various Windows targets.
2814
2815    This handles the following situation:
2816
2817      __declspec (dllimport) int foo;
2818      int foo;
2819
2820    The second instance of `foo' nullifies the dllimport.  */
2821
2822 tree
2823 merge_dllimport_decl_attributes (tree old, tree new)
2824 {
2825   tree a;
2826   int delete_dllimport_p;
2827
2828   old = DECL_ATTRIBUTES (old);
2829   new = DECL_ATTRIBUTES (new);
2830
2831   /* What we need to do here is remove from `old' dllimport if it doesn't
2832      appear in `new'.  dllimport behaves like extern: if a declaration is
2833      marked dllimport and a definition appears later, then the object
2834      is not dllimport'd.  */
2835   if (lookup_attribute ("dllimport", old) != NULL_TREE
2836       && lookup_attribute ("dllimport", new) == NULL_TREE)
2837     delete_dllimport_p = 1;
2838   else
2839     delete_dllimport_p = 0;
2840
2841   a = merge_attributes (old, new);
2842
2843   if (delete_dllimport_p)
2844     {
2845       tree prev, t;
2846
2847       /* Scan the list for dllimport and delete it.  */
2848       for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
2849         {
2850           if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
2851             {
2852               if (prev == NULL_TREE)
2853                 a = TREE_CHAIN (a);
2854               else
2855                 TREE_CHAIN (prev) = TREE_CHAIN (t);
2856               break;
2857             }
2858         }
2859     }
2860
2861   return a;
2862 }
2863
2864 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
2865 \f
2866 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
2867    of the various TYPE_QUAL values.  */
2868
2869 static void
2870 set_type_quals (tree type, int type_quals)
2871 {
2872   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
2873   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
2874   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
2875 }
2876
2877 /* Return a version of the TYPE, qualified as indicated by the
2878    TYPE_QUALS, if one exists.  If no qualified version exists yet,
2879    return NULL_TREE.  */
2880
2881 tree
2882 get_qualified_type (tree type, int type_quals)
2883 {
2884   tree t;
2885
2886   /* Search the chain of variants to see if there is already one there just
2887      like the one we need to have.  If so, use that existing one.  We must
2888      preserve the TYPE_NAME, since there is code that depends on this.  */
2889   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
2890     if (TYPE_QUALS (t) == type_quals && TYPE_NAME (t) == TYPE_NAME (type)
2891         && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
2892         && attribute_list_equal (TYPE_ATTRIBUTES (t), TYPE_ATTRIBUTES (type)))
2893       return t;
2894
2895   return NULL_TREE;
2896 }
2897
2898 /* Like get_qualified_type, but creates the type if it does not
2899    exist.  This function never returns NULL_TREE.  */
2900
2901 tree
2902 build_qualified_type (tree type, int type_quals)
2903 {
2904   tree t;
2905
2906   /* See if we already have the appropriate qualified variant.  */
2907   t = get_qualified_type (type, type_quals);
2908
2909   /* If not, build it.  */
2910   if (!t)
2911     {
2912       t = build_type_copy (type);
2913       set_type_quals (t, type_quals);
2914     }
2915
2916   return t;
2917 }
2918
2919 /* Create a new variant of TYPE, equivalent but distinct.
2920    This is so the caller can modify it.  */
2921
2922 tree
2923 build_type_copy (tree type)
2924 {
2925   tree t, m = TYPE_MAIN_VARIANT (type);
2926
2927   t = copy_node (type);
2928
2929   TYPE_POINTER_TO (t) = 0;
2930   TYPE_REFERENCE_TO (t) = 0;
2931
2932   /* Add this type to the chain of variants of TYPE.  */
2933   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
2934   TYPE_NEXT_VARIANT (m) = t;
2935
2936   return t;
2937 }
2938 \f
2939 /* Hashing of types so that we don't make duplicates.
2940    The entry point is `type_hash_canon'.  */
2941
2942 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
2943    with types in the TREE_VALUE slots), by adding the hash codes
2944    of the individual types.  */
2945
2946 unsigned int
2947 type_hash_list (tree list)
2948 {
2949   unsigned int hashcode;
2950   tree tail;
2951
2952   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
2953     hashcode += TYPE_HASH (TREE_VALUE (tail));
2954
2955   return hashcode;
2956 }
2957
2958 /* These are the Hashtable callback functions.  */
2959
2960 /* Returns true if the types are equal.  */
2961
2962 static int
2963 type_hash_eq (const void *va, const void *vb)
2964 {
2965   const struct type_hash *a = va, *b = vb;
2966   if (a->hash == b->hash
2967       && TREE_CODE (a->type) == TREE_CODE (b->type)
2968       && TREE_TYPE (a->type) == TREE_TYPE (b->type)
2969       && attribute_list_equal (TYPE_ATTRIBUTES (a->type),
2970                                TYPE_ATTRIBUTES (b->type))
2971       && TYPE_ALIGN (a->type) == TYPE_ALIGN (b->type)
2972       && (TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
2973           || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
2974                                  TYPE_MAX_VALUE (b->type)))
2975       && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
2976           || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
2977                                  TYPE_MIN_VALUE (b->type)))
2978       /* Note that TYPE_DOMAIN is TYPE_ARG_TYPES for FUNCTION_TYPE.  */
2979       && (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
2980           || (TYPE_DOMAIN (a->type)
2981               && TREE_CODE (TYPE_DOMAIN (a->type)) == TREE_LIST
2982               && TYPE_DOMAIN (b->type)
2983               && TREE_CODE (TYPE_DOMAIN (b->type)) == TREE_LIST
2984               && type_list_equal (TYPE_DOMAIN (a->type),
2985                                   TYPE_DOMAIN (b->type)))))
2986     return 1;
2987   return 0;
2988 }
2989
2990 /* Return the cached hash value.  */
2991
2992 static hashval_t
2993 type_hash_hash (const void *item)
2994 {
2995   return ((const struct type_hash *) item)->hash;
2996 }
2997
2998 /* Look in the type hash table for a type isomorphic to TYPE.
2999    If one is found, return it.  Otherwise return 0.  */
3000
3001 tree
3002 type_hash_lookup (unsigned int hashcode, tree type)
3003 {
3004   struct type_hash *h, in;
3005
3006   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3007      must call that routine before comparing TYPE_ALIGNs.  */
3008   layout_type (type);
3009
3010   in.hash = hashcode;
3011   in.type = type;
3012
3013   h = htab_find_with_hash (type_hash_table, &in, hashcode);
3014   if (h)
3015     return h->type;
3016   return NULL_TREE;
3017 }
3018
3019 /* Add an entry to the type-hash-table
3020    for a type TYPE whose hash code is HASHCODE.  */
3021
3022 void
3023 type_hash_add (unsigned int hashcode, tree type)
3024 {
3025   struct type_hash *h;
3026   void **loc;
3027
3028   h = ggc_alloc (sizeof (struct type_hash));
3029   h->hash = hashcode;
3030   h->type = type;
3031   loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
3032   *(struct type_hash **) loc = h;
3033 }
3034
3035 /* Given TYPE, and HASHCODE its hash code, return the canonical
3036    object for an identical type if one already exists.
3037    Otherwise, return TYPE, and record it as the canonical object
3038    if it is a permanent object.
3039
3040    To use this function, first create a type of the sort you want.
3041    Then compute its hash code from the fields of the type that
3042    make it different from other similar types.
3043    Then call this function and use the value.
3044    This function frees the type you pass in if it is a duplicate.  */
3045
3046 /* Set to 1 to debug without canonicalization.  Never set by program.  */
3047 int debug_no_type_hash = 0;
3048
3049 tree
3050 type_hash_canon (unsigned int hashcode, tree type)
3051 {
3052   tree t1;
3053
3054   if (debug_no_type_hash)
3055     return type;
3056
3057   /* See if the type is in the hash table already.  If so, return it.
3058      Otherwise, add the type.  */
3059   t1 = type_hash_lookup (hashcode, type);
3060   if (t1 != 0)
3061     {
3062 #ifdef GATHER_STATISTICS
3063       tree_node_counts[(int) t_kind]--;
3064       tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3065 #endif
3066       return t1;
3067     }
3068   else
3069     {
3070       type_hash_add (hashcode, type);
3071       return type;
3072     }
3073 }
3074
3075 /* See if the data pointed to by the type hash table is marked.  We consider
3076    it marked if the type is marked or if a debug type number or symbol
3077    table entry has been made for the type.  This reduces the amount of
3078    debugging output and eliminates that dependency of the debug output on
3079    the number of garbage collections.  */
3080
3081 static int
3082 type_hash_marked_p (const void *p)
3083 {
3084   tree type = ((struct type_hash *) p)->type;
3085
3086   return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3087 }
3088
3089 static void
3090 print_type_hash_statistics (void)
3091 {
3092   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3093            (long) htab_size (type_hash_table),
3094            (long) htab_elements (type_hash_table),
3095            htab_collisions (type_hash_table));
3096 }
3097
3098 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3099    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3100    by adding the hash codes of the individual attributes.  */
3101
3102 unsigned int
3103 attribute_hash_list (tree list)
3104 {
3105   unsigned int hashcode;
3106   tree tail;
3107
3108   for (hashcode = 0, tail = list; tail; tail = TREE_CHAIN (tail))
3109     /* ??? Do we want to add in TREE_VALUE too? */
3110     hashcode += TYPE_HASH (TREE_PURPOSE (tail));
3111   return hashcode;
3112 }
3113
3114 /* Given two lists of attributes, return true if list l2 is
3115    equivalent to l1.  */
3116
3117 int
3118 attribute_list_equal (tree l1, tree l2)
3119 {
3120   return attribute_list_contained (l1, l2)
3121          && attribute_list_contained (l2, l1);
3122 }
3123
3124 /* Given two lists of attributes, return true if list L2 is
3125    completely contained within L1.  */
3126 /* ??? This would be faster if attribute names were stored in a canonicalized
3127    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3128    must be used to show these elements are equivalent (which they are).  */
3129 /* ??? It's not clear that attributes with arguments will always be handled
3130    correctly.  */
3131
3132 int
3133 attribute_list_contained (tree l1, tree l2)
3134 {
3135   tree t1, t2;
3136
3137   /* First check the obvious, maybe the lists are identical.  */
3138   if (l1 == l2)
3139     return 1;
3140
3141   /* Maybe the lists are similar.  */
3142   for (t1 = l1, t2 = l2;
3143        t1 != 0 && t2 != 0
3144         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3145         && TREE_VALUE (t1) == TREE_VALUE (t2);
3146        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3147
3148   /* Maybe the lists are equal.  */
3149   if (t1 == 0 && t2 == 0)
3150     return 1;
3151
3152   for (; t2 != 0; t2 = TREE_CHAIN (t2))
3153     {
3154       tree attr;
3155       for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3156            attr != NULL_TREE;
3157            attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3158                                     TREE_CHAIN (attr)))
3159         {
3160           if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3161             break;
3162         }
3163
3164       if (attr == 0)
3165         return 0;
3166
3167       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3168         return 0;
3169     }
3170
3171   return 1;
3172 }
3173
3174 /* Given two lists of types
3175    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3176    return 1 if the lists contain the same types in the same order.
3177    Also, the TREE_PURPOSEs must match.  */
3178
3179 int
3180 type_list_equal (tree l1, tree l2)
3181 {
3182   tree t1, t2;
3183
3184   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3185     if (TREE_VALUE (t1) != TREE_VALUE (t2)
3186         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3187             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3188                   && (TREE_TYPE (TREE_PURPOSE (t1))
3189                       == TREE_TYPE (TREE_PURPOSE (t2))))))
3190       return 0;
3191
3192   return t1 == t2;
3193 }
3194
3195 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3196    given by TYPE.  If the argument list accepts variable arguments,
3197    then this function counts only the ordinary arguments.  */
3198
3199 int
3200 type_num_arguments (tree type)
3201 {
3202   int i = 0;
3203   tree t;
3204
3205   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3206     /* If the function does not take a variable number of arguments,
3207        the last element in the list will have type `void'.  */
3208     if (VOID_TYPE_P (TREE_VALUE (t)))
3209       break;
3210     else
3211       ++i;
3212
3213   return i;
3214 }
3215
3216 /* Nonzero if integer constants T1 and T2
3217    represent the same constant value.  */
3218
3219 int
3220 tree_int_cst_equal (tree t1, tree t2)
3221 {
3222   if (t1 == t2)
3223     return 1;
3224
3225   if (t1 == 0 || t2 == 0)
3226     return 0;
3227
3228   if (TREE_CODE (t1) == INTEGER_CST
3229       && TREE_CODE (t2) == INTEGER_CST
3230       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3231       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3232     return 1;
3233
3234   return 0;
3235 }
3236
3237 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3238    The precise way of comparison depends on their data type.  */
3239
3240 int
3241 tree_int_cst_lt (tree t1, tree t2)
3242 {
3243   if (t1 == t2)
3244     return 0;
3245
3246   if (TREE_UNSIGNED (TREE_TYPE (t1)) != TREE_UNSIGNED (TREE_TYPE (t2)))
3247     {
3248       int t1_sgn = tree_int_cst_sgn (t1);
3249       int t2_sgn = tree_int_cst_sgn (t2);
3250
3251       if (t1_sgn < t2_sgn)
3252         return 1;
3253       else if (t1_sgn > t2_sgn)
3254         return 0;
3255       /* Otherwise, both are non-negative, so we compare them as
3256          unsigned just in case one of them would overflow a signed
3257          type.  */
3258     }
3259   else if (! TREE_UNSIGNED (TREE_TYPE (t1)))
3260     return INT_CST_LT (t1, t2);
3261
3262   return INT_CST_LT_UNSIGNED (t1, t2);
3263 }
3264
3265 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  */
3266
3267 int
3268 tree_int_cst_compare (tree t1, tree t2)
3269 {
3270   if (tree_int_cst_lt (t1, t2))
3271     return -1;
3272   else if (tree_int_cst_lt (t2, t1))
3273     return 1;
3274   else
3275     return 0;
3276 }
3277
3278 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
3279    the host.  If POS is zero, the value can be represented in a single
3280    HOST_WIDE_INT.  If POS is nonzero, the value must be positive and can
3281    be represented in a single unsigned HOST_WIDE_INT.  */
3282
3283 int
3284 host_integerp (tree t, int pos)
3285 {
3286   return (TREE_CODE (t) == INTEGER_CST
3287           && ! TREE_OVERFLOW (t)
3288           && ((TREE_INT_CST_HIGH (t) == 0
3289                && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
3290               || (! pos && TREE_INT_CST_HIGH (t) == -1
3291                   && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
3292                   && ! TREE_UNSIGNED (TREE_TYPE (t)))
3293               || (pos && TREE_INT_CST_HIGH (t) == 0)));
3294 }
3295
3296 /* Return the HOST_WIDE_INT least significant bits of T if it is an
3297    INTEGER_CST and there is no overflow.  POS is nonzero if the result must
3298    be positive.  Abort if we cannot satisfy the above conditions.  */
3299
3300 HOST_WIDE_INT
3301 tree_low_cst (tree t, int pos)
3302 {
3303   if (host_integerp (t, pos))
3304     return TREE_INT_CST_LOW (t);
3305   else
3306     abort ();
3307 }
3308
3309 /* Return the most significant bit of the integer constant T.  */
3310
3311 int
3312 tree_int_cst_msb (tree t)
3313 {
3314   int prec;
3315   HOST_WIDE_INT h;
3316   unsigned HOST_WIDE_INT l;
3317
3318   /* Note that using TYPE_PRECISION here is wrong.  We care about the
3319      actual bits, not the (arbitrary) range of the type.  */
3320   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
3321   rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
3322                  2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
3323   return (l & 1) == 1;
3324 }
3325
3326 /* Return an indication of the sign of the integer constant T.
3327    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
3328    Note that -1 will never be returned it T's type is unsigned.  */
3329
3330 int
3331 tree_int_cst_sgn (tree t)
3332 {
3333   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
3334     return 0;
3335   else if (TREE_UNSIGNED (TREE_TYPE (t)))
3336     return 1;
3337   else if (TREE_INT_CST_HIGH (t) < 0)
3338     return -1;
3339   else
3340     return 1;
3341 }
3342
3343 /* Compare two constructor-element-type constants.  Return 1 if the lists
3344    are known to be equal; otherwise return 0.  */
3345
3346 int
3347 simple_cst_list_equal (tree l1, tree l2)
3348 {
3349   while (l1 != NULL_TREE && l2 != NULL_TREE)
3350     {
3351       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
3352         return 0;
3353
3354       l1 = TREE_CHAIN (l1);
3355       l2 = TREE_CHAIN (l2);
3356     }
3357
3358   return l1 == l2;
3359 }
3360
3361 /* Return truthvalue of whether T1 is the same tree structure as T2.
3362    Return 1 if they are the same.
3363    Return 0 if they are understandably different.
3364    Return -1 if either contains tree structure not understood by
3365    this function.  */
3366
3367 int
3368 simple_cst_equal (tree t1, tree t2)
3369 {
3370   enum tree_code code1, code2;
3371   int cmp;
3372   int i;
3373
3374   if (t1 == t2)
3375     return 1;
3376   if (t1 == 0 || t2 == 0)
3377     return 0;
3378
3379   code1 = TREE_CODE (t1);
3380   code2 = TREE_CODE (t2);
3381
3382   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
3383     {
3384       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3385           || code2 == NON_LVALUE_EXPR)
3386         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3387       else
3388         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
3389     }
3390
3391   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
3392            || code2 == NON_LVALUE_EXPR)
3393     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
3394
3395   if (code1 != code2)
3396     return 0;
3397
3398   switch (code1)
3399     {
3400     case INTEGER_CST:
3401       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3402               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
3403
3404     case REAL_CST:
3405       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
3406
3407     case STRING_CST:
3408       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3409               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3410                          TREE_STRING_LENGTH (t1)));
3411
3412     case CONSTRUCTOR:
3413       if (CONSTRUCTOR_ELTS (t1) == CONSTRUCTOR_ELTS (t2))
3414         return 1;
3415       else
3416         abort ();
3417
3418     case SAVE_EXPR:
3419       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3420
3421     case CALL_EXPR:
3422       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3423       if (cmp <= 0)
3424         return cmp;
3425       return
3426         simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3427
3428     case TARGET_EXPR:
3429       /* Special case: if either target is an unallocated VAR_DECL,
3430          it means that it's going to be unified with whatever the
3431          TARGET_EXPR is really supposed to initialize, so treat it
3432          as being equivalent to anything.  */
3433       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
3434            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
3435            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
3436           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
3437               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
3438               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
3439         cmp = 1;
3440       else
3441         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3442
3443       if (cmp <= 0)
3444         return cmp;
3445
3446       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3447
3448     case WITH_CLEANUP_EXPR:
3449       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3450       if (cmp <= 0)
3451         return cmp;
3452
3453       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
3454
3455     case COMPONENT_REF:
3456       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
3457         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3458
3459       return 0;
3460
3461     case VAR_DECL:
3462     case PARM_DECL:
3463     case CONST_DECL:
3464     case FUNCTION_DECL:
3465       return 0;
3466
3467     default:
3468       break;
3469     }
3470
3471   /* This general rule works for most tree codes.  All exceptions should be
3472      handled above.  If this is a language-specific tree code, we can't
3473      trust what might be in the operand, so say we don't know
3474      the situation.  */
3475   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
3476     return -1;
3477
3478   switch (TREE_CODE_CLASS (code1))
3479     {
3480     case '1':
3481     case '2':
3482     case '<':
3483     case 'e':
3484     case 'r':
3485     case 's':
3486       cmp = 1;
3487       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
3488         {
3489           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
3490           if (cmp <= 0)
3491             return cmp;
3492         }
3493
3494       return cmp;
3495
3496     default:
3497       return -1;
3498     }
3499 }
3500
3501 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
3502    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
3503    than U, respectively.  */
3504
3505 int
3506 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
3507 {
3508   if (tree_int_cst_sgn (t) < 0)
3509     return -1;
3510   else if (TREE_INT_CST_HIGH (t) != 0)
3511     return 1;
3512   else if (TREE_INT_CST_LOW (t) == u)
3513     return 0;
3514   else if (TREE_INT_CST_LOW (t) < u)
3515     return -1;
3516   else
3517     return 1;
3518 }
3519
3520 /* Generate a hash value for an expression.  This can be used iteratively
3521    by passing a previous result as the "val" argument.
3522
3523    This function is intended to produce the same hash for expressions which
3524    would compare equal using operand_equal_p.  */
3525
3526 hashval_t
3527 iterative_hash_expr (tree t, hashval_t val)
3528 {
3529   int i;
3530   enum tree_code code;
3531   char class;
3532
3533   if (t == NULL_TREE)
3534     return iterative_hash_object (t, val);
3535
3536   code = TREE_CODE (t);
3537   class = TREE_CODE_CLASS (code);
3538
3539   if (class == 'd')
3540     {
3541       /* Decls we can just compare by pointer.  */
3542       val = iterative_hash_object (t, val);
3543     }
3544   else if (class == 'c')
3545     {
3546       /* Alas, constants aren't shared, so we can't rely on pointer
3547          identity.  */
3548       if (code == INTEGER_CST)
3549         {
3550           val = iterative_hash_object (TREE_INT_CST_LOW (t), val);
3551           val = iterative_hash_object (TREE_INT_CST_HIGH (t), val);
3552         }
3553       else if (code == REAL_CST)
3554         val = iterative_hash (TREE_REAL_CST_PTR (t),
3555                               sizeof (REAL_VALUE_TYPE), val);
3556       else if (code == STRING_CST)
3557         val = iterative_hash (TREE_STRING_POINTER (t),
3558                               TREE_STRING_LENGTH (t), val);
3559       else if (code == COMPLEX_CST)
3560         {
3561           val = iterative_hash_expr (TREE_REALPART (t), val);
3562           val = iterative_hash_expr (TREE_IMAGPART (t), val);
3563         }
3564       else if (code == VECTOR_CST)
3565         val = iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
3566       else
3567         abort ();
3568     }
3569   else if (IS_EXPR_CODE_CLASS (class))
3570     {
3571       val = iterative_hash_object (code, val);
3572
3573       if (code == NOP_EXPR || code == CONVERT_EXPR
3574           || code == NON_LVALUE_EXPR)
3575         val = iterative_hash_object (TREE_TYPE (t), val);
3576
3577       if (code == PLUS_EXPR || code == MULT_EXPR || code == MIN_EXPR
3578           || code == MAX_EXPR || code == BIT_IOR_EXPR || code == BIT_XOR_EXPR
3579           || code == BIT_AND_EXPR || code == NE_EXPR || code == EQ_EXPR)
3580         {
3581           /* It's a commutative expression.  We want to hash it the same
3582              however it appears.  We do this by first hashing both operands
3583              and then rehashing based on the order of their independent
3584              hashes.  */
3585           hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
3586           hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
3587           hashval_t t;
3588
3589           if (one > two)
3590             t = one, one = two, two = t;
3591
3592           val = iterative_hash_object (one, val);
3593           val = iterative_hash_object (two, val);
3594         }
3595       else
3596         for (i = first_rtl_op (code) - 1; i >= 0; --i)
3597           val = iterative_hash_expr (TREE_OPERAND (t, i), val);
3598     }
3599   else if (code == TREE_LIST)
3600     {
3601       /* A list of expressions, for a CALL_EXPR or as the elements of a
3602          VECTOR_CST.  */
3603       for (; t; t = TREE_CHAIN (t))
3604         val = iterative_hash_expr (TREE_VALUE (t), val);
3605     }
3606   else
3607     abort ();
3608
3609   return val;
3610 }
3611 \f
3612 /* Constructors for pointer, array and function types.
3613    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
3614    constructed by language-dependent code, not here.)  */
3615
3616 /* Construct, lay out and return the type of pointers to TO_TYPE
3617    with mode MODE. If such a type has already been constructed,
3618    reuse it.  */
3619
3620 tree
3621 build_pointer_type_for_mode (tree to_type, enum machine_mode mode)
3622 {
3623   tree t = TYPE_POINTER_TO (to_type);
3624
3625   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
3626   if (t != 0 && mode == ptr_mode)
3627     return t;
3628
3629   t = make_node (POINTER_TYPE);
3630
3631   TREE_TYPE (t) = to_type;
3632   TYPE_MODE (t) = mode;
3633
3634   /* Record this type as the pointer to TO_TYPE.  */
3635   if (mode == ptr_mode)
3636   TYPE_POINTER_TO (to_type) = t;
3637
3638   /* Lay out the type.  This function has many callers that are concerned
3639      with expression-construction, and this simplifies them all.
3640      Also, it guarantees the TYPE_SIZE is in the same obstack as the type.  */
3641   layout_type (t);
3642
3643   return t;
3644 }
3645
3646 /* By default build pointers in ptr_mode.  */
3647
3648 tree
3649 build_pointer_type (tree to_type)
3650 {
3651   return build_pointer_type_for_mode (to_type, ptr_mode);
3652 }
3653
3654 /* Construct, lay out and return the type of references to TO_TYPE
3655    with mode MODE. If such a type has already been constructed,
3656    reuse it.  */
3657
3658 tree
3659 build_reference_type_for_mode (tree to_type, enum machine_mode mode)
3660 {
3661   tree t = TYPE_REFERENCE_TO (to_type);
3662
3663   /* First, if we already have a type for pointers to TO_TYPE, use it.  */
3664   if (t != 0 && mode == ptr_mode)
3665     return t;
3666
3667   t = make_node (REFERENCE_TYPE);
3668
3669   TREE_TYPE (t) = to_type;
3670   TYPE_MODE (t) = mode;
3671
3672   /* Record this type as the pointer to TO_TYPE.  */
3673   if (mode == ptr_mode)
3674   TYPE_REFERENCE_TO (to_type) = t;
3675
3676   layout_type (t);
3677
3678   return t;
3679 }
3680
3681
3682 /* Build the node for the type of references-to-TO_TYPE by default
3683    in ptr_mode.  */
3684
3685 tree
3686 build_reference_type (tree to_type)
3687 {
3688   return build_reference_type_for_mode (to_type, ptr_mode);
3689 }
3690
3691 /* Build a type that is compatible with t but has no cv quals anywhere
3692    in its type, thus
3693
3694    const char *const *const *  ->  char ***.  */
3695
3696 tree
3697 build_type_no_quals (tree t)
3698 {
3699   switch (TREE_CODE (t))
3700     {
3701     case POINTER_TYPE:
3702       return build_pointer_type (build_type_no_quals (TREE_TYPE (t)));
3703     case REFERENCE_TYPE:
3704       return build_reference_type (build_type_no_quals (TREE_TYPE (t)));
3705     default:
3706       return TYPE_MAIN_VARIANT (t);
3707     }
3708 }
3709
3710 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
3711    MAXVAL should be the maximum value in the domain
3712    (one less than the length of the array).
3713
3714    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
3715    We don't enforce this limit, that is up to caller (e.g. language front end).
3716    The limit exists because the result is a signed type and we don't handle
3717    sizes that use more than one HOST_WIDE_INT.  */
3718
3719 tree
3720 build_index_type (tree maxval)
3721 {
3722   tree itype = make_node (INTEGER_TYPE);
3723
3724   TREE_TYPE (itype) = sizetype;
3725   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
3726   TYPE_MIN_VALUE (itype) = size_zero_node;
3727   TYPE_MAX_VALUE (itype) = convert (sizetype, maxval);
3728   TYPE_MODE (itype) = TYPE_MODE (sizetype);
3729   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
3730   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
3731   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
3732   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
3733
3734   if (host_integerp (maxval, 1))
3735     return type_hash_canon (tree_low_cst (maxval, 1), itype);
3736   else
3737     return itype;
3738 }
3739
3740 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
3741    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
3742    low bound LOWVAL and high bound HIGHVAL.
3743    if TYPE==NULL_TREE, sizetype is used.  */
3744
3745 tree
3746 build_range_type (tree type, tree lowval, tree highval)
3747 {
3748   tree itype = make_node (INTEGER_TYPE);
3749
3750   TREE_TYPE (itype) = type;
3751   if (type == NULL_TREE)
3752     type = sizetype;
3753
3754   TYPE_MIN_VALUE (itype) = convert (type, lowval);
3755   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
3756
3757   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
3758   TYPE_MODE (itype) = TYPE_MODE (type);
3759   TYPE_SIZE (itype) = TYPE_SIZE (type);
3760   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
3761   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
3762   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
3763
3764   if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
3765     return type_hash_canon (tree_low_cst (highval, 0)
3766                             - tree_low_cst (lowval, 0),
3767                             itype);
3768   else
3769     return itype;
3770 }
3771
3772 /* Just like build_index_type, but takes lowval and highval instead
3773    of just highval (maxval).  */
3774
3775 tree
3776 build_index_2_type (tree lowval, tree highval)
3777 {
3778   return build_range_type (sizetype, lowval, highval);
3779 }
3780
3781 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
3782    and number of elements specified by the range of values of INDEX_TYPE.
3783    If such a type has already been constructed, reuse it.  */
3784
3785 tree
3786 build_array_type (tree elt_type, tree index_type)
3787 {
3788   tree t;
3789   unsigned int hashcode;
3790
3791   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
3792     {
3793       error ("arrays of functions are not meaningful");
3794       elt_type = integer_type_node;
3795     }
3796
3797   /* Make sure TYPE_POINTER_TO (elt_type) is filled in.  */
3798   build_pointer_type (elt_type);
3799
3800   /* Allocate the array after the pointer type,
3801      in case we free it in type_hash_canon.  */
3802   t = make_node (ARRAY_TYPE);
3803   TREE_TYPE (t) = elt_type;
3804   TYPE_DOMAIN (t) = index_type;
3805
3806   if (index_type == 0)
3807     {
3808       return t;
3809     }
3810
3811   hashcode = TYPE_HASH (elt_type) + TYPE_HASH (index_type);
3812   t = type_hash_canon (hashcode, t);
3813
3814   if (!COMPLETE_TYPE_P (t))
3815     layout_type (t);
3816   return t;
3817 }
3818
3819 /* Return the TYPE of the elements comprising
3820    the innermost dimension of ARRAY.  */
3821
3822 tree
3823 get_inner_array_type (tree array)
3824 {
3825   tree type = TREE_TYPE (array);
3826
3827   while (TREE_CODE (type) == ARRAY_TYPE)
3828     type = TREE_TYPE (type);
3829
3830   return type;
3831 }
3832
3833 /* Construct, lay out and return
3834    the type of functions returning type VALUE_TYPE
3835    given arguments of types ARG_TYPES.
3836    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
3837    are data type nodes for the arguments of the function.
3838    If such a type has already been constructed, reuse it.  */
3839
3840 tree
3841 build_function_type (tree value_type, tree arg_types)
3842 {
3843   tree t;
3844   unsigned int hashcode;
3845
3846   if (TREE_CODE (value_type) == FUNCTION_TYPE)
3847     {
3848       error ("function return type cannot be function");
3849       value_type = integer_type_node;
3850     }
3851
3852   /* Make a node of the sort we want.  */
3853   t = make_node (FUNCTION_TYPE);
3854   TREE_TYPE (t) = value_type;
3855   TYPE_ARG_TYPES (t) = arg_types;
3856
3857   /* If we already have such a type, use the old one and free this one.  */
3858   hashcode = TYPE_HASH (value_type) + type_hash_list (arg_types);
3859   t = type_hash_canon (hashcode, t);
3860
3861   if (!COMPLETE_TYPE_P (t))
3862     layout_type (t);
3863   return t;
3864 }
3865
3866 /* Build a function type.  The RETURN_TYPE is the type returned by the
3867    function.  If additional arguments are provided, they are
3868    additional argument types.  The list of argument types must always
3869    be terminated by NULL_TREE.  */
3870
3871 tree
3872 build_function_type_list (tree return_type, ...)
3873 {
3874   tree t, args, last;
3875   va_list p;
3876
3877   va_start (p, return_type);
3878
3879   t = va_arg (p, tree);
3880   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
3881     args = tree_cons (NULL_TREE, t, args);
3882
3883   last = args;
3884   args = nreverse (args);
3885   TREE_CHAIN (last) = void_list_node;
3886   args = build_function_type (return_type, args);
3887
3888   va_end (p);
3889   return args;
3890 }
3891
3892 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
3893    and ARGTYPES (a TREE_LIST) are the return type and arguments types
3894    for the method.  An implicit additional parameter (of type
3895    pointer-to-BASETYPE) is added to the ARGTYPES.  */
3896
3897 tree
3898 build_method_type_directly (tree basetype,
3899                             tree rettype,
3900                             tree argtypes)
3901 {
3902   tree t;
3903   tree ptype;
3904   int hashcode;
3905
3906   /* Make a node of the sort we want.  */
3907   t = make_node (METHOD_TYPE);
3908
3909   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
3910   TREE_TYPE (t) = rettype;
3911   ptype = build_pointer_type (basetype);
3912
3913   /* The actual arglist for this function includes a "hidden" argument
3914      which is "this".  Put it into the list of argument types.  */
3915   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
3916   TYPE_ARG_TYPES (t) = argtypes;
3917
3918   /* If we already have such a type, use the old one and free this one.
3919      Note that it also frees up the above cons cell if found.  */
3920   hashcode = TYPE_HASH (basetype) + TYPE_HASH (rettype) +
3921     type_hash_list (argtypes);
3922
3923   t = type_hash_canon (hashcode, t);
3924
3925   if (!COMPLETE_TYPE_P (t))
3926     layout_type (t);
3927
3928   return t;
3929 }
3930
3931 /* Construct, lay out and return the type of methods belonging to class
3932    BASETYPE and whose arguments and values are described by TYPE.
3933    If that type exists already, reuse it.
3934    TYPE must be a FUNCTION_TYPE node.  */
3935
3936 tree
3937 build_method_type (tree basetype, tree type)
3938 {
3939   if (TREE_CODE (type) != FUNCTION_TYPE)
3940     abort ();
3941
3942   return build_method_type_directly (basetype, 
3943                                      TREE_TYPE (type),
3944                                      TYPE_ARG_TYPES (type));
3945 }
3946
3947 /* Construct, lay out and return the type of offsets to a value
3948    of type TYPE, within an object of type BASETYPE.
3949    If a suitable offset type exists already, reuse it.  */
3950
3951 tree
3952 build_offset_type (tree basetype, tree type)
3953 {
3954   tree t;
3955   unsigned int hashcode;
3956
3957   /* Make a node of the sort we want.  */
3958   t = make_node (OFFSET_TYPE);
3959
3960   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
3961   TREE_TYPE (t) = type;
3962
3963   /* If we already have such a type, use the old one and free this one.  */
3964   hashcode = TYPE_HASH (basetype) + TYPE_HASH (type);
3965   t = type_hash_canon (hashcode, t);
3966
3967   if (!COMPLETE_TYPE_P (t))
3968     layout_type (t);
3969
3970   return t;
3971 }
3972
3973 /* Create a complex type whose components are COMPONENT_TYPE.  */
3974
3975 tree
3976 build_complex_type (tree component_type)
3977 {
3978   tree t;
3979   unsigned int hashcode;
3980
3981   /* Make a node of the sort we want.  */
3982   t = make_node (COMPLEX_TYPE);
3983
3984   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
3985   set_type_quals (t, TYPE_QUALS (component_type));
3986
3987   /* If we already have such a type, use the old one and free this one.  */
3988   hashcode = TYPE_HASH (component_type);
3989   t = type_hash_canon (hashcode, t);
3990
3991   if (!COMPLETE_TYPE_P (t))
3992     layout_type (t);
3993
3994   /* If we are writing Dwarf2 output we need to create a name,
3995      since complex is a fundamental type.  */
3996   if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
3997       && ! TYPE_NAME (t))
3998     {
3999       const char *name;
4000       if (component_type == char_type_node)
4001         name = "complex char";
4002       else if (component_type == signed_char_type_node)
4003         name = "complex signed char";
4004       else if (component_type == unsigned_char_type_node)
4005         name = "complex unsigned char";
4006       else if (component_type == short_integer_type_node)
4007         name = "complex short int";
4008       else if (component_type == short_unsigned_type_node)
4009         name = "complex short unsigned int";
4010       else if (component_type == integer_type_node)
4011         name = "complex int";
4012       else if (component_type == unsigned_type_node)
4013         name = "complex unsigned int";
4014       else if (component_type == long_integer_type_node)
4015         name = "complex long int";
4016       else if (component_type == long_unsigned_type_node)
4017         name = "complex long unsigned int";
4018       else if (component_type == long_long_integer_type_node)
4019         name = "complex long long int";
4020       else if (component_type == long_long_unsigned_type_node)
4021         name = "complex long long unsigned int";
4022       else
4023         name = 0;
4024
4025       if (name != 0)
4026         TYPE_NAME (t) = get_identifier (name);
4027     }
4028
4029   return t;
4030 }
4031 \f
4032 /* Return OP, stripped of any conversions to wider types as much as is safe.
4033    Converting the value back to OP's type makes a value equivalent to OP.
4034
4035    If FOR_TYPE is nonzero, we return a value which, if converted to
4036    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4037
4038    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4039    narrowest type that can hold the value, even if they don't exactly fit.
4040    Otherwise, bit-field references are changed to a narrower type
4041    only if they can be fetched directly from memory in that type.
4042
4043    OP must have integer, real or enumeral type.  Pointers are not allowed!
4044
4045    There are some cases where the obvious value we could return
4046    would regenerate to OP if converted to OP's type,
4047    but would not extend like OP to wider types.
4048    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4049    For example, if OP is (unsigned short)(signed char)-1,
4050    we avoid returning (signed char)-1 if FOR_TYPE is int,
4051    even though extending that to an unsigned short would regenerate OP,
4052    since the result of extending (signed char)-1 to (int)
4053    is different from (int) OP.  */
4054
4055 tree
4056 get_unwidened (tree op, tree for_type)
4057 {
4058   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4059   tree type = TREE_TYPE (op);
4060   unsigned final_prec
4061     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4062   int uns
4063     = (for_type != 0 && for_type != type
4064        && final_prec > TYPE_PRECISION (type)
4065        && TREE_UNSIGNED (type));
4066   tree win = op;
4067
4068   while (TREE_CODE (op) == NOP_EXPR)
4069     {
4070       int bitschange
4071         = TYPE_PRECISION (TREE_TYPE (op))
4072           - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4073
4074       /* Truncations are many-one so cannot be removed.
4075          Unless we are later going to truncate down even farther.  */
4076       if (bitschange < 0
4077           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4078         break;
4079
4080       /* See what's inside this conversion.  If we decide to strip it,
4081          we will set WIN.  */
4082       op = TREE_OPERAND (op, 0);
4083
4084       /* If we have not stripped any zero-extensions (uns is 0),
4085          we can strip any kind of extension.
4086          If we have previously stripped a zero-extension,
4087          only zero-extensions can safely be stripped.
4088          Any extension can be stripped if the bits it would produce
4089          are all going to be discarded later by truncating to FOR_TYPE.  */
4090
4091       if (bitschange > 0)
4092         {
4093           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4094             win = op;
4095           /* TREE_UNSIGNED says whether this is a zero-extension.
4096              Let's avoid computing it if it does not affect WIN
4097              and if UNS will not be needed again.  */
4098           if ((uns || TREE_CODE (op) == NOP_EXPR)
4099               && TREE_UNSIGNED (TREE_TYPE (op)))
4100             {
4101               uns = 1;
4102               win = op;
4103             }
4104         }
4105     }
4106
4107   if (TREE_CODE (op) == COMPONENT_REF
4108       /* Since type_for_size always gives an integer type.  */
4109       && TREE_CODE (type) != REAL_TYPE
4110       /* Don't crash if field not laid out yet.  */
4111       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
4112       && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
4113     {
4114       unsigned int innerprec
4115         = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4116       int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
4117                        || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
4118       type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
4119
4120       /* We can get this structure field in the narrowest type it fits in.
4121          If FOR_TYPE is 0, do this only for a field that matches the
4122          narrower type exactly and is aligned for it
4123          The resulting extension to its nominal type (a fullword type)
4124          must fit the same conditions as for other extensions.  */
4125
4126       if (type != 0
4127           && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
4128           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
4129           && (! uns || final_prec <= innerprec || unsignedp))
4130         {
4131           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4132                        TREE_OPERAND (op, 1));
4133           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4134           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4135         }
4136     }
4137
4138   return win;
4139 }
4140 \f
4141 /* Return OP or a simpler expression for a narrower value
4142    which can be sign-extended or zero-extended to give back OP.
4143    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
4144    or 0 if the value should be sign-extended.  */
4145
4146 tree
4147 get_narrower (tree op, int *unsignedp_ptr)
4148 {
4149   int uns = 0;
4150   int first = 1;
4151   tree win = op;
4152
4153   while (TREE_CODE (op) == NOP_EXPR)
4154     {
4155       int bitschange
4156         = (TYPE_PRECISION (TREE_TYPE (op))
4157            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
4158
4159       /* Truncations are many-one so cannot be removed.  */
4160       if (bitschange < 0)
4161         break;
4162
4163       /* See what's inside this conversion.  If we decide to strip it,
4164          we will set WIN.  */
4165
4166       if (bitschange > 0)
4167         {
4168           op = TREE_OPERAND (op, 0);
4169           /* An extension: the outermost one can be stripped,
4170              but remember whether it is zero or sign extension.  */
4171           if (first)
4172             uns = TREE_UNSIGNED (TREE_TYPE (op));
4173           /* Otherwise, if a sign extension has been stripped,
4174              only sign extensions can now be stripped;
4175              if a zero extension has been stripped, only zero-extensions.  */
4176           else if (uns != TREE_UNSIGNED (TREE_TYPE (op)))
4177             break;
4178           first = 0;
4179         }
4180       else /* bitschange == 0 */
4181         {
4182           /* A change in nominal type can always be stripped, but we must
4183              preserve the unsignedness.  */
4184           if (first)
4185             uns = TREE_UNSIGNED (TREE_TYPE (op));
4186           first = 0;
4187           op = TREE_OPERAND (op, 0);
4188         }
4189
4190       win = op;
4191     }
4192
4193   if (TREE_CODE (op) == COMPONENT_REF
4194       /* Since type_for_size always gives an integer type.  */
4195       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
4196       /* Ensure field is laid out already.  */
4197       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0)
4198     {
4199       unsigned HOST_WIDE_INT innerprec
4200         = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4201       int unsignedp = (TREE_UNSIGNED (TREE_OPERAND (op, 1))
4202                        || TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
4203       tree type = (*lang_hooks.types.type_for_size) (innerprec, unsignedp);
4204
4205       /* We can get this structure field in a narrower type that fits it,
4206          but the resulting extension to its nominal type (a fullword type)
4207          must satisfy the same conditions as for other extensions.
4208
4209          Do this only for fields that are aligned (not bit-fields),
4210          because when bit-field insns will be used there is no
4211          advantage in doing this.  */
4212
4213       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
4214           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
4215           && (first || uns == TREE_UNSIGNED (TREE_OPERAND (op, 1)))
4216           && type != 0)
4217         {
4218           if (first)
4219             uns = TREE_UNSIGNED (TREE_OPERAND (op, 1));
4220           win = build (COMPONENT_REF, type, TREE_OPERAND (op, 0),
4221                        TREE_OPERAND (op, 1));
4222           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
4223           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
4224         }
4225     }
4226   *unsignedp_ptr = uns;
4227   return win;
4228 }
4229 \f
4230 /* Nonzero if integer constant C has a value that is permissible
4231    for type TYPE (an INTEGER_TYPE).  */
4232
4233 int
4234 int_fits_type_p (tree c, tree type)
4235 {
4236   tree type_low_bound = TYPE_MIN_VALUE (type);
4237   tree type_high_bound = TYPE_MAX_VALUE (type);
4238   int ok_for_low_bound, ok_for_high_bound;
4239
4240   /* Perform some generic filtering first, which may allow making a decision
4241      even if the bounds are not constant.  First, negative integers never fit
4242      in unsigned types, */
4243   if ((TREE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
4244       /* Also, unsigned integers with top bit set never fit signed types.  */
4245       || (! TREE_UNSIGNED (type)
4246           && TREE_UNSIGNED (TREE_TYPE (c)) && tree_int_cst_msb (c)))
4247     return 0;
4248
4249   /* If at least one bound of the type is a constant integer, we can check
4250      ourselves and maybe make a decision. If no such decision is possible, but
4251      this type is a subtype, try checking against that.  Otherwise, use
4252      force_fit_type, which checks against the precision.
4253
4254      Compute the status for each possibly constant bound, and return if we see
4255      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
4256      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
4257      for "constant known to fit".  */
4258
4259   ok_for_low_bound = -1;
4260   ok_for_high_bound = -1;
4261
4262   /* Check if C >= type_low_bound.  */
4263   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
4264     {
4265       ok_for_low_bound = ! tree_int_cst_lt (c, type_low_bound);
4266       if (! ok_for_low_bound)
4267         return 0;
4268     }
4269
4270   /* Check if c <= type_high_bound.  */
4271   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
4272     {
4273       ok_for_high_bound = ! tree_int_cst_lt (type_high_bound, c);
4274       if (! ok_for_high_bound)
4275         return 0;
4276     }
4277
4278   /* If the constant fits both bounds, the result is known.  */
4279   if (ok_for_low_bound == 1 && ok_for_high_bound == 1)
4280     return 1;
4281
4282   /* If we haven't been able to decide at this point, there nothing more we
4283      can check ourselves here. Look at the base type if we have one.  */
4284   else if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
4285     return int_fits_type_p (c, TREE_TYPE (type));
4286
4287   /* Or to force_fit_type, if nothing else.  */
4288   else
4289     {
4290       c = copy_node (c);
4291       TREE_TYPE (c) = type;
4292       return !force_fit_type (c, 0);
4293     }
4294 }
4295
4296 /* Returns true if T is, contains, or refers to a type with variable
4297    size.  This concept is more general than that of C99 'variably
4298    modified types': in C99, a struct type is never variably modified
4299    because a VLA may not appear as a structure member.  However, in
4300    GNU C code like:
4301
4302      struct S { int i[f()]; };
4303
4304    is valid, and other languages may define similar constructs.  */
4305
4306 bool
4307 variably_modified_type_p (tree type)
4308 {
4309   tree t;
4310
4311   if (type == error_mark_node)
4312     return false;
4313
4314   /* If TYPE itself has variable size, it is variably modified.
4315
4316      We do not yet have a representation of the C99 '[*]' syntax.
4317      When a representation is chosen, this function should be modified
4318      to test for that case as well.  */
4319   t = TYPE_SIZE (type);
4320   if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4321     return true;
4322
4323   switch (TREE_CODE (type))
4324     {
4325     case POINTER_TYPE:
4326     case REFERENCE_TYPE:
4327     case ARRAY_TYPE:
4328       /* If TYPE is a pointer or reference, it is variably modified if
4329          the type pointed to is variably modified.  Similarly for arrays;
4330          note that VLAs are handled by the TYPE_SIZE check above.  */
4331       return variably_modified_type_p (TREE_TYPE (type));
4332
4333     case FUNCTION_TYPE:
4334     case METHOD_TYPE:
4335       /* If TYPE is a function type, it is variably modified if any of the
4336          parameters or the return type are variably modified.  */
4337       {
4338         tree parm;
4339
4340         if (variably_modified_type_p (TREE_TYPE (type)))
4341           return true;
4342         for (parm = TYPE_ARG_TYPES (type);
4343              parm && parm != void_list_node;
4344              parm = TREE_CHAIN (parm))
4345           if (variably_modified_type_p (TREE_VALUE (parm)))
4346             return true;
4347       }
4348       break;
4349
4350     case INTEGER_TYPE:
4351       /* Scalar types are variably modified if their end points
4352          aren't constant.  */
4353       t = TYPE_MIN_VALUE (type);
4354       if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4355         return true;
4356       t = TYPE_MAX_VALUE (type);
4357       if (t && t != error_mark_node && TREE_CODE (t) != INTEGER_CST)
4358         return true;
4359       return false;
4360
4361     default:
4362       break;
4363     }
4364
4365   /* The current language may have other cases to check, but in general,
4366      all other types are not variably modified.  */
4367   return (*lang_hooks.tree_inlining.var_mod_type_p) (type);
4368 }
4369
4370 /* Given a DECL or TYPE, return the scope in which it was declared, or
4371    NULL_TREE if there is no containing scope.  */
4372
4373 tree
4374 get_containing_scope (tree t)
4375 {
4376   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
4377 }
4378
4379 /* Return the innermost context enclosing DECL that is
4380    a FUNCTION_DECL, or zero if none.  */
4381
4382 tree
4383 decl_function_context (tree decl)
4384 {
4385   tree context;
4386
4387   if (TREE_CODE (decl) == ERROR_MARK)
4388     return 0;
4389
4390   if (TREE_CODE (decl) == SAVE_EXPR)
4391     context = SAVE_EXPR_CONTEXT (decl);
4392
4393   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
4394      where we look up the function at runtime.  Such functions always take
4395      a first argument of type 'pointer to real context'.
4396
4397      C++ should really be fixed to use DECL_CONTEXT for the real context,
4398      and use something else for the "virtual context".  */
4399   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
4400     context
4401       = TYPE_MAIN_VARIANT
4402         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4403   else
4404     context = DECL_CONTEXT (decl);
4405
4406   while (context && TREE_CODE (context) != FUNCTION_DECL)
4407     {
4408       if (TREE_CODE (context) == BLOCK)
4409         context = BLOCK_SUPERCONTEXT (context);
4410       else
4411         context = get_containing_scope (context);
4412     }
4413
4414   return context;
4415 }
4416
4417 /* Return the innermost context enclosing DECL that is
4418    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
4419    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
4420
4421 tree
4422 decl_type_context (tree decl)
4423 {
4424   tree context = DECL_CONTEXT (decl);
4425
4426   while (context)
4427     switch (TREE_CODE (context))
4428       {
4429       case NAMESPACE_DECL:
4430       case TRANSLATION_UNIT_DECL:
4431         return NULL_TREE;
4432
4433       case RECORD_TYPE:
4434       case UNION_TYPE:
4435       case QUAL_UNION_TYPE:
4436         return context;
4437         
4438       case TYPE_DECL:
4439       case FUNCTION_DECL:
4440         context = DECL_CONTEXT (context);
4441         break;
4442         
4443       case BLOCK:
4444         context = BLOCK_SUPERCONTEXT (context);
4445         break;
4446         
4447       default:
4448         abort ();
4449       }
4450
4451   return NULL_TREE;
4452 }
4453
4454 /* CALL is a CALL_EXPR.  Return the declaration for the function
4455    called, or NULL_TREE if the called function cannot be
4456    determined.  */
4457
4458 tree
4459 get_callee_fndecl (tree call)
4460 {
4461   tree addr;
4462
4463   /* It's invalid to call this function with anything but a
4464      CALL_EXPR.  */
4465   if (TREE_CODE (call) != CALL_EXPR)
4466     abort ();
4467
4468   /* The first operand to the CALL is the address of the function
4469      called.  */
4470   addr = TREE_OPERAND (call, 0);
4471
4472   STRIP_NOPS (addr);
4473
4474   /* If this is a readonly function pointer, extract its initial value.  */
4475   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
4476       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
4477       && DECL_INITIAL (addr))
4478     addr = DECL_INITIAL (addr);
4479
4480   /* If the address is just `&f' for some function `f', then we know
4481      that `f' is being called.  */
4482   if (TREE_CODE (addr) == ADDR_EXPR
4483       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
4484     return TREE_OPERAND (addr, 0);
4485   
4486   /* We couldn't figure out what was being called.  Maybe the front
4487      end has some idea.  */
4488   return (*lang_hooks.lang_get_callee_fndecl) (call);
4489 }
4490
4491 /* Print debugging information about tree nodes generated during the compile,
4492    and any language-specific information.  */
4493
4494 void
4495 dump_tree_statistics (void)
4496 {
4497 #ifdef GATHER_STATISTICS
4498   int i;
4499   int total_nodes, total_bytes;
4500 #endif
4501
4502   fprintf (stderr, "\n??? tree nodes created\n\n");
4503 #ifdef GATHER_STATISTICS
4504   fprintf (stderr, "Kind                   Nodes      Bytes\n");
4505   fprintf (stderr, "---------------------------------------\n");
4506   total_nodes = total_bytes = 0;
4507   for (i = 0; i < (int) all_kinds; i++)
4508     {
4509       fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
4510                tree_node_counts[i], tree_node_sizes[i]);
4511       total_nodes += tree_node_counts[i];
4512       total_bytes += tree_node_sizes[i];
4513     }
4514   fprintf (stderr, "---------------------------------------\n");
4515   fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
4516   fprintf (stderr, "---------------------------------------\n");
4517 #else
4518   fprintf (stderr, "(No per-node statistics)\n");
4519 #endif
4520   print_type_hash_statistics ();
4521   (*lang_hooks.print_statistics) ();
4522 }
4523 \f
4524 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
4525
4526 /* Generate a crc32 of a string.  */
4527
4528 unsigned
4529 crc32_string (unsigned chksum, const char *string)
4530 {
4531   do
4532     {
4533       unsigned value = *string << 24;
4534       unsigned ix;
4535       
4536       for (ix = 8; ix--; value <<= 1)
4537         {
4538           unsigned feedback;
4539           
4540           feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
4541           chksum <<= 1;
4542           chksum ^= feedback;
4543         }
4544     }
4545   while (*string++);
4546   return chksum;
4547 }
4548
4549 /* P is a string that will be used in a symbol.  Mask out any characters
4550    that are not valid in that context.  */
4551
4552 void
4553 clean_symbol_name (char *p)
4554 {
4555   for (; *p; p++)
4556     if (! (ISALNUM (*p)
4557 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
4558             || *p == '$'
4559 #endif
4560 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
4561             || *p == '.'
4562 #endif
4563            ))
4564       *p = '_';
4565 }
4566
4567 /* Generate a name for a function unique to this translation unit.
4568    TYPE is some string to identify the purpose of this function to the
4569    linker or collect2.  */
4570
4571 tree
4572 get_file_function_name_long (const char *type)
4573 {
4574   char *buf;
4575   const char *p;
4576   char *q;
4577
4578   if (first_global_object_name)
4579     p = first_global_object_name;
4580   else
4581     {
4582       /* We don't have anything that we know to be unique to this translation
4583          unit, so use what we do have and throw in some randomness.  */
4584       unsigned len;
4585       const char *name = weak_global_object_name;
4586       const char *file = main_input_filename;
4587
4588       if (! name)
4589         name = "";
4590       if (! file)
4591         file = input_filename;
4592
4593       len = strlen (file);
4594       q = alloca (9 * 2 + len + 1);
4595       memcpy (q, file, len + 1);
4596       clean_symbol_name (q);
4597
4598       sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
4599                crc32_string (0, flag_random_seed));
4600
4601       p = q;
4602     }
4603
4604   buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
4605
4606   /* Set up the name of the file-level functions we may need.
4607      Use a global object (which is already required to be unique over
4608      the program) rather than the file name (which imposes extra
4609      constraints).  */
4610   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
4611
4612   return get_identifier (buf);
4613 }
4614
4615 /* If KIND=='I', return a suitable global initializer (constructor) name.
4616    If KIND=='D', return a suitable global clean-up (destructor) name.  */
4617
4618 tree
4619 get_file_function_name (int kind)
4620 {
4621   char p[2];
4622
4623   p[0] = kind;
4624   p[1] = 0;
4625
4626   return get_file_function_name_long (p);
4627 }
4628 \f
4629 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4630    The result is placed in BUFFER (which has length BIT_SIZE),
4631    with one bit in each char ('\000' or '\001').
4632
4633    If the constructor is constant, NULL_TREE is returned.
4634    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
4635
4636 tree
4637 get_set_constructor_bits (tree init, char *buffer, int bit_size)
4638 {
4639   int i;
4640   tree vals;
4641   HOST_WIDE_INT domain_min
4642     = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (init))), 0);
4643   tree non_const_bits = NULL_TREE;
4644
4645   for (i = 0; i < bit_size; i++)
4646     buffer[i] = 0;
4647
4648   for (vals = TREE_OPERAND (init, 1);
4649        vals != NULL_TREE; vals = TREE_CHAIN (vals))
4650     {
4651       if (!host_integerp (TREE_VALUE (vals), 0)
4652           || (TREE_PURPOSE (vals) != NULL_TREE
4653               && !host_integerp (TREE_PURPOSE (vals), 0)))
4654         non_const_bits
4655           = tree_cons (TREE_PURPOSE (vals), TREE_VALUE (vals), non_const_bits);
4656       else if (TREE_PURPOSE (vals) != NULL_TREE)
4657         {
4658           /* Set a range of bits to ones.  */
4659           HOST_WIDE_INT lo_index
4660             = tree_low_cst (TREE_PURPOSE (vals), 0) - domain_min;
4661           HOST_WIDE_INT hi_index
4662             = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
4663
4664           if (lo_index < 0 || lo_index >= bit_size
4665               || hi_index < 0 || hi_index >= bit_size)
4666             abort ();
4667           for (; lo_index <= hi_index; lo_index++)
4668             buffer[lo_index] = 1;
4669         }
4670       else
4671         {
4672           /* Set a single bit to one.  */
4673           HOST_WIDE_INT index
4674             = tree_low_cst (TREE_VALUE (vals), 0) - domain_min;
4675           if (index < 0 || index >= bit_size)
4676             {
4677               error ("invalid initializer for bit string");
4678               return NULL_TREE;
4679             }
4680           buffer[index] = 1;
4681         }
4682     }
4683   return non_const_bits;
4684 }
4685
4686 /* Expand (the constant part of) a SET_TYPE CONSTRUCTOR node.
4687    The result is placed in BUFFER (which is an array of bytes).
4688    If the constructor is constant, NULL_TREE is returned.
4689    Otherwise, a TREE_LIST of the non-constant elements is emitted.  */
4690
4691 tree
4692 get_set_constructor_bytes (tree init, unsigned char *buffer, int wd_size)
4693 {
4694   int i;
4695   int set_word_size = BITS_PER_UNIT;
4696   int bit_size = wd_size * set_word_size;
4697   int bit_pos = 0;
4698   unsigned char *bytep = buffer;
4699   char *bit_buffer = alloca (bit_size);
4700   tree non_const_bits = get_set_constructor_bits (init, bit_buffer, bit_size);
4701
4702   for (i = 0; i < wd_size; i++)
4703     buffer[i] = 0;
4704
4705   for (i = 0; i < bit_size; i++)
4706     {
4707       if (bit_buffer[i])
4708         {
4709           if (BYTES_BIG_ENDIAN)
4710             *bytep |= (1 << (set_word_size - 1 - bit_pos));
4711           else
4712             *bytep |= 1 << bit_pos;
4713         }
4714       bit_pos++;
4715       if (bit_pos >= set_word_size)
4716         bit_pos = 0, bytep++;
4717     }
4718   return non_const_bits;
4719 }
4720 \f
4721 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
4722 /* Complain that the tree code of NODE does not match the expected CODE.
4723    FILE, LINE, and FUNCTION are of the caller.  */
4724
4725 void
4726 tree_check_failed (const tree node, enum tree_code code, const char *file,
4727                    int line, const char *function)
4728 {
4729   internal_error ("tree check: expected %s, have %s in %s, at %s:%d",
4730                   tree_code_name[code], tree_code_name[TREE_CODE (node)],
4731                   function, trim_filename (file), line);
4732 }
4733
4734 /* Similar to above, except that we check for a class of tree
4735    code, given in CL.  */
4736
4737 void
4738 tree_class_check_failed (const tree node, int cl, const char *file,
4739                          int line, const char *function)
4740 {
4741   internal_error
4742     ("tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d",
4743      cl, TREE_CODE_CLASS (TREE_CODE (node)),
4744      tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
4745 }
4746
4747 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
4748    (dynamically sized) vector.  */
4749
4750 void
4751 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
4752                            const char *function)
4753 {
4754   internal_error
4755     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
4756      idx + 1, len, function, trim_filename (file), line);
4757 }
4758
4759 /* Similar to above, except that the check is for the bounds of the operand
4760    vector of an expression node.  */
4761
4762 void
4763 tree_operand_check_failed (int idx, enum tree_code code, const char *file,
4764                            int line, const char *function)
4765 {
4766   internal_error
4767     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
4768      idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
4769      function, trim_filename (file), line);
4770 }
4771 #endif /* ENABLE_TREE_CHECKING */
4772 \f
4773 /* For a new vector type node T, build the information necessary for
4774    debugging output.  */
4775
4776 static void
4777 finish_vector_type (tree t)
4778 {
4779   layout_type (t);
4780
4781   {
4782     tree index = build_int_2 (TYPE_VECTOR_SUBPARTS (t) - 1, 0);
4783     tree array = build_array_type (TREE_TYPE (t),
4784                                    build_index_type (index));
4785     tree rt = make_node (RECORD_TYPE);
4786
4787     TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
4788     DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
4789     layout_type (rt);
4790     TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
4791     /* In dwarfout.c, type lookup uses TYPE_UID numbers.  We want to output
4792        the representation type, and we want to find that die when looking up
4793        the vector type.  This is most easily achieved by making the TYPE_UID
4794        numbers equal.  */
4795     TYPE_UID (rt) = TYPE_UID (t);
4796   }
4797 }
4798
4799 /* Create nodes for all integer types (and error_mark_node) using the sizes
4800    of C datatypes.  The caller should call set_sizetype soon after calling
4801    this function to select one of the types as sizetype.  */
4802
4803 void
4804 build_common_tree_nodes (int signed_char)
4805 {
4806   error_mark_node = make_node (ERROR_MARK);
4807   TREE_TYPE (error_mark_node) = error_mark_node;
4808
4809   initialize_sizetypes ();
4810
4811   /* Define both `signed char' and `unsigned char'.  */
4812   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
4813   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
4814
4815   /* Define `char', which is like either `signed char' or `unsigned char'
4816      but not the same as either.  */
4817   char_type_node
4818     = (signed_char
4819        ? make_signed_type (CHAR_TYPE_SIZE)
4820        : make_unsigned_type (CHAR_TYPE_SIZE));
4821
4822   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
4823   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
4824   integer_type_node = make_signed_type (INT_TYPE_SIZE);
4825   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
4826   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
4827   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
4828   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
4829   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
4830
4831   /* Define a boolean type.  This type only represents boolean values but
4832      may be larger than char depending on the value of BOOL_TYPE_SIZE.
4833      Front ends which want to override this size (i.e. Java) can redefine
4834      boolean_type_node before calling build_common_tree_nodes_2.  */
4835   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
4836   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
4837   TYPE_MAX_VALUE (boolean_type_node) = build_int_2 (1, 0);
4838   TREE_TYPE (TYPE_MAX_VALUE (boolean_type_node)) = boolean_type_node;
4839   TYPE_PRECISION (boolean_type_node) = 1;
4840
4841   intQI_type_node = make_signed_type (GET_MODE_BITSIZE (QImode));
4842   intHI_type_node = make_signed_type (GET_MODE_BITSIZE (HImode));
4843   intSI_type_node = make_signed_type (GET_MODE_BITSIZE (SImode));
4844   intDI_type_node = make_signed_type (GET_MODE_BITSIZE (DImode));
4845   intTI_type_node = make_signed_type (GET_MODE_BITSIZE (TImode));
4846
4847   unsigned_intQI_type_node = make_unsigned_type (GET_MODE_BITSIZE (QImode));
4848   unsigned_intHI_type_node = make_unsigned_type (GET_MODE_BITSIZE (HImode));
4849   unsigned_intSI_type_node = make_unsigned_type (GET_MODE_BITSIZE (SImode));
4850   unsigned_intDI_type_node = make_unsigned_type (GET_MODE_BITSIZE (DImode));
4851   unsigned_intTI_type_node = make_unsigned_type (GET_MODE_BITSIZE (TImode));
4852 }
4853
4854 /* Call this function after calling build_common_tree_nodes and set_sizetype.
4855    It will create several other common tree nodes.  */
4856
4857 void
4858 build_common_tree_nodes_2 (int short_double)
4859 {
4860   /* Define these next since types below may used them.  */
4861   integer_zero_node = build_int_2 (0, 0);
4862   integer_one_node = build_int_2 (1, 0);
4863   integer_minus_one_node = build_int_2 (-1, -1);
4864
4865   size_zero_node = size_int (0);
4866   size_one_node = size_int (1);
4867   bitsize_zero_node = bitsize_int (0);
4868   bitsize_one_node = bitsize_int (1);
4869   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
4870
4871   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
4872   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
4873
4874   void_type_node = make_node (VOID_TYPE);
4875   layout_type (void_type_node);
4876
4877   /* We are not going to have real types in C with less than byte alignment,
4878      so we might as well not have any types that claim to have it.  */
4879   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
4880   TYPE_USER_ALIGN (void_type_node) = 0;
4881
4882   null_pointer_node = build_int_2 (0, 0);
4883   TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
4884   layout_type (TREE_TYPE (null_pointer_node));
4885
4886   ptr_type_node = build_pointer_type (void_type_node);
4887   const_ptr_type_node
4888     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
4889
4890   float_type_node = make_node (REAL_TYPE);
4891   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
4892   layout_type (float_type_node);
4893
4894   double_type_node = make_node (REAL_TYPE);
4895   if (short_double)
4896     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
4897   else
4898     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
4899   layout_type (double_type_node);
4900
4901   long_double_type_node = make_node (REAL_TYPE);
4902   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
4903   layout_type (long_double_type_node);
4904
4905   float_ptr_type_node = build_pointer_type (float_type_node);
4906   double_ptr_type_node = build_pointer_type (double_type_node);
4907   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
4908   integer_ptr_type_node = build_pointer_type (integer_type_node);
4909
4910   complex_integer_type_node = make_node (COMPLEX_TYPE);
4911   TREE_TYPE (complex_integer_type_node) = integer_type_node;
4912   layout_type (complex_integer_type_node);
4913
4914   complex_float_type_node = make_node (COMPLEX_TYPE);
4915   TREE_TYPE (complex_float_type_node) = float_type_node;
4916   layout_type (complex_float_type_node);
4917
4918   complex_double_type_node = make_node (COMPLEX_TYPE);
4919   TREE_TYPE (complex_double_type_node) = double_type_node;
4920   layout_type (complex_double_type_node);
4921
4922   complex_long_double_type_node = make_node (COMPLEX_TYPE);
4923   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
4924   layout_type (complex_long_double_type_node);
4925
4926   {
4927     tree t = (*targetm.build_builtin_va_list) ();
4928
4929     /* Many back-ends define record types without setting TYPE_NAME.
4930        If we copied the record type here, we'd keep the original
4931        record type without a name.  This breaks name mangling.  So,
4932        don't copy record types and let c_common_nodes_and_builtins()
4933        declare the type to be __builtin_va_list.  */
4934     if (TREE_CODE (t) != RECORD_TYPE)
4935       t = build_type_copy (t);
4936
4937     va_list_type_node = t;
4938   }
4939
4940   unsigned_V4SI_type_node
4941     = make_vector (V4SImode, unsigned_intSI_type_node, 1);
4942   unsigned_V2HI_type_node
4943     = make_vector (V2HImode, unsigned_intHI_type_node, 1);
4944   unsigned_V2SI_type_node
4945     = make_vector (V2SImode, unsigned_intSI_type_node, 1);
4946   unsigned_V2DI_type_node
4947     = make_vector (V2DImode, unsigned_intDI_type_node, 1);
4948   unsigned_V4HI_type_node
4949     = make_vector (V4HImode, unsigned_intHI_type_node, 1);
4950   unsigned_V8QI_type_node
4951     = make_vector (V8QImode, unsigned_intQI_type_node, 1);
4952   unsigned_V8HI_type_node
4953     = make_vector (V8HImode, unsigned_intHI_type_node, 1);
4954   unsigned_V16QI_type_node
4955     = make_vector (V16QImode, unsigned_intQI_type_node, 1);
4956   unsigned_V1DI_type_node
4957     = make_vector (V1DImode, unsigned_intDI_type_node, 1);
4958
4959   V16SF_type_node = make_vector (V16SFmode, float_type_node, 0);
4960   V4SF_type_node = make_vector (V4SFmode, float_type_node, 0);
4961   V4SI_type_node = make_vector (V4SImode, intSI_type_node, 0);
4962   V2HI_type_node = make_vector (V2HImode, intHI_type_node, 0);
4963   V2SI_type_node = make_vector (V2SImode, intSI_type_node, 0);
4964   V2DI_type_node = make_vector (V2DImode, intDI_type_node, 0);
4965   V4HI_type_node = make_vector (V4HImode, intHI_type_node, 0);
4966   V8QI_type_node = make_vector (V8QImode, intQI_type_node, 0);
4967   V8HI_type_node = make_vector (V8HImode, intHI_type_node, 0);
4968   V2SF_type_node = make_vector (V2SFmode, float_type_node, 0);
4969   V2DF_type_node = make_vector (V2DFmode, double_type_node, 0);
4970   V16QI_type_node = make_vector (V16QImode, intQI_type_node, 0);
4971   V1DI_type_node = make_vector (V1DImode, intDI_type_node, 0);
4972   V4DF_type_node = make_vector (V4DFmode, double_type_node, 0);
4973 }
4974
4975 /* Returns a vector tree node given a vector mode, the inner type, and
4976    the signness.  */
4977
4978 static tree
4979 make_vector (enum machine_mode mode, tree innertype, int unsignedp)
4980 {
4981   tree t;
4982
4983   t = make_node (VECTOR_TYPE);
4984   TREE_TYPE (t) = innertype;
4985   TYPE_MODE (t) = mode;
4986   TREE_UNSIGNED (TREE_TYPE (t)) = unsignedp;
4987   finish_vector_type (t);
4988
4989   return t;
4990 }
4991
4992 /* Given an initializer INIT, return TRUE if INIT is zero or some
4993    aggregate of zeros.  Otherwise return FALSE.  */
4994
4995 bool
4996 initializer_zerop (tree init)
4997 {
4998   STRIP_NOPS (init);
4999
5000   switch (TREE_CODE (init))
5001     {
5002     case INTEGER_CST:
5003       return integer_zerop (init);
5004     case REAL_CST:
5005       return real_zerop (init)
5006         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
5007     case COMPLEX_CST:
5008       return integer_zerop (init)
5009         || (real_zerop (init)
5010             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
5011             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
5012     case CONSTRUCTOR:
5013       {
5014         /* Set is empty if it has no elements.  */
5015         if ((TREE_CODE (TREE_TYPE (init)) == SET_TYPE)
5016              && CONSTRUCTOR_ELTS (init))
5017           return false;
5018
5019         if (AGGREGATE_TYPE_P (TREE_TYPE (init)))
5020           {
5021             tree aggr_init = CONSTRUCTOR_ELTS (init);
5022
5023             while (aggr_init)
5024               {
5025                 if (! initializer_zerop (TREE_VALUE (aggr_init)))
5026                   return false;
5027                 aggr_init = TREE_CHAIN (aggr_init);
5028               }
5029             return true;
5030           }
5031         return false;
5032       }
5033     default:
5034       return false;
5035     }
5036 }
5037
5038 #include "gt-tree.h"