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