Canonicalize canonical type hashing
[platform/upstream/gcc.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987-2017 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 #include "selftest.h"
65
66 /* Tree code classes.  */
67
68 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
69 #define END_OF_BASE_TREE_CODES tcc_exceptional,
70
71 const enum tree_code_class tree_code_type[] = {
72 #include "all-tree.def"
73 };
74
75 #undef DEFTREECODE
76 #undef END_OF_BASE_TREE_CODES
77
78 /* Table indexed by tree code giving number of expression
79    operands beyond the fixed part of the node structure.
80    Not used for types or decls.  */
81
82 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
83 #define END_OF_BASE_TREE_CODES 0,
84
85 const unsigned char tree_code_length[] = {
86 #include "all-tree.def"
87 };
88
89 #undef DEFTREECODE
90 #undef END_OF_BASE_TREE_CODES
91
92 /* Names of tree components.
93    Used for printing out the tree and error messages.  */
94 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
95 #define END_OF_BASE_TREE_CODES "@dummy",
96
97 static const char *const tree_code_name[] = {
98 #include "all-tree.def"
99 };
100
101 #undef DEFTREECODE
102 #undef END_OF_BASE_TREE_CODES
103
104 /* Each tree code class has an associated string representation.
105    These must correspond to the tree_code_class entries.  */
106
107 const char *const tree_code_class_strings[] =
108 {
109   "exceptional",
110   "constant",
111   "type",
112   "declaration",
113   "reference",
114   "comparison",
115   "unary",
116   "binary",
117   "statement",
118   "vl_exp",
119   "expression"
120 };
121
122 /* obstack.[ch] explicitly declined to prototype this.  */
123 extern int _obstack_allocated_p (struct obstack *h, void *obj);
124
125 /* Statistics-gathering stuff.  */
126
127 static int tree_code_counts[MAX_TREE_CODES];
128 int tree_node_counts[(int) all_kinds];
129 int tree_node_sizes[(int) all_kinds];
130
131 /* Keep in sync with tree.h:enum tree_node_kind.  */
132 static const char * const tree_node_kind_names[] = {
133   "decls",
134   "types",
135   "blocks",
136   "stmts",
137   "refs",
138   "exprs",
139   "constants",
140   "identifiers",
141   "vecs",
142   "binfos",
143   "ssa names",
144   "constructors",
145   "random kinds",
146   "lang_decl kinds",
147   "lang_type kinds",
148   "omp clauses",
149 };
150
151 /* Unique id for next decl created.  */
152 static GTY(()) int next_decl_uid;
153 /* Unique id for next type created.  */
154 static GTY(()) int next_type_uid = 1;
155 /* Unique id for next debug decl created.  Use negative numbers,
156    to catch erroneous uses.  */
157 static GTY(()) int next_debug_decl_uid;
158
159 /* Since we cannot rehash a type after it is in the table, we have to
160    keep the hash code.  */
161
162 struct GTY((for_user)) type_hash {
163   unsigned long hash;
164   tree type;
165 };
166
167 /* Initial size of the hash table (rounded to next prime).  */
168 #define TYPE_HASH_INITIAL_SIZE 1000
169
170 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash>
171 {
172   static hashval_t hash (type_hash *t) { return t->hash; }
173   static bool equal (type_hash *a, type_hash *b);
174
175   static int
176   keep_cache_entry (type_hash *&t)
177   {
178     return ggc_marked_p (t->type);
179   }
180 };
181
182 /* Now here is the hash table.  When recording a type, it is added to
183    the slot whose index is the hash code.  Note that the hash table is
184    used for several kinds of types (function types, array types and
185    array index range types, for now).  While all these live in the
186    same table, they are completely independent, and the hash code is
187    computed differently for each of these.  */
188
189 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
190
191 /* Hash table and temporary node for larger integer const values.  */
192 static GTY (()) tree int_cst_node;
193
194 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node>
195 {
196   static hashval_t hash (tree t);
197   static bool equal (tree x, tree y);
198 };
199
200 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
201
202 /* Hash table for optimization flags and target option flags.  Use the same
203    hash table for both sets of options.  Nodes for building the current
204    optimization and target option nodes.  The assumption is most of the time
205    the options created will already be in the hash table, so we avoid
206    allocating and freeing up a node repeatably.  */
207 static GTY (()) tree cl_optimization_node;
208 static GTY (()) tree cl_target_option_node;
209
210 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node>
211 {
212   static hashval_t hash (tree t);
213   static bool equal (tree x, tree y);
214 };
215
216 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
217
218 /* General tree->tree mapping  structure for use in hash tables.  */
219
220
221 static GTY ((cache))
222      hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
223
224 static GTY ((cache))
225      hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
226
227 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
228 {
229   static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
230
231   static bool
232   equal (tree_vec_map *a, tree_vec_map *b)
233   {
234     return a->base.from == b->base.from;
235   }
236
237   static int
238   keep_cache_entry (tree_vec_map *&m)
239   {
240     return ggc_marked_p (m->base.from);
241   }
242 };
243
244 static GTY ((cache))
245      hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
246
247 static void set_type_quals (tree, int);
248 static void print_type_hash_statistics (void);
249 static void print_debug_expr_statistics (void);
250 static void print_value_expr_statistics (void);
251
252 tree global_trees[TI_MAX];
253 tree integer_types[itk_none];
254
255 bool int_n_enabled_p[NUM_INT_N_ENTS];
256 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
257
258 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
259
260 /* Number of operands for each OpenMP clause.  */
261 unsigned const char omp_clause_num_ops[] =
262 {
263   0, /* OMP_CLAUSE_ERROR  */
264   1, /* OMP_CLAUSE_PRIVATE  */
265   1, /* OMP_CLAUSE_SHARED  */
266   1, /* OMP_CLAUSE_FIRSTPRIVATE  */
267   2, /* OMP_CLAUSE_LASTPRIVATE  */
268   5, /* OMP_CLAUSE_REDUCTION  */
269   1, /* OMP_CLAUSE_COPYIN  */
270   1, /* OMP_CLAUSE_COPYPRIVATE  */
271   3, /* OMP_CLAUSE_LINEAR  */
272   2, /* OMP_CLAUSE_ALIGNED  */
273   1, /* OMP_CLAUSE_DEPEND  */
274   1, /* OMP_CLAUSE_UNIFORM  */
275   1, /* OMP_CLAUSE_TO_DECLARE  */
276   1, /* OMP_CLAUSE_LINK  */
277   2, /* OMP_CLAUSE_FROM  */
278   2, /* OMP_CLAUSE_TO  */
279   2, /* OMP_CLAUSE_MAP  */
280   1, /* OMP_CLAUSE_USE_DEVICE_PTR  */
281   1, /* OMP_CLAUSE_IS_DEVICE_PTR  */
282   2, /* OMP_CLAUSE__CACHE_  */
283   2, /* OMP_CLAUSE_GANG  */
284   1, /* OMP_CLAUSE_ASYNC  */
285   1, /* OMP_CLAUSE_WAIT  */
286   0, /* OMP_CLAUSE_AUTO  */
287   0, /* OMP_CLAUSE_SEQ  */
288   1, /* OMP_CLAUSE__LOOPTEMP_  */
289   1, /* OMP_CLAUSE_IF  */
290   1, /* OMP_CLAUSE_NUM_THREADS  */
291   1, /* OMP_CLAUSE_SCHEDULE  */
292   0, /* OMP_CLAUSE_NOWAIT  */
293   1, /* OMP_CLAUSE_ORDERED  */
294   0, /* OMP_CLAUSE_DEFAULT  */
295   3, /* OMP_CLAUSE_COLLAPSE  */
296   0, /* OMP_CLAUSE_UNTIED   */
297   1, /* OMP_CLAUSE_FINAL  */
298   0, /* OMP_CLAUSE_MERGEABLE  */
299   1, /* OMP_CLAUSE_DEVICE  */
300   1, /* OMP_CLAUSE_DIST_SCHEDULE  */
301   0, /* OMP_CLAUSE_INBRANCH  */
302   0, /* OMP_CLAUSE_NOTINBRANCH  */
303   1, /* OMP_CLAUSE_NUM_TEAMS  */
304   1, /* OMP_CLAUSE_THREAD_LIMIT  */
305   0, /* OMP_CLAUSE_PROC_BIND  */
306   1, /* OMP_CLAUSE_SAFELEN  */
307   1, /* OMP_CLAUSE_SIMDLEN  */
308   0, /* OMP_CLAUSE_FOR  */
309   0, /* OMP_CLAUSE_PARALLEL  */
310   0, /* OMP_CLAUSE_SECTIONS  */
311   0, /* OMP_CLAUSE_TASKGROUP  */
312   1, /* OMP_CLAUSE_PRIORITY  */
313   1, /* OMP_CLAUSE_GRAINSIZE  */
314   1, /* OMP_CLAUSE_NUM_TASKS  */
315   0, /* OMP_CLAUSE_NOGROUP  */
316   0, /* OMP_CLAUSE_THREADS  */
317   0, /* OMP_CLAUSE_SIMD  */
318   1, /* OMP_CLAUSE_HINT  */
319   0, /* OMP_CLAUSE_DEFALTMAP  */
320   1, /* OMP_CLAUSE__SIMDUID_  */
321   0, /* OMP_CLAUSE__SIMT_  */
322   1, /* OMP_CLAUSE__CILK_FOR_COUNT_  */
323   0, /* OMP_CLAUSE_INDEPENDENT  */
324   1, /* OMP_CLAUSE_WORKER  */
325   1, /* OMP_CLAUSE_VECTOR  */
326   1, /* OMP_CLAUSE_NUM_GANGS  */
327   1, /* OMP_CLAUSE_NUM_WORKERS  */
328   1, /* OMP_CLAUSE_VECTOR_LENGTH  */
329   3, /* OMP_CLAUSE_TILE  */
330   2, /* OMP_CLAUSE__GRIDDIM_  */
331 };
332
333 const char * const omp_clause_code_name[] =
334 {
335   "error_clause",
336   "private",
337   "shared",
338   "firstprivate",
339   "lastprivate",
340   "reduction",
341   "copyin",
342   "copyprivate",
343   "linear",
344   "aligned",
345   "depend",
346   "uniform",
347   "to",
348   "link",
349   "from",
350   "to",
351   "map",
352   "use_device_ptr",
353   "is_device_ptr",
354   "_cache_",
355   "gang",
356   "async",
357   "wait",
358   "auto",
359   "seq",
360   "_looptemp_",
361   "if",
362   "num_threads",
363   "schedule",
364   "nowait",
365   "ordered",
366   "default",
367   "collapse",
368   "untied",
369   "final",
370   "mergeable",
371   "device",
372   "dist_schedule",
373   "inbranch",
374   "notinbranch",
375   "num_teams",
376   "thread_limit",
377   "proc_bind",
378   "safelen",
379   "simdlen",
380   "for",
381   "parallel",
382   "sections",
383   "taskgroup",
384   "priority",
385   "grainsize",
386   "num_tasks",
387   "nogroup",
388   "threads",
389   "simd",
390   "hint",
391   "defaultmap",
392   "_simduid_",
393   "_simt_",
394   "_Cilk_for_count_",
395   "independent",
396   "worker",
397   "vector",
398   "num_gangs",
399   "num_workers",
400   "vector_length",
401   "tile",
402   "_griddim_"
403 };
404
405
406 /* Return the tree node structure used by tree code CODE.  */
407
408 static inline enum tree_node_structure_enum
409 tree_node_structure_for_code (enum tree_code code)
410 {
411   switch (TREE_CODE_CLASS (code))
412     {
413     case tcc_declaration:
414       {
415         switch (code)
416           {
417           case FIELD_DECL:
418             return TS_FIELD_DECL;
419           case PARM_DECL:
420             return TS_PARM_DECL;
421           case VAR_DECL:
422             return TS_VAR_DECL;
423           case LABEL_DECL:
424             return TS_LABEL_DECL;
425           case RESULT_DECL:
426             return TS_RESULT_DECL;
427           case DEBUG_EXPR_DECL:
428             return TS_DECL_WRTL;
429           case CONST_DECL:
430             return TS_CONST_DECL;
431           case TYPE_DECL:
432             return TS_TYPE_DECL;
433           case FUNCTION_DECL:
434             return TS_FUNCTION_DECL;
435           case TRANSLATION_UNIT_DECL:
436             return TS_TRANSLATION_UNIT_DECL;
437           default:
438             return TS_DECL_NON_COMMON;
439           }
440       }
441     case tcc_type:
442       return TS_TYPE_NON_COMMON;
443     case tcc_reference:
444     case tcc_comparison:
445     case tcc_unary:
446     case tcc_binary:
447     case tcc_expression:
448     case tcc_statement:
449     case tcc_vl_exp:
450       return TS_EXP;
451     default:  /* tcc_constant and tcc_exceptional */
452       break;
453     }
454   switch (code)
455     {
456       /* tcc_constant cases.  */
457     case VOID_CST:              return TS_TYPED;
458     case INTEGER_CST:           return TS_INT_CST;
459     case REAL_CST:              return TS_REAL_CST;
460     case FIXED_CST:             return TS_FIXED_CST;
461     case COMPLEX_CST:           return TS_COMPLEX;
462     case VECTOR_CST:            return TS_VECTOR;
463     case STRING_CST:            return TS_STRING;
464       /* tcc_exceptional cases.  */
465     case ERROR_MARK:            return TS_COMMON;
466     case IDENTIFIER_NODE:       return TS_IDENTIFIER;
467     case TREE_LIST:             return TS_LIST;
468     case TREE_VEC:              return TS_VEC;
469     case SSA_NAME:              return TS_SSA_NAME;
470     case PLACEHOLDER_EXPR:      return TS_COMMON;
471     case STATEMENT_LIST:        return TS_STATEMENT_LIST;
472     case BLOCK:                 return TS_BLOCK;
473     case CONSTRUCTOR:           return TS_CONSTRUCTOR;
474     case TREE_BINFO:            return TS_BINFO;
475     case OMP_CLAUSE:            return TS_OMP_CLAUSE;
476     case OPTIMIZATION_NODE:     return TS_OPTIMIZATION;
477     case TARGET_OPTION_NODE:    return TS_TARGET_OPTION;
478
479     default:
480       gcc_unreachable ();
481     }
482 }
483
484
485 /* Initialize tree_contains_struct to describe the hierarchy of tree
486    nodes.  */
487
488 static void
489 initialize_tree_contains_struct (void)
490 {
491   unsigned i;
492
493   for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
494     {
495       enum tree_code code;
496       enum tree_node_structure_enum ts_code;
497
498       code = (enum tree_code) i;
499       ts_code = tree_node_structure_for_code (code);
500
501       /* Mark the TS structure itself.  */
502       tree_contains_struct[code][ts_code] = 1;
503
504       /* Mark all the structures that TS is derived from.  */
505       switch (ts_code)
506         {
507         case TS_TYPED:
508         case TS_BLOCK:
509         case TS_OPTIMIZATION:
510         case TS_TARGET_OPTION:
511           MARK_TS_BASE (code);
512           break;
513
514         case TS_COMMON:
515         case TS_INT_CST:
516         case TS_REAL_CST:
517         case TS_FIXED_CST:
518         case TS_VECTOR:
519         case TS_STRING:
520         case TS_COMPLEX:
521         case TS_SSA_NAME:
522         case TS_CONSTRUCTOR:
523         case TS_EXP:
524         case TS_STATEMENT_LIST:
525           MARK_TS_TYPED (code);
526           break;
527
528         case TS_IDENTIFIER:
529         case TS_DECL_MINIMAL:
530         case TS_TYPE_COMMON:
531         case TS_LIST:
532         case TS_VEC:
533         case TS_BINFO:
534         case TS_OMP_CLAUSE:
535           MARK_TS_COMMON (code);
536           break;
537
538         case TS_TYPE_WITH_LANG_SPECIFIC:
539           MARK_TS_TYPE_COMMON (code);
540           break;
541
542         case TS_TYPE_NON_COMMON:
543           MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
544           break;
545
546         case TS_DECL_COMMON:
547           MARK_TS_DECL_MINIMAL (code);
548           break;
549
550         case TS_DECL_WRTL:
551         case TS_CONST_DECL:
552           MARK_TS_DECL_COMMON (code);
553           break;
554
555         case TS_DECL_NON_COMMON:
556           MARK_TS_DECL_WITH_VIS (code);
557           break;
558
559         case TS_DECL_WITH_VIS:
560         case TS_PARM_DECL:
561         case TS_LABEL_DECL:
562         case TS_RESULT_DECL:
563           MARK_TS_DECL_WRTL (code);
564           break;
565
566         case TS_FIELD_DECL:
567           MARK_TS_DECL_COMMON (code);
568           break;
569
570         case TS_VAR_DECL:
571           MARK_TS_DECL_WITH_VIS (code);
572           break;
573
574         case TS_TYPE_DECL:
575         case TS_FUNCTION_DECL:
576           MARK_TS_DECL_NON_COMMON (code);
577           break;
578
579         case TS_TRANSLATION_UNIT_DECL:
580           MARK_TS_DECL_COMMON (code);
581           break;
582
583         default:
584           gcc_unreachable ();
585         }
586     }
587
588   /* Basic consistency checks for attributes used in fold.  */
589   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
590   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
591   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
592   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
593   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
594   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
595   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
596   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
597   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
598   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
599   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
600   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
601   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
602   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
603   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
604   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
605   gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
606   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
607   gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
608   gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
609   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
610   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
611   gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
612   gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
613   gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
614   gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
615   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
616   gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
617   gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
618   gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
619   gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
620   gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
621   gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
622   gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
623   gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
624   gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
625   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
626   gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
627   gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
628   gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
629 }
630
631
632 /* Init tree.c.  */
633
634 void
635 init_ttree (void)
636 {
637   /* Initialize the hash table of types.  */
638   type_hash_table
639     = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
640
641   debug_expr_for_decl
642     = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
643
644   value_expr_for_decl
645     = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
646
647   int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
648
649   int_cst_node = make_int_cst (1, 1);
650
651   cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
652
653   cl_optimization_node = make_node (OPTIMIZATION_NODE);
654   cl_target_option_node = make_node (TARGET_OPTION_NODE);
655
656   /* Initialize the tree_contains_struct array.  */
657   initialize_tree_contains_struct ();
658   lang_hooks.init_ts ();
659 }
660
661 \f
662 /* The name of the object as the assembler will see it (but before any
663    translations made by ASM_OUTPUT_LABELREF).  Often this is the same
664    as DECL_NAME.  It is an IDENTIFIER_NODE.  */
665 tree
666 decl_assembler_name (tree decl)
667 {
668   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
669     lang_hooks.set_decl_assembler_name (decl);
670   return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
671 }
672
673 /* When the target supports COMDAT groups, this indicates which group the
674    DECL is associated with.  This can be either an IDENTIFIER_NODE or a
675    decl, in which case its DECL_ASSEMBLER_NAME identifies the group.  */
676 tree
677 decl_comdat_group (const_tree node)
678 {
679   struct symtab_node *snode = symtab_node::get (node);
680   if (!snode)
681     return NULL;
682   return snode->get_comdat_group ();
683 }
684
685 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE.  */
686 tree
687 decl_comdat_group_id (const_tree node)
688 {
689   struct symtab_node *snode = symtab_node::get (node);
690   if (!snode)
691     return NULL;
692   return snode->get_comdat_group_id ();
693 }
694
695 /* When the target supports named section, return its name as IDENTIFIER_NODE
696    or NULL if it is in no section.  */
697 const char *
698 decl_section_name (const_tree node)
699 {
700   struct symtab_node *snode = symtab_node::get (node);
701   if (!snode)
702     return NULL;
703   return snode->get_section ();
704 }
705
706 /* Set section name of NODE to VALUE (that is expected to be
707    identifier node) */
708 void
709 set_decl_section_name (tree node, const char *value)
710 {
711   struct symtab_node *snode;
712
713   if (value == NULL)
714     {
715       snode = symtab_node::get (node);
716       if (!snode)
717         return;
718     }
719   else if (VAR_P (node))
720     snode = varpool_node::get_create (node);
721   else
722     snode = cgraph_node::get_create (node);
723   snode->set_section (value);
724 }
725
726 /* Return TLS model of a variable NODE.  */
727 enum tls_model
728 decl_tls_model (const_tree node)
729 {
730   struct varpool_node *snode = varpool_node::get (node);
731   if (!snode)
732     return TLS_MODEL_NONE;
733   return snode->tls_model;
734 }
735
736 /* Set TLS model of variable NODE to MODEL.  */
737 void
738 set_decl_tls_model (tree node, enum tls_model model)
739 {
740   struct varpool_node *vnode;
741
742   if (model == TLS_MODEL_NONE)
743     {
744       vnode = varpool_node::get (node);
745       if (!vnode)
746         return;
747     }
748   else
749     vnode = varpool_node::get_create (node);
750   vnode->tls_model = model;
751 }
752
753 /* Compute the number of bytes occupied by a tree with code CODE.
754    This function cannot be used for nodes that have variable sizes,
755    including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR.  */
756 size_t
757 tree_code_size (enum tree_code code)
758 {
759   switch (TREE_CODE_CLASS (code))
760     {
761     case tcc_declaration:  /* A decl node */
762       {
763         switch (code)
764           {
765           case FIELD_DECL:
766             return sizeof (struct tree_field_decl);
767           case PARM_DECL:
768             return sizeof (struct tree_parm_decl);
769           case VAR_DECL:
770             return sizeof (struct tree_var_decl);
771           case LABEL_DECL:
772             return sizeof (struct tree_label_decl);
773           case RESULT_DECL:
774             return sizeof (struct tree_result_decl);
775           case CONST_DECL:
776             return sizeof (struct tree_const_decl);
777           case TYPE_DECL:
778             return sizeof (struct tree_type_decl);
779           case FUNCTION_DECL:
780             return sizeof (struct tree_function_decl);
781           case DEBUG_EXPR_DECL:
782             return sizeof (struct tree_decl_with_rtl);
783           case TRANSLATION_UNIT_DECL:
784             return sizeof (struct tree_translation_unit_decl);
785           case NAMESPACE_DECL:
786           case IMPORTED_DECL:
787           case NAMELIST_DECL:
788             return sizeof (struct tree_decl_non_common);
789           default:
790             return lang_hooks.tree_size (code);
791           }
792       }
793
794     case tcc_type:  /* a type node */
795       return sizeof (struct tree_type_non_common);
796
797     case tcc_reference:   /* a reference */
798     case tcc_expression:  /* an expression */
799     case tcc_statement:   /* an expression with side effects */
800     case tcc_comparison:  /* a comparison expression */
801     case tcc_unary:       /* a unary arithmetic expression */
802     case tcc_binary:      /* a binary arithmetic expression */
803       return (sizeof (struct tree_exp)
804               + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
805
806     case tcc_constant:  /* a constant */
807       switch (code)
808         {
809         case VOID_CST:          return sizeof (struct tree_typed);
810         case INTEGER_CST:       gcc_unreachable ();
811         case REAL_CST:          return sizeof (struct tree_real_cst);
812         case FIXED_CST:         return sizeof (struct tree_fixed_cst);
813         case COMPLEX_CST:       return sizeof (struct tree_complex);
814         case VECTOR_CST:        return sizeof (struct tree_vector);
815         case STRING_CST:        gcc_unreachable ();
816         default:
817           return lang_hooks.tree_size (code);
818         }
819
820     case tcc_exceptional:  /* something random, like an identifier.  */
821       switch (code)
822         {
823         case IDENTIFIER_NODE:   return lang_hooks.identifier_size;
824         case TREE_LIST:         return sizeof (struct tree_list);
825
826         case ERROR_MARK:
827         case PLACEHOLDER_EXPR:  return sizeof (struct tree_common);
828
829         case TREE_VEC:
830         case OMP_CLAUSE:        gcc_unreachable ();
831
832         case SSA_NAME:          return sizeof (struct tree_ssa_name);
833
834         case STATEMENT_LIST:    return sizeof (struct tree_statement_list);
835         case BLOCK:             return sizeof (struct tree_block);
836         case CONSTRUCTOR:       return sizeof (struct tree_constructor);
837         case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
838         case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
839
840         default:
841           return lang_hooks.tree_size (code);
842         }
843
844     default:
845       gcc_unreachable ();
846     }
847 }
848
849 /* Compute the number of bytes occupied by NODE.  This routine only
850    looks at TREE_CODE, except for those nodes that have variable sizes.  */
851 size_t
852 tree_size (const_tree node)
853 {
854   const enum tree_code code = TREE_CODE (node);
855   switch (code)
856     {
857     case INTEGER_CST:
858       return (sizeof (struct tree_int_cst)
859               + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
860
861     case TREE_BINFO:
862       return (offsetof (struct tree_binfo, base_binfos)
863               + vec<tree, va_gc>
864                   ::embedded_size (BINFO_N_BASE_BINFOS (node)));
865
866     case TREE_VEC:
867       return (sizeof (struct tree_vec)
868               + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
869
870     case VECTOR_CST:
871       return (sizeof (struct tree_vector)
872               + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
873
874     case STRING_CST:
875       return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
876
877     case OMP_CLAUSE:
878       return (sizeof (struct tree_omp_clause)
879               + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
880                 * sizeof (tree));
881
882     default:
883       if (TREE_CODE_CLASS (code) == tcc_vl_exp)
884         return (sizeof (struct tree_exp)
885                 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
886       else
887         return tree_code_size (code);
888     }
889 }
890
891 /* Record interesting allocation statistics for a tree node with CODE
892    and LENGTH.  */
893
894 static void
895 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
896                                    size_t length ATTRIBUTE_UNUSED)
897 {
898   enum tree_code_class type = TREE_CODE_CLASS (code);
899   tree_node_kind kind;
900
901   if (!GATHER_STATISTICS)
902     return;
903
904   switch (type)
905     {
906     case tcc_declaration:  /* A decl node */
907       kind = d_kind;
908       break;
909
910     case tcc_type:  /* a type node */
911       kind = t_kind;
912       break;
913
914     case tcc_statement:  /* an expression with side effects */
915       kind = s_kind;
916       break;
917
918     case tcc_reference:  /* a reference */
919       kind = r_kind;
920       break;
921
922     case tcc_expression:  /* an expression */
923     case tcc_comparison:  /* a comparison expression */
924     case tcc_unary:  /* a unary arithmetic expression */
925     case tcc_binary:  /* a binary arithmetic expression */
926       kind = e_kind;
927       break;
928
929     case tcc_constant:  /* a constant */
930       kind = c_kind;
931       break;
932
933     case tcc_exceptional:  /* something random, like an identifier.  */
934       switch (code)
935         {
936         case IDENTIFIER_NODE:
937           kind = id_kind;
938           break;
939
940         case TREE_VEC:
941           kind = vec_kind;
942           break;
943
944         case TREE_BINFO:
945           kind = binfo_kind;
946           break;
947
948         case SSA_NAME:
949           kind = ssa_name_kind;
950           break;
951
952         case BLOCK:
953           kind = b_kind;
954           break;
955
956         case CONSTRUCTOR:
957           kind = constr_kind;
958           break;
959
960         case OMP_CLAUSE:
961           kind = omp_clause_kind;
962           break;
963
964         default:
965           kind = x_kind;
966           break;
967         }
968       break;
969
970     case tcc_vl_exp:
971       kind = e_kind;
972       break;
973
974     default:
975       gcc_unreachable ();
976     }
977
978   tree_code_counts[(int) code]++;
979   tree_node_counts[(int) kind]++;
980   tree_node_sizes[(int) kind] += length;
981 }
982
983 /* Allocate and return a new UID from the DECL_UID namespace.  */
984
985 int
986 allocate_decl_uid (void)
987 {
988   return next_decl_uid++;
989 }
990
991 /* Return a newly allocated node of code CODE.  For decl and type
992    nodes, some other fields are initialized.  The rest of the node is
993    initialized to zero.  This function cannot be used for TREE_VEC,
994    INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
995    tree_code_size.
996
997    Achoo!  I got a code in the node.  */
998
999 tree
1000 make_node_stat (enum tree_code code MEM_STAT_DECL)
1001 {
1002   tree t;
1003   enum tree_code_class type = TREE_CODE_CLASS (code);
1004   size_t length = tree_code_size (code);
1005
1006   record_node_allocation_statistics (code, length);
1007
1008   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1009   TREE_SET_CODE (t, code);
1010
1011   switch (type)
1012     {
1013     case tcc_statement:
1014       TREE_SIDE_EFFECTS (t) = 1;
1015       break;
1016
1017     case tcc_declaration:
1018       if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1019         {
1020           if (code == FUNCTION_DECL)
1021             {
1022               SET_DECL_ALIGN (t, FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY));
1023               SET_DECL_MODE (t, FUNCTION_MODE);
1024             }
1025           else
1026             SET_DECL_ALIGN (t, 1);
1027         }
1028       DECL_SOURCE_LOCATION (t) = input_location;
1029       if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1030         DECL_UID (t) = --next_debug_decl_uid;
1031       else
1032         {
1033           DECL_UID (t) = allocate_decl_uid ();
1034           SET_DECL_PT_UID (t, -1);
1035         }
1036       if (TREE_CODE (t) == LABEL_DECL)
1037         LABEL_DECL_UID (t) = -1;
1038
1039       break;
1040
1041     case tcc_type:
1042       TYPE_UID (t) = next_type_uid++;
1043       SET_TYPE_ALIGN (t, BITS_PER_UNIT);
1044       TYPE_USER_ALIGN (t) = 0;
1045       TYPE_MAIN_VARIANT (t) = t;
1046       TYPE_CANONICAL (t) = t;
1047
1048       /* Default to no attributes for type, but let target change that.  */
1049       TYPE_ATTRIBUTES (t) = NULL_TREE;
1050       targetm.set_default_type_attributes (t);
1051
1052       /* We have not yet computed the alias set for this type.  */
1053       TYPE_ALIAS_SET (t) = -1;
1054       break;
1055
1056     case tcc_constant:
1057       TREE_CONSTANT (t) = 1;
1058       break;
1059
1060     case tcc_expression:
1061       switch (code)
1062         {
1063         case INIT_EXPR:
1064         case MODIFY_EXPR:
1065         case VA_ARG_EXPR:
1066         case PREDECREMENT_EXPR:
1067         case PREINCREMENT_EXPR:
1068         case POSTDECREMENT_EXPR:
1069         case POSTINCREMENT_EXPR:
1070           /* All of these have side-effects, no matter what their
1071              operands are.  */
1072           TREE_SIDE_EFFECTS (t) = 1;
1073           break;
1074
1075         default:
1076           break;
1077         }
1078       break;
1079
1080     case tcc_exceptional:
1081       switch (code)
1082         {
1083         case TARGET_OPTION_NODE:
1084           TREE_TARGET_OPTION(t)
1085                             = ggc_cleared_alloc<struct cl_target_option> ();
1086           break;
1087
1088         case OPTIMIZATION_NODE:
1089           TREE_OPTIMIZATION (t)
1090                             = ggc_cleared_alloc<struct cl_optimization> ();
1091           break;
1092
1093         default:
1094           break;
1095         }
1096       break;
1097
1098     default:
1099       /* Other classes need no special treatment.  */
1100       break;
1101     }
1102
1103   return t;
1104 }
1105
1106 /* Free tree node.  */
1107
1108 void
1109 free_node (tree node)
1110 {
1111   enum tree_code code = TREE_CODE (node);
1112   if (GATHER_STATISTICS)
1113     {
1114       tree_code_counts[(int) TREE_CODE (node)]--;
1115       tree_node_counts[(int) t_kind]--;
1116       tree_node_sizes[(int) t_kind] -= tree_size (node);
1117     }
1118   if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1119     vec_free (CONSTRUCTOR_ELTS (node));
1120   else if (code == BLOCK)
1121     vec_free (BLOCK_NONLOCALIZED_VARS (node));
1122   else if (code == TREE_BINFO)
1123     vec_free (BINFO_BASE_ACCESSES (node));
1124   ggc_free (node);
1125 }
1126 \f
1127 /* Return a new node with the same contents as NODE except that its
1128    TREE_CHAIN, if it has one, is zero and it has a fresh uid.  */
1129
1130 tree
1131 copy_node_stat (tree node MEM_STAT_DECL)
1132 {
1133   tree t;
1134   enum tree_code code = TREE_CODE (node);
1135   size_t length;
1136
1137   gcc_assert (code != STATEMENT_LIST);
1138
1139   length = tree_size (node);
1140   record_node_allocation_statistics (code, length);
1141   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1142   memcpy (t, node, length);
1143
1144   if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1145     TREE_CHAIN (t) = 0;
1146   TREE_ASM_WRITTEN (t) = 0;
1147   TREE_VISITED (t) = 0;
1148
1149   if (TREE_CODE_CLASS (code) == tcc_declaration)
1150     {
1151       if (code == DEBUG_EXPR_DECL)
1152         DECL_UID (t) = --next_debug_decl_uid;
1153       else
1154         {
1155           DECL_UID (t) = allocate_decl_uid ();
1156           if (DECL_PT_UID_SET_P (node))
1157             SET_DECL_PT_UID (t, DECL_PT_UID (node));
1158         }
1159       if ((TREE_CODE (node) == PARM_DECL || VAR_P (node))
1160           && DECL_HAS_VALUE_EXPR_P (node))
1161         {
1162           SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1163           DECL_HAS_VALUE_EXPR_P (t) = 1;
1164         }
1165       /* DECL_DEBUG_EXPR is copied explicitely by callers.  */
1166       if (VAR_P (node))
1167         {
1168           DECL_HAS_DEBUG_EXPR_P (t) = 0;
1169           t->decl_with_vis.symtab_node = NULL;
1170         }
1171       if (VAR_P (node) && DECL_HAS_INIT_PRIORITY_P (node))
1172         {
1173           SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1174           DECL_HAS_INIT_PRIORITY_P (t) = 1;
1175         }
1176       if (TREE_CODE (node) == FUNCTION_DECL)
1177         {
1178           DECL_STRUCT_FUNCTION (t) = NULL;
1179           t->decl_with_vis.symtab_node = NULL;
1180         }
1181     }
1182   else if (TREE_CODE_CLASS (code) == tcc_type)
1183     {
1184       TYPE_UID (t) = next_type_uid++;
1185       /* The following is so that the debug code for
1186          the copy is different from the original type.
1187          The two statements usually duplicate each other
1188          (because they clear fields of the same union),
1189          but the optimizer should catch that.  */
1190       TYPE_SYMTAB_POINTER (t) = 0;
1191       TYPE_SYMTAB_ADDRESS (t) = 0;
1192
1193       /* Do not copy the values cache.  */
1194       if (TYPE_CACHED_VALUES_P (t))
1195         {
1196           TYPE_CACHED_VALUES_P (t) = 0;
1197           TYPE_CACHED_VALUES (t) = NULL_TREE;
1198         }
1199     }
1200     else if (code == TARGET_OPTION_NODE)
1201       {
1202         TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
1203         memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
1204                 sizeof (struct cl_target_option));
1205       }
1206     else if (code == OPTIMIZATION_NODE)
1207       {
1208         TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>();
1209         memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node),
1210                 sizeof (struct cl_optimization));
1211       }
1212
1213   return t;
1214 }
1215
1216 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1217    For example, this can copy a list made of TREE_LIST nodes.  */
1218
1219 tree
1220 copy_list (tree list)
1221 {
1222   tree head;
1223   tree prev, next;
1224
1225   if (list == 0)
1226     return 0;
1227
1228   head = prev = copy_node (list);
1229   next = TREE_CHAIN (list);
1230   while (next)
1231     {
1232       TREE_CHAIN (prev) = copy_node (next);
1233       prev = TREE_CHAIN (prev);
1234       next = TREE_CHAIN (next);
1235     }
1236   return head;
1237 }
1238
1239 \f
1240 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1241    INTEGER_CST with value CST and type TYPE.   */
1242
1243 static unsigned int
1244 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1245 {
1246   gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1247   /* We need extra HWIs if CST is an unsigned integer with its
1248      upper bit set.  */
1249   if (TYPE_UNSIGNED (type) && wi::neg_p (cst))
1250     return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1251   return cst.get_len ();
1252 }
1253
1254 /* Return a new INTEGER_CST with value CST and type TYPE.  */
1255
1256 static tree
1257 build_new_int_cst (tree type, const wide_int &cst)
1258 {
1259   unsigned int len = cst.get_len ();
1260   unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1261   tree nt = make_int_cst (len, ext_len);
1262
1263   if (len < ext_len)
1264     {
1265       --ext_len;
1266       TREE_INT_CST_ELT (nt, ext_len)
1267         = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1268       for (unsigned int i = len; i < ext_len; ++i)
1269         TREE_INT_CST_ELT (nt, i) = -1;
1270     }
1271   else if (TYPE_UNSIGNED (type)
1272            && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1273     {
1274       len--;
1275       TREE_INT_CST_ELT (nt, len)
1276         = zext_hwi (cst.elt (len),
1277                     cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1278     }
1279
1280   for (unsigned int i = 0; i < len; i++)
1281     TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1282   TREE_TYPE (nt) = type;
1283   return nt;
1284 }
1285
1286 /* Create an INT_CST node with a LOW value sign extended to TYPE.  */
1287
1288 tree
1289 build_int_cst (tree type, HOST_WIDE_INT low)
1290 {
1291   /* Support legacy code.  */
1292   if (!type)
1293     type = integer_type_node;
1294
1295   return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1296 }
1297
1298 tree
1299 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
1300 {
1301   return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1302 }
1303
1304 /* Create an INT_CST node with a LOW value sign extended to TYPE.  */
1305
1306 tree
1307 build_int_cst_type (tree type, HOST_WIDE_INT low)
1308 {
1309   gcc_assert (type);
1310   return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1311 }
1312
1313 /* Constructs tree in type TYPE from with value given by CST.  Signedness
1314    of CST is assumed to be the same as the signedness of TYPE.  */
1315
1316 tree
1317 double_int_to_tree (tree type, double_int cst)
1318 {
1319   return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1320 }
1321
1322 /* We force the wide_int CST to the range of the type TYPE by sign or
1323    zero extending it.  OVERFLOWABLE indicates if we are interested in
1324    overflow of the value, when >0 we are only interested in signed
1325    overflow, for <0 we are interested in any overflow.  OVERFLOWED
1326    indicates whether overflow has already occurred.  CONST_OVERFLOWED
1327    indicates whether constant overflow has already occurred.  We force
1328    T's value to be within range of T's type (by setting to 0 or 1 all
1329    the bits outside the type's range).  We set TREE_OVERFLOWED if,
1330         OVERFLOWED is nonzero,
1331         or OVERFLOWABLE is >0 and signed overflow occurs
1332         or OVERFLOWABLE is <0 and any overflow occurs
1333    We return a new tree node for the extended wide_int.  The node
1334    is shared if no overflow flags are set.  */
1335
1336
1337 tree
1338 force_fit_type (tree type, const wide_int_ref &cst,
1339                 int overflowable, bool overflowed)
1340 {
1341   signop sign = TYPE_SIGN (type);
1342
1343   /* If we need to set overflow flags, return a new unshared node.  */
1344   if (overflowed || !wi::fits_to_tree_p (cst, type))
1345     {
1346       if (overflowed
1347           || overflowable < 0
1348           || (overflowable > 0 && sign == SIGNED))
1349         {
1350           wide_int tmp = wide_int::from (cst, TYPE_PRECISION (type), sign);
1351           tree t = build_new_int_cst (type, tmp);
1352           TREE_OVERFLOW (t) = 1;
1353           return t;
1354         }
1355     }
1356
1357   /* Else build a shared node.  */
1358   return wide_int_to_tree (type, cst);
1359 }
1360
1361 /* These are the hash table functions for the hash table of INTEGER_CST
1362    nodes of a sizetype.  */
1363
1364 /* Return the hash code X, an INTEGER_CST.  */
1365
1366 hashval_t
1367 int_cst_hasher::hash (tree x)
1368 {
1369   const_tree const t = x;
1370   hashval_t code = TYPE_UID (TREE_TYPE (t));
1371   int i;
1372
1373   for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1374     code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code);
1375
1376   return code;
1377 }
1378
1379 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1380    is the same as that given by *Y, which is the same.  */
1381
1382 bool
1383 int_cst_hasher::equal (tree x, tree y)
1384 {
1385   const_tree const xt = x;
1386   const_tree const yt = y;
1387
1388   if (TREE_TYPE (xt) != TREE_TYPE (yt)
1389       || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1390       || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1391     return false;
1392
1393   for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1394     if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1395       return false;
1396
1397   return true;
1398 }
1399
1400 /* Create an INT_CST node of TYPE and value CST.
1401    The returned node is always shared.  For small integers we use a
1402    per-type vector cache, for larger ones we use a single hash table.
1403    The value is extended from its precision according to the sign of
1404    the type to be a multiple of HOST_BITS_PER_WIDE_INT.  This defines
1405    the upper bits and ensures that hashing and value equality based
1406    upon the underlying HOST_WIDE_INTs works without masking.  */
1407
1408 tree
1409 wide_int_to_tree (tree type, const wide_int_ref &pcst)
1410 {
1411   tree t;
1412   int ix = -1;
1413   int limit = 0;
1414
1415   gcc_assert (type);
1416   unsigned int prec = TYPE_PRECISION (type);
1417   signop sgn = TYPE_SIGN (type);
1418
1419   /* Verify that everything is canonical.  */
1420   int l = pcst.get_len ();
1421   if (l > 1)
1422     {
1423       if (pcst.elt (l - 1) == 0)
1424         gcc_checking_assert (pcst.elt (l - 2) < 0);
1425       if (pcst.elt (l - 1) == HOST_WIDE_INT_M1)
1426         gcc_checking_assert (pcst.elt (l - 2) >= 0);
1427     }
1428
1429   wide_int cst = wide_int::from (pcst, prec, sgn);
1430   unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1431
1432   if (ext_len == 1)
1433     {
1434       /* We just need to store a single HOST_WIDE_INT.  */
1435       HOST_WIDE_INT hwi;
1436       if (TYPE_UNSIGNED (type))
1437         hwi = cst.to_uhwi ();
1438       else
1439         hwi = cst.to_shwi ();
1440
1441       switch (TREE_CODE (type))
1442         {
1443         case NULLPTR_TYPE:
1444           gcc_assert (hwi == 0);
1445           /* Fallthru.  */
1446
1447         case POINTER_TYPE:
1448         case REFERENCE_TYPE:
1449         case POINTER_BOUNDS_TYPE:
1450           /* Cache NULL pointer and zero bounds.  */
1451           if (hwi == 0)
1452             {
1453               limit = 1;
1454               ix = 0;
1455             }
1456           break;
1457
1458         case BOOLEAN_TYPE:
1459           /* Cache false or true.  */
1460           limit = 2;
1461           if (IN_RANGE (hwi, 0, 1))
1462             ix = hwi;
1463           break;
1464
1465         case INTEGER_TYPE:
1466         case OFFSET_TYPE:
1467           if (TYPE_SIGN (type) == UNSIGNED)
1468             {
1469               /* Cache [0, N).  */
1470               limit = INTEGER_SHARE_LIMIT;
1471               if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1))
1472                 ix = hwi;
1473             }
1474           else
1475             {
1476               /* Cache [-1, N).  */
1477               limit = INTEGER_SHARE_LIMIT + 1;
1478               if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1))
1479                 ix = hwi + 1;
1480             }
1481           break;
1482
1483         case ENUMERAL_TYPE:
1484           break;
1485
1486         default:
1487           gcc_unreachable ();
1488         }
1489
1490       if (ix >= 0)
1491         {
1492           /* Look for it in the type's vector of small shared ints.  */
1493           if (!TYPE_CACHED_VALUES_P (type))
1494             {
1495               TYPE_CACHED_VALUES_P (type) = 1;
1496               TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1497             }
1498
1499           t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1500           if (t)
1501             /* Make sure no one is clobbering the shared constant.  */
1502             gcc_checking_assert (TREE_TYPE (t) == type
1503                                  && TREE_INT_CST_NUNITS (t) == 1
1504                                  && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1505                                  && TREE_INT_CST_EXT_NUNITS (t) == 1
1506                                  && TREE_INT_CST_ELT (t, 0) == hwi);
1507           else
1508             {
1509               /* Create a new shared int.  */
1510               t = build_new_int_cst (type, cst);
1511               TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1512             }
1513         }
1514       else
1515         {
1516           /* Use the cache of larger shared ints, using int_cst_node as
1517              a temporary.  */
1518
1519           TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1520           TREE_TYPE (int_cst_node) = type;
1521
1522           tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1523           t = *slot;
1524           if (!t)
1525             {
1526               /* Insert this one into the hash table.  */
1527               t = int_cst_node;
1528               *slot = t;
1529               /* Make a new node for next time round.  */
1530               int_cst_node = make_int_cst (1, 1);
1531             }
1532         }
1533     }
1534   else
1535     {
1536       /* The value either hashes properly or we drop it on the floor
1537          for the gc to take care of.  There will not be enough of them
1538          to worry about.  */
1539
1540       tree nt = build_new_int_cst (type, cst);
1541       tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1542       t = *slot;
1543       if (!t)
1544         {
1545           /* Insert this one into the hash table.  */
1546           t = nt;
1547           *slot = t;
1548         }
1549     }
1550
1551   return t;
1552 }
1553
1554 void
1555 cache_integer_cst (tree t)
1556 {
1557   tree type = TREE_TYPE (t);
1558   int ix = -1;
1559   int limit = 0;
1560   int prec = TYPE_PRECISION (type);
1561
1562   gcc_assert (!TREE_OVERFLOW (t));
1563
1564   switch (TREE_CODE (type))
1565     {
1566     case NULLPTR_TYPE:
1567       gcc_assert (integer_zerop (t));
1568       /* Fallthru.  */
1569
1570     case POINTER_TYPE:
1571     case REFERENCE_TYPE:
1572       /* Cache NULL pointer.  */
1573       if (integer_zerop (t))
1574         {
1575           limit = 1;
1576           ix = 0;
1577         }
1578       break;
1579
1580     case BOOLEAN_TYPE:
1581       /* Cache false or true.  */
1582       limit = 2;
1583       if (wi::ltu_p (t, 2))
1584         ix = TREE_INT_CST_ELT (t, 0);
1585       break;
1586
1587     case INTEGER_TYPE:
1588     case OFFSET_TYPE:
1589       if (TYPE_UNSIGNED (type))
1590         {
1591           /* Cache 0..N */
1592           limit = INTEGER_SHARE_LIMIT;
1593
1594           /* This is a little hokie, but if the prec is smaller than
1595              what is necessary to hold INTEGER_SHARE_LIMIT, then the
1596              obvious test will not get the correct answer.  */
1597           if (prec < HOST_BITS_PER_WIDE_INT)
1598             {
1599               if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT)
1600                 ix = tree_to_uhwi (t);
1601             }
1602           else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1603             ix = tree_to_uhwi (t);
1604         }
1605       else
1606         {
1607           /* Cache -1..N */
1608           limit = INTEGER_SHARE_LIMIT + 1;
1609
1610           if (integer_minus_onep (t))
1611             ix = 0;
1612           else if (!wi::neg_p (t))
1613             {
1614               if (prec < HOST_BITS_PER_WIDE_INT)
1615                 {
1616                   if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT)
1617                     ix = tree_to_shwi (t) + 1;
1618                 }
1619               else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1620                 ix = tree_to_shwi (t) + 1;
1621             }
1622         }
1623       break;
1624
1625     case ENUMERAL_TYPE:
1626       break;
1627
1628     default:
1629       gcc_unreachable ();
1630     }
1631
1632   if (ix >= 0)
1633     {
1634       /* Look for it in the type's vector of small shared ints.  */
1635       if (!TYPE_CACHED_VALUES_P (type))
1636         {
1637           TYPE_CACHED_VALUES_P (type) = 1;
1638           TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1639         }
1640
1641       gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1642       TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1643     }
1644   else
1645     {
1646       /* Use the cache of larger shared ints.  */
1647       tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1648       /* If there is already an entry for the number verify it's the
1649          same.  */
1650       if (*slot)
1651         gcc_assert (wi::eq_p (tree (*slot), t));
1652       else
1653         /* Otherwise insert this one into the hash table.  */
1654         *slot = t;
1655     }
1656 }
1657
1658
1659 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1660    and the rest are zeros.  */
1661
1662 tree
1663 build_low_bits_mask (tree type, unsigned bits)
1664 {
1665   gcc_assert (bits <= TYPE_PRECISION (type));
1666
1667   return wide_int_to_tree (type, wi::mask (bits, false,
1668                                            TYPE_PRECISION (type)));
1669 }
1670
1671 /* Checks that X is integer constant that can be expressed in (unsigned)
1672    HOST_WIDE_INT without loss of precision.  */
1673
1674 bool
1675 cst_and_fits_in_hwi (const_tree x)
1676 {
1677   return (TREE_CODE (x) == INTEGER_CST
1678           && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
1679 }
1680
1681 /* Build a newly constructed VECTOR_CST node of length LEN.  */
1682
1683 tree
1684 make_vector_stat (unsigned len MEM_STAT_DECL)
1685 {
1686   tree t;
1687   unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1688
1689   record_node_allocation_statistics (VECTOR_CST, length);
1690
1691   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1692
1693   TREE_SET_CODE (t, VECTOR_CST);
1694   TREE_CONSTANT (t) = 1;
1695
1696   return t;
1697 }
1698
1699 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1700    are in a list pointed to by VALS.  */
1701
1702 tree
1703 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1704 {
1705   int over = 0;
1706   unsigned cnt = 0;
1707   tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1708   TREE_TYPE (v) = type;
1709
1710   /* Iterate through elements and check for overflow.  */
1711   for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1712     {
1713       tree value = vals[cnt];
1714
1715       VECTOR_CST_ELT (v, cnt) = value;
1716
1717       /* Don't crash if we get an address constant.  */
1718       if (!CONSTANT_CLASS_P (value))
1719         continue;
1720
1721       over |= TREE_OVERFLOW (value);
1722     }
1723
1724   TREE_OVERFLOW (v) = over;
1725   return v;
1726 }
1727
1728 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1729    are extracted from V, a vector of CONSTRUCTOR_ELT.  */
1730
1731 tree
1732 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1733 {
1734   tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1735   unsigned HOST_WIDE_INT idx, pos = 0;
1736   tree value;
1737
1738   FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1739     {
1740       if (TREE_CODE (value) == VECTOR_CST)
1741         for (unsigned i = 0; i < VECTOR_CST_NELTS (value); ++i)
1742           vec[pos++] = VECTOR_CST_ELT (value, i);
1743       else
1744         vec[pos++] = value;
1745     }
1746   while (pos < TYPE_VECTOR_SUBPARTS (type))
1747     vec[pos++] = build_zero_cst (TREE_TYPE (type));
1748
1749   return build_vector (type, vec);
1750 }
1751
1752 /* Build a vector of type VECTYPE where all the elements are SCs.  */
1753 tree
1754 build_vector_from_val (tree vectype, tree sc) 
1755 {
1756   int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1757
1758   if (sc == error_mark_node)
1759     return sc;
1760
1761   /* Verify that the vector type is suitable for SC.  Note that there
1762      is some inconsistency in the type-system with respect to restrict
1763      qualifications of pointers.  Vector types always have a main-variant
1764      element type and the qualification is applied to the vector-type.
1765      So TREE_TYPE (vector-type) does not return a properly qualified
1766      vector element-type.  */
1767   gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1768                                            TREE_TYPE (vectype)));
1769
1770   if (CONSTANT_CLASS_P (sc))
1771     {
1772       tree *v = XALLOCAVEC (tree, nunits);
1773       for (i = 0; i < nunits; ++i)
1774         v[i] = sc;
1775       return build_vector (vectype, v);
1776     }
1777   else
1778     {
1779       vec<constructor_elt, va_gc> *v;
1780       vec_alloc (v, nunits);
1781       for (i = 0; i < nunits; ++i)
1782         CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1783       return build_constructor (vectype, v);
1784     }
1785 }
1786
1787 /* Something has messed with the elements of CONSTRUCTOR C after it was built;
1788    calculate TREE_CONSTANT and TREE_SIDE_EFFECTS.  */
1789
1790 void
1791 recompute_constructor_flags (tree c)
1792 {
1793   unsigned int i;
1794   tree val;
1795   bool constant_p = true;
1796   bool side_effects_p = false;
1797   vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1798
1799   FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1800     {
1801       /* Mostly ctors will have elts that don't have side-effects, so
1802          the usual case is to scan all the elements.  Hence a single
1803          loop for both const and side effects, rather than one loop
1804          each (with early outs).  */
1805       if (!TREE_CONSTANT (val))
1806         constant_p = false;
1807       if (TREE_SIDE_EFFECTS (val))
1808         side_effects_p = true;
1809     }
1810
1811   TREE_SIDE_EFFECTS (c) = side_effects_p;
1812   TREE_CONSTANT (c) = constant_p;
1813 }
1814
1815 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for
1816    CONSTRUCTOR C.  */
1817
1818 void
1819 verify_constructor_flags (tree c)
1820 {
1821   unsigned int i;
1822   tree val;
1823   bool constant_p = TREE_CONSTANT (c);
1824   bool side_effects_p = TREE_SIDE_EFFECTS (c);
1825   vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1826
1827   FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1828     {
1829       if (constant_p && !TREE_CONSTANT (val))
1830         internal_error ("non-constant element in constant CONSTRUCTOR");
1831       if (!side_effects_p && TREE_SIDE_EFFECTS (val))
1832         internal_error ("side-effects element in no-side-effects CONSTRUCTOR");
1833     }
1834 }
1835
1836 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1837    are in the vec pointed to by VALS.  */
1838 tree
1839 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1840 {
1841   tree c = make_node (CONSTRUCTOR);
1842
1843   TREE_TYPE (c) = type;
1844   CONSTRUCTOR_ELTS (c) = vals;
1845
1846   recompute_constructor_flags (c);
1847
1848   return c;
1849 }
1850
1851 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1852    INDEX and VALUE.  */
1853 tree
1854 build_constructor_single (tree type, tree index, tree value)
1855 {
1856   vec<constructor_elt, va_gc> *v;
1857   constructor_elt elt = {index, value};
1858
1859   vec_alloc (v, 1);
1860   v->quick_push (elt);
1861
1862   return build_constructor (type, v);
1863 }
1864
1865
1866 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1867    are in a list pointed to by VALS.  */
1868 tree
1869 build_constructor_from_list (tree type, tree vals)
1870 {
1871   tree t;
1872   vec<constructor_elt, va_gc> *v = NULL;
1873
1874   if (vals)
1875     {
1876       vec_alloc (v, list_length (vals));
1877       for (t = vals; t; t = TREE_CHAIN (t))
1878         CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1879     }
1880
1881   return build_constructor (type, v);
1882 }
1883
1884 /* Return a new CONSTRUCTOR node whose type is TYPE.  NELTS is the number
1885    of elements, provided as index/value pairs.  */
1886
1887 tree
1888 build_constructor_va (tree type, int nelts, ...)
1889 {
1890   vec<constructor_elt, va_gc> *v = NULL;
1891   va_list p;
1892
1893   va_start (p, nelts);
1894   vec_alloc (v, nelts);
1895   while (nelts--)
1896     {
1897       tree index = va_arg (p, tree);
1898       tree value = va_arg (p, tree);
1899       CONSTRUCTOR_APPEND_ELT (v, index, value);
1900     }
1901   va_end (p);
1902   return build_constructor (type, v);
1903 }
1904
1905 /* Return a new FIXED_CST node whose type is TYPE and value is F.  */
1906
1907 tree
1908 build_fixed (tree type, FIXED_VALUE_TYPE f)
1909 {
1910   tree v;
1911   FIXED_VALUE_TYPE *fp;
1912
1913   v = make_node (FIXED_CST);
1914   fp = ggc_alloc<fixed_value> ();
1915   memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1916
1917   TREE_TYPE (v) = type;
1918   TREE_FIXED_CST_PTR (v) = fp;
1919   return v;
1920 }
1921
1922 /* Return a new REAL_CST node whose type is TYPE and value is D.  */
1923
1924 tree
1925 build_real (tree type, REAL_VALUE_TYPE d)
1926 {
1927   tree v;
1928   REAL_VALUE_TYPE *dp;
1929   int overflow = 0;
1930
1931   /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1932      Consider doing it via real_convert now.  */
1933
1934   v = make_node (REAL_CST);
1935   dp = ggc_alloc<real_value> ();
1936   memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1937
1938   TREE_TYPE (v) = type;
1939   TREE_REAL_CST_PTR (v) = dp;
1940   TREE_OVERFLOW (v) = overflow;
1941   return v;
1942 }
1943
1944 /* Like build_real, but first truncate D to the type.  */
1945
1946 tree
1947 build_real_truncate (tree type, REAL_VALUE_TYPE d)
1948 {
1949   return build_real (type, real_value_truncate (TYPE_MODE (type), d));
1950 }
1951
1952 /* Return a new REAL_CST node whose type is TYPE
1953    and whose value is the integer value of the INTEGER_CST node I.  */
1954
1955 REAL_VALUE_TYPE
1956 real_value_from_int_cst (const_tree type, const_tree i)
1957 {
1958   REAL_VALUE_TYPE d;
1959
1960   /* Clear all bits of the real value type so that we can later do
1961      bitwise comparisons to see if two values are the same.  */
1962   memset (&d, 0, sizeof d);
1963
1964   real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, i,
1965                      TYPE_SIGN (TREE_TYPE (i)));
1966   return d;
1967 }
1968
1969 /* Given a tree representing an integer constant I, return a tree
1970    representing the same value as a floating-point constant of type TYPE.  */
1971
1972 tree
1973 build_real_from_int_cst (tree type, const_tree i)
1974 {
1975   tree v;
1976   int overflow = TREE_OVERFLOW (i);
1977
1978   v = build_real (type, real_value_from_int_cst (type, i));
1979
1980   TREE_OVERFLOW (v) |= overflow;
1981   return v;
1982 }
1983
1984 /* Return a newly constructed STRING_CST node whose value is
1985    the LEN characters at STR.
1986    Note that for a C string literal, LEN should include the trailing NUL.
1987    The TREE_TYPE is not initialized.  */
1988
1989 tree
1990 build_string (int len, const char *str)
1991 {
1992   tree s;
1993   size_t length;
1994
1995   /* Do not waste bytes provided by padding of struct tree_string.  */
1996   length = len + offsetof (struct tree_string, str) + 1;
1997
1998   record_node_allocation_statistics (STRING_CST, length);
1999
2000   s = (tree) ggc_internal_alloc (length);
2001
2002   memset (s, 0, sizeof (struct tree_typed));
2003   TREE_SET_CODE (s, STRING_CST);
2004   TREE_CONSTANT (s) = 1;
2005   TREE_STRING_LENGTH (s) = len;
2006   memcpy (s->string.str, str, len);
2007   s->string.str[len] = '\0';
2008
2009   return s;
2010 }
2011
2012 /* Return a newly constructed COMPLEX_CST node whose value is
2013    specified by the real and imaginary parts REAL and IMAG.
2014    Both REAL and IMAG should be constant nodes.  TYPE, if specified,
2015    will be the type of the COMPLEX_CST; otherwise a new type will be made.  */
2016
2017 tree
2018 build_complex (tree type, tree real, tree imag)
2019 {
2020   tree t = make_node (COMPLEX_CST);
2021
2022   TREE_REALPART (t) = real;
2023   TREE_IMAGPART (t) = imag;
2024   TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
2025   TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
2026   return t;
2027 }
2028
2029 /* Build a complex (inf +- 0i), such as for the result of cproj.
2030    TYPE is the complex tree type of the result.  If NEG is true, the
2031    imaginary zero is negative.  */
2032
2033 tree
2034 build_complex_inf (tree type, bool neg)
2035 {
2036   REAL_VALUE_TYPE rinf, rzero = dconst0;
2037
2038   real_inf (&rinf);
2039   rzero.sign = neg;
2040   return build_complex (type, build_real (TREE_TYPE (type), rinf),
2041                         build_real (TREE_TYPE (type), rzero));
2042 }
2043
2044 /* Return the constant 1 in type TYPE.  If TYPE has several elements, each
2045    element is set to 1.  In particular, this is 1 + i for complex types.  */
2046
2047 tree
2048 build_each_one_cst (tree type)
2049 {
2050   if (TREE_CODE (type) == COMPLEX_TYPE)
2051     {
2052       tree scalar = build_one_cst (TREE_TYPE (type));
2053       return build_complex (type, scalar, scalar);
2054     }
2055   else
2056     return build_one_cst (type);
2057 }
2058
2059 /* Return a constant of arithmetic type TYPE which is the
2060    multiplicative identity of the set TYPE.  */
2061
2062 tree
2063 build_one_cst (tree type)
2064 {
2065   switch (TREE_CODE (type))
2066     {
2067     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2068     case POINTER_TYPE: case REFERENCE_TYPE:
2069     case OFFSET_TYPE:
2070       return build_int_cst (type, 1);
2071
2072     case REAL_TYPE:
2073       return build_real (type, dconst1);
2074
2075     case FIXED_POINT_TYPE:
2076       /* We can only generate 1 for accum types.  */
2077       gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2078       return build_fixed (type, FCONST1 (TYPE_MODE (type)));
2079
2080     case VECTOR_TYPE:
2081       {
2082         tree scalar = build_one_cst (TREE_TYPE (type));
2083
2084         return build_vector_from_val (type, scalar);
2085       }
2086
2087     case COMPLEX_TYPE:
2088       return build_complex (type,
2089                             build_one_cst (TREE_TYPE (type)),
2090                             build_zero_cst (TREE_TYPE (type)));
2091
2092     default:
2093       gcc_unreachable ();
2094     }
2095 }
2096
2097 /* Return an integer of type TYPE containing all 1's in as much precision as
2098    it contains, or a complex or vector whose subparts are such integers.  */
2099
2100 tree
2101 build_all_ones_cst (tree type)
2102 {
2103   if (TREE_CODE (type) == COMPLEX_TYPE)
2104     {
2105       tree scalar = build_all_ones_cst (TREE_TYPE (type));
2106       return build_complex (type, scalar, scalar);
2107     }
2108   else
2109     return build_minus_one_cst (type);
2110 }
2111
2112 /* Return a constant of arithmetic type TYPE which is the
2113    opposite of the multiplicative identity of the set TYPE.  */
2114
2115 tree
2116 build_minus_one_cst (tree type)
2117 {
2118   switch (TREE_CODE (type))
2119     {
2120     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2121     case POINTER_TYPE: case REFERENCE_TYPE:
2122     case OFFSET_TYPE:
2123       return build_int_cst (type, -1);
2124
2125     case REAL_TYPE:
2126       return build_real (type, dconstm1);
2127
2128     case FIXED_POINT_TYPE:
2129       /* We can only generate 1 for accum types.  */
2130       gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2131       return build_fixed (type, fixed_from_double_int (double_int_minus_one,
2132                                                        TYPE_MODE (type)));
2133
2134     case VECTOR_TYPE:
2135       {
2136         tree scalar = build_minus_one_cst (TREE_TYPE (type));
2137
2138         return build_vector_from_val (type, scalar);
2139       }
2140
2141     case COMPLEX_TYPE:
2142       return build_complex (type,
2143                             build_minus_one_cst (TREE_TYPE (type)),
2144                             build_zero_cst (TREE_TYPE (type)));
2145
2146     default:
2147       gcc_unreachable ();
2148     }
2149 }
2150
2151 /* Build 0 constant of type TYPE.  This is used by constructor folding
2152    and thus the constant should be represented in memory by
2153    zero(es).  */
2154
2155 tree
2156 build_zero_cst (tree type)
2157 {
2158   switch (TREE_CODE (type))
2159     {
2160     case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2161     case POINTER_TYPE: case REFERENCE_TYPE:
2162     case OFFSET_TYPE: case NULLPTR_TYPE:
2163       return build_int_cst (type, 0);
2164
2165     case REAL_TYPE:
2166       return build_real (type, dconst0);
2167
2168     case FIXED_POINT_TYPE:
2169       return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2170
2171     case VECTOR_TYPE:
2172       {
2173         tree scalar = build_zero_cst (TREE_TYPE (type));
2174
2175         return build_vector_from_val (type, scalar);
2176       }
2177
2178     case COMPLEX_TYPE:
2179       {
2180         tree zero = build_zero_cst (TREE_TYPE (type));
2181
2182         return build_complex (type, zero, zero);
2183       }
2184
2185     default:
2186       if (!AGGREGATE_TYPE_P (type))
2187         return fold_convert (type, integer_zero_node);
2188       return build_constructor (type, NULL);
2189     }
2190 }
2191
2192
2193 /* Build a BINFO with LEN language slots.  */
2194
2195 tree
2196 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
2197 {
2198   tree t;
2199   size_t length = (offsetof (struct tree_binfo, base_binfos)
2200                    + vec<tree, va_gc>::embedded_size (base_binfos));
2201
2202   record_node_allocation_statistics (TREE_BINFO, length);
2203
2204   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2205
2206   memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2207
2208   TREE_SET_CODE (t, TREE_BINFO);
2209
2210   BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2211
2212   return t;
2213 }
2214
2215 /* Create a CASE_LABEL_EXPR tree node and return it.  */
2216
2217 tree
2218 build_case_label (tree low_value, tree high_value, tree label_decl)
2219 {
2220   tree t = make_node (CASE_LABEL_EXPR);
2221
2222   TREE_TYPE (t) = void_type_node;
2223   SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2224
2225   CASE_LOW (t) = low_value;
2226   CASE_HIGH (t) = high_value;
2227   CASE_LABEL (t) = label_decl;
2228   CASE_CHAIN (t) = NULL_TREE;
2229
2230   return t;
2231 }
2232
2233 /* Build a newly constructed INTEGER_CST node.  LEN and EXT_LEN are the
2234    values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2235    The latter determines the length of the HOST_WIDE_INT vector.  */
2236
2237 tree
2238 make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
2239 {
2240   tree t;
2241   int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2242                 + sizeof (struct tree_int_cst));
2243
2244   gcc_assert (len);
2245   record_node_allocation_statistics (INTEGER_CST, length);
2246
2247   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2248
2249   TREE_SET_CODE (t, INTEGER_CST);
2250   TREE_INT_CST_NUNITS (t) = len;
2251   TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2252   /* to_offset can only be applied to trees that are offset_int-sized
2253      or smaller.  EXT_LEN is correct if it fits, otherwise the constant
2254      must be exactly the precision of offset_int and so LEN is correct.  */
2255   if (ext_len <= OFFSET_INT_ELTS)
2256     TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2257   else
2258     TREE_INT_CST_OFFSET_NUNITS (t) = len;
2259
2260   TREE_CONSTANT (t) = 1;
2261
2262   return t;
2263 }
2264
2265 /* Build a newly constructed TREE_VEC node of length LEN.  */
2266
2267 tree
2268 make_tree_vec_stat (int len MEM_STAT_DECL)
2269 {
2270   tree t;
2271   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2272
2273   record_node_allocation_statistics (TREE_VEC, length);
2274
2275   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2276
2277   TREE_SET_CODE (t, TREE_VEC);
2278   TREE_VEC_LENGTH (t) = len;
2279
2280   return t;
2281 }
2282
2283 /* Grow a TREE_VEC node to new length LEN.  */
2284
2285 tree
2286 grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
2287 {
2288   gcc_assert (TREE_CODE (v) == TREE_VEC);
2289
2290   int oldlen = TREE_VEC_LENGTH (v);
2291   gcc_assert (len > oldlen);
2292
2293   int oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2294   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2295
2296   record_node_allocation_statistics (TREE_VEC, length - oldlength);
2297
2298   v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2299
2300   TREE_VEC_LENGTH (v) = len;
2301
2302   return v;
2303 }
2304 \f
2305 /* Return 1 if EXPR is the constant zero, whether it is integral, float or
2306    fixed, and scalar, complex or vector.  */
2307
2308 int
2309 zerop (const_tree expr)
2310 {
2311   return (integer_zerop (expr)
2312           || real_zerop (expr)
2313           || fixed_zerop (expr));
2314 }
2315
2316 /* Return 1 if EXPR is the integer constant zero or a complex constant
2317    of zero.  */
2318
2319 int
2320 integer_zerop (const_tree expr)
2321 {
2322   switch (TREE_CODE (expr))
2323     {
2324     case INTEGER_CST:
2325       return wi::eq_p (expr, 0);
2326     case COMPLEX_CST:
2327       return (integer_zerop (TREE_REALPART (expr))
2328               && integer_zerop (TREE_IMAGPART (expr)));
2329     case VECTOR_CST:
2330       {
2331         unsigned i;
2332         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2333           if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
2334             return false;
2335         return true;
2336       }
2337     default:
2338       return false;
2339     }
2340 }
2341
2342 /* Return 1 if EXPR is the integer constant one or the corresponding
2343    complex constant.  */
2344
2345 int
2346 integer_onep (const_tree expr)
2347 {
2348   switch (TREE_CODE (expr))
2349     {
2350     case INTEGER_CST:
2351       return wi::eq_p (wi::to_widest (expr), 1);
2352     case COMPLEX_CST:
2353       return (integer_onep (TREE_REALPART (expr))
2354               && integer_zerop (TREE_IMAGPART (expr)));
2355     case VECTOR_CST:
2356       {
2357         unsigned i;
2358         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2359           if (!integer_onep (VECTOR_CST_ELT (expr, i)))
2360             return false;
2361         return true;
2362       }
2363     default:
2364       return false;
2365     }
2366 }
2367
2368 /* Return 1 if EXPR is the integer constant one.  For complex and vector,
2369    return 1 if every piece is the integer constant one.  */
2370
2371 int
2372 integer_each_onep (const_tree expr)
2373 {
2374   if (TREE_CODE (expr) == COMPLEX_CST)
2375     return (integer_onep (TREE_REALPART (expr))
2376             && integer_onep (TREE_IMAGPART (expr)));
2377   else
2378     return integer_onep (expr);
2379 }
2380
2381 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2382    it contains, or a complex or vector whose subparts are such integers.  */
2383
2384 int
2385 integer_all_onesp (const_tree expr)
2386 {
2387   if (TREE_CODE (expr) == COMPLEX_CST
2388       && integer_all_onesp (TREE_REALPART (expr))
2389       && integer_all_onesp (TREE_IMAGPART (expr)))
2390     return 1;
2391
2392   else if (TREE_CODE (expr) == VECTOR_CST)
2393     {
2394       unsigned i;
2395       for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2396         if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2397           return 0;
2398       return 1;
2399     }
2400
2401   else if (TREE_CODE (expr) != INTEGER_CST)
2402     return 0;
2403
2404   return wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED) == expr;
2405 }
2406
2407 /* Return 1 if EXPR is the integer constant minus one.  */
2408
2409 int
2410 integer_minus_onep (const_tree expr)
2411 {
2412   if (TREE_CODE (expr) == COMPLEX_CST)
2413     return (integer_all_onesp (TREE_REALPART (expr))
2414             && integer_zerop (TREE_IMAGPART (expr)));
2415   else
2416     return integer_all_onesp (expr);
2417 }
2418
2419 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2420    one bit on).  */
2421
2422 int
2423 integer_pow2p (const_tree expr)
2424 {
2425   if (TREE_CODE (expr) == COMPLEX_CST
2426       && integer_pow2p (TREE_REALPART (expr))
2427       && integer_zerop (TREE_IMAGPART (expr)))
2428     return 1;
2429
2430   if (TREE_CODE (expr) != INTEGER_CST)
2431     return 0;
2432
2433   return wi::popcount (expr) == 1;
2434 }
2435
2436 /* Return 1 if EXPR is an integer constant other than zero or a
2437    complex constant other than zero.  */
2438
2439 int
2440 integer_nonzerop (const_tree expr)
2441 {
2442   return ((TREE_CODE (expr) == INTEGER_CST
2443            && !wi::eq_p (expr, 0))
2444           || (TREE_CODE (expr) == COMPLEX_CST
2445               && (integer_nonzerop (TREE_REALPART (expr))
2446                   || integer_nonzerop (TREE_IMAGPART (expr)))));
2447 }
2448
2449 /* Return 1 if EXPR is the integer constant one.  For vector,
2450    return 1 if every piece is the integer constant minus one
2451    (representing the value TRUE).  */
2452
2453 int
2454 integer_truep (const_tree expr)
2455 {
2456   if (TREE_CODE (expr) == VECTOR_CST)
2457     return integer_all_onesp (expr);
2458   return integer_onep (expr);
2459 }
2460
2461 /* Return 1 if EXPR is the fixed-point constant zero.  */
2462
2463 int
2464 fixed_zerop (const_tree expr)
2465 {
2466   return (TREE_CODE (expr) == FIXED_CST
2467           && TREE_FIXED_CST (expr).data.is_zero ());
2468 }
2469
2470 /* Return the power of two represented by a tree node known to be a
2471    power of two.  */
2472
2473 int
2474 tree_log2 (const_tree expr)
2475 {
2476   if (TREE_CODE (expr) == COMPLEX_CST)
2477     return tree_log2 (TREE_REALPART (expr));
2478
2479   return wi::exact_log2 (expr);
2480 }
2481
2482 /* Similar, but return the largest integer Y such that 2 ** Y is less
2483    than or equal to EXPR.  */
2484
2485 int
2486 tree_floor_log2 (const_tree expr)
2487 {
2488   if (TREE_CODE (expr) == COMPLEX_CST)
2489     return tree_log2 (TREE_REALPART (expr));
2490
2491   return wi::floor_log2 (expr);
2492 }
2493
2494 /* Return number of known trailing zero bits in EXPR, or, if the value of
2495    EXPR is known to be zero, the precision of it's type.  */
2496
2497 unsigned int
2498 tree_ctz (const_tree expr)
2499 {
2500   if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2501       && !POINTER_TYPE_P (TREE_TYPE (expr)))
2502     return 0;
2503
2504   unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2505   switch (TREE_CODE (expr))
2506     {
2507     case INTEGER_CST:
2508       ret1 = wi::ctz (expr);
2509       return MIN (ret1, prec);
2510     case SSA_NAME:
2511       ret1 = wi::ctz (get_nonzero_bits (expr));
2512       return MIN (ret1, prec);
2513     case PLUS_EXPR:
2514     case MINUS_EXPR:
2515     case BIT_IOR_EXPR:
2516     case BIT_XOR_EXPR:
2517     case MIN_EXPR:
2518     case MAX_EXPR:
2519       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2520       if (ret1 == 0)
2521         return ret1;
2522       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2523       return MIN (ret1, ret2);
2524     case POINTER_PLUS_EXPR:
2525       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2526       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2527       /* Second operand is sizetype, which could be in theory
2528          wider than pointer's precision.  Make sure we never
2529          return more than prec.  */
2530       ret2 = MIN (ret2, prec);
2531       return MIN (ret1, ret2);
2532     case BIT_AND_EXPR:
2533       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2534       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2535       return MAX (ret1, ret2);
2536     case MULT_EXPR:
2537       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2538       ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2539       return MIN (ret1 + ret2, prec);
2540     case LSHIFT_EXPR:
2541       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2542       if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2543           && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2544         {
2545           ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2546           return MIN (ret1 + ret2, prec);
2547         }
2548       return ret1;
2549     case RSHIFT_EXPR:
2550       if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2551           && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2552         {
2553           ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2554           ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2555           if (ret1 > ret2)
2556             return ret1 - ret2;
2557         }
2558       return 0;
2559     case TRUNC_DIV_EXPR:
2560     case CEIL_DIV_EXPR:
2561     case FLOOR_DIV_EXPR:
2562     case ROUND_DIV_EXPR:
2563     case EXACT_DIV_EXPR:
2564       if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2565           && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2566         {
2567           int l = tree_log2 (TREE_OPERAND (expr, 1));
2568           if (l >= 0)
2569             {
2570               ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2571               ret2 = l;
2572               if (ret1 > ret2)
2573                 return ret1 - ret2;
2574             }
2575         }
2576       return 0;
2577     CASE_CONVERT:
2578       ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2579       if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2580         ret1 = prec;
2581       return MIN (ret1, prec);
2582     case SAVE_EXPR:
2583       return tree_ctz (TREE_OPERAND (expr, 0));
2584     case COND_EXPR:
2585       ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2586       if (ret1 == 0)
2587         return 0;
2588       ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2589       return MIN (ret1, ret2);
2590     case COMPOUND_EXPR:
2591       return tree_ctz (TREE_OPERAND (expr, 1));
2592     case ADDR_EXPR:
2593       ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2594       if (ret1 > BITS_PER_UNIT)
2595         {
2596           ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2597           return MIN (ret1, prec);
2598         }
2599       return 0;
2600     default:
2601       return 0;
2602     }
2603 }
2604
2605 /* Return 1 if EXPR is the real constant zero.  Trailing zeroes matter for
2606    decimal float constants, so don't return 1 for them.  */
2607
2608 int
2609 real_zerop (const_tree expr)
2610 {
2611   switch (TREE_CODE (expr))
2612     {
2613     case REAL_CST:
2614       return real_equal (&TREE_REAL_CST (expr), &dconst0)
2615              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2616     case COMPLEX_CST:
2617       return real_zerop (TREE_REALPART (expr))
2618              && real_zerop (TREE_IMAGPART (expr));
2619     case VECTOR_CST:
2620       {
2621         unsigned i;
2622         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2623           if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2624             return false;
2625         return true;
2626       }
2627     default:
2628       return false;
2629     }
2630 }
2631
2632 /* Return 1 if EXPR is the real constant one in real or complex form.
2633    Trailing zeroes matter for decimal float constants, so don't return
2634    1 for them.  */
2635
2636 int
2637 real_onep (const_tree expr)
2638 {
2639   switch (TREE_CODE (expr))
2640     {
2641     case REAL_CST:
2642       return real_equal (&TREE_REAL_CST (expr), &dconst1)
2643              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2644     case COMPLEX_CST:
2645       return real_onep (TREE_REALPART (expr))
2646              && real_zerop (TREE_IMAGPART (expr));
2647     case VECTOR_CST:
2648       {
2649         unsigned i;
2650         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2651           if (!real_onep (VECTOR_CST_ELT (expr, i)))
2652             return false;
2653         return true;
2654       }
2655     default:
2656       return false;
2657     }
2658 }
2659
2660 /* Return 1 if EXPR is the real constant minus one.  Trailing zeroes
2661    matter for decimal float constants, so don't return 1 for them.  */
2662
2663 int
2664 real_minus_onep (const_tree expr)
2665 {
2666   switch (TREE_CODE (expr))
2667     {
2668     case REAL_CST:
2669       return real_equal (&TREE_REAL_CST (expr), &dconstm1)
2670              && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2671     case COMPLEX_CST:
2672       return real_minus_onep (TREE_REALPART (expr))
2673              && real_zerop (TREE_IMAGPART (expr));
2674     case VECTOR_CST:
2675       {
2676         unsigned i;
2677         for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2678           if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2679             return false;
2680         return true;
2681       }
2682     default:
2683       return false;
2684     }
2685 }
2686
2687 /* Nonzero if EXP is a constant or a cast of a constant.  */
2688
2689 int
2690 really_constant_p (const_tree exp)
2691 {
2692   /* This is not quite the same as STRIP_NOPS.  It does more.  */
2693   while (CONVERT_EXPR_P (exp)
2694          || TREE_CODE (exp) == NON_LVALUE_EXPR)
2695     exp = TREE_OPERAND (exp, 0);
2696   return TREE_CONSTANT (exp);
2697 }
2698 \f
2699 /* Return first list element whose TREE_VALUE is ELEM.
2700    Return 0 if ELEM is not in LIST.  */
2701
2702 tree
2703 value_member (tree elem, tree list)
2704 {
2705   while (list)
2706     {
2707       if (elem == TREE_VALUE (list))
2708         return list;
2709       list = TREE_CHAIN (list);
2710     }
2711   return NULL_TREE;
2712 }
2713
2714 /* Return first list element whose TREE_PURPOSE is ELEM.
2715    Return 0 if ELEM is not in LIST.  */
2716
2717 tree
2718 purpose_member (const_tree elem, tree list)
2719 {
2720   while (list)
2721     {
2722       if (elem == TREE_PURPOSE (list))
2723         return list;
2724       list = TREE_CHAIN (list);
2725     }
2726   return NULL_TREE;
2727 }
2728
2729 /* Return true if ELEM is in V.  */
2730
2731 bool
2732 vec_member (const_tree elem, vec<tree, va_gc> *v)
2733 {
2734   unsigned ix;
2735   tree t;
2736   FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2737     if (elem == t)
2738       return true;
2739   return false;
2740 }
2741
2742 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2743    NULL_TREE.  */
2744
2745 tree
2746 chain_index (int idx, tree chain)
2747 {
2748   for (; chain && idx > 0; --idx)
2749     chain = TREE_CHAIN (chain);
2750   return chain;
2751 }
2752
2753 /* Return nonzero if ELEM is part of the chain CHAIN.  */
2754
2755 int
2756 chain_member (const_tree elem, const_tree chain)
2757 {
2758   while (chain)
2759     {
2760       if (elem == chain)
2761         return 1;
2762       chain = DECL_CHAIN (chain);
2763     }
2764
2765   return 0;
2766 }
2767
2768 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2769    We expect a null pointer to mark the end of the chain.
2770    This is the Lisp primitive `length'.  */
2771
2772 int
2773 list_length (const_tree t)
2774 {
2775   const_tree p = t;
2776 #ifdef ENABLE_TREE_CHECKING
2777   const_tree q = t;
2778 #endif
2779   int len = 0;
2780
2781   while (p)
2782     {
2783       p = TREE_CHAIN (p);
2784 #ifdef ENABLE_TREE_CHECKING
2785       if (len % 2)
2786         q = TREE_CHAIN (q);
2787       gcc_assert (p != q);
2788 #endif
2789       len++;
2790     }
2791
2792   return len;
2793 }
2794
2795 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2796    UNION_TYPE TYPE, or NULL_TREE if none.  */
2797
2798 tree
2799 first_field (const_tree type)
2800 {
2801   tree t = TYPE_FIELDS (type);
2802   while (t && TREE_CODE (t) != FIELD_DECL)
2803     t = TREE_CHAIN (t);
2804   return t;
2805 }
2806
2807 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2808    by modifying the last node in chain 1 to point to chain 2.
2809    This is the Lisp primitive `nconc'.  */
2810
2811 tree
2812 chainon (tree op1, tree op2)
2813 {
2814   tree t1;
2815
2816   if (!op1)
2817     return op2;
2818   if (!op2)
2819     return op1;
2820
2821   for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2822     continue;
2823   TREE_CHAIN (t1) = op2;
2824
2825 #ifdef ENABLE_TREE_CHECKING
2826   {
2827     tree t2;
2828     for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2829       gcc_assert (t2 != t1);
2830   }
2831 #endif
2832
2833   return op1;
2834 }
2835
2836 /* Return the last node in a chain of nodes (chained through TREE_CHAIN).  */
2837
2838 tree
2839 tree_last (tree chain)
2840 {
2841   tree next;
2842   if (chain)
2843     while ((next = TREE_CHAIN (chain)))
2844       chain = next;
2845   return chain;
2846 }
2847
2848 /* Reverse the order of elements in the chain T,
2849    and return the new head of the chain (old last element).  */
2850
2851 tree
2852 nreverse (tree t)
2853 {
2854   tree prev = 0, decl, next;
2855   for (decl = t; decl; decl = next)
2856     {
2857       /* We shouldn't be using this function to reverse BLOCK chains; we
2858          have blocks_nreverse for that.  */
2859       gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2860       next = TREE_CHAIN (decl);
2861       TREE_CHAIN (decl) = prev;
2862       prev = decl;
2863     }
2864   return prev;
2865 }
2866 \f
2867 /* Return a newly created TREE_LIST node whose
2868    purpose and value fields are PARM and VALUE.  */
2869
2870 tree
2871 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2872 {
2873   tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2874   TREE_PURPOSE (t) = parm;
2875   TREE_VALUE (t) = value;
2876   return t;
2877 }
2878
2879 /* Build a chain of TREE_LIST nodes from a vector.  */
2880
2881 tree
2882 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2883 {
2884   tree ret = NULL_TREE;
2885   tree *pp = &ret;
2886   unsigned int i;
2887   tree t;
2888   FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2889     {
2890       *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2891       pp = &TREE_CHAIN (*pp);
2892     }
2893   return ret;
2894 }
2895
2896 /* Return a newly created TREE_LIST node whose
2897    purpose and value fields are PURPOSE and VALUE
2898    and whose TREE_CHAIN is CHAIN.  */
2899
2900 tree 
2901 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2902 {
2903   tree node;
2904
2905   node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2906   memset (node, 0, sizeof (struct tree_common));
2907
2908   record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2909
2910   TREE_SET_CODE (node, TREE_LIST);
2911   TREE_CHAIN (node) = chain;
2912   TREE_PURPOSE (node) = purpose;
2913   TREE_VALUE (node) = value;
2914   return node;
2915 }
2916
2917 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2918    trees.  */
2919
2920 vec<tree, va_gc> *
2921 ctor_to_vec (tree ctor)
2922 {
2923   vec<tree, va_gc> *vec;
2924   vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2925   unsigned int ix;
2926   tree val;
2927
2928   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2929     vec->quick_push (val);
2930
2931   return vec;
2932 }
2933 \f
2934 /* Return the size nominally occupied by an object of type TYPE
2935    when it resides in memory.  The value is measured in units of bytes,
2936    and its data type is that normally used for type sizes
2937    (which is the first type created by make_signed_type or
2938    make_unsigned_type).  */
2939
2940 tree
2941 size_in_bytes_loc (location_t loc, const_tree type)
2942 {
2943   tree t;
2944
2945   if (type == error_mark_node)
2946     return integer_zero_node;
2947
2948   type = TYPE_MAIN_VARIANT (type);
2949   t = TYPE_SIZE_UNIT (type);
2950
2951   if (t == 0)
2952     {
2953       lang_hooks.types.incomplete_type_error (loc, NULL_TREE, type);
2954       return size_zero_node;
2955     }
2956
2957   return t;
2958 }
2959
2960 /* Return the size of TYPE (in bytes) as a wide integer
2961    or return -1 if the size can vary or is larger than an integer.  */
2962
2963 HOST_WIDE_INT
2964 int_size_in_bytes (const_tree type)
2965 {
2966   tree t;
2967
2968   if (type == error_mark_node)
2969     return 0;
2970
2971   type = TYPE_MAIN_VARIANT (type);
2972   t = TYPE_SIZE_UNIT (type);
2973
2974   if (t && tree_fits_uhwi_p (t))
2975     return TREE_INT_CST_LOW (t);
2976   else
2977     return -1;
2978 }
2979
2980 /* Return the maximum size of TYPE (in bytes) as a wide integer
2981    or return -1 if the size can vary or is larger than an integer.  */
2982
2983 HOST_WIDE_INT
2984 max_int_size_in_bytes (const_tree type)
2985 {
2986   HOST_WIDE_INT size = -1;
2987   tree size_tree;
2988
2989   /* If this is an array type, check for a possible MAX_SIZE attached.  */
2990
2991   if (TREE_CODE (type) == ARRAY_TYPE)
2992     {
2993       size_tree = TYPE_ARRAY_MAX_SIZE (type);
2994
2995       if (size_tree && tree_fits_uhwi_p (size_tree))
2996         size = tree_to_uhwi (size_tree);
2997     }
2998
2999   /* If we still haven't been able to get a size, see if the language
3000      can compute a maximum size.  */
3001
3002   if (size == -1)
3003     {
3004       size_tree = lang_hooks.types.max_size (type);
3005
3006       if (size_tree && tree_fits_uhwi_p (size_tree))
3007         size = tree_to_uhwi (size_tree);
3008     }
3009
3010   return size;
3011 }
3012 \f
3013 /* Return the bit position of FIELD, in bits from the start of the record.
3014    This is a tree of type bitsizetype.  */
3015
3016 tree
3017 bit_position (const_tree field)
3018 {
3019   return bit_from_pos (DECL_FIELD_OFFSET (field),
3020                        DECL_FIELD_BIT_OFFSET (field));
3021 }
3022 \f
3023 /* Return the byte position of FIELD, in bytes from the start of the record.
3024    This is a tree of type sizetype.  */
3025
3026 tree
3027 byte_position (const_tree field)
3028 {
3029   return byte_from_pos (DECL_FIELD_OFFSET (field),
3030                         DECL_FIELD_BIT_OFFSET (field));
3031 }
3032
3033 /* Likewise, but return as an integer.  It must be representable in
3034    that way (since it could be a signed value, we don't have the
3035    option of returning -1 like int_size_in_byte can.  */
3036
3037 HOST_WIDE_INT
3038 int_byte_position (const_tree field)
3039 {
3040   return tree_to_shwi (byte_position (field));
3041 }
3042 \f
3043 /* Return the strictest alignment, in bits, that T is known to have.  */
3044
3045 unsigned int
3046 expr_align (const_tree t)
3047 {
3048   unsigned int align0, align1;
3049
3050   switch (TREE_CODE (t))
3051     {
3052     CASE_CONVERT:  case NON_LVALUE_EXPR:
3053       /* If we have conversions, we know that the alignment of the
3054          object must meet each of the alignments of the types.  */
3055       align0 = expr_align (TREE_OPERAND (t, 0));
3056       align1 = TYPE_ALIGN (TREE_TYPE (t));
3057       return MAX (align0, align1);
3058
3059     case SAVE_EXPR:         case COMPOUND_EXPR:       case MODIFY_EXPR:
3060     case INIT_EXPR:         case TARGET_EXPR:         case WITH_CLEANUP_EXPR:
3061     case CLEANUP_POINT_EXPR:
3062       /* These don't change the alignment of an object.  */
3063       return expr_align (TREE_OPERAND (t, 0));
3064
3065     case COND_EXPR:
3066       /* The best we can do is say that the alignment is the least aligned
3067          of the two arms.  */
3068       align0 = expr_align (TREE_OPERAND (t, 1));
3069       align1 = expr_align (TREE_OPERAND (t, 2));
3070       return MIN (align0, align1);
3071
3072       /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
3073          meaningfully, it's always 1.  */
3074     case LABEL_DECL:     case CONST_DECL:
3075     case VAR_DECL:       case PARM_DECL:   case RESULT_DECL:
3076     case FUNCTION_DECL:
3077       gcc_assert (DECL_ALIGN (t) != 0);
3078       return DECL_ALIGN (t);
3079
3080     default:
3081       break;
3082     }
3083
3084   /* Otherwise take the alignment from that of the type.  */
3085   return TYPE_ALIGN (TREE_TYPE (t));
3086 }
3087 \f
3088 /* Return, as a tree node, the number of elements for TYPE (which is an
3089    ARRAY_TYPE) minus one. This counts only elements of the top array.  */
3090
3091 tree
3092 array_type_nelts (const_tree type)
3093 {
3094   tree index_type, min, max;
3095
3096   /* If they did it with unspecified bounds, then we should have already
3097      given an error about it before we got here.  */
3098   if (! TYPE_DOMAIN (type))
3099     return error_mark_node;
3100
3101   index_type = TYPE_DOMAIN (type);
3102   min = TYPE_MIN_VALUE (index_type);
3103   max = TYPE_MAX_VALUE (index_type);
3104
3105   /* TYPE_MAX_VALUE may not be set if the array has unknown length.  */
3106   if (!max)
3107     return error_mark_node;
3108
3109   return (integer_zerop (min)
3110           ? max
3111           : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3112 }
3113 \f
3114 /* If arg is static -- a reference to an object in static storage -- then
3115    return the object.  This is not the same as the C meaning of `static'.
3116    If arg isn't static, return NULL.  */
3117
3118 tree
3119 staticp (tree arg)
3120 {
3121   switch (TREE_CODE (arg))
3122     {
3123     case FUNCTION_DECL:
3124       /* Nested functions are static, even though taking their address will
3125          involve a trampoline as we unnest the nested function and create
3126          the trampoline on the tree level.  */
3127       return arg;
3128
3129     case VAR_DECL:
3130       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3131               && ! DECL_THREAD_LOCAL_P (arg)
3132               && ! DECL_DLLIMPORT_P (arg)
3133               ? arg : NULL);
3134
3135     case CONST_DECL:
3136       return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3137               ? arg : NULL);
3138
3139     case CONSTRUCTOR:
3140       return TREE_STATIC (arg) ? arg : NULL;
3141
3142     case LABEL_DECL:
3143     case STRING_CST:
3144       return arg;
3145
3146     case COMPONENT_REF:
3147       /* If the thing being referenced is not a field, then it is
3148          something language specific.  */
3149       gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3150
3151       /* If we are referencing a bitfield, we can't evaluate an
3152          ADDR_EXPR at compile time and so it isn't a constant.  */
3153       if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3154         return NULL;
3155
3156       return staticp (TREE_OPERAND (arg, 0));
3157
3158     case BIT_FIELD_REF:
3159       return NULL;
3160
3161     case INDIRECT_REF:
3162       return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3163
3164     case ARRAY_REF:
3165     case ARRAY_RANGE_REF:
3166       if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3167           && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3168         return staticp (TREE_OPERAND (arg, 0));
3169       else
3170         return NULL;
3171
3172     case COMPOUND_LITERAL_EXPR:
3173       return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3174
3175     default:
3176       return NULL;
3177     }
3178 }
3179
3180 \f
3181
3182
3183 /* Return whether OP is a DECL whose address is function-invariant.  */
3184
3185 bool
3186 decl_address_invariant_p (const_tree op)
3187 {
3188   /* The conditions below are slightly less strict than the one in
3189      staticp.  */
3190
3191   switch (TREE_CODE (op))
3192     {
3193     case PARM_DECL:
3194     case RESULT_DECL:
3195     case LABEL_DECL:
3196     case FUNCTION_DECL:
3197       return true;
3198
3199     case VAR_DECL:
3200       if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3201           || DECL_THREAD_LOCAL_P (op)
3202           || DECL_CONTEXT (op) == current_function_decl
3203           || decl_function_context (op) == current_function_decl)
3204         return true;
3205       break;
3206
3207     case CONST_DECL:
3208       if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3209           || decl_function_context (op) == current_function_decl)
3210         return true;
3211       break;
3212
3213     default:
3214       break;
3215     }
3216
3217   return false;
3218 }
3219
3220 /* Return whether OP is a DECL whose address is interprocedural-invariant.  */
3221
3222 bool
3223 decl_address_ip_invariant_p (const_tree op)
3224 {
3225   /* The conditions below are slightly less strict than the one in
3226      staticp.  */
3227
3228   switch (TREE_CODE (op))
3229     {
3230     case LABEL_DECL:
3231     case FUNCTION_DECL:
3232     case STRING_CST:
3233       return true;
3234
3235     case VAR_DECL:
3236       if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3237            && !DECL_DLLIMPORT_P (op))
3238           || DECL_THREAD_LOCAL_P (op))
3239         return true;
3240       break;
3241
3242     case CONST_DECL:
3243       if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3244         return true;
3245       break;
3246
3247     default:
3248       break;
3249     }
3250
3251   return false;
3252 }
3253
3254
3255 /* Return true if T is function-invariant (internal function, does
3256    not handle arithmetic; that's handled in skip_simple_arithmetic and
3257    tree_invariant_p).  */
3258
3259 static bool
3260 tree_invariant_p_1 (tree t)
3261 {
3262   tree op;
3263
3264   if (TREE_CONSTANT (t)
3265       || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3266     return true;
3267
3268   switch (TREE_CODE (t))
3269     {
3270     case SAVE_EXPR:
3271       return true;
3272
3273     case ADDR_EXPR:
3274       op = TREE_OPERAND (t, 0);
3275       while (handled_component_p (op))
3276         {
3277           switch (TREE_CODE (op))
3278             {
3279             case ARRAY_REF:
3280             case ARRAY_RANGE_REF:
3281               if (!tree_invariant_p (TREE_OPERAND (op, 1))
3282                   || TREE_OPERAND (op, 2) != NULL_TREE
3283                   || TREE_OPERAND (op, 3) != NULL_TREE)
3284                 return false;
3285               break;
3286
3287             case COMPONENT_REF:
3288               if (TREE_OPERAND (op, 2) != NULL_TREE)
3289                 return false;
3290               break;
3291
3292             default:;
3293             }
3294           op = TREE_OPERAND (op, 0);
3295         }
3296
3297       return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3298
3299     default:
3300       break;
3301     }
3302
3303   return false;
3304 }
3305
3306 /* Return true if T is function-invariant.  */
3307
3308 bool
3309 tree_invariant_p (tree t)
3310 {
3311   tree inner = skip_simple_arithmetic (t);
3312   return tree_invariant_p_1 (inner);
3313 }
3314
3315 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3316    Do this to any expression which may be used in more than one place,
3317    but must be evaluated only once.
3318
3319    Normally, expand_expr would reevaluate the expression each time.
3320    Calling save_expr produces something that is evaluated and recorded
3321    the first time expand_expr is called on it.  Subsequent calls to
3322    expand_expr just reuse the recorded value.
3323
3324    The call to expand_expr that generates code that actually computes
3325    the value is the first call *at compile time*.  Subsequent calls
3326    *at compile time* generate code to use the saved value.
3327    This produces correct result provided that *at run time* control
3328    always flows through the insns made by the first expand_expr
3329    before reaching the other places where the save_expr was evaluated.
3330    You, the caller of save_expr, must make sure this is so.
3331
3332    Constants, and certain read-only nodes, are returned with no
3333    SAVE_EXPR because that is safe.  Expressions containing placeholders
3334    are not touched; see tree.def for an explanation of what these
3335    are used for.  */
3336
3337 tree
3338 save_expr (tree expr)
3339 {
3340   tree t = fold (expr);
3341   tree inner;
3342
3343   /* If the tree evaluates to a constant, then we don't want to hide that
3344      fact (i.e. this allows further folding, and direct checks for constants).
3345      However, a read-only object that has side effects cannot be bypassed.
3346      Since it is no problem to reevaluate literals, we just return the
3347      literal node.  */
3348   inner = skip_simple_arithmetic (t);
3349   if (TREE_CODE (inner) == ERROR_MARK)
3350     return inner;
3351
3352   if (tree_invariant_p_1 (inner))
3353     return t;
3354
3355   /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3356      it means that the size or offset of some field of an object depends on
3357      the value within another field.
3358
3359      Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3360      and some variable since it would then need to be both evaluated once and
3361      evaluated more than once.  Front-ends must assure this case cannot
3362      happen by surrounding any such subexpressions in their own SAVE_EXPR
3363      and forcing evaluation at the proper time.  */
3364   if (contains_placeholder_p (inner))
3365     return t;
3366
3367   t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3368   SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3369
3370   /* This expression might be placed ahead of a jump to ensure that the
3371      value was computed on both sides of the jump.  So make sure it isn't
3372      eliminated as dead.  */
3373   TREE_SIDE_EFFECTS (t) = 1;
3374   return t;
3375 }
3376
3377 /* Look inside EXPR into any simple arithmetic operations.  Return the
3378    outermost non-arithmetic or non-invariant node.  */
3379
3380 tree
3381 skip_simple_arithmetic (tree expr)
3382 {
3383   /* We don't care about whether this can be used as an lvalue in this
3384      context.  */
3385   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3386     expr = TREE_OPERAND (expr, 0);
3387
3388   /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3389      a constant, it will be more efficient to not make another SAVE_EXPR since
3390      it will allow better simplification and GCSE will be able to merge the
3391      computations if they actually occur.  */
3392   while (true)
3393     {
3394       if (UNARY_CLASS_P (expr))
3395         expr = TREE_OPERAND (expr, 0);
3396       else if (BINARY_CLASS_P (expr))
3397         {
3398           if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3399             expr = TREE_OPERAND (expr, 0);
3400           else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3401             expr = TREE_OPERAND (expr, 1);
3402           else
3403             break;
3404         }
3405       else
3406         break;
3407     }
3408
3409   return expr;
3410 }
3411
3412 /* Look inside EXPR into simple arithmetic operations involving constants.
3413    Return the outermost non-arithmetic or non-constant node.  */
3414
3415 tree
3416 skip_simple_constant_arithmetic (tree expr)
3417 {
3418   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3419     expr = TREE_OPERAND (expr, 0);
3420
3421   while (true)
3422     {
3423       if (UNARY_CLASS_P (expr))
3424         expr = TREE_OPERAND (expr, 0);
3425       else if (BINARY_CLASS_P (expr))
3426         {
3427           if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3428             expr = TREE_OPERAND (expr, 0);
3429           else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3430             expr = TREE_OPERAND (expr, 1);
3431           else
3432             break;
3433         }
3434       else
3435         break;
3436     }
3437
3438   return expr;
3439 }
3440
3441 /* Return which tree structure is used by T.  */
3442
3443 enum tree_node_structure_enum
3444 tree_node_structure (const_tree t)
3445 {
3446   const enum tree_code code = TREE_CODE (t);
3447   return tree_node_structure_for_code (code);
3448 }
3449
3450 /* Set various status flags when building a CALL_EXPR object T.  */
3451
3452 static void
3453 process_call_operands (tree t)
3454 {
3455   bool side_effects = TREE_SIDE_EFFECTS (t);
3456   bool read_only = false;
3457   int i = call_expr_flags (t);
3458
3459   /* Calls have side-effects, except those to const or pure functions.  */
3460   if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3461     side_effects = true;
3462   /* Propagate TREE_READONLY of arguments for const functions.  */
3463   if (i & ECF_CONST)
3464     read_only = true;
3465
3466   if (!side_effects || read_only)
3467     for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3468       {
3469         tree op = TREE_OPERAND (t, i);
3470         if (op && TREE_SIDE_EFFECTS (op))
3471           side_effects = true;
3472         if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3473           read_only = false;
3474       }
3475
3476   TREE_SIDE_EFFECTS (t) = side_effects;
3477   TREE_READONLY (t) = read_only;
3478 }
3479 \f
3480 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3481    size or offset that depends on a field within a record.  */
3482
3483 bool
3484 contains_placeholder_p (const_tree exp)
3485 {
3486   enum tree_code code;
3487
3488   if (!exp)
3489     return 0;
3490
3491   code = TREE_CODE (exp);
3492   if (code == PLACEHOLDER_EXPR)
3493     return 1;
3494
3495   switch (TREE_CODE_CLASS (code))
3496     {
3497     case tcc_reference:
3498       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3499          position computations since they will be converted into a
3500          WITH_RECORD_EXPR involving the reference, which will assume
3501          here will be valid.  */
3502       return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3503
3504     case tcc_exceptional:
3505       if (code == TREE_LIST)
3506         return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3507                 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3508       break;
3509
3510     case tcc_unary:
3511     case tcc_binary:
3512     case tcc_comparison:
3513     case tcc_expression:
3514       switch (code)
3515         {
3516         case COMPOUND_EXPR:
3517           /* Ignoring the first operand isn't quite right, but works best.  */
3518           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3519
3520         case COND_EXPR:
3521           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3522                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3523                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3524
3525         case SAVE_EXPR:
3526           /* The save_expr function never wraps anything containing
3527              a PLACEHOLDER_EXPR. */
3528           return 0;
3529
3530         default:
3531           break;
3532         }
3533
3534       switch (TREE_CODE_LENGTH (code))
3535         {
3536         case 1:
3537           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3538         case 2:
3539           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3540                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3541         default:
3542           return 0;
3543         }
3544
3545     case tcc_vl_exp:
3546       switch (code)
3547         {
3548         case CALL_EXPR:
3549           {
3550             const_tree arg;
3551             const_call_expr_arg_iterator iter;
3552             FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3553               if (CONTAINS_PLACEHOLDER_P (arg))
3554                 return 1;
3555             return 0;
3556           }
3557         default:
3558           return 0;
3559         }
3560
3561     default:
3562       return 0;
3563     }
3564   return 0;
3565 }
3566
3567 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3568    directly.  This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3569    field positions.  */
3570
3571 static bool
3572 type_contains_placeholder_1 (const_tree type)
3573 {
3574   /* If the size contains a placeholder or the parent type (component type in
3575      the case of arrays) type involves a placeholder, this type does.  */
3576   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3577       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3578       || (!POINTER_TYPE_P (type)
3579           && TREE_TYPE (type)
3580           && type_contains_placeholder_p (TREE_TYPE (type))))
3581     return true;
3582
3583   /* Now do type-specific checks.  Note that the last part of the check above
3584      greatly limits what we have to do below.  */
3585   switch (TREE_CODE (type))
3586     {
3587     case VOID_TYPE:
3588     case POINTER_BOUNDS_TYPE:
3589     case COMPLEX_TYPE:
3590     case ENUMERAL_TYPE:
3591     case BOOLEAN_TYPE:
3592     case POINTER_TYPE:
3593     case OFFSET_TYPE:
3594     case REFERENCE_TYPE:
3595     case METHOD_TYPE:
3596     case FUNCTION_TYPE:
3597     case VECTOR_TYPE:
3598     case NULLPTR_TYPE:
3599       return false;
3600
3601     case INTEGER_TYPE:
3602     case REAL_TYPE:
3603     case FIXED_POINT_TYPE:
3604       /* Here we just check the bounds.  */
3605       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3606               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3607
3608     case ARRAY_TYPE:
3609       /* We have already checked the component type above, so just check
3610          the domain type.  Flexible array members have a null domain.  */
3611       return TYPE_DOMAIN (type) ?
3612         type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3613
3614     case RECORD_TYPE:
3615     case UNION_TYPE:
3616     case QUAL_UNION_TYPE:
3617       {
3618         tree field;
3619
3620         for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3621           if (TREE_CODE (field) == FIELD_DECL
3622               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3623                   || (TREE_CODE (type) == QUAL_UNION_TYPE
3624                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3625                   || type_contains_placeholder_p (TREE_TYPE (field))))
3626             return true;
3627
3628         return false;
3629       }
3630
3631     default:
3632       gcc_unreachable ();
3633     }
3634 }
3635
3636 /* Wrapper around above function used to cache its result.  */
3637
3638 bool
3639 type_contains_placeholder_p (tree type)
3640 {
3641   bool result;
3642
3643   /* If the contains_placeholder_bits field has been initialized,
3644      then we know the answer.  */
3645   if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3646     return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3647
3648   /* Indicate that we've seen this type node, and the answer is false.
3649      This is what we want to return if we run into recursion via fields.  */
3650   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3651
3652   /* Compute the real value.  */
3653   result = type_contains_placeholder_1 (type);
3654
3655   /* Store the real value.  */
3656   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3657
3658   return result;
3659 }
3660 \f
3661 /* Push tree EXP onto vector QUEUE if it is not already present.  */
3662
3663 static void
3664 push_without_duplicates (tree exp, vec<tree> *queue)
3665 {
3666   unsigned int i;
3667   tree iter;
3668
3669   FOR_EACH_VEC_ELT (*queue, i, iter)
3670     if (simple_cst_equal (iter, exp) == 1)
3671       break;
3672
3673   if (!iter)
3674     queue->safe_push (exp);
3675 }
3676
3677 /* Given a tree EXP, find all occurrences of references to fields
3678    in a PLACEHOLDER_EXPR and place them in vector REFS without
3679    duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
3680    we assume here that EXP contains only arithmetic expressions
3681    or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3682    argument list.  */
3683
3684 void
3685 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3686 {
3687   enum tree_code code = TREE_CODE (exp);
3688   tree inner;
3689   int i;
3690
3691   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3692   if (code == TREE_LIST)
3693     {
3694       FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3695       FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3696     }
3697   else if (code == COMPONENT_REF)
3698     {
3699       for (inner = TREE_OPERAND (exp, 0);
3700            REFERENCE_CLASS_P (inner);
3701            inner = TREE_OPERAND (inner, 0))
3702         ;
3703
3704       if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3705         push_without_duplicates (exp, refs);
3706       else
3707         FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3708    }
3709   else
3710     switch (TREE_CODE_CLASS (code))
3711       {
3712       case tcc_constant:
3713         break;
3714
3715       case tcc_declaration:
3716         /* Variables allocated to static storage can stay.  */
3717         if (!TREE_STATIC (exp))
3718           push_without_duplicates (exp, refs);
3719         break;
3720
3721       case tcc_expression:
3722         /* This is the pattern built in ada/make_aligning_type.  */
3723         if (code == ADDR_EXPR
3724             && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3725           {
3726             push_without_duplicates (exp, refs);
3727             break;
3728           }
3729
3730         /* Fall through.  */
3731
3732       case tcc_exceptional:
3733       case tcc_unary:
3734       case tcc_binary:
3735       case tcc_comparison:
3736       case tcc_reference:
3737         for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3738           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3739         break;
3740
3741       case tcc_vl_exp:
3742         for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3743           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3744         break;
3745
3746       default:
3747         gcc_unreachable ();
3748       }
3749 }
3750
3751 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3752    return a tree with all occurrences of references to F in a
3753    PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
3754    CONST_DECLs.  Note that we assume here that EXP contains only
3755    arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3756    occurring only in their argument list.  */
3757
3758 tree
3759 substitute_in_expr (tree exp, tree f, tree r)
3760 {
3761   enum tree_code code = TREE_CODE (exp);
3762   tree op0, op1, op2, op3;
3763   tree new_tree;
3764
3765   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3766   if (code == TREE_LIST)
3767     {
3768       op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3769       op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3770       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3771         return exp;
3772
3773       return tree_cons (TREE_PURPOSE (exp), op1, op0);
3774     }
3775   else if (code == COMPONENT_REF)
3776     {
3777       tree inner;
3778
3779       /* If this expression is getting a value from a PLACEHOLDER_EXPR
3780          and it is the right field, replace it with R.  */
3781       for (inner = TREE_OPERAND (exp, 0);
3782            REFERENCE_CLASS_P (inner);
3783            inner = TREE_OPERAND (inner, 0))
3784         ;
3785
3786       /* The field.  */
3787       op1 = TREE_OPERAND (exp, 1);
3788
3789       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3790         return r;
3791
3792       /* If this expression hasn't been completed let, leave it alone.  */
3793       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3794         return exp;
3795
3796       op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3797       if (op0 == TREE_OPERAND (exp, 0))
3798         return exp;
3799
3800       new_tree
3801         = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3802    }
3803   else
3804     switch (TREE_CODE_CLASS (code))
3805       {
3806       case tcc_constant:
3807         return exp;
3808
3809       case tcc_declaration:
3810         if (exp == f)
3811           return r;
3812         else
3813           return exp;
3814
3815       case tcc_expression:
3816         if (exp == f)
3817           return r;
3818
3819         /* Fall through.  */
3820
3821       case tcc_exceptional:
3822       case tcc_unary:
3823       case tcc_binary:
3824       case tcc_comparison:
3825       case tcc_reference:
3826         switch (TREE_CODE_LENGTH (code))
3827           {
3828           case 0:
3829             return exp;
3830
3831           case 1:
3832             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3833             if (op0 == TREE_OPERAND (exp, 0))
3834               return exp;
3835
3836             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3837             break;
3838
3839           case 2:
3840             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3841             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3842
3843             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3844               return exp;
3845
3846             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3847             break;
3848
3849           case 3:
3850             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3851             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3852             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3853
3854             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3855                 && op2 == TREE_OPERAND (exp, 2))
3856               return exp;
3857
3858             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3859             break;
3860
3861           case 4:
3862             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3863             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3864             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3865             op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3866
3867             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3868                 && op2 == TREE_OPERAND (exp, 2)
3869                 && op3 == TREE_OPERAND (exp, 3))
3870               return exp;
3871
3872             new_tree
3873               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3874             break;
3875
3876           default:
3877             gcc_unreachable ();
3878           }
3879         break;
3880
3881       case tcc_vl_exp:
3882         {
3883           int i;
3884
3885           new_tree = NULL_TREE;
3886
3887           /* If we are trying to replace F with a constant or with another
3888              instance of one of the arguments of the call, 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 (code == CALL_EXPR)
3893             {
3894               bool maybe_inline = false;
3895               if (CONSTANT_CLASS_P (r))
3896                 maybe_inline = true;
3897               else
3898                 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
3899                   if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
3900                     {
3901                       maybe_inline = true;
3902                       break;
3903                     }
3904               if (maybe_inline)
3905                 {
3906                   tree t = maybe_inline_call_in_expr (exp);
3907                   if (t)
3908                     return SUBSTITUTE_IN_EXPR (t, f, r);
3909                 }
3910             }
3911
3912           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3913             {
3914               tree op = TREE_OPERAND (exp, i);
3915               tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3916               if (new_op != op)
3917                 {
3918                   if (!new_tree)
3919                     new_tree = copy_node (exp);
3920                   TREE_OPERAND (new_tree, i) = new_op;
3921                 }
3922             }
3923
3924           if (new_tree)
3925             {
3926               new_tree = fold (new_tree);
3927               if (TREE_CODE (new_tree) == CALL_EXPR)
3928                 process_call_operands (new_tree);
3929             }
3930           else
3931             return exp;
3932         }
3933         break;
3934
3935       default:
3936         gcc_unreachable ();
3937       }
3938
3939   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3940
3941   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3942     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3943
3944   return new_tree;
3945 }
3946
3947 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3948    for it within OBJ, a tree that is an object or a chain of references.  */
3949
3950 tree
3951 substitute_placeholder_in_expr (tree exp, tree obj)
3952 {
3953   enum tree_code code = TREE_CODE (exp);
3954   tree op0, op1, op2, op3;
3955   tree new_tree;
3956
3957   /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3958      in the chain of OBJ.  */
3959   if (code == PLACEHOLDER_EXPR)
3960     {
3961       tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3962       tree 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 (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3975           return elt;
3976
3977       for (elt = obj; elt != 0;
3978            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3979                    || TREE_CODE (elt) == COND_EXPR)
3980                   ? TREE_OPERAND (elt, 1)
3981                   : (REFERENCE_CLASS_P (elt)
3982                      || UNARY_CLASS_P (elt)
3983                      || BINARY_CLASS_P (elt)
3984                      || VL_EXP_CLASS_P (elt)
3985                      || EXPRESSION_CLASS_P (elt))
3986                   ? TREE_OPERAND (elt, 0) : 0))
3987         if (POINTER_TYPE_P (TREE_TYPE (elt))
3988             && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3989                 == need_type))
3990           return fold_build1 (INDIRECT_REF, need_type, elt);
3991
3992       /* If we didn't find it, return the original PLACEHOLDER_EXPR.  If it
3993          survives until RTL generation, there will be an error.  */
3994       return exp;
3995     }
3996
3997   /* TREE_LIST is special because we need to look at TREE_VALUE
3998      and TREE_CHAIN, not TREE_OPERANDS.  */
3999   else if (code == TREE_LIST)
4000     {
4001       op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
4002       op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
4003       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4004         return exp;
4005
4006       return tree_cons (TREE_PURPOSE (exp), op1, op0);
4007     }
4008   else
4009     switch (TREE_CODE_CLASS (code))
4010       {
4011       case tcc_constant:
4012       case tcc_declaration:
4013         return exp;
4014
4015       case tcc_exceptional:
4016       case tcc_unary:
4017       case tcc_binary:
4018       case tcc_comparison:
4019       case tcc_expression:
4020       case tcc_reference:
4021       case tcc_statement:
4022         switch (TREE_CODE_LENGTH (code))
4023           {
4024           case 0:
4025             return exp;
4026
4027           case 1:
4028             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4029             if (op0 == TREE_OPERAND (exp, 0))
4030               return exp;
4031
4032             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4033             break;
4034
4035           case 2:
4036             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4037             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4038
4039             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4040               return exp;
4041
4042             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4043             break;
4044
4045           case 3:
4046             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4047             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4048             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4049
4050             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4051                 && op2 == TREE_OPERAND (exp, 2))
4052               return exp;
4053
4054             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4055             break;
4056
4057           case 4:
4058             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4059             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4060             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4061             op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4062
4063             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4064                 && op2 == TREE_OPERAND (exp, 2)
4065                 && op3 == TREE_OPERAND (exp, 3))
4066               return exp;
4067
4068             new_tree
4069               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4070             break;
4071
4072           default:
4073             gcc_unreachable ();
4074           }
4075         break;
4076
4077       case tcc_vl_exp:
4078         {
4079           int i;
4080
4081           new_tree = NULL_TREE;
4082
4083           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4084             {
4085               tree op = TREE_OPERAND (exp, i);
4086               tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4087               if (new_op != op)
4088                 {
4089                   if (!new_tree)
4090                     new_tree = copy_node (exp);
4091                   TREE_OPERAND (new_tree, i) = new_op;
4092                 }
4093             }
4094
4095           if (new_tree)
4096             {
4097               new_tree = fold (new_tree);
4098               if (TREE_CODE (new_tree) == CALL_EXPR)
4099                 process_call_operands (new_tree);
4100             }
4101           else
4102             return exp;
4103         }
4104         break;
4105
4106       default:
4107         gcc_unreachable ();
4108       }
4109
4110   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4111
4112   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4113     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4114
4115   return new_tree;
4116 }
4117 \f
4118
4119 /* Subroutine of stabilize_reference; this is called for subtrees of
4120    references.  Any expression with side-effects must be put in a SAVE_EXPR
4121    to ensure that it is only evaluated once.
4122
4123    We don't put SAVE_EXPR nodes around everything, because assigning very
4124    simple expressions to temporaries causes us to miss good opportunities
4125    for optimizations.  Among other things, the opportunity to fold in the
4126    addition of a constant into an addressing mode often gets lost, e.g.
4127    "y[i+1] += x;".  In general, we take the approach that we should not make
4128    an assignment unless we are forced into it - i.e., that any non-side effect
4129    operator should be allowed, and that cse should take care of coalescing
4130    multiple utterances of the same expression should that prove fruitful.  */
4131
4132 static tree
4133 stabilize_reference_1 (tree e)
4134 {
4135   tree result;
4136   enum tree_code code = TREE_CODE (e);
4137
4138   /* We cannot ignore const expressions because it might be a reference
4139      to a const array but whose index contains side-effects.  But we can
4140      ignore things that are actual constant or that already have been
4141      handled by this function.  */
4142
4143   if (tree_invariant_p (e))
4144     return e;
4145
4146   switch (TREE_CODE_CLASS (code))
4147     {
4148     case tcc_exceptional:
4149     case tcc_type:
4150     case tcc_declaration:
4151     case tcc_comparison:
4152     case tcc_statement:
4153     case tcc_expression:
4154     case tcc_reference:
4155     case tcc_vl_exp:
4156       /* If the expression has side-effects, then encase it in a SAVE_EXPR
4157          so that it will only be evaluated once.  */
4158       /* The reference (r) and comparison (<) classes could be handled as
4159          below, but it is generally faster to only evaluate them once.  */
4160       if (TREE_SIDE_EFFECTS (e))
4161         return save_expr (e);
4162       return e;
4163
4164     case tcc_constant:
4165       /* Constants need no processing.  In fact, we should never reach
4166          here.  */
4167       return e;
4168
4169     case tcc_binary:
4170       /* Division is slow and tends to be compiled with jumps,
4171          especially the division by powers of 2 that is often
4172          found inside of an array reference.  So do it just once.  */
4173       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4174           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4175           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4176           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4177         return save_expr (e);
4178       /* Recursively stabilize each operand.  */
4179       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4180                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
4181       break;
4182
4183     case tcc_unary:
4184       /* Recursively stabilize each operand.  */
4185       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4186       break;
4187
4188     default:
4189       gcc_unreachable ();
4190     }
4191
4192   TREE_TYPE (result) = TREE_TYPE (e);
4193   TREE_READONLY (result) = TREE_READONLY (e);
4194   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4195   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4196
4197   return result;
4198 }
4199
4200 /* Stabilize a reference so that we can use it any number of times
4201    without causing its operands to be evaluated more than once.
4202    Returns the stabilized reference.  This works by means of save_expr,
4203    so see the caveats in the comments about save_expr.
4204
4205    Also allows conversion expressions whose operands are references.
4206    Any other kind of expression is returned unchanged.  */
4207
4208 tree
4209 stabilize_reference (tree ref)
4210 {
4211   tree result;
4212   enum tree_code code = TREE_CODE (ref);
4213
4214   switch (code)
4215     {
4216     case VAR_DECL:
4217     case PARM_DECL:
4218     case RESULT_DECL:
4219       /* No action is needed in this case.  */
4220       return ref;
4221
4222     CASE_CONVERT:
4223     case FLOAT_EXPR:
4224     case FIX_TRUNC_EXPR:
4225       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4226       break;
4227
4228     case INDIRECT_REF:
4229       result = build_nt (INDIRECT_REF,
4230                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4231       break;
4232
4233     case COMPONENT_REF:
4234       result = build_nt (COMPONENT_REF,
4235                          stabilize_reference (TREE_OPERAND (ref, 0)),
4236                          TREE_OPERAND (ref, 1), NULL_TREE);
4237       break;
4238
4239     case BIT_FIELD_REF:
4240       result = build_nt (BIT_FIELD_REF,
4241                          stabilize_reference (TREE_OPERAND (ref, 0)),
4242                          TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4243       REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4244       break;
4245
4246     case ARRAY_REF:
4247       result = build_nt (ARRAY_REF,
4248                          stabilize_reference (TREE_OPERAND (ref, 0)),
4249                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4250                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4251       break;
4252
4253     case ARRAY_RANGE_REF:
4254       result = build_nt (ARRAY_RANGE_REF,
4255                          stabilize_reference (TREE_OPERAND (ref, 0)),
4256                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4257                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4258       break;
4259
4260     case COMPOUND_EXPR:
4261       /* We cannot wrap the first expression in a SAVE_EXPR, as then
4262          it wouldn't be ignored.  This matters when dealing with
4263          volatiles.  */
4264       return stabilize_reference_1 (ref);
4265
4266       /* If arg isn't a kind of lvalue we recognize, make no change.
4267          Caller should recognize the error for an invalid lvalue.  */
4268     default:
4269       return ref;
4270
4271     case ERROR_MARK:
4272       return error_mark_node;
4273     }
4274
4275   TREE_TYPE (result) = TREE_TYPE (ref);
4276   TREE_READONLY (result) = TREE_READONLY (ref);
4277   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4278   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4279
4280   return result;
4281 }
4282 \f
4283 /* Low-level constructors for expressions.  */
4284
4285 /* A helper function for build1 and constant folders.  Set TREE_CONSTANT,
4286    and TREE_SIDE_EFFECTS for an ADDR_EXPR.  */
4287
4288 void
4289 recompute_tree_invariant_for_addr_expr (tree t)
4290 {
4291   tree node;
4292   bool tc = true, se = false;
4293
4294   gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4295
4296   /* We started out assuming this address is both invariant and constant, but
4297      does not have side effects.  Now go down any handled components and see if
4298      any of them involve offsets that are either non-constant or non-invariant.
4299      Also check for side-effects.
4300
4301      ??? Note that this code makes no attempt to deal with the case where
4302      taking the address of something causes a copy due to misalignment.  */
4303
4304 #define UPDATE_FLAGS(NODE)  \
4305 do { tree _node = (NODE); \
4306      if (_node && !TREE_CONSTANT (_node)) tc = false; \
4307      if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4308
4309   for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4310        node = TREE_OPERAND (node, 0))
4311     {
4312       /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4313          array reference (probably made temporarily by the G++ front end),
4314          so ignore all the operands.  */
4315       if ((TREE_CODE (node) == ARRAY_REF
4316            || TREE_CODE (node) == ARRAY_RANGE_REF)
4317           && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4318         {
4319           UPDATE_FLAGS (TREE_OPERAND (node, 1));
4320           if (TREE_OPERAND (node, 2))
4321             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4322           if (TREE_OPERAND (node, 3))
4323             UPDATE_FLAGS (TREE_OPERAND (node, 3));
4324         }
4325       /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4326          FIELD_DECL, apparently.  The G++ front end can put something else
4327          there, at least temporarily.  */
4328       else if (TREE_CODE (node) == COMPONENT_REF
4329                && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4330         {
4331           if (TREE_OPERAND (node, 2))
4332             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4333         }
4334     }
4335
4336   node = lang_hooks.expr_to_decl (node, &tc, &se);
4337
4338   /* Now see what's inside.  If it's an INDIRECT_REF, copy our properties from
4339      the address, since &(*a)->b is a form of addition.  If it's a constant, the
4340      address is constant too.  If it's a decl, its address is constant if the
4341      decl is static.  Everything else is not constant and, furthermore,
4342      taking the address of a volatile variable is not volatile.  */
4343   if (TREE_CODE (node) == INDIRECT_REF
4344       || TREE_CODE (node) == MEM_REF)
4345     UPDATE_FLAGS (TREE_OPERAND (node, 0));
4346   else if (CONSTANT_CLASS_P (node))
4347     ;
4348   else if (DECL_P (node))
4349     tc &= (staticp (node) != NULL_TREE);
4350   else
4351     {
4352       tc = false;
4353       se |= TREE_SIDE_EFFECTS (node);
4354     }
4355
4356
4357   TREE_CONSTANT (t) = tc;
4358   TREE_SIDE_EFFECTS (t) = se;
4359 #undef UPDATE_FLAGS
4360 }
4361
4362 /* Build an expression of code CODE, data type TYPE, and operands as
4363    specified.  Expressions and reference nodes can be created this way.
4364    Constants, decls, types and misc nodes cannot be.
4365
4366    We define 5 non-variadic functions, from 0 to 4 arguments.  This is
4367    enough for all extant tree codes.  */
4368
4369 tree
4370 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4371 {
4372   tree t;
4373
4374   gcc_assert (TREE_CODE_LENGTH (code) == 0);
4375
4376   t = make_node_stat (code PASS_MEM_STAT);
4377   TREE_TYPE (t) = tt;
4378
4379   return t;
4380 }
4381
4382 tree
4383 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4384 {
4385   int length = sizeof (struct tree_exp);
4386   tree t;
4387
4388   record_node_allocation_statistics (code, length);
4389
4390   gcc_assert (TREE_CODE_LENGTH (code) == 1);
4391
4392   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4393
4394   memset (t, 0, sizeof (struct tree_common));
4395
4396   TREE_SET_CODE (t, code);
4397
4398   TREE_TYPE (t) = type;
4399   SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4400   TREE_OPERAND (t, 0) = node;
4401   if (node && !TYPE_P (node))
4402     {
4403       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4404       TREE_READONLY (t) = TREE_READONLY (node);
4405     }
4406
4407   if (TREE_CODE_CLASS (code) == tcc_statement)
4408     TREE_SIDE_EFFECTS (t) = 1;
4409   else switch (code)
4410     {
4411     case VA_ARG_EXPR:
4412       /* All of these have side-effects, no matter what their
4413          operands are.  */
4414       TREE_SIDE_EFFECTS (t) = 1;
4415       TREE_READONLY (t) = 0;
4416       break;
4417
4418     case INDIRECT_REF:
4419       /* Whether a dereference is readonly has nothing to do with whether
4420          its operand is readonly.  */
4421       TREE_READONLY (t) = 0;
4422       break;
4423
4424     case ADDR_EXPR:
4425       if (node)
4426         recompute_tree_invariant_for_addr_expr (t);
4427       break;
4428
4429     default:
4430       if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4431           && node && !TYPE_P (node)
4432           && TREE_CONSTANT (node))
4433         TREE_CONSTANT (t) = 1;
4434       if (TREE_CODE_CLASS (code) == tcc_reference
4435           && node && TREE_THIS_VOLATILE (node))
4436         TREE_THIS_VOLATILE (t) = 1;
4437       break;
4438     }
4439
4440   return t;
4441 }
4442
4443 #define PROCESS_ARG(N)                          \
4444   do {                                          \
4445     TREE_OPERAND (t, N) = arg##N;               \
4446     if (arg##N &&!TYPE_P (arg##N))              \
4447       {                                         \
4448         if (TREE_SIDE_EFFECTS (arg##N))         \
4449           side_effects = 1;                     \
4450         if (!TREE_READONLY (arg##N)             \
4451             && !CONSTANT_CLASS_P (arg##N))      \
4452           (void) (read_only = 0);               \
4453         if (!TREE_CONSTANT (arg##N))            \
4454           (void) (constant = 0);                \
4455       }                                         \
4456   } while (0)
4457
4458 tree
4459 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4460 {
4461   bool constant, read_only, side_effects;
4462   tree t;
4463
4464   gcc_assert (TREE_CODE_LENGTH (code) == 2);
4465
4466   if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4467       && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4468       /* When sizetype precision doesn't match that of pointers
4469          we need to be able to build explicit extensions or truncations
4470          of the offset argument.  */
4471       && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4472     gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4473                 && TREE_CODE (arg1) == INTEGER_CST);
4474
4475   if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4476     gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4477                 && ptrofftype_p (TREE_TYPE (arg1)));
4478
4479   t = make_node_stat (code PASS_MEM_STAT);
4480   TREE_TYPE (t) = tt;
4481
4482   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4483      result based on those same flags for the arguments.  But if the
4484      arguments aren't really even `tree' expressions, we shouldn't be trying
4485      to do this.  */
4486
4487   /* Expressions without side effects may be constant if their
4488      arguments are as well.  */
4489   constant = (TREE_CODE_CLASS (code) == tcc_comparison
4490               || TREE_CODE_CLASS (code) == tcc_binary);
4491   read_only = 1;
4492   side_effects = TREE_SIDE_EFFECTS (t);
4493
4494   PROCESS_ARG (0);
4495   PROCESS_ARG (1);
4496
4497   TREE_SIDE_EFFECTS (t) = side_effects;
4498   if (code == MEM_REF)
4499     {
4500       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4501         {
4502           tree o = TREE_OPERAND (arg0, 0);
4503           TREE_READONLY (t) = TREE_READONLY (o);
4504           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4505         }
4506     }
4507   else
4508     {
4509       TREE_READONLY (t) = read_only;
4510       TREE_CONSTANT (t) = constant;
4511       TREE_THIS_VOLATILE (t)
4512         = (TREE_CODE_CLASS (code) == tcc_reference
4513            && arg0 && TREE_THIS_VOLATILE (arg0));
4514     }
4515
4516   return t;
4517 }
4518
4519
4520 tree
4521 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4522              tree arg2 MEM_STAT_DECL)
4523 {
4524   bool constant, read_only, side_effects;
4525   tree t;
4526
4527   gcc_assert (TREE_CODE_LENGTH (code) == 3);
4528   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4529
4530   t = make_node_stat (code PASS_MEM_STAT);
4531   TREE_TYPE (t) = tt;
4532
4533   read_only = 1;
4534
4535   /* As a special exception, if COND_EXPR has NULL branches, we
4536      assume that it is a gimple statement and always consider
4537      it to have side effects.  */
4538   if (code == COND_EXPR
4539       && tt == void_type_node
4540       && arg1 == NULL_TREE
4541       && arg2 == NULL_TREE)
4542     side_effects = true;
4543   else
4544     side_effects = TREE_SIDE_EFFECTS (t);
4545
4546   PROCESS_ARG (0);
4547   PROCESS_ARG (1);
4548   PROCESS_ARG (2);
4549
4550   if (code == COND_EXPR)
4551     TREE_READONLY (t) = read_only;
4552
4553   TREE_SIDE_EFFECTS (t) = side_effects;
4554   TREE_THIS_VOLATILE (t)
4555     = (TREE_CODE_CLASS (code) == tcc_reference
4556        && arg0 && TREE_THIS_VOLATILE (arg0));
4557
4558   return t;
4559 }
4560
4561 tree
4562 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4563              tree arg2, tree arg3 MEM_STAT_DECL)
4564 {
4565   bool constant, read_only, side_effects;
4566   tree t;
4567
4568   gcc_assert (TREE_CODE_LENGTH (code) == 4);
4569
4570   t = make_node_stat (code PASS_MEM_STAT);
4571   TREE_TYPE (t) = tt;
4572
4573   side_effects = TREE_SIDE_EFFECTS (t);
4574
4575   PROCESS_ARG (0);
4576   PROCESS_ARG (1);
4577   PROCESS_ARG (2);
4578   PROCESS_ARG (3);
4579
4580   TREE_SIDE_EFFECTS (t) = side_effects;
4581   TREE_THIS_VOLATILE (t)
4582     = (TREE_CODE_CLASS (code) == tcc_reference
4583        && arg0 && TREE_THIS_VOLATILE (arg0));
4584
4585   return t;
4586 }
4587
4588 tree
4589 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4590              tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4591 {
4592   bool constant, read_only, side_effects;
4593   tree t;
4594
4595   gcc_assert (TREE_CODE_LENGTH (code) == 5);
4596
4597   t = make_node_stat (code PASS_MEM_STAT);
4598   TREE_TYPE (t) = tt;
4599
4600   side_effects = TREE_SIDE_EFFECTS (t);
4601
4602   PROCESS_ARG (0);
4603   PROCESS_ARG (1);
4604   PROCESS_ARG (2);
4605   PROCESS_ARG (3);
4606   PROCESS_ARG (4);
4607
4608   TREE_SIDE_EFFECTS (t) = side_effects;
4609   if (code == TARGET_MEM_REF)
4610     {
4611       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4612         {
4613           tree o = TREE_OPERAND (arg0, 0);
4614           TREE_READONLY (t) = TREE_READONLY (o);
4615           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4616         }
4617     }
4618   else
4619     TREE_THIS_VOLATILE (t)
4620       = (TREE_CODE_CLASS (code) == tcc_reference
4621          && arg0 && TREE_THIS_VOLATILE (arg0));
4622
4623   return t;
4624 }
4625
4626 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4627    on the pointer PTR.  */
4628
4629 tree
4630 build_simple_mem_ref_loc (location_t loc, tree ptr)
4631 {
4632   HOST_WIDE_INT offset = 0;
4633   tree ptype = TREE_TYPE (ptr);
4634   tree tem;
4635   /* For convenience allow addresses that collapse to a simple base
4636      and offset.  */
4637   if (TREE_CODE (ptr) == ADDR_EXPR
4638       && (handled_component_p (TREE_OPERAND (ptr, 0))
4639           || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4640     {
4641       ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4642       gcc_assert (ptr);
4643       ptr = build_fold_addr_expr (ptr);
4644       gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4645     }
4646   tem = build2 (MEM_REF, TREE_TYPE (ptype),
4647                 ptr, build_int_cst (ptype, offset));
4648   SET_EXPR_LOCATION (tem, loc);
4649   return tem;
4650 }
4651
4652 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T.  */
4653
4654 offset_int
4655 mem_ref_offset (const_tree t)
4656 {
4657   return offset_int::from (TREE_OPERAND (t, 1), SIGNED);
4658 }
4659
4660 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4661    offsetted by OFFSET units.  */
4662
4663 tree
4664 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4665 {
4666   tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4667                           build_fold_addr_expr (base),
4668                           build_int_cst (ptr_type_node, offset));
4669   tree addr = build1 (ADDR_EXPR, type, ref);
4670   recompute_tree_invariant_for_addr_expr (addr);
4671   return addr;
4672 }
4673
4674 /* Similar except don't specify the TREE_TYPE
4675    and leave the TREE_SIDE_EFFECTS as 0.
4676    It is permissible for arguments to be null,
4677    or even garbage if their values do not matter.  */
4678
4679 tree
4680 build_nt (enum tree_code code, ...)
4681 {
4682   tree t;
4683   int length;
4684   int i;
4685   va_list p;
4686
4687   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4688
4689   va_start (p, code);
4690
4691   t = make_node (code);
4692   length = TREE_CODE_LENGTH (code);
4693
4694   for (i = 0; i < length; i++)
4695     TREE_OPERAND (t, i) = va_arg (p, tree);
4696
4697   va_end (p);
4698   return t;
4699 }
4700
4701 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4702    tree vec.  */
4703
4704 tree
4705 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4706 {
4707   tree ret, t;
4708   unsigned int ix;
4709
4710   ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4711   CALL_EXPR_FN (ret) = fn;
4712   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4713   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4714     CALL_EXPR_ARG (ret, ix) = t;
4715   return ret;
4716 }
4717 \f
4718 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4719    We do NOT enter this node in any sort of symbol table.
4720
4721    LOC is the location of the decl.
4722
4723    layout_decl is used to set up the decl's storage layout.
4724    Other slots are initialized to 0 or null pointers.  */
4725
4726 tree
4727 build_decl_stat (location_t loc, enum tree_code code, tree name,
4728                  tree type MEM_STAT_DECL)
4729 {
4730   tree t;
4731
4732   t = make_node_stat (code PASS_MEM_STAT);
4733   DECL_SOURCE_LOCATION (t) = loc;
4734
4735 /*  if (type == error_mark_node)
4736     type = integer_type_node; */
4737 /* That is not done, deliberately, so that having error_mark_node
4738    as the type can suppress useless errors in the use of this variable.  */
4739
4740   DECL_NAME (t) = name;
4741   TREE_TYPE (t) = type;
4742
4743   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4744     layout_decl (t, 0);
4745
4746   return t;
4747 }
4748
4749 /* Builds and returns function declaration with NAME and TYPE.  */
4750
4751 tree
4752 build_fn_decl (const char *name, tree type)
4753 {
4754   tree id = get_identifier (name);
4755   tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4756
4757   DECL_EXTERNAL (decl) = 1;
4758   TREE_PUBLIC (decl) = 1;
4759   DECL_ARTIFICIAL (decl) = 1;
4760   TREE_NOTHROW (decl) = 1;
4761
4762   return decl;
4763 }
4764
4765 vec<tree, va_gc> *all_translation_units;
4766
4767 /* Builds a new translation-unit decl with name NAME, queues it in the
4768    global list of translation-unit decls and returns it.   */
4769
4770 tree
4771 build_translation_unit_decl (tree name)
4772 {
4773   tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4774                         name, NULL_TREE);
4775   TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4776   vec_safe_push (all_translation_units, tu);
4777   return tu;
4778 }
4779
4780 \f
4781 /* BLOCK nodes are used to represent the structure of binding contours
4782    and declarations, once those contours have been exited and their contents
4783    compiled.  This information is used for outputting debugging info.  */
4784
4785 tree
4786 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4787 {
4788   tree block = make_node (BLOCK);
4789
4790   BLOCK_VARS (block) = vars;
4791   BLOCK_SUBBLOCKS (block) = subblocks;
4792   BLOCK_SUPERCONTEXT (block) = supercontext;
4793   BLOCK_CHAIN (block) = chain;
4794   return block;
4795 }
4796
4797 \f
4798 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4799
4800    LOC is the location to use in tree T.  */
4801
4802 void
4803 protected_set_expr_location (tree t, location_t loc)
4804 {
4805   if (CAN_HAVE_LOCATION_P (t))
4806     SET_EXPR_LOCATION (t, loc);
4807 }
4808 \f
4809 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4810    is ATTRIBUTE.  */
4811
4812 tree
4813 build_decl_attribute_variant (tree ddecl, tree attribute)
4814 {
4815   DECL_ATTRIBUTES (ddecl) = attribute;
4816   return ddecl;
4817 }
4818
4819 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4820    is ATTRIBUTE and its qualifiers are QUALS.
4821
4822    Record such modified types already made so we don't make duplicates.  */
4823
4824 tree
4825 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4826 {
4827   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4828     {
4829       tree ntype;
4830
4831       /* Building a distinct copy of a tagged type is inappropriate; it
4832          causes breakage in code that expects there to be a one-to-one
4833          relationship between a struct and its fields.
4834          build_duplicate_type is another solution (as used in
4835          handle_transparent_union_attribute), but that doesn't play well
4836          with the stronger C++ type identity model.  */
4837       if (TREE_CODE (ttype) == RECORD_TYPE
4838           || TREE_CODE (ttype) == UNION_TYPE
4839           || TREE_CODE (ttype) == QUAL_UNION_TYPE
4840           || TREE_CODE (ttype) == ENUMERAL_TYPE)
4841         {
4842           warning (OPT_Wattributes,
4843                    "ignoring attributes applied to %qT after definition",
4844                    TYPE_MAIN_VARIANT (ttype));
4845           return build_qualified_type (ttype, quals);
4846         }
4847
4848       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4849       ntype = build_distinct_type_copy (ttype);
4850
4851       TYPE_ATTRIBUTES (ntype) = attribute;
4852
4853       hashval_t hash = type_hash_canon_hash (ntype);
4854       ntype = type_hash_canon (hash, ntype);
4855
4856       /* If the target-dependent attributes make NTYPE different from
4857          its canonical type, we will need to use structural equality
4858          checks for this type. */
4859       if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4860           || !comp_type_attributes (ntype, ttype))
4861         SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4862       else if (TYPE_CANONICAL (ntype) == ntype)
4863         TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4864
4865       ttype = build_qualified_type (ntype, quals);
4866     }
4867   else if (TYPE_QUALS (ttype) != quals)
4868     ttype = build_qualified_type (ttype, quals);
4869
4870   return ttype;
4871 }
4872
4873 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4874    the same.  */
4875
4876 static bool
4877 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4878 {
4879   tree cl1, cl2;
4880   for (cl1 = clauses1, cl2 = clauses2;
4881        cl1 && cl2;
4882        cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4883     {
4884       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4885         return false;
4886       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4887         {
4888           if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4889                                 OMP_CLAUSE_DECL (cl2)) != 1)
4890             return false;
4891         }
4892       switch (OMP_CLAUSE_CODE (cl1))
4893         {
4894         case OMP_CLAUSE_ALIGNED:
4895           if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4896                                 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4897             return false;
4898           break;
4899         case OMP_CLAUSE_LINEAR:
4900           if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4901                                 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4902             return false;
4903           break;
4904         case OMP_CLAUSE_SIMDLEN:
4905           if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4906                                 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4907             return false;
4908         default:
4909           break;
4910         }
4911     }
4912   return true;
4913 }
4914
4915 /* Compare two constructor-element-type constants.  Return 1 if the lists
4916    are known to be equal; otherwise return 0.  */
4917
4918 static bool
4919 simple_cst_list_equal (const_tree l1, const_tree l2)
4920 {
4921   while (l1 != NULL_TREE && l2 != NULL_TREE)
4922     {
4923       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4924         return false;
4925
4926       l1 = TREE_CHAIN (l1);
4927       l2 = TREE_CHAIN (l2);
4928     }
4929
4930   return l1 == l2;
4931 }
4932
4933 /* Compare two identifier nodes representing attributes.  Either one may
4934    be in wrapped __ATTR__ form.  Return true if they are the same, false
4935    otherwise.  */
4936
4937 static bool
4938 cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
4939 {
4940   /* Make sure we're dealing with IDENTIFIER_NODEs.  */
4941   gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
4942                        && TREE_CODE (attr2) == IDENTIFIER_NODE);
4943
4944   /* Identifiers can be compared directly for equality.  */
4945   if (attr1 == attr2)
4946     return true;
4947
4948   /* If they are not equal, they may still be one in the form
4949      'text' while the other one is in the form '__text__'.  TODO:
4950      If we were storing attributes in normalized 'text' form, then
4951      this could all go away and we could take full advantage of
4952      the fact that we're comparing identifiers. :-)  */
4953   const size_t attr1_len = IDENTIFIER_LENGTH (attr1);
4954   const size_t attr2_len = IDENTIFIER_LENGTH (attr2);
4955
4956   if (attr2_len == attr1_len + 4)
4957     {
4958       const char *p = IDENTIFIER_POINTER (attr2);
4959       const char *q = IDENTIFIER_POINTER (attr1);
4960       if (p[0] == '_' && p[1] == '_'
4961           && p[attr2_len - 2] == '_' && p[attr2_len - 1] == '_'
4962           && strncmp (q, p + 2, attr1_len) == 0)
4963         return true;;
4964     }
4965   else if (attr2_len + 4 == attr1_len)
4966     {
4967       const char *p = IDENTIFIER_POINTER (attr2);
4968       const char *q = IDENTIFIER_POINTER (attr1);
4969       if (q[0] == '_' && q[1] == '_'
4970           && q[attr1_len - 2] == '_' && q[attr1_len - 1] == '_'
4971           && strncmp (q + 2, p, attr2_len) == 0)
4972         return true;
4973     }
4974
4975   return false;
4976 }
4977
4978 /* Compare two attributes for their value identity.  Return true if the
4979    attribute values are known to be equal; otherwise return false.  */
4980
4981 bool
4982 attribute_value_equal (const_tree attr1, const_tree attr2)
4983 {
4984   if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
4985     return true;
4986
4987   if (TREE_VALUE (attr1) != NULL_TREE
4988       && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
4989       && TREE_VALUE (attr2) != NULL_TREE
4990       && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
4991     {
4992       /* Handle attribute format.  */
4993       if (is_attribute_p ("format", get_attribute_name (attr1)))
4994         {
4995           attr1 = TREE_VALUE (attr1);
4996           attr2 = TREE_VALUE (attr2);
4997           /* Compare the archetypes (printf/scanf/strftime/...).  */
4998           if (!cmp_attrib_identifiers (TREE_VALUE (attr1),
4999                                        TREE_VALUE (attr2)))
5000             return false;
5001           /* Archetypes are the same.  Compare the rest.  */
5002           return (simple_cst_list_equal (TREE_CHAIN (attr1),
5003                                          TREE_CHAIN (attr2)) == 1);
5004         }
5005       return (simple_cst_list_equal (TREE_VALUE (attr1),
5006                                      TREE_VALUE (attr2)) == 1);
5007     }
5008
5009   if ((flag_openmp || flag_openmp_simd)
5010       && TREE_VALUE (attr1) && TREE_VALUE (attr2)
5011       && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
5012       && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
5013     return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
5014                                            TREE_VALUE (attr2));
5015
5016   return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
5017 }
5018
5019 /* Return 0 if the attributes for two types are incompatible, 1 if they
5020    are compatible, and 2 if they are nearly compatible (which causes a
5021    warning to be generated).  */
5022 int
5023 comp_type_attributes (const_tree type1, const_tree type2)
5024 {
5025   const_tree a1 = TYPE_ATTRIBUTES (type1);
5026   const_tree a2 = TYPE_ATTRIBUTES (type2);
5027   const_tree a;
5028
5029   if (a1 == a2)
5030     return 1;
5031   for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
5032     {
5033       const struct attribute_spec *as;
5034       const_tree attr;
5035
5036       as = lookup_attribute_spec (get_attribute_name (a));
5037       if (!as || as->affects_type_identity == false)
5038         continue;
5039
5040       attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
5041       if (!attr || !attribute_value_equal (a, attr))
5042         break;
5043     }
5044   if (!a)
5045     {
5046       for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
5047         {
5048           const struct attribute_spec *as;
5049
5050           as = lookup_attribute_spec (get_attribute_name (a));
5051           if (!as || as->affects_type_identity == false)
5052             continue;
5053
5054           if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
5055             break;
5056           /* We don't need to compare trees again, as we did this
5057              already in first loop.  */
5058         }
5059       /* All types - affecting identity - are equal, so
5060          there is no need to call target hook for comparison.  */
5061       if (!a)
5062         return 1;
5063     }
5064   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
5065     return 0;
5066   /* As some type combinations - like default calling-convention - might
5067      be compatible, we have to call the target hook to get the final result.  */
5068   return targetm.comp_type_attributes (type1, type2);
5069 }
5070
5071 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
5072    is ATTRIBUTE.
5073
5074    Record such modified types already made so we don't make duplicates.  */
5075
5076 tree
5077 build_type_attribute_variant (tree ttype, tree attribute)
5078 {
5079   return build_type_attribute_qual_variant (ttype, attribute,
5080                                             TYPE_QUALS (ttype));
5081 }
5082
5083
5084 /* Reset the expression *EXPR_P, a size or position.
5085
5086    ??? We could reset all non-constant sizes or positions.  But it's cheap
5087    enough to not do so and refrain from adding workarounds to dwarf2out.c.
5088
5089    We need to reset self-referential sizes or positions because they cannot
5090    be gimplified and thus can contain a CALL_EXPR after the gimplification
5091    is finished, which will run afoul of LTO streaming.  And they need to be
5092    reset to something essentially dummy but not constant, so as to preserve
5093    the properties of the object they are attached to.  */
5094
5095 static inline void
5096 free_lang_data_in_one_sizepos (tree *expr_p)
5097 {
5098   tree expr = *expr_p;
5099   if (CONTAINS_PLACEHOLDER_P (expr))
5100     *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
5101 }
5102
5103
5104 /* Reset all the fields in a binfo node BINFO.  We only keep
5105    BINFO_VTABLE, which is used by gimple_fold_obj_type_ref.  */
5106
5107 static void
5108 free_lang_data_in_binfo (tree binfo)
5109 {
5110   unsigned i;
5111   tree t;
5112
5113   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
5114
5115   BINFO_VIRTUALS (binfo) = NULL_TREE;
5116   BINFO_BASE_ACCESSES (binfo) = NULL;
5117   BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
5118   BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
5119
5120   FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
5121     free_lang_data_in_binfo (t);
5122 }
5123
5124
5125 /* Reset all language specific information still present in TYPE.  */
5126
5127 static void
5128 free_lang_data_in_type (tree type)
5129 {
5130   gcc_assert (TYPE_P (type));
5131
5132   /* Give the FE a chance to remove its own data first.  */
5133   lang_hooks.free_lang_data (type);
5134
5135   TREE_LANG_FLAG_0 (type) = 0;
5136   TREE_LANG_FLAG_1 (type) = 0;
5137   TREE_LANG_FLAG_2 (type) = 0;
5138   TREE_LANG_FLAG_3 (type) = 0;
5139   TREE_LANG_FLAG_4 (type) = 0;
5140   TREE_LANG_FLAG_5 (type) = 0;
5141   TREE_LANG_FLAG_6 (type) = 0;
5142
5143   if (TREE_CODE (type) == FUNCTION_TYPE)
5144     {
5145       /* Remove the const and volatile qualifiers from arguments.  The
5146          C++ front end removes them, but the C front end does not,
5147          leading to false ODR violation errors when merging two
5148          instances of the same function signature compiled by
5149          different front ends.  */
5150       tree p;
5151
5152       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5153         {
5154           tree arg_type = TREE_VALUE (p);
5155
5156           if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5157             {
5158               int quals = TYPE_QUALS (arg_type)
5159                           & ~TYPE_QUAL_CONST
5160                           & ~TYPE_QUAL_VOLATILE;
5161               TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5162               free_lang_data_in_type (TREE_VALUE (p));
5163             }
5164           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5165           TREE_PURPOSE (p) = NULL;
5166         }
5167       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5168       TYPE_MINVAL (type) = NULL;
5169     }
5170   if (TREE_CODE (type) == METHOD_TYPE)
5171     {
5172       tree p;
5173
5174       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5175         {
5176           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5177           TREE_PURPOSE (p) = NULL;
5178         }
5179       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5180       TYPE_MINVAL (type) = NULL;
5181     }
5182
5183   /* Remove members that are not actually FIELD_DECLs from the field
5184      list of an aggregate.  These occur in C++.  */
5185   if (RECORD_OR_UNION_TYPE_P (type))
5186     {
5187       tree prev, member;
5188
5189       /* Note that TYPE_FIELDS can be shared across distinct
5190          TREE_TYPEs.  Therefore, if the first field of TYPE_FIELDS is
5191          to be removed, we cannot set its TREE_CHAIN to NULL.
5192          Otherwise, we would not be able to find all the other fields
5193          in the other instances of this TREE_TYPE.
5194
5195          This was causing an ICE in testsuite/g++.dg/lto/20080915.C.  */
5196       prev = NULL_TREE;
5197       member = TYPE_FIELDS (type);
5198       while (member)
5199         {
5200           if (TREE_CODE (member) == FIELD_DECL
5201               || (TREE_CODE (member) == TYPE_DECL
5202                   && !DECL_IGNORED_P (member)
5203                   && debug_info_level > DINFO_LEVEL_TERSE
5204                   && !is_redundant_typedef (member)))
5205             {
5206               if (prev)
5207                 TREE_CHAIN (prev) = member;
5208               else
5209                 TYPE_FIELDS (type) = member;
5210               prev = member;
5211             }
5212
5213           member = TREE_CHAIN (member);
5214         }
5215
5216       if (prev)
5217         TREE_CHAIN (prev) = NULL_TREE;
5218       else
5219         TYPE_FIELDS (type) = NULL_TREE;
5220
5221       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
5222          and danagle the pointer from time to time.  */
5223       if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
5224         TYPE_VFIELD (type) = NULL_TREE;
5225
5226       /* Remove TYPE_METHODS list.  While it would be nice to keep it
5227          to enable ODR warnings about different method lists, doing so
5228          seems to impractically increase size of LTO data streamed.
5229          Keep the information if TYPE_METHODS was non-NULL. This is used
5230          by function.c and pretty printers.  */
5231       if (TYPE_METHODS (type))
5232         TYPE_METHODS (type) = error_mark_node;
5233       if (TYPE_BINFO (type))
5234         {
5235           free_lang_data_in_binfo (TYPE_BINFO (type));
5236           /* We need to preserve link to bases and virtual table for all
5237              polymorphic types to make devirtualization machinery working.
5238              Debug output cares only about bases, but output also
5239              virtual table pointers so merging of -fdevirtualize and
5240              -fno-devirtualize units is easier.  */
5241           if ((!BINFO_VTABLE (TYPE_BINFO (type))
5242                || !flag_devirtualize)
5243               && ((!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
5244                    && !BINFO_VTABLE (TYPE_BINFO (type)))
5245                   || debug_info_level != DINFO_LEVEL_NONE))
5246             TYPE_BINFO (type) = NULL;
5247         }
5248     }
5249   else
5250     {
5251       /* For non-aggregate types, clear out the language slot (which
5252          overloads TYPE_BINFO).  */
5253       TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5254
5255       if (INTEGRAL_TYPE_P (type)
5256           || SCALAR_FLOAT_TYPE_P (type)
5257           || FIXED_POINT_TYPE_P (type))
5258         {
5259           free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5260           free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5261         }
5262     }
5263
5264   free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5265   free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5266
5267   if (TYPE_CONTEXT (type)
5268       && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5269     {
5270       tree ctx = TYPE_CONTEXT (type);
5271       do
5272         {
5273           ctx = BLOCK_SUPERCONTEXT (ctx);
5274         }
5275       while (ctx && TREE_CODE (ctx) == BLOCK);
5276       TYPE_CONTEXT (type) = ctx;
5277     }
5278 }
5279
5280
5281 /* Return true if DECL may need an assembler name to be set.  */
5282
5283 static inline bool
5284 need_assembler_name_p (tree decl)
5285 {
5286   /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5287      Rule merging.  This makes type_odr_p to return true on those types during
5288      LTO and by comparing the mangled name, we can say what types are intended
5289      to be equivalent across compilation unit.
5290
5291      We do not store names of type_in_anonymous_namespace_p.
5292
5293      Record, union and enumeration type have linkage that allows use
5294      to check type_in_anonymous_namespace_p. We do not mangle compound types
5295      that always can be compared structurally.
5296
5297      Similarly for builtin types, we compare properties of their main variant.
5298      A special case are integer types where mangling do make differences
5299      between char/signed char/unsigned char etc.  Storing name for these makes
5300      e.g.  -fno-signed-char/-fsigned-char mismatches to be handled well.
5301      See cp/mangle.c:write_builtin_type for details.  */
5302
5303   if (flag_lto_odr_type_mering
5304       && TREE_CODE (decl) == TYPE_DECL
5305       && DECL_NAME (decl)
5306       && decl == TYPE_NAME (TREE_TYPE (decl))
5307       && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
5308       && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5309       && (type_with_linkage_p (TREE_TYPE (decl))
5310           || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5311       && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5312     return !DECL_ASSEMBLER_NAME_SET_P (decl);
5313   /* Only FUNCTION_DECLs and VAR_DECLs are considered.  */
5314   if (!VAR_OR_FUNCTION_DECL_P (decl))
5315     return false;
5316
5317   /* If DECL already has its assembler name set, it does not need a
5318      new one.  */
5319   if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5320       || DECL_ASSEMBLER_NAME_SET_P (decl))
5321     return false;
5322
5323   /* Abstract decls do not need an assembler name.  */
5324   if (DECL_ABSTRACT_P (decl))
5325     return false;
5326
5327   /* For VAR_DECLs, only static, public and external symbols need an
5328      assembler name.  */
5329   if (VAR_P (decl)
5330       && !TREE_STATIC (decl)
5331       && !TREE_PUBLIC (decl)
5332       && !DECL_EXTERNAL (decl))
5333     return false;
5334
5335   if (TREE_CODE (decl) == FUNCTION_DECL)
5336     {
5337       /* Do not set assembler name on builtins.  Allow RTL expansion to
5338          decide whether to expand inline or via a regular call.  */
5339       if (DECL_BUILT_IN (decl)
5340           && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5341         return false;
5342
5343       /* Functions represented in the callgraph need an assembler name.  */
5344       if (cgraph_node::get (decl) != NULL)
5345         return true;
5346
5347       /* Unused and not public functions don't need an assembler name.  */
5348       if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5349         return false;
5350     }
5351
5352   return true;
5353 }
5354
5355
5356 /* Reset all language specific information still present in symbol
5357    DECL.  */
5358
5359 static void
5360 free_lang_data_in_decl (tree decl)
5361 {
5362   gcc_assert (DECL_P (decl));
5363
5364   /* Give the FE a chance to remove its own data first.  */
5365   lang_hooks.free_lang_data (decl);
5366
5367   TREE_LANG_FLAG_0 (decl) = 0;
5368   TREE_LANG_FLAG_1 (decl) = 0;
5369   TREE_LANG_FLAG_2 (decl) = 0;
5370   TREE_LANG_FLAG_3 (decl) = 0;
5371   TREE_LANG_FLAG_4 (decl) = 0;
5372   TREE_LANG_FLAG_5 (decl) = 0;
5373   TREE_LANG_FLAG_6 (decl) = 0;
5374
5375   free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5376   free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5377   if (TREE_CODE (decl) == FIELD_DECL)
5378     {
5379       free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5380       if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5381         DECL_QUALIFIER (decl) = NULL_TREE;
5382     }
5383
5384  if (TREE_CODE (decl) == FUNCTION_DECL)
5385     {
5386       struct cgraph_node *node;
5387       if (!(node = cgraph_node::get (decl))
5388           || (!node->definition && !node->clones))
5389         {
5390           if (node)
5391             node->release_body ();
5392           else
5393             {
5394               release_function_body (decl);
5395               DECL_ARGUMENTS (decl) = NULL;
5396               DECL_RESULT (decl) = NULL;
5397               DECL_INITIAL (decl) = error_mark_node;
5398             }
5399         }
5400       if (gimple_has_body_p (decl) || (node && node->thunk.thunk_p))
5401         {
5402           tree t;
5403
5404           /* If DECL has a gimple body, then the context for its
5405              arguments must be DECL.  Otherwise, it doesn't really
5406              matter, as we will not be emitting any code for DECL.  In
5407              general, there may be other instances of DECL created by
5408              the front end and since PARM_DECLs are generally shared,
5409              their DECL_CONTEXT changes as the replicas of DECL are
5410              created.  The only time where DECL_CONTEXT is important
5411              is for the FUNCTION_DECLs that have a gimple body (since
5412              the PARM_DECL will be used in the function's body).  */
5413           for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5414             DECL_CONTEXT (t) = decl;
5415           if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5416             DECL_FUNCTION_SPECIFIC_TARGET (decl)
5417               = target_option_default_node;
5418           if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5419             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5420               = optimization_default_node;
5421         }
5422
5423       /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5424          At this point, it is not needed anymore.  */
5425       DECL_SAVED_TREE (decl) = NULL_TREE;
5426
5427       /* Clear the abstract origin if it refers to a method.  Otherwise
5428          dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5429          origin will not be output correctly.  */
5430       if (DECL_ABSTRACT_ORIGIN (decl)
5431           && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5432           && RECORD_OR_UNION_TYPE_P
5433                (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5434         DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5435
5436       /* Sometimes the C++ frontend doesn't manage to transform a temporary
5437          DECL_VINDEX referring to itself into a vtable slot number as it
5438          should.  Happens with functions that are copied and then forgotten
5439          about.  Just clear it, it won't matter anymore.  */
5440       if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5441         DECL_VINDEX (decl) = NULL_TREE;
5442     }
5443   else if (VAR_P (decl))
5444     {
5445       if ((DECL_EXTERNAL (decl)
5446            && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5447           || (decl_function_context (decl) && !TREE_STATIC (decl)))
5448         DECL_INITIAL (decl) = NULL_TREE;
5449     }
5450   else if (TREE_CODE (decl) == TYPE_DECL)
5451     {
5452       DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5453       DECL_VISIBILITY_SPECIFIED (decl) = 0;
5454       DECL_INITIAL (decl) = NULL_TREE;
5455     }
5456   else if (TREE_CODE (decl) == FIELD_DECL)
5457     DECL_INITIAL (decl) = NULL_TREE;
5458   else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5459            && DECL_INITIAL (decl)
5460            && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5461     {
5462       /* Strip builtins from the translation-unit BLOCK.  We still have targets
5463          without builtin_decl_explicit support and also builtins are shared
5464          nodes and thus we can't use TREE_CHAIN in multiple lists.  */
5465       tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5466       while (*nextp)
5467         {
5468           tree var = *nextp;
5469           if (TREE_CODE (var) == FUNCTION_DECL
5470               && DECL_BUILT_IN (var))
5471             *nextp = TREE_CHAIN (var);
5472           else
5473             nextp = &TREE_CHAIN (var);
5474         }
5475     }
5476 }
5477
5478
5479 /* Data used when collecting DECLs and TYPEs for language data removal.  */
5480
5481 struct free_lang_data_d
5482 {
5483   free_lang_data_d () : decls (100), types (100) {}
5484
5485   /* Worklist to avoid excessive recursion.  */
5486   auto_vec<tree> worklist;
5487
5488   /* Set of traversed objects.  Used to avoid duplicate visits.  */
5489   hash_set<tree> pset;
5490
5491   /* Array of symbols to process with free_lang_data_in_decl.  */
5492   auto_vec<tree> decls;
5493
5494   /* Array of types to process with free_lang_data_in_type.  */
5495   auto_vec<tree> types;
5496 };
5497
5498
5499 /* Save all language fields needed to generate proper debug information
5500    for DECL.  This saves most fields cleared out by free_lang_data_in_decl.  */
5501
5502 static void
5503 save_debug_info_for_decl (tree t)
5504 {
5505   /*struct saved_debug_info_d *sdi;*/
5506
5507   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5508
5509   /* FIXME.  Partial implementation for saving debug info removed.  */
5510 }
5511
5512
5513 /* Save all language fields needed to generate proper debug information
5514    for TYPE.  This saves most fields cleared out by free_lang_data_in_type.  */
5515
5516 static void
5517 save_debug_info_for_type (tree t)
5518 {
5519   /*struct saved_debug_info_d *sdi;*/
5520
5521   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5522
5523   /* FIXME.  Partial implementation for saving debug info removed.  */
5524 }
5525
5526
5527 /* Add type or decl T to one of the list of tree nodes that need their
5528    language data removed.  The lists are held inside FLD.  */
5529
5530 static void
5531 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5532 {
5533   if (DECL_P (t))
5534     {
5535       fld->decls.safe_push (t);
5536       if (debug_info_level > DINFO_LEVEL_TERSE)
5537         save_debug_info_for_decl (t);
5538     }
5539   else if (TYPE_P (t))
5540     {
5541       fld->types.safe_push (t);
5542       if (debug_info_level > DINFO_LEVEL_TERSE)
5543         save_debug_info_for_type (t);
5544     }
5545   else
5546     gcc_unreachable ();
5547 }
5548
5549 /* Push tree node T into FLD->WORKLIST.  */
5550
5551 static inline void
5552 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5553 {
5554   if (t && !is_lang_specific (t) && !fld->pset.contains (t))
5555     fld->worklist.safe_push ((t));
5556 }
5557
5558
5559 /* Operand callback helper for free_lang_data_in_node.  *TP is the
5560    subtree operand being considered.  */
5561
5562 static tree
5563 find_decls_types_r (tree *tp, int *ws, void *data)
5564 {
5565   tree t = *tp;
5566   struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5567
5568   if (TREE_CODE (t) == TREE_LIST)
5569     return NULL_TREE;
5570
5571   /* Language specific nodes will be removed, so there is no need
5572      to gather anything under them.  */
5573   if (is_lang_specific (t))
5574     {
5575       *ws = 0;
5576       return NULL_TREE;
5577     }
5578
5579   if (DECL_P (t))
5580     {
5581       /* Note that walk_tree does not traverse every possible field in
5582          decls, so we have to do our own traversals here.  */
5583       add_tree_to_fld_list (t, fld);
5584
5585       fld_worklist_push (DECL_NAME (t), fld);
5586       fld_worklist_push (DECL_CONTEXT (t), fld);
5587       fld_worklist_push (DECL_SIZE (t), fld);
5588       fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5589
5590       /* We are going to remove everything under DECL_INITIAL for
5591          TYPE_DECLs.  No point walking them.  */
5592       if (TREE_CODE (t) != TYPE_DECL)
5593         fld_worklist_push (DECL_INITIAL (t), fld);
5594
5595       fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5596       fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5597
5598       if (TREE_CODE (t) == FUNCTION_DECL)
5599         {
5600           fld_worklist_push (DECL_ARGUMENTS (t), fld);
5601           fld_worklist_push (DECL_RESULT (t), fld);
5602         }
5603       else if (TREE_CODE (t) == TYPE_DECL)
5604         {
5605           fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5606         }
5607       else if (TREE_CODE (t) == FIELD_DECL)
5608         {
5609           fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5610           fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5611           fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5612           fld_worklist_push (DECL_FCONTEXT (t), fld);
5613         }
5614
5615       if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
5616           && DECL_HAS_VALUE_EXPR_P (t))
5617         fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5618
5619       if (TREE_CODE (t) != FIELD_DECL
5620           && TREE_CODE (t) != TYPE_DECL)
5621         fld_worklist_push (TREE_CHAIN (t), fld);
5622       *ws = 0;
5623     }
5624   else if (TYPE_P (t))
5625     {
5626       /* Note that walk_tree does not traverse every possible field in
5627          types, so we have to do our own traversals here.  */
5628       add_tree_to_fld_list (t, fld);
5629
5630       if (!RECORD_OR_UNION_TYPE_P (t))
5631         fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5632       fld_worklist_push (TYPE_SIZE (t), fld);
5633       fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5634       fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5635       fld_worklist_push (TYPE_POINTER_TO (t), fld);
5636       fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5637       fld_worklist_push (TYPE_NAME (t), fld);
5638       /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO.  We do not stream
5639          them and thus do not and want not to reach unused pointer types
5640          this way.  */
5641       if (!POINTER_TYPE_P (t))
5642         fld_worklist_push (TYPE_MINVAL (t), fld);
5643       if (!RECORD_OR_UNION_TYPE_P (t))
5644         fld_worklist_push (TYPE_MAXVAL (t), fld);
5645       fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5646       /* Do not walk TYPE_NEXT_VARIANT.  We do not stream it and thus
5647          do not and want not to reach unused variants this way.  */
5648       if (TYPE_CONTEXT (t))
5649         {
5650           tree ctx = TYPE_CONTEXT (t);
5651           /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5652              So push that instead.  */
5653           while (ctx && TREE_CODE (ctx) == BLOCK)
5654             ctx = BLOCK_SUPERCONTEXT (ctx);
5655           fld_worklist_push (ctx, fld);
5656         }
5657       /* Do not walk TYPE_CANONICAL.  We do not stream it and thus do not
5658          and want not to reach unused types this way.  */
5659
5660       if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5661         {
5662           unsigned i;
5663           tree tem;
5664           FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5665             fld_worklist_push (TREE_TYPE (tem), fld);
5666           tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5667           if (tem
5668               /* The Java FE overloads BINFO_VIRTUALS for its own purpose.  */
5669               && TREE_CODE (tem) == TREE_LIST)
5670             do
5671               {
5672                 fld_worklist_push (TREE_VALUE (tem), fld);
5673                 tem = TREE_CHAIN (tem);
5674               }
5675             while (tem);
5676         }
5677       if (RECORD_OR_UNION_TYPE_P (t))
5678         {
5679           tree tem;
5680           /* Push all TYPE_FIELDS - there can be interleaving interesting
5681              and non-interesting things.  */
5682           tem = TYPE_FIELDS (t);
5683           while (tem)
5684             {
5685               if (TREE_CODE (tem) == FIELD_DECL
5686                   || (TREE_CODE (tem) == TYPE_DECL
5687                       && !DECL_IGNORED_P (tem)
5688                       && debug_info_level > DINFO_LEVEL_TERSE
5689                       && !is_redundant_typedef (tem)))
5690                 fld_worklist_push (tem, fld);
5691               tem = TREE_CHAIN (tem);
5692             }
5693         }
5694
5695       fld_worklist_push (TYPE_STUB_DECL (t), fld);
5696       *ws = 0;
5697     }
5698   else if (TREE_CODE (t) == BLOCK)
5699     {
5700       tree tem;
5701       for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5702         fld_worklist_push (tem, fld);
5703       for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5704         fld_worklist_push (tem, fld);
5705       fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5706     }
5707
5708   if (TREE_CODE (t) != IDENTIFIER_NODE
5709       && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5710     fld_worklist_push (TREE_TYPE (t), fld);
5711
5712   return NULL_TREE;
5713 }
5714
5715
5716 /* Find decls and types in T.  */
5717
5718 static void
5719 find_decls_types (tree t, struct free_lang_data_d *fld)
5720 {
5721   while (1)
5722     {
5723       if (!fld->pset.contains (t))
5724         walk_tree (&t, find_decls_types_r, fld, &fld->pset);
5725       if (fld->worklist.is_empty ())
5726         break;
5727       t = fld->worklist.pop ();
5728     }
5729 }
5730
5731 /* Translate all the types in LIST with the corresponding runtime
5732    types.  */
5733
5734 static tree
5735 get_eh_types_for_runtime (tree list)
5736 {
5737   tree head, prev;
5738
5739   if (list == NULL_TREE)
5740     return NULL_TREE;
5741
5742   head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5743   prev = head;
5744   list = TREE_CHAIN (list);
5745   while (list)
5746     {
5747       tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5748       TREE_CHAIN (prev) = n;
5749       prev = TREE_CHAIN (prev);
5750       list = TREE_CHAIN (list);
5751     }
5752
5753   return head;
5754 }
5755
5756
5757 /* Find decls and types referenced in EH region R and store them in
5758    FLD->DECLS and FLD->TYPES.  */
5759
5760 static void
5761 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5762 {
5763   switch (r->type)
5764     {
5765     case ERT_CLEANUP:
5766       break;
5767
5768     case ERT_TRY:
5769       {
5770         eh_catch c;
5771
5772         /* The types referenced in each catch must first be changed to the
5773            EH types used at runtime.  This removes references to FE types
5774            in the region.  */
5775         for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5776           {
5777             c->type_list = get_eh_types_for_runtime (c->type_list);
5778             walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset);
5779           }
5780       }
5781       break;
5782
5783     case ERT_ALLOWED_EXCEPTIONS:
5784       r->u.allowed.type_list
5785         = get_eh_types_for_runtime (r->u.allowed.type_list);
5786       walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset);
5787       break;
5788
5789     case ERT_MUST_NOT_THROW:
5790       walk_tree (&r->u.must_not_throw.failure_decl,
5791                  find_decls_types_r, fld, &fld->pset);
5792       break;
5793     }
5794 }
5795
5796
5797 /* Find decls and types referenced in cgraph node N and store them in
5798    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5799    look for *every* kind of DECL and TYPE node reachable from N,
5800    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5801    NAMESPACE_DECLs, etc).  */
5802
5803 static void
5804 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5805 {
5806   basic_block bb;
5807   struct function *fn;
5808   unsigned ix;
5809   tree t;
5810
5811   find_decls_types (n->decl, fld);
5812
5813   if (!gimple_has_body_p (n->decl))
5814     return;
5815
5816   gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5817
5818   fn = DECL_STRUCT_FUNCTION (n->decl);
5819
5820   /* Traverse locals. */
5821   FOR_EACH_LOCAL_DECL (fn, ix, t)
5822     find_decls_types (t, fld);
5823
5824   /* Traverse EH regions in FN.  */
5825   {
5826     eh_region r;
5827     FOR_ALL_EH_REGION_FN (r, fn)
5828       find_decls_types_in_eh_region (r, fld);
5829   }
5830
5831   /* Traverse every statement in FN.  */
5832   FOR_EACH_BB_FN (bb, fn)
5833     {
5834       gphi_iterator psi;
5835       gimple_stmt_iterator si;
5836       unsigned i;
5837
5838       for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5839         {
5840           gphi *phi = psi.phi ();
5841
5842           for (i = 0; i < gimple_phi_num_args (phi); i++)
5843             {
5844               tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5845               find_decls_types (*arg_p, fld);
5846             }
5847         }
5848
5849       for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5850         {
5851           gimple *stmt = gsi_stmt (si);
5852
5853           if (is_gimple_call (stmt))
5854             find_decls_types (gimple_call_fntype (stmt), fld);
5855
5856           for (i = 0; i < gimple_num_ops (stmt); i++)
5857             {
5858               tree arg = gimple_op (stmt, i);
5859               find_decls_types (arg, fld);
5860             }
5861         }
5862     }
5863 }
5864
5865
5866 /* Find decls and types referenced in varpool node N and store them in
5867    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5868    look for *every* kind of DECL and TYPE node reachable from N,
5869    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5870    NAMESPACE_DECLs, etc).  */
5871
5872 static void
5873 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5874 {
5875   find_decls_types (v->decl, fld);
5876 }
5877
5878 /* If T needs an assembler name, have one created for it.  */
5879
5880 void
5881 assign_assembler_name_if_needed (tree t)
5882 {
5883   if (need_assembler_name_p (t))
5884     {
5885       /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5886          diagnostics that use input_location to show locus
5887          information.  The problem here is that, at this point,
5888          input_location is generally anchored to the end of the file
5889          (since the parser is long gone), so we don't have a good
5890          position to pin it to.
5891
5892          To alleviate this problem, this uses the location of T's
5893          declaration.  Examples of this are
5894          testsuite/g++.dg/template/cond2.C and
5895          testsuite/g++.dg/template/pr35240.C.  */
5896       location_t saved_location = input_location;
5897       input_location = DECL_SOURCE_LOCATION (t);
5898
5899       decl_assembler_name (t);
5900
5901       input_location = saved_location;
5902     }
5903 }
5904
5905
5906 /* Free language specific information for every operand and expression
5907    in every node of the call graph.  This process operates in three stages:
5908
5909    1- Every callgraph node and varpool node is traversed looking for
5910       decls and types embedded in them.  This is a more exhaustive
5911       search than that done by find_referenced_vars, because it will
5912       also collect individual fields, decls embedded in types, etc.
5913
5914    2- All the decls found are sent to free_lang_data_in_decl.
5915
5916    3- All the types found are sent to free_lang_data_in_type.
5917
5918    The ordering between decls and types is important because
5919    free_lang_data_in_decl sets assembler names, which includes
5920    mangling.  So types cannot be freed up until assembler names have
5921    been set up.  */
5922
5923 static void
5924 free_lang_data_in_cgraph (void)
5925 {
5926   struct cgraph_node *n;
5927   varpool_node *v;
5928   struct free_lang_data_d fld;
5929   tree t;
5930   unsigned i;
5931   alias_pair *p;
5932
5933   /* Find decls and types in the body of every function in the callgraph.  */
5934   FOR_EACH_FUNCTION (n)
5935     find_decls_types_in_node (n, &fld);
5936
5937   FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5938     find_decls_types (p->decl, &fld);
5939
5940   /* Find decls and types in every varpool symbol.  */
5941   FOR_EACH_VARIABLE (v)
5942     find_decls_types_in_var (v, &fld);
5943
5944   /* Set the assembler name on every decl found.  We need to do this
5945      now because free_lang_data_in_decl will invalidate data needed
5946      for mangling.  This breaks mangling on interdependent decls.  */
5947   FOR_EACH_VEC_ELT (fld.decls, i, t)
5948     assign_assembler_name_if_needed (t);
5949
5950   /* Traverse every decl found freeing its language data.  */
5951   FOR_EACH_VEC_ELT (fld.decls, i, t)
5952     free_lang_data_in_decl (t);
5953
5954   /* Traverse every type found freeing its language data.  */
5955   FOR_EACH_VEC_ELT (fld.types, i, t)
5956     free_lang_data_in_type (t);
5957   if (flag_checking)
5958     {
5959       FOR_EACH_VEC_ELT (fld.types, i, t)
5960         verify_type (t);
5961     }
5962 }
5963
5964
5965 /* Free resources that are used by FE but are not needed once they are done. */
5966
5967 static unsigned
5968 free_lang_data (void)
5969 {
5970   unsigned i;
5971
5972   /* If we are the LTO frontend we have freed lang-specific data already.  */
5973   if (in_lto_p
5974       || (!flag_generate_lto && !flag_generate_offload))
5975     return 0;
5976
5977   /* Allocate and assign alias sets to the standard integer types
5978      while the slots are still in the way the frontends generated them.  */
5979   for (i = 0; i < itk_none; ++i)
5980     if (integer_types[i])
5981       TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5982
5983   /* Traverse the IL resetting language specific information for
5984      operands, expressions, etc.  */
5985   free_lang_data_in_cgraph ();
5986
5987   /* Create gimple variants for common types.  */
5988   fileptr_type_node = ptr_type_node;
5989   const_tm_ptr_type_node = const_ptr_type_node;
5990
5991   /* Reset some langhooks.  Do not reset types_compatible_p, it may
5992      still be used indirectly via the get_alias_set langhook.  */
5993   lang_hooks.dwarf_name = lhd_dwarf_name;
5994   lang_hooks.decl_printable_name = gimple_decl_printable_name;
5995   lang_hooks.gimplify_expr = lhd_gimplify_expr;
5996
5997   /* We do not want the default decl_assembler_name implementation,
5998      rather if we have fixed everything we want a wrapper around it
5999      asserting that all non-local symbols already got their assembler
6000      name and only produce assembler names for local symbols.  Or rather
6001      make sure we never call decl_assembler_name on local symbols and
6002      devise a separate, middle-end private scheme for it.  */
6003
6004   /* Reset diagnostic machinery.  */
6005   tree_diagnostics_defaults (global_dc);
6006
6007   return 0;
6008 }
6009
6010
6011 namespace {
6012
6013 const pass_data pass_data_ipa_free_lang_data =
6014 {
6015   SIMPLE_IPA_PASS, /* type */
6016   "*free_lang_data", /* name */
6017   OPTGROUP_NONE, /* optinfo_flags */
6018   TV_IPA_FREE_LANG_DATA, /* tv_id */
6019   0, /* properties_required */
6020   0, /* properties_provided */
6021   0, /* properties_destroyed */
6022   0, /* todo_flags_start */
6023   0, /* todo_flags_finish */
6024 };
6025
6026 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
6027 {
6028 public:
6029   pass_ipa_free_lang_data (gcc::context *ctxt)
6030     : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
6031   {}
6032
6033   /* opt_pass methods: */
6034   virtual unsigned int execute (function *) { return free_lang_data (); }
6035
6036 }; // class pass_ipa_free_lang_data
6037
6038 } // anon namespace
6039
6040 simple_ipa_opt_pass *
6041 make_pass_ipa_free_lang_data (gcc::context *ctxt)
6042 {
6043   return new pass_ipa_free_lang_data (ctxt);
6044 }
6045
6046 /* The backbone of is_attribute_p().  ATTR_LEN is the string length of
6047    ATTR_NAME.  Also used internally by remove_attribute().  */
6048 bool
6049 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
6050 {
6051   size_t ident_len = IDENTIFIER_LENGTH (ident);
6052
6053   if (ident_len == attr_len)
6054     {
6055       if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
6056         return true;
6057     }
6058   else if (ident_len == attr_len + 4)
6059     {
6060       /* There is the possibility that ATTR is 'text' and IDENT is
6061          '__text__'.  */
6062       const char *p = IDENTIFIER_POINTER (ident);      
6063       if (p[0] == '_' && p[1] == '_'
6064           && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
6065           && strncmp (attr_name, p + 2, attr_len) == 0)
6066         return true;
6067     }
6068
6069   return false;
6070 }
6071
6072 /* The backbone of lookup_attribute().  ATTR_LEN is the string length
6073    of ATTR_NAME, and LIST is not NULL_TREE.  */
6074 tree
6075 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
6076 {
6077   while (list)
6078     {
6079       size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6080
6081       if (ident_len == attr_len)
6082         {
6083           if (!strcmp (attr_name,
6084                        IDENTIFIER_POINTER (get_attribute_name (list))))
6085             break;
6086         }
6087       /* TODO: If we made sure that attributes were stored in the
6088          canonical form without '__...__' (ie, as in 'text' as opposed
6089          to '__text__') then we could avoid the following case.  */
6090       else if (ident_len == attr_len + 4)
6091         {
6092           const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
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             break;
6097         }
6098       list = TREE_CHAIN (list);
6099     }
6100
6101   return list;
6102 }
6103
6104 /* Given an attribute name ATTR_NAME and a list of attributes LIST,
6105    return a pointer to the attribute's list first element if the attribute
6106    starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
6107    '__text__').  */
6108
6109 tree
6110 private_lookup_attribute_by_prefix (const char *attr_name, size_t attr_len,
6111                                     tree list)
6112 {
6113   while (list)
6114     {
6115       size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6116
6117       if (attr_len > ident_len)
6118         {
6119           list = TREE_CHAIN (list);
6120           continue;
6121         }
6122
6123       const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6124
6125       if (strncmp (attr_name, p, attr_len) == 0)
6126         break;
6127
6128       /* TODO: If we made sure that attributes were stored in the
6129          canonical form without '__...__' (ie, as in 'text' as opposed
6130          to '__text__') then we could avoid the following case.  */
6131       if (p[0] == '_' && p[1] == '_' &&
6132           strncmp (attr_name, p + 2, attr_len) == 0)
6133         break;
6134
6135       list = TREE_CHAIN (list);
6136     }
6137
6138   return list;
6139 }
6140
6141
6142 /* A variant of lookup_attribute() that can be used with an identifier
6143    as the first argument, and where the identifier can be either
6144    'text' or '__text__'.
6145
6146    Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
6147    return a pointer to the attribute's list element if the attribute
6148    is part of the list, or NULL_TREE if not found.  If the attribute
6149    appears more than once, this only returns the first occurrence; the
6150    TREE_CHAIN of the return value should be passed back in if further
6151    occurrences are wanted.  ATTR_IDENTIFIER must be an identifier but
6152    can be in the form 'text' or '__text__'.  */
6153 static tree
6154 lookup_ident_attribute (tree attr_identifier, tree list)
6155 {
6156   gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
6157
6158   while (list)
6159     {
6160       gcc_checking_assert (TREE_CODE (get_attribute_name (list))
6161                            == IDENTIFIER_NODE);
6162
6163       if (cmp_attrib_identifiers (attr_identifier,
6164                                   get_attribute_name (list)))
6165         /* Found it.  */
6166         break;
6167       list = TREE_CHAIN (list);
6168     }
6169
6170   return list;
6171 }
6172
6173 /* Remove any instances of attribute ATTR_NAME in LIST and return the
6174    modified list.  */
6175
6176 tree
6177 remove_attribute (const char *attr_name, tree list)
6178 {
6179   tree *p;
6180   size_t attr_len = strlen (attr_name);
6181
6182   gcc_checking_assert (attr_name[0] != '_');
6183
6184   for (p = &list; *p; )
6185     {
6186       tree l = *p;
6187       /* TODO: If we were storing attributes in normalized form, here
6188          we could use a simple strcmp().  */
6189       if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
6190         *p = TREE_CHAIN (l);
6191       else
6192         p = &TREE_CHAIN (l);
6193     }
6194
6195   return list;
6196 }
6197
6198 /* Return an attribute list that is the union of a1 and a2.  */
6199
6200 tree
6201 merge_attributes (tree a1, tree a2)
6202 {
6203   tree attributes;
6204
6205   /* Either one unset?  Take the set one.  */
6206
6207   if ((attributes = a1) == 0)
6208     attributes = a2;
6209
6210   /* One that completely contains the other?  Take it.  */
6211
6212   else if (a2 != 0 && ! attribute_list_contained (a1, a2))
6213     {
6214       if (attribute_list_contained (a2, a1))
6215         attributes = a2;
6216       else
6217         {
6218           /* Pick the longest list, and hang on the other list.  */
6219
6220           if (list_length (a1) < list_length (a2))
6221             attributes = a2, a2 = a1;
6222
6223           for (; a2 != 0; a2 = TREE_CHAIN (a2))
6224             {
6225               tree a;
6226               for (a = lookup_ident_attribute (get_attribute_name (a2),
6227                                                attributes);
6228                    a != NULL_TREE && !attribute_value_equal (a, a2);
6229                    a = lookup_ident_attribute (get_attribute_name (a2),
6230                                                TREE_CHAIN (a)))
6231                 ;
6232               if (a == NULL_TREE)
6233                 {
6234                   a1 = copy_node (a2);
6235                   TREE_CHAIN (a1) = attributes;
6236                   attributes = a1;
6237                 }
6238             }
6239         }
6240     }
6241   return attributes;
6242 }
6243
6244 /* Given types T1 and T2, merge their attributes and return
6245   the result.  */
6246
6247 tree
6248 merge_type_attributes (tree t1, tree t2)
6249 {
6250   return merge_attributes (TYPE_ATTRIBUTES (t1),
6251                            TYPE_ATTRIBUTES (t2));
6252 }
6253
6254 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
6255    the result.  */
6256
6257 tree
6258 merge_decl_attributes (tree olddecl, tree newdecl)
6259 {
6260   return merge_attributes (DECL_ATTRIBUTES (olddecl),
6261                            DECL_ATTRIBUTES (newdecl));
6262 }
6263
6264 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
6265
6266 /* Specialization of merge_decl_attributes for various Windows targets.
6267
6268    This handles the following situation:
6269
6270      __declspec (dllimport) int foo;
6271      int foo;
6272
6273    The second instance of `foo' nullifies the dllimport.  */
6274
6275 tree
6276 merge_dllimport_decl_attributes (tree old, tree new_tree)
6277 {
6278   tree a;
6279   int delete_dllimport_p = 1;
6280
6281   /* What we need to do here is remove from `old' dllimport if it doesn't
6282      appear in `new'.  dllimport behaves like extern: if a declaration is
6283      marked dllimport and a definition appears later, then the object
6284      is not dllimport'd.  We also remove a `new' dllimport if the old list
6285      contains dllexport:  dllexport always overrides dllimport, regardless
6286      of the order of declaration.  */
6287   if (!VAR_OR_FUNCTION_DECL_P (new_tree))
6288     delete_dllimport_p = 0;
6289   else if (DECL_DLLIMPORT_P (new_tree)
6290            && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
6291     {
6292       DECL_DLLIMPORT_P (new_tree) = 0;
6293       warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
6294               "dllimport ignored", new_tree);
6295     }
6296   else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
6297     {
6298       /* Warn about overriding a symbol that has already been used, e.g.:
6299            extern int __attribute__ ((dllimport)) foo;
6300            int* bar () {return &foo;}
6301            int foo;
6302       */
6303       if (TREE_USED (old))
6304         {
6305           warning (0, "%q+D redeclared without dllimport attribute "
6306                    "after being referenced with dll linkage", new_tree);
6307           /* If we have used a variable's address with dllimport linkage,
6308               keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
6309               decl may already have had TREE_CONSTANT computed.
6310               We still remove the attribute so that assembler code refers
6311               to '&foo rather than '_imp__foo'.  */
6312           if (VAR_P (old) && TREE_ADDRESSABLE (old))
6313             DECL_DLLIMPORT_P (new_tree) = 1;
6314         }
6315
6316       /* Let an inline definition silently override the external reference,
6317          but otherwise warn about attribute inconsistency.  */
6318       else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
6319         warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
6320                   "previous dllimport ignored", new_tree);
6321     }
6322   else
6323     delete_dllimport_p = 0;
6324
6325   a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
6326
6327   if (delete_dllimport_p)
6328     a = remove_attribute ("dllimport", a);
6329
6330   return a;
6331 }
6332
6333 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
6334    struct attribute_spec.handler.  */
6335
6336 tree
6337 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
6338                       bool *no_add_attrs)
6339 {
6340   tree node = *pnode;
6341   bool is_dllimport;
6342
6343   /* These attributes may apply to structure and union types being created,
6344      but otherwise should pass to the declaration involved.  */
6345   if (!DECL_P (node))
6346     {
6347       if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
6348                    | (int) ATTR_FLAG_ARRAY_NEXT))
6349         {
6350           *no_add_attrs = true;
6351           return tree_cons (name, args, NULL_TREE);
6352         }
6353       if (TREE_CODE (node) == RECORD_TYPE
6354           || TREE_CODE (node) == UNION_TYPE)
6355         {
6356           node = TYPE_NAME (node);
6357           if (!node)
6358             return NULL_TREE;
6359         }
6360       else
6361         {
6362           warning (OPT_Wattributes, "%qE attribute ignored",
6363                    name);
6364           *no_add_attrs = true;
6365           return NULL_TREE;
6366         }
6367     }
6368
6369   if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
6370     {
6371       *no_add_attrs = true;
6372       warning (OPT_Wattributes, "%qE attribute ignored",
6373                name);
6374       return NULL_TREE;
6375     }
6376
6377   if (TREE_CODE (node) == TYPE_DECL
6378       && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
6379       && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
6380     {
6381       *no_add_attrs = true;
6382       warning (OPT_Wattributes, "%qE attribute ignored",
6383                name);
6384       return NULL_TREE;
6385     }
6386
6387   is_dllimport = is_attribute_p ("dllimport", name);
6388
6389   /* Report error on dllimport ambiguities seen now before they cause
6390      any damage.  */
6391   if (is_dllimport)
6392     {
6393       /* Honor any target-specific overrides. */
6394       if (!targetm.valid_dllimport_attribute_p (node))
6395         *no_add_attrs = true;
6396
6397      else if (TREE_CODE (node) == FUNCTION_DECL
6398                 && DECL_DECLARED_INLINE_P (node))
6399         {
6400           warning (OPT_Wattributes, "inline function %q+D declared as "
6401                   " dllimport: attribute ignored", node);
6402           *no_add_attrs = true;
6403         }
6404       /* Like MS, treat definition of dllimported variables and
6405          non-inlined functions on declaration as syntax errors. */
6406      else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6407         {
6408           error ("function %q+D definition is marked dllimport", node);
6409           *no_add_attrs = true;
6410         }
6411
6412      else if (VAR_P (node))
6413         {
6414           if (DECL_INITIAL (node))
6415             {
6416               error ("variable %q+D definition is marked dllimport",
6417                      node);
6418               *no_add_attrs = true;
6419             }
6420
6421           /* `extern' needn't be specified with dllimport.
6422              Specify `extern' now and hope for the best.  Sigh.  */
6423           DECL_EXTERNAL (node) = 1;
6424           /* Also, implicitly give dllimport'd variables declared within
6425              a function global scope, unless declared static.  */
6426           if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6427             TREE_PUBLIC (node) = 1;
6428         }
6429
6430       if (*no_add_attrs == false)
6431         DECL_DLLIMPORT_P (node) = 1;
6432     }
6433   else if (TREE_CODE (node) == FUNCTION_DECL
6434            && DECL_DECLARED_INLINE_P (node)
6435            && flag_keep_inline_dllexport)
6436     /* An exported function, even if inline, must be emitted.  */
6437     DECL_EXTERNAL (node) = 0;
6438
6439   /*  Report error if symbol is not accessible at global scope.  */
6440   if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
6441     {
6442       error ("external linkage required for symbol %q+D because of "
6443              "%qE attribute", node, name);
6444       *no_add_attrs = true;
6445     }
6446
6447   /* A dllexport'd entity must have default visibility so that other
6448      program units (shared libraries or the main executable) can see
6449      it.  A dllimport'd entity must have default visibility so that
6450      the linker knows that undefined references within this program
6451      unit can be resolved by the dynamic linker.  */
6452   if (!*no_add_attrs)
6453     {
6454       if (DECL_VISIBILITY_SPECIFIED (node)
6455           && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6456         error ("%qE implies default visibility, but %qD has already "
6457                "been declared with a different visibility",
6458                name, node);
6459       DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6460       DECL_VISIBILITY_SPECIFIED (node) = 1;
6461     }
6462
6463   return NULL_TREE;
6464 }
6465
6466 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES  */
6467 \f
6468 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6469    of the various TYPE_QUAL values.  */
6470
6471 static void
6472 set_type_quals (tree type, int type_quals)
6473 {
6474   TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6475   TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6476   TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6477   TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6478   TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6479 }
6480
6481 /* Returns true iff CAND and BASE have equivalent language-specific
6482    qualifiers.  */
6483
6484 bool
6485 check_lang_type (const_tree cand, const_tree base)
6486 {
6487   if (lang_hooks.types.type_hash_eq == NULL)
6488     return true;
6489   /* type_hash_eq currently only applies to these types.  */
6490   if (TREE_CODE (cand) != FUNCTION_TYPE
6491       && TREE_CODE (cand) != METHOD_TYPE)
6492     return true;
6493   return lang_hooks.types.type_hash_eq (cand, base);
6494 }
6495
6496 /* Returns true iff unqualified CAND and BASE are equivalent.  */
6497
6498 bool
6499 check_base_type (const_tree cand, const_tree base)
6500 {
6501   return (TYPE_NAME (cand) == TYPE_NAME (base)
6502           /* Apparently this is needed for Objective-C.  */
6503           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6504           /* Check alignment.  */
6505           && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6506           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6507                                    TYPE_ATTRIBUTES (base)));
6508 }
6509
6510 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS.  */
6511
6512 bool
6513 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6514 {
6515   return (TYPE_QUALS (cand) == type_quals
6516           && check_base_type (cand, base)
6517           && check_lang_type (cand, base));
6518 }
6519
6520 /* Returns true iff CAND is equivalent to BASE with ALIGN.  */
6521
6522 static bool
6523 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6524 {
6525   return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6526           && TYPE_NAME (cand) == TYPE_NAME (base)
6527           /* Apparently this is needed for Objective-C.  */
6528           && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6529           /* Check alignment.  */
6530           && TYPE_ALIGN (cand) == align
6531           && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6532                                    TYPE_ATTRIBUTES (base))
6533           && check_lang_type (cand, base));
6534 }
6535
6536 /* This function checks to see if TYPE matches the size one of the built-in 
6537    atomic types, and returns that core atomic type.  */
6538
6539 static tree
6540 find_atomic_core_type (tree type)
6541 {
6542   tree base_atomic_type;
6543
6544   /* Only handle complete types.  */
6545   if (TYPE_SIZE (type) == NULL_TREE)
6546     return NULL_TREE;
6547
6548   HOST_WIDE_INT type_size = tree_to_uhwi (TYPE_SIZE (type));
6549   switch (type_size)
6550     {
6551     case 8:
6552       base_atomic_type = atomicQI_type_node;
6553       break;
6554
6555     case 16:
6556       base_atomic_type = atomicHI_type_node;
6557       break;
6558
6559     case 32:
6560       base_atomic_type = atomicSI_type_node;
6561       break;
6562
6563     case 64:
6564       base_atomic_type = atomicDI_type_node;
6565       break;
6566
6567     case 128:
6568       base_atomic_type = atomicTI_type_node;
6569       break;
6570
6571     default:
6572       base_atomic_type = NULL_TREE;
6573     }
6574
6575   return base_atomic_type;
6576 }
6577
6578 /* Return a version of the TYPE, qualified as indicated by the
6579    TYPE_QUALS, if one exists.  If no qualified version exists yet,
6580    return NULL_TREE.  */
6581
6582 tree
6583 get_qualified_type (tree type, int type_quals)
6584 {
6585   tree t;
6586
6587   if (TYPE_QUALS (type) == type_quals)
6588     return type;
6589
6590   /* Search the chain of variants to see if there is already one there just
6591      like the one we need to have.  If so, use that existing one.  We must
6592      preserve the TYPE_NAME, since there is code that depends on this.  */
6593   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6594     if (check_qualified_type (t, type, type_quals))
6595       return t;
6596
6597   return NULL_TREE;
6598 }
6599
6600 /* Like get_qualified_type, but creates the type if it does not
6601    exist.  This function never returns NULL_TREE.  */
6602
6603 tree
6604 build_qualified_type (tree type, int type_quals MEM_STAT_DECL)
6605 {
6606   tree t;
6607
6608   /* See if we already have the appropriate qualified variant.  */
6609   t = get_qualified_type (type, type_quals);
6610
6611   /* If not, build it.  */
6612   if (!t)
6613     {
6614       t = build_variant_type_copy (type PASS_MEM_STAT);
6615       set_type_quals (t, type_quals);
6616
6617       if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6618         {
6619           /* See if this object can map to a basic atomic type.  */
6620           tree atomic_type = find_atomic_core_type (type);
6621           if (atomic_type)
6622             {
6623               /* Ensure the alignment of this type is compatible with
6624                  the required alignment of the atomic type.  */
6625               if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6626                 SET_TYPE_ALIGN (t, TYPE_ALIGN (atomic_type));
6627             }
6628         }
6629
6630       if (TYPE_STRUCTURAL_EQUALITY_P (type))
6631         /* Propagate structural equality. */
6632         SET_TYPE_STRUCTURAL_EQUALITY (t);
6633       else if (TYPE_CANONICAL (type) != type)
6634         /* Build the underlying canonical type, since it is different
6635            from TYPE. */
6636         {
6637           tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
6638           TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
6639         }
6640       else
6641         /* T is its own canonical type. */
6642         TYPE_CANONICAL (t) = t;
6643
6644     }
6645
6646   return t;
6647 }
6648
6649 /* Create a variant of type T with alignment ALIGN.  */
6650
6651 tree
6652 build_aligned_type (tree type, unsigned int align)
6653 {
6654   tree t;
6655
6656   if (TYPE_PACKED (type)
6657       || TYPE_ALIGN (type) == align)
6658     return type;
6659
6660   for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6661     if (check_aligned_type (t, type, align))
6662       return t;
6663
6664   t = build_variant_type_copy (type);
6665   SET_TYPE_ALIGN (t, align);
6666   TYPE_USER_ALIGN (t) = 1;
6667
6668   return t;
6669 }
6670
6671 /* Create a new distinct copy of TYPE.  The new type is made its own
6672    MAIN_VARIANT. If TYPE requires structural equality checks, the
6673    resulting type requires structural equality checks; otherwise, its
6674    TYPE_CANONICAL points to itself. */
6675
6676 tree
6677 build_distinct_type_copy (tree type MEM_STAT_DECL)
6678 {
6679   tree t = copy_node_stat (type PASS_MEM_STAT);
6680
6681   TYPE_POINTER_TO (t) = 0;
6682   TYPE_REFERENCE_TO (t) = 0;
6683
6684   /* Set the canonical type either to a new equivalence class, or
6685      propagate the need for structural equality checks. */
6686   if (TYPE_STRUCTURAL_EQUALITY_P (type))
6687     SET_TYPE_STRUCTURAL_EQUALITY (t);
6688   else
6689     TYPE_CANONICAL (t) = t;
6690
6691   /* Make it its own variant.  */
6692   TYPE_MAIN_VARIANT (t) = t;
6693   TYPE_NEXT_VARIANT (t) = 0;
6694
6695   /* We do not record methods in type copies nor variants
6696      so we do not need to keep them up to date when new method
6697      is inserted.  */
6698   if (RECORD_OR_UNION_TYPE_P (t))
6699     TYPE_METHODS (t) = NULL_TREE;
6700
6701   /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6702      whose TREE_TYPE is not t.  This can also happen in the Ada
6703      frontend when using subtypes.  */
6704
6705   return t;
6706 }
6707
6708 /* Create a new variant of TYPE, equivalent but distinct.  This is so
6709    the caller can modify it. TYPE_CANONICAL for the return type will
6710    be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6711    are considered equal by the language itself (or that both types
6712    require structural equality checks). */
6713
6714 tree
6715 build_variant_type_copy (tree type MEM_STAT_DECL)
6716 {
6717   tree t, m = TYPE_MAIN_VARIANT (type);
6718
6719   t = build_distinct_type_copy (type PASS_MEM_STAT);
6720
6721   /* Since we're building a variant, assume that it is a non-semantic
6722      variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6723   TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6724   /* Type variants have no alias set defined.  */
6725   TYPE_ALIAS_SET (t) = -1;
6726
6727   /* Add the new type to the chain of variants of TYPE.  */
6728   TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6729   TYPE_NEXT_VARIANT (m) = t;
6730   TYPE_MAIN_VARIANT (t) = m;
6731
6732   return t;
6733 }
6734 \f
6735 /* Return true if the from tree in both tree maps are equal.  */
6736
6737 int
6738 tree_map_base_eq (const void *va, const void *vb)
6739 {
6740   const struct tree_map_base  *const a = (const struct tree_map_base *) va,
6741     *const b = (const struct tree_map_base *) vb;
6742   return (a->from == b->from);
6743 }
6744
6745 /* Hash a from tree in a tree_base_map.  */
6746
6747 unsigned int
6748 tree_map_base_hash (const void *item)
6749 {
6750   return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6751 }
6752
6753 /* Return true if this tree map structure is marked for garbage collection
6754    purposes.  We simply return true if the from tree is marked, so that this
6755    structure goes away when the from tree goes away.  */
6756
6757 int
6758 tree_map_base_marked_p (const void *p)
6759 {
6760   return ggc_marked_p (((const struct tree_map_base *) p)->from);
6761 }
6762
6763 /* Hash a from tree in a tree_map.  */
6764
6765 unsigned int
6766 tree_map_hash (const void *item)
6767 {
6768   return (((const struct tree_map *) item)->hash);
6769 }
6770
6771 /* Hash a from tree in a tree_decl_map.  */
6772
6773 unsigned int
6774 tree_decl_map_hash (const void *item)
6775 {
6776   return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6777 }
6778
6779 /* Return the initialization priority for DECL.  */
6780
6781 priority_type
6782 decl_init_priority_lookup (tree decl)
6783 {
6784   symtab_node *snode = symtab_node::get (decl);
6785
6786   if (!snode)
6787     return DEFAULT_INIT_PRIORITY;
6788   return
6789     snode->get_init_priority ();
6790 }
6791
6792 /* Return the finalization priority for DECL.  */
6793
6794 priority_type
6795 decl_fini_priority_lookup (tree decl)
6796 {
6797   cgraph_node *node = cgraph_node::get (decl);
6798
6799   if (!node)
6800     return DEFAULT_INIT_PRIORITY;
6801   return
6802     node->get_fini_priority ();
6803 }
6804
6805 /* Set the initialization priority for DECL to PRIORITY.  */
6806
6807 void
6808 decl_init_priority_insert (tree decl, priority_type priority)
6809 {
6810   struct symtab_node *snode;
6811
6812   if (priority == DEFAULT_INIT_PRIORITY)
6813     {
6814       snode = symtab_node::get (decl);
6815       if (!snode)
6816         return;
6817     }
6818   else if (VAR_P (decl))
6819     snode = varpool_node::get_create (decl);
6820   else
6821     snode = cgraph_node::get_create (decl);
6822   snode->set_init_priority (priority);
6823 }
6824
6825 /* Set the finalization priority for DECL to PRIORITY.  */
6826
6827 void
6828 decl_fini_priority_insert (tree decl, priority_type priority)
6829 {
6830   struct cgraph_node *node;
6831
6832   if (priority == DEFAULT_INIT_PRIORITY)
6833     {
6834       node = cgraph_node::get (decl);
6835       if (!node)
6836         return;
6837     }
6838   else
6839     node = cgraph_node::get_create (decl);
6840   node->set_fini_priority (priority);
6841 }
6842
6843 /* Print out the statistics for the DECL_DEBUG_EXPR hash table.  */
6844
6845 static void
6846 print_debug_expr_statistics (void)
6847 {
6848   fprintf (stderr, "DECL_DEBUG_EXPR  hash: size %ld, %ld elements, %f collisions\n",
6849            (long) debug_expr_for_decl->size (),
6850            (long) debug_expr_for_decl->elements (),
6851            debug_expr_for_decl->collisions ());
6852 }
6853
6854 /* Print out the statistics for the DECL_VALUE_EXPR hash table.  */
6855
6856 static void
6857 print_value_expr_statistics (void)
6858 {
6859   fprintf (stderr, "DECL_VALUE_EXPR  hash: size %ld, %ld elements, %f collisions\n",
6860            (long) value_expr_for_decl->size (),
6861            (long) value_expr_for_decl->elements (),
6862            value_expr_for_decl->collisions ());
6863 }
6864
6865 /* Lookup a debug expression for FROM, and return it if we find one.  */
6866
6867 tree
6868 decl_debug_expr_lookup (tree from)
6869 {
6870   struct tree_decl_map *h, in;
6871   in.base.from = from;
6872
6873   h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6874   if (h)
6875     return h->to;
6876   return NULL_TREE;
6877 }
6878
6879 /* Insert a mapping FROM->TO in the debug expression hashtable.  */
6880
6881 void
6882 decl_debug_expr_insert (tree from, tree to)
6883 {
6884   struct tree_decl_map *h;
6885
6886   h = ggc_alloc<tree_decl_map> ();
6887   h->base.from = from;
6888   h->to = to;
6889   *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6890 }
6891
6892 /* Lookup a value expression for FROM, and return it if we find one.  */
6893
6894 tree
6895 decl_value_expr_lookup (tree from)
6896 {
6897   struct tree_decl_map *h, in;
6898   in.base.from = from;
6899
6900   h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6901   if (h)
6902     return h->to;
6903   return NULL_TREE;
6904 }
6905
6906 /* Insert a mapping FROM->TO in the value expression hashtable.  */
6907
6908 void
6909 decl_value_expr_insert (tree from, tree to)
6910 {
6911   struct tree_decl_map *h;
6912
6913   h = ggc_alloc<tree_decl_map> ();
6914   h->base.from = from;
6915   h->to = to;
6916   *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6917 }
6918
6919 /* Lookup a vector of debug arguments for FROM, and return it if we
6920    find one.  */
6921
6922 vec<tree, va_gc> **
6923 decl_debug_args_lookup (tree from)
6924 {
6925   struct tree_vec_map *h, in;
6926
6927   if (!DECL_HAS_DEBUG_ARGS_P (from))
6928     return NULL;
6929   gcc_checking_assert (debug_args_for_decl != NULL);
6930   in.base.from = from;
6931   h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6932   if (h)
6933     return &h->to;
6934   return NULL;
6935 }
6936
6937 /* Insert a mapping FROM->empty vector of debug arguments in the value
6938    expression hashtable.  */
6939
6940 vec<tree, va_gc> **
6941 decl_debug_args_insert (tree from)
6942 {
6943   struct tree_vec_map *h;
6944   tree_vec_map **loc;
6945
6946   if (DECL_HAS_DEBUG_ARGS_P (from))
6947     return decl_debug_args_lookup (from);
6948   if (debug_args_for_decl == NULL)
6949     debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6950   h = ggc_alloc<tree_vec_map> ();
6951   h->base.from = from;
6952   h->to = NULL;
6953   loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6954   *loc = h;
6955   DECL_HAS_DEBUG_ARGS_P (from) = 1;
6956   return &h->to;
6957 }
6958
6959 /* Hashing of types so that we don't make duplicates.
6960    The entry point is `type_hash_canon'.  */
6961
6962 /* Generate the default hash code for TYPE.  This is designed for
6963    speed, rather than maximum entropy.  */
6964
6965 hashval_t
6966 type_hash_canon_hash (tree type)
6967 {
6968   inchash::hash hstate;
6969
6970   hstate.add_int (TREE_CODE (type));
6971
6972   if (TREE_TYPE (type))
6973     hstate.add_object (TYPE_HASH (TREE_TYPE (type)));
6974
6975   for (tree t = TYPE_ATTRIBUTES (type); t; t = TREE_CHAIN (t))
6976     /* Just the identifier is adequate to distinguish.  */
6977     hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (t)));
6978
6979   switch (TREE_CODE (type))
6980     {
6981     case METHOD_TYPE:
6982       hstate.add_object (TYPE_HASH (TYPE_METHOD_BASETYPE (type)));
6983       /* FALLTHROUGH. */
6984     case FUNCTION_TYPE:
6985       for (tree t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6986         if (TREE_VALUE (t) != error_mark_node)
6987           hstate.add_object (TYPE_HASH (TREE_VALUE (t)));
6988       break;
6989
6990     case OFFSET_TYPE:
6991       hstate.add_object (TYPE_HASH (TYPE_OFFSET_BASETYPE (type)));
6992       break;
6993
6994     case ARRAY_TYPE:
6995       {
6996         if (TYPE_DOMAIN (type))
6997           hstate.add_object (TYPE_HASH (TYPE_DOMAIN (type)));
6998         if (!AGGREGATE_TYPE_P (TREE_TYPE (type)))
6999           {
7000             unsigned typeless = TYPE_TYPELESS_STORAGE (type);
7001             hstate.add_object (typeless);
7002           }
7003       }
7004       break;
7005
7006     case INTEGER_TYPE:
7007       {
7008         tree t = TYPE_MAX_VALUE (type);
7009         if (!t)
7010           t = TYPE_MIN_VALUE (type);
7011         for (int i = 0; i < TREE_INT_CST_NUNITS (t); i++)
7012           hstate.add_object (TREE_INT_CST_ELT (t, i));
7013         break;
7014       }
7015       
7016     case REAL_TYPE:
7017     case FIXED_POINT_TYPE:
7018       {
7019         unsigned prec = TYPE_PRECISION (type);
7020         hstate.add_object (prec);
7021         break;
7022       }
7023
7024     case VECTOR_TYPE:
7025       {
7026         unsigned nunits = TYPE_VECTOR_SUBPARTS (type);
7027         hstate.add_object (nunits);
7028         break;
7029       }
7030
7031     default:
7032       break;
7033     }
7034
7035   return hstate.end ();
7036 }
7037
7038 /* These are the Hashtable callback functions.  */
7039
7040 /* Returns true iff the types are equivalent.  */
7041
7042 bool
7043 type_cache_hasher::equal (type_hash *a, type_hash *b)
7044 {
7045   /* First test the things that are the same for all types.  */
7046   if (a->hash != b->hash
7047       || TREE_CODE (a->type) != TREE_CODE (b->type)
7048       || TREE_TYPE (a->type) != TREE_TYPE (b->type)
7049       || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
7050                                  TYPE_ATTRIBUTES (b->type))
7051       || (TREE_CODE (a->type) != COMPLEX_TYPE
7052           && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
7053     return 0;
7054
7055   /* Be careful about comparing arrays before and after the element type
7056      has been completed; don't compare TYPE_ALIGN unless both types are
7057      complete.  */
7058   if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
7059       && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
7060           || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
7061     return 0;
7062
7063   switch (TREE_CODE (a->type))
7064     {
7065     case VOID_TYPE:
7066     case COMPLEX_TYPE:
7067     case POINTER_TYPE:
7068     case REFERENCE_TYPE:
7069     case NULLPTR_TYPE:
7070       return 1;
7071
7072     case VECTOR_TYPE:
7073       return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
7074
7075     case ENUMERAL_TYPE:
7076       if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
7077           && !(TYPE_VALUES (a->type)
7078                && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
7079                && TYPE_VALUES (b->type)
7080                && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
7081                && type_list_equal (TYPE_VALUES (a->type),
7082                                    TYPE_VALUES (b->type))))
7083         return 0;
7084
7085       /* fall through */
7086
7087     case INTEGER_TYPE:
7088     case REAL_TYPE:
7089     case BOOLEAN_TYPE:
7090       if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
7091         return false;
7092       return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
7093                || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
7094                                       TYPE_MAX_VALUE (b->type)))
7095               && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
7096                   || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
7097                                          TYPE_MIN_VALUE (b->type))));
7098
7099     case FIXED_POINT_TYPE:
7100       return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
7101
7102     case OFFSET_TYPE:
7103       return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
7104
7105     case METHOD_TYPE:
7106       if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
7107           && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7108               || (TYPE_ARG_TYPES (a->type)
7109                   && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7110                   && TYPE_ARG_TYPES (b->type)
7111                   && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7112                   && type_list_equal (TYPE_ARG_TYPES (a->type),
7113                                       TYPE_ARG_TYPES (b->type)))))
7114         break;
7115       return 0;
7116     case ARRAY_TYPE:
7117       /* Don't compare TYPE_TYPELESS_STORAGE flag on aggregates,
7118          where the flag should be inherited from the element type
7119          and can change after ARRAY_TYPEs are created; on non-aggregates
7120          compare it and hash it, scalars will never have that flag set
7121          and we need to differentiate between arrays created by different
7122          front-ends or middle-end created arrays.  */
7123       return (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
7124               && (AGGREGATE_TYPE_P (TREE_TYPE (a->type))
7125                   || (TYPE_TYPELESS_STORAGE (a->type)
7126                       == TYPE_TYPELESS_STORAGE (b->type))));
7127
7128     case RECORD_TYPE:
7129     case UNION_TYPE:
7130     case QUAL_UNION_TYPE:
7131       return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
7132               || (TYPE_FIELDS (a->type)
7133                   && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
7134                   && TYPE_FIELDS (b->type)
7135                   && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
7136                   && type_list_equal (TYPE_FIELDS (a->type),
7137                                       TYPE_FIELDS (b->type))));
7138
7139     case FUNCTION_TYPE:
7140       if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7141           || (TYPE_ARG_TYPES (a->type)
7142               && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7143               && TYPE_ARG_TYPES (b->type)
7144               && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7145               && type_list_equal (TYPE_ARG_TYPES (a->type),
7146                                   TYPE_ARG_TYPES (b->type))))
7147         break;
7148       return 0;
7149
7150     default:
7151       return 0;
7152     }
7153
7154   if (lang_hooks.types.type_hash_eq != NULL)
7155     return lang_hooks.types.type_hash_eq (a->type, b->type);
7156
7157   return 1;
7158 }
7159
7160 /* Given TYPE, and HASHCODE its hash code, return the canonical
7161    object for an identical type if one already exists.
7162    Otherwise, return TYPE, and record it as the canonical object.
7163
7164    To use this function, first create a type of the sort you want.
7165    Then compute its hash code from the fields of the type that
7166    make it different from other similar types.
7167    Then call this function and use the value.  */
7168
7169 tree
7170 type_hash_canon (unsigned int hashcode, tree type)
7171 {
7172   type_hash in;
7173   type_hash **loc;
7174
7175   /* The hash table only contains main variants, so ensure that's what we're
7176      being passed.  */
7177   gcc_assert (TYPE_MAIN_VARIANT (type) == type);
7178
7179   /* The TYPE_ALIGN field of a type is set by layout_type(), so we
7180      must call that routine before comparing TYPE_ALIGNs.  */
7181   layout_type (type);
7182
7183   in.hash = hashcode;
7184   in.type = type;
7185
7186   loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
7187   if (*loc)
7188     {
7189       tree t1 = ((type_hash *) *loc)->type;
7190       gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
7191       free_node (type);
7192       return t1;
7193     }
7194   else
7195     {
7196       struct type_hash *h;
7197
7198       h = ggc_alloc<type_hash> ();
7199       h->hash = hashcode;
7200       h->type = type;
7201       *loc = h;
7202
7203       return type;
7204     }
7205 }
7206
7207 static void
7208 print_type_hash_statistics (void)
7209 {
7210   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
7211            (long) type_hash_table->size (),
7212            (long) type_hash_table->elements (),
7213            type_hash_table->collisions ());
7214 }
7215
7216 /* Given two lists of attributes, return true if list l2 is
7217    equivalent to l1.  */
7218
7219 int
7220 attribute_list_equal (const_tree l1, const_tree l2)
7221 {
7222   if (l1 == l2)
7223     return 1;
7224
7225   return attribute_list_contained (l1, l2)
7226          && attribute_list_contained (l2, l1);
7227 }
7228
7229 /* Given two lists of attributes, return true if list L2 is
7230    completely contained within L1.  */
7231 /* ??? This would be faster if attribute names were stored in a canonicalized
7232    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
7233    must be used to show these elements are equivalent (which they are).  */
7234 /* ??? It's not clear that attributes with arguments will always be handled
7235    correctly.  */
7236
7237 int
7238 attribute_list_contained (const_tree l1, const_tree l2)
7239 {
7240   const_tree t1, t2;
7241
7242   /* First check the obvious, maybe the lists are identical.  */
7243   if (l1 == l2)
7244     return 1;
7245
7246   /* Maybe the lists are similar.  */
7247   for (t1 = l1, t2 = l2;
7248        t1 != 0 && t2 != 0
7249         && get_attribute_name (t1) == get_attribute_name (t2)
7250         && TREE_VALUE (t1) == TREE_VALUE (t2);
7251        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7252     ;
7253
7254   /* Maybe the lists are equal.  */
7255   if (t1 == 0 && t2 == 0)
7256     return 1;
7257
7258   for (; t2 != 0; t2 = TREE_CHAIN (t2))
7259     {
7260       const_tree attr;
7261       /* This CONST_CAST is okay because lookup_attribute does not
7262          modify its argument and the return value is assigned to a
7263          const_tree.  */
7264       for (attr = lookup_ident_attribute (get_attribute_name (t2),
7265                                           CONST_CAST_TREE (l1));
7266            attr != NULL_TREE && !attribute_value_equal (t2, attr);
7267            attr = lookup_ident_attribute (get_attribute_name (t2),
7268                                           TREE_CHAIN (attr)))
7269         ;
7270
7271       if (attr == NULL_TREE)
7272         return 0;
7273     }
7274
7275   return 1;
7276 }
7277
7278 /* Given two lists of types
7279    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7280    return 1 if the lists contain the same types in the same order.
7281    Also, the TREE_PURPOSEs must match.  */
7282
7283 int
7284 type_list_equal (const_tree l1, const_tree l2)
7285 {
7286   const_tree t1, t2;
7287
7288   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7289     if (TREE_VALUE (t1) != TREE_VALUE (t2)
7290         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7291             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7292                   && (TREE_TYPE (TREE_PURPOSE (t1))
7293                       == TREE_TYPE (TREE_PURPOSE (t2))))))
7294       return 0;
7295
7296   return t1 == t2;
7297 }
7298
7299 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7300    given by TYPE.  If the argument list accepts variable arguments,
7301    then this function counts only the ordinary arguments.  */
7302
7303 int
7304 type_num_arguments (const_tree type)
7305 {
7306   int i = 0;
7307   tree t;
7308
7309   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7310     /* If the function does not take a variable number of arguments,
7311        the last element in the list will have type `void'.  */
7312     if (VOID_TYPE_P (TREE_VALUE (t)))
7313       break;
7314     else
7315       ++i;
7316
7317   return i;
7318 }
7319
7320 /* Nonzero if integer constants T1 and T2
7321    represent the same constant value.  */
7322
7323 int
7324 tree_int_cst_equal (const_tree t1, const_tree t2)
7325 {
7326   if (t1 == t2)
7327     return 1;
7328
7329   if (t1 == 0 || t2 == 0)
7330     return 0;
7331
7332   if (TREE_CODE (t1) == INTEGER_CST
7333       && TREE_CODE (t2) == INTEGER_CST
7334       && wi::to_widest (t1) == wi::to_widest (t2))
7335     return 1;
7336
7337   return 0;
7338 }
7339
7340 /* Return true if T is an INTEGER_CST whose numerical value (extended
7341    according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  */
7342
7343 bool
7344 tree_fits_shwi_p (const_tree t)
7345 {
7346   return (t != NULL_TREE
7347           && TREE_CODE (t) == INTEGER_CST
7348           && wi::fits_shwi_p (wi::to_widest (t)));
7349 }
7350
7351 /* Return true if T is an INTEGER_CST whose numerical value (extended
7352    according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  */
7353
7354 bool
7355 tree_fits_uhwi_p (const_tree t)
7356 {
7357   return (t != NULL_TREE
7358           && TREE_CODE (t) == INTEGER_CST
7359           && wi::fits_uhwi_p (wi::to_widest (t)));
7360 }
7361
7362 /* T is an INTEGER_CST whose numerical value (extended according to
7363    TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  Return that
7364    HOST_WIDE_INT.  */
7365
7366 HOST_WIDE_INT
7367 tree_to_shwi (const_tree t)
7368 {
7369   gcc_assert (tree_fits_shwi_p (t));
7370   return TREE_INT_CST_LOW (t);
7371 }
7372
7373 /* T is an INTEGER_CST whose numerical value (extended according to
7374    TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  Return that
7375    HOST_WIDE_INT.  */
7376
7377 unsigned HOST_WIDE_INT
7378 tree_to_uhwi (const_tree t)
7379 {
7380   gcc_assert (tree_fits_uhwi_p (t));
7381   return TREE_INT_CST_LOW (t);
7382 }
7383
7384 /* Return the most significant (sign) bit of T.  */
7385
7386 int
7387 tree_int_cst_sign_bit (const_tree t)
7388 {
7389   unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7390
7391   return wi::extract_uhwi (t, bitno, 1);
7392 }
7393
7394 /* Return an indication of the sign of the integer constant T.
7395    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7396    Note that -1 will never be returned if T's type is unsigned.  */
7397
7398 int
7399 tree_int_cst_sgn (const_tree t)
7400 {
7401   if (wi::eq_p (t, 0))
7402     return 0;
7403   else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7404     return 1;
7405   else if (wi::neg_p (t))
7406     return -1;
7407   else
7408     return 1;
7409 }
7410
7411 /* Return the minimum number of bits needed to represent VALUE in a
7412    signed or unsigned type, UNSIGNEDP says which.  */
7413
7414 unsigned int
7415 tree_int_cst_min_precision (tree value, signop sgn)
7416 {
7417   /* If the value is negative, compute its negative minus 1.  The latter
7418      adjustment is because the absolute value of the largest negative value
7419      is one larger than the largest positive value.  This is equivalent to
7420      a bit-wise negation, so use that operation instead.  */
7421
7422   if (tree_int_cst_sgn (value) < 0)
7423     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7424
7425   /* Return the number of bits needed, taking into account the fact
7426      that we need one more bit for a signed than unsigned type.
7427      If value is 0 or -1, the minimum precision is 1 no matter
7428      whether unsignedp is true or false.  */
7429
7430   if (integer_zerop (value))
7431     return 1;
7432   else
7433     return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7434 }
7435
7436 /* Return truthvalue of whether T1 is the same tree structure as T2.
7437    Return 1 if they are the same.
7438    Return 0 if they are understandably different.
7439    Return -1 if either contains tree structure not understood by
7440    this function.  */
7441
7442 int
7443 simple_cst_equal (const_tree t1, const_tree t2)
7444 {
7445   enum tree_code code1, code2;
7446   int cmp;
7447   int i;
7448
7449   if (t1 == t2)
7450     return 1;
7451   if (t1 == 0 || t2 == 0)
7452     return 0;
7453
7454   code1 = TREE_CODE (t1);
7455   code2 = TREE_CODE (t2);
7456
7457   if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7458     {
7459       if (CONVERT_EXPR_CODE_P (code2)
7460           || code2 == NON_LVALUE_EXPR)
7461         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7462       else
7463         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7464     }
7465
7466   else if (CONVERT_EXPR_CODE_P (code2)
7467            || code2 == NON_LVALUE_EXPR)
7468     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7469
7470   if (code1 != code2)
7471     return 0;
7472
7473   switch (code1)
7474     {
7475     case INTEGER_CST:
7476       return wi::to_widest (t1) == wi::to_widest (t2);
7477
7478     case REAL_CST:
7479       return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
7480
7481     case FIXED_CST:
7482       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7483
7484     case STRING_CST:
7485       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7486               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7487                          TREE_STRING_LENGTH (t1)));
7488
7489     case CONSTRUCTOR:
7490       {
7491         unsigned HOST_WIDE_INT idx;
7492         vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7493         vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7494
7495         if (vec_safe_length (v1) != vec_safe_length (v2))
7496           return false;
7497
7498         for (idx = 0; idx < vec_safe_length (v1); ++idx)
7499           /* ??? Should we handle also fields here? */
7500           if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7501             return false;
7502         return true;
7503       }
7504
7505     case SAVE_EXPR:
7506       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7507
7508     case CALL_EXPR:
7509       cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7510       if (cmp <= 0)
7511         return cmp;
7512       if (call_expr_nargs (t1) != call_expr_nargs (t2))
7513         return 0;
7514       {
7515         const_tree arg1, arg2;
7516         const_call_expr_arg_iterator iter1, iter2;
7517         for (arg1 = first_const_call_expr_arg (t1, &iter1),
7518                arg2 = first_const_call_expr_arg (t2, &iter2);
7519              arg1 && arg2;
7520              arg1 = next_const_call_expr_arg (&iter1),
7521                arg2 = next_const_call_expr_arg (&iter2))
7522           {
7523             cmp = simple_cst_equal (arg1, arg2);
7524             if (cmp <= 0)
7525               return cmp;
7526           }
7527         return arg1 == arg2;
7528       }
7529
7530     case TARGET_EXPR:
7531       /* Special case: if either target is an unallocated VAR_DECL,
7532          it means that it's going to be unified with whatever the
7533          TARGET_EXPR is really supposed to initialize, so treat it
7534          as being equivalent to anything.  */
7535       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7536            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7537            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7538           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7539               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7540               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7541         cmp = 1;
7542       else
7543         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7544
7545       if (cmp <= 0)
7546         return cmp;
7547
7548       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7549
7550     case WITH_CLEANUP_EXPR:
7551       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7552       if (cmp <= 0)
7553         return cmp;
7554
7555       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7556
7557     case COMPONENT_REF:
7558       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7559         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7560
7561       return 0;
7562
7563     case VAR_DECL:
7564     case PARM_DECL:
7565     case CONST_DECL:
7566     case FUNCTION_DECL:
7567       return 0;
7568
7569     default:
7570       break;
7571     }
7572
7573   /* This general rule works for most tree codes.  All exceptions should be
7574      handled above.  If this is a language-specific tree code, we can't
7575      trust what might be in the operand, so say we don't know
7576      the situation.  */
7577   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7578     return -1;
7579
7580   switch (TREE_CODE_CLASS (code1))
7581     {
7582     case tcc_unary:
7583     case tcc_binary:
7584     case tcc_comparison:
7585     case tcc_expression:
7586     case tcc_reference:
7587     case tcc_statement:
7588       cmp = 1;
7589       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7590         {
7591           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7592           if (cmp <= 0)
7593             return cmp;
7594         }
7595
7596       return cmp;
7597
7598     default:
7599       return -1;
7600     }
7601 }
7602
7603 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7604    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7605    than U, respectively.  */
7606
7607 int
7608 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7609 {
7610   if (tree_int_cst_sgn (t) < 0)
7611     return -1;
7612   else if (!tree_fits_uhwi_p (t))
7613     return 1;
7614   else if (TREE_INT_CST_LOW (t) == u)
7615     return 0;
7616   else if (TREE_INT_CST_LOW (t) < u)
7617     return -1;
7618   else
7619     return 1;
7620 }
7621
7622 /* Return true if SIZE represents a constant size that is in bounds of
7623    what the middle-end and the backend accepts (covering not more than
7624    half of the address-space).  */
7625
7626 bool
7627 valid_constant_size_p (const_tree size)
7628 {
7629   if (! tree_fits_uhwi_p (size)
7630       || TREE_OVERFLOW (size)
7631       || tree_int_cst_sign_bit (size) != 0)
7632     return false;
7633   return true;
7634 }
7635
7636 /* Return the precision of the type, or for a complex or vector type the
7637    precision of the type of its elements.  */
7638
7639 unsigned int
7640 element_precision (const_tree type)
7641 {
7642   if (!TYPE_P (type))
7643     type = TREE_TYPE (type);
7644   enum tree_code code = TREE_CODE (type);
7645   if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7646     type = TREE_TYPE (type);
7647
7648   return TYPE_PRECISION (type);
7649 }
7650
7651 /* Return true if CODE represents an associative tree code.  Otherwise
7652    return false.  */
7653 bool
7654 associative_tree_code (enum tree_code code)
7655 {
7656   switch (code)
7657     {
7658     case BIT_IOR_EXPR:
7659     case BIT_AND_EXPR:
7660     case BIT_XOR_EXPR:
7661     case PLUS_EXPR:
7662     case MULT_EXPR:
7663     case MIN_EXPR:
7664     case MAX_EXPR:
7665       return true;
7666
7667     default:
7668       break;
7669     }
7670   return false;
7671 }
7672
7673 /* Return true if CODE represents a commutative tree code.  Otherwise
7674    return false.  */
7675 bool
7676 commutative_tree_code (enum tree_code code)
7677 {
7678   switch (code)
7679     {
7680     case PLUS_EXPR:
7681     case MULT_EXPR:
7682     case MULT_HIGHPART_EXPR:
7683     case MIN_EXPR:
7684     case MAX_EXPR:
7685     case BIT_IOR_EXPR:
7686     case BIT_XOR_EXPR:
7687     case BIT_AND_EXPR:
7688     case NE_EXPR:
7689     case EQ_EXPR:
7690     case UNORDERED_EXPR:
7691     case ORDERED_EXPR:
7692     case UNEQ_EXPR:
7693     case LTGT_EXPR:
7694     case TRUTH_AND_EXPR:
7695     case TRUTH_XOR_EXPR:
7696     case TRUTH_OR_EXPR:
7697     case WIDEN_MULT_EXPR:
7698     case VEC_WIDEN_MULT_HI_EXPR:
7699     case VEC_WIDEN_MULT_LO_EXPR:
7700     case VEC_WIDEN_MULT_EVEN_EXPR:
7701     case VEC_WIDEN_MULT_ODD_EXPR:
7702       return true;
7703
7704     default:
7705       break;
7706     }
7707   return false;
7708 }
7709
7710 /* Return true if CODE represents a ternary tree code for which the
7711    first two operands are commutative.  Otherwise return false.  */
7712 bool
7713 commutative_ternary_tree_code (enum tree_code code)
7714 {
7715   switch (code)
7716     {
7717     case WIDEN_MULT_PLUS_EXPR:
7718     case WIDEN_MULT_MINUS_EXPR:
7719     case DOT_PROD_EXPR:
7720     case FMA_EXPR:
7721       return true;
7722
7723     default:
7724       break;
7725     }
7726   return false;
7727 }
7728
7729 /* Returns true if CODE can overflow.  */
7730
7731 bool
7732 operation_can_overflow (enum tree_code code)
7733 {
7734   switch (code)
7735     {
7736     case PLUS_EXPR:
7737     case MINUS_EXPR:
7738     case MULT_EXPR:
7739     case LSHIFT_EXPR:
7740       /* Can overflow in various ways.  */
7741       return true;
7742     case TRUNC_DIV_EXPR:
7743     case EXACT_DIV_EXPR:
7744     case FLOOR_DIV_EXPR:
7745     case CEIL_DIV_EXPR:
7746       /* For INT_MIN / -1.  */
7747       return true;
7748     case NEGATE_EXPR:
7749     case ABS_EXPR:
7750       /* For -INT_MIN.  */
7751       return true;
7752     default:
7753       /* These operators cannot overflow.  */
7754       return false;
7755     }
7756 }
7757
7758 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7759    ftrapv doesn't generate trapping insns for CODE.  */
7760
7761 bool
7762 operation_no_trapping_overflow (tree type, enum tree_code code)
7763 {
7764   gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7765
7766   /* We don't generate instructions that trap on overflow for complex or vector
7767      types.  */
7768   if (!INTEGRAL_TYPE_P (type))
7769     return true;
7770
7771   if (!TYPE_OVERFLOW_TRAPS (type))
7772     return true;
7773
7774   switch (code)
7775     {
7776     case PLUS_EXPR:
7777     case MINUS_EXPR:
7778     case MULT_EXPR:
7779     case NEGATE_EXPR:
7780     case ABS_EXPR:
7781       /* These operators can overflow, and -ftrapv generates trapping code for
7782          these.  */
7783       return false;
7784     case TRUNC_DIV_EXPR:
7785     case EXACT_DIV_EXPR:
7786     case FLOOR_DIV_EXPR:
7787     case CEIL_DIV_EXPR:
7788     case LSHIFT_EXPR:
7789       /* These operators can overflow, but -ftrapv does not generate trapping
7790          code for these.  */
7791       return true;
7792     default:
7793       /* These operators cannot overflow.  */
7794       return true;
7795     }
7796 }
7797
7798 namespace inchash
7799 {
7800
7801 /* Generate a hash value for an expression.  This can be used iteratively
7802    by passing a previous result as the HSTATE argument.
7803
7804    This function is intended to produce the same hash for expressions which
7805    would compare equal using operand_equal_p.  */
7806 void
7807 add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
7808 {
7809   int i;
7810   enum tree_code code;
7811   enum tree_code_class tclass;
7812
7813   if (t == NULL_TREE || t == error_mark_node)
7814     {
7815       hstate.merge_hash (0);
7816       return;
7817     }
7818
7819   if (!(flags & OEP_ADDRESS_OF))
7820     STRIP_NOPS (t);
7821
7822   code = TREE_CODE (t);
7823
7824   switch (code)
7825     {
7826     /* Alas, constants aren't shared, so we can't rely on pointer
7827        identity.  */
7828     case VOID_CST:
7829       hstate.merge_hash (0);
7830       return;
7831     case INTEGER_CST:
7832       gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7833       for (i = 0; i < TREE_INT_CST_EXT_NUNITS (t); i++)
7834         hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
7835       return;
7836     case REAL_CST:
7837       {
7838         unsigned int val2;
7839         if (!HONOR_SIGNED_ZEROS (t) && real_zerop (t))
7840           val2 = rvc_zero;
7841         else
7842           val2 = real_hash (TREE_REAL_CST_PTR (t));
7843         hstate.merge_hash (val2);
7844         return;
7845       }
7846     case FIXED_CST:
7847       {
7848         unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7849         hstate.merge_hash (val2);
7850         return;
7851       }
7852     case STRING_CST:
7853       hstate.add ((const void *) TREE_STRING_POINTER (t),
7854                   TREE_STRING_LENGTH (t));
7855       return;
7856     case COMPLEX_CST:
7857       inchash::add_expr (TREE_REALPART (t), hstate, flags);
7858       inchash::add_expr (TREE_IMAGPART (t), hstate, flags);
7859       return;
7860     case VECTOR_CST:
7861       {
7862         unsigned i;
7863         for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7864           inchash::add_expr (VECTOR_CST_ELT (t, i), hstate, flags);
7865         return;
7866       }
7867     case SSA_NAME:
7868       /* We can just compare by pointer.  */
7869       hstate.add_wide_int (SSA_NAME_VERSION (t));
7870       return;
7871     case PLACEHOLDER_EXPR:
7872       /* The node itself doesn't matter.  */
7873       return;
7874     case BLOCK:
7875     case OMP_CLAUSE:
7876       /* Ignore.  */
7877       return;
7878     case TREE_LIST:
7879       /* A list of expressions, for a CALL_EXPR or as the elements of a
7880          VECTOR_CST.  */
7881       for (; t; t = TREE_CHAIN (t))
7882         inchash::add_expr (TREE_VALUE (t), hstate, flags);
7883       return;
7884     case CONSTRUCTOR:
7885       {
7886         unsigned HOST_WIDE_INT idx;
7887         tree field, value;
7888         flags &= ~OEP_ADDRESS_OF;
7889         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7890           {
7891             inchash::add_expr (field, hstate, flags);
7892             inchash::add_expr (value, hstate, flags);
7893           }
7894         return;
7895       }
7896     case STATEMENT_LIST:
7897       {
7898         tree_stmt_iterator i;
7899         for (i = tsi_start (CONST_CAST_TREE (t));
7900              !tsi_end_p (i); tsi_next (&i))
7901           inchash::add_expr (tsi_stmt (i), hstate, flags);
7902         return;
7903       }
7904     case TREE_VEC:
7905       for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
7906         inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags);
7907       return;
7908     case FUNCTION_DECL:
7909       /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7910          Otherwise nodes that compare equal according to operand_equal_p might
7911          get different hash codes.  However, don't do this for machine specific
7912          or front end builtins, since the function code is overloaded in those
7913          cases.  */
7914       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7915           && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7916         {
7917           t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7918           code = TREE_CODE (t);
7919         }
7920       /* FALL THROUGH */
7921     default:
7922       tclass = TREE_CODE_CLASS (code);
7923
7924       if (tclass == tcc_declaration)
7925         {
7926           /* DECL's have a unique ID */
7927           hstate.add_wide_int (DECL_UID (t));
7928         }
7929       else if (tclass == tcc_comparison && !commutative_tree_code (code))
7930         {
7931           /* For comparisons that can be swapped, use the lower
7932              tree code.  */
7933           enum tree_code ccode = swap_tree_comparison (code);
7934           if (code < ccode)
7935             ccode = code;
7936           hstate.add_object (ccode);
7937           inchash::add_expr (TREE_OPERAND (t, ccode != code), hstate, flags);
7938           inchash::add_expr (TREE_OPERAND (t, ccode == code), hstate, flags);
7939         }
7940       else if (CONVERT_EXPR_CODE_P (code))
7941         {
7942           /* NOP_EXPR and CONVERT_EXPR are considered equal by
7943              operand_equal_p.  */
7944           enum tree_code ccode = NOP_EXPR;
7945           hstate.add_object (ccode);
7946
7947           /* Don't hash the type, that can lead to having nodes which
7948              compare equal according to operand_equal_p, but which
7949              have different hash codes.  Make sure to include signedness
7950              in the hash computation.  */
7951           hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7952           inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
7953         }
7954       /* For OEP_ADDRESS_OF, hash MEM_EXPR[&decl, 0] the same as decl.  */
7955       else if (code == MEM_REF
7956                && (flags & OEP_ADDRESS_OF) != 0
7957                && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR
7958                && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0))
7959                && integer_zerop (TREE_OPERAND (t, 1)))
7960         inchash::add_expr (TREE_OPERAND (TREE_OPERAND (t, 0), 0),
7961                            hstate, flags);
7962       /* Don't ICE on FE specific trees, or their arguments etc.
7963          during operand_equal_p hash verification.  */
7964       else if (!IS_EXPR_CODE_CLASS (tclass))
7965         gcc_assert (flags & OEP_HASH_CHECK);
7966       else
7967         {
7968           unsigned int sflags = flags;
7969
7970           hstate.add_object (code);
7971
7972           switch (code)
7973             {
7974             case ADDR_EXPR:
7975               gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7976               flags |= OEP_ADDRESS_OF;
7977               sflags = flags;
7978               break;
7979
7980             case INDIRECT_REF:
7981             case MEM_REF:
7982             case TARGET_MEM_REF:
7983               flags &= ~OEP_ADDRESS_OF;
7984               sflags = flags;
7985               break;
7986
7987             case ARRAY_REF:
7988             case ARRAY_RANGE_REF:
7989             case COMPONENT_REF:
7990             case BIT_FIELD_REF:
7991               sflags &= ~OEP_ADDRESS_OF;
7992               break;
7993
7994             case COND_EXPR:
7995               flags &= ~OEP_ADDRESS_OF;
7996               break;
7997
7998             case FMA_EXPR:
7999             case WIDEN_MULT_PLUS_EXPR:
8000             case WIDEN_MULT_MINUS_EXPR:
8001               {
8002                 /* The multiplication operands are commutative.  */
8003                 inchash::hash one, two;
8004                 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
8005                 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
8006                 hstate.add_commutative (one, two);
8007                 inchash::add_expr (TREE_OPERAND (t, 2), two, flags);
8008                 return;
8009               }
8010
8011             case CALL_EXPR:
8012               if (CALL_EXPR_FN (t) == NULL_TREE)
8013                 hstate.add_int (CALL_EXPR_IFN (t));
8014               break;
8015
8016             case TARGET_EXPR:
8017               /* For TARGET_EXPR, just hash on the TARGET_EXPR_SLOT.
8018                  Usually different TARGET_EXPRs just should use
8019                  different temporaries in their slots.  */
8020               inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags);
8021               return;
8022
8023             default:
8024               break;
8025             }
8026
8027           /* Don't hash the type, that can lead to having nodes which
8028              compare equal according to operand_equal_p, but which
8029              have different hash codes.  */
8030           if (code == NON_LVALUE_EXPR)
8031             {
8032               /* Make sure to include signness in the hash computation.  */
8033               hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
8034               inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
8035             }
8036
8037           else if (commutative_tree_code (code))
8038             {
8039               /* It's a commutative expression.  We want to hash it the same
8040                  however it appears.  We do this by first hashing both operands
8041                  and then rehashing based on the order of their independent
8042                  hashes.  */
8043               inchash::hash one, two;
8044               inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
8045               inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
8046               hstate.add_commutative (one, two);
8047             }
8048           else
8049             for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
8050               inchash::add_expr (TREE_OPERAND (t, i), hstate,
8051                                  i == 0 ? flags : sflags);
8052         }
8053       return;
8054     }
8055 }
8056
8057 }
8058
8059 /* Constructors for pointer, array and function types.
8060    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
8061    constructed by language-dependent code, not here.)  */
8062
8063 /* Construct, lay out and return the type of pointers to TO_TYPE with
8064    mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
8065    reference all of memory. If such a type has already been
8066    constructed, reuse it.  */
8067
8068 tree
8069 build_pointer_type_for_mode (tree to_type, machine_mode mode,
8070                              bool can_alias_all)
8071 {
8072   tree t;
8073   bool could_alias = can_alias_all;
8074
8075   if (to_type == error_mark_node)
8076     return error_mark_node;
8077
8078   /* If the pointed-to type has the may_alias attribute set, force
8079      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
8080   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8081     can_alias_all = true;
8082
8083   /* In some cases, languages will have things that aren't a POINTER_TYPE
8084      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
8085      In that case, return that type without regard to the rest of our
8086      operands.
8087
8088      ??? This is a kludge, but consistent with the way this function has
8089      always operated and there doesn't seem to be a good way to avoid this
8090      at the moment.  */
8091   if (TYPE_POINTER_TO (to_type) != 0
8092       && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
8093     return TYPE_POINTER_TO (to_type);
8094
8095   /* First, if we already have a type for pointers to TO_TYPE and it's
8096      the proper mode, use it.  */
8097   for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
8098     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8099       return t;
8100
8101   t = make_node (POINTER_TYPE);
8102
8103   TREE_TYPE (t) = to_type;
8104   SET_TYPE_MODE (t, mode);
8105   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8106   TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
8107   TYPE_POINTER_TO (to_type) = t;
8108
8109   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
8110   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8111     SET_TYPE_STRUCTURAL_EQUALITY (t);
8112   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8113     TYPE_CANONICAL (t)
8114       = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
8115                                      mode, false);
8116
8117   /* Lay out the type.  This function has many callers that are concerned
8118      with expression-construction, and this simplifies them all.  */
8119   layout_type (t);
8120
8121   return t;
8122 }
8123
8124 /* By default build pointers in ptr_mode.  */
8125
8126 tree
8127 build_pointer_type (tree to_type)
8128 {
8129   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8130                                               : TYPE_ADDR_SPACE (to_type);
8131   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8132   return build_pointer_type_for_mode (to_type, pointer_mode, false);
8133 }
8134
8135 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
8136
8137 tree
8138 build_reference_type_for_mode (tree to_type, machine_mode mode,
8139                                bool can_alias_all)
8140 {
8141   tree t;
8142   bool could_alias = can_alias_all;
8143
8144   if (to_type == error_mark_node)
8145     return error_mark_node;
8146
8147   /* If the pointed-to type has the may_alias attribute set, force
8148      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
8149   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8150     can_alias_all = true;
8151
8152   /* In some cases, languages will have things that aren't a REFERENCE_TYPE
8153      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
8154      In that case, return that type without regard to the rest of our
8155      operands.
8156
8157      ??? This is a kludge, but consistent with the way this function has
8158      always operated and there doesn't seem to be a good way to avoid this
8159      at the moment.  */
8160   if (TYPE_REFERENCE_TO (to_type) != 0
8161       && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
8162     return TYPE_REFERENCE_TO (to_type);
8163
8164   /* First, if we already have a type for pointers to TO_TYPE and it's
8165      the proper mode, use it.  */
8166   for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
8167     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8168       return t;
8169
8170   t = make_node (REFERENCE_TYPE);
8171
8172   TREE_TYPE (t) = to_type;
8173   SET_TYPE_MODE (t, mode);
8174   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8175   TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
8176   TYPE_REFERENCE_TO (to_type) = t;
8177
8178   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
8179   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8180     SET_TYPE_STRUCTURAL_EQUALITY (t);
8181   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8182     TYPE_CANONICAL (t)
8183       = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
8184                                        mode, false);
8185
8186   layout_type (t);
8187
8188   return t;
8189 }
8190
8191
8192 /* Build the node for the type of references-to-TO_TYPE by default
8193    in ptr_mode.  */
8194
8195 tree
8196 build_reference_type (tree to_type)
8197 {
8198   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8199                                               : TYPE_ADDR_SPACE (to_type);
8200   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8201   return build_reference_type_for_mode (to_type, pointer_mode, false);
8202 }
8203
8204 #define MAX_INT_CACHED_PREC \
8205   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8206 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
8207
8208 /* Builds a signed or unsigned integer type of precision PRECISION.
8209    Used for C bitfields whose precision does not match that of
8210    built-in target types.  */
8211 tree
8212 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
8213                                 int unsignedp)
8214 {
8215   tree itype, ret;
8216
8217   if (unsignedp)
8218     unsignedp = MAX_INT_CACHED_PREC + 1;
8219     
8220   if (precision <= MAX_INT_CACHED_PREC)
8221     {
8222       itype = nonstandard_integer_type_cache[precision + unsignedp];
8223       if (itype)
8224         return itype;
8225     }
8226
8227   itype = make_node (INTEGER_TYPE);
8228   TYPE_PRECISION (itype) = precision;
8229
8230   if (unsignedp)
8231     fixup_unsigned_type (itype);
8232   else
8233     fixup_signed_type (itype);
8234
8235   ret = itype;
8236   if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
8237     ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
8238   if (precision <= MAX_INT_CACHED_PREC)
8239     nonstandard_integer_type_cache[precision + unsignedp] = ret;
8240
8241   return ret;
8242 }
8243
8244 #define MAX_BOOL_CACHED_PREC \
8245   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8246 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
8247
8248 /* Builds a boolean type of precision PRECISION.
8249    Used for boolean vectors to choose proper vector element size.  */
8250 tree
8251 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
8252 {
8253   tree type;
8254
8255   if (precision <= MAX_BOOL_CACHED_PREC)
8256     {
8257       type = nonstandard_boolean_type_cache[precision];
8258       if (type)
8259         return type;
8260     }
8261
8262   type = make_node (BOOLEAN_TYPE);
8263   TYPE_PRECISION (type) = precision;
8264   fixup_signed_type (type);
8265
8266   if (precision <= MAX_INT_CACHED_PREC)
8267     nonstandard_boolean_type_cache[precision] = type;
8268
8269   return type;
8270 }
8271
8272 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
8273    or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL.  If SHARED
8274    is true, reuse such a type that has already been constructed.  */
8275
8276 static tree
8277 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
8278 {
8279   tree itype = make_node (INTEGER_TYPE);
8280
8281   TREE_TYPE (itype) = type;
8282
8283   TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
8284   TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
8285
8286   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
8287   SET_TYPE_MODE (itype, TYPE_MODE (type));
8288   TYPE_SIZE (itype) = TYPE_SIZE (type);
8289   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
8290   SET_TYPE_ALIGN (itype, TYPE_ALIGN (type));
8291   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
8292
8293   if (!shared)
8294     return itype;
8295
8296   if ((TYPE_MIN_VALUE (itype)
8297        && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
8298       || (TYPE_MAX_VALUE (itype)
8299           && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
8300     {
8301       /* Since we cannot reliably merge this type, we need to compare it using
8302          structural equality checks.  */
8303       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8304       return itype;
8305     }
8306
8307   hashval_t hash = type_hash_canon_hash (itype);
8308   itype = type_hash_canon (hash, itype);
8309
8310   return itype;
8311 }
8312
8313 /* Wrapper around build_range_type_1 with SHARED set to true.  */
8314
8315 tree
8316 build_range_type (tree type, tree lowval, tree highval)
8317 {
8318   return build_range_type_1 (type, lowval, highval, true);
8319 }
8320
8321 /* Wrapper around build_range_type_1 with SHARED set to false.  */
8322
8323 tree
8324 build_nonshared_range_type (tree type, tree lowval, tree highval)
8325 {
8326   return build_range_type_1 (type, lowval, highval, false);
8327 }
8328
8329 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
8330    MAXVAL should be the maximum value in the domain
8331    (one less than the length of the array).
8332
8333    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
8334    We don't enforce this limit, that is up to caller (e.g. language front end).
8335    The limit exists because the result is a signed type and we don't handle
8336    sizes that use more than one HOST_WIDE_INT.  */
8337
8338 tree
8339 build_index_type (tree maxval)
8340 {
8341   return build_range_type (sizetype, size_zero_node, maxval);
8342 }
8343
8344 /* Return true if the debug information for TYPE, a subtype, should be emitted
8345    as a subrange type.  If so, set LOWVAL to the low bound and HIGHVAL to the
8346    high bound, respectively.  Sometimes doing so unnecessarily obfuscates the
8347    debug info and doesn't reflect the source code.  */
8348
8349 bool
8350 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
8351 {
8352   tree base_type = TREE_TYPE (type), low, high;
8353
8354   /* Subrange types have a base type which is an integral type.  */
8355   if (!INTEGRAL_TYPE_P (base_type))
8356     return false;
8357
8358   /* Get the real bounds of the subtype.  */
8359   if (lang_hooks.types.get_subrange_bounds)
8360     lang_hooks.types.get_subrange_bounds (type, &low, &high);
8361   else
8362     {
8363       low = TYPE_MIN_VALUE (type);
8364       high = TYPE_MAX_VALUE (type);
8365     }
8366
8367   /* If the type and its base type have the same representation and the same
8368      name, then the type is not a subrange but a copy of the base type.  */
8369   if ((TREE_CODE (base_type) == INTEGER_TYPE
8370        || TREE_CODE (base_type) == BOOLEAN_TYPE)
8371       && int_size_in_bytes (type) == int_size_in_bytes (base_type)
8372       && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
8373       && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
8374       && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
8375     return false;
8376
8377   if (lowval)
8378     *lowval = low;
8379   if (highval)
8380     *highval = high;
8381   return true;
8382 }
8383
8384 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
8385    and number of elements specified by the range of values of INDEX_TYPE.
8386    If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type.
8387    If SHARED is true, reuse such a type that has already been constructed.  */
8388
8389 static tree
8390 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
8391                     bool shared)
8392 {
8393   tree t;
8394
8395   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
8396     {
8397       error ("arrays of functions are not meaningful");
8398       elt_type = integer_type_node;
8399     }
8400
8401   t = make_node (ARRAY_TYPE);
8402   TREE_TYPE (t) = elt_type;
8403   TYPE_DOMAIN (t) = index_type;
8404   TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
8405   TYPE_TYPELESS_STORAGE (t) = typeless_storage;
8406   layout_type (t);
8407
8408   /* If the element type is incomplete at this point we get marked for
8409      structural equality.  Do not record these types in the canonical
8410      type hashtable.  */
8411   if (TYPE_STRUCTURAL_EQUALITY_P (t))
8412     return t;
8413
8414   if (shared)
8415     {
8416       hashval_t hash = type_hash_canon_hash (t);
8417       t = type_hash_canon (hash, t);
8418     }
8419
8420   if (TYPE_CANONICAL (t) == t)
8421     {
8422       if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
8423           || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
8424           || in_lto_p)
8425         SET_TYPE_STRUCTURAL_EQUALITY (t);
8426       else if (TYPE_CANONICAL (elt_type) != elt_type
8427                || (index_type && TYPE_CANONICAL (index_type) != index_type))
8428         TYPE_CANONICAL (t)
8429           = build_array_type_1 (TYPE_CANONICAL (elt_type),
8430                                 index_type
8431                                 ? TYPE_CANONICAL (index_type) : NULL_TREE,
8432                                 typeless_storage, shared);
8433     }
8434
8435   return t;
8436 }
8437
8438 /* Wrapper around build_array_type_1 with SHARED set to true.  */
8439
8440 tree
8441 build_array_type (tree elt_type, tree index_type, bool typeless_storage)
8442 {
8443   return build_array_type_1 (elt_type, index_type, typeless_storage, true);
8444 }
8445
8446 /* Wrapper around build_array_type_1 with SHARED set to false.  */
8447
8448 tree
8449 build_nonshared_array_type (tree elt_type, tree index_type)
8450 {
8451   return build_array_type_1 (elt_type, index_type, false, false);
8452 }
8453
8454 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8455    sizetype.  */
8456
8457 tree
8458 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
8459 {
8460   return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8461 }
8462
8463 /* Recursively examines the array elements of TYPE, until a non-array
8464    element type is found.  */
8465
8466 tree
8467 strip_array_types (tree type)
8468 {
8469   while (TREE_CODE (type) == ARRAY_TYPE)
8470     type = TREE_TYPE (type);
8471
8472   return type;
8473 }
8474
8475 /* Computes the canonical argument types from the argument type list
8476    ARGTYPES.
8477
8478    Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8479    on entry to this function, or if any of the ARGTYPES are
8480    structural.
8481
8482    Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8483    true on entry to this function, or if any of the ARGTYPES are
8484    non-canonical.
8485
8486    Returns a canonical argument list, which may be ARGTYPES when the
8487    canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8488    true) or would not differ from ARGTYPES.  */
8489
8490 static tree
8491 maybe_canonicalize_argtypes (tree argtypes,
8492                              bool *any_structural_p,
8493                              bool *any_noncanonical_p)
8494 {
8495   tree arg;
8496   bool any_noncanonical_argtypes_p = false;
8497
8498   for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8499     {
8500       if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8501         /* Fail gracefully by stating that the type is structural.  */
8502         *any_structural_p = true;
8503       else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8504         *any_structural_p = true;
8505       else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8506                || TREE_PURPOSE (arg))
8507         /* If the argument has a default argument, we consider it
8508            non-canonical even though the type itself is canonical.
8509            That way, different variants of function and method types
8510            with default arguments will all point to the variant with
8511            no defaults as their canonical type.  */
8512         any_noncanonical_argtypes_p = true;
8513     }
8514
8515   if (*any_structural_p)
8516     return argtypes;
8517
8518   if (any_noncanonical_argtypes_p)
8519     {
8520       /* Build the canonical list of argument types.  */
8521       tree canon_argtypes = NULL_TREE;
8522       bool is_void = false;
8523
8524       for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8525         {
8526           if (arg == void_list_node)
8527             is_void = true;
8528           else
8529             canon_argtypes = tree_cons (NULL_TREE,
8530                                         TYPE_CANONICAL (TREE_VALUE (arg)),
8531                                         canon_argtypes);
8532         }
8533
8534       canon_argtypes = nreverse (canon_argtypes);
8535       if (is_void)
8536         canon_argtypes = chainon (canon_argtypes, void_list_node);
8537
8538       /* There is a non-canonical type.  */
8539       *any_noncanonical_p = true;
8540       return canon_argtypes;
8541     }
8542
8543   /* The canonical argument types are the same as ARGTYPES.  */
8544   return argtypes;
8545 }
8546
8547 /* Construct, lay out and return
8548    the type of functions returning type VALUE_TYPE
8549    given arguments of types ARG_TYPES.
8550    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8551    are data type nodes for the arguments of the function.
8552    If such a type has already been constructed, reuse it.  */
8553
8554 tree
8555 build_function_type (tree value_type, tree arg_types)
8556 {
8557   tree t;
8558   inchash::hash hstate;
8559   bool any_structural_p, any_noncanonical_p;
8560   tree canon_argtypes;
8561
8562   if (TREE_CODE (value_type) == FUNCTION_TYPE)
8563     {
8564       error ("function return type cannot be function");
8565       value_type = integer_type_node;
8566     }
8567
8568   /* Make a node of the sort we want.  */
8569   t = make_node (FUNCTION_TYPE);
8570   TREE_TYPE (t) = value_type;
8571   TYPE_ARG_TYPES (t) = arg_types;
8572
8573   /* If we already have such a type, use the old one.  */
8574   hashval_t hash = type_hash_canon_hash (t);
8575   t = type_hash_canon (hash, t);
8576
8577   /* Set up the canonical type. */
8578   any_structural_p   = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8579   any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8580   canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8581                                                 &any_structural_p,
8582                                                 &any_noncanonical_p);
8583   if (any_structural_p)
8584     SET_TYPE_STRUCTURAL_EQUALITY (t);
8585   else if (any_noncanonical_p)
8586     TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8587                                               canon_argtypes);
8588
8589   if (!COMPLETE_TYPE_P (t))
8590     layout_type (t);
8591   return t;
8592 }
8593
8594 /* Build a function type.  The RETURN_TYPE is the type returned by the
8595    function.  If VAARGS is set, no void_type_node is appended to the
8596    list.  ARGP must be always be terminated be a NULL_TREE.  */
8597
8598 static tree
8599 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8600 {
8601   tree t, args, last;
8602
8603   t = va_arg (argp, tree);
8604   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8605     args = tree_cons (NULL_TREE, t, args);
8606
8607   if (vaargs)
8608     {
8609       last = args;
8610       if (args != NULL_TREE)
8611         args = nreverse (args);
8612       gcc_assert (last != void_list_node);
8613     }
8614   else if (args == NULL_TREE)
8615     args = void_list_node;
8616   else
8617     {
8618       last = args;
8619       args = nreverse (args);
8620       TREE_CHAIN (last) = void_list_node;
8621     }
8622   args = build_function_type (return_type, args);
8623
8624   return args;
8625 }
8626
8627 /* Build a function type.  The RETURN_TYPE is the type returned by the
8628    function.  If additional arguments are provided, they are
8629    additional argument types.  The list of argument types must always
8630    be terminated by NULL_TREE.  */
8631
8632 tree
8633 build_function_type_list (tree return_type, ...)
8634 {
8635   tree args;
8636   va_list p;
8637
8638   va_start (p, return_type);
8639   args = build_function_type_list_1 (false, return_type, p);
8640   va_end (p);
8641   return args;
8642 }
8643
8644 /* Build a variable argument function type.  The RETURN_TYPE is the
8645    type returned by the function.  If additional arguments are provided,
8646    they are additional argument types.  The list of argument types must
8647    always be terminated by NULL_TREE.  */
8648
8649 tree
8650 build_varargs_function_type_list (tree return_type, ...)
8651 {
8652   tree args;
8653   va_list p;
8654
8655   va_start (p, return_type);
8656   args = build_function_type_list_1 (true, return_type, p);
8657   va_end (p);
8658
8659   return args;
8660 }
8661
8662 /* Build a function type.  RETURN_TYPE is the type returned by the
8663    function; VAARGS indicates whether the function takes varargs.  The
8664    function takes N named arguments, the types of which are provided in
8665    ARG_TYPES.  */
8666
8667 static tree
8668 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8669                              tree *arg_types)
8670 {
8671   int i;
8672   tree t = vaargs ? NULL_TREE : void_list_node;
8673
8674   for (i = n - 1; i >= 0; i--)
8675     t = tree_cons (NULL_TREE, arg_types[i], t);
8676
8677   return build_function_type (return_type, t);
8678 }
8679
8680 /* Build a function type.  RETURN_TYPE is the type returned by the
8681    function.  The function takes N named arguments, the types of which
8682    are provided in ARG_TYPES.  */
8683
8684 tree
8685 build_function_type_array (tree return_type, int n, tree *arg_types)
8686 {
8687   return build_function_type_array_1 (false, return_type, n, arg_types);
8688 }
8689
8690 /* Build a variable argument function type.  RETURN_TYPE is the type
8691    returned by the function.  The function takes N named arguments, the
8692    types of which are provided in ARG_TYPES.  */
8693
8694 tree
8695 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8696 {
8697   return build_function_type_array_1 (true, return_type, n, arg_types);
8698 }
8699
8700 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
8701    and ARGTYPES (a TREE_LIST) are the return type and arguments types
8702    for the method.  An implicit additional parameter (of type
8703    pointer-to-BASETYPE) is added to the ARGTYPES.  */
8704
8705 tree
8706 build_method_type_directly (tree basetype,
8707                             tree rettype,
8708                             tree argtypes)
8709 {
8710   tree t;
8711   tree ptype;
8712   bool any_structural_p, any_noncanonical_p;
8713   tree canon_argtypes;
8714
8715   /* Make a node of the sort we want.  */
8716   t = make_node (METHOD_TYPE);
8717
8718   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8719   TREE_TYPE (t) = rettype;
8720   ptype = build_pointer_type (basetype);
8721
8722   /* The actual arglist for this function includes a "hidden" argument
8723      which is "this".  Put it into the list of argument types.  */
8724   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8725   TYPE_ARG_TYPES (t) = argtypes;
8726
8727   /* If we already have such a type, use the old one.  */
8728   hashval_t hash = type_hash_canon_hash (t);
8729   t = type_hash_canon (hash, t);
8730
8731   /* Set up the canonical type. */
8732   any_structural_p
8733     = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8734        || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8735   any_noncanonical_p
8736     = (TYPE_CANONICAL (basetype) != basetype
8737        || TYPE_CANONICAL (rettype) != rettype);
8738   canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8739                                                 &any_structural_p,
8740                                                 &any_noncanonical_p);
8741   if (any_structural_p)
8742     SET_TYPE_STRUCTURAL_EQUALITY (t);
8743   else if (any_noncanonical_p)
8744     TYPE_CANONICAL (t)
8745       = build_method_type_directly (TYPE_CANONICAL (basetype),
8746                                     TYPE_CANONICAL (rettype),
8747                                     canon_argtypes);
8748   if (!COMPLETE_TYPE_P (t))
8749     layout_type (t);
8750
8751   return t;
8752 }
8753
8754 /* Construct, lay out and return the type of methods belonging to class
8755    BASETYPE and whose arguments and values are described by TYPE.
8756    If that type exists already, reuse it.
8757    TYPE must be a FUNCTION_TYPE node.  */
8758
8759 tree
8760 build_method_type (tree basetype, tree type)
8761 {
8762   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8763
8764   return build_method_type_directly (basetype,
8765                                      TREE_TYPE (type),
8766                                      TYPE_ARG_TYPES (type));
8767 }
8768
8769 /* Construct, lay out and return the type of offsets to a value
8770    of type TYPE, within an object of type BASETYPE.
8771    If a suitable offset type exists already, reuse it.  */
8772
8773 tree
8774 build_offset_type (tree basetype, tree type)
8775 {
8776   tree t;
8777
8778   /* Make a node of the sort we want.  */
8779   t = make_node (OFFSET_TYPE);
8780
8781   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8782   TREE_TYPE (t) = type;
8783
8784   /* If we already have such a type, use the old one.  */
8785   hashval_t hash = type_hash_canon_hash (t);
8786   t = type_hash_canon (hash, t);
8787
8788   if (!COMPLETE_TYPE_P (t))
8789     layout_type (t);
8790
8791   if (TYPE_CANONICAL (t) == t)
8792     {
8793       if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8794           || TYPE_STRUCTURAL_EQUALITY_P (type))
8795         SET_TYPE_STRUCTURAL_EQUALITY (t);
8796       else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8797                || TYPE_CANONICAL (type) != type)
8798         TYPE_CANONICAL (t)
8799           = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8800                                TYPE_CANONICAL (type));
8801     }
8802
8803   return t;
8804 }
8805
8806 /* Create a complex type whose components are COMPONENT_TYPE.
8807
8808    If NAMED is true, the type is given a TYPE_NAME.  We do not always
8809    do so because this creates a DECL node and thus make the DECL_UIDs
8810    dependent on the type canonicalization hashtable, which is GC-ed,
8811    so the DECL_UIDs would not be stable wrt garbage collection.  */
8812
8813 tree
8814 build_complex_type (tree component_type, bool named)
8815 {
8816   tree t;
8817
8818   gcc_assert (INTEGRAL_TYPE_P (component_type)
8819               || SCALAR_FLOAT_TYPE_P (component_type)
8820               || FIXED_POINT_TYPE_P (component_type));
8821
8822   /* Make a node of the sort we want.  */
8823   t = make_node (COMPLEX_TYPE);
8824
8825   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8826
8827   /* If we already have such a type, use the old one.  */
8828   hashval_t hash = type_hash_canon_hash (t);
8829   t = type_hash_canon (hash, t);
8830
8831   if (!COMPLETE_TYPE_P (t))
8832     layout_type (t);
8833
8834   if (TYPE_CANONICAL (t) == t)
8835     {
8836       if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8837         SET_TYPE_STRUCTURAL_EQUALITY (t);
8838       else if (TYPE_CANONICAL (component_type) != component_type)
8839         TYPE_CANONICAL (t)
8840           = build_complex_type (TYPE_CANONICAL (component_type), named);
8841     }
8842
8843   /* We need to create a name, since complex is a fundamental type.  */
8844   if (!TYPE_NAME (t) && named)
8845     {
8846       const char *name;
8847       if (component_type == char_type_node)
8848         name = "complex char";
8849       else if (component_type == signed_char_type_node)
8850         name = "complex signed char";
8851       else if (component_type == unsigned_char_type_node)
8852         name = "complex unsigned char";
8853       else if (component_type == short_integer_type_node)
8854         name = "complex short int";
8855       else if (component_type == short_unsigned_type_node)
8856         name = "complex short unsigned int";
8857       else if (component_type == integer_type_node)
8858         name = "complex int";
8859       else if (component_type == unsigned_type_node)
8860         name = "complex unsigned int";
8861       else if (component_type == long_integer_type_node)
8862         name = "complex long int";
8863       else if (component_type == long_unsigned_type_node)
8864         name = "complex long unsigned int";
8865       else if (component_type == long_long_integer_type_node)
8866         name = "complex long long int";
8867       else if (component_type == long_long_unsigned_type_node)
8868         name = "complex long long unsigned int";
8869       else
8870         name = 0;
8871
8872       if (name != 0)
8873         TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8874                                     get_identifier (name), t);
8875     }
8876
8877   return build_qualified_type (t, TYPE_QUALS (component_type));
8878 }
8879
8880 /* If TYPE is a real or complex floating-point type and the target
8881    does not directly support arithmetic on TYPE then return the wider
8882    type to be used for arithmetic on TYPE.  Otherwise, return
8883    NULL_TREE.  */
8884
8885 tree
8886 excess_precision_type (tree type)
8887 {
8888   /* The target can give two different responses to the question of
8889      which excess precision mode it would like depending on whether we
8890      are in -fexcess-precision=standard or -fexcess-precision=fast.  */
8891
8892   enum excess_precision_type requested_type
8893     = (flag_excess_precision == EXCESS_PRECISION_FAST
8894        ? EXCESS_PRECISION_TYPE_FAST
8895        : EXCESS_PRECISION_TYPE_STANDARD);
8896
8897   enum flt_eval_method target_flt_eval_method
8898     = targetm.c.excess_precision (requested_type);
8899
8900   /* The target should not ask for unpredictable float evaluation (though
8901      it might advertise that implicitly the evaluation is unpredictable,
8902      but we don't care about that here, it will have been reported
8903      elsewhere).  If it does ask for unpredictable evaluation, we have
8904      nothing to do here.  */
8905   gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE);
8906
8907   /* Nothing to do.  The target has asked for all types we know about
8908      to be computed with their native precision and range.  */
8909   if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16)
8910     return NULL_TREE;
8911
8912   /* The target will promote this type in a target-dependent way, so excess
8913      precision ought to leave it alone.  */
8914   if (targetm.promoted_type (type) != NULL_TREE)
8915     return NULL_TREE;
8916
8917   machine_mode float16_type_mode = (float16_type_node
8918                                     ? TYPE_MODE (float16_type_node)
8919                                     : VOIDmode);
8920   machine_mode float_type_mode = TYPE_MODE (float_type_node);
8921   machine_mode double_type_mode = TYPE_MODE (double_type_node);
8922
8923   switch (TREE_CODE (type))
8924     {
8925     case REAL_TYPE:
8926       {
8927         machine_mode type_mode = TYPE_MODE (type);
8928         switch (target_flt_eval_method)
8929           {
8930           case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8931             if (type_mode == float16_type_mode)
8932               return float_type_node;
8933             break;
8934           case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8935             if (type_mode == float16_type_mode
8936                 || type_mode == float_type_mode)
8937               return double_type_node;
8938             break;
8939           case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8940             if (type_mode == float16_type_mode
8941                 || type_mode == float_type_mode
8942                 || type_mode == double_type_mode)
8943               return long_double_type_node;
8944             break;
8945           default:
8946             gcc_unreachable ();
8947           }
8948         break;
8949       }
8950     case COMPLEX_TYPE:
8951       {
8952         if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8953           return NULL_TREE;
8954         machine_mode type_mode = TYPE_MODE (TREE_TYPE (type));
8955         switch (target_flt_eval_method)
8956           {
8957           case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8958             if (type_mode == float16_type_mode)
8959               return complex_float_type_node;
8960             break;
8961           case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8962             if (type_mode == float16_type_mode
8963                 || type_mode == float_type_mode)
8964               return complex_double_type_node;
8965             break;
8966           case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8967             if (type_mode == float16_type_mode
8968                 || type_mode == float_type_mode
8969                 || type_mode == double_type_mode)
8970               return complex_long_double_type_node;
8971             break;
8972           default:
8973             gcc_unreachable ();
8974           }
8975         break;
8976       }
8977     default:
8978       break;
8979     }
8980
8981   return NULL_TREE;
8982 }
8983 \f
8984 /* Return OP, stripped of any conversions to wider types as much as is safe.
8985    Converting the value back to OP's type makes a value equivalent to OP.
8986
8987    If FOR_TYPE is nonzero, we return a value which, if converted to
8988    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8989
8990    OP must have integer, real or enumeral type.  Pointers are not allowed!
8991
8992    There are some cases where the obvious value we could return
8993    would regenerate to OP if converted to OP's type,
8994    but would not extend like OP to wider types.
8995    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8996    For example, if OP is (unsigned short)(signed char)-1,
8997    we avoid returning (signed char)-1 if FOR_TYPE is int,
8998    even though extending that to an unsigned short would regenerate OP,
8999    since the result of extending (signed char)-1 to (int)
9000    is different from (int) OP.  */
9001
9002 tree
9003 get_unwidened (tree op, tree for_type)
9004 {
9005   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
9006   tree type = TREE_TYPE (op);
9007   unsigned final_prec
9008     = TYPE_PRECISION (for_type != 0 ? for_type : type);
9009   int uns
9010     = (for_type != 0 && for_type != type
9011        && final_prec > TYPE_PRECISION (type)
9012        && TYPE_UNSIGNED (type));
9013   tree win = op;
9014
9015   while (CONVERT_EXPR_P (op))
9016     {
9017       int bitschange;
9018
9019       /* TYPE_PRECISION on vector types has different meaning
9020          (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
9021          so avoid them here.  */
9022       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
9023         break;
9024
9025       bitschange = TYPE_PRECISION (TREE_TYPE (op))
9026                    - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
9027
9028       /* Truncations are many-one so cannot be removed.
9029          Unless we are later going to truncate down even farther.  */
9030       if (bitschange < 0
9031           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
9032         break;
9033
9034       /* See what's inside this conversion.  If we decide to strip it,
9035          we will set WIN.  */
9036       op = TREE_OPERAND (op, 0);
9037
9038       /* If we have not stripped any zero-extensions (uns is 0),
9039          we can strip any kind of extension.
9040          If we have previously stripped a zero-extension,
9041          only zero-extensions can safely be stripped.
9042          Any extension can be stripped if the bits it would produce
9043          are all going to be discarded later by truncating to FOR_TYPE.  */
9044
9045       if (bitschange > 0)
9046         {
9047           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
9048             win = op;
9049           /* TYPE_UNSIGNED says whether this is a zero-extension.
9050              Let's avoid computing it if it does not affect WIN
9051              and if UNS will not be needed again.  */
9052           if ((uns
9053                || CONVERT_EXPR_P (op))
9054               && TYPE_UNSIGNED (TREE_TYPE (op)))
9055             {
9056               uns = 1;
9057               win = op;
9058             }
9059         }
9060     }
9061
9062   /* If we finally reach a constant see if it fits in sth smaller and
9063      in that case convert it.  */
9064   if (TREE_CODE (win) == INTEGER_CST)
9065     {
9066       tree wtype = TREE_TYPE (win);
9067       unsigned prec = wi::min_precision (win, TYPE_SIGN (wtype));
9068       if (for_type)
9069         prec = MAX (prec, final_prec);
9070       if (prec < TYPE_PRECISION (wtype))
9071         {
9072           tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype));
9073           if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype))
9074             win = fold_convert (t, win);
9075         }
9076     }
9077
9078   return win;
9079 }
9080 \f
9081 /* Return OP or a simpler expression for a narrower value
9082    which can be sign-extended or zero-extended to give back OP.
9083    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
9084    or 0 if the value should be sign-extended.  */
9085
9086 tree
9087 get_narrower (tree op, int *unsignedp_ptr)
9088 {
9089   int uns = 0;
9090   int first = 1;
9091   tree win = op;
9092   bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
9093
9094   while (TREE_CODE (op) == NOP_EXPR)
9095     {
9096       int bitschange
9097         = (TYPE_PRECISION (TREE_TYPE (op))
9098            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
9099
9100       /* Truncations are many-one so cannot be removed.  */
9101       if (bitschange < 0)
9102         break;
9103
9104       /* See what's inside this conversion.  If we decide to strip it,
9105          we will set WIN.  */
9106
9107       if (bitschange > 0)
9108         {
9109           op = TREE_OPERAND (op, 0);
9110           /* An extension: the outermost one can be stripped,
9111              but remember whether it is zero or sign extension.  */
9112           if (first)
9113             uns = TYPE_UNSIGNED (TREE_TYPE (op));
9114           /* Otherwise, if a sign extension has been stripped,
9115              only sign extensions can now be stripped;
9116              if a zero extension has been stripped, only zero-extensions.  */
9117           else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
9118             break;
9119           first = 0;
9120         }
9121       else /* bitschange == 0 */
9122         {
9123           /* A change in nominal type can always be stripped, but we must
9124              preserve the unsignedness.  */
9125           if (first)
9126             uns = TYPE_UNSIGNED (TREE_TYPE (op));
9127           first = 0;
9128           op = TREE_OPERAND (op, 0);
9129           /* Keep trying to narrow, but don't assign op to win if it
9130              would turn an integral type into something else.  */
9131           if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
9132             continue;
9133         }
9134
9135       win = op;
9136     }
9137
9138   if (TREE_CODE (op) == COMPONENT_REF
9139       /* Since type_for_size always gives an integer type.  */
9140       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
9141       && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
9142       /* Ensure field is laid out already.  */
9143       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
9144       && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
9145     {
9146       unsigned HOST_WIDE_INT innerprec
9147         = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
9148       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
9149                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
9150       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
9151
9152       /* We can get this structure field in a narrower type that fits it,
9153          but the resulting extension to its nominal type (a fullword type)
9154          must satisfy the same conditions as for other extensions.
9155
9156          Do this only for fields that are aligned (not bit-fields),
9157          because when bit-field insns will be used there is no
9158          advantage in doing this.  */
9159
9160       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
9161           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
9162           && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
9163           && type != 0)
9164         {
9165           if (first)
9166             uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
9167           win = fold_convert (type, op);
9168         }
9169     }
9170
9171   *unsignedp_ptr = uns;
9172   return win;
9173 }
9174 \f
9175 /* Return true if integer constant C has a value that is permissible
9176    for TYPE, an integral type.  */
9177
9178 bool
9179 int_fits_type_p (const_tree c, const_tree type)
9180 {
9181   tree type_low_bound, type_high_bound;
9182   bool ok_for_low_bound, ok_for_high_bound;
9183   signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
9184
9185   /* Non-standard boolean types can have arbitrary precision but various
9186      transformations assume that they can only take values 0 and +/-1.  */
9187   if (TREE_CODE (type) == BOOLEAN_TYPE)
9188     return wi::fits_to_boolean_p (c, type);
9189
9190 retry:
9191   type_low_bound = TYPE_MIN_VALUE (type);
9192   type_high_bound = TYPE_MAX_VALUE (type);
9193
9194   /* If at least one bound of the type is a constant integer, we can check
9195      ourselves and maybe make a decision. If no such decision is possible, but
9196      this type is a subtype, try checking against that.  Otherwise, use
9197      fits_to_tree_p, which checks against the precision.
9198
9199      Compute the status for each possibly constant bound, and return if we see
9200      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
9201      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
9202      for "constant known to fit".  */
9203
9204   /* Check if c >= type_low_bound.  */
9205   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
9206     {
9207       if (tree_int_cst_lt (c, type_low_bound))
9208         return false;
9209       ok_for_low_bound = true;
9210     }
9211   else
9212     ok_for_low_bound = false;
9213
9214   /* Check if c <= type_high_bound.  */
9215   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
9216     {
9217       if (tree_int_cst_lt (type_high_bound, c))
9218         return false;
9219       ok_for_high_bound = true;
9220     }
9221   else
9222     ok_for_high_bound = false;
9223
9224   /* If the constant fits both bounds, the result is known.  */
9225   if (ok_for_low_bound && ok_for_high_bound)
9226     return true;
9227
9228   /* Perform some generic filtering which may allow making a decision
9229      even if the bounds are not constant.  First, negative integers
9230      never fit in unsigned types, */
9231   if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (c))
9232     return false;
9233
9234   /* Second, narrower types always fit in wider ones.  */
9235   if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
9236     return true;
9237
9238   /* Third, unsigned integers with top bit set never fit signed types.  */
9239   if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
9240     {
9241       int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
9242       if (prec < TYPE_PRECISION (TREE_TYPE (c)))
9243         {
9244           /* When a tree_cst is converted to a wide-int, the precision
9245              is taken from the type.  However, if the precision of the
9246              mode underneath the type is smaller than that, it is
9247              possible that the value will not fit.  The test below
9248              fails if any bit is set between the sign bit of the
9249              underlying mode and the top bit of the type.  */
9250           if (wi::ne_p (wi::zext (c, prec - 1), c))
9251             return false;
9252         }
9253       else if (wi::neg_p (c))
9254         return false;
9255     }
9256
9257   /* If we haven't been able to decide at this point, there nothing more we
9258      can check ourselves here.  Look at the base type if we have one and it
9259      has the same precision.  */
9260   if (TREE_CODE (type) == INTEGER_TYPE
9261       && TREE_TYPE (type) != 0
9262       && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
9263     {
9264       type = TREE_TYPE (type);
9265       goto retry;
9266     }
9267
9268   /* Or to fits_to_tree_p, if nothing else.  */
9269   return wi::fits_to_tree_p (c, type);
9270 }
9271
9272 /* Stores bounds of an integer TYPE in MIN and MAX.  If TYPE has non-constant
9273    bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
9274    represented (assuming two's-complement arithmetic) within the bit
9275    precision of the type are returned instead.  */
9276
9277 void
9278 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
9279 {
9280   if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
9281       && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
9282     wi::to_mpz (TYPE_MIN_VALUE (type), min, TYPE_SIGN (type));
9283   else
9284     {
9285       if (TYPE_UNSIGNED (type))
9286         mpz_set_ui (min, 0);
9287       else
9288         {
9289           wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
9290           wi::to_mpz (mn, min, SIGNED);
9291         }
9292     }
9293
9294   if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
9295       && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
9296     wi::to_mpz (TYPE_MAX_VALUE (type), max, TYPE_SIGN (type));
9297   else
9298     {
9299       wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
9300       wi::to_mpz (mn, max, TYPE_SIGN (type));
9301     }
9302 }
9303
9304 /* Return true if VAR is an automatic variable defined in function FN.  */
9305
9306 bool
9307 auto_var_in_fn_p (const_tree var, const_tree fn)
9308 {
9309   return (DECL_P (var) && DECL_CONTEXT (var) == fn
9310           && ((((VAR_P (var) && ! DECL_EXTERNAL (var))
9311                 || TREE_CODE (var) == PARM_DECL)
9312                && ! TREE_STATIC (var))
9313               || TREE_CODE (var) == LABEL_DECL
9314               || TREE_CODE (var) == RESULT_DECL));
9315 }
9316
9317 /* Subprogram of following function.  Called by walk_tree.
9318
9319    Return *TP if it is an automatic variable or parameter of the
9320    function passed in as DATA.  */
9321
9322 static tree
9323 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
9324 {
9325   tree fn = (tree) data;
9326
9327   if (TYPE_P (*tp))
9328     *walk_subtrees = 0;
9329
9330   else if (DECL_P (*tp)
9331            && auto_var_in_fn_p (*tp, fn))
9332     return *tp;
9333
9334   return NULL_TREE;
9335 }
9336
9337 /* Returns true if T is, contains, or refers to a type with variable
9338    size.  For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
9339    arguments, but not the return type.  If FN is nonzero, only return
9340    true if a modifier of the type or position of FN is a variable or
9341    parameter inside FN.
9342
9343    This concept is more general than that of C99 'variably modified types':
9344    in C99, a struct type is never variably modified because a VLA may not
9345    appear as a structure member.  However, in GNU C code like:
9346
9347      struct S { int i[f()]; };
9348
9349    is valid, and other languages may define similar constructs.  */
9350
9351 bool
9352 variably_modified_type_p (tree type, tree fn)
9353 {
9354   tree t;
9355
9356 /* Test if T is either variable (if FN is zero) or an expression containing
9357    a variable in FN.  If TYPE isn't gimplified, return true also if
9358    gimplify_one_sizepos would gimplify the expression into a local
9359    variable.  */
9360 #define RETURN_TRUE_IF_VAR(T)                                           \
9361   do { tree _t = (T);                                                   \
9362     if (_t != NULL_TREE                                                 \
9363         && _t != error_mark_node                                        \
9364         && TREE_CODE (_t) != INTEGER_CST                                \
9365         && TREE_CODE (_t) != PLACEHOLDER_EXPR                           \
9366         && (!fn                                                         \
9367             || (!TYPE_SIZES_GIMPLIFIED (type)                           \
9368                 && !is_gimple_sizepos (_t))                             \
9369             || walk_tree (&_t, find_var_from_fn, fn, NULL)))            \
9370       return true;  } while (0)
9371
9372   if (type == error_mark_node)
9373     return false;
9374
9375   /* If TYPE itself has variable size, it is variably modified.  */
9376   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
9377   RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
9378
9379   switch (TREE_CODE (type))
9380     {
9381     case POINTER_TYPE:
9382     case REFERENCE_TYPE:
9383     case VECTOR_TYPE:
9384       if (variably_modified_type_p (TREE_TYPE (type), fn))
9385         return true;
9386       break;
9387
9388     case FUNCTION_TYPE:
9389     case METHOD_TYPE:
9390       /* If TYPE is a function type, it is variably modified if the
9391          return type is variably modified.  */
9392       if (variably_modified_type_p (TREE_TYPE (type), fn))
9393           return true;
9394       break;
9395
9396     case INTEGER_TYPE:
9397     case REAL_TYPE:
9398     case FIXED_POINT_TYPE:
9399     case ENUMERAL_TYPE:
9400     case BOOLEAN_TYPE:
9401       /* Scalar types are variably modified if their end points
9402          aren't constant.  */
9403       RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
9404       RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
9405       break;
9406
9407     case RECORD_TYPE:
9408     case UNION_TYPE:
9409     case QUAL_UNION_TYPE:
9410       /* We can't see if any of the fields are variably-modified by the
9411          definition we normally use, since that would produce infinite
9412          recursion via pointers.  */
9413       /* This is variably modified if some field's type is.  */
9414       for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
9415         if (TREE_CODE (t) == FIELD_DECL)
9416           {
9417             RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
9418             RETURN_TRUE_IF_VAR (DECL_SIZE (t));
9419             RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
9420
9421             if (TREE_CODE (type) == QUAL_UNION_TYPE)
9422               RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
9423           }
9424       break;
9425
9426     case ARRAY_TYPE:
9427       /* Do not call ourselves to avoid infinite recursion.  This is
9428          variably modified if the element type is.  */
9429       RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
9430       RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
9431       break;
9432
9433     default:
9434       break;
9435     }
9436
9437   /* The current language may have other cases to check, but in general,
9438      all other types are not variably modified.  */
9439   return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
9440
9441 #undef RETURN_TRUE_IF_VAR
9442 }
9443
9444 /* Given a DECL or TYPE, return the scope in which it was declared, or
9445    NULL_TREE if there is no containing scope.  */
9446
9447 tree
9448 get_containing_scope (const_tree t)
9449 {
9450   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
9451 }
9452
9453 /* Return the innermost context enclosing DECL that is
9454    a FUNCTION_DECL, or zero if none.  */
9455
9456 tree
9457 decl_function_context (const_tree decl)
9458 {
9459   tree context;
9460
9461   if (TREE_CODE (decl) == ERROR_MARK)
9462     return 0;
9463
9464   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
9465      where we look up the function at runtime.  Such functions always take
9466      a first argument of type 'pointer to real context'.
9467
9468      C++ should really be fixed to use DECL_CONTEXT for the real context,
9469      and use something else for the "virtual context".  */
9470   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
9471     context
9472       = TYPE_MAIN_VARIANT
9473         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
9474   else
9475     context = DECL_CONTEXT (decl);
9476
9477   while (context && TREE_CODE (context) != FUNCTION_DECL)
9478     {
9479       if (TREE_CODE (context) == BLOCK)
9480         context = BLOCK_SUPERCONTEXT (context);
9481       else
9482         context = get_containing_scope (context);
9483     }
9484
9485   return context;
9486 }
9487
9488 /* Return the innermost context enclosing DECL that is
9489    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9490    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
9491
9492 tree
9493 decl_type_context (const_tree decl)
9494 {
9495   tree context = DECL_CONTEXT (decl);
9496
9497   while (context)
9498     switch (TREE_CODE (context))
9499       {
9500       case NAMESPACE_DECL:
9501       case TRANSLATION_UNIT_DECL:
9502         return NULL_TREE;
9503
9504       case RECORD_TYPE:
9505       case UNION_TYPE:
9506       case QUAL_UNION_TYPE:
9507         return context;
9508
9509       case TYPE_DECL:
9510       case FUNCTION_DECL:
9511         context = DECL_CONTEXT (context);
9512         break;
9513
9514       case BLOCK:
9515         context = BLOCK_SUPERCONTEXT (context);
9516         break;
9517
9518       default:
9519         gcc_unreachable ();
9520       }
9521
9522   return NULL_TREE;
9523 }
9524
9525 /* CALL is a CALL_EXPR.  Return the declaration for the function
9526    called, or NULL_TREE if the called function cannot be
9527    determined.  */
9528
9529 tree
9530 get_callee_fndecl (const_tree call)
9531 {
9532   tree addr;
9533
9534   if (call == error_mark_node)
9535     return error_mark_node;
9536
9537   /* It's invalid to call this function with anything but a
9538      CALL_EXPR.  */
9539   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9540
9541   /* The first operand to the CALL is the address of the function
9542      called.  */
9543   addr = CALL_EXPR_FN (call);
9544
9545   /* If there is no function, return early.  */
9546   if (addr == NULL_TREE)
9547     return NULL_TREE;
9548
9549   STRIP_NOPS (addr);
9550
9551   /* If this is a readonly function pointer, extract its initial value.  */
9552   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9553       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9554       && DECL_INITIAL (addr))
9555     addr = DECL_INITIAL (addr);
9556
9557   /* If the address is just `&f' for some function `f', then we know
9558      that `f' is being called.  */
9559   if (TREE_CODE (addr) == ADDR_EXPR
9560       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9561     return TREE_OPERAND (addr, 0);
9562
9563   /* We couldn't figure out what was being called.  */
9564   return NULL_TREE;
9565 }
9566
9567 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
9568    return the associated function code, otherwise return CFN_LAST.  */
9569
9570 combined_fn
9571 get_call_combined_fn (const_tree call)
9572 {
9573   /* It's invalid to call this function with anything but a CALL_EXPR.  */
9574   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9575
9576   if (!CALL_EXPR_FN (call))
9577     return as_combined_fn (CALL_EXPR_IFN (call));
9578
9579   tree fndecl = get_callee_fndecl (call);
9580   if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
9581     return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
9582
9583   return CFN_LAST;
9584 }
9585
9586 #define TREE_MEM_USAGE_SPACES 40
9587
9588 /* Print debugging information about tree nodes generated during the compile,
9589    and any language-specific information.  */
9590
9591 void
9592 dump_tree_statistics (void)
9593 {
9594   if (GATHER_STATISTICS)
9595     {
9596       int i;
9597       int total_nodes, total_bytes;
9598       fprintf (stderr, "\nKind                   Nodes      Bytes\n");
9599       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9600       total_nodes = total_bytes = 0;
9601       for (i = 0; i < (int) all_kinds; i++)
9602         {
9603           fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9604                    tree_node_counts[i], tree_node_sizes[i]);
9605           total_nodes += tree_node_counts[i];
9606           total_bytes += tree_node_sizes[i];
9607         }
9608       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9609       fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9610       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9611       fprintf (stderr, "Code                   Nodes\n");
9612       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9613       for (i = 0; i < (int) MAX_TREE_CODES; i++)
9614         fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i),
9615                  tree_code_counts[i]);
9616       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9617       fprintf (stderr, "\n");
9618       ssanames_print_statistics ();
9619       fprintf (stderr, "\n");
9620       phinodes_print_statistics ();
9621       fprintf (stderr, "\n");
9622     }
9623   else
9624     fprintf (stderr, "(No per-node statistics)\n");
9625
9626   print_type_hash_statistics ();
9627   print_debug_expr_statistics ();
9628   print_value_expr_statistics ();
9629   lang_hooks.print_statistics ();
9630 }
9631 \f
9632 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9633
9634 /* Generate a crc32 of the low BYTES bytes of VALUE.  */
9635
9636 unsigned
9637 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes)
9638 {
9639   /* This relies on the raw feedback's top 4 bits being zero.  */
9640 #define FEEDBACK(X) ((X) * 0x04c11db7)
9641 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \
9642                      ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8))
9643   static const unsigned syndromes[16] =
9644     {
9645       SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3),
9646       SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7),
9647       SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb),
9648       SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf),
9649     };
9650 #undef FEEDBACK
9651 #undef SYNDROME
9652
9653   value <<= (32 - bytes * 8);
9654   for (unsigned ix = bytes * 2; ix--; value <<= 4)
9655     {
9656       unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf];
9657
9658       chksum = (chksum << 4) ^ feedback;
9659     }
9660
9661   return chksum;
9662 }
9663
9664 /* Generate a crc32 of a string.  */
9665
9666 unsigned
9667 crc32_string (unsigned chksum, const char *string)
9668 {
9669   do
9670     chksum = crc32_byte (chksum, *string);
9671   while (*string++);
9672   return chksum;
9673 }
9674
9675 /* P is a string that will be used in a symbol.  Mask out any characters
9676    that are not valid in that context.  */
9677
9678 void
9679 clean_symbol_name (char *p)
9680 {
9681   for (; *p; p++)
9682     if (! (ISALNUM (*p)
9683 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
9684             || *p == '$'
9685 #endif
9686 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
9687             || *p == '.'
9688 #endif
9689            ))
9690       *p = '_';
9691 }
9692
9693 /* For anonymous aggregate types, we need some sort of name to
9694    hold on to.  In practice, this should not appear, but it should
9695    not be harmful if it does.  */
9696 bool 
9697 anon_aggrname_p(const_tree id_node)
9698 {
9699 #ifndef NO_DOT_IN_LABEL
9700  return (IDENTIFIER_POINTER (id_node)[0] == '.'
9701          && IDENTIFIER_POINTER (id_node)[1] == '_');
9702 #else /* NO_DOT_IN_LABEL */
9703 #ifndef NO_DOLLAR_IN_LABEL
9704   return (IDENTIFIER_POINTER (id_node)[0] == '$' \
9705           && IDENTIFIER_POINTER (id_node)[1] == '_');
9706 #else /* NO_DOLLAR_IN_LABEL */
9707 #define ANON_AGGRNAME_PREFIX "__anon_"
9708   return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX, 
9709                     sizeof (ANON_AGGRNAME_PREFIX) - 1));
9710 #endif  /* NO_DOLLAR_IN_LABEL */
9711 #endif  /* NO_DOT_IN_LABEL */
9712 }
9713
9714 /* Return a format for an anonymous aggregate name.  */
9715 const char *
9716 anon_aggrname_format()
9717 {
9718 #ifndef NO_DOT_IN_LABEL
9719  return "._%d";
9720 #else /* NO_DOT_IN_LABEL */
9721 #ifndef NO_DOLLAR_IN_LABEL
9722   return "$_%d";
9723 #else /* NO_DOLLAR_IN_LABEL */
9724   return "__anon_%d";
9725 #endif  /* NO_DOLLAR_IN_LABEL */
9726 #endif  /* NO_DOT_IN_LABEL */
9727 }
9728
9729 /* Generate a name for a special-purpose function.
9730    The generated name may need to be unique across the whole link.
9731    Changes to this function may also require corresponding changes to
9732    xstrdup_mask_random.
9733    TYPE is some string to identify the purpose of this function to the
9734    linker or collect2; it must start with an uppercase letter,
9735    one of:
9736    I - for constructors
9737    D - for destructors
9738    N - for C++ anonymous namespaces
9739    F - for DWARF unwind frame information.  */
9740
9741 tree
9742 get_file_function_name (const char *type)
9743 {
9744   char *buf;
9745   const char *p;
9746   char *q;
9747
9748   /* If we already have a name we know to be unique, just use that.  */
9749   if (first_global_object_name)
9750     p = q = ASTRDUP (first_global_object_name);
9751   /* If the target is handling the constructors/destructors, they
9752      will be local to this file and the name is only necessary for
9753      debugging purposes. 
9754      We also assign sub_I and sub_D sufixes to constructors called from
9755      the global static constructors.  These are always local.  */
9756   else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9757            || (strncmp (type, "sub_", 4) == 0
9758                && (type[4] == 'I' || type[4] == 'D')))
9759     {
9760       const char *file = main_input_filename;
9761       if (! file)
9762         file = LOCATION_FILE (input_location);
9763       /* Just use the file's basename, because the full pathname
9764          might be quite long.  */
9765       p = q = ASTRDUP (lbasename (file));
9766     }
9767   else
9768     {
9769       /* Otherwise, the name must be unique across the entire link.
9770          We don't have anything that we know to be unique to this translation
9771          unit, so use what we do have and throw in some randomness.  */
9772       unsigned len;
9773       const char *name = weak_global_object_name;
9774       const char *file = main_input_filename;
9775
9776       if (! name)
9777         name = "";
9778       if (! file)
9779         file = LOCATION_FILE (input_location);
9780
9781       len = strlen (file);
9782       q = (char *) alloca (9 + 19 + len + 1);
9783       memcpy (q, file, len + 1);
9784
9785       snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9786                 crc32_string (0, name), get_random_seed (false));
9787
9788       p = q;
9789     }
9790
9791   clean_symbol_name (q);
9792   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9793                          + strlen (type));
9794
9795   /* Set up the name of the file-level functions we may need.
9796      Use a global object (which is already required to be unique over
9797      the program) rather than the file name (which imposes extra
9798      constraints).  */
9799   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9800
9801   return get_identifier (buf);
9802 }
9803 \f
9804 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9805
9806 /* Complain that the tree code of NODE does not match the expected 0
9807    terminated list of trailing codes. The trailing code list can be
9808    empty, for a more vague error message.  FILE, LINE, and FUNCTION
9809    are of the caller.  */
9810
9811 void
9812 tree_check_failed (const_tree node, const char *file,
9813                    int line, const char *function, ...)
9814 {
9815   va_list args;
9816   const char *buffer;
9817   unsigned length = 0;
9818   enum tree_code code;
9819
9820   va_start (args, function);
9821   while ((code = (enum tree_code) va_arg (args, int)))
9822     length += 4 + strlen (get_tree_code_name (code));
9823   va_end (args);
9824   if (length)
9825     {
9826       char *tmp;
9827       va_start (args, function);
9828       length += strlen ("expected ");
9829       buffer = tmp = (char *) alloca (length);
9830       length = 0;
9831       while ((code = (enum tree_code) va_arg (args, int)))
9832         {
9833           const char *prefix = length ? " or " : "expected ";
9834
9835           strcpy (tmp + length, prefix);
9836           length += strlen (prefix);
9837           strcpy (tmp + length, get_tree_code_name (code));
9838           length += strlen (get_tree_code_name (code));
9839         }
9840       va_end (args);
9841     }
9842   else
9843     buffer = "unexpected node";
9844
9845   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9846                   buffer, get_tree_code_name (TREE_CODE (node)),
9847                   function, trim_filename (file), line);
9848 }
9849
9850 /* Complain that the tree code of NODE does match the expected 0
9851    terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9852    the caller.  */
9853
9854 void
9855 tree_not_check_failed (const_tree node, const char *file,
9856                        int line, const char *function, ...)
9857 {
9858   va_list args;
9859   char *buffer;
9860   unsigned length = 0;
9861   enum tree_code code;
9862
9863   va_start (args, function);
9864   while ((code = (enum tree_code) va_arg (args, int)))
9865     length += 4 + strlen (get_tree_code_name (code));
9866   va_end (args);
9867   va_start (args, function);
9868   buffer = (char *) alloca (length);
9869   length = 0;
9870   while ((code = (enum tree_code) va_arg (args, int)))
9871     {
9872       if (length)
9873         {
9874           strcpy (buffer + length, " or ");
9875           length += 4;
9876         }
9877       strcpy (buffer + length, get_tree_code_name (code));
9878       length += strlen (get_tree_code_name (code));
9879     }
9880   va_end (args);
9881
9882   internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9883                   buffer, get_tree_code_name (TREE_CODE (node)),
9884                   function, trim_filename (file), line);
9885 }
9886
9887 /* Similar to tree_check_failed, except that we check for a class of tree
9888    code, given in CL.  */
9889
9890 void
9891 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9892                          const char *file, int line, const char *function)
9893 {
9894   internal_error
9895     ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9896      TREE_CODE_CLASS_STRING (cl),
9897      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9898      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9899 }
9900
9901 /* Similar to tree_check_failed, except that instead of specifying a
9902    dozen codes, use the knowledge that they're all sequential.  */
9903
9904 void
9905 tree_range_check_failed (const_tree node, const char *file, int line,
9906                          const char *function, enum tree_code c1,
9907                          enum tree_code c2)
9908 {
9909   char *buffer;
9910   unsigned length = 0;
9911   unsigned int c;
9912
9913   for (c = c1; c <= c2; ++c)
9914     length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9915
9916   length += strlen ("expected ");
9917   buffer = (char *) alloca (length);
9918   length = 0;
9919
9920   for (c = c1; c <= c2; ++c)
9921     {
9922       const char *prefix = length ? " or " : "expected ";
9923
9924       strcpy (buffer + length, prefix);
9925       length += strlen (prefix);
9926       strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9927       length += strlen (get_tree_code_name ((enum tree_code) c));
9928     }
9929
9930   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9931                   buffer, get_tree_code_name (TREE_CODE (node)),
9932                   function, trim_filename (file), line);
9933 }
9934
9935
9936 /* Similar to tree_check_failed, except that we check that a tree does
9937    not have the specified code, given in CL.  */
9938
9939 void
9940 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9941                              const char *file, int line, const char *function)
9942 {
9943   internal_error
9944     ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9945      TREE_CODE_CLASS_STRING (cl),
9946      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9947      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9948 }
9949
9950
9951 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes.  */
9952
9953 void
9954 omp_clause_check_failed (const_tree node, const char *file, int line,
9955                          const char *function, enum omp_clause_code code)
9956 {
9957   internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9958                   omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9959                   function, trim_filename (file), line);
9960 }
9961
9962
9963 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes.  */
9964
9965 void
9966 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9967                                const char *function, enum omp_clause_code c1,
9968                                enum omp_clause_code c2)
9969 {
9970   char *buffer;
9971   unsigned length = 0;
9972   unsigned int c;
9973
9974   for (c = c1; c <= c2; ++c)
9975     length += 4 + strlen (omp_clause_code_name[c]);
9976
9977   length += strlen ("expected ");
9978   buffer = (char *) alloca (length);
9979   length = 0;
9980
9981   for (c = c1; c <= c2; ++c)
9982     {
9983       const char *prefix = length ? " or " : "expected ";
9984
9985       strcpy (buffer + length, prefix);
9986       length += strlen (prefix);
9987       strcpy (buffer + length, omp_clause_code_name[c]);
9988       length += strlen (omp_clause_code_name[c]);
9989     }
9990
9991   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9992                   buffer, omp_clause_code_name[TREE_CODE (node)],
9993                   function, trim_filename (file), line);
9994 }
9995
9996
9997 #undef DEFTREESTRUCT
9998 #define DEFTREESTRUCT(VAL, NAME) NAME,
9999
10000 static const char *ts_enum_names[] = {
10001 #include "treestruct.def"
10002 };
10003 #undef DEFTREESTRUCT
10004
10005 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
10006
10007 /* Similar to tree_class_check_failed, except that we check for
10008    whether CODE contains the tree structure identified by EN.  */
10009
10010 void
10011 tree_contains_struct_check_failed (const_tree node,
10012                                    const enum tree_node_structure_enum en,
10013                                    const char *file, int line,
10014                                    const char *function)
10015 {
10016   internal_error
10017     ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
10018      TS_ENUM_NAME (en),
10019      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
10020 }
10021
10022
10023 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10024    (dynamically sized) vector.  */
10025
10026 void
10027 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
10028                                const char *function)
10029 {
10030   internal_error
10031     ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
10032      idx + 1, len, function, trim_filename (file), line);
10033 }
10034
10035 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10036    (dynamically sized) vector.  */
10037
10038 void
10039 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
10040                            const char *function)
10041 {
10042   internal_error
10043     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
10044      idx + 1, len, function, trim_filename (file), line);
10045 }
10046
10047 /* Similar to above, except that the check is for the bounds of the operand
10048    vector of an expression node EXP.  */
10049
10050 void
10051 tree_operand_check_failed (int idx, const_tree exp, const char *file,
10052                            int line, const char *function)
10053 {
10054   enum tree_code code = TREE_CODE (exp);
10055   internal_error
10056     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
10057      idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
10058      function, trim_filename (file), line);
10059 }
10060
10061 /* Similar to above, except that the check is for the number of
10062    operands of an OMP_CLAUSE node.  */
10063
10064 void
10065 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
10066                                  int line, const char *function)
10067 {
10068   internal_error
10069     ("tree check: accessed operand %d of omp_clause %s with %d operands "
10070      "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
10071      omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
10072      trim_filename (file), line);
10073 }
10074 #endif /* ENABLE_TREE_CHECKING */
10075 \f
10076 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
10077    and mapped to the machine mode MODE.  Initialize its fields and build
10078    the information necessary for debugging output.  */
10079
10080 static tree
10081 make_vector_type (tree innertype, int nunits, machine_mode mode)
10082 {
10083   tree t;
10084   tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
10085
10086   t = make_node (VECTOR_TYPE);
10087   TREE_TYPE (t) = mv_innertype;
10088   SET_TYPE_VECTOR_SUBPARTS (t, nunits);
10089   SET_TYPE_MODE (t, mode);
10090
10091   if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
10092     SET_TYPE_STRUCTURAL_EQUALITY (t);
10093   else if ((TYPE_CANONICAL (mv_innertype) != innertype
10094             || mode != VOIDmode)
10095            && !VECTOR_BOOLEAN_TYPE_P (t))
10096     TYPE_CANONICAL (t)
10097       = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
10098
10099   layout_type (t);
10100
10101   hashval_t hash = type_hash_canon_hash (t);
10102   t = type_hash_canon (hash, t);
10103
10104   /* We have built a main variant, based on the main variant of the
10105      inner type. Use it to build the variant we return.  */
10106   if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
10107       && TREE_TYPE (t) != innertype)
10108     return build_type_attribute_qual_variant (t,
10109                                               TYPE_ATTRIBUTES (innertype),
10110                                               TYPE_QUALS (innertype));
10111
10112   return t;
10113 }
10114
10115 static tree
10116 make_or_reuse_type (unsigned size, int unsignedp)
10117 {
10118   int i;
10119
10120   if (size == INT_TYPE_SIZE)
10121     return unsignedp ? unsigned_type_node : integer_type_node;
10122   if (size == CHAR_TYPE_SIZE)
10123     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
10124   if (size == SHORT_TYPE_SIZE)
10125     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
10126   if (size == LONG_TYPE_SIZE)
10127     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
10128   if (size == LONG_LONG_TYPE_SIZE)
10129     return (unsignedp ? long_long_unsigned_type_node
10130             : long_long_integer_type_node);
10131
10132   for (i = 0; i < NUM_INT_N_ENTS; i ++)
10133     if (size == int_n_data[i].bitsize
10134         && int_n_enabled_p[i])
10135       return (unsignedp ? int_n_trees[i].unsigned_type
10136               : int_n_trees[i].signed_type);
10137
10138   if (unsignedp)
10139     return make_unsigned_type (size);
10140   else
10141     return make_signed_type (size);
10142 }
10143
10144 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP.  */
10145
10146 static tree
10147 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
10148 {
10149   if (satp)
10150     {
10151       if (size == SHORT_FRACT_TYPE_SIZE)
10152         return unsignedp ? sat_unsigned_short_fract_type_node
10153                          : sat_short_fract_type_node;
10154       if (size == FRACT_TYPE_SIZE)
10155         return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
10156       if (size == LONG_FRACT_TYPE_SIZE)
10157         return unsignedp ? sat_unsigned_long_fract_type_node
10158                          : sat_long_fract_type_node;
10159       if (size == LONG_LONG_FRACT_TYPE_SIZE)
10160         return unsignedp ? sat_unsigned_long_long_fract_type_node
10161                          : sat_long_long_fract_type_node;
10162     }
10163   else
10164     {
10165       if (size == SHORT_FRACT_TYPE_SIZE)
10166         return unsignedp ? unsigned_short_fract_type_node
10167                          : short_fract_type_node;
10168       if (size == FRACT_TYPE_SIZE)
10169         return unsignedp ? unsigned_fract_type_node : fract_type_node;
10170       if (size == LONG_FRACT_TYPE_SIZE)
10171         return unsignedp ? unsigned_long_fract_type_node
10172                          : long_fract_type_node;
10173       if (size == LONG_LONG_FRACT_TYPE_SIZE)
10174         return unsignedp ? unsigned_long_long_fract_type_node
10175                          : long_long_fract_type_node;
10176     }
10177
10178   return make_fract_type (size, unsignedp, satp);
10179 }
10180
10181 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP.  */
10182
10183 static tree
10184 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
10185 {
10186   if (satp)
10187     {
10188       if (size == SHORT_ACCUM_TYPE_SIZE)
10189         return unsignedp ? sat_unsigned_short_accum_type_node
10190                          : sat_short_accum_type_node;
10191       if (size == ACCUM_TYPE_SIZE)
10192         return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
10193       if (size == LONG_ACCUM_TYPE_SIZE)
10194         return unsignedp ? sat_unsigned_long_accum_type_node
10195                          : sat_long_accum_type_node;
10196       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10197         return unsignedp ? sat_unsigned_long_long_accum_type_node
10198                          : sat_long_long_accum_type_node;
10199     }
10200   else
10201     {
10202       if (size == SHORT_ACCUM_TYPE_SIZE)
10203         return unsignedp ? unsigned_short_accum_type_node
10204                          : short_accum_type_node;
10205       if (size == ACCUM_TYPE_SIZE)
10206         return unsignedp ? unsigned_accum_type_node : accum_type_node;
10207       if (size == LONG_ACCUM_TYPE_SIZE)
10208         return unsignedp ? unsigned_long_accum_type_node
10209                          : long_accum_type_node;
10210       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10211         return unsignedp ? unsigned_long_long_accum_type_node
10212                          : long_long_accum_type_node;
10213     }
10214
10215   return make_accum_type (size, unsignedp, satp);
10216 }
10217
10218
10219 /* Create an atomic variant node for TYPE.  This routine is called
10220    during initialization of data types to create the 5 basic atomic
10221    types. The generic build_variant_type function requires these to
10222    already be set up in order to function properly, so cannot be
10223    called from there.  If ALIGN is non-zero, then ensure alignment is
10224    overridden to this value.  */
10225
10226 static tree
10227 build_atomic_base (tree type, unsigned int align)
10228 {
10229   tree t;
10230
10231   /* Make sure its not already registered.  */
10232   if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
10233     return t;
10234   
10235   t = build_variant_type_copy (type);
10236   set_type_quals (t, TYPE_QUAL_ATOMIC);
10237
10238   if (align)
10239     SET_TYPE_ALIGN (t, align);
10240
10241   return t;
10242 }
10243
10244 /* Information about the _FloatN and _FloatNx types.  This must be in
10245    the same order as the corresponding TI_* enum values.  */
10246 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
10247   {
10248     { 16, false },
10249     { 32, false },
10250     { 64, false },
10251     { 128, false },
10252     { 32, true },
10253     { 64, true },
10254     { 128, true },
10255   };
10256
10257
10258 /* Create nodes for all integer types (and error_mark_node) using the sizes
10259    of C datatypes.  SIGNED_CHAR specifies whether char is signed.  */
10260
10261 void
10262 build_common_tree_nodes (bool signed_char)
10263 {
10264   int i;
10265
10266   error_mark_node = make_node (ERROR_MARK);
10267   TREE_TYPE (error_mark_node) = error_mark_node;
10268
10269   initialize_sizetypes ();
10270
10271   /* Define both `signed char' and `unsigned char'.  */
10272   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
10273   TYPE_STRING_FLAG (signed_char_type_node) = 1;
10274   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
10275   TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
10276
10277   /* Define `char', which is like either `signed char' or `unsigned char'
10278      but not the same as either.  */
10279   char_type_node
10280     = (signed_char
10281        ? make_signed_type (CHAR_TYPE_SIZE)
10282        : make_unsigned_type (CHAR_TYPE_SIZE));
10283   TYPE_STRING_FLAG (char_type_node) = 1;
10284
10285   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
10286   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
10287   integer_type_node = make_signed_type (INT_TYPE_SIZE);
10288   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
10289   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
10290   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
10291   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
10292   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
10293
10294   for (i = 0; i < NUM_INT_N_ENTS; i ++)
10295     {
10296       int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
10297       int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
10298       TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
10299       TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
10300
10301       if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
10302           && int_n_enabled_p[i])
10303         {
10304           integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
10305           integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
10306         }
10307     }
10308
10309   /* Define a boolean type.  This type only represents boolean values but
10310      may be larger than char depending on the value of BOOL_TYPE_SIZE.  */
10311   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
10312   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
10313   TYPE_PRECISION (boolean_type_node) = 1;
10314   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
10315
10316   /* Define what type to use for size_t.  */
10317   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
10318     size_type_node = unsigned_type_node;
10319   else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
10320     size_type_node = long_unsigned_type_node;
10321   else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
10322     size_type_node = long_long_unsigned_type_node;
10323   else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
10324     size_type_node = short_unsigned_type_node;
10325   else
10326     {
10327       int i;
10328
10329       size_type_node = NULL_TREE;
10330       for (i = 0; i < NUM_INT_N_ENTS; i++)
10331         if (int_n_enabled_p[i])
10332           {
10333             char name[50];
10334             sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
10335
10336             if (strcmp (name, SIZE_TYPE) == 0)
10337               {
10338                 size_type_node = int_n_trees[i].unsigned_type;
10339               }
10340           }
10341       if (size_type_node == NULL_TREE)
10342         gcc_unreachable ();
10343     }
10344
10345   /* Define what type to use for ptrdiff_t.  */
10346   if (strcmp (PTRDIFF_TYPE, "int") == 0)
10347     ptrdiff_type_node = integer_type_node;
10348   else if (strcmp (PTRDIFF_TYPE, "long int") == 0)
10349     ptrdiff_type_node = long_integer_type_node;
10350   else if (strcmp (PTRDIFF_TYPE, "long long int") == 0)
10351     ptrdiff_type_node = long_long_integer_type_node;
10352   else if (strcmp (PTRDIFF_TYPE, "short int") == 0)
10353     ptrdiff_type_node = short_integer_type_node;
10354   else
10355     {
10356       ptrdiff_type_node = NULL_TREE;
10357       for (int i = 0; i < NUM_INT_N_ENTS; i++)
10358         if (int_n_enabled_p[i])
10359           {
10360             char name[50];
10361             sprintf (name, "__int%d", int_n_data[i].bitsize);
10362             if (strcmp (name, PTRDIFF_TYPE) == 0)
10363               ptrdiff_type_node = int_n_trees[i].signed_type;
10364           }
10365       if (ptrdiff_type_node == NULL_TREE)
10366         gcc_unreachable ();
10367     }
10368
10369   /* Fill in the rest of the sized types.  Reuse existing type nodes
10370      when possible.  */
10371   intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
10372   intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
10373   intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
10374   intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
10375   intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
10376
10377   unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
10378   unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
10379   unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
10380   unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
10381   unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
10382
10383   /* Don't call build_qualified type for atomics.  That routine does
10384      special processing for atomics, and until they are initialized
10385      it's better not to make that call.
10386      
10387      Check to see if there is a target override for atomic types.  */
10388
10389   atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
10390                                         targetm.atomic_align_for_mode (QImode));
10391   atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
10392                                         targetm.atomic_align_for_mode (HImode));
10393   atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
10394                                         targetm.atomic_align_for_mode (SImode));
10395   atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
10396                                         targetm.atomic_align_for_mode (DImode));
10397   atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
10398                                         targetm.atomic_align_for_mode (TImode));
10399         
10400   access_public_node = get_identifier ("public");
10401   access_protected_node = get_identifier ("protected");
10402   access_private_node = get_identifier ("private");
10403
10404   /* Define these next since types below may used them.  */
10405   integer_zero_node = build_int_cst (integer_type_node, 0);
10406   integer_one_node = build_int_cst (integer_type_node, 1);
10407   integer_three_node = build_int_cst (integer_type_node, 3);
10408   integer_minus_one_node = build_int_cst (integer_type_node, -1);
10409
10410   size_zero_node = size_int (0);
10411   size_one_node = size_int (1);
10412   bitsize_zero_node = bitsize_int (0);
10413   bitsize_one_node = bitsize_int (1);
10414   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
10415
10416   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
10417   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
10418
10419   void_type_node = make_node (VOID_TYPE);
10420   layout_type (void_type_node);
10421
10422   pointer_bounds_type_node = targetm.chkp_bound_type ();
10423
10424   /* We are not going to have real types in C with less than byte alignment,
10425      so we might as well not have any types that claim to have it.  */
10426   SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT);
10427   TYPE_USER_ALIGN (void_type_node) = 0;
10428
10429   void_node = make_node (VOID_CST);
10430   TREE_TYPE (void_node) = void_type_node;
10431
10432   null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
10433   layout_type (TREE_TYPE (null_pointer_node));
10434
10435   ptr_type_node = build_pointer_type (void_type_node);
10436   const_ptr_type_node
10437     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
10438   fileptr_type_node = ptr_type_node;
10439   const_tm_ptr_type_node = const_ptr_type_node;
10440
10441   pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
10442
10443   float_type_node = make_node (REAL_TYPE);
10444   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
10445   layout_type (float_type_node);
10446
10447   double_type_node = make_node (REAL_TYPE);
10448   TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
10449   layout_type (double_type_node);
10450
10451   long_double_type_node = make_node (REAL_TYPE);
10452   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
10453   layout_type (long_double_type_node);
10454
10455   for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10456     {
10457       int n = floatn_nx_types[i].n;
10458       bool extended = floatn_nx_types[i].extended;
10459       machine_mode mode = targetm.floatn_mode (n, extended);
10460       if (mode == VOIDmode)
10461         continue;
10462       int precision = GET_MODE_PRECISION (mode);
10463       /* Work around the rs6000 KFmode having precision 113 not
10464          128.  */
10465       const struct real_format *fmt = REAL_MODE_FORMAT (mode);
10466       gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3);
10467       int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin);
10468       if (!extended)
10469         gcc_assert (min_precision == n);
10470       if (precision < min_precision)
10471         precision = min_precision;
10472       FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE);
10473       TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision;
10474       layout_type (FLOATN_NX_TYPE_NODE (i));
10475       SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode);
10476     }
10477
10478   float_ptr_type_node = build_pointer_type (float_type_node);
10479   double_ptr_type_node = build_pointer_type (double_type_node);
10480   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
10481   integer_ptr_type_node = build_pointer_type (integer_type_node);
10482
10483   /* Fixed size integer types.  */
10484   uint16_type_node = make_or_reuse_type (16, 1);
10485   uint32_type_node = make_or_reuse_type (32, 1);
10486   uint64_type_node = make_or_reuse_type (64, 1);
10487
10488   /* Decimal float types. */
10489   dfloat32_type_node = make_node (REAL_TYPE);
10490   TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
10491   SET_TYPE_MODE (dfloat32_type_node, SDmode);
10492   layout_type (dfloat32_type_node);
10493   dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
10494
10495   dfloat64_type_node = make_node (REAL_TYPE);
10496   TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
10497   SET_TYPE_MODE (dfloat64_type_node, DDmode);
10498   layout_type (dfloat64_type_node);
10499   dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
10500
10501   dfloat128_type_node = make_node (REAL_TYPE);
10502   TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
10503   SET_TYPE_MODE (dfloat128_type_node, TDmode);
10504   layout_type (dfloat128_type_node);
10505   dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
10506
10507   complex_integer_type_node = build_complex_type (integer_type_node, true);
10508   complex_float_type_node = build_complex_type (float_type_node, true);
10509   complex_double_type_node = build_complex_type (double_type_node, true);
10510   complex_long_double_type_node = build_complex_type (long_double_type_node,
10511                                                       true);
10512
10513   for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10514     {
10515       if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE)
10516         COMPLEX_FLOATN_NX_TYPE_NODE (i)
10517           = build_complex_type (FLOATN_NX_TYPE_NODE (i));
10518     }
10519
10520 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned.  */
10521 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
10522   sat_ ## KIND ## _type_node = \
10523     make_sat_signed_ ## KIND ## _type (SIZE); \
10524   sat_unsigned_ ## KIND ## _type_node = \
10525     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10526   KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10527   unsigned_ ## KIND ## _type_node = \
10528     make_unsigned_ ## KIND ## _type (SIZE);
10529
10530 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
10531   sat_ ## WIDTH ## KIND ## _type_node = \
10532     make_sat_signed_ ## KIND ## _type (SIZE); \
10533   sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
10534     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10535   WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10536   unsigned_ ## WIDTH ## KIND ## _type_node = \
10537     make_unsigned_ ## KIND ## _type (SIZE);
10538
10539 /* Make fixed-point type nodes based on four different widths.  */
10540 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
10541   MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
10542   MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
10543   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
10544   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
10545
10546 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned.  */
10547 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
10548   NAME ## _type_node = \
10549     make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
10550   u ## NAME ## _type_node = \
10551     make_or_reuse_unsigned_ ## KIND ## _type \
10552       (GET_MODE_BITSIZE (U ## MODE ## mode)); \
10553   sat_ ## NAME ## _type_node = \
10554     make_or_reuse_sat_signed_ ## KIND ## _type \
10555       (GET_MODE_BITSIZE (MODE ## mode)); \
10556   sat_u ## NAME ## _type_node = \
10557     make_or_reuse_sat_unsigned_ ## KIND ## _type \
10558       (GET_MODE_BITSIZE (U ## MODE ## mode));
10559
10560   /* Fixed-point type and mode nodes.  */
10561   MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
10562   MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
10563   MAKE_FIXED_MODE_NODE (fract, qq, QQ)
10564   MAKE_FIXED_MODE_NODE (fract, hq, HQ)
10565   MAKE_FIXED_MODE_NODE (fract, sq, SQ)
10566   MAKE_FIXED_MODE_NODE (fract, dq, DQ)
10567   MAKE_FIXED_MODE_NODE (fract, tq, TQ)
10568   MAKE_FIXED_MODE_NODE (accum, ha, HA)
10569   MAKE_FIXED_MODE_NODE (accum, sa, SA)
10570   MAKE_FIXED_MODE_NODE (accum, da, DA)
10571   MAKE_FIXED_MODE_NODE (accum, ta, TA)
10572
10573   {
10574     tree t = targetm.build_builtin_va_list ();
10575
10576     /* Many back-ends define record types without setting TYPE_NAME.
10577        If we copied the record type here, we'd keep the original
10578        record type without a name.  This breaks name mangling.  So,
10579        don't copy record types and let c_common_nodes_and_builtins()
10580        declare the type to be __builtin_va_list.  */
10581     if (TREE_CODE (t) != RECORD_TYPE)
10582       t = build_variant_type_copy (t);
10583
10584     va_list_type_node = t;
10585   }
10586 }
10587
10588 /* Modify DECL for given flags.
10589    TM_PURE attribute is set only on types, so the function will modify
10590    DECL's type when ECF_TM_PURE is used.  */
10591
10592 void
10593 set_call_expr_flags (tree decl, int flags)
10594 {
10595   if (flags & ECF_NOTHROW)
10596     TREE_NOTHROW (decl) = 1;
10597   if (flags & ECF_CONST)
10598     TREE_READONLY (decl) = 1;
10599   if (flags & ECF_PURE)
10600     DECL_PURE_P (decl) = 1;
10601   if (flags & ECF_LOOPING_CONST_OR_PURE)
10602     DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
10603   if (flags & ECF_NOVOPS)
10604     DECL_IS_NOVOPS (decl) = 1;
10605   if (flags & ECF_NORETURN)
10606     TREE_THIS_VOLATILE (decl) = 1;
10607   if (flags & ECF_MALLOC)
10608     DECL_IS_MALLOC (decl) = 1;
10609   if (flags & ECF_RETURNS_TWICE)
10610     DECL_IS_RETURNS_TWICE (decl) = 1;
10611   if (flags & ECF_LEAF)
10612     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
10613                                         NULL, DECL_ATTRIBUTES (decl));
10614   if (flags & ECF_RET1)
10615     DECL_ATTRIBUTES (decl)
10616       = tree_cons (get_identifier ("fn spec"),
10617                    build_tree_list (NULL_TREE, build_string (1, "1")),
10618                    DECL_ATTRIBUTES (decl));
10619   if ((flags & ECF_TM_PURE) && flag_tm)
10620     apply_tm_attr (decl, get_identifier ("transaction_pure"));
10621   /* Looping const or pure is implied by noreturn.
10622      There is currently no way to declare looping const or looping pure alone.  */
10623   gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
10624               || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
10625 }
10626
10627
10628 /* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
10629
10630 static void
10631 local_define_builtin (const char *name, tree type, enum built_in_function code,
10632                       const char *library_name, int ecf_flags)
10633 {
10634   tree decl;
10635
10636   decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10637                                library_name, NULL_TREE);
10638   set_call_expr_flags (decl, ecf_flags);
10639
10640   set_builtin_decl (code, decl, true);
10641 }
10642
10643 /* Call this function after instantiating all builtins that the language
10644    front end cares about.  This will build the rest of the builtins
10645    and internal functions that are relied upon by the tree optimizers and
10646    the middle-end.  */
10647
10648 void
10649 build_common_builtin_nodes (void)
10650 {
10651   tree tmp, ftype;
10652   int ecf_flags;
10653
10654   if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
10655       || !builtin_decl_explicit_p (BUILT_IN_ABORT))
10656     {
10657       ftype = build_function_type (void_type_node, void_list_node);
10658       if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10659         local_define_builtin ("__builtin_unreachable", ftype,
10660                               BUILT_IN_UNREACHABLE,
10661                               "__builtin_unreachable",
10662                               ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10663                               | ECF_CONST);
10664       if (!builtin_decl_explicit_p (BUILT_IN_ABORT))
10665         local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
10666                               "abort",
10667                               ECF_LEAF | ECF_NORETURN | ECF_CONST);
10668     }
10669
10670   if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10671       || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10672     {
10673       ftype = build_function_type_list (ptr_type_node,
10674                                         ptr_type_node, const_ptr_type_node,
10675                                         size_type_node, NULL_TREE);
10676
10677       if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10678         local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10679                               "memcpy", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10680       if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10681         local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10682                               "memmove", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10683     }
10684
10685   if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10686     {
10687       ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10688                                         const_ptr_type_node, size_type_node,
10689                                         NULL_TREE);
10690       local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10691                             "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10692     }
10693
10694   if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10695     {
10696       ftype = build_function_type_list (ptr_type_node,
10697                                         ptr_type_node, integer_type_node,
10698                                         size_type_node, NULL_TREE);
10699       local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10700                             "memset", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10701     }
10702
10703   /* If we're checking the stack, `alloca' can throw.  */
10704   const int alloca_flags
10705     = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW);
10706
10707   if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10708     {
10709       ftype = build_function_type_list (ptr_type_node,
10710                                         size_type_node, NULL_TREE);
10711       local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10712                             "alloca", alloca_flags);
10713     }
10714
10715   ftype = build_function_type_list (ptr_type_node, size_type_node,
10716                                     size_type_node, NULL_TREE);
10717   local_define_builtin ("__builtin_alloca_with_align", ftype,
10718                         BUILT_IN_ALLOCA_WITH_ALIGN,
10719                         "__builtin_alloca_with_align",
10720                         alloca_flags);
10721
10722   ftype = build_function_type_list (void_type_node,
10723                                     ptr_type_node, ptr_type_node,
10724                                     ptr_type_node, NULL_TREE);
10725   local_define_builtin ("__builtin_init_trampoline", ftype,
10726                         BUILT_IN_INIT_TRAMPOLINE,
10727                         "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10728   local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10729                         BUILT_IN_INIT_HEAP_TRAMPOLINE,
10730                         "__builtin_init_heap_trampoline",
10731                         ECF_NOTHROW | ECF_LEAF);
10732   local_define_builtin ("__builtin_init_descriptor", ftype,
10733                         BUILT_IN_INIT_DESCRIPTOR,
10734                         "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF);
10735
10736   ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10737   local_define_builtin ("__builtin_adjust_trampoline", ftype,
10738                         BUILT_IN_ADJUST_TRAMPOLINE,
10739                         "__builtin_adjust_trampoline",
10740                         ECF_CONST | ECF_NOTHROW);
10741   local_define_builtin ("__builtin_adjust_descriptor", ftype,
10742                         BUILT_IN_ADJUST_DESCRIPTOR,
10743                         "__builtin_adjust_descriptor",
10744                         ECF_CONST | ECF_NOTHROW);
10745
10746   ftype = build_function_type_list (void_type_node,
10747                                     ptr_type_node, ptr_type_node, NULL_TREE);
10748   local_define_builtin ("__builtin_nonlocal_goto", ftype,
10749                         BUILT_IN_NONLOCAL_GOTO,
10750                         "__builtin_nonlocal_goto",
10751                         ECF_NORETURN | ECF_NOTHROW);
10752
10753   ftype = build_function_type_list (void_type_node,
10754                                     ptr_type_node, ptr_type_node, NULL_TREE);
10755   local_define_builtin ("__builtin_setjmp_setup", ftype,
10756                         BUILT_IN_SETJMP_SETUP,
10757                         "__builtin_setjmp_setup", ECF_NOTHROW);
10758
10759   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10760   local_define_builtin ("__builtin_setjmp_receiver", ftype,
10761                         BUILT_IN_SETJMP_RECEIVER,
10762                         "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10763
10764   ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10765   local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10766                         "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10767
10768   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10769   local_define_builtin ("__builtin_stack_restore", ftype,
10770                         BUILT_IN_STACK_RESTORE,
10771                         "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10772
10773   ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10774                                     const_ptr_type_node, size_type_node,
10775                                     NULL_TREE);
10776   local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ,
10777                         "__builtin_memcmp_eq",
10778                         ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10779
10780   /* If there's a possibility that we might use the ARM EABI, build the
10781     alternate __cxa_end_cleanup node used to resume from C++ and Java.  */
10782   if (targetm.arm_eabi_unwinder)
10783     {
10784       ftype = build_function_type_list (void_type_node, NULL_TREE);
10785       local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10786                             BUILT_IN_CXA_END_CLEANUP,
10787                             "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10788     }
10789
10790   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10791   local_define_builtin ("__builtin_unwind_resume", ftype,
10792                         BUILT_IN_UNWIND_RESUME,
10793                         ((targetm_common.except_unwind_info (&global_options)
10794                           == UI_SJLJ)
10795                          ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10796                         ECF_NORETURN);
10797
10798   if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10799     {
10800       ftype = build_function_type_list (ptr_type_node, integer_type_node,
10801                                         NULL_TREE);
10802       local_define_builtin ("__builtin_return_address", ftype,
10803                             BUILT_IN_RETURN_ADDRESS,
10804                             "__builtin_return_address",
10805                             ECF_NOTHROW);
10806     }
10807
10808   if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10809       || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10810     {
10811       ftype = build_function_type_list (void_type_node, ptr_type_node,
10812                                         ptr_type_node, NULL_TREE);
10813       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10814         local_define_builtin ("__cyg_profile_func_enter", ftype,
10815                               BUILT_IN_PROFILE_FUNC_ENTER,
10816                               "__cyg_profile_func_enter", 0);
10817       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10818         local_define_builtin ("__cyg_profile_func_exit", ftype,
10819                               BUILT_IN_PROFILE_FUNC_EXIT,
10820                               "__cyg_profile_func_exit", 0);
10821     }
10822
10823   /* The exception object and filter values from the runtime.  The argument
10824      must be zero before exception lowering, i.e. from the front end.  After
10825      exception lowering, it will be the region number for the exception
10826      landing pad.  These functions are PURE instead of CONST to prevent
10827      them from being hoisted past the exception edge that will initialize
10828      its value in the landing pad.  */
10829   ftype = build_function_type_list (ptr_type_node,
10830                                     integer_type_node, NULL_TREE);
10831   ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10832   /* Only use TM_PURE if we have TM language support.  */
10833   if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10834     ecf_flags |= ECF_TM_PURE;
10835   local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10836                         "__builtin_eh_pointer", ecf_flags);
10837
10838   tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10839   ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10840   local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10841                         "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10842
10843   ftype = build_function_type_list (void_type_node,
10844                                     integer_type_node, integer_type_node,
10845                                     NULL_TREE);
10846   local_define_builtin ("__builtin_eh_copy_values", ftype,
10847                         BUILT_IN_EH_COPY_VALUES,
10848                         "__builtin_eh_copy_values", ECF_NOTHROW);
10849
10850   /* Complex multiplication and division.  These are handled as builtins
10851      rather than optabs because emit_library_call_value doesn't support
10852      complex.  Further, we can do slightly better with folding these
10853      beasties if the real and complex parts of the arguments are separate.  */
10854   {
10855     int mode;
10856
10857     for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10858       {
10859         char mode_name_buf[4], *q;
10860         const char *p;
10861         enum built_in_function mcode, dcode;
10862         tree type, inner_type;
10863         const char *prefix = "__";
10864
10865         if (targetm.libfunc_gnu_prefix)
10866           prefix = "__gnu_";
10867
10868         type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10869         if (type == NULL)
10870           continue;
10871         inner_type = TREE_TYPE (type);
10872
10873         ftype = build_function_type_list (type, inner_type, inner_type,
10874                                           inner_type, inner_type, NULL_TREE);
10875
10876         mcode = ((enum built_in_function)
10877                  (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10878         dcode = ((enum built_in_function)
10879                  (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10880
10881         for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10882           *q = TOLOWER (*p);
10883         *q = '\0';
10884
10885         built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10886                                         NULL);
10887         local_define_builtin (built_in_names[mcode], ftype, mcode,
10888                               built_in_names[mcode],
10889                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10890
10891         built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10892                                         NULL);
10893         local_define_builtin (built_in_names[dcode], ftype, dcode,
10894                               built_in_names[dcode],
10895                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10896       }
10897   }
10898
10899   init_internal_fns ();
10900 }
10901
10902 /* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
10903    better way.
10904
10905    If we requested a pointer to a vector, build up the pointers that
10906    we stripped off while looking for the inner type.  Similarly for
10907    return values from functions.
10908
10909    The argument TYPE is the top of the chain, and BOTTOM is the
10910    new type which we will point to.  */
10911
10912 tree
10913 reconstruct_complex_type (tree type, tree bottom)
10914 {
10915   tree inner, outer;
10916
10917   if (TREE_CODE (type) == POINTER_TYPE)
10918     {
10919       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10920       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10921                                            TYPE_REF_CAN_ALIAS_ALL (type));
10922     }
10923   else if (TREE_CODE (type) == REFERENCE_TYPE)
10924     {
10925       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10926       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10927                                              TYPE_REF_CAN_ALIAS_ALL (type));
10928     }
10929   else if (TREE_CODE (type) == ARRAY_TYPE)
10930     {
10931       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10932       outer = build_array_type (inner, TYPE_DOMAIN (type));
10933     }
10934   else if (TREE_CODE (type) == FUNCTION_TYPE)
10935     {
10936       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10937       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10938     }
10939   else if (TREE_CODE (type) == METHOD_TYPE)
10940     {
10941       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10942       /* The build_method_type_directly() routine prepends 'this' to argument list,
10943          so we must compensate by getting rid of it.  */
10944       outer
10945         = build_method_type_directly
10946             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10947              inner,
10948              TREE_CHAIN (TYPE_ARG_TYPES (type)));
10949     }
10950   else if (TREE_CODE (type) == OFFSET_TYPE)
10951     {
10952       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10953       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10954     }
10955   else
10956     return bottom;
10957
10958   return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10959                                             TYPE_QUALS (type));
10960 }
10961
10962 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10963    the inner type.  */
10964 tree
10965 build_vector_type_for_mode (tree innertype, machine_mode mode)
10966 {
10967   int nunits;
10968
10969   switch (GET_MODE_CLASS (mode))
10970     {
10971     case MODE_VECTOR_INT:
10972     case MODE_VECTOR_FLOAT:
10973     case MODE_VECTOR_FRACT:
10974     case MODE_VECTOR_UFRACT:
10975     case MODE_VECTOR_ACCUM:
10976     case MODE_VECTOR_UACCUM:
10977       nunits = GET_MODE_NUNITS (mode);
10978       break;
10979
10980     case MODE_INT:
10981       /* Check that there are no leftover bits.  */
10982       gcc_assert (GET_MODE_BITSIZE (mode)
10983                   % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10984
10985       nunits = GET_MODE_BITSIZE (mode)
10986                / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10987       break;
10988
10989     default:
10990       gcc_unreachable ();
10991     }
10992
10993   return make_vector_type (innertype, nunits, mode);
10994 }
10995
10996 /* Similarly, but takes the inner type and number of units, which must be
10997    a power of two.  */
10998
10999 tree
11000 build_vector_type (tree innertype, int nunits)
11001 {
11002   return make_vector_type (innertype, nunits, VOIDmode);
11003 }
11004
11005 /* Build truth vector with specified length and number of units.  */
11006
11007 tree
11008 build_truth_vector_type (unsigned nunits, unsigned vector_size)
11009 {
11010   machine_mode mask_mode = targetm.vectorize.get_mask_mode (nunits,
11011                                                             vector_size);
11012
11013   gcc_assert (mask_mode != VOIDmode);
11014
11015   unsigned HOST_WIDE_INT vsize;
11016   if (mask_mode == BLKmode)
11017     vsize = vector_size * BITS_PER_UNIT;
11018   else
11019     vsize = GET_MODE_BITSIZE (mask_mode);
11020
11021   unsigned HOST_WIDE_INT esize = vsize / nunits;
11022   gcc_assert (esize * nunits == vsize);
11023
11024   tree bool_type = build_nonstandard_boolean_type (esize);
11025
11026   return make_vector_type (bool_type, nunits, mask_mode);
11027 }
11028
11029 /* Returns a vector type corresponding to a comparison of VECTYPE.  */
11030
11031 tree
11032 build_same_sized_truth_vector_type (tree vectype)
11033 {
11034   if (VECTOR_BOOLEAN_TYPE_P (vectype))
11035     return vectype;
11036
11037   unsigned HOST_WIDE_INT size = GET_MODE_SIZE (TYPE_MODE (vectype));
11038
11039   if (!size)
11040     size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
11041
11042   return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
11043 }
11044
11045 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set.  */
11046
11047 tree
11048 build_opaque_vector_type (tree innertype, int nunits)
11049 {
11050   tree t = make_vector_type (innertype, nunits, VOIDmode);
11051   tree cand;
11052   /* We always build the non-opaque variant before the opaque one,
11053      so if it already exists, it is TYPE_NEXT_VARIANT of this one.  */
11054   cand = TYPE_NEXT_VARIANT (t);
11055   if (cand
11056       && TYPE_VECTOR_OPAQUE (cand)
11057       && check_qualified_type (cand, t, TYPE_QUALS (t)))
11058     return cand;
11059   /* Othewise build a variant type and make sure to queue it after
11060      the non-opaque type.  */
11061   cand = build_distinct_type_copy (t);
11062   TYPE_VECTOR_OPAQUE (cand) = true;
11063   TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
11064   TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
11065   TYPE_NEXT_VARIANT (t) = cand;
11066   TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
11067   return cand;
11068 }
11069
11070
11071 /* Given an initializer INIT, return TRUE if INIT is zero or some
11072    aggregate of zeros.  Otherwise return FALSE.  */
11073 bool
11074 initializer_zerop (const_tree init)
11075 {
11076   tree elt;
11077
11078   STRIP_NOPS (init);
11079
11080   switch (TREE_CODE (init))
11081     {
11082     case INTEGER_CST:
11083       return integer_zerop (init);
11084
11085     case REAL_CST:
11086       /* ??? Note that this is not correct for C4X float formats.  There,
11087          a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
11088          negative exponent.  */
11089       return real_zerop (init)
11090         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
11091
11092     case FIXED_CST:
11093       return fixed_zerop (init);
11094
11095     case COMPLEX_CST:
11096       return integer_zerop (init)
11097         || (real_zerop (init)
11098             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
11099             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
11100
11101     case VECTOR_CST:
11102       {
11103         unsigned i;
11104         for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
11105           if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
11106             return false;
11107         return true;
11108       }
11109
11110     case CONSTRUCTOR:
11111       {
11112         unsigned HOST_WIDE_INT idx;
11113
11114         if (TREE_CLOBBER_P (init))
11115           return false;
11116         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
11117           if (!initializer_zerop (elt))
11118             return false;
11119         return true;
11120       }
11121
11122     case STRING_CST:
11123       {
11124         int i;
11125
11126         /* We need to loop through all elements to handle cases like
11127            "\0" and "\0foobar".  */
11128         for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
11129           if (TREE_STRING_POINTER (init)[i] != '\0')
11130             return false;
11131
11132         return true;
11133       }
11134
11135     default:
11136       return false;
11137     }
11138 }
11139
11140 /* Check if vector VEC consists of all the equal elements and
11141    that the number of elements corresponds to the type of VEC.
11142    The function returns first element of the vector
11143    or NULL_TREE if the vector is not uniform.  */
11144 tree
11145 uniform_vector_p (const_tree vec)
11146 {
11147   tree first, t;
11148   unsigned i;
11149
11150   if (vec == NULL_TREE)
11151     return NULL_TREE;
11152
11153   gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
11154
11155   if (TREE_CODE (vec) == VECTOR_CST)
11156     {
11157       first = VECTOR_CST_ELT (vec, 0);
11158       for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
11159         if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
11160           return NULL_TREE;
11161
11162       return first;
11163     }
11164
11165   else if (TREE_CODE (vec) == CONSTRUCTOR)
11166     {
11167       first = error_mark_node;
11168
11169       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
11170         {
11171           if (i == 0)
11172             {
11173               first = t;
11174               continue;
11175             }
11176           if (!operand_equal_p (first, t, 0))
11177             return NULL_TREE;
11178         }
11179       if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
11180         return NULL_TREE;
11181
11182       return first;
11183     }
11184
11185   return NULL_TREE;
11186 }
11187
11188 /* Build an empty statement at location LOC.  */
11189
11190 tree
11191 build_empty_stmt (location_t loc)
11192 {
11193   tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
11194   SET_EXPR_LOCATION (t, loc);
11195   return t;
11196 }
11197
11198
11199 /* Build an OpenMP clause with code CODE.  LOC is the location of the
11200    clause.  */
11201
11202 tree
11203 build_omp_clause (location_t loc, enum omp_clause_code code)
11204 {
11205   tree t;
11206   int size, length;
11207
11208   length = omp_clause_num_ops[code];
11209   size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
11210
11211   record_node_allocation_statistics (OMP_CLAUSE, size);
11212
11213   t = (tree) ggc_internal_alloc (size);
11214   memset (t, 0, size);
11215   TREE_SET_CODE (t, OMP_CLAUSE);
11216   OMP_CLAUSE_SET_CODE (t, code);
11217   OMP_CLAUSE_LOCATION (t) = loc;
11218
11219   return t;
11220 }
11221
11222 /* Build a tcc_vl_exp object with code CODE and room for LEN operands.  LEN
11223    includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
11224    Except for the CODE and operand count field, other storage for the
11225    object is initialized to zeros.  */
11226
11227 tree
11228 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
11229 {
11230   tree t;
11231   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
11232
11233   gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
11234   gcc_assert (len >= 1);
11235
11236   record_node_allocation_statistics (code, length);
11237
11238   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
11239
11240   TREE_SET_CODE (t, code);
11241
11242   /* Can't use TREE_OPERAND to store the length because if checking is
11243      enabled, it will try to check the length before we store it.  :-P  */
11244   t->exp.operands[0] = build_int_cst (sizetype, len);
11245
11246   return t;
11247 }
11248
11249 /* Helper function for build_call_* functions; build a CALL_EXPR with
11250    indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
11251    the argument slots.  */
11252
11253 static tree
11254 build_call_1 (tree return_type, tree fn, int nargs)
11255 {
11256   tree t;
11257
11258   t = build_vl_exp (CALL_EXPR, nargs + 3);
11259   TREE_TYPE (t) = return_type;
11260   CALL_EXPR_FN (t) = fn;
11261   CALL_EXPR_STATIC_CHAIN (t) = NULL;
11262
11263   return t;
11264 }
11265
11266 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11267    FN and a null static chain slot.  NARGS is the number of call arguments
11268    which are specified as "..." arguments.  */
11269
11270 tree
11271 build_call_nary (tree return_type, tree fn, int nargs, ...)
11272 {
11273   tree ret;
11274   va_list args;
11275   va_start (args, nargs);
11276   ret = build_call_valist (return_type, fn, nargs, args);
11277   va_end (args);
11278   return ret;
11279 }
11280
11281 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11282    FN and a null static chain slot.  NARGS is the number of call arguments
11283    which are specified as a va_list ARGS.  */
11284
11285 tree
11286 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
11287 {
11288   tree t;
11289   int i;
11290
11291   t = build_call_1 (return_type, fn, nargs);
11292   for (i = 0; i < nargs; i++)
11293     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
11294   process_call_operands (t);
11295   return t;
11296 }
11297
11298 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11299    FN and a null static chain slot.  NARGS is the number of call arguments
11300    which are specified as a tree array ARGS.  */
11301
11302 tree
11303 build_call_array_loc (location_t loc, tree return_type, tree fn,
11304                       int nargs, const tree *args)
11305 {
11306   tree t;
11307   int i;
11308
11309   t = build_call_1 (return_type, fn, nargs);
11310   for (i = 0; i < nargs; i++)
11311     CALL_EXPR_ARG (t, i) = args[i];
11312   process_call_operands (t);
11313   SET_EXPR_LOCATION (t, loc);
11314   return t;
11315 }
11316
11317 /* Like build_call_array, but takes a vec.  */
11318
11319 tree
11320 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
11321 {
11322   tree ret, t;
11323   unsigned int ix;
11324
11325   ret = build_call_1 (return_type, fn, vec_safe_length (args));
11326   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
11327     CALL_EXPR_ARG (ret, ix) = t;
11328   process_call_operands (ret);
11329   return ret;
11330 }
11331
11332 /* Conveniently construct a function call expression.  FNDECL names the
11333    function to be called and N arguments are passed in the array
11334    ARGARRAY.  */
11335
11336 tree
11337 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
11338 {
11339   tree fntype = TREE_TYPE (fndecl);
11340   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
11341  
11342   return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
11343 }
11344
11345 /* Conveniently construct a function call expression.  FNDECL names the
11346    function to be called and the arguments are passed in the vector
11347    VEC.  */
11348
11349 tree
11350 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
11351 {
11352   return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
11353                                     vec_safe_address (vec));
11354 }
11355
11356
11357 /* Conveniently construct a function call expression.  FNDECL names the
11358    function to be called, N is the number of arguments, and the "..."
11359    parameters are the argument expressions.  */
11360
11361 tree
11362 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
11363 {
11364   va_list ap;
11365   tree *argarray = XALLOCAVEC (tree, n);
11366   int i;
11367
11368   va_start (ap, n);
11369   for (i = 0; i < n; i++)
11370     argarray[i] = va_arg (ap, tree);
11371   va_end (ap);
11372   return build_call_expr_loc_array (loc, fndecl, n, argarray);
11373 }
11374
11375 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...).  Duplicated because
11376    varargs macros aren't supported by all bootstrap compilers.  */
11377
11378 tree
11379 build_call_expr (tree fndecl, int n, ...)
11380 {
11381   va_list ap;
11382   tree *argarray = XALLOCAVEC (tree, n);
11383   int i;
11384
11385   va_start (ap, n);
11386   for (i = 0; i < n; i++)
11387     argarray[i] = va_arg (ap, tree);
11388   va_end (ap);
11389   return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
11390 }
11391
11392 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
11393    type TYPE.  This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
11394    It will get gimplified later into an ordinary internal function.  */
11395
11396 tree
11397 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
11398                                     tree type, int n, const tree *args)
11399 {
11400   tree t = build_call_1 (type, NULL_TREE, n);
11401   for (int i = 0; i < n; ++i)
11402     CALL_EXPR_ARG (t, i) = args[i];
11403   SET_EXPR_LOCATION (t, loc);
11404   CALL_EXPR_IFN (t) = ifn;
11405   return t;
11406 }
11407
11408 /* Build internal call expression.  This is just like CALL_EXPR, except
11409    its CALL_EXPR_FN is NULL.  It will get gimplified later into ordinary
11410    internal function.  */
11411
11412 tree
11413 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
11414                               tree type, int n, ...)
11415 {
11416   va_list ap;
11417   tree *argarray = XALLOCAVEC (tree, n);
11418   int i;
11419
11420   va_start (ap, n);
11421   for (i = 0; i < n; i++)
11422     argarray[i] = va_arg (ap, tree);
11423   va_end (ap);
11424   return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11425 }
11426
11427 /* Return a function call to FN, if the target is guaranteed to support it,
11428    or null otherwise.
11429
11430    N is the number of arguments, passed in the "...", and TYPE is the
11431    type of the return value.  */
11432
11433 tree
11434 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
11435                            int n, ...)
11436 {
11437   va_list ap;
11438   tree *argarray = XALLOCAVEC (tree, n);
11439   int i;
11440
11441   va_start (ap, n);
11442   for (i = 0; i < n; i++)
11443     argarray[i] = va_arg (ap, tree);
11444   va_end (ap);
11445   if (internal_fn_p (fn))
11446     {
11447       internal_fn ifn = as_internal_fn (fn);
11448       if (direct_internal_fn_p (ifn))
11449         {
11450           tree_pair types = direct_internal_fn_types (ifn, type, argarray);
11451           if (!direct_internal_fn_supported_p (ifn, types,
11452                                                OPTIMIZE_FOR_BOTH))
11453             return NULL_TREE;
11454         }
11455       return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11456     }
11457   else
11458     {
11459       tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
11460       if (!fndecl)
11461         return NULL_TREE;
11462       return build_call_expr_loc_array (loc, fndecl, n, argarray);
11463     }
11464 }
11465
11466 /* Create a new constant string literal and return a char* pointer to it.
11467    The STRING_CST value is the LEN characters at STR.  */
11468 tree
11469 build_string_literal (int len, const char *str)
11470 {
11471   tree t, elem, index, type;
11472
11473   t = build_string (len, str);
11474   elem = build_type_variant (char_type_node, 1, 0);
11475   index = build_index_type (size_int (len - 1));
11476   type = build_array_type (elem, index);
11477   TREE_TYPE (t) = type;
11478   TREE_CONSTANT (t) = 1;
11479   TREE_READONLY (t) = 1;
11480   TREE_STATIC (t) = 1;
11481
11482   type = build_pointer_type (elem);
11483   t = build1 (ADDR_EXPR, type,
11484               build4 (ARRAY_REF, elem,
11485                       t, integer_zero_node, NULL_TREE, NULL_TREE));
11486   return t;
11487 }
11488
11489
11490
11491 /* Return true if T (assumed to be a DECL) must be assigned a memory
11492    location.  */
11493
11494 bool
11495 needs_to_live_in_memory (const_tree t)
11496 {
11497   return (TREE_ADDRESSABLE (t)
11498           || is_global_var (t)
11499           || (TREE_CODE (t) == RESULT_DECL
11500               && !DECL_BY_REFERENCE (t)
11501               && aggregate_value_p (t, current_function_decl)));
11502 }
11503
11504 /* Return value of a constant X and sign-extend it.  */
11505
11506 HOST_WIDE_INT
11507 int_cst_value (const_tree x)
11508 {
11509   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
11510   unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
11511
11512   /* Make sure the sign-extended value will fit in a HOST_WIDE_INT.  */
11513   gcc_assert (cst_and_fits_in_hwi (x));
11514
11515   if (bits < HOST_BITS_PER_WIDE_INT)
11516     {
11517       bool negative = ((val >> (bits - 1)) & 1) != 0;
11518       if (negative)
11519         val |= HOST_WIDE_INT_M1U << (bits - 1) << 1;
11520       else
11521         val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1);
11522     }
11523
11524   return val;
11525 }
11526
11527 /* If TYPE is an integral or pointer type, return an integer type with
11528    the same precision which is unsigned iff UNSIGNEDP is true, or itself
11529    if TYPE is already an integer type of signedness UNSIGNEDP.  */
11530
11531 tree
11532 signed_or_unsigned_type_for (int unsignedp, tree type)
11533 {
11534   if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
11535     return type;
11536
11537   if (TREE_CODE (type) == VECTOR_TYPE)
11538     {
11539       tree inner = TREE_TYPE (type);
11540       tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11541       if (!inner2)
11542         return NULL_TREE;
11543       if (inner == inner2)
11544         return type;
11545       return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
11546     }
11547
11548   if (!INTEGRAL_TYPE_P (type)
11549       && !POINTER_TYPE_P (type)
11550       && TREE_CODE (type) != OFFSET_TYPE)
11551     return NULL_TREE;
11552
11553   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
11554 }
11555
11556 /* If TYPE is an integral or pointer type, return an integer type with
11557    the same precision which is unsigned, or itself if TYPE is already an
11558    unsigned integer type.  */
11559
11560 tree
11561 unsigned_type_for (tree type)
11562 {
11563   return signed_or_unsigned_type_for (1, type);
11564 }
11565
11566 /* If TYPE is an integral or pointer type, return an integer type with
11567    the same precision which is signed, or itself if TYPE is already a
11568    signed integer type.  */
11569
11570 tree
11571 signed_type_for (tree type)
11572 {
11573   return signed_or_unsigned_type_for (0, type);
11574 }
11575
11576 /* If TYPE is a vector type, return a signed integer vector type with the
11577    same width and number of subparts. Otherwise return boolean_type_node.  */
11578
11579 tree
11580 truth_type_for (tree type)
11581 {
11582   if (TREE_CODE (type) == VECTOR_TYPE)
11583     {
11584       if (VECTOR_BOOLEAN_TYPE_P (type))
11585         return type;
11586       return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
11587                                       GET_MODE_SIZE (TYPE_MODE (type)));
11588     }
11589   else
11590     return boolean_type_node;
11591 }
11592
11593 /* Returns the largest value obtainable by casting something in INNER type to
11594    OUTER type.  */
11595
11596 tree
11597 upper_bound_in_type (tree outer, tree inner)
11598 {
11599   unsigned int det = 0;
11600   unsigned oprec = TYPE_PRECISION (outer);
11601   unsigned iprec = TYPE_PRECISION (inner);
11602   unsigned prec;
11603
11604   /* Compute a unique number for every combination.  */
11605   det |= (oprec > iprec) ? 4 : 0;
11606   det |= TYPE_UNSIGNED (outer) ? 2 : 0;
11607   det |= TYPE_UNSIGNED (inner) ? 1 : 0;
11608
11609   /* Determine the exponent to use.  */
11610   switch (det)
11611     {
11612     case 0:
11613     case 1:
11614       /* oprec <= iprec, outer: signed, inner: don't care.  */
11615       prec = oprec - 1;
11616       break;
11617     case 2:
11618     case 3:
11619       /* oprec <= iprec, outer: unsigned, inner: don't care.  */
11620       prec = oprec;
11621       break;
11622     case 4:
11623       /* oprec > iprec, outer: signed, inner: signed.  */
11624       prec = iprec - 1;
11625       break;
11626     case 5:
11627       /* oprec > iprec, outer: signed, inner: unsigned.  */
11628       prec = iprec;
11629       break;
11630     case 6:
11631       /* oprec > iprec, outer: unsigned, inner: signed.  */
11632       prec = oprec;
11633       break;
11634     case 7:
11635       /* oprec > iprec, outer: unsigned, inner: unsigned.  */
11636       prec = iprec;
11637       break;
11638     default:
11639       gcc_unreachable ();
11640     }
11641
11642   return wide_int_to_tree (outer,
11643                            wi::mask (prec, false, TYPE_PRECISION (outer)));
11644 }
11645
11646 /* Returns the smallest value obtainable by casting something in INNER type to
11647    OUTER type.  */
11648
11649 tree
11650 lower_bound_in_type (tree outer, tree inner)
11651 {
11652   unsigned oprec = TYPE_PRECISION (outer);
11653   unsigned iprec = TYPE_PRECISION (inner);
11654
11655   /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11656      and obtain 0.  */
11657   if (TYPE_UNSIGNED (outer)
11658       /* If we are widening something of an unsigned type, OUTER type
11659          contains all values of INNER type.  In particular, both INNER
11660          and OUTER types have zero in common.  */
11661       || (oprec > iprec && TYPE_UNSIGNED (inner)))
11662     return build_int_cst (outer, 0);
11663   else
11664     {
11665       /* If we are widening a signed type to another signed type, we
11666          want to obtain -2^^(iprec-1).  If we are keeping the
11667          precision or narrowing to a signed type, we want to obtain
11668          -2^(oprec-1).  */
11669       unsigned prec = oprec > iprec ? iprec : oprec;
11670       return wide_int_to_tree (outer,
11671                                wi::mask (prec - 1, true,
11672                                          TYPE_PRECISION (outer)));
11673     }
11674 }
11675
11676 /* Return nonzero if two operands that are suitable for PHI nodes are
11677    necessarily equal.  Specifically, both ARG0 and ARG1 must be either
11678    SSA_NAME or invariant.  Note that this is strictly an optimization.
11679    That is, callers of this function can directly call operand_equal_p
11680    and get the same result, only slower.  */
11681
11682 int
11683 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11684 {
11685   if (arg0 == arg1)
11686     return 1;
11687   if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11688     return 0;
11689   return operand_equal_p (arg0, arg1, 0);
11690 }
11691
11692 /* Returns number of zeros at the end of binary representation of X.  */
11693
11694 tree
11695 num_ending_zeros (const_tree x)
11696 {
11697   return build_int_cst (TREE_TYPE (x), wi::ctz (x));
11698 }
11699
11700
11701 #define WALK_SUBTREE(NODE)                              \
11702   do                                                    \
11703     {                                                   \
11704       result = walk_tree_1 (&(NODE), func, data, pset, lh);     \
11705       if (result)                                       \
11706         return result;                                  \
11707     }                                                   \
11708   while (0)
11709
11710 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11711    be walked whenever a type is seen in the tree.  Rest of operands and return
11712    value are as for walk_tree.  */
11713
11714 static tree
11715 walk_type_fields (tree type, walk_tree_fn func, void *data,
11716                   hash_set<tree> *pset, walk_tree_lh lh)
11717 {
11718   tree result = NULL_TREE;
11719
11720   switch (TREE_CODE (type))
11721     {
11722     case POINTER_TYPE:
11723     case REFERENCE_TYPE:
11724     case VECTOR_TYPE:
11725       /* We have to worry about mutually recursive pointers.  These can't
11726          be written in C.  They can in Ada.  It's pathological, but
11727          there's an ACATS test (c38102a) that checks it.  Deal with this
11728          by checking if we're pointing to another pointer, that one
11729          points to another pointer, that one does too, and we have no htab.
11730          If so, get a hash table.  We check three levels deep to avoid
11731          the cost of the hash table if we don't need one.  */
11732       if (POINTER_TYPE_P (TREE_TYPE (type))
11733           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11734           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11735           && !pset)
11736         {
11737           result = walk_tree_without_duplicates (&TREE_TYPE (type),
11738                                                  func, data);
11739           if (result)
11740             return result;
11741
11742           break;
11743         }
11744
11745       /* fall through */
11746
11747     case COMPLEX_TYPE:
11748       WALK_SUBTREE (TREE_TYPE (type));
11749       break;
11750
11751     case METHOD_TYPE:
11752       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11753
11754       /* Fall through.  */
11755
11756     case FUNCTION_TYPE:
11757       WALK_SUBTREE (TREE_TYPE (type));
11758       {
11759         tree arg;
11760
11761         /* We never want to walk into default arguments.  */
11762         for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11763           WALK_SUBTREE (TREE_VALUE (arg));
11764       }
11765       break;
11766
11767     case ARRAY_TYPE:
11768       /* Don't follow this nodes's type if a pointer for fear that
11769          we'll have infinite recursion.  If we have a PSET, then we
11770          need not fear.  */
11771       if (pset
11772           || (!POINTER_TYPE_P (TREE_TYPE (type))
11773               && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11774         WALK_SUBTREE (TREE_TYPE (type));
11775       WALK_SUBTREE (TYPE_DOMAIN (type));
11776       break;
11777
11778     case OFFSET_TYPE:
11779       WALK_SUBTREE (TREE_TYPE (type));
11780       WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11781       break;
11782
11783     default:
11784       break;
11785     }
11786
11787   return NULL_TREE;
11788 }
11789
11790 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
11791    called with the DATA and the address of each sub-tree.  If FUNC returns a
11792    non-NULL value, the traversal is stopped, and the value returned by FUNC
11793    is returned.  If PSET is non-NULL it is used to record the nodes visited,
11794    and to avoid visiting a node more than once.  */
11795
11796 tree
11797 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11798              hash_set<tree> *pset, walk_tree_lh lh)
11799 {
11800   enum tree_code code;
11801   int walk_subtrees;
11802   tree result;
11803
11804 #define WALK_SUBTREE_TAIL(NODE)                         \
11805   do                                                    \
11806     {                                                   \
11807        tp = & (NODE);                                   \
11808        goto tail_recurse;                               \
11809     }                                                   \
11810   while (0)
11811
11812  tail_recurse:
11813   /* Skip empty subtrees.  */
11814   if (!*tp)
11815     return NULL_TREE;
11816
11817   /* Don't walk the same tree twice, if the user has requested
11818      that we avoid doing so.  */
11819   if (pset && pset->add (*tp))
11820     return NULL_TREE;
11821
11822   /* Call the function.  */
11823   walk_subtrees = 1;
11824   result = (*func) (tp, &walk_subtrees, data);
11825
11826   /* If we found something, return it.  */
11827   if (result)
11828     return result;
11829
11830   code = TREE_CODE (*tp);
11831
11832   /* Even if we didn't, FUNC may have decided that there was nothing
11833      interesting below this point in the tree.  */
11834   if (!walk_subtrees)
11835     {
11836       /* But we still need to check our siblings.  */
11837       if (code == TREE_LIST)
11838         WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11839       else if (code == OMP_CLAUSE)
11840         WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11841       else
11842         return NULL_TREE;
11843     }
11844
11845   if (lh)
11846     {
11847       result = (*lh) (tp, &walk_subtrees, func, data, pset);
11848       if (result || !walk_subtrees)
11849         return result;
11850     }
11851
11852   switch (code)
11853     {
11854     case ERROR_MARK:
11855     case IDENTIFIER_NODE:
11856     case INTEGER_CST:
11857     case REAL_CST:
11858     case FIXED_CST:
11859     case VECTOR_CST:
11860     case STRING_CST:
11861     case BLOCK:
11862     case PLACEHOLDER_EXPR:
11863     case SSA_NAME:
11864     case FIELD_DECL:
11865     case RESULT_DECL:
11866       /* None of these have subtrees other than those already walked
11867          above.  */
11868       break;
11869
11870     case TREE_LIST:
11871       WALK_SUBTREE (TREE_VALUE (*tp));
11872       WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11873       break;
11874
11875     case TREE_VEC:
11876       {
11877         int len = TREE_VEC_LENGTH (*tp);
11878
11879         if (len == 0)
11880           break;
11881
11882         /* Walk all elements but the first.  */
11883         while (--len)
11884           WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11885
11886         /* Now walk the first one as a tail call.  */
11887         WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11888       }
11889
11890     case COMPLEX_CST:
11891       WALK_SUBTREE (TREE_REALPART (*tp));
11892       WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11893
11894     case CONSTRUCTOR:
11895       {
11896         unsigned HOST_WIDE_INT idx;
11897         constructor_elt *ce;
11898
11899         for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11900              idx++)
11901           WALK_SUBTREE (ce->value);
11902       }
11903       break;
11904
11905     case SAVE_EXPR:
11906       WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11907
11908     case BIND_EXPR:
11909       {
11910         tree decl;
11911         for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11912           {
11913             /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
11914                into declarations that are just mentioned, rather than
11915                declared; they don't really belong to this part of the tree.
11916                And, we can see cycles: the initializer for a declaration
11917                can refer to the declaration itself.  */
11918             WALK_SUBTREE (DECL_INITIAL (decl));
11919             WALK_SUBTREE (DECL_SIZE (decl));
11920             WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11921           }
11922         WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11923       }
11924
11925     case STATEMENT_LIST:
11926       {
11927         tree_stmt_iterator i;
11928         for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11929           WALK_SUBTREE (*tsi_stmt_ptr (i));
11930       }
11931       break;
11932
11933     case OMP_CLAUSE:
11934       switch (OMP_CLAUSE_CODE (*tp))
11935         {
11936         case OMP_CLAUSE_GANG:
11937         case OMP_CLAUSE__GRIDDIM_:
11938           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11939           /* FALLTHRU */
11940
11941         case OMP_CLAUSE_ASYNC:
11942         case OMP_CLAUSE_WAIT:
11943         case OMP_CLAUSE_WORKER:
11944         case OMP_CLAUSE_VECTOR:
11945         case OMP_CLAUSE_NUM_GANGS:
11946         case OMP_CLAUSE_NUM_WORKERS:
11947         case OMP_CLAUSE_VECTOR_LENGTH:
11948         case OMP_CLAUSE_PRIVATE:
11949         case OMP_CLAUSE_SHARED:
11950         case OMP_CLAUSE_FIRSTPRIVATE:
11951         case OMP_CLAUSE_COPYIN:
11952         case OMP_CLAUSE_COPYPRIVATE:
11953         case OMP_CLAUSE_FINAL:
11954         case OMP_CLAUSE_IF:
11955         case OMP_CLAUSE_NUM_THREADS:
11956         case OMP_CLAUSE_SCHEDULE:
11957         case OMP_CLAUSE_UNIFORM:
11958         case OMP_CLAUSE_DEPEND:
11959         case OMP_CLAUSE_NUM_TEAMS:
11960         case OMP_CLAUSE_THREAD_LIMIT:
11961         case OMP_CLAUSE_DEVICE:
11962         case OMP_CLAUSE_DIST_SCHEDULE:
11963         case OMP_CLAUSE_SAFELEN:
11964         case OMP_CLAUSE_SIMDLEN:
11965         case OMP_CLAUSE_ORDERED:
11966         case OMP_CLAUSE_PRIORITY:
11967         case OMP_CLAUSE_GRAINSIZE:
11968         case OMP_CLAUSE_NUM_TASKS:
11969         case OMP_CLAUSE_HINT:
11970         case OMP_CLAUSE_TO_DECLARE:
11971         case OMP_CLAUSE_LINK:
11972         case OMP_CLAUSE_USE_DEVICE_PTR:
11973         case OMP_CLAUSE_IS_DEVICE_PTR:
11974         case OMP_CLAUSE__LOOPTEMP_:
11975         case OMP_CLAUSE__SIMDUID_:
11976         case OMP_CLAUSE__CILK_FOR_COUNT_:
11977           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11978           /* FALLTHRU */
11979
11980         case OMP_CLAUSE_INDEPENDENT:
11981         case OMP_CLAUSE_NOWAIT:
11982         case OMP_CLAUSE_DEFAULT:
11983         case OMP_CLAUSE_UNTIED:
11984         case OMP_CLAUSE_MERGEABLE:
11985         case OMP_CLAUSE_PROC_BIND:
11986         case OMP_CLAUSE_INBRANCH:
11987         case OMP_CLAUSE_NOTINBRANCH:
11988         case OMP_CLAUSE_FOR:
11989         case OMP_CLAUSE_PARALLEL:
11990         case OMP_CLAUSE_SECTIONS:
11991         case OMP_CLAUSE_TASKGROUP:
11992         case OMP_CLAUSE_NOGROUP:
11993         case OMP_CLAUSE_THREADS:
11994         case OMP_CLAUSE_SIMD:
11995         case OMP_CLAUSE_DEFAULTMAP:
11996         case OMP_CLAUSE_AUTO:
11997         case OMP_CLAUSE_SEQ:
11998         case OMP_CLAUSE_TILE:
11999         case OMP_CLAUSE__SIMT_:
12000           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12001
12002         case OMP_CLAUSE_LASTPRIVATE:
12003           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12004           WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
12005           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12006
12007         case OMP_CLAUSE_COLLAPSE:
12008           {
12009             int i;
12010             for (i = 0; i < 3; i++)
12011               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12012             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12013           }
12014
12015         case OMP_CLAUSE_LINEAR:
12016           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12017           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
12018           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
12019           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12020
12021         case OMP_CLAUSE_ALIGNED:
12022         case OMP_CLAUSE_FROM:
12023         case OMP_CLAUSE_TO:
12024         case OMP_CLAUSE_MAP:
12025         case OMP_CLAUSE__CACHE_:
12026           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12027           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
12028           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12029
12030         case OMP_CLAUSE_REDUCTION:
12031           {
12032             int i;
12033             for (i = 0; i < 5; i++)
12034               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12035             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12036           }
12037
12038         default:
12039           gcc_unreachable ();
12040         }
12041       break;
12042
12043     case TARGET_EXPR:
12044       {
12045         int i, len;
12046
12047         /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
12048            But, we only want to walk once.  */
12049         len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
12050         for (i = 0; i < len; ++i)
12051           WALK_SUBTREE (TREE_OPERAND (*tp, i));
12052         WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
12053       }
12054
12055     case DECL_EXPR:
12056       /* If this is a TYPE_DECL, walk into the fields of the type that it's
12057          defining.  We only want to walk into these fields of a type in this
12058          case and not in the general case of a mere reference to the type.
12059
12060          The criterion is as follows: if the field can be an expression, it
12061          must be walked only here.  This should be in keeping with the fields
12062          that are directly gimplified in gimplify_type_sizes in order for the
12063          mark/copy-if-shared/unmark machinery of the gimplifier to work with
12064          variable-sized types.
12065
12066          Note that DECLs get walked as part of processing the BIND_EXPR.  */
12067       if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
12068         {
12069           tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
12070           if (TREE_CODE (*type_p) == ERROR_MARK)
12071             return NULL_TREE;
12072
12073           /* Call the function for the type.  See if it returns anything or
12074              doesn't want us to continue.  If we are to continue, walk both
12075              the normal fields and those for the declaration case.  */
12076           result = (*func) (type_p, &walk_subtrees, data);
12077           if (result || !walk_subtrees)
12078             return result;
12079
12080           /* But do not walk a pointed-to type since it may itself need to
12081              be walked in the declaration case if it isn't anonymous.  */
12082           if (!POINTER_TYPE_P (*type_p))
12083             {
12084               result = walk_type_fields (*type_p, func, data, pset, lh);
12085               if (result)
12086                 return result;
12087             }
12088
12089           /* If this is a record type, also walk the fields.  */
12090           if (RECORD_OR_UNION_TYPE_P (*type_p))
12091             {
12092               tree field;
12093
12094               for (field = TYPE_FIELDS (*type_p); field;
12095                    field = DECL_CHAIN (field))
12096                 {
12097                   /* We'd like to look at the type of the field, but we can
12098                      easily get infinite recursion.  So assume it's pointed
12099                      to elsewhere in the tree.  Also, ignore things that
12100                      aren't fields.  */
12101                   if (TREE_CODE (field) != FIELD_DECL)
12102                     continue;
12103
12104                   WALK_SUBTREE (DECL_FIELD_OFFSET (field));
12105                   WALK_SUBTREE (DECL_SIZE (field));
12106                   WALK_SUBTREE (DECL_SIZE_UNIT (field));
12107                   if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
12108                     WALK_SUBTREE (DECL_QUALIFIER (field));
12109                 }
12110             }
12111
12112           /* Same for scalar types.  */
12113           else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
12114                    || TREE_CODE (*type_p) == ENUMERAL_TYPE
12115                    || TREE_CODE (*type_p) == INTEGER_TYPE
12116                    || TREE_CODE (*type_p) == FIXED_POINT_TYPE
12117                    || TREE_CODE (*type_p) == REAL_TYPE)
12118             {
12119               WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
12120               WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
12121             }
12122
12123           WALK_SUBTREE (TYPE_SIZE (*type_p));
12124           WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
12125         }
12126       /* FALLTHRU */
12127
12128     default:
12129       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
12130         {
12131           int i, len;
12132
12133           /* Walk over all the sub-trees of this operand.  */
12134           len = TREE_OPERAND_LENGTH (*tp);
12135
12136           /* Go through the subtrees.  We need to do this in forward order so
12137              that the scope of a FOR_EXPR is handled properly.  */
12138           if (len)
12139             {
12140               for (i = 0; i < len - 1; ++i)
12141                 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12142               WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
12143             }
12144         }
12145       /* If this is a type, walk the needed fields in the type.  */
12146       else if (TYPE_P (*tp))
12147         return walk_type_fields (*tp, func, data, pset, lh);
12148       break;
12149     }
12150
12151   /* We didn't find what we were looking for.  */
12152   return NULL_TREE;
12153
12154 #undef WALK_SUBTREE_TAIL
12155 }
12156 #undef WALK_SUBTREE
12157
12158 /* Like walk_tree, but does not walk duplicate nodes more than once.  */
12159
12160 tree
12161 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
12162                                 walk_tree_lh lh)
12163 {
12164   tree result;
12165
12166   hash_set<tree> pset;
12167   result = walk_tree_1 (tp, func, data, &pset, lh);
12168   return result;
12169 }
12170
12171
12172 tree
12173 tree_block (tree t)
12174 {
12175   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12176
12177   if (IS_EXPR_CODE_CLASS (c))
12178     return LOCATION_BLOCK (t->exp.locus);
12179   gcc_unreachable ();
12180   return NULL;
12181 }
12182
12183 void
12184 tree_set_block (tree t, tree b)
12185 {
12186   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12187
12188   if (IS_EXPR_CODE_CLASS (c))
12189     {
12190       t->exp.locus = set_block (t->exp.locus, b);
12191     }
12192   else
12193     gcc_unreachable ();
12194 }
12195
12196 /* Create a nameless artificial label and put it in the current
12197    function context.  The label has a location of LOC.  Returns the
12198    newly created label.  */
12199
12200 tree
12201 create_artificial_label (location_t loc)
12202 {
12203   tree lab = build_decl (loc,
12204                          LABEL_DECL, NULL_TREE, void_type_node);
12205
12206   DECL_ARTIFICIAL (lab) = 1;
12207   DECL_IGNORED_P (lab) = 1;
12208   DECL_CONTEXT (lab) = current_function_decl;
12209   return lab;
12210 }
12211
12212 /*  Given a tree, try to return a useful variable name that we can use
12213     to prefix a temporary that is being assigned the value of the tree.
12214     I.E. given  <temp> = &A, return A.  */
12215
12216 const char *
12217 get_name (tree t)
12218 {
12219   tree stripped_decl;
12220
12221   stripped_decl = t;
12222   STRIP_NOPS (stripped_decl);
12223   if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
12224     return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
12225   else if (TREE_CODE (stripped_decl) == SSA_NAME)
12226     {
12227       tree name = SSA_NAME_IDENTIFIER (stripped_decl);
12228       if (!name)
12229         return NULL;
12230       return IDENTIFIER_POINTER (name);
12231     }
12232   else
12233     {
12234       switch (TREE_CODE (stripped_decl))
12235         {
12236         case ADDR_EXPR:
12237           return get_name (TREE_OPERAND (stripped_decl, 0));
12238         default:
12239           return NULL;
12240         }
12241     }
12242 }
12243
12244 /* Return true if TYPE has a variable argument list.  */
12245
12246 bool
12247 stdarg_p (const_tree fntype)
12248 {
12249   function_args_iterator args_iter;
12250   tree n = NULL_TREE, t;
12251
12252   if (!fntype)
12253     return false;
12254
12255   FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
12256     {
12257       n = t;
12258     }
12259
12260   return n != NULL_TREE && n != void_type_node;
12261 }
12262
12263 /* Return true if TYPE has a prototype.  */
12264
12265 bool
12266 prototype_p (const_tree fntype)
12267 {
12268   tree t;
12269
12270   gcc_assert (fntype != NULL_TREE);
12271
12272   t = TYPE_ARG_TYPES (fntype);
12273   return (t != NULL_TREE);
12274 }
12275
12276 /* If BLOCK is inlined from an __attribute__((__artificial__))
12277    routine, return pointer to location from where it has been
12278    called.  */
12279 location_t *
12280 block_nonartificial_location (tree block)
12281 {
12282   location_t *ret = NULL;
12283
12284   while (block && TREE_CODE (block) == BLOCK
12285          && BLOCK_ABSTRACT_ORIGIN (block))
12286     {
12287       tree ao = BLOCK_ABSTRACT_ORIGIN (block);
12288
12289       while (TREE_CODE (ao) == BLOCK
12290              && BLOCK_ABSTRACT_ORIGIN (ao)
12291              && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
12292         ao = BLOCK_ABSTRACT_ORIGIN (ao);
12293
12294       if (TREE_CODE (ao) == FUNCTION_DECL)
12295         {
12296           /* If AO is an artificial inline, point RET to the
12297              call site locus at which it has been inlined and continue
12298              the loop, in case AO's caller is also an artificial
12299              inline.  */
12300           if (DECL_DECLARED_INLINE_P (ao)
12301               && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
12302             ret = &BLOCK_SOURCE_LOCATION (block);
12303           else
12304             break;
12305         }
12306       else if (TREE_CODE (ao) != BLOCK)
12307         break;
12308
12309       block = BLOCK_SUPERCONTEXT (block);
12310     }
12311   return ret;
12312 }
12313
12314
12315 /* If EXP is inlined from an __attribute__((__artificial__))
12316    function, return the location of the original call expression.  */
12317
12318 location_t
12319 tree_nonartificial_location (tree exp)
12320 {
12321   location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
12322
12323   if (loc)
12324     return *loc;
12325   else
12326     return EXPR_LOCATION (exp);
12327 }
12328
12329
12330 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
12331    nodes.  */
12332
12333 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code.  */
12334
12335 hashval_t
12336 cl_option_hasher::hash (tree x)
12337 {
12338   const_tree const t = x;
12339   const char *p;
12340   size_t i;
12341   size_t len = 0;
12342   hashval_t hash = 0;
12343
12344   if (TREE_CODE (t) == OPTIMIZATION_NODE)
12345     {
12346       p = (const char *)TREE_OPTIMIZATION (t);
12347       len = sizeof (struct cl_optimization);
12348     }
12349
12350   else if (TREE_CODE (t) == TARGET_OPTION_NODE)
12351     return cl_target_option_hash (TREE_TARGET_OPTION (t));
12352
12353   else
12354     gcc_unreachable ();
12355
12356   /* assume most opt flags are just 0/1, some are 2-3, and a few might be
12357      something else.  */
12358   for (i = 0; i < len; i++)
12359     if (p[i])
12360       hash = (hash << 4) ^ ((i << 2) | p[i]);
12361
12362   return hash;
12363 }
12364
12365 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
12366    TARGET_OPTION tree node) is the same as that given by *Y, which is the
12367    same.  */
12368
12369 bool
12370 cl_option_hasher::equal (tree x, tree y)
12371 {
12372   const_tree const xt = x;
12373   const_tree const yt = y;
12374   const char *xp;
12375   const char *yp;
12376   size_t len;
12377
12378   if (TREE_CODE (xt) != TREE_CODE (yt))
12379     return 0;
12380
12381   if (TREE_CODE (xt) == OPTIMIZATION_NODE)
12382     {
12383       xp = (const char *)TREE_OPTIMIZATION (xt);
12384       yp = (const char *)TREE_OPTIMIZATION (yt);
12385       len = sizeof (struct cl_optimization);
12386     }
12387
12388   else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
12389     {
12390       return cl_target_option_eq (TREE_TARGET_OPTION (xt),
12391                                   TREE_TARGET_OPTION (yt));
12392     }
12393
12394   else
12395     gcc_unreachable ();
12396
12397   return (memcmp (xp, yp, len) == 0);
12398 }
12399
12400 /* Build an OPTIMIZATION_NODE based on the options in OPTS.  */
12401
12402 tree
12403 build_optimization_node (struct gcc_options *opts)
12404 {
12405   tree t;
12406
12407   /* Use the cache of optimization nodes.  */
12408
12409   cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
12410                         opts);
12411
12412   tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
12413   t = *slot;
12414   if (!t)
12415     {
12416       /* Insert this one into the hash table.  */
12417       t = cl_optimization_node;
12418       *slot = t;
12419
12420       /* Make a new node for next time round.  */
12421       cl_optimization_node = make_node (OPTIMIZATION_NODE);
12422     }
12423
12424   return t;
12425 }
12426
12427 /* Build a TARGET_OPTION_NODE based on the options in OPTS.  */
12428
12429 tree
12430 build_target_option_node (struct gcc_options *opts)
12431 {
12432   tree t;
12433
12434   /* Use the cache of optimization nodes.  */
12435
12436   cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
12437                          opts);
12438
12439   tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
12440   t = *slot;
12441   if (!t)
12442     {
12443       /* Insert this one into the hash table.  */
12444       t = cl_target_option_node;
12445       *slot = t;
12446
12447       /* Make a new node for next time round.  */
12448       cl_target_option_node = make_node (TARGET_OPTION_NODE);
12449     }
12450
12451   return t;
12452 }
12453
12454 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
12455    so that they aren't saved during PCH writing.  */
12456
12457 void
12458 prepare_target_option_nodes_for_pch (void)
12459 {
12460   hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
12461   for (; iter != cl_option_hash_table->end (); ++iter)
12462     if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
12463       TREE_TARGET_GLOBALS (*iter) = NULL;
12464 }
12465
12466 /* Determine the "ultimate origin" of a block.  The block may be an inlined
12467    instance of an inlined instance of a block which is local to an inline
12468    function, so we have to trace all of the way back through the origin chain
12469    to find out what sort of node actually served as the original seed for the
12470    given block.  */
12471
12472 tree
12473 block_ultimate_origin (const_tree block)
12474 {
12475   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
12476
12477   /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
12478      we're trying to output the abstract instance of this function.  */
12479   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
12480     return NULL_TREE;
12481
12482   if (immediate_origin == NULL_TREE)
12483     return NULL_TREE;
12484   else
12485     {
12486       tree ret_val;
12487       tree lookahead = immediate_origin;
12488
12489       do
12490         {
12491           ret_val = lookahead;
12492           lookahead = (TREE_CODE (ret_val) == BLOCK
12493                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
12494         }
12495       while (lookahead != NULL && lookahead != ret_val);
12496
12497       /* The block's abstract origin chain may not be the *ultimate* origin of
12498          the block. It could lead to a DECL that has an abstract origin set.
12499          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
12500          will give us if it has one).  Note that DECL's abstract origins are
12501          supposed to be the most distant ancestor (or so decl_ultimate_origin
12502          claims), so we don't need to loop following the DECL origins.  */
12503       if (DECL_P (ret_val))
12504         return DECL_ORIGIN (ret_val);
12505
12506       return ret_val;
12507     }
12508 }
12509
12510 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
12511    no instruction.  */
12512
12513 bool
12514 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
12515 {
12516   /* Do not strip casts into or out of differing address spaces.  */
12517   if (POINTER_TYPE_P (outer_type)
12518       && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
12519     {
12520       if (!POINTER_TYPE_P (inner_type)
12521           || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
12522               != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
12523         return false;
12524     }
12525   else if (POINTER_TYPE_P (inner_type)
12526            && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
12527     {
12528       /* We already know that outer_type is not a pointer with
12529          a non-generic address space.  */
12530       return false;
12531     }
12532
12533   /* Use precision rather then machine mode when we can, which gives
12534      the correct answer even for submode (bit-field) types.  */
12535   if ((INTEGRAL_TYPE_P (outer_type)
12536        || POINTER_TYPE_P (outer_type)
12537        || TREE_CODE (outer_type) == OFFSET_TYPE)
12538       && (INTEGRAL_TYPE_P (inner_type)
12539           || POINTER_TYPE_P (inner_type)
12540           || TREE_CODE (inner_type) == OFFSET_TYPE))
12541     return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
12542
12543   /* Otherwise fall back on comparing machine modes (e.g. for
12544      aggregate types, floats).  */
12545   return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
12546 }
12547
12548 /* Return true iff conversion in EXP generates no instruction.  Mark
12549    it inline so that we fully inline into the stripping functions even
12550    though we have two uses of this function.  */
12551
12552 static inline bool
12553 tree_nop_conversion (const_tree exp)
12554 {
12555   tree outer_type, inner_type;
12556
12557   if (!CONVERT_EXPR_P (exp)
12558       && TREE_CODE (exp) != NON_LVALUE_EXPR)
12559     return false;
12560   if (TREE_OPERAND (exp, 0) == error_mark_node)
12561     return false;
12562
12563   outer_type = TREE_TYPE (exp);
12564   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12565
12566   if (!inner_type)
12567     return false;
12568
12569   return tree_nop_conversion_p (outer_type, inner_type);
12570 }
12571
12572 /* Return true iff conversion in EXP generates no instruction.  Don't
12573    consider conversions changing the signedness.  */
12574
12575 static bool
12576 tree_sign_nop_conversion (const_tree exp)
12577 {
12578   tree outer_type, inner_type;
12579
12580   if (!tree_nop_conversion (exp))
12581     return false;
12582
12583   outer_type = TREE_TYPE (exp);
12584   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12585
12586   return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
12587           && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
12588 }
12589
12590 /* Strip conversions from EXP according to tree_nop_conversion and
12591    return the resulting expression.  */
12592
12593 tree
12594 tree_strip_nop_conversions (tree exp)
12595 {
12596   while (tree_nop_conversion (exp))
12597     exp = TREE_OPERAND (exp, 0);
12598   return exp;
12599 }
12600
12601 /* Strip conversions from EXP according to tree_sign_nop_conversion
12602    and return the resulting expression.  */
12603
12604 tree
12605 tree_strip_sign_nop_conversions (tree exp)
12606 {
12607   while (tree_sign_nop_conversion (exp))
12608     exp = TREE_OPERAND (exp, 0);
12609   return exp;
12610 }
12611
12612 /* Avoid any floating point extensions from EXP.  */
12613 tree
12614 strip_float_extensions (tree exp)
12615 {
12616   tree sub, expt, subt;
12617
12618   /*  For floating point constant look up the narrowest type that can hold
12619       it properly and handle it like (type)(narrowest_type)constant.
12620       This way we can optimize for instance a=a*2.0 where "a" is float
12621       but 2.0 is double constant.  */
12622   if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
12623     {
12624       REAL_VALUE_TYPE orig;
12625       tree type = NULL;
12626
12627       orig = TREE_REAL_CST (exp);
12628       if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12629           && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12630         type = float_type_node;
12631       else if (TYPE_PRECISION (TREE_TYPE (exp))
12632                > TYPE_PRECISION (double_type_node)
12633                && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12634         type = double_type_node;
12635       if (type)
12636         return build_real_truncate (type, orig);
12637     }
12638
12639   if (!CONVERT_EXPR_P (exp))
12640     return exp;
12641
12642   sub = TREE_OPERAND (exp, 0);
12643   subt = TREE_TYPE (sub);
12644   expt = TREE_TYPE (exp);
12645
12646   if (!FLOAT_TYPE_P (subt))
12647     return exp;
12648
12649   if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12650     return exp;
12651
12652   if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12653     return exp;
12654
12655   return strip_float_extensions (sub);
12656 }
12657
12658 /* Strip out all handled components that produce invariant
12659    offsets.  */
12660
12661 const_tree
12662 strip_invariant_refs (const_tree op)
12663 {
12664   while (handled_component_p (op))
12665     {
12666       switch (TREE_CODE (op))
12667         {
12668         case ARRAY_REF:
12669         case ARRAY_RANGE_REF:
12670           if (!is_gimple_constant (TREE_OPERAND (op, 1))
12671               || TREE_OPERAND (op, 2) != NULL_TREE
12672               || TREE_OPERAND (op, 3) != NULL_TREE)
12673             return NULL;
12674           break;
12675
12676         case COMPONENT_REF:
12677           if (TREE_OPERAND (op, 2) != NULL_TREE)
12678             return NULL;
12679           break;
12680
12681         default:;
12682         }
12683       op = TREE_OPERAND (op, 0);
12684     }
12685
12686   return op;
12687 }
12688
12689 static GTY(()) tree gcc_eh_personality_decl;
12690
12691 /* Return the GCC personality function decl.  */
12692
12693 tree
12694 lhd_gcc_personality (void)
12695 {
12696   if (!gcc_eh_personality_decl)
12697     gcc_eh_personality_decl = build_personality_function ("gcc");
12698   return gcc_eh_personality_decl;
12699 }
12700
12701 /* TARGET is a call target of GIMPLE call statement
12702    (obtained by gimple_call_fn).  Return true if it is
12703    OBJ_TYPE_REF representing an virtual call of C++ method.
12704    (As opposed to OBJ_TYPE_REF representing objc calls
12705    through a cast where middle-end devirtualization machinery
12706    can't apply.) */
12707
12708 bool
12709 virtual_method_call_p (const_tree target)
12710 {
12711   if (TREE_CODE (target) != OBJ_TYPE_REF)
12712     return false;
12713   tree t = TREE_TYPE (target);
12714   gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12715   t = TREE_TYPE (t);
12716   if (TREE_CODE (t) == FUNCTION_TYPE)
12717     return false;
12718   gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12719   /* If we do not have BINFO associated, it means that type was built
12720      without devirtualization enabled.  Do not consider this a virtual
12721      call.  */
12722   if (!TYPE_BINFO (obj_type_ref_class (target)))
12723     return false;
12724   return true;
12725 }
12726
12727 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to.  */
12728
12729 tree
12730 obj_type_ref_class (const_tree ref)
12731 {
12732   gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12733   ref = TREE_TYPE (ref);
12734   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12735   ref = TREE_TYPE (ref);
12736   /* We look for type THIS points to.  ObjC also builds
12737      OBJ_TYPE_REF with non-method calls, Their first parameter
12738      ID however also corresponds to class type. */
12739   gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12740                        || TREE_CODE (ref) == FUNCTION_TYPE);
12741   ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12742   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12743   return TREE_TYPE (ref);
12744 }
12745
12746 /* Lookup sub-BINFO of BINFO of TYPE at offset POS.  */
12747
12748 static tree
12749 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12750 {
12751   unsigned int i;
12752   tree base_binfo, b;
12753
12754   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12755     if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12756         && types_same_for_odr (TREE_TYPE (base_binfo), type))
12757       return base_binfo;
12758     else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12759       return b;
12760   return NULL;
12761 }
12762
12763 /* Try to find a base info of BINFO that would have its field decl at offset
12764    OFFSET within the BINFO type and which is of EXPECTED_TYPE.  If it can be
12765    found, return, otherwise return NULL_TREE.  */
12766
12767 tree
12768 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12769 {
12770   tree type = BINFO_TYPE (binfo);
12771
12772   while (true)
12773     {
12774       HOST_WIDE_INT pos, size;
12775       tree fld;
12776       int i;
12777
12778       if (types_same_for_odr (type, expected_type))
12779           return binfo;
12780       if (offset < 0)
12781         return NULL_TREE;
12782
12783       for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12784         {
12785           if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12786             continue;
12787
12788           pos = int_bit_position (fld);
12789           size = tree_to_uhwi (DECL_SIZE (fld));
12790           if (pos <= offset && (pos + size) > offset)
12791             break;
12792         }
12793       if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12794         return NULL_TREE;
12795
12796       /* Offset 0 indicates the primary base, whose vtable contents are
12797          represented in the binfo for the derived class.  */
12798       else if (offset != 0)
12799         {
12800           tree found_binfo = NULL, base_binfo;
12801           /* Offsets in BINFO are in bytes relative to the whole structure
12802              while POS is in bits relative to the containing field.  */
12803           int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12804                              / BITS_PER_UNIT);
12805
12806           for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12807             if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12808                 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12809               {
12810                 found_binfo = base_binfo;
12811                 break;
12812               }
12813           if (found_binfo)
12814             binfo = found_binfo;
12815           else
12816             binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12817                                             binfo_offset);
12818          }
12819
12820       type = TREE_TYPE (fld);
12821       offset -= pos;
12822     }
12823 }
12824
12825 /* Returns true if X is a typedef decl.  */
12826
12827 bool
12828 is_typedef_decl (const_tree x)
12829 {
12830   return (x && TREE_CODE (x) == TYPE_DECL
12831           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12832 }
12833
12834 /* Returns true iff TYPE is a type variant created for a typedef. */
12835
12836 bool
12837 typedef_variant_p (const_tree type)
12838 {
12839   return is_typedef_decl (TYPE_NAME (type));
12840 }
12841
12842 /* Warn about a use of an identifier which was marked deprecated.  */
12843 void
12844 warn_deprecated_use (tree node, tree attr)
12845 {
12846   const char *msg;
12847
12848   if (node == 0 || !warn_deprecated_decl)
12849     return;
12850
12851   if (!attr)
12852     {
12853       if (DECL_P (node))
12854         attr = DECL_ATTRIBUTES (node);
12855       else if (TYPE_P (node))
12856         {
12857           tree decl = TYPE_STUB_DECL (node);
12858           if (decl)
12859             attr = lookup_attribute ("deprecated",
12860                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12861         }
12862     }
12863
12864   if (attr)
12865     attr = lookup_attribute ("deprecated", attr);
12866
12867   if (attr)
12868     msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12869   else
12870     msg = NULL;
12871
12872   bool w;
12873   if (DECL_P (node))
12874     {
12875       if (msg)
12876         w = warning (OPT_Wdeprecated_declarations,
12877                      "%qD is deprecated: %s", node, msg);
12878       else
12879         w = warning (OPT_Wdeprecated_declarations,
12880                      "%qD is deprecated", node);
12881       if (w)
12882         inform (DECL_SOURCE_LOCATION (node), "declared here");
12883     }
12884   else if (TYPE_P (node))
12885     {
12886       tree what = NULL_TREE;
12887       tree decl = TYPE_STUB_DECL (node);
12888
12889       if (TYPE_NAME (node))
12890         {
12891           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12892             what = TYPE_NAME (node);
12893           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12894                    && DECL_NAME (TYPE_NAME (node)))
12895             what = DECL_NAME (TYPE_NAME (node));
12896         }
12897
12898       if (decl)
12899         {
12900           if (what)
12901             {
12902               if (msg)
12903                 w = warning (OPT_Wdeprecated_declarations,
12904                              "%qE is deprecated: %s", what, msg);
12905               else
12906                 w = warning (OPT_Wdeprecated_declarations,
12907                              "%qE is deprecated", what);
12908             }
12909           else
12910             {
12911               if (msg)
12912                 w = warning (OPT_Wdeprecated_declarations,
12913                              "type is deprecated: %s", msg);
12914               else
12915                 w = warning (OPT_Wdeprecated_declarations,
12916                              "type is deprecated");
12917             }
12918           if (w)
12919             inform (DECL_SOURCE_LOCATION (decl), "declared here");
12920         }
12921       else
12922         {
12923           if (what)
12924             {
12925               if (msg)
12926                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12927                          what, msg);
12928               else
12929                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12930             }
12931           else
12932             {
12933               if (msg)
12934                 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12935                          msg);
12936               else
12937                 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12938             }
12939         }
12940     }
12941 }
12942
12943 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12944    somewhere in it.  */
12945
12946 bool
12947 contains_bitfld_component_ref_p (const_tree ref)
12948 {
12949   while (handled_component_p (ref))
12950     {
12951       if (TREE_CODE (ref) == COMPONENT_REF
12952           && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12953         return true;
12954       ref = TREE_OPERAND (ref, 0);
12955     }
12956
12957   return false;
12958 }
12959
12960 /* Try to determine whether a TRY_CATCH expression can fall through.
12961    This is a subroutine of block_may_fallthru.  */
12962
12963 static bool
12964 try_catch_may_fallthru (const_tree stmt)
12965 {
12966   tree_stmt_iterator i;
12967
12968   /* If the TRY block can fall through, the whole TRY_CATCH can
12969      fall through.  */
12970   if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12971     return true;
12972
12973   i = tsi_start (TREE_OPERAND (stmt, 1));
12974   switch (TREE_CODE (tsi_stmt (i)))
12975     {
12976     case CATCH_EXPR:
12977       /* We expect to see a sequence of CATCH_EXPR trees, each with a
12978          catch expression and a body.  The whole TRY_CATCH may fall
12979          through iff any of the catch bodies falls through.  */
12980       for (; !tsi_end_p (i); tsi_next (&i))
12981         {
12982           if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12983             return true;
12984         }
12985       return false;
12986
12987     case EH_FILTER_EXPR:
12988       /* The exception filter expression only matters if there is an
12989          exception.  If the exception does not match EH_FILTER_TYPES,
12990          we will execute EH_FILTER_FAILURE, and we will fall through
12991          if that falls through.  If the exception does match
12992          EH_FILTER_TYPES, the stack unwinder will continue up the
12993          stack, so we will not fall through.  We don't know whether we
12994          will throw an exception which matches EH_FILTER_TYPES or not,
12995          so we just ignore EH_FILTER_TYPES and assume that we might
12996          throw an exception which doesn't match.  */
12997       return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12998
12999     default:
13000       /* This case represents statements to be executed when an
13001          exception occurs.  Those statements are implicitly followed
13002          by a RESX statement to resume execution after the exception.
13003          So in this case the TRY_CATCH never falls through.  */
13004       return false;
13005     }
13006 }
13007
13008 /* Try to determine if we can fall out of the bottom of BLOCK.  This guess
13009    need not be 100% accurate; simply be conservative and return true if we
13010    don't know.  This is used only to avoid stupidly generating extra code.
13011    If we're wrong, we'll just delete the extra code later.  */
13012
13013 bool
13014 block_may_fallthru (const_tree block)
13015 {
13016   /* This CONST_CAST is okay because expr_last returns its argument
13017      unmodified and we assign it to a const_tree.  */
13018   const_tree stmt = expr_last (CONST_CAST_TREE (block));
13019
13020   switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
13021     {
13022     case GOTO_EXPR:
13023     case RETURN_EXPR:
13024       /* Easy cases.  If the last statement of the block implies
13025          control transfer, then we can't fall through.  */
13026       return false;
13027
13028     case SWITCH_EXPR:
13029       /* If SWITCH_LABELS is set, this is lowered, and represents a
13030          branch to a selected label and hence can not fall through.
13031          Otherwise SWITCH_BODY is set, and the switch can fall
13032          through.  */
13033       return SWITCH_LABELS (stmt) == NULL_TREE;
13034
13035     case COND_EXPR:
13036       if (block_may_fallthru (COND_EXPR_THEN (stmt)))
13037         return true;
13038       return block_may_fallthru (COND_EXPR_ELSE (stmt));
13039
13040     case BIND_EXPR:
13041       return block_may_fallthru (BIND_EXPR_BODY (stmt));
13042
13043     case TRY_CATCH_EXPR:
13044       return try_catch_may_fallthru (stmt);
13045
13046     case TRY_FINALLY_EXPR:
13047       /* The finally clause is always executed after the try clause,
13048          so if it does not fall through, then the try-finally will not
13049          fall through.  Otherwise, if the try clause does not fall
13050          through, then when the finally clause falls through it will
13051          resume execution wherever the try clause was going.  So the
13052          whole try-finally will only fall through if both the try
13053          clause and the finally clause fall through.  */
13054       return (block_may_fallthru (TREE_OPERAND (stmt, 0))
13055               && block_may_fallthru (TREE_OPERAND (stmt, 1)));
13056
13057     case MODIFY_EXPR:
13058       if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
13059         stmt = TREE_OPERAND (stmt, 1);
13060       else
13061         return true;
13062       /* FALLTHRU */
13063
13064     case CALL_EXPR:
13065       /* Functions that do not return do not fall through.  */
13066       return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
13067
13068     case CLEANUP_POINT_EXPR:
13069       return block_may_fallthru (TREE_OPERAND (stmt, 0));
13070
13071     case TARGET_EXPR:
13072       return block_may_fallthru (TREE_OPERAND (stmt, 1));
13073
13074     case ERROR_MARK:
13075       return true;
13076
13077     default:
13078       return lang_hooks.block_may_fallthru (stmt);
13079     }
13080 }
13081
13082 /* True if we are using EH to handle cleanups.  */
13083 static bool using_eh_for_cleanups_flag = false;
13084
13085 /* This routine is called from front ends to indicate eh should be used for
13086    cleanups.  */
13087 void
13088 using_eh_for_cleanups (void)
13089 {
13090   using_eh_for_cleanups_flag = true;
13091 }
13092
13093 /* Query whether EH is used for cleanups.  */
13094 bool
13095 using_eh_for_cleanups_p (void)
13096 {
13097   return using_eh_for_cleanups_flag;
13098 }
13099
13100 /* Wrapper for tree_code_name to ensure that tree code is valid */
13101 const char *
13102 get_tree_code_name (enum tree_code code)
13103 {
13104   const char *invalid = "<invalid tree code>";
13105
13106   if (code >= MAX_TREE_CODES)
13107     return invalid;
13108
13109   return tree_code_name[code];
13110 }
13111
13112 /* Drops the TREE_OVERFLOW flag from T.  */
13113
13114 tree
13115 drop_tree_overflow (tree t)
13116 {
13117   gcc_checking_assert (TREE_OVERFLOW (t));
13118
13119   /* For tree codes with a sharing machinery re-build the result.  */
13120   if (TREE_CODE (t) == INTEGER_CST)
13121     return wide_int_to_tree (TREE_TYPE (t), t);
13122
13123   /* Otherwise, as all tcc_constants are possibly shared, copy the node
13124      and drop the flag.  */
13125   t = copy_node (t);
13126   TREE_OVERFLOW (t) = 0;
13127   return t;
13128 }
13129
13130 /* Given a memory reference expression T, return its base address.
13131    The base address of a memory reference expression is the main
13132    object being referenced.  For instance, the base address for
13133    'array[i].fld[j]' is 'array'.  You can think of this as stripping
13134    away the offset part from a memory address.
13135
13136    This function calls handled_component_p to strip away all the inner
13137    parts of the memory reference until it reaches the base object.  */
13138
13139 tree
13140 get_base_address (tree t)
13141 {
13142   while (handled_component_p (t))
13143     t = TREE_OPERAND (t, 0);
13144
13145   if ((TREE_CODE (t) == MEM_REF
13146        || TREE_CODE (t) == TARGET_MEM_REF)
13147       && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
13148     t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
13149
13150   /* ???  Either the alias oracle or all callers need to properly deal
13151      with WITH_SIZE_EXPRs before we can look through those.  */
13152   if (TREE_CODE (t) == WITH_SIZE_EXPR)
13153     return NULL_TREE;
13154
13155   return t;
13156 }
13157
13158 /* Return a tree of sizetype representing the size, in bytes, of the element
13159    of EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13160
13161 tree
13162 array_ref_element_size (tree exp)
13163 {
13164   tree aligned_size = TREE_OPERAND (exp, 3);
13165   tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
13166   location_t loc = EXPR_LOCATION (exp);
13167
13168   /* If a size was specified in the ARRAY_REF, it's the size measured
13169      in alignment units of the element type.  So multiply by that value.  */
13170   if (aligned_size)
13171     {
13172       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13173          sizetype from another type of the same width and signedness.  */
13174       if (TREE_TYPE (aligned_size) != sizetype)
13175         aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
13176       return size_binop_loc (loc, MULT_EXPR, aligned_size,
13177                              size_int (TYPE_ALIGN_UNIT (elmt_type)));
13178     }
13179
13180   /* Otherwise, take the size from that of the element type.  Substitute
13181      any PLACEHOLDER_EXPR that we have.  */
13182   else
13183     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
13184 }
13185
13186 /* Return a tree representing the lower bound of the array mentioned in
13187    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13188
13189 tree
13190 array_ref_low_bound (tree exp)
13191 {
13192   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13193
13194   /* If a lower bound is specified in EXP, use it.  */
13195   if (TREE_OPERAND (exp, 2))
13196     return TREE_OPERAND (exp, 2);
13197
13198   /* Otherwise, if there is a domain type and it has a lower bound, use it,
13199      substituting for a PLACEHOLDER_EXPR as needed.  */
13200   if (domain_type && TYPE_MIN_VALUE (domain_type))
13201     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
13202
13203   /* Otherwise, return a zero of the appropriate type.  */
13204   return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0);
13205 }
13206
13207 /* Return a tree representing the upper bound of the array mentioned in
13208    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13209
13210 tree
13211 array_ref_up_bound (tree exp)
13212 {
13213   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13214
13215   /* If there is a domain type and it has an upper bound, use it, substituting
13216      for a PLACEHOLDER_EXPR as needed.  */
13217   if (domain_type && TYPE_MAX_VALUE (domain_type))
13218     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
13219
13220   /* Otherwise fail.  */
13221   return NULL_TREE;
13222 }
13223
13224 /* Returns true if REF is an array reference to an array at the end of
13225    a structure.  If this is the case, the array may be allocated larger
13226    than its upper bound implies.  When ALLOW_COMPREF is true considers
13227    REF when it's a COMPONENT_REF in addition ARRAY_REF and
13228    ARRAY_RANGE_REF.  */
13229
13230 bool
13231 array_at_struct_end_p (tree ref, bool allow_compref)
13232 {
13233   if (TREE_CODE (ref) != ARRAY_REF
13234       && TREE_CODE (ref) != ARRAY_RANGE_REF
13235       && (!allow_compref || TREE_CODE (ref) != COMPONENT_REF))
13236     return false;
13237
13238   while (handled_component_p (ref))
13239     {
13240       /* If the reference chain contains a component reference to a
13241          non-union type and there follows another field the reference
13242          is not at the end of a structure.  */
13243       if (TREE_CODE (ref) == COMPONENT_REF
13244           && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
13245         {
13246           tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
13247           while (nextf && TREE_CODE (nextf) != FIELD_DECL)
13248             nextf = DECL_CHAIN (nextf);
13249           if (nextf)
13250             return false;
13251         }
13252
13253       ref = TREE_OPERAND (ref, 0);
13254     }
13255
13256   tree size = NULL;
13257
13258   if (TREE_CODE (ref) == MEM_REF
13259       && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
13260     {
13261       size = TYPE_SIZE (TREE_TYPE (ref));
13262       ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
13263     }
13264
13265   /* If the reference is based on a declared entity, the size of the array
13266      is constrained by its given domain.  (Do not trust commons PR/69368).  */
13267   if (DECL_P (ref)
13268       /* Be sure the size of MEM_REF target match.  For example:
13269
13270            char buf[10];
13271            struct foo *str = (struct foo *)&buf;
13272
13273            str->trailin_array[2] = 1;
13274
13275          is valid because BUF allocate enough space.  */
13276
13277       && (!size || (DECL_SIZE (ref) != NULL
13278                     && operand_equal_p (DECL_SIZE (ref), size, 0)))
13279       && !(flag_unconstrained_commons
13280            && VAR_P (ref) && DECL_COMMON (ref)))
13281     return false;
13282
13283   return true;
13284 }
13285
13286 /* Return a tree representing the offset, in bytes, of the field referenced
13287    by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */
13288
13289 tree
13290 component_ref_field_offset (tree exp)
13291 {
13292   tree aligned_offset = TREE_OPERAND (exp, 2);
13293   tree field = TREE_OPERAND (exp, 1);
13294   location_t loc = EXPR_LOCATION (exp);
13295
13296   /* If an offset was specified in the COMPONENT_REF, it's the offset measured
13297      in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT.  So multiply by that
13298      value.  */
13299   if (aligned_offset)
13300     {
13301       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13302          sizetype from another type of the same width and signedness.  */
13303       if (TREE_TYPE (aligned_offset) != sizetype)
13304         aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
13305       return size_binop_loc (loc, MULT_EXPR, aligned_offset,
13306                              size_int (DECL_OFFSET_ALIGN (field)
13307                                        / BITS_PER_UNIT));
13308     }
13309
13310   /* Otherwise, take the offset from that of the field.  Substitute
13311      any PLACEHOLDER_EXPR that we have.  */
13312   else
13313     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
13314 }
13315
13316 /* Return the machine mode of T.  For vectors, returns the mode of the
13317    inner type.  The main use case is to feed the result to HONOR_NANS,
13318    avoiding the BLKmode that a direct TYPE_MODE (T) might return.  */
13319
13320 machine_mode
13321 element_mode (const_tree t)
13322 {
13323   if (!TYPE_P (t))
13324     t = TREE_TYPE (t);
13325   if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
13326     t = TREE_TYPE (t);
13327   return TYPE_MODE (t);
13328 }
13329  
13330
13331 /* Veirfy that basic properties of T match TV and thus T can be a variant of
13332    TV.  TV should be the more specified variant (i.e. the main variant).  */
13333
13334 static bool
13335 verify_type_variant (const_tree t, tree tv)
13336 {
13337   /* Type variant can differ by:
13338
13339      - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
13340                    ENCODE_QUAL_ADDR_SPACE. 
13341      - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
13342        in this case some values may not be set in the variant types
13343        (see TYPE_COMPLETE_P checks).
13344      - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
13345      - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
13346      - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
13347      - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
13348      - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
13349        this is necessary to make it possible to merge types form different TUs
13350      - arrays, pointers and references may have TREE_TYPE that is a variant
13351        of TREE_TYPE of their main variants.
13352      - aggregates may have new TYPE_FIELDS list that list variants of
13353        the main variant TYPE_FIELDS.
13354      - vector types may differ by TYPE_VECTOR_OPAQUE
13355      - TYPE_METHODS is always NULL for variant types and maintained for
13356        main variant only.
13357    */
13358
13359   /* Convenience macro for matching individual fields.  */
13360 #define verify_variant_match(flag)                                          \
13361   do {                                                                      \
13362     if (flag (tv) != flag (t))                                              \
13363       {                                                                     \
13364         error ("type variant differs by " #flag ".");                       \
13365         debug_tree (tv);                                                    \
13366         return false;                                                       \
13367       }                                                                     \
13368   } while (false)
13369
13370   /* tree_base checks.  */
13371
13372   verify_variant_match (TREE_CODE);
13373   /* FIXME: Ada builds non-artificial variants of artificial types.  */
13374   if (TYPE_ARTIFICIAL (tv) && 0)
13375     verify_variant_match (TYPE_ARTIFICIAL);
13376   if (POINTER_TYPE_P (tv))
13377     verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
13378   /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build.  */
13379   verify_variant_match (TYPE_UNSIGNED);
13380   verify_variant_match (TYPE_PACKED);
13381   if (TREE_CODE (t) == REFERENCE_TYPE)
13382     verify_variant_match (TYPE_REF_IS_RVALUE);
13383   if (AGGREGATE_TYPE_P (t))
13384     verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
13385   else
13386     verify_variant_match (TYPE_SATURATING);
13387   /* FIXME: This check trigger during libstdc++ build.  */
13388   if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
13389     verify_variant_match (TYPE_FINAL_P);
13390
13391   /* tree_type_common checks.  */
13392
13393   if (COMPLETE_TYPE_P (t))
13394     {
13395       verify_variant_match (TYPE_MODE);
13396       if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR
13397           && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR)
13398         verify_variant_match (TYPE_SIZE);
13399       if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR
13400           && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR
13401           && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv))
13402         {
13403           gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t),
13404                                         TYPE_SIZE_UNIT (tv), 0));
13405           error ("type variant has different TYPE_SIZE_UNIT");
13406           debug_tree (tv);
13407           error ("type variant's TYPE_SIZE_UNIT");
13408           debug_tree (TYPE_SIZE_UNIT (tv));
13409           error ("type's TYPE_SIZE_UNIT");
13410           debug_tree (TYPE_SIZE_UNIT (t));
13411           return false;
13412         }
13413     }
13414   verify_variant_match (TYPE_PRECISION);
13415   verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
13416   if (RECORD_OR_UNION_TYPE_P (t))
13417     verify_variant_match (TYPE_TRANSPARENT_AGGR);
13418   else if (TREE_CODE (t) == ARRAY_TYPE)
13419     verify_variant_match (TYPE_NONALIASED_COMPONENT);
13420   /* During LTO we merge variant lists from diferent translation units
13421      that may differ BY TYPE_CONTEXT that in turn may point 
13422      to TRANSLATION_UNIT_DECL.
13423      Ada also builds variants of types with different TYPE_CONTEXT.   */
13424   if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
13425     verify_variant_match (TYPE_CONTEXT);
13426   verify_variant_match (TYPE_STRING_FLAG);
13427   if (TYPE_ALIAS_SET_KNOWN_P (t))
13428     {
13429       error ("type variant with TYPE_ALIAS_SET_KNOWN_P");
13430       debug_tree (tv);
13431       return false;
13432     }
13433
13434   /* tree_type_non_common checks.  */
13435
13436   /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13437      and dangle the pointer from time to time.  */
13438   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
13439       && (in_lto_p || !TYPE_VFIELD (tv)
13440           || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
13441     {
13442       error ("type variant has different TYPE_VFIELD");
13443       debug_tree (tv);
13444       return false;
13445     }
13446   if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
13447        || TREE_CODE (t) == INTEGER_TYPE
13448        || TREE_CODE (t) == BOOLEAN_TYPE
13449        || TREE_CODE (t) == REAL_TYPE
13450        || TREE_CODE (t) == FIXED_POINT_TYPE)
13451     {
13452       verify_variant_match (TYPE_MAX_VALUE);
13453       verify_variant_match (TYPE_MIN_VALUE);
13454     }
13455   if (TREE_CODE (t) == METHOD_TYPE)
13456     verify_variant_match (TYPE_METHOD_BASETYPE);
13457   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_METHODS (t))
13458     {
13459       error ("type variant has TYPE_METHODS");
13460       debug_tree (tv);
13461       return false;
13462     }
13463   if (TREE_CODE (t) == OFFSET_TYPE)
13464     verify_variant_match (TYPE_OFFSET_BASETYPE);
13465   if (TREE_CODE (t) == ARRAY_TYPE)
13466     verify_variant_match (TYPE_ARRAY_MAX_SIZE);
13467   /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
13468      or even type's main variant.  This is needed to make bootstrap pass
13469      and the bug seems new in GCC 5.
13470      C++ FE should be updated to make this consistent and we should check
13471      that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
13472      is a match with main variant.
13473
13474      Also disable the check for Java for now because of parser hack that builds
13475      first an dummy BINFO and then sometimes replace it by real BINFO in some
13476      of the copies.  */
13477   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
13478       && TYPE_BINFO (t) != TYPE_BINFO (tv)
13479       /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
13480          Since there is no cheap way to tell C++/Java type w/o LTO, do checking
13481          at LTO time only.  */
13482       && (in_lto_p && odr_type_p (t)))
13483     {
13484       error ("type variant has different TYPE_BINFO");
13485       debug_tree (tv);
13486       error ("type variant's TYPE_BINFO");
13487       debug_tree (TYPE_BINFO (tv));
13488       error ("type's TYPE_BINFO");
13489       debug_tree (TYPE_BINFO (t));
13490       return false;
13491     }
13492
13493   /* Check various uses of TYPE_VALUES_RAW.  */
13494   if (TREE_CODE (t) == ENUMERAL_TYPE)
13495     verify_variant_match (TYPE_VALUES);
13496   else if (TREE_CODE (t) == ARRAY_TYPE)
13497     verify_variant_match (TYPE_DOMAIN);
13498   /* Permit incomplete variants of complete type.  While FEs may complete
13499      all variants, this does not happen for C++ templates in all cases.  */
13500   else if (RECORD_OR_UNION_TYPE_P (t)
13501            && COMPLETE_TYPE_P (t)
13502            && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
13503     {
13504       tree f1, f2;
13505
13506       /* Fortran builds qualified variants as new records with items of
13507          qualified type. Verify that they looks same.  */
13508       for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
13509            f1 && f2;
13510            f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13511         if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
13512             || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
13513                  != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
13514                 /* FIXME: gfc_nonrestricted_type builds all types as variants
13515                    with exception of pointer types.  It deeply copies the type
13516                    which means that we may end up with a variant type
13517                    referring non-variant pointer.  We may change it to
13518                    produce types as variants, too, like
13519                    objc_get_protocol_qualified_type does.  */
13520                 && !POINTER_TYPE_P (TREE_TYPE (f1)))
13521             || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
13522             || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
13523           break;
13524       if (f1 || f2)
13525         {
13526           error ("type variant has different TYPE_FIELDS");
13527           debug_tree (tv);
13528           error ("first mismatch is field");
13529           debug_tree (f1);
13530           error ("and field");
13531           debug_tree (f2);
13532           return false;
13533         }
13534     }
13535   else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
13536     verify_variant_match (TYPE_ARG_TYPES);
13537   /* For C++ the qualified variant of array type is really an array type
13538      of qualified TREE_TYPE.
13539      objc builds variants of pointer where pointer to type is a variant, too
13540      in objc_get_protocol_qualified_type.  */
13541   if (TREE_TYPE (t) != TREE_TYPE (tv)
13542       && ((TREE_CODE (t) != ARRAY_TYPE
13543            && !POINTER_TYPE_P (t))
13544           || TYPE_MAIN_VARIANT (TREE_TYPE (t))
13545              != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
13546     {
13547       error ("type variant has different TREE_TYPE");
13548       debug_tree (tv);
13549       error ("type variant's TREE_TYPE");
13550       debug_tree (TREE_TYPE (tv));
13551       error ("type's TREE_TYPE");
13552       debug_tree (TREE_TYPE (t));
13553       return false;
13554     }
13555   if (type_with_alias_set_p (t)
13556       && !gimple_canonical_types_compatible_p (t, tv, false))
13557     {
13558       error ("type is not compatible with its variant");
13559       debug_tree (tv);
13560       error ("type variant's TREE_TYPE");
13561       debug_tree (TREE_TYPE (tv));
13562       error ("type's TREE_TYPE");
13563       debug_tree (TREE_TYPE (t));
13564       return false;
13565     }
13566   return true;
13567 #undef verify_variant_match
13568 }
13569
13570
13571 /* The TYPE_CANONICAL merging machinery.  It should closely resemble
13572    the middle-end types_compatible_p function.  It needs to avoid
13573    claiming types are different for types that should be treated
13574    the same with respect to TBAA.  Canonical types are also used
13575    for IL consistency checks via the useless_type_conversion_p
13576    predicate which does not handle all type kinds itself but falls
13577    back to pointer-comparison of TYPE_CANONICAL for aggregates
13578    for example.  */
13579
13580 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
13581    type calculation because we need to allow inter-operability between signed
13582    and unsigned variants.  */
13583
13584 bool
13585 type_with_interoperable_signedness (const_tree type)
13586 {
13587   /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
13588      signed char and unsigned char.  Similarly fortran FE builds
13589      C_SIZE_T as signed type, while C defines it unsigned.  */
13590
13591   return tree_code_for_canonical_type_merging (TREE_CODE (type))
13592            == INTEGER_TYPE
13593          && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
13594              || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
13595 }
13596
13597 /* Return true iff T1 and T2 are structurally identical for what
13598    TBAA is concerned.  
13599    This function is used both by lto.c canonical type merging and by the
13600    verifier.  If TRUST_TYPE_CANONICAL we do not look into structure of types
13601    that have TYPE_CANONICAL defined and assume them equivalent.  This is useful
13602    only for LTO because only in these cases TYPE_CANONICAL equivalence
13603    correspond to one defined by gimple_canonical_types_compatible_p.  */
13604
13605 bool
13606 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
13607                                      bool trust_type_canonical)
13608 {
13609   /* Type variants should be same as the main variant.  When not doing sanity
13610      checking to verify this fact, go to main variants and save some work.  */
13611   if (trust_type_canonical)
13612     {
13613       t1 = TYPE_MAIN_VARIANT (t1);
13614       t2 = TYPE_MAIN_VARIANT (t2);
13615     }
13616
13617   /* Check first for the obvious case of pointer identity.  */
13618   if (t1 == t2)
13619     return true;
13620
13621   /* Check that we have two types to compare.  */
13622   if (t1 == NULL_TREE || t2 == NULL_TREE)
13623     return false;
13624
13625   /* We consider complete types always compatible with incomplete type.
13626      This does not make sense for canonical type calculation and thus we
13627      need to ensure that we are never called on it.
13628
13629      FIXME: For more correctness the function probably should have three modes
13630         1) mode assuming that types are complete mathcing their structure
13631         2) mode allowing incomplete types but producing equivalence classes
13632            and thus ignoring all info from complete types
13633         3) mode allowing incomplete types to match complete but checking
13634            compatibility between complete types.
13635
13636      1 and 2 can be used for canonical type calculation. 3 is the real
13637      definition of type compatibility that can be used i.e. for warnings during
13638      declaration merging.  */
13639
13640   gcc_assert (!trust_type_canonical
13641               || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
13642   /* If the types have been previously registered and found equal
13643      they still are.  */
13644
13645   if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
13646       && trust_type_canonical)
13647     {
13648       /* Do not use TYPE_CANONICAL of pointer types.  For LTO streamed types
13649          they are always NULL, but they are set to non-NULL for types
13650          constructed by build_pointer_type and variants.  In this case the
13651          TYPE_CANONICAL is more fine grained than the equivalnce we test (where
13652          all pointers are considered equal.  Be sure to not return false
13653          negatives.  */
13654       gcc_checking_assert (canonical_type_used_p (t1)
13655                            && canonical_type_used_p (t2));
13656       return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
13657     }
13658
13659   /* Can't be the same type if the types don't have the same code.  */
13660   enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
13661   if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
13662     return false;
13663
13664   /* Qualifiers do not matter for canonical type comparison purposes.  */
13665
13666   /* Void types and nullptr types are always the same.  */
13667   if (TREE_CODE (t1) == VOID_TYPE
13668       || TREE_CODE (t1) == NULLPTR_TYPE)
13669     return true;
13670
13671   /* Can't be the same type if they have different mode.  */
13672   if (TYPE_MODE (t1) != TYPE_MODE (t2))
13673     return false;
13674
13675   /* Non-aggregate types can be handled cheaply.  */
13676   if (INTEGRAL_TYPE_P (t1)
13677       || SCALAR_FLOAT_TYPE_P (t1)
13678       || FIXED_POINT_TYPE_P (t1)
13679       || TREE_CODE (t1) == VECTOR_TYPE
13680       || TREE_CODE (t1) == COMPLEX_TYPE
13681       || TREE_CODE (t1) == OFFSET_TYPE
13682       || POINTER_TYPE_P (t1))
13683     {
13684       /* Can't be the same type if they have different recision.  */
13685       if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
13686         return false;
13687
13688       /* In some cases the signed and unsigned types are required to be
13689          inter-operable.  */
13690       if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
13691           && !type_with_interoperable_signedness (t1))
13692         return false;
13693
13694       /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
13695          interoperable with "signed char".  Unless all frontends are revisited
13696          to agree on these types, we must ignore the flag completely.  */
13697
13698       /* Fortran standard define C_PTR type that is compatible with every
13699          C pointer.  For this reason we need to glob all pointers into one.
13700          Still pointers in different address spaces are not compatible.  */
13701       if (POINTER_TYPE_P (t1))
13702         {
13703           if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
13704               != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
13705             return false;
13706         }
13707
13708       /* Tail-recurse to components.  */
13709       if (TREE_CODE (t1) == VECTOR_TYPE
13710           || TREE_CODE (t1) == COMPLEX_TYPE)
13711         return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
13712                                                     TREE_TYPE (t2),
13713                                                     trust_type_canonical);
13714
13715       return true;
13716     }
13717
13718   /* Do type-specific comparisons.  */
13719   switch (TREE_CODE (t1))
13720     {
13721     case ARRAY_TYPE:
13722       /* Array types are the same if the element types are the same and
13723          the number of elements are the same.  */
13724       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13725                                                 trust_type_canonical)
13726           || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
13727           || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
13728           || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
13729         return false;
13730       else
13731         {
13732           tree i1 = TYPE_DOMAIN (t1);
13733           tree i2 = TYPE_DOMAIN (t2);
13734
13735           /* For an incomplete external array, the type domain can be
13736              NULL_TREE.  Check this condition also.  */
13737           if (i1 == NULL_TREE && i2 == NULL_TREE)
13738             return true;
13739           else if (i1 == NULL_TREE || i2 == NULL_TREE)
13740             return false;
13741           else
13742             {
13743               tree min1 = TYPE_MIN_VALUE (i1);
13744               tree min2 = TYPE_MIN_VALUE (i2);
13745               tree max1 = TYPE_MAX_VALUE (i1);
13746               tree max2 = TYPE_MAX_VALUE (i2);
13747
13748               /* The minimum/maximum values have to be the same.  */
13749               if ((min1 == min2
13750                    || (min1 && min2
13751                        && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
13752                             && TREE_CODE (min2) == PLACEHOLDER_EXPR)
13753                            || operand_equal_p (min1, min2, 0))))
13754                   && (max1 == max2
13755                       || (max1 && max2
13756                           && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
13757                                && TREE_CODE (max2) == PLACEHOLDER_EXPR)
13758                               || operand_equal_p (max1, max2, 0)))))
13759                 return true;
13760               else
13761                 return false;
13762             }
13763         }
13764
13765     case METHOD_TYPE:
13766     case FUNCTION_TYPE:
13767       /* Function types are the same if the return type and arguments types
13768          are the same.  */
13769       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13770                                                 trust_type_canonical))
13771         return false;
13772
13773       if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
13774         return true;
13775       else
13776         {
13777           tree parms1, parms2;
13778
13779           for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
13780                parms1 && parms2;
13781                parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
13782             {
13783               if (!gimple_canonical_types_compatible_p
13784                      (TREE_VALUE (parms1), TREE_VALUE (parms2),
13785                       trust_type_canonical))
13786                 return false;
13787             }
13788
13789           if (parms1 || parms2)
13790             return false;
13791
13792           return true;
13793         }
13794
13795     case RECORD_TYPE:
13796     case UNION_TYPE:
13797     case QUAL_UNION_TYPE:
13798       {
13799         tree f1, f2;
13800
13801         /* Don't try to compare variants of an incomplete type, before
13802            TYPE_FIELDS has been copied around.  */
13803         if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
13804           return true;
13805
13806
13807         if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
13808           return false;
13809
13810         /* For aggregate types, all the fields must be the same.  */
13811         for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
13812              f1 || f2;
13813              f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13814           {
13815             /* Skip non-fields and zero-sized fields.  */
13816             while (f1 && (TREE_CODE (f1) != FIELD_DECL
13817                           || (DECL_SIZE (f1)
13818                               && integer_zerop (DECL_SIZE (f1)))))
13819               f1 = TREE_CHAIN (f1);
13820             while (f2 && (TREE_CODE (f2) != FIELD_DECL
13821                           || (DECL_SIZE (f2)
13822                               && integer_zerop (DECL_SIZE (f2)))))
13823               f2 = TREE_CHAIN (f2);
13824             if (!f1 || !f2)
13825               break;
13826             /* The fields must have the same name, offset and type.  */
13827             if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
13828                 || !gimple_compare_field_offset (f1, f2)
13829                 || !gimple_canonical_types_compatible_p
13830                       (TREE_TYPE (f1), TREE_TYPE (f2),
13831                        trust_type_canonical))
13832               return false;
13833           }
13834
13835         /* If one aggregate has more fields than the other, they
13836            are not the same.  */
13837         if (f1 || f2)
13838           return false;
13839
13840         return true;
13841       }
13842
13843     default:
13844       /* Consider all types with language specific trees in them mutually
13845          compatible.  This is executed only from verify_type and false
13846          positives can be tolerated.  */
13847       gcc_assert (!in_lto_p);
13848       return true;
13849     }
13850 }
13851
13852 /* Verify type T.  */
13853
13854 void
13855 verify_type (const_tree t)
13856 {
13857   bool error_found = false;
13858   tree mv = TYPE_MAIN_VARIANT (t);
13859   if (!mv)
13860     {
13861       error ("Main variant is not defined");
13862       error_found = true;
13863     }
13864   else if (mv != TYPE_MAIN_VARIANT (mv))
13865     {
13866       error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT");
13867       debug_tree (mv);
13868       error_found = true;
13869     }
13870   else if (t != mv && !verify_type_variant (t, mv))
13871     error_found = true;
13872
13873   tree ct = TYPE_CANONICAL (t);
13874   if (!ct)
13875     ;
13876   else if (TYPE_CANONICAL (t) != ct)
13877     {
13878       error ("TYPE_CANONICAL has different TYPE_CANONICAL");
13879       debug_tree (ct);
13880       error_found = true;
13881     }
13882   /* Method and function types can not be used to address memory and thus
13883      TYPE_CANONICAL really matters only for determining useless conversions.
13884
13885      FIXME: C++ FE produce declarations of builtin functions that are not
13886      compatible with main variants.  */
13887   else if (TREE_CODE (t) == FUNCTION_TYPE)
13888     ;
13889   else if (t != ct
13890            /* FIXME: gimple_canonical_types_compatible_p can not compare types
13891               with variably sized arrays because their sizes possibly
13892               gimplified to different variables.  */
13893            && !variably_modified_type_p (ct, NULL)
13894            && !gimple_canonical_types_compatible_p (t, ct, false))
13895     {
13896       error ("TYPE_CANONICAL is not compatible");
13897       debug_tree (ct);
13898       error_found = true;
13899     }
13900
13901   if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
13902       && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
13903     {
13904       error ("TYPE_MODE of TYPE_CANONICAL is not compatible");
13905       debug_tree (ct);
13906       error_found = true;
13907     }
13908   /* FIXME: this is violated by the C++ FE as discussed in PR70029, when
13909      FUNCTION_*_QUALIFIED flags are set.  */
13910   if (0 && TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
13911    {
13912       error ("TYPE_CANONICAL of main variant is not main variant");
13913       debug_tree (ct);
13914       debug_tree (TYPE_MAIN_VARIANT (ct));
13915       error_found = true;
13916    }
13917
13918
13919   /* Check various uses of TYPE_MINVAL.  */
13920   if (RECORD_OR_UNION_TYPE_P (t))
13921     {
13922       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13923          and danagle the pointer from time to time.  */
13924       if (TYPE_VFIELD (t)
13925           && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
13926           && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
13927         {
13928           error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST");
13929           debug_tree (TYPE_VFIELD (t));
13930           error_found = true;
13931         }
13932     }
13933   else if (TREE_CODE (t) == POINTER_TYPE)
13934     {
13935       if (TYPE_NEXT_PTR_TO (t)
13936           && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
13937         {
13938           error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE");
13939           debug_tree (TYPE_NEXT_PTR_TO (t));
13940           error_found = true;
13941         }
13942     }
13943   else if (TREE_CODE (t) == REFERENCE_TYPE)
13944     {
13945       if (TYPE_NEXT_REF_TO (t)
13946           && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
13947         {
13948           error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE");
13949           debug_tree (TYPE_NEXT_REF_TO (t));
13950           error_found = true;
13951         }
13952     }
13953   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13954            || TREE_CODE (t) == FIXED_POINT_TYPE)
13955     {
13956       /* FIXME: The following check should pass:
13957           useless_type_conversion_p (const_cast <tree> (t),
13958                                      TREE_TYPE (TYPE_MIN_VALUE (t))
13959          but does not for C sizetypes in LTO.  */
13960     }
13961   /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
13962   else if (TYPE_MINVAL (t)
13963            && ((TREE_CODE (t) != METHOD_TYPE && TREE_CODE (t) != FUNCTION_TYPE)
13964                || in_lto_p))
13965     {
13966       error ("TYPE_MINVAL non-NULL");
13967       debug_tree (TYPE_MINVAL (t));
13968       error_found = true;
13969     }
13970
13971   /* Check various uses of TYPE_MAXVAL.  */
13972   if (RECORD_OR_UNION_TYPE_P (t))
13973     {
13974       if (TYPE_METHODS (t) && TREE_CODE (TYPE_METHODS (t)) != FUNCTION_DECL
13975           && TREE_CODE (TYPE_METHODS (t)) != TEMPLATE_DECL
13976           && TYPE_METHODS (t) != error_mark_node)
13977         {
13978           error ("TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node");
13979           debug_tree (TYPE_METHODS (t));
13980           error_found = true;
13981         }
13982     }
13983   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13984     {
13985       if (TYPE_METHOD_BASETYPE (t)
13986           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
13987           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
13988         {
13989           error ("TYPE_METHOD_BASETYPE is not record nor union");
13990           debug_tree (TYPE_METHOD_BASETYPE (t));
13991           error_found = true;
13992         }
13993     }
13994   else if (TREE_CODE (t) == OFFSET_TYPE)
13995     {
13996       if (TYPE_OFFSET_BASETYPE (t)
13997           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
13998           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
13999         {
14000           error ("TYPE_OFFSET_BASETYPE is not record nor union");
14001           debug_tree (TYPE_OFFSET_BASETYPE (t));
14002           error_found = true;
14003         }
14004     }
14005   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14006            || TREE_CODE (t) == FIXED_POINT_TYPE)
14007     {
14008       /* FIXME: The following check should pass:
14009           useless_type_conversion_p (const_cast <tree> (t),
14010                                      TREE_TYPE (TYPE_MAX_VALUE (t))
14011          but does not for C sizetypes in LTO.  */
14012     }
14013   else if (TREE_CODE (t) == ARRAY_TYPE)
14014     {
14015       if (TYPE_ARRAY_MAX_SIZE (t)
14016           && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
14017         {
14018           error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST");
14019           debug_tree (TYPE_ARRAY_MAX_SIZE (t));
14020           error_found = true;
14021         } 
14022     }
14023   else if (TYPE_MAXVAL (t))
14024     {
14025       error ("TYPE_MAXVAL non-NULL");
14026       debug_tree (TYPE_MAXVAL (t));
14027       error_found = true;
14028     }
14029
14030   /* Check various uses of TYPE_BINFO.  */
14031   if (RECORD_OR_UNION_TYPE_P (t))
14032     {
14033       if (!TYPE_BINFO (t))
14034         ;
14035       else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
14036         {
14037           error ("TYPE_BINFO is not TREE_BINFO");
14038           debug_tree (TYPE_BINFO (t));
14039           error_found = true;
14040         }
14041       /* FIXME: Java builds invalid empty binfos that do not have
14042          TREE_TYPE set.  */
14043       else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t) && 0)
14044         {
14045           error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT");
14046           debug_tree (TREE_TYPE (TYPE_BINFO (t)));
14047           error_found = true;
14048         }
14049     }
14050   else if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
14051     {
14052       error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL");
14053       debug_tree (TYPE_LANG_SLOT_1 (t));
14054       error_found = true;
14055     }
14056
14057   /* Check various uses of TYPE_VALUES_RAW.  */
14058   if (TREE_CODE (t) == ENUMERAL_TYPE)
14059     for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
14060       {
14061         tree value = TREE_VALUE (l);
14062         tree name = TREE_PURPOSE (l);
14063
14064         /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
14065            CONST_DECL of ENUMERAL TYPE.  */
14066         if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
14067           {
14068             error ("Enum value is not CONST_DECL or INTEGER_CST");
14069             debug_tree (value);
14070             debug_tree (name);
14071             error_found = true;
14072           }
14073         if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
14074             && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
14075           {
14076             error ("Enum value type is not INTEGER_TYPE nor convertible to the enum");
14077             debug_tree (value);
14078             debug_tree (name);
14079             error_found = true;
14080           }
14081         if (TREE_CODE (name) != IDENTIFIER_NODE)
14082           {
14083             error ("Enum value name is not IDENTIFIER_NODE");
14084             debug_tree (value);
14085             debug_tree (name);
14086             error_found = true;
14087           }
14088       }
14089   else if (TREE_CODE (t) == ARRAY_TYPE)
14090     {
14091       if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
14092         {
14093           error ("Array TYPE_DOMAIN is not integer type");
14094           debug_tree (TYPE_DOMAIN (t));
14095           error_found = true;
14096         }
14097     }
14098   else if (RECORD_OR_UNION_TYPE_P (t))
14099     {
14100       if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
14101         {
14102           error ("TYPE_FIELDS defined in incomplete type");
14103           error_found = true;
14104         }
14105       for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
14106         {
14107           /* TODO: verify properties of decls.  */
14108           if (TREE_CODE (fld) == FIELD_DECL)
14109             ;
14110           else if (TREE_CODE (fld) == TYPE_DECL)
14111             ;
14112           else if (TREE_CODE (fld) == CONST_DECL)
14113             ;
14114           else if (VAR_P (fld))
14115             ;
14116           else if (TREE_CODE (fld) == TEMPLATE_DECL)
14117             ;
14118           else if (TREE_CODE (fld) == USING_DECL)
14119             ;
14120           else
14121             {
14122               error ("Wrong tree in TYPE_FIELDS list");
14123               debug_tree (fld);
14124               error_found = true;
14125             }
14126         }
14127     }
14128   else if (TREE_CODE (t) == INTEGER_TYPE
14129            || TREE_CODE (t) == BOOLEAN_TYPE
14130            || TREE_CODE (t) == OFFSET_TYPE
14131            || TREE_CODE (t) == REFERENCE_TYPE
14132            || TREE_CODE (t) == NULLPTR_TYPE
14133            || TREE_CODE (t) == POINTER_TYPE)
14134     {
14135       if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
14136         {
14137           error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p",
14138                  TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
14139           error_found = true;
14140         }
14141       else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
14142         {
14143           error ("TYPE_CACHED_VALUES is not TREE_VEC");
14144           debug_tree (TYPE_CACHED_VALUES (t));
14145           error_found = true;
14146         }
14147       /* Verify just enough of cache to ensure that no one copied it to new type.
14148          All copying should go by copy_node that should clear it.  */
14149       else if (TYPE_CACHED_VALUES_P (t))
14150         {
14151           int i;
14152           for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
14153             if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
14154                 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
14155               {
14156                 error ("wrong TYPE_CACHED_VALUES entry");
14157                 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
14158                 error_found = true;
14159                 break;
14160               }
14161         }
14162     }
14163   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14164     for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
14165       {
14166         /* C++ FE uses TREE_PURPOSE to store initial values.  */
14167         if (TREE_PURPOSE (l) && in_lto_p)
14168           {
14169             error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list");
14170             debug_tree (l);
14171             error_found = true;
14172           }
14173         if (!TYPE_P (TREE_VALUE (l)))
14174           {
14175             error ("Wrong entry in TYPE_ARG_TYPES list");
14176             debug_tree (l);
14177             error_found = true;
14178           }
14179       }
14180   else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
14181     {
14182       error ("TYPE_VALUES_RAW field is non-NULL");
14183       debug_tree (TYPE_VALUES_RAW (t));
14184       error_found = true;
14185     }
14186   if (TREE_CODE (t) != INTEGER_TYPE
14187       && TREE_CODE (t) != BOOLEAN_TYPE
14188       && TREE_CODE (t) != OFFSET_TYPE
14189       && TREE_CODE (t) != REFERENCE_TYPE
14190       && TREE_CODE (t) != NULLPTR_TYPE
14191       && TREE_CODE (t) != POINTER_TYPE
14192       && TYPE_CACHED_VALUES_P (t))
14193     {
14194       error ("TYPE_CACHED_VALUES_P is set while it should not");
14195       error_found = true;
14196     }
14197   if (TYPE_STRING_FLAG (t)
14198       && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE)
14199     {
14200       error ("TYPE_STRING_FLAG is set on wrong type code");
14201       error_found = true;
14202     }
14203   else if (TYPE_STRING_FLAG (t))
14204     {
14205       const_tree b = t;
14206       if (TREE_CODE (b) == ARRAY_TYPE)
14207         b = TREE_TYPE (t);
14208       /* Java builds arrays with TYPE_STRING_FLAG of promoted_char_type
14209          that is 32bits.  */
14210       if (TREE_CODE (b) != INTEGER_TYPE)
14211         {
14212           error ("TYPE_STRING_FLAG is set on type that does not look like "
14213                  "char nor array of chars");
14214           error_found = true;
14215         }
14216     }
14217   
14218   /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
14219      TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
14220      of a type. */
14221   if (TREE_CODE (t) == METHOD_TYPE
14222       && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
14223     {
14224         error ("TYPE_METHOD_BASETYPE is not main variant");
14225         error_found = true;
14226     }
14227
14228   if (error_found)
14229     {
14230       debug_tree (const_cast <tree> (t));
14231       internal_error ("verify_type failed");
14232     }
14233 }
14234
14235
14236 /* Return 1 if ARG interpreted as signed in its precision is known to be
14237    always positive or 2 if ARG is known to be always negative, or 3 if
14238    ARG may be positive or negative.  */
14239
14240 int
14241 get_range_pos_neg (tree arg)
14242 {
14243   if (arg == error_mark_node)
14244     return 3;
14245
14246   int prec = TYPE_PRECISION (TREE_TYPE (arg));
14247   int cnt = 0;
14248   if (TREE_CODE (arg) == INTEGER_CST)
14249     {
14250       wide_int w = wi::sext (arg, prec);
14251       if (wi::neg_p (w))
14252         return 2;
14253       else
14254         return 1;
14255     }
14256   while (CONVERT_EXPR_P (arg)
14257          && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0)))
14258          && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec)
14259     {
14260       arg = TREE_OPERAND (arg, 0);
14261       /* Narrower value zero extended into wider type
14262          will always result in positive values.  */
14263       if (TYPE_UNSIGNED (TREE_TYPE (arg))
14264           && TYPE_PRECISION (TREE_TYPE (arg)) < prec)
14265         return 1;
14266       prec = TYPE_PRECISION (TREE_TYPE (arg));
14267       if (++cnt > 30)
14268         return 3;
14269     }
14270
14271   if (TREE_CODE (arg) != SSA_NAME)
14272     return 3;
14273   wide_int arg_min, arg_max;
14274   while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE)
14275     {
14276       gimple *g = SSA_NAME_DEF_STMT (arg);
14277       if (is_gimple_assign (g)
14278           && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g)))
14279         {
14280           tree t = gimple_assign_rhs1 (g);
14281           if (INTEGRAL_TYPE_P (TREE_TYPE (t))
14282               && TYPE_PRECISION (TREE_TYPE (t)) <= prec)
14283             {
14284               if (TYPE_UNSIGNED (TREE_TYPE (t))
14285                   && TYPE_PRECISION (TREE_TYPE (t)) < prec)
14286                 return 1;
14287               prec = TYPE_PRECISION (TREE_TYPE (t));
14288               arg = t;
14289               if (++cnt > 30)
14290                 return 3;
14291               continue;
14292             }
14293         }
14294       return 3;
14295     }
14296   if (TYPE_UNSIGNED (TREE_TYPE (arg)))
14297     {
14298       /* For unsigned values, the "positive" range comes
14299          below the "negative" range.  */
14300       if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14301         return 1;
14302       if (wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14303         return 2;
14304     }
14305   else
14306     {
14307       if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14308         return 1;
14309       if (wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14310         return 2;
14311     }
14312   return 3;
14313 }
14314
14315
14316
14317
14318 /* Return true if ARG is marked with the nonnull attribute in the
14319    current function signature.  */
14320
14321 bool
14322 nonnull_arg_p (const_tree arg)
14323 {
14324   tree t, attrs, fntype;
14325   unsigned HOST_WIDE_INT arg_num;
14326
14327   gcc_assert (TREE_CODE (arg) == PARM_DECL
14328               && (POINTER_TYPE_P (TREE_TYPE (arg))
14329                   || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
14330
14331   /* The static chain decl is always non null.  */
14332   if (arg == cfun->static_chain_decl)
14333     return true;
14334
14335   /* THIS argument of method is always non-NULL.  */
14336   if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
14337       && arg == DECL_ARGUMENTS (cfun->decl)
14338       && flag_delete_null_pointer_checks)
14339     return true;
14340
14341   /* Values passed by reference are always non-NULL.  */
14342   if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
14343       && flag_delete_null_pointer_checks)
14344     return true;
14345
14346   fntype = TREE_TYPE (cfun->decl);
14347   for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
14348     {
14349       attrs = lookup_attribute ("nonnull", attrs);
14350
14351       /* If "nonnull" wasn't specified, we know nothing about the argument.  */
14352       if (attrs == NULL_TREE)
14353         return false;
14354
14355       /* If "nonnull" applies to all the arguments, then ARG is non-null.  */
14356       if (TREE_VALUE (attrs) == NULL_TREE)
14357         return true;
14358
14359       /* Get the position number for ARG in the function signature.  */
14360       for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
14361            t;
14362            t = DECL_CHAIN (t), arg_num++)
14363         {
14364           if (t == arg)
14365             break;
14366         }
14367
14368       gcc_assert (t == arg);
14369
14370       /* Now see if ARG_NUM is mentioned in the nonnull list.  */
14371       for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
14372         {
14373           if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
14374             return true;
14375         }
14376     }
14377
14378   return false;
14379 }
14380
14381 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
14382    information.  */
14383
14384 location_t
14385 set_block (location_t loc, tree block)
14386 {
14387   location_t pure_loc = get_pure_location (loc);
14388   source_range src_range = get_range_from_loc (line_table, loc);
14389   return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
14390 }
14391
14392 location_t
14393 set_source_range (tree expr, location_t start, location_t finish)
14394 {
14395   source_range src_range;
14396   src_range.m_start = start;
14397   src_range.m_finish = finish;
14398   return set_source_range (expr, src_range);
14399 }
14400
14401 location_t
14402 set_source_range (tree expr, source_range src_range)
14403 {
14404   if (!EXPR_P (expr))
14405     return UNKNOWN_LOCATION;
14406
14407   location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
14408   location_t adhoc = COMBINE_LOCATION_DATA (line_table,
14409                                             pure_loc,
14410                                             src_range,
14411                                             NULL);
14412   SET_EXPR_LOCATION (expr, adhoc);
14413   return adhoc;
14414 }
14415
14416 /* Return the name of combined function FN, for debugging purposes.  */
14417
14418 const char *
14419 combined_fn_name (combined_fn fn)
14420 {
14421   if (builtin_fn_p (fn))
14422     {
14423       tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
14424       return IDENTIFIER_POINTER (DECL_NAME (fndecl));
14425     }
14426   else
14427     return internal_fn_name (as_internal_fn (fn));
14428 }
14429
14430 /* Return a bitmap with a bit set corresponding to each argument in
14431    a function call type FNTYPE declared with attribute nonnull,
14432    or null if none of the function's argument are nonnull.  The caller
14433    must free the bitmap.  */
14434
14435 bitmap
14436 get_nonnull_args (const_tree fntype)
14437 {
14438   if (fntype == NULL_TREE)
14439     return NULL;
14440
14441   tree attrs = TYPE_ATTRIBUTES (fntype);
14442   if (!attrs)
14443     return NULL;
14444
14445   bitmap argmap = NULL;
14446
14447   /* A function declaration can specify multiple attribute nonnull,
14448      each with zero or more arguments.  The loop below creates a bitmap
14449      representing a union of all the arguments.  An empty (but non-null)
14450      bitmap means that all arguments have been declaraed nonnull.  */
14451   for ( ; attrs; attrs = TREE_CHAIN (attrs))
14452     {
14453       attrs = lookup_attribute ("nonnull", attrs);
14454       if (!attrs)
14455         break;
14456
14457       if (!argmap)
14458         argmap = BITMAP_ALLOC (NULL);
14459
14460       if (!TREE_VALUE (attrs))
14461         {
14462           /* Clear the bitmap in case a previous attribute nonnull
14463              set it and this one overrides it for all arguments.  */
14464           bitmap_clear (argmap);
14465           return argmap;
14466         }
14467
14468       /* Iterate over the indices of the format arguments declared nonnull
14469          and set a bit for each.  */
14470       for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx))
14471         {
14472           unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1;
14473           bitmap_set_bit (argmap, val);
14474         }
14475     }
14476
14477   return argmap;
14478 }
14479
14480 #if CHECKING_P
14481
14482 namespace selftest {
14483
14484 /* Selftests for tree.  */
14485
14486 /* Verify that integer constants are sane.  */
14487
14488 static void
14489 test_integer_constants ()
14490 {
14491   ASSERT_TRUE (integer_type_node != NULL);
14492   ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL);
14493
14494   tree type = integer_type_node;
14495
14496   tree zero = build_zero_cst (type);
14497   ASSERT_EQ (INTEGER_CST, TREE_CODE (zero));
14498   ASSERT_EQ (type, TREE_TYPE (zero));
14499
14500   tree one = build_int_cst (type, 1);
14501   ASSERT_EQ (INTEGER_CST, TREE_CODE (one));
14502   ASSERT_EQ (type, TREE_TYPE (zero));
14503 }
14504
14505 /* Verify identifiers.  */
14506
14507 static void
14508 test_identifiers ()
14509 {
14510   tree identifier = get_identifier ("foo");
14511   ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier));
14512   ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier));
14513 }
14514
14515 /* Verify LABEL_DECL.  */
14516
14517 static void
14518 test_labels ()
14519 {
14520   tree identifier = get_identifier ("err");
14521   tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
14522                                 identifier, void_type_node);
14523   ASSERT_EQ (-1, LABEL_DECL_UID (label_decl));
14524   ASSERT_FALSE (FORCED_LABEL (label_decl));
14525 }
14526
14527 /* Run all of the selftests within this file.  */
14528
14529 void
14530 tree_c_tests ()
14531 {
14532   test_integer_constants ();
14533   test_identifiers ();
14534   test_labels ();
14535 }
14536
14537 } // namespace selftest
14538
14539 #endif /* CHECKING_P */
14540
14541 #include "gt-tree.h"