OSDN Git Service

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