Remove -fshort-double
[platform/upstream/gcc.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987-2016 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20 /* This file contains the low level primitives for operating on tree nodes,
21    including allocation, list operations, interning of identifiers,
22    construction of data type nodes and statement nodes,
23    and construction of type conversion nodes.  It also contains
24    tables index by tree code that describe how to take apart
25    nodes of that code.
26
27    It is intended to be language-independent but can occasionally
28    calls language-dependent routines.  */
29
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "backend.h"
34 #include "target.h"
35 #include "tree.h"
36 #include "gimple.h"
37 #include "tree-pass.h"
38 #include "ssa.h"
39 #include "cgraph.h"
40 #include "diagnostic.h"
41 #include "flags.h"
42 #include "alias.h"
43 #include "fold-const.h"
44 #include "stor-layout.h"
45 #include "calls.h"
46 #include "attribs.h"
47 #include "toplev.h" /* get_random_seed */
48 #include "output.h"
49 #include "common/common-target.h"
50 #include "langhooks.h"
51 #include "tree-inline.h"
52 #include "tree-iterator.h"
53 #include "internal-fn.h"
54 #include "gimple-iterator.h"
55 #include "gimplify.h"
56 #include "tree-dfa.h"
57 #include "params.h"
58 #include "langhooks-def.h"
59 #include "tree-diagnostic.h"
60 #include "except.h"
61 #include "builtins.h"
62 #include "print-tree.h"
63 #include "ipa-utils.h"
64
65 /* Tree code classes.  */
66
67 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
68 #define END_OF_BASE_TREE_CODES tcc_exceptional,
69
70 const enum tree_code_class tree_code_type[] = {
71 #include "all-tree.def"
72 };
73
74 #undef DEFTREECODE
75 #undef END_OF_BASE_TREE_CODES
76
77 /* Table indexed by tree code giving number of expression
78    operands beyond the fixed part of the node structure.
79    Not used for types or decls.  */
80
81 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
82 #define END_OF_BASE_TREE_CODES 0,
83
84 const unsigned char tree_code_length[] = {
85 #include "all-tree.def"
86 };
87
88 #undef DEFTREECODE
89 #undef END_OF_BASE_TREE_CODES
90
91 /* Names of tree components.
92    Used for printing out the tree and error messages.  */
93 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
94 #define END_OF_BASE_TREE_CODES "@dummy",
95
96 static const char *const tree_code_name[] = {
97 #include "all-tree.def"
98 };
99
100 #undef DEFTREECODE
101 #undef END_OF_BASE_TREE_CODES
102
103 /* Each tree code class has an associated string representation.
104    These must correspond to the tree_code_class entries.  */
105
106 const char *const tree_code_class_strings[] =
107 {
108   "exceptional",
109   "constant",
110   "type",
111   "declaration",
112   "reference",
113   "comparison",
114   "unary",
115   "binary",
116   "statement",
117   "vl_exp",
118   "expression"
119 };
120
121 /* obstack.[ch] explicitly declined to prototype this.  */
122 extern int _obstack_allocated_p (struct obstack *h, void *obj);
123
124 /* Statistics-gathering stuff.  */
125
126 static int tree_code_counts[MAX_TREE_CODES];
127 int tree_node_counts[(int) all_kinds];
128 int tree_node_sizes[(int) all_kinds];
129
130 /* Keep in sync with tree.h:enum tree_node_kind.  */
131 static const char * const tree_node_kind_names[] = {
132   "decls",
133   "types",
134   "blocks",
135   "stmts",
136   "refs",
137   "exprs",
138   "constants",
139   "identifiers",
140   "vecs",
141   "binfos",
142   "ssa names",
143   "constructors",
144   "random kinds",
145   "lang_decl kinds",
146   "lang_type kinds",
147   "omp clauses",
148 };
149
150 /* Unique id for next decl created.  */
151 static GTY(()) int next_decl_uid;
152 /* Unique id for next type created.  */
153 static GTY(()) int next_type_uid = 1;
154 /* Unique id for next debug decl created.  Use negative numbers,
155    to catch erroneous uses.  */
156 static GTY(()) int next_debug_decl_uid;
157
158 /* Since we cannot rehash a type after it is in the table, we have to
159    keep the hash code.  */
160
161 struct GTY((for_user)) type_hash {
162   unsigned long hash;
163   tree type;
164 };
165
166 /* Initial size of the hash table (rounded to next prime).  */
167 #define TYPE_HASH_INITIAL_SIZE 1000
168
169 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash>
170 {
171   static hashval_t hash (type_hash *t) { return t->hash; }
172   static bool equal (type_hash *a, type_hash *b);
173
174   static int
175   keep_cache_entry (type_hash *&t)
176   {
177     return ggc_marked_p (t->type);
178   }
179 };
180
181 /* Now here is the hash table.  When recording a type, it is added to
182    the slot whose index is the hash code.  Note that the hash table is
183    used for several kinds of types (function types, array types and
184    array index range types, for now).  While all these live in the
185    same table, they are completely independent, and the hash code is
186    computed differently for each of these.  */
187
188 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
189
190 /* Hash table and temporary node for larger integer const values.  */
191 static GTY (()) tree int_cst_node;
192
193 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node>
194 {
195   static hashval_t hash (tree t);
196   static bool equal (tree x, tree y);
197 };
198
199 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
200
201 /* Hash table for optimization flags and target option flags.  Use the same
202    hash table for both sets of options.  Nodes for building the current
203    optimization and target option nodes.  The assumption is most of the time
204    the options created will already be in the hash table, so we avoid
205    allocating and freeing up a node repeatably.  */
206 static GTY (()) tree cl_optimization_node;
207 static GTY (()) tree cl_target_option_node;
208
209 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node>
210 {
211   static hashval_t hash (tree t);
212   static bool equal (tree x, tree y);
213 };
214
215 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
216
217 /* General tree->tree mapping  structure for use in hash tables.  */
218
219
220 static GTY ((cache))
221      hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
222
223 static GTY ((cache))
224      hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
225
226 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
227 {
228   static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
229
230   static bool
231   equal (tree_vec_map *a, tree_vec_map *b)
232   {
233     return a->base.from == b->base.from;
234   }
235
236   static int
237   keep_cache_entry (tree_vec_map *&m)
238   {
239     return ggc_marked_p (m->base.from);
240   }
241 };
242
243 static GTY ((cache))
244      hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
245
246 static void set_type_quals (tree, int);
247 static void print_type_hash_statistics (void);
248 static void print_debug_expr_statistics (void);
249 static void print_value_expr_statistics (void);
250 static void type_hash_list (const_tree, inchash::hash &);
251 static void attribute_hash_list (const_tree, inchash::hash &);
252
253 tree global_trees[TI_MAX];
254 tree integer_types[itk_none];
255
256 bool int_n_enabled_p[NUM_INT_N_ENTS];
257 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
258
259 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
260
261 /* Number of operands for each OpenMP clause.  */
262 unsigned const char omp_clause_num_ops[] =
263 {
264   0, /* OMP_CLAUSE_ERROR  */
265   1, /* OMP_CLAUSE_PRIVATE  */
266   1, /* OMP_CLAUSE_SHARED  */
267   1, /* OMP_CLAUSE_FIRSTPRIVATE  */
268   2, /* OMP_CLAUSE_LASTPRIVATE  */
269   5, /* OMP_CLAUSE_REDUCTION  */
270   1, /* OMP_CLAUSE_COPYIN  */
271   1, /* OMP_CLAUSE_COPYPRIVATE  */
272   3, /* OMP_CLAUSE_LINEAR  */
273   2, /* OMP_CLAUSE_ALIGNED  */
274   1, /* OMP_CLAUSE_DEPEND  */
275   1, /* OMP_CLAUSE_UNIFORM  */
276   1, /* OMP_CLAUSE_TO_DECLARE  */
277   1, /* OMP_CLAUSE_LINK  */
278   2, /* OMP_CLAUSE_FROM  */
279   2, /* OMP_CLAUSE_TO  */
280   2, /* OMP_CLAUSE_MAP  */
281   1, /* OMP_CLAUSE_USE_DEVICE_PTR  */
282   1, /* OMP_CLAUSE_IS_DEVICE_PTR  */
283   2, /* OMP_CLAUSE__CACHE_  */
284   1, /* OMP_CLAUSE_DEVICE_RESIDENT  */
285   2, /* OMP_CLAUSE_GANG  */
286   1, /* OMP_CLAUSE_ASYNC  */
287   1, /* OMP_CLAUSE_WAIT  */
288   0, /* OMP_CLAUSE_AUTO  */
289   0, /* OMP_CLAUSE_SEQ  */
290   1, /* OMP_CLAUSE__LOOPTEMP_  */
291   1, /* OMP_CLAUSE_IF  */
292   1, /* OMP_CLAUSE_NUM_THREADS  */
293   1, /* OMP_CLAUSE_SCHEDULE  */
294   0, /* OMP_CLAUSE_NOWAIT  */
295   1, /* OMP_CLAUSE_ORDERED  */
296   0, /* OMP_CLAUSE_DEFAULT  */
297   3, /* OMP_CLAUSE_COLLAPSE  */
298   0, /* OMP_CLAUSE_UNTIED   */
299   1, /* OMP_CLAUSE_FINAL  */
300   0, /* OMP_CLAUSE_MERGEABLE  */
301   1, /* OMP_CLAUSE_DEVICE  */
302   1, /* OMP_CLAUSE_DIST_SCHEDULE  */
303   0, /* OMP_CLAUSE_INBRANCH  */
304   0, /* OMP_CLAUSE_NOTINBRANCH  */
305   1, /* OMP_CLAUSE_NUM_TEAMS  */
306   1, /* OMP_CLAUSE_THREAD_LIMIT  */
307   0, /* OMP_CLAUSE_PROC_BIND  */
308   1, /* OMP_CLAUSE_SAFELEN  */
309   1, /* OMP_CLAUSE_SIMDLEN  */
310   0, /* OMP_CLAUSE_FOR  */
311   0, /* OMP_CLAUSE_PARALLEL  */
312   0, /* OMP_CLAUSE_SECTIONS  */
313   0, /* OMP_CLAUSE_TASKGROUP  */
314   1, /* OMP_CLAUSE_PRIORITY  */
315   1, /* OMP_CLAUSE_GRAINSIZE  */
316   1, /* OMP_CLAUSE_NUM_TASKS  */
317   0, /* OMP_CLAUSE_NOGROUP  */
318   0, /* OMP_CLAUSE_THREADS  */
319   0, /* OMP_CLAUSE_SIMD  */
320   1, /* OMP_CLAUSE_HINT  */
321   0, /* OMP_CLAUSE_DEFALTMAP  */
322   1, /* OMP_CLAUSE__SIMDUID_  */
323   1, /* OMP_CLAUSE__CILK_FOR_COUNT_  */
324   0, /* OMP_CLAUSE_INDEPENDENT  */
325   1, /* OMP_CLAUSE_WORKER  */
326   1, /* OMP_CLAUSE_VECTOR  */
327   1, /* OMP_CLAUSE_NUM_GANGS  */
328   1, /* OMP_CLAUSE_NUM_WORKERS  */
329   1, /* OMP_CLAUSE_VECTOR_LENGTH  */
330   1, /* OMP_CLAUSE_TILE  */
331   2, /* OMP_CLAUSE__GRIDDIM_  */
332 };
333
334 const char * const omp_clause_code_name[] =
335 {
336   "error_clause",
337   "private",
338   "shared",
339   "firstprivate",
340   "lastprivate",
341   "reduction",
342   "copyin",
343   "copyprivate",
344   "linear",
345   "aligned",
346   "depend",
347   "uniform",
348   "to",
349   "link",
350   "from",
351   "to",
352   "map",
353   "use_device_ptr",
354   "is_device_ptr",
355   "_cache_",
356   "device_resident",
357   "gang",
358   "async",
359   "wait",
360   "auto",
361   "seq",
362   "_looptemp_",
363   "if",
364   "num_threads",
365   "schedule",
366   "nowait",
367   "ordered",
368   "default",
369   "collapse",
370   "untied",
371   "final",
372   "mergeable",
373   "device",
374   "dist_schedule",
375   "inbranch",
376   "notinbranch",
377   "num_teams",
378   "thread_limit",
379   "proc_bind",
380   "safelen",
381   "simdlen",
382   "for",
383   "parallel",
384   "sections",
385   "taskgroup",
386   "priority",
387   "grainsize",
388   "num_tasks",
389   "nogroup",
390   "threads",
391   "simd",
392   "hint",
393   "defaultmap",
394   "_simduid_",
395   "_Cilk_for_count_",
396   "independent",
397   "worker",
398   "vector",
399   "num_gangs",
400   "num_workers",
401   "vector_length",
402   "tile",
403   "_griddim_"
404 };
405
406
407 /* Return the tree node structure used by tree code CODE.  */
408
409 static inline enum tree_node_structure_enum
410 tree_node_structure_for_code (enum tree_code code)
411 {
412   switch (TREE_CODE_CLASS (code))
413     {
414     case tcc_declaration:
415       {
416         switch (code)
417           {
418           case FIELD_DECL:
419             return TS_FIELD_DECL;
420           case PARM_DECL:
421             return TS_PARM_DECL;
422           case VAR_DECL:
423             return TS_VAR_DECL;
424           case LABEL_DECL:
425             return TS_LABEL_DECL;
426           case RESULT_DECL:
427             return TS_RESULT_DECL;
428           case DEBUG_EXPR_DECL:
429             return TS_DECL_WRTL;
430           case CONST_DECL:
431             return TS_CONST_DECL;
432           case TYPE_DECL:
433             return TS_TYPE_DECL;
434           case FUNCTION_DECL:
435             return TS_FUNCTION_DECL;
436           case TRANSLATION_UNIT_DECL:
437             return TS_TRANSLATION_UNIT_DECL;
438           default:
439             return TS_DECL_NON_COMMON;
440           }
441       }
442     case tcc_type:
443       return TS_TYPE_NON_COMMON;
444     case tcc_reference:
445     case tcc_comparison:
446     case tcc_unary:
447     case tcc_binary:
448     case tcc_expression:
449     case tcc_statement:
450     case tcc_vl_exp:
451       return TS_EXP;
452     default:  /* tcc_constant and tcc_exceptional */
453       break;
454     }
455   switch (code)
456     {
457       /* tcc_constant cases.  */
458     case VOID_CST:              return TS_TYPED;
459     case INTEGER_CST:           return TS_INT_CST;
460     case REAL_CST:              return TS_REAL_CST;
461     case FIXED_CST:             return TS_FIXED_CST;
462     case COMPLEX_CST:           return TS_COMPLEX;
463     case VECTOR_CST:            return TS_VECTOR;
464     case STRING_CST:            return TS_STRING;
465       /* tcc_exceptional cases.  */
466     case ERROR_MARK:            return TS_COMMON;
467     case IDENTIFIER_NODE:       return TS_IDENTIFIER;
468     case TREE_LIST:             return TS_LIST;
469     case TREE_VEC:              return TS_VEC;
470     case SSA_NAME:              return TS_SSA_NAME;
471     case PLACEHOLDER_EXPR:      return TS_COMMON;
472     case STATEMENT_LIST:        return TS_STATEMENT_LIST;
473     case BLOCK:                 return TS_BLOCK;
474     case CONSTRUCTOR:           return TS_CONSTRUCTOR;
475     case TREE_BINFO:            return TS_BINFO;
476     case OMP_CLAUSE:            return TS_OMP_CLAUSE;
477     case OPTIMIZATION_NODE:     return TS_OPTIMIZATION;
478     case TARGET_OPTION_NODE:    return TS_TARGET_OPTION;
479
480     default:
481       gcc_unreachable ();
482     }
483 }
484
485
486 /* Initialize tree_contains_struct to describe the hierarchy of tree
487    nodes.  */
488
489 static void
490 initialize_tree_contains_struct (void)
491 {
492   unsigned i;
493
494   for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
495     {
496       enum tree_code code;
497       enum tree_node_structure_enum ts_code;
498
499       code = (enum tree_code) i;
500       ts_code = tree_node_structure_for_code (code);
501
502       /* Mark the TS structure itself.  */
503       tree_contains_struct[code][ts_code] = 1;
504
505       /* Mark all the structures that TS is derived from.  */
506       switch (ts_code)
507         {
508         case TS_TYPED:
509         case TS_BLOCK:
510           MARK_TS_BASE (code);
511           break;
512
513         case TS_COMMON:
514         case TS_INT_CST:
515         case TS_REAL_CST:
516         case TS_FIXED_CST:
517         case TS_VECTOR:
518         case TS_STRING:
519         case TS_COMPLEX:
520         case TS_SSA_NAME:
521         case TS_CONSTRUCTOR:
522         case TS_EXP:
523         case TS_STATEMENT_LIST:
524           MARK_TS_TYPED (code);
525           break;
526
527         case TS_IDENTIFIER:
528         case TS_DECL_MINIMAL:
529         case TS_TYPE_COMMON:
530         case TS_LIST:
531         case TS_VEC:
532         case TS_BINFO:
533         case TS_OMP_CLAUSE:
534         case TS_OPTIMIZATION:
535         case TS_TARGET_OPTION:
536           MARK_TS_COMMON (code);
537           break;
538
539         case TS_TYPE_WITH_LANG_SPECIFIC:
540           MARK_TS_TYPE_COMMON (code);
541           break;
542
543         case TS_TYPE_NON_COMMON:
544           MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
545           break;
546
547         case TS_DECL_COMMON:
548           MARK_TS_DECL_MINIMAL (code);
549           break;
550
551         case TS_DECL_WRTL:
552         case TS_CONST_DECL:
553           MARK_TS_DECL_COMMON (code);
554           break;
555
556         case TS_DECL_NON_COMMON:
557           MARK_TS_DECL_WITH_VIS (code);
558           break;
559
560         case TS_DECL_WITH_VIS:
561         case TS_PARM_DECL:
562         case TS_LABEL_DECL:
563         case TS_RESULT_DECL:
564           MARK_TS_DECL_WRTL (code);
565           break;
566
567         case TS_FIELD_DECL:
568           MARK_TS_DECL_COMMON (code);
569           break;
570
571         case TS_VAR_DECL:
572           MARK_TS_DECL_WITH_VIS (code);
573           break;
574
575         case TS_TYPE_DECL:
576         case TS_FUNCTION_DECL:
577           MARK_TS_DECL_NON_COMMON (code);
578           break;
579
580         case TS_TRANSLATION_UNIT_DECL:
581           MARK_TS_DECL_COMMON (code);
582           break;
583
584         default:
585           gcc_unreachable ();
586         }
587     }
588
589   /* Basic consistency checks for attributes used in fold.  */
590   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
591   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
592   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
593   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
594   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
595   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
596   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
597   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
598   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
599   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
600   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
601   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
602   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
603   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
604   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
605   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
606   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
607   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
608   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
609   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
610   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
611   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
612   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
613   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
614   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
615   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
616   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
617   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
618   gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
619   gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
620   gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
621   gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
622   gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
623   gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
624   gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
625   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
626   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
627   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
628   gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
629   gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
630 }
631
632
633 /* Init tree.c.  */
634
635 void
636 init_ttree (void)
637 {
638   /* Initialize the hash table of types.  */
639   type_hash_table
640     = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
641
642   debug_expr_for_decl
643     = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
644
645   value_expr_for_decl
646     = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
647
648   int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
649
650   int_cst_node = make_int_cst (1, 1);
651
652   cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
653
654   cl_optimization_node = make_node (OPTIMIZATION_NODE);
655   cl_target_option_node = make_node (TARGET_OPTION_NODE);
656
657   /* Initialize the tree_contains_struct array.  */
658   initialize_tree_contains_struct ();
659   lang_hooks.init_ts ();
660 }
661
662 \f
663 /* The name of the object as the assembler will see it (but before any
664    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
665    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
666 tree
667 decl_assembler_name (tree decl)
668 {
669   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
670     lang_hooks.set_decl_assembler_name (decl);
671   return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
672 }
673
674 /* When the target supports COMDAT groups, this indicates which group the
675    DECL is associated with.  This can be either an IDENTIFIER_NODE or a
676    decl, in which case its DECL_ASSEMBLER_NAME identifies the group.  */
677 tree
678 decl_comdat_group (const_tree node)
679 {
680   struct symtab_node *snode = symtab_node::get (node);
681   if (!snode)
682     return NULL;
683   return snode->get_comdat_group ();
684 }
685
686 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE.  */
687 tree
688 decl_comdat_group_id (const_tree node)
689 {
690   struct symtab_node *snode = symtab_node::get (node);
691   if (!snode)
692     return NULL;
693   return snode->get_comdat_group_id ();
694 }
695
696 /* When the target supports named section, return its name as IDENTIFIER_NODE
697    or NULL if it is in no section.  */
698 const char *
699 decl_section_name (const_tree node)
700 {
701   struct symtab_node *snode = symtab_node::get (node);
702   if (!snode)
703     return NULL;
704   return snode->get_section ();
705 }
706
707 /* Set section name of NODE to VALUE (that is expected to be
708    identifier node) */
709 void
710 set_decl_section_name (tree node, const char *value)
711 {
712   struct symtab_node *snode;
713
714   if (value == NULL)
715     {
716       snode = symtab_node::get (node);
717       if (!snode)
718         return;
719     }
720   else if (TREE_CODE (node) == VAR_DECL)
721     snode = varpool_node::get_create (node);
722   else
723     snode = cgraph_node::get_create (node);
724   snode->set_section (value);
725 }
726
727 /* Return TLS model of a variable NODE.  */
728 enum tls_model
729 decl_tls_model (const_tree node)
730 {
731   struct varpool_node *snode = varpool_node::get (node);
732   if (!snode)
733     return TLS_MODEL_NONE;
734   return snode->tls_model;
735 }
736
737 /* Set TLS model of variable NODE to MODEL.  */
738 void
739 set_decl_tls_model (tree node, enum tls_model model)
740 {
741   struct varpool_node *vnode;
742
743   if (model == TLS_MODEL_NONE)
744     {
745       vnode = varpool_node::get (node);
746       if (!vnode)
747         return;
748     }
749   else
750     vnode = varpool_node::get_create (node);
751   vnode->tls_model = model;
752 }
753
754 /* Compute the number of bytes occupied by a tree with code CODE.
755    This function cannot be used for nodes that have variable sizes,
756    including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR.  */
757 size_t
758 tree_code_size (enum tree_code code)
759 {
760   switch (TREE_CODE_CLASS (code))
761     {
762     case tcc_declaration:  /* A decl node */
763       {
764         switch (code)
765           {
766           case FIELD_DECL:
767             return sizeof (struct tree_field_decl);
768           case PARM_DECL:
769             return sizeof (struct tree_parm_decl);
770           case VAR_DECL:
771             return sizeof (struct tree_var_decl);
772           case LABEL_DECL:
773             return sizeof (struct tree_label_decl);
774           case RESULT_DECL:
775             return sizeof (struct tree_result_decl);
776           case CONST_DECL:
777             return sizeof (struct tree_const_decl);
778           case TYPE_DECL:
779             return sizeof (struct tree_type_decl);
780           case FUNCTION_DECL:
781             return sizeof (struct tree_function_decl);
782           case DEBUG_EXPR_DECL:
783             return sizeof (struct tree_decl_with_rtl);
784           case TRANSLATION_UNIT_DECL:
785             return sizeof (struct tree_translation_unit_decl);
786           case NAMESPACE_DECL:
787           case IMPORTED_DECL:
788           case NAMELIST_DECL:
789             return sizeof (struct tree_decl_non_common);
790           default:
791             return lang_hooks.tree_size (code);
792           }
793       }
794
795     case tcc_type:  /* a type node */
796       return sizeof (struct tree_type_non_common);
797
798     case tcc_reference:   /* a reference */
799     case tcc_expression:  /* an expression */
800     case tcc_statement:   /* an expression with side effects */
801     case tcc_comparison:  /* a comparison expression */
802     case tcc_unary:       /* a unary arithmetic expression */
803     case tcc_binary:      /* a binary arithmetic expression */
804       return (sizeof (struct tree_exp)
805               + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
806
807     case tcc_constant:  /* a constant */
808       switch (code)
809         {
810         case VOID_CST:          return sizeof (struct tree_typed);
811         case INTEGER_CST:       gcc_unreachable ();
812         case REAL_CST:          return sizeof (struct tree_real_cst);
813         case FIXED_CST:         return sizeof (struct tree_fixed_cst);
814         case COMPLEX_CST:       return sizeof (struct tree_complex);
815         case VECTOR_CST:        return sizeof (struct tree_vector);
816         case STRING_CST:        gcc_unreachable ();
817         default:
818           return lang_hooks.tree_size (code);
819         }
820
821     case tcc_exceptional:  /* something random, like an identifier.  */
822       switch (code)
823         {
824         case IDENTIFIER_NODE:   return lang_hooks.identifier_size;
825         case TREE_LIST:         return sizeof (struct tree_list);
826
827         case ERROR_MARK:
828         case PLACEHOLDER_EXPR:  return sizeof (struct tree_common);
829
830         case TREE_VEC:
831         case OMP_CLAUSE:        gcc_unreachable ();
832
833         case SSA_NAME:          return sizeof (struct tree_ssa_name);
834
835         case STATEMENT_LIST:    return sizeof (struct tree_statement_list);
836         case BLOCK:             return sizeof (struct tree_block);
837         case CONSTRUCTOR:       return sizeof (struct tree_constructor);
838         case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
839         case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
840
841         default:
842           return lang_hooks.tree_size (code);
843         }
844
845     default:
846       gcc_unreachable ();
847     }
848 }
849
850 /* Compute the number of bytes occupied by NODE.  This routine only
851    looks at TREE_CODE, except for those nodes that have variable sizes.  */
852 size_t
853 tree_size (const_tree node)
854 {
855   const enum tree_code code = TREE_CODE (node);
856   switch (code)
857     {
858     case INTEGER_CST:
859       return (sizeof (struct tree_int_cst)
860               + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
861
862     case TREE_BINFO:
863       return (offsetof (struct tree_binfo, base_binfos)
864               + vec<tree, va_gc>
865                   ::embedded_size (BINFO_N_BASE_BINFOS (node)));
866
867     case TREE_VEC:
868       return (sizeof (struct tree_vec)
869               + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
870
871     case VECTOR_CST:
872       return (sizeof (struct tree_vector)
873               + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
874
875     case STRING_CST:
876       return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
877
878     case OMP_CLAUSE:
879       return (sizeof (struct tree_omp_clause)
880               + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
881                 * sizeof (tree));
882
883     default:
884       if (TREE_CODE_CLASS (code) == tcc_vl_exp)
885         return (sizeof (struct tree_exp)
886                 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
887       else
888         return tree_code_size (code);
889     }
890 }
891
892 /* Record interesting allocation statistics for a tree node with CODE
893    and LENGTH.  */
894
895 static void
896 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
897                                    size_t length ATTRIBUTE_UNUSED)
898 {
899   enum tree_code_class type = TREE_CODE_CLASS (code);
900   tree_node_kind kind;
901
902   if (!GATHER_STATISTICS)
903     return;
904
905   switch (type)
906     {
907     case tcc_declaration:  /* A decl node */
908       kind = d_kind;
909       break;
910
911     case tcc_type:  /* a type node */
912       kind = t_kind;
913       break;
914
915     case tcc_statement:  /* an expression with side effects */
916       kind = s_kind;
917       break;
918
919     case tcc_reference:  /* a reference */
920       kind = r_kind;
921       break;
922
923     case tcc_expression:  /* an expression */
924     case tcc_comparison:  /* a comparison expression */
925     case tcc_unary:  /* a unary arithmetic expression */
926     case tcc_binary:  /* a binary arithmetic expression */
927       kind = e_kind;
928       break;
929
930     case tcc_constant:  /* a constant */
931       kind = c_kind;
932       break;
933
934     case tcc_exceptional:  /* something random, like an identifier.  */
935       switch (code)
936         {
937         case IDENTIFIER_NODE:
938           kind = id_kind;
939           break;
940
941         case TREE_VEC:
942           kind = vec_kind;
943           break;
944
945         case TREE_BINFO:
946           kind = binfo_kind;
947           break;
948
949         case SSA_NAME:
950           kind = ssa_name_kind;
951           break;
952
953         case BLOCK:
954           kind = b_kind;
955           break;
956
957         case CONSTRUCTOR:
958           kind = constr_kind;
959           break;
960
961         case OMP_CLAUSE:
962           kind = omp_clause_kind;
963           break;
964
965         default:
966           kind = x_kind;
967           break;
968         }
969       break;
970
971     case tcc_vl_exp:
972       kind = e_kind;
973       break;
974
975     default:
976       gcc_unreachable ();
977     }
978
979   tree_code_counts[(int) code]++;
980   tree_node_counts[(int) kind]++;
981   tree_node_sizes[(int) kind] += length;
982 }
983
984 /* Allocate and return a new UID from the DECL_UID namespace.  */
985
986 int
987 allocate_decl_uid (void)
988 {
989   return next_decl_uid++;
990 }
991
992 /* Return a newly allocated node of code CODE.  For decl and type
993    nodes, some other fields are initialized.  The rest of the node is
994    initialized to zero.  This function cannot be used for TREE_VEC,
995    INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
996    tree_code_size.
997
998    Achoo!  I got a code in the node.  */
999
1000 tree
1001 make_node_stat (enum tree_code code MEM_STAT_DECL)
1002 {
1003   tree t;
1004   enum tree_code_class type = TREE_CODE_CLASS (code);
1005   size_t length = tree_code_size (code);
1006
1007   record_node_allocation_statistics (code, length);
1008
1009   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1010   TREE_SET_CODE (t, code);
1011
1012   switch (type)
1013     {
1014     case tcc_statement:
1015       TREE_SIDE_EFFECTS (t) = 1;
1016       break;
1017
1018     case tcc_declaration:
1019       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1020         {
1021           if (code == FUNCTION_DECL)
1022             {
1023               DECL_ALIGN (t) = FUNCTION_BOUNDARY;
1024               DECL_MODE (t) = FUNCTION_MODE;
1025             }
1026           else
1027             DECL_ALIGN (t) = 1;
1028         }
1029       DECL_SOURCE_LOCATION (t) = input_location;
1030       if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1031         DECL_UID (t) = --next_debug_decl_uid;
1032       else
1033         {
1034           DECL_UID (t) = allocate_decl_uid ();
1035           SET_DECL_PT_UID (t, -1);
1036         }
1037       if (TREE_CODE (t) == LABEL_DECL)
1038         LABEL_DECL_UID (t) = -1;
1039
1040       break;
1041
1042     case tcc_type:
1043       TYPE_UID (t) = next_type_uid++;
1044       TYPE_ALIGN (t) = BITS_PER_UNIT;
1045       TYPE_USER_ALIGN (t) = 0;
1046       TYPE_MAIN_VARIANT (t) = t;
1047       TYPE_CANONICAL (t) = t;
1048
1049       /* Default to no attributes for type, but let target change that.  */
1050       TYPE_ATTRIBUTES (t) = NULL_TREE;
1051       targetm.set_default_type_attributes (t);
1052
1053       /* We have not yet computed the alias set for this type.  */
1054       TYPE_ALIAS_SET (t) = -1;
1055       break;
1056
1057     case tcc_constant:
1058       TREE_CONSTANT (t) = 1;
1059       break;
1060
1061     case tcc_expression:
1062       switch (code)
1063         {
1064         case INIT_EXPR:
1065         case MODIFY_EXPR:
1066         case VA_ARG_EXPR:
1067         case PREDECREMENT_EXPR:
1068         case PREINCREMENT_EXPR:
1069         case POSTDECREMENT_EXPR:
1070         case POSTINCREMENT_EXPR:
1071           /* All of these have side-effects, no matter what their
1072              operands are.  */
1073           TREE_SIDE_EFFECTS (t) = 1;
1074           break;
1075
1076         default:
1077           break;
1078         }
1079       break;
1080
1081     case tcc_exceptional:
1082       switch (code)
1083         {
1084         case TARGET_OPTION_NODE:
1085           TREE_TARGET_OPTION(t)
1086                             = ggc_cleared_alloc<struct cl_target_option> ();
1087           break;
1088
1089         case OPTIMIZATION_NODE:
1090           TREE_OPTIMIZATION (t)
1091                             = ggc_cleared_alloc<struct cl_optimization> ();
1092           break;
1093
1094         default:
1095           break;
1096         }
1097       break;
1098
1099     default:
1100       /* Other classes need no special treatment.  */
1101       break;
1102     }
1103
1104   return t;
1105 }
1106
1107 /* Free tree node.  */
1108
1109 void
1110 free_node (tree node)
1111 {
1112   enum tree_code code = TREE_CODE (node);
1113   if (GATHER_STATISTICS)
1114     {
1115       tree_code_counts[(int) TREE_CODE (node)]--;
1116       tree_node_counts[(int) t_kind]--;
1117       tree_node_sizes[(int) t_kind] -= tree_code_size (TREE_CODE (node));
1118     }
1119   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1120     vec_free (CONSTRUCTOR_ELTS (node));
1121   else if (code == BLOCK)
1122     vec_free (BLOCK_NONLOCALIZED_VARS (node));
1123   else if (code == TREE_BINFO)
1124     vec_free (BINFO_BASE_ACCESSES (node));
1125   ggc_free (node);
1126 }
1127 \f
1128 /* Return a new node with the same contents as NODE except that its
1129    TREE_CHAIN, if it has one, is zero and it has a fresh uid.  */
1130
1131 tree
1132 copy_node_stat (tree node MEM_STAT_DECL)
1133 {
1134   tree t;
1135   enum tree_code code = TREE_CODE (node);
1136   size_t length;
1137
1138   gcc_assert (code != STATEMENT_LIST);
1139
1140   length = tree_size (node);
1141   record_node_allocation_statistics (code, length);
1142   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1143   memcpy (t, node, length);
1144
1145   if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1146     TREE_CHAIN (t) = 0;
1147   TREE_ASM_WRITTEN (t) = 0;
1148   TREE_VISITED (t) = 0;
1149
1150   if (TREE_CODE_CLASS (code) == tcc_declaration)
1151     {
1152       if (code == DEBUG_EXPR_DECL)
1153         DECL_UID (t) = --next_debug_decl_uid;
1154       else
1155         {
1156           DECL_UID (t) = allocate_decl_uid ();
1157           if (DECL_PT_UID_SET_P (node))
1158             SET_DECL_PT_UID (t, DECL_PT_UID (node));
1159         }
1160       if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
1161           && DECL_HAS_VALUE_EXPR_P (node))
1162         {
1163           SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1164           DECL_HAS_VALUE_EXPR_P (t) = 1;
1165         }
1166       /* DECL_DEBUG_EXPR is copied explicitely by callers.  */
1167       if (TREE_CODE (node) == VAR_DECL)
1168         {
1169           DECL_HAS_DEBUG_EXPR_P (t) = 0;
1170           t->decl_with_vis.symtab_node = NULL;
1171         }
1172       if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
1173         {
1174           SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1175           DECL_HAS_INIT_PRIORITY_P (t) = 1;
1176         }
1177       if (TREE_CODE (node) == FUNCTION_DECL)
1178         {
1179           DECL_STRUCT_FUNCTION (t) = NULL;
1180           t->decl_with_vis.symtab_node = NULL;
1181         }
1182     }
1183   else if (TREE_CODE_CLASS (code) == tcc_type)
1184     {
1185       TYPE_UID (t) = next_type_uid++;
1186       /* The following is so that the debug code for
1187          the copy is different from the original type.
1188          The two statements usually duplicate each other
1189          (because they clear fields of the same union),
1190          but the optimizer should catch that.  */
1191       TYPE_SYMTAB_POINTER (t) = 0;
1192       TYPE_SYMTAB_ADDRESS (t) = 0;
1193
1194       /* Do not copy the values cache.  */
1195       if (TYPE_CACHED_VALUES_P (t))
1196         {
1197           TYPE_CACHED_VALUES_P (t) = 0;
1198           TYPE_CACHED_VALUES (t) = NULL_TREE;
1199         }
1200     }
1201     else if (code == TARGET_OPTION_NODE)
1202       {
1203         TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
1204         memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
1205                 sizeof (struct cl_target_option));
1206       }
1207     else if (code == OPTIMIZATION_NODE)
1208       {
1209         TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>();
1210         memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node),
1211                 sizeof (struct cl_optimization));
1212       }
1213
1214   return t;
1215 }
1216
1217 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1218    For example, this can copy a list made of TREE_LIST nodes.  */
1219
1220 tree
1221 copy_list (tree list)
1222 {
1223   tree head;
1224   tree prev, next;
1225
1226   if (list == 0)
1227     return 0;
1228
1229   head = prev = copy_node (list);
1230   next = TREE_CHAIN (list);
1231   while (next)
1232     {
1233       TREE_CHAIN (prev) = copy_node (next);
1234       prev = TREE_CHAIN (prev);
1235       next = TREE_CHAIN (next);
1236     }
1237   return head;
1238 }
1239
1240 \f
1241 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1242    INTEGER_CST with value CST and type TYPE.   */
1243
1244 static unsigned int
1245 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1246 {
1247   gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1248   /* We need extra HWIs if CST is an unsigned integer with its
1249      upper bit set.  */
1250   if (TYPE_UNSIGNED (type) && wi::neg_p (cst))
1251     return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1252   return cst.get_len ();
1253 }
1254
1255 /* Return a new INTEGER_CST with value CST and type TYPE.  */
1256
1257 static tree
1258 build_new_int_cst (tree type, const wide_int &cst)
1259 {
1260   unsigned int len = cst.get_len ();
1261   unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1262   tree nt = make_int_cst (len, ext_len);
1263
1264   if (len < ext_len)
1265     {
1266       --ext_len;
1267       TREE_INT_CST_ELT (nt, ext_len)
1268         = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1269       for (unsigned int i = len; i < ext_len; ++i)
1270         TREE_INT_CST_ELT (nt, i) = -1;
1271     }
1272   else if (TYPE_UNSIGNED (type)
1273            && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1274     {
1275       len--;
1276       TREE_INT_CST_ELT (nt, len)
1277         = zext_hwi (cst.elt (len),
1278                     cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1279     }
1280
1281   for (unsigned int i = 0; i < len; i++)
1282     TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1283   TREE_TYPE (nt) = type;
1284   return nt;
1285 }
1286
1287 /* Create an INT_CST node with a LOW value sign extended to TYPE.  */
1288
1289 tree
1290 build_int_cst (tree type, HOST_WIDE_INT low)
1291 {
1292   /* Support legacy code.  */
1293   if (!type)
1294     type = integer_type_node;
1295
1296   return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1297 }
1298
1299 tree
1300 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
1301 {
1302   return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1303 }
1304
1305 /* Create an INT_CST node with a LOW value sign extended to TYPE.  */
1306
1307 tree
1308 build_int_cst_type (tree type, HOST_WIDE_INT low)
1309 {
1310   gcc_assert (type);
1311   return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1312 }
1313
1314 /* Constructs tree in type TYPE from with value given by CST.  Signedness
1315    of CST is assumed to be the same as the signedness of TYPE.  */
1316
1317 tree
1318 double_int_to_tree (tree type, double_int cst)
1319 {
1320   return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1321 }
1322
1323 /* We force the wide_int CST to the range of the type TYPE by sign or
1324    zero extending it.  OVERFLOWABLE indicates if we are interested in
1325    overflow of the value, when >0 we are only interested in signed
1326    overflow, for <0 we are interested in any overflow.  OVERFLOWED
1327    indicates whether overflow has already occurred.  CONST_OVERFLOWED
1328    indicates whether constant overflow has already occurred.  We force
1329    T's value to be within range of T's type (by setting to 0 or 1 all
1330    the bits outside the type's range).  We set TREE_OVERFLOWED if,
1331         OVERFLOWED is nonzero,
1332         or OVERFLOWABLE is >0 and signed overflow occurs
1333         or OVERFLOWABLE is <0 and any overflow occurs
1334    We return a new tree node for the extended wide_int.  The node
1335    is shared if no overflow flags are set.  */
1336
1337
1338 tree
1339 force_fit_type (tree type, const wide_int_ref &cst,
1340                 int overflowable, bool overflowed)
1341 {
1342   signop sign = TYPE_SIGN (type);
1343
1344   /* If we need to set overflow flags, return a new unshared node.  */
1345   if (overflowed || !wi::fits_to_tree_p (cst, type))
1346     {
1347       if (overflowed
1348           || overflowable < 0
1349           || (overflowable > 0 && sign == SIGNED))
1350         {
1351           wide_int tmp = wide_int::from (cst, TYPE_PRECISION (type), sign);
1352           tree t = build_new_int_cst (type, tmp);
1353           TREE_OVERFLOW (t) = 1;
1354           return t;
1355         }
1356     }
1357
1358   /* Else build a shared node.  */
1359   return wide_int_to_tree (type, cst);
1360 }
1361
1362 /* These are the hash table functions for the hash table of INTEGER_CST
1363    nodes of a sizetype.  */
1364
1365 /* Return the hash code X, an INTEGER_CST.  */
1366
1367 hashval_t
1368 int_cst_hasher::hash (tree x)
1369 {
1370   const_tree const t = x;
1371   hashval_t code = TYPE_UID (TREE_TYPE (t));
1372   int i;
1373
1374   for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1375     code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code);
1376
1377   return code;
1378 }
1379
1380 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1381    is the same as that given by *Y, which is the same.  */
1382
1383 bool
1384 int_cst_hasher::equal (tree x, tree y)
1385 {
1386   const_tree const xt = x;
1387   const_tree const yt = y;
1388
1389   if (TREE_TYPE (xt) != TREE_TYPE (yt)
1390       || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1391       || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1392     return false;
1393
1394   for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1395     if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1396       return false;
1397
1398   return true;
1399 }
1400
1401 /* Create an INT_CST node of TYPE and value CST.
1402    The returned node is always shared.  For small integers we use a
1403    per-type vector cache, for larger ones we use a single hash table.
1404    The value is extended from its precision according to the sign of
1405    the type to be a multiple of HOST_BITS_PER_WIDE_INT.  This defines
1406    the upper bits and ensures that hashing and value equality based
1407    upon the underlying HOST_WIDE_INTs works without masking.  */
1408
1409 tree
1410 wide_int_to_tree (tree type, const wide_int_ref &pcst)
1411 {
1412   tree t;
1413   int ix = -1;
1414   int limit = 0;
1415
1416   gcc_assert (type);
1417   unsigned int prec = TYPE_PRECISION (type);
1418   signop sgn = TYPE_SIGN (type);
1419
1420   /* Verify that everything is canonical.  */
1421   int l = pcst.get_len ();
1422   if (l > 1)
1423     {
1424       if (pcst.elt (l - 1) == 0)
1425         gcc_checking_assert (pcst.elt (l - 2) < 0);
1426       if (pcst.elt (l - 1) == (HOST_WIDE_INT) -1)
1427         gcc_checking_assert (pcst.elt (l - 2) >= 0);
1428     }
1429
1430   wide_int cst = wide_int::from (pcst, prec, sgn);
1431   unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1432
1433   if (ext_len == 1)
1434     {
1435       /* We just need to store a single HOST_WIDE_INT.  */
1436       HOST_WIDE_INT hwi;
1437       if (TYPE_UNSIGNED (type))
1438         hwi = cst.to_uhwi ();
1439       else
1440         hwi = cst.to_shwi ();
1441
1442       switch (TREE_CODE (type))
1443         {
1444         case NULLPTR_TYPE:
1445           gcc_assert (hwi == 0);
1446           /* Fallthru.  */
1447
1448         case POINTER_TYPE:
1449         case REFERENCE_TYPE:
1450         case POINTER_BOUNDS_TYPE:
1451           /* Cache NULL pointer and zero bounds.  */
1452           if (hwi == 0)
1453             {
1454               limit = 1;
1455               ix = 0;
1456             }
1457           break;
1458
1459         case BOOLEAN_TYPE:
1460           /* Cache false or true.  */
1461           limit = 2;
1462           if (IN_RANGE (hwi, 0, 1))
1463             ix = hwi;
1464           break;
1465
1466         case INTEGER_TYPE:
1467         case OFFSET_TYPE:
1468           if (TYPE_SIGN (type) == UNSIGNED)
1469             {
1470               /* Cache [0, N).  */
1471               limit = INTEGER_SHARE_LIMIT;
1472               if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1))
1473                 ix = hwi;
1474             }
1475           else
1476             {
1477               /* Cache [-1, N).  */
1478               limit = INTEGER_SHARE_LIMIT + 1;
1479               if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1))
1480                 ix = hwi + 1;
1481             }
1482           break;
1483
1484         case ENUMERAL_TYPE:
1485           break;
1486
1487         default:
1488           gcc_unreachable ();
1489         }
1490
1491       if (ix >= 0)
1492         {
1493           /* Look for it in the type's vector of small shared ints.  */
1494           if (!TYPE_CACHED_VALUES_P (type))
1495             {
1496               TYPE_CACHED_VALUES_P (type) = 1;
1497               TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1498             }
1499
1500           t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1501           if (t)
1502             /* Make sure no one is clobbering the shared constant.  */
1503             gcc_checking_assert (TREE_TYPE (t) == type
1504                                  && TREE_INT_CST_NUNITS (t) == 1
1505                                  && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1506                                  && TREE_INT_CST_EXT_NUNITS (t) == 1
1507                                  && TREE_INT_CST_ELT (t, 0) == hwi);
1508           else
1509             {
1510               /* Create a new shared int.  */
1511               t = build_new_int_cst (type, cst);
1512               TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1513             }
1514         }
1515       else
1516         {
1517           /* Use the cache of larger shared ints, using int_cst_node as
1518              a temporary.  */
1519
1520           TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1521           TREE_TYPE (int_cst_node) = type;
1522
1523           tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1524           t = *slot;
1525           if (!t)
1526             {
1527               /* Insert this one into the hash table.  */
1528               t = int_cst_node;
1529               *slot = t;
1530               /* Make a new node for next time round.  */
1531               int_cst_node = make_int_cst (1, 1);
1532             }
1533         }
1534     }
1535   else
1536     {
1537       /* The value either hashes properly or we drop it on the floor
1538          for the gc to take care of.  There will not be enough of them
1539          to worry about.  */
1540
1541       tree nt = build_new_int_cst (type, cst);
1542       tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1543       t = *slot;
1544       if (!t)
1545         {
1546           /* Insert this one into the hash table.  */
1547           t = nt;
1548           *slot = t;
1549         }
1550     }
1551
1552   return t;
1553 }
1554
1555 void
1556 cache_integer_cst (tree t)
1557 {
1558   tree type = TREE_TYPE (t);
1559   int ix = -1;
1560   int limit = 0;
1561   int prec = TYPE_PRECISION (type);
1562
1563   gcc_assert (!TREE_OVERFLOW (t));
1564
1565   switch (TREE_CODE (type))
1566     {
1567     case NULLPTR_TYPE:
1568       gcc_assert (integer_zerop (t));
1569       /* Fallthru.  */
1570
1571     case POINTER_TYPE:
1572     case REFERENCE_TYPE:
1573       /* Cache NULL pointer.  */
1574       if (integer_zerop (t))
1575         {
1576           limit = 1;
1577           ix = 0;
1578         }
1579       break;
1580
1581     case BOOLEAN_TYPE:
1582       /* Cache false or true.  */
1583       limit = 2;
1584       if (wi::ltu_p (t, 2))
1585         ix = TREE_INT_CST_ELT (t, 0);
1586       break;
1587
1588     case INTEGER_TYPE:
1589     case OFFSET_TYPE:
1590       if (TYPE_UNSIGNED (type))
1591         {
1592           /* Cache 0..N */
1593           limit = INTEGER_SHARE_LIMIT;
1594
1595           /* This is a little hokie, but if the prec is smaller than
1596              what is necessary to hold INTEGER_SHARE_LIMIT, then the
1597              obvious test will not get the correct answer.  */
1598           if (prec < HOST_BITS_PER_WIDE_INT)
1599             {
1600               if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT)
1601                 ix = tree_to_uhwi (t);
1602             }
1603           else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1604             ix = tree_to_uhwi (t);
1605         }
1606       else
1607         {
1608           /* Cache -1..N */
1609           limit = INTEGER_SHARE_LIMIT + 1;
1610
1611           if (integer_minus_onep (t))
1612             ix = 0;
1613           else if (!wi::neg_p (t))
1614             {
1615               if (prec < HOST_BITS_PER_WIDE_INT)
1616                 {
1617                   if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT)
1618                     ix = tree_to_shwi (t) + 1;
1619                 }
1620               else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1621                 ix = tree_to_shwi (t) + 1;
1622             }
1623         }
1624       break;
1625
1626     case ENUMERAL_TYPE:
1627       break;
1628
1629     default:
1630       gcc_unreachable ();
1631     }
1632
1633   if (ix >= 0)
1634     {
1635       /* Look for it in the type's vector of small shared ints.  */
1636       if (!TYPE_CACHED_VALUES_P (type))
1637         {
1638           TYPE_CACHED_VALUES_P (type) = 1;
1639           TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1640         }
1641
1642       gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1643       TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1644     }
1645   else
1646     {
1647       /* Use the cache of larger shared ints.  */
1648       tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1649       /* If there is already an entry for the number verify it's the
1650          same.  */
1651       if (*slot)
1652         gcc_assert (wi::eq_p (tree (*slot), t));
1653       else
1654         /* Otherwise insert this one into the hash table.  */
1655         *slot = t;
1656     }
1657 }
1658
1659
1660 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1661    and the rest are zeros.  */
1662
1663 tree
1664 build_low_bits_mask (tree type, unsigned bits)
1665 {
1666   gcc_assert (bits <= TYPE_PRECISION (type));
1667
1668   return wide_int_to_tree (type, wi::mask (bits, false,
1669                                            TYPE_PRECISION (type)));
1670 }
1671
1672 /* Checks that X is integer constant that can be expressed in (unsigned)
1673    HOST_WIDE_INT without loss of precision.  */
1674
1675 bool
1676 cst_and_fits_in_hwi (const_tree x)
1677 {
1678   if (TREE_CODE (x) != INTEGER_CST)
1679     return false;
1680
1681   if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1682     return false;
1683
1684   return TREE_INT_CST_NUNITS (x) == 1;
1685 }
1686
1687 /* Build a newly constructed VECTOR_CST node of length LEN.  */
1688
1689 tree
1690 make_vector_stat (unsigned len MEM_STAT_DECL)
1691 {
1692   tree t;
1693   unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1694
1695   record_node_allocation_statistics (VECTOR_CST, length);
1696
1697   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1698
1699   TREE_SET_CODE (t, VECTOR_CST);
1700   TREE_CONSTANT (t) = 1;
1701
1702   return t;
1703 }
1704
1705 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1706    are in a list pointed to by VALS.  */
1707
1708 tree
1709 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1710 {
1711   int over = 0;
1712   unsigned cnt = 0;
1713   tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1714   TREE_TYPE (v) = type;
1715
1716   /* Iterate through elements and check for overflow.  */
1717   for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1718     {
1719       tree value = vals[cnt];
1720
1721       VECTOR_CST_ELT (v, cnt) = value;
1722
1723       /* Don't crash if we get an address constant.  */
1724       if (!CONSTANT_CLASS_P (value))
1725         continue;
1726
1727       over |= TREE_OVERFLOW (value);
1728     }
1729
1730   TREE_OVERFLOW (v) = over;
1731   return v;
1732 }
1733
1734 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1735    are extracted from V, a vector of CONSTRUCTOR_ELT.  */
1736
1737 tree
1738 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1739 {
1740   tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1741   unsigned HOST_WIDE_INT idx, pos = 0;
1742   tree value;
1743
1744   FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1745     {
1746       if (TREE_CODE (value) == VECTOR_CST)
1747         for (unsigned i = 0; i < VECTOR_CST_NELTS (value); ++i)
1748           vec[pos++] = VECTOR_CST_ELT (value, i);
1749       else
1750         vec[pos++] = value;
1751     }
1752   for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
1753     vec[pos++] = build_zero_cst (TREE_TYPE (type));
1754
1755   return build_vector (type, vec);
1756 }
1757
1758 /* Build a vector of type VECTYPE where all the elements are SCs.  */
1759 tree
1760 build_vector_from_val (tree vectype, tree sc) 
1761 {
1762   int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1763
1764   if (sc == error_mark_node)
1765     return sc;
1766
1767   /* Verify that the vector type is suitable for SC.  Note that there
1768      is some inconsistency in the type-system with respect to restrict
1769      qualifications of pointers.  Vector types always have a main-variant
1770      element type and the qualification is applied to the vector-type.
1771      So TREE_TYPE (vector-type) does not return a properly qualified
1772      vector element-type.  */
1773   gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1774                                            TREE_TYPE (vectype)));
1775
1776   if (CONSTANT_CLASS_P (sc))
1777     {
1778       tree *v = XALLOCAVEC (tree, nunits);
1779       for (i = 0; i < nunits; ++i)
1780         v[i] = sc;
1781       return build_vector (vectype, v);
1782     }
1783   else
1784     {
1785       vec<constructor_elt, va_gc> *v;
1786       vec_alloc (v, nunits);
1787       for (i = 0; i < nunits; ++i)
1788         CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1789       return build_constructor (vectype, v);
1790     }
1791 }
1792
1793 /* Something has messed with the elements of CONSTRUCTOR C after it was built;
1794    calculate TREE_CONSTANT and TREE_SIDE_EFFECTS.  */
1795
1796 void
1797 recompute_constructor_flags (tree c)
1798 {
1799   unsigned int i;
1800   tree val;
1801   bool constant_p = true;
1802   bool side_effects_p = false;
1803   vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1804
1805   FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1806     {
1807       /* Mostly ctors will have elts that don't have side-effects, so
1808          the usual case is to scan all the elements.  Hence a single
1809          loop for both const and side effects, rather than one loop
1810          each (with early outs).  */
1811       if (!TREE_CONSTANT (val))
1812         constant_p = false;
1813       if (TREE_SIDE_EFFECTS (val))
1814         side_effects_p = true;
1815     }
1816
1817   TREE_SIDE_EFFECTS (c) = side_effects_p;
1818   TREE_CONSTANT (c) = constant_p;
1819 }
1820
1821 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for
1822    CONSTRUCTOR C.  */
1823
1824 void
1825 verify_constructor_flags (tree c)
1826 {
1827   unsigned int i;
1828   tree val;
1829   bool constant_p = TREE_CONSTANT (c);
1830   bool side_effects_p = TREE_SIDE_EFFECTS (c);
1831   vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1832
1833   FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1834     {
1835       if (constant_p && !TREE_CONSTANT (val))
1836         internal_error ("non-constant element in constant CONSTRUCTOR");
1837       if (!side_effects_p && TREE_SIDE_EFFECTS (val))
1838         internal_error ("side-effects element in no-side-effects CONSTRUCTOR");
1839     }
1840 }
1841
1842 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1843    are in the vec pointed to by VALS.  */
1844 tree
1845 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1846 {
1847   tree c = make_node (CONSTRUCTOR);
1848
1849   TREE_TYPE (c) = type;
1850   CONSTRUCTOR_ELTS (c) = vals;
1851
1852   recompute_constructor_flags (c);
1853
1854   return c;
1855 }
1856
1857 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1858    INDEX and VALUE.  */
1859 tree
1860 build_constructor_single (tree type, tree index, tree value)
1861 {
1862   vec<constructor_elt, va_gc> *v;
1863   constructor_elt elt = {index, value};
1864
1865   vec_alloc (v, 1);
1866   v->quick_push (elt);
1867
1868   return build_constructor (type, v);
1869 }
1870
1871
1872 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1873    are in a list pointed to by VALS.  */
1874 tree
1875 build_constructor_from_list (tree type, tree vals)
1876 {
1877   tree t;
1878   vec<constructor_elt, va_gc> *v = NULL;
1879
1880   if (vals)
1881     {
1882       vec_alloc (v, list_length (vals));
1883       for (t = vals; t; t = TREE_CHAIN (t))
1884         CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1885     }
1886
1887   return build_constructor (type, v);
1888 }
1889
1890 /* Return a new CONSTRUCTOR node whose type is TYPE.  NELTS is the number
1891    of elements, provided as index/value pairs.  */
1892
1893 tree
1894 build_constructor_va (tree type, int nelts, ...)
1895 {
1896   vec<constructor_elt, va_gc> *v = NULL;
1897   va_list p;
1898
1899   va_start (p, nelts);
1900   vec_alloc (v, nelts);
1901   while (nelts--)
1902     {
1903       tree index = va_arg (p, tree);
1904       tree value = va_arg (p, tree);
1905       CONSTRUCTOR_APPEND_ELT (v, index, value);
1906     }
1907   va_end (p);
1908   return build_constructor (type, v);
1909 }
1910
1911 /* Return a new FIXED_CST node whose type is TYPE and value is F.  */
1912
1913 tree
1914 build_fixed (tree type, FIXED_VALUE_TYPE f)
1915 {
1916   tree v;
1917   FIXED_VALUE_TYPE *fp;
1918
1919   v = make_node (FIXED_CST);
1920   fp = ggc_alloc<fixed_value> ();
1921   memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1922
1923   TREE_TYPE (v) = type;
1924   TREE_FIXED_CST_PTR (v) = fp;
1925   return v;
1926 }
1927
1928 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1929
1930 tree
1931 build_real (tree type, REAL_VALUE_TYPE d)
1932 {
1933   tree v;
1934   REAL_VALUE_TYPE *dp;
1935   int overflow = 0;
1936
1937   /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1938      Consider doing it via real_convert now.  */
1939
1940   v = make_node (REAL_CST);
1941   dp = ggc_alloc<real_value> ();
1942   memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1943
1944   TREE_TYPE (v) = type;
1945   TREE_REAL_CST_PTR (v) = dp;
1946   TREE_OVERFLOW (v) = overflow;
1947   return v;
1948 }
1949
1950 /* Like build_real, but first truncate D to the type.  */
1951
1952 tree
1953 build_real_truncate (tree type, REAL_VALUE_TYPE d)
1954 {
1955   return build_real (type, real_value_truncate (TYPE_MODE (type), d));
1956 }
1957
1958 /* Return a new REAL_CST node whose type is TYPE
1959    and whose value is the integer value of the INTEGER_CST node I.  */
1960
1961 REAL_VALUE_TYPE
1962 real_value_from_int_cst (const_tree type, const_tree i)
1963 {
1964   REAL_VALUE_TYPE d;
1965
1966   /* Clear all bits of the real value type so that we can later do
1967      bitwise comparisons to see if two values are the same.  */
1968   memset (&d, 0, sizeof d);
1969
1970   real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, i,
1971                      TYPE_SIGN (TREE_TYPE (i)));
1972   return d;
1973 }
1974
1975 /* Given a tree representing an integer constant I, return a tree
1976    representing the same value as a floating-point constant of type TYPE.  */
1977
1978 tree
1979 build_real_from_int_cst (tree type, const_tree i)
1980 {
1981   tree v;
1982   int overflow = TREE_OVERFLOW (i);
1983
1984   v = build_real (type, real_value_from_int_cst (type, i));
1985
1986   TREE_OVERFLOW (v) |= overflow;
1987   return v;
1988 }
1989
1990 /* Return a newly constructed STRING_CST node whose value is
1991    the LEN characters at STR.
1992    Note that for a C string literal, LEN should include the trailing NUL.
1993    The TREE_TYPE is not initialized.  */
1994
1995 tree
1996 build_string (int len, const char *str)
1997 {
1998   tree s;
1999   size_t length;
2000
2001   /* Do not waste bytes provided by padding of struct tree_string.  */
2002   length = len + offsetof (struct tree_string, str) + 1;
2003
2004   record_node_allocation_statistics (STRING_CST, length);
2005
2006   s = (tree) ggc_internal_alloc (length);
2007
2008   memset (s, 0, sizeof (struct tree_typed));
2009   TREE_SET_CODE (s, STRING_CST);
2010   TREE_CONSTANT (s) = 1;
2011   TREE_STRING_LENGTH (s) = len;
2012   memcpy (s->string.str, str, len);
2013   s->string.str[len] = '\0';
2014
2015   return s;
2016 }
2017
2018 /* Return a newly constructed COMPLEX_CST node whose value is
2019    specified by the real and imaginary parts REAL and IMAG.
2020    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
2021    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
2022
2023 tree
2024 build_complex (tree type, tree real, tree imag)
2025 {
2026   tree t = make_node (COMPLEX_CST);
2027
2028   TREE_REALPART (t) = real;
2029   TREE_IMAGPART (t) = imag;
2030   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
2031   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
2032   return t;
2033 }
2034
2035 /* Build a complex (inf +- 0i), such as for the result of cproj.
2036    TYPE is the complex tree type of the result.  If NEG is true, the
2037    imaginary zero is negative.  */
2038
2039 tree
2040 build_complex_inf (tree type, bool neg)
2041 {
2042   REAL_VALUE_TYPE rinf, rzero = dconst0;
2043
2044   real_inf (&rinf);
2045   rzero.sign = neg;
2046   return build_complex (type, build_real (TREE_TYPE (type), rinf),
2047                         build_real (TREE_TYPE (type), rzero));
2048 }
2049
2050 /* Return the constant 1 in type TYPE.  If TYPE has several elements, each
2051    element is set to 1.  In particular, this is 1 + i for complex types.  */
2052
2053 tree
2054 build_each_one_cst (tree type)
2055 {
2056   if (TREE_CODE (type) == COMPLEX_TYPE)
2057     {
2058       tree scalar = build_one_cst (TREE_TYPE (type));
2059       return build_complex (type, scalar, scalar);
2060     }
2061   else
2062     return build_one_cst (type);
2063 }
2064
2065 /* Return a constant of arithmetic type TYPE which is the
2066    multiplicative identity of the set TYPE.  */
2067
2068 tree
2069 build_one_cst (tree type)
2070 {
2071   switch (TREE_CODE (type))
2072     {
2073     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2074     case POINTER_TYPE: case REFERENCE_TYPE:
2075     case OFFSET_TYPE:
2076       return build_int_cst (type, 1);
2077
2078     case REAL_TYPE:
2079       return build_real (type, dconst1);
2080
2081     case FIXED_POINT_TYPE:
2082       /* We can only generate 1 for accum types.  */
2083       gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2084       return build_fixed (type, FCONST1 (TYPE_MODE (type)));
2085
2086     case VECTOR_TYPE:
2087       {
2088         tree scalar = build_one_cst (TREE_TYPE (type));
2089
2090         return build_vector_from_val (type, scalar);
2091       }
2092
2093     case COMPLEX_TYPE:
2094       return build_complex (type,
2095                             build_one_cst (TREE_TYPE (type)),
2096                             build_zero_cst (TREE_TYPE (type)));
2097
2098     default:
2099       gcc_unreachable ();
2100     }
2101 }
2102
2103 /* Return an integer of type TYPE containing all 1's in as much precision as
2104    it contains, or a complex or vector whose subparts are such integers.  */
2105
2106 tree
2107 build_all_ones_cst (tree type)
2108 {
2109   if (TREE_CODE (type) == COMPLEX_TYPE)
2110     {
2111       tree scalar = build_all_ones_cst (TREE_TYPE (type));
2112       return build_complex (type, scalar, scalar);
2113     }
2114   else
2115     return build_minus_one_cst (type);
2116 }
2117
2118 /* Return a constant of arithmetic type TYPE which is the
2119    opposite of the multiplicative identity of the set TYPE.  */
2120
2121 tree
2122 build_minus_one_cst (tree type)
2123 {
2124   switch (TREE_CODE (type))
2125     {
2126     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2127     case POINTER_TYPE: case REFERENCE_TYPE:
2128     case OFFSET_TYPE:
2129       return build_int_cst (type, -1);
2130
2131     case REAL_TYPE:
2132       return build_real (type, dconstm1);
2133
2134     case FIXED_POINT_TYPE:
2135       /* We can only generate 1 for accum types.  */
2136       gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2137       return build_fixed (type, fixed_from_double_int (double_int_minus_one,
2138                                                        TYPE_MODE (type)));
2139
2140     case VECTOR_TYPE:
2141       {
2142         tree scalar = build_minus_one_cst (TREE_TYPE (type));
2143
2144         return build_vector_from_val (type, scalar);
2145       }
2146
2147     case COMPLEX_TYPE:
2148       return build_complex (type,
2149                             build_minus_one_cst (TREE_TYPE (type)),
2150                             build_zero_cst (TREE_TYPE (type)));
2151
2152     default:
2153       gcc_unreachable ();
2154     }
2155 }
2156
2157 /* Build 0 constant of type TYPE.  This is used by constructor folding
2158    and thus the constant should be represented in memory by
2159    zero(es).  */
2160
2161 tree
2162 build_zero_cst (tree type)
2163 {
2164   switch (TREE_CODE (type))
2165     {
2166     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2167     case POINTER_TYPE: case REFERENCE_TYPE:
2168     case OFFSET_TYPE: case NULLPTR_TYPE:
2169       return build_int_cst (type, 0);
2170
2171     case REAL_TYPE:
2172       return build_real (type, dconst0);
2173
2174     case FIXED_POINT_TYPE:
2175       return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2176
2177     case VECTOR_TYPE:
2178       {
2179         tree scalar = build_zero_cst (TREE_TYPE (type));
2180
2181         return build_vector_from_val (type, scalar);
2182       }
2183
2184     case COMPLEX_TYPE:
2185       {
2186         tree zero = build_zero_cst (TREE_TYPE (type));
2187
2188         return build_complex (type, zero, zero);
2189       }
2190
2191     default:
2192       if (!AGGREGATE_TYPE_P (type))
2193         return fold_convert (type, integer_zero_node);
2194       return build_constructor (type, NULL);
2195     }
2196 }
2197
2198
2199 /* Build a BINFO with LEN language slots.  */
2200
2201 tree
2202 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
2203 {
2204   tree t;
2205   size_t length = (offsetof (struct tree_binfo, base_binfos)
2206                    + vec<tree, va_gc>::embedded_size (base_binfos));
2207
2208   record_node_allocation_statistics (TREE_BINFO, length);
2209
2210   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2211
2212   memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2213
2214   TREE_SET_CODE (t, TREE_BINFO);
2215
2216   BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2217
2218   return t;
2219 }
2220
2221 /* Create a CASE_LABEL_EXPR tree node and return it.  */
2222
2223 tree
2224 build_case_label (tree low_value, tree high_value, tree label_decl)
2225 {
2226   tree t = make_node (CASE_LABEL_EXPR);
2227
2228   TREE_TYPE (t) = void_type_node;
2229   SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2230
2231   CASE_LOW (t) = low_value;
2232   CASE_HIGH (t) = high_value;
2233   CASE_LABEL (t) = label_decl;
2234   CASE_CHAIN (t) = NULL_TREE;
2235
2236   return t;
2237 }
2238
2239 /* Build a newly constructed INTEGER_CST node.  LEN and EXT_LEN are the
2240    values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2241    The latter determines the length of the HOST_WIDE_INT vector.  */
2242
2243 tree
2244 make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
2245 {
2246   tree t;
2247   int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2248                 + sizeof (struct tree_int_cst));
2249
2250   gcc_assert (len);
2251   record_node_allocation_statistics (INTEGER_CST, length);
2252
2253   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2254
2255   TREE_SET_CODE (t, INTEGER_CST);
2256   TREE_INT_CST_NUNITS (t) = len;
2257   TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2258   /* to_offset can only be applied to trees that are offset_int-sized
2259      or smaller.  EXT_LEN is correct if it fits, otherwise the constant
2260      must be exactly the precision of offset_int and so LEN is correct.  */
2261   if (ext_len <= OFFSET_INT_ELTS)
2262     TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2263   else
2264     TREE_INT_CST_OFFSET_NUNITS (t) = len;
2265
2266   TREE_CONSTANT (t) = 1;
2267
2268   return t;
2269 }
2270
2271 /* Build a newly constructed TREE_VEC node of length LEN.  */
2272
2273 tree
2274 make_tree_vec_stat (int len MEM_STAT_DECL)
2275 {
2276   tree t;
2277   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2278
2279   record_node_allocation_statistics (TREE_VEC, length);
2280
2281   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2282
2283   TREE_SET_CODE (t, TREE_VEC);
2284   TREE_VEC_LENGTH (t) = len;
2285
2286   return t;
2287 }
2288
2289 /* Grow a TREE_VEC node to new length LEN.  */
2290
2291 tree
2292 grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
2293 {
2294   gcc_assert (TREE_CODE (v) == TREE_VEC);
2295
2296   int oldlen = TREE_VEC_LENGTH (v);
2297   gcc_assert (len > oldlen);
2298
2299   int oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2300   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2301
2302   record_node_allocation_statistics (TREE_VEC, length - oldlength);
2303
2304   v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2305
2306   TREE_VEC_LENGTH (v) = len;
2307
2308   return v;
2309 }
2310 \f
2311 /* Return 1 if EXPR is the constant zero, whether it is integral, float or
2312    fixed, and scalar, complex or vector.  */
2313
2314 int
2315 zerop (const_tree expr)
2316 {
2317   return (integer_zerop (expr)
2318           || real_zerop (expr)
2319           || fixed_zerop (expr));
2320 }
2321
2322 /* Return 1 if EXPR is the integer constant zero or a complex constant
2323    of zero.  */
2324
2325 int
2326 integer_zerop (const_tree expr)
2327 {
2328   switch (TREE_CODE (expr))
2329     {
2330     case INTEGER_CST:
2331       return wi::eq_p (expr, 0);
2332     case COMPLEX_CST:
2333       return (integer_zerop (TREE_REALPART (expr))
2334               && integer_zerop (TREE_IMAGPART (expr)));
2335     case VECTOR_CST:
2336       {
2337         unsigned i;
2338         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2339           if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
2340             return false;
2341         return true;
2342       }
2343     default:
2344       return false;
2345     }
2346 }
2347
2348 /* Return 1 if EXPR is the integer constant one or the corresponding
2349    complex constant.  */
2350
2351 int
2352 integer_onep (const_tree expr)
2353 {
2354   switch (TREE_CODE (expr))
2355     {
2356     case INTEGER_CST:
2357       return wi::eq_p (wi::to_widest (expr), 1);
2358     case COMPLEX_CST:
2359       return (integer_onep (TREE_REALPART (expr))
2360               && integer_zerop (TREE_IMAGPART (expr)));
2361     case VECTOR_CST:
2362       {
2363         unsigned i;
2364         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2365           if (!integer_onep (VECTOR_CST_ELT (expr, i)))
2366             return false;
2367         return true;
2368       }
2369     default:
2370       return false;
2371     }
2372 }
2373
2374 /* Return 1 if EXPR is the integer constant one.  For complex and vector,
2375    return 1 if every piece is the integer constant one.  */
2376
2377 int
2378 integer_each_onep (const_tree expr)
2379 {
2380   if (TREE_CODE (expr) == COMPLEX_CST)
2381     return (integer_onep (TREE_REALPART (expr))
2382             && integer_onep (TREE_IMAGPART (expr)));
2383   else
2384     return integer_onep (expr);
2385 }
2386
2387 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2388    it contains, or a complex or vector whose subparts are such integers.  */
2389
2390 int
2391 integer_all_onesp (const_tree expr)
2392 {
2393   if (TREE_CODE (expr) == COMPLEX_CST
2394       && integer_all_onesp (TREE_REALPART (expr))
2395       && integer_all_onesp (TREE_IMAGPART (expr)))
2396     return 1;
2397
2398   else if (TREE_CODE (expr) == VECTOR_CST)
2399     {
2400       unsigned i;
2401       for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2402         if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2403           return 0;
2404       return 1;
2405     }
2406
2407   else if (TREE_CODE (expr) != INTEGER_CST)
2408     return 0;
2409
2410   return wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED) == expr;
2411 }
2412
2413 /* Return 1 if EXPR is the integer constant minus one.  */
2414
2415 int
2416 integer_minus_onep (const_tree expr)
2417 {
2418   if (TREE_CODE (expr) == COMPLEX_CST)
2419     return (integer_all_onesp (TREE_REALPART (expr))
2420             && integer_zerop (TREE_IMAGPART (expr)));
2421   else
2422     return integer_all_onesp (expr);
2423 }
2424
2425 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2426    one bit on).  */
2427
2428 int
2429 integer_pow2p (const_tree expr)
2430 {
2431   if (TREE_CODE (expr) == COMPLEX_CST
2432       && integer_pow2p (TREE_REALPART (expr))
2433       && integer_zerop (TREE_IMAGPART (expr)))
2434     return 1;
2435
2436   if (TREE_CODE (expr) != INTEGER_CST)
2437     return 0;
2438
2439   return wi::popcount (expr) == 1;
2440 }
2441
2442 /* Return 1 if EXPR is an integer constant other than zero or a
2443    complex constant other than zero.  */
2444
2445 int
2446 integer_nonzerop (const_tree expr)
2447 {
2448   return ((TREE_CODE (expr) == INTEGER_CST
2449            && !wi::eq_p (expr, 0))
2450           || (TREE_CODE (expr) == COMPLEX_CST
2451               && (integer_nonzerop (TREE_REALPART (expr))
2452                   || integer_nonzerop (TREE_IMAGPART (expr)))));
2453 }
2454
2455 /* Return 1 if EXPR is the integer constant one.  For vector,
2456    return 1 if every piece is the integer constant minus one
2457    (representing the value TRUE).  */
2458
2459 int
2460 integer_truep (const_tree expr)
2461 {
2462   if (TREE_CODE (expr) == VECTOR_CST)
2463     return integer_all_onesp (expr);
2464   return integer_onep (expr);
2465 }
2466
2467 /* Return 1 if EXPR is the fixed-point constant zero.  */
2468
2469 int
2470 fixed_zerop (const_tree expr)
2471 {
2472   return (TREE_CODE (expr) == FIXED_CST
2473           && TREE_FIXED_CST (expr).data.is_zero ());
2474 }
2475
2476 /* Return the power of two represented by a tree node known to be a
2477    power of two.  */
2478
2479 int
2480 tree_log2 (const_tree expr)
2481 {
2482   if (TREE_CODE (expr) == COMPLEX_CST)
2483     return tree_log2 (TREE_REALPART (expr));
2484
2485   return wi::exact_log2 (expr);
2486 }
2487
2488 /* Similar, but return the largest integer Y such that 2 ** Y is less
2489    than or equal to EXPR.  */
2490
2491 int
2492 tree_floor_log2 (const_tree expr)
2493 {
2494   if (TREE_CODE (expr) == COMPLEX_CST)
2495     return tree_log2 (TREE_REALPART (expr));
2496
2497   return wi::floor_log2 (expr);
2498 }
2499
2500 /* Return number of known trailing zero bits in EXPR, or, if the value of
2501    EXPR is known to be zero, the precision of it's type.  */
2502
2503 unsigned int
2504 tree_ctz (const_tree expr)
2505 {
2506   if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2507       && !POINTER_TYPE_P (TREE_TYPE (expr)))
2508     return 0;
2509
2510   unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2511   switch (TREE_CODE (expr))
2512     {
2513     case INTEGER_CST:
2514       ret1 = wi::ctz (expr);
2515       return MIN (ret1, prec);
2516     case SSA_NAME:
2517       ret1 = wi::ctz (get_nonzero_bits (expr));
2518       return MIN (ret1, prec);
2519     case PLUS_EXPR:
2520     case MINUS_EXPR:
2521     case BIT_IOR_EXPR:
2522     case BIT_XOR_EXPR:
2523     case MIN_EXPR:
2524     case MAX_EXPR:
2525       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2526       if (ret1 == 0)
2527         return ret1;
2528       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2529       return MIN (ret1, ret2);
2530     case POINTER_PLUS_EXPR:
2531       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2532       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2533       /* Second operand is sizetype, which could be in theory
2534          wider than pointer's precision.  Make sure we never
2535          return more than prec.  */
2536       ret2 = MIN (ret2, prec);
2537       return MIN (ret1, ret2);
2538     case BIT_AND_EXPR:
2539       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2540       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2541       return MAX (ret1, ret2);
2542     case MULT_EXPR:
2543       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2544       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2545       return MIN (ret1 + ret2, prec);
2546     case LSHIFT_EXPR:
2547       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2548       if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2549           && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2550         {
2551           ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2552           return MIN (ret1 + ret2, prec);
2553         }
2554       return ret1;
2555     case RSHIFT_EXPR:
2556       if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2557           && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2558         {
2559           ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2560           ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2561           if (ret1 > ret2)
2562             return ret1 - ret2;
2563         }
2564       return 0;
2565     case TRUNC_DIV_EXPR:
2566     case CEIL_DIV_EXPR:
2567     case FLOOR_DIV_EXPR:
2568     case ROUND_DIV_EXPR:
2569     case EXACT_DIV_EXPR:
2570       if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2571           && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2572         {
2573           int l = tree_log2 (TREE_OPERAND (expr, 1));
2574           if (l >= 0)
2575             {
2576               ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2577               ret2 = l;
2578               if (ret1 > ret2)
2579                 return ret1 - ret2;
2580             }
2581         }
2582       return 0;
2583     CASE_CONVERT:
2584       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2585       if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2586         ret1 = prec;
2587       return MIN (ret1, prec);
2588     case SAVE_EXPR:
2589       return tree_ctz (TREE_OPERAND (expr, 0));
2590     case COND_EXPR:
2591       ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2592       if (ret1 == 0)
2593         return 0;
2594       ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2595       return MIN (ret1, ret2);
2596     case COMPOUND_EXPR:
2597       return tree_ctz (TREE_OPERAND (expr, 1));
2598     case ADDR_EXPR:
2599       ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2600       if (ret1 > BITS_PER_UNIT)
2601         {
2602           ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2603           return MIN (ret1, prec);
2604         }
2605       return 0;
2606     default:
2607       return 0;
2608     }
2609 }
2610
2611 /* Return 1 if EXPR is the real constant zero.  Trailing zeroes matter for
2612    decimal float constants, so don't return 1 for them.  */
2613
2614 int
2615 real_zerop (const_tree expr)
2616 {
2617   switch (TREE_CODE (expr))
2618     {
2619     case REAL_CST:
2620       return real_equal (&TREE_REAL_CST (expr), &dconst0)
2621              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2622     case COMPLEX_CST:
2623       return real_zerop (TREE_REALPART (expr))
2624              && real_zerop (TREE_IMAGPART (expr));
2625     case VECTOR_CST:
2626       {
2627         unsigned i;
2628         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2629           if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2630             return false;
2631         return true;
2632       }
2633     default:
2634       return false;
2635     }
2636 }
2637
2638 /* Return 1 if EXPR is the real constant one in real or complex form.
2639    Trailing zeroes matter for decimal float constants, so don't return
2640    1 for them.  */
2641
2642 int
2643 real_onep (const_tree expr)
2644 {
2645   switch (TREE_CODE (expr))
2646     {
2647     case REAL_CST:
2648       return real_equal (&TREE_REAL_CST (expr), &dconst1)
2649              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2650     case COMPLEX_CST:
2651       return real_onep (TREE_REALPART (expr))
2652              && real_zerop (TREE_IMAGPART (expr));
2653     case VECTOR_CST:
2654       {
2655         unsigned i;
2656         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2657           if (!real_onep (VECTOR_CST_ELT (expr, i)))
2658             return false;
2659         return true;
2660       }
2661     default:
2662       return false;
2663     }
2664 }
2665
2666 /* Return 1 if EXPR is the real constant minus one.  Trailing zeroes
2667    matter for decimal float constants, so don't return 1 for them.  */
2668
2669 int
2670 real_minus_onep (const_tree expr)
2671 {
2672   switch (TREE_CODE (expr))
2673     {
2674     case REAL_CST:
2675       return real_equal (&TREE_REAL_CST (expr), &dconstm1)
2676              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2677     case COMPLEX_CST:
2678       return real_minus_onep (TREE_REALPART (expr))
2679              && real_zerop (TREE_IMAGPART (expr));
2680     case VECTOR_CST:
2681       {
2682         unsigned i;
2683         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2684           if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2685             return false;
2686         return true;
2687       }
2688     default:
2689       return false;
2690     }
2691 }
2692
2693 /* Nonzero if EXP is a constant or a cast of a constant.  */
2694
2695 int
2696 really_constant_p (const_tree exp)
2697 {
2698   /* This is not quite the same as STRIP_NOPS.  It does more.  */
2699   while (CONVERT_EXPR_P (exp)
2700          || TREE_CODE (exp) == NON_LVALUE_EXPR)
2701     exp = TREE_OPERAND (exp, 0);
2702   return TREE_CONSTANT (exp);
2703 }
2704 \f
2705 /* Return first list element whose TREE_VALUE is ELEM.
2706    Return 0 if ELEM is not in LIST.  */
2707
2708 tree
2709 value_member (tree elem, tree list)
2710 {
2711   while (list)
2712     {
2713       if (elem == TREE_VALUE (list))
2714         return list;
2715       list = TREE_CHAIN (list);
2716     }
2717   return NULL_TREE;
2718 }
2719
2720 /* Return first list element whose TREE_PURPOSE is ELEM.
2721    Return 0 if ELEM is not in LIST.  */
2722
2723 tree
2724 purpose_member (const_tree elem, tree list)
2725 {
2726   while (list)
2727     {
2728       if (elem == TREE_PURPOSE (list))
2729         return list;
2730       list = TREE_CHAIN (list);
2731     }
2732   return NULL_TREE;
2733 }
2734
2735 /* Return true if ELEM is in V.  */
2736
2737 bool
2738 vec_member (const_tree elem, vec<tree, va_gc> *v)
2739 {
2740   unsigned ix;
2741   tree t;
2742   FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2743     if (elem == t)
2744       return true;
2745   return false;
2746 }
2747
2748 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2749    NULL_TREE.  */
2750
2751 tree
2752 chain_index (int idx, tree chain)
2753 {
2754   for (; chain && idx > 0; --idx)
2755     chain = TREE_CHAIN (chain);
2756   return chain;
2757 }
2758
2759 /* Return nonzero if ELEM is part of the chain CHAIN.  */
2760
2761 int
2762 chain_member (const_tree elem, const_tree chain)
2763 {
2764   while (chain)
2765     {
2766       if (elem == chain)
2767         return 1;
2768       chain = DECL_CHAIN (chain);
2769     }
2770
2771   return 0;
2772 }
2773
2774 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2775    We expect a null pointer to mark the end of the chain.
2776    This is the Lisp primitive `length'.  */
2777
2778 int
2779 list_length (const_tree t)
2780 {
2781   const_tree p = t;
2782 #ifdef ENABLE_TREE_CHECKING
2783   const_tree q = t;
2784 #endif
2785   int len = 0;
2786
2787   while (p)
2788     {
2789       p = TREE_CHAIN (p);
2790 #ifdef ENABLE_TREE_CHECKING
2791       if (len % 2)
2792         q = TREE_CHAIN (q);
2793       gcc_assert (p != q);
2794 #endif
2795       len++;
2796     }
2797
2798   return len;
2799 }
2800
2801 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2802    UNION_TYPE TYPE, or NULL_TREE if none.  */
2803
2804 tree
2805 first_field (const_tree type)
2806 {
2807   tree t = TYPE_FIELDS (type);
2808   while (t && TREE_CODE (t) != FIELD_DECL)
2809     t = TREE_CHAIN (t);
2810   return t;
2811 }
2812
2813 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2814    by modifying the last node in chain 1 to point to chain 2.
2815    This is the Lisp primitive `nconc'.  */
2816
2817 tree
2818 chainon (tree op1, tree op2)
2819 {
2820   tree t1;
2821
2822   if (!op1)
2823     return op2;
2824   if (!op2)
2825     return op1;
2826
2827   for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2828     continue;
2829   TREE_CHAIN (t1) = op2;
2830
2831 #ifdef ENABLE_TREE_CHECKING
2832   {
2833     tree t2;
2834     for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2835       gcc_assert (t2 != t1);
2836   }
2837 #endif
2838
2839   return op1;
2840 }
2841
2842 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
2843
2844 tree
2845 tree_last (tree chain)
2846 {
2847   tree next;
2848   if (chain)
2849     while ((next = TREE_CHAIN (chain)))
2850       chain = next;
2851   return chain;
2852 }
2853
2854 /* Reverse the order of elements in the chain T,
2855    and return the new head of the chain (old last element).  */
2856
2857 tree
2858 nreverse (tree t)
2859 {
2860   tree prev = 0, decl, next;
2861   for (decl = t; decl; decl = next)
2862     {
2863       /* We shouldn't be using this function to reverse BLOCK chains; we
2864          have blocks_nreverse for that.  */
2865       gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2866       next = TREE_CHAIN (decl);
2867       TREE_CHAIN (decl) = prev;
2868       prev = decl;
2869     }
2870   return prev;
2871 }
2872 \f
2873 /* Return a newly created TREE_LIST node whose
2874    purpose and value fields are PARM and VALUE.  */
2875
2876 tree
2877 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2878 {
2879   tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2880   TREE_PURPOSE (t) = parm;
2881   TREE_VALUE (t) = value;
2882   return t;
2883 }
2884
2885 /* Build a chain of TREE_LIST nodes from a vector.  */
2886
2887 tree
2888 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2889 {
2890   tree ret = NULL_TREE;
2891   tree *pp = &ret;
2892   unsigned int i;
2893   tree t;
2894   FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2895     {
2896       *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2897       pp = &TREE_CHAIN (*pp);
2898     }
2899   return ret;
2900 }
2901
2902 /* Return a newly created TREE_LIST node whose
2903    purpose and value fields are PURPOSE and VALUE
2904    and whose TREE_CHAIN is CHAIN.  */
2905
2906 tree 
2907 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2908 {
2909   tree node;
2910
2911   node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2912   memset (node, 0, sizeof (struct tree_common));
2913
2914   record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2915
2916   TREE_SET_CODE (node, TREE_LIST);
2917   TREE_CHAIN (node) = chain;
2918   TREE_PURPOSE (node) = purpose;
2919   TREE_VALUE (node) = value;
2920   return node;
2921 }
2922
2923 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2924    trees.  */
2925
2926 vec<tree, va_gc> *
2927 ctor_to_vec (tree ctor)
2928 {
2929   vec<tree, va_gc> *vec;
2930   vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2931   unsigned int ix;
2932   tree val;
2933
2934   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2935     vec->quick_push (val);
2936
2937   return vec;
2938 }
2939 \f
2940 /* Return the size nominally occupied by an object of type TYPE
2941    when it resides in memory.  The value is measured in units of bytes,
2942    and its data type is that normally used for type sizes
2943    (which is the first type created by make_signed_type or
2944    make_unsigned_type).  */
2945
2946 tree
2947 size_in_bytes (const_tree type)
2948 {
2949   tree t;
2950
2951   if (type == error_mark_node)
2952     return integer_zero_node;
2953
2954   type = TYPE_MAIN_VARIANT (type);
2955   t = TYPE_SIZE_UNIT (type);
2956
2957   if (t == 0)
2958     {
2959       lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2960       return size_zero_node;
2961     }
2962
2963   return t;
2964 }
2965
2966 /* Return the size of TYPE (in bytes) as a wide integer
2967    or return -1 if the size can vary or is larger than an integer.  */
2968
2969 HOST_WIDE_INT
2970 int_size_in_bytes (const_tree type)
2971 {
2972   tree t;
2973
2974   if (type == error_mark_node)
2975     return 0;
2976
2977   type = TYPE_MAIN_VARIANT (type);
2978   t = TYPE_SIZE_UNIT (type);
2979
2980   if (t && tree_fits_uhwi_p (t))
2981     return TREE_INT_CST_LOW (t);
2982   else
2983     return -1;
2984 }
2985
2986 /* Return the maximum size of TYPE (in bytes) as a wide integer
2987    or return -1 if the size can vary or is larger than an integer.  */
2988
2989 HOST_WIDE_INT
2990 max_int_size_in_bytes (const_tree type)
2991 {
2992   HOST_WIDE_INT size = -1;
2993   tree size_tree;
2994
2995   /* If this is an array type, check for a possible MAX_SIZE attached.  */
2996
2997   if (TREE_CODE (type) == ARRAY_TYPE)
2998     {
2999       size_tree = TYPE_ARRAY_MAX_SIZE (type);
3000
3001       if (size_tree && tree_fits_uhwi_p (size_tree))
3002         size = tree_to_uhwi (size_tree);
3003     }
3004
3005   /* If we still haven't been able to get a size, see if the language
3006      can compute a maximum size.  */
3007
3008   if (size == -1)
3009     {
3010       size_tree = lang_hooks.types.max_size (type);
3011
3012       if (size_tree && tree_fits_uhwi_p (size_tree))
3013         size = tree_to_uhwi (size_tree);
3014     }
3015
3016   return size;
3017 }
3018 \f
3019 /* Return the bit position of FIELD, in bits from the start of the record.
3020    This is a tree of type bitsizetype.  */
3021
3022 tree
3023 bit_position (const_tree field)
3024 {
3025   return bit_from_pos (DECL_FIELD_OFFSET (field),
3026                        DECL_FIELD_BIT_OFFSET (field));
3027 }
3028 \f
3029 /* Return the byte position of FIELD, in bytes from the start of the record.
3030    This is a tree of type sizetype.  */
3031
3032 tree
3033 byte_position (const_tree field)
3034 {
3035   return byte_from_pos (DECL_FIELD_OFFSET (field),
3036                         DECL_FIELD_BIT_OFFSET (field));
3037 }
3038
3039 /* Likewise, but return as an integer.  It must be representable in
3040    that way (since it could be a signed value, we don't have the
3041    option of returning -1 like int_size_in_byte can.  */
3042
3043 HOST_WIDE_INT
3044 int_byte_position (const_tree field)
3045 {
3046   return tree_to_shwi (byte_position (field));
3047 }
3048 \f
3049 /* Return the strictest alignment, in bits, that T is known to have.  */
3050
3051 unsigned int
3052 expr_align (const_tree t)
3053 {
3054   unsigned int align0, align1;
3055
3056   switch (TREE_CODE (t))
3057     {
3058     CASE_CONVERT:  case NON_LVALUE_EXPR:
3059       /* If we have conversions, we know that the alignment of the
3060          object must meet each of the alignments of the types.  */
3061       align0 = expr_align (TREE_OPERAND (t, 0));
3062       align1 = TYPE_ALIGN (TREE_TYPE (t));
3063       return MAX (align0, align1);
3064
3065     case SAVE_EXPR:         case COMPOUND_EXPR:       case MODIFY_EXPR:
3066     case INIT_EXPR:         case TARGET_EXPR:         case WITH_CLEANUP_EXPR:
3067     case CLEANUP_POINT_EXPR:
3068       /* These don't change the alignment of an object.  */
3069       return expr_align (TREE_OPERAND (t, 0));
3070
3071     case COND_EXPR:
3072       /* The best we can do is say that the alignment is the least aligned
3073          of the two arms.  */
3074       align0 = expr_align (TREE_OPERAND (t, 1));
3075       align1 = expr_align (TREE_OPERAND (t, 2));
3076       return MIN (align0, align1);
3077
3078       /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
3079          meaningfully, it's always 1.  */
3080     case LABEL_DECL:     case CONST_DECL:
3081     case VAR_DECL:       case PARM_DECL:   case RESULT_DECL:
3082     case FUNCTION_DECL:
3083       gcc_assert (DECL_ALIGN (t) != 0);
3084       return DECL_ALIGN (t);
3085
3086     default:
3087       break;
3088     }
3089
3090   /* Otherwise take the alignment from that of the type.  */
3091   return TYPE_ALIGN (TREE_TYPE (t));
3092 }
3093 \f
3094 /* Return, as a tree node, the number of elements for TYPE (which is an
3095    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
3096
3097 tree
3098 array_type_nelts (const_tree type)
3099 {
3100   tree index_type, min, max;
3101
3102   /* If they did it with unspecified bounds, then we should have already
3103      given an error about it before we got here.  */
3104   if (! TYPE_DOMAIN (type))
3105     return error_mark_node;
3106
3107   index_type = TYPE_DOMAIN (type);
3108   min = TYPE_MIN_VALUE (index_type);
3109   max = TYPE_MAX_VALUE (index_type);
3110
3111   /* TYPE_MAX_VALUE may not be set if the array has unknown length.  */
3112   if (!max)
3113     return error_mark_node;
3114
3115   return (integer_zerop (min)
3116           ? max
3117           : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3118 }
3119 \f
3120 /* If arg is static -- a reference to an object in static storage -- then
3121    return the object.  This is not the same as the C meaning of `static'.
3122    If arg isn't static, return NULL.  */
3123
3124 tree
3125 staticp (tree arg)
3126 {
3127   switch (TREE_CODE (arg))
3128     {
3129     case FUNCTION_DECL:
3130       /* Nested functions are static, even though taking their address will
3131          involve a trampoline as we unnest the nested function and create
3132          the trampoline on the tree level.  */
3133       return arg;
3134
3135     case VAR_DECL:
3136       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3137               && ! DECL_THREAD_LOCAL_P (arg)
3138               && ! DECL_DLLIMPORT_P (arg)
3139               ? arg : NULL);
3140
3141     case CONST_DECL:
3142       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3143               ? arg : NULL);
3144
3145     case CONSTRUCTOR:
3146       return TREE_STATIC (arg) ? arg : NULL;
3147
3148     case LABEL_DECL:
3149     case STRING_CST:
3150       return arg;
3151
3152     case COMPONENT_REF:
3153       /* If the thing being referenced is not a field, then it is
3154          something language specific.  */
3155       gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3156
3157       /* If we are referencing a bitfield, we can't evaluate an
3158          ADDR_EXPR at compile time and so it isn't a constant.  */
3159       if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3160         return NULL;
3161
3162       return staticp (TREE_OPERAND (arg, 0));
3163
3164     case BIT_FIELD_REF:
3165       return NULL;
3166
3167     case INDIRECT_REF:
3168       return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3169
3170     case ARRAY_REF:
3171     case ARRAY_RANGE_REF:
3172       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3173           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3174         return staticp (TREE_OPERAND (arg, 0));
3175       else
3176         return NULL;
3177
3178     case COMPOUND_LITERAL_EXPR:
3179       return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3180
3181     default:
3182       return NULL;
3183     }
3184 }
3185
3186 \f
3187
3188
3189 /* Return whether OP is a DECL whose address is function-invariant.  */
3190
3191 bool
3192 decl_address_invariant_p (const_tree op)
3193 {
3194   /* The conditions below are slightly less strict than the one in
3195      staticp.  */
3196
3197   switch (TREE_CODE (op))
3198     {
3199     case PARM_DECL:
3200     case RESULT_DECL:
3201     case LABEL_DECL:
3202     case FUNCTION_DECL:
3203       return true;
3204
3205     case VAR_DECL:
3206       if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3207           || DECL_THREAD_LOCAL_P (op)
3208           || DECL_CONTEXT (op) == current_function_decl
3209           || decl_function_context (op) == current_function_decl)
3210         return true;
3211       break;
3212
3213     case CONST_DECL:
3214       if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3215           || decl_function_context (op) == current_function_decl)
3216         return true;
3217       break;
3218
3219     default:
3220       break;
3221     }
3222
3223   return false;
3224 }
3225
3226 /* Return whether OP is a DECL whose address is interprocedural-invariant.  */
3227
3228 bool
3229 decl_address_ip_invariant_p (const_tree op)
3230 {
3231   /* The conditions below are slightly less strict than the one in
3232      staticp.  */
3233
3234   switch (TREE_CODE (op))
3235     {
3236     case LABEL_DECL:
3237     case FUNCTION_DECL:
3238     case STRING_CST:
3239       return true;
3240
3241     case VAR_DECL:
3242       if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3243            && !DECL_DLLIMPORT_P (op))
3244           || DECL_THREAD_LOCAL_P (op))
3245         return true;
3246       break;
3247
3248     case CONST_DECL:
3249       if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3250         return true;
3251       break;
3252
3253     default:
3254       break;
3255     }
3256
3257   return false;
3258 }
3259
3260
3261 /* Return true if T is function-invariant (internal function, does
3262    not handle arithmetic; that's handled in skip_simple_arithmetic and
3263    tree_invariant_p).  */
3264
3265 static bool
3266 tree_invariant_p_1 (tree t)
3267 {
3268   tree op;
3269
3270   if (TREE_CONSTANT (t)
3271       || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3272     return true;
3273
3274   switch (TREE_CODE (t))
3275     {
3276     case SAVE_EXPR:
3277       return true;
3278
3279     case ADDR_EXPR:
3280       op = TREE_OPERAND (t, 0);
3281       while (handled_component_p (op))
3282         {
3283           switch (TREE_CODE (op))
3284             {
3285             case ARRAY_REF:
3286             case ARRAY_RANGE_REF:
3287               if (!tree_invariant_p (TREE_OPERAND (op, 1))
3288                   || TREE_OPERAND (op, 2) != NULL_TREE
3289                   || TREE_OPERAND (op, 3) != NULL_TREE)
3290                 return false;
3291               break;
3292
3293             case COMPONENT_REF:
3294               if (TREE_OPERAND (op, 2) != NULL_TREE)
3295                 return false;
3296               break;
3297
3298             default:;
3299             }
3300           op = TREE_OPERAND (op, 0);
3301         }
3302
3303       return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3304
3305     default:
3306       break;
3307     }
3308
3309   return false;
3310 }
3311
3312 /* Return true if T is function-invariant.  */
3313
3314 bool
3315 tree_invariant_p (tree t)
3316 {
3317   tree inner = skip_simple_arithmetic (t);
3318   return tree_invariant_p_1 (inner);
3319 }
3320
3321 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3322    Do this to any expression which may be used in more than one place,
3323    but must be evaluated only once.
3324
3325    Normally, expand_expr would reevaluate the expression each time.
3326    Calling save_expr produces something that is evaluated and recorded
3327    the first time expand_expr is called on it.  Subsequent calls to
3328    expand_expr just reuse the recorded value.
3329
3330    The call to expand_expr that generates code that actually computes
3331    the value is the first call *at compile time*.  Subsequent calls
3332    *at compile time* generate code to use the saved value.
3333    This produces correct result provided that *at run time* control
3334    always flows through the insns made by the first expand_expr
3335    before reaching the other places where the save_expr was evaluated.
3336    You, the caller of save_expr, must make sure this is so.
3337
3338    Constants, and certain read-only nodes, are returned with no
3339    SAVE_EXPR because that is safe.  Expressions containing placeholders
3340    are not touched; see tree.def for an explanation of what these
3341    are used for.  */
3342
3343 tree
3344 save_expr (tree expr)
3345 {
3346   tree t = fold (expr);
3347   tree inner;
3348
3349   /* If the tree evaluates to a constant, then we don't want to hide that
3350      fact (i.e. this allows further folding, and direct checks for constants).
3351      However, a read-only object that has side effects cannot be bypassed.
3352      Since it is no problem to reevaluate literals, we just return the
3353      literal node.  */
3354   inner = skip_simple_arithmetic (t);
3355   if (TREE_CODE (inner) == ERROR_MARK)
3356     return inner;
3357
3358   if (tree_invariant_p_1 (inner))
3359     return t;
3360
3361   /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3362      it means that the size or offset of some field of an object depends on
3363      the value within another field.
3364
3365      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3366      and some variable since it would then need to be both evaluated once and
3367      evaluated more than once.  Front-ends must assure this case cannot
3368      happen by surrounding any such subexpressions in their own SAVE_EXPR
3369      and forcing evaluation at the proper time.  */
3370   if (contains_placeholder_p (inner))
3371     return t;
3372
3373   t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3374   SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3375
3376   /* This expression might be placed ahead of a jump to ensure that the
3377      value was computed on both sides of the jump.  So make sure it isn't
3378      eliminated as dead.  */
3379   TREE_SIDE_EFFECTS (t) = 1;
3380   return t;
3381 }
3382
3383 /* Look inside EXPR into any simple arithmetic operations.  Return the
3384    outermost non-arithmetic or non-invariant node.  */
3385
3386 tree
3387 skip_simple_arithmetic (tree expr)
3388 {
3389   /* We don't care about whether this can be used as an lvalue in this
3390      context.  */
3391   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3392     expr = TREE_OPERAND (expr, 0);
3393
3394   /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3395      a constant, it will be more efficient to not make another SAVE_EXPR since
3396      it will allow better simplification and GCSE will be able to merge the
3397      computations if they actually occur.  */
3398   while (true)
3399     {
3400       if (UNARY_CLASS_P (expr))
3401         expr = TREE_OPERAND (expr, 0);
3402       else if (BINARY_CLASS_P (expr))
3403         {
3404           if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3405             expr = TREE_OPERAND (expr, 0);
3406           else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3407             expr = TREE_OPERAND (expr, 1);
3408           else
3409             break;
3410         }
3411       else
3412         break;
3413     }
3414
3415   return expr;
3416 }
3417
3418 /* Look inside EXPR into simple arithmetic operations involving constants.
3419    Return the outermost non-arithmetic or non-constant node.  */
3420
3421 tree
3422 skip_simple_constant_arithmetic (tree expr)
3423 {
3424   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3425     expr = TREE_OPERAND (expr, 0);
3426
3427   while (true)
3428     {
3429       if (UNARY_CLASS_P (expr))
3430         expr = TREE_OPERAND (expr, 0);
3431       else if (BINARY_CLASS_P (expr))
3432         {
3433           if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3434             expr = TREE_OPERAND (expr, 0);
3435           else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3436             expr = TREE_OPERAND (expr, 1);
3437           else
3438             break;
3439         }
3440       else
3441         break;
3442     }
3443
3444   return expr;
3445 }
3446
3447 /* Return which tree structure is used by T.  */
3448
3449 enum tree_node_structure_enum
3450 tree_node_structure (const_tree t)
3451 {
3452   const enum tree_code code = TREE_CODE (t);
3453   return tree_node_structure_for_code (code);
3454 }
3455
3456 /* Set various status flags when building a CALL_EXPR object T.  */
3457
3458 static void
3459 process_call_operands (tree t)
3460 {
3461   bool side_effects = TREE_SIDE_EFFECTS (t);
3462   bool read_only = false;
3463   int i = call_expr_flags (t);
3464
3465   /* Calls have side-effects, except those to const or pure functions.  */
3466   if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3467     side_effects = true;
3468   /* Propagate TREE_READONLY of arguments for const functions.  */
3469   if (i & ECF_CONST)
3470     read_only = true;
3471
3472   if (!side_effects || read_only)
3473     for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3474       {
3475         tree op = TREE_OPERAND (t, i);
3476         if (op && TREE_SIDE_EFFECTS (op))
3477           side_effects = true;
3478         if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3479           read_only = false;
3480       }
3481
3482   TREE_SIDE_EFFECTS (t) = side_effects;
3483   TREE_READONLY (t) = read_only;
3484 }
3485 \f
3486 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3487    size or offset that depends on a field within a record.  */
3488
3489 bool
3490 contains_placeholder_p (const_tree exp)
3491 {
3492   enum tree_code code;
3493
3494   if (!exp)
3495     return 0;
3496
3497   code = TREE_CODE (exp);
3498   if (code == PLACEHOLDER_EXPR)
3499     return 1;
3500
3501   switch (TREE_CODE_CLASS (code))
3502     {
3503     case tcc_reference:
3504       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3505          position computations since they will be converted into a
3506          WITH_RECORD_EXPR involving the reference, which will assume
3507          here will be valid.  */
3508       return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3509
3510     case tcc_exceptional:
3511       if (code == TREE_LIST)
3512         return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3513                 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3514       break;
3515
3516     case tcc_unary:
3517     case tcc_binary:
3518     case tcc_comparison:
3519     case tcc_expression:
3520       switch (code)
3521         {
3522         case COMPOUND_EXPR:
3523           /* Ignoring the first operand isn't quite right, but works best.  */
3524           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3525
3526         case COND_EXPR:
3527           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3528                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3529                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3530
3531         case SAVE_EXPR:
3532           /* The save_expr function never wraps anything containing
3533              a PLACEHOLDER_EXPR. */
3534           return 0;
3535
3536         default:
3537           break;
3538         }
3539
3540       switch (TREE_CODE_LENGTH (code))
3541         {
3542         case 1:
3543           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3544         case 2:
3545           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3546                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3547         default:
3548           return 0;
3549         }
3550
3551     case tcc_vl_exp:
3552       switch (code)
3553         {
3554         case CALL_EXPR:
3555           {
3556             const_tree arg;
3557             const_call_expr_arg_iterator iter;
3558             FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3559               if (CONTAINS_PLACEHOLDER_P (arg))
3560                 return 1;
3561             return 0;
3562           }
3563         default:
3564           return 0;
3565         }
3566
3567     default:
3568       return 0;
3569     }
3570   return 0;
3571 }
3572
3573 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3574    directly.  This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3575    field positions.  */
3576
3577 static bool
3578 type_contains_placeholder_1 (const_tree type)
3579 {
3580   /* If the size contains a placeholder or the parent type (component type in
3581      the case of arrays) type involves a placeholder, this type does.  */
3582   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3583       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3584       || (!POINTER_TYPE_P (type)
3585           && TREE_TYPE (type)
3586           && type_contains_placeholder_p (TREE_TYPE (type))))
3587     return true;
3588
3589   /* Now do type-specific checks.  Note that the last part of the check above
3590      greatly limits what we have to do below.  */
3591   switch (TREE_CODE (type))
3592     {
3593     case VOID_TYPE:
3594     case POINTER_BOUNDS_TYPE:
3595     case COMPLEX_TYPE:
3596     case ENUMERAL_TYPE:
3597     case BOOLEAN_TYPE:
3598     case POINTER_TYPE:
3599     case OFFSET_TYPE:
3600     case REFERENCE_TYPE:
3601     case METHOD_TYPE:
3602     case FUNCTION_TYPE:
3603     case VECTOR_TYPE:
3604     case NULLPTR_TYPE:
3605       return false;
3606
3607     case INTEGER_TYPE:
3608     case REAL_TYPE:
3609     case FIXED_POINT_TYPE:
3610       /* Here we just check the bounds.  */
3611       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3612               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3613
3614     case ARRAY_TYPE:
3615       /* We have already checked the component type above, so just check
3616          the domain type.  Flexible array members have a null domain.  */
3617       return TYPE_DOMAIN (type) ?
3618         type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3619
3620     case RECORD_TYPE:
3621     case UNION_TYPE:
3622     case QUAL_UNION_TYPE:
3623       {
3624         tree field;
3625
3626         for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3627           if (TREE_CODE (field) == FIELD_DECL
3628               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3629                   || (TREE_CODE (type) == QUAL_UNION_TYPE
3630                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3631                   || type_contains_placeholder_p (TREE_TYPE (field))))
3632             return true;
3633
3634         return false;
3635       }
3636
3637     default:
3638       gcc_unreachable ();
3639     }
3640 }
3641
3642 /* Wrapper around above function used to cache its result.  */
3643
3644 bool
3645 type_contains_placeholder_p (tree type)
3646 {
3647   bool result;
3648
3649   /* If the contains_placeholder_bits field has been initialized,
3650      then we know the answer.  */
3651   if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3652     return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3653
3654   /* Indicate that we've seen this type node, and the answer is false.
3655      This is what we want to return if we run into recursion via fields.  */
3656   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3657
3658   /* Compute the real value.  */
3659   result = type_contains_placeholder_1 (type);
3660
3661   /* Store the real value.  */
3662   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3663
3664   return result;
3665 }
3666 \f
3667 /* Push tree EXP onto vector QUEUE if it is not already present.  */
3668
3669 static void
3670 push_without_duplicates (tree exp, vec<tree> *queue)
3671 {
3672   unsigned int i;
3673   tree iter;
3674
3675   FOR_EACH_VEC_ELT (*queue, i, iter)
3676     if (simple_cst_equal (iter, exp) == 1)
3677       break;
3678
3679   if (!iter)
3680     queue->safe_push (exp);
3681 }
3682
3683 /* Given a tree EXP, find all occurrences of references to fields
3684    in a PLACEHOLDER_EXPR and place them in vector REFS without
3685    duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
3686    we assume here that EXP contains only arithmetic expressions
3687    or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3688    argument list.  */
3689
3690 void
3691 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3692 {
3693   enum tree_code code = TREE_CODE (exp);
3694   tree inner;
3695   int i;
3696
3697   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3698   if (code == TREE_LIST)
3699     {
3700       FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3701       FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3702     }
3703   else if (code == COMPONENT_REF)
3704     {
3705       for (inner = TREE_OPERAND (exp, 0);
3706            REFERENCE_CLASS_P (inner);
3707            inner = TREE_OPERAND (inner, 0))
3708         ;
3709
3710       if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3711         push_without_duplicates (exp, refs);
3712       else
3713         FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3714    }
3715   else
3716     switch (TREE_CODE_CLASS (code))
3717       {
3718       case tcc_constant:
3719         break;
3720
3721       case tcc_declaration:
3722         /* Variables allocated to static storage can stay.  */
3723         if (!TREE_STATIC (exp))
3724           push_without_duplicates (exp, refs);
3725         break;
3726
3727       case tcc_expression:
3728         /* This is the pattern built in ada/make_aligning_type.  */
3729         if (code == ADDR_EXPR
3730             && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3731           {
3732             push_without_duplicates (exp, refs);
3733             break;
3734           }
3735
3736         /* Fall through...  */
3737
3738       case tcc_exceptional:
3739       case tcc_unary:
3740       case tcc_binary:
3741       case tcc_comparison:
3742       case tcc_reference:
3743         for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3744           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3745         break;
3746
3747       case tcc_vl_exp:
3748         for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3749           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3750         break;
3751
3752       default:
3753         gcc_unreachable ();
3754       }
3755 }
3756
3757 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3758    return a tree with all occurrences of references to F in a
3759    PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
3760    CONST_DECLs.  Note that we assume here that EXP contains only
3761    arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3762    occurring only in their argument list.  */
3763
3764 tree
3765 substitute_in_expr (tree exp, tree f, tree r)
3766 {
3767   enum tree_code code = TREE_CODE (exp);
3768   tree op0, op1, op2, op3;
3769   tree new_tree;
3770
3771   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3772   if (code == TREE_LIST)
3773     {
3774       op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3775       op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3776       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3777         return exp;
3778
3779       return tree_cons (TREE_PURPOSE (exp), op1, op0);
3780     }
3781   else if (code == COMPONENT_REF)
3782     {
3783       tree inner;
3784
3785       /* If this expression is getting a value from a PLACEHOLDER_EXPR
3786          and it is the right field, replace it with R.  */
3787       for (inner = TREE_OPERAND (exp, 0);
3788            REFERENCE_CLASS_P (inner);
3789            inner = TREE_OPERAND (inner, 0))
3790         ;
3791
3792       /* The field.  */
3793       op1 = TREE_OPERAND (exp, 1);
3794
3795       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3796         return r;
3797
3798       /* If this expression hasn't been completed let, leave it alone.  */
3799       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3800         return exp;
3801
3802       op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3803       if (op0 == TREE_OPERAND (exp, 0))
3804         return exp;
3805
3806       new_tree
3807         = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3808    }
3809   else
3810     switch (TREE_CODE_CLASS (code))
3811       {
3812       case tcc_constant:
3813         return exp;
3814
3815       case tcc_declaration:
3816         if (exp == f)
3817           return r;
3818         else
3819           return exp;
3820
3821       case tcc_expression:
3822         if (exp == f)
3823           return r;
3824
3825         /* Fall through...  */
3826
3827       case tcc_exceptional:
3828       case tcc_unary:
3829       case tcc_binary:
3830       case tcc_comparison:
3831       case tcc_reference:
3832         switch (TREE_CODE_LENGTH (code))
3833           {
3834           case 0:
3835             return exp;
3836
3837           case 1:
3838             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3839             if (op0 == TREE_OPERAND (exp, 0))
3840               return exp;
3841
3842             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3843             break;
3844
3845           case 2:
3846             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3847             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3848
3849             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3850               return exp;
3851
3852             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3853             break;
3854
3855           case 3:
3856             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3857             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3858             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3859
3860             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3861                 && op2 == TREE_OPERAND (exp, 2))
3862               return exp;
3863
3864             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3865             break;
3866
3867           case 4:
3868             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3869             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3870             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3871             op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3872
3873             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3874                 && op2 == TREE_OPERAND (exp, 2)
3875                 && op3 == TREE_OPERAND (exp, 3))
3876               return exp;
3877
3878             new_tree
3879               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3880             break;
3881
3882           default:
3883             gcc_unreachable ();
3884           }
3885         break;
3886
3887       case tcc_vl_exp:
3888         {
3889           int i;
3890
3891           new_tree = NULL_TREE;
3892
3893           /* If we are trying to replace F with a constant, inline back
3894              functions which do nothing else than computing a value from
3895              the arguments they are passed.  This makes it possible to
3896              fold partially or entirely the replacement expression.  */
3897           if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3898             {
3899               tree t = maybe_inline_call_in_expr (exp);
3900               if (t)
3901                 return SUBSTITUTE_IN_EXPR (t, f, r);
3902             }
3903
3904           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3905             {
3906               tree op = TREE_OPERAND (exp, i);
3907               tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3908               if (new_op != op)
3909                 {
3910                   if (!new_tree)
3911                     new_tree = copy_node (exp);
3912                   TREE_OPERAND (new_tree, i) = new_op;
3913                 }
3914             }
3915
3916           if (new_tree)
3917             {
3918               new_tree = fold (new_tree);
3919               if (TREE_CODE (new_tree) == CALL_EXPR)
3920                 process_call_operands (new_tree);
3921             }
3922           else
3923             return exp;
3924         }
3925         break;
3926
3927       default:
3928         gcc_unreachable ();
3929       }
3930
3931   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3932
3933   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3934     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3935
3936   return new_tree;
3937 }
3938
3939 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3940    for it within OBJ, a tree that is an object or a chain of references.  */
3941
3942 tree
3943 substitute_placeholder_in_expr (tree exp, tree obj)
3944 {
3945   enum tree_code code = TREE_CODE (exp);
3946   tree op0, op1, op2, op3;
3947   tree new_tree;
3948
3949   /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3950      in the chain of OBJ.  */
3951   if (code == PLACEHOLDER_EXPR)
3952     {
3953       tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3954       tree elt;
3955
3956       for (elt = obj; elt != 0;
3957            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3958                    || TREE_CODE (elt) == COND_EXPR)
3959                   ? TREE_OPERAND (elt, 1)
3960                   : (REFERENCE_CLASS_P (elt)
3961                      || UNARY_CLASS_P (elt)
3962                      || BINARY_CLASS_P (elt)
3963                      || VL_EXP_CLASS_P (elt)
3964                      || EXPRESSION_CLASS_P (elt))
3965                   ? TREE_OPERAND (elt, 0) : 0))
3966         if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3967           return elt;
3968
3969       for (elt = obj; elt != 0;
3970            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3971                    || TREE_CODE (elt) == COND_EXPR)
3972                   ? TREE_OPERAND (elt, 1)
3973                   : (REFERENCE_CLASS_P (elt)
3974                      || UNARY_CLASS_P (elt)
3975                      || BINARY_CLASS_P (elt)
3976                      || VL_EXP_CLASS_P (elt)
3977                      || EXPRESSION_CLASS_P (elt))
3978                   ? TREE_OPERAND (elt, 0) : 0))
3979         if (POINTER_TYPE_P (TREE_TYPE (elt))
3980             && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3981                 == need_type))
3982           return fold_build1 (INDIRECT_REF, need_type, elt);
3983
3984       /* If we didn't find it, return the original PLACEHOLDER_EXPR.  If it
3985          survives until RTL generation, there will be an error.  */
3986       return exp;
3987     }
3988
3989   /* TREE_LIST is special because we need to look at TREE_VALUE
3990      and TREE_CHAIN, not TREE_OPERANDS.  */
3991   else if (code == TREE_LIST)
3992     {
3993       op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3994       op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3995       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3996         return exp;
3997
3998       return tree_cons (TREE_PURPOSE (exp), op1, op0);
3999     }
4000   else
4001     switch (TREE_CODE_CLASS (code))
4002       {
4003       case tcc_constant:
4004       case tcc_declaration:
4005         return exp;
4006
4007       case tcc_exceptional:
4008       case tcc_unary:
4009       case tcc_binary:
4010       case tcc_comparison:
4011       case tcc_expression:
4012       case tcc_reference:
4013       case tcc_statement:
4014         switch (TREE_CODE_LENGTH (code))
4015           {
4016           case 0:
4017             return exp;
4018
4019           case 1:
4020             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4021             if (op0 == TREE_OPERAND (exp, 0))
4022               return exp;
4023
4024             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4025             break;
4026
4027           case 2:
4028             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4029             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4030
4031             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4032               return exp;
4033
4034             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4035             break;
4036
4037           case 3:
4038             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4039             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4040             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4041
4042             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4043                 && op2 == TREE_OPERAND (exp, 2))
4044               return exp;
4045
4046             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4047             break;
4048
4049           case 4:
4050             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4051             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4052             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4053             op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4054
4055             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4056                 && op2 == TREE_OPERAND (exp, 2)
4057                 && op3 == TREE_OPERAND (exp, 3))
4058               return exp;
4059
4060             new_tree
4061               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4062             break;
4063
4064           default:
4065             gcc_unreachable ();
4066           }
4067         break;
4068
4069       case tcc_vl_exp:
4070         {
4071           int i;
4072
4073           new_tree = NULL_TREE;
4074
4075           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4076             {
4077               tree op = TREE_OPERAND (exp, i);
4078               tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4079               if (new_op != op)
4080                 {
4081                   if (!new_tree)
4082                     new_tree = copy_node (exp);
4083                   TREE_OPERAND (new_tree, i) = new_op;
4084                 }
4085             }
4086
4087           if (new_tree)
4088             {
4089               new_tree = fold (new_tree);
4090               if (TREE_CODE (new_tree) == CALL_EXPR)
4091                 process_call_operands (new_tree);
4092             }
4093           else
4094             return exp;
4095         }
4096         break;
4097
4098       default:
4099         gcc_unreachable ();
4100       }
4101
4102   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4103
4104   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4105     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4106
4107   return new_tree;
4108 }
4109 \f
4110
4111 /* Subroutine of stabilize_reference; this is called for subtrees of
4112    references.  Any expression with side-effects must be put in a SAVE_EXPR
4113    to ensure that it is only evaluated once.
4114
4115    We don't put SAVE_EXPR nodes around everything, because assigning very
4116    simple expressions to temporaries causes us to miss good opportunities
4117    for optimizations.  Among other things, the opportunity to fold in the
4118    addition of a constant into an addressing mode often gets lost, e.g.
4119    "y[i+1] += x;".  In general, we take the approach that we should not make
4120    an assignment unless we are forced into it - i.e., that any non-side effect
4121    operator should be allowed, and that cse should take care of coalescing
4122    multiple utterances of the same expression should that prove fruitful.  */
4123
4124 static tree
4125 stabilize_reference_1 (tree e)
4126 {
4127   tree result;
4128   enum tree_code code = TREE_CODE (e);
4129
4130   /* We cannot ignore const expressions because it might be a reference
4131      to a const array but whose index contains side-effects.  But we can
4132      ignore things that are actual constant or that already have been
4133      handled by this function.  */
4134
4135   if (tree_invariant_p (e))
4136     return e;
4137
4138   switch (TREE_CODE_CLASS (code))
4139     {
4140     case tcc_exceptional:
4141     case tcc_type:
4142     case tcc_declaration:
4143     case tcc_comparison:
4144     case tcc_statement:
4145     case tcc_expression:
4146     case tcc_reference:
4147     case tcc_vl_exp:
4148       /* If the expression has side-effects, then encase it in a SAVE_EXPR
4149          so that it will only be evaluated once.  */
4150       /* The reference (r) and comparison (<) classes could be handled as
4151          below, but it is generally faster to only evaluate them once.  */
4152       if (TREE_SIDE_EFFECTS (e))
4153         return save_expr (e);
4154       return e;
4155
4156     case tcc_constant:
4157       /* Constants need no processing.  In fact, we should never reach
4158          here.  */
4159       return e;
4160
4161     case tcc_binary:
4162       /* Division is slow and tends to be compiled with jumps,
4163          especially the division by powers of 2 that is often
4164          found inside of an array reference.  So do it just once.  */
4165       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4166           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4167           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4168           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4169         return save_expr (e);
4170       /* Recursively stabilize each operand.  */
4171       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4172                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
4173       break;
4174
4175     case tcc_unary:
4176       /* Recursively stabilize each operand.  */
4177       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4178       break;
4179
4180     default:
4181       gcc_unreachable ();
4182     }
4183
4184   TREE_TYPE (result) = TREE_TYPE (e);
4185   TREE_READONLY (result) = TREE_READONLY (e);
4186   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4187   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4188
4189   return result;
4190 }
4191
4192 /* Stabilize a reference so that we can use it any number of times
4193    without causing its operands to be evaluated more than once.
4194    Returns the stabilized reference.  This works by means of save_expr,
4195    so see the caveats in the comments about save_expr.
4196
4197    Also allows conversion expressions whose operands are references.
4198    Any other kind of expression is returned unchanged.  */
4199
4200 tree
4201 stabilize_reference (tree ref)
4202 {
4203   tree result;
4204   enum tree_code code = TREE_CODE (ref);
4205
4206   switch (code)
4207     {
4208     case VAR_DECL:
4209     case PARM_DECL:
4210     case RESULT_DECL:
4211       /* No action is needed in this case.  */
4212       return ref;
4213
4214     CASE_CONVERT:
4215     case FLOAT_EXPR:
4216     case FIX_TRUNC_EXPR:
4217       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4218       break;
4219
4220     case INDIRECT_REF:
4221       result = build_nt (INDIRECT_REF,
4222                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4223       break;
4224
4225     case COMPONENT_REF:
4226       result = build_nt (COMPONENT_REF,
4227                          stabilize_reference (TREE_OPERAND (ref, 0)),
4228                          TREE_OPERAND (ref, 1), NULL_TREE);
4229       break;
4230
4231     case BIT_FIELD_REF:
4232       result = build_nt (BIT_FIELD_REF,
4233                          stabilize_reference (TREE_OPERAND (ref, 0)),
4234                          TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4235       REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4236       break;
4237
4238     case ARRAY_REF:
4239       result = build_nt (ARRAY_REF,
4240                          stabilize_reference (TREE_OPERAND (ref, 0)),
4241                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4242                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4243       break;
4244
4245     case ARRAY_RANGE_REF:
4246       result = build_nt (ARRAY_RANGE_REF,
4247                          stabilize_reference (TREE_OPERAND (ref, 0)),
4248                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4249                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4250       break;
4251
4252     case COMPOUND_EXPR:
4253       /* We cannot wrap the first expression in a SAVE_EXPR, as then
4254          it wouldn't be ignored.  This matters when dealing with
4255          volatiles.  */
4256       return stabilize_reference_1 (ref);
4257
4258       /* If arg isn't a kind of lvalue we recognize, make no change.
4259          Caller should recognize the error for an invalid lvalue.  */
4260     default:
4261       return ref;
4262
4263     case ERROR_MARK:
4264       return error_mark_node;
4265     }
4266
4267   TREE_TYPE (result) = TREE_TYPE (ref);
4268   TREE_READONLY (result) = TREE_READONLY (ref);
4269   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4270   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4271
4272   return result;
4273 }
4274 \f
4275 /* Low-level constructors for expressions.  */
4276
4277 /* A helper function for build1 and constant folders.  Set TREE_CONSTANT,
4278    and TREE_SIDE_EFFECTS for an ADDR_EXPR.  */
4279
4280 void
4281 recompute_tree_invariant_for_addr_expr (tree t)
4282 {
4283   tree node;
4284   bool tc = true, se = false;
4285
4286   gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4287
4288   /* We started out assuming this address is both invariant and constant, but
4289      does not have side effects.  Now go down any handled components and see if
4290      any of them involve offsets that are either non-constant or non-invariant.
4291      Also check for side-effects.
4292
4293      ??? Note that this code makes no attempt to deal with the case where
4294      taking the address of something causes a copy due to misalignment.  */
4295
4296 #define UPDATE_FLAGS(NODE)  \
4297 do { tree _node = (NODE); \
4298      if (_node && !TREE_CONSTANT (_node)) tc = false; \
4299      if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4300
4301   for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4302        node = TREE_OPERAND (node, 0))
4303     {
4304       /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4305          array reference (probably made temporarily by the G++ front end),
4306          so ignore all the operands.  */
4307       if ((TREE_CODE (node) == ARRAY_REF
4308            || TREE_CODE (node) == ARRAY_RANGE_REF)
4309           && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4310         {
4311           UPDATE_FLAGS (TREE_OPERAND (node, 1));
4312           if (TREE_OPERAND (node, 2))
4313             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4314           if (TREE_OPERAND (node, 3))
4315             UPDATE_FLAGS (TREE_OPERAND (node, 3));
4316         }
4317       /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4318          FIELD_DECL, apparently.  The G++ front end can put something else
4319          there, at least temporarily.  */
4320       else if (TREE_CODE (node) == COMPONENT_REF
4321                && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4322         {
4323           if (TREE_OPERAND (node, 2))
4324             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4325         }
4326     }
4327
4328   node = lang_hooks.expr_to_decl (node, &tc, &se);
4329
4330   /* Now see what's inside.  If it's an INDIRECT_REF, copy our properties from
4331      the address, since &(*a)->b is a form of addition.  If it's a constant, the
4332      address is constant too.  If it's a decl, its address is constant if the
4333      decl is static.  Everything else is not constant and, furthermore,
4334      taking the address of a volatile variable is not volatile.  */
4335   if (TREE_CODE (node) == INDIRECT_REF
4336       || TREE_CODE (node) == MEM_REF)
4337     UPDATE_FLAGS (TREE_OPERAND (node, 0));
4338   else if (CONSTANT_CLASS_P (node))
4339     ;
4340   else if (DECL_P (node))
4341     tc &= (staticp (node) != NULL_TREE);
4342   else
4343     {
4344       tc = false;
4345       se |= TREE_SIDE_EFFECTS (node);
4346     }
4347
4348
4349   TREE_CONSTANT (t) = tc;
4350   TREE_SIDE_EFFECTS (t) = se;
4351 #undef UPDATE_FLAGS
4352 }
4353
4354 /* Build an expression of code CODE, data type TYPE, and operands as
4355    specified.  Expressions and reference nodes can be created this way.
4356    Constants, decls, types and misc nodes cannot be.
4357
4358    We define 5 non-variadic functions, from 0 to 4 arguments.  This is
4359    enough for all extant tree codes.  */
4360
4361 tree
4362 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4363 {
4364   tree t;
4365
4366   gcc_assert (TREE_CODE_LENGTH (code) == 0);
4367
4368   t = make_node_stat (code PASS_MEM_STAT);
4369   TREE_TYPE (t) = tt;
4370
4371   return t;
4372 }
4373
4374 tree
4375 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4376 {
4377   int length = sizeof (struct tree_exp);
4378   tree t;
4379
4380   record_node_allocation_statistics (code, length);
4381
4382   gcc_assert (TREE_CODE_LENGTH (code) == 1);
4383
4384   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4385
4386   memset (t, 0, sizeof (struct tree_common));
4387
4388   TREE_SET_CODE (t, code);
4389
4390   TREE_TYPE (t) = type;
4391   SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4392   TREE_OPERAND (t, 0) = node;
4393   if (node && !TYPE_P (node))
4394     {
4395       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4396       TREE_READONLY (t) = TREE_READONLY (node);
4397     }
4398
4399   if (TREE_CODE_CLASS (code) == tcc_statement)
4400     TREE_SIDE_EFFECTS (t) = 1;
4401   else switch (code)
4402     {
4403     case VA_ARG_EXPR:
4404       /* All of these have side-effects, no matter what their
4405          operands are.  */
4406       TREE_SIDE_EFFECTS (t) = 1;
4407       TREE_READONLY (t) = 0;
4408       break;
4409
4410     case INDIRECT_REF:
4411       /* Whether a dereference is readonly has nothing to do with whether
4412          its operand is readonly.  */
4413       TREE_READONLY (t) = 0;
4414       break;
4415
4416     case ADDR_EXPR:
4417       if (node)
4418         recompute_tree_invariant_for_addr_expr (t);
4419       break;
4420
4421     default:
4422       if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4423           && node && !TYPE_P (node)
4424           && TREE_CONSTANT (node))
4425         TREE_CONSTANT (t) = 1;
4426       if (TREE_CODE_CLASS (code) == tcc_reference
4427           && node && TREE_THIS_VOLATILE (node))
4428         TREE_THIS_VOLATILE (t) = 1;
4429       break;
4430     }
4431
4432   return t;
4433 }
4434
4435 #define PROCESS_ARG(N)                          \
4436   do {                                          \
4437     TREE_OPERAND (t, N) = arg##N;               \
4438     if (arg##N &&!TYPE_P (arg##N))              \
4439       {                                         \
4440         if (TREE_SIDE_EFFECTS (arg##N))         \
4441           side_effects = 1;                     \
4442         if (!TREE_READONLY (arg##N)             \
4443             && !CONSTANT_CLASS_P (arg##N))      \
4444           (void) (read_only = 0);               \
4445         if (!TREE_CONSTANT (arg##N))            \
4446           (void) (constant = 0);                \
4447       }                                         \
4448   } while (0)
4449
4450 tree
4451 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4452 {
4453   bool constant, read_only, side_effects;
4454   tree t;
4455
4456   gcc_assert (TREE_CODE_LENGTH (code) == 2);
4457
4458   if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4459       && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4460       /* When sizetype precision doesn't match that of pointers
4461          we need to be able to build explicit extensions or truncations
4462          of the offset argument.  */
4463       && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4464     gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4465                 && TREE_CODE (arg1) == INTEGER_CST);
4466
4467   if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4468     gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4469                 && ptrofftype_p (TREE_TYPE (arg1)));
4470
4471   t = make_node_stat (code PASS_MEM_STAT);
4472   TREE_TYPE (t) = tt;
4473
4474   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4475      result based on those same flags for the arguments.  But if the
4476      arguments aren't really even `tree' expressions, we shouldn't be trying
4477      to do this.  */
4478
4479   /* Expressions without side effects may be constant if their
4480      arguments are as well.  */
4481   constant = (TREE_CODE_CLASS (code) == tcc_comparison
4482               || TREE_CODE_CLASS (code) == tcc_binary);
4483   read_only = 1;
4484   side_effects = TREE_SIDE_EFFECTS (t);
4485
4486   PROCESS_ARG (0);
4487   PROCESS_ARG (1);
4488
4489   TREE_SIDE_EFFECTS (t) = side_effects;
4490   if (code == MEM_REF)
4491     {
4492       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4493         {
4494           tree o = TREE_OPERAND (arg0, 0);
4495           TREE_READONLY (t) = TREE_READONLY (o);
4496           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4497         }
4498     }
4499   else
4500     {
4501       TREE_READONLY (t) = read_only;
4502       TREE_CONSTANT (t) = constant;
4503       TREE_THIS_VOLATILE (t)
4504         = (TREE_CODE_CLASS (code) == tcc_reference
4505            && arg0 && TREE_THIS_VOLATILE (arg0));
4506     }
4507
4508   return t;
4509 }
4510
4511
4512 tree
4513 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4514              tree arg2 MEM_STAT_DECL)
4515 {
4516   bool constant, read_only, side_effects;
4517   tree t;
4518
4519   gcc_assert (TREE_CODE_LENGTH (code) == 3);
4520   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4521
4522   t = make_node_stat (code PASS_MEM_STAT);
4523   TREE_TYPE (t) = tt;
4524
4525   read_only = 1;
4526
4527   /* As a special exception, if COND_EXPR has NULL branches, we
4528      assume that it is a gimple statement and always consider
4529      it to have side effects.  */
4530   if (code == COND_EXPR
4531       && tt == void_type_node
4532       && arg1 == NULL_TREE
4533       && arg2 == NULL_TREE)
4534     side_effects = true;
4535   else
4536     side_effects = TREE_SIDE_EFFECTS (t);
4537
4538   PROCESS_ARG (0);
4539   PROCESS_ARG (1);
4540   PROCESS_ARG (2);
4541
4542   if (code == COND_EXPR)
4543     TREE_READONLY (t) = read_only;
4544
4545   TREE_SIDE_EFFECTS (t) = side_effects;
4546   TREE_THIS_VOLATILE (t)
4547     = (TREE_CODE_CLASS (code) == tcc_reference
4548        && arg0 && TREE_THIS_VOLATILE (arg0));
4549
4550   return t;
4551 }
4552
4553 tree
4554 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4555              tree arg2, tree arg3 MEM_STAT_DECL)
4556 {
4557   bool constant, read_only, side_effects;
4558   tree t;
4559
4560   gcc_assert (TREE_CODE_LENGTH (code) == 4);
4561
4562   t = make_node_stat (code PASS_MEM_STAT);
4563   TREE_TYPE (t) = tt;
4564
4565   side_effects = TREE_SIDE_EFFECTS (t);
4566
4567   PROCESS_ARG (0);
4568   PROCESS_ARG (1);
4569   PROCESS_ARG (2);
4570   PROCESS_ARG (3);
4571
4572   TREE_SIDE_EFFECTS (t) = side_effects;
4573   TREE_THIS_VOLATILE (t)
4574     = (TREE_CODE_CLASS (code) == tcc_reference
4575        && arg0 && TREE_THIS_VOLATILE (arg0));
4576
4577   return t;
4578 }
4579
4580 tree
4581 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4582              tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4583 {
4584   bool constant, read_only, side_effects;
4585   tree t;
4586
4587   gcc_assert (TREE_CODE_LENGTH (code) == 5);
4588
4589   t = make_node_stat (code PASS_MEM_STAT);
4590   TREE_TYPE (t) = tt;
4591
4592   side_effects = TREE_SIDE_EFFECTS (t);
4593
4594   PROCESS_ARG (0);
4595   PROCESS_ARG (1);
4596   PROCESS_ARG (2);
4597   PROCESS_ARG (3);
4598   PROCESS_ARG (4);
4599
4600   TREE_SIDE_EFFECTS (t) = side_effects;
4601   if (code == TARGET_MEM_REF)
4602     {
4603       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4604         {
4605           tree o = TREE_OPERAND (arg0, 0);
4606           TREE_READONLY (t) = TREE_READONLY (o);
4607           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4608         }
4609     }
4610   else
4611     TREE_THIS_VOLATILE (t)
4612       = (TREE_CODE_CLASS (code) == tcc_reference
4613          && arg0 && TREE_THIS_VOLATILE (arg0));
4614
4615   return t;
4616 }
4617
4618 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4619    on the pointer PTR.  */
4620
4621 tree
4622 build_simple_mem_ref_loc (location_t loc, tree ptr)
4623 {
4624   HOST_WIDE_INT offset = 0;
4625   tree ptype = TREE_TYPE (ptr);
4626   tree tem;
4627   /* For convenience allow addresses that collapse to a simple base
4628      and offset.  */
4629   if (TREE_CODE (ptr) == ADDR_EXPR
4630       && (handled_component_p (TREE_OPERAND (ptr, 0))
4631           || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4632     {
4633       ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4634       gcc_assert (ptr);
4635       ptr = build_fold_addr_expr (ptr);
4636       gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4637     }
4638   tem = build2 (MEM_REF, TREE_TYPE (ptype),
4639                 ptr, build_int_cst (ptype, offset));
4640   SET_EXPR_LOCATION (tem, loc);
4641   return tem;
4642 }
4643
4644 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T.  */
4645
4646 offset_int
4647 mem_ref_offset (const_tree t)
4648 {
4649   return offset_int::from (TREE_OPERAND (t, 1), SIGNED);
4650 }
4651
4652 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4653    offsetted by OFFSET units.  */
4654
4655 tree
4656 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4657 {
4658   tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4659                           build_fold_addr_expr (base),
4660                           build_int_cst (ptr_type_node, offset));
4661   tree addr = build1 (ADDR_EXPR, type, ref);
4662   recompute_tree_invariant_for_addr_expr (addr);
4663   return addr;
4664 }
4665
4666 /* Similar except don't specify the TREE_TYPE
4667    and leave the TREE_SIDE_EFFECTS as 0.
4668    It is permissible for arguments to be null,
4669    or even garbage if their values do not matter.  */
4670
4671 tree
4672 build_nt (enum tree_code code, ...)
4673 {
4674   tree t;
4675   int length;
4676   int i;
4677   va_list p;
4678
4679   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4680
4681   va_start (p, code);
4682
4683   t = make_node (code);
4684   length = TREE_CODE_LENGTH (code);
4685
4686   for (i = 0; i < length; i++)
4687     TREE_OPERAND (t, i) = va_arg (p, tree);
4688
4689   va_end (p);
4690   return t;
4691 }
4692
4693 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4694    tree vec.  */
4695
4696 tree
4697 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4698 {
4699   tree ret, t;
4700   unsigned int ix;
4701
4702   ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4703   CALL_EXPR_FN (ret) = fn;
4704   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4705   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4706     CALL_EXPR_ARG (ret, ix) = t;
4707   return ret;
4708 }
4709 \f
4710 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4711    We do NOT enter this node in any sort of symbol table.
4712
4713    LOC is the location of the decl.
4714
4715    layout_decl is used to set up the decl's storage layout.
4716    Other slots are initialized to 0 or null pointers.  */
4717
4718 tree
4719 build_decl_stat (location_t loc, enum tree_code code, tree name,
4720                  tree type MEM_STAT_DECL)
4721 {
4722   tree t;
4723
4724   t = make_node_stat (code PASS_MEM_STAT);
4725   DECL_SOURCE_LOCATION (t) = loc;
4726
4727 /*  if (type == error_mark_node)
4728     type = integer_type_node; */
4729 /* That is not done, deliberately, so that having error_mark_node
4730    as the type can suppress useless errors in the use of this variable.  */
4731
4732   DECL_NAME (t) = name;
4733   TREE_TYPE (t) = type;
4734
4735   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4736     layout_decl (t, 0);
4737
4738   return t;
4739 }
4740
4741 /* Builds and returns function declaration with NAME and TYPE.  */
4742
4743 tree
4744 build_fn_decl (const char *name, tree type)
4745 {
4746   tree id = get_identifier (name);
4747   tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4748
4749   DECL_EXTERNAL (decl) = 1;
4750   TREE_PUBLIC (decl) = 1;
4751   DECL_ARTIFICIAL (decl) = 1;
4752   TREE_NOTHROW (decl) = 1;
4753
4754   return decl;
4755 }
4756
4757 vec<tree, va_gc> *all_translation_units;
4758
4759 /* Builds a new translation-unit decl with name NAME, queues it in the
4760    global list of translation-unit decls and returns it.   */
4761
4762 tree
4763 build_translation_unit_decl (tree name)
4764 {
4765   tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4766                         name, NULL_TREE);
4767   TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4768   vec_safe_push (all_translation_units, tu);
4769   return tu;
4770 }
4771
4772 \f
4773 /* BLOCK nodes are used to represent the structure of binding contours
4774    and declarations, once those contours have been exited and their contents
4775    compiled.  This information is used for outputting debugging info.  */
4776
4777 tree
4778 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4779 {
4780   tree block = make_node (BLOCK);
4781
4782   BLOCK_VARS (block) = vars;
4783   BLOCK_SUBBLOCKS (block) = subblocks;
4784   BLOCK_SUPERCONTEXT (block) = supercontext;
4785   BLOCK_CHAIN (block) = chain;
4786   return block;
4787 }
4788
4789 \f
4790 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4791
4792    LOC is the location to use in tree T.  */
4793
4794 void
4795 protected_set_expr_location (tree t, location_t loc)
4796 {
4797   if (CAN_HAVE_LOCATION_P (t))
4798     SET_EXPR_LOCATION (t, loc);
4799 }
4800 \f
4801 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4802    is ATTRIBUTE.  */
4803
4804 tree
4805 build_decl_attribute_variant (tree ddecl, tree attribute)
4806 {
4807   DECL_ATTRIBUTES (ddecl) = attribute;
4808   return ddecl;
4809 }
4810
4811 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4812    is ATTRIBUTE and its qualifiers are QUALS.
4813
4814    Record such modified types already made so we don't make duplicates.  */
4815
4816 tree
4817 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4818 {
4819   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4820     {
4821       inchash::hash hstate;
4822       tree ntype;
4823       int i;
4824       tree t;
4825       enum tree_code code = TREE_CODE (ttype);
4826
4827       /* Building a distinct copy of a tagged type is inappropriate; it
4828          causes breakage in code that expects there to be a one-to-one
4829          relationship between a struct and its fields.
4830          build_duplicate_type is another solution (as used in
4831          handle_transparent_union_attribute), but that doesn't play well
4832          with the stronger C++ type identity model.  */
4833       if (TREE_CODE (ttype) == RECORD_TYPE
4834           || TREE_CODE (ttype) == UNION_TYPE
4835           || TREE_CODE (ttype) == QUAL_UNION_TYPE
4836           || TREE_CODE (ttype) == ENUMERAL_TYPE)
4837         {
4838           warning (OPT_Wattributes,
4839                    "ignoring attributes applied to %qT after definition",
4840                    TYPE_MAIN_VARIANT (ttype));
4841           return build_qualified_type (ttype, quals);
4842         }
4843
4844       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4845       ntype = build_distinct_type_copy (ttype);
4846
4847       TYPE_ATTRIBUTES (ntype) = attribute;
4848
4849       hstate.add_int (code);
4850       if (TREE_TYPE (ntype))
4851         hstate.add_object (TYPE_HASH (TREE_TYPE (ntype)));
4852       attribute_hash_list (attribute, hstate);
4853
4854       switch (TREE_CODE (ntype))
4855         {
4856         case FUNCTION_TYPE:
4857           type_hash_list (TYPE_ARG_TYPES (ntype), hstate);
4858           break;
4859         case ARRAY_TYPE:
4860           if (TYPE_DOMAIN (ntype))
4861             hstate.add_object (TYPE_HASH (TYPE_DOMAIN (ntype)));
4862           break;
4863         case INTEGER_TYPE:
4864           t = TYPE_MAX_VALUE (ntype);
4865           for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
4866             hstate.add_object (TREE_INT_CST_ELT (t, i));
4867           break;
4868         case REAL_TYPE:
4869         case FIXED_POINT_TYPE:
4870           {
4871             unsigned int precision = TYPE_PRECISION (ntype);
4872             hstate.add_object (precision);
4873           }
4874           break;
4875         default:
4876           break;
4877         }
4878
4879       ntype = type_hash_canon (hstate.end(), ntype);
4880
4881       /* If the target-dependent attributes make NTYPE different from
4882          its canonical type, we will need to use structural equality
4883          checks for this type. */
4884       if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4885           || !comp_type_attributes (ntype, ttype))
4886         SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4887       else if (TYPE_CANONICAL (ntype) == ntype)
4888         TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4889
4890       ttype = build_qualified_type (ntype, quals);
4891     }
4892   else if (TYPE_QUALS (ttype) != quals)
4893     ttype = build_qualified_type (ttype, quals);
4894
4895   return ttype;
4896 }
4897
4898 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4899    the same.  */
4900
4901 static bool
4902 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4903 {
4904   tree cl1, cl2;
4905   for (cl1 = clauses1, cl2 = clauses2;
4906        cl1 && cl2;
4907        cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4908     {
4909       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4910         return false;
4911       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4912         {
4913           if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4914                                 OMP_CLAUSE_DECL (cl2)) != 1)
4915             return false;
4916         }
4917       switch (OMP_CLAUSE_CODE (cl1))
4918         {
4919         case OMP_CLAUSE_ALIGNED:
4920           if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4921                                 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4922             return false;
4923           break;
4924         case OMP_CLAUSE_LINEAR:
4925           if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4926                                 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4927             return false;
4928           break;
4929         case OMP_CLAUSE_SIMDLEN:
4930           if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4931                                 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4932             return false;
4933         default:
4934           break;
4935         }
4936     }
4937   return true;
4938 }
4939
4940 /* Compare two constructor-element-type constants.  Return 1 if the lists
4941    are known to be equal; otherwise return 0.  */
4942
4943 static bool
4944 simple_cst_list_equal (const_tree l1, const_tree l2)
4945 {
4946   while (l1 != NULL_TREE && l2 != NULL_TREE)
4947     {
4948       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4949         return false;
4950
4951       l1 = TREE_CHAIN (l1);
4952       l2 = TREE_CHAIN (l2);
4953     }
4954
4955   return l1 == l2;
4956 }
4957
4958 /* Compare two identifier nodes representing attributes.  Either one may
4959    be in wrapped __ATTR__ form.  Return true if they are the same, false
4960    otherwise.  */
4961
4962 static bool
4963 cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
4964 {
4965   /* Make sure we're dealing with IDENTIFIER_NODEs.  */
4966   gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
4967                        && TREE_CODE (attr2) == IDENTIFIER_NODE);
4968
4969   /* Identifiers can be compared directly for equality.  */
4970   if (attr1 == attr2)
4971     return true;
4972
4973   /* If they are not equal, they may still be one in the form
4974      'text' while the other one is in the form '__text__'.  TODO:
4975      If we were storing attributes in normalized 'text' form, then
4976      this could all go away and we could take full advantage of
4977      the fact that we're comparing identifiers. :-)  */
4978   const size_t attr1_len = IDENTIFIER_LENGTH (attr1);
4979   const size_t attr2_len = IDENTIFIER_LENGTH (attr2);
4980
4981   if (attr2_len == attr1_len + 4)
4982     {
4983       const char *p = IDENTIFIER_POINTER (attr2);
4984       const char *q = IDENTIFIER_POINTER (attr1);
4985       if (p[0] == '_' && p[1] == '_'
4986           && p[attr2_len - 2] == '_' && p[attr2_len - 1] == '_'
4987           && strncmp (q, p + 2, attr1_len) == 0)
4988         return true;;
4989     }
4990   else if (attr2_len + 4 == attr1_len)
4991     {
4992       const char *p = IDENTIFIER_POINTER (attr2);
4993       const char *q = IDENTIFIER_POINTER (attr1);
4994       if (q[0] == '_' && q[1] == '_'
4995           && q[attr1_len - 2] == '_' && q[attr1_len - 1] == '_'
4996           && strncmp (q + 2, p, attr2_len) == 0)
4997         return true;
4998     }
4999
5000   return false;
5001 }
5002
5003 /* Compare two attributes for their value identity.  Return true if the
5004    attribute values are known to be equal; otherwise return false.  */
5005
5006 bool
5007 attribute_value_equal (const_tree attr1, const_tree attr2)
5008 {
5009   if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
5010     return true;
5011
5012   if (TREE_VALUE (attr1) != NULL_TREE
5013       && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
5014       && TREE_VALUE (attr2) != NULL_TREE
5015       && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
5016     {
5017       /* Handle attribute format.  */
5018       if (is_attribute_p ("format", TREE_PURPOSE (attr1)))
5019         {
5020           attr1 = TREE_VALUE (attr1);
5021           attr2 = TREE_VALUE (attr2);
5022           /* Compare the archetypes (printf/scanf/strftime/...).  */
5023           if (!cmp_attrib_identifiers (TREE_VALUE (attr1),
5024                                        TREE_VALUE (attr2)))
5025             return false;
5026           /* Archetypes are the same.  Compare the rest.  */
5027           return (simple_cst_list_equal (TREE_CHAIN (attr1),
5028                                          TREE_CHAIN (attr2)) == 1);
5029         }
5030       return (simple_cst_list_equal (TREE_VALUE (attr1),
5031                                      TREE_VALUE (attr2)) == 1);
5032     }
5033
5034   if ((flag_openmp || flag_openmp_simd)
5035       && TREE_VALUE (attr1) && TREE_VALUE (attr2)
5036       && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
5037       && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
5038     return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
5039                                            TREE_VALUE (attr2));
5040
5041   return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
5042 }
5043
5044 /* Return 0 if the attributes for two types are incompatible, 1 if they
5045    are compatible, and 2 if they are nearly compatible (which causes a
5046    warning to be generated).  */
5047 int
5048 comp_type_attributes (const_tree type1, const_tree type2)
5049 {
5050   const_tree a1 = TYPE_ATTRIBUTES (type1);
5051   const_tree a2 = TYPE_ATTRIBUTES (type2);
5052   const_tree a;
5053
5054   if (a1 == a2)
5055     return 1;
5056   for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
5057     {
5058       const struct attribute_spec *as;
5059       const_tree attr;
5060
5061       as = lookup_attribute_spec (get_attribute_name (a));
5062       if (!as || as->affects_type_identity == false)
5063         continue;
5064
5065       attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
5066       if (!attr || !attribute_value_equal (a, attr))
5067         break;
5068     }
5069   if (!a)
5070     {
5071       for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
5072         {
5073           const struct attribute_spec *as;
5074
5075           as = lookup_attribute_spec (get_attribute_name (a));
5076           if (!as || as->affects_type_identity == false)
5077             continue;
5078
5079           if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
5080             break;
5081           /* We don't need to compare trees again, as we did this
5082              already in first loop.  */
5083         }
5084       /* All types - affecting identity - are equal, so
5085          there is no need to call target hook for comparison.  */
5086       if (!a)
5087         return 1;
5088     }
5089   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
5090     return 0;
5091   /* As some type combinations - like default calling-convention - might
5092      be compatible, we have to call the target hook to get the final result.  */
5093   return targetm.comp_type_attributes (type1, type2);
5094 }
5095
5096 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
5097    is ATTRIBUTE.
5098
5099    Record such modified types already made so we don't make duplicates.  */
5100
5101 tree
5102 build_type_attribute_variant (tree ttype, tree attribute)
5103 {
5104   return build_type_attribute_qual_variant (ttype, attribute,
5105                                             TYPE_QUALS (ttype));
5106 }
5107
5108
5109 /* Reset the expression *EXPR_P, a size or position.
5110
5111    ??? We could reset all non-constant sizes or positions.  But it's cheap
5112    enough to not do so and refrain from adding workarounds to dwarf2out.c.
5113
5114    We need to reset self-referential sizes or positions because they cannot
5115    be gimplified and thus can contain a CALL_EXPR after the gimplification
5116    is finished, which will run afoul of LTO streaming.  And they need to be
5117    reset to something essentially dummy but not constant, so as to preserve
5118    the properties of the object they are attached to.  */
5119
5120 static inline void
5121 free_lang_data_in_one_sizepos (tree *expr_p)
5122 {
5123   tree expr = *expr_p;
5124   if (CONTAINS_PLACEHOLDER_P (expr))
5125     *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
5126 }
5127
5128
5129 /* Reset all the fields in a binfo node BINFO.  We only keep
5130    BINFO_VTABLE, which is used by gimple_fold_obj_type_ref.  */
5131
5132 static void
5133 free_lang_data_in_binfo (tree binfo)
5134 {
5135   unsigned i;
5136   tree t;
5137
5138   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
5139
5140   BINFO_VIRTUALS (binfo) = NULL_TREE;
5141   BINFO_BASE_ACCESSES (binfo) = NULL;
5142   BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
5143   BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
5144
5145   FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
5146     free_lang_data_in_binfo (t);
5147 }
5148
5149
5150 /* Reset all language specific information still present in TYPE.  */
5151
5152 static void
5153 free_lang_data_in_type (tree type)
5154 {
5155   gcc_assert (TYPE_P (type));
5156
5157   /* Give the FE a chance to remove its own data first.  */
5158   lang_hooks.free_lang_data (type);
5159
5160   TREE_LANG_FLAG_0 (type) = 0;
5161   TREE_LANG_FLAG_1 (type) = 0;
5162   TREE_LANG_FLAG_2 (type) = 0;
5163   TREE_LANG_FLAG_3 (type) = 0;
5164   TREE_LANG_FLAG_4 (type) = 0;
5165   TREE_LANG_FLAG_5 (type) = 0;
5166   TREE_LANG_FLAG_6 (type) = 0;
5167
5168   if (TREE_CODE (type) == FUNCTION_TYPE)
5169     {
5170       /* Remove the const and volatile qualifiers from arguments.  The
5171          C++ front end removes them, but the C front end does not,
5172          leading to false ODR violation errors when merging two
5173          instances of the same function signature compiled by
5174          different front ends.  */
5175       tree p;
5176
5177       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5178         {
5179           tree arg_type = TREE_VALUE (p);
5180
5181           if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5182             {
5183               int quals = TYPE_QUALS (arg_type)
5184                           & ~TYPE_QUAL_CONST
5185                           & ~TYPE_QUAL_VOLATILE;
5186               TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5187               free_lang_data_in_type (TREE_VALUE (p));
5188             }
5189           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5190           TREE_PURPOSE (p) = NULL;
5191         }
5192       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5193       TYPE_MINVAL (type) = NULL;
5194     }
5195   if (TREE_CODE (type) == METHOD_TYPE)
5196     {
5197       tree p;
5198
5199       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5200         {
5201           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5202           TREE_PURPOSE (p) = NULL;
5203         }
5204       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5205       TYPE_MINVAL (type) = NULL;
5206     }
5207
5208   /* Remove members that are not actually FIELD_DECLs from the field
5209      list of an aggregate.  These occur in C++.  */
5210   if (RECORD_OR_UNION_TYPE_P (type))
5211     {
5212       tree prev, member;
5213
5214       /* Note that TYPE_FIELDS can be shared across distinct
5215          TREE_TYPEs.  Therefore, if the first field of TYPE_FIELDS is
5216          to be removed, we cannot set its TREE_CHAIN to NULL.
5217          Otherwise, we would not be able to find all the other fields
5218          in the other instances of this TREE_TYPE.
5219
5220          This was causing an ICE in testsuite/g++.dg/lto/20080915.C.  */
5221       prev = NULL_TREE;
5222       member = TYPE_FIELDS (type);
5223       while (member)
5224         {
5225           if (TREE_CODE (member) == FIELD_DECL
5226               || (TREE_CODE (member) == TYPE_DECL
5227                   && !DECL_IGNORED_P (member)
5228                   && debug_info_level > DINFO_LEVEL_TERSE
5229                   && !is_redundant_typedef (member)))
5230             {
5231               if (prev)
5232                 TREE_CHAIN (prev) = member;
5233               else
5234                 TYPE_FIELDS (type) = member;
5235               prev = member;
5236             }
5237
5238           member = TREE_CHAIN (member);
5239         }
5240
5241       if (prev)
5242         TREE_CHAIN (prev) = NULL_TREE;
5243       else
5244         TYPE_FIELDS (type) = NULL_TREE;
5245
5246       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
5247          and danagle the pointer from time to time.  */
5248       if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
5249         TYPE_VFIELD (type) = NULL_TREE;
5250
5251       /* Remove TYPE_METHODS list.  While it would be nice to keep it
5252          to enable ODR warnings about different method lists, doing so
5253          seems to impractically increase size of LTO data streamed.
5254          Keep the information if TYPE_METHODS was non-NULL. This is used
5255          by function.c and pretty printers.  */
5256       if (TYPE_METHODS (type))
5257         TYPE_METHODS (type) = error_mark_node;
5258       if (TYPE_BINFO (type))
5259         {
5260           free_lang_data_in_binfo (TYPE_BINFO (type));
5261           /* We need to preserve link to bases and virtual table for all
5262              polymorphic types to make devirtualization machinery working.
5263              Debug output cares only about bases, but output also
5264              virtual table pointers so merging of -fdevirtualize and
5265              -fno-devirtualize units is easier.  */
5266           if ((!BINFO_VTABLE (TYPE_BINFO (type))
5267                || !flag_devirtualize)
5268               && ((!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
5269                    && !BINFO_VTABLE (TYPE_BINFO (type)))
5270                   || debug_info_level != DINFO_LEVEL_NONE))
5271             TYPE_BINFO (type) = NULL;
5272         }
5273     }
5274   else
5275     {
5276       /* For non-aggregate types, clear out the language slot (which
5277          overloads TYPE_BINFO).  */
5278       TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5279
5280       if (INTEGRAL_TYPE_P (type)
5281           || SCALAR_FLOAT_TYPE_P (type)
5282           || FIXED_POINT_TYPE_P (type))
5283         {
5284           free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5285           free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5286         }
5287     }
5288
5289   free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5290   free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5291
5292   if (TYPE_CONTEXT (type)
5293       && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5294     {
5295       tree ctx = TYPE_CONTEXT (type);
5296       do
5297         {
5298           ctx = BLOCK_SUPERCONTEXT (ctx);
5299         }
5300       while (ctx && TREE_CODE (ctx) == BLOCK);
5301       TYPE_CONTEXT (type) = ctx;
5302     }
5303 }
5304
5305
5306 /* Return true if DECL may need an assembler name to be set.  */
5307
5308 static inline bool
5309 need_assembler_name_p (tree decl)
5310 {
5311   /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5312      Rule merging.  This makes type_odr_p to return true on those types during
5313      LTO and by comparing the mangled name, we can say what types are intended
5314      to be equivalent across compilation unit.
5315
5316      We do not store names of type_in_anonymous_namespace_p.
5317
5318      Record, union and enumeration type have linkage that allows use
5319      to check type_in_anonymous_namespace_p. We do not mangle compound types
5320      that always can be compared structurally.
5321
5322      Similarly for builtin types, we compare properties of their main variant.
5323      A special case are integer types where mangling do make differences
5324      between char/signed char/unsigned char etc.  Storing name for these makes
5325      e.g.  -fno-signed-char/-fsigned-char mismatches to be handled well.
5326      See cp/mangle.c:write_builtin_type for details.  */
5327
5328   if (flag_lto_odr_type_mering
5329       && TREE_CODE (decl) == TYPE_DECL
5330       && DECL_NAME (decl)
5331       && decl == TYPE_NAME (TREE_TYPE (decl))
5332       && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5333       && (type_with_linkage_p (TREE_TYPE (decl))
5334           || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5335       && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5336     return !DECL_ASSEMBLER_NAME_SET_P (decl);
5337   /* Only FUNCTION_DECLs and VAR_DECLs are considered.  */
5338   if (TREE_CODE (decl) != FUNCTION_DECL
5339       && TREE_CODE (decl) != VAR_DECL)
5340     return false;
5341
5342   /* If DECL already has its assembler name set, it does not need a
5343      new one.  */
5344   if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5345       || DECL_ASSEMBLER_NAME_SET_P (decl))
5346     return false;
5347
5348   /* Abstract decls do not need an assembler name.  */
5349   if (DECL_ABSTRACT_P (decl))
5350     return false;
5351
5352   /* For VAR_DECLs, only static, public and external symbols need an
5353      assembler name.  */
5354   if (TREE_CODE (decl) == VAR_DECL
5355       && !TREE_STATIC (decl)
5356       && !TREE_PUBLIC (decl)
5357       && !DECL_EXTERNAL (decl))
5358     return false;
5359
5360   if (TREE_CODE (decl) == FUNCTION_DECL)
5361     {
5362       /* Do not set assembler name on builtins.  Allow RTL expansion to
5363          decide whether to expand inline or via a regular call.  */
5364       if (DECL_BUILT_IN (decl)
5365           && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5366         return false;
5367
5368       /* Functions represented in the callgraph need an assembler name.  */
5369       if (cgraph_node::get (decl) != NULL)
5370         return true;
5371
5372       /* Unused and not public functions don't need an assembler name.  */
5373       if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5374         return false;
5375     }
5376
5377   return true;
5378 }
5379
5380
5381 /* Reset all language specific information still present in symbol
5382    DECL.  */
5383
5384 static void
5385 free_lang_data_in_decl (tree decl)
5386 {
5387   gcc_assert (DECL_P (decl));
5388
5389   /* Give the FE a chance to remove its own data first.  */
5390   lang_hooks.free_lang_data (decl);
5391
5392   TREE_LANG_FLAG_0 (decl) = 0;
5393   TREE_LANG_FLAG_1 (decl) = 0;
5394   TREE_LANG_FLAG_2 (decl) = 0;
5395   TREE_LANG_FLAG_3 (decl) = 0;
5396   TREE_LANG_FLAG_4 (decl) = 0;
5397   TREE_LANG_FLAG_5 (decl) = 0;
5398   TREE_LANG_FLAG_6 (decl) = 0;
5399
5400   free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5401   free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5402   if (TREE_CODE (decl) == FIELD_DECL)
5403     {
5404       free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5405       if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5406         DECL_QUALIFIER (decl) = NULL_TREE;
5407     }
5408
5409  if (TREE_CODE (decl) == FUNCTION_DECL)
5410     {
5411       struct cgraph_node *node;
5412       if (!(node = cgraph_node::get (decl))
5413           || (!node->definition && !node->clones))
5414         {
5415           if (node)
5416             node->release_body ();
5417           else
5418             {
5419               release_function_body (decl);
5420               DECL_ARGUMENTS (decl) = NULL;
5421               DECL_RESULT (decl) = NULL;
5422               DECL_INITIAL (decl) = error_mark_node;
5423             }
5424         }
5425       if (gimple_has_body_p (decl))
5426         {
5427           tree t;
5428
5429           /* If DECL has a gimple body, then the context for its
5430              arguments must be DECL.  Otherwise, it doesn't really
5431              matter, as we will not be emitting any code for DECL.  In
5432              general, there may be other instances of DECL created by
5433              the front end and since PARM_DECLs are generally shared,
5434              their DECL_CONTEXT changes as the replicas of DECL are
5435              created.  The only time where DECL_CONTEXT is important
5436              is for the FUNCTION_DECLs that have a gimple body (since
5437              the PARM_DECL will be used in the function's body).  */
5438           for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5439             DECL_CONTEXT (t) = decl;
5440           if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5441             DECL_FUNCTION_SPECIFIC_TARGET (decl)
5442               = target_option_default_node;
5443           if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5444             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5445               = optimization_default_node;
5446         }
5447
5448       /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5449          At this point, it is not needed anymore.  */
5450       DECL_SAVED_TREE (decl) = NULL_TREE;
5451
5452       /* Clear the abstract origin if it refers to a method.  Otherwise
5453          dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5454          origin will not be output correctly.  */
5455       if (DECL_ABSTRACT_ORIGIN (decl)
5456           && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5457           && RECORD_OR_UNION_TYPE_P
5458                (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5459         DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5460
5461       /* Sometimes the C++ frontend doesn't manage to transform a temporary
5462          DECL_VINDEX referring to itself into a vtable slot number as it
5463          should.  Happens with functions that are copied and then forgotten
5464          about.  Just clear it, it won't matter anymore.  */
5465       if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5466         DECL_VINDEX (decl) = NULL_TREE;
5467     }
5468   else if (TREE_CODE (decl) == VAR_DECL)
5469     {
5470       if ((DECL_EXTERNAL (decl)
5471            && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5472           || (decl_function_context (decl) && !TREE_STATIC (decl)))
5473         DECL_INITIAL (decl) = NULL_TREE;
5474     }
5475   else if (TREE_CODE (decl) == TYPE_DECL
5476            || TREE_CODE (decl) == FIELD_DECL)
5477     DECL_INITIAL (decl) = NULL_TREE;
5478   else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5479            && DECL_INITIAL (decl)
5480            && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5481     {
5482       /* Strip builtins from the translation-unit BLOCK.  We still have targets
5483          without builtin_decl_explicit support and also builtins are shared
5484          nodes and thus we can't use TREE_CHAIN in multiple lists.  */
5485       tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5486       while (*nextp)
5487         {
5488           tree var = *nextp;
5489           if (TREE_CODE (var) == FUNCTION_DECL
5490               && DECL_BUILT_IN (var))
5491             *nextp = TREE_CHAIN (var);
5492           else
5493             nextp = &TREE_CHAIN (var);
5494         }
5495     }
5496 }
5497
5498
5499 /* Data used when collecting DECLs and TYPEs for language data removal.  */
5500
5501 struct free_lang_data_d
5502 {
5503   /* Worklist to avoid excessive recursion.  */
5504   vec<tree> worklist;
5505
5506   /* Set of traversed objects.  Used to avoid duplicate visits.  */
5507   hash_set<tree> *pset;
5508
5509   /* Array of symbols to process with free_lang_data_in_decl.  */
5510   vec<tree> decls;
5511
5512   /* Array of types to process with free_lang_data_in_type.  */
5513   vec<tree> types;
5514 };
5515
5516
5517 /* Save all language fields needed to generate proper debug information
5518    for DECL.  This saves most fields cleared out by free_lang_data_in_decl.  */
5519
5520 static void
5521 save_debug_info_for_decl (tree t)
5522 {
5523   /*struct saved_debug_info_d *sdi;*/
5524
5525   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5526
5527   /* FIXME.  Partial implementation for saving debug info removed.  */
5528 }
5529
5530
5531 /* Save all language fields needed to generate proper debug information
5532    for TYPE.  This saves most fields cleared out by free_lang_data_in_type.  */
5533
5534 static void
5535 save_debug_info_for_type (tree t)
5536 {
5537   /*struct saved_debug_info_d *sdi;*/
5538
5539   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5540
5541   /* FIXME.  Partial implementation for saving debug info removed.  */
5542 }
5543
5544
5545 /* Add type or decl T to one of the list of tree nodes that need their
5546    language data removed.  The lists are held inside FLD.  */
5547
5548 static void
5549 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5550 {
5551   if (DECL_P (t))
5552     {
5553       fld->decls.safe_push (t);
5554       if (debug_info_level > DINFO_LEVEL_TERSE)
5555         save_debug_info_for_decl (t);
5556     }
5557   else if (TYPE_P (t))
5558     {
5559       fld->types.safe_push (t);
5560       if (debug_info_level > DINFO_LEVEL_TERSE)
5561         save_debug_info_for_type (t);
5562     }
5563   else
5564     gcc_unreachable ();
5565 }
5566
5567 /* Push tree node T into FLD->WORKLIST.  */
5568
5569 static inline void
5570 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5571 {
5572   if (t && !is_lang_specific (t) && !fld->pset->contains (t))
5573     fld->worklist.safe_push ((t));
5574 }
5575
5576
5577 /* Operand callback helper for free_lang_data_in_node.  *TP is the
5578    subtree operand being considered.  */
5579
5580 static tree
5581 find_decls_types_r (tree *tp, int *ws, void *data)
5582 {
5583   tree t = *tp;
5584   struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5585
5586   if (TREE_CODE (t) == TREE_LIST)
5587     return NULL_TREE;
5588
5589   /* Language specific nodes will be removed, so there is no need
5590      to gather anything under them.  */
5591   if (is_lang_specific (t))
5592     {
5593       *ws = 0;
5594       return NULL_TREE;
5595     }
5596
5597   if (DECL_P (t))
5598     {
5599       /* Note that walk_tree does not traverse every possible field in
5600          decls, so we have to do our own traversals here.  */
5601       add_tree_to_fld_list (t, fld);
5602
5603       fld_worklist_push (DECL_NAME (t), fld);
5604       fld_worklist_push (DECL_CONTEXT (t), fld);
5605       fld_worklist_push (DECL_SIZE (t), fld);
5606       fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5607
5608       /* We are going to remove everything under DECL_INITIAL for
5609          TYPE_DECLs.  No point walking them.  */
5610       if (TREE_CODE (t) != TYPE_DECL)
5611         fld_worklist_push (DECL_INITIAL (t), fld);
5612
5613       fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5614       fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5615
5616       if (TREE_CODE (t) == FUNCTION_DECL)
5617         {
5618           fld_worklist_push (DECL_ARGUMENTS (t), fld);
5619           fld_worklist_push (DECL_RESULT (t), fld);
5620         }
5621       else if (TREE_CODE (t) == TYPE_DECL)
5622         {
5623           fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5624         }
5625       else if (TREE_CODE (t) == FIELD_DECL)
5626         {
5627           fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5628           fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5629           fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5630           fld_worklist_push (DECL_FCONTEXT (t), fld);
5631         }
5632
5633       if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == PARM_DECL)
5634           && DECL_HAS_VALUE_EXPR_P (t))
5635         fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5636
5637       if (TREE_CODE (t) != FIELD_DECL
5638           && TREE_CODE (t) != TYPE_DECL)
5639         fld_worklist_push (TREE_CHAIN (t), fld);
5640       *ws = 0;
5641     }
5642   else if (TYPE_P (t))
5643     {
5644       /* Note that walk_tree does not traverse every possible field in
5645          types, so we have to do our own traversals here.  */
5646       add_tree_to_fld_list (t, fld);
5647
5648       if (!RECORD_OR_UNION_TYPE_P (t))
5649         fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5650       fld_worklist_push (TYPE_SIZE (t), fld);
5651       fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5652       fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5653       fld_worklist_push (TYPE_POINTER_TO (t), fld);
5654       fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5655       fld_worklist_push (TYPE_NAME (t), fld);
5656       /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO.  We do not stream
5657          them and thus do not and want not to reach unused pointer types
5658          this way.  */
5659       if (!POINTER_TYPE_P (t))
5660         fld_worklist_push (TYPE_MINVAL (t), fld);
5661       if (!RECORD_OR_UNION_TYPE_P (t))
5662         fld_worklist_push (TYPE_MAXVAL (t), fld);
5663       fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5664       /* Do not walk TYPE_NEXT_VARIANT.  We do not stream it and thus
5665          do not and want not to reach unused variants this way.  */
5666       if (TYPE_CONTEXT (t))
5667         {
5668           tree ctx = TYPE_CONTEXT (t);
5669           /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5670              So push that instead.  */
5671           while (ctx && TREE_CODE (ctx) == BLOCK)
5672             ctx = BLOCK_SUPERCONTEXT (ctx);
5673           fld_worklist_push (ctx, fld);
5674         }
5675       /* Do not walk TYPE_CANONICAL.  We do not stream it and thus do not
5676          and want not to reach unused types this way.  */
5677
5678       if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5679         {
5680           unsigned i;
5681           tree tem;
5682           FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5683             fld_worklist_push (TREE_TYPE (tem), fld);
5684           tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5685           if (tem
5686               /* The Java FE overloads BINFO_VIRTUALS for its own purpose.  */
5687               && TREE_CODE (tem) == TREE_LIST)
5688             do
5689               {
5690                 fld_worklist_push (TREE_VALUE (tem), fld);
5691                 tem = TREE_CHAIN (tem);
5692               }
5693             while (tem);
5694         }
5695       if (RECORD_OR_UNION_TYPE_P (t))
5696         {
5697           tree tem;
5698           /* Push all TYPE_FIELDS - there can be interleaving interesting
5699              and non-interesting things.  */
5700           tem = TYPE_FIELDS (t);
5701           while (tem)
5702             {
5703               if (TREE_CODE (tem) == FIELD_DECL
5704                   || (TREE_CODE (tem) == TYPE_DECL
5705                       && !DECL_IGNORED_P (tem)
5706                       && debug_info_level > DINFO_LEVEL_TERSE
5707                       && !is_redundant_typedef (tem)))
5708                 fld_worklist_push (tem, fld);
5709               tem = TREE_CHAIN (tem);
5710             }
5711         }
5712
5713       fld_worklist_push (TYPE_STUB_DECL (t), fld);
5714       *ws = 0;
5715     }
5716   else if (TREE_CODE (t) == BLOCK)
5717     {
5718       tree tem;
5719       for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5720         fld_worklist_push (tem, fld);
5721       for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5722         fld_worklist_push (tem, fld);
5723       fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5724     }
5725
5726   if (TREE_CODE (t) != IDENTIFIER_NODE
5727       && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5728     fld_worklist_push (TREE_TYPE (t), fld);
5729
5730   return NULL_TREE;
5731 }
5732
5733
5734 /* Find decls and types in T.  */
5735
5736 static void
5737 find_decls_types (tree t, struct free_lang_data_d *fld)
5738 {
5739   while (1)
5740     {
5741       if (!fld->pset->contains (t))
5742         walk_tree (&t, find_decls_types_r, fld, fld->pset);
5743       if (fld->worklist.is_empty ())
5744         break;
5745       t = fld->worklist.pop ();
5746     }
5747 }
5748
5749 /* Translate all the types in LIST with the corresponding runtime
5750    types.  */
5751
5752 static tree
5753 get_eh_types_for_runtime (tree list)
5754 {
5755   tree head, prev;
5756
5757   if (list == NULL_TREE)
5758     return NULL_TREE;
5759
5760   head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5761   prev = head;
5762   list = TREE_CHAIN (list);
5763   while (list)
5764     {
5765       tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5766       TREE_CHAIN (prev) = n;
5767       prev = TREE_CHAIN (prev);
5768       list = TREE_CHAIN (list);
5769     }
5770
5771   return head;
5772 }
5773
5774
5775 /* Find decls and types referenced in EH region R and store them in
5776    FLD->DECLS and FLD->TYPES.  */
5777
5778 static void
5779 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5780 {
5781   switch (r->type)
5782     {
5783     case ERT_CLEANUP:
5784       break;
5785
5786     case ERT_TRY:
5787       {
5788         eh_catch c;
5789
5790         /* The types referenced in each catch must first be changed to the
5791            EH types used at runtime.  This removes references to FE types
5792            in the region.  */
5793         for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5794           {
5795             c->type_list = get_eh_types_for_runtime (c->type_list);
5796             walk_tree (&c->type_list, find_decls_types_r, fld, fld->pset);
5797           }
5798       }
5799       break;
5800
5801     case ERT_ALLOWED_EXCEPTIONS:
5802       r->u.allowed.type_list
5803         = get_eh_types_for_runtime (r->u.allowed.type_list);
5804       walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, fld->pset);
5805       break;
5806
5807     case ERT_MUST_NOT_THROW:
5808       walk_tree (&r->u.must_not_throw.failure_decl,
5809                  find_decls_types_r, fld, fld->pset);
5810       break;
5811     }
5812 }
5813
5814
5815 /* Find decls and types referenced in cgraph node N and store them in
5816    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5817    look for *every* kind of DECL and TYPE node reachable from N,
5818    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5819    NAMESPACE_DECLs, etc).  */
5820
5821 static void
5822 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5823 {
5824   basic_block bb;
5825   struct function *fn;
5826   unsigned ix;
5827   tree t;
5828
5829   find_decls_types (n->decl, fld);
5830
5831   if (!gimple_has_body_p (n->decl))
5832     return;
5833
5834   gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5835
5836   fn = DECL_STRUCT_FUNCTION (n->decl);
5837
5838   /* Traverse locals. */
5839   FOR_EACH_LOCAL_DECL (fn, ix, t)
5840     find_decls_types (t, fld);
5841
5842   /* Traverse EH regions in FN.  */
5843   {
5844     eh_region r;
5845     FOR_ALL_EH_REGION_FN (r, fn)
5846       find_decls_types_in_eh_region (r, fld);
5847   }
5848
5849   /* Traverse every statement in FN.  */
5850   FOR_EACH_BB_FN (bb, fn)
5851     {
5852       gphi_iterator psi;
5853       gimple_stmt_iterator si;
5854       unsigned i;
5855
5856       for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5857         {
5858           gphi *phi = psi.phi ();
5859
5860           for (i = 0; i < gimple_phi_num_args (phi); i++)
5861             {
5862               tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5863               find_decls_types (*arg_p, fld);
5864             }
5865         }
5866
5867       for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5868         {
5869           gimple *stmt = gsi_stmt (si);
5870
5871           if (is_gimple_call (stmt))
5872             find_decls_types (gimple_call_fntype (stmt), fld);
5873
5874           for (i = 0; i < gimple_num_ops (stmt); i++)
5875             {
5876               tree arg = gimple_op (stmt, i);
5877               find_decls_types (arg, fld);
5878             }
5879         }
5880     }
5881 }
5882
5883
5884 /* Find decls and types referenced in varpool node N and store them in
5885    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5886    look for *every* kind of DECL and TYPE node reachable from N,
5887    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5888    NAMESPACE_DECLs, etc).  */
5889
5890 static void
5891 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5892 {
5893   find_decls_types (v->decl, fld);
5894 }
5895
5896 /* If T needs an assembler name, have one created for it.  */
5897
5898 void
5899 assign_assembler_name_if_neeeded (tree t)
5900 {
5901   if (need_assembler_name_p (t))
5902     {
5903       /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5904          diagnostics that use input_location to show locus
5905          information.  The problem here is that, at this point,
5906          input_location is generally anchored to the end of the file
5907          (since the parser is long gone), so we don't have a good
5908          position to pin it to.
5909
5910          To alleviate this problem, this uses the location of T's
5911          declaration.  Examples of this are
5912          testsuite/g++.dg/template/cond2.C and
5913          testsuite/g++.dg/template/pr35240.C.  */
5914       location_t saved_location = input_location;
5915       input_location = DECL_SOURCE_LOCATION (t);
5916
5917       decl_assembler_name (t);
5918
5919       input_location = saved_location;
5920     }
5921 }
5922
5923
5924 /* Free language specific information for every operand and expression
5925    in every node of the call graph.  This process operates in three stages:
5926
5927    1- Every callgraph node and varpool node is traversed looking for
5928       decls and types embedded in them.  This is a more exhaustive
5929       search than that done by find_referenced_vars, because it will
5930       also collect individual fields, decls embedded in types, etc.
5931
5932    2- All the decls found are sent to free_lang_data_in_decl.
5933
5934    3- All the types found are sent to free_lang_data_in_type.
5935
5936    The ordering between decls and types is important because
5937    free_lang_data_in_decl sets assembler names, which includes
5938    mangling.  So types cannot be freed up until assembler names have
5939    been set up.  */
5940
5941 static void
5942 free_lang_data_in_cgraph (void)
5943 {
5944   struct cgraph_node *n;
5945   varpool_node *v;
5946   struct free_lang_data_d fld;
5947   tree t;
5948   unsigned i;
5949   alias_pair *p;
5950
5951   /* Initialize sets and arrays to store referenced decls and types.  */
5952   fld.pset = new hash_set<tree>;
5953   fld.worklist.create (0);
5954   fld.decls.create (100);
5955   fld.types.create (100);
5956
5957   /* Find decls and types in the body of every function in the callgraph.  */
5958   FOR_EACH_FUNCTION (n)
5959     find_decls_types_in_node (n, &fld);
5960
5961   FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5962     find_decls_types (p->decl, &fld);
5963
5964   /* Find decls and types in every varpool symbol.  */
5965   FOR_EACH_VARIABLE (v)
5966     find_decls_types_in_var (v, &fld);
5967
5968   /* Set the assembler name on every decl found.  We need to do this
5969      now because free_lang_data_in_decl will invalidate data needed
5970      for mangling.  This breaks mangling on interdependent decls.  */
5971   FOR_EACH_VEC_ELT (fld.decls, i, t)
5972     assign_assembler_name_if_neeeded (t);
5973
5974   /* Traverse every decl found freeing its language data.  */
5975   FOR_EACH_VEC_ELT (fld.decls, i, t)
5976     free_lang_data_in_decl (t);
5977
5978   /* Traverse every type found freeing its language data.  */
5979   FOR_EACH_VEC_ELT (fld.types, i, t)
5980     free_lang_data_in_type (t);
5981   if (flag_checking)
5982     {
5983       FOR_EACH_VEC_ELT (fld.types, i, t)
5984         verify_type (t);
5985     }
5986
5987   delete fld.pset;
5988   fld.worklist.release ();
5989   fld.decls.release ();
5990   fld.types.release ();
5991 }
5992
5993
5994 /* Free resources that are used by FE but are not needed once they are done. */
5995
5996 static unsigned
5997 free_lang_data (void)
5998 {
5999   unsigned i;
6000
6001   /* If we are the LTO frontend we have freed lang-specific data already.  */
6002   if (in_lto_p
6003       || (!flag_generate_lto && !flag_generate_offload))
6004     return 0;
6005
6006   /* Allocate and assign alias sets to the standard integer types
6007      while the slots are still in the way the frontends generated them.  */
6008   for (i = 0; i < itk_none; ++i)
6009     if (integer_types[i])
6010       TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
6011
6012   /* Traverse the IL resetting language specific information for
6013      operands, expressions, etc.  */
6014   free_lang_data_in_cgraph ();
6015
6016   /* Create gimple variants for common types.  */
6017   ptrdiff_type_node = integer_type_node;
6018   fileptr_type_node = ptr_type_node;
6019
6020   /* Reset some langhooks.  Do not reset types_compatible_p, it may
6021      still be used indirectly via the get_alias_set langhook.  */
6022   lang_hooks.dwarf_name = lhd_dwarf_name;
6023   lang_hooks.decl_printable_name = gimple_decl_printable_name;
6024   lang_hooks.gimplify_expr = lhd_gimplify_expr;
6025
6026   /* We do not want the default decl_assembler_name implementation,
6027      rather if we have fixed everything we want a wrapper around it
6028      asserting that all non-local symbols already got their assembler
6029      name and only produce assembler names for local symbols.  Or rather
6030      make sure we never call decl_assembler_name on local symbols and
6031      devise a separate, middle-end private scheme for it.  */
6032
6033   /* Reset diagnostic machinery.  */
6034   tree_diagnostics_defaults (global_dc);
6035
6036   return 0;
6037 }
6038
6039
6040 namespace {
6041
6042 const pass_data pass_data_ipa_free_lang_data =
6043 {
6044   SIMPLE_IPA_PASS, /* type */
6045   "*free_lang_data", /* name */
6046   OPTGROUP_NONE, /* optinfo_flags */
6047   TV_IPA_FREE_LANG_DATA, /* tv_id */
6048   0, /* properties_required */
6049   0, /* properties_provided */
6050   0, /* properties_destroyed */
6051   0, /* todo_flags_start */
6052   0, /* todo_flags_finish */
6053 };
6054
6055 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
6056 {
6057 public:
6058   pass_ipa_free_lang_data (gcc::context *ctxt)
6059     : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
6060   {}
6061
6062   /* opt_pass methods: */
6063   virtual unsigned int execute (function *) { return free_lang_data (); }
6064
6065 }; // class pass_ipa_free_lang_data
6066
6067 } // anon namespace
6068
6069 simple_ipa_opt_pass *
6070 make_pass_ipa_free_lang_data (gcc::context *ctxt)
6071 {
6072   return new pass_ipa_free_lang_data (ctxt);
6073 }
6074
6075 /* The backbone of is_attribute_p().  ATTR_LEN is the string length of
6076    ATTR_NAME.  Also used internally by remove_attribute().  */
6077 bool
6078 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
6079 {
6080   size_t ident_len = IDENTIFIER_LENGTH (ident);
6081
6082   if (ident_len == attr_len)
6083     {
6084       if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
6085         return true;
6086     }
6087   else if (ident_len == attr_len + 4)
6088     {
6089       /* There is the possibility that ATTR is 'text' and IDENT is
6090          '__text__'.  */
6091       const char *p = IDENTIFIER_POINTER (ident);      
6092       if (p[0] == '_' && p[1] == '_'
6093           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
6094           && strncmp (attr_name, p + 2, attr_len) == 0)
6095         return true;
6096     }
6097
6098   return false;
6099 }
6100
6101 /* The backbone of lookup_attribute().  ATTR_LEN is the string length
6102    of ATTR_NAME, and LIST is not NULL_TREE.  */
6103 tree
6104 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
6105 {
6106   while (list)
6107     {
6108       size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6109
6110       if (ident_len == attr_len)
6111         {
6112           if (!strcmp (attr_name,
6113                        IDENTIFIER_POINTER (get_attribute_name (list))))
6114             break;
6115         }
6116       /* TODO: If we made sure that attributes were stored in the
6117          canonical form without '__...__' (ie, as in 'text' as opposed
6118          to '__text__') then we could avoid the following case.  */
6119       else if (ident_len == attr_len + 4)
6120         {
6121           const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6122           if (p[0] == '_' && p[1] == '_'
6123               && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
6124               && strncmp (attr_name, p + 2, attr_len) == 0)
6125             break;
6126         }
6127       list = TREE_CHAIN (list);
6128     }
6129
6130   return list;
6131 }
6132
6133 /* Given an attribute name ATTR_NAME and a list of attributes LIST,
6134    return a pointer to the attribute's list first element if the attribute
6135    starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
6136    '__text__').  */
6137
6138 tree
6139 private_lookup_attribute_by_prefix (const char *attr_name, size_t attr_len,
6140                                     tree list)
6141 {
6142   while (list)
6143     {
6144       size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6145
6146       if (attr_len > ident_len)
6147         {
6148           list = TREE_CHAIN (list);
6149           continue;
6150         }
6151
6152       const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6153
6154       if (strncmp (attr_name, p, attr_len) == 0)
6155         break;
6156
6157       /* TODO: If we made sure that attributes were stored in the
6158          canonical form without '__...__' (ie, as in 'text' as opposed
6159          to '__text__') then we could avoid the following case.  */
6160       if (p[0] == '_' && p[1] == '_' &&
6161           strncmp (attr_name, p + 2, attr_len) == 0)
6162         break;
6163
6164       list = TREE_CHAIN (list);
6165     }
6166
6167   return list;
6168 }
6169
6170
6171 /* A variant of lookup_attribute() that can be used with an identifier
6172    as the first argument, and where the identifier can be either
6173    'text' or '__text__'.
6174
6175    Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
6176    return a pointer to the attribute's list element if the attribute
6177    is part of the list, or NULL_TREE if not found.  If the attribute
6178    appears more than once, this only returns the first occurrence; the
6179    TREE_CHAIN of the return value should be passed back in if further
6180    occurrences are wanted.  ATTR_IDENTIFIER must be an identifier but
6181    can be in the form 'text' or '__text__'.  */
6182 static tree
6183 lookup_ident_attribute (tree attr_identifier, tree list)
6184 {
6185   gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
6186
6187   while (list)
6188     {
6189       gcc_checking_assert (TREE_CODE (get_attribute_name (list))
6190                            == IDENTIFIER_NODE);
6191
6192       if (cmp_attrib_identifiers (attr_identifier,
6193                                   get_attribute_name (list)))
6194         /* Found it.  */
6195         break;
6196       list = TREE_CHAIN (list);
6197     }
6198
6199   return list;
6200 }
6201
6202 /* Remove any instances of attribute ATTR_NAME in LIST and return the
6203    modified list.  */
6204
6205 tree
6206 remove_attribute (const char *attr_name, tree list)
6207 {
6208   tree *p;
6209   size_t attr_len = strlen (attr_name);
6210
6211   gcc_checking_assert (attr_name[0] != '_');
6212
6213   for (p = &list; *p; )
6214     {
6215       tree l = *p;
6216       /* TODO: If we were storing attributes in normalized form, here
6217          we could use a simple strcmp().  */
6218       if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
6219         *p = TREE_CHAIN (l);
6220       else
6221         p = &TREE_CHAIN (l);
6222     }
6223
6224   return list;
6225 }
6226
6227 /* Return an attribute list that is the union of a1 and a2.  */
6228
6229 tree
6230 merge_attributes (tree a1, tree a2)
6231 {
6232   tree attributes;
6233
6234   /* Either one unset?  Take the set one.  */
6235
6236   if ((attributes = a1) == 0)
6237     attributes = a2;
6238
6239   /* One that completely contains the other?  Take it.  */
6240
6241   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
6242     {
6243       if (attribute_list_contained (a2, a1))
6244         attributes = a2;
6245       else
6246         {
6247           /* Pick the longest list, and hang on the other list.  */
6248
6249           if (list_length (a1) < list_length (a2))
6250             attributes = a2, a2 = a1;
6251
6252           for (; a2 != 0; a2 = TREE_CHAIN (a2))
6253             {
6254               tree a;
6255               for (a = lookup_ident_attribute (get_attribute_name (a2),
6256                                                attributes);
6257                    a != NULL_TREE && !attribute_value_equal (a, a2);
6258                    a = lookup_ident_attribute (get_attribute_name (a2),
6259                                                TREE_CHAIN (a)))
6260                 ;
6261               if (a == NULL_TREE)
6262                 {
6263                   a1 = copy_node (a2);
6264                   TREE_CHAIN (a1) = attributes;
6265                   attributes = a1;
6266                 }
6267             }
6268         }
6269     }
6270   return attributes;
6271 }
6272
6273 /* Given types T1 and T2, merge their attributes and return
6274   the result.  */
6275
6276 tree
6277 merge_type_attributes (tree t1, tree t2)
6278 {
6279   return merge_attributes (TYPE_ATTRIBUTES (t1),
6280                            TYPE_ATTRIBUTES (t2));
6281 }
6282
6283 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
6284    the result.  */
6285
6286 tree
6287 merge_decl_attributes (tree olddecl, tree newdecl)
6288 {
6289   return merge_attributes (DECL_ATTRIBUTES (olddecl),
6290                            DECL_ATTRIBUTES (newdecl));
6291 }
6292
6293 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
6294
6295 /* Specialization of merge_decl_attributes for various Windows targets.
6296
6297    This handles the following situation:
6298
6299      __declspec (dllimport) int foo;
6300      int foo;
6301
6302    The second instance of `foo' nullifies the dllimport.  */
6303
6304 tree
6305 merge_dllimport_decl_attributes (tree old, tree new_tree)
6306 {
6307   tree a;
6308   int delete_dllimport_p = 1;
6309
6310   /* What we need to do here is remove from `old' dllimport if it doesn't
6311      appear in `new'.  dllimport behaves like extern: if a declaration is
6312      marked dllimport and a definition appears later, then the object
6313      is not dllimport'd.  We also remove a `new' dllimport if the old list
6314      contains dllexport:  dllexport always overrides dllimport, regardless
6315      of the order of declaration.  */
6316   if (!VAR_OR_FUNCTION_DECL_P (new_tree))
6317     delete_dllimport_p = 0;
6318   else if (DECL_DLLIMPORT_P (new_tree)
6319            && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
6320     {
6321       DECL_DLLIMPORT_P (new_tree) = 0;
6322       warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
6323               "dllimport ignored", new_tree);
6324     }
6325   else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
6326     {
6327       /* Warn about overriding a symbol that has already been used, e.g.:
6328            extern int __attribute__ ((dllimport)) foo;
6329            int* bar () {return &foo;}
6330            int foo;
6331       */
6332       if (TREE_USED (old))
6333         {
6334           warning (0, "%q+D redeclared without dllimport attribute "
6335                    "after being referenced with dll linkage", new_tree);
6336           /* If we have used a variable's address with dllimport linkage,
6337               keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
6338               decl may already have had TREE_CONSTANT computed.
6339               We still remove the attribute so that assembler code refers
6340               to '&foo rather than '_imp__foo'.  */
6341           if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
6342             DECL_DLLIMPORT_P (new_tree) = 1;
6343         }
6344
6345       /* Let an inline definition silently override the external reference,
6346          but otherwise warn about attribute inconsistency.  */
6347       else if (TREE_CODE (new_tree) == VAR_DECL
6348                || !DECL_DECLARED_INLINE_P (new_tree))
6349         warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
6350                   "previous dllimport ignored", new_tree);
6351     }
6352   else
6353     delete_dllimport_p = 0;
6354
6355   a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
6356
6357   if (delete_dllimport_p)
6358     a = remove_attribute ("dllimport", a);
6359
6360   return a;
6361 }
6362
6363 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
6364    struct attribute_spec.handler.  */
6365
6366 tree
6367 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
6368                       bool *no_add_attrs)
6369 {
6370   tree node = *pnode;
6371   bool is_dllimport;
6372
6373   /* These attributes may apply to structure and union types being created,
6374      but otherwise should pass to the declaration involved.  */
6375   if (!DECL_P (node))
6376     {
6377       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
6378                    | (int) ATTR_FLAG_ARRAY_NEXT))
6379         {
6380           *no_add_attrs = true;
6381           return tree_cons (name, args, NULL_TREE);
6382         }
6383       if (TREE_CODE (node) == RECORD_TYPE
6384           || TREE_CODE (node) == UNION_TYPE)
6385         {
6386           node = TYPE_NAME (node);
6387           if (!node)
6388             return NULL_TREE;
6389         }
6390       else
6391         {
6392           warning (OPT_Wattributes, "%qE attribute ignored",
6393                    name);
6394           *no_add_attrs = true;
6395           return NULL_TREE;
6396         }
6397     }
6398
6399   if (TREE_CODE (node) != FUNCTION_DECL
6400       && TREE_CODE (node) != VAR_DECL
6401       && TREE_CODE (node) != TYPE_DECL)
6402     {
6403       *no_add_attrs = true;
6404       warning (OPT_Wattributes, "%qE attribute ignored",
6405                name);
6406       return NULL_TREE;
6407     }
6408
6409   if (TREE_CODE (node) == TYPE_DECL
6410       && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
6411       && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
6412     {
6413       *no_add_attrs = true;
6414       warning (OPT_Wattributes, "%qE attribute ignored",
6415                name);
6416       return NULL_TREE;
6417     }
6418
6419   is_dllimport = is_attribute_p ("dllimport", name);
6420
6421   /* Report error on dllimport ambiguities seen now before they cause
6422      any damage.  */
6423   if (is_dllimport)
6424     {
6425       /* Honor any target-specific overrides. */
6426       if (!targetm.valid_dllimport_attribute_p (node))
6427         *no_add_attrs = true;
6428
6429      else if (TREE_CODE (node) == FUNCTION_DECL
6430                 && DECL_DECLARED_INLINE_P (node))
6431         {
6432           warning (OPT_Wattributes, "inline function %q+D declared as "
6433                   " dllimport: attribute ignored", node);
6434           *no_add_attrs = true;
6435         }
6436       /* Like MS, treat definition of dllimported variables and
6437          non-inlined functions on declaration as syntax errors. */
6438      else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6439         {
6440           error ("function %q+D definition is marked dllimport", node);
6441           *no_add_attrs = true;
6442         }
6443
6444      else if (TREE_CODE (node) == VAR_DECL)
6445         {
6446           if (DECL_INITIAL (node))
6447             {
6448               error ("variable %q+D definition is marked dllimport",
6449                      node);
6450               *no_add_attrs = true;
6451             }
6452
6453           /* `extern' needn't be specified with dllimport.
6454              Specify `extern' now and hope for the best.  Sigh.  */
6455           DECL_EXTERNAL (node) = 1;
6456           /* Also, implicitly give dllimport'd variables declared within
6457              a function global scope, unless declared static.  */
6458           if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6459             TREE_PUBLIC (node) = 1;
6460         }
6461
6462       if (*no_add_attrs == false)
6463         DECL_DLLIMPORT_P (node) = 1;
6464     }
6465   else if (TREE_CODE (node) == FUNCTION_DECL
6466            && DECL_DECLARED_INLINE_P (node)
6467            && flag_keep_inline_dllexport)
6468     /* An exported function, even if inline, must be emitted.  */
6469     DECL_EXTERNAL (node) = 0;
6470
6471   /*  Report error if symbol is not accessible at global scope.  */
6472   if (!TREE_PUBLIC (node)
6473       && (TREE_CODE (node) == VAR_DECL
6474           || TREE_CODE (node) == FUNCTION_DECL))
6475     {
6476       error ("external linkage required for symbol %q+D because of "
6477              "%qE attribute", node, name);
6478       *no_add_attrs = true;
6479     }
6480
6481   /* A dllexport'd entity must have default visibility so that other
6482      program units (shared libraries or the main executable) can see
6483      it.  A dllimport'd entity must have default visibility so that
6484      the linker knows that undefined references within this program
6485      unit can be resolved by the dynamic linker.  */
6486   if (!*no_add_attrs)
6487     {
6488       if (DECL_VISIBILITY_SPECIFIED (node)
6489           && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6490         error ("%qE implies default visibility, but %qD has already "
6491                "been declared with a different visibility",
6492                name, node);
6493       DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6494       DECL_VISIBILITY_SPECIFIED (node) = 1;
6495     }
6496
6497   return NULL_TREE;
6498 }
6499
6500 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
6501 \f
6502 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6503    of the various TYPE_QUAL values.  */
6504
6505 static void
6506 set_type_quals (tree type, int type_quals)
6507 {
6508   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6509   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6510   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6511   TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6512   TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6513 }
6514
6515 /* Returns true iff unqualified CAND and BASE are equivalent.  */
6516
6517 bool
6518 check_base_type (const_tree cand, const_tree base)
6519 {
6520   return (TYPE_NAME (cand) == TYPE_NAME (base)
6521           /* Apparently this is needed for Objective-C.  */
6522           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6523           /* Check alignment.  */
6524           && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6525           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6526                                    TYPE_ATTRIBUTES (base)));
6527 }
6528
6529 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS.  */
6530
6531 bool
6532 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6533 {
6534   return (TYPE_QUALS (cand) == type_quals
6535           && check_base_type (cand, base));
6536 }
6537
6538 /* Returns true iff CAND is equivalent to BASE with ALIGN.  */
6539
6540 static bool
6541 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6542 {
6543   return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6544           && TYPE_NAME (cand) == TYPE_NAME (base)
6545           /* Apparently this is needed for Objective-C.  */
6546           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6547           /* Check alignment.  */
6548           && TYPE_ALIGN (cand) == align
6549           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6550                                    TYPE_ATTRIBUTES (base)));
6551 }
6552
6553 /* This function checks to see if TYPE matches the size one of the built-in 
6554    atomic types, and returns that core atomic type.  */
6555
6556 static tree
6557 find_atomic_core_type (tree type)
6558 {
6559   tree base_atomic_type;
6560
6561   /* Only handle complete types.  */
6562   if (TYPE_SIZE (type) == NULL_TREE)
6563     return NULL_TREE;
6564
6565   HOST_WIDE_INT type_size = tree_to_uhwi (TYPE_SIZE (type));
6566   switch (type_size)
6567     {
6568     case 8:
6569       base_atomic_type = atomicQI_type_node;
6570       break;
6571
6572     case 16:
6573       base_atomic_type = atomicHI_type_node;
6574       break;
6575
6576     case 32:
6577       base_atomic_type = atomicSI_type_node;
6578       break;
6579
6580     case 64:
6581       base_atomic_type = atomicDI_type_node;
6582       break;
6583
6584     case 128:
6585       base_atomic_type = atomicTI_type_node;
6586       break;
6587
6588     default:
6589       base_atomic_type = NULL_TREE;
6590     }
6591
6592   return base_atomic_type;
6593 }
6594
6595 /* Return a version of the TYPE, qualified as indicated by the
6596    TYPE_QUALS, if one exists.  If no qualified version exists yet,
6597    return NULL_TREE.  */
6598
6599 tree
6600 get_qualified_type (tree type, int type_quals)
6601 {
6602   tree t;
6603
6604   if (TYPE_QUALS (type) == type_quals)
6605     return type;
6606
6607   /* Search the chain of variants to see if there is already one there just
6608      like the one we need to have.  If so, use that existing one.  We must
6609      preserve the TYPE_NAME, since there is code that depends on this.  */
6610   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6611     if (check_qualified_type (t, type, type_quals))
6612       return t;
6613
6614   return NULL_TREE;
6615 }
6616
6617 /* Like get_qualified_type, but creates the type if it does not
6618    exist.  This function never returns NULL_TREE.  */
6619
6620 tree
6621 build_qualified_type (tree type, int type_quals)
6622 {
6623   tree t;
6624
6625   /* See if we already have the appropriate qualified variant.  */
6626   t = get_qualified_type (type, type_quals);
6627
6628   /* If not, build it.  */
6629   if (!t)
6630     {
6631       t = build_variant_type_copy (type);
6632       set_type_quals (t, type_quals);
6633
6634       if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6635         {
6636           /* See if this object can map to a basic atomic type.  */
6637           tree atomic_type = find_atomic_core_type (type);
6638           if (atomic_type)
6639             {
6640               /* Ensure the alignment of this type is compatible with
6641                  the required alignment of the atomic type.  */
6642               if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6643                 TYPE_ALIGN (t) = TYPE_ALIGN (atomic_type);
6644             }
6645         }
6646
6647       if (TYPE_STRUCTURAL_EQUALITY_P (type))
6648         /* Propagate structural equality. */
6649         SET_TYPE_STRUCTURAL_EQUALITY (t);
6650       else if (TYPE_CANONICAL (type) != type)
6651         /* Build the underlying canonical type, since it is different
6652            from TYPE. */
6653         {
6654           tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
6655           TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
6656         }
6657       else
6658         /* T is its own canonical type. */
6659         TYPE_CANONICAL (t) = t;
6660
6661     }
6662
6663   return t;
6664 }
6665
6666 /* Create a variant of type T with alignment ALIGN.  */
6667
6668 tree
6669 build_aligned_type (tree type, unsigned int align)
6670 {
6671   tree t;
6672
6673   if (TYPE_PACKED (type)
6674       || TYPE_ALIGN (type) == align)
6675     return type;
6676
6677   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6678     if (check_aligned_type (t, type, align))
6679       return t;
6680
6681   t = build_variant_type_copy (type);
6682   TYPE_ALIGN (t) = align;
6683
6684   return t;
6685 }
6686
6687 /* Create a new distinct copy of TYPE.  The new type is made its own
6688    MAIN_VARIANT. If TYPE requires structural equality checks, the
6689    resulting type requires structural equality checks; otherwise, its
6690    TYPE_CANONICAL points to itself. */
6691
6692 tree
6693 build_distinct_type_copy (tree type)
6694 {
6695   tree t = copy_node (type);
6696
6697   TYPE_POINTER_TO (t) = 0;
6698   TYPE_REFERENCE_TO (t) = 0;
6699
6700   /* Set the canonical type either to a new equivalence class, or
6701      propagate the need for structural equality checks. */
6702   if (TYPE_STRUCTURAL_EQUALITY_P (type))
6703     SET_TYPE_STRUCTURAL_EQUALITY (t);
6704   else
6705     TYPE_CANONICAL (t) = t;
6706
6707   /* Make it its own variant.  */
6708   TYPE_MAIN_VARIANT (t) = t;
6709   TYPE_NEXT_VARIANT (t) = 0;
6710
6711   /* We do not record methods in type copies nor variants
6712      so we do not need to keep them up to date when new method
6713      is inserted.  */
6714   if (RECORD_OR_UNION_TYPE_P (t))
6715     TYPE_METHODS (t) = NULL_TREE;
6716
6717   /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6718      whose TREE_TYPE is not t.  This can also happen in the Ada
6719      frontend when using subtypes.  */
6720
6721   return t;
6722 }
6723
6724 /* Create a new variant of TYPE, equivalent but distinct.  This is so
6725    the caller can modify it. TYPE_CANONICAL for the return type will
6726    be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6727    are considered equal by the language itself (or that both types
6728    require structural equality checks). */
6729
6730 tree
6731 build_variant_type_copy (tree type)
6732 {
6733   tree t, m = TYPE_MAIN_VARIANT (type);
6734
6735   t = build_distinct_type_copy (type);
6736
6737   /* Since we're building a variant, assume that it is a non-semantic
6738      variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6739   TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6740   /* Type variants have no alias set defined.  */
6741   TYPE_ALIAS_SET (t) = -1;
6742
6743   /* Add the new type to the chain of variants of TYPE.  */
6744   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6745   TYPE_NEXT_VARIANT (m) = t;
6746   TYPE_MAIN_VARIANT (t) = m;
6747
6748   return t;
6749 }
6750 \f
6751 /* Return true if the from tree in both tree maps are equal.  */
6752
6753 int
6754 tree_map_base_eq (const void *va, const void *vb)
6755 {
6756   const struct tree_map_base  *const a = (const struct tree_map_base *) va,
6757     *const b = (const struct tree_map_base *) vb;
6758   return (a->from == b->from);
6759 }
6760
6761 /* Hash a from tree in a tree_base_map.  */
6762
6763 unsigned int
6764 tree_map_base_hash (const void *item)
6765 {
6766   return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6767 }
6768
6769 /* Return true if this tree map structure is marked for garbage collection
6770    purposes.  We simply return true if the from tree is marked, so that this
6771    structure goes away when the from tree goes away.  */
6772
6773 int
6774 tree_map_base_marked_p (const void *p)
6775 {
6776   return ggc_marked_p (((const struct tree_map_base *) p)->from);
6777 }
6778
6779 /* Hash a from tree in a tree_map.  */
6780
6781 unsigned int
6782 tree_map_hash (const void *item)
6783 {
6784   return (((const struct tree_map *) item)->hash);
6785 }
6786
6787 /* Hash a from tree in a tree_decl_map.  */
6788
6789 unsigned int
6790 tree_decl_map_hash (const void *item)
6791 {
6792   return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6793 }
6794
6795 /* Return the initialization priority for DECL.  */
6796
6797 priority_type
6798 decl_init_priority_lookup (tree decl)
6799 {
6800   symtab_node *snode = symtab_node::get (decl);
6801
6802   if (!snode)
6803     return DEFAULT_INIT_PRIORITY;
6804   return
6805     snode->get_init_priority ();
6806 }
6807
6808 /* Return the finalization priority for DECL.  */
6809
6810 priority_type
6811 decl_fini_priority_lookup (tree decl)
6812 {
6813   cgraph_node *node = cgraph_node::get (decl);
6814
6815   if (!node)
6816     return DEFAULT_INIT_PRIORITY;
6817   return
6818     node->get_fini_priority ();
6819 }
6820
6821 /* Set the initialization priority for DECL to PRIORITY.  */
6822
6823 void
6824 decl_init_priority_insert (tree decl, priority_type priority)
6825 {
6826   struct symtab_node *snode;
6827
6828   if (priority == DEFAULT_INIT_PRIORITY)
6829     {
6830       snode = symtab_node::get (decl);
6831       if (!snode)
6832         return;
6833     }
6834   else if (TREE_CODE (decl) == VAR_DECL)
6835     snode = varpool_node::get_create (decl);
6836   else
6837     snode = cgraph_node::get_create (decl);
6838   snode->set_init_priority (priority);
6839 }
6840
6841 /* Set the finalization priority for DECL to PRIORITY.  */
6842
6843 void
6844 decl_fini_priority_insert (tree decl, priority_type priority)
6845 {
6846   struct cgraph_node *node;
6847
6848   if (priority == DEFAULT_INIT_PRIORITY)
6849     {
6850       node = cgraph_node::get (decl);
6851       if (!node)
6852         return;
6853     }
6854   else
6855     node = cgraph_node::get_create (decl);
6856   node->set_fini_priority (priority);
6857 }
6858
6859 /* Print out the statistics for the DECL_DEBUG_EXPR hash table.  */
6860
6861 static void
6862 print_debug_expr_statistics (void)
6863 {
6864   fprintf (stderr, "DECL_DEBUG_EXPR  hash: size %ld, %ld elements, %f collisions\n",
6865            (long) debug_expr_for_decl->size (),
6866            (long) debug_expr_for_decl->elements (),
6867            debug_expr_for_decl->collisions ());
6868 }
6869
6870 /* Print out the statistics for the DECL_VALUE_EXPR hash table.  */
6871
6872 static void
6873 print_value_expr_statistics (void)
6874 {
6875   fprintf (stderr, "DECL_VALUE_EXPR  hash: size %ld, %ld elements, %f collisions\n",
6876            (long) value_expr_for_decl->size (),
6877            (long) value_expr_for_decl->elements (),
6878            value_expr_for_decl->collisions ());
6879 }
6880
6881 /* Lookup a debug expression for FROM, and return it if we find one.  */
6882
6883 tree
6884 decl_debug_expr_lookup (tree from)
6885 {
6886   struct tree_decl_map *h, in;
6887   in.base.from = from;
6888
6889   h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6890   if (h)
6891     return h->to;
6892   return NULL_TREE;
6893 }
6894
6895 /* Insert a mapping FROM->TO in the debug expression hashtable.  */
6896
6897 void
6898 decl_debug_expr_insert (tree from, tree to)
6899 {
6900   struct tree_decl_map *h;
6901
6902   h = ggc_alloc<tree_decl_map> ();
6903   h->base.from = from;
6904   h->to = to;
6905   *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6906 }
6907
6908 /* Lookup a value expression for FROM, and return it if we find one.  */
6909
6910 tree
6911 decl_value_expr_lookup (tree from)
6912 {
6913   struct tree_decl_map *h, in;
6914   in.base.from = from;
6915
6916   h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6917   if (h)
6918     return h->to;
6919   return NULL_TREE;
6920 }
6921
6922 /* Insert a mapping FROM->TO in the value expression hashtable.  */
6923
6924 void
6925 decl_value_expr_insert (tree from, tree to)
6926 {
6927   struct tree_decl_map *h;
6928
6929   h = ggc_alloc<tree_decl_map> ();
6930   h->base.from = from;
6931   h->to = to;
6932   *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6933 }
6934
6935 /* Lookup a vector of debug arguments for FROM, and return it if we
6936    find one.  */
6937
6938 vec<tree, va_gc> **
6939 decl_debug_args_lookup (tree from)
6940 {
6941   struct tree_vec_map *h, in;
6942
6943   if (!DECL_HAS_DEBUG_ARGS_P (from))
6944     return NULL;
6945   gcc_checking_assert (debug_args_for_decl != NULL);
6946   in.base.from = from;
6947   h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6948   if (h)
6949     return &h->to;
6950   return NULL;
6951 }
6952
6953 /* Insert a mapping FROM->empty vector of debug arguments in the value
6954    expression hashtable.  */
6955
6956 vec<tree, va_gc> **
6957 decl_debug_args_insert (tree from)
6958 {
6959   struct tree_vec_map *h;
6960   tree_vec_map **loc;
6961
6962   if (DECL_HAS_DEBUG_ARGS_P (from))
6963     return decl_debug_args_lookup (from);
6964   if (debug_args_for_decl == NULL)
6965     debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6966   h = ggc_alloc<tree_vec_map> ();
6967   h->base.from = from;
6968   h->to = NULL;
6969   loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6970   *loc = h;
6971   DECL_HAS_DEBUG_ARGS_P (from) = 1;
6972   return &h->to;
6973 }
6974
6975 /* Hashing of types so that we don't make duplicates.
6976    The entry point is `type_hash_canon'.  */
6977
6978 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
6979    with types in the TREE_VALUE slots), by adding the hash codes
6980    of the individual types.  */
6981
6982 static void
6983 type_hash_list (const_tree list, inchash::hash &hstate)
6984 {
6985   const_tree tail;
6986
6987   for (tail = list; tail; tail = TREE_CHAIN (tail))
6988     if (TREE_VALUE (tail) != error_mark_node)
6989       hstate.add_object (TYPE_HASH (TREE_VALUE (tail)));
6990 }
6991
6992 /* These are the Hashtable callback functions.  */
6993
6994 /* Returns true iff the types are equivalent.  */
6995
6996 bool
6997 type_cache_hasher::equal (type_hash *a, type_hash *b)
6998 {
6999   /* First test the things that are the same for all types.  */
7000   if (a->hash != b->hash
7001       || TREE_CODE (a->type) != TREE_CODE (b->type)
7002       || TREE_TYPE (a->type) != TREE_TYPE (b->type)
7003       || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
7004                                  TYPE_ATTRIBUTES (b->type))
7005       || (TREE_CODE (a->type) != COMPLEX_TYPE
7006           && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
7007     return 0;
7008
7009   /* Be careful about comparing arrays before and after the element type
7010      has been completed; don't compare TYPE_ALIGN unless both types are
7011      complete.  */
7012   if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
7013       && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
7014           || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
7015     return 0;
7016
7017   switch (TREE_CODE (a->type))
7018     {
7019     case VOID_TYPE:
7020     case COMPLEX_TYPE:
7021     case POINTER_TYPE:
7022     case REFERENCE_TYPE:
7023     case NULLPTR_TYPE:
7024       return 1;
7025
7026     case VECTOR_TYPE:
7027       return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
7028
7029     case ENUMERAL_TYPE:
7030       if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
7031           && !(TYPE_VALUES (a->type)
7032                && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
7033                && TYPE_VALUES (b->type)
7034                && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
7035                && type_list_equal (TYPE_VALUES (a->type),
7036                                    TYPE_VALUES (b->type))))
7037         return 0;
7038
7039       /* ... fall through ... */
7040
7041     case INTEGER_TYPE:
7042     case REAL_TYPE:
7043     case BOOLEAN_TYPE:
7044       if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
7045         return false;
7046       return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
7047                || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
7048                                       TYPE_MAX_VALUE (b->type)))
7049               && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
7050                   || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
7051                                          TYPE_MIN_VALUE (b->type))));
7052
7053     case FIXED_POINT_TYPE:
7054       return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
7055
7056     case OFFSET_TYPE:
7057       return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
7058
7059     case METHOD_TYPE:
7060       if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
7061           && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7062               || (TYPE_ARG_TYPES (a->type)
7063                   && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7064                   && TYPE_ARG_TYPES (b->type)
7065                   && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7066                   && type_list_equal (TYPE_ARG_TYPES (a->type),
7067                                       TYPE_ARG_TYPES (b->type)))))
7068         break;
7069       return 0;
7070     case ARRAY_TYPE:
7071       return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
7072
7073     case RECORD_TYPE:
7074     case UNION_TYPE:
7075     case QUAL_UNION_TYPE:
7076       return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
7077               || (TYPE_FIELDS (a->type)
7078                   && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
7079                   && TYPE_FIELDS (b->type)
7080                   && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
7081                   && type_list_equal (TYPE_FIELDS (a->type),
7082                                       TYPE_FIELDS (b->type))));
7083
7084     case FUNCTION_TYPE:
7085       if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7086           || (TYPE_ARG_TYPES (a->type)
7087               && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7088               && TYPE_ARG_TYPES (b->type)
7089               && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7090               && type_list_equal (TYPE_ARG_TYPES (a->type),
7091                                   TYPE_ARG_TYPES (b->type))))
7092         break;
7093       return 0;
7094
7095     default:
7096       return 0;
7097     }
7098
7099   if (lang_hooks.types.type_hash_eq != NULL)
7100     return lang_hooks.types.type_hash_eq (a->type, b->type);
7101
7102   return 1;
7103 }
7104
7105 /* Given TYPE, and HASHCODE its hash code, return the canonical
7106    object for an identical type if one already exists.
7107    Otherwise, return TYPE, and record it as the canonical object.
7108
7109    To use this function, first create a type of the sort you want.
7110    Then compute its hash code from the fields of the type that
7111    make it different from other similar types.
7112    Then call this function and use the value.  */
7113
7114 tree
7115 type_hash_canon (unsigned int hashcode, tree type)
7116 {
7117   type_hash in;
7118   type_hash **loc;
7119
7120   /* The hash table only contains main variants, so ensure that's what we're
7121      being passed.  */
7122   gcc_assert (TYPE_MAIN_VARIANT (type) == type);
7123
7124   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
7125      must call that routine before comparing TYPE_ALIGNs.  */
7126   layout_type (type);
7127
7128   in.hash = hashcode;
7129   in.type = type;
7130
7131   loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
7132   if (*loc)
7133     {
7134       tree t1 = ((type_hash *) *loc)->type;
7135       gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
7136       free_node (type);
7137       return t1;
7138     }
7139   else
7140     {
7141       struct type_hash *h;
7142
7143       h = ggc_alloc<type_hash> ();
7144       h->hash = hashcode;
7145       h->type = type;
7146       *loc = h;
7147
7148       return type;
7149     }
7150 }
7151
7152 static void
7153 print_type_hash_statistics (void)
7154 {
7155   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
7156            (long) type_hash_table->size (),
7157            (long) type_hash_table->elements (),
7158            type_hash_table->collisions ());
7159 }
7160
7161 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
7162    with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
7163    by adding the hash codes of the individual attributes.  */
7164
7165 static void
7166 attribute_hash_list (const_tree list, inchash::hash &hstate)
7167 {
7168   const_tree tail;
7169
7170   for (tail = list; tail; tail = TREE_CHAIN (tail))
7171     /* ??? Do we want to add in TREE_VALUE too? */
7172     hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (tail)));
7173 }
7174
7175 /* Given two lists of attributes, return true if list l2 is
7176    equivalent to l1.  */
7177
7178 int
7179 attribute_list_equal (const_tree l1, const_tree l2)
7180 {
7181   if (l1 == l2)
7182     return 1;
7183
7184   return attribute_list_contained (l1, l2)
7185          && attribute_list_contained (l2, l1);
7186 }
7187
7188 /* Given two lists of attributes, return true if list L2 is
7189    completely contained within L1.  */
7190 /* ??? This would be faster if attribute names were stored in a canonicalized
7191    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
7192    must be used to show these elements are equivalent (which they are).  */
7193 /* ??? It's not clear that attributes with arguments will always be handled
7194    correctly.  */
7195
7196 int
7197 attribute_list_contained (const_tree l1, const_tree l2)
7198 {
7199   const_tree t1, t2;
7200
7201   /* First check the obvious, maybe the lists are identical.  */
7202   if (l1 == l2)
7203     return 1;
7204
7205   /* Maybe the lists are similar.  */
7206   for (t1 = l1, t2 = l2;
7207        t1 != 0 && t2 != 0
7208         && get_attribute_name (t1) == get_attribute_name (t2)
7209         && TREE_VALUE (t1) == TREE_VALUE (t2);
7210        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7211     ;
7212
7213   /* Maybe the lists are equal.  */
7214   if (t1 == 0 && t2 == 0)
7215     return 1;
7216
7217   for (; t2 != 0; t2 = TREE_CHAIN (t2))
7218     {
7219       const_tree attr;
7220       /* This CONST_CAST is okay because lookup_attribute does not
7221          modify its argument and the return value is assigned to a
7222          const_tree.  */
7223       for (attr = lookup_ident_attribute (get_attribute_name (t2),
7224                                           CONST_CAST_TREE (l1));
7225            attr != NULL_TREE && !attribute_value_equal (t2, attr);
7226            attr = lookup_ident_attribute (get_attribute_name (t2),
7227                                           TREE_CHAIN (attr)))
7228         ;
7229
7230       if (attr == NULL_TREE)
7231         return 0;
7232     }
7233
7234   return 1;
7235 }
7236
7237 /* Given two lists of types
7238    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7239    return 1 if the lists contain the same types in the same order.
7240    Also, the TREE_PURPOSEs must match.  */
7241
7242 int
7243 type_list_equal (const_tree l1, const_tree l2)
7244 {
7245   const_tree t1, t2;
7246
7247   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7248     if (TREE_VALUE (t1) != TREE_VALUE (t2)
7249         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7250             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7251                   && (TREE_TYPE (TREE_PURPOSE (t1))
7252                       == TREE_TYPE (TREE_PURPOSE (t2))))))
7253       return 0;
7254
7255   return t1 == t2;
7256 }
7257
7258 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7259    given by TYPE.  If the argument list accepts variable arguments,
7260    then this function counts only the ordinary arguments.  */
7261
7262 int
7263 type_num_arguments (const_tree type)
7264 {
7265   int i = 0;
7266   tree t;
7267
7268   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7269     /* If the function does not take a variable number of arguments,
7270        the last element in the list will have type `void'.  */
7271     if (VOID_TYPE_P (TREE_VALUE (t)))
7272       break;
7273     else
7274       ++i;
7275
7276   return i;
7277 }
7278
7279 /* Nonzero if integer constants T1 and T2
7280    represent the same constant value.  */
7281
7282 int
7283 tree_int_cst_equal (const_tree t1, const_tree t2)
7284 {
7285   if (t1 == t2)
7286     return 1;
7287
7288   if (t1 == 0 || t2 == 0)
7289     return 0;
7290
7291   if (TREE_CODE (t1) == INTEGER_CST
7292       && TREE_CODE (t2) == INTEGER_CST
7293       && wi::to_widest (t1) == wi::to_widest (t2))
7294     return 1;
7295
7296   return 0;
7297 }
7298
7299 /* Return true if T is an INTEGER_CST whose numerical value (extended
7300    according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  */
7301
7302 bool
7303 tree_fits_shwi_p (const_tree t)
7304 {
7305   return (t != NULL_TREE
7306           && TREE_CODE (t) == INTEGER_CST
7307           && wi::fits_shwi_p (wi::to_widest (t)));
7308 }
7309
7310 /* Return true if T is an INTEGER_CST whose numerical value (extended
7311    according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  */
7312
7313 bool
7314 tree_fits_uhwi_p (const_tree t)
7315 {
7316   return (t != NULL_TREE
7317           && TREE_CODE (t) == INTEGER_CST
7318           && wi::fits_uhwi_p (wi::to_widest (t)));
7319 }
7320
7321 /* T is an INTEGER_CST whose numerical value (extended according to
7322    TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  Return that
7323    HOST_WIDE_INT.  */
7324
7325 HOST_WIDE_INT
7326 tree_to_shwi (const_tree t)
7327 {
7328   gcc_assert (tree_fits_shwi_p (t));
7329   return TREE_INT_CST_LOW (t);
7330 }
7331
7332 /* T is an INTEGER_CST whose numerical value (extended according to
7333    TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  Return that
7334    HOST_WIDE_INT.  */
7335
7336 unsigned HOST_WIDE_INT
7337 tree_to_uhwi (const_tree t)
7338 {
7339   gcc_assert (tree_fits_uhwi_p (t));
7340   return TREE_INT_CST_LOW (t);
7341 }
7342
7343 /* Return the most significant (sign) bit of T.  */
7344
7345 int
7346 tree_int_cst_sign_bit (const_tree t)
7347 {
7348   unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7349
7350   return wi::extract_uhwi (t, bitno, 1);
7351 }
7352
7353 /* Return an indication of the sign of the integer constant T.
7354    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7355    Note that -1 will never be returned if T's type is unsigned.  */
7356
7357 int
7358 tree_int_cst_sgn (const_tree t)
7359 {
7360   if (wi::eq_p (t, 0))
7361     return 0;
7362   else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7363     return 1;
7364   else if (wi::neg_p (t))
7365     return -1;
7366   else
7367     return 1;
7368 }
7369
7370 /* Return the minimum number of bits needed to represent VALUE in a
7371    signed or unsigned type, UNSIGNEDP says which.  */
7372
7373 unsigned int
7374 tree_int_cst_min_precision (tree value, signop sgn)
7375 {
7376   /* If the value is negative, compute its negative minus 1.  The latter
7377      adjustment is because the absolute value of the largest negative value
7378      is one larger than the largest positive value.  This is equivalent to
7379      a bit-wise negation, so use that operation instead.  */
7380
7381   if (tree_int_cst_sgn (value) < 0)
7382     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7383
7384   /* Return the number of bits needed, taking into account the fact
7385      that we need one more bit for a signed than unsigned type.
7386      If value is 0 or -1, the minimum precision is 1 no matter
7387      whether unsignedp is true or false.  */
7388
7389   if (integer_zerop (value))
7390     return 1;
7391   else
7392     return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7393 }
7394
7395 /* Return truthvalue of whether T1 is the same tree structure as T2.
7396    Return 1 if they are the same.
7397    Return 0 if they are understandably different.
7398    Return -1 if either contains tree structure not understood by
7399    this function.  */
7400
7401 int
7402 simple_cst_equal (const_tree t1, const_tree t2)
7403 {
7404   enum tree_code code1, code2;
7405   int cmp;
7406   int i;
7407
7408   if (t1 == t2)
7409     return 1;
7410   if (t1 == 0 || t2 == 0)
7411     return 0;
7412
7413   code1 = TREE_CODE (t1);
7414   code2 = TREE_CODE (t2);
7415
7416   if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7417     {
7418       if (CONVERT_EXPR_CODE_P (code2)
7419           || code2 == NON_LVALUE_EXPR)
7420         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7421       else
7422         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7423     }
7424
7425   else if (CONVERT_EXPR_CODE_P (code2)
7426            || code2 == NON_LVALUE_EXPR)
7427     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7428
7429   if (code1 != code2)
7430     return 0;
7431
7432   switch (code1)
7433     {
7434     case INTEGER_CST:
7435       return wi::to_widest (t1) == wi::to_widest (t2);
7436
7437     case REAL_CST:
7438       return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
7439
7440     case FIXED_CST:
7441       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7442
7443     case STRING_CST:
7444       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7445               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7446                          TREE_STRING_LENGTH (t1)));
7447
7448     case CONSTRUCTOR:
7449       {
7450         unsigned HOST_WIDE_INT idx;
7451         vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7452         vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7453
7454         if (vec_safe_length (v1) != vec_safe_length (v2))
7455           return false;
7456
7457         for (idx = 0; idx < vec_safe_length (v1); ++idx)
7458           /* ??? Should we handle also fields here? */
7459           if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7460             return false;
7461         return true;
7462       }
7463
7464     case SAVE_EXPR:
7465       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7466
7467     case CALL_EXPR:
7468       cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7469       if (cmp <= 0)
7470         return cmp;
7471       if (call_expr_nargs (t1) != call_expr_nargs (t2))
7472         return 0;
7473       {
7474         const_tree arg1, arg2;
7475         const_call_expr_arg_iterator iter1, iter2;
7476         for (arg1 = first_const_call_expr_arg (t1, &iter1),
7477                arg2 = first_const_call_expr_arg (t2, &iter2);
7478              arg1 && arg2;
7479              arg1 = next_const_call_expr_arg (&iter1),
7480                arg2 = next_const_call_expr_arg (&iter2))
7481           {
7482             cmp = simple_cst_equal (arg1, arg2);
7483             if (cmp <= 0)
7484               return cmp;
7485           }
7486         return arg1 == arg2;
7487       }
7488
7489     case TARGET_EXPR:
7490       /* Special case: if either target is an unallocated VAR_DECL,
7491          it means that it's going to be unified with whatever the
7492          TARGET_EXPR is really supposed to initialize, so treat it
7493          as being equivalent to anything.  */
7494       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7495            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7496            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7497           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7498               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7499               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7500         cmp = 1;
7501       else
7502         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7503
7504       if (cmp <= 0)
7505         return cmp;
7506
7507       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7508
7509     case WITH_CLEANUP_EXPR:
7510       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7511       if (cmp <= 0)
7512         return cmp;
7513
7514       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7515
7516     case COMPONENT_REF:
7517       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7518         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7519
7520       return 0;
7521
7522     case VAR_DECL:
7523     case PARM_DECL:
7524     case CONST_DECL:
7525     case FUNCTION_DECL:
7526       return 0;
7527
7528     default:
7529       break;
7530     }
7531
7532   /* This general rule works for most tree codes.  All exceptions should be
7533      handled above.  If this is a language-specific tree code, we can't
7534      trust what might be in the operand, so say we don't know
7535      the situation.  */
7536   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7537     return -1;
7538
7539   switch (TREE_CODE_CLASS (code1))
7540     {
7541     case tcc_unary:
7542     case tcc_binary:
7543     case tcc_comparison:
7544     case tcc_expression:
7545     case tcc_reference:
7546     case tcc_statement:
7547       cmp = 1;
7548       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7549         {
7550           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7551           if (cmp <= 0)
7552             return cmp;
7553         }
7554
7555       return cmp;
7556
7557     default:
7558       return -1;
7559     }
7560 }
7561
7562 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7563    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7564    than U, respectively.  */
7565
7566 int
7567 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7568 {
7569   if (tree_int_cst_sgn (t) < 0)
7570     return -1;
7571   else if (!tree_fits_uhwi_p (t))
7572     return 1;
7573   else if (TREE_INT_CST_LOW (t) == u)
7574     return 0;
7575   else if (TREE_INT_CST_LOW (t) < u)
7576     return -1;
7577   else
7578     return 1;
7579 }
7580
7581 /* Return true if SIZE represents a constant size that is in bounds of
7582    what the middle-end and the backend accepts (covering not more than
7583    half of the address-space).  */
7584
7585 bool
7586 valid_constant_size_p (const_tree size)
7587 {
7588   if (! tree_fits_uhwi_p (size)
7589       || TREE_OVERFLOW (size)
7590       || tree_int_cst_sign_bit (size) != 0)
7591     return false;
7592   return true;
7593 }
7594
7595 /* Return the precision of the type, or for a complex or vector type the
7596    precision of the type of its elements.  */
7597
7598 unsigned int
7599 element_precision (const_tree type)
7600 {
7601   if (!TYPE_P (type))
7602     type = TREE_TYPE (type);
7603   enum tree_code code = TREE_CODE (type);
7604   if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7605     type = TREE_TYPE (type);
7606
7607   return TYPE_PRECISION (type);
7608 }
7609
7610 /* Return true if CODE represents an associative tree code.  Otherwise
7611    return false.  */
7612 bool
7613 associative_tree_code (enum tree_code code)
7614 {
7615   switch (code)
7616     {
7617     case BIT_IOR_EXPR:
7618     case BIT_AND_EXPR:
7619     case BIT_XOR_EXPR:
7620     case PLUS_EXPR:
7621     case MULT_EXPR:
7622     case MIN_EXPR:
7623     case MAX_EXPR:
7624       return true;
7625
7626     default:
7627       break;
7628     }
7629   return false;
7630 }
7631
7632 /* Return true if CODE represents a commutative tree code.  Otherwise
7633    return false.  */
7634 bool
7635 commutative_tree_code (enum tree_code code)
7636 {
7637   switch (code)
7638     {
7639     case PLUS_EXPR:
7640     case MULT_EXPR:
7641     case MULT_HIGHPART_EXPR:
7642     case MIN_EXPR:
7643     case MAX_EXPR:
7644     case BIT_IOR_EXPR:
7645     case BIT_XOR_EXPR:
7646     case BIT_AND_EXPR:
7647     case NE_EXPR:
7648     case EQ_EXPR:
7649     case UNORDERED_EXPR:
7650     case ORDERED_EXPR:
7651     case UNEQ_EXPR:
7652     case LTGT_EXPR:
7653     case TRUTH_AND_EXPR:
7654     case TRUTH_XOR_EXPR:
7655     case TRUTH_OR_EXPR:
7656     case WIDEN_MULT_EXPR:
7657     case VEC_WIDEN_MULT_HI_EXPR:
7658     case VEC_WIDEN_MULT_LO_EXPR:
7659     case VEC_WIDEN_MULT_EVEN_EXPR:
7660     case VEC_WIDEN_MULT_ODD_EXPR:
7661       return true;
7662
7663     default:
7664       break;
7665     }
7666   return false;
7667 }
7668
7669 /* Return true if CODE represents a ternary tree code for which the
7670    first two operands are commutative.  Otherwise return false.  */
7671 bool
7672 commutative_ternary_tree_code (enum tree_code code)
7673 {
7674   switch (code)
7675     {
7676     case WIDEN_MULT_PLUS_EXPR:
7677     case WIDEN_MULT_MINUS_EXPR:
7678     case DOT_PROD_EXPR:
7679     case FMA_EXPR:
7680       return true;
7681
7682     default:
7683       break;
7684     }
7685   return false;
7686 }
7687
7688 /* Returns true if CODE can overflow.  */
7689
7690 bool
7691 operation_can_overflow (enum tree_code code)
7692 {
7693   switch (code)
7694     {
7695     case PLUS_EXPR:
7696     case MINUS_EXPR:
7697     case MULT_EXPR:
7698     case LSHIFT_EXPR:
7699       /* Can overflow in various ways.  */
7700       return true;
7701     case TRUNC_DIV_EXPR:
7702     case EXACT_DIV_EXPR:
7703     case FLOOR_DIV_EXPR:
7704     case CEIL_DIV_EXPR:
7705       /* For INT_MIN / -1.  */
7706       return true;
7707     case NEGATE_EXPR:
7708     case ABS_EXPR:
7709       /* For -INT_MIN.  */
7710       return true;
7711     default:
7712       /* These operators cannot overflow.  */
7713       return false;
7714     }
7715 }
7716
7717 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7718    ftrapv doesn't generate trapping insns for CODE.  */
7719
7720 bool
7721 operation_no_trapping_overflow (tree type, enum tree_code code)
7722 {
7723   gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7724
7725   /* We don't generate instructions that trap on overflow for complex or vector
7726      types.  */
7727   if (!INTEGRAL_TYPE_P (type))
7728     return true;
7729
7730   if (!TYPE_OVERFLOW_TRAPS (type))
7731     return true;
7732
7733   switch (code)
7734     {
7735     case PLUS_EXPR:
7736     case MINUS_EXPR:
7737     case MULT_EXPR:
7738     case NEGATE_EXPR:
7739     case ABS_EXPR:
7740       /* These operators can overflow, and -ftrapv generates trapping code for
7741          these.  */
7742       return false;
7743     case TRUNC_DIV_EXPR:
7744     case EXACT_DIV_EXPR:
7745     case FLOOR_DIV_EXPR:
7746     case CEIL_DIV_EXPR:
7747     case LSHIFT_EXPR:
7748       /* These operators can overflow, but -ftrapv does not generate trapping
7749          code for these.  */
7750       return true;
7751     default:
7752       /* These operators cannot overflow.  */
7753       return true;
7754     }
7755 }
7756
7757 namespace inchash
7758 {
7759
7760 /* Generate a hash value for an expression.  This can be used iteratively
7761    by passing a previous result as the HSTATE argument.
7762
7763    This function is intended to produce the same hash for expressions which
7764    would compare equal using operand_equal_p.  */
7765 void
7766 add_expr (const_tree t, inchash::hash &hstate)
7767 {
7768   int i;
7769   enum tree_code code;
7770   enum tree_code_class tclass;
7771
7772   if (t == NULL_TREE)
7773     {
7774       hstate.merge_hash (0);
7775       return;
7776     }
7777
7778   code = TREE_CODE (t);
7779
7780   switch (code)
7781     {
7782     /* Alas, constants aren't shared, so we can't rely on pointer
7783        identity.  */
7784     case VOID_CST:
7785       hstate.merge_hash (0);
7786       return;
7787     case INTEGER_CST:
7788       for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
7789         hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
7790       return;
7791     case REAL_CST:
7792       {
7793         unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
7794         hstate.merge_hash (val2);
7795         return;
7796       }
7797     case FIXED_CST:
7798       {
7799         unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7800         hstate.merge_hash (val2);
7801         return;
7802       }
7803     case STRING_CST:
7804       hstate.add ((const void *) TREE_STRING_POINTER (t), TREE_STRING_LENGTH (t));
7805       return;
7806     case COMPLEX_CST:
7807       inchash::add_expr (TREE_REALPART (t), hstate);
7808       inchash::add_expr (TREE_IMAGPART (t), hstate);
7809       return;
7810     case VECTOR_CST:
7811       {
7812         unsigned i;
7813         for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7814           inchash::add_expr (VECTOR_CST_ELT (t, i), hstate);
7815         return;
7816       }
7817     case SSA_NAME:
7818       /* We can just compare by pointer.  */
7819       hstate.add_wide_int (SSA_NAME_VERSION (t));
7820       return;
7821     case PLACEHOLDER_EXPR:
7822       /* The node itself doesn't matter.  */
7823       return;
7824     case TREE_LIST:
7825       /* A list of expressions, for a CALL_EXPR or as the elements of a
7826          VECTOR_CST.  */
7827       for (; t; t = TREE_CHAIN (t))
7828         inchash::add_expr (TREE_VALUE (t), hstate);
7829       return;
7830     case CONSTRUCTOR:
7831       {
7832         unsigned HOST_WIDE_INT idx;
7833         tree field, value;
7834         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7835           {
7836             inchash::add_expr (field, hstate);
7837             inchash::add_expr (value, hstate);
7838           }
7839         return;
7840       }
7841     case FUNCTION_DECL:
7842       /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7843          Otherwise nodes that compare equal according to operand_equal_p might
7844          get different hash codes.  However, don't do this for machine specific
7845          or front end builtins, since the function code is overloaded in those
7846          cases.  */
7847       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7848           && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7849         {
7850           t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7851           code = TREE_CODE (t);
7852         }
7853       /* FALL THROUGH */
7854     default:
7855       tclass = TREE_CODE_CLASS (code);
7856
7857       if (tclass == tcc_declaration)
7858         {
7859           /* DECL's have a unique ID */
7860           hstate.add_wide_int (DECL_UID (t));
7861         }
7862       else
7863         {
7864           gcc_assert (IS_EXPR_CODE_CLASS (tclass));
7865
7866           hstate.add_object (code);
7867
7868           /* Don't hash the type, that can lead to having nodes which
7869              compare equal according to operand_equal_p, but which
7870              have different hash codes.  */
7871           if (CONVERT_EXPR_CODE_P (code)
7872               || code == NON_LVALUE_EXPR)
7873             {
7874               /* Make sure to include signness in the hash computation.  */
7875               hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7876               inchash::add_expr (TREE_OPERAND (t, 0), hstate);
7877             }
7878
7879           else if (commutative_tree_code (code))
7880             {
7881               /* It's a commutative expression.  We want to hash it the same
7882                  however it appears.  We do this by first hashing both operands
7883                  and then rehashing based on the order of their independent
7884                  hashes.  */
7885               inchash::hash one, two;
7886               inchash::add_expr (TREE_OPERAND (t, 0), one);
7887               inchash::add_expr (TREE_OPERAND (t, 1), two);
7888               hstate.add_commutative (one, two);
7889             }
7890           else
7891             for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
7892               inchash::add_expr (TREE_OPERAND (t, i), hstate);
7893         }
7894       return;
7895     }
7896 }
7897
7898 }
7899
7900 /* Constructors for pointer, array and function types.
7901    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7902    constructed by language-dependent code, not here.)  */
7903
7904 /* Construct, lay out and return the type of pointers to TO_TYPE with
7905    mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
7906    reference all of memory. If such a type has already been
7907    constructed, reuse it.  */
7908
7909 tree
7910 build_pointer_type_for_mode (tree to_type, machine_mode mode,
7911                              bool can_alias_all)
7912 {
7913   tree t;
7914   bool could_alias = can_alias_all;
7915
7916   if (to_type == error_mark_node)
7917     return error_mark_node;
7918
7919   /* If the pointed-to type has the may_alias attribute set, force
7920      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
7921   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7922     can_alias_all = true;
7923
7924   /* In some cases, languages will have things that aren't a POINTER_TYPE
7925      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7926      In that case, return that type without regard to the rest of our
7927      operands.
7928
7929      ??? This is a kludge, but consistent with the way this function has
7930      always operated and there doesn't seem to be a good way to avoid this
7931      at the moment.  */
7932   if (TYPE_POINTER_TO (to_type) != 0
7933       && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7934     return TYPE_POINTER_TO (to_type);
7935
7936   /* First, if we already have a type for pointers to TO_TYPE and it's
7937      the proper mode, use it.  */
7938   for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7939     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7940       return t;
7941
7942   t = make_node (POINTER_TYPE);
7943
7944   TREE_TYPE (t) = to_type;
7945   SET_TYPE_MODE (t, mode);
7946   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7947   TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7948   TYPE_POINTER_TO (to_type) = t;
7949
7950   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
7951   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
7952     SET_TYPE_STRUCTURAL_EQUALITY (t);
7953   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
7954     TYPE_CANONICAL (t)
7955       = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7956                                      mode, false);
7957
7958   /* Lay out the type.  This function has many callers that are concerned
7959      with expression-construction, and this simplifies them all.  */
7960   layout_type (t);
7961
7962   return t;
7963 }
7964
7965 /* By default build pointers in ptr_mode.  */
7966
7967 tree
7968 build_pointer_type (tree to_type)
7969 {
7970   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7971                                               : TYPE_ADDR_SPACE (to_type);
7972   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7973   return build_pointer_type_for_mode (to_type, pointer_mode, false);
7974 }
7975
7976 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
7977
7978 tree
7979 build_reference_type_for_mode (tree to_type, machine_mode mode,
7980                                bool can_alias_all)
7981 {
7982   tree t;
7983   bool could_alias = can_alias_all;
7984
7985   if (to_type == error_mark_node)
7986     return error_mark_node;
7987
7988   /* If the pointed-to type has the may_alias attribute set, force
7989      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
7990   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7991     can_alias_all = true;
7992
7993   /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7994      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7995      In that case, return that type without regard to the rest of our
7996      operands.
7997
7998      ??? This is a kludge, but consistent with the way this function has
7999      always operated and there doesn't seem to be a good way to avoid this
8000      at the moment.  */
8001   if (TYPE_REFERENCE_TO (to_type) != 0
8002       && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
8003     return TYPE_REFERENCE_TO (to_type);
8004
8005   /* First, if we already have a type for pointers to TO_TYPE and it's
8006      the proper mode, use it.  */
8007   for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
8008     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8009       return t;
8010
8011   t = make_node (REFERENCE_TYPE);
8012
8013   TREE_TYPE (t) = to_type;
8014   SET_TYPE_MODE (t, mode);
8015   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8016   TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
8017   TYPE_REFERENCE_TO (to_type) = t;
8018
8019   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
8020   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8021     SET_TYPE_STRUCTURAL_EQUALITY (t);
8022   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8023     TYPE_CANONICAL (t)
8024       = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
8025                                        mode, false);
8026
8027   layout_type (t);
8028
8029   return t;
8030 }
8031
8032
8033 /* Build the node for the type of references-to-TO_TYPE by default
8034    in ptr_mode.  */
8035
8036 tree
8037 build_reference_type (tree to_type)
8038 {
8039   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8040                                               : TYPE_ADDR_SPACE (to_type);
8041   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8042   return build_reference_type_for_mode (to_type, pointer_mode, false);
8043 }
8044
8045 #define MAX_INT_CACHED_PREC \
8046   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8047 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
8048
8049 /* Builds a signed or unsigned integer type of precision PRECISION.
8050    Used for C bitfields whose precision does not match that of
8051    built-in target types.  */
8052 tree
8053 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
8054                                 int unsignedp)
8055 {
8056   tree itype, ret;
8057
8058   if (unsignedp)
8059     unsignedp = MAX_INT_CACHED_PREC + 1;
8060     
8061   if (precision <= MAX_INT_CACHED_PREC)
8062     {
8063       itype = nonstandard_integer_type_cache[precision + unsignedp];
8064       if (itype)
8065         return itype;
8066     }
8067
8068   itype = make_node (INTEGER_TYPE);
8069   TYPE_PRECISION (itype) = precision;
8070
8071   if (unsignedp)
8072     fixup_unsigned_type (itype);
8073   else
8074     fixup_signed_type (itype);
8075
8076   ret = itype;
8077   if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
8078     ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
8079   if (precision <= MAX_INT_CACHED_PREC)
8080     nonstandard_integer_type_cache[precision + unsignedp] = ret;
8081
8082   return ret;
8083 }
8084
8085 #define MAX_BOOL_CACHED_PREC \
8086   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8087 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
8088
8089 /* Builds a boolean type of precision PRECISION.
8090    Used for boolean vectors to choose proper vector element size.  */
8091 tree
8092 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
8093 {
8094   tree type;
8095
8096   if (precision <= MAX_BOOL_CACHED_PREC)
8097     {
8098       type = nonstandard_boolean_type_cache[precision];
8099       if (type)
8100         return type;
8101     }
8102
8103   type = make_node (BOOLEAN_TYPE);
8104   TYPE_PRECISION (type) = precision;
8105   fixup_signed_type (type);
8106
8107   if (precision <= MAX_INT_CACHED_PREC)
8108     nonstandard_boolean_type_cache[precision] = type;
8109
8110   return type;
8111 }
8112
8113 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
8114    or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL.  If SHARED
8115    is true, reuse such a type that has already been constructed.  */
8116
8117 static tree
8118 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
8119 {
8120   tree itype = make_node (INTEGER_TYPE);
8121   inchash::hash hstate;
8122
8123   TREE_TYPE (itype) = type;
8124
8125   TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
8126   TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
8127
8128   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
8129   SET_TYPE_MODE (itype, TYPE_MODE (type));
8130   TYPE_SIZE (itype) = TYPE_SIZE (type);
8131   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
8132   TYPE_ALIGN (itype) = TYPE_ALIGN (type);
8133   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
8134
8135   if (!shared)
8136     return itype;
8137
8138   if ((TYPE_MIN_VALUE (itype)
8139        && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
8140       || (TYPE_MAX_VALUE (itype)
8141           && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
8142     {
8143       /* Since we cannot reliably merge this type, we need to compare it using
8144          structural equality checks.  */
8145       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8146       return itype;
8147     }
8148
8149   inchash::add_expr (TYPE_MIN_VALUE (itype), hstate);
8150   inchash::add_expr (TYPE_MAX_VALUE (itype), hstate);
8151   hstate.merge_hash (TYPE_HASH (type));
8152   itype = type_hash_canon (hstate.end (), itype);
8153
8154   return itype;
8155 }
8156
8157 /* Wrapper around build_range_type_1 with SHARED set to true.  */
8158
8159 tree
8160 build_range_type (tree type, tree lowval, tree highval)
8161 {
8162   return build_range_type_1 (type, lowval, highval, true);
8163 }
8164
8165 /* Wrapper around build_range_type_1 with SHARED set to false.  */
8166
8167 tree
8168 build_nonshared_range_type (tree type, tree lowval, tree highval)
8169 {
8170   return build_range_type_1 (type, lowval, highval, false);
8171 }
8172
8173 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
8174    MAXVAL should be the maximum value in the domain
8175    (one less than the length of the array).
8176
8177    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
8178    We don't enforce this limit, that is up to caller (e.g. language front end).
8179    The limit exists because the result is a signed type and we don't handle
8180    sizes that use more than one HOST_WIDE_INT.  */
8181
8182 tree
8183 build_index_type (tree maxval)
8184 {
8185   return build_range_type (sizetype, size_zero_node, maxval);
8186 }
8187
8188 /* Return true if the debug information for TYPE, a subtype, should be emitted
8189    as a subrange type.  If so, set LOWVAL to the low bound and HIGHVAL to the
8190    high bound, respectively.  Sometimes doing so unnecessarily obfuscates the
8191    debug info and doesn't reflect the source code.  */
8192
8193 bool
8194 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
8195 {
8196   tree base_type = TREE_TYPE (type), low, high;
8197
8198   /* Subrange types have a base type which is an integral type.  */
8199   if (!INTEGRAL_TYPE_P (base_type))
8200     return false;
8201
8202   /* Get the real bounds of the subtype.  */
8203   if (lang_hooks.types.get_subrange_bounds)
8204     lang_hooks.types.get_subrange_bounds (type, &low, &high);
8205   else
8206     {
8207       low = TYPE_MIN_VALUE (type);
8208       high = TYPE_MAX_VALUE (type);
8209     }
8210
8211   /* If the type and its base type have the same representation and the same
8212      name, then the type is not a subrange but a copy of the base type.  */
8213   if ((TREE_CODE (base_type) == INTEGER_TYPE
8214        || TREE_CODE (base_type) == BOOLEAN_TYPE)
8215       && int_size_in_bytes (type) == int_size_in_bytes (base_type)
8216       && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
8217       && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
8218       && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
8219     return false;
8220
8221   if (lowval)
8222     *lowval = low;
8223   if (highval)
8224     *highval = high;
8225   return true;
8226 }
8227
8228 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
8229    and number of elements specified by the range of values of INDEX_TYPE.
8230    If SHARED is true, reuse such a type that has already been constructed.  */
8231
8232 static tree
8233 build_array_type_1 (tree elt_type, tree index_type, bool shared)
8234 {
8235   tree t;
8236
8237   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
8238     {
8239       error ("arrays of functions are not meaningful");
8240       elt_type = integer_type_node;
8241     }
8242
8243   t = make_node (ARRAY_TYPE);
8244   TREE_TYPE (t) = elt_type;
8245   TYPE_DOMAIN (t) = index_type;
8246   TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
8247   layout_type (t);
8248
8249   /* If the element type is incomplete at this point we get marked for
8250      structural equality.  Do not record these types in the canonical
8251      type hashtable.  */
8252   if (TYPE_STRUCTURAL_EQUALITY_P (t))
8253     return t;
8254
8255   if (shared)
8256     {
8257       inchash::hash hstate;
8258       hstate.add_object (TYPE_HASH (elt_type));
8259       if (index_type)
8260         hstate.add_object (TYPE_HASH (index_type));
8261       t = type_hash_canon (hstate.end (), t);
8262     }
8263
8264   if (TYPE_CANONICAL (t) == t)
8265     {
8266       if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
8267           || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
8268           || in_lto_p)
8269         SET_TYPE_STRUCTURAL_EQUALITY (t);
8270       else if (TYPE_CANONICAL (elt_type) != elt_type
8271                || (index_type && TYPE_CANONICAL (index_type) != index_type))
8272         TYPE_CANONICAL (t)
8273           = build_array_type_1 (TYPE_CANONICAL (elt_type),
8274                                 index_type
8275                                 ? TYPE_CANONICAL (index_type) : NULL_TREE,
8276                                 shared);
8277     }
8278
8279   return t;
8280 }
8281
8282 /* Wrapper around build_array_type_1 with SHARED set to true.  */
8283
8284 tree
8285 build_array_type (tree elt_type, tree index_type)
8286 {
8287   return build_array_type_1 (elt_type, index_type, true);
8288 }
8289
8290 /* Wrapper around build_array_type_1 with SHARED set to false.  */
8291
8292 tree
8293 build_nonshared_array_type (tree elt_type, tree index_type)
8294 {
8295   return build_array_type_1 (elt_type, index_type, false);
8296 }
8297
8298 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8299    sizetype.  */
8300
8301 tree
8302 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
8303 {
8304   return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8305 }
8306
8307 /* Recursively examines the array elements of TYPE, until a non-array
8308    element type is found.  */
8309
8310 tree
8311 strip_array_types (tree type)
8312 {
8313   while (TREE_CODE (type) == ARRAY_TYPE)
8314     type = TREE_TYPE (type);
8315
8316   return type;
8317 }
8318
8319 /* Computes the canonical argument types from the argument type list
8320    ARGTYPES.
8321
8322    Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8323    on entry to this function, or if any of the ARGTYPES are
8324    structural.
8325
8326    Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8327    true on entry to this function, or if any of the ARGTYPES are
8328    non-canonical.
8329
8330    Returns a canonical argument list, which may be ARGTYPES when the
8331    canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8332    true) or would not differ from ARGTYPES.  */
8333
8334 static tree
8335 maybe_canonicalize_argtypes (tree argtypes,
8336                              bool *any_structural_p,
8337                              bool *any_noncanonical_p)
8338 {
8339   tree arg;
8340   bool any_noncanonical_argtypes_p = false;
8341
8342   for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8343     {
8344       if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8345         /* Fail gracefully by stating that the type is structural.  */
8346         *any_structural_p = true;
8347       else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8348         *any_structural_p = true;
8349       else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8350                || TREE_PURPOSE (arg))
8351         /* If the argument has a default argument, we consider it
8352            non-canonical even though the type itself is canonical.
8353            That way, different variants of function and method types
8354            with default arguments will all point to the variant with
8355            no defaults as their canonical type.  */
8356         any_noncanonical_argtypes_p = true;
8357     }
8358
8359   if (*any_structural_p)
8360     return argtypes;
8361
8362   if (any_noncanonical_argtypes_p)
8363     {
8364       /* Build the canonical list of argument types.  */
8365       tree canon_argtypes = NULL_TREE;
8366       bool is_void = false;
8367
8368       for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8369         {
8370           if (arg == void_list_node)
8371             is_void = true;
8372           else
8373             canon_argtypes = tree_cons (NULL_TREE,
8374                                         TYPE_CANONICAL (TREE_VALUE (arg)),
8375                                         canon_argtypes);
8376         }
8377
8378       canon_argtypes = nreverse (canon_argtypes);
8379       if (is_void)
8380         canon_argtypes = chainon (canon_argtypes, void_list_node);
8381
8382       /* There is a non-canonical type.  */
8383       *any_noncanonical_p = true;
8384       return canon_argtypes;
8385     }
8386
8387   /* The canonical argument types are the same as ARGTYPES.  */
8388   return argtypes;
8389 }
8390
8391 /* Construct, lay out and return
8392    the type of functions returning type VALUE_TYPE
8393    given arguments of types ARG_TYPES.
8394    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8395    are data type nodes for the arguments of the function.
8396    If such a type has already been constructed, reuse it.  */
8397
8398 tree
8399 build_function_type (tree value_type, tree arg_types)
8400 {
8401   tree t;
8402   inchash::hash hstate;
8403   bool any_structural_p, any_noncanonical_p;
8404   tree canon_argtypes;
8405
8406   if (TREE_CODE (value_type) == FUNCTION_TYPE)
8407     {
8408       error ("function return type cannot be function");
8409       value_type = integer_type_node;
8410     }
8411
8412   /* Make a node of the sort we want.  */
8413   t = make_node (FUNCTION_TYPE);
8414   TREE_TYPE (t) = value_type;
8415   TYPE_ARG_TYPES (t) = arg_types;
8416
8417   /* If we already have such a type, use the old one.  */
8418   hstate.add_object (TYPE_HASH (value_type));
8419   type_hash_list (arg_types, hstate);
8420   t = type_hash_canon (hstate.end (), t);
8421
8422   /* Set up the canonical type. */
8423   any_structural_p   = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8424   any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8425   canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8426                                                 &any_structural_p,
8427                                                 &any_noncanonical_p);
8428   if (any_structural_p)
8429     SET_TYPE_STRUCTURAL_EQUALITY (t);
8430   else if (any_noncanonical_p)
8431     TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8432                                               canon_argtypes);
8433
8434   if (!COMPLETE_TYPE_P (t))
8435     layout_type (t);
8436   return t;
8437 }
8438
8439 /* Build a function type.  The RETURN_TYPE is the type returned by the
8440    function.  If VAARGS is set, no void_type_node is appended to the
8441    list.  ARGP must be always be terminated be a NULL_TREE.  */
8442
8443 static tree
8444 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8445 {
8446   tree t, args, last;
8447
8448   t = va_arg (argp, tree);
8449   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8450     args = tree_cons (NULL_TREE, t, args);
8451
8452   if (vaargs)
8453     {
8454       last = args;
8455       if (args != NULL_TREE)
8456         args = nreverse (args);
8457       gcc_assert (last != void_list_node);
8458     }
8459   else if (args == NULL_TREE)
8460     args = void_list_node;
8461   else
8462     {
8463       last = args;
8464       args = nreverse (args);
8465       TREE_CHAIN (last) = void_list_node;
8466     }
8467   args = build_function_type (return_type, args);
8468
8469   return args;
8470 }
8471
8472 /* Build a function type.  The RETURN_TYPE is the type returned by the
8473    function.  If additional arguments are provided, they are
8474    additional argument types.  The list of argument types must always
8475    be terminated by NULL_TREE.  */
8476
8477 tree
8478 build_function_type_list (tree return_type, ...)
8479 {
8480   tree args;
8481   va_list p;
8482
8483   va_start (p, return_type);
8484   args = build_function_type_list_1 (false, return_type, p);
8485   va_end (p);
8486   return args;
8487 }
8488
8489 /* Build a variable argument function type.  The RETURN_TYPE is the
8490    type returned by the function.  If additional arguments are provided,
8491    they are additional argument types.  The list of argument types must
8492    always be terminated by NULL_TREE.  */
8493
8494 tree
8495 build_varargs_function_type_list (tree return_type, ...)
8496 {
8497   tree args;
8498   va_list p;
8499
8500   va_start (p, return_type);
8501   args = build_function_type_list_1 (true, return_type, p);
8502   va_end (p);
8503
8504   return args;
8505 }
8506
8507 /* Build a function type.  RETURN_TYPE is the type returned by the
8508    function; VAARGS indicates whether the function takes varargs.  The
8509    function takes N named arguments, the types of which are provided in
8510    ARG_TYPES.  */
8511
8512 static tree
8513 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8514                              tree *arg_types)
8515 {
8516   int i;
8517   tree t = vaargs ? NULL_TREE : void_list_node;
8518
8519   for (i = n - 1; i >= 0; i--)
8520     t = tree_cons (NULL_TREE, arg_types[i], t);
8521
8522   return build_function_type (return_type, t);
8523 }
8524
8525 /* Build a function type.  RETURN_TYPE is the type returned by the
8526    function.  The function takes N named arguments, the types of which
8527    are provided in ARG_TYPES.  */
8528
8529 tree
8530 build_function_type_array (tree return_type, int n, tree *arg_types)
8531 {
8532   return build_function_type_array_1 (false, return_type, n, arg_types);
8533 }
8534
8535 /* Build a variable argument function type.  RETURN_TYPE is the type
8536    returned by the function.  The function takes N named arguments, the
8537    types of which are provided in ARG_TYPES.  */
8538
8539 tree
8540 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8541 {
8542   return build_function_type_array_1 (true, return_type, n, arg_types);
8543 }
8544
8545 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
8546    and ARGTYPES (a TREE_LIST) are the return type and arguments types
8547    for the method.  An implicit additional parameter (of type
8548    pointer-to-BASETYPE) is added to the ARGTYPES.  */
8549
8550 tree
8551 build_method_type_directly (tree basetype,
8552                             tree rettype,
8553                             tree argtypes)
8554 {
8555   tree t;
8556   tree ptype;
8557   inchash::hash hstate;
8558   bool any_structural_p, any_noncanonical_p;
8559   tree canon_argtypes;
8560
8561   /* Make a node of the sort we want.  */
8562   t = make_node (METHOD_TYPE);
8563
8564   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8565   TREE_TYPE (t) = rettype;
8566   ptype = build_pointer_type (basetype);
8567
8568   /* The actual arglist for this function includes a "hidden" argument
8569      which is "this".  Put it into the list of argument types.  */
8570   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8571   TYPE_ARG_TYPES (t) = argtypes;
8572
8573   /* If we already have such a type, use the old one.  */
8574   hstate.add_object (TYPE_HASH (basetype));
8575   hstate.add_object (TYPE_HASH (rettype));
8576   type_hash_list (argtypes, hstate);
8577   t = type_hash_canon (hstate.end (), t);
8578
8579   /* Set up the canonical type. */
8580   any_structural_p
8581     = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8582        || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8583   any_noncanonical_p
8584     = (TYPE_CANONICAL (basetype) != basetype
8585        || TYPE_CANONICAL (rettype) != rettype);
8586   canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8587                                                 &any_structural_p,
8588                                                 &any_noncanonical_p);
8589   if (any_structural_p)
8590     SET_TYPE_STRUCTURAL_EQUALITY (t);
8591   else if (any_noncanonical_p)
8592     TYPE_CANONICAL (t)
8593       = build_method_type_directly (TYPE_CANONICAL (basetype),
8594                                     TYPE_CANONICAL (rettype),
8595                                     canon_argtypes);
8596   if (!COMPLETE_TYPE_P (t))
8597     layout_type (t);
8598
8599   return t;
8600 }
8601
8602 /* Construct, lay out and return the type of methods belonging to class
8603    BASETYPE and whose arguments and values are described by TYPE.
8604    If that type exists already, reuse it.
8605    TYPE must be a FUNCTION_TYPE node.  */
8606
8607 tree
8608 build_method_type (tree basetype, tree type)
8609 {
8610   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8611
8612   return build_method_type_directly (basetype,
8613                                      TREE_TYPE (type),
8614                                      TYPE_ARG_TYPES (type));
8615 }
8616
8617 /* Construct, lay out and return the type of offsets to a value
8618    of type TYPE, within an object of type BASETYPE.
8619    If a suitable offset type exists already, reuse it.  */
8620
8621 tree
8622 build_offset_type (tree basetype, tree type)
8623 {
8624   tree t;
8625   inchash::hash hstate;
8626
8627   /* Make a node of the sort we want.  */
8628   t = make_node (OFFSET_TYPE);
8629
8630   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8631   TREE_TYPE (t) = type;
8632
8633   /* If we already have such a type, use the old one.  */
8634   hstate.add_object (TYPE_HASH (basetype));
8635   hstate.add_object (TYPE_HASH (type));
8636   t = type_hash_canon (hstate.end (), t);
8637
8638   if (!COMPLETE_TYPE_P (t))
8639     layout_type (t);
8640
8641   if (TYPE_CANONICAL (t) == t)
8642     {
8643       if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8644           || TYPE_STRUCTURAL_EQUALITY_P (type))
8645         SET_TYPE_STRUCTURAL_EQUALITY (t);
8646       else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8647                || TYPE_CANONICAL (type) != type)
8648         TYPE_CANONICAL (t)
8649           = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8650                                TYPE_CANONICAL (type));
8651     }
8652
8653   return t;
8654 }
8655
8656 /* Create a complex type whose components are COMPONENT_TYPE.  */
8657
8658 tree
8659 build_complex_type (tree component_type)
8660 {
8661   tree t;
8662   inchash::hash hstate;
8663
8664   gcc_assert (INTEGRAL_TYPE_P (component_type)
8665               || SCALAR_FLOAT_TYPE_P (component_type)
8666               || FIXED_POINT_TYPE_P (component_type));
8667
8668   /* Make a node of the sort we want.  */
8669   t = make_node (COMPLEX_TYPE);
8670
8671   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8672
8673   /* If we already have such a type, use the old one.  */
8674   hstate.add_object (TYPE_HASH (component_type));
8675   t = type_hash_canon (hstate.end (), t);
8676
8677   if (!COMPLETE_TYPE_P (t))
8678     layout_type (t);
8679
8680   if (TYPE_CANONICAL (t) == t)
8681     {
8682       if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8683         SET_TYPE_STRUCTURAL_EQUALITY (t);
8684       else if (TYPE_CANONICAL (component_type) != component_type)
8685         TYPE_CANONICAL (t)
8686           = build_complex_type (TYPE_CANONICAL (component_type));
8687     }
8688
8689   /* We need to create a name, since complex is a fundamental type.  */
8690   if (! TYPE_NAME (t))
8691     {
8692       const char *name;
8693       if (component_type == char_type_node)
8694         name = "complex char";
8695       else if (component_type == signed_char_type_node)
8696         name = "complex signed char";
8697       else if (component_type == unsigned_char_type_node)
8698         name = "complex unsigned char";
8699       else if (component_type == short_integer_type_node)
8700         name = "complex short int";
8701       else if (component_type == short_unsigned_type_node)
8702         name = "complex short unsigned int";
8703       else if (component_type == integer_type_node)
8704         name = "complex int";
8705       else if (component_type == unsigned_type_node)
8706         name = "complex unsigned int";
8707       else if (component_type == long_integer_type_node)
8708         name = "complex long int";
8709       else if (component_type == long_unsigned_type_node)
8710         name = "complex long unsigned int";
8711       else if (component_type == long_long_integer_type_node)
8712         name = "complex long long int";
8713       else if (component_type == long_long_unsigned_type_node)
8714         name = "complex long long unsigned int";
8715       else
8716         name = 0;
8717
8718       if (name != 0)
8719         TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8720                                     get_identifier (name), t);
8721     }
8722
8723   return build_qualified_type (t, TYPE_QUALS (component_type));
8724 }
8725
8726 /* If TYPE is a real or complex floating-point type and the target
8727    does not directly support arithmetic on TYPE then return the wider
8728    type to be used for arithmetic on TYPE.  Otherwise, return
8729    NULL_TREE.  */
8730
8731 tree
8732 excess_precision_type (tree type)
8733 {
8734   if (flag_excess_precision != EXCESS_PRECISION_FAST)
8735     {
8736       int flt_eval_method = TARGET_FLT_EVAL_METHOD;
8737       switch (TREE_CODE (type))
8738         {
8739         case REAL_TYPE:
8740           switch (flt_eval_method)
8741             {
8742             case 1:
8743               if (TYPE_MODE (type) == TYPE_MODE (float_type_node))
8744                 return double_type_node;
8745               break;
8746             case 2:
8747               if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
8748                   || TYPE_MODE (type) == TYPE_MODE (double_type_node))
8749                 return long_double_type_node;
8750               break;
8751             default:
8752               gcc_unreachable ();
8753             }
8754           break;
8755         case COMPLEX_TYPE:
8756           if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8757             return NULL_TREE;
8758           switch (flt_eval_method)
8759             {
8760             case 1:
8761               if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node))
8762                 return complex_double_type_node;
8763               break;
8764             case 2:
8765               if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node)
8766                   || (TYPE_MODE (TREE_TYPE (type))
8767                       == TYPE_MODE (double_type_node)))
8768                 return complex_long_double_type_node;
8769               break;
8770             default:
8771               gcc_unreachable ();
8772             }
8773           break;
8774         default:
8775           break;
8776         }
8777     }
8778   return NULL_TREE;
8779 }
8780 \f
8781 /* Return OP, stripped of any conversions to wider types as much as is safe.
8782    Converting the value back to OP's type makes a value equivalent to OP.
8783
8784    If FOR_TYPE is nonzero, we return a value which, if converted to
8785    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8786
8787    OP must have integer, real or enumeral type.  Pointers are not allowed!
8788
8789    There are some cases where the obvious value we could return
8790    would regenerate to OP if converted to OP's type,
8791    but would not extend like OP to wider types.
8792    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8793    For example, if OP is (unsigned short)(signed char)-1,
8794    we avoid returning (signed char)-1 if FOR_TYPE is int,
8795    even though extending that to an unsigned short would regenerate OP,
8796    since the result of extending (signed char)-1 to (int)
8797    is different from (int) OP.  */
8798
8799 tree
8800 get_unwidened (tree op, tree for_type)
8801 {
8802   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
8803   tree type = TREE_TYPE (op);
8804   unsigned final_prec
8805     = TYPE_PRECISION (for_type != 0 ? for_type : type);
8806   int uns
8807     = (for_type != 0 && for_type != type
8808        && final_prec > TYPE_PRECISION (type)
8809        && TYPE_UNSIGNED (type));
8810   tree win = op;
8811
8812   while (CONVERT_EXPR_P (op))
8813     {
8814       int bitschange;
8815
8816       /* TYPE_PRECISION on vector types has different meaning
8817          (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8818          so avoid them here.  */
8819       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8820         break;
8821
8822       bitschange = TYPE_PRECISION (TREE_TYPE (op))
8823                    - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8824
8825       /* Truncations are many-one so cannot be removed.
8826          Unless we are later going to truncate down even farther.  */
8827       if (bitschange < 0
8828           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8829         break;
8830
8831       /* See what's inside this conversion.  If we decide to strip it,
8832          we will set WIN.  */
8833       op = TREE_OPERAND (op, 0);
8834
8835       /* If we have not stripped any zero-extensions (uns is 0),
8836          we can strip any kind of extension.
8837          If we have previously stripped a zero-extension,
8838          only zero-extensions can safely be stripped.
8839          Any extension can be stripped if the bits it would produce
8840          are all going to be discarded later by truncating to FOR_TYPE.  */
8841
8842       if (bitschange > 0)
8843         {
8844           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8845             win = op;
8846           /* TYPE_UNSIGNED says whether this is a zero-extension.
8847              Let's avoid computing it if it does not affect WIN
8848              and if UNS will not be needed again.  */
8849           if ((uns
8850                || CONVERT_EXPR_P (op))
8851               && TYPE_UNSIGNED (TREE_TYPE (op)))
8852             {
8853               uns = 1;
8854               win = op;
8855             }
8856         }
8857     }
8858
8859   /* If we finally reach a constant see if it fits in for_type and
8860      in that case convert it.  */
8861   if (for_type
8862       && TREE_CODE (win) == INTEGER_CST
8863       && TREE_TYPE (win) != for_type
8864       && int_fits_type_p (win, for_type))
8865     win = fold_convert (for_type, win);
8866
8867   return win;
8868 }
8869 \f
8870 /* Return OP or a simpler expression for a narrower value
8871    which can be sign-extended or zero-extended to give back OP.
8872    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8873    or 0 if the value should be sign-extended.  */
8874
8875 tree
8876 get_narrower (tree op, int *unsignedp_ptr)
8877 {
8878   int uns = 0;
8879   int first = 1;
8880   tree win = op;
8881   bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8882
8883   while (TREE_CODE (op) == NOP_EXPR)
8884     {
8885       int bitschange
8886         = (TYPE_PRECISION (TREE_TYPE (op))
8887            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8888
8889       /* Truncations are many-one so cannot be removed.  */
8890       if (bitschange < 0)
8891         break;
8892
8893       /* See what's inside this conversion.  If we decide to strip it,
8894          we will set WIN.  */
8895
8896       if (bitschange > 0)
8897         {
8898           op = TREE_OPERAND (op, 0);
8899           /* An extension: the outermost one can be stripped,
8900              but remember whether it is zero or sign extension.  */
8901           if (first)
8902             uns = TYPE_UNSIGNED (TREE_TYPE (op));
8903           /* Otherwise, if a sign extension has been stripped,
8904              only sign extensions can now be stripped;
8905              if a zero extension has been stripped, only zero-extensions.  */
8906           else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8907             break;
8908           first = 0;
8909         }
8910       else /* bitschange == 0 */
8911         {
8912           /* A change in nominal type can always be stripped, but we must
8913              preserve the unsignedness.  */
8914           if (first)
8915             uns = TYPE_UNSIGNED (TREE_TYPE (op));
8916           first = 0;
8917           op = TREE_OPERAND (op, 0);
8918           /* Keep trying to narrow, but don't assign op to win if it
8919              would turn an integral type into something else.  */
8920           if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8921             continue;
8922         }
8923
8924       win = op;
8925     }
8926
8927   if (TREE_CODE (op) == COMPONENT_REF
8928       /* Since type_for_size always gives an integer type.  */
8929       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8930       && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8931       /* Ensure field is laid out already.  */
8932       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8933       && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
8934     {
8935       unsigned HOST_WIDE_INT innerprec
8936         = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
8937       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8938                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8939       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8940
8941       /* We can get this structure field in a narrower type that fits it,
8942          but the resulting extension to its nominal type (a fullword type)
8943          must satisfy the same conditions as for other extensions.
8944
8945          Do this only for fields that are aligned (not bit-fields),
8946          because when bit-field insns will be used there is no
8947          advantage in doing this.  */
8948
8949       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8950           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8951           && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8952           && type != 0)
8953         {
8954           if (first)
8955             uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8956           win = fold_convert (type, op);
8957         }
8958     }
8959
8960   *unsignedp_ptr = uns;
8961   return win;
8962 }
8963 \f
8964 /* Returns true if integer constant C has a value that is permissible
8965    for type TYPE (an INTEGER_TYPE).  */
8966
8967 bool
8968 int_fits_type_p (const_tree c, const_tree type)
8969 {
8970   tree type_low_bound, type_high_bound;
8971   bool ok_for_low_bound, ok_for_high_bound;
8972   signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
8973
8974 retry:
8975   type_low_bound = TYPE_MIN_VALUE (type);
8976   type_high_bound = TYPE_MAX_VALUE (type);
8977
8978   /* If at least one bound of the type is a constant integer, we can check
8979      ourselves and maybe make a decision. If no such decision is possible, but
8980      this type is a subtype, try checking against that.  Otherwise, use
8981      fits_to_tree_p, which checks against the precision.
8982
8983      Compute the status for each possibly constant bound, and return if we see
8984      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
8985      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
8986      for "constant known to fit".  */
8987
8988   /* Check if c >= type_low_bound.  */
8989   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
8990     {
8991       if (tree_int_cst_lt (c, type_low_bound))
8992         return false;
8993       ok_for_low_bound = true;
8994     }
8995   else
8996     ok_for_low_bound = false;
8997
8998   /* Check if c <= type_high_bound.  */
8999   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
9000     {
9001       if (tree_int_cst_lt (type_high_bound, c))
9002         return false;
9003       ok_for_high_bound = true;
9004     }
9005   else
9006     ok_for_high_bound = false;
9007
9008   /* If the constant fits both bounds, the result is known.  */
9009   if (ok_for_low_bound && ok_for_high_bound)
9010     return true;
9011
9012   /* Perform some generic filtering which may allow making a decision
9013      even if the bounds are not constant.  First, negative integers
9014      never fit in unsigned types, */
9015   if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (c))
9016     return false;
9017
9018   /* Second, narrower types always fit in wider ones.  */
9019   if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
9020     return true;
9021
9022   /* Third, unsigned integers with top bit set never fit signed types.  */
9023   if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
9024     {
9025       int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
9026       if (prec < TYPE_PRECISION (TREE_TYPE (c)))
9027         {
9028           /* When a tree_cst is converted to a wide-int, the precision
9029              is taken from the type.  However, if the precision of the
9030              mode underneath the type is smaller than that, it is
9031              possible that the value will not fit.  The test below
9032              fails if any bit is set between the sign bit of the
9033              underlying mode and the top bit of the type.  */
9034           if (wi::ne_p (wi::zext (c, prec - 1), c))
9035             return false;
9036         }
9037       else if (wi::neg_p (c))
9038         return false;
9039     }
9040
9041   /* If we haven't been able to decide at this point, there nothing more we
9042      can check ourselves here.  Look at the base type if we have one and it
9043      has the same precision.  */
9044   if (TREE_CODE (type) == INTEGER_TYPE
9045       && TREE_TYPE (type) != 0
9046       && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
9047     {
9048       type = TREE_TYPE (type);
9049       goto retry;
9050     }
9051
9052   /* Or to fits_to_tree_p, if nothing else.  */
9053   return wi::fits_to_tree_p (c, type);
9054 }
9055
9056 /* Stores bounds of an integer TYPE in MIN and MAX.  If TYPE has non-constant
9057    bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
9058    represented (assuming two's-complement arithmetic) within the bit
9059    precision of the type are returned instead.  */
9060
9061 void
9062 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
9063 {
9064   if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
9065       && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
9066     wi::to_mpz (TYPE_MIN_VALUE (type), min, TYPE_SIGN (type));
9067   else
9068     {
9069       if (TYPE_UNSIGNED (type))
9070         mpz_set_ui (min, 0);
9071       else
9072         {
9073           wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
9074           wi::to_mpz (mn, min, SIGNED);
9075         }
9076     }
9077
9078   if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
9079       && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
9080     wi::to_mpz (TYPE_MAX_VALUE (type), max, TYPE_SIGN (type));
9081   else
9082     {
9083       wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
9084       wi::to_mpz (mn, max, TYPE_SIGN (type));
9085     }
9086 }
9087
9088 /* Return true if VAR is an automatic variable defined in function FN.  */
9089
9090 bool
9091 auto_var_in_fn_p (const_tree var, const_tree fn)
9092 {
9093   return (DECL_P (var) && DECL_CONTEXT (var) == fn
9094           && ((((TREE_CODE (var) == VAR_DECL && ! DECL_EXTERNAL (var))
9095                 || TREE_CODE (var) == PARM_DECL)
9096                && ! TREE_STATIC (var))
9097               || TREE_CODE (var) == LABEL_DECL
9098               || TREE_CODE (var) == RESULT_DECL));
9099 }
9100
9101 /* Subprogram of following function.  Called by walk_tree.
9102
9103    Return *TP if it is an automatic variable or parameter of the
9104    function passed in as DATA.  */
9105
9106 static tree
9107 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
9108 {
9109   tree fn = (tree) data;
9110
9111   if (TYPE_P (*tp))
9112     *walk_subtrees = 0;
9113
9114   else if (DECL_P (*tp)
9115            && auto_var_in_fn_p (*tp, fn))
9116     return *tp;
9117
9118   return NULL_TREE;
9119 }
9120
9121 /* Returns true if T is, contains, or refers to a type with variable
9122    size.  For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
9123    arguments, but not the return type.  If FN is nonzero, only return
9124    true if a modifier of the type or position of FN is a variable or
9125    parameter inside FN.
9126
9127    This concept is more general than that of C99 'variably modified types':
9128    in C99, a struct type is never variably modified because a VLA may not
9129    appear as a structure member.  However, in GNU C code like:
9130
9131      struct S { int i[f()]; };
9132
9133    is valid, and other languages may define similar constructs.  */
9134
9135 bool
9136 variably_modified_type_p (tree type, tree fn)
9137 {
9138   tree t;
9139
9140 /* Test if T is either variable (if FN is zero) or an expression containing
9141    a variable in FN.  If TYPE isn't gimplified, return true also if
9142    gimplify_one_sizepos would gimplify the expression into a local
9143    variable.  */
9144 #define RETURN_TRUE_IF_VAR(T)                                           \
9145   do { tree _t = (T);                                                   \
9146     if (_t != NULL_TREE                                                 \
9147         && _t != error_mark_node                                        \
9148         && TREE_CODE (_t) != INTEGER_CST                                \
9149         && TREE_CODE (_t) != PLACEHOLDER_EXPR                           \
9150         && (!fn                                                         \
9151             || (!TYPE_SIZES_GIMPLIFIED (type)                           \
9152                 && !is_gimple_sizepos (_t))                             \
9153             || walk_tree (&_t, find_var_from_fn, fn, NULL)))            \
9154       return true;  } while (0)
9155
9156   if (type == error_mark_node)
9157     return false;
9158
9159   /* If TYPE itself has variable size, it is variably modified.  */
9160   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
9161   RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
9162
9163   switch (TREE_CODE (type))
9164     {
9165     case POINTER_TYPE:
9166     case REFERENCE_TYPE:
9167     case VECTOR_TYPE:
9168       if (variably_modified_type_p (TREE_TYPE (type), fn))
9169         return true;
9170       break;
9171
9172     case FUNCTION_TYPE:
9173     case METHOD_TYPE:
9174       /* If TYPE is a function type, it is variably modified if the
9175          return type is variably modified.  */
9176       if (variably_modified_type_p (TREE_TYPE (type), fn))
9177           return true;
9178       break;
9179
9180     case INTEGER_TYPE:
9181     case REAL_TYPE:
9182     case FIXED_POINT_TYPE:
9183     case ENUMERAL_TYPE:
9184     case BOOLEAN_TYPE:
9185       /* Scalar types are variably modified if their end points
9186          aren't constant.  */
9187       RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
9188       RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
9189       break;
9190
9191     case RECORD_TYPE:
9192     case UNION_TYPE:
9193     case QUAL_UNION_TYPE:
9194       /* We can't see if any of the fields are variably-modified by the
9195          definition we normally use, since that would produce infinite
9196          recursion via pointers.  */
9197       /* This is variably modified if some field's type is.  */
9198       for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
9199         if (TREE_CODE (t) == FIELD_DECL)
9200           {
9201             RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
9202             RETURN_TRUE_IF_VAR (DECL_SIZE (t));
9203             RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
9204
9205             if (TREE_CODE (type) == QUAL_UNION_TYPE)
9206               RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
9207           }
9208       break;
9209
9210     case ARRAY_TYPE:
9211       /* Do not call ourselves to avoid infinite recursion.  This is
9212          variably modified if the element type is.  */
9213       RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
9214       RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
9215       break;
9216
9217     default:
9218       break;
9219     }
9220
9221   /* The current language may have other cases to check, but in general,
9222      all other types are not variably modified.  */
9223   return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
9224
9225 #undef RETURN_TRUE_IF_VAR
9226 }
9227
9228 /* Given a DECL or TYPE, return the scope in which it was declared, or
9229    NULL_TREE if there is no containing scope.  */
9230
9231 tree
9232 get_containing_scope (const_tree t)
9233 {
9234   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
9235 }
9236
9237 /* Return the innermost context enclosing DECL that is
9238    a FUNCTION_DECL, or zero if none.  */
9239
9240 tree
9241 decl_function_context (const_tree decl)
9242 {
9243   tree context;
9244
9245   if (TREE_CODE (decl) == ERROR_MARK)
9246     return 0;
9247
9248   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
9249      where we look up the function at runtime.  Such functions always take
9250      a first argument of type 'pointer to real context'.
9251
9252      C++ should really be fixed to use DECL_CONTEXT for the real context,
9253      and use something else for the "virtual context".  */
9254   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
9255     context
9256       = TYPE_MAIN_VARIANT
9257         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
9258   else
9259     context = DECL_CONTEXT (decl);
9260
9261   while (context && TREE_CODE (context) != FUNCTION_DECL)
9262     {
9263       if (TREE_CODE (context) == BLOCK)
9264         context = BLOCK_SUPERCONTEXT (context);
9265       else
9266         context = get_containing_scope (context);
9267     }
9268
9269   return context;
9270 }
9271
9272 /* Return the innermost context enclosing DECL that is
9273    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9274    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
9275
9276 tree
9277 decl_type_context (const_tree decl)
9278 {
9279   tree context = DECL_CONTEXT (decl);
9280
9281   while (context)
9282     switch (TREE_CODE (context))
9283       {
9284       case NAMESPACE_DECL:
9285       case TRANSLATION_UNIT_DECL:
9286         return NULL_TREE;
9287
9288       case RECORD_TYPE:
9289       case UNION_TYPE:
9290       case QUAL_UNION_TYPE:
9291         return context;
9292
9293       case TYPE_DECL:
9294       case FUNCTION_DECL:
9295         context = DECL_CONTEXT (context);
9296         break;
9297
9298       case BLOCK:
9299         context = BLOCK_SUPERCONTEXT (context);
9300         break;
9301
9302       default:
9303         gcc_unreachable ();
9304       }
9305
9306   return NULL_TREE;
9307 }
9308
9309 /* CALL is a CALL_EXPR.  Return the declaration for the function
9310    called, or NULL_TREE if the called function cannot be
9311    determined.  */
9312
9313 tree
9314 get_callee_fndecl (const_tree call)
9315 {
9316   tree addr;
9317
9318   if (call == error_mark_node)
9319     return error_mark_node;
9320
9321   /* It's invalid to call this function with anything but a
9322      CALL_EXPR.  */
9323   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9324
9325   /* The first operand to the CALL is the address of the function
9326      called.  */
9327   addr = CALL_EXPR_FN (call);
9328
9329   /* If there is no function, return early.  */
9330   if (addr == NULL_TREE)
9331     return NULL_TREE;
9332
9333   STRIP_NOPS (addr);
9334
9335   /* If this is a readonly function pointer, extract its initial value.  */
9336   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9337       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9338       && DECL_INITIAL (addr))
9339     addr = DECL_INITIAL (addr);
9340
9341   /* If the address is just `&f' for some function `f', then we know
9342      that `f' is being called.  */
9343   if (TREE_CODE (addr) == ADDR_EXPR
9344       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9345     return TREE_OPERAND (addr, 0);
9346
9347   /* We couldn't figure out what was being called.  */
9348   return NULL_TREE;
9349 }
9350
9351 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
9352    return the associated function code, otherwise return CFN_LAST.  */
9353
9354 combined_fn
9355 get_call_combined_fn (const_tree call)
9356 {
9357   /* It's invalid to call this function with anything but a CALL_EXPR.  */
9358   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9359
9360   if (!CALL_EXPR_FN (call))
9361     return as_combined_fn (CALL_EXPR_IFN (call));
9362
9363   tree fndecl = get_callee_fndecl (call);
9364   if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
9365     return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
9366
9367   return CFN_LAST;
9368 }
9369
9370 #define TREE_MEM_USAGE_SPACES 40
9371
9372 /* Print debugging information about tree nodes generated during the compile,
9373    and any language-specific information.  */
9374
9375 void
9376 dump_tree_statistics (void)
9377 {
9378   if (GATHER_STATISTICS)
9379     {
9380       int i;
9381       int total_nodes, total_bytes;
9382       fprintf (stderr, "\nKind                   Nodes      Bytes\n");
9383       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9384       total_nodes = total_bytes = 0;
9385       for (i = 0; i < (int) all_kinds; i++)
9386         {
9387           fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9388                    tree_node_counts[i], tree_node_sizes[i]);
9389           total_nodes += tree_node_counts[i];
9390           total_bytes += tree_node_sizes[i];
9391         }
9392       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9393       fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9394       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9395       fprintf (stderr, "Code                   Nodes\n");
9396       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9397       for (i = 0; i < (int) MAX_TREE_CODES; i++)
9398         fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i),
9399                  tree_code_counts[i]);
9400       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9401       fprintf (stderr, "\n");
9402       ssanames_print_statistics ();
9403       fprintf (stderr, "\n");
9404       phinodes_print_statistics ();
9405       fprintf (stderr, "\n");
9406     }
9407   else
9408     fprintf (stderr, "(No per-node statistics)\n");
9409
9410   print_type_hash_statistics ();
9411   print_debug_expr_statistics ();
9412   print_value_expr_statistics ();
9413   lang_hooks.print_statistics ();
9414 }
9415 \f
9416 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9417
9418 /* Generate a crc32 of a byte.  */
9419
9420 static unsigned
9421 crc32_unsigned_bits (unsigned chksum, unsigned value, unsigned bits)
9422 {
9423   unsigned ix;
9424
9425   for (ix = bits; ix--; value <<= 1)
9426     {
9427       unsigned feedback;
9428       
9429       feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
9430       chksum <<= 1;
9431       chksum ^= feedback;
9432     }
9433   return chksum;
9434 }
9435
9436 /* Generate a crc32 of a 32-bit unsigned.  */
9437
9438 unsigned
9439 crc32_unsigned (unsigned chksum, unsigned value)
9440 {
9441   return crc32_unsigned_bits (chksum, value, 32);
9442 }
9443
9444 /* Generate a crc32 of a byte.  */
9445
9446 unsigned
9447 crc32_byte (unsigned chksum, char byte)
9448 {
9449   return crc32_unsigned_bits (chksum, (unsigned) byte << 24, 8);
9450 }
9451
9452 /* Generate a crc32 of a string.  */
9453
9454 unsigned
9455 crc32_string (unsigned chksum, const char *string)
9456 {
9457   do
9458     {
9459       chksum = crc32_byte (chksum, *string);
9460     }
9461   while (*string++);
9462   return chksum;
9463 }
9464
9465 /* P is a string that will be used in a symbol.  Mask out any characters
9466    that are not valid in that context.  */
9467
9468 void
9469 clean_symbol_name (char *p)
9470 {
9471   for (; *p; p++)
9472     if (! (ISALNUM (*p)
9473 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
9474             || *p == '$'
9475 #endif
9476 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
9477             || *p == '.'
9478 #endif
9479            ))
9480       *p = '_';
9481 }
9482
9483 /* For anonymous aggregate types, we need some sort of name to
9484    hold on to.  In practice, this should not appear, but it should
9485    not be harmful if it does.  */
9486 bool 
9487 anon_aggrname_p(const_tree id_node)
9488 {
9489 #ifndef NO_DOT_IN_LABEL
9490  return (IDENTIFIER_POINTER (id_node)[0] == '.'
9491          && IDENTIFIER_POINTER (id_node)[1] == '_');
9492 #else /* NO_DOT_IN_LABEL */
9493 #ifndef NO_DOLLAR_IN_LABEL
9494   return (IDENTIFIER_POINTER (id_node)[0] == '$' \
9495           && IDENTIFIER_POINTER (id_node)[1] == '_');
9496 #else /* NO_DOLLAR_IN_LABEL */
9497 #define ANON_AGGRNAME_PREFIX "__anon_"
9498   return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX, 
9499                     sizeof (ANON_AGGRNAME_PREFIX) - 1));
9500 #endif  /* NO_DOLLAR_IN_LABEL */
9501 #endif  /* NO_DOT_IN_LABEL */
9502 }
9503
9504 /* Return a format for an anonymous aggregate name.  */
9505 const char *
9506 anon_aggrname_format()
9507 {
9508 #ifndef NO_DOT_IN_LABEL
9509  return "._%d";
9510 #else /* NO_DOT_IN_LABEL */
9511 #ifndef NO_DOLLAR_IN_LABEL
9512   return "$_%d";
9513 #else /* NO_DOLLAR_IN_LABEL */
9514   return "__anon_%d";
9515 #endif  /* NO_DOLLAR_IN_LABEL */
9516 #endif  /* NO_DOT_IN_LABEL */
9517 }
9518
9519 /* Generate a name for a special-purpose function.
9520    The generated name may need to be unique across the whole link.
9521    Changes to this function may also require corresponding changes to
9522    xstrdup_mask_random.
9523    TYPE is some string to identify the purpose of this function to the
9524    linker or collect2; it must start with an uppercase letter,
9525    one of:
9526    I - for constructors
9527    D - for destructors
9528    N - for C++ anonymous namespaces
9529    F - for DWARF unwind frame information.  */
9530
9531 tree
9532 get_file_function_name (const char *type)
9533 {
9534   char *buf;
9535   const char *p;
9536   char *q;
9537
9538   /* If we already have a name we know to be unique, just use that.  */
9539   if (first_global_object_name)
9540     p = q = ASTRDUP (first_global_object_name);
9541   /* If the target is handling the constructors/destructors, they
9542      will be local to this file and the name is only necessary for
9543      debugging purposes. 
9544      We also assign sub_I and sub_D sufixes to constructors called from
9545      the global static constructors.  These are always local.  */
9546   else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9547            || (strncmp (type, "sub_", 4) == 0
9548                && (type[4] == 'I' || type[4] == 'D')))
9549     {
9550       const char *file = main_input_filename;
9551       if (! file)
9552         file = LOCATION_FILE (input_location);
9553       /* Just use the file's basename, because the full pathname
9554          might be quite long.  */
9555       p = q = ASTRDUP (lbasename (file));
9556     }
9557   else
9558     {
9559       /* Otherwise, the name must be unique across the entire link.
9560          We don't have anything that we know to be unique to this translation
9561          unit, so use what we do have and throw in some randomness.  */
9562       unsigned len;
9563       const char *name = weak_global_object_name;
9564       const char *file = main_input_filename;
9565
9566       if (! name)
9567         name = "";
9568       if (! file)
9569         file = LOCATION_FILE (input_location);
9570
9571       len = strlen (file);
9572       q = (char *) alloca (9 + 17 + len + 1);
9573       memcpy (q, file, len + 1);
9574
9575       snprintf (q + len, 9 + 17 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX, 
9576                 crc32_string (0, name), get_random_seed (false));
9577
9578       p = q;
9579     }
9580
9581   clean_symbol_name (q);
9582   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9583                          + strlen (type));
9584
9585   /* Set up the name of the file-level functions we may need.
9586      Use a global object (which is already required to be unique over
9587      the program) rather than the file name (which imposes extra
9588      constraints).  */
9589   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9590
9591   return get_identifier (buf);
9592 }
9593 \f
9594 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9595
9596 /* Complain that the tree code of NODE does not match the expected 0
9597    terminated list of trailing codes. The trailing code list can be
9598    empty, for a more vague error message.  FILE, LINE, and FUNCTION
9599    are of the caller.  */
9600
9601 void
9602 tree_check_failed (const_tree node, const char *file,
9603                    int line, const char *function, ...)
9604 {
9605   va_list args;
9606   const char *buffer;
9607   unsigned length = 0;
9608   enum tree_code code;
9609
9610   va_start (args, function);
9611   while ((code = (enum tree_code) va_arg (args, int)))
9612     length += 4 + strlen (get_tree_code_name (code));
9613   va_end (args);
9614   if (length)
9615     {
9616       char *tmp;
9617       va_start (args, function);
9618       length += strlen ("expected ");
9619       buffer = tmp = (char *) alloca (length);
9620       length = 0;
9621       while ((code = (enum tree_code) va_arg (args, int)))
9622         {
9623           const char *prefix = length ? " or " : "expected ";
9624
9625           strcpy (tmp + length, prefix);
9626           length += strlen (prefix);
9627           strcpy (tmp + length, get_tree_code_name (code));
9628           length += strlen (get_tree_code_name (code));
9629         }
9630       va_end (args);
9631     }
9632   else
9633     buffer = "unexpected node";
9634
9635   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9636                   buffer, get_tree_code_name (TREE_CODE (node)),
9637                   function, trim_filename (file), line);
9638 }
9639
9640 /* Complain that the tree code of NODE does match the expected 0
9641    terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9642    the caller.  */
9643
9644 void
9645 tree_not_check_failed (const_tree node, const char *file,
9646                        int line, const char *function, ...)
9647 {
9648   va_list args;
9649   char *buffer;
9650   unsigned length = 0;
9651   enum tree_code code;
9652
9653   va_start (args, function);
9654   while ((code = (enum tree_code) va_arg (args, int)))
9655     length += 4 + strlen (get_tree_code_name (code));
9656   va_end (args);
9657   va_start (args, function);
9658   buffer = (char *) alloca (length);
9659   length = 0;
9660   while ((code = (enum tree_code) va_arg (args, int)))
9661     {
9662       if (length)
9663         {
9664           strcpy (buffer + length, " or ");
9665           length += 4;
9666         }
9667       strcpy (buffer + length, get_tree_code_name (code));
9668       length += strlen (get_tree_code_name (code));
9669     }
9670   va_end (args);
9671
9672   internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9673                   buffer, get_tree_code_name (TREE_CODE (node)),
9674                   function, trim_filename (file), line);
9675 }
9676
9677 /* Similar to tree_check_failed, except that we check for a class of tree
9678    code, given in CL.  */
9679
9680 void
9681 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9682                          const char *file, int line, const char *function)
9683 {
9684   internal_error
9685     ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9686      TREE_CODE_CLASS_STRING (cl),
9687      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9688      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9689 }
9690
9691 /* Similar to tree_check_failed, except that instead of specifying a
9692    dozen codes, use the knowledge that they're all sequential.  */
9693
9694 void
9695 tree_range_check_failed (const_tree node, const char *file, int line,
9696                          const char *function, enum tree_code c1,
9697                          enum tree_code c2)
9698 {
9699   char *buffer;
9700   unsigned length = 0;
9701   unsigned int c;
9702
9703   for (c = c1; c <= c2; ++c)
9704     length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9705
9706   length += strlen ("expected ");
9707   buffer = (char *) alloca (length);
9708   length = 0;
9709
9710   for (c = c1; c <= c2; ++c)
9711     {
9712       const char *prefix = length ? " or " : "expected ";
9713
9714       strcpy (buffer + length, prefix);
9715       length += strlen (prefix);
9716       strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9717       length += strlen (get_tree_code_name ((enum tree_code) c));
9718     }
9719
9720   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9721                   buffer, get_tree_code_name (TREE_CODE (node)),
9722                   function, trim_filename (file), line);
9723 }
9724
9725
9726 /* Similar to tree_check_failed, except that we check that a tree does
9727    not have the specified code, given in CL.  */
9728
9729 void
9730 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9731                              const char *file, int line, const char *function)
9732 {
9733   internal_error
9734     ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9735      TREE_CODE_CLASS_STRING (cl),
9736      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9737      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9738 }
9739
9740
9741 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes.  */
9742
9743 void
9744 omp_clause_check_failed (const_tree node, const char *file, int line,
9745                          const char *function, enum omp_clause_code code)
9746 {
9747   internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9748                   omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9749                   function, trim_filename (file), line);
9750 }
9751
9752
9753 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes.  */
9754
9755 void
9756 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9757                                const char *function, enum omp_clause_code c1,
9758                                enum omp_clause_code c2)
9759 {
9760   char *buffer;
9761   unsigned length = 0;
9762   unsigned int c;
9763
9764   for (c = c1; c <= c2; ++c)
9765     length += 4 + strlen (omp_clause_code_name[c]);
9766
9767   length += strlen ("expected ");
9768   buffer = (char *) alloca (length);
9769   length = 0;
9770
9771   for (c = c1; c <= c2; ++c)
9772     {
9773       const char *prefix = length ? " or " : "expected ";
9774
9775       strcpy (buffer + length, prefix);
9776       length += strlen (prefix);
9777       strcpy (buffer + length, omp_clause_code_name[c]);
9778       length += strlen (omp_clause_code_name[c]);
9779     }
9780
9781   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9782                   buffer, omp_clause_code_name[TREE_CODE (node)],
9783                   function, trim_filename (file), line);
9784 }
9785
9786
9787 #undef DEFTREESTRUCT
9788 #define DEFTREESTRUCT(VAL, NAME) NAME,
9789
9790 static const char *ts_enum_names[] = {
9791 #include "treestruct.def"
9792 };
9793 #undef DEFTREESTRUCT
9794
9795 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9796
9797 /* Similar to tree_class_check_failed, except that we check for
9798    whether CODE contains the tree structure identified by EN.  */
9799
9800 void
9801 tree_contains_struct_check_failed (const_tree node,
9802                                    const enum tree_node_structure_enum en,
9803                                    const char *file, int line,
9804                                    const char *function)
9805 {
9806   internal_error
9807     ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9808      TS_ENUM_NAME (en),
9809      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9810 }
9811
9812
9813 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9814    (dynamically sized) vector.  */
9815
9816 void
9817 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
9818                                const char *function)
9819 {
9820   internal_error
9821     ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
9822      idx + 1, len, function, trim_filename (file), line);
9823 }
9824
9825 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9826    (dynamically sized) vector.  */
9827
9828 void
9829 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9830                            const char *function)
9831 {
9832   internal_error
9833     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
9834      idx + 1, len, function, trim_filename (file), line);
9835 }
9836
9837 /* Similar to above, except that the check is for the bounds of the operand
9838    vector of an expression node EXP.  */
9839
9840 void
9841 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9842                            int line, const char *function)
9843 {
9844   enum tree_code code = TREE_CODE (exp);
9845   internal_error
9846     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9847      idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9848      function, trim_filename (file), line);
9849 }
9850
9851 /* Similar to above, except that the check is for the number of
9852    operands of an OMP_CLAUSE node.  */
9853
9854 void
9855 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9856                                  int line, const char *function)
9857 {
9858   internal_error
9859     ("tree check: accessed operand %d of omp_clause %s with %d operands "
9860      "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9861      omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9862      trim_filename (file), line);
9863 }
9864 #endif /* ENABLE_TREE_CHECKING */
9865 \f
9866 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
9867    and mapped to the machine mode MODE.  Initialize its fields and build
9868    the information necessary for debugging output.  */
9869
9870 static tree
9871 make_vector_type (tree innertype, int nunits, machine_mode mode)
9872 {
9873   tree t;
9874   inchash::hash hstate;
9875   tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
9876
9877   t = make_node (VECTOR_TYPE);
9878   TREE_TYPE (t) = mv_innertype;
9879   SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9880   SET_TYPE_MODE (t, mode);
9881
9882   if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
9883     SET_TYPE_STRUCTURAL_EQUALITY (t);
9884   else if ((TYPE_CANONICAL (mv_innertype) != innertype
9885             || mode != VOIDmode)
9886            && !VECTOR_BOOLEAN_TYPE_P (t))
9887     TYPE_CANONICAL (t)
9888       = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
9889
9890   layout_type (t);
9891
9892   hstate.add_wide_int (VECTOR_TYPE);
9893   hstate.add_wide_int (nunits);
9894   hstate.add_wide_int (mode);
9895   hstate.add_object (TYPE_HASH (TREE_TYPE (t)));
9896   t = type_hash_canon (hstate.end (), t);
9897
9898   /* We have built a main variant, based on the main variant of the
9899      inner type. Use it to build the variant we return.  */
9900   if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
9901       && TREE_TYPE (t) != innertype)
9902     return build_type_attribute_qual_variant (t,
9903                                               TYPE_ATTRIBUTES (innertype),
9904                                               TYPE_QUALS (innertype));
9905
9906   return t;
9907 }
9908
9909 static tree
9910 make_or_reuse_type (unsigned size, int unsignedp)
9911 {
9912   int i;
9913
9914   if (size == INT_TYPE_SIZE)
9915     return unsignedp ? unsigned_type_node : integer_type_node;
9916   if (size == CHAR_TYPE_SIZE)
9917     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
9918   if (size == SHORT_TYPE_SIZE)
9919     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
9920   if (size == LONG_TYPE_SIZE)
9921     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
9922   if (size == LONG_LONG_TYPE_SIZE)
9923     return (unsignedp ? long_long_unsigned_type_node
9924             : long_long_integer_type_node);
9925
9926   for (i = 0; i < NUM_INT_N_ENTS; i ++)
9927     if (size == int_n_data[i].bitsize
9928         && int_n_enabled_p[i])
9929       return (unsignedp ? int_n_trees[i].unsigned_type
9930               : int_n_trees[i].signed_type);
9931
9932   if (unsignedp)
9933     return make_unsigned_type (size);
9934   else
9935     return make_signed_type (size);
9936 }
9937
9938 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP.  */
9939
9940 static tree
9941 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
9942 {
9943   if (satp)
9944     {
9945       if (size == SHORT_FRACT_TYPE_SIZE)
9946         return unsignedp ? sat_unsigned_short_fract_type_node
9947                          : sat_short_fract_type_node;
9948       if (size == FRACT_TYPE_SIZE)
9949         return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
9950       if (size == LONG_FRACT_TYPE_SIZE)
9951         return unsignedp ? sat_unsigned_long_fract_type_node
9952                          : sat_long_fract_type_node;
9953       if (size == LONG_LONG_FRACT_TYPE_SIZE)
9954         return unsignedp ? sat_unsigned_long_long_fract_type_node
9955                          : sat_long_long_fract_type_node;
9956     }
9957   else
9958     {
9959       if (size == SHORT_FRACT_TYPE_SIZE)
9960         return unsignedp ? unsigned_short_fract_type_node
9961                          : short_fract_type_node;
9962       if (size == FRACT_TYPE_SIZE)
9963         return unsignedp ? unsigned_fract_type_node : fract_type_node;
9964       if (size == LONG_FRACT_TYPE_SIZE)
9965         return unsignedp ? unsigned_long_fract_type_node
9966                          : long_fract_type_node;
9967       if (size == LONG_LONG_FRACT_TYPE_SIZE)
9968         return unsignedp ? unsigned_long_long_fract_type_node
9969                          : long_long_fract_type_node;
9970     }
9971
9972   return make_fract_type (size, unsignedp, satp);
9973 }
9974
9975 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP.  */
9976
9977 static tree
9978 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
9979 {
9980   if (satp)
9981     {
9982       if (size == SHORT_ACCUM_TYPE_SIZE)
9983         return unsignedp ? sat_unsigned_short_accum_type_node
9984                          : sat_short_accum_type_node;
9985       if (size == ACCUM_TYPE_SIZE)
9986         return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
9987       if (size == LONG_ACCUM_TYPE_SIZE)
9988         return unsignedp ? sat_unsigned_long_accum_type_node
9989                          : sat_long_accum_type_node;
9990       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9991         return unsignedp ? sat_unsigned_long_long_accum_type_node
9992                          : sat_long_long_accum_type_node;
9993     }
9994   else
9995     {
9996       if (size == SHORT_ACCUM_TYPE_SIZE)
9997         return unsignedp ? unsigned_short_accum_type_node
9998                          : short_accum_type_node;
9999       if (size == ACCUM_TYPE_SIZE)
10000         return unsignedp ? unsigned_accum_type_node : accum_type_node;
10001       if (size == LONG_ACCUM_TYPE_SIZE)
10002         return unsignedp ? unsigned_long_accum_type_node
10003                          : long_accum_type_node;
10004       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10005         return unsignedp ? unsigned_long_long_accum_type_node
10006                          : long_long_accum_type_node;
10007     }
10008
10009   return make_accum_type (size, unsignedp, satp);
10010 }
10011
10012
10013 /* Create an atomic variant node for TYPE.  This routine is called
10014    during initialization of data types to create the 5 basic atomic
10015    types. The generic build_variant_type function requires these to
10016    already be set up in order to function properly, so cannot be
10017    called from there.  If ALIGN is non-zero, then ensure alignment is
10018    overridden to this value.  */
10019
10020 static tree
10021 build_atomic_base (tree type, unsigned int align)
10022 {
10023   tree t;
10024
10025   /* Make sure its not already registered.  */
10026   if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
10027     return t;
10028   
10029   t = build_variant_type_copy (type);
10030   set_type_quals (t, TYPE_QUAL_ATOMIC);
10031
10032   if (align)
10033     TYPE_ALIGN (t) = align;
10034
10035   return t;
10036 }
10037
10038 /* Create nodes for all integer types (and error_mark_node) using the sizes
10039    of C datatypes.  SIGNED_CHAR specifies whether char is signed.  */
10040
10041 void
10042 build_common_tree_nodes (bool signed_char)
10043 {
10044   int i;
10045
10046   error_mark_node = make_node (ERROR_MARK);
10047   TREE_TYPE (error_mark_node) = error_mark_node;
10048
10049   initialize_sizetypes ();
10050
10051   /* Define both `signed char' and `unsigned char'.  */
10052   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
10053   TYPE_STRING_FLAG (signed_char_type_node) = 1;
10054   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
10055   TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
10056
10057   /* Define `char', which is like either `signed char' or `unsigned char'
10058      but not the same as either.  */
10059   char_type_node
10060     = (signed_char
10061        ? make_signed_type (CHAR_TYPE_SIZE)
10062        : make_unsigned_type (CHAR_TYPE_SIZE));
10063   TYPE_STRING_FLAG (char_type_node) = 1;
10064
10065   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
10066   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
10067   integer_type_node = make_signed_type (INT_TYPE_SIZE);
10068   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
10069   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
10070   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
10071   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
10072   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
10073
10074   for (i = 0; i < NUM_INT_N_ENTS; i ++)
10075     {
10076       int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
10077       int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
10078       TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
10079       TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
10080
10081       if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
10082           && int_n_enabled_p[i])
10083         {
10084           integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
10085           integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
10086         }
10087     }
10088
10089   /* Define a boolean type.  This type only represents boolean values but
10090      may be larger than char depending on the value of BOOL_TYPE_SIZE.  */
10091   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
10092   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
10093   TYPE_PRECISION (boolean_type_node) = 1;
10094   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
10095
10096   /* Define what type to use for size_t.  */
10097   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
10098     size_type_node = unsigned_type_node;
10099   else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
10100     size_type_node = long_unsigned_type_node;
10101   else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
10102     size_type_node = long_long_unsigned_type_node;
10103   else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
10104     size_type_node = short_unsigned_type_node;
10105   else
10106     {
10107       int i;
10108
10109       size_type_node = NULL_TREE;
10110       for (i = 0; i < NUM_INT_N_ENTS; i++)
10111         if (int_n_enabled_p[i])
10112           {
10113             char name[50];
10114             sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
10115
10116             if (strcmp (name, SIZE_TYPE) == 0)
10117               {
10118                 size_type_node = int_n_trees[i].unsigned_type;
10119               }
10120           }
10121       if (size_type_node == NULL_TREE)
10122         gcc_unreachable ();
10123     }
10124
10125   /* Fill in the rest of the sized types.  Reuse existing type nodes
10126      when possible.  */
10127   intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
10128   intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
10129   intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
10130   intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
10131   intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
10132
10133   unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
10134   unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
10135   unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
10136   unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
10137   unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
10138
10139   /* Don't call build_qualified type for atomics.  That routine does
10140      special processing for atomics, and until they are initialized
10141      it's better not to make that call.
10142      
10143      Check to see if there is a target override for atomic types.  */
10144
10145   atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
10146                                         targetm.atomic_align_for_mode (QImode));
10147   atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
10148                                         targetm.atomic_align_for_mode (HImode));
10149   atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
10150                                         targetm.atomic_align_for_mode (SImode));
10151   atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
10152                                         targetm.atomic_align_for_mode (DImode));
10153   atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
10154                                         targetm.atomic_align_for_mode (TImode));
10155         
10156   access_public_node = get_identifier ("public");
10157   access_protected_node = get_identifier ("protected");
10158   access_private_node = get_identifier ("private");
10159
10160   /* Define these next since types below may used them.  */
10161   integer_zero_node = build_int_cst (integer_type_node, 0);
10162   integer_one_node = build_int_cst (integer_type_node, 1);
10163   integer_three_node = build_int_cst (integer_type_node, 3);
10164   integer_minus_one_node = build_int_cst (integer_type_node, -1);
10165
10166   size_zero_node = size_int (0);
10167   size_one_node = size_int (1);
10168   bitsize_zero_node = bitsize_int (0);
10169   bitsize_one_node = bitsize_int (1);
10170   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
10171
10172   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
10173   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
10174
10175   void_type_node = make_node (VOID_TYPE);
10176   layout_type (void_type_node);
10177
10178   pointer_bounds_type_node = targetm.chkp_bound_type ();
10179
10180   /* We are not going to have real types in C with less than byte alignment,
10181      so we might as well not have any types that claim to have it.  */
10182   TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
10183   TYPE_USER_ALIGN (void_type_node) = 0;
10184
10185   void_node = make_node (VOID_CST);
10186   TREE_TYPE (void_node) = void_type_node;
10187
10188   null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
10189   layout_type (TREE_TYPE (null_pointer_node));
10190
10191   ptr_type_node = build_pointer_type (void_type_node);
10192   const_ptr_type_node
10193     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
10194   fileptr_type_node = ptr_type_node;
10195
10196   pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
10197
10198   float_type_node = make_node (REAL_TYPE);
10199   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
10200   layout_type (float_type_node);
10201
10202   double_type_node = make_node (REAL_TYPE);
10203   TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
10204   layout_type (double_type_node);
10205
10206   long_double_type_node = make_node (REAL_TYPE);
10207   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
10208   layout_type (long_double_type_node);
10209
10210   float_ptr_type_node = build_pointer_type (float_type_node);
10211   double_ptr_type_node = build_pointer_type (double_type_node);
10212   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
10213   integer_ptr_type_node = build_pointer_type (integer_type_node);
10214
10215   /* Fixed size integer types.  */
10216   uint16_type_node = make_or_reuse_type (16, 1);
10217   uint32_type_node = make_or_reuse_type (32, 1);
10218   uint64_type_node = make_or_reuse_type (64, 1);
10219
10220   /* Decimal float types. */
10221   dfloat32_type_node = make_node (REAL_TYPE);
10222   TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
10223   layout_type (dfloat32_type_node);
10224   SET_TYPE_MODE (dfloat32_type_node, SDmode);
10225   dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
10226
10227   dfloat64_type_node = make_node (REAL_TYPE);
10228   TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
10229   layout_type (dfloat64_type_node);
10230   SET_TYPE_MODE (dfloat64_type_node, DDmode);
10231   dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
10232
10233   dfloat128_type_node = make_node (REAL_TYPE);
10234   TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
10235   layout_type (dfloat128_type_node);
10236   SET_TYPE_MODE (dfloat128_type_node, TDmode);
10237   dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
10238
10239   complex_integer_type_node = build_complex_type (integer_type_node);
10240   complex_float_type_node = build_complex_type (float_type_node);
10241   complex_double_type_node = build_complex_type (double_type_node);
10242   complex_long_double_type_node = build_complex_type (long_double_type_node);
10243
10244 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned.  */
10245 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
10246   sat_ ## KIND ## _type_node = \
10247     make_sat_signed_ ## KIND ## _type (SIZE); \
10248   sat_unsigned_ ## KIND ## _type_node = \
10249     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10250   KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10251   unsigned_ ## KIND ## _type_node = \
10252     make_unsigned_ ## KIND ## _type (SIZE);
10253
10254 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
10255   sat_ ## WIDTH ## KIND ## _type_node = \
10256     make_sat_signed_ ## KIND ## _type (SIZE); \
10257   sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
10258     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10259   WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10260   unsigned_ ## WIDTH ## KIND ## _type_node = \
10261     make_unsigned_ ## KIND ## _type (SIZE);
10262
10263 /* Make fixed-point type nodes based on four different widths.  */
10264 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
10265   MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
10266   MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
10267   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
10268   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
10269
10270 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned.  */
10271 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
10272   NAME ## _type_node = \
10273     make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
10274   u ## NAME ## _type_node = \
10275     make_or_reuse_unsigned_ ## KIND ## _type \
10276       (GET_MODE_BITSIZE (U ## MODE ## mode)); \
10277   sat_ ## NAME ## _type_node = \
10278     make_or_reuse_sat_signed_ ## KIND ## _type \
10279       (GET_MODE_BITSIZE (MODE ## mode)); \
10280   sat_u ## NAME ## _type_node = \
10281     make_or_reuse_sat_unsigned_ ## KIND ## _type \
10282       (GET_MODE_BITSIZE (U ## MODE ## mode));
10283
10284   /* Fixed-point type and mode nodes.  */
10285   MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
10286   MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
10287   MAKE_FIXED_MODE_NODE (fract, qq, QQ)
10288   MAKE_FIXED_MODE_NODE (fract, hq, HQ)
10289   MAKE_FIXED_MODE_NODE (fract, sq, SQ)
10290   MAKE_FIXED_MODE_NODE (fract, dq, DQ)
10291   MAKE_FIXED_MODE_NODE (fract, tq, TQ)
10292   MAKE_FIXED_MODE_NODE (accum, ha, HA)
10293   MAKE_FIXED_MODE_NODE (accum, sa, SA)
10294   MAKE_FIXED_MODE_NODE (accum, da, DA)
10295   MAKE_FIXED_MODE_NODE (accum, ta, TA)
10296
10297   {
10298     tree t = targetm.build_builtin_va_list ();
10299
10300     /* Many back-ends define record types without setting TYPE_NAME.
10301        If we copied the record type here, we'd keep the original
10302        record type without a name.  This breaks name mangling.  So,
10303        don't copy record types and let c_common_nodes_and_builtins()
10304        declare the type to be __builtin_va_list.  */
10305     if (TREE_CODE (t) != RECORD_TYPE)
10306       t = build_variant_type_copy (t);
10307
10308     va_list_type_node = t;
10309   }
10310 }
10311
10312 /* Modify DECL for given flags.
10313    TM_PURE attribute is set only on types, so the function will modify
10314    DECL's type when ECF_TM_PURE is used.  */
10315
10316 void
10317 set_call_expr_flags (tree decl, int flags)
10318 {
10319   if (flags & ECF_NOTHROW)
10320     TREE_NOTHROW (decl) = 1;
10321   if (flags & ECF_CONST)
10322     TREE_READONLY (decl) = 1;
10323   if (flags & ECF_PURE)
10324     DECL_PURE_P (decl) = 1;
10325   if (flags & ECF_LOOPING_CONST_OR_PURE)
10326     DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
10327   if (flags & ECF_NOVOPS)
10328     DECL_IS_NOVOPS (decl) = 1;
10329   if (flags & ECF_NORETURN)
10330     TREE_THIS_VOLATILE (decl) = 1;
10331   if (flags & ECF_MALLOC)
10332     DECL_IS_MALLOC (decl) = 1;
10333   if (flags & ECF_RETURNS_TWICE)
10334     DECL_IS_RETURNS_TWICE (decl) = 1;
10335   if (flags & ECF_LEAF)
10336     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
10337                                         NULL, DECL_ATTRIBUTES (decl));
10338   if ((flags & ECF_TM_PURE) && flag_tm)
10339     apply_tm_attr (decl, get_identifier ("transaction_pure"));
10340   /* Looping const or pure is implied by noreturn.
10341      There is currently no way to declare looping const or looping pure alone.  */
10342   gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
10343               || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
10344 }
10345
10346
10347 /* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
10348
10349 static void
10350 local_define_builtin (const char *name, tree type, enum built_in_function code,
10351                       const char *library_name, int ecf_flags)
10352 {
10353   tree decl;
10354
10355   decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10356                                library_name, NULL_TREE);
10357   set_call_expr_flags (decl, ecf_flags);
10358
10359   set_builtin_decl (code, decl, true);
10360 }
10361
10362 /* Call this function after instantiating all builtins that the language
10363    front end cares about.  This will build the rest of the builtins
10364    and internal functions that are relied upon by the tree optimizers and
10365    the middle-end.  */
10366
10367 void
10368 build_common_builtin_nodes (void)
10369 {
10370   tree tmp, ftype;
10371   int ecf_flags;
10372
10373   if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10374     {
10375       ftype = build_function_type (void_type_node, void_list_node);
10376       local_define_builtin ("__builtin_unreachable", ftype, BUILT_IN_UNREACHABLE,
10377                             "__builtin_unreachable",
10378                             ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10379                             | ECF_CONST);
10380     }
10381
10382   if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10383       || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10384     {
10385       ftype = build_function_type_list (ptr_type_node,
10386                                         ptr_type_node, const_ptr_type_node,
10387                                         size_type_node, NULL_TREE);
10388
10389       if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10390         local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10391                               "memcpy", ECF_NOTHROW | ECF_LEAF);
10392       if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10393         local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10394                               "memmove", ECF_NOTHROW | ECF_LEAF);
10395     }
10396
10397   if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10398     {
10399       ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10400                                         const_ptr_type_node, size_type_node,
10401                                         NULL_TREE);
10402       local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10403                             "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10404     }
10405
10406   if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10407     {
10408       ftype = build_function_type_list (ptr_type_node,
10409                                         ptr_type_node, integer_type_node,
10410                                         size_type_node, NULL_TREE);
10411       local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10412                             "memset", ECF_NOTHROW | ECF_LEAF);
10413     }
10414
10415   if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10416     {
10417       ftype = build_function_type_list (ptr_type_node,
10418                                         size_type_node, NULL_TREE);
10419       local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10420                             "alloca", ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10421     }
10422
10423   ftype = build_function_type_list (ptr_type_node, size_type_node,
10424                                     size_type_node, NULL_TREE);
10425   local_define_builtin ("__builtin_alloca_with_align", ftype,
10426                         BUILT_IN_ALLOCA_WITH_ALIGN,
10427                         "__builtin_alloca_with_align",
10428                         ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10429
10430   /* If we're checking the stack, `alloca' can throw.  */
10431   if (flag_stack_check)
10432     {
10433       TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA)) = 0;
10434       TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN)) = 0;
10435     }
10436
10437   ftype = build_function_type_list (void_type_node,
10438                                     ptr_type_node, ptr_type_node,
10439                                     ptr_type_node, NULL_TREE);
10440   local_define_builtin ("__builtin_init_trampoline", ftype,
10441                         BUILT_IN_INIT_TRAMPOLINE,
10442                         "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10443   local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10444                         BUILT_IN_INIT_HEAP_TRAMPOLINE,
10445                         "__builtin_init_heap_trampoline",
10446                         ECF_NOTHROW | ECF_LEAF);
10447
10448   ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10449   local_define_builtin ("__builtin_adjust_trampoline", ftype,
10450                         BUILT_IN_ADJUST_TRAMPOLINE,
10451                         "__builtin_adjust_trampoline",
10452                         ECF_CONST | ECF_NOTHROW);
10453
10454   ftype = build_function_type_list (void_type_node,
10455                                     ptr_type_node, ptr_type_node, NULL_TREE);
10456   local_define_builtin ("__builtin_nonlocal_goto", ftype,
10457                         BUILT_IN_NONLOCAL_GOTO,
10458                         "__builtin_nonlocal_goto",
10459                         ECF_NORETURN | ECF_NOTHROW);
10460
10461   ftype = build_function_type_list (void_type_node,
10462                                     ptr_type_node, ptr_type_node, NULL_TREE);
10463   local_define_builtin ("__builtin_setjmp_setup", ftype,
10464                         BUILT_IN_SETJMP_SETUP,
10465                         "__builtin_setjmp_setup", ECF_NOTHROW);
10466
10467   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10468   local_define_builtin ("__builtin_setjmp_receiver", ftype,
10469                         BUILT_IN_SETJMP_RECEIVER,
10470                         "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10471
10472   ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10473   local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10474                         "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10475
10476   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10477   local_define_builtin ("__builtin_stack_restore", ftype,
10478                         BUILT_IN_STACK_RESTORE,
10479                         "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10480
10481   /* If there's a possibility that we might use the ARM EABI, build the
10482     alternate __cxa_end_cleanup node used to resume from C++ and Java.  */
10483   if (targetm.arm_eabi_unwinder)
10484     {
10485       ftype = build_function_type_list (void_type_node, NULL_TREE);
10486       local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10487                             BUILT_IN_CXA_END_CLEANUP,
10488                             "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10489     }
10490
10491   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10492   local_define_builtin ("__builtin_unwind_resume", ftype,
10493                         BUILT_IN_UNWIND_RESUME,
10494                         ((targetm_common.except_unwind_info (&global_options)
10495                           == UI_SJLJ)
10496                          ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10497                         ECF_NORETURN);
10498
10499   if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10500     {
10501       ftype = build_function_type_list (ptr_type_node, integer_type_node,
10502                                         NULL_TREE);
10503       local_define_builtin ("__builtin_return_address", ftype,
10504                             BUILT_IN_RETURN_ADDRESS,
10505                             "__builtin_return_address",
10506                             ECF_NOTHROW);
10507     }
10508
10509   if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10510       || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10511     {
10512       ftype = build_function_type_list (void_type_node, ptr_type_node,
10513                                         ptr_type_node, NULL_TREE);
10514       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10515         local_define_builtin ("__cyg_profile_func_enter", ftype,
10516                               BUILT_IN_PROFILE_FUNC_ENTER,
10517                               "__cyg_profile_func_enter", 0);
10518       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10519         local_define_builtin ("__cyg_profile_func_exit", ftype,
10520                               BUILT_IN_PROFILE_FUNC_EXIT,
10521                               "__cyg_profile_func_exit", 0);
10522     }
10523
10524   /* The exception object and filter values from the runtime.  The argument
10525      must be zero before exception lowering, i.e. from the front end.  After
10526      exception lowering, it will be the region number for the exception
10527      landing pad.  These functions are PURE instead of CONST to prevent
10528      them from being hoisted past the exception edge that will initialize
10529      its value in the landing pad.  */
10530   ftype = build_function_type_list (ptr_type_node,
10531                                     integer_type_node, NULL_TREE);
10532   ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10533   /* Only use TM_PURE if we have TM language support.  */
10534   if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10535     ecf_flags |= ECF_TM_PURE;
10536   local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10537                         "__builtin_eh_pointer", ecf_flags);
10538
10539   tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10540   ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10541   local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10542                         "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10543
10544   ftype = build_function_type_list (void_type_node,
10545                                     integer_type_node, integer_type_node,
10546                                     NULL_TREE);
10547   local_define_builtin ("__builtin_eh_copy_values", ftype,
10548                         BUILT_IN_EH_COPY_VALUES,
10549                         "__builtin_eh_copy_values", ECF_NOTHROW);
10550
10551   /* Complex multiplication and division.  These are handled as builtins
10552      rather than optabs because emit_library_call_value doesn't support
10553      complex.  Further, we can do slightly better with folding these
10554      beasties if the real and complex parts of the arguments are separate.  */
10555   {
10556     int mode;
10557
10558     for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10559       {
10560         char mode_name_buf[4], *q;
10561         const char *p;
10562         enum built_in_function mcode, dcode;
10563         tree type, inner_type;
10564         const char *prefix = "__";
10565
10566         if (targetm.libfunc_gnu_prefix)
10567           prefix = "__gnu_";
10568
10569         type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10570         if (type == NULL)
10571           continue;
10572         inner_type = TREE_TYPE (type);
10573
10574         ftype = build_function_type_list (type, inner_type, inner_type,
10575                                           inner_type, inner_type, NULL_TREE);
10576
10577         mcode = ((enum built_in_function)
10578                  (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10579         dcode = ((enum built_in_function)
10580                  (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10581
10582         for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10583           *q = TOLOWER (*p);
10584         *q = '\0';
10585
10586         built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10587                                         NULL);
10588         local_define_builtin (built_in_names[mcode], ftype, mcode,
10589                               built_in_names[mcode],
10590                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10591
10592         built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10593                                         NULL);
10594         local_define_builtin (built_in_names[dcode], ftype, dcode,
10595                               built_in_names[dcode],
10596                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10597       }
10598   }
10599
10600   init_internal_fns ();
10601 }
10602
10603 /* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
10604    better way.
10605
10606    If we requested a pointer to a vector, build up the pointers that
10607    we stripped off while looking for the inner type.  Similarly for
10608    return values from functions.
10609
10610    The argument TYPE is the top of the chain, and BOTTOM is the
10611    new type which we will point to.  */
10612
10613 tree
10614 reconstruct_complex_type (tree type, tree bottom)
10615 {
10616   tree inner, outer;
10617
10618   if (TREE_CODE (type) == POINTER_TYPE)
10619     {
10620       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10621       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10622                                            TYPE_REF_CAN_ALIAS_ALL (type));
10623     }
10624   else if (TREE_CODE (type) == REFERENCE_TYPE)
10625     {
10626       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10627       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10628                                              TYPE_REF_CAN_ALIAS_ALL (type));
10629     }
10630   else if (TREE_CODE (type) == ARRAY_TYPE)
10631     {
10632       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10633       outer = build_array_type (inner, TYPE_DOMAIN (type));
10634     }
10635   else if (TREE_CODE (type) == FUNCTION_TYPE)
10636     {
10637       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10638       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10639     }
10640   else if (TREE_CODE (type) == METHOD_TYPE)
10641     {
10642       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10643       /* The build_method_type_directly() routine prepends 'this' to argument list,
10644          so we must compensate by getting rid of it.  */
10645       outer
10646         = build_method_type_directly
10647             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10648              inner,
10649              TREE_CHAIN (TYPE_ARG_TYPES (type)));
10650     }
10651   else if (TREE_CODE (type) == OFFSET_TYPE)
10652     {
10653       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10654       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10655     }
10656   else
10657     return bottom;
10658
10659   return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10660                                             TYPE_QUALS (type));
10661 }
10662
10663 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10664    the inner type.  */
10665 tree
10666 build_vector_type_for_mode (tree innertype, machine_mode mode)
10667 {
10668   int nunits;
10669
10670   switch (GET_MODE_CLASS (mode))
10671     {
10672     case MODE_VECTOR_INT:
10673     case MODE_VECTOR_FLOAT:
10674     case MODE_VECTOR_FRACT:
10675     case MODE_VECTOR_UFRACT:
10676     case MODE_VECTOR_ACCUM:
10677     case MODE_VECTOR_UACCUM:
10678       nunits = GET_MODE_NUNITS (mode);
10679       break;
10680
10681     case MODE_INT:
10682       /* Check that there are no leftover bits.  */
10683       gcc_assert (GET_MODE_BITSIZE (mode)
10684                   % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10685
10686       nunits = GET_MODE_BITSIZE (mode)
10687                / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10688       break;
10689
10690     default:
10691       gcc_unreachable ();
10692     }
10693
10694   return make_vector_type (innertype, nunits, mode);
10695 }
10696
10697 /* Similarly, but takes the inner type and number of units, which must be
10698    a power of two.  */
10699
10700 tree
10701 build_vector_type (tree innertype, int nunits)
10702 {
10703   return make_vector_type (innertype, nunits, VOIDmode);
10704 }
10705
10706 /* Build truth vector with specified length and number of units.  */
10707
10708 tree
10709 build_truth_vector_type (unsigned nunits, unsigned vector_size)
10710 {
10711   machine_mode mask_mode = targetm.vectorize.get_mask_mode (nunits,
10712                                                             vector_size);
10713
10714   gcc_assert (mask_mode != VOIDmode);
10715
10716   unsigned HOST_WIDE_INT vsize;
10717   if (mask_mode == BLKmode)
10718     vsize = vector_size * BITS_PER_UNIT;
10719   else
10720     vsize = GET_MODE_BITSIZE (mask_mode);
10721
10722   unsigned HOST_WIDE_INT esize = vsize / nunits;
10723   gcc_assert (esize * nunits == vsize);
10724
10725   tree bool_type = build_nonstandard_boolean_type (esize);
10726
10727   return make_vector_type (bool_type, nunits, mask_mode);
10728 }
10729
10730 /* Returns a vector type corresponding to a comparison of VECTYPE.  */
10731
10732 tree
10733 build_same_sized_truth_vector_type (tree vectype)
10734 {
10735   if (VECTOR_BOOLEAN_TYPE_P (vectype))
10736     return vectype;
10737
10738   unsigned HOST_WIDE_INT size = GET_MODE_SIZE (TYPE_MODE (vectype));
10739
10740   if (!size)
10741     size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
10742
10743   return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
10744 }
10745
10746 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set.  */
10747
10748 tree
10749 build_opaque_vector_type (tree innertype, int nunits)
10750 {
10751   tree t = make_vector_type (innertype, nunits, VOIDmode);
10752   tree cand;
10753   /* We always build the non-opaque variant before the opaque one,
10754      so if it already exists, it is TYPE_NEXT_VARIANT of this one.  */
10755   cand = TYPE_NEXT_VARIANT (t);
10756   if (cand
10757       && TYPE_VECTOR_OPAQUE (cand)
10758       && check_qualified_type (cand, t, TYPE_QUALS (t)))
10759     return cand;
10760   /* Othewise build a variant type and make sure to queue it after
10761      the non-opaque type.  */
10762   cand = build_distinct_type_copy (t);
10763   TYPE_VECTOR_OPAQUE (cand) = true;
10764   TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
10765   TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
10766   TYPE_NEXT_VARIANT (t) = cand;
10767   TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
10768   return cand;
10769 }
10770
10771
10772 /* Given an initializer INIT, return TRUE if INIT is zero or some
10773    aggregate of zeros.  Otherwise return FALSE.  */
10774 bool
10775 initializer_zerop (const_tree init)
10776 {
10777   tree elt;
10778
10779   STRIP_NOPS (init);
10780
10781   switch (TREE_CODE (init))
10782     {
10783     case INTEGER_CST:
10784       return integer_zerop (init);
10785
10786     case REAL_CST:
10787       /* ??? Note that this is not correct for C4X float formats.  There,
10788          a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
10789          negative exponent.  */
10790       return real_zerop (init)
10791         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
10792
10793     case FIXED_CST:
10794       return fixed_zerop (init);
10795
10796     case COMPLEX_CST:
10797       return integer_zerop (init)
10798         || (real_zerop (init)
10799             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
10800             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
10801
10802     case VECTOR_CST:
10803       {
10804         unsigned i;
10805         for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
10806           if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
10807             return false;
10808         return true;
10809       }
10810
10811     case CONSTRUCTOR:
10812       {
10813         unsigned HOST_WIDE_INT idx;
10814
10815         if (TREE_CLOBBER_P (init))
10816           return false;
10817         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
10818           if (!initializer_zerop (elt))
10819             return false;
10820         return true;
10821       }
10822
10823     case STRING_CST:
10824       {
10825         int i;
10826
10827         /* We need to loop through all elements to handle cases like
10828            "\0" and "\0foobar".  */
10829         for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
10830           if (TREE_STRING_POINTER (init)[i] != '\0')
10831             return false;
10832
10833         return true;
10834       }
10835
10836     default:
10837       return false;
10838     }
10839 }
10840
10841 /* Check if vector VEC consists of all the equal elements and
10842    that the number of elements corresponds to the type of VEC.
10843    The function returns first element of the vector
10844    or NULL_TREE if the vector is not uniform.  */
10845 tree
10846 uniform_vector_p (const_tree vec)
10847 {
10848   tree first, t;
10849   unsigned i;
10850
10851   if (vec == NULL_TREE)
10852     return NULL_TREE;
10853
10854   gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
10855
10856   if (TREE_CODE (vec) == VECTOR_CST)
10857     {
10858       first = VECTOR_CST_ELT (vec, 0);
10859       for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
10860         if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
10861           return NULL_TREE;
10862
10863       return first;
10864     }
10865
10866   else if (TREE_CODE (vec) == CONSTRUCTOR)
10867     {
10868       first = error_mark_node;
10869
10870       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
10871         {
10872           if (i == 0)
10873             {
10874               first = t;
10875               continue;
10876             }
10877           if (!operand_equal_p (first, t, 0))
10878             return NULL_TREE;
10879         }
10880       if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
10881         return NULL_TREE;
10882
10883       return first;
10884     }
10885
10886   return NULL_TREE;
10887 }
10888
10889 /* Build an empty statement at location LOC.  */
10890
10891 tree
10892 build_empty_stmt (location_t loc)
10893 {
10894   tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
10895   SET_EXPR_LOCATION (t, loc);
10896   return t;
10897 }
10898
10899
10900 /* Build an OpenMP clause with code CODE.  LOC is the location of the
10901    clause.  */
10902
10903 tree
10904 build_omp_clause (location_t loc, enum omp_clause_code code)
10905 {
10906   tree t;
10907   int size, length;
10908
10909   length = omp_clause_num_ops[code];
10910   size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
10911
10912   record_node_allocation_statistics (OMP_CLAUSE, size);
10913
10914   t = (tree) ggc_internal_alloc (size);
10915   memset (t, 0, size);
10916   TREE_SET_CODE (t, OMP_CLAUSE);
10917   OMP_CLAUSE_SET_CODE (t, code);
10918   OMP_CLAUSE_LOCATION (t) = loc;
10919
10920   return t;
10921 }
10922
10923 /* Build a tcc_vl_exp object with code CODE and room for LEN operands.  LEN
10924    includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
10925    Except for the CODE and operand count field, other storage for the
10926    object is initialized to zeros.  */
10927
10928 tree
10929 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
10930 {
10931   tree t;
10932   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
10933
10934   gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
10935   gcc_assert (len >= 1);
10936
10937   record_node_allocation_statistics (code, length);
10938
10939   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
10940
10941   TREE_SET_CODE (t, code);
10942
10943   /* Can't use TREE_OPERAND to store the length because if checking is
10944      enabled, it will try to check the length before we store it.  :-P  */
10945   t->exp.operands[0] = build_int_cst (sizetype, len);
10946
10947   return t;
10948 }
10949
10950 /* Helper function for build_call_* functions; build a CALL_EXPR with
10951    indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
10952    the argument slots.  */
10953
10954 static tree
10955 build_call_1 (tree return_type, tree fn, int nargs)
10956 {
10957   tree t;
10958
10959   t = build_vl_exp (CALL_EXPR, nargs + 3);
10960   TREE_TYPE (t) = return_type;
10961   CALL_EXPR_FN (t) = fn;
10962   CALL_EXPR_STATIC_CHAIN (t) = NULL;
10963
10964   return t;
10965 }
10966
10967 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10968    FN and a null static chain slot.  NARGS is the number of call arguments
10969    which are specified as "..." arguments.  */
10970
10971 tree
10972 build_call_nary (tree return_type, tree fn, int nargs, ...)
10973 {
10974   tree ret;
10975   va_list args;
10976   va_start (args, nargs);
10977   ret = build_call_valist (return_type, fn, nargs, args);
10978   va_end (args);
10979   return ret;
10980 }
10981
10982 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10983    FN and a null static chain slot.  NARGS is the number of call arguments
10984    which are specified as a va_list ARGS.  */
10985
10986 tree
10987 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
10988 {
10989   tree t;
10990   int i;
10991
10992   t = build_call_1 (return_type, fn, nargs);
10993   for (i = 0; i < nargs; i++)
10994     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
10995   process_call_operands (t);
10996   return t;
10997 }
10998
10999 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11000    FN and a null static chain slot.  NARGS is the number of call arguments
11001    which are specified as a tree array ARGS.  */
11002
11003 tree
11004 build_call_array_loc (location_t loc, tree return_type, tree fn,
11005                       int nargs, const tree *args)
11006 {
11007   tree t;
11008   int i;
11009
11010   t = build_call_1 (return_type, fn, nargs);
11011   for (i = 0; i < nargs; i++)
11012     CALL_EXPR_ARG (t, i) = args[i];
11013   process_call_operands (t);
11014   SET_EXPR_LOCATION (t, loc);
11015   return t;
11016 }
11017
11018 /* Like build_call_array, but takes a vec.  */
11019
11020 tree
11021 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
11022 {
11023   tree ret, t;
11024   unsigned int ix;
11025
11026   ret = build_call_1 (return_type, fn, vec_safe_length (args));
11027   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
11028     CALL_EXPR_ARG (ret, ix) = t;
11029   process_call_operands (ret);
11030   return ret;
11031 }
11032
11033 /* Conveniently construct a function call expression.  FNDECL names the
11034    function to be called and N arguments are passed in the array
11035    ARGARRAY.  */
11036
11037 tree
11038 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
11039 {
11040   tree fntype = TREE_TYPE (fndecl);
11041   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
11042  
11043   return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
11044 }
11045
11046 /* Conveniently construct a function call expression.  FNDECL names the
11047    function to be called and the arguments are passed in the vector
11048    VEC.  */
11049
11050 tree
11051 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
11052 {
11053   return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
11054                                     vec_safe_address (vec));
11055 }
11056
11057
11058 /* Conveniently construct a function call expression.  FNDECL names the
11059    function to be called, N is the number of arguments, and the "..."
11060    parameters are the argument expressions.  */
11061
11062 tree
11063 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
11064 {
11065   va_list ap;
11066   tree *argarray = XALLOCAVEC (tree, n);
11067   int i;
11068
11069   va_start (ap, n);
11070   for (i = 0; i < n; i++)
11071     argarray[i] = va_arg (ap, tree);
11072   va_end (ap);
11073   return build_call_expr_loc_array (loc, fndecl, n, argarray);
11074 }
11075
11076 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...).  Duplicated because
11077    varargs macros aren't supported by all bootstrap compilers.  */
11078
11079 tree
11080 build_call_expr (tree fndecl, int n, ...)
11081 {
11082   va_list ap;
11083   tree *argarray = XALLOCAVEC (tree, n);
11084   int i;
11085
11086   va_start (ap, n);
11087   for (i = 0; i < n; i++)
11088     argarray[i] = va_arg (ap, tree);
11089   va_end (ap);
11090   return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
11091 }
11092
11093 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
11094    type TYPE.  This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
11095    It will get gimplified later into an ordinary internal function.  */
11096
11097 tree
11098 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
11099                                     tree type, int n, const tree *args)
11100 {
11101   tree t = build_call_1 (type, NULL_TREE, n);
11102   for (int i = 0; i < n; ++i)
11103     CALL_EXPR_ARG (t, i) = args[i];
11104   SET_EXPR_LOCATION (t, loc);
11105   CALL_EXPR_IFN (t) = ifn;
11106   return t;
11107 }
11108
11109 /* Build internal call expression.  This is just like CALL_EXPR, except
11110    its CALL_EXPR_FN is NULL.  It will get gimplified later into ordinary
11111    internal function.  */
11112
11113 tree
11114 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
11115                               tree type, int n, ...)
11116 {
11117   va_list ap;
11118   tree *argarray = XALLOCAVEC (tree, n);
11119   int i;
11120
11121   va_start (ap, n);
11122   for (i = 0; i < n; i++)
11123     argarray[i] = va_arg (ap, tree);
11124   va_end (ap);
11125   return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11126 }
11127
11128 /* Return a function call to FN, if the target is guaranteed to support it,
11129    or null otherwise.
11130
11131    N is the number of arguments, passed in the "...", and TYPE is the
11132    type of the return value.  */
11133
11134 tree
11135 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
11136                            int n, ...)
11137 {
11138   va_list ap;
11139   tree *argarray = XALLOCAVEC (tree, n);
11140   int i;
11141
11142   va_start (ap, n);
11143   for (i = 0; i < n; i++)
11144     argarray[i] = va_arg (ap, tree);
11145   va_end (ap);
11146   if (internal_fn_p (fn))
11147     {
11148       internal_fn ifn = as_internal_fn (fn);
11149       if (direct_internal_fn_p (ifn))
11150         {
11151           tree_pair types = direct_internal_fn_types (ifn, type, argarray);
11152           if (!direct_internal_fn_supported_p (ifn, types,
11153                                                OPTIMIZE_FOR_BOTH))
11154             return NULL_TREE;
11155         }
11156       return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11157     }
11158   else
11159     {
11160       tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
11161       if (!fndecl)
11162         return NULL_TREE;
11163       return build_call_expr_loc_array (loc, fndecl, n, argarray);
11164     }
11165 }
11166
11167 /* Create a new constant string literal and return a char* pointer to it.
11168    The STRING_CST value is the LEN characters at STR.  */
11169 tree
11170 build_string_literal (int len, const char *str)
11171 {
11172   tree t, elem, index, type;
11173
11174   t = build_string (len, str);
11175   elem = build_type_variant (char_type_node, 1, 0);
11176   index = build_index_type (size_int (len - 1));
11177   type = build_array_type (elem, index);
11178   TREE_TYPE (t) = type;
11179   TREE_CONSTANT (t) = 1;
11180   TREE_READONLY (t) = 1;
11181   TREE_STATIC (t) = 1;
11182
11183   type = build_pointer_type (elem);
11184   t = build1 (ADDR_EXPR, type,
11185               build4 (ARRAY_REF, elem,
11186                       t, integer_zero_node, NULL_TREE, NULL_TREE));
11187   return t;
11188 }
11189
11190
11191
11192 /* Return true if T (assumed to be a DECL) must be assigned a memory
11193    location.  */
11194
11195 bool
11196 needs_to_live_in_memory (const_tree t)
11197 {
11198   return (TREE_ADDRESSABLE (t)
11199           || is_global_var (t)
11200           || (TREE_CODE (t) == RESULT_DECL
11201               && !DECL_BY_REFERENCE (t)
11202               && aggregate_value_p (t, current_function_decl)));
11203 }
11204
11205 /* Return value of a constant X and sign-extend it.  */
11206
11207 HOST_WIDE_INT
11208 int_cst_value (const_tree x)
11209 {
11210   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
11211   unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
11212
11213   /* Make sure the sign-extended value will fit in a HOST_WIDE_INT.  */
11214   gcc_assert (cst_and_fits_in_hwi (x));
11215
11216   if (bits < HOST_BITS_PER_WIDE_INT)
11217     {
11218       bool negative = ((val >> (bits - 1)) & 1) != 0;
11219       if (negative)
11220         val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
11221       else
11222         val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
11223     }
11224
11225   return val;
11226 }
11227
11228 /* If TYPE is an integral or pointer type, return an integer type with
11229    the same precision which is unsigned iff UNSIGNEDP is true, or itself
11230    if TYPE is already an integer type of signedness UNSIGNEDP.  */
11231
11232 tree
11233 signed_or_unsigned_type_for (int unsignedp, tree type)
11234 {
11235   if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
11236     return type;
11237
11238   if (TREE_CODE (type) == VECTOR_TYPE)
11239     {
11240       tree inner = TREE_TYPE (type);
11241       tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11242       if (!inner2)
11243         return NULL_TREE;
11244       if (inner == inner2)
11245         return type;
11246       return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
11247     }
11248
11249   if (!INTEGRAL_TYPE_P (type)
11250       && !POINTER_TYPE_P (type)
11251       && TREE_CODE (type) != OFFSET_TYPE)
11252     return NULL_TREE;
11253
11254   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
11255 }
11256
11257 /* If TYPE is an integral or pointer type, return an integer type with
11258    the same precision which is unsigned, or itself if TYPE is already an
11259    unsigned integer type.  */
11260
11261 tree
11262 unsigned_type_for (tree type)
11263 {
11264   return signed_or_unsigned_type_for (1, type);
11265 }
11266
11267 /* If TYPE is an integral or pointer type, return an integer type with
11268    the same precision which is signed, or itself if TYPE is already a
11269    signed integer type.  */
11270
11271 tree
11272 signed_type_for (tree type)
11273 {
11274   return signed_or_unsigned_type_for (0, type);
11275 }
11276
11277 /* If TYPE is a vector type, return a signed integer vector type with the
11278    same width and number of subparts. Otherwise return boolean_type_node.  */
11279
11280 tree
11281 truth_type_for (tree type)
11282 {
11283   if (TREE_CODE (type) == VECTOR_TYPE)
11284     {
11285       if (VECTOR_BOOLEAN_TYPE_P (type))
11286         return type;
11287       return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
11288                                       GET_MODE_SIZE (TYPE_MODE (type)));
11289     }
11290   else
11291     return boolean_type_node;
11292 }
11293
11294 /* Returns the largest value obtainable by casting something in INNER type to
11295    OUTER type.  */
11296
11297 tree
11298 upper_bound_in_type (tree outer, tree inner)
11299 {
11300   unsigned int det = 0;
11301   unsigned oprec = TYPE_PRECISION (outer);
11302   unsigned iprec = TYPE_PRECISION (inner);
11303   unsigned prec;
11304
11305   /* Compute a unique number for every combination.  */
11306   det |= (oprec > iprec) ? 4 : 0;
11307   det |= TYPE_UNSIGNED (outer) ? 2 : 0;
11308   det |= TYPE_UNSIGNED (inner) ? 1 : 0;
11309
11310   /* Determine the exponent to use.  */
11311   switch (det)
11312     {
11313     case 0:
11314     case 1:
11315       /* oprec <= iprec, outer: signed, inner: don't care.  */
11316       prec = oprec - 1;
11317       break;
11318     case 2:
11319     case 3:
11320       /* oprec <= iprec, outer: unsigned, inner: don't care.  */
11321       prec = oprec;
11322       break;
11323     case 4:
11324       /* oprec > iprec, outer: signed, inner: signed.  */
11325       prec = iprec - 1;
11326       break;
11327     case 5:
11328       /* oprec > iprec, outer: signed, inner: unsigned.  */
11329       prec = iprec;
11330       break;
11331     case 6:
11332       /* oprec > iprec, outer: unsigned, inner: signed.  */
11333       prec = oprec;
11334       break;
11335     case 7:
11336       /* oprec > iprec, outer: unsigned, inner: unsigned.  */
11337       prec = iprec;
11338       break;
11339     default:
11340       gcc_unreachable ();
11341     }
11342
11343   return wide_int_to_tree (outer,
11344                            wi::mask (prec, false, TYPE_PRECISION (outer)));
11345 }
11346
11347 /* Returns the smallest value obtainable by casting something in INNER type to
11348    OUTER type.  */
11349
11350 tree
11351 lower_bound_in_type (tree outer, tree inner)
11352 {
11353   unsigned oprec = TYPE_PRECISION (outer);
11354   unsigned iprec = TYPE_PRECISION (inner);
11355
11356   /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11357      and obtain 0.  */
11358   if (TYPE_UNSIGNED (outer)
11359       /* If we are widening something of an unsigned type, OUTER type
11360          contains all values of INNER type.  In particular, both INNER
11361          and OUTER types have zero in common.  */
11362       || (oprec > iprec && TYPE_UNSIGNED (inner)))
11363     return build_int_cst (outer, 0);
11364   else
11365     {
11366       /* If we are widening a signed type to another signed type, we
11367          want to obtain -2^^(iprec-1).  If we are keeping the
11368          precision or narrowing to a signed type, we want to obtain
11369          -2^(oprec-1).  */
11370       unsigned prec = oprec > iprec ? iprec : oprec;
11371       return wide_int_to_tree (outer,
11372                                wi::mask (prec - 1, true,
11373                                          TYPE_PRECISION (outer)));
11374     }
11375 }
11376
11377 /* Return nonzero if two operands that are suitable for PHI nodes are
11378    necessarily equal.  Specifically, both ARG0 and ARG1 must be either
11379    SSA_NAME or invariant.  Note that this is strictly an optimization.
11380    That is, callers of this function can directly call operand_equal_p
11381    and get the same result, only slower.  */
11382
11383 int
11384 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11385 {
11386   if (arg0 == arg1)
11387     return 1;
11388   if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11389     return 0;
11390   return operand_equal_p (arg0, arg1, 0);
11391 }
11392
11393 /* Returns number of zeros at the end of binary representation of X.  */
11394
11395 tree
11396 num_ending_zeros (const_tree x)
11397 {
11398   return build_int_cst (TREE_TYPE (x), wi::ctz (x));
11399 }
11400
11401
11402 #define WALK_SUBTREE(NODE)                              \
11403   do                                                    \
11404     {                                                   \
11405       result = walk_tree_1 (&(NODE), func, data, pset, lh);     \
11406       if (result)                                       \
11407         return result;                                  \
11408     }                                                   \
11409   while (0)
11410
11411 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11412    be walked whenever a type is seen in the tree.  Rest of operands and return
11413    value are as for walk_tree.  */
11414
11415 static tree
11416 walk_type_fields (tree type, walk_tree_fn func, void *data,
11417                   hash_set<tree> *pset, walk_tree_lh lh)
11418 {
11419   tree result = NULL_TREE;
11420
11421   switch (TREE_CODE (type))
11422     {
11423     case POINTER_TYPE:
11424     case REFERENCE_TYPE:
11425     case VECTOR_TYPE:
11426       /* We have to worry about mutually recursive pointers.  These can't
11427          be written in C.  They can in Ada.  It's pathological, but
11428          there's an ACATS test (c38102a) that checks it.  Deal with this
11429          by checking if we're pointing to another pointer, that one
11430          points to another pointer, that one does too, and we have no htab.
11431          If so, get a hash table.  We check three levels deep to avoid
11432          the cost of the hash table if we don't need one.  */
11433       if (POINTER_TYPE_P (TREE_TYPE (type))
11434           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11435           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11436           && !pset)
11437         {
11438           result = walk_tree_without_duplicates (&TREE_TYPE (type),
11439                                                  func, data);
11440           if (result)
11441             return result;
11442
11443           break;
11444         }
11445
11446       /* ... fall through ... */
11447
11448     case COMPLEX_TYPE:
11449       WALK_SUBTREE (TREE_TYPE (type));
11450       break;
11451
11452     case METHOD_TYPE:
11453       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11454
11455       /* Fall through.  */
11456
11457     case FUNCTION_TYPE:
11458       WALK_SUBTREE (TREE_TYPE (type));
11459       {
11460         tree arg;
11461
11462         /* We never want to walk into default arguments.  */
11463         for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11464           WALK_SUBTREE (TREE_VALUE (arg));
11465       }
11466       break;
11467
11468     case ARRAY_TYPE:
11469       /* Don't follow this nodes's type if a pointer for fear that
11470          we'll have infinite recursion.  If we have a PSET, then we
11471          need not fear.  */
11472       if (pset
11473           || (!POINTER_TYPE_P (TREE_TYPE (type))
11474               && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11475         WALK_SUBTREE (TREE_TYPE (type));
11476       WALK_SUBTREE (TYPE_DOMAIN (type));
11477       break;
11478
11479     case OFFSET_TYPE:
11480       WALK_SUBTREE (TREE_TYPE (type));
11481       WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11482       break;
11483
11484     default:
11485       break;
11486     }
11487
11488   return NULL_TREE;
11489 }
11490
11491 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
11492    called with the DATA and the address of each sub-tree.  If FUNC returns a
11493    non-NULL value, the traversal is stopped, and the value returned by FUNC
11494    is returned.  If PSET is non-NULL it is used to record the nodes visited,
11495    and to avoid visiting a node more than once.  */
11496
11497 tree
11498 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11499              hash_set<tree> *pset, walk_tree_lh lh)
11500 {
11501   enum tree_code code;
11502   int walk_subtrees;
11503   tree result;
11504
11505 #define WALK_SUBTREE_TAIL(NODE)                         \
11506   do                                                    \
11507     {                                                   \
11508        tp = & (NODE);                                   \
11509        goto tail_recurse;                               \
11510     }                                                   \
11511   while (0)
11512
11513  tail_recurse:
11514   /* Skip empty subtrees.  */
11515   if (!*tp)
11516     return NULL_TREE;
11517
11518   /* Don't walk the same tree twice, if the user has requested
11519      that we avoid doing so.  */
11520   if (pset && pset->add (*tp))
11521     return NULL_TREE;
11522
11523   /* Call the function.  */
11524   walk_subtrees = 1;
11525   result = (*func) (tp, &walk_subtrees, data);
11526
11527   /* If we found something, return it.  */
11528   if (result)
11529     return result;
11530
11531   code = TREE_CODE (*tp);
11532
11533   /* Even if we didn't, FUNC may have decided that there was nothing
11534      interesting below this point in the tree.  */
11535   if (!walk_subtrees)
11536     {
11537       /* But we still need to check our siblings.  */
11538       if (code == TREE_LIST)
11539         WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11540       else if (code == OMP_CLAUSE)
11541         WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11542       else
11543         return NULL_TREE;
11544     }
11545
11546   if (lh)
11547     {
11548       result = (*lh) (tp, &walk_subtrees, func, data, pset);
11549       if (result || !walk_subtrees)
11550         return result;
11551     }
11552
11553   switch (code)
11554     {
11555     case ERROR_MARK:
11556     case IDENTIFIER_NODE:
11557     case INTEGER_CST:
11558     case REAL_CST:
11559     case FIXED_CST:
11560     case VECTOR_CST:
11561     case STRING_CST:
11562     case BLOCK:
11563     case PLACEHOLDER_EXPR:
11564     case SSA_NAME:
11565     case FIELD_DECL:
11566     case RESULT_DECL:
11567       /* None of these have subtrees other than those already walked
11568          above.  */
11569       break;
11570
11571     case TREE_LIST:
11572       WALK_SUBTREE (TREE_VALUE (*tp));
11573       WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11574       break;
11575
11576     case TREE_VEC:
11577       {
11578         int len = TREE_VEC_LENGTH (*tp);
11579
11580         if (len == 0)
11581           break;
11582
11583         /* Walk all elements but the first.  */
11584         while (--len)
11585           WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11586
11587         /* Now walk the first one as a tail call.  */
11588         WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11589       }
11590
11591     case COMPLEX_CST:
11592       WALK_SUBTREE (TREE_REALPART (*tp));
11593       WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11594
11595     case CONSTRUCTOR:
11596       {
11597         unsigned HOST_WIDE_INT idx;
11598         constructor_elt *ce;
11599
11600         for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11601              idx++)
11602           WALK_SUBTREE (ce->value);
11603       }
11604       break;
11605
11606     case SAVE_EXPR:
11607       WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11608
11609     case BIND_EXPR:
11610       {
11611         tree decl;
11612         for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11613           {
11614             /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
11615                into declarations that are just mentioned, rather than
11616                declared; they don't really belong to this part of the tree.
11617                And, we can see cycles: the initializer for a declaration
11618                can refer to the declaration itself.  */
11619             WALK_SUBTREE (DECL_INITIAL (decl));
11620             WALK_SUBTREE (DECL_SIZE (decl));
11621             WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11622           }
11623         WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11624       }
11625
11626     case STATEMENT_LIST:
11627       {
11628         tree_stmt_iterator i;
11629         for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11630           WALK_SUBTREE (*tsi_stmt_ptr (i));
11631       }
11632       break;
11633
11634     case OMP_CLAUSE:
11635       switch (OMP_CLAUSE_CODE (*tp))
11636         {
11637         case OMP_CLAUSE_GANG:
11638         case OMP_CLAUSE__GRIDDIM_:
11639           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11640           /* FALLTHRU */
11641
11642         case OMP_CLAUSE_DEVICE_RESIDENT:
11643         case OMP_CLAUSE_ASYNC:
11644         case OMP_CLAUSE_WAIT:
11645         case OMP_CLAUSE_WORKER:
11646         case OMP_CLAUSE_VECTOR:
11647         case OMP_CLAUSE_NUM_GANGS:
11648         case OMP_CLAUSE_NUM_WORKERS:
11649         case OMP_CLAUSE_VECTOR_LENGTH:
11650         case OMP_CLAUSE_PRIVATE:
11651         case OMP_CLAUSE_SHARED:
11652         case OMP_CLAUSE_FIRSTPRIVATE:
11653         case OMP_CLAUSE_COPYIN:
11654         case OMP_CLAUSE_COPYPRIVATE:
11655         case OMP_CLAUSE_FINAL:
11656         case OMP_CLAUSE_IF:
11657         case OMP_CLAUSE_NUM_THREADS:
11658         case OMP_CLAUSE_SCHEDULE:
11659         case OMP_CLAUSE_UNIFORM:
11660         case OMP_CLAUSE_DEPEND:
11661         case OMP_CLAUSE_NUM_TEAMS:
11662         case OMP_CLAUSE_THREAD_LIMIT:
11663         case OMP_CLAUSE_DEVICE:
11664         case OMP_CLAUSE_DIST_SCHEDULE:
11665         case OMP_CLAUSE_SAFELEN:
11666         case OMP_CLAUSE_SIMDLEN:
11667         case OMP_CLAUSE_ORDERED:
11668         case OMP_CLAUSE_PRIORITY:
11669         case OMP_CLAUSE_GRAINSIZE:
11670         case OMP_CLAUSE_NUM_TASKS:
11671         case OMP_CLAUSE_HINT:
11672         case OMP_CLAUSE_TO_DECLARE:
11673         case OMP_CLAUSE_LINK:
11674         case OMP_CLAUSE_USE_DEVICE_PTR:
11675         case OMP_CLAUSE_IS_DEVICE_PTR:
11676         case OMP_CLAUSE__LOOPTEMP_:
11677         case OMP_CLAUSE__SIMDUID_:
11678         case OMP_CLAUSE__CILK_FOR_COUNT_:
11679           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11680           /* FALLTHRU */
11681
11682         case OMP_CLAUSE_INDEPENDENT:
11683         case OMP_CLAUSE_NOWAIT:
11684         case OMP_CLAUSE_DEFAULT:
11685         case OMP_CLAUSE_UNTIED:
11686         case OMP_CLAUSE_MERGEABLE:
11687         case OMP_CLAUSE_PROC_BIND:
11688         case OMP_CLAUSE_INBRANCH:
11689         case OMP_CLAUSE_NOTINBRANCH:
11690         case OMP_CLAUSE_FOR:
11691         case OMP_CLAUSE_PARALLEL:
11692         case OMP_CLAUSE_SECTIONS:
11693         case OMP_CLAUSE_TASKGROUP:
11694         case OMP_CLAUSE_NOGROUP:
11695         case OMP_CLAUSE_THREADS:
11696         case OMP_CLAUSE_SIMD:
11697         case OMP_CLAUSE_DEFAULTMAP:
11698         case OMP_CLAUSE_AUTO:
11699         case OMP_CLAUSE_SEQ:
11700         case OMP_CLAUSE_TILE:
11701           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11702
11703         case OMP_CLAUSE_LASTPRIVATE:
11704           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11705           WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
11706           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11707
11708         case OMP_CLAUSE_COLLAPSE:
11709           {
11710             int i;
11711             for (i = 0; i < 3; i++)
11712               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11713             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11714           }
11715
11716         case OMP_CLAUSE_LINEAR:
11717           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11718           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
11719           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
11720           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11721
11722         case OMP_CLAUSE_ALIGNED:
11723         case OMP_CLAUSE_FROM:
11724         case OMP_CLAUSE_TO:
11725         case OMP_CLAUSE_MAP:
11726         case OMP_CLAUSE__CACHE_:
11727           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11728           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11729           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11730
11731         case OMP_CLAUSE_REDUCTION:
11732           {
11733             int i;
11734             for (i = 0; i < 5; i++)
11735               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11736             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11737           }
11738
11739         default:
11740           gcc_unreachable ();
11741         }
11742       break;
11743
11744     case TARGET_EXPR:
11745       {
11746         int i, len;
11747
11748         /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
11749            But, we only want to walk once.  */
11750         len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
11751         for (i = 0; i < len; ++i)
11752           WALK_SUBTREE (TREE_OPERAND (*tp, i));
11753         WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
11754       }
11755
11756     case DECL_EXPR:
11757       /* If this is a TYPE_DECL, walk into the fields of the type that it's
11758          defining.  We only want to walk into these fields of a type in this
11759          case and not in the general case of a mere reference to the type.
11760
11761          The criterion is as follows: if the field can be an expression, it
11762          must be walked only here.  This should be in keeping with the fields
11763          that are directly gimplified in gimplify_type_sizes in order for the
11764          mark/copy-if-shared/unmark machinery of the gimplifier to work with
11765          variable-sized types.
11766
11767          Note that DECLs get walked as part of processing the BIND_EXPR.  */
11768       if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
11769         {
11770           tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
11771           if (TREE_CODE (*type_p) == ERROR_MARK)
11772             return NULL_TREE;
11773
11774           /* Call the function for the type.  See if it returns anything or
11775              doesn't want us to continue.  If we are to continue, walk both
11776              the normal fields and those for the declaration case.  */
11777           result = (*func) (type_p, &walk_subtrees, data);
11778           if (result || !walk_subtrees)
11779             return result;
11780
11781           /* But do not walk a pointed-to type since it may itself need to
11782              be walked in the declaration case if it isn't anonymous.  */
11783           if (!POINTER_TYPE_P (*type_p))
11784             {
11785               result = walk_type_fields (*type_p, func, data, pset, lh);
11786               if (result)
11787                 return result;
11788             }
11789
11790           /* If this is a record type, also walk the fields.  */
11791           if (RECORD_OR_UNION_TYPE_P (*type_p))
11792             {
11793               tree field;
11794
11795               for (field = TYPE_FIELDS (*type_p); field;
11796                    field = DECL_CHAIN (field))
11797                 {
11798                   /* We'd like to look at the type of the field, but we can
11799                      easily get infinite recursion.  So assume it's pointed
11800                      to elsewhere in the tree.  Also, ignore things that
11801                      aren't fields.  */
11802                   if (TREE_CODE (field) != FIELD_DECL)
11803                     continue;
11804
11805                   WALK_SUBTREE (DECL_FIELD_OFFSET (field));
11806                   WALK_SUBTREE (DECL_SIZE (field));
11807                   WALK_SUBTREE (DECL_SIZE_UNIT (field));
11808                   if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
11809                     WALK_SUBTREE (DECL_QUALIFIER (field));
11810                 }
11811             }
11812
11813           /* Same for scalar types.  */
11814           else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
11815                    || TREE_CODE (*type_p) == ENUMERAL_TYPE
11816                    || TREE_CODE (*type_p) == INTEGER_TYPE
11817                    || TREE_CODE (*type_p) == FIXED_POINT_TYPE
11818                    || TREE_CODE (*type_p) == REAL_TYPE)
11819             {
11820               WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
11821               WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
11822             }
11823
11824           WALK_SUBTREE (TYPE_SIZE (*type_p));
11825           WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
11826         }
11827       /* FALLTHRU */
11828
11829     default:
11830       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
11831         {
11832           int i, len;
11833
11834           /* Walk over all the sub-trees of this operand.  */
11835           len = TREE_OPERAND_LENGTH (*tp);
11836
11837           /* Go through the subtrees.  We need to do this in forward order so
11838              that the scope of a FOR_EXPR is handled properly.  */
11839           if (len)
11840             {
11841               for (i = 0; i < len - 1; ++i)
11842                 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11843               WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
11844             }
11845         }
11846       /* If this is a type, walk the needed fields in the type.  */
11847       else if (TYPE_P (*tp))
11848         return walk_type_fields (*tp, func, data, pset, lh);
11849       break;
11850     }
11851
11852   /* We didn't find what we were looking for.  */
11853   return NULL_TREE;
11854
11855 #undef WALK_SUBTREE_TAIL
11856 }
11857 #undef WALK_SUBTREE
11858
11859 /* Like walk_tree, but does not walk duplicate nodes more than once.  */
11860
11861 tree
11862 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
11863                                 walk_tree_lh lh)
11864 {
11865   tree result;
11866
11867   hash_set<tree> pset;
11868   result = walk_tree_1 (tp, func, data, &pset, lh);
11869   return result;
11870 }
11871
11872
11873 tree
11874 tree_block (tree t)
11875 {
11876   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11877
11878   if (IS_EXPR_CODE_CLASS (c))
11879     return LOCATION_BLOCK (t->exp.locus);
11880   gcc_unreachable ();
11881   return NULL;
11882 }
11883
11884 void
11885 tree_set_block (tree t, tree b)
11886 {
11887   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11888
11889   if (IS_EXPR_CODE_CLASS (c))
11890     {
11891       t->exp.locus = set_block (t->exp.locus, b);
11892     }
11893   else
11894     gcc_unreachable ();
11895 }
11896
11897 /* Create a nameless artificial label and put it in the current
11898    function context.  The label has a location of LOC.  Returns the
11899    newly created label.  */
11900
11901 tree
11902 create_artificial_label (location_t loc)
11903 {
11904   tree lab = build_decl (loc,
11905                          LABEL_DECL, NULL_TREE, void_type_node);
11906
11907   DECL_ARTIFICIAL (lab) = 1;
11908   DECL_IGNORED_P (lab) = 1;
11909   DECL_CONTEXT (lab) = current_function_decl;
11910   return lab;
11911 }
11912
11913 /*  Given a tree, try to return a useful variable name that we can use
11914     to prefix a temporary that is being assigned the value of the tree.
11915     I.E. given  <temp> = &A, return A.  */
11916
11917 const char *
11918 get_name (tree t)
11919 {
11920   tree stripped_decl;
11921
11922   stripped_decl = t;
11923   STRIP_NOPS (stripped_decl);
11924   if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
11925     return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
11926   else if (TREE_CODE (stripped_decl) == SSA_NAME)
11927     {
11928       tree name = SSA_NAME_IDENTIFIER (stripped_decl);
11929       if (!name)
11930         return NULL;
11931       return IDENTIFIER_POINTER (name);
11932     }
11933   else
11934     {
11935       switch (TREE_CODE (stripped_decl))
11936         {
11937         case ADDR_EXPR:
11938           return get_name (TREE_OPERAND (stripped_decl, 0));
11939         default:
11940           return NULL;
11941         }
11942     }
11943 }
11944
11945 /* Return true if TYPE has a variable argument list.  */
11946
11947 bool
11948 stdarg_p (const_tree fntype)
11949 {
11950   function_args_iterator args_iter;
11951   tree n = NULL_TREE, t;
11952
11953   if (!fntype)
11954     return false;
11955
11956   FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
11957     {
11958       n = t;
11959     }
11960
11961   return n != NULL_TREE && n != void_type_node;
11962 }
11963
11964 /* Return true if TYPE has a prototype.  */
11965
11966 bool
11967 prototype_p (const_tree fntype)
11968 {
11969   tree t;
11970
11971   gcc_assert (fntype != NULL_TREE);
11972
11973   t = TYPE_ARG_TYPES (fntype);
11974   return (t != NULL_TREE);
11975 }
11976
11977 /* If BLOCK is inlined from an __attribute__((__artificial__))
11978    routine, return pointer to location from where it has been
11979    called.  */
11980 location_t *
11981 block_nonartificial_location (tree block)
11982 {
11983   location_t *ret = NULL;
11984
11985   while (block && TREE_CODE (block) == BLOCK
11986          && BLOCK_ABSTRACT_ORIGIN (block))
11987     {
11988       tree ao = BLOCK_ABSTRACT_ORIGIN (block);
11989
11990       while (TREE_CODE (ao) == BLOCK
11991              && BLOCK_ABSTRACT_ORIGIN (ao)
11992              && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
11993         ao = BLOCK_ABSTRACT_ORIGIN (ao);
11994
11995       if (TREE_CODE (ao) == FUNCTION_DECL)
11996         {
11997           /* If AO is an artificial inline, point RET to the
11998              call site locus at which it has been inlined and continue
11999              the loop, in case AO's caller is also an artificial
12000              inline.  */
12001           if (DECL_DECLARED_INLINE_P (ao)
12002               && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
12003             ret = &BLOCK_SOURCE_LOCATION (block);
12004           else
12005             break;
12006         }
12007       else if (TREE_CODE (ao) != BLOCK)
12008         break;
12009
12010       block = BLOCK_SUPERCONTEXT (block);
12011     }
12012   return ret;
12013 }
12014
12015
12016 /* If EXP is inlined from an __attribute__((__artificial__))
12017    function, return the location of the original call expression.  */
12018
12019 location_t
12020 tree_nonartificial_location (tree exp)
12021 {
12022   location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
12023
12024   if (loc)
12025     return *loc;
12026   else
12027     return EXPR_LOCATION (exp);
12028 }
12029
12030
12031 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
12032    nodes.  */
12033
12034 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code.  */
12035
12036 hashval_t
12037 cl_option_hasher::hash (tree x)
12038 {
12039   const_tree const t = x;
12040   const char *p;
12041   size_t i;
12042   size_t len = 0;
12043   hashval_t hash = 0;
12044
12045   if (TREE_CODE (t) == OPTIMIZATION_NODE)
12046     {
12047       p = (const char *)TREE_OPTIMIZATION (t);
12048       len = sizeof (struct cl_optimization);
12049     }
12050
12051   else if (TREE_CODE (t) == TARGET_OPTION_NODE)
12052     return cl_target_option_hash (TREE_TARGET_OPTION (t));
12053
12054   else
12055     gcc_unreachable ();
12056
12057   /* assume most opt flags are just 0/1, some are 2-3, and a few might be
12058      something else.  */
12059   for (i = 0; i < len; i++)
12060     if (p[i])
12061       hash = (hash << 4) ^ ((i << 2) | p[i]);
12062
12063   return hash;
12064 }
12065
12066 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
12067    TARGET_OPTION tree node) is the same as that given by *Y, which is the
12068    same.  */
12069
12070 bool
12071 cl_option_hasher::equal (tree x, tree y)
12072 {
12073   const_tree const xt = x;
12074   const_tree const yt = y;
12075   const char *xp;
12076   const char *yp;
12077   size_t len;
12078
12079   if (TREE_CODE (xt) != TREE_CODE (yt))
12080     return 0;
12081
12082   if (TREE_CODE (xt) == OPTIMIZATION_NODE)
12083     {
12084       xp = (const char *)TREE_OPTIMIZATION (xt);
12085       yp = (const char *)TREE_OPTIMIZATION (yt);
12086       len = sizeof (struct cl_optimization);
12087     }
12088
12089   else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
12090     {
12091       return cl_target_option_eq (TREE_TARGET_OPTION (xt),
12092                                   TREE_TARGET_OPTION (yt));
12093     }
12094
12095   else
12096     gcc_unreachable ();
12097
12098   return (memcmp (xp, yp, len) == 0);
12099 }
12100
12101 /* Build an OPTIMIZATION_NODE based on the options in OPTS.  */
12102
12103 tree
12104 build_optimization_node (struct gcc_options *opts)
12105 {
12106   tree t;
12107
12108   /* Use the cache of optimization nodes.  */
12109
12110   cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
12111                         opts);
12112
12113   tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
12114   t = *slot;
12115   if (!t)
12116     {
12117       /* Insert this one into the hash table.  */
12118       t = cl_optimization_node;
12119       *slot = t;
12120
12121       /* Make a new node for next time round.  */
12122       cl_optimization_node = make_node (OPTIMIZATION_NODE);
12123     }
12124
12125   return t;
12126 }
12127
12128 /* Build a TARGET_OPTION_NODE based on the options in OPTS.  */
12129
12130 tree
12131 build_target_option_node (struct gcc_options *opts)
12132 {
12133   tree t;
12134
12135   /* Use the cache of optimization nodes.  */
12136
12137   cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
12138                          opts);
12139
12140   tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
12141   t = *slot;
12142   if (!t)
12143     {
12144       /* Insert this one into the hash table.  */
12145       t = cl_target_option_node;
12146       *slot = t;
12147
12148       /* Make a new node for next time round.  */
12149       cl_target_option_node = make_node (TARGET_OPTION_NODE);
12150     }
12151
12152   return t;
12153 }
12154
12155 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
12156    so that they aren't saved during PCH writing.  */
12157
12158 void
12159 prepare_target_option_nodes_for_pch (void)
12160 {
12161   hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
12162   for (; iter != cl_option_hash_table->end (); ++iter)
12163     if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
12164       TREE_TARGET_GLOBALS (*iter) = NULL;
12165 }
12166
12167 /* Determine the "ultimate origin" of a block.  The block may be an inlined
12168    instance of an inlined instance of a block which is local to an inline
12169    function, so we have to trace all of the way back through the origin chain
12170    to find out what sort of node actually served as the original seed for the
12171    given block.  */
12172
12173 tree
12174 block_ultimate_origin (const_tree block)
12175 {
12176   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
12177
12178   /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
12179      we're trying to output the abstract instance of this function.  */
12180   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
12181     return NULL_TREE;
12182
12183   if (immediate_origin == NULL_TREE)
12184     return NULL_TREE;
12185   else
12186     {
12187       tree ret_val;
12188       tree lookahead = immediate_origin;
12189
12190       do
12191         {
12192           ret_val = lookahead;
12193           lookahead = (TREE_CODE (ret_val) == BLOCK
12194                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
12195         }
12196       while (lookahead != NULL && lookahead != ret_val);
12197
12198       /* The block's abstract origin chain may not be the *ultimate* origin of
12199          the block. It could lead to a DECL that has an abstract origin set.
12200          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
12201          will give us if it has one).  Note that DECL's abstract origins are
12202          supposed to be the most distant ancestor (or so decl_ultimate_origin
12203          claims), so we don't need to loop following the DECL origins.  */
12204       if (DECL_P (ret_val))
12205         return DECL_ORIGIN (ret_val);
12206
12207       return ret_val;
12208     }
12209 }
12210
12211 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
12212    no instruction.  */
12213
12214 bool
12215 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
12216 {
12217   /* Do not strip casts into or out of differing address spaces.  */
12218   if (POINTER_TYPE_P (outer_type)
12219       && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
12220     {
12221       if (!POINTER_TYPE_P (inner_type)
12222           || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
12223               != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
12224         return false;
12225     }
12226   else if (POINTER_TYPE_P (inner_type)
12227            && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
12228     {
12229       /* We already know that outer_type is not a pointer with
12230          a non-generic address space.  */
12231       return false;
12232     }
12233
12234   /* Use precision rather then machine mode when we can, which gives
12235      the correct answer even for submode (bit-field) types.  */
12236   if ((INTEGRAL_TYPE_P (outer_type)
12237        || POINTER_TYPE_P (outer_type)
12238        || TREE_CODE (outer_type) == OFFSET_TYPE)
12239       && (INTEGRAL_TYPE_P (inner_type)
12240           || POINTER_TYPE_P (inner_type)
12241           || TREE_CODE (inner_type) == OFFSET_TYPE))
12242     return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
12243
12244   /* Otherwise fall back on comparing machine modes (e.g. for
12245      aggregate types, floats).  */
12246   return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
12247 }
12248
12249 /* Return true iff conversion in EXP generates no instruction.  Mark
12250    it inline so that we fully inline into the stripping functions even
12251    though we have two uses of this function.  */
12252
12253 static inline bool
12254 tree_nop_conversion (const_tree exp)
12255 {
12256   tree outer_type, inner_type;
12257
12258   if (!CONVERT_EXPR_P (exp)
12259       && TREE_CODE (exp) != NON_LVALUE_EXPR)
12260     return false;
12261   if (TREE_OPERAND (exp, 0) == error_mark_node)
12262     return false;
12263
12264   outer_type = TREE_TYPE (exp);
12265   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12266
12267   if (!inner_type)
12268     return false;
12269
12270   return tree_nop_conversion_p (outer_type, inner_type);
12271 }
12272
12273 /* Return true iff conversion in EXP generates no instruction.  Don't
12274    consider conversions changing the signedness.  */
12275
12276 static bool
12277 tree_sign_nop_conversion (const_tree exp)
12278 {
12279   tree outer_type, inner_type;
12280
12281   if (!tree_nop_conversion (exp))
12282     return false;
12283
12284   outer_type = TREE_TYPE (exp);
12285   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12286
12287   return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
12288           && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
12289 }
12290
12291 /* Strip conversions from EXP according to tree_nop_conversion and
12292    return the resulting expression.  */
12293
12294 tree
12295 tree_strip_nop_conversions (tree exp)
12296 {
12297   while (tree_nop_conversion (exp))
12298     exp = TREE_OPERAND (exp, 0);
12299   return exp;
12300 }
12301
12302 /* Strip conversions from EXP according to tree_sign_nop_conversion
12303    and return the resulting expression.  */
12304
12305 tree
12306 tree_strip_sign_nop_conversions (tree exp)
12307 {
12308   while (tree_sign_nop_conversion (exp))
12309     exp = TREE_OPERAND (exp, 0);
12310   return exp;
12311 }
12312
12313 /* Avoid any floating point extensions from EXP.  */
12314 tree
12315 strip_float_extensions (tree exp)
12316 {
12317   tree sub, expt, subt;
12318
12319   /*  For floating point constant look up the narrowest type that can hold
12320       it properly and handle it like (type)(narrowest_type)constant.
12321       This way we can optimize for instance a=a*2.0 where "a" is float
12322       but 2.0 is double constant.  */
12323   if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
12324     {
12325       REAL_VALUE_TYPE orig;
12326       tree type = NULL;
12327
12328       orig = TREE_REAL_CST (exp);
12329       if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12330           && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12331         type = float_type_node;
12332       else if (TYPE_PRECISION (TREE_TYPE (exp))
12333                > TYPE_PRECISION (double_type_node)
12334                && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12335         type = double_type_node;
12336       if (type)
12337         return build_real_truncate (type, orig);
12338     }
12339
12340   if (!CONVERT_EXPR_P (exp))
12341     return exp;
12342
12343   sub = TREE_OPERAND (exp, 0);
12344   subt = TREE_TYPE (sub);
12345   expt = TREE_TYPE (exp);
12346
12347   if (!FLOAT_TYPE_P (subt))
12348     return exp;
12349
12350   if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12351     return exp;
12352
12353   if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12354     return exp;
12355
12356   return strip_float_extensions (sub);
12357 }
12358
12359 /* Strip out all handled components that produce invariant
12360    offsets.  */
12361
12362 const_tree
12363 strip_invariant_refs (const_tree op)
12364 {
12365   while (handled_component_p (op))
12366     {
12367       switch (TREE_CODE (op))
12368         {
12369         case ARRAY_REF:
12370         case ARRAY_RANGE_REF:
12371           if (!is_gimple_constant (TREE_OPERAND (op, 1))
12372               || TREE_OPERAND (op, 2) != NULL_TREE
12373               || TREE_OPERAND (op, 3) != NULL_TREE)
12374             return NULL;
12375           break;
12376
12377         case COMPONENT_REF:
12378           if (TREE_OPERAND (op, 2) != NULL_TREE)
12379             return NULL;
12380           break;
12381
12382         default:;
12383         }
12384       op = TREE_OPERAND (op, 0);
12385     }
12386
12387   return op;
12388 }
12389
12390 static GTY(()) tree gcc_eh_personality_decl;
12391
12392 /* Return the GCC personality function decl.  */
12393
12394 tree
12395 lhd_gcc_personality (void)
12396 {
12397   if (!gcc_eh_personality_decl)
12398     gcc_eh_personality_decl = build_personality_function ("gcc");
12399   return gcc_eh_personality_decl;
12400 }
12401
12402 /* TARGET is a call target of GIMPLE call statement
12403    (obtained by gimple_call_fn).  Return true if it is
12404    OBJ_TYPE_REF representing an virtual call of C++ method.
12405    (As opposed to OBJ_TYPE_REF representing objc calls
12406    through a cast where middle-end devirtualization machinery
12407    can't apply.) */
12408
12409 bool
12410 virtual_method_call_p (const_tree target)
12411 {
12412   if (TREE_CODE (target) != OBJ_TYPE_REF)
12413     return false;
12414   tree t = TREE_TYPE (target);
12415   gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12416   t = TREE_TYPE (t);
12417   if (TREE_CODE (t) == FUNCTION_TYPE)
12418     return false;
12419   gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12420   /* If we do not have BINFO associated, it means that type was built
12421      without devirtualization enabled.  Do not consider this a virtual
12422      call.  */
12423   if (!TYPE_BINFO (obj_type_ref_class (target)))
12424     return false;
12425   return true;
12426 }
12427
12428 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to.  */
12429
12430 tree
12431 obj_type_ref_class (const_tree ref)
12432 {
12433   gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12434   ref = TREE_TYPE (ref);
12435   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12436   ref = TREE_TYPE (ref);
12437   /* We look for type THIS points to.  ObjC also builds
12438      OBJ_TYPE_REF with non-method calls, Their first parameter
12439      ID however also corresponds to class type. */
12440   gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12441                        || TREE_CODE (ref) == FUNCTION_TYPE);
12442   ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12443   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12444   return TREE_TYPE (ref);
12445 }
12446
12447 /* Lookup sub-BINFO of BINFO of TYPE at offset POS.  */
12448
12449 static tree
12450 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12451 {
12452   unsigned int i;
12453   tree base_binfo, b;
12454
12455   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12456     if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12457         && types_same_for_odr (TREE_TYPE (base_binfo), type))
12458       return base_binfo;
12459     else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12460       return b;
12461   return NULL;
12462 }
12463
12464 /* Try to find a base info of BINFO that would have its field decl at offset
12465    OFFSET within the BINFO type and which is of EXPECTED_TYPE.  If it can be
12466    found, return, otherwise return NULL_TREE.  */
12467
12468 tree
12469 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12470 {
12471   tree type = BINFO_TYPE (binfo);
12472
12473   while (true)
12474     {
12475       HOST_WIDE_INT pos, size;
12476       tree fld;
12477       int i;
12478
12479       if (types_same_for_odr (type, expected_type))
12480           return binfo;
12481       if (offset < 0)
12482         return NULL_TREE;
12483
12484       for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12485         {
12486           if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12487             continue;
12488
12489           pos = int_bit_position (fld);
12490           size = tree_to_uhwi (DECL_SIZE (fld));
12491           if (pos <= offset && (pos + size) > offset)
12492             break;
12493         }
12494       if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12495         return NULL_TREE;
12496
12497       /* Offset 0 indicates the primary base, whose vtable contents are
12498          represented in the binfo for the derived class.  */
12499       else if (offset != 0)
12500         {
12501           tree found_binfo = NULL, base_binfo;
12502           /* Offsets in BINFO are in bytes relative to the whole structure
12503              while POS is in bits relative to the containing field.  */
12504           int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12505                              / BITS_PER_UNIT);
12506
12507           for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12508             if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12509                 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12510               {
12511                 found_binfo = base_binfo;
12512                 break;
12513               }
12514           if (found_binfo)
12515             binfo = found_binfo;
12516           else
12517             binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12518                                             binfo_offset);
12519          }
12520
12521       type = TREE_TYPE (fld);
12522       offset -= pos;
12523     }
12524 }
12525
12526 /* Returns true if X is a typedef decl.  */
12527
12528 bool
12529 is_typedef_decl (const_tree x)
12530 {
12531   return (x && TREE_CODE (x) == TYPE_DECL
12532           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12533 }
12534
12535 /* Returns true iff TYPE is a type variant created for a typedef. */
12536
12537 bool
12538 typedef_variant_p (const_tree type)
12539 {
12540   return is_typedef_decl (TYPE_NAME (type));
12541 }
12542
12543 /* Warn about a use of an identifier which was marked deprecated.  */
12544 void
12545 warn_deprecated_use (tree node, tree attr)
12546 {
12547   const char *msg;
12548
12549   if (node == 0 || !warn_deprecated_decl)
12550     return;
12551
12552   if (!attr)
12553     {
12554       if (DECL_P (node))
12555         attr = DECL_ATTRIBUTES (node);
12556       else if (TYPE_P (node))
12557         {
12558           tree decl = TYPE_STUB_DECL (node);
12559           if (decl)
12560             attr = lookup_attribute ("deprecated",
12561                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12562         }
12563     }
12564
12565   if (attr)
12566     attr = lookup_attribute ("deprecated", attr);
12567
12568   if (attr)
12569     msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12570   else
12571     msg = NULL;
12572
12573   bool w;
12574   if (DECL_P (node))
12575     {
12576       if (msg)
12577         w = warning (OPT_Wdeprecated_declarations,
12578                      "%qD is deprecated: %s", node, msg);
12579       else
12580         w = warning (OPT_Wdeprecated_declarations,
12581                      "%qD is deprecated", node);
12582       if (w)
12583         inform (DECL_SOURCE_LOCATION (node), "declared here");
12584     }
12585   else if (TYPE_P (node))
12586     {
12587       tree what = NULL_TREE;
12588       tree decl = TYPE_STUB_DECL (node);
12589
12590       if (TYPE_NAME (node))
12591         {
12592           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12593             what = TYPE_NAME (node);
12594           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12595                    && DECL_NAME (TYPE_NAME (node)))
12596             what = DECL_NAME (TYPE_NAME (node));
12597         }
12598
12599       if (decl)
12600         {
12601           if (what)
12602             {
12603               if (msg)
12604                 w = warning (OPT_Wdeprecated_declarations,
12605                              "%qE is deprecated: %s", what, msg);
12606               else
12607                 w = warning (OPT_Wdeprecated_declarations,
12608                              "%qE is deprecated", what);
12609             }
12610           else
12611             {
12612               if (msg)
12613                 w = warning (OPT_Wdeprecated_declarations,
12614                              "type is deprecated: %s", msg);
12615               else
12616                 w = warning (OPT_Wdeprecated_declarations,
12617                              "type is deprecated");
12618             }
12619           if (w)
12620             inform (DECL_SOURCE_LOCATION (decl), "declared here");
12621         }
12622       else
12623         {
12624           if (what)
12625             {
12626               if (msg)
12627                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12628                          what, msg);
12629               else
12630                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12631             }
12632           else
12633             {
12634               if (msg)
12635                 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12636                          msg);
12637               else
12638                 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12639             }
12640         }
12641     }
12642 }
12643
12644 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12645    somewhere in it.  */
12646
12647 bool
12648 contains_bitfld_component_ref_p (const_tree ref)
12649 {
12650   while (handled_component_p (ref))
12651     {
12652       if (TREE_CODE (ref) == COMPONENT_REF
12653           && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12654         return true;
12655       ref = TREE_OPERAND (ref, 0);
12656     }
12657
12658   return false;
12659 }
12660
12661 /* Try to determine whether a TRY_CATCH expression can fall through.
12662    This is a subroutine of block_may_fallthru.  */
12663
12664 static bool
12665 try_catch_may_fallthru (const_tree stmt)
12666 {
12667   tree_stmt_iterator i;
12668
12669   /* If the TRY block can fall through, the whole TRY_CATCH can
12670      fall through.  */
12671   if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12672     return true;
12673
12674   i = tsi_start (TREE_OPERAND (stmt, 1));
12675   switch (TREE_CODE (tsi_stmt (i)))
12676     {
12677     case CATCH_EXPR:
12678       /* We expect to see a sequence of CATCH_EXPR trees, each with a
12679          catch expression and a body.  The whole TRY_CATCH may fall
12680          through iff any of the catch bodies falls through.  */
12681       for (; !tsi_end_p (i); tsi_next (&i))
12682         {
12683           if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12684             return true;
12685         }
12686       return false;
12687
12688     case EH_FILTER_EXPR:
12689       /* The exception filter expression only matters if there is an
12690          exception.  If the exception does not match EH_FILTER_TYPES,
12691          we will execute EH_FILTER_FAILURE, and we will fall through
12692          if that falls through.  If the exception does match
12693          EH_FILTER_TYPES, the stack unwinder will continue up the
12694          stack, so we will not fall through.  We don't know whether we
12695          will throw an exception which matches EH_FILTER_TYPES or not,
12696          so we just ignore EH_FILTER_TYPES and assume that we might
12697          throw an exception which doesn't match.  */
12698       return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12699
12700     default:
12701       /* This case represents statements to be executed when an
12702          exception occurs.  Those statements are implicitly followed
12703          by a RESX statement to resume execution after the exception.
12704          So in this case the TRY_CATCH never falls through.  */
12705       return false;
12706     }
12707 }
12708
12709 /* Try to determine if we can fall out of the bottom of BLOCK.  This guess
12710    need not be 100% accurate; simply be conservative and return true if we
12711    don't know.  This is used only to avoid stupidly generating extra code.
12712    If we're wrong, we'll just delete the extra code later.  */
12713
12714 bool
12715 block_may_fallthru (const_tree block)
12716 {
12717   /* This CONST_CAST is okay because expr_last returns its argument
12718      unmodified and we assign it to a const_tree.  */
12719   const_tree stmt = expr_last (CONST_CAST_TREE (block));
12720
12721   switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
12722     {
12723     case GOTO_EXPR:
12724     case RETURN_EXPR:
12725       /* Easy cases.  If the last statement of the block implies
12726          control transfer, then we can't fall through.  */
12727       return false;
12728
12729     case SWITCH_EXPR:
12730       /* If SWITCH_LABELS is set, this is lowered, and represents a
12731          branch to a selected label and hence can not fall through.
12732          Otherwise SWITCH_BODY is set, and the switch can fall
12733          through.  */
12734       return SWITCH_LABELS (stmt) == NULL_TREE;
12735
12736     case COND_EXPR:
12737       if (block_may_fallthru (COND_EXPR_THEN (stmt)))
12738         return true;
12739       return block_may_fallthru (COND_EXPR_ELSE (stmt));
12740
12741     case BIND_EXPR:
12742       return block_may_fallthru (BIND_EXPR_BODY (stmt));
12743
12744     case TRY_CATCH_EXPR:
12745       return try_catch_may_fallthru (stmt);
12746
12747     case TRY_FINALLY_EXPR:
12748       /* The finally clause is always executed after the try clause,
12749          so if it does not fall through, then the try-finally will not
12750          fall through.  Otherwise, if the try clause does not fall
12751          through, then when the finally clause falls through it will
12752          resume execution wherever the try clause was going.  So the
12753          whole try-finally will only fall through if both the try
12754          clause and the finally clause fall through.  */
12755       return (block_may_fallthru (TREE_OPERAND (stmt, 0))
12756               && block_may_fallthru (TREE_OPERAND (stmt, 1)));
12757
12758     case MODIFY_EXPR:
12759       if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
12760         stmt = TREE_OPERAND (stmt, 1);
12761       else
12762         return true;
12763       /* FALLTHRU */
12764
12765     case CALL_EXPR:
12766       /* Functions that do not return do not fall through.  */
12767       return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
12768
12769     case CLEANUP_POINT_EXPR:
12770       return block_may_fallthru (TREE_OPERAND (stmt, 0));
12771
12772     case TARGET_EXPR:
12773       return block_may_fallthru (TREE_OPERAND (stmt, 1));
12774
12775     case ERROR_MARK:
12776       return true;
12777
12778     default:
12779       return lang_hooks.block_may_fallthru (stmt);
12780     }
12781 }
12782
12783 /* True if we are using EH to handle cleanups.  */
12784 static bool using_eh_for_cleanups_flag = false;
12785
12786 /* This routine is called from front ends to indicate eh should be used for
12787    cleanups.  */
12788 void
12789 using_eh_for_cleanups (void)
12790 {
12791   using_eh_for_cleanups_flag = true;
12792 }
12793
12794 /* Query whether EH is used for cleanups.  */
12795 bool
12796 using_eh_for_cleanups_p (void)
12797 {
12798   return using_eh_for_cleanups_flag;
12799 }
12800
12801 /* Wrapper for tree_code_name to ensure that tree code is valid */
12802 const char *
12803 get_tree_code_name (enum tree_code code)
12804 {
12805   const char *invalid = "<invalid tree code>";
12806
12807   if (code >= MAX_TREE_CODES)
12808     return invalid;
12809
12810   return tree_code_name[code];
12811 }
12812
12813 /* Drops the TREE_OVERFLOW flag from T.  */
12814
12815 tree
12816 drop_tree_overflow (tree t)
12817 {
12818   gcc_checking_assert (TREE_OVERFLOW (t));
12819
12820   /* For tree codes with a sharing machinery re-build the result.  */
12821   if (TREE_CODE (t) == INTEGER_CST)
12822     return wide_int_to_tree (TREE_TYPE (t), t);
12823
12824   /* Otherwise, as all tcc_constants are possibly shared, copy the node
12825      and drop the flag.  */
12826   t = copy_node (t);
12827   TREE_OVERFLOW (t) = 0;
12828   return t;
12829 }
12830
12831 /* Given a memory reference expression T, return its base address.
12832    The base address of a memory reference expression is the main
12833    object being referenced.  For instance, the base address for
12834    'array[i].fld[j]' is 'array'.  You can think of this as stripping
12835    away the offset part from a memory address.
12836
12837    This function calls handled_component_p to strip away all the inner
12838    parts of the memory reference until it reaches the base object.  */
12839
12840 tree
12841 get_base_address (tree t)
12842 {
12843   while (handled_component_p (t))
12844     t = TREE_OPERAND (t, 0);
12845
12846   if ((TREE_CODE (t) == MEM_REF
12847        || TREE_CODE (t) == TARGET_MEM_REF)
12848       && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
12849     t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
12850
12851   /* ???  Either the alias oracle or all callers need to properly deal
12852      with WITH_SIZE_EXPRs before we can look through those.  */
12853   if (TREE_CODE (t) == WITH_SIZE_EXPR)
12854     return NULL_TREE;
12855
12856   return t;
12857 }
12858
12859 /* Return a tree of sizetype representing the size, in bytes, of the element
12860    of EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
12861
12862 tree
12863 array_ref_element_size (tree exp)
12864 {
12865   tree aligned_size = TREE_OPERAND (exp, 3);
12866   tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
12867   location_t loc = EXPR_LOCATION (exp);
12868
12869   /* If a size was specified in the ARRAY_REF, it's the size measured
12870      in alignment units of the element type.  So multiply by that value.  */
12871   if (aligned_size)
12872     {
12873       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
12874          sizetype from another type of the same width and signedness.  */
12875       if (TREE_TYPE (aligned_size) != sizetype)
12876         aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
12877       return size_binop_loc (loc, MULT_EXPR, aligned_size,
12878                              size_int (TYPE_ALIGN_UNIT (elmt_type)));
12879     }
12880
12881   /* Otherwise, take the size from that of the element type.  Substitute
12882      any PLACEHOLDER_EXPR that we have.  */
12883   else
12884     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
12885 }
12886
12887 /* Return a tree representing the lower bound of the array mentioned in
12888    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
12889
12890 tree
12891 array_ref_low_bound (tree exp)
12892 {
12893   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
12894
12895   /* If a lower bound is specified in EXP, use it.  */
12896   if (TREE_OPERAND (exp, 2))
12897     return TREE_OPERAND (exp, 2);
12898
12899   /* Otherwise, if there is a domain type and it has a lower bound, use it,
12900      substituting for a PLACEHOLDER_EXPR as needed.  */
12901   if (domain_type && TYPE_MIN_VALUE (domain_type))
12902     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
12903
12904   /* Otherwise, return a zero of the appropriate type.  */
12905   return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0);
12906 }
12907
12908 /* Return a tree representing the upper bound of the array mentioned in
12909    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
12910
12911 tree
12912 array_ref_up_bound (tree exp)
12913 {
12914   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
12915
12916   /* If there is a domain type and it has an upper bound, use it, substituting
12917      for a PLACEHOLDER_EXPR as needed.  */
12918   if (domain_type && TYPE_MAX_VALUE (domain_type))
12919     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
12920
12921   /* Otherwise fail.  */
12922   return NULL_TREE;
12923 }
12924
12925 /* Returns true if REF is an array reference to an array at the end of
12926    a structure.  If this is the case, the array may be allocated larger
12927    than its upper bound implies.  */
12928
12929 bool
12930 array_at_struct_end_p (tree ref)
12931 {
12932   if (TREE_CODE (ref) != ARRAY_REF
12933       && TREE_CODE (ref) != ARRAY_RANGE_REF)
12934     return false;
12935
12936   while (handled_component_p (ref))
12937     {
12938       /* If the reference chain contains a component reference to a
12939          non-union type and there follows another field the reference
12940          is not at the end of a structure.  */
12941       if (TREE_CODE (ref) == COMPONENT_REF
12942           && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
12943         {
12944           tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
12945           while (nextf && TREE_CODE (nextf) != FIELD_DECL)
12946             nextf = DECL_CHAIN (nextf);
12947           if (nextf)
12948             return false;
12949         }
12950
12951       ref = TREE_OPERAND (ref, 0);
12952     }
12953
12954   /* If the reference is based on a declared entity, the size of the array
12955      is constrained by its given domain.  */
12956   if (DECL_P (ref))
12957     return false;
12958
12959   return true;
12960 }
12961
12962 /* Return a tree representing the offset, in bytes, of the field referenced
12963    by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */
12964
12965 tree
12966 component_ref_field_offset (tree exp)
12967 {
12968   tree aligned_offset = TREE_OPERAND (exp, 2);
12969   tree field = TREE_OPERAND (exp, 1);
12970   location_t loc = EXPR_LOCATION (exp);
12971
12972   /* If an offset was specified in the COMPONENT_REF, it's the offset measured
12973      in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT.  So multiply by that
12974      value.  */
12975   if (aligned_offset)
12976     {
12977       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
12978          sizetype from another type of the same width and signedness.  */
12979       if (TREE_TYPE (aligned_offset) != sizetype)
12980         aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
12981       return size_binop_loc (loc, MULT_EXPR, aligned_offset,
12982                              size_int (DECL_OFFSET_ALIGN (field)
12983                                        / BITS_PER_UNIT));
12984     }
12985
12986   /* Otherwise, take the offset from that of the field.  Substitute
12987      any PLACEHOLDER_EXPR that we have.  */
12988   else
12989     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
12990 }
12991
12992 /* Return the machine mode of T.  For vectors, returns the mode of the
12993    inner type.  The main use case is to feed the result to HONOR_NANS,
12994    avoiding the BLKmode that a direct TYPE_MODE (T) might return.  */
12995
12996 machine_mode
12997 element_mode (const_tree t)
12998 {
12999   if (!TYPE_P (t))
13000     t = TREE_TYPE (t);
13001   if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
13002     t = TREE_TYPE (t);
13003   return TYPE_MODE (t);
13004 }
13005  
13006
13007 /* Veirfy that basic properties of T match TV and thus T can be a variant of
13008    TV.  TV should be the more specified variant (i.e. the main variant).  */
13009
13010 static bool
13011 verify_type_variant (const_tree t, tree tv)
13012 {
13013   /* Type variant can differ by:
13014
13015      - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
13016                    ENCODE_QUAL_ADDR_SPACE. 
13017      - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
13018        in this case some values may not be set in the variant types
13019        (see TYPE_COMPLETE_P checks).
13020      - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
13021      - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
13022      - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
13023      - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
13024      - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
13025        this is necessary to make it possible to merge types form different TUs
13026      - arrays, pointers and references may have TREE_TYPE that is a variant
13027        of TREE_TYPE of their main variants.
13028      - aggregates may have new TYPE_FIELDS list that list variants of
13029        the main variant TYPE_FIELDS.
13030      - vector types may differ by TYPE_VECTOR_OPAQUE
13031      - TYPE_METHODS is always NULL for vairant types and maintained for
13032        main variant only.
13033    */
13034
13035   /* Convenience macro for matching individual fields.  */
13036 #define verify_variant_match(flag)                                          \
13037   do {                                                                      \
13038     if (flag (tv) != flag (t))                                              \
13039       {                                                                     \
13040         error ("type variant differs by " #flag ".");                       \
13041         debug_tree (tv);                                                    \
13042         return false;                                                       \
13043       }                                                                     \
13044   } while (false)
13045
13046   /* tree_base checks.  */
13047
13048   verify_variant_match (TREE_CODE);
13049   /* FIXME: Ada builds non-artificial variants of artificial types.  */
13050   if (TYPE_ARTIFICIAL (tv) && 0)
13051     verify_variant_match (TYPE_ARTIFICIAL);
13052   if (POINTER_TYPE_P (tv))
13053     verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
13054   /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build.  */
13055   verify_variant_match (TYPE_UNSIGNED);
13056   verify_variant_match (TYPE_ALIGN_OK);
13057   verify_variant_match (TYPE_PACKED);
13058   if (TREE_CODE (t) == REFERENCE_TYPE)
13059     verify_variant_match (TYPE_REF_IS_RVALUE);
13060   if (AGGREGATE_TYPE_P (t))
13061     verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
13062   else
13063     verify_variant_match (TYPE_SATURATING);
13064   /* FIXME: This check trigger during libstdc++ build.  */
13065   if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
13066     verify_variant_match (TYPE_FINAL_P);
13067
13068   /* tree_type_common checks.  */
13069
13070   if (COMPLETE_TYPE_P (t))
13071     {
13072       verify_variant_match (TYPE_SIZE);
13073       verify_variant_match (TYPE_MODE);
13074       if (TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv)
13075           /* FIXME: ideally we should compare pointer equality, but java FE
13076              produce variants where size is INTEGER_CST of different type (int
13077              wrt size_type) during libjava biuld.  */
13078           && !operand_equal_p (TYPE_SIZE_UNIT (t), TYPE_SIZE_UNIT (tv), 0))
13079         {
13080           error ("type variant has different TYPE_SIZE_UNIT");
13081           debug_tree (tv);
13082           error ("type variant's TYPE_SIZE_UNIT");
13083           debug_tree (TYPE_SIZE_UNIT (tv));
13084           error ("type's TYPE_SIZE_UNIT");
13085           debug_tree (TYPE_SIZE_UNIT (t));
13086           return false;
13087         }
13088     }
13089   verify_variant_match (TYPE_PRECISION);
13090   verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
13091   if (RECORD_OR_UNION_TYPE_P (t))
13092     verify_variant_match (TYPE_TRANSPARENT_AGGR);
13093   else if (TREE_CODE (t) == ARRAY_TYPE)
13094     verify_variant_match (TYPE_NONALIASED_COMPONENT);
13095   /* During LTO we merge variant lists from diferent translation units
13096      that may differ BY TYPE_CONTEXT that in turn may point 
13097      to TRANSLATION_UNIT_DECL.
13098      Ada also builds variants of types with different TYPE_CONTEXT.   */
13099   if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
13100     verify_variant_match (TYPE_CONTEXT);
13101   verify_variant_match (TYPE_STRING_FLAG);
13102   if (TYPE_ALIAS_SET_KNOWN_P (t))
13103     {
13104       error ("type variant with TYPE_ALIAS_SET_KNOWN_P");
13105       debug_tree (tv);
13106       return false;
13107     }
13108
13109   /* tree_type_non_common checks.  */
13110
13111   /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13112      and dangle the pointer from time to time.  */
13113   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
13114       && (in_lto_p || !TYPE_VFIELD (tv)
13115           || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
13116     {
13117       error ("type variant has different TYPE_VFIELD");
13118       debug_tree (tv);
13119       return false;
13120     }
13121   if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
13122        || TREE_CODE (t) == INTEGER_TYPE
13123        || TREE_CODE (t) == BOOLEAN_TYPE
13124        || TREE_CODE (t) == REAL_TYPE
13125        || TREE_CODE (t) == FIXED_POINT_TYPE)
13126     {
13127       verify_variant_match (TYPE_MAX_VALUE);
13128       verify_variant_match (TYPE_MIN_VALUE);
13129     }
13130   if (TREE_CODE (t) == METHOD_TYPE)
13131     verify_variant_match (TYPE_METHOD_BASETYPE);
13132   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_METHODS (t))
13133     {
13134       error ("type variant has TYPE_METHODS");
13135       debug_tree (tv);
13136       return false;
13137     }
13138   if (TREE_CODE (t) == OFFSET_TYPE)
13139     verify_variant_match (TYPE_OFFSET_BASETYPE);
13140   if (TREE_CODE (t) == ARRAY_TYPE)
13141     verify_variant_match (TYPE_ARRAY_MAX_SIZE);
13142   /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
13143      or even type's main variant.  This is needed to make bootstrap pass
13144      and the bug seems new in GCC 5.
13145      C++ FE should be updated to make this consistent and we should check
13146      that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
13147      is a match with main variant.
13148
13149      Also disable the check for Java for now because of parser hack that builds
13150      first an dummy BINFO and then sometimes replace it by real BINFO in some
13151      of the copies.  */
13152   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
13153       && TYPE_BINFO (t) != TYPE_BINFO (tv)
13154       /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
13155          Since there is no cheap way to tell C++/Java type w/o LTO, do checking
13156          at LTO time only.  */
13157       && (in_lto_p && odr_type_p (t)))
13158     {
13159       error ("type variant has different TYPE_BINFO");
13160       debug_tree (tv);
13161       error ("type variant's TYPE_BINFO");
13162       debug_tree (TYPE_BINFO (tv));
13163       error ("type's TYPE_BINFO");
13164       debug_tree (TYPE_BINFO (t));
13165       return false;
13166     }
13167
13168   /* Check various uses of TYPE_VALUES_RAW.  */
13169   if (TREE_CODE (t) == ENUMERAL_TYPE)
13170     verify_variant_match (TYPE_VALUES);
13171   else if (TREE_CODE (t) == ARRAY_TYPE)
13172     verify_variant_match (TYPE_DOMAIN);
13173   /* Permit incomplete variants of complete type.  While FEs may complete
13174      all variants, this does not happen for C++ templates in all cases.  */
13175   else if (RECORD_OR_UNION_TYPE_P (t)
13176            && COMPLETE_TYPE_P (t)
13177            && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
13178     {
13179       tree f1, f2;
13180
13181       /* Fortran builds qualified variants as new records with items of
13182          qualified type. Verify that they looks same.  */
13183       for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
13184            f1 && f2;
13185            f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13186         if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
13187             || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
13188                  != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
13189                 /* FIXME: gfc_nonrestricted_type builds all types as variants
13190                    with exception of pointer types.  It deeply copies the type
13191                    which means that we may end up with a variant type
13192                    referring non-variant pointer.  We may change it to
13193                    produce types as variants, too, like
13194                    objc_get_protocol_qualified_type does.  */
13195                 && !POINTER_TYPE_P (TREE_TYPE (f1)))
13196             || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
13197             || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
13198           break;
13199       if (f1 || f2)
13200         {
13201           error ("type variant has different TYPE_FIELDS");
13202           debug_tree (tv);
13203           error ("first mismatch is field");
13204           debug_tree (f1);
13205           error ("and field");
13206           debug_tree (f2);
13207           return false;
13208         }
13209     }
13210   else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
13211     verify_variant_match (TYPE_ARG_TYPES);
13212   /* For C++ the qualified variant of array type is really an array type
13213      of qualified TREE_TYPE.
13214      objc builds variants of pointer where pointer to type is a variant, too
13215      in objc_get_protocol_qualified_type.  */
13216   if (TREE_TYPE (t) != TREE_TYPE (tv)
13217       && ((TREE_CODE (t) != ARRAY_TYPE
13218            && !POINTER_TYPE_P (t))
13219           || TYPE_MAIN_VARIANT (TREE_TYPE (t))
13220              != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
13221     {
13222       error ("type variant has different TREE_TYPE");
13223       debug_tree (tv);
13224       error ("type variant's TREE_TYPE");
13225       debug_tree (TREE_TYPE (tv));
13226       error ("type's TREE_TYPE");
13227       debug_tree (TREE_TYPE (t));
13228       return false;
13229     }
13230   if (type_with_alias_set_p (t)
13231       && !gimple_canonical_types_compatible_p (t, tv, false))
13232     {
13233       error ("type is not compatible with its vairant");
13234       debug_tree (tv);
13235       error ("type variant's TREE_TYPE");
13236       debug_tree (TREE_TYPE (tv));
13237       error ("type's TREE_TYPE");
13238       debug_tree (TREE_TYPE (t));
13239       return false;
13240     }
13241   return true;
13242 #undef verify_variant_match
13243 }
13244
13245
13246 /* The TYPE_CANONICAL merging machinery.  It should closely resemble
13247    the middle-end types_compatible_p function.  It needs to avoid
13248    claiming types are different for types that should be treated
13249    the same with respect to TBAA.  Canonical types are also used
13250    for IL consistency checks via the useless_type_conversion_p
13251    predicate which does not handle all type kinds itself but falls
13252    back to pointer-comparison of TYPE_CANONICAL for aggregates
13253    for example.  */
13254
13255 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
13256    type calculation because we need to allow inter-operability between signed
13257    and unsigned variants.  */
13258
13259 bool
13260 type_with_interoperable_signedness (const_tree type)
13261 {
13262   /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
13263      signed char and unsigned char.  Similarly fortran FE builds
13264      C_SIZE_T as signed type, while C defines it unsigned.  */
13265
13266   return tree_code_for_canonical_type_merging (TREE_CODE (type))
13267            == INTEGER_TYPE
13268          && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
13269              || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
13270 }
13271
13272 /* Return true iff T1 and T2 are structurally identical for what
13273    TBAA is concerned.  
13274    This function is used both by lto.c canonical type merging and by the
13275    verifier.  If TRUST_TYPE_CANONICAL we do not look into structure of types
13276    that have TYPE_CANONICAL defined and assume them equivalent.  This is useful
13277    only for LTO because only in these cases TYPE_CANONICAL equivalence
13278    correspond to one defined by gimple_canonical_types_compatible_p.  */
13279
13280 bool
13281 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
13282                                      bool trust_type_canonical)
13283 {
13284   /* Type variants should be same as the main variant.  When not doing sanity
13285      checking to verify this fact, go to main variants and save some work.  */
13286   if (trust_type_canonical)
13287     {
13288       t1 = TYPE_MAIN_VARIANT (t1);
13289       t2 = TYPE_MAIN_VARIANT (t2);
13290     }
13291
13292   /* Check first for the obvious case of pointer identity.  */
13293   if (t1 == t2)
13294     return true;
13295
13296   /* Check that we have two types to compare.  */
13297   if (t1 == NULL_TREE || t2 == NULL_TREE)
13298     return false;
13299
13300   /* We consider complete types always compatible with incomplete type.
13301      This does not make sense for canonical type calculation and thus we
13302      need to ensure that we are never called on it.
13303
13304      FIXME: For more correctness the function probably should have three modes
13305         1) mode assuming that types are complete mathcing their structure
13306         2) mode allowing incomplete types but producing equivalence classes
13307            and thus ignoring all info from complete types
13308         3) mode allowing incomplete types to match complete but checking
13309            compatibility between complete types.
13310
13311      1 and 2 can be used for canonical type calculation. 3 is the real
13312      definition of type compatibility that can be used i.e. for warnings during
13313      declaration merging.  */
13314
13315   gcc_assert (!trust_type_canonical
13316               || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
13317   /* If the types have been previously registered and found equal
13318      they still are.  */
13319
13320   if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
13321       && trust_type_canonical)
13322     {
13323       /* Do not use TYPE_CANONICAL of pointer types.  For LTO streamed types
13324          they are always NULL, but they are set to non-NULL for types
13325          constructed by build_pointer_type and variants.  In this case the
13326          TYPE_CANONICAL is more fine grained than the equivalnce we test (where
13327          all pointers are considered equal.  Be sure to not return false
13328          negatives.  */
13329       gcc_checking_assert (canonical_type_used_p (t1)
13330                            && canonical_type_used_p (t2));
13331       return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
13332     }
13333
13334   /* Can't be the same type if the types don't have the same code.  */
13335   enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
13336   if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
13337     return false;
13338
13339   /* Qualifiers do not matter for canonical type comparison purposes.  */
13340
13341   /* Void types and nullptr types are always the same.  */
13342   if (TREE_CODE (t1) == VOID_TYPE
13343       || TREE_CODE (t1) == NULLPTR_TYPE)
13344     return true;
13345
13346   /* Can't be the same type if they have different mode.  */
13347   if (TYPE_MODE (t1) != TYPE_MODE (t2))
13348     return false;
13349
13350   /* Non-aggregate types can be handled cheaply.  */
13351   if (INTEGRAL_TYPE_P (t1)
13352       || SCALAR_FLOAT_TYPE_P (t1)
13353       || FIXED_POINT_TYPE_P (t1)
13354       || TREE_CODE (t1) == VECTOR_TYPE
13355       || TREE_CODE (t1) == COMPLEX_TYPE
13356       || TREE_CODE (t1) == OFFSET_TYPE
13357       || POINTER_TYPE_P (t1))
13358     {
13359       /* Can't be the same type if they have different recision.  */
13360       if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
13361         return false;
13362
13363       /* In some cases the signed and unsigned types are required to be
13364          inter-operable.  */
13365       if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
13366           && !type_with_interoperable_signedness (t1))
13367         return false;
13368
13369       /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
13370          interoperable with "signed char".  Unless all frontends are revisited
13371          to agree on these types, we must ignore the flag completely.  */
13372
13373       /* Fortran standard define C_PTR type that is compatible with every
13374          C pointer.  For this reason we need to glob all pointers into one.
13375          Still pointers in different address spaces are not compatible.  */
13376       if (POINTER_TYPE_P (t1))
13377         {
13378           if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
13379               != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
13380             return false;
13381         }
13382
13383       /* Tail-recurse to components.  */
13384       if (TREE_CODE (t1) == VECTOR_TYPE
13385           || TREE_CODE (t1) == COMPLEX_TYPE)
13386         return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
13387                                                     TREE_TYPE (t2),
13388                                                     trust_type_canonical);
13389
13390       return true;
13391     }
13392
13393   /* Do type-specific comparisons.  */
13394   switch (TREE_CODE (t1))
13395     {
13396     case ARRAY_TYPE:
13397       /* Array types are the same if the element types are the same and
13398          the number of elements are the same.  */
13399       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13400                                                 trust_type_canonical)
13401           || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
13402           || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
13403           || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
13404         return false;
13405       else
13406         {
13407           tree i1 = TYPE_DOMAIN (t1);
13408           tree i2 = TYPE_DOMAIN (t2);
13409
13410           /* For an incomplete external array, the type domain can be
13411              NULL_TREE.  Check this condition also.  */
13412           if (i1 == NULL_TREE && i2 == NULL_TREE)
13413             return true;
13414           else if (i1 == NULL_TREE || i2 == NULL_TREE)
13415             return false;
13416           else
13417             {
13418               tree min1 = TYPE_MIN_VALUE (i1);
13419               tree min2 = TYPE_MIN_VALUE (i2);
13420               tree max1 = TYPE_MAX_VALUE (i1);
13421               tree max2 = TYPE_MAX_VALUE (i2);
13422
13423               /* The minimum/maximum values have to be the same.  */
13424               if ((min1 == min2
13425                    || (min1 && min2
13426                        && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
13427                             && TREE_CODE (min2) == PLACEHOLDER_EXPR)
13428                            || operand_equal_p (min1, min2, 0))))
13429                   && (max1 == max2
13430                       || (max1 && max2
13431                           && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
13432                                && TREE_CODE (max2) == PLACEHOLDER_EXPR)
13433                               || operand_equal_p (max1, max2, 0)))))
13434                 return true;
13435               else
13436                 return false;
13437             }
13438         }
13439
13440     case METHOD_TYPE:
13441     case FUNCTION_TYPE:
13442       /* Function types are the same if the return type and arguments types
13443          are the same.  */
13444       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13445                                                 trust_type_canonical))
13446         return false;
13447
13448       if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
13449         return true;
13450       else
13451         {
13452           tree parms1, parms2;
13453
13454           for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
13455                parms1 && parms2;
13456                parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
13457             {
13458               if (!gimple_canonical_types_compatible_p
13459                      (TREE_VALUE (parms1), TREE_VALUE (parms2),
13460                       trust_type_canonical))
13461                 return false;
13462             }
13463
13464           if (parms1 || parms2)
13465             return false;
13466
13467           return true;
13468         }
13469
13470     case RECORD_TYPE:
13471     case UNION_TYPE:
13472     case QUAL_UNION_TYPE:
13473       {
13474         tree f1, f2;
13475
13476         /* Don't try to compare variants of an incomplete type, before
13477            TYPE_FIELDS has been copied around.  */
13478         if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
13479           return true;
13480
13481
13482         if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
13483           return false;
13484
13485         /* For aggregate types, all the fields must be the same.  */
13486         for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
13487              f1 || f2;
13488              f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13489           {
13490             /* Skip non-fields.  */
13491             while (f1 && TREE_CODE (f1) != FIELD_DECL)
13492               f1 = TREE_CHAIN (f1);
13493             while (f2 && TREE_CODE (f2) != FIELD_DECL)
13494               f2 = TREE_CHAIN (f2);
13495             if (!f1 || !f2)
13496               break;
13497             /* The fields must have the same name, offset and type.  */
13498             if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
13499                 || !gimple_compare_field_offset (f1, f2)
13500                 || !gimple_canonical_types_compatible_p
13501                       (TREE_TYPE (f1), TREE_TYPE (f2),
13502                        trust_type_canonical))
13503               return false;
13504           }
13505
13506         /* If one aggregate has more fields than the other, they
13507            are not the same.  */
13508         if (f1 || f2)
13509           return false;
13510
13511         return true;
13512       }
13513
13514     default:
13515       /* Consider all types with language specific trees in them mutually
13516          compatible.  This is executed only from verify_type and false
13517          positives can be tolerated.  */
13518       gcc_assert (!in_lto_p);
13519       return true;
13520     }
13521 }
13522
13523 /* Verify type T.  */
13524
13525 void
13526 verify_type (const_tree t)
13527 {
13528   bool error_found = false;
13529   tree mv = TYPE_MAIN_VARIANT (t);
13530   if (!mv)
13531     {
13532       error ("Main variant is not defined");
13533       error_found = true;
13534     }
13535   else if (mv != TYPE_MAIN_VARIANT (mv))
13536     {
13537       error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT");
13538       debug_tree (mv);
13539       error_found = true;
13540     }
13541   else if (t != mv && !verify_type_variant (t, mv))
13542     error_found = true;
13543
13544   tree ct = TYPE_CANONICAL (t);
13545   if (!ct)
13546     ;
13547   else if (TYPE_CANONICAL (t) != ct)
13548     {
13549       error ("TYPE_CANONICAL has different TYPE_CANONICAL");
13550       debug_tree (ct);
13551       error_found = true;
13552     }
13553   /* Method and function types can not be used to address memory and thus
13554      TYPE_CANONICAL really matters only for determining useless conversions.
13555
13556      FIXME: C++ FE produce declarations of builtin functions that are not
13557      compatible with main variants.  */
13558   else if (TREE_CODE (t) == FUNCTION_TYPE)
13559     ;
13560   else if (t != ct
13561            /* FIXME: gimple_canonical_types_compatible_p can not compare types
13562               with variably sized arrays because their sizes possibly
13563               gimplified to different variables.  */
13564            && !variably_modified_type_p (ct, NULL)
13565            && !gimple_canonical_types_compatible_p (t, ct, false))
13566     {
13567       error ("TYPE_CANONICAL is not compatible");
13568       debug_tree (ct);
13569       error_found = true;
13570     }
13571
13572   if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
13573       && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
13574     {
13575       error ("TYPE_MODE of TYPE_CANONICAL is not compatible");
13576       debug_tree (ct);
13577       error_found = true;
13578     }
13579   if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
13580    {
13581       error ("TYPE_CANONICAL of main variant is not main variant");
13582       debug_tree (ct);
13583       debug_tree (TYPE_MAIN_VARIANT (ct));
13584       error_found = true;
13585    }
13586
13587
13588   /* Check various uses of TYPE_MINVAL.  */
13589   if (RECORD_OR_UNION_TYPE_P (t))
13590     {
13591       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13592          and danagle the pointer from time to time.  */
13593       if (TYPE_VFIELD (t)
13594           && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
13595           && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
13596         {
13597           error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST");
13598           debug_tree (TYPE_VFIELD (t));
13599           error_found = true;
13600         }
13601     }
13602   else if (TREE_CODE (t) == POINTER_TYPE)
13603     {
13604       if (TYPE_NEXT_PTR_TO (t)
13605           && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
13606         {
13607           error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE");
13608           debug_tree (TYPE_NEXT_PTR_TO (t));
13609           error_found = true;
13610         }
13611     }
13612   else if (TREE_CODE (t) == REFERENCE_TYPE)
13613     {
13614       if (TYPE_NEXT_REF_TO (t)
13615           && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
13616         {
13617           error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE");
13618           debug_tree (TYPE_NEXT_REF_TO (t));
13619           error_found = true;
13620         }
13621     }
13622   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13623            || TREE_CODE (t) == FIXED_POINT_TYPE)
13624     {
13625       /* FIXME: The following check should pass:
13626           useless_type_conversion_p (const_cast <tree> (t),
13627                                      TREE_TYPE (TYPE_MIN_VALUE (t))
13628          but does not for C sizetypes in LTO.  */
13629     }
13630   /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
13631   else if (TYPE_MINVAL (t)
13632            && ((TREE_CODE (t) != METHOD_TYPE && TREE_CODE (t) != FUNCTION_TYPE)
13633                || in_lto_p))
13634     {
13635       error ("TYPE_MINVAL non-NULL");
13636       debug_tree (TYPE_MINVAL (t));
13637       error_found = true;
13638     }
13639
13640   /* Check various uses of TYPE_MAXVAL.  */
13641   if (RECORD_OR_UNION_TYPE_P (t))
13642     {
13643       if (TYPE_METHODS (t) && TREE_CODE (TYPE_METHODS (t)) != FUNCTION_DECL
13644           && TREE_CODE (TYPE_METHODS (t)) != TEMPLATE_DECL
13645           && TYPE_METHODS (t) != error_mark_node)
13646         {
13647           error ("TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node");
13648           debug_tree (TYPE_METHODS (t));
13649           error_found = true;
13650         }
13651     }
13652   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13653     {
13654       if (TYPE_METHOD_BASETYPE (t)
13655           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
13656           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
13657         {
13658           error ("TYPE_METHOD_BASETYPE is not record nor union");
13659           debug_tree (TYPE_METHOD_BASETYPE (t));
13660           error_found = true;
13661         }
13662     }
13663   else if (TREE_CODE (t) == OFFSET_TYPE)
13664     {
13665       if (TYPE_OFFSET_BASETYPE (t)
13666           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
13667           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
13668         {
13669           error ("TYPE_OFFSET_BASETYPE is not record nor union");
13670           debug_tree (TYPE_OFFSET_BASETYPE (t));
13671           error_found = true;
13672         }
13673     }
13674   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13675            || TREE_CODE (t) == FIXED_POINT_TYPE)
13676     {
13677       /* FIXME: The following check should pass:
13678           useless_type_conversion_p (const_cast <tree> (t),
13679                                      TREE_TYPE (TYPE_MAX_VALUE (t))
13680          but does not for C sizetypes in LTO.  */
13681     }
13682   else if (TREE_CODE (t) == ARRAY_TYPE)
13683     {
13684       if (TYPE_ARRAY_MAX_SIZE (t)
13685           && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
13686         {
13687           error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST");
13688           debug_tree (TYPE_ARRAY_MAX_SIZE (t));
13689           error_found = true;
13690         } 
13691     }
13692   else if (TYPE_MAXVAL (t))
13693     {
13694       error ("TYPE_MAXVAL non-NULL");
13695       debug_tree (TYPE_MAXVAL (t));
13696       error_found = true;
13697     }
13698
13699   /* Check various uses of TYPE_BINFO.  */
13700   if (RECORD_OR_UNION_TYPE_P (t))
13701     {
13702       if (!TYPE_BINFO (t))
13703         ;
13704       else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
13705         {
13706           error ("TYPE_BINFO is not TREE_BINFO");
13707           debug_tree (TYPE_BINFO (t));
13708           error_found = true;
13709         }
13710       /* FIXME: Java builds invalid empty binfos that do not have
13711          TREE_TYPE set.  */
13712       else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t) && 0)
13713         {
13714           error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT");
13715           debug_tree (TREE_TYPE (TYPE_BINFO (t)));
13716           error_found = true;
13717         }
13718     }
13719   else if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
13720     {
13721       error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL");
13722       debug_tree (TYPE_LANG_SLOT_1 (t));
13723       error_found = true;
13724     }
13725
13726   /* Check various uses of TYPE_VALUES_RAW.  */
13727   if (TREE_CODE (t) == ENUMERAL_TYPE)
13728     for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
13729       {
13730         tree value = TREE_VALUE (l);
13731         tree name = TREE_PURPOSE (l);
13732
13733         /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
13734            CONST_DECL of ENUMERAL TYPE.  */
13735         if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
13736           {
13737             error ("Enum value is not CONST_DECL or INTEGER_CST");
13738             debug_tree (value);
13739             debug_tree (name);
13740             error_found = true;
13741           }
13742         if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
13743             && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
13744           {
13745             error ("Enum value type is not INTEGER_TYPE nor convertible to the enum");
13746             debug_tree (value);
13747             debug_tree (name);
13748             error_found = true;
13749           }
13750         if (TREE_CODE (name) != IDENTIFIER_NODE)
13751           {
13752             error ("Enum value name is not IDENTIFIER_NODE");
13753             debug_tree (value);
13754             debug_tree (name);
13755             error_found = true;
13756           }
13757       }
13758   else if (TREE_CODE (t) == ARRAY_TYPE)
13759     {
13760       if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
13761         {
13762           error ("Array TYPE_DOMAIN is not integer type");
13763           debug_tree (TYPE_DOMAIN (t));
13764           error_found = true;
13765         }
13766     }
13767   else if (RECORD_OR_UNION_TYPE_P (t))
13768     {
13769       if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
13770         {
13771           error ("TYPE_FIELDS defined in incomplete type");
13772           error_found = true;
13773         }
13774       for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
13775         {
13776           /* TODO: verify properties of decls.  */
13777           if (TREE_CODE (fld) == FIELD_DECL)
13778             ;
13779           else if (TREE_CODE (fld) == TYPE_DECL)
13780             ;
13781           else if (TREE_CODE (fld) == CONST_DECL)
13782             ;
13783           else if (TREE_CODE (fld) == VAR_DECL)
13784             ;
13785           else if (TREE_CODE (fld) == TEMPLATE_DECL)
13786             ;
13787           else if (TREE_CODE (fld) == USING_DECL)
13788             ;
13789           else
13790             {
13791               error ("Wrong tree in TYPE_FIELDS list");
13792               debug_tree (fld);
13793               error_found = true;
13794             }
13795         }
13796     }
13797   else if (TREE_CODE (t) == INTEGER_TYPE
13798            || TREE_CODE (t) == BOOLEAN_TYPE
13799            || TREE_CODE (t) == OFFSET_TYPE
13800            || TREE_CODE (t) == REFERENCE_TYPE
13801            || TREE_CODE (t) == NULLPTR_TYPE
13802            || TREE_CODE (t) == POINTER_TYPE)
13803     {
13804       if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
13805         {
13806           error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p",
13807                  TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
13808           error_found = true;
13809         }
13810       else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
13811         {
13812           error ("TYPE_CACHED_VALUES is not TREE_VEC");
13813           debug_tree (TYPE_CACHED_VALUES (t));
13814           error_found = true;
13815         }
13816       /* Verify just enough of cache to ensure that no one copied it to new type.
13817          All copying should go by copy_node that should clear it.  */
13818       else if (TYPE_CACHED_VALUES_P (t))
13819         {
13820           int i;
13821           for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
13822             if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
13823                 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
13824               {
13825                 error ("wrong TYPE_CACHED_VALUES entry");
13826                 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
13827                 error_found = true;
13828                 break;
13829               }
13830         }
13831     }
13832   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13833     for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
13834       {
13835         /* C++ FE uses TREE_PURPOSE to store initial values.  */
13836         if (TREE_PURPOSE (l) && in_lto_p)
13837           {
13838             error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list");
13839             debug_tree (l);
13840             error_found = true;
13841           }
13842         if (!TYPE_P (TREE_VALUE (l)))
13843           {
13844             error ("Wrong entry in TYPE_ARG_TYPES list");
13845             debug_tree (l);
13846             error_found = true;
13847           }
13848       }
13849   else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
13850     {
13851       error ("TYPE_VALUES_RAW field is non-NULL");
13852       debug_tree (TYPE_VALUES_RAW (t));
13853       error_found = true;
13854     }
13855   if (TREE_CODE (t) != INTEGER_TYPE
13856       && TREE_CODE (t) != BOOLEAN_TYPE
13857       && TREE_CODE (t) != OFFSET_TYPE
13858       && TREE_CODE (t) != REFERENCE_TYPE
13859       && TREE_CODE (t) != NULLPTR_TYPE
13860       && TREE_CODE (t) != POINTER_TYPE
13861       && TYPE_CACHED_VALUES_P (t))
13862     {
13863       error ("TYPE_CACHED_VALUES_P is set while it should not");
13864       error_found = true;
13865     }
13866   if (TYPE_STRING_FLAG (t)
13867       && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE)
13868     {
13869       error ("TYPE_STRING_FLAG is set on wrong type code");
13870       error_found = true;
13871     }
13872   else if (TYPE_STRING_FLAG (t))
13873     {
13874       const_tree b = t;
13875       if (TREE_CODE (b) == ARRAY_TYPE)
13876         b = TREE_TYPE (t);
13877       /* Java builds arrays with TYPE_STRING_FLAG of promoted_char_type
13878          that is 32bits.  */
13879       if (TREE_CODE (b) != INTEGER_TYPE)
13880         {
13881           error ("TYPE_STRING_FLAG is set on type that does not look like "
13882                  "char nor array of chars");
13883           error_found = true;
13884         }
13885     }
13886   
13887   /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
13888      TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
13889      of a type. */
13890   if (TREE_CODE (t) == METHOD_TYPE
13891       && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
13892     {
13893         error ("TYPE_METHOD_BASETYPE is not main variant");
13894         error_found = true;
13895     }
13896
13897   if (error_found)
13898     {
13899       debug_tree (const_cast <tree> (t));
13900       internal_error ("verify_type failed");
13901     }
13902 }
13903
13904
13905 /* Return true if ARG is marked with the nonnull attribute in the
13906    current function signature.  */
13907
13908 bool
13909 nonnull_arg_p (const_tree arg)
13910 {
13911   tree t, attrs, fntype;
13912   unsigned HOST_WIDE_INT arg_num;
13913
13914   gcc_assert (TREE_CODE (arg) == PARM_DECL
13915               && (POINTER_TYPE_P (TREE_TYPE (arg))
13916                   || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
13917
13918   /* The static chain decl is always non null.  */
13919   if (arg == cfun->static_chain_decl)
13920     return true;
13921
13922   /* THIS argument of method is always non-NULL.  */
13923   if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
13924       && arg == DECL_ARGUMENTS (cfun->decl)
13925       && flag_delete_null_pointer_checks)
13926     return true;
13927
13928   /* Values passed by reference are always non-NULL.  */
13929   if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
13930       && flag_delete_null_pointer_checks)
13931     return true;
13932
13933   fntype = TREE_TYPE (cfun->decl);
13934   for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
13935     {
13936       attrs = lookup_attribute ("nonnull", attrs);
13937
13938       /* If "nonnull" wasn't specified, we know nothing about the argument.  */
13939       if (attrs == NULL_TREE)
13940         return false;
13941
13942       /* If "nonnull" applies to all the arguments, then ARG is non-null.  */
13943       if (TREE_VALUE (attrs) == NULL_TREE)
13944         return true;
13945
13946       /* Get the position number for ARG in the function signature.  */
13947       for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
13948            t;
13949            t = DECL_CHAIN (t), arg_num++)
13950         {
13951           if (t == arg)
13952             break;
13953         }
13954
13955       gcc_assert (t == arg);
13956
13957       /* Now see if ARG_NUM is mentioned in the nonnull list.  */
13958       for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
13959         {
13960           if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
13961             return true;
13962         }
13963     }
13964
13965   return false;
13966 }
13967
13968 /* Given location LOC, strip away any packed range information
13969    or ad-hoc information.  */
13970
13971 location_t
13972 get_pure_location (location_t loc)
13973 {
13974   if (IS_ADHOC_LOC (loc))
13975     loc
13976       = line_table->location_adhoc_data_map.data[loc & MAX_SOURCE_LOCATION].locus;
13977
13978   if (loc >= LINEMAPS_MACRO_LOWEST_LOCATION (line_table))
13979     return loc;
13980
13981   if (loc < RESERVED_LOCATION_COUNT)
13982     return loc;
13983
13984   const line_map *map = linemap_lookup (line_table, loc);
13985   const line_map_ordinary *ordmap = linemap_check_ordinary (map);
13986
13987   return loc & ~((1 << ordmap->m_range_bits) - 1);
13988 }
13989
13990 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
13991    information.  */
13992
13993 location_t
13994 set_block (location_t loc, tree block)
13995 {
13996   location_t pure_loc = get_pure_location (loc);
13997   source_range src_range = get_range_from_loc (line_table, loc);
13998   return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
13999 }
14000
14001 location_t
14002 set_source_range (tree expr, location_t start, location_t finish)
14003 {
14004   source_range src_range;
14005   src_range.m_start = start;
14006   src_range.m_finish = finish;
14007   return set_source_range (expr, src_range);
14008 }
14009
14010 location_t
14011 set_source_range (tree expr, source_range src_range)
14012 {
14013   if (!EXPR_P (expr))
14014     return UNKNOWN_LOCATION;
14015
14016   location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
14017   location_t adhoc = COMBINE_LOCATION_DATA (line_table,
14018                                             pure_loc,
14019                                             src_range,
14020                                             NULL);
14021   SET_EXPR_LOCATION (expr, adhoc);
14022   return adhoc;
14023 }
14024
14025 location_t
14026 make_location (location_t caret, location_t start, location_t finish)
14027 {
14028   location_t pure_loc = get_pure_location (caret);
14029   source_range src_range;
14030   src_range.m_start = start;
14031   src_range.m_finish = finish;
14032   location_t combined_loc = COMBINE_LOCATION_DATA (line_table,
14033                                                    pure_loc,
14034                                                    src_range,
14035                                                    NULL);
14036   return combined_loc;
14037 }
14038
14039 /* Return the name of combined function FN, for debugging purposes.  */
14040
14041 const char *
14042 combined_fn_name (combined_fn fn)
14043 {
14044   if (builtin_fn_p (fn))
14045     {
14046       tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
14047       return IDENTIFIER_POINTER (DECL_NAME (fndecl));
14048     }
14049   else
14050     return internal_fn_name (as_internal_fn (fn));
14051 }
14052
14053 #include "gt-tree.h"