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