OSDN Git Service

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