OSDN Git Service

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