OSDN Git Service

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