OSDN Git Service

* coretypes.h (tls_model): Add TLS_MODEL_NONE as 0.
[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, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, 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_P (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
2484                    && DECL_THREAD_LOCAL_P (node)))
2485         tc = false;
2486       else
2487         ti = tc = false;
2488     }
2489   else if (CONSTANT_CLASS_P (node))
2490     ;
2491   else
2492     {
2493       ti = tc = false;
2494       se |= TREE_SIDE_EFFECTS (node);
2495     }
2496
2497   TREE_CONSTANT (t) = tc;
2498   TREE_INVARIANT (t) = ti;
2499   TREE_SIDE_EFFECTS (t) = se;
2500 #undef UPDATE_TITCSE
2501 }
2502
2503 /* Build an expression of code CODE, data type TYPE, and operands as
2504    specified.  Expressions and reference nodes can be created this way.
2505    Constants, decls, types and misc nodes cannot be.
2506
2507    We define 5 non-variadic functions, from 0 to 4 arguments.  This is
2508    enough for all extant tree codes.  These functions can be called
2509    directly (preferably!), but can also be obtained via GCC preprocessor
2510    magic within the build macro.  */
2511
2512 tree
2513 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
2514 {
2515   tree t;
2516
2517   gcc_assert (TREE_CODE_LENGTH (code) == 0);
2518
2519   t = make_node_stat (code PASS_MEM_STAT);
2520   TREE_TYPE (t) = tt;
2521
2522   return t;
2523 }
2524
2525 tree
2526 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
2527 {
2528   int length = sizeof (struct tree_exp);
2529 #ifdef GATHER_STATISTICS
2530   tree_node_kind kind;
2531 #endif
2532   tree t;
2533
2534 #ifdef GATHER_STATISTICS
2535   switch (TREE_CODE_CLASS (code))
2536     {
2537     case tcc_statement:  /* an expression with side effects */
2538       kind = s_kind;
2539       break;
2540     case tcc_reference:  /* a reference */
2541       kind = r_kind;
2542       break;
2543     default:
2544       kind = e_kind;
2545       break;
2546     }
2547
2548   tree_node_counts[(int) kind]++;
2549   tree_node_sizes[(int) kind] += length;
2550 #endif
2551
2552   gcc_assert (TREE_CODE_LENGTH (code) == 1);
2553
2554   t = ggc_alloc_zone_pass_stat (length, &tree_zone);
2555
2556   memset (t, 0, sizeof (struct tree_common));
2557
2558   TREE_SET_CODE (t, code);
2559
2560   TREE_TYPE (t) = type;
2561 #ifdef USE_MAPPED_LOCATION
2562   SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
2563 #else
2564   SET_EXPR_LOCUS (t, NULL);
2565 #endif
2566   TREE_COMPLEXITY (t) = 0;
2567   TREE_OPERAND (t, 0) = node;
2568   TREE_BLOCK (t) = NULL_TREE;
2569   if (node && !TYPE_P (node))
2570     {
2571       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
2572       TREE_READONLY (t) = TREE_READONLY (node);
2573     }
2574
2575   if (TREE_CODE_CLASS (code) == tcc_statement)
2576     TREE_SIDE_EFFECTS (t) = 1;
2577   else switch (code)
2578     {
2579     case VA_ARG_EXPR:
2580       /* All of these have side-effects, no matter what their
2581          operands are.  */
2582       TREE_SIDE_EFFECTS (t) = 1;
2583       TREE_READONLY (t) = 0;
2584       break;
2585
2586     case MISALIGNED_INDIRECT_REF:
2587     case ALIGN_INDIRECT_REF:
2588     case INDIRECT_REF:
2589       /* Whether a dereference is readonly has nothing to do with whether
2590          its operand is readonly.  */
2591       TREE_READONLY (t) = 0;
2592       break;
2593
2594     case ADDR_EXPR:
2595       if (node)
2596         recompute_tree_invarant_for_addr_expr (t);
2597       break;
2598
2599     default:
2600       if (TREE_CODE_CLASS (code) == tcc_unary
2601           && node && !TYPE_P (node)
2602           && TREE_CONSTANT (node))
2603         TREE_CONSTANT (t) = 1;
2604       if (TREE_CODE_CLASS (code) == tcc_unary
2605           && node && TREE_INVARIANT (node))
2606         TREE_INVARIANT (t) = 1;
2607       if (TREE_CODE_CLASS (code) == tcc_reference
2608           && node && TREE_THIS_VOLATILE (node))
2609         TREE_THIS_VOLATILE (t) = 1;
2610       break;
2611     }
2612
2613   return t;
2614 }
2615
2616 #define PROCESS_ARG(N)                  \
2617   do {                                  \
2618     TREE_OPERAND (t, N) = arg##N;       \
2619     if (arg##N &&!TYPE_P (arg##N))      \
2620       {                                 \
2621         if (TREE_SIDE_EFFECTS (arg##N)) \
2622           side_effects = 1;             \
2623         if (!TREE_READONLY (arg##N))    \
2624           read_only = 0;                \
2625         if (!TREE_CONSTANT (arg##N))    \
2626           constant = 0;                 \
2627         if (!TREE_INVARIANT (arg##N))   \
2628           invariant = 0;                \
2629       }                                 \
2630   } while (0)
2631
2632 tree
2633 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
2634 {
2635   bool constant, read_only, side_effects, invariant;
2636   tree t;
2637
2638   gcc_assert (TREE_CODE_LENGTH (code) == 2);
2639
2640   t = make_node_stat (code PASS_MEM_STAT);
2641   TREE_TYPE (t) = tt;
2642
2643   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
2644      result based on those same flags for the arguments.  But if the
2645      arguments aren't really even `tree' expressions, we shouldn't be trying
2646      to do this.  */
2647
2648   /* Expressions without side effects may be constant if their
2649      arguments are as well.  */
2650   constant = (TREE_CODE_CLASS (code) == tcc_comparison
2651               || TREE_CODE_CLASS (code) == tcc_binary);
2652   read_only = 1;
2653   side_effects = TREE_SIDE_EFFECTS (t);
2654   invariant = constant;
2655
2656   PROCESS_ARG(0);
2657   PROCESS_ARG(1);
2658
2659   TREE_READONLY (t) = read_only;
2660   TREE_CONSTANT (t) = constant;
2661   TREE_INVARIANT (t) = invariant;
2662   TREE_SIDE_EFFECTS (t) = side_effects;
2663   TREE_THIS_VOLATILE (t)
2664     = (TREE_CODE_CLASS (code) == tcc_reference
2665        && arg0 && TREE_THIS_VOLATILE (arg0));
2666
2667   return t;
2668 }
2669
2670 tree
2671 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2672              tree arg2 MEM_STAT_DECL)
2673 {
2674   bool constant, read_only, side_effects, invariant;
2675   tree t;
2676
2677   gcc_assert (TREE_CODE_LENGTH (code) == 3);
2678
2679   t = make_node_stat (code PASS_MEM_STAT);
2680   TREE_TYPE (t) = tt;
2681
2682   side_effects = TREE_SIDE_EFFECTS (t);
2683
2684   PROCESS_ARG(0);
2685   PROCESS_ARG(1);
2686   PROCESS_ARG(2);
2687
2688   if (code == CALL_EXPR && !side_effects)
2689     {
2690       tree node;
2691       int i;
2692
2693       /* Calls have side-effects, except those to const or
2694          pure functions.  */
2695       i = call_expr_flags (t);
2696       if (!(i & (ECF_CONST | ECF_PURE)))
2697         side_effects = 1;
2698
2699       /* And even those have side-effects if their arguments do.  */
2700       else for (node = arg1; node; node = TREE_CHAIN (node))
2701         if (TREE_SIDE_EFFECTS (TREE_VALUE (node)))
2702           {
2703             side_effects = 1;
2704             break;
2705           }
2706     }
2707
2708   TREE_SIDE_EFFECTS (t) = side_effects;
2709   TREE_THIS_VOLATILE (t)
2710     = (TREE_CODE_CLASS (code) == tcc_reference
2711        && arg0 && TREE_THIS_VOLATILE (arg0));
2712
2713   return t;
2714 }
2715
2716 tree
2717 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2718              tree arg2, tree arg3 MEM_STAT_DECL)
2719 {
2720   bool constant, read_only, side_effects, invariant;
2721   tree t;
2722
2723   gcc_assert (TREE_CODE_LENGTH (code) == 4);
2724
2725   t = make_node_stat (code PASS_MEM_STAT);
2726   TREE_TYPE (t) = tt;
2727
2728   side_effects = TREE_SIDE_EFFECTS (t);
2729
2730   PROCESS_ARG(0);
2731   PROCESS_ARG(1);
2732   PROCESS_ARG(2);
2733   PROCESS_ARG(3);
2734
2735   TREE_SIDE_EFFECTS (t) = side_effects;
2736   TREE_THIS_VOLATILE (t)
2737     = (TREE_CODE_CLASS (code) == tcc_reference
2738        && arg0 && TREE_THIS_VOLATILE (arg0));
2739
2740   return t;
2741 }
2742
2743 tree
2744 build7_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
2745              tree arg2, tree arg3, tree arg4, tree arg5,
2746              tree arg6 MEM_STAT_DECL)
2747 {
2748   bool constant, read_only, side_effects, invariant;
2749   tree t;
2750
2751   gcc_assert (code == TARGET_MEM_REF);
2752
2753   t = make_node_stat (code PASS_MEM_STAT);
2754   TREE_TYPE (t) = tt;
2755
2756   side_effects = TREE_SIDE_EFFECTS (t);
2757
2758   PROCESS_ARG(0);
2759   PROCESS_ARG(1);
2760   PROCESS_ARG(2);
2761   PROCESS_ARG(3);
2762   PROCESS_ARG(4);
2763   PROCESS_ARG(5);
2764   PROCESS_ARG(6);
2765
2766   TREE_SIDE_EFFECTS (t) = side_effects;
2767   TREE_THIS_VOLATILE (t) = 0;
2768
2769   return t;
2770 }
2771
2772 /* Backup definition for non-gcc build compilers.  */
2773
2774 tree
2775 (build) (enum tree_code code, tree tt, ...)
2776 {
2777   tree t, arg0, arg1, arg2, arg3, arg4, arg5, arg6;
2778   int length = TREE_CODE_LENGTH (code);
2779   va_list p;
2780
2781   va_start (p, tt);
2782   switch (length)
2783     {
2784     case 0:
2785       t = build0 (code, tt);
2786       break;
2787     case 1:
2788       arg0 = va_arg (p, tree);
2789       t = build1 (code, tt, arg0);
2790       break;
2791     case 2:
2792       arg0 = va_arg (p, tree);
2793       arg1 = va_arg (p, tree);
2794       t = build2 (code, tt, arg0, arg1);
2795       break;
2796     case 3:
2797       arg0 = va_arg (p, tree);
2798       arg1 = va_arg (p, tree);
2799       arg2 = va_arg (p, tree);
2800       t = build3 (code, tt, arg0, arg1, arg2);
2801       break;
2802     case 4:
2803       arg0 = va_arg (p, tree);
2804       arg1 = va_arg (p, tree);
2805       arg2 = va_arg (p, tree);
2806       arg3 = va_arg (p, tree);
2807       t = build4 (code, tt, arg0, arg1, arg2, arg3);
2808       break;
2809     case 7:
2810       arg0 = va_arg (p, tree);
2811       arg1 = va_arg (p, tree);
2812       arg2 = va_arg (p, tree);
2813       arg3 = va_arg (p, tree);
2814       arg4 = va_arg (p, tree);
2815       arg5 = va_arg (p, tree);
2816       arg6 = va_arg (p, tree);
2817       t = build7 (code, tt, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
2818       break;
2819     default:
2820       gcc_unreachable ();
2821     }
2822   va_end (p);
2823
2824   return t;
2825 }
2826
2827 /* Similar except don't specify the TREE_TYPE
2828    and leave the TREE_SIDE_EFFECTS as 0.
2829    It is permissible for arguments to be null,
2830    or even garbage if their values do not matter.  */
2831
2832 tree
2833 build_nt (enum tree_code code, ...)
2834 {
2835   tree t;
2836   int length;
2837   int i;
2838   va_list p;
2839
2840   va_start (p, code);
2841
2842   t = make_node (code);
2843   length = TREE_CODE_LENGTH (code);
2844
2845   for (i = 0; i < length; i++)
2846     TREE_OPERAND (t, i) = va_arg (p, tree);
2847
2848   va_end (p);
2849   return t;
2850 }
2851 \f
2852 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
2853    We do NOT enter this node in any sort of symbol table.
2854
2855    layout_decl is used to set up the decl's storage layout.
2856    Other slots are initialized to 0 or null pointers.  */
2857
2858 tree
2859 build_decl_stat (enum tree_code code, tree name, tree type MEM_STAT_DECL)
2860 {
2861   tree t;
2862
2863   t = make_node_stat (code PASS_MEM_STAT);
2864
2865 /*  if (type == error_mark_node)
2866     type = integer_type_node; */
2867 /* That is not done, deliberately, so that having error_mark_node
2868    as the type can suppress useless errors in the use of this variable.  */
2869
2870   DECL_NAME (t) = name;
2871   TREE_TYPE (t) = type;
2872
2873   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
2874     layout_decl (t, 0);
2875   else if (code == FUNCTION_DECL)
2876     DECL_MODE (t) = FUNCTION_MODE;
2877
2878   /* Set default visibility to whatever the user supplied with
2879      visibility_specified depending on #pragma GCC visibility.  */
2880   DECL_VISIBILITY (t) = default_visibility;
2881   DECL_VISIBILITY_SPECIFIED (t) = visibility_options.inpragma;
2882
2883   return t;
2884 }
2885
2886 /* Builds and returns function declaration with NAME and TYPE.  */
2887
2888 tree
2889 build_fn_decl (const char *name, tree type)
2890 {
2891   tree id = get_identifier (name);
2892   tree decl = build_decl (FUNCTION_DECL, id, type);
2893
2894   DECL_EXTERNAL (decl) = 1;
2895   TREE_PUBLIC (decl) = 1;
2896   DECL_ARTIFICIAL (decl) = 1;
2897   TREE_NOTHROW (decl) = 1;
2898
2899   return decl;
2900 }
2901
2902 \f
2903 /* BLOCK nodes are used to represent the structure of binding contours
2904    and declarations, once those contours have been exited and their contents
2905    compiled.  This information is used for outputting debugging info.  */
2906
2907 tree
2908 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
2909 {
2910   tree block = make_node (BLOCK);
2911
2912   BLOCK_VARS (block) = vars;
2913   BLOCK_SUBBLOCKS (block) = subblocks;
2914   BLOCK_SUPERCONTEXT (block) = supercontext;
2915   BLOCK_CHAIN (block) = chain;
2916   return block;
2917 }
2918
2919 #if 1 /* ! defined(USE_MAPPED_LOCATION) */
2920 /* ??? gengtype doesn't handle conditionals */
2921 static GTY(()) tree last_annotated_node;
2922 #endif
2923
2924 #ifdef USE_MAPPED_LOCATION
2925
2926 expanded_location
2927 expand_location (source_location loc)
2928 {
2929   expanded_location xloc;
2930   if (loc == 0) { xloc.file = NULL; xloc.line = 0;  xloc.column = 0; }
2931   else
2932     {
2933       const struct line_map *map = linemap_lookup (&line_table, loc);
2934       xloc.file = map->to_file;
2935       xloc.line = SOURCE_LINE (map, loc);
2936       xloc.column = SOURCE_COLUMN (map, loc);
2937     };
2938   return xloc;
2939 }
2940
2941 #else
2942
2943 /* Record the exact location where an expression or an identifier were
2944    encountered.  */
2945
2946 void
2947 annotate_with_file_line (tree node, const char *file, int line)
2948 {
2949   /* Roughly one percent of the calls to this function are to annotate
2950      a node with the same information already attached to that node!
2951      Just return instead of wasting memory.  */
2952   if (EXPR_LOCUS (node)
2953       && (EXPR_FILENAME (node) == file
2954           || ! strcmp (EXPR_FILENAME (node), file))
2955       && EXPR_LINENO (node) == line)
2956     {
2957       last_annotated_node = node;
2958       return;
2959     }
2960
2961   /* In heavily macroized code (such as GCC itself) this single
2962      entry cache can reduce the number of allocations by more
2963      than half.  */
2964   if (last_annotated_node
2965       && EXPR_LOCUS (last_annotated_node)
2966       && (EXPR_FILENAME (last_annotated_node) == file
2967           || ! strcmp (EXPR_FILENAME (last_annotated_node), file))
2968       && EXPR_LINENO (last_annotated_node) == line)
2969     {
2970       SET_EXPR_LOCUS (node, EXPR_LOCUS (last_annotated_node));
2971       return;
2972     }
2973
2974   SET_EXPR_LOCUS (node, ggc_alloc (sizeof (location_t)));
2975   EXPR_LINENO (node) = line;
2976   EXPR_FILENAME (node) = file;
2977   last_annotated_node = node;
2978 }
2979
2980 void
2981 annotate_with_locus (tree node, location_t locus)
2982 {
2983   annotate_with_file_line (node, locus.file, locus.line);
2984 }
2985 #endif
2986 \f
2987 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
2988    is ATTRIBUTE.  */
2989
2990 tree
2991 build_decl_attribute_variant (tree ddecl, tree attribute)
2992 {
2993   DECL_ATTRIBUTES (ddecl) = attribute;
2994   return ddecl;
2995 }
2996
2997 /* Borrowed from hashtab.c iterative_hash implementation.  */
2998 #define mix(a,b,c) \
2999 { \
3000   a -= b; a -= c; a ^= (c>>13); \
3001   b -= c; b -= a; b ^= (a<< 8); \
3002   c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
3003   a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
3004   b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
3005   c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
3006   a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
3007   b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
3008   c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
3009 }
3010
3011
3012 /* Produce good hash value combining VAL and VAL2.  */
3013 static inline hashval_t
3014 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
3015 {
3016   /* the golden ratio; an arbitrary value.  */
3017   hashval_t a = 0x9e3779b9;
3018
3019   mix (a, val, val2);
3020   return val2;
3021 }
3022
3023 /* Produce good hash value combining PTR and VAL2.  */
3024 static inline hashval_t
3025 iterative_hash_pointer (void *ptr, hashval_t val2)
3026 {
3027   if (sizeof (ptr) == sizeof (hashval_t))
3028     return iterative_hash_hashval_t ((size_t) ptr, val2);
3029   else
3030     {
3031       hashval_t a = (hashval_t) (size_t) ptr;
3032       /* Avoid warnings about shifting of more than the width of the type on
3033          hosts that won't execute this path.  */
3034       int zero = 0;
3035       hashval_t b = (hashval_t) ((size_t) ptr >> (sizeof (hashval_t) * 8 + zero));
3036       mix (a, b, val2);
3037       return val2;
3038     }
3039 }
3040
3041 /* Produce good hash value combining VAL and VAL2.  */
3042 static inline hashval_t
3043 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
3044 {
3045   if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
3046     return iterative_hash_hashval_t (val, val2);
3047   else
3048     {
3049       hashval_t a = (hashval_t) val;
3050       /* Avoid warnings about shifting of more than the width of the type on
3051          hosts that won't execute this path.  */
3052       int zero = 0;
3053       hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
3054       mix (a, b, val2);
3055       if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
3056         {
3057           hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
3058           hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
3059           mix (a, b, val2);
3060         }
3061       return val2;
3062     }
3063 }
3064
3065 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
3066    is ATTRIBUTE.
3067
3068    Record such modified types already made so we don't make duplicates.  */
3069
3070 tree
3071 build_type_attribute_variant (tree ttype, tree attribute)
3072 {
3073   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
3074     {
3075       hashval_t hashcode = 0;
3076       tree ntype;
3077       enum tree_code code = TREE_CODE (ttype);
3078
3079       ntype = copy_node (ttype);
3080
3081       TYPE_POINTER_TO (ntype) = 0;
3082       TYPE_REFERENCE_TO (ntype) = 0;
3083       TYPE_ATTRIBUTES (ntype) = attribute;
3084
3085       /* Create a new main variant of TYPE.  */
3086       TYPE_MAIN_VARIANT (ntype) = ntype;
3087       TYPE_NEXT_VARIANT (ntype) = 0;
3088       set_type_quals (ntype, TYPE_UNQUALIFIED);
3089
3090       hashcode = iterative_hash_object (code, hashcode);
3091       if (TREE_TYPE (ntype))
3092         hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
3093                                           hashcode);
3094       hashcode = attribute_hash_list (attribute, hashcode);
3095
3096       switch (TREE_CODE (ntype))
3097         {
3098         case FUNCTION_TYPE:
3099           hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
3100           break;
3101         case ARRAY_TYPE:
3102           hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
3103                                             hashcode);
3104           break;
3105         case INTEGER_TYPE:
3106           hashcode = iterative_hash_object
3107             (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
3108           hashcode = iterative_hash_object
3109             (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
3110           break;
3111         case REAL_TYPE:
3112           {
3113             unsigned int precision = TYPE_PRECISION (ntype);
3114             hashcode = iterative_hash_object (precision, hashcode);
3115           }
3116           break;
3117         default:
3118           break;
3119         }
3120
3121       ntype = type_hash_canon (hashcode, ntype);
3122       ttype = build_qualified_type (ntype, TYPE_QUALS (ttype));
3123     }
3124
3125   return ttype;
3126 }
3127
3128
3129 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3130    or zero if not.
3131
3132    We try both `text' and `__text__', ATTR may be either one.  */
3133 /* ??? It might be a reasonable simplification to require ATTR to be only
3134    `text'.  One might then also require attribute lists to be stored in
3135    their canonicalized form.  */
3136
3137 static int
3138 is_attribute_with_length_p (const char *attr, int attr_len, tree ident)
3139 {
3140   int ident_len;
3141   const char *p;
3142
3143   if (TREE_CODE (ident) != IDENTIFIER_NODE)
3144     return 0;
3145   
3146   p = IDENTIFIER_POINTER (ident);
3147   ident_len = IDENTIFIER_LENGTH (ident);
3148   
3149   if (ident_len == attr_len
3150       && strcmp (attr, p) == 0)
3151     return 1;
3152
3153   /* If ATTR is `__text__', IDENT must be `text'; and vice versa.  */
3154   if (attr[0] == '_')
3155     {
3156       gcc_assert (attr[1] == '_');
3157       gcc_assert (attr[attr_len - 2] == '_');
3158       gcc_assert (attr[attr_len - 1] == '_');
3159       gcc_assert (attr[1] == '_');
3160       if (ident_len == attr_len - 4
3161           && strncmp (attr + 2, p, attr_len - 4) == 0)
3162         return 1;
3163     }
3164   else
3165     {
3166       if (ident_len == attr_len + 4
3167           && p[0] == '_' && p[1] == '_'
3168           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
3169           && strncmp (attr, p + 2, attr_len) == 0)
3170         return 1;
3171     }
3172
3173   return 0;
3174 }
3175
3176 /* Return nonzero if IDENT is a valid name for attribute ATTR,
3177    or zero if not.
3178
3179    We try both `text' and `__text__', ATTR may be either one.  */
3180
3181 int
3182 is_attribute_p (const char *attr, tree ident)
3183 {
3184   return is_attribute_with_length_p (attr, strlen (attr), ident);
3185 }
3186
3187 /* Given an attribute name and a list of attributes, return a pointer to the
3188    attribute's list element if the attribute is part of the list, or NULL_TREE
3189    if not found.  If the attribute appears more than once, this only
3190    returns the first occurrence; the TREE_CHAIN of the return value should
3191    be passed back in if further occurrences are wanted.  */
3192
3193 tree
3194 lookup_attribute (const char *attr_name, tree list)
3195 {
3196   tree l;
3197   size_t attr_len = strlen (attr_name);
3198
3199   for (l = list; l; l = TREE_CHAIN (l))
3200     {
3201       gcc_assert (TREE_CODE (TREE_PURPOSE (l)) == IDENTIFIER_NODE);
3202       if (is_attribute_with_length_p (attr_name, attr_len, TREE_PURPOSE (l)))
3203         return l;
3204     }
3205
3206   return NULL_TREE;
3207 }
3208
3209 /* Return an attribute list that is the union of a1 and a2.  */
3210
3211 tree
3212 merge_attributes (tree a1, tree a2)
3213 {
3214   tree attributes;
3215
3216   /* Either one unset?  Take the set one.  */
3217
3218   if ((attributes = a1) == 0)
3219     attributes = a2;
3220
3221   /* One that completely contains the other?  Take it.  */
3222
3223   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
3224     {
3225       if (attribute_list_contained (a2, a1))
3226         attributes = a2;
3227       else
3228         {
3229           /* Pick the longest list, and hang on the other list.  */
3230
3231           if (list_length (a1) < list_length (a2))
3232             attributes = a2, a2 = a1;
3233
3234           for (; a2 != 0; a2 = TREE_CHAIN (a2))
3235             {
3236               tree a;
3237               for (a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3238                                          attributes);
3239                    a != NULL_TREE;
3240                    a = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (a2)),
3241                                          TREE_CHAIN (a)))
3242                 {
3243                   if (simple_cst_equal (TREE_VALUE (a), TREE_VALUE (a2)) == 1)
3244                     break;
3245                 }
3246               if (a == NULL_TREE)
3247                 {
3248                   a1 = copy_node (a2);
3249                   TREE_CHAIN (a1) = attributes;
3250                   attributes = a1;
3251                 }
3252             }
3253         }
3254     }
3255   return attributes;
3256 }
3257
3258 /* Given types T1 and T2, merge their attributes and return
3259   the result.  */
3260
3261 tree
3262 merge_type_attributes (tree t1, tree t2)
3263 {
3264   return merge_attributes (TYPE_ATTRIBUTES (t1),
3265                            TYPE_ATTRIBUTES (t2));
3266 }
3267
3268 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
3269    the result.  */
3270
3271 tree
3272 merge_decl_attributes (tree olddecl, tree newdecl)
3273 {
3274   return merge_attributes (DECL_ATTRIBUTES (olddecl),
3275                            DECL_ATTRIBUTES (newdecl));
3276 }
3277
3278 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
3279
3280 /* Specialization of merge_decl_attributes for various Windows targets.
3281
3282    This handles the following situation:
3283
3284      __declspec (dllimport) int foo;
3285      int foo;
3286
3287    The second instance of `foo' nullifies the dllimport.  */
3288
3289 tree
3290 merge_dllimport_decl_attributes (tree old, tree new)
3291 {
3292   tree a;
3293   int delete_dllimport_p;
3294
3295   old = DECL_ATTRIBUTES (old);
3296   new = DECL_ATTRIBUTES (new);
3297
3298   /* What we need to do here is remove from `old' dllimport if it doesn't
3299      appear in `new'.  dllimport behaves like extern: if a declaration is
3300      marked dllimport and a definition appears later, then the object
3301      is not dllimport'd.  */
3302   if (lookup_attribute ("dllimport", old) != NULL_TREE
3303       && lookup_attribute ("dllimport", new) == NULL_TREE)
3304     delete_dllimport_p = 1;
3305   else
3306     delete_dllimport_p = 0;
3307
3308   a = merge_attributes (old, new);
3309
3310   if (delete_dllimport_p)
3311     {
3312       tree prev, t;
3313
3314       /* Scan the list for dllimport and delete it.  */
3315       for (prev = NULL_TREE, t = a; t; prev = t, t = TREE_CHAIN (t))
3316         {
3317           if (is_attribute_p ("dllimport", TREE_PURPOSE (t)))
3318             {
3319               if (prev == NULL_TREE)
3320                 a = TREE_CHAIN (a);
3321               else
3322                 TREE_CHAIN (prev) = TREE_CHAIN (t);
3323               break;
3324             }
3325         }
3326     }
3327
3328   return a;
3329 }
3330
3331 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
3332    struct attribute_spec.handler.  */
3333
3334 tree
3335 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
3336                       bool *no_add_attrs)
3337 {
3338   tree node = *pnode;
3339
3340   /* These attributes may apply to structure and union types being created,
3341      but otherwise should pass to the declaration involved.  */
3342   if (!DECL_P (node))
3343     {
3344       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
3345                    | (int) ATTR_FLAG_ARRAY_NEXT))
3346         {
3347           *no_add_attrs = true;
3348           return tree_cons (name, args, NULL_TREE);
3349         }
3350       if (TREE_CODE (node) != RECORD_TYPE && TREE_CODE (node) != UNION_TYPE)
3351         {
3352           warning (OPT_Wattributes, "%qs attribute ignored",
3353                    IDENTIFIER_POINTER (name));
3354           *no_add_attrs = true;
3355         }
3356
3357       return NULL_TREE;
3358     }
3359
3360   /* Report error on dllimport ambiguities seen now before they cause
3361      any damage.  */
3362   if (is_attribute_p ("dllimport", name))
3363     {
3364       /* Like MS, treat definition of dllimported variables and
3365          non-inlined functions on declaration as syntax errors.  We
3366          allow the attribute for function definitions if declared
3367          inline.  */
3368       if (TREE_CODE (node) == FUNCTION_DECL  && DECL_INITIAL (node)
3369           && !DECL_DECLARED_INLINE_P (node))
3370         {
3371           error ("%Jfunction %qD definition is marked dllimport.", node, node);
3372           *no_add_attrs = true;
3373         }
3374
3375       else if (TREE_CODE (node) == VAR_DECL)
3376         {
3377           if (DECL_INITIAL (node))
3378             {
3379               error ("%Jvariable %qD definition is marked dllimport.",
3380                      node, node);
3381               *no_add_attrs = true;
3382             }
3383
3384           /* `extern' needn't be specified with dllimport.
3385              Specify `extern' now and hope for the best.  Sigh.  */
3386           DECL_EXTERNAL (node) = 1;
3387           /* Also, implicitly give dllimport'd variables declared within
3388              a function global scope, unless declared static.  */
3389           if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
3390             TREE_PUBLIC (node) = 1;
3391         }
3392     }
3393
3394   /*  Report error if symbol is not accessible at global scope.  */
3395   if (!TREE_PUBLIC (node)
3396       && (TREE_CODE (node) == VAR_DECL
3397           || TREE_CODE (node) == FUNCTION_DECL))
3398     {
3399       error ("%Jexternal linkage required for symbol %qD because of "
3400              "%qs attribute.", node, node, IDENTIFIER_POINTER (name));
3401       *no_add_attrs = true;
3402     }
3403
3404   return NULL_TREE;
3405 }
3406
3407 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
3408 \f
3409 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
3410    of the various TYPE_QUAL values.  */
3411
3412 static void
3413 set_type_quals (tree type, int type_quals)
3414 {
3415   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
3416   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
3417   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
3418 }
3419
3420 /* Returns true iff cand is equivalent to base with type_quals.  */
3421
3422 bool
3423 check_qualified_type (tree cand, tree base, int type_quals)
3424 {
3425   return (TYPE_QUALS (cand) == type_quals
3426           && TYPE_NAME (cand) == TYPE_NAME (base)
3427           /* Apparently this is needed for Objective-C.  */
3428           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
3429           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
3430                                    TYPE_ATTRIBUTES (base)));
3431 }
3432
3433 /* Return a version of the TYPE, qualified as indicated by the
3434    TYPE_QUALS, if one exists.  If no qualified version exists yet,
3435    return NULL_TREE.  */
3436
3437 tree
3438 get_qualified_type (tree type, int type_quals)
3439 {
3440   tree t;
3441
3442   if (TYPE_QUALS (type) == type_quals)
3443     return type;
3444
3445   /* Search the chain of variants to see if there is already one there just
3446      like the one we need to have.  If so, use that existing one.  We must
3447      preserve the TYPE_NAME, since there is code that depends on this.  */
3448   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
3449     if (check_qualified_type (t, type, type_quals))
3450       return t;
3451
3452   return NULL_TREE;
3453 }
3454
3455 /* Like get_qualified_type, but creates the type if it does not
3456    exist.  This function never returns NULL_TREE.  */
3457
3458 tree
3459 build_qualified_type (tree type, int type_quals)
3460 {
3461   tree t;
3462
3463   /* See if we already have the appropriate qualified variant.  */
3464   t = get_qualified_type (type, type_quals);
3465
3466   /* If not, build it.  */
3467   if (!t)
3468     {
3469       t = build_variant_type_copy (type);
3470       set_type_quals (t, type_quals);
3471     }
3472
3473   return t;
3474 }
3475
3476 /* Create a new distinct copy of TYPE.  The new type is made its own
3477    MAIN_VARIANT.  */
3478
3479 tree
3480 build_distinct_type_copy (tree type)
3481 {
3482   tree t = copy_node (type);
3483   
3484   TYPE_POINTER_TO (t) = 0;
3485   TYPE_REFERENCE_TO (t) = 0;
3486
3487   /* Make it its own variant.  */
3488   TYPE_MAIN_VARIANT (t) = t;
3489   TYPE_NEXT_VARIANT (t) = 0;
3490   
3491   return t;
3492 }
3493
3494 /* Create a new variant of TYPE, equivalent but distinct.
3495    This is so the caller can modify it.  */
3496
3497 tree
3498 build_variant_type_copy (tree type)
3499 {
3500   tree t, m = TYPE_MAIN_VARIANT (type);
3501
3502   t = build_distinct_type_copy (type);
3503   
3504   /* Add the new type to the chain of variants of TYPE.  */
3505   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
3506   TYPE_NEXT_VARIANT (m) = t;
3507   TYPE_MAIN_VARIANT (t) = m;
3508
3509   return t;
3510 }
3511 \f
3512 /* Return true if the from tree in both tree maps are equal.  */
3513
3514 static int
3515 tree_map_eq (const void *va, const void *vb)
3516 {
3517   const struct tree_map  *a = va, *b = vb;
3518   return (a->from == b->from);
3519 }
3520
3521 /* Hash a from tree in a tree_map.  */
3522
3523 static hashval_t
3524 tree_map_hash (const void *item)
3525 {
3526   return (((const struct tree_map *) item)->hash);
3527 }
3528
3529 /* Return true if this tree map structure is marked for garbage collection
3530    purposes.  We simply return true if the from tree is marked, so that this
3531    structure goes away when the from tree goes away.  */
3532
3533 static int
3534 tree_map_marked_p (const void *p)
3535 {
3536   tree from = ((struct tree_map *) p)->from;
3537
3538   return ggc_marked_p (from);
3539 }
3540
3541 /* Print out the statistics for the DECL_DEBUG_EXPR hash table.  */
3542
3543 static void
3544 print_debug_expr_statistics (void)
3545 {
3546   fprintf (stderr, "DECL_DEBUG_EXPR  hash: size %ld, %ld elements, %f collisions\n",
3547            (long) htab_size (debug_expr_for_decl),
3548            (long) htab_elements (debug_expr_for_decl),
3549            htab_collisions (debug_expr_for_decl));
3550 }
3551
3552 /* Print out the statistics for the DECL_VALUE_EXPR hash table.  */
3553
3554 static void
3555 print_value_expr_statistics (void)
3556 {
3557   fprintf (stderr, "DECL_VALUE_EXPR  hash: size %ld, %ld elements, %f collisions\n",
3558            (long) htab_size (value_expr_for_decl),
3559            (long) htab_elements (value_expr_for_decl),
3560            htab_collisions (value_expr_for_decl));
3561 }
3562 /* Lookup a debug expression for FROM, and return it if we find one.  */
3563
3564 tree 
3565 decl_debug_expr_lookup (tree from)
3566 {
3567   struct tree_map *h, in;
3568   in.from = from;
3569
3570   h = htab_find_with_hash (debug_expr_for_decl, &in, htab_hash_pointer (from));
3571   if (h)
3572     return h->to;
3573   return NULL_TREE;
3574 }
3575
3576 /* Insert a mapping FROM->TO in the debug expression hashtable.  */
3577
3578 void
3579 decl_debug_expr_insert (tree from, tree to)
3580 {
3581   struct tree_map *h;
3582   void **loc;
3583
3584   h = ggc_alloc (sizeof (struct tree_map));
3585   h->hash = htab_hash_pointer (from);
3586   h->from = from;
3587   h->to = to;
3588   loc = htab_find_slot_with_hash (debug_expr_for_decl, h, h->hash, INSERT);
3589   *(struct tree_map **) loc = h;
3590 }  
3591
3592 /* Lookup a value expression for FROM, and return it if we find one.  */
3593
3594 tree 
3595 decl_value_expr_lookup (tree from)
3596 {
3597   struct tree_map *h, in;
3598   in.from = from;
3599
3600   h = htab_find_with_hash (value_expr_for_decl, &in, htab_hash_pointer (from));
3601   if (h)
3602     return h->to;
3603   return NULL_TREE;
3604 }
3605
3606 /* Insert a mapping FROM->TO in the value expression hashtable.  */
3607
3608 void
3609 decl_value_expr_insert (tree from, tree to)
3610 {
3611   struct tree_map *h;
3612   void **loc;
3613
3614   h = ggc_alloc (sizeof (struct tree_map));
3615   h->hash = htab_hash_pointer (from);
3616   h->from = from;
3617   h->to = to;
3618   loc = htab_find_slot_with_hash (value_expr_for_decl, h, h->hash, INSERT);
3619   *(struct tree_map **) loc = h;
3620 }
3621
3622 /* Hashing of types so that we don't make duplicates.
3623    The entry point is `type_hash_canon'.  */
3624
3625 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
3626    with types in the TREE_VALUE slots), by adding the hash codes
3627    of the individual types.  */
3628
3629 unsigned int
3630 type_hash_list (tree list, hashval_t hashcode)
3631 {
3632   tree tail;
3633
3634   for (tail = list; tail; tail = TREE_CHAIN (tail))
3635     if (TREE_VALUE (tail) != error_mark_node)
3636       hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
3637                                         hashcode);
3638
3639   return hashcode;
3640 }
3641
3642 /* These are the Hashtable callback functions.  */
3643
3644 /* Returns true iff the types are equivalent.  */
3645
3646 static int
3647 type_hash_eq (const void *va, const void *vb)
3648 {
3649   const struct type_hash *a = va, *b = vb;
3650
3651   /* First test the things that are the same for all types.  */
3652   if (a->hash != b->hash
3653       || TREE_CODE (a->type) != TREE_CODE (b->type)
3654       || TREE_TYPE (a->type) != TREE_TYPE (b->type)
3655       || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
3656                                  TYPE_ATTRIBUTES (b->type))
3657       || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
3658       || TYPE_MODE (a->type) != TYPE_MODE (b->type))
3659     return 0;
3660
3661   switch (TREE_CODE (a->type))
3662     {
3663     case VOID_TYPE:
3664     case COMPLEX_TYPE:
3665     case POINTER_TYPE:
3666     case REFERENCE_TYPE:
3667       return 1;
3668
3669     case VECTOR_TYPE:
3670       return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
3671
3672     case ENUMERAL_TYPE:
3673       if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
3674           && !(TYPE_VALUES (a->type)
3675                && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
3676                && TYPE_VALUES (b->type)
3677                && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
3678                && type_list_equal (TYPE_VALUES (a->type),
3679                                    TYPE_VALUES (b->type))))
3680         return 0;
3681
3682       /* ... fall through ... */
3683
3684     case INTEGER_TYPE:
3685     case REAL_TYPE:
3686     case BOOLEAN_TYPE:
3687     case CHAR_TYPE:
3688       return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
3689                || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
3690                                       TYPE_MAX_VALUE (b->type)))
3691               && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
3692                   || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
3693                                          TYPE_MIN_VALUE (b->type))));
3694
3695     case OFFSET_TYPE:
3696       return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
3697
3698     case METHOD_TYPE:
3699       return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
3700               && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3701                   || (TYPE_ARG_TYPES (a->type)
3702                       && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3703                       && TYPE_ARG_TYPES (b->type)
3704                       && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3705                       && type_list_equal (TYPE_ARG_TYPES (a->type),
3706                                           TYPE_ARG_TYPES (b->type)))));
3707
3708     case ARRAY_TYPE:
3709       return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
3710
3711     case RECORD_TYPE:
3712     case UNION_TYPE:
3713     case QUAL_UNION_TYPE:
3714       return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
3715               || (TYPE_FIELDS (a->type)
3716                   && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
3717                   && TYPE_FIELDS (b->type)
3718                   && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
3719                   && type_list_equal (TYPE_FIELDS (a->type),
3720                                       TYPE_FIELDS (b->type))));
3721
3722     case FUNCTION_TYPE:
3723       return (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
3724               || (TYPE_ARG_TYPES (a->type)
3725                   && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
3726                   && TYPE_ARG_TYPES (b->type)
3727                   && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
3728                   && type_list_equal (TYPE_ARG_TYPES (a->type),
3729                                       TYPE_ARG_TYPES (b->type))));
3730
3731     default:
3732       return 0;
3733     }
3734 }
3735
3736 /* Return the cached hash value.  */
3737
3738 static hashval_t
3739 type_hash_hash (const void *item)
3740 {
3741   return ((const struct type_hash *) item)->hash;
3742 }
3743
3744 /* Look in the type hash table for a type isomorphic to TYPE.
3745    If one is found, return it.  Otherwise return 0.  */
3746
3747 tree
3748 type_hash_lookup (hashval_t hashcode, tree type)
3749 {
3750   struct type_hash *h, in;
3751
3752   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
3753      must call that routine before comparing TYPE_ALIGNs.  */
3754   layout_type (type);
3755
3756   in.hash = hashcode;
3757   in.type = type;
3758
3759   h = htab_find_with_hash (type_hash_table, &in, hashcode);
3760   if (h)
3761     return h->type;
3762   return NULL_TREE;
3763 }
3764
3765 /* Add an entry to the type-hash-table
3766    for a type TYPE whose hash code is HASHCODE.  */
3767
3768 void
3769 type_hash_add (hashval_t hashcode, tree type)
3770 {
3771   struct type_hash *h;
3772   void **loc;
3773
3774   h = ggc_alloc (sizeof (struct type_hash));
3775   h->hash = hashcode;
3776   h->type = type;
3777   loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
3778   *(struct type_hash **) loc = h;
3779 }
3780
3781 /* Given TYPE, and HASHCODE its hash code, return the canonical
3782    object for an identical type if one already exists.
3783    Otherwise, return TYPE, and record it as the canonical object.
3784
3785    To use this function, first create a type of the sort you want.
3786    Then compute its hash code from the fields of the type that
3787    make it different from other similar types.
3788    Then call this function and use the value.  */
3789
3790 tree
3791 type_hash_canon (unsigned int hashcode, tree type)
3792 {
3793   tree t1;
3794
3795   /* The hash table only contains main variants, so ensure that's what we're
3796      being passed.  */
3797   gcc_assert (TYPE_MAIN_VARIANT (type) == type);
3798
3799   if (!lang_hooks.types.hash_types)
3800     return type;
3801
3802   /* See if the type is in the hash table already.  If so, return it.
3803      Otherwise, add the type.  */
3804   t1 = type_hash_lookup (hashcode, type);
3805   if (t1 != 0)
3806     {
3807 #ifdef GATHER_STATISTICS
3808       tree_node_counts[(int) t_kind]--;
3809       tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type);
3810 #endif
3811       return t1;
3812     }
3813   else
3814     {
3815       type_hash_add (hashcode, type);
3816       return type;
3817     }
3818 }
3819
3820 /* See if the data pointed to by the type hash table is marked.  We consider
3821    it marked if the type is marked or if a debug type number or symbol
3822    table entry has been made for the type.  This reduces the amount of
3823    debugging output and eliminates that dependency of the debug output on
3824    the number of garbage collections.  */
3825
3826 static int
3827 type_hash_marked_p (const void *p)
3828 {
3829   tree type = ((struct type_hash *) p)->type;
3830
3831   return ggc_marked_p (type) || TYPE_SYMTAB_POINTER (type);
3832 }
3833
3834 static void
3835 print_type_hash_statistics (void)
3836 {
3837   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
3838            (long) htab_size (type_hash_table),
3839            (long) htab_elements (type_hash_table),
3840            htab_collisions (type_hash_table));
3841 }
3842
3843 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
3844    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
3845    by adding the hash codes of the individual attributes.  */
3846
3847 unsigned int
3848 attribute_hash_list (tree list, hashval_t hashcode)
3849 {
3850   tree tail;
3851
3852   for (tail = list; tail; tail = TREE_CHAIN (tail))
3853     /* ??? Do we want to add in TREE_VALUE too? */
3854     hashcode = iterative_hash_object
3855       (IDENTIFIER_HASH_VALUE (TREE_PURPOSE (tail)), hashcode);
3856   return hashcode;
3857 }
3858
3859 /* Given two lists of attributes, return true if list l2 is
3860    equivalent to l1.  */
3861
3862 int
3863 attribute_list_equal (tree l1, tree l2)
3864 {
3865   return attribute_list_contained (l1, l2)
3866          && attribute_list_contained (l2, l1);
3867 }
3868
3869 /* Given two lists of attributes, return true if list L2 is
3870    completely contained within L1.  */
3871 /* ??? This would be faster if attribute names were stored in a canonicalized
3872    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
3873    must be used to show these elements are equivalent (which they are).  */
3874 /* ??? It's not clear that attributes with arguments will always be handled
3875    correctly.  */
3876
3877 int
3878 attribute_list_contained (tree l1, tree l2)
3879 {
3880   tree t1, t2;
3881
3882   /* First check the obvious, maybe the lists are identical.  */
3883   if (l1 == l2)
3884     return 1;
3885
3886   /* Maybe the lists are similar.  */
3887   for (t1 = l1, t2 = l2;
3888        t1 != 0 && t2 != 0
3889         && TREE_PURPOSE (t1) == TREE_PURPOSE (t2)
3890         && TREE_VALUE (t1) == TREE_VALUE (t2);
3891        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2));
3892
3893   /* Maybe the lists are equal.  */
3894   if (t1 == 0 && t2 == 0)
3895     return 1;
3896
3897   for (; t2 != 0; t2 = TREE_CHAIN (t2))
3898     {
3899       tree attr;
3900       for (attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)), l1);
3901            attr != NULL_TREE;
3902            attr = lookup_attribute (IDENTIFIER_POINTER (TREE_PURPOSE (t2)),
3903                                     TREE_CHAIN (attr)))
3904         {
3905           if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) == 1)
3906             break;
3907         }
3908
3909       if (attr == 0)
3910         return 0;
3911
3912       if (simple_cst_equal (TREE_VALUE (t2), TREE_VALUE (attr)) != 1)
3913         return 0;
3914     }
3915
3916   return 1;
3917 }
3918
3919 /* Given two lists of types
3920    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
3921    return 1 if the lists contain the same types in the same order.
3922    Also, the TREE_PURPOSEs must match.  */
3923
3924 int
3925 type_list_equal (tree l1, tree l2)
3926 {
3927   tree t1, t2;
3928
3929   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
3930     if (TREE_VALUE (t1) != TREE_VALUE (t2)
3931         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
3932             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
3933                   && (TREE_TYPE (TREE_PURPOSE (t1))
3934                       == TREE_TYPE (TREE_PURPOSE (t2))))))
3935       return 0;
3936
3937   return t1 == t2;
3938 }
3939
3940 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
3941    given by TYPE.  If the argument list accepts variable arguments,
3942    then this function counts only the ordinary arguments.  */
3943
3944 int
3945 type_num_arguments (tree type)
3946 {
3947   int i = 0;
3948   tree t;
3949
3950   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
3951     /* If the function does not take a variable number of arguments,
3952        the last element in the list will have type `void'.  */
3953     if (VOID_TYPE_P (TREE_VALUE (t)))
3954       break;
3955     else
3956       ++i;
3957
3958   return i;
3959 }
3960
3961 /* Nonzero if integer constants T1 and T2
3962    represent the same constant value.  */
3963
3964 int
3965 tree_int_cst_equal (tree t1, tree t2)
3966 {
3967   if (t1 == t2)
3968     return 1;
3969
3970   if (t1 == 0 || t2 == 0)
3971     return 0;
3972
3973   if (TREE_CODE (t1) == INTEGER_CST
3974       && TREE_CODE (t2) == INTEGER_CST
3975       && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
3976       && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
3977     return 1;
3978
3979   return 0;
3980 }
3981
3982 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
3983    The precise way of comparison depends on their data type.  */
3984
3985 int
3986 tree_int_cst_lt (tree t1, tree t2)
3987 {
3988   if (t1 == t2)
3989     return 0;
3990
3991   if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
3992     {
3993       int t1_sgn = tree_int_cst_sgn (t1);
3994       int t2_sgn = tree_int_cst_sgn (t2);
3995
3996       if (t1_sgn < t2_sgn)
3997         return 1;
3998       else if (t1_sgn > t2_sgn)
3999         return 0;
4000       /* Otherwise, both are non-negative, so we compare them as
4001          unsigned just in case one of them would overflow a signed
4002          type.  */
4003     }
4004   else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
4005     return INT_CST_LT (t1, t2);
4006
4007   return INT_CST_LT_UNSIGNED (t1, t2);
4008 }
4009
4010 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  */
4011
4012 int
4013 tree_int_cst_compare (tree t1, tree t2)
4014 {
4015   if (tree_int_cst_lt (t1, t2))
4016     return -1;
4017   else if (tree_int_cst_lt (t2, t1))
4018     return 1;
4019   else
4020     return 0;
4021 }
4022
4023 /* Return 1 if T is an INTEGER_CST that can be manipulated efficiently on
4024    the host.  If POS is zero, the value can be represented in a single
4025    HOST_WIDE_INT.  If POS is nonzero, the value must be positive and can
4026    be represented in a single unsigned HOST_WIDE_INT.  */
4027
4028 int
4029 host_integerp (tree t, int pos)
4030 {
4031   return (TREE_CODE (t) == INTEGER_CST
4032           && ! TREE_OVERFLOW (t)
4033           && ((TREE_INT_CST_HIGH (t) == 0
4034                && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
4035               || (! pos && TREE_INT_CST_HIGH (t) == -1
4036                   && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
4037                   && !TYPE_UNSIGNED (TREE_TYPE (t)))
4038               || (pos && TREE_INT_CST_HIGH (t) == 0)));
4039 }
4040
4041 /* Return the HOST_WIDE_INT least significant bits of T if it is an
4042    INTEGER_CST and there is no overflow.  POS is nonzero if the result must
4043    be positive.  We must be able to satisfy the above conditions.  */
4044
4045 HOST_WIDE_INT
4046 tree_low_cst (tree t, int pos)
4047 {
4048   gcc_assert (host_integerp (t, pos));
4049   return TREE_INT_CST_LOW (t);
4050 }
4051
4052 /* Return the most significant bit of the integer constant T.  */
4053
4054 int
4055 tree_int_cst_msb (tree t)
4056 {
4057   int prec;
4058   HOST_WIDE_INT h;
4059   unsigned HOST_WIDE_INT l;
4060
4061   /* Note that using TYPE_PRECISION here is wrong.  We care about the
4062      actual bits, not the (arbitrary) range of the type.  */
4063   prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1;
4064   rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec,
4065                  2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0);
4066   return (l & 1) == 1;
4067 }
4068
4069 /* Return an indication of the sign of the integer constant T.
4070    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
4071    Note that -1 will never be returned it T's type is unsigned.  */
4072
4073 int
4074 tree_int_cst_sgn (tree t)
4075 {
4076   if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
4077     return 0;
4078   else if (TYPE_UNSIGNED (TREE_TYPE (t)))
4079     return 1;
4080   else if (TREE_INT_CST_HIGH (t) < 0)
4081     return -1;
4082   else
4083     return 1;
4084 }
4085
4086 /* Compare two constructor-element-type constants.  Return 1 if the lists
4087    are known to be equal; otherwise return 0.  */
4088
4089 int
4090 simple_cst_list_equal (tree l1, tree l2)
4091 {
4092   while (l1 != NULL_TREE && l2 != NULL_TREE)
4093     {
4094       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4095         return 0;
4096
4097       l1 = TREE_CHAIN (l1);
4098       l2 = TREE_CHAIN (l2);
4099     }
4100
4101   return l1 == l2;
4102 }
4103
4104 /* Return truthvalue of whether T1 is the same tree structure as T2.
4105    Return 1 if they are the same.
4106    Return 0 if they are understandably different.
4107    Return -1 if either contains tree structure not understood by
4108    this function.  */
4109
4110 int
4111 simple_cst_equal (tree t1, tree t2)
4112 {
4113   enum tree_code code1, code2;
4114   int cmp;
4115   int i;
4116
4117   if (t1 == t2)
4118     return 1;
4119   if (t1 == 0 || t2 == 0)
4120     return 0;
4121
4122   code1 = TREE_CODE (t1);
4123   code2 = TREE_CODE (t2);
4124
4125   if (code1 == NOP_EXPR || code1 == CONVERT_EXPR || code1 == NON_LVALUE_EXPR)
4126     {
4127       if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4128           || code2 == NON_LVALUE_EXPR)
4129         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4130       else
4131         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
4132     }
4133
4134   else if (code2 == NOP_EXPR || code2 == CONVERT_EXPR
4135            || code2 == NON_LVALUE_EXPR)
4136     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
4137
4138   if (code1 != code2)
4139     return 0;
4140
4141   switch (code1)
4142     {
4143     case INTEGER_CST:
4144       return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
4145               && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
4146
4147     case REAL_CST:
4148       return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
4149
4150     case STRING_CST:
4151       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
4152               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
4153                          TREE_STRING_LENGTH (t1)));
4154
4155     case CONSTRUCTOR:
4156       return simple_cst_list_equal (CONSTRUCTOR_ELTS (t1),
4157                                     CONSTRUCTOR_ELTS (t2));
4158
4159     case SAVE_EXPR:
4160       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4161
4162     case CALL_EXPR:
4163       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4164       if (cmp <= 0)
4165         return cmp;
4166       return
4167         simple_cst_list_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4168
4169     case TARGET_EXPR:
4170       /* Special case: if either target is an unallocated VAR_DECL,
4171          it means that it's going to be unified with whatever the
4172          TARGET_EXPR is really supposed to initialize, so treat it
4173          as being equivalent to anything.  */
4174       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
4175            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
4176            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
4177           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
4178               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
4179               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
4180         cmp = 1;
4181       else
4182         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4183
4184       if (cmp <= 0)
4185         return cmp;
4186
4187       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
4188
4189     case WITH_CLEANUP_EXPR:
4190       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4191       if (cmp <= 0)
4192         return cmp;
4193
4194       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
4195
4196     case COMPONENT_REF:
4197       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
4198         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
4199
4200       return 0;
4201
4202     case VAR_DECL:
4203     case PARM_DECL:
4204     case CONST_DECL:
4205     case FUNCTION_DECL:
4206       return 0;
4207
4208     default:
4209       break;
4210     }
4211
4212   /* This general rule works for most tree codes.  All exceptions should be
4213      handled above.  If this is a language-specific tree code, we can't
4214      trust what might be in the operand, so say we don't know
4215      the situation.  */
4216   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
4217     return -1;
4218
4219   switch (TREE_CODE_CLASS (code1))
4220     {
4221     case tcc_unary:
4222     case tcc_binary:
4223     case tcc_comparison:
4224     case tcc_expression:
4225     case tcc_reference:
4226     case tcc_statement:
4227       cmp = 1;
4228       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
4229         {
4230           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
4231           if (cmp <= 0)
4232             return cmp;
4233         }
4234
4235       return cmp;
4236
4237     default:
4238       return -1;
4239     }
4240 }
4241
4242 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
4243    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
4244    than U, respectively.  */
4245
4246 int
4247 compare_tree_int (tree t, unsigned HOST_WIDE_INT u)
4248 {
4249   if (tree_int_cst_sgn (t) < 0)
4250     return -1;
4251   else if (TREE_INT_CST_HIGH (t) != 0)
4252     return 1;
4253   else if (TREE_INT_CST_LOW (t) == u)
4254     return 0;
4255   else if (TREE_INT_CST_LOW (t) < u)
4256     return -1;
4257   else
4258     return 1;
4259 }
4260
4261 /* Return true if CODE represents an associative tree code.  Otherwise
4262    return false.  */
4263 bool
4264 associative_tree_code (enum tree_code code)
4265 {
4266   switch (code)
4267     {
4268     case BIT_IOR_EXPR:
4269     case BIT_AND_EXPR:
4270     case BIT_XOR_EXPR:
4271     case PLUS_EXPR:
4272     case MULT_EXPR:
4273     case MIN_EXPR:
4274     case MAX_EXPR:
4275       return true;
4276
4277     default:
4278       break;
4279     }
4280   return false;
4281 }
4282
4283 /* Return true if CODE represents a commutative tree code.  Otherwise
4284    return false.  */
4285 bool
4286 commutative_tree_code (enum tree_code code)
4287 {
4288   switch (code)
4289     {
4290     case PLUS_EXPR:
4291     case MULT_EXPR:
4292     case MIN_EXPR:
4293     case MAX_EXPR:
4294     case BIT_IOR_EXPR:
4295     case BIT_XOR_EXPR:
4296     case BIT_AND_EXPR:
4297     case NE_EXPR:
4298     case EQ_EXPR:
4299     case UNORDERED_EXPR:
4300     case ORDERED_EXPR:
4301     case UNEQ_EXPR:
4302     case LTGT_EXPR:
4303     case TRUTH_AND_EXPR:
4304     case TRUTH_XOR_EXPR:
4305     case TRUTH_OR_EXPR:
4306       return true;
4307
4308     default:
4309       break;
4310     }
4311   return false;
4312 }
4313
4314 /* Generate a hash value for an expression.  This can be used iteratively
4315    by passing a previous result as the "val" argument.
4316
4317    This function is intended to produce the same hash for expressions which
4318    would compare equal using operand_equal_p.  */
4319
4320 hashval_t
4321 iterative_hash_expr (tree t, hashval_t val)
4322 {
4323   int i;
4324   enum tree_code code;
4325   char class;
4326
4327   if (t == NULL_TREE)
4328     return iterative_hash_pointer (t, val);
4329
4330   code = TREE_CODE (t);
4331
4332   switch (code)
4333     {
4334     /* Alas, constants aren't shared, so we can't rely on pointer
4335        identity.  */
4336     case INTEGER_CST:
4337       val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
4338       return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
4339     case REAL_CST:
4340       {
4341         unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
4342
4343         return iterative_hash_hashval_t (val2, val);
4344       }
4345     case STRING_CST:
4346       return iterative_hash (TREE_STRING_POINTER (t),
4347                              TREE_STRING_LENGTH (t), val);
4348     case COMPLEX_CST:
4349       val = iterative_hash_expr (TREE_REALPART (t), val);
4350       return iterative_hash_expr (TREE_IMAGPART (t), val);
4351     case VECTOR_CST:
4352       return iterative_hash_expr (TREE_VECTOR_CST_ELTS (t), val);
4353
4354     case SSA_NAME:
4355     case VALUE_HANDLE:
4356       /* we can just compare by pointer.  */
4357       return iterative_hash_pointer (t, val);
4358
4359     case TREE_LIST:
4360       /* A list of expressions, for a CALL_EXPR or as the elements of a
4361          VECTOR_CST.  */
4362       for (; t; t = TREE_CHAIN (t))
4363         val = iterative_hash_expr (TREE_VALUE (t), val);
4364       return val;
4365     case FUNCTION_DECL:
4366       /* When referring to a built-in FUNCTION_DECL, use the
4367          __builtin__ form.  Otherwise nodes that compare equal
4368          according to operand_equal_p might get different
4369          hash codes.  */
4370       if (DECL_BUILT_IN (t))
4371         {
4372           val = iterative_hash_pointer (built_in_decls[DECL_FUNCTION_CODE (t)], 
4373                                       val);
4374           return val;
4375         }
4376       /* else FALL THROUGH */
4377     default:
4378       class = TREE_CODE_CLASS (code);
4379
4380       if (class == tcc_declaration)
4381         {
4382           /* Otherwise, we can just compare decls by pointer.  */
4383           val = iterative_hash_pointer (t, val);
4384         }
4385       else
4386         {
4387           gcc_assert (IS_EXPR_CODE_CLASS (class));
4388           
4389           val = iterative_hash_object (code, val);
4390
4391           /* Don't hash the type, that can lead to having nodes which
4392              compare equal according to operand_equal_p, but which
4393              have different hash codes.  */
4394           if (code == NOP_EXPR
4395               || code == CONVERT_EXPR
4396               || code == NON_LVALUE_EXPR)
4397             {
4398               /* Make sure to include signness in the hash computation.  */
4399               val += TYPE_UNSIGNED (TREE_TYPE (t));
4400               val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
4401             }
4402
4403           else if (commutative_tree_code (code))
4404             {
4405               /* It's a commutative expression.  We want to hash it the same
4406                  however it appears.  We do this by first hashing both operands
4407                  and then rehashing based on the order of their independent
4408                  hashes.  */
4409               hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
4410               hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
4411               hashval_t t;
4412
4413               if (one > two)
4414                 t = one, one = two, two = t;
4415
4416               val = iterative_hash_hashval_t (one, val);
4417               val = iterative_hash_hashval_t (two, val);
4418             }
4419           else
4420             for (i = TREE_CODE_LENGTH (code) - 1; i >= 0; --i)
4421               val = iterative_hash_expr (TREE_OPERAND (t, i), val);
4422         }
4423       return val;
4424       break;
4425     }
4426 }
4427 \f
4428 /* Constructors for pointer, array and function types.
4429    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
4430    constructed by language-dependent code, not here.)  */
4431
4432 /* Construct, lay out and return the type of pointers to TO_TYPE with
4433    mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
4434    reference all of memory. If such a type has already been
4435    constructed, reuse it.  */
4436
4437 tree
4438 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
4439                              bool can_alias_all)
4440 {
4441   tree t;
4442
4443   /* In some cases, languages will have things that aren't a POINTER_TYPE
4444      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
4445      In that case, return that type without regard to the rest of our
4446      operands.
4447
4448      ??? This is a kludge, but consistent with the way this function has
4449      always operated and there doesn't seem to be a good way to avoid this
4450      at the moment.  */
4451   if (TYPE_POINTER_TO (to_type) != 0
4452       && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
4453     return TYPE_POINTER_TO (to_type);
4454
4455   /* First, if we already have a type for pointers to TO_TYPE and it's
4456      the proper mode, use it.  */
4457   for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
4458     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
4459       return t;
4460
4461   t = make_node (POINTER_TYPE);
4462
4463   TREE_TYPE (t) = to_type;
4464   TYPE_MODE (t) = mode;
4465   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
4466   TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
4467   TYPE_POINTER_TO (to_type) = t;
4468
4469   /* Lay out the type.  This function has many callers that are concerned
4470      with expression-construction, and this simplifies them all.  */
4471   layout_type (t);
4472
4473   return t;
4474 }
4475
4476 /* By default build pointers in ptr_mode.  */
4477
4478 tree
4479 build_pointer_type (tree to_type)
4480 {
4481   return build_pointer_type_for_mode (to_type, ptr_mode, false);
4482 }
4483
4484 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
4485
4486 tree
4487 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
4488                                bool can_alias_all)
4489 {
4490   tree t;
4491
4492   /* In some cases, languages will have things that aren't a REFERENCE_TYPE
4493      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
4494      In that case, return that type without regard to the rest of our
4495      operands.
4496
4497      ??? This is a kludge, but consistent with the way this function has
4498      always operated and there doesn't seem to be a good way to avoid this
4499      at the moment.  */
4500   if (TYPE_REFERENCE_TO (to_type) != 0
4501       && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
4502     return TYPE_REFERENCE_TO (to_type);
4503
4504   /* First, if we already have a type for pointers to TO_TYPE and it's
4505      the proper mode, use it.  */
4506   for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
4507     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
4508       return t;
4509
4510   t = make_node (REFERENCE_TYPE);
4511
4512   TREE_TYPE (t) = to_type;
4513   TYPE_MODE (t) = mode;
4514   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
4515   TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
4516   TYPE_REFERENCE_TO (to_type) = t;
4517
4518   layout_type (t);
4519
4520   return t;
4521 }
4522
4523
4524 /* Build the node for the type of references-to-TO_TYPE by default
4525    in ptr_mode.  */
4526
4527 tree
4528 build_reference_type (tree to_type)
4529 {
4530   return build_reference_type_for_mode (to_type, ptr_mode, false);
4531 }
4532
4533 /* Build a type that is compatible with t but has no cv quals anywhere
4534    in its type, thus
4535
4536    const char *const *const *  ->  char ***.  */
4537
4538 tree
4539 build_type_no_quals (tree t)
4540 {
4541   switch (TREE_CODE (t))
4542     {
4543     case POINTER_TYPE:
4544       return build_pointer_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4545                                           TYPE_MODE (t),
4546                                           TYPE_REF_CAN_ALIAS_ALL (t));
4547     case REFERENCE_TYPE:
4548       return
4549         build_reference_type_for_mode (build_type_no_quals (TREE_TYPE (t)),
4550                                        TYPE_MODE (t),
4551                                        TYPE_REF_CAN_ALIAS_ALL (t));
4552     default:
4553       return TYPE_MAIN_VARIANT (t);
4554     }
4555 }
4556
4557 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
4558    MAXVAL should be the maximum value in the domain
4559    (one less than the length of the array).
4560
4561    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
4562    We don't enforce this limit, that is up to caller (e.g. language front end).
4563    The limit exists because the result is a signed type and we don't handle
4564    sizes that use more than one HOST_WIDE_INT.  */
4565
4566 tree
4567 build_index_type (tree maxval)
4568 {
4569   tree itype = make_node (INTEGER_TYPE);
4570
4571   TREE_TYPE (itype) = sizetype;
4572   TYPE_PRECISION (itype) = TYPE_PRECISION (sizetype);
4573   TYPE_MIN_VALUE (itype) = size_zero_node;
4574   TYPE_MAX_VALUE (itype) = fold_convert (sizetype, maxval);
4575   TYPE_MODE (itype) = TYPE_MODE (sizetype);
4576   TYPE_SIZE (itype) = TYPE_SIZE (sizetype);
4577   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype);
4578   TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype);
4579   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (sizetype);
4580
4581   if (host_integerp (maxval, 1))
4582     return type_hash_canon (tree_low_cst (maxval, 1), itype);
4583   else
4584     return itype;
4585 }
4586
4587 /* Builds a signed or unsigned integer type of precision PRECISION.
4588    Used for C bitfields whose precision does not match that of
4589    built-in target types.  */
4590 tree
4591 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
4592                                 int unsignedp)
4593 {
4594   tree itype = make_node (INTEGER_TYPE);
4595
4596   TYPE_PRECISION (itype) = precision;
4597
4598   if (unsignedp)
4599     fixup_unsigned_type (itype);
4600   else
4601     fixup_signed_type (itype);
4602
4603   if (host_integerp (TYPE_MAX_VALUE (itype), 1))
4604     return type_hash_canon (tree_low_cst (TYPE_MAX_VALUE (itype), 1), itype);
4605
4606   return itype;
4607 }
4608
4609 /* Create a range of some discrete type TYPE (an INTEGER_TYPE,
4610    ENUMERAL_TYPE, BOOLEAN_TYPE, or CHAR_TYPE), with
4611    low bound LOWVAL and high bound HIGHVAL.
4612    if TYPE==NULL_TREE, sizetype is used.  */
4613
4614 tree
4615 build_range_type (tree type, tree lowval, tree highval)
4616 {
4617   tree itype = make_node (INTEGER_TYPE);
4618
4619   TREE_TYPE (itype) = type;
4620   if (type == NULL_TREE)
4621     type = sizetype;
4622
4623   TYPE_MIN_VALUE (itype) = convert (type, lowval);
4624   TYPE_MAX_VALUE (itype) = highval ? convert (type, highval) : NULL;
4625
4626   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
4627   TYPE_MODE (itype) = TYPE_MODE (type);
4628   TYPE_SIZE (itype) = TYPE_SIZE (type);
4629   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
4630   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
4631   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
4632
4633   if (host_integerp (lowval, 0) && highval != 0 && host_integerp (highval, 0))
4634     return type_hash_canon (tree_low_cst (highval, 0)
4635                             - tree_low_cst (lowval, 0),
4636                             itype);
4637   else
4638     return itype;
4639 }
4640
4641 /* Just like build_index_type, but takes lowval and highval instead
4642    of just highval (maxval).  */
4643
4644 tree
4645 build_index_2_type (tree lowval, tree highval)
4646 {
4647   return build_range_type (sizetype, lowval, highval);
4648 }
4649
4650 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
4651    and number of elements specified by the range of values of INDEX_TYPE.
4652    If such a type has already been constructed, reuse it.  */
4653
4654 tree
4655 build_array_type (tree elt_type, tree index_type)
4656 {
4657   tree t;
4658   hashval_t hashcode = 0;
4659
4660   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
4661     {
4662       error ("arrays of functions are not meaningful");
4663       elt_type = integer_type_node;
4664     }
4665
4666   t = make_node (ARRAY_TYPE);
4667   TREE_TYPE (t) = elt_type;
4668   TYPE_DOMAIN (t) = index_type;
4669   
4670   if (index_type == 0)
4671     {
4672       layout_type (t);
4673       return t;
4674     }
4675
4676   hashcode = iterative_hash_object (TYPE_HASH (elt_type), hashcode);
4677   hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
4678   t = type_hash_canon (hashcode, t);
4679
4680   if (!COMPLETE_TYPE_P (t))
4681     layout_type (t);
4682   return t;
4683 }
4684
4685 /* Return the TYPE of the elements comprising
4686    the innermost dimension of ARRAY.  */
4687
4688 tree
4689 get_inner_array_type (tree array)
4690 {
4691   tree type = TREE_TYPE (array);
4692
4693   while (TREE_CODE (type) == ARRAY_TYPE)
4694     type = TREE_TYPE (type);
4695
4696   return type;
4697 }
4698
4699 /* Construct, lay out and return
4700    the type of functions returning type VALUE_TYPE
4701    given arguments of types ARG_TYPES.
4702    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
4703    are data type nodes for the arguments of the function.
4704    If such a type has already been constructed, reuse it.  */
4705
4706 tree
4707 build_function_type (tree value_type, tree arg_types)
4708 {
4709   tree t;
4710   hashval_t hashcode = 0;
4711
4712   if (TREE_CODE (value_type) == FUNCTION_TYPE)
4713     {
4714       error ("function return type cannot be function");
4715       value_type = integer_type_node;
4716     }
4717
4718   /* Make a node of the sort we want.  */
4719   t = make_node (FUNCTION_TYPE);
4720   TREE_TYPE (t) = value_type;
4721   TYPE_ARG_TYPES (t) = arg_types;
4722
4723   /* If we already have such a type, use the old one.  */
4724   hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
4725   hashcode = type_hash_list (arg_types, hashcode);
4726   t = type_hash_canon (hashcode, t);
4727
4728   if (!COMPLETE_TYPE_P (t))
4729     layout_type (t);
4730   return t;
4731 }
4732
4733 /* Build a function type.  The RETURN_TYPE is the type returned by the
4734    function.  If additional arguments are provided, they are
4735    additional argument types.  The list of argument types must always
4736    be terminated by NULL_TREE.  */
4737
4738 tree
4739 build_function_type_list (tree return_type, ...)
4740 {
4741   tree t, args, last;
4742   va_list p;
4743
4744   va_start (p, return_type);
4745
4746   t = va_arg (p, tree);
4747   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (p, tree))
4748     args = tree_cons (NULL_TREE, t, args);
4749
4750   if (args == NULL_TREE)
4751     args = void_list_node;
4752   else
4753     {
4754       last = args;
4755       args = nreverse (args);
4756       TREE_CHAIN (last) = void_list_node;
4757     }
4758   args = build_function_type (return_type, args);
4759
4760   va_end (p);
4761   return args;
4762 }
4763
4764 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
4765    and ARGTYPES (a TREE_LIST) are the return type and arguments types
4766    for the method.  An implicit additional parameter (of type
4767    pointer-to-BASETYPE) is added to the ARGTYPES.  */
4768
4769 tree
4770 build_method_type_directly (tree basetype,
4771                             tree rettype,
4772                             tree argtypes)
4773 {
4774   tree t;
4775   tree ptype;
4776   int hashcode = 0;
4777
4778   /* Make a node of the sort we want.  */
4779   t = make_node (METHOD_TYPE);
4780
4781   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4782   TREE_TYPE (t) = rettype;
4783   ptype = build_pointer_type (basetype);
4784
4785   /* The actual arglist for this function includes a "hidden" argument
4786      which is "this".  Put it into the list of argument types.  */
4787   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
4788   TYPE_ARG_TYPES (t) = argtypes;
4789
4790   /* If we already have such a type, use the old one.  */
4791   hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
4792   hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
4793   hashcode = type_hash_list (argtypes, hashcode);
4794   t = type_hash_canon (hashcode, t);
4795
4796   if (!COMPLETE_TYPE_P (t))
4797     layout_type (t);
4798
4799   return t;
4800 }
4801
4802 /* Construct, lay out and return the type of methods belonging to class
4803    BASETYPE and whose arguments and values are described by TYPE.
4804    If that type exists already, reuse it.
4805    TYPE must be a FUNCTION_TYPE node.  */
4806
4807 tree
4808 build_method_type (tree basetype, tree type)
4809 {
4810   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
4811
4812   return build_method_type_directly (basetype,
4813                                      TREE_TYPE (type),
4814                                      TYPE_ARG_TYPES (type));
4815 }
4816
4817 /* Construct, lay out and return the type of offsets to a value
4818    of type TYPE, within an object of type BASETYPE.
4819    If a suitable offset type exists already, reuse it.  */
4820
4821 tree
4822 build_offset_type (tree basetype, tree type)
4823 {
4824   tree t;
4825   hashval_t hashcode = 0;
4826
4827   /* Make a node of the sort we want.  */
4828   t = make_node (OFFSET_TYPE);
4829
4830   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
4831   TREE_TYPE (t) = type;
4832
4833   /* If we already have such a type, use the old one.  */
4834   hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
4835   hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
4836   t = type_hash_canon (hashcode, t);
4837
4838   if (!COMPLETE_TYPE_P (t))
4839     layout_type (t);
4840
4841   return t;
4842 }
4843
4844 /* Create a complex type whose components are COMPONENT_TYPE.  */
4845
4846 tree
4847 build_complex_type (tree component_type)
4848 {
4849   tree t;
4850   hashval_t hashcode;
4851
4852   /* Make a node of the sort we want.  */
4853   t = make_node (COMPLEX_TYPE);
4854
4855   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
4856
4857   /* If we already have such a type, use the old one.  */
4858   hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
4859   t = type_hash_canon (hashcode, t);
4860
4861   if (!COMPLETE_TYPE_P (t))
4862     layout_type (t);
4863
4864   /* If we are writing Dwarf2 output we need to create a name,
4865      since complex is a fundamental type.  */
4866   if ((write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
4867       && ! TYPE_NAME (t))
4868     {
4869       const char *name;
4870       if (component_type == char_type_node)
4871         name = "complex char";
4872       else if (component_type == signed_char_type_node)
4873         name = "complex signed char";
4874       else if (component_type == unsigned_char_type_node)
4875         name = "complex unsigned char";
4876       else if (component_type == short_integer_type_node)
4877         name = "complex short int";
4878       else if (component_type == short_unsigned_type_node)
4879         name = "complex short unsigned int";
4880       else if (component_type == integer_type_node)
4881         name = "complex int";
4882       else if (component_type == unsigned_type_node)
4883         name = "complex unsigned int";
4884       else if (component_type == long_integer_type_node)
4885         name = "complex long int";
4886       else if (component_type == long_unsigned_type_node)
4887         name = "complex long unsigned int";
4888       else if (component_type == long_long_integer_type_node)
4889         name = "complex long long int";
4890       else if (component_type == long_long_unsigned_type_node)
4891         name = "complex long long unsigned int";
4892       else
4893         name = 0;
4894
4895       if (name != 0)
4896         TYPE_NAME (t) = get_identifier (name);
4897     }
4898
4899   return build_qualified_type (t, TYPE_QUALS (component_type));
4900 }
4901 \f
4902 /* Return OP, stripped of any conversions to wider types as much as is safe.
4903    Converting the value back to OP's type makes a value equivalent to OP.
4904
4905    If FOR_TYPE is nonzero, we return a value which, if converted to
4906    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
4907
4908    If FOR_TYPE is nonzero, unaligned bit-field references may be changed to the
4909    narrowest type that can hold the value, even if they don't exactly fit.
4910    Otherwise, bit-field references are changed to a narrower type
4911    only if they can be fetched directly from memory in that type.
4912
4913    OP must have integer, real or enumeral type.  Pointers are not allowed!
4914
4915    There are some cases where the obvious value we could return
4916    would regenerate to OP if converted to OP's type,
4917    but would not extend like OP to wider types.
4918    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
4919    For example, if OP is (unsigned short)(signed char)-1,
4920    we avoid returning (signed char)-1 if FOR_TYPE is int,
4921    even though extending that to an unsigned short would regenerate OP,
4922    since the result of extending (signed char)-1 to (int)
4923    is different from (int) OP.  */
4924
4925 tree
4926 get_unwidened (tree op, tree for_type)
4927 {
4928   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
4929   tree type = TREE_TYPE (op);
4930   unsigned final_prec
4931     = TYPE_PRECISION (for_type != 0 ? for_type : type);
4932   int uns
4933     = (for_type != 0 && for_type != type
4934        && final_prec > TYPE_PRECISION (type)
4935        && TYPE_UNSIGNED (type));
4936   tree win = op;
4937
4938   while (TREE_CODE (op) == NOP_EXPR
4939          || TREE_CODE (op) == CONVERT_EXPR)
4940     {
4941       int bitschange;
4942
4943       /* TYPE_PRECISION on vector types has different meaning
4944          (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
4945          so avoid them here.  */
4946       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
4947         break;
4948
4949       bitschange = TYPE_PRECISION (TREE_TYPE (op))
4950                    - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
4951
4952       /* Truncations are many-one so cannot be removed.
4953          Unless we are later going to truncate down even farther.  */
4954       if (bitschange < 0
4955           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
4956         break;
4957
4958       /* See what's inside this conversion.  If we decide to strip it,
4959          we will set WIN.  */
4960       op = TREE_OPERAND (op, 0);
4961
4962       /* If we have not stripped any zero-extensions (uns is 0),
4963          we can strip any kind of extension.
4964          If we have previously stripped a zero-extension,
4965          only zero-extensions can safely be stripped.
4966          Any extension can be stripped if the bits it would produce
4967          are all going to be discarded later by truncating to FOR_TYPE.  */
4968
4969       if (bitschange > 0)
4970         {
4971           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
4972             win = op;
4973           /* TYPE_UNSIGNED says whether this is a zero-extension.
4974              Let's avoid computing it if it does not affect WIN
4975              and if UNS will not be needed again.  */
4976           if ((uns
4977                || TREE_CODE (op) == NOP_EXPR
4978                || TREE_CODE (op) == CONVERT_EXPR)
4979               && TYPE_UNSIGNED (TREE_TYPE (op)))
4980             {
4981               uns = 1;
4982               win = op;
4983             }
4984         }
4985     }
4986
4987   if (TREE_CODE (op) == COMPONENT_REF
4988       /* Since type_for_size always gives an integer type.  */
4989       && TREE_CODE (type) != REAL_TYPE
4990       /* Don't crash if field not laid out yet.  */
4991       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
4992       && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
4993     {
4994       unsigned int innerprec
4995         = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
4996       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
4997                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
4998       type = lang_hooks.types.type_for_size (innerprec, unsignedp);
4999
5000       /* We can get this structure field in the narrowest type it fits in.
5001          If FOR_TYPE is 0, do this only for a field that matches the
5002          narrower type exactly and is aligned for it
5003          The resulting extension to its nominal type (a fullword type)
5004          must fit the same conditions as for other extensions.  */
5005
5006       if (type != 0
5007           && INT_CST_LT_UNSIGNED (TYPE_SIZE (type), TYPE_SIZE (TREE_TYPE (op)))
5008           && (for_type || ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)))
5009           && (! uns || final_prec <= innerprec || unsignedp))
5010         {
5011           win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5012                         TREE_OPERAND (op, 1), NULL_TREE);
5013           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5014           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5015         }
5016     }
5017
5018   return win;
5019 }
5020 \f
5021 /* Return OP or a simpler expression for a narrower value
5022    which can be sign-extended or zero-extended to give back OP.
5023    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
5024    or 0 if the value should be sign-extended.  */
5025
5026 tree
5027 get_narrower (tree op, int *unsignedp_ptr)
5028 {
5029   int uns = 0;
5030   int first = 1;
5031   tree win = op;
5032   bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
5033
5034   while (TREE_CODE (op) == NOP_EXPR)
5035     {
5036       int bitschange
5037         = (TYPE_PRECISION (TREE_TYPE (op))
5038            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
5039
5040       /* Truncations are many-one so cannot be removed.  */
5041       if (bitschange < 0)
5042         break;
5043
5044       /* See what's inside this conversion.  If we decide to strip it,
5045          we will set WIN.  */
5046
5047       if (bitschange > 0)
5048         {
5049           op = TREE_OPERAND (op, 0);
5050           /* An extension: the outermost one can be stripped,
5051              but remember whether it is zero or sign extension.  */
5052           if (first)
5053             uns = TYPE_UNSIGNED (TREE_TYPE (op));
5054           /* Otherwise, if a sign extension has been stripped,
5055              only sign extensions can now be stripped;
5056              if a zero extension has been stripped, only zero-extensions.  */
5057           else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
5058             break;
5059           first = 0;
5060         }
5061       else /* bitschange == 0 */
5062         {
5063           /* A change in nominal type can always be stripped, but we must
5064              preserve the unsignedness.  */
5065           if (first)
5066             uns = TYPE_UNSIGNED (TREE_TYPE (op));
5067           first = 0;
5068           op = TREE_OPERAND (op, 0);
5069           /* Keep trying to narrow, but don't assign op to win if it
5070              would turn an integral type into something else.  */
5071           if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
5072             continue;
5073         }
5074
5075       win = op;
5076     }
5077
5078   if (TREE_CODE (op) == COMPONENT_REF
5079       /* Since type_for_size always gives an integer type.  */
5080       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
5081       /* Ensure field is laid out already.  */
5082       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
5083       && host_integerp (DECL_SIZE (TREE_OPERAND (op, 1)), 1))
5084     {
5085       unsigned HOST_WIDE_INT innerprec
5086         = tree_low_cst (DECL_SIZE (TREE_OPERAND (op, 1)), 1);
5087       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
5088                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
5089       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
5090
5091       /* We can get this structure field in a narrower type that fits it,
5092          but the resulting extension to its nominal type (a fullword type)
5093          must satisfy the same conditions as for other extensions.
5094
5095          Do this only for fields that are aligned (not bit-fields),
5096          because when bit-field insns will be used there is no
5097          advantage in doing this.  */
5098
5099       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
5100           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
5101           && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
5102           && type != 0)
5103         {
5104           if (first)
5105             uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
5106           win = build3 (COMPONENT_REF, type, TREE_OPERAND (op, 0),
5107                         TREE_OPERAND (op, 1), NULL_TREE);
5108           TREE_SIDE_EFFECTS (win) = TREE_SIDE_EFFECTS (op);
5109           TREE_THIS_VOLATILE (win) = TREE_THIS_VOLATILE (op);
5110         }
5111     }
5112   *unsignedp_ptr = uns;
5113   return win;
5114 }
5115 \f
5116 /* Nonzero if integer constant C has a value that is permissible
5117    for type TYPE (an INTEGER_TYPE).  */
5118
5119 int
5120 int_fits_type_p (tree c, tree type)
5121 {
5122   tree type_low_bound = TYPE_MIN_VALUE (type);
5123   tree type_high_bound = TYPE_MAX_VALUE (type);
5124   bool ok_for_low_bound, ok_for_high_bound;
5125   tree tmp;
5126
5127   /* If at least one bound of the type is a constant integer, we can check
5128      ourselves and maybe make a decision. If no such decision is possible, but
5129      this type is a subtype, try checking against that.  Otherwise, use
5130      force_fit_type, which checks against the precision.
5131
5132      Compute the status for each possibly constant bound, and return if we see
5133      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
5134      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
5135      for "constant known to fit".  */
5136
5137   /* Check if C >= type_low_bound.  */
5138   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
5139     {
5140       if (tree_int_cst_lt (c, type_low_bound))
5141         return 0;
5142       ok_for_low_bound = true;
5143     }
5144   else
5145     ok_for_low_bound = false;
5146
5147   /* Check if c <= type_high_bound.  */
5148   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
5149     {
5150       if (tree_int_cst_lt (type_high_bound, c))
5151         return 0;
5152       ok_for_high_bound = true;
5153     }
5154   else
5155     ok_for_high_bound = false;
5156
5157   /* If the constant fits both bounds, the result is known.  */
5158   if (ok_for_low_bound && ok_for_high_bound)
5159     return 1;
5160
5161   /* Perform some generic filtering which may allow making a decision
5162      even if the bounds are not constant.  First, negative integers
5163      never fit in unsigned types, */
5164   if (TYPE_UNSIGNED (type) && tree_int_cst_sgn (c) < 0)
5165     return 0;
5166
5167   /* Second, narrower types always fit in wider ones.  */
5168   if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
5169     return 1;
5170
5171   /* Third, unsigned integers with top bit set never fit signed types.  */
5172   if (! TYPE_UNSIGNED (type)
5173       && TYPE_UNSIGNED (TREE_TYPE (c))
5174       && tree_int_cst_msb (c))
5175     return 0;
5176
5177   /* If we haven't been able to decide at this point, there nothing more we
5178      can check ourselves here. Look at the base type if we have one.  */
5179   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != 0)
5180     return int_fits_type_p (c, TREE_TYPE (type));
5181
5182   /* Or to force_fit_type, if nothing else.  */
5183   tmp = copy_node (c);
5184   TREE_TYPE (tmp) = type;
5185   tmp = force_fit_type (tmp, -1, false, false);
5186   return TREE_INT_CST_HIGH (tmp) == TREE_INT_CST_HIGH (c)
5187          && TREE_INT_CST_LOW (tmp) == TREE_INT_CST_LOW (c);
5188 }
5189
5190 /* Subprogram of following function.  Called by walk_tree.
5191
5192    Return *TP if it is an automatic variable or parameter of the
5193    function passed in as DATA.  */
5194
5195 static tree
5196 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
5197 {
5198   tree fn = (tree) data;
5199
5200   if (TYPE_P (*tp))
5201     *walk_subtrees = 0;
5202
5203   else if (DECL_P (*tp)
5204            && lang_hooks.tree_inlining.auto_var_in_fn_p (*tp, fn))
5205     return *tp;
5206
5207   return NULL_TREE;
5208 }
5209
5210 /* Returns true if T is, contains, or refers to a type with variable
5211    size.  If FN is nonzero, only return true if a modifier of the type
5212    or position of FN is a variable or parameter inside FN.
5213
5214    This concept is more general than that of C99 'variably modified types':
5215    in C99, a struct type is never variably modified because a VLA may not
5216    appear as a structure member.  However, in GNU C code like:
5217
5218      struct S { int i[f()]; };
5219
5220    is valid, and other languages may define similar constructs.  */
5221
5222 bool
5223 variably_modified_type_p (tree type, tree fn)
5224 {
5225   tree t;
5226
5227 /* Test if T is either variable (if FN is zero) or an expression containing
5228    a variable in FN.  */
5229 #define RETURN_TRUE_IF_VAR(T)                                           \
5230   do { tree _t = (T);                                                   \
5231     if (_t && _t != error_mark_node && TREE_CODE (_t) != INTEGER_CST    \
5232         && (!fn || walk_tree (&_t, find_var_from_fn, fn, NULL)))        \
5233       return true;  } while (0)
5234
5235   if (type == error_mark_node)
5236     return false;
5237
5238   /* If TYPE itself has variable size, it is variably modified.
5239
5240      We do not yet have a representation of the C99 '[*]' syntax.
5241      When a representation is chosen, this function should be modified
5242      to test for that case as well.  */
5243   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
5244   RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT(type));
5245
5246   switch (TREE_CODE (type))
5247     {
5248     case POINTER_TYPE:
5249     case REFERENCE_TYPE:
5250     case ARRAY_TYPE:
5251     case VECTOR_TYPE:
5252       if (variably_modified_type_p (TREE_TYPE (type), fn))
5253         return true;
5254       break;
5255
5256     case FUNCTION_TYPE:
5257     case METHOD_TYPE:
5258       /* If TYPE is a function type, it is variably modified if any of the
5259          parameters or the return type are variably modified.  */
5260       if (variably_modified_type_p (TREE_TYPE (type), fn))
5261           return true;
5262
5263       for (t = TYPE_ARG_TYPES (type);
5264            t && t != void_list_node;
5265            t = TREE_CHAIN (t))
5266         if (variably_modified_type_p (TREE_VALUE (t), fn))
5267           return true;
5268       break;
5269
5270     case INTEGER_TYPE:
5271     case REAL_TYPE:
5272     case ENUMERAL_TYPE:
5273     case BOOLEAN_TYPE:
5274     case CHAR_TYPE:
5275       /* Scalar types are variably modified if their end points
5276          aren't constant.  */
5277       RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
5278       RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
5279       break;
5280
5281     case RECORD_TYPE:
5282     case UNION_TYPE:
5283     case QUAL_UNION_TYPE:
5284       /* We can't see if any of the field are variably-modified by the
5285          definition we normally use, since that would produce infinite
5286          recursion via pointers.  */
5287       /* This is variably modified if some field's type is.  */
5288       for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5289         if (TREE_CODE (t) == FIELD_DECL)
5290           {
5291             RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
5292             RETURN_TRUE_IF_VAR (DECL_SIZE (t));
5293             RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
5294
5295             if (TREE_CODE (type) == QUAL_UNION_TYPE)
5296               RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
5297           }
5298         break;
5299
5300     default:
5301       break;
5302     }
5303
5304   /* The current language may have other cases to check, but in general,
5305      all other types are not variably modified.  */
5306   return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
5307
5308 #undef RETURN_TRUE_IF_VAR
5309 }
5310
5311 /* Given a DECL or TYPE, return the scope in which it was declared, or
5312    NULL_TREE if there is no containing scope.  */
5313
5314 tree
5315 get_containing_scope (tree t)
5316 {
5317   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
5318 }
5319
5320 /* Return the innermost context enclosing DECL that is
5321    a FUNCTION_DECL, or zero if none.  */
5322
5323 tree
5324 decl_function_context (tree decl)
5325 {
5326   tree context;
5327
5328   if (TREE_CODE (decl) == ERROR_MARK)
5329     return 0;
5330
5331   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
5332      where we look up the function at runtime.  Such functions always take
5333      a first argument of type 'pointer to real context'.
5334
5335      C++ should really be fixed to use DECL_CONTEXT for the real context,
5336      and use something else for the "virtual context".  */
5337   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
5338     context
5339       = TYPE_MAIN_VARIANT
5340         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
5341   else
5342     context = DECL_CONTEXT (decl);
5343
5344   while (context && TREE_CODE (context) != FUNCTION_DECL)
5345     {
5346       if (TREE_CODE (context) == BLOCK)
5347         context = BLOCK_SUPERCONTEXT (context);
5348       else
5349         context = get_containing_scope (context);
5350     }
5351
5352   return context;
5353 }
5354
5355 /* Return the innermost context enclosing DECL that is
5356    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
5357    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
5358
5359 tree
5360 decl_type_context (tree decl)
5361 {
5362   tree context = DECL_CONTEXT (decl);
5363
5364   while (context)
5365     switch (TREE_CODE (context))
5366       {
5367       case NAMESPACE_DECL:
5368       case TRANSLATION_UNIT_DECL:
5369         return NULL_TREE;
5370
5371       case RECORD_TYPE:
5372       case UNION_TYPE:
5373       case QUAL_UNION_TYPE:
5374         return context;
5375
5376       case TYPE_DECL:
5377       case FUNCTION_DECL:
5378         context = DECL_CONTEXT (context);
5379         break;
5380
5381       case BLOCK:
5382         context = BLOCK_SUPERCONTEXT (context);
5383         break;
5384
5385       default:
5386         gcc_unreachable ();
5387       }
5388
5389   return NULL_TREE;
5390 }
5391
5392 /* CALL is a CALL_EXPR.  Return the declaration for the function
5393    called, or NULL_TREE if the called function cannot be
5394    determined.  */
5395
5396 tree
5397 get_callee_fndecl (tree call)
5398 {
5399   tree addr;
5400
5401   /* It's invalid to call this function with anything but a
5402      CALL_EXPR.  */
5403   gcc_assert (TREE_CODE (call) == CALL_EXPR);
5404
5405   /* The first operand to the CALL is the address of the function
5406      called.  */
5407   addr = TREE_OPERAND (call, 0);
5408
5409   STRIP_NOPS (addr);
5410
5411   /* If this is a readonly function pointer, extract its initial value.  */
5412   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
5413       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
5414       && DECL_INITIAL (addr))
5415     addr = DECL_INITIAL (addr);
5416
5417   /* If the address is just `&f' for some function `f', then we know
5418      that `f' is being called.  */
5419   if (TREE_CODE (addr) == ADDR_EXPR
5420       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
5421     return TREE_OPERAND (addr, 0);
5422
5423   /* We couldn't figure out what was being called.  Maybe the front
5424      end has some idea.  */
5425   return lang_hooks.lang_get_callee_fndecl (call);
5426 }
5427
5428 /* Print debugging information about tree nodes generated during the compile,
5429    and any language-specific information.  */
5430
5431 void
5432 dump_tree_statistics (void)
5433 {
5434 #ifdef GATHER_STATISTICS
5435   int i;
5436   int total_nodes, total_bytes;
5437 #endif
5438
5439   fprintf (stderr, "\n??? tree nodes created\n\n");
5440 #ifdef GATHER_STATISTICS
5441   fprintf (stderr, "Kind                   Nodes      Bytes\n");
5442   fprintf (stderr, "---------------------------------------\n");
5443   total_nodes = total_bytes = 0;
5444   for (i = 0; i < (int) all_kinds; i++)
5445     {
5446       fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
5447                tree_node_counts[i], tree_node_sizes[i]);
5448       total_nodes += tree_node_counts[i];
5449       total_bytes += tree_node_sizes[i];
5450     }
5451   fprintf (stderr, "---------------------------------------\n");
5452   fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
5453   fprintf (stderr, "---------------------------------------\n");
5454   ssanames_print_statistics ();
5455   phinodes_print_statistics ();
5456 #else
5457   fprintf (stderr, "(No per-node statistics)\n");
5458 #endif
5459   print_type_hash_statistics ();
5460   print_debug_expr_statistics ();
5461   print_value_expr_statistics ();
5462   lang_hooks.print_statistics ();
5463 }
5464 \f
5465 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
5466
5467 /* Generate a crc32 of a string.  */
5468
5469 unsigned
5470 crc32_string (unsigned chksum, const char *string)
5471 {
5472   do
5473     {
5474       unsigned value = *string << 24;
5475       unsigned ix;
5476
5477       for (ix = 8; ix--; value <<= 1)
5478         {
5479           unsigned feedback;
5480
5481           feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
5482           chksum <<= 1;
5483           chksum ^= feedback;
5484         }
5485     }
5486   while (*string++);
5487   return chksum;
5488 }
5489
5490 /* P is a string that will be used in a symbol.  Mask out any characters
5491    that are not valid in that context.  */
5492
5493 void
5494 clean_symbol_name (char *p)
5495 {
5496   for (; *p; p++)
5497     if (! (ISALNUM (*p)
5498 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
5499             || *p == '$'
5500 #endif
5501 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
5502             || *p == '.'
5503 #endif
5504            ))
5505       *p = '_';
5506 }
5507
5508 /* Generate a name for a function unique to this translation unit.
5509    TYPE is some string to identify the purpose of this function to the
5510    linker or collect2.  */
5511
5512 tree
5513 get_file_function_name_long (const char *type)
5514 {
5515   char *buf;
5516   const char *p;
5517   char *q;
5518
5519   if (first_global_object_name)
5520     p = first_global_object_name;
5521   else
5522     {
5523       /* We don't have anything that we know to be unique to this translation
5524          unit, so use what we do have and throw in some randomness.  */
5525       unsigned len;
5526       const char *name = weak_global_object_name;
5527       const char *file = main_input_filename;
5528
5529       if (! name)
5530         name = "";
5531       if (! file)
5532         file = input_filename;
5533
5534       len = strlen (file);
5535       q = alloca (9 * 2 + len + 1);
5536       memcpy (q, file, len + 1);
5537       clean_symbol_name (q);
5538
5539       sprintf (q + len, "_%08X_%08X", crc32_string (0, name),
5540                crc32_string (0, flag_random_seed));
5541
5542       p = q;
5543     }
5544
5545   buf = alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) + strlen (type));
5546
5547   /* Set up the name of the file-level functions we may need.
5548      Use a global object (which is already required to be unique over
5549      the program) rather than the file name (which imposes extra
5550      constraints).  */
5551   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
5552
5553   return get_identifier (buf);
5554 }
5555
5556 /* If KIND=='I', return a suitable global initializer (constructor) name.
5557    If KIND=='D', return a suitable global clean-up (destructor) name.  */
5558
5559 tree
5560 get_file_function_name (int kind)
5561 {
5562   char p[2];
5563
5564   p[0] = kind;
5565   p[1] = 0;
5566
5567   return get_file_function_name_long (p);
5568 }
5569 \f
5570 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5571
5572 /* Complain that the tree code of NODE does not match the expected 0
5573    terminated list of trailing codes. The trailing code list can be
5574    empty, for a more vague error message.  FILE, LINE, and FUNCTION
5575    are of the caller.  */
5576
5577 void
5578 tree_check_failed (const tree node, const char *file,
5579                    int line, const char *function, ...)
5580 {
5581   va_list args;
5582   char *buffer;
5583   unsigned length = 0;
5584   int code;
5585
5586   va_start (args, function);
5587   while ((code = va_arg (args, int)))
5588     length += 4 + strlen (tree_code_name[code]);
5589   va_end (args);
5590   if (length)
5591     {
5592       va_start (args, function);
5593       length += strlen ("expected ");
5594       buffer = alloca (length);
5595       length = 0;
5596       while ((code = va_arg (args, int)))
5597         {
5598           const char *prefix = length ? " or " : "expected ";
5599           
5600           strcpy (buffer + length, prefix);
5601           length += strlen (prefix);
5602           strcpy (buffer + length, tree_code_name[code]);
5603           length += strlen (tree_code_name[code]);
5604         }
5605       va_end (args);
5606     }
5607   else
5608     buffer = (char *)"unexpected node";
5609
5610   internal_error ("tree check: %s, have %s in %s, at %s:%d",
5611                   buffer, tree_code_name[TREE_CODE (node)],
5612                   function, trim_filename (file), line);
5613 }
5614
5615 /* Complain that the tree code of NODE does match the expected 0
5616    terminated list of trailing codes. FILE, LINE, and FUNCTION are of
5617    the caller.  */
5618
5619 void
5620 tree_not_check_failed (const tree node, const char *file,
5621                        int line, const char *function, ...)
5622 {
5623   va_list args;
5624   char *buffer;
5625   unsigned length = 0;
5626   int code;
5627
5628   va_start (args, function);
5629   while ((code = va_arg (args, int)))
5630     length += 4 + strlen (tree_code_name[code]);
5631   va_end (args);
5632   va_start (args, function);
5633   buffer = alloca (length);
5634   length = 0;
5635   while ((code = va_arg (args, int)))
5636     {
5637       if (length)
5638         {
5639           strcpy (buffer + length, " or ");
5640           length += 4;
5641         }
5642       strcpy (buffer + length, tree_code_name[code]);
5643       length += strlen (tree_code_name[code]);
5644     }
5645   va_end (args);
5646
5647   internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
5648                   buffer, tree_code_name[TREE_CODE (node)],
5649                   function, trim_filename (file), line);
5650 }
5651
5652 /* Similar to tree_check_failed, except that we check for a class of tree
5653    code, given in CL.  */
5654
5655 void
5656 tree_class_check_failed (const tree node, const enum tree_code_class cl,
5657                          const char *file, int line, const char *function)
5658 {
5659   internal_error
5660     ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
5661      TREE_CODE_CLASS_STRING (cl),
5662      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
5663      tree_code_name[TREE_CODE (node)], function, trim_filename (file), line);
5664 }
5665
5666 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
5667    (dynamically sized) vector.  */
5668
5669 void
5670 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
5671                            const char *function)
5672 {
5673   internal_error
5674     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
5675      idx + 1, len, function, trim_filename (file), line);
5676 }
5677
5678 /* Similar to above, except that the check is for the bounds of a PHI_NODE's
5679    (dynamically sized) vector.  */
5680
5681 void
5682 phi_node_elt_check_failed (int idx, int len, const char *file, int line,
5683                             const char *function)
5684 {
5685   internal_error
5686     ("tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d",
5687      idx + 1, len, function, trim_filename (file), line);
5688 }
5689
5690 /* Similar to above, except that the check is for the bounds of the operand
5691    vector of an expression node.  */
5692
5693 void
5694 tree_operand_check_failed (int idx, enum tree_code code, const char *file,
5695                            int line, const char *function)
5696 {
5697   internal_error
5698     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
5699      idx + 1, tree_code_name[code], TREE_CODE_LENGTH (code),
5700      function, trim_filename (file), line);
5701 }
5702 #endif /* ENABLE_TREE_CHECKING */
5703 \f
5704 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
5705    and mapped to the machine mode MODE.  Initialize its fields and build
5706    the information necessary for debugging output.  */
5707
5708 static tree
5709 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
5710 {
5711   tree t = make_node (VECTOR_TYPE);
5712
5713   TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
5714   SET_TYPE_VECTOR_SUBPARTS (t, nunits);
5715   TYPE_MODE (t) = mode;
5716   TYPE_READONLY (t) = TYPE_READONLY (innertype);
5717   TYPE_VOLATILE (t) = TYPE_VOLATILE (innertype);
5718
5719   layout_type (t);
5720
5721   {
5722     tree index = build_int_cst (NULL_TREE, nunits - 1);
5723     tree array = build_array_type (innertype, build_index_type (index));
5724     tree rt = make_node (RECORD_TYPE);
5725
5726     TYPE_FIELDS (rt) = build_decl (FIELD_DECL, get_identifier ("f"), array);
5727     DECL_CONTEXT (TYPE_FIELDS (rt)) = rt;
5728     layout_type (rt);
5729     TYPE_DEBUG_REPRESENTATION_TYPE (t) = rt;
5730     /* In dwarfout.c, type lookup uses TYPE_UID numbers.  We want to output
5731        the representation type, and we want to find that die when looking up
5732        the vector type.  This is most easily achieved by making the TYPE_UID
5733        numbers equal.  */
5734     TYPE_UID (rt) = TYPE_UID (t);
5735   }
5736
5737   /* Build our main variant, based on the main variant of the inner type.  */
5738   if (TYPE_MAIN_VARIANT (innertype) != innertype)
5739     {
5740       tree innertype_main_variant = TYPE_MAIN_VARIANT (innertype);
5741       unsigned int hash = TYPE_HASH (innertype_main_variant);
5742       TYPE_MAIN_VARIANT (t)
5743         = type_hash_canon (hash, make_vector_type (innertype_main_variant,
5744                                                    nunits, mode));
5745     }
5746
5747   return t;
5748 }
5749
5750 static tree
5751 make_or_reuse_type (unsigned size, int unsignedp)
5752 {
5753   if (size == INT_TYPE_SIZE)
5754     return unsignedp ? unsigned_type_node : integer_type_node;
5755   if (size == CHAR_TYPE_SIZE)
5756     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
5757   if (size == SHORT_TYPE_SIZE)
5758     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
5759   if (size == LONG_TYPE_SIZE)
5760     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
5761   if (size == LONG_LONG_TYPE_SIZE)
5762     return (unsignedp ? long_long_unsigned_type_node
5763             : long_long_integer_type_node);
5764
5765   if (unsignedp)
5766     return make_unsigned_type (size);
5767   else
5768     return make_signed_type (size);
5769 }
5770
5771 /* Create nodes for all integer types (and error_mark_node) using the sizes
5772    of C datatypes.  The caller should call set_sizetype soon after calling
5773    this function to select one of the types as sizetype.  */
5774
5775 void
5776 build_common_tree_nodes (bool signed_char, bool signed_sizetype)
5777 {
5778   error_mark_node = make_node (ERROR_MARK);
5779   TREE_TYPE (error_mark_node) = error_mark_node;
5780
5781   initialize_sizetypes (signed_sizetype);
5782
5783   /* Define both `signed char' and `unsigned char'.  */
5784   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
5785   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
5786
5787   /* Define `char', which is like either `signed char' or `unsigned char'
5788      but not the same as either.  */
5789   char_type_node
5790     = (signed_char
5791        ? make_signed_type (CHAR_TYPE_SIZE)
5792        : make_unsigned_type (CHAR_TYPE_SIZE));
5793
5794   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
5795   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
5796   integer_type_node = make_signed_type (INT_TYPE_SIZE);
5797   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
5798   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
5799   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
5800   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
5801   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
5802
5803   /* Define a boolean type.  This type only represents boolean values but
5804      may be larger than char depending on the value of BOOL_TYPE_SIZE.
5805      Front ends which want to override this size (i.e. Java) can redefine
5806      boolean_type_node before calling build_common_tree_nodes_2.  */
5807   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
5808   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
5809   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
5810   TYPE_PRECISION (boolean_type_node) = 1;
5811
5812   /* Fill in the rest of the sized types.  Reuse existing type nodes
5813      when possible.  */
5814   intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
5815   intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
5816   intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
5817   intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
5818   intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
5819
5820   unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
5821   unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
5822   unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
5823   unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
5824   unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
5825
5826   access_public_node = get_identifier ("public");
5827   access_protected_node = get_identifier ("protected");
5828   access_private_node = get_identifier ("private");
5829 }
5830
5831 /* Call this function after calling build_common_tree_nodes and set_sizetype.
5832    It will create several other common tree nodes.  */
5833
5834 void
5835 build_common_tree_nodes_2 (int short_double)
5836 {
5837   /* Define these next since types below may used them.  */
5838   integer_zero_node = build_int_cst (NULL_TREE, 0);
5839   integer_one_node = build_int_cst (NULL_TREE, 1);
5840   integer_minus_one_node = build_int_cst (NULL_TREE, -1);
5841
5842   size_zero_node = size_int (0);
5843   size_one_node = size_int (1);
5844   bitsize_zero_node = bitsize_int (0);
5845   bitsize_one_node = bitsize_int (1);
5846   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
5847
5848   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
5849   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
5850
5851   void_type_node = make_node (VOID_TYPE);
5852   layout_type (void_type_node);
5853
5854   /* We are not going to have real types in C with less than byte alignment,
5855      so we might as well not have any types that claim to have it.  */
5856   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
5857   TYPE_USER_ALIGN (void_type_node) = 0;
5858
5859   null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
5860   layout_type (TREE_TYPE (null_pointer_node));
5861
5862   ptr_type_node = build_pointer_type (void_type_node);
5863   const_ptr_type_node
5864     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
5865   fileptr_type_node = ptr_type_node;
5866
5867   float_type_node = make_node (REAL_TYPE);
5868   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
5869   layout_type (float_type_node);
5870
5871   double_type_node = make_node (REAL_TYPE);
5872   if (short_double)
5873     TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
5874   else
5875     TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
5876   layout_type (double_type_node);
5877
5878   long_double_type_node = make_node (REAL_TYPE);
5879   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
5880   layout_type (long_double_type_node);
5881
5882   float_ptr_type_node = build_pointer_type (float_type_node);
5883   double_ptr_type_node = build_pointer_type (double_type_node);
5884   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
5885   integer_ptr_type_node = build_pointer_type (integer_type_node);
5886
5887   complex_integer_type_node = make_node (COMPLEX_TYPE);
5888   TREE_TYPE (complex_integer_type_node) = integer_type_node;
5889   layout_type (complex_integer_type_node);
5890
5891   complex_float_type_node = make_node (COMPLEX_TYPE);
5892   TREE_TYPE (complex_float_type_node) = float_type_node;
5893   layout_type (complex_float_type_node);
5894
5895   complex_double_type_node = make_node (COMPLEX_TYPE);
5896   TREE_TYPE (complex_double_type_node) = double_type_node;
5897   layout_type (complex_double_type_node);
5898
5899   complex_long_double_type_node = make_node (COMPLEX_TYPE);
5900   TREE_TYPE (complex_long_double_type_node) = long_double_type_node;
5901   layout_type (complex_long_double_type_node);
5902
5903   {
5904     tree t = targetm.build_builtin_va_list ();
5905
5906     /* Many back-ends define record types without setting TYPE_NAME.
5907        If we copied the record type here, we'd keep the original
5908        record type without a name.  This breaks name mangling.  So,
5909        don't copy record types and let c_common_nodes_and_builtins()
5910        declare the type to be __builtin_va_list.  */
5911     if (TREE_CODE (t) != RECORD_TYPE)
5912       t = build_variant_type_copy (t);
5913
5914     va_list_type_node = t;
5915   }
5916 }
5917
5918 /* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
5919
5920 static void
5921 local_define_builtin (const char *name, tree type, enum built_in_function code,
5922                       const char *library_name, int ecf_flags)
5923 {
5924   tree decl;
5925
5926   decl = lang_hooks.builtin_function (name, type, code, BUILT_IN_NORMAL,
5927                                       library_name, NULL_TREE);
5928   if (ecf_flags & ECF_CONST)
5929     TREE_READONLY (decl) = 1;
5930   if (ecf_flags & ECF_PURE)
5931     DECL_IS_PURE (decl) = 1;
5932   if (ecf_flags & ECF_NORETURN)
5933     TREE_THIS_VOLATILE (decl) = 1;
5934   if (ecf_flags & ECF_NOTHROW)
5935     TREE_NOTHROW (decl) = 1;
5936   if (ecf_flags & ECF_MALLOC)
5937     DECL_IS_MALLOC (decl) = 1;
5938
5939   built_in_decls[code] = decl;
5940   implicit_built_in_decls[code] = decl;
5941 }
5942
5943 /* Call this function after instantiating all builtins that the language
5944    front end cares about.  This will build the rest of the builtins that
5945    are relied upon by the tree optimizers and the middle-end.  */
5946
5947 void
5948 build_common_builtin_nodes (void)
5949 {
5950   tree tmp, ftype;
5951
5952   if (built_in_decls[BUILT_IN_MEMCPY] == NULL
5953       || built_in_decls[BUILT_IN_MEMMOVE] == NULL)
5954     {
5955       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
5956       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
5957       tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
5958       ftype = build_function_type (ptr_type_node, tmp);
5959
5960       if (built_in_decls[BUILT_IN_MEMCPY] == NULL)
5961         local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
5962                               "memcpy", ECF_NOTHROW);
5963       if (built_in_decls[BUILT_IN_MEMMOVE] == NULL)
5964         local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
5965                               "memmove", ECF_NOTHROW);
5966     }
5967
5968   if (built_in_decls[BUILT_IN_MEMCMP] == NULL)
5969     {
5970       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
5971       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
5972       tmp = tree_cons (NULL_TREE, const_ptr_type_node, tmp);
5973       ftype = build_function_type (integer_type_node, tmp);
5974       local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
5975                             "memcmp", ECF_PURE | ECF_NOTHROW);
5976     }
5977
5978   if (built_in_decls[BUILT_IN_MEMSET] == NULL)
5979     {
5980       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
5981       tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
5982       tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
5983       ftype = build_function_type (ptr_type_node, tmp);
5984       local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
5985                             "memset", ECF_NOTHROW);
5986     }
5987
5988   if (built_in_decls[BUILT_IN_ALLOCA] == NULL)
5989     {
5990       tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
5991       ftype = build_function_type (ptr_type_node, tmp);
5992       local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
5993                             "alloca", ECF_NOTHROW | ECF_MALLOC);
5994     }
5995
5996   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5997   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
5998   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
5999   ftype = build_function_type (void_type_node, tmp);
6000   local_define_builtin ("__builtin_init_trampoline", ftype,
6001                         BUILT_IN_INIT_TRAMPOLINE,
6002                         "__builtin_init_trampoline", ECF_NOTHROW);
6003
6004   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6005   ftype = build_function_type (ptr_type_node, tmp);
6006   local_define_builtin ("__builtin_adjust_trampoline", ftype,
6007                         BUILT_IN_ADJUST_TRAMPOLINE,
6008                         "__builtin_adjust_trampoline",
6009                         ECF_CONST | ECF_NOTHROW);
6010
6011   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6012   tmp = tree_cons (NULL_TREE, ptr_type_node, tmp);
6013   ftype = build_function_type (void_type_node, tmp);
6014   local_define_builtin ("__builtin_nonlocal_goto", ftype,
6015                         BUILT_IN_NONLOCAL_GOTO,
6016                         "__builtin_nonlocal_goto",
6017                         ECF_NORETURN | ECF_NOTHROW);
6018
6019   ftype = build_function_type (ptr_type_node, void_list_node);
6020   local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
6021                         "__builtin_stack_save", ECF_NOTHROW);
6022
6023   tmp = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6024   ftype = build_function_type (void_type_node, tmp);
6025   local_define_builtin ("__builtin_stack_restore", ftype,
6026                         BUILT_IN_STACK_RESTORE,
6027                         "__builtin_stack_restore", ECF_NOTHROW);
6028
6029   ftype = build_function_type (void_type_node, void_list_node);
6030   local_define_builtin ("__builtin_profile_func_enter", ftype,
6031                         BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter", 0);
6032   local_define_builtin ("__builtin_profile_func_exit", ftype,
6033                         BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit", 0);
6034
6035   /* Complex multiplication and division.  These are handled as builtins
6036      rather than optabs because emit_library_call_value doesn't support
6037      complex.  Further, we can do slightly better with folding these 
6038      beasties if the real and complex parts of the arguments are separate.  */
6039   {
6040     enum machine_mode mode;
6041
6042     for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
6043       {
6044         char mode_name_buf[4], *q;
6045         const char *p;
6046         enum built_in_function mcode, dcode;
6047         tree type, inner_type;
6048
6049         type = lang_hooks.types.type_for_mode (mode, 0);
6050         if (type == NULL)
6051           continue;
6052         inner_type = TREE_TYPE (type);
6053
6054         tmp = tree_cons (NULL_TREE, inner_type, void_list_node);
6055         tmp = tree_cons (NULL_TREE, inner_type, tmp);
6056         tmp = tree_cons (NULL_TREE, inner_type, tmp);
6057         tmp = tree_cons (NULL_TREE, inner_type, tmp);
6058         ftype = build_function_type (type, tmp);
6059
6060         mcode = BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
6061         dcode = BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT;
6062
6063         for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
6064           *q = TOLOWER (*p);
6065         *q = '\0';
6066
6067         built_in_names[mcode] = concat ("__mul", mode_name_buf, "3", NULL);
6068         local_define_builtin (built_in_names[mcode], ftype, mcode,
6069                               built_in_names[mcode], ECF_CONST | ECF_NOTHROW);
6070
6071         built_in_names[dcode] = concat ("__div", mode_name_buf, "3", NULL);
6072         local_define_builtin (built_in_names[dcode], ftype, dcode,
6073                               built_in_names[dcode], ECF_CONST | ECF_NOTHROW);
6074       }
6075   }
6076 }
6077
6078 /* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
6079    better way.
6080
6081    If we requested a pointer to a vector, build up the pointers that
6082    we stripped off while looking for the inner type.  Similarly for
6083    return values from functions.
6084
6085    The argument TYPE is the top of the chain, and BOTTOM is the
6086    new type which we will point to.  */
6087
6088 tree
6089 reconstruct_complex_type (tree type, tree bottom)
6090 {
6091   tree inner, outer;
6092
6093   if (POINTER_TYPE_P (type))
6094     {
6095       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6096       outer = build_pointer_type (inner);
6097     }
6098   else if (TREE_CODE (type) == ARRAY_TYPE)
6099     {
6100       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6101       outer = build_array_type (inner, TYPE_DOMAIN (type));
6102     }
6103   else if (TREE_CODE (type) == FUNCTION_TYPE)
6104     {
6105       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6106       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
6107     }
6108   else if (TREE_CODE (type) == METHOD_TYPE)
6109     {
6110       tree argtypes;
6111       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
6112       /* The build_method_type_directly() routine prepends 'this' to argument list,
6113          so we must compensate by getting rid of it.  */
6114       argtypes = TYPE_ARG_TYPES (type);
6115       outer = build_method_type_directly (TYPE_METHOD_BASETYPE (type),
6116                                           inner,
6117                                           TYPE_ARG_TYPES (type));
6118       TYPE_ARG_TYPES (outer) = argtypes;
6119     }
6120   else
6121     return bottom;
6122
6123   TYPE_READONLY (outer) = TYPE_READONLY (type);
6124   TYPE_VOLATILE (outer) = TYPE_VOLATILE (type);
6125
6126   return outer;
6127 }
6128
6129 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
6130    the inner type.  */
6131 tree
6132 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
6133 {
6134   int nunits;
6135
6136   switch (GET_MODE_CLASS (mode))
6137     {
6138     case MODE_VECTOR_INT:
6139     case MODE_VECTOR_FLOAT:
6140       nunits = GET_MODE_NUNITS (mode);
6141       break;
6142
6143     case MODE_INT:
6144       /* Check that there are no leftover bits.  */
6145       gcc_assert (GET_MODE_BITSIZE (mode)
6146                   % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
6147
6148       nunits = GET_MODE_BITSIZE (mode)
6149                / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
6150       break;
6151
6152     default:
6153       gcc_unreachable ();
6154     }
6155
6156   return make_vector_type (innertype, nunits, mode);
6157 }
6158
6159 /* Similarly, but takes the inner type and number of units, which must be
6160    a power of two.  */
6161
6162 tree
6163 build_vector_type (tree innertype, int nunits)
6164 {
6165   return make_vector_type (innertype, nunits, VOIDmode);
6166 }
6167
6168 /* Build RESX_EXPR with given REGION_NUMBER.  */
6169 tree
6170 build_resx (int region_number)
6171 {
6172   tree t;
6173   t = build1 (RESX_EXPR, void_type_node,
6174               build_int_cst (NULL_TREE, region_number));
6175   return t;
6176 }
6177
6178 /* Given an initializer INIT, return TRUE if INIT is zero or some
6179    aggregate of zeros.  Otherwise return FALSE.  */
6180 bool
6181 initializer_zerop (tree init)
6182 {
6183   tree elt;
6184
6185   STRIP_NOPS (init);
6186
6187   switch (TREE_CODE (init))
6188     {
6189     case INTEGER_CST:
6190       return integer_zerop (init);
6191
6192     case REAL_CST:
6193       /* ??? Note that this is not correct for C4X float formats.  There,
6194          a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
6195          negative exponent.  */
6196       return real_zerop (init)
6197         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
6198
6199     case COMPLEX_CST:
6200       return integer_zerop (init)
6201         || (real_zerop (init)
6202             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
6203             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
6204
6205     case VECTOR_CST:
6206       for (elt = TREE_VECTOR_CST_ELTS (init); elt; elt = TREE_CHAIN (elt))
6207         if (!initializer_zerop (TREE_VALUE (elt)))
6208           return false;
6209       return true;
6210
6211     case CONSTRUCTOR:
6212       elt = CONSTRUCTOR_ELTS (init);
6213       if (elt == NULL_TREE)
6214         return true;
6215
6216       for (; elt ; elt = TREE_CHAIN (elt))
6217         if (! initializer_zerop (TREE_VALUE (elt)))
6218           return false;
6219       return true;
6220
6221     default:
6222       return false;
6223     }
6224 }
6225
6226 void
6227 add_var_to_bind_expr (tree bind_expr, tree var)
6228 {
6229   BIND_EXPR_VARS (bind_expr)
6230     = chainon (BIND_EXPR_VARS (bind_expr), var);
6231   if (BIND_EXPR_BLOCK (bind_expr))
6232     BLOCK_VARS (BIND_EXPR_BLOCK (bind_expr))
6233       = BIND_EXPR_VARS (bind_expr);
6234 }
6235
6236 /* Build an empty statement.  */
6237
6238 tree
6239 build_empty_stmt (void)
6240 {
6241   return build1 (NOP_EXPR, void_type_node, size_zero_node);
6242 }
6243
6244
6245 /* Returns true if it is possible to prove that the index of
6246    an array access REF (an ARRAY_REF expression) falls into the
6247    array bounds.  */
6248
6249 bool
6250 in_array_bounds_p (tree ref)
6251 {
6252   tree idx = TREE_OPERAND (ref, 1);
6253   tree min, max;
6254
6255   if (TREE_CODE (idx) != INTEGER_CST)
6256     return false;
6257
6258   min = array_ref_low_bound (ref);
6259   max = array_ref_up_bound (ref);
6260   if (!min
6261       || !max
6262       || TREE_CODE (min) != INTEGER_CST
6263       || TREE_CODE (max) != INTEGER_CST)
6264     return false;
6265
6266   if (tree_int_cst_lt (idx, min)
6267       || tree_int_cst_lt (max, idx))
6268     return false;
6269
6270   return true;
6271 }
6272
6273 /* Return true if T (assumed to be a DECL) is a global variable.  */
6274
6275 bool
6276 is_global_var (tree t)
6277 {
6278   return (TREE_STATIC (t) || DECL_EXTERNAL (t));
6279 }
6280
6281 /* Return true if T (assumed to be a DECL) must be assigned a memory
6282    location.  */
6283
6284 bool
6285 needs_to_live_in_memory (tree t)
6286 {
6287   return (TREE_ADDRESSABLE (t)
6288           || is_global_var (t)
6289           || (TREE_CODE (t) == RESULT_DECL
6290               && aggregate_value_p (t, current_function_decl)));
6291 }
6292
6293 /* There are situations in which a language considers record types
6294    compatible which have different field lists.  Decide if two fields
6295    are compatible.  It is assumed that the parent records are compatible.  */
6296
6297 bool
6298 fields_compatible_p (tree f1, tree f2)
6299 {
6300   if (!operand_equal_p (DECL_FIELD_BIT_OFFSET (f1),
6301                         DECL_FIELD_BIT_OFFSET (f2), OEP_ONLY_CONST))
6302     return false;
6303
6304   if (!operand_equal_p (DECL_FIELD_OFFSET (f1),
6305                         DECL_FIELD_OFFSET (f2), OEP_ONLY_CONST))
6306     return false;
6307
6308   if (!lang_hooks.types_compatible_p (TREE_TYPE (f1), TREE_TYPE (f2)))
6309     return false;
6310
6311   return true;
6312 }
6313
6314 /* Locate within RECORD a field that is compatible with ORIG_FIELD.  */
6315
6316 tree
6317 find_compatible_field (tree record, tree orig_field)
6318 {
6319   tree f;
6320
6321   for (f = TYPE_FIELDS (record); f ; f = TREE_CHAIN (f))
6322     if (TREE_CODE (f) == FIELD_DECL
6323         && fields_compatible_p (f, orig_field))
6324       return f;
6325
6326   /* ??? Why isn't this on the main fields list?  */
6327   f = TYPE_VFIELD (record);
6328   if (f && TREE_CODE (f) == FIELD_DECL
6329       && fields_compatible_p (f, orig_field))
6330     return f;
6331
6332   /* ??? We should abort here, but Java appears to do Bad Things
6333      with inherited fields.  */
6334   return orig_field;
6335 }
6336
6337 /* Return value of a constant X.  */
6338
6339 HOST_WIDE_INT
6340 int_cst_value (tree x)
6341 {
6342   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
6343   unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
6344   bool negative = ((val >> (bits - 1)) & 1) != 0;
6345
6346   gcc_assert (bits <= HOST_BITS_PER_WIDE_INT);
6347
6348   if (negative)
6349     val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
6350   else
6351     val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
6352
6353   return val;
6354 }
6355
6356 /* Returns the greatest common divisor of A and B, which must be
6357    INTEGER_CSTs.  */
6358
6359 tree
6360 tree_fold_gcd (tree a, tree b)
6361 {
6362   tree a_mod_b;
6363   tree type = TREE_TYPE (a);
6364
6365   gcc_assert (TREE_CODE (a) == INTEGER_CST);
6366   gcc_assert (TREE_CODE (b) == INTEGER_CST);
6367
6368   if (integer_zerop (a))
6369     return b;
6370
6371   if (integer_zerop (b))
6372     return a;
6373
6374   if (tree_int_cst_sgn (a) == -1)
6375     a = fold_build2 (MULT_EXPR, type, a,
6376                      convert (type, integer_minus_one_node));
6377
6378   if (tree_int_cst_sgn (b) == -1)
6379     b = fold_build2 (MULT_EXPR, type, b,
6380                      convert (type, integer_minus_one_node));
6381
6382   while (1)
6383     {
6384       a_mod_b = fold_build2 (FLOOR_MOD_EXPR, type, a, b);
6385
6386       if (!TREE_INT_CST_LOW (a_mod_b)
6387           && !TREE_INT_CST_HIGH (a_mod_b))
6388         return b;
6389
6390       a = b;
6391       b = a_mod_b;
6392     }
6393 }
6394
6395 /* Returns unsigned variant of TYPE.  */
6396
6397 tree
6398 unsigned_type_for (tree type)
6399 {
6400   return lang_hooks.types.unsigned_type (type);
6401 }
6402
6403 /* Returns signed variant of TYPE.  */
6404
6405 tree
6406 signed_type_for (tree type)
6407 {
6408   return lang_hooks.types.signed_type (type);
6409 }
6410
6411 /* Returns the largest value obtainable by casting something in INNER type to
6412    OUTER type.  */
6413
6414 tree
6415 upper_bound_in_type (tree outer, tree inner)
6416 {
6417   unsigned HOST_WIDE_INT lo, hi;
6418   unsigned bits = TYPE_PRECISION (inner);
6419
6420   if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner))
6421     {
6422       /* Zero extending in these cases.  */
6423       if (bits <= HOST_BITS_PER_WIDE_INT)
6424         {
6425           hi = 0;
6426           lo = (~(unsigned HOST_WIDE_INT) 0)
6427                   >> (HOST_BITS_PER_WIDE_INT - bits);
6428         }
6429       else
6430         {
6431           hi = (~(unsigned HOST_WIDE_INT) 0)
6432                   >> (2 * HOST_BITS_PER_WIDE_INT - bits);
6433           lo = ~(unsigned HOST_WIDE_INT) 0;
6434         }
6435     }
6436   else
6437     {
6438       /* Sign extending in these cases.  */
6439       if (bits <= HOST_BITS_PER_WIDE_INT)
6440         {
6441           hi = 0;
6442           lo = (~(unsigned HOST_WIDE_INT) 0)
6443                   >> (HOST_BITS_PER_WIDE_INT - bits) >> 1;
6444         }
6445       else
6446         {
6447           hi = (~(unsigned HOST_WIDE_INT) 0)
6448                   >> (2 * HOST_BITS_PER_WIDE_INT - bits) >> 1;
6449           lo = ~(unsigned HOST_WIDE_INT) 0;
6450         }
6451     }
6452
6453   return fold_convert (outer,
6454                        build_int_cst_wide (inner, lo, hi));
6455 }
6456
6457 /* Returns the smallest value obtainable by casting something in INNER type to
6458    OUTER type.  */
6459
6460 tree
6461 lower_bound_in_type (tree outer, tree inner)
6462 {
6463   unsigned HOST_WIDE_INT lo, hi;
6464   unsigned bits = TYPE_PRECISION (inner);
6465
6466   if (TYPE_UNSIGNED (outer) || TYPE_UNSIGNED (inner))
6467     lo = hi = 0;
6468   else if (bits <= HOST_BITS_PER_WIDE_INT)
6469     {
6470       hi = ~(unsigned HOST_WIDE_INT) 0;
6471       lo = (~(unsigned HOST_WIDE_INT) 0) << (bits - 1);
6472     }
6473   else
6474     {
6475       hi = (~(unsigned HOST_WIDE_INT) 0) << (bits - HOST_BITS_PER_WIDE_INT - 1);
6476       lo = 0;
6477     }
6478
6479   return fold_convert (outer,
6480                        build_int_cst_wide (inner, lo, hi));
6481 }
6482
6483 /* Return nonzero if two operands that are suitable for PHI nodes are
6484    necessarily equal.  Specifically, both ARG0 and ARG1 must be either
6485    SSA_NAME or invariant.  Note that this is strictly an optimization.
6486    That is, callers of this function can directly call operand_equal_p
6487    and get the same result, only slower.  */
6488
6489 int
6490 operand_equal_for_phi_arg_p (tree arg0, tree arg1)
6491 {
6492   if (arg0 == arg1)
6493     return 1;
6494   if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
6495     return 0;
6496   return operand_equal_p (arg0, arg1, 0);
6497 }
6498
6499 /* Returns number of zeros at the end of binary representation of X.
6500    
6501    ??? Use ffs if available?  */
6502
6503 tree
6504 num_ending_zeros (tree x)
6505 {
6506   unsigned HOST_WIDE_INT fr, nfr;
6507   unsigned num, abits;
6508   tree type = TREE_TYPE (x);
6509
6510   if (TREE_INT_CST_LOW (x) == 0)
6511     {
6512       num = HOST_BITS_PER_WIDE_INT;
6513       fr = TREE_INT_CST_HIGH (x);
6514     }
6515   else
6516     {
6517       num = 0;
6518       fr = TREE_INT_CST_LOW (x);
6519     }
6520
6521   for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
6522     {
6523       nfr = fr >> abits;
6524       if (nfr << abits == fr)
6525         {
6526           num += abits;
6527           fr = nfr;
6528         }
6529     }
6530
6531   if (num > TYPE_PRECISION (type))
6532     num = TYPE_PRECISION (type);
6533
6534   return build_int_cst_type (type, num);
6535 }
6536
6537
6538 #define WALK_SUBTREE(NODE)                              \
6539   do                                                    \
6540     {                                                   \
6541       result = walk_tree (&(NODE), func, data, pset);   \
6542       if (result)                                       \
6543         return result;                                  \
6544     }                                                   \
6545   while (0)
6546
6547 /* This is a subroutine of walk_tree that walks field of TYPE that are to
6548    be walked whenever a type is seen in the tree.  Rest of operands and return
6549    value are as for walk_tree.  */
6550
6551 static tree
6552 walk_type_fields (tree type, walk_tree_fn func, void *data,
6553                   struct pointer_set_t *pset)
6554 {
6555   tree result = NULL_TREE;
6556
6557   switch (TREE_CODE (type))
6558     {
6559     case POINTER_TYPE:
6560     case REFERENCE_TYPE:
6561       /* We have to worry about mutually recursive pointers.  These can't
6562          be written in C.  They can in Ada.  It's pathological, but
6563          there's an ACATS test (c38102a) that checks it.  Deal with this
6564          by checking if we're pointing to another pointer, that one
6565          points to another pointer, that one does too, and we have no htab.
6566          If so, get a hash table.  We check three levels deep to avoid
6567          the cost of the hash table if we don't need one.  */
6568       if (POINTER_TYPE_P (TREE_TYPE (type))
6569           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
6570           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
6571           && !pset)
6572         {
6573           result = walk_tree_without_duplicates (&TREE_TYPE (type),
6574                                                  func, data);
6575           if (result)
6576             return result;
6577
6578           break;
6579         }
6580
6581       /* ... fall through ... */
6582
6583     case COMPLEX_TYPE:
6584       WALK_SUBTREE (TREE_TYPE (type));
6585       break;
6586
6587     case METHOD_TYPE:
6588       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
6589
6590       /* Fall through.  */
6591
6592     case FUNCTION_TYPE:
6593       WALK_SUBTREE (TREE_TYPE (type));
6594       {
6595         tree arg;
6596
6597         /* We never want to walk into default arguments.  */
6598         for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
6599           WALK_SUBTREE (TREE_VALUE (arg));
6600       }
6601       break;
6602
6603     case ARRAY_TYPE:
6604       /* Don't follow this nodes's type if a pointer for fear that we'll
6605          have infinite recursion.  Those types are uninteresting anyway.  */
6606       if (!POINTER_TYPE_P (TREE_TYPE (type))
6607           && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)
6608         WALK_SUBTREE (TREE_TYPE (type));
6609       WALK_SUBTREE (TYPE_DOMAIN (type));
6610       break;
6611
6612     case BOOLEAN_TYPE:
6613     case ENUMERAL_TYPE:
6614     case INTEGER_TYPE:
6615     case CHAR_TYPE:
6616     case REAL_TYPE:
6617       WALK_SUBTREE (TYPE_MIN_VALUE (type));
6618       WALK_SUBTREE (TYPE_MAX_VALUE (type));
6619       break;
6620
6621     case OFFSET_TYPE:
6622       WALK_SUBTREE (TREE_TYPE (type));
6623       WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
6624       break;
6625
6626     default:
6627       break;
6628     }
6629
6630   return NULL_TREE;
6631 }
6632
6633 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
6634    called with the DATA and the address of each sub-tree.  If FUNC returns a
6635    non-NULL value, the traversal is stopped, and the value returned by FUNC
6636    is returned.  If PSET is non-NULL it is used to record the nodes visited,
6637    and to avoid visiting a node more than once.  */
6638
6639 tree
6640 walk_tree (tree *tp, walk_tree_fn func, void *data, struct pointer_set_t *pset)
6641 {
6642   enum tree_code code;
6643   int walk_subtrees;
6644   tree result;
6645
6646 #define WALK_SUBTREE_TAIL(NODE)                         \
6647   do                                                    \
6648     {                                                   \
6649        tp = & (NODE);                                   \
6650        goto tail_recurse;                               \
6651     }                                                   \
6652   while (0)
6653
6654  tail_recurse:
6655   /* Skip empty subtrees.  */
6656   if (!*tp)
6657     return NULL_TREE;
6658
6659   /* Don't walk the same tree twice, if the user has requested
6660      that we avoid doing so.  */
6661   if (pset && pointer_set_insert (pset, *tp))
6662     return NULL_TREE;
6663
6664   /* Call the function.  */
6665   walk_subtrees = 1;
6666   result = (*func) (tp, &walk_subtrees, data);
6667
6668   /* If we found something, return it.  */
6669   if (result)
6670     return result;
6671
6672   code = TREE_CODE (*tp);
6673
6674   /* Even if we didn't, FUNC may have decided that there was nothing
6675      interesting below this point in the tree.  */
6676   if (!walk_subtrees)
6677     {
6678       if (code == TREE_LIST)
6679         /* But we still need to check our siblings.  */
6680         WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
6681       else
6682         return NULL_TREE;
6683     }
6684
6685   result = lang_hooks.tree_inlining.walk_subtrees (tp, &walk_subtrees, func,
6686                                                    data, pset);
6687   if (result || ! walk_subtrees)
6688     return result;
6689
6690   /* If this is a DECL_EXPR, walk into various fields of the type that it's
6691      defining.  We only want to walk into these fields of a type in this
6692      case.  Note that decls get walked as part of the processing of a
6693      BIND_EXPR.
6694
6695      ??? Precisely which fields of types that we are supposed to walk in
6696      this case vs. the normal case aren't well defined.  */
6697   if (code == DECL_EXPR
6698       && TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL
6699       && TREE_CODE (TREE_TYPE (DECL_EXPR_DECL (*tp))) != ERROR_MARK)
6700     {
6701       tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
6702
6703       /* Call the function for the type.  See if it returns anything or
6704          doesn't want us to continue.  If we are to continue, walk both
6705          the normal fields and those for the declaration case.  */
6706       result = (*func) (type_p, &walk_subtrees, data);
6707       if (result || !walk_subtrees)
6708         return NULL_TREE;
6709
6710       result = walk_type_fields (*type_p, func, data, pset);
6711       if (result)
6712         return result;
6713
6714       WALK_SUBTREE (TYPE_SIZE (*type_p));
6715       WALK_SUBTREE (TYPE_SIZE_UNIT (*type_p));
6716
6717       /* If this is a record type, also walk the fields.  */
6718       if (TREE_CODE (*type_p) == RECORD_TYPE
6719           || TREE_CODE (*type_p) == UNION_TYPE
6720           || TREE_CODE (*type_p) == QUAL_UNION_TYPE)
6721         {
6722           tree field;
6723
6724           for (field = TYPE_FIELDS (*type_p); field;
6725                field = TREE_CHAIN (field))
6726             {
6727               /* We'd like to look at the type of the field, but we can easily
6728                  get infinite recursion.  So assume it's pointed to elsewhere
6729                  in the tree.  Also, ignore things that aren't fields.  */
6730               if (TREE_CODE (field) != FIELD_DECL)
6731                 continue;
6732
6733               WALK_SUBTREE (DECL_FIELD_OFFSET (field));
6734               WALK_SUBTREE (DECL_SIZE (field));
6735               WALK_SUBTREE (DECL_SIZE_UNIT (field));
6736               if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
6737                 WALK_SUBTREE (DECL_QUALIFIER (field));
6738             }
6739         }
6740     }
6741
6742   else if (code != SAVE_EXPR
6743            && code != BIND_EXPR
6744            && IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
6745     {
6746       int i, len;
6747
6748       /* Walk over all the sub-trees of this operand.  */
6749       len = TREE_CODE_LENGTH (code);
6750       /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
6751          But, we only want to walk once.  */
6752       if (code == TARGET_EXPR
6753           && TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1))
6754         --len;
6755
6756       /* Go through the subtrees.  We need to do this in forward order so
6757          that the scope of a FOR_EXPR is handled properly.  */
6758 #ifdef DEBUG_WALK_TREE
6759       for (i = 0; i < len; ++i)
6760         WALK_SUBTREE (TREE_OPERAND (*tp, i));
6761 #else
6762       for (i = 0; i < len - 1; ++i)
6763         WALK_SUBTREE (TREE_OPERAND (*tp, i));
6764
6765       if (len)
6766         {
6767           /* The common case is that we may tail recurse here.  */
6768           if (code != BIND_EXPR
6769               && !TREE_CHAIN (*tp))
6770             WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
6771           else
6772             WALK_SUBTREE (TREE_OPERAND (*tp, len - 1));
6773         }
6774 #endif
6775     }
6776
6777   /* If this is a type, walk the needed fields in the type.  */
6778   else if (TYPE_P (*tp))
6779     {
6780       result = walk_type_fields (*tp, func, data, pset);
6781       if (result)
6782         return result;
6783     }
6784   else
6785     {
6786       /* Not one of the easy cases.  We must explicitly go through the
6787          children.  */
6788       switch (code)
6789         {
6790         case ERROR_MARK:
6791         case IDENTIFIER_NODE:
6792         case INTEGER_CST:
6793         case REAL_CST:
6794         case VECTOR_CST:
6795         case STRING_CST:
6796         case BLOCK:
6797         case PLACEHOLDER_EXPR:
6798         case SSA_NAME:
6799         case FIELD_DECL:
6800         case RESULT_DECL:
6801           /* None of these have subtrees other than those already walked
6802              above.  */
6803           break;
6804
6805         case TREE_LIST:
6806           WALK_SUBTREE (TREE_VALUE (*tp));
6807           WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
6808           break;
6809
6810         case TREE_VEC:
6811           {
6812             int len = TREE_VEC_LENGTH (*tp);
6813
6814             if (len == 0)
6815               break;
6816
6817             /* Walk all elements but the first.  */
6818             while (--len)
6819               WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
6820
6821             /* Now walk the first one as a tail call.  */
6822             WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
6823           }
6824
6825         case COMPLEX_CST:
6826           WALK_SUBTREE (TREE_REALPART (*tp));
6827           WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
6828
6829         case CONSTRUCTOR:
6830           WALK_SUBTREE_TAIL (CONSTRUCTOR_ELTS (*tp));
6831
6832         case SAVE_EXPR:
6833           WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
6834
6835         case BIND_EXPR:
6836           {
6837             tree decl;
6838             for (decl = BIND_EXPR_VARS (*tp); decl; decl = TREE_CHAIN (decl))
6839               {
6840                 /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
6841                    into declarations that are just mentioned, rather than
6842                    declared; they don't really belong to this part of the tree.
6843                    And, we can see cycles: the initializer for a declaration
6844                    can refer to the declaration itself.  */
6845                 WALK_SUBTREE (DECL_INITIAL (decl));
6846                 WALK_SUBTREE (DECL_SIZE (decl));
6847                 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
6848               }
6849             WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
6850           }
6851
6852         case STATEMENT_LIST:
6853           {
6854             tree_stmt_iterator i;
6855             for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
6856               WALK_SUBTREE (*tsi_stmt_ptr (i));
6857           }
6858           break;
6859
6860         default:
6861           /* ??? This could be a language-defined node.  We really should make
6862              a hook for it, but right now just ignore it.  */
6863           break;
6864         }
6865     }
6866
6867   /* We didn't find what we were looking for.  */
6868   return NULL_TREE;
6869
6870 #undef WALK_SUBTREE_TAIL
6871 }
6872 #undef WALK_SUBTREE
6873
6874 /* Like walk_tree, but does not walk duplicate nodes more than once.  */
6875
6876 tree
6877 walk_tree_without_duplicates (tree *tp, walk_tree_fn func, void *data)
6878 {
6879   tree result;
6880   struct pointer_set_t *pset;
6881
6882   pset = pointer_set_create ();
6883   result = walk_tree (tp, func, data, pset);
6884   pointer_set_destroy (pset);
6885   return result;
6886 }
6887
6888 #include "gt-tree.h"