OSDN Git Service

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