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