OSDN Git Service

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