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