OSDN Git Service

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