OSDN Git Service

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