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