OSDN Git Service

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