fenv.h builtins
[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(()) unsigned 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   size_t 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   size_t oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2294   size_t 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 inner;
3341
3342   /* If the tree evaluates to a constant, then we don't want to hide that
3343      fact (i.e. this allows further folding, and direct checks for constants).
3344      However, a read-only object that has side effects cannot be bypassed.
3345      Since it is no problem to reevaluate literals, we just return the
3346      literal node.  */
3347   inner = skip_simple_arithmetic (expr);
3348   if (TREE_CODE (inner) == ERROR_MARK)
3349     return inner;
3350
3351   if (tree_invariant_p_1 (inner))
3352     return expr;
3353
3354   /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3355      it means that the size or offset of some field of an object depends on
3356      the value within another field.
3357
3358      Note that it must not be the case that EXPR contains both a PLACEHOLDER_EXPR
3359      and some variable since it would then need to be both evaluated once and
3360      evaluated more than once.  Front-ends must assure this case cannot
3361      happen by surrounding any such subexpressions in their own SAVE_EXPR
3362      and forcing evaluation at the proper time.  */
3363   if (contains_placeholder_p (inner))
3364     return expr;
3365
3366   expr = build1_loc (EXPR_LOCATION (expr), SAVE_EXPR, TREE_TYPE (expr), expr);
3367
3368   /* This expression might be placed ahead of a jump to ensure that the
3369      value was computed on both sides of the jump.  So make sure it isn't
3370      eliminated as dead.  */
3371   TREE_SIDE_EFFECTS (expr) = 1;
3372   return expr;
3373 }
3374
3375 /* Look inside EXPR into any simple arithmetic operations.  Return the
3376    outermost non-arithmetic or non-invariant node.  */
3377
3378 tree
3379 skip_simple_arithmetic (tree expr)
3380 {
3381   /* We don't care about whether this can be used as an lvalue in this
3382      context.  */
3383   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3384     expr = TREE_OPERAND (expr, 0);
3385
3386   /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3387      a constant, it will be more efficient to not make another SAVE_EXPR since
3388      it will allow better simplification and GCSE will be able to merge the
3389      computations if they actually occur.  */
3390   while (true)
3391     {
3392       if (UNARY_CLASS_P (expr))
3393         expr = TREE_OPERAND (expr, 0);
3394       else if (BINARY_CLASS_P (expr))
3395         {
3396           if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3397             expr = TREE_OPERAND (expr, 0);
3398           else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3399             expr = TREE_OPERAND (expr, 1);
3400           else
3401             break;
3402         }
3403       else
3404         break;
3405     }
3406
3407   return expr;
3408 }
3409
3410 /* Look inside EXPR into simple arithmetic operations involving constants.
3411    Return the outermost non-arithmetic or non-constant node.  */
3412
3413 tree
3414 skip_simple_constant_arithmetic (tree expr)
3415 {
3416   while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3417     expr = TREE_OPERAND (expr, 0);
3418
3419   while (true)
3420     {
3421       if (UNARY_CLASS_P (expr))
3422         expr = TREE_OPERAND (expr, 0);
3423       else if (BINARY_CLASS_P (expr))
3424         {
3425           if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3426             expr = TREE_OPERAND (expr, 0);
3427           else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3428             expr = TREE_OPERAND (expr, 1);
3429           else
3430             break;
3431         }
3432       else
3433         break;
3434     }
3435
3436   return expr;
3437 }
3438
3439 /* Return which tree structure is used by T.  */
3440
3441 enum tree_node_structure_enum
3442 tree_node_structure (const_tree t)
3443 {
3444   const enum tree_code code = TREE_CODE (t);
3445   return tree_node_structure_for_code (code);
3446 }
3447
3448 /* Set various status flags when building a CALL_EXPR object T.  */
3449
3450 static void
3451 process_call_operands (tree t)
3452 {
3453   bool side_effects = TREE_SIDE_EFFECTS (t);
3454   bool read_only = false;
3455   int i = call_expr_flags (t);
3456
3457   /* Calls have side-effects, except those to const or pure functions.  */
3458   if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3459     side_effects = true;
3460   /* Propagate TREE_READONLY of arguments for const functions.  */
3461   if (i & ECF_CONST)
3462     read_only = true;
3463
3464   if (!side_effects || read_only)
3465     for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3466       {
3467         tree op = TREE_OPERAND (t, i);
3468         if (op && TREE_SIDE_EFFECTS (op))
3469           side_effects = true;
3470         if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3471           read_only = false;
3472       }
3473
3474   TREE_SIDE_EFFECTS (t) = side_effects;
3475   TREE_READONLY (t) = read_only;
3476 }
3477 \f
3478 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3479    size or offset that depends on a field within a record.  */
3480
3481 bool
3482 contains_placeholder_p (const_tree exp)
3483 {
3484   enum tree_code code;
3485
3486   if (!exp)
3487     return 0;
3488
3489   code = TREE_CODE (exp);
3490   if (code == PLACEHOLDER_EXPR)
3491     return 1;
3492
3493   switch (TREE_CODE_CLASS (code))
3494     {
3495     case tcc_reference:
3496       /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3497          position computations since they will be converted into a
3498          WITH_RECORD_EXPR involving the reference, which will assume
3499          here will be valid.  */
3500       return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3501
3502     case tcc_exceptional:
3503       if (code == TREE_LIST)
3504         return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3505                 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3506       break;
3507
3508     case tcc_unary:
3509     case tcc_binary:
3510     case tcc_comparison:
3511     case tcc_expression:
3512       switch (code)
3513         {
3514         case COMPOUND_EXPR:
3515           /* Ignoring the first operand isn't quite right, but works best.  */
3516           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3517
3518         case COND_EXPR:
3519           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3520                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3521                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3522
3523         case SAVE_EXPR:
3524           /* The save_expr function never wraps anything containing
3525              a PLACEHOLDER_EXPR. */
3526           return 0;
3527
3528         default:
3529           break;
3530         }
3531
3532       switch (TREE_CODE_LENGTH (code))
3533         {
3534         case 1:
3535           return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3536         case 2:
3537           return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3538                   || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3539         default:
3540           return 0;
3541         }
3542
3543     case tcc_vl_exp:
3544       switch (code)
3545         {
3546         case CALL_EXPR:
3547           {
3548             const_tree arg;
3549             const_call_expr_arg_iterator iter;
3550             FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3551               if (CONTAINS_PLACEHOLDER_P (arg))
3552                 return 1;
3553             return 0;
3554           }
3555         default:
3556           return 0;
3557         }
3558
3559     default:
3560       return 0;
3561     }
3562   return 0;
3563 }
3564
3565 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3566    directly.  This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3567    field positions.  */
3568
3569 static bool
3570 type_contains_placeholder_1 (const_tree type)
3571 {
3572   /* If the size contains a placeholder or the parent type (component type in
3573      the case of arrays) type involves a placeholder, this type does.  */
3574   if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3575       || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3576       || (!POINTER_TYPE_P (type)
3577           && TREE_TYPE (type)
3578           && type_contains_placeholder_p (TREE_TYPE (type))))
3579     return true;
3580
3581   /* Now do type-specific checks.  Note that the last part of the check above
3582      greatly limits what we have to do below.  */
3583   switch (TREE_CODE (type))
3584     {
3585     case VOID_TYPE:
3586     case POINTER_BOUNDS_TYPE:
3587     case COMPLEX_TYPE:
3588     case ENUMERAL_TYPE:
3589     case BOOLEAN_TYPE:
3590     case POINTER_TYPE:
3591     case OFFSET_TYPE:
3592     case REFERENCE_TYPE:
3593     case METHOD_TYPE:
3594     case FUNCTION_TYPE:
3595     case VECTOR_TYPE:
3596     case NULLPTR_TYPE:
3597       return false;
3598
3599     case INTEGER_TYPE:
3600     case REAL_TYPE:
3601     case FIXED_POINT_TYPE:
3602       /* Here we just check the bounds.  */
3603       return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3604               || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3605
3606     case ARRAY_TYPE:
3607       /* We have already checked the component type above, so just check
3608          the domain type.  Flexible array members have a null domain.  */
3609       return TYPE_DOMAIN (type) ?
3610         type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3611
3612     case RECORD_TYPE:
3613     case UNION_TYPE:
3614     case QUAL_UNION_TYPE:
3615       {
3616         tree field;
3617
3618         for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3619           if (TREE_CODE (field) == FIELD_DECL
3620               && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3621                   || (TREE_CODE (type) == QUAL_UNION_TYPE
3622                       && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3623                   || type_contains_placeholder_p (TREE_TYPE (field))))
3624             return true;
3625
3626         return false;
3627       }
3628
3629     default:
3630       gcc_unreachable ();
3631     }
3632 }
3633
3634 /* Wrapper around above function used to cache its result.  */
3635
3636 bool
3637 type_contains_placeholder_p (tree type)
3638 {
3639   bool result;
3640
3641   /* If the contains_placeholder_bits field has been initialized,
3642      then we know the answer.  */
3643   if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3644     return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3645
3646   /* Indicate that we've seen this type node, and the answer is false.
3647      This is what we want to return if we run into recursion via fields.  */
3648   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3649
3650   /* Compute the real value.  */
3651   result = type_contains_placeholder_1 (type);
3652
3653   /* Store the real value.  */
3654   TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3655
3656   return result;
3657 }
3658 \f
3659 /* Push tree EXP onto vector QUEUE if it is not already present.  */
3660
3661 static void
3662 push_without_duplicates (tree exp, vec<tree> *queue)
3663 {
3664   unsigned int i;
3665   tree iter;
3666
3667   FOR_EACH_VEC_ELT (*queue, i, iter)
3668     if (simple_cst_equal (iter, exp) == 1)
3669       break;
3670
3671   if (!iter)
3672     queue->safe_push (exp);
3673 }
3674
3675 /* Given a tree EXP, find all occurrences of references to fields
3676    in a PLACEHOLDER_EXPR and place them in vector REFS without
3677    duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
3678    we assume here that EXP contains only arithmetic expressions
3679    or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3680    argument list.  */
3681
3682 void
3683 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3684 {
3685   enum tree_code code = TREE_CODE (exp);
3686   tree inner;
3687   int i;
3688
3689   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3690   if (code == TREE_LIST)
3691     {
3692       FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3693       FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3694     }
3695   else if (code == COMPONENT_REF)
3696     {
3697       for (inner = TREE_OPERAND (exp, 0);
3698            REFERENCE_CLASS_P (inner);
3699            inner = TREE_OPERAND (inner, 0))
3700         ;
3701
3702       if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3703         push_without_duplicates (exp, refs);
3704       else
3705         FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3706    }
3707   else
3708     switch (TREE_CODE_CLASS (code))
3709       {
3710       case tcc_constant:
3711         break;
3712
3713       case tcc_declaration:
3714         /* Variables allocated to static storage can stay.  */
3715         if (!TREE_STATIC (exp))
3716           push_without_duplicates (exp, refs);
3717         break;
3718
3719       case tcc_expression:
3720         /* This is the pattern built in ada/make_aligning_type.  */
3721         if (code == ADDR_EXPR
3722             && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3723           {
3724             push_without_duplicates (exp, refs);
3725             break;
3726           }
3727
3728         /* Fall through.  */
3729
3730       case tcc_exceptional:
3731       case tcc_unary:
3732       case tcc_binary:
3733       case tcc_comparison:
3734       case tcc_reference:
3735         for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3736           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3737         break;
3738
3739       case tcc_vl_exp:
3740         for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3741           FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3742         break;
3743
3744       default:
3745         gcc_unreachable ();
3746       }
3747 }
3748
3749 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3750    return a tree with all occurrences of references to F in a
3751    PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
3752    CONST_DECLs.  Note that we assume here that EXP contains only
3753    arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3754    occurring only in their argument list.  */
3755
3756 tree
3757 substitute_in_expr (tree exp, tree f, tree r)
3758 {
3759   enum tree_code code = TREE_CODE (exp);
3760   tree op0, op1, op2, op3;
3761   tree new_tree;
3762
3763   /* We handle TREE_LIST and COMPONENT_REF separately.  */
3764   if (code == TREE_LIST)
3765     {
3766       op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3767       op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3768       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3769         return exp;
3770
3771       return tree_cons (TREE_PURPOSE (exp), op1, op0);
3772     }
3773   else if (code == COMPONENT_REF)
3774     {
3775       tree inner;
3776
3777       /* If this expression is getting a value from a PLACEHOLDER_EXPR
3778          and it is the right field, replace it with R.  */
3779       for (inner = TREE_OPERAND (exp, 0);
3780            REFERENCE_CLASS_P (inner);
3781            inner = TREE_OPERAND (inner, 0))
3782         ;
3783
3784       /* The field.  */
3785       op1 = TREE_OPERAND (exp, 1);
3786
3787       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3788         return r;
3789
3790       /* If this expression hasn't been completed let, leave it alone.  */
3791       if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3792         return exp;
3793
3794       op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3795       if (op0 == TREE_OPERAND (exp, 0))
3796         return exp;
3797
3798       new_tree
3799         = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3800    }
3801   else
3802     switch (TREE_CODE_CLASS (code))
3803       {
3804       case tcc_constant:
3805         return exp;
3806
3807       case tcc_declaration:
3808         if (exp == f)
3809           return r;
3810         else
3811           return exp;
3812
3813       case tcc_expression:
3814         if (exp == f)
3815           return r;
3816
3817         /* Fall through.  */
3818
3819       case tcc_exceptional:
3820       case tcc_unary:
3821       case tcc_binary:
3822       case tcc_comparison:
3823       case tcc_reference:
3824         switch (TREE_CODE_LENGTH (code))
3825           {
3826           case 0:
3827             return exp;
3828
3829           case 1:
3830             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3831             if (op0 == TREE_OPERAND (exp, 0))
3832               return exp;
3833
3834             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3835             break;
3836
3837           case 2:
3838             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3839             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3840
3841             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3842               return exp;
3843
3844             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3845             break;
3846
3847           case 3:
3848             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3849             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3850             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3851
3852             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3853                 && op2 == TREE_OPERAND (exp, 2))
3854               return exp;
3855
3856             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3857             break;
3858
3859           case 4:
3860             op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3861             op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3862             op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3863             op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3864
3865             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3866                 && op2 == TREE_OPERAND (exp, 2)
3867                 && op3 == TREE_OPERAND (exp, 3))
3868               return exp;
3869
3870             new_tree
3871               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3872             break;
3873
3874           default:
3875             gcc_unreachable ();
3876           }
3877         break;
3878
3879       case tcc_vl_exp:
3880         {
3881           int i;
3882
3883           new_tree = NULL_TREE;
3884
3885           /* If we are trying to replace F with a constant or with another
3886              instance of one of the arguments of the call, inline back
3887              functions which do nothing else than computing a value from
3888              the arguments they are passed.  This makes it possible to
3889              fold partially or entirely the replacement expression.  */
3890           if (code == CALL_EXPR)
3891             {
3892               bool maybe_inline = false;
3893               if (CONSTANT_CLASS_P (r))
3894                 maybe_inline = true;
3895               else
3896                 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
3897                   if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
3898                     {
3899                       maybe_inline = true;
3900                       break;
3901                     }
3902               if (maybe_inline)
3903                 {
3904                   tree t = maybe_inline_call_in_expr (exp);
3905                   if (t)
3906                     return SUBSTITUTE_IN_EXPR (t, f, r);
3907                 }
3908             }
3909
3910           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3911             {
3912               tree op = TREE_OPERAND (exp, i);
3913               tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3914               if (new_op != op)
3915                 {
3916                   if (!new_tree)
3917                     new_tree = copy_node (exp);
3918                   TREE_OPERAND (new_tree, i) = new_op;
3919                 }
3920             }
3921
3922           if (new_tree)
3923             {
3924               new_tree = fold (new_tree);
3925               if (TREE_CODE (new_tree) == CALL_EXPR)
3926                 process_call_operands (new_tree);
3927             }
3928           else
3929             return exp;
3930         }
3931         break;
3932
3933       default:
3934         gcc_unreachable ();
3935       }
3936
3937   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3938
3939   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3940     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3941
3942   return new_tree;
3943 }
3944
3945 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3946    for it within OBJ, a tree that is an object or a chain of references.  */
3947
3948 tree
3949 substitute_placeholder_in_expr (tree exp, tree obj)
3950 {
3951   enum tree_code code = TREE_CODE (exp);
3952   tree op0, op1, op2, op3;
3953   tree new_tree;
3954
3955   /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3956      in the chain of OBJ.  */
3957   if (code == PLACEHOLDER_EXPR)
3958     {
3959       tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3960       tree elt;
3961
3962       for (elt = obj; elt != 0;
3963            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3964                    || TREE_CODE (elt) == COND_EXPR)
3965                   ? TREE_OPERAND (elt, 1)
3966                   : (REFERENCE_CLASS_P (elt)
3967                      || UNARY_CLASS_P (elt)
3968                      || BINARY_CLASS_P (elt)
3969                      || VL_EXP_CLASS_P (elt)
3970                      || EXPRESSION_CLASS_P (elt))
3971                   ? TREE_OPERAND (elt, 0) : 0))
3972         if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3973           return elt;
3974
3975       for (elt = obj; elt != 0;
3976            elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3977                    || TREE_CODE (elt) == COND_EXPR)
3978                   ? TREE_OPERAND (elt, 1)
3979                   : (REFERENCE_CLASS_P (elt)
3980                      || UNARY_CLASS_P (elt)
3981                      || BINARY_CLASS_P (elt)
3982                      || VL_EXP_CLASS_P (elt)
3983                      || EXPRESSION_CLASS_P (elt))
3984                   ? TREE_OPERAND (elt, 0) : 0))
3985         if (POINTER_TYPE_P (TREE_TYPE (elt))
3986             && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3987                 == need_type))
3988           return fold_build1 (INDIRECT_REF, need_type, elt);
3989
3990       /* If we didn't find it, return the original PLACEHOLDER_EXPR.  If it
3991          survives until RTL generation, there will be an error.  */
3992       return exp;
3993     }
3994
3995   /* TREE_LIST is special because we need to look at TREE_VALUE
3996      and TREE_CHAIN, not TREE_OPERANDS.  */
3997   else if (code == TREE_LIST)
3998     {
3999       op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
4000       op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
4001       if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4002         return exp;
4003
4004       return tree_cons (TREE_PURPOSE (exp), op1, op0);
4005     }
4006   else
4007     switch (TREE_CODE_CLASS (code))
4008       {
4009       case tcc_constant:
4010       case tcc_declaration:
4011         return exp;
4012
4013       case tcc_exceptional:
4014       case tcc_unary:
4015       case tcc_binary:
4016       case tcc_comparison:
4017       case tcc_expression:
4018       case tcc_reference:
4019       case tcc_statement:
4020         switch (TREE_CODE_LENGTH (code))
4021           {
4022           case 0:
4023             return exp;
4024
4025           case 1:
4026             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4027             if (op0 == TREE_OPERAND (exp, 0))
4028               return exp;
4029
4030             new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4031             break;
4032
4033           case 2:
4034             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4035             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4036
4037             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4038               return exp;
4039
4040             new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4041             break;
4042
4043           case 3:
4044             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4045             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4046             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4047
4048             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4049                 && op2 == TREE_OPERAND (exp, 2))
4050               return exp;
4051
4052             new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4053             break;
4054
4055           case 4:
4056             op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4057             op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4058             op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4059             op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4060
4061             if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4062                 && op2 == TREE_OPERAND (exp, 2)
4063                 && op3 == TREE_OPERAND (exp, 3))
4064               return exp;
4065
4066             new_tree
4067               = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4068             break;
4069
4070           default:
4071             gcc_unreachable ();
4072           }
4073         break;
4074
4075       case tcc_vl_exp:
4076         {
4077           int i;
4078
4079           new_tree = NULL_TREE;
4080
4081           for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4082             {
4083               tree op = TREE_OPERAND (exp, i);
4084               tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4085               if (new_op != op)
4086                 {
4087                   if (!new_tree)
4088                     new_tree = copy_node (exp);
4089                   TREE_OPERAND (new_tree, i) = new_op;
4090                 }
4091             }
4092
4093           if (new_tree)
4094             {
4095               new_tree = fold (new_tree);
4096               if (TREE_CODE (new_tree) == CALL_EXPR)
4097                 process_call_operands (new_tree);
4098             }
4099           else
4100             return exp;
4101         }
4102         break;
4103
4104       default:
4105         gcc_unreachable ();
4106       }
4107
4108   TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4109
4110   if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4111     TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4112
4113   return new_tree;
4114 }
4115 \f
4116
4117 /* Subroutine of stabilize_reference; this is called for subtrees of
4118    references.  Any expression with side-effects must be put in a SAVE_EXPR
4119    to ensure that it is only evaluated once.
4120
4121    We don't put SAVE_EXPR nodes around everything, because assigning very
4122    simple expressions to temporaries causes us to miss good opportunities
4123    for optimizations.  Among other things, the opportunity to fold in the
4124    addition of a constant into an addressing mode often gets lost, e.g.
4125    "y[i+1] += x;".  In general, we take the approach that we should not make
4126    an assignment unless we are forced into it - i.e., that any non-side effect
4127    operator should be allowed, and that cse should take care of coalescing
4128    multiple utterances of the same expression should that prove fruitful.  */
4129
4130 static tree
4131 stabilize_reference_1 (tree e)
4132 {
4133   tree result;
4134   enum tree_code code = TREE_CODE (e);
4135
4136   /* We cannot ignore const expressions because it might be a reference
4137      to a const array but whose index contains side-effects.  But we can
4138      ignore things that are actual constant or that already have been
4139      handled by this function.  */
4140
4141   if (tree_invariant_p (e))
4142     return e;
4143
4144   switch (TREE_CODE_CLASS (code))
4145     {
4146     case tcc_exceptional:
4147     case tcc_type:
4148     case tcc_declaration:
4149     case tcc_comparison:
4150     case tcc_statement:
4151     case tcc_expression:
4152     case tcc_reference:
4153     case tcc_vl_exp:
4154       /* If the expression has side-effects, then encase it in a SAVE_EXPR
4155          so that it will only be evaluated once.  */
4156       /* The reference (r) and comparison (<) classes could be handled as
4157          below, but it is generally faster to only evaluate them once.  */
4158       if (TREE_SIDE_EFFECTS (e))
4159         return save_expr (e);
4160       return e;
4161
4162     case tcc_constant:
4163       /* Constants need no processing.  In fact, we should never reach
4164          here.  */
4165       return e;
4166
4167     case tcc_binary:
4168       /* Division is slow and tends to be compiled with jumps,
4169          especially the division by powers of 2 that is often
4170          found inside of an array reference.  So do it just once.  */
4171       if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4172           || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4173           || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4174           || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4175         return save_expr (e);
4176       /* Recursively stabilize each operand.  */
4177       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4178                          stabilize_reference_1 (TREE_OPERAND (e, 1)));
4179       break;
4180
4181     case tcc_unary:
4182       /* Recursively stabilize each operand.  */
4183       result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4184       break;
4185
4186     default:
4187       gcc_unreachable ();
4188     }
4189
4190   TREE_TYPE (result) = TREE_TYPE (e);
4191   TREE_READONLY (result) = TREE_READONLY (e);
4192   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4193   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4194
4195   return result;
4196 }
4197
4198 /* Stabilize a reference so that we can use it any number of times
4199    without causing its operands to be evaluated more than once.
4200    Returns the stabilized reference.  This works by means of save_expr,
4201    so see the caveats in the comments about save_expr.
4202
4203    Also allows conversion expressions whose operands are references.
4204    Any other kind of expression is returned unchanged.  */
4205
4206 tree
4207 stabilize_reference (tree ref)
4208 {
4209   tree result;
4210   enum tree_code code = TREE_CODE (ref);
4211
4212   switch (code)
4213     {
4214     case VAR_DECL:
4215     case PARM_DECL:
4216     case RESULT_DECL:
4217       /* No action is needed in this case.  */
4218       return ref;
4219
4220     CASE_CONVERT:
4221     case FLOAT_EXPR:
4222     case FIX_TRUNC_EXPR:
4223       result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4224       break;
4225
4226     case INDIRECT_REF:
4227       result = build_nt (INDIRECT_REF,
4228                          stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4229       break;
4230
4231     case COMPONENT_REF:
4232       result = build_nt (COMPONENT_REF,
4233                          stabilize_reference (TREE_OPERAND (ref, 0)),
4234                          TREE_OPERAND (ref, 1), NULL_TREE);
4235       break;
4236
4237     case BIT_FIELD_REF:
4238       result = build_nt (BIT_FIELD_REF,
4239                          stabilize_reference (TREE_OPERAND (ref, 0)),
4240                          TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4241       REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4242       break;
4243
4244     case ARRAY_REF:
4245       result = build_nt (ARRAY_REF,
4246                          stabilize_reference (TREE_OPERAND (ref, 0)),
4247                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4248                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4249       break;
4250
4251     case ARRAY_RANGE_REF:
4252       result = build_nt (ARRAY_RANGE_REF,
4253                          stabilize_reference (TREE_OPERAND (ref, 0)),
4254                          stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4255                          TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4256       break;
4257
4258     case COMPOUND_EXPR:
4259       /* We cannot wrap the first expression in a SAVE_EXPR, as then
4260          it wouldn't be ignored.  This matters when dealing with
4261          volatiles.  */
4262       return stabilize_reference_1 (ref);
4263
4264       /* If arg isn't a kind of lvalue we recognize, make no change.
4265          Caller should recognize the error for an invalid lvalue.  */
4266     default:
4267       return ref;
4268
4269     case ERROR_MARK:
4270       return error_mark_node;
4271     }
4272
4273   TREE_TYPE (result) = TREE_TYPE (ref);
4274   TREE_READONLY (result) = TREE_READONLY (ref);
4275   TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4276   TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4277
4278   return result;
4279 }
4280 \f
4281 /* Low-level constructors for expressions.  */
4282
4283 /* A helper function for build1 and constant folders.  Set TREE_CONSTANT,
4284    and TREE_SIDE_EFFECTS for an ADDR_EXPR.  */
4285
4286 void
4287 recompute_tree_invariant_for_addr_expr (tree t)
4288 {
4289   tree node;
4290   bool tc = true, se = false;
4291
4292   gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4293
4294   /* We started out assuming this address is both invariant and constant, but
4295      does not have side effects.  Now go down any handled components and see if
4296      any of them involve offsets that are either non-constant or non-invariant.
4297      Also check for side-effects.
4298
4299      ??? Note that this code makes no attempt to deal with the case where
4300      taking the address of something causes a copy due to misalignment.  */
4301
4302 #define UPDATE_FLAGS(NODE)  \
4303 do { tree _node = (NODE); \
4304      if (_node && !TREE_CONSTANT (_node)) tc = false; \
4305      if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4306
4307   for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4308        node = TREE_OPERAND (node, 0))
4309     {
4310       /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4311          array reference (probably made temporarily by the G++ front end),
4312          so ignore all the operands.  */
4313       if ((TREE_CODE (node) == ARRAY_REF
4314            || TREE_CODE (node) == ARRAY_RANGE_REF)
4315           && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4316         {
4317           UPDATE_FLAGS (TREE_OPERAND (node, 1));
4318           if (TREE_OPERAND (node, 2))
4319             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4320           if (TREE_OPERAND (node, 3))
4321             UPDATE_FLAGS (TREE_OPERAND (node, 3));
4322         }
4323       /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4324          FIELD_DECL, apparently.  The G++ front end can put something else
4325          there, at least temporarily.  */
4326       else if (TREE_CODE (node) == COMPONENT_REF
4327                && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4328         {
4329           if (TREE_OPERAND (node, 2))
4330             UPDATE_FLAGS (TREE_OPERAND (node, 2));
4331         }
4332     }
4333
4334   node = lang_hooks.expr_to_decl (node, &tc, &se);
4335
4336   /* Now see what's inside.  If it's an INDIRECT_REF, copy our properties from
4337      the address, since &(*a)->b is a form of addition.  If it's a constant, the
4338      address is constant too.  If it's a decl, its address is constant if the
4339      decl is static.  Everything else is not constant and, furthermore,
4340      taking the address of a volatile variable is not volatile.  */
4341   if (TREE_CODE (node) == INDIRECT_REF
4342       || TREE_CODE (node) == MEM_REF)
4343     UPDATE_FLAGS (TREE_OPERAND (node, 0));
4344   else if (CONSTANT_CLASS_P (node))
4345     ;
4346   else if (DECL_P (node))
4347     tc &= (staticp (node) != NULL_TREE);
4348   else
4349     {
4350       tc = false;
4351       se |= TREE_SIDE_EFFECTS (node);
4352     }
4353
4354
4355   TREE_CONSTANT (t) = tc;
4356   TREE_SIDE_EFFECTS (t) = se;
4357 #undef UPDATE_FLAGS
4358 }
4359
4360 /* Build an expression of code CODE, data type TYPE, and operands as
4361    specified.  Expressions and reference nodes can be created this way.
4362    Constants, decls, types and misc nodes cannot be.
4363
4364    We define 5 non-variadic functions, from 0 to 4 arguments.  This is
4365    enough for all extant tree codes.  */
4366
4367 tree
4368 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4369 {
4370   tree t;
4371
4372   gcc_assert (TREE_CODE_LENGTH (code) == 0);
4373
4374   t = make_node_stat (code PASS_MEM_STAT);
4375   TREE_TYPE (t) = tt;
4376
4377   return t;
4378 }
4379
4380 tree
4381 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4382 {
4383   int length = sizeof (struct tree_exp);
4384   tree t;
4385
4386   record_node_allocation_statistics (code, length);
4387
4388   gcc_assert (TREE_CODE_LENGTH (code) == 1);
4389
4390   t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4391
4392   memset (t, 0, sizeof (struct tree_common));
4393
4394   TREE_SET_CODE (t, code);
4395
4396   TREE_TYPE (t) = type;
4397   SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4398   TREE_OPERAND (t, 0) = node;
4399   if (node && !TYPE_P (node))
4400     {
4401       TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4402       TREE_READONLY (t) = TREE_READONLY (node);
4403     }
4404
4405   if (TREE_CODE_CLASS (code) == tcc_statement)
4406     TREE_SIDE_EFFECTS (t) = 1;
4407   else switch (code)
4408     {
4409     case VA_ARG_EXPR:
4410       /* All of these have side-effects, no matter what their
4411          operands are.  */
4412       TREE_SIDE_EFFECTS (t) = 1;
4413       TREE_READONLY (t) = 0;
4414       break;
4415
4416     case INDIRECT_REF:
4417       /* Whether a dereference is readonly has nothing to do with whether
4418          its operand is readonly.  */
4419       TREE_READONLY (t) = 0;
4420       break;
4421
4422     case ADDR_EXPR:
4423       if (node)
4424         recompute_tree_invariant_for_addr_expr (t);
4425       break;
4426
4427     default:
4428       if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4429           && node && !TYPE_P (node)
4430           && TREE_CONSTANT (node))
4431         TREE_CONSTANT (t) = 1;
4432       if (TREE_CODE_CLASS (code) == tcc_reference
4433           && node && TREE_THIS_VOLATILE (node))
4434         TREE_THIS_VOLATILE (t) = 1;
4435       break;
4436     }
4437
4438   return t;
4439 }
4440
4441 #define PROCESS_ARG(N)                          \
4442   do {                                          \
4443     TREE_OPERAND (t, N) = arg##N;               \
4444     if (arg##N &&!TYPE_P (arg##N))              \
4445       {                                         \
4446         if (TREE_SIDE_EFFECTS (arg##N))         \
4447           side_effects = 1;                     \
4448         if (!TREE_READONLY (arg##N)             \
4449             && !CONSTANT_CLASS_P (arg##N))      \
4450           (void) (read_only = 0);               \
4451         if (!TREE_CONSTANT (arg##N))            \
4452           (void) (constant = 0);                \
4453       }                                         \
4454   } while (0)
4455
4456 tree
4457 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4458 {
4459   bool constant, read_only, side_effects;
4460   tree t;
4461
4462   gcc_assert (TREE_CODE_LENGTH (code) == 2);
4463
4464   if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4465       && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4466       /* When sizetype precision doesn't match that of pointers
4467          we need to be able to build explicit extensions or truncations
4468          of the offset argument.  */
4469       && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4470     gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4471                 && TREE_CODE (arg1) == INTEGER_CST);
4472
4473   if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4474     gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4475                 && ptrofftype_p (TREE_TYPE (arg1)));
4476
4477   t = make_node_stat (code PASS_MEM_STAT);
4478   TREE_TYPE (t) = tt;
4479
4480   /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4481      result based on those same flags for the arguments.  But if the
4482      arguments aren't really even `tree' expressions, we shouldn't be trying
4483      to do this.  */
4484
4485   /* Expressions without side effects may be constant if their
4486      arguments are as well.  */
4487   constant = (TREE_CODE_CLASS (code) == tcc_comparison
4488               || TREE_CODE_CLASS (code) == tcc_binary);
4489   read_only = 1;
4490   side_effects = TREE_SIDE_EFFECTS (t);
4491
4492   PROCESS_ARG (0);
4493   PROCESS_ARG (1);
4494
4495   TREE_SIDE_EFFECTS (t) = side_effects;
4496   if (code == MEM_REF)
4497     {
4498       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4499         {
4500           tree o = TREE_OPERAND (arg0, 0);
4501           TREE_READONLY (t) = TREE_READONLY (o);
4502           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4503         }
4504     }
4505   else
4506     {
4507       TREE_READONLY (t) = read_only;
4508       TREE_CONSTANT (t) = constant;
4509       TREE_THIS_VOLATILE (t)
4510         = (TREE_CODE_CLASS (code) == tcc_reference
4511            && arg0 && TREE_THIS_VOLATILE (arg0));
4512     }
4513
4514   return t;
4515 }
4516
4517
4518 tree
4519 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4520              tree arg2 MEM_STAT_DECL)
4521 {
4522   bool constant, read_only, side_effects;
4523   tree t;
4524
4525   gcc_assert (TREE_CODE_LENGTH (code) == 3);
4526   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4527
4528   t = make_node_stat (code PASS_MEM_STAT);
4529   TREE_TYPE (t) = tt;
4530
4531   read_only = 1;
4532
4533   /* As a special exception, if COND_EXPR has NULL branches, we
4534      assume that it is a gimple statement and always consider
4535      it to have side effects.  */
4536   if (code == COND_EXPR
4537       && tt == void_type_node
4538       && arg1 == NULL_TREE
4539       && arg2 == NULL_TREE)
4540     side_effects = true;
4541   else
4542     side_effects = TREE_SIDE_EFFECTS (t);
4543
4544   PROCESS_ARG (0);
4545   PROCESS_ARG (1);
4546   PROCESS_ARG (2);
4547
4548   if (code == COND_EXPR)
4549     TREE_READONLY (t) = read_only;
4550
4551   TREE_SIDE_EFFECTS (t) = side_effects;
4552   TREE_THIS_VOLATILE (t)
4553     = (TREE_CODE_CLASS (code) == tcc_reference
4554        && arg0 && TREE_THIS_VOLATILE (arg0));
4555
4556   return t;
4557 }
4558
4559 tree
4560 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4561              tree arg2, tree arg3 MEM_STAT_DECL)
4562 {
4563   bool constant, read_only, side_effects;
4564   tree t;
4565
4566   gcc_assert (TREE_CODE_LENGTH (code) == 4);
4567
4568   t = make_node_stat (code PASS_MEM_STAT);
4569   TREE_TYPE (t) = tt;
4570
4571   side_effects = TREE_SIDE_EFFECTS (t);
4572
4573   PROCESS_ARG (0);
4574   PROCESS_ARG (1);
4575   PROCESS_ARG (2);
4576   PROCESS_ARG (3);
4577
4578   TREE_SIDE_EFFECTS (t) = side_effects;
4579   TREE_THIS_VOLATILE (t)
4580     = (TREE_CODE_CLASS (code) == tcc_reference
4581        && arg0 && TREE_THIS_VOLATILE (arg0));
4582
4583   return t;
4584 }
4585
4586 tree
4587 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4588              tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4589 {
4590   bool constant, read_only, side_effects;
4591   tree t;
4592
4593   gcc_assert (TREE_CODE_LENGTH (code) == 5);
4594
4595   t = make_node_stat (code PASS_MEM_STAT);
4596   TREE_TYPE (t) = tt;
4597
4598   side_effects = TREE_SIDE_EFFECTS (t);
4599
4600   PROCESS_ARG (0);
4601   PROCESS_ARG (1);
4602   PROCESS_ARG (2);
4603   PROCESS_ARG (3);
4604   PROCESS_ARG (4);
4605
4606   TREE_SIDE_EFFECTS (t) = side_effects;
4607   if (code == TARGET_MEM_REF)
4608     {
4609       if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4610         {
4611           tree o = TREE_OPERAND (arg0, 0);
4612           TREE_READONLY (t) = TREE_READONLY (o);
4613           TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4614         }
4615     }
4616   else
4617     TREE_THIS_VOLATILE (t)
4618       = (TREE_CODE_CLASS (code) == tcc_reference
4619          && arg0 && TREE_THIS_VOLATILE (arg0));
4620
4621   return t;
4622 }
4623
4624 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4625    on the pointer PTR.  */
4626
4627 tree
4628 build_simple_mem_ref_loc (location_t loc, tree ptr)
4629 {
4630   HOST_WIDE_INT offset = 0;
4631   tree ptype = TREE_TYPE (ptr);
4632   tree tem;
4633   /* For convenience allow addresses that collapse to a simple base
4634      and offset.  */
4635   if (TREE_CODE (ptr) == ADDR_EXPR
4636       && (handled_component_p (TREE_OPERAND (ptr, 0))
4637           || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4638     {
4639       ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4640       gcc_assert (ptr);
4641       ptr = build_fold_addr_expr (ptr);
4642       gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4643     }
4644   tem = build2 (MEM_REF, TREE_TYPE (ptype),
4645                 ptr, build_int_cst (ptype, offset));
4646   SET_EXPR_LOCATION (tem, loc);
4647   return tem;
4648 }
4649
4650 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T.  */
4651
4652 offset_int
4653 mem_ref_offset (const_tree t)
4654 {
4655   return offset_int::from (TREE_OPERAND (t, 1), SIGNED);
4656 }
4657
4658 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4659    offsetted by OFFSET units.  */
4660
4661 tree
4662 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4663 {
4664   tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4665                           build_fold_addr_expr (base),
4666                           build_int_cst (ptr_type_node, offset));
4667   tree addr = build1 (ADDR_EXPR, type, ref);
4668   recompute_tree_invariant_for_addr_expr (addr);
4669   return addr;
4670 }
4671
4672 /* Similar except don't specify the TREE_TYPE
4673    and leave the TREE_SIDE_EFFECTS as 0.
4674    It is permissible for arguments to be null,
4675    or even garbage if their values do not matter.  */
4676
4677 tree
4678 build_nt (enum tree_code code, ...)
4679 {
4680   tree t;
4681   int length;
4682   int i;
4683   va_list p;
4684
4685   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4686
4687   va_start (p, code);
4688
4689   t = make_node (code);
4690   length = TREE_CODE_LENGTH (code);
4691
4692   for (i = 0; i < length; i++)
4693     TREE_OPERAND (t, i) = va_arg (p, tree);
4694
4695   va_end (p);
4696   return t;
4697 }
4698
4699 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4700    tree vec.  */
4701
4702 tree
4703 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4704 {
4705   tree ret, t;
4706   unsigned int ix;
4707
4708   ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4709   CALL_EXPR_FN (ret) = fn;
4710   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4711   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4712     CALL_EXPR_ARG (ret, ix) = t;
4713   return ret;
4714 }
4715 \f
4716 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4717    We do NOT enter this node in any sort of symbol table.
4718
4719    LOC is the location of the decl.
4720
4721    layout_decl is used to set up the decl's storage layout.
4722    Other slots are initialized to 0 or null pointers.  */
4723
4724 tree
4725 build_decl_stat (location_t loc, enum tree_code code, tree name,
4726                  tree type MEM_STAT_DECL)
4727 {
4728   tree t;
4729
4730   t = make_node_stat (code PASS_MEM_STAT);
4731   DECL_SOURCE_LOCATION (t) = loc;
4732
4733 /*  if (type == error_mark_node)
4734     type = integer_type_node; */
4735 /* That is not done, deliberately, so that having error_mark_node
4736    as the type can suppress useless errors in the use of this variable.  */
4737
4738   DECL_NAME (t) = name;
4739   TREE_TYPE (t) = type;
4740
4741   if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4742     layout_decl (t, 0);
4743
4744   return t;
4745 }
4746
4747 /* Builds and returns function declaration with NAME and TYPE.  */
4748
4749 tree
4750 build_fn_decl (const char *name, tree type)
4751 {
4752   tree id = get_identifier (name);
4753   tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4754
4755   DECL_EXTERNAL (decl) = 1;
4756   TREE_PUBLIC (decl) = 1;
4757   DECL_ARTIFICIAL (decl) = 1;
4758   TREE_NOTHROW (decl) = 1;
4759
4760   return decl;
4761 }
4762
4763 vec<tree, va_gc> *all_translation_units;
4764
4765 /* Builds a new translation-unit decl with name NAME, queues it in the
4766    global list of translation-unit decls and returns it.   */
4767
4768 tree
4769 build_translation_unit_decl (tree name)
4770 {
4771   tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4772                         name, NULL_TREE);
4773   TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4774   vec_safe_push (all_translation_units, tu);
4775   return tu;
4776 }
4777
4778 \f
4779 /* BLOCK nodes are used to represent the structure of binding contours
4780    and declarations, once those contours have been exited and their contents
4781    compiled.  This information is used for outputting debugging info.  */
4782
4783 tree
4784 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4785 {
4786   tree block = make_node (BLOCK);
4787
4788   BLOCK_VARS (block) = vars;
4789   BLOCK_SUBBLOCKS (block) = subblocks;
4790   BLOCK_SUPERCONTEXT (block) = supercontext;
4791   BLOCK_CHAIN (block) = chain;
4792   return block;
4793 }
4794
4795 \f
4796 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4797
4798    LOC is the location to use in tree T.  */
4799
4800 void
4801 protected_set_expr_location (tree t, location_t loc)
4802 {
4803   if (CAN_HAVE_LOCATION_P (t))
4804     SET_EXPR_LOCATION (t, loc);
4805 }
4806 \f
4807 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4808    is ATTRIBUTE.  */
4809
4810 tree
4811 build_decl_attribute_variant (tree ddecl, tree attribute)
4812 {
4813   DECL_ATTRIBUTES (ddecl) = attribute;
4814   return ddecl;
4815 }
4816
4817 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4818    is ATTRIBUTE and its qualifiers are QUALS.
4819
4820    Record such modified types already made so we don't make duplicates.  */
4821
4822 tree
4823 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4824 {
4825   if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4826     {
4827       tree ntype;
4828
4829       /* Building a distinct copy of a tagged type is inappropriate; it
4830          causes breakage in code that expects there to be a one-to-one
4831          relationship between a struct and its fields.
4832          build_duplicate_type is another solution (as used in
4833          handle_transparent_union_attribute), but that doesn't play well
4834          with the stronger C++ type identity model.  */
4835       if (TREE_CODE (ttype) == RECORD_TYPE
4836           || TREE_CODE (ttype) == UNION_TYPE
4837           || TREE_CODE (ttype) == QUAL_UNION_TYPE
4838           || TREE_CODE (ttype) == ENUMERAL_TYPE)
4839         {
4840           warning (OPT_Wattributes,
4841                    "ignoring attributes applied to %qT after definition",
4842                    TYPE_MAIN_VARIANT (ttype));
4843           return build_qualified_type (ttype, quals);
4844         }
4845
4846       ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4847       ntype = build_distinct_type_copy (ttype);
4848
4849       TYPE_ATTRIBUTES (ntype) = attribute;
4850
4851       hashval_t hash = type_hash_canon_hash (ntype);
4852       ntype = type_hash_canon (hash, ntype);
4853
4854       /* If the target-dependent attributes make NTYPE different from
4855          its canonical type, we will need to use structural equality
4856          checks for this type. */
4857       if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4858           || !comp_type_attributes (ntype, ttype))
4859         SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4860       else if (TYPE_CANONICAL (ntype) == ntype)
4861         TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4862
4863       ttype = build_qualified_type (ntype, quals);
4864     }
4865   else if (TYPE_QUALS (ttype) != quals)
4866     ttype = build_qualified_type (ttype, quals);
4867
4868   return ttype;
4869 }
4870
4871 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4872    the same.  */
4873
4874 static bool
4875 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4876 {
4877   tree cl1, cl2;
4878   for (cl1 = clauses1, cl2 = clauses2;
4879        cl1 && cl2;
4880        cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4881     {
4882       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4883         return false;
4884       if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4885         {
4886           if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4887                                 OMP_CLAUSE_DECL (cl2)) != 1)
4888             return false;
4889         }
4890       switch (OMP_CLAUSE_CODE (cl1))
4891         {
4892         case OMP_CLAUSE_ALIGNED:
4893           if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4894                                 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4895             return false;
4896           break;
4897         case OMP_CLAUSE_LINEAR:
4898           if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4899                                 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4900             return false;
4901           break;
4902         case OMP_CLAUSE_SIMDLEN:
4903           if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4904                                 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4905             return false;
4906         default:
4907           break;
4908         }
4909     }
4910   return true;
4911 }
4912
4913 /* Compare two constructor-element-type constants.  Return 1 if the lists
4914    are known to be equal; otherwise return 0.  */
4915
4916 static bool
4917 simple_cst_list_equal (const_tree l1, const_tree l2)
4918 {
4919   while (l1 != NULL_TREE && l2 != NULL_TREE)
4920     {
4921       if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4922         return false;
4923
4924       l1 = TREE_CHAIN (l1);
4925       l2 = TREE_CHAIN (l2);
4926     }
4927
4928   return l1 == l2;
4929 }
4930
4931 /* Compare two identifier nodes representing attributes.  Either one may
4932    be in wrapped __ATTR__ form.  Return true if they are the same, false
4933    otherwise.  */
4934
4935 static bool
4936 cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
4937 {
4938   /* Make sure we're dealing with IDENTIFIER_NODEs.  */
4939   gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
4940                        && TREE_CODE (attr2) == IDENTIFIER_NODE);
4941
4942   /* Identifiers can be compared directly for equality.  */
4943   if (attr1 == attr2)
4944     return true;
4945
4946   /* If they are not equal, they may still be one in the form
4947      'text' while the other one is in the form '__text__'.  TODO:
4948      If we were storing attributes in normalized 'text' form, then
4949      this could all go away and we could take full advantage of
4950      the fact that we're comparing identifiers. :-)  */
4951   const size_t attr1_len = IDENTIFIER_LENGTH (attr1);
4952   const size_t attr2_len = IDENTIFIER_LENGTH (attr2);
4953
4954   if (attr2_len == attr1_len + 4)
4955     {
4956       const char *p = IDENTIFIER_POINTER (attr2);
4957       const char *q = IDENTIFIER_POINTER (attr1);
4958       if (p[0] == '_' && p[1] == '_'
4959           && p[attr2_len - 2] == '_' && p[attr2_len - 1] == '_'
4960           && strncmp (q, p + 2, attr1_len) == 0)
4961         return true;;
4962     }
4963   else if (attr2_len + 4 == attr1_len)
4964     {
4965       const char *p = IDENTIFIER_POINTER (attr2);
4966       const char *q = IDENTIFIER_POINTER (attr1);
4967       if (q[0] == '_' && q[1] == '_'
4968           && q[attr1_len - 2] == '_' && q[attr1_len - 1] == '_'
4969           && strncmp (q + 2, p, attr2_len) == 0)
4970         return true;
4971     }
4972
4973   return false;
4974 }
4975
4976 /* Compare two attributes for their value identity.  Return true if the
4977    attribute values are known to be equal; otherwise return false.  */
4978
4979 bool
4980 attribute_value_equal (const_tree attr1, const_tree attr2)
4981 {
4982   if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
4983     return true;
4984
4985   if (TREE_VALUE (attr1) != NULL_TREE
4986       && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
4987       && TREE_VALUE (attr2) != NULL_TREE
4988       && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
4989     {
4990       /* Handle attribute format.  */
4991       if (is_attribute_p ("format", get_attribute_name (attr1)))
4992         {
4993           attr1 = TREE_VALUE (attr1);
4994           attr2 = TREE_VALUE (attr2);
4995           /* Compare the archetypes (printf/scanf/strftime/...).  */
4996           if (!cmp_attrib_identifiers (TREE_VALUE (attr1),
4997                                        TREE_VALUE (attr2)))
4998             return false;
4999           /* Archetypes are the same.  Compare the rest.  */
5000           return (simple_cst_list_equal (TREE_CHAIN (attr1),
5001                                          TREE_CHAIN (attr2)) == 1);
5002         }
5003       return (simple_cst_list_equal (TREE_VALUE (attr1),
5004                                      TREE_VALUE (attr2)) == 1);
5005     }
5006
5007   if ((flag_openmp || flag_openmp_simd)
5008       && TREE_VALUE (attr1) && TREE_VALUE (attr2)
5009       && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
5010       && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
5011     return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
5012                                            TREE_VALUE (attr2));
5013
5014   return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
5015 }
5016
5017 /* Return 0 if the attributes for two types are incompatible, 1 if they
5018    are compatible, and 2 if they are nearly compatible (which causes a
5019    warning to be generated).  */
5020 int
5021 comp_type_attributes (const_tree type1, const_tree type2)
5022 {
5023   const_tree a1 = TYPE_ATTRIBUTES (type1);
5024   const_tree a2 = TYPE_ATTRIBUTES (type2);
5025   const_tree a;
5026
5027   if (a1 == a2)
5028     return 1;
5029   for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
5030     {
5031       const struct attribute_spec *as;
5032       const_tree attr;
5033
5034       as = lookup_attribute_spec (get_attribute_name (a));
5035       if (!as || as->affects_type_identity == false)
5036         continue;
5037
5038       attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
5039       if (!attr || !attribute_value_equal (a, attr))
5040         break;
5041     }
5042   if (!a)
5043     {
5044       for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
5045         {
5046           const struct attribute_spec *as;
5047
5048           as = lookup_attribute_spec (get_attribute_name (a));
5049           if (!as || as->affects_type_identity == false)
5050             continue;
5051
5052           if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
5053             break;
5054           /* We don't need to compare trees again, as we did this
5055              already in first loop.  */
5056         }
5057       /* All types - affecting identity - are equal, so
5058          there is no need to call target hook for comparison.  */
5059       if (!a)
5060         return 1;
5061     }
5062   if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
5063     return 0;
5064   /* As some type combinations - like default calling-convention - might
5065      be compatible, we have to call the target hook to get the final result.  */
5066   return targetm.comp_type_attributes (type1, type2);
5067 }
5068
5069 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
5070    is ATTRIBUTE.
5071
5072    Record such modified types already made so we don't make duplicates.  */
5073
5074 tree
5075 build_type_attribute_variant (tree ttype, tree attribute)
5076 {
5077   return build_type_attribute_qual_variant (ttype, attribute,
5078                                             TYPE_QUALS (ttype));
5079 }
5080
5081
5082 /* Reset the expression *EXPR_P, a size or position.
5083
5084    ??? We could reset all non-constant sizes or positions.  But it's cheap
5085    enough to not do so and refrain from adding workarounds to dwarf2out.c.
5086
5087    We need to reset self-referential sizes or positions because they cannot
5088    be gimplified and thus can contain a CALL_EXPR after the gimplification
5089    is finished, which will run afoul of LTO streaming.  And they need to be
5090    reset to something essentially dummy but not constant, so as to preserve
5091    the properties of the object they are attached to.  */
5092
5093 static inline void
5094 free_lang_data_in_one_sizepos (tree *expr_p)
5095 {
5096   tree expr = *expr_p;
5097   if (CONTAINS_PLACEHOLDER_P (expr))
5098     *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
5099 }
5100
5101
5102 /* Reset all the fields in a binfo node BINFO.  We only keep
5103    BINFO_VTABLE, which is used by gimple_fold_obj_type_ref.  */
5104
5105 static void
5106 free_lang_data_in_binfo (tree binfo)
5107 {
5108   unsigned i;
5109   tree t;
5110
5111   gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
5112
5113   BINFO_VIRTUALS (binfo) = NULL_TREE;
5114   BINFO_BASE_ACCESSES (binfo) = NULL;
5115   BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
5116   BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
5117
5118   FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
5119     free_lang_data_in_binfo (t);
5120 }
5121
5122
5123 /* Reset all language specific information still present in TYPE.  */
5124
5125 static void
5126 free_lang_data_in_type (tree type)
5127 {
5128   gcc_assert (TYPE_P (type));
5129
5130   /* Give the FE a chance to remove its own data first.  */
5131   lang_hooks.free_lang_data (type);
5132
5133   TREE_LANG_FLAG_0 (type) = 0;
5134   TREE_LANG_FLAG_1 (type) = 0;
5135   TREE_LANG_FLAG_2 (type) = 0;
5136   TREE_LANG_FLAG_3 (type) = 0;
5137   TREE_LANG_FLAG_4 (type) = 0;
5138   TREE_LANG_FLAG_5 (type) = 0;
5139   TREE_LANG_FLAG_6 (type) = 0;
5140
5141   if (TREE_CODE (type) == FUNCTION_TYPE)
5142     {
5143       /* Remove the const and volatile qualifiers from arguments.  The
5144          C++ front end removes them, but the C front end does not,
5145          leading to false ODR violation errors when merging two
5146          instances of the same function signature compiled by
5147          different front ends.  */
5148       tree p;
5149
5150       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5151         {
5152           tree arg_type = TREE_VALUE (p);
5153
5154           if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5155             {
5156               int quals = TYPE_QUALS (arg_type)
5157                           & ~TYPE_QUAL_CONST
5158                           & ~TYPE_QUAL_VOLATILE;
5159               TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5160               free_lang_data_in_type (TREE_VALUE (p));
5161             }
5162           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5163           TREE_PURPOSE (p) = NULL;
5164         }
5165       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5166       TYPE_MINVAL (type) = NULL;
5167     }
5168   if (TREE_CODE (type) == METHOD_TYPE)
5169     {
5170       tree p;
5171
5172       for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5173         {
5174           /* C++ FE uses TREE_PURPOSE to store initial values.  */
5175           TREE_PURPOSE (p) = NULL;
5176         }
5177       /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
5178       TYPE_MINVAL (type) = NULL;
5179     }
5180
5181   /* Remove members that are not actually FIELD_DECLs from the field
5182      list of an aggregate.  These occur in C++.  */
5183   if (RECORD_OR_UNION_TYPE_P (type))
5184     {
5185       tree prev, member;
5186
5187       /* Note that TYPE_FIELDS can be shared across distinct
5188          TREE_TYPEs.  Therefore, if the first field of TYPE_FIELDS is
5189          to be removed, we cannot set its TREE_CHAIN to NULL.
5190          Otherwise, we would not be able to find all the other fields
5191          in the other instances of this TREE_TYPE.
5192
5193          This was causing an ICE in testsuite/g++.dg/lto/20080915.C.  */
5194       prev = NULL_TREE;
5195       member = TYPE_FIELDS (type);
5196       while (member)
5197         {
5198           if (TREE_CODE (member) == FIELD_DECL
5199               || (TREE_CODE (member) == TYPE_DECL
5200                   && !DECL_IGNORED_P (member)
5201                   && debug_info_level > DINFO_LEVEL_TERSE
5202                   && !is_redundant_typedef (member)))
5203             {
5204               if (prev)
5205                 TREE_CHAIN (prev) = member;
5206               else
5207                 TYPE_FIELDS (type) = member;
5208               prev = member;
5209             }
5210
5211           member = TREE_CHAIN (member);
5212         }
5213
5214       if (prev)
5215         TREE_CHAIN (prev) = NULL_TREE;
5216       else
5217         TYPE_FIELDS (type) = NULL_TREE;
5218
5219       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
5220          and danagle the pointer from time to time.  */
5221       if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
5222         TYPE_VFIELD (type) = NULL_TREE;
5223
5224       /* Remove TYPE_METHODS list.  While it would be nice to keep it
5225          to enable ODR warnings about different method lists, doing so
5226          seems to impractically increase size of LTO data streamed.
5227          Keep the information if TYPE_METHODS was non-NULL. This is used
5228          by function.c and pretty printers.  */
5229       if (TYPE_METHODS (type))
5230         TYPE_METHODS (type) = error_mark_node;
5231       if (TYPE_BINFO (type))
5232         {
5233           free_lang_data_in_binfo (TYPE_BINFO (type));
5234           /* We need to preserve link to bases and virtual table for all
5235              polymorphic types to make devirtualization machinery working.
5236              Debug output cares only about bases, but output also
5237              virtual table pointers so merging of -fdevirtualize and
5238              -fno-devirtualize units is easier.  */
5239           if ((!BINFO_VTABLE (TYPE_BINFO (type))
5240                || !flag_devirtualize)
5241               && ((!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
5242                    && !BINFO_VTABLE (TYPE_BINFO (type)))
5243                   || debug_info_level != DINFO_LEVEL_NONE))
5244             TYPE_BINFO (type) = NULL;
5245         }
5246     }
5247   else
5248     {
5249       /* For non-aggregate types, clear out the language slot (which
5250          overloads TYPE_BINFO).  */
5251       TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5252
5253       if (INTEGRAL_TYPE_P (type)
5254           || SCALAR_FLOAT_TYPE_P (type)
5255           || FIXED_POINT_TYPE_P (type))
5256         {
5257           free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5258           free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5259         }
5260     }
5261
5262   free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5263   free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5264
5265   if (TYPE_CONTEXT (type)
5266       && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5267     {
5268       tree ctx = TYPE_CONTEXT (type);
5269       do
5270         {
5271           ctx = BLOCK_SUPERCONTEXT (ctx);
5272         }
5273       while (ctx && TREE_CODE (ctx) == BLOCK);
5274       TYPE_CONTEXT (type) = ctx;
5275     }
5276 }
5277
5278
5279 /* Return true if DECL may need an assembler name to be set.  */
5280
5281 static inline bool
5282 need_assembler_name_p (tree decl)
5283 {
5284   /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5285      Rule merging.  This makes type_odr_p to return true on those types during
5286      LTO and by comparing the mangled name, we can say what types are intended
5287      to be equivalent across compilation unit.
5288
5289      We do not store names of type_in_anonymous_namespace_p.
5290
5291      Record, union and enumeration type have linkage that allows use
5292      to check type_in_anonymous_namespace_p. We do not mangle compound types
5293      that always can be compared structurally.
5294
5295      Similarly for builtin types, we compare properties of their main variant.
5296      A special case are integer types where mangling do make differences
5297      between char/signed char/unsigned char etc.  Storing name for these makes
5298      e.g.  -fno-signed-char/-fsigned-char mismatches to be handled well.
5299      See cp/mangle.c:write_builtin_type for details.  */
5300
5301   if (flag_lto_odr_type_mering
5302       && TREE_CODE (decl) == TYPE_DECL
5303       && DECL_NAME (decl)
5304       && decl == TYPE_NAME (TREE_TYPE (decl))
5305       && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
5306       && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5307       && (type_with_linkage_p (TREE_TYPE (decl))
5308           || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5309       && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5310     return !DECL_ASSEMBLER_NAME_SET_P (decl);
5311   /* Only FUNCTION_DECLs and VAR_DECLs are considered.  */
5312   if (!VAR_OR_FUNCTION_DECL_P (decl))
5313     return false;
5314
5315   /* If DECL already has its assembler name set, it does not need a
5316      new one.  */
5317   if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5318       || DECL_ASSEMBLER_NAME_SET_P (decl))
5319     return false;
5320
5321   /* Abstract decls do not need an assembler name.  */
5322   if (DECL_ABSTRACT_P (decl))
5323     return false;
5324
5325   /* For VAR_DECLs, only static, public and external symbols need an
5326      assembler name.  */
5327   if (VAR_P (decl)
5328       && !TREE_STATIC (decl)
5329       && !TREE_PUBLIC (decl)
5330       && !DECL_EXTERNAL (decl))
5331     return false;
5332
5333   if (TREE_CODE (decl) == FUNCTION_DECL)
5334     {
5335       /* Do not set assembler name on builtins.  Allow RTL expansion to
5336          decide whether to expand inline or via a regular call.  */
5337       if (DECL_BUILT_IN (decl)
5338           && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5339         return false;
5340
5341       /* Functions represented in the callgraph need an assembler name.  */
5342       if (cgraph_node::get (decl) != NULL)
5343         return true;
5344
5345       /* Unused and not public functions don't need an assembler name.  */
5346       if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5347         return false;
5348     }
5349
5350   return true;
5351 }
5352
5353
5354 /* Reset all language specific information still present in symbol
5355    DECL.  */
5356
5357 static void
5358 free_lang_data_in_decl (tree decl)
5359 {
5360   gcc_assert (DECL_P (decl));
5361
5362   /* Give the FE a chance to remove its own data first.  */
5363   lang_hooks.free_lang_data (decl);
5364
5365   TREE_LANG_FLAG_0 (decl) = 0;
5366   TREE_LANG_FLAG_1 (decl) = 0;
5367   TREE_LANG_FLAG_2 (decl) = 0;
5368   TREE_LANG_FLAG_3 (decl) = 0;
5369   TREE_LANG_FLAG_4 (decl) = 0;
5370   TREE_LANG_FLAG_5 (decl) = 0;
5371   TREE_LANG_FLAG_6 (decl) = 0;
5372
5373   free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5374   free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5375   if (TREE_CODE (decl) == FIELD_DECL)
5376     {
5377       free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5378       if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5379         DECL_QUALIFIER (decl) = NULL_TREE;
5380     }
5381
5382  if (TREE_CODE (decl) == FUNCTION_DECL)
5383     {
5384       struct cgraph_node *node;
5385       if (!(node = cgraph_node::get (decl))
5386           || (!node->definition && !node->clones))
5387         {
5388           if (node)
5389             node->release_body ();
5390           else
5391             {
5392               release_function_body (decl);
5393               DECL_ARGUMENTS (decl) = NULL;
5394               DECL_RESULT (decl) = NULL;
5395               DECL_INITIAL (decl) = error_mark_node;
5396             }
5397         }
5398       if (gimple_has_body_p (decl) || (node && node->thunk.thunk_p))
5399         {
5400           tree t;
5401
5402           /* If DECL has a gimple body, then the context for its
5403              arguments must be DECL.  Otherwise, it doesn't really
5404              matter, as we will not be emitting any code for DECL.  In
5405              general, there may be other instances of DECL created by
5406              the front end and since PARM_DECLs are generally shared,
5407              their DECL_CONTEXT changes as the replicas of DECL are
5408              created.  The only time where DECL_CONTEXT is important
5409              is for the FUNCTION_DECLs that have a gimple body (since
5410              the PARM_DECL will be used in the function's body).  */
5411           for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5412             DECL_CONTEXT (t) = decl;
5413           if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5414             DECL_FUNCTION_SPECIFIC_TARGET (decl)
5415               = target_option_default_node;
5416           if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5417             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5418               = optimization_default_node;
5419         }
5420
5421       /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5422          At this point, it is not needed anymore.  */
5423       DECL_SAVED_TREE (decl) = NULL_TREE;
5424
5425       /* Clear the abstract origin if it refers to a method.  Otherwise
5426          dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5427          origin will not be output correctly.  */
5428       if (DECL_ABSTRACT_ORIGIN (decl)
5429           && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5430           && RECORD_OR_UNION_TYPE_P
5431                (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5432         DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5433
5434       /* Sometimes the C++ frontend doesn't manage to transform a temporary
5435          DECL_VINDEX referring to itself into a vtable slot number as it
5436          should.  Happens with functions that are copied and then forgotten
5437          about.  Just clear it, it won't matter anymore.  */
5438       if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5439         DECL_VINDEX (decl) = NULL_TREE;
5440     }
5441   else if (VAR_P (decl))
5442     {
5443       if ((DECL_EXTERNAL (decl)
5444            && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5445           || (decl_function_context (decl) && !TREE_STATIC (decl)))
5446         DECL_INITIAL (decl) = NULL_TREE;
5447     }
5448   else if (TREE_CODE (decl) == TYPE_DECL)
5449     {
5450       DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5451       DECL_VISIBILITY_SPECIFIED (decl) = 0;
5452       DECL_INITIAL (decl) = NULL_TREE;
5453     }
5454   else if (TREE_CODE (decl) == FIELD_DECL)
5455     DECL_INITIAL (decl) = NULL_TREE;
5456   else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5457            && DECL_INITIAL (decl)
5458            && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5459     {
5460       /* Strip builtins from the translation-unit BLOCK.  We still have targets
5461          without builtin_decl_explicit support and also builtins are shared
5462          nodes and thus we can't use TREE_CHAIN in multiple lists.  */
5463       tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5464       while (*nextp)
5465         {
5466           tree var = *nextp;
5467           if (TREE_CODE (var) == FUNCTION_DECL
5468               && DECL_BUILT_IN (var))
5469             *nextp = TREE_CHAIN (var);
5470           else
5471             nextp = &TREE_CHAIN (var);
5472         }
5473     }
5474 }
5475
5476
5477 /* Data used when collecting DECLs and TYPEs for language data removal.  */
5478
5479 struct free_lang_data_d
5480 {
5481   free_lang_data_d () : decls (100), types (100) {}
5482
5483   /* Worklist to avoid excessive recursion.  */
5484   auto_vec<tree> worklist;
5485
5486   /* Set of traversed objects.  Used to avoid duplicate visits.  */
5487   hash_set<tree> pset;
5488
5489   /* Array of symbols to process with free_lang_data_in_decl.  */
5490   auto_vec<tree> decls;
5491
5492   /* Array of types to process with free_lang_data_in_type.  */
5493   auto_vec<tree> types;
5494 };
5495
5496
5497 /* Save all language fields needed to generate proper debug information
5498    for DECL.  This saves most fields cleared out by free_lang_data_in_decl.  */
5499
5500 static void
5501 save_debug_info_for_decl (tree t)
5502 {
5503   /*struct saved_debug_info_d *sdi;*/
5504
5505   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5506
5507   /* FIXME.  Partial implementation for saving debug info removed.  */
5508 }
5509
5510
5511 /* Save all language fields needed to generate proper debug information
5512    for TYPE.  This saves most fields cleared out by free_lang_data_in_type.  */
5513
5514 static void
5515 save_debug_info_for_type (tree t)
5516 {
5517   /*struct saved_debug_info_d *sdi;*/
5518
5519   gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5520
5521   /* FIXME.  Partial implementation for saving debug info removed.  */
5522 }
5523
5524
5525 /* Add type or decl T to one of the list of tree nodes that need their
5526    language data removed.  The lists are held inside FLD.  */
5527
5528 static void
5529 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5530 {
5531   if (DECL_P (t))
5532     {
5533       fld->decls.safe_push (t);
5534       if (debug_info_level > DINFO_LEVEL_TERSE)
5535         save_debug_info_for_decl (t);
5536     }
5537   else if (TYPE_P (t))
5538     {
5539       fld->types.safe_push (t);
5540       if (debug_info_level > DINFO_LEVEL_TERSE)
5541         save_debug_info_for_type (t);
5542     }
5543   else
5544     gcc_unreachable ();
5545 }
5546
5547 /* Push tree node T into FLD->WORKLIST.  */
5548
5549 static inline void
5550 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5551 {
5552   if (t && !is_lang_specific (t) && !fld->pset.contains (t))
5553     fld->worklist.safe_push ((t));
5554 }
5555
5556
5557 /* Operand callback helper for free_lang_data_in_node.  *TP is the
5558    subtree operand being considered.  */
5559
5560 static tree
5561 find_decls_types_r (tree *tp, int *ws, void *data)
5562 {
5563   tree t = *tp;
5564   struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5565
5566   if (TREE_CODE (t) == TREE_LIST)
5567     return NULL_TREE;
5568
5569   /* Language specific nodes will be removed, so there is no need
5570      to gather anything under them.  */
5571   if (is_lang_specific (t))
5572     {
5573       *ws = 0;
5574       return NULL_TREE;
5575     }
5576
5577   if (DECL_P (t))
5578     {
5579       /* Note that walk_tree does not traverse every possible field in
5580          decls, so we have to do our own traversals here.  */
5581       add_tree_to_fld_list (t, fld);
5582
5583       fld_worklist_push (DECL_NAME (t), fld);
5584       fld_worklist_push (DECL_CONTEXT (t), fld);
5585       fld_worklist_push (DECL_SIZE (t), fld);
5586       fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5587
5588       /* We are going to remove everything under DECL_INITIAL for
5589          TYPE_DECLs.  No point walking them.  */
5590       if (TREE_CODE (t) != TYPE_DECL)
5591         fld_worklist_push (DECL_INITIAL (t), fld);
5592
5593       fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5594       fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5595
5596       if (TREE_CODE (t) == FUNCTION_DECL)
5597         {
5598           fld_worklist_push (DECL_ARGUMENTS (t), fld);
5599           fld_worklist_push (DECL_RESULT (t), fld);
5600         }
5601       else if (TREE_CODE (t) == TYPE_DECL)
5602         {
5603           fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5604         }
5605       else if (TREE_CODE (t) == FIELD_DECL)
5606         {
5607           fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5608           fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5609           fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5610           fld_worklist_push (DECL_FCONTEXT (t), fld);
5611         }
5612
5613       if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
5614           && DECL_HAS_VALUE_EXPR_P (t))
5615         fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5616
5617       if (TREE_CODE (t) != FIELD_DECL
5618           && TREE_CODE (t) != TYPE_DECL)
5619         fld_worklist_push (TREE_CHAIN (t), fld);
5620       *ws = 0;
5621     }
5622   else if (TYPE_P (t))
5623     {
5624       /* Note that walk_tree does not traverse every possible field in
5625          types, so we have to do our own traversals here.  */
5626       add_tree_to_fld_list (t, fld);
5627
5628       if (!RECORD_OR_UNION_TYPE_P (t))
5629         fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5630       fld_worklist_push (TYPE_SIZE (t), fld);
5631       fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5632       fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5633       fld_worklist_push (TYPE_POINTER_TO (t), fld);
5634       fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5635       fld_worklist_push (TYPE_NAME (t), fld);
5636       /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO.  We do not stream
5637          them and thus do not and want not to reach unused pointer types
5638          this way.  */
5639       if (!POINTER_TYPE_P (t))
5640         fld_worklist_push (TYPE_MINVAL (t), fld);
5641       if (!RECORD_OR_UNION_TYPE_P (t))
5642         fld_worklist_push (TYPE_MAXVAL (t), fld);
5643       fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5644       /* Do not walk TYPE_NEXT_VARIANT.  We do not stream it and thus
5645          do not and want not to reach unused variants this way.  */
5646       if (TYPE_CONTEXT (t))
5647         {
5648           tree ctx = TYPE_CONTEXT (t);
5649           /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5650              So push that instead.  */
5651           while (ctx && TREE_CODE (ctx) == BLOCK)
5652             ctx = BLOCK_SUPERCONTEXT (ctx);
5653           fld_worklist_push (ctx, fld);
5654         }
5655       /* Do not walk TYPE_CANONICAL.  We do not stream it and thus do not
5656          and want not to reach unused types this way.  */
5657
5658       if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5659         {
5660           unsigned i;
5661           tree tem;
5662           FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5663             fld_worklist_push (TREE_TYPE (tem), fld);
5664           tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5665           if (tem
5666               /* The Java FE overloads BINFO_VIRTUALS for its own purpose.  */
5667               && TREE_CODE (tem) == TREE_LIST)
5668             do
5669               {
5670                 fld_worklist_push (TREE_VALUE (tem), fld);
5671                 tem = TREE_CHAIN (tem);
5672               }
5673             while (tem);
5674         }
5675       if (RECORD_OR_UNION_TYPE_P (t))
5676         {
5677           tree tem;
5678           /* Push all TYPE_FIELDS - there can be interleaving interesting
5679              and non-interesting things.  */
5680           tem = TYPE_FIELDS (t);
5681           while (tem)
5682             {
5683               if (TREE_CODE (tem) == FIELD_DECL
5684                   || (TREE_CODE (tem) == TYPE_DECL
5685                       && !DECL_IGNORED_P (tem)
5686                       && debug_info_level > DINFO_LEVEL_TERSE
5687                       && !is_redundant_typedef (tem)))
5688                 fld_worklist_push (tem, fld);
5689               tem = TREE_CHAIN (tem);
5690             }
5691         }
5692
5693       fld_worklist_push (TYPE_STUB_DECL (t), fld);
5694       *ws = 0;
5695     }
5696   else if (TREE_CODE (t) == BLOCK)
5697     {
5698       tree tem;
5699       for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5700         fld_worklist_push (tem, fld);
5701       for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5702         fld_worklist_push (tem, fld);
5703       fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5704     }
5705
5706   if (TREE_CODE (t) != IDENTIFIER_NODE
5707       && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5708     fld_worklist_push (TREE_TYPE (t), fld);
5709
5710   return NULL_TREE;
5711 }
5712
5713
5714 /* Find decls and types in T.  */
5715
5716 static void
5717 find_decls_types (tree t, struct free_lang_data_d *fld)
5718 {
5719   while (1)
5720     {
5721       if (!fld->pset.contains (t))
5722         walk_tree (&t, find_decls_types_r, fld, &fld->pset);
5723       if (fld->worklist.is_empty ())
5724         break;
5725       t = fld->worklist.pop ();
5726     }
5727 }
5728
5729 /* Translate all the types in LIST with the corresponding runtime
5730    types.  */
5731
5732 static tree
5733 get_eh_types_for_runtime (tree list)
5734 {
5735   tree head, prev;
5736
5737   if (list == NULL_TREE)
5738     return NULL_TREE;
5739
5740   head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5741   prev = head;
5742   list = TREE_CHAIN (list);
5743   while (list)
5744     {
5745       tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5746       TREE_CHAIN (prev) = n;
5747       prev = TREE_CHAIN (prev);
5748       list = TREE_CHAIN (list);
5749     }
5750
5751   return head;
5752 }
5753
5754
5755 /* Find decls and types referenced in EH region R and store them in
5756    FLD->DECLS and FLD->TYPES.  */
5757
5758 static void
5759 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5760 {
5761   switch (r->type)
5762     {
5763     case ERT_CLEANUP:
5764       break;
5765
5766     case ERT_TRY:
5767       {
5768         eh_catch c;
5769
5770         /* The types referenced in each catch must first be changed to the
5771            EH types used at runtime.  This removes references to FE types
5772            in the region.  */
5773         for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5774           {
5775             c->type_list = get_eh_types_for_runtime (c->type_list);
5776             walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset);
5777           }
5778       }
5779       break;
5780
5781     case ERT_ALLOWED_EXCEPTIONS:
5782       r->u.allowed.type_list
5783         = get_eh_types_for_runtime (r->u.allowed.type_list);
5784       walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset);
5785       break;
5786
5787     case ERT_MUST_NOT_THROW:
5788       walk_tree (&r->u.must_not_throw.failure_decl,
5789                  find_decls_types_r, fld, &fld->pset);
5790       break;
5791     }
5792 }
5793
5794
5795 /* Find decls and types referenced in cgraph node N and store them in
5796    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5797    look for *every* kind of DECL and TYPE node reachable from N,
5798    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5799    NAMESPACE_DECLs, etc).  */
5800
5801 static void
5802 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5803 {
5804   basic_block bb;
5805   struct function *fn;
5806   unsigned ix;
5807   tree t;
5808
5809   find_decls_types (n->decl, fld);
5810
5811   if (!gimple_has_body_p (n->decl))
5812     return;
5813
5814   gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5815
5816   fn = DECL_STRUCT_FUNCTION (n->decl);
5817
5818   /* Traverse locals. */
5819   FOR_EACH_LOCAL_DECL (fn, ix, t)
5820     find_decls_types (t, fld);
5821
5822   /* Traverse EH regions in FN.  */
5823   {
5824     eh_region r;
5825     FOR_ALL_EH_REGION_FN (r, fn)
5826       find_decls_types_in_eh_region (r, fld);
5827   }
5828
5829   /* Traverse every statement in FN.  */
5830   FOR_EACH_BB_FN (bb, fn)
5831     {
5832       gphi_iterator psi;
5833       gimple_stmt_iterator si;
5834       unsigned i;
5835
5836       for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5837         {
5838           gphi *phi = psi.phi ();
5839
5840           for (i = 0; i < gimple_phi_num_args (phi); i++)
5841             {
5842               tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5843               find_decls_types (*arg_p, fld);
5844             }
5845         }
5846
5847       for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5848         {
5849           gimple *stmt = gsi_stmt (si);
5850
5851           if (is_gimple_call (stmt))
5852             find_decls_types (gimple_call_fntype (stmt), fld);
5853
5854           for (i = 0; i < gimple_num_ops (stmt); i++)
5855             {
5856               tree arg = gimple_op (stmt, i);
5857               find_decls_types (arg, fld);
5858             }
5859         }
5860     }
5861 }
5862
5863
5864 /* Find decls and types referenced in varpool node N and store them in
5865    FLD->DECLS and FLD->TYPES.  Unlike pass_referenced_vars, this will
5866    look for *every* kind of DECL and TYPE node reachable from N,
5867    including those embedded inside types and decls (i.e,, TYPE_DECLs,
5868    NAMESPACE_DECLs, etc).  */
5869
5870 static void
5871 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5872 {
5873   find_decls_types (v->decl, fld);
5874 }
5875
5876 /* If T needs an assembler name, have one created for it.  */
5877
5878 void
5879 assign_assembler_name_if_needed (tree t)
5880 {
5881   if (need_assembler_name_p (t))
5882     {
5883       /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5884          diagnostics that use input_location to show locus
5885          information.  The problem here is that, at this point,
5886          input_location is generally anchored to the end of the file
5887          (since the parser is long gone), so we don't have a good
5888          position to pin it to.
5889
5890          To alleviate this problem, this uses the location of T's
5891          declaration.  Examples of this are
5892          testsuite/g++.dg/template/cond2.C and
5893          testsuite/g++.dg/template/pr35240.C.  */
5894       location_t saved_location = input_location;
5895       input_location = DECL_SOURCE_LOCATION (t);
5896
5897       decl_assembler_name (t);
5898
5899       input_location = saved_location;
5900     }
5901 }
5902
5903
5904 /* Free language specific information for every operand and expression
5905    in every node of the call graph.  This process operates in three stages:
5906
5907    1- Every callgraph node and varpool node is traversed looking for
5908       decls and types embedded in them.  This is a more exhaustive
5909       search than that done by find_referenced_vars, because it will
5910       also collect individual fields, decls embedded in types, etc.
5911
5912    2- All the decls found are sent to free_lang_data_in_decl.
5913
5914    3- All the types found are sent to free_lang_data_in_type.
5915
5916    The ordering between decls and types is important because
5917    free_lang_data_in_decl sets assembler names, which includes
5918    mangling.  So types cannot be freed up until assembler names have
5919    been set up.  */
5920
5921 static void
5922 free_lang_data_in_cgraph (void)
5923 {
5924   struct cgraph_node *n;
5925   varpool_node *v;
5926   struct free_lang_data_d fld;
5927   tree t;
5928   unsigned i;
5929   alias_pair *p;
5930
5931   /* Find decls and types in the body of every function in the callgraph.  */
5932   FOR_EACH_FUNCTION (n)
5933     find_decls_types_in_node (n, &fld);
5934
5935   FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5936     find_decls_types (p->decl, &fld);
5937
5938   /* Find decls and types in every varpool symbol.  */
5939   FOR_EACH_VARIABLE (v)
5940     find_decls_types_in_var (v, &fld);
5941
5942   /* Set the assembler name on every decl found.  We need to do this
5943      now because free_lang_data_in_decl will invalidate data needed
5944      for mangling.  This breaks mangling on interdependent decls.  */
5945   FOR_EACH_VEC_ELT (fld.decls, i, t)
5946     assign_assembler_name_if_needed (t);
5947
5948   /* Traverse every decl found freeing its language data.  */
5949   FOR_EACH_VEC_ELT (fld.decls, i, t)
5950     free_lang_data_in_decl (t);
5951
5952   /* Traverse every type found freeing its language data.  */
5953   FOR_EACH_VEC_ELT (fld.types, i, t)
5954     free_lang_data_in_type (t);
5955   if (flag_checking)
5956     {
5957       FOR_EACH_VEC_ELT (fld.types, i, t)
5958         verify_type (t);
5959     }
5960 }
5961
5962
5963 /* Free resources that are used by FE but are not needed once they are done. */
5964
5965 static unsigned
5966 free_lang_data (void)
5967 {
5968   unsigned i;
5969
5970   /* If we are the LTO frontend we have freed lang-specific data already.  */
5971   if (in_lto_p
5972       || (!flag_generate_lto && !flag_generate_offload))
5973     return 0;
5974
5975   /* Allocate and assign alias sets to the standard integer types
5976      while the slots are still in the way the frontends generated them.  */
5977   for (i = 0; i < itk_none; ++i)
5978     if (integer_types[i])
5979       TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5980
5981   /* Traverse the IL resetting language specific information for
5982      operands, expressions, etc.  */
5983   free_lang_data_in_cgraph ();
5984
5985   /* Create gimple variants for common types.  */
5986   for (unsigned i = 0;
5987        i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
5988        ++i)
5989     builtin_structptr_types[i].node = builtin_structptr_types[i].base;
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 (id_equal (ident, attr_name))
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       if (TYPE_UID (type) + 1 == next_type_uid)
7192         --next_type_uid;
7193       /* Free also min/max values and the cache for integer
7194          types.  This can't be done in free_node, as LTO frees
7195          those on its own.  */
7196       if (TREE_CODE (type) == INTEGER_TYPE)
7197         {
7198           if (TYPE_MIN_VALUE (type)
7199               && TREE_TYPE (TYPE_MIN_VALUE (type)) == type)
7200             ggc_free (TYPE_MIN_VALUE (type));
7201           if (TYPE_MAX_VALUE (type)
7202               && TREE_TYPE (TYPE_MAX_VALUE (type)) == type)
7203             ggc_free (TYPE_MAX_VALUE (type));
7204           if (TYPE_CACHED_VALUES_P (type))
7205             ggc_free (TYPE_CACHED_VALUES (type));
7206         }
7207       free_node (type);
7208       return t1;
7209     }
7210   else
7211     {
7212       struct type_hash *h;
7213
7214       h = ggc_alloc<type_hash> ();
7215       h->hash = hashcode;
7216       h->type = type;
7217       *loc = h;
7218
7219       return type;
7220     }
7221 }
7222
7223 static void
7224 print_type_hash_statistics (void)
7225 {
7226   fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
7227            (long) type_hash_table->size (),
7228            (long) type_hash_table->elements (),
7229            type_hash_table->collisions ());
7230 }
7231
7232 /* Given two lists of attributes, return true if list l2 is
7233    equivalent to l1.  */
7234
7235 int
7236 attribute_list_equal (const_tree l1, const_tree l2)
7237 {
7238   if (l1 == l2)
7239     return 1;
7240
7241   return attribute_list_contained (l1, l2)
7242          && attribute_list_contained (l2, l1);
7243 }
7244
7245 /* Given two lists of attributes, return true if list L2 is
7246    completely contained within L1.  */
7247 /* ??? This would be faster if attribute names were stored in a canonicalized
7248    form.  Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
7249    must be used to show these elements are equivalent (which they are).  */
7250 /* ??? It's not clear that attributes with arguments will always be handled
7251    correctly.  */
7252
7253 int
7254 attribute_list_contained (const_tree l1, const_tree l2)
7255 {
7256   const_tree t1, t2;
7257
7258   /* First check the obvious, maybe the lists are identical.  */
7259   if (l1 == l2)
7260     return 1;
7261
7262   /* Maybe the lists are similar.  */
7263   for (t1 = l1, t2 = l2;
7264        t1 != 0 && t2 != 0
7265         && get_attribute_name (t1) == get_attribute_name (t2)
7266         && TREE_VALUE (t1) == TREE_VALUE (t2);
7267        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7268     ;
7269
7270   /* Maybe the lists are equal.  */
7271   if (t1 == 0 && t2 == 0)
7272     return 1;
7273
7274   for (; t2 != 0; t2 = TREE_CHAIN (t2))
7275     {
7276       const_tree attr;
7277       /* This CONST_CAST is okay because lookup_attribute does not
7278          modify its argument and the return value is assigned to a
7279          const_tree.  */
7280       for (attr = lookup_ident_attribute (get_attribute_name (t2),
7281                                           CONST_CAST_TREE (l1));
7282            attr != NULL_TREE && !attribute_value_equal (t2, attr);
7283            attr = lookup_ident_attribute (get_attribute_name (t2),
7284                                           TREE_CHAIN (attr)))
7285         ;
7286
7287       if (attr == NULL_TREE)
7288         return 0;
7289     }
7290
7291   return 1;
7292 }
7293
7294 /* Given two lists of types
7295    (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7296    return 1 if the lists contain the same types in the same order.
7297    Also, the TREE_PURPOSEs must match.  */
7298
7299 int
7300 type_list_equal (const_tree l1, const_tree l2)
7301 {
7302   const_tree t1, t2;
7303
7304   for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7305     if (TREE_VALUE (t1) != TREE_VALUE (t2)
7306         || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7307             && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7308                   && (TREE_TYPE (TREE_PURPOSE (t1))
7309                       == TREE_TYPE (TREE_PURPOSE (t2))))))
7310       return 0;
7311
7312   return t1 == t2;
7313 }
7314
7315 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7316    given by TYPE.  If the argument list accepts variable arguments,
7317    then this function counts only the ordinary arguments.  */
7318
7319 int
7320 type_num_arguments (const_tree type)
7321 {
7322   int i = 0;
7323   tree t;
7324
7325   for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7326     /* If the function does not take a variable number of arguments,
7327        the last element in the list will have type `void'.  */
7328     if (VOID_TYPE_P (TREE_VALUE (t)))
7329       break;
7330     else
7331       ++i;
7332
7333   return i;
7334 }
7335
7336 /* Nonzero if integer constants T1 and T2
7337    represent the same constant value.  */
7338
7339 int
7340 tree_int_cst_equal (const_tree t1, const_tree t2)
7341 {
7342   if (t1 == t2)
7343     return 1;
7344
7345   if (t1 == 0 || t2 == 0)
7346     return 0;
7347
7348   if (TREE_CODE (t1) == INTEGER_CST
7349       && TREE_CODE (t2) == INTEGER_CST
7350       && wi::to_widest (t1) == wi::to_widest (t2))
7351     return 1;
7352
7353   return 0;
7354 }
7355
7356 /* Return true if T is an INTEGER_CST whose numerical value (extended
7357    according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  */
7358
7359 bool
7360 tree_fits_shwi_p (const_tree t)
7361 {
7362   return (t != NULL_TREE
7363           && TREE_CODE (t) == INTEGER_CST
7364           && wi::fits_shwi_p (wi::to_widest (t)));
7365 }
7366
7367 /* Return true if T is an INTEGER_CST whose numerical value (extended
7368    according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  */
7369
7370 bool
7371 tree_fits_uhwi_p (const_tree t)
7372 {
7373   return (t != NULL_TREE
7374           && TREE_CODE (t) == INTEGER_CST
7375           && wi::fits_uhwi_p (wi::to_widest (t)));
7376 }
7377
7378 /* T is an INTEGER_CST whose numerical value (extended according to
7379    TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  Return that
7380    HOST_WIDE_INT.  */
7381
7382 HOST_WIDE_INT
7383 tree_to_shwi (const_tree t)
7384 {
7385   gcc_assert (tree_fits_shwi_p (t));
7386   return TREE_INT_CST_LOW (t);
7387 }
7388
7389 /* T is an INTEGER_CST whose numerical value (extended according to
7390    TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  Return that
7391    HOST_WIDE_INT.  */
7392
7393 unsigned HOST_WIDE_INT
7394 tree_to_uhwi (const_tree t)
7395 {
7396   gcc_assert (tree_fits_uhwi_p (t));
7397   return TREE_INT_CST_LOW (t);
7398 }
7399
7400 /* Return the most significant (sign) bit of T.  */
7401
7402 int
7403 tree_int_cst_sign_bit (const_tree t)
7404 {
7405   unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7406
7407   return wi::extract_uhwi (t, bitno, 1);
7408 }
7409
7410 /* Return an indication of the sign of the integer constant T.
7411    The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7412    Note that -1 will never be returned if T's type is unsigned.  */
7413
7414 int
7415 tree_int_cst_sgn (const_tree t)
7416 {
7417   if (wi::eq_p (t, 0))
7418     return 0;
7419   else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7420     return 1;
7421   else if (wi::neg_p (t))
7422     return -1;
7423   else
7424     return 1;
7425 }
7426
7427 /* Return the minimum number of bits needed to represent VALUE in a
7428    signed or unsigned type, UNSIGNEDP says which.  */
7429
7430 unsigned int
7431 tree_int_cst_min_precision (tree value, signop sgn)
7432 {
7433   /* If the value is negative, compute its negative minus 1.  The latter
7434      adjustment is because the absolute value of the largest negative value
7435      is one larger than the largest positive value.  This is equivalent to
7436      a bit-wise negation, so use that operation instead.  */
7437
7438   if (tree_int_cst_sgn (value) < 0)
7439     value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7440
7441   /* Return the number of bits needed, taking into account the fact
7442      that we need one more bit for a signed than unsigned type.
7443      If value is 0 or -1, the minimum precision is 1 no matter
7444      whether unsignedp is true or false.  */
7445
7446   if (integer_zerop (value))
7447     return 1;
7448   else
7449     return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7450 }
7451
7452 /* Return truthvalue of whether T1 is the same tree structure as T2.
7453    Return 1 if they are the same.
7454    Return 0 if they are understandably different.
7455    Return -1 if either contains tree structure not understood by
7456    this function.  */
7457
7458 int
7459 simple_cst_equal (const_tree t1, const_tree t2)
7460 {
7461   enum tree_code code1, code2;
7462   int cmp;
7463   int i;
7464
7465   if (t1 == t2)
7466     return 1;
7467   if (t1 == 0 || t2 == 0)
7468     return 0;
7469
7470   code1 = TREE_CODE (t1);
7471   code2 = TREE_CODE (t2);
7472
7473   if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7474     {
7475       if (CONVERT_EXPR_CODE_P (code2)
7476           || code2 == NON_LVALUE_EXPR)
7477         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7478       else
7479         return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7480     }
7481
7482   else if (CONVERT_EXPR_CODE_P (code2)
7483            || code2 == NON_LVALUE_EXPR)
7484     return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7485
7486   if (code1 != code2)
7487     return 0;
7488
7489   switch (code1)
7490     {
7491     case INTEGER_CST:
7492       return wi::to_widest (t1) == wi::to_widest (t2);
7493
7494     case REAL_CST:
7495       return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
7496
7497     case FIXED_CST:
7498       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7499
7500     case STRING_CST:
7501       return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7502               && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7503                          TREE_STRING_LENGTH (t1)));
7504
7505     case CONSTRUCTOR:
7506       {
7507         unsigned HOST_WIDE_INT idx;
7508         vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7509         vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7510
7511         if (vec_safe_length (v1) != vec_safe_length (v2))
7512           return false;
7513
7514         for (idx = 0; idx < vec_safe_length (v1); ++idx)
7515           /* ??? Should we handle also fields here? */
7516           if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7517             return false;
7518         return true;
7519       }
7520
7521     case SAVE_EXPR:
7522       return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7523
7524     case CALL_EXPR:
7525       cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7526       if (cmp <= 0)
7527         return cmp;
7528       if (call_expr_nargs (t1) != call_expr_nargs (t2))
7529         return 0;
7530       {
7531         const_tree arg1, arg2;
7532         const_call_expr_arg_iterator iter1, iter2;
7533         for (arg1 = first_const_call_expr_arg (t1, &iter1),
7534                arg2 = first_const_call_expr_arg (t2, &iter2);
7535              arg1 && arg2;
7536              arg1 = next_const_call_expr_arg (&iter1),
7537                arg2 = next_const_call_expr_arg (&iter2))
7538           {
7539             cmp = simple_cst_equal (arg1, arg2);
7540             if (cmp <= 0)
7541               return cmp;
7542           }
7543         return arg1 == arg2;
7544       }
7545
7546     case TARGET_EXPR:
7547       /* Special case: if either target is an unallocated VAR_DECL,
7548          it means that it's going to be unified with whatever the
7549          TARGET_EXPR is really supposed to initialize, so treat it
7550          as being equivalent to anything.  */
7551       if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7552            && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7553            && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7554           || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7555               && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7556               && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7557         cmp = 1;
7558       else
7559         cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7560
7561       if (cmp <= 0)
7562         return cmp;
7563
7564       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7565
7566     case WITH_CLEANUP_EXPR:
7567       cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7568       if (cmp <= 0)
7569         return cmp;
7570
7571       return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7572
7573     case COMPONENT_REF:
7574       if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7575         return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7576
7577       return 0;
7578
7579     case VAR_DECL:
7580     case PARM_DECL:
7581     case CONST_DECL:
7582     case FUNCTION_DECL:
7583       return 0;
7584
7585     default:
7586       break;
7587     }
7588
7589   /* This general rule works for most tree codes.  All exceptions should be
7590      handled above.  If this is a language-specific tree code, we can't
7591      trust what might be in the operand, so say we don't know
7592      the situation.  */
7593   if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7594     return -1;
7595
7596   switch (TREE_CODE_CLASS (code1))
7597     {
7598     case tcc_unary:
7599     case tcc_binary:
7600     case tcc_comparison:
7601     case tcc_expression:
7602     case tcc_reference:
7603     case tcc_statement:
7604       cmp = 1;
7605       for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7606         {
7607           cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7608           if (cmp <= 0)
7609             return cmp;
7610         }
7611
7612       return cmp;
7613
7614     default:
7615       return -1;
7616     }
7617 }
7618
7619 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7620    Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7621    than U, respectively.  */
7622
7623 int
7624 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7625 {
7626   if (tree_int_cst_sgn (t) < 0)
7627     return -1;
7628   else if (!tree_fits_uhwi_p (t))
7629     return 1;
7630   else if (TREE_INT_CST_LOW (t) == u)
7631     return 0;
7632   else if (TREE_INT_CST_LOW (t) < u)
7633     return -1;
7634   else
7635     return 1;
7636 }
7637
7638 /* Return true if SIZE represents a constant size that is in bounds of
7639    what the middle-end and the backend accepts (covering not more than
7640    half of the address-space).  */
7641
7642 bool
7643 valid_constant_size_p (const_tree size)
7644 {
7645   if (! tree_fits_uhwi_p (size)
7646       || TREE_OVERFLOW (size)
7647       || tree_int_cst_sign_bit (size) != 0)
7648     return false;
7649   return true;
7650 }
7651
7652 /* Return the precision of the type, or for a complex or vector type the
7653    precision of the type of its elements.  */
7654
7655 unsigned int
7656 element_precision (const_tree type)
7657 {
7658   if (!TYPE_P (type))
7659     type = TREE_TYPE (type);
7660   enum tree_code code = TREE_CODE (type);
7661   if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7662     type = TREE_TYPE (type);
7663
7664   return TYPE_PRECISION (type);
7665 }
7666
7667 /* Return true if CODE represents an associative tree code.  Otherwise
7668    return false.  */
7669 bool
7670 associative_tree_code (enum tree_code code)
7671 {
7672   switch (code)
7673     {
7674     case BIT_IOR_EXPR:
7675     case BIT_AND_EXPR:
7676     case BIT_XOR_EXPR:
7677     case PLUS_EXPR:
7678     case MULT_EXPR:
7679     case MIN_EXPR:
7680     case MAX_EXPR:
7681       return true;
7682
7683     default:
7684       break;
7685     }
7686   return false;
7687 }
7688
7689 /* Return true if CODE represents a commutative tree code.  Otherwise
7690    return false.  */
7691 bool
7692 commutative_tree_code (enum tree_code code)
7693 {
7694   switch (code)
7695     {
7696     case PLUS_EXPR:
7697     case MULT_EXPR:
7698     case MULT_HIGHPART_EXPR:
7699     case MIN_EXPR:
7700     case MAX_EXPR:
7701     case BIT_IOR_EXPR:
7702     case BIT_XOR_EXPR:
7703     case BIT_AND_EXPR:
7704     case NE_EXPR:
7705     case EQ_EXPR:
7706     case UNORDERED_EXPR:
7707     case ORDERED_EXPR:
7708     case UNEQ_EXPR:
7709     case LTGT_EXPR:
7710     case TRUTH_AND_EXPR:
7711     case TRUTH_XOR_EXPR:
7712     case TRUTH_OR_EXPR:
7713     case WIDEN_MULT_EXPR:
7714     case VEC_WIDEN_MULT_HI_EXPR:
7715     case VEC_WIDEN_MULT_LO_EXPR:
7716     case VEC_WIDEN_MULT_EVEN_EXPR:
7717     case VEC_WIDEN_MULT_ODD_EXPR:
7718       return true;
7719
7720     default:
7721       break;
7722     }
7723   return false;
7724 }
7725
7726 /* Return true if CODE represents a ternary tree code for which the
7727    first two operands are commutative.  Otherwise return false.  */
7728 bool
7729 commutative_ternary_tree_code (enum tree_code code)
7730 {
7731   switch (code)
7732     {
7733     case WIDEN_MULT_PLUS_EXPR:
7734     case WIDEN_MULT_MINUS_EXPR:
7735     case DOT_PROD_EXPR:
7736     case FMA_EXPR:
7737       return true;
7738
7739     default:
7740       break;
7741     }
7742   return false;
7743 }
7744
7745 /* Returns true if CODE can overflow.  */
7746
7747 bool
7748 operation_can_overflow (enum tree_code code)
7749 {
7750   switch (code)
7751     {
7752     case PLUS_EXPR:
7753     case MINUS_EXPR:
7754     case MULT_EXPR:
7755     case LSHIFT_EXPR:
7756       /* Can overflow in various ways.  */
7757       return true;
7758     case TRUNC_DIV_EXPR:
7759     case EXACT_DIV_EXPR:
7760     case FLOOR_DIV_EXPR:
7761     case CEIL_DIV_EXPR:
7762       /* For INT_MIN / -1.  */
7763       return true;
7764     case NEGATE_EXPR:
7765     case ABS_EXPR:
7766       /* For -INT_MIN.  */
7767       return true;
7768     default:
7769       /* These operators cannot overflow.  */
7770       return false;
7771     }
7772 }
7773
7774 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7775    ftrapv doesn't generate trapping insns for CODE.  */
7776
7777 bool
7778 operation_no_trapping_overflow (tree type, enum tree_code code)
7779 {
7780   gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7781
7782   /* We don't generate instructions that trap on overflow for complex or vector
7783      types.  */
7784   if (!INTEGRAL_TYPE_P (type))
7785     return true;
7786
7787   if (!TYPE_OVERFLOW_TRAPS (type))
7788     return true;
7789
7790   switch (code)
7791     {
7792     case PLUS_EXPR:
7793     case MINUS_EXPR:
7794     case MULT_EXPR:
7795     case NEGATE_EXPR:
7796     case ABS_EXPR:
7797       /* These operators can overflow, and -ftrapv generates trapping code for
7798          these.  */
7799       return false;
7800     case TRUNC_DIV_EXPR:
7801     case EXACT_DIV_EXPR:
7802     case FLOOR_DIV_EXPR:
7803     case CEIL_DIV_EXPR:
7804     case LSHIFT_EXPR:
7805       /* These operators can overflow, but -ftrapv does not generate trapping
7806          code for these.  */
7807       return true;
7808     default:
7809       /* These operators cannot overflow.  */
7810       return true;
7811     }
7812 }
7813
7814 namespace inchash
7815 {
7816
7817 /* Generate a hash value for an expression.  This can be used iteratively
7818    by passing a previous result as the HSTATE argument.
7819
7820    This function is intended to produce the same hash for expressions which
7821    would compare equal using operand_equal_p.  */
7822 void
7823 add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
7824 {
7825   int i;
7826   enum tree_code code;
7827   enum tree_code_class tclass;
7828
7829   if (t == NULL_TREE || t == error_mark_node)
7830     {
7831       hstate.merge_hash (0);
7832       return;
7833     }
7834
7835   if (!(flags & OEP_ADDRESS_OF))
7836     STRIP_NOPS (t);
7837
7838   code = TREE_CODE (t);
7839
7840   switch (code)
7841     {
7842     /* Alas, constants aren't shared, so we can't rely on pointer
7843        identity.  */
7844     case VOID_CST:
7845       hstate.merge_hash (0);
7846       return;
7847     case INTEGER_CST:
7848       gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7849       for (i = 0; i < TREE_INT_CST_EXT_NUNITS (t); i++)
7850         hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
7851       return;
7852     case REAL_CST:
7853       {
7854         unsigned int val2;
7855         if (!HONOR_SIGNED_ZEROS (t) && real_zerop (t))
7856           val2 = rvc_zero;
7857         else
7858           val2 = real_hash (TREE_REAL_CST_PTR (t));
7859         hstate.merge_hash (val2);
7860         return;
7861       }
7862     case FIXED_CST:
7863       {
7864         unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7865         hstate.merge_hash (val2);
7866         return;
7867       }
7868     case STRING_CST:
7869       hstate.add ((const void *) TREE_STRING_POINTER (t),
7870                   TREE_STRING_LENGTH (t));
7871       return;
7872     case COMPLEX_CST:
7873       inchash::add_expr (TREE_REALPART (t), hstate, flags);
7874       inchash::add_expr (TREE_IMAGPART (t), hstate, flags);
7875       return;
7876     case VECTOR_CST:
7877       {
7878         unsigned i;
7879         for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7880           inchash::add_expr (VECTOR_CST_ELT (t, i), hstate, flags);
7881         return;
7882       }
7883     case SSA_NAME:
7884       /* We can just compare by pointer.  */
7885       hstate.add_wide_int (SSA_NAME_VERSION (t));
7886       return;
7887     case PLACEHOLDER_EXPR:
7888       /* The node itself doesn't matter.  */
7889       return;
7890     case BLOCK:
7891     case OMP_CLAUSE:
7892       /* Ignore.  */
7893       return;
7894     case TREE_LIST:
7895       /* A list of expressions, for a CALL_EXPR or as the elements of a
7896          VECTOR_CST.  */
7897       for (; t; t = TREE_CHAIN (t))
7898         inchash::add_expr (TREE_VALUE (t), hstate, flags);
7899       return;
7900     case CONSTRUCTOR:
7901       {
7902         unsigned HOST_WIDE_INT idx;
7903         tree field, value;
7904         flags &= ~OEP_ADDRESS_OF;
7905         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7906           {
7907             inchash::add_expr (field, hstate, flags);
7908             inchash::add_expr (value, hstate, flags);
7909           }
7910         return;
7911       }
7912     case STATEMENT_LIST:
7913       {
7914         tree_stmt_iterator i;
7915         for (i = tsi_start (CONST_CAST_TREE (t));
7916              !tsi_end_p (i); tsi_next (&i))
7917           inchash::add_expr (tsi_stmt (i), hstate, flags);
7918         return;
7919       }
7920     case TREE_VEC:
7921       for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
7922         inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags);
7923       return;
7924     case FUNCTION_DECL:
7925       /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7926          Otherwise nodes that compare equal according to operand_equal_p might
7927          get different hash codes.  However, don't do this for machine specific
7928          or front end builtins, since the function code is overloaded in those
7929          cases.  */
7930       if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7931           && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7932         {
7933           t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7934           code = TREE_CODE (t);
7935         }
7936       /* FALL THROUGH */
7937     default:
7938       tclass = TREE_CODE_CLASS (code);
7939
7940       if (tclass == tcc_declaration)
7941         {
7942           /* DECL's have a unique ID */
7943           hstate.add_wide_int (DECL_UID (t));
7944         }
7945       else if (tclass == tcc_comparison && !commutative_tree_code (code))
7946         {
7947           /* For comparisons that can be swapped, use the lower
7948              tree code.  */
7949           enum tree_code ccode = swap_tree_comparison (code);
7950           if (code < ccode)
7951             ccode = code;
7952           hstate.add_object (ccode);
7953           inchash::add_expr (TREE_OPERAND (t, ccode != code), hstate, flags);
7954           inchash::add_expr (TREE_OPERAND (t, ccode == code), hstate, flags);
7955         }
7956       else if (CONVERT_EXPR_CODE_P (code))
7957         {
7958           /* NOP_EXPR and CONVERT_EXPR are considered equal by
7959              operand_equal_p.  */
7960           enum tree_code ccode = NOP_EXPR;
7961           hstate.add_object (ccode);
7962
7963           /* Don't hash the type, that can lead to having nodes which
7964              compare equal according to operand_equal_p, but which
7965              have different hash codes.  Make sure to include signedness
7966              in the hash computation.  */
7967           hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7968           inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
7969         }
7970       /* For OEP_ADDRESS_OF, hash MEM_EXPR[&decl, 0] the same as decl.  */
7971       else if (code == MEM_REF
7972                && (flags & OEP_ADDRESS_OF) != 0
7973                && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR
7974                && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0))
7975                && integer_zerop (TREE_OPERAND (t, 1)))
7976         inchash::add_expr (TREE_OPERAND (TREE_OPERAND (t, 0), 0),
7977                            hstate, flags);
7978       /* Don't ICE on FE specific trees, or their arguments etc.
7979          during operand_equal_p hash verification.  */
7980       else if (!IS_EXPR_CODE_CLASS (tclass))
7981         gcc_assert (flags & OEP_HASH_CHECK);
7982       else
7983         {
7984           unsigned int sflags = flags;
7985
7986           hstate.add_object (code);
7987
7988           switch (code)
7989             {
7990             case ADDR_EXPR:
7991               gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7992               flags |= OEP_ADDRESS_OF;
7993               sflags = flags;
7994               break;
7995
7996             case INDIRECT_REF:
7997             case MEM_REF:
7998             case TARGET_MEM_REF:
7999               flags &= ~OEP_ADDRESS_OF;
8000               sflags = flags;
8001               break;
8002
8003             case ARRAY_REF:
8004             case ARRAY_RANGE_REF:
8005             case COMPONENT_REF:
8006             case BIT_FIELD_REF:
8007               sflags &= ~OEP_ADDRESS_OF;
8008               break;
8009
8010             case COND_EXPR:
8011               flags &= ~OEP_ADDRESS_OF;
8012               break;
8013
8014             case FMA_EXPR:
8015             case WIDEN_MULT_PLUS_EXPR:
8016             case WIDEN_MULT_MINUS_EXPR:
8017               {
8018                 /* The multiplication operands are commutative.  */
8019                 inchash::hash one, two;
8020                 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
8021                 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
8022                 hstate.add_commutative (one, two);
8023                 inchash::add_expr (TREE_OPERAND (t, 2), two, flags);
8024                 return;
8025               }
8026
8027             case CALL_EXPR:
8028               if (CALL_EXPR_FN (t) == NULL_TREE)
8029                 hstate.add_int (CALL_EXPR_IFN (t));
8030               break;
8031
8032             case TARGET_EXPR:
8033               /* For TARGET_EXPR, just hash on the TARGET_EXPR_SLOT.
8034                  Usually different TARGET_EXPRs just should use
8035                  different temporaries in their slots.  */
8036               inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags);
8037               return;
8038
8039             default:
8040               break;
8041             }
8042
8043           /* Don't hash the type, that can lead to having nodes which
8044              compare equal according to operand_equal_p, but which
8045              have different hash codes.  */
8046           if (code == NON_LVALUE_EXPR)
8047             {
8048               /* Make sure to include signness in the hash computation.  */
8049               hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
8050               inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
8051             }
8052
8053           else if (commutative_tree_code (code))
8054             {
8055               /* It's a commutative expression.  We want to hash it the same
8056                  however it appears.  We do this by first hashing both operands
8057                  and then rehashing based on the order of their independent
8058                  hashes.  */
8059               inchash::hash one, two;
8060               inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
8061               inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
8062               hstate.add_commutative (one, two);
8063             }
8064           else
8065             for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
8066               inchash::add_expr (TREE_OPERAND (t, i), hstate,
8067                                  i == 0 ? flags : sflags);
8068         }
8069       return;
8070     }
8071 }
8072
8073 }
8074
8075 /* Constructors for pointer, array and function types.
8076    (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
8077    constructed by language-dependent code, not here.)  */
8078
8079 /* Construct, lay out and return the type of pointers to TO_TYPE with
8080    mode MODE.  If CAN_ALIAS_ALL is TRUE, indicate this type can
8081    reference all of memory. If such a type has already been
8082    constructed, reuse it.  */
8083
8084 tree
8085 build_pointer_type_for_mode (tree to_type, machine_mode mode,
8086                              bool can_alias_all)
8087 {
8088   tree t;
8089   bool could_alias = can_alias_all;
8090
8091   if (to_type == error_mark_node)
8092     return error_mark_node;
8093
8094   /* If the pointed-to type has the may_alias attribute set, force
8095      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
8096   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8097     can_alias_all = true;
8098
8099   /* In some cases, languages will have things that aren't a POINTER_TYPE
8100      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
8101      In that case, return that type without regard to the rest of our
8102      operands.
8103
8104      ??? This is a kludge, but consistent with the way this function has
8105      always operated and there doesn't seem to be a good way to avoid this
8106      at the moment.  */
8107   if (TYPE_POINTER_TO (to_type) != 0
8108       && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
8109     return TYPE_POINTER_TO (to_type);
8110
8111   /* First, if we already have a type for pointers to TO_TYPE and it's
8112      the proper mode, use it.  */
8113   for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
8114     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8115       return t;
8116
8117   t = make_node (POINTER_TYPE);
8118
8119   TREE_TYPE (t) = to_type;
8120   SET_TYPE_MODE (t, mode);
8121   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8122   TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
8123   TYPE_POINTER_TO (to_type) = t;
8124
8125   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
8126   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8127     SET_TYPE_STRUCTURAL_EQUALITY (t);
8128   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8129     TYPE_CANONICAL (t)
8130       = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
8131                                      mode, false);
8132
8133   /* Lay out the type.  This function has many callers that are concerned
8134      with expression-construction, and this simplifies them all.  */
8135   layout_type (t);
8136
8137   return t;
8138 }
8139
8140 /* By default build pointers in ptr_mode.  */
8141
8142 tree
8143 build_pointer_type (tree to_type)
8144 {
8145   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8146                                               : TYPE_ADDR_SPACE (to_type);
8147   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8148   return build_pointer_type_for_mode (to_type, pointer_mode, false);
8149 }
8150
8151 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE.  */
8152
8153 tree
8154 build_reference_type_for_mode (tree to_type, machine_mode mode,
8155                                bool can_alias_all)
8156 {
8157   tree t;
8158   bool could_alias = can_alias_all;
8159
8160   if (to_type == error_mark_node)
8161     return error_mark_node;
8162
8163   /* If the pointed-to type has the may_alias attribute set, force
8164      a TYPE_REF_CAN_ALIAS_ALL pointer to be generated.  */
8165   if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8166     can_alias_all = true;
8167
8168   /* In some cases, languages will have things that aren't a REFERENCE_TYPE
8169      (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
8170      In that case, return that type without regard to the rest of our
8171      operands.
8172
8173      ??? This is a kludge, but consistent with the way this function has
8174      always operated and there doesn't seem to be a good way to avoid this
8175      at the moment.  */
8176   if (TYPE_REFERENCE_TO (to_type) != 0
8177       && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
8178     return TYPE_REFERENCE_TO (to_type);
8179
8180   /* First, if we already have a type for pointers to TO_TYPE and it's
8181      the proper mode, use it.  */
8182   for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
8183     if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8184       return t;
8185
8186   t = make_node (REFERENCE_TYPE);
8187
8188   TREE_TYPE (t) = to_type;
8189   SET_TYPE_MODE (t, mode);
8190   TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8191   TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
8192   TYPE_REFERENCE_TO (to_type) = t;
8193
8194   /* During LTO we do not set TYPE_CANONICAL of pointers and references.  */
8195   if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8196     SET_TYPE_STRUCTURAL_EQUALITY (t);
8197   else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8198     TYPE_CANONICAL (t)
8199       = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
8200                                        mode, false);
8201
8202   layout_type (t);
8203
8204   return t;
8205 }
8206
8207
8208 /* Build the node for the type of references-to-TO_TYPE by default
8209    in ptr_mode.  */
8210
8211 tree
8212 build_reference_type (tree to_type)
8213 {
8214   addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8215                                               : TYPE_ADDR_SPACE (to_type);
8216   machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8217   return build_reference_type_for_mode (to_type, pointer_mode, false);
8218 }
8219
8220 #define MAX_INT_CACHED_PREC \
8221   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8222 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
8223
8224 /* Builds a signed or unsigned integer type of precision PRECISION.
8225    Used for C bitfields whose precision does not match that of
8226    built-in target types.  */
8227 tree
8228 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
8229                                 int unsignedp)
8230 {
8231   tree itype, ret;
8232
8233   if (unsignedp)
8234     unsignedp = MAX_INT_CACHED_PREC + 1;
8235     
8236   if (precision <= MAX_INT_CACHED_PREC)
8237     {
8238       itype = nonstandard_integer_type_cache[precision + unsignedp];
8239       if (itype)
8240         return itype;
8241     }
8242
8243   itype = make_node (INTEGER_TYPE);
8244   TYPE_PRECISION (itype) = precision;
8245
8246   if (unsignedp)
8247     fixup_unsigned_type (itype);
8248   else
8249     fixup_signed_type (itype);
8250
8251   ret = itype;
8252   if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
8253     ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
8254   if (precision <= MAX_INT_CACHED_PREC)
8255     nonstandard_integer_type_cache[precision + unsignedp] = ret;
8256
8257   return ret;
8258 }
8259
8260 #define MAX_BOOL_CACHED_PREC \
8261   (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8262 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
8263
8264 /* Builds a boolean type of precision PRECISION.
8265    Used for boolean vectors to choose proper vector element size.  */
8266 tree
8267 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
8268 {
8269   tree type;
8270
8271   if (precision <= MAX_BOOL_CACHED_PREC)
8272     {
8273       type = nonstandard_boolean_type_cache[precision];
8274       if (type)
8275         return type;
8276     }
8277
8278   type = make_node (BOOLEAN_TYPE);
8279   TYPE_PRECISION (type) = precision;
8280   fixup_signed_type (type);
8281
8282   if (precision <= MAX_INT_CACHED_PREC)
8283     nonstandard_boolean_type_cache[precision] = type;
8284
8285   return type;
8286 }
8287
8288 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
8289    or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL.  If SHARED
8290    is true, reuse such a type that has already been constructed.  */
8291
8292 static tree
8293 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
8294 {
8295   tree itype = make_node (INTEGER_TYPE);
8296
8297   TREE_TYPE (itype) = type;
8298
8299   TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
8300   TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
8301
8302   TYPE_PRECISION (itype) = TYPE_PRECISION (type);
8303   SET_TYPE_MODE (itype, TYPE_MODE (type));
8304   TYPE_SIZE (itype) = TYPE_SIZE (type);
8305   TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
8306   SET_TYPE_ALIGN (itype, TYPE_ALIGN (type));
8307   TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
8308
8309   if (!shared)
8310     return itype;
8311
8312   if ((TYPE_MIN_VALUE (itype)
8313        && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
8314       || (TYPE_MAX_VALUE (itype)
8315           && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
8316     {
8317       /* Since we cannot reliably merge this type, we need to compare it using
8318          structural equality checks.  */
8319       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8320       return itype;
8321     }
8322
8323   hashval_t hash = type_hash_canon_hash (itype);
8324   itype = type_hash_canon (hash, itype);
8325
8326   return itype;
8327 }
8328
8329 /* Wrapper around build_range_type_1 with SHARED set to true.  */
8330
8331 tree
8332 build_range_type (tree type, tree lowval, tree highval)
8333 {
8334   return build_range_type_1 (type, lowval, highval, true);
8335 }
8336
8337 /* Wrapper around build_range_type_1 with SHARED set to false.  */
8338
8339 tree
8340 build_nonshared_range_type (tree type, tree lowval, tree highval)
8341 {
8342   return build_range_type_1 (type, lowval, highval, false);
8343 }
8344
8345 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
8346    MAXVAL should be the maximum value in the domain
8347    (one less than the length of the array).
8348
8349    The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
8350    We don't enforce this limit, that is up to caller (e.g. language front end).
8351    The limit exists because the result is a signed type and we don't handle
8352    sizes that use more than one HOST_WIDE_INT.  */
8353
8354 tree
8355 build_index_type (tree maxval)
8356 {
8357   return build_range_type (sizetype, size_zero_node, maxval);
8358 }
8359
8360 /* Return true if the debug information for TYPE, a subtype, should be emitted
8361    as a subrange type.  If so, set LOWVAL to the low bound and HIGHVAL to the
8362    high bound, respectively.  Sometimes doing so unnecessarily obfuscates the
8363    debug info and doesn't reflect the source code.  */
8364
8365 bool
8366 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
8367 {
8368   tree base_type = TREE_TYPE (type), low, high;
8369
8370   /* Subrange types have a base type which is an integral type.  */
8371   if (!INTEGRAL_TYPE_P (base_type))
8372     return false;
8373
8374   /* Get the real bounds of the subtype.  */
8375   if (lang_hooks.types.get_subrange_bounds)
8376     lang_hooks.types.get_subrange_bounds (type, &low, &high);
8377   else
8378     {
8379       low = TYPE_MIN_VALUE (type);
8380       high = TYPE_MAX_VALUE (type);
8381     }
8382
8383   /* If the type and its base type have the same representation and the same
8384      name, then the type is not a subrange but a copy of the base type.  */
8385   if ((TREE_CODE (base_type) == INTEGER_TYPE
8386        || TREE_CODE (base_type) == BOOLEAN_TYPE)
8387       && int_size_in_bytes (type) == int_size_in_bytes (base_type)
8388       && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
8389       && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
8390       && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
8391     return false;
8392
8393   if (lowval)
8394     *lowval = low;
8395   if (highval)
8396     *highval = high;
8397   return true;
8398 }
8399
8400 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
8401    and number of elements specified by the range of values of INDEX_TYPE.
8402    If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type.
8403    If SHARED is true, reuse such a type that has already been constructed.  */
8404
8405 static tree
8406 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
8407                     bool shared)
8408 {
8409   tree t;
8410
8411   if (TREE_CODE (elt_type) == FUNCTION_TYPE)
8412     {
8413       error ("arrays of functions are not meaningful");
8414       elt_type = integer_type_node;
8415     }
8416
8417   t = make_node (ARRAY_TYPE);
8418   TREE_TYPE (t) = elt_type;
8419   TYPE_DOMAIN (t) = index_type;
8420   TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
8421   TYPE_TYPELESS_STORAGE (t) = typeless_storage;
8422   layout_type (t);
8423
8424   /* If the element type is incomplete at this point we get marked for
8425      structural equality.  Do not record these types in the canonical
8426      type hashtable.  */
8427   if (TYPE_STRUCTURAL_EQUALITY_P (t))
8428     return t;
8429
8430   if (shared)
8431     {
8432       hashval_t hash = type_hash_canon_hash (t);
8433       t = type_hash_canon (hash, t);
8434     }
8435
8436   if (TYPE_CANONICAL (t) == t)
8437     {
8438       if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
8439           || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
8440           || in_lto_p)
8441         SET_TYPE_STRUCTURAL_EQUALITY (t);
8442       else if (TYPE_CANONICAL (elt_type) != elt_type
8443                || (index_type && TYPE_CANONICAL (index_type) != index_type))
8444         TYPE_CANONICAL (t)
8445           = build_array_type_1 (TYPE_CANONICAL (elt_type),
8446                                 index_type
8447                                 ? TYPE_CANONICAL (index_type) : NULL_TREE,
8448                                 typeless_storage, shared);
8449     }
8450
8451   return t;
8452 }
8453
8454 /* Wrapper around build_array_type_1 with SHARED set to true.  */
8455
8456 tree
8457 build_array_type (tree elt_type, tree index_type, bool typeless_storage)
8458 {
8459   return build_array_type_1 (elt_type, index_type, typeless_storage, true);
8460 }
8461
8462 /* Wrapper around build_array_type_1 with SHARED set to false.  */
8463
8464 tree
8465 build_nonshared_array_type (tree elt_type, tree index_type)
8466 {
8467   return build_array_type_1 (elt_type, index_type, false, false);
8468 }
8469
8470 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8471    sizetype.  */
8472
8473 tree
8474 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
8475 {
8476   return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8477 }
8478
8479 /* Recursively examines the array elements of TYPE, until a non-array
8480    element type is found.  */
8481
8482 tree
8483 strip_array_types (tree type)
8484 {
8485   while (TREE_CODE (type) == ARRAY_TYPE)
8486     type = TREE_TYPE (type);
8487
8488   return type;
8489 }
8490
8491 /* Computes the canonical argument types from the argument type list
8492    ARGTYPES.
8493
8494    Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8495    on entry to this function, or if any of the ARGTYPES are
8496    structural.
8497
8498    Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8499    true on entry to this function, or if any of the ARGTYPES are
8500    non-canonical.
8501
8502    Returns a canonical argument list, which may be ARGTYPES when the
8503    canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8504    true) or would not differ from ARGTYPES.  */
8505
8506 static tree
8507 maybe_canonicalize_argtypes (tree argtypes,
8508                              bool *any_structural_p,
8509                              bool *any_noncanonical_p)
8510 {
8511   tree arg;
8512   bool any_noncanonical_argtypes_p = false;
8513
8514   for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8515     {
8516       if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8517         /* Fail gracefully by stating that the type is structural.  */
8518         *any_structural_p = true;
8519       else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8520         *any_structural_p = true;
8521       else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8522                || TREE_PURPOSE (arg))
8523         /* If the argument has a default argument, we consider it
8524            non-canonical even though the type itself is canonical.
8525            That way, different variants of function and method types
8526            with default arguments will all point to the variant with
8527            no defaults as their canonical type.  */
8528         any_noncanonical_argtypes_p = true;
8529     }
8530
8531   if (*any_structural_p)
8532     return argtypes;
8533
8534   if (any_noncanonical_argtypes_p)
8535     {
8536       /* Build the canonical list of argument types.  */
8537       tree canon_argtypes = NULL_TREE;
8538       bool is_void = false;
8539
8540       for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8541         {
8542           if (arg == void_list_node)
8543             is_void = true;
8544           else
8545             canon_argtypes = tree_cons (NULL_TREE,
8546                                         TYPE_CANONICAL (TREE_VALUE (arg)),
8547                                         canon_argtypes);
8548         }
8549
8550       canon_argtypes = nreverse (canon_argtypes);
8551       if (is_void)
8552         canon_argtypes = chainon (canon_argtypes, void_list_node);
8553
8554       /* There is a non-canonical type.  */
8555       *any_noncanonical_p = true;
8556       return canon_argtypes;
8557     }
8558
8559   /* The canonical argument types are the same as ARGTYPES.  */
8560   return argtypes;
8561 }
8562
8563 /* Construct, lay out and return
8564    the type of functions returning type VALUE_TYPE
8565    given arguments of types ARG_TYPES.
8566    ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8567    are data type nodes for the arguments of the function.
8568    If such a type has already been constructed, reuse it.  */
8569
8570 tree
8571 build_function_type (tree value_type, tree arg_types)
8572 {
8573   tree t;
8574   inchash::hash hstate;
8575   bool any_structural_p, any_noncanonical_p;
8576   tree canon_argtypes;
8577
8578   if (TREE_CODE (value_type) == FUNCTION_TYPE)
8579     {
8580       error ("function return type cannot be function");
8581       value_type = integer_type_node;
8582     }
8583
8584   /* Make a node of the sort we want.  */
8585   t = make_node (FUNCTION_TYPE);
8586   TREE_TYPE (t) = value_type;
8587   TYPE_ARG_TYPES (t) = arg_types;
8588
8589   /* If we already have such a type, use the old one.  */
8590   hashval_t hash = type_hash_canon_hash (t);
8591   t = type_hash_canon (hash, t);
8592
8593   /* Set up the canonical type. */
8594   any_structural_p   = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8595   any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8596   canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8597                                                 &any_structural_p,
8598                                                 &any_noncanonical_p);
8599   if (any_structural_p)
8600     SET_TYPE_STRUCTURAL_EQUALITY (t);
8601   else if (any_noncanonical_p)
8602     TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8603                                               canon_argtypes);
8604
8605   if (!COMPLETE_TYPE_P (t))
8606     layout_type (t);
8607   return t;
8608 }
8609
8610 /* Build a function type.  The RETURN_TYPE is the type returned by the
8611    function.  If VAARGS is set, no void_type_node is appended to the
8612    list.  ARGP must be always be terminated be a NULL_TREE.  */
8613
8614 static tree
8615 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8616 {
8617   tree t, args, last;
8618
8619   t = va_arg (argp, tree);
8620   for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8621     args = tree_cons (NULL_TREE, t, args);
8622
8623   if (vaargs)
8624     {
8625       last = args;
8626       if (args != NULL_TREE)
8627         args = nreverse (args);
8628       gcc_assert (last != void_list_node);
8629     }
8630   else if (args == NULL_TREE)
8631     args = void_list_node;
8632   else
8633     {
8634       last = args;
8635       args = nreverse (args);
8636       TREE_CHAIN (last) = void_list_node;
8637     }
8638   args = build_function_type (return_type, args);
8639
8640   return args;
8641 }
8642
8643 /* Build a function type.  The RETURN_TYPE is the type returned by the
8644    function.  If additional arguments are provided, they are
8645    additional argument types.  The list of argument types must always
8646    be terminated by NULL_TREE.  */
8647
8648 tree
8649 build_function_type_list (tree return_type, ...)
8650 {
8651   tree args;
8652   va_list p;
8653
8654   va_start (p, return_type);
8655   args = build_function_type_list_1 (false, return_type, p);
8656   va_end (p);
8657   return args;
8658 }
8659
8660 /* Build a variable argument function type.  The RETURN_TYPE is the
8661    type returned by the function.  If additional arguments are provided,
8662    they are additional argument types.  The list of argument types must
8663    always be terminated by NULL_TREE.  */
8664
8665 tree
8666 build_varargs_function_type_list (tree return_type, ...)
8667 {
8668   tree args;
8669   va_list p;
8670
8671   va_start (p, return_type);
8672   args = build_function_type_list_1 (true, return_type, p);
8673   va_end (p);
8674
8675   return args;
8676 }
8677
8678 /* Build a function type.  RETURN_TYPE is the type returned by the
8679    function; VAARGS indicates whether the function takes varargs.  The
8680    function takes N named arguments, the types of which are provided in
8681    ARG_TYPES.  */
8682
8683 static tree
8684 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8685                              tree *arg_types)
8686 {
8687   int i;
8688   tree t = vaargs ? NULL_TREE : void_list_node;
8689
8690   for (i = n - 1; i >= 0; i--)
8691     t = tree_cons (NULL_TREE, arg_types[i], t);
8692
8693   return build_function_type (return_type, t);
8694 }
8695
8696 /* Build a function type.  RETURN_TYPE is the type returned by the
8697    function.  The function takes N named arguments, the types of which
8698    are provided in ARG_TYPES.  */
8699
8700 tree
8701 build_function_type_array (tree return_type, int n, tree *arg_types)
8702 {
8703   return build_function_type_array_1 (false, return_type, n, arg_types);
8704 }
8705
8706 /* Build a variable argument function type.  RETURN_TYPE is the type
8707    returned by the function.  The function takes N named arguments, the
8708    types of which are provided in ARG_TYPES.  */
8709
8710 tree
8711 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8712 {
8713   return build_function_type_array_1 (true, return_type, n, arg_types);
8714 }
8715
8716 /* Build a METHOD_TYPE for a member of BASETYPE.  The RETTYPE (a TYPE)
8717    and ARGTYPES (a TREE_LIST) are the return type and arguments types
8718    for the method.  An implicit additional parameter (of type
8719    pointer-to-BASETYPE) is added to the ARGTYPES.  */
8720
8721 tree
8722 build_method_type_directly (tree basetype,
8723                             tree rettype,
8724                             tree argtypes)
8725 {
8726   tree t;
8727   tree ptype;
8728   bool any_structural_p, any_noncanonical_p;
8729   tree canon_argtypes;
8730
8731   /* Make a node of the sort we want.  */
8732   t = make_node (METHOD_TYPE);
8733
8734   TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8735   TREE_TYPE (t) = rettype;
8736   ptype = build_pointer_type (basetype);
8737
8738   /* The actual arglist for this function includes a "hidden" argument
8739      which is "this".  Put it into the list of argument types.  */
8740   argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8741   TYPE_ARG_TYPES (t) = argtypes;
8742
8743   /* If we already have such a type, use the old one.  */
8744   hashval_t hash = type_hash_canon_hash (t);
8745   t = type_hash_canon (hash, t);
8746
8747   /* Set up the canonical type. */
8748   any_structural_p
8749     = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8750        || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8751   any_noncanonical_p
8752     = (TYPE_CANONICAL (basetype) != basetype
8753        || TYPE_CANONICAL (rettype) != rettype);
8754   canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8755                                                 &any_structural_p,
8756                                                 &any_noncanonical_p);
8757   if (any_structural_p)
8758     SET_TYPE_STRUCTURAL_EQUALITY (t);
8759   else if (any_noncanonical_p)
8760     TYPE_CANONICAL (t)
8761       = build_method_type_directly (TYPE_CANONICAL (basetype),
8762                                     TYPE_CANONICAL (rettype),
8763                                     canon_argtypes);
8764   if (!COMPLETE_TYPE_P (t))
8765     layout_type (t);
8766
8767   return t;
8768 }
8769
8770 /* Construct, lay out and return the type of methods belonging to class
8771    BASETYPE and whose arguments and values are described by TYPE.
8772    If that type exists already, reuse it.
8773    TYPE must be a FUNCTION_TYPE node.  */
8774
8775 tree
8776 build_method_type (tree basetype, tree type)
8777 {
8778   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8779
8780   return build_method_type_directly (basetype,
8781                                      TREE_TYPE (type),
8782                                      TYPE_ARG_TYPES (type));
8783 }
8784
8785 /* Construct, lay out and return the type of offsets to a value
8786    of type TYPE, within an object of type BASETYPE.
8787    If a suitable offset type exists already, reuse it.  */
8788
8789 tree
8790 build_offset_type (tree basetype, tree type)
8791 {
8792   tree t;
8793
8794   /* Make a node of the sort we want.  */
8795   t = make_node (OFFSET_TYPE);
8796
8797   TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8798   TREE_TYPE (t) = type;
8799
8800   /* If we already have such a type, use the old one.  */
8801   hashval_t hash = type_hash_canon_hash (t);
8802   t = type_hash_canon (hash, t);
8803
8804   if (!COMPLETE_TYPE_P (t))
8805     layout_type (t);
8806
8807   if (TYPE_CANONICAL (t) == t)
8808     {
8809       if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8810           || TYPE_STRUCTURAL_EQUALITY_P (type))
8811         SET_TYPE_STRUCTURAL_EQUALITY (t);
8812       else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8813                || TYPE_CANONICAL (type) != type)
8814         TYPE_CANONICAL (t)
8815           = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8816                                TYPE_CANONICAL (type));
8817     }
8818
8819   return t;
8820 }
8821
8822 /* Create a complex type whose components are COMPONENT_TYPE.
8823
8824    If NAMED is true, the type is given a TYPE_NAME.  We do not always
8825    do so because this creates a DECL node and thus make the DECL_UIDs
8826    dependent on the type canonicalization hashtable, which is GC-ed,
8827    so the DECL_UIDs would not be stable wrt garbage collection.  */
8828
8829 tree
8830 build_complex_type (tree component_type, bool named)
8831 {
8832   tree t;
8833
8834   gcc_assert (INTEGRAL_TYPE_P (component_type)
8835               || SCALAR_FLOAT_TYPE_P (component_type)
8836               || FIXED_POINT_TYPE_P (component_type));
8837
8838   /* Make a node of the sort we want.  */
8839   t = make_node (COMPLEX_TYPE);
8840
8841   TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8842
8843   /* If we already have such a type, use the old one.  */
8844   hashval_t hash = type_hash_canon_hash (t);
8845   t = type_hash_canon (hash, t);
8846
8847   if (!COMPLETE_TYPE_P (t))
8848     layout_type (t);
8849
8850   if (TYPE_CANONICAL (t) == t)
8851     {
8852       if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8853         SET_TYPE_STRUCTURAL_EQUALITY (t);
8854       else if (TYPE_CANONICAL (component_type) != component_type)
8855         TYPE_CANONICAL (t)
8856           = build_complex_type (TYPE_CANONICAL (component_type), named);
8857     }
8858
8859   /* We need to create a name, since complex is a fundamental type.  */
8860   if (!TYPE_NAME (t) && named)
8861     {
8862       const char *name;
8863       if (component_type == char_type_node)
8864         name = "complex char";
8865       else if (component_type == signed_char_type_node)
8866         name = "complex signed char";
8867       else if (component_type == unsigned_char_type_node)
8868         name = "complex unsigned char";
8869       else if (component_type == short_integer_type_node)
8870         name = "complex short int";
8871       else if (component_type == short_unsigned_type_node)
8872         name = "complex short unsigned int";
8873       else if (component_type == integer_type_node)
8874         name = "complex int";
8875       else if (component_type == unsigned_type_node)
8876         name = "complex unsigned int";
8877       else if (component_type == long_integer_type_node)
8878         name = "complex long int";
8879       else if (component_type == long_unsigned_type_node)
8880         name = "complex long unsigned int";
8881       else if (component_type == long_long_integer_type_node)
8882         name = "complex long long int";
8883       else if (component_type == long_long_unsigned_type_node)
8884         name = "complex long long unsigned int";
8885       else
8886         name = 0;
8887
8888       if (name != 0)
8889         TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8890                                     get_identifier (name), t);
8891     }
8892
8893   return build_qualified_type (t, TYPE_QUALS (component_type));
8894 }
8895
8896 /* If TYPE is a real or complex floating-point type and the target
8897    does not directly support arithmetic on TYPE then return the wider
8898    type to be used for arithmetic on TYPE.  Otherwise, return
8899    NULL_TREE.  */
8900
8901 tree
8902 excess_precision_type (tree type)
8903 {
8904   /* The target can give two different responses to the question of
8905      which excess precision mode it would like depending on whether we
8906      are in -fexcess-precision=standard or -fexcess-precision=fast.  */
8907
8908   enum excess_precision_type requested_type
8909     = (flag_excess_precision == EXCESS_PRECISION_FAST
8910        ? EXCESS_PRECISION_TYPE_FAST
8911        : EXCESS_PRECISION_TYPE_STANDARD);
8912
8913   enum flt_eval_method target_flt_eval_method
8914     = targetm.c.excess_precision (requested_type);
8915
8916   /* The target should not ask for unpredictable float evaluation (though
8917      it might advertise that implicitly the evaluation is unpredictable,
8918      but we don't care about that here, it will have been reported
8919      elsewhere).  If it does ask for unpredictable evaluation, we have
8920      nothing to do here.  */
8921   gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE);
8922
8923   /* Nothing to do.  The target has asked for all types we know about
8924      to be computed with their native precision and range.  */
8925   if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16)
8926     return NULL_TREE;
8927
8928   /* The target will promote this type in a target-dependent way, so excess
8929      precision ought to leave it alone.  */
8930   if (targetm.promoted_type (type) != NULL_TREE)
8931     return NULL_TREE;
8932
8933   machine_mode float16_type_mode = (float16_type_node
8934                                     ? TYPE_MODE (float16_type_node)
8935                                     : VOIDmode);
8936   machine_mode float_type_mode = TYPE_MODE (float_type_node);
8937   machine_mode double_type_mode = TYPE_MODE (double_type_node);
8938
8939   switch (TREE_CODE (type))
8940     {
8941     case REAL_TYPE:
8942       {
8943         machine_mode type_mode = TYPE_MODE (type);
8944         switch (target_flt_eval_method)
8945           {
8946           case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8947             if (type_mode == float16_type_mode)
8948               return float_type_node;
8949             break;
8950           case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8951             if (type_mode == float16_type_mode
8952                 || type_mode == float_type_mode)
8953               return double_type_node;
8954             break;
8955           case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8956             if (type_mode == float16_type_mode
8957                 || type_mode == float_type_mode
8958                 || type_mode == double_type_mode)
8959               return long_double_type_node;
8960             break;
8961           default:
8962             gcc_unreachable ();
8963           }
8964         break;
8965       }
8966     case COMPLEX_TYPE:
8967       {
8968         if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8969           return NULL_TREE;
8970         machine_mode type_mode = TYPE_MODE (TREE_TYPE (type));
8971         switch (target_flt_eval_method)
8972           {
8973           case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8974             if (type_mode == float16_type_mode)
8975               return complex_float_type_node;
8976             break;
8977           case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8978             if (type_mode == float16_type_mode
8979                 || type_mode == float_type_mode)
8980               return complex_double_type_node;
8981             break;
8982           case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8983             if (type_mode == float16_type_mode
8984                 || type_mode == float_type_mode
8985                 || type_mode == double_type_mode)
8986               return complex_long_double_type_node;
8987             break;
8988           default:
8989             gcc_unreachable ();
8990           }
8991         break;
8992       }
8993     default:
8994       break;
8995     }
8996
8997   return NULL_TREE;
8998 }
8999 \f
9000 /* Return OP, stripped of any conversions to wider types as much as is safe.
9001    Converting the value back to OP's type makes a value equivalent to OP.
9002
9003    If FOR_TYPE is nonzero, we return a value which, if converted to
9004    type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
9005
9006    OP must have integer, real or enumeral type.  Pointers are not allowed!
9007
9008    There are some cases where the obvious value we could return
9009    would regenerate to OP if converted to OP's type,
9010    but would not extend like OP to wider types.
9011    If FOR_TYPE indicates such extension is contemplated, we eschew such values.
9012    For example, if OP is (unsigned short)(signed char)-1,
9013    we avoid returning (signed char)-1 if FOR_TYPE is int,
9014    even though extending that to an unsigned short would regenerate OP,
9015    since the result of extending (signed char)-1 to (int)
9016    is different from (int) OP.  */
9017
9018 tree
9019 get_unwidened (tree op, tree for_type)
9020 {
9021   /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension.  */
9022   tree type = TREE_TYPE (op);
9023   unsigned final_prec
9024     = TYPE_PRECISION (for_type != 0 ? for_type : type);
9025   int uns
9026     = (for_type != 0 && for_type != type
9027        && final_prec > TYPE_PRECISION (type)
9028        && TYPE_UNSIGNED (type));
9029   tree win = op;
9030
9031   while (CONVERT_EXPR_P (op))
9032     {
9033       int bitschange;
9034
9035       /* TYPE_PRECISION on vector types has different meaning
9036          (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
9037          so avoid them here.  */
9038       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
9039         break;
9040
9041       bitschange = TYPE_PRECISION (TREE_TYPE (op))
9042                    - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
9043
9044       /* Truncations are many-one so cannot be removed.
9045          Unless we are later going to truncate down even farther.  */
9046       if (bitschange < 0
9047           && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
9048         break;
9049
9050       /* See what's inside this conversion.  If we decide to strip it,
9051          we will set WIN.  */
9052       op = TREE_OPERAND (op, 0);
9053
9054       /* If we have not stripped any zero-extensions (uns is 0),
9055          we can strip any kind of extension.
9056          If we have previously stripped a zero-extension,
9057          only zero-extensions can safely be stripped.
9058          Any extension can be stripped if the bits it would produce
9059          are all going to be discarded later by truncating to FOR_TYPE.  */
9060
9061       if (bitschange > 0)
9062         {
9063           if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
9064             win = op;
9065           /* TYPE_UNSIGNED says whether this is a zero-extension.
9066              Let's avoid computing it if it does not affect WIN
9067              and if UNS will not be needed again.  */
9068           if ((uns
9069                || CONVERT_EXPR_P (op))
9070               && TYPE_UNSIGNED (TREE_TYPE (op)))
9071             {
9072               uns = 1;
9073               win = op;
9074             }
9075         }
9076     }
9077
9078   /* If we finally reach a constant see if it fits in sth smaller and
9079      in that case convert it.  */
9080   if (TREE_CODE (win) == INTEGER_CST)
9081     {
9082       tree wtype = TREE_TYPE (win);
9083       unsigned prec = wi::min_precision (win, TYPE_SIGN (wtype));
9084       if (for_type)
9085         prec = MAX (prec, final_prec);
9086       if (prec < TYPE_PRECISION (wtype))
9087         {
9088           tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype));
9089           if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype))
9090             win = fold_convert (t, win);
9091         }
9092     }
9093
9094   return win;
9095 }
9096 \f
9097 /* Return OP or a simpler expression for a narrower value
9098    which can be sign-extended or zero-extended to give back OP.
9099    Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
9100    or 0 if the value should be sign-extended.  */
9101
9102 tree
9103 get_narrower (tree op, int *unsignedp_ptr)
9104 {
9105   int uns = 0;
9106   int first = 1;
9107   tree win = op;
9108   bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
9109
9110   while (TREE_CODE (op) == NOP_EXPR)
9111     {
9112       int bitschange
9113         = (TYPE_PRECISION (TREE_TYPE (op))
9114            - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
9115
9116       /* Truncations are many-one so cannot be removed.  */
9117       if (bitschange < 0)
9118         break;
9119
9120       /* See what's inside this conversion.  If we decide to strip it,
9121          we will set WIN.  */
9122
9123       if (bitschange > 0)
9124         {
9125           op = TREE_OPERAND (op, 0);
9126           /* An extension: the outermost one can be stripped,
9127              but remember whether it is zero or sign extension.  */
9128           if (first)
9129             uns = TYPE_UNSIGNED (TREE_TYPE (op));
9130           /* Otherwise, if a sign extension has been stripped,
9131              only sign extensions can now be stripped;
9132              if a zero extension has been stripped, only zero-extensions.  */
9133           else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
9134             break;
9135           first = 0;
9136         }
9137       else /* bitschange == 0 */
9138         {
9139           /* A change in nominal type can always be stripped, but we must
9140              preserve the unsignedness.  */
9141           if (first)
9142             uns = TYPE_UNSIGNED (TREE_TYPE (op));
9143           first = 0;
9144           op = TREE_OPERAND (op, 0);
9145           /* Keep trying to narrow, but don't assign op to win if it
9146              would turn an integral type into something else.  */
9147           if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
9148             continue;
9149         }
9150
9151       win = op;
9152     }
9153
9154   if (TREE_CODE (op) == COMPONENT_REF
9155       /* Since type_for_size always gives an integer type.  */
9156       && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
9157       && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
9158       /* Ensure field is laid out already.  */
9159       && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
9160       && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
9161     {
9162       unsigned HOST_WIDE_INT innerprec
9163         = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
9164       int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
9165                        || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
9166       tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
9167
9168       /* We can get this structure field in a narrower type that fits it,
9169          but the resulting extension to its nominal type (a fullword type)
9170          must satisfy the same conditions as for other extensions.
9171
9172          Do this only for fields that are aligned (not bit-fields),
9173          because when bit-field insns will be used there is no
9174          advantage in doing this.  */
9175
9176       if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
9177           && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
9178           && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
9179           && type != 0)
9180         {
9181           if (first)
9182             uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
9183           win = fold_convert (type, op);
9184         }
9185     }
9186
9187   *unsignedp_ptr = uns;
9188   return win;
9189 }
9190 \f
9191 /* Return true if integer constant C has a value that is permissible
9192    for TYPE, an integral type.  */
9193
9194 bool
9195 int_fits_type_p (const_tree c, const_tree type)
9196 {
9197   tree type_low_bound, type_high_bound;
9198   bool ok_for_low_bound, ok_for_high_bound;
9199   signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
9200
9201   /* Non-standard boolean types can have arbitrary precision but various
9202      transformations assume that they can only take values 0 and +/-1.  */
9203   if (TREE_CODE (type) == BOOLEAN_TYPE)
9204     return wi::fits_to_boolean_p (c, type);
9205
9206 retry:
9207   type_low_bound = TYPE_MIN_VALUE (type);
9208   type_high_bound = TYPE_MAX_VALUE (type);
9209
9210   /* If at least one bound of the type is a constant integer, we can check
9211      ourselves and maybe make a decision. If no such decision is possible, but
9212      this type is a subtype, try checking against that.  Otherwise, use
9213      fits_to_tree_p, which checks against the precision.
9214
9215      Compute the status for each possibly constant bound, and return if we see
9216      one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
9217      for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
9218      for "constant known to fit".  */
9219
9220   /* Check if c >= type_low_bound.  */
9221   if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
9222     {
9223       if (tree_int_cst_lt (c, type_low_bound))
9224         return false;
9225       ok_for_low_bound = true;
9226     }
9227   else
9228     ok_for_low_bound = false;
9229
9230   /* Check if c <= type_high_bound.  */
9231   if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
9232     {
9233       if (tree_int_cst_lt (type_high_bound, c))
9234         return false;
9235       ok_for_high_bound = true;
9236     }
9237   else
9238     ok_for_high_bound = false;
9239
9240   /* If the constant fits both bounds, the result is known.  */
9241   if (ok_for_low_bound && ok_for_high_bound)
9242     return true;
9243
9244   /* Perform some generic filtering which may allow making a decision
9245      even if the bounds are not constant.  First, negative integers
9246      never fit in unsigned types, */
9247   if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (c))
9248     return false;
9249
9250   /* Second, narrower types always fit in wider ones.  */
9251   if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
9252     return true;
9253
9254   /* Third, unsigned integers with top bit set never fit signed types.  */
9255   if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
9256     {
9257       int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
9258       if (prec < TYPE_PRECISION (TREE_TYPE (c)))
9259         {
9260           /* When a tree_cst is converted to a wide-int, the precision
9261              is taken from the type.  However, if the precision of the
9262              mode underneath the type is smaller than that, it is
9263              possible that the value will not fit.  The test below
9264              fails if any bit is set between the sign bit of the
9265              underlying mode and the top bit of the type.  */
9266           if (wi::ne_p (wi::zext (c, prec - 1), c))
9267             return false;
9268         }
9269       else if (wi::neg_p (c))
9270         return false;
9271     }
9272
9273   /* If we haven't been able to decide at this point, there nothing more we
9274      can check ourselves here.  Look at the base type if we have one and it
9275      has the same precision.  */
9276   if (TREE_CODE (type) == INTEGER_TYPE
9277       && TREE_TYPE (type) != 0
9278       && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
9279     {
9280       type = TREE_TYPE (type);
9281       goto retry;
9282     }
9283
9284   /* Or to fits_to_tree_p, if nothing else.  */
9285   return wi::fits_to_tree_p (c, type);
9286 }
9287
9288 /* Stores bounds of an integer TYPE in MIN and MAX.  If TYPE has non-constant
9289    bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
9290    represented (assuming two's-complement arithmetic) within the bit
9291    precision of the type are returned instead.  */
9292
9293 void
9294 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
9295 {
9296   if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
9297       && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
9298     wi::to_mpz (TYPE_MIN_VALUE (type), min, TYPE_SIGN (type));
9299   else
9300     {
9301       if (TYPE_UNSIGNED (type))
9302         mpz_set_ui (min, 0);
9303       else
9304         {
9305           wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
9306           wi::to_mpz (mn, min, SIGNED);
9307         }
9308     }
9309
9310   if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
9311       && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
9312     wi::to_mpz (TYPE_MAX_VALUE (type), max, TYPE_SIGN (type));
9313   else
9314     {
9315       wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
9316       wi::to_mpz (mn, max, TYPE_SIGN (type));
9317     }
9318 }
9319
9320 /* Return true if VAR is an automatic variable defined in function FN.  */
9321
9322 bool
9323 auto_var_in_fn_p (const_tree var, const_tree fn)
9324 {
9325   return (DECL_P (var) && DECL_CONTEXT (var) == fn
9326           && ((((VAR_P (var) && ! DECL_EXTERNAL (var))
9327                 || TREE_CODE (var) == PARM_DECL)
9328                && ! TREE_STATIC (var))
9329               || TREE_CODE (var) == LABEL_DECL
9330               || TREE_CODE (var) == RESULT_DECL));
9331 }
9332
9333 /* Subprogram of following function.  Called by walk_tree.
9334
9335    Return *TP if it is an automatic variable or parameter of the
9336    function passed in as DATA.  */
9337
9338 static tree
9339 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
9340 {
9341   tree fn = (tree) data;
9342
9343   if (TYPE_P (*tp))
9344     *walk_subtrees = 0;
9345
9346   else if (DECL_P (*tp)
9347            && auto_var_in_fn_p (*tp, fn))
9348     return *tp;
9349
9350   return NULL_TREE;
9351 }
9352
9353 /* Returns true if T is, contains, or refers to a type with variable
9354    size.  For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
9355    arguments, but not the return type.  If FN is nonzero, only return
9356    true if a modifier of the type or position of FN is a variable or
9357    parameter inside FN.
9358
9359    This concept is more general than that of C99 'variably modified types':
9360    in C99, a struct type is never variably modified because a VLA may not
9361    appear as a structure member.  However, in GNU C code like:
9362
9363      struct S { int i[f()]; };
9364
9365    is valid, and other languages may define similar constructs.  */
9366
9367 bool
9368 variably_modified_type_p (tree type, tree fn)
9369 {
9370   tree t;
9371
9372 /* Test if T is either variable (if FN is zero) or an expression containing
9373    a variable in FN.  If TYPE isn't gimplified, return true also if
9374    gimplify_one_sizepos would gimplify the expression into a local
9375    variable.  */
9376 #define RETURN_TRUE_IF_VAR(T)                                           \
9377   do { tree _t = (T);                                                   \
9378     if (_t != NULL_TREE                                                 \
9379         && _t != error_mark_node                                        \
9380         && TREE_CODE (_t) != INTEGER_CST                                \
9381         && TREE_CODE (_t) != PLACEHOLDER_EXPR                           \
9382         && (!fn                                                         \
9383             || (!TYPE_SIZES_GIMPLIFIED (type)                           \
9384                 && !is_gimple_sizepos (_t))                             \
9385             || walk_tree (&_t, find_var_from_fn, fn, NULL)))            \
9386       return true;  } while (0)
9387
9388   if (type == error_mark_node)
9389     return false;
9390
9391   /* If TYPE itself has variable size, it is variably modified.  */
9392   RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
9393   RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
9394
9395   switch (TREE_CODE (type))
9396     {
9397     case POINTER_TYPE:
9398     case REFERENCE_TYPE:
9399     case VECTOR_TYPE:
9400       if (variably_modified_type_p (TREE_TYPE (type), fn))
9401         return true;
9402       break;
9403
9404     case FUNCTION_TYPE:
9405     case METHOD_TYPE:
9406       /* If TYPE is a function type, it is variably modified if the
9407          return type is variably modified.  */
9408       if (variably_modified_type_p (TREE_TYPE (type), fn))
9409           return true;
9410       break;
9411
9412     case INTEGER_TYPE:
9413     case REAL_TYPE:
9414     case FIXED_POINT_TYPE:
9415     case ENUMERAL_TYPE:
9416     case BOOLEAN_TYPE:
9417       /* Scalar types are variably modified if their end points
9418          aren't constant.  */
9419       RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
9420       RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
9421       break;
9422
9423     case RECORD_TYPE:
9424     case UNION_TYPE:
9425     case QUAL_UNION_TYPE:
9426       /* We can't see if any of the fields are variably-modified by the
9427          definition we normally use, since that would produce infinite
9428          recursion via pointers.  */
9429       /* This is variably modified if some field's type is.  */
9430       for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
9431         if (TREE_CODE (t) == FIELD_DECL)
9432           {
9433             RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
9434             RETURN_TRUE_IF_VAR (DECL_SIZE (t));
9435             RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
9436
9437             if (TREE_CODE (type) == QUAL_UNION_TYPE)
9438               RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
9439           }
9440       break;
9441
9442     case ARRAY_TYPE:
9443       /* Do not call ourselves to avoid infinite recursion.  This is
9444          variably modified if the element type is.  */
9445       RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
9446       RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
9447       break;
9448
9449     default:
9450       break;
9451     }
9452
9453   /* The current language may have other cases to check, but in general,
9454      all other types are not variably modified.  */
9455   return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
9456
9457 #undef RETURN_TRUE_IF_VAR
9458 }
9459
9460 /* Given a DECL or TYPE, return the scope in which it was declared, or
9461    NULL_TREE if there is no containing scope.  */
9462
9463 tree
9464 get_containing_scope (const_tree t)
9465 {
9466   return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
9467 }
9468
9469 /* Return the innermost context enclosing DECL that is
9470    a FUNCTION_DECL, or zero if none.  */
9471
9472 tree
9473 decl_function_context (const_tree decl)
9474 {
9475   tree context;
9476
9477   if (TREE_CODE (decl) == ERROR_MARK)
9478     return 0;
9479
9480   /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
9481      where we look up the function at runtime.  Such functions always take
9482      a first argument of type 'pointer to real context'.
9483
9484      C++ should really be fixed to use DECL_CONTEXT for the real context,
9485      and use something else for the "virtual context".  */
9486   else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
9487     context
9488       = TYPE_MAIN_VARIANT
9489         (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
9490   else
9491     context = DECL_CONTEXT (decl);
9492
9493   while (context && TREE_CODE (context) != FUNCTION_DECL)
9494     {
9495       if (TREE_CODE (context) == BLOCK)
9496         context = BLOCK_SUPERCONTEXT (context);
9497       else
9498         context = get_containing_scope (context);
9499     }
9500
9501   return context;
9502 }
9503
9504 /* Return the innermost context enclosing DECL that is
9505    a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9506    TYPE_DECLs and FUNCTION_DECLs are transparent to this function.  */
9507
9508 tree
9509 decl_type_context (const_tree decl)
9510 {
9511   tree context = DECL_CONTEXT (decl);
9512
9513   while (context)
9514     switch (TREE_CODE (context))
9515       {
9516       case NAMESPACE_DECL:
9517       case TRANSLATION_UNIT_DECL:
9518         return NULL_TREE;
9519
9520       case RECORD_TYPE:
9521       case UNION_TYPE:
9522       case QUAL_UNION_TYPE:
9523         return context;
9524
9525       case TYPE_DECL:
9526       case FUNCTION_DECL:
9527         context = DECL_CONTEXT (context);
9528         break;
9529
9530       case BLOCK:
9531         context = BLOCK_SUPERCONTEXT (context);
9532         break;
9533
9534       default:
9535         gcc_unreachable ();
9536       }
9537
9538   return NULL_TREE;
9539 }
9540
9541 /* CALL is a CALL_EXPR.  Return the declaration for the function
9542    called, or NULL_TREE if the called function cannot be
9543    determined.  */
9544
9545 tree
9546 get_callee_fndecl (const_tree call)
9547 {
9548   tree addr;
9549
9550   if (call == error_mark_node)
9551     return error_mark_node;
9552
9553   /* It's invalid to call this function with anything but a
9554      CALL_EXPR.  */
9555   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9556
9557   /* The first operand to the CALL is the address of the function
9558      called.  */
9559   addr = CALL_EXPR_FN (call);
9560
9561   /* If there is no function, return early.  */
9562   if (addr == NULL_TREE)
9563     return NULL_TREE;
9564
9565   STRIP_NOPS (addr);
9566
9567   /* If this is a readonly function pointer, extract its initial value.  */
9568   if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9569       && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9570       && DECL_INITIAL (addr))
9571     addr = DECL_INITIAL (addr);
9572
9573   /* If the address is just `&f' for some function `f', then we know
9574      that `f' is being called.  */
9575   if (TREE_CODE (addr) == ADDR_EXPR
9576       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9577     return TREE_OPERAND (addr, 0);
9578
9579   /* We couldn't figure out what was being called.  */
9580   return NULL_TREE;
9581 }
9582
9583 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
9584    return the associated function code, otherwise return CFN_LAST.  */
9585
9586 combined_fn
9587 get_call_combined_fn (const_tree call)
9588 {
9589   /* It's invalid to call this function with anything but a CALL_EXPR.  */
9590   gcc_assert (TREE_CODE (call) == CALL_EXPR);
9591
9592   if (!CALL_EXPR_FN (call))
9593     return as_combined_fn (CALL_EXPR_IFN (call));
9594
9595   tree fndecl = get_callee_fndecl (call);
9596   if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
9597     return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
9598
9599   return CFN_LAST;
9600 }
9601
9602 #define TREE_MEM_USAGE_SPACES 40
9603
9604 /* Print debugging information about tree nodes generated during the compile,
9605    and any language-specific information.  */
9606
9607 void
9608 dump_tree_statistics (void)
9609 {
9610   if (GATHER_STATISTICS)
9611     {
9612       int i;
9613       int total_nodes, total_bytes;
9614       fprintf (stderr, "\nKind                   Nodes      Bytes\n");
9615       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9616       total_nodes = total_bytes = 0;
9617       for (i = 0; i < (int) all_kinds; i++)
9618         {
9619           fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9620                    tree_node_counts[i], tree_node_sizes[i]);
9621           total_nodes += tree_node_counts[i];
9622           total_bytes += tree_node_sizes[i];
9623         }
9624       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9625       fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9626       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9627       fprintf (stderr, "Code                   Nodes\n");
9628       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9629       for (i = 0; i < (int) MAX_TREE_CODES; i++)
9630         fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i),
9631                  tree_code_counts[i]);
9632       mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9633       fprintf (stderr, "\n");
9634       ssanames_print_statistics ();
9635       fprintf (stderr, "\n");
9636       phinodes_print_statistics ();
9637       fprintf (stderr, "\n");
9638     }
9639   else
9640     fprintf (stderr, "(No per-node statistics)\n");
9641
9642   print_type_hash_statistics ();
9643   print_debug_expr_statistics ();
9644   print_value_expr_statistics ();
9645   lang_hooks.print_statistics ();
9646 }
9647 \f
9648 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9649
9650 /* Generate a crc32 of the low BYTES bytes of VALUE.  */
9651
9652 unsigned
9653 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes)
9654 {
9655   /* This relies on the raw feedback's top 4 bits being zero.  */
9656 #define FEEDBACK(X) ((X) * 0x04c11db7)
9657 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \
9658                      ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8))
9659   static const unsigned syndromes[16] =
9660     {
9661       SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3),
9662       SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7),
9663       SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb),
9664       SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf),
9665     };
9666 #undef FEEDBACK
9667 #undef SYNDROME
9668
9669   value <<= (32 - bytes * 8);
9670   for (unsigned ix = bytes * 2; ix--; value <<= 4)
9671     {
9672       unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf];
9673
9674       chksum = (chksum << 4) ^ feedback;
9675     }
9676
9677   return chksum;
9678 }
9679
9680 /* Generate a crc32 of a string.  */
9681
9682 unsigned
9683 crc32_string (unsigned chksum, const char *string)
9684 {
9685   do
9686     chksum = crc32_byte (chksum, *string);
9687   while (*string++);
9688   return chksum;
9689 }
9690
9691 /* P is a string that will be used in a symbol.  Mask out any characters
9692    that are not valid in that context.  */
9693
9694 void
9695 clean_symbol_name (char *p)
9696 {
9697   for (; *p; p++)
9698     if (! (ISALNUM (*p)
9699 #ifndef NO_DOLLAR_IN_LABEL      /* this for `$'; unlikely, but... -- kr */
9700             || *p == '$'
9701 #endif
9702 #ifndef NO_DOT_IN_LABEL         /* this for `.'; unlikely, but...  */
9703             || *p == '.'
9704 #endif
9705            ))
9706       *p = '_';
9707 }
9708
9709 /* For anonymous aggregate types, we need some sort of name to
9710    hold on to.  In practice, this should not appear, but it should
9711    not be harmful if it does.  */
9712 bool 
9713 anon_aggrname_p(const_tree id_node)
9714 {
9715 #ifndef NO_DOT_IN_LABEL
9716  return (IDENTIFIER_POINTER (id_node)[0] == '.'
9717          && IDENTIFIER_POINTER (id_node)[1] == '_');
9718 #else /* NO_DOT_IN_LABEL */
9719 #ifndef NO_DOLLAR_IN_LABEL
9720   return (IDENTIFIER_POINTER (id_node)[0] == '$' \
9721           && IDENTIFIER_POINTER (id_node)[1] == '_');
9722 #else /* NO_DOLLAR_IN_LABEL */
9723 #define ANON_AGGRNAME_PREFIX "__anon_"
9724   return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX, 
9725                     sizeof (ANON_AGGRNAME_PREFIX) - 1));
9726 #endif  /* NO_DOLLAR_IN_LABEL */
9727 #endif  /* NO_DOT_IN_LABEL */
9728 }
9729
9730 /* Return a format for an anonymous aggregate name.  */
9731 const char *
9732 anon_aggrname_format()
9733 {
9734 #ifndef NO_DOT_IN_LABEL
9735  return "._%d";
9736 #else /* NO_DOT_IN_LABEL */
9737 #ifndef NO_DOLLAR_IN_LABEL
9738   return "$_%d";
9739 #else /* NO_DOLLAR_IN_LABEL */
9740   return "__anon_%d";
9741 #endif  /* NO_DOLLAR_IN_LABEL */
9742 #endif  /* NO_DOT_IN_LABEL */
9743 }
9744
9745 /* Generate a name for a special-purpose function.
9746    The generated name may need to be unique across the whole link.
9747    Changes to this function may also require corresponding changes to
9748    xstrdup_mask_random.
9749    TYPE is some string to identify the purpose of this function to the
9750    linker or collect2; it must start with an uppercase letter,
9751    one of:
9752    I - for constructors
9753    D - for destructors
9754    N - for C++ anonymous namespaces
9755    F - for DWARF unwind frame information.  */
9756
9757 tree
9758 get_file_function_name (const char *type)
9759 {
9760   char *buf;
9761   const char *p;
9762   char *q;
9763
9764   /* If we already have a name we know to be unique, just use that.  */
9765   if (first_global_object_name)
9766     p = q = ASTRDUP (first_global_object_name);
9767   /* If the target is handling the constructors/destructors, they
9768      will be local to this file and the name is only necessary for
9769      debugging purposes. 
9770      We also assign sub_I and sub_D sufixes to constructors called from
9771      the global static constructors.  These are always local.  */
9772   else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9773            || (strncmp (type, "sub_", 4) == 0
9774                && (type[4] == 'I' || type[4] == 'D')))
9775     {
9776       const char *file = main_input_filename;
9777       if (! file)
9778         file = LOCATION_FILE (input_location);
9779       /* Just use the file's basename, because the full pathname
9780          might be quite long.  */
9781       p = q = ASTRDUP (lbasename (file));
9782     }
9783   else
9784     {
9785       /* Otherwise, the name must be unique across the entire link.
9786          We don't have anything that we know to be unique to this translation
9787          unit, so use what we do have and throw in some randomness.  */
9788       unsigned len;
9789       const char *name = weak_global_object_name;
9790       const char *file = main_input_filename;
9791
9792       if (! name)
9793         name = "";
9794       if (! file)
9795         file = LOCATION_FILE (input_location);
9796
9797       len = strlen (file);
9798       q = (char *) alloca (9 + 19 + len + 1);
9799       memcpy (q, file, len + 1);
9800
9801       snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9802                 crc32_string (0, name), get_random_seed (false));
9803
9804       p = q;
9805     }
9806
9807   clean_symbol_name (q);
9808   buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9809                          + strlen (type));
9810
9811   /* Set up the name of the file-level functions we may need.
9812      Use a global object (which is already required to be unique over
9813      the program) rather than the file name (which imposes extra
9814      constraints).  */
9815   sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9816
9817   return get_identifier (buf);
9818 }
9819 \f
9820 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9821
9822 /* Complain that the tree code of NODE does not match the expected 0
9823    terminated list of trailing codes. The trailing code list can be
9824    empty, for a more vague error message.  FILE, LINE, and FUNCTION
9825    are of the caller.  */
9826
9827 void
9828 tree_check_failed (const_tree node, const char *file,
9829                    int line, const char *function, ...)
9830 {
9831   va_list args;
9832   const char *buffer;
9833   unsigned length = 0;
9834   enum tree_code code;
9835
9836   va_start (args, function);
9837   while ((code = (enum tree_code) va_arg (args, int)))
9838     length += 4 + strlen (get_tree_code_name (code));
9839   va_end (args);
9840   if (length)
9841     {
9842       char *tmp;
9843       va_start (args, function);
9844       length += strlen ("expected ");
9845       buffer = tmp = (char *) alloca (length);
9846       length = 0;
9847       while ((code = (enum tree_code) va_arg (args, int)))
9848         {
9849           const char *prefix = length ? " or " : "expected ";
9850
9851           strcpy (tmp + length, prefix);
9852           length += strlen (prefix);
9853           strcpy (tmp + length, get_tree_code_name (code));
9854           length += strlen (get_tree_code_name (code));
9855         }
9856       va_end (args);
9857     }
9858   else
9859     buffer = "unexpected node";
9860
9861   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9862                   buffer, get_tree_code_name (TREE_CODE (node)),
9863                   function, trim_filename (file), line);
9864 }
9865
9866 /* Complain that the tree code of NODE does match the expected 0
9867    terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9868    the caller.  */
9869
9870 void
9871 tree_not_check_failed (const_tree node, const char *file,
9872                        int line, const char *function, ...)
9873 {
9874   va_list args;
9875   char *buffer;
9876   unsigned length = 0;
9877   enum tree_code code;
9878
9879   va_start (args, function);
9880   while ((code = (enum tree_code) va_arg (args, int)))
9881     length += 4 + strlen (get_tree_code_name (code));
9882   va_end (args);
9883   va_start (args, function);
9884   buffer = (char *) alloca (length);
9885   length = 0;
9886   while ((code = (enum tree_code) va_arg (args, int)))
9887     {
9888       if (length)
9889         {
9890           strcpy (buffer + length, " or ");
9891           length += 4;
9892         }
9893       strcpy (buffer + length, get_tree_code_name (code));
9894       length += strlen (get_tree_code_name (code));
9895     }
9896   va_end (args);
9897
9898   internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9899                   buffer, get_tree_code_name (TREE_CODE (node)),
9900                   function, trim_filename (file), line);
9901 }
9902
9903 /* Similar to tree_check_failed, except that we check for a class of tree
9904    code, given in CL.  */
9905
9906 void
9907 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9908                          const char *file, int line, const char *function)
9909 {
9910   internal_error
9911     ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9912      TREE_CODE_CLASS_STRING (cl),
9913      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9914      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9915 }
9916
9917 /* Similar to tree_check_failed, except that instead of specifying a
9918    dozen codes, use the knowledge that they're all sequential.  */
9919
9920 void
9921 tree_range_check_failed (const_tree node, const char *file, int line,
9922                          const char *function, enum tree_code c1,
9923                          enum tree_code c2)
9924 {
9925   char *buffer;
9926   unsigned length = 0;
9927   unsigned int c;
9928
9929   for (c = c1; c <= c2; ++c)
9930     length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9931
9932   length += strlen ("expected ");
9933   buffer = (char *) alloca (length);
9934   length = 0;
9935
9936   for (c = c1; c <= c2; ++c)
9937     {
9938       const char *prefix = length ? " or " : "expected ";
9939
9940       strcpy (buffer + length, prefix);
9941       length += strlen (prefix);
9942       strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9943       length += strlen (get_tree_code_name ((enum tree_code) c));
9944     }
9945
9946   internal_error ("tree check: %s, have %s in %s, at %s:%d",
9947                   buffer, get_tree_code_name (TREE_CODE (node)),
9948                   function, trim_filename (file), line);
9949 }
9950
9951
9952 /* Similar to tree_check_failed, except that we check that a tree does
9953    not have the specified code, given in CL.  */
9954
9955 void
9956 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9957                              const char *file, int line, const char *function)
9958 {
9959   internal_error
9960     ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9961      TREE_CODE_CLASS_STRING (cl),
9962      TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9963      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9964 }
9965
9966
9967 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes.  */
9968
9969 void
9970 omp_clause_check_failed (const_tree node, const char *file, int line,
9971                          const char *function, enum omp_clause_code code)
9972 {
9973   internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9974                   omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9975                   function, trim_filename (file), line);
9976 }
9977
9978
9979 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes.  */
9980
9981 void
9982 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9983                                const char *function, enum omp_clause_code c1,
9984                                enum omp_clause_code c2)
9985 {
9986   char *buffer;
9987   unsigned length = 0;
9988   unsigned int c;
9989
9990   for (c = c1; c <= c2; ++c)
9991     length += 4 + strlen (omp_clause_code_name[c]);
9992
9993   length += strlen ("expected ");
9994   buffer = (char *) alloca (length);
9995   length = 0;
9996
9997   for (c = c1; c <= c2; ++c)
9998     {
9999       const char *prefix = length ? " or " : "expected ";
10000
10001       strcpy (buffer + length, prefix);
10002       length += strlen (prefix);
10003       strcpy (buffer + length, omp_clause_code_name[c]);
10004       length += strlen (omp_clause_code_name[c]);
10005     }
10006
10007   internal_error ("tree check: %s, have %s in %s, at %s:%d",
10008                   buffer, omp_clause_code_name[TREE_CODE (node)],
10009                   function, trim_filename (file), line);
10010 }
10011
10012
10013 #undef DEFTREESTRUCT
10014 #define DEFTREESTRUCT(VAL, NAME) NAME,
10015
10016 static const char *ts_enum_names[] = {
10017 #include "treestruct.def"
10018 };
10019 #undef DEFTREESTRUCT
10020
10021 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
10022
10023 /* Similar to tree_class_check_failed, except that we check for
10024    whether CODE contains the tree structure identified by EN.  */
10025
10026 void
10027 tree_contains_struct_check_failed (const_tree node,
10028                                    const enum tree_node_structure_enum en,
10029                                    const char *file, int line,
10030                                    const char *function)
10031 {
10032   internal_error
10033     ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
10034      TS_ENUM_NAME (en),
10035      get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
10036 }
10037
10038
10039 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10040    (dynamically sized) vector.  */
10041
10042 void
10043 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
10044                                const char *function)
10045 {
10046   internal_error
10047     ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
10048      idx + 1, len, function, trim_filename (file), line);
10049 }
10050
10051 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10052    (dynamically sized) vector.  */
10053
10054 void
10055 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
10056                            const char *function)
10057 {
10058   internal_error
10059     ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
10060      idx + 1, len, function, trim_filename (file), line);
10061 }
10062
10063 /* Similar to above, except that the check is for the bounds of the operand
10064    vector of an expression node EXP.  */
10065
10066 void
10067 tree_operand_check_failed (int idx, const_tree exp, const char *file,
10068                            int line, const char *function)
10069 {
10070   enum tree_code code = TREE_CODE (exp);
10071   internal_error
10072     ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
10073      idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
10074      function, trim_filename (file), line);
10075 }
10076
10077 /* Similar to above, except that the check is for the number of
10078    operands of an OMP_CLAUSE node.  */
10079
10080 void
10081 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
10082                                  int line, const char *function)
10083 {
10084   internal_error
10085     ("tree check: accessed operand %d of omp_clause %s with %d operands "
10086      "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
10087      omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
10088      trim_filename (file), line);
10089 }
10090 #endif /* ENABLE_TREE_CHECKING */
10091 \f
10092 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
10093    and mapped to the machine mode MODE.  Initialize its fields and build
10094    the information necessary for debugging output.  */
10095
10096 static tree
10097 make_vector_type (tree innertype, int nunits, machine_mode mode)
10098 {
10099   tree t;
10100   tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
10101
10102   t = make_node (VECTOR_TYPE);
10103   TREE_TYPE (t) = mv_innertype;
10104   SET_TYPE_VECTOR_SUBPARTS (t, nunits);
10105   SET_TYPE_MODE (t, mode);
10106
10107   if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
10108     SET_TYPE_STRUCTURAL_EQUALITY (t);
10109   else if ((TYPE_CANONICAL (mv_innertype) != innertype
10110             || mode != VOIDmode)
10111            && !VECTOR_BOOLEAN_TYPE_P (t))
10112     TYPE_CANONICAL (t)
10113       = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
10114
10115   layout_type (t);
10116
10117   hashval_t hash = type_hash_canon_hash (t);
10118   t = type_hash_canon (hash, t);
10119
10120   /* We have built a main variant, based on the main variant of the
10121      inner type. Use it to build the variant we return.  */
10122   if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
10123       && TREE_TYPE (t) != innertype)
10124     return build_type_attribute_qual_variant (t,
10125                                               TYPE_ATTRIBUTES (innertype),
10126                                               TYPE_QUALS (innertype));
10127
10128   return t;
10129 }
10130
10131 static tree
10132 make_or_reuse_type (unsigned size, int unsignedp)
10133 {
10134   int i;
10135
10136   if (size == INT_TYPE_SIZE)
10137     return unsignedp ? unsigned_type_node : integer_type_node;
10138   if (size == CHAR_TYPE_SIZE)
10139     return unsignedp ? unsigned_char_type_node : signed_char_type_node;
10140   if (size == SHORT_TYPE_SIZE)
10141     return unsignedp ? short_unsigned_type_node : short_integer_type_node;
10142   if (size == LONG_TYPE_SIZE)
10143     return unsignedp ? long_unsigned_type_node : long_integer_type_node;
10144   if (size == LONG_LONG_TYPE_SIZE)
10145     return (unsignedp ? long_long_unsigned_type_node
10146             : long_long_integer_type_node);
10147
10148   for (i = 0; i < NUM_INT_N_ENTS; i ++)
10149     if (size == int_n_data[i].bitsize
10150         && int_n_enabled_p[i])
10151       return (unsignedp ? int_n_trees[i].unsigned_type
10152               : int_n_trees[i].signed_type);
10153
10154   if (unsignedp)
10155     return make_unsigned_type (size);
10156   else
10157     return make_signed_type (size);
10158 }
10159
10160 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP.  */
10161
10162 static tree
10163 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
10164 {
10165   if (satp)
10166     {
10167       if (size == SHORT_FRACT_TYPE_SIZE)
10168         return unsignedp ? sat_unsigned_short_fract_type_node
10169                          : sat_short_fract_type_node;
10170       if (size == FRACT_TYPE_SIZE)
10171         return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
10172       if (size == LONG_FRACT_TYPE_SIZE)
10173         return unsignedp ? sat_unsigned_long_fract_type_node
10174                          : sat_long_fract_type_node;
10175       if (size == LONG_LONG_FRACT_TYPE_SIZE)
10176         return unsignedp ? sat_unsigned_long_long_fract_type_node
10177                          : sat_long_long_fract_type_node;
10178     }
10179   else
10180     {
10181       if (size == SHORT_FRACT_TYPE_SIZE)
10182         return unsignedp ? unsigned_short_fract_type_node
10183                          : short_fract_type_node;
10184       if (size == FRACT_TYPE_SIZE)
10185         return unsignedp ? unsigned_fract_type_node : fract_type_node;
10186       if (size == LONG_FRACT_TYPE_SIZE)
10187         return unsignedp ? unsigned_long_fract_type_node
10188                          : long_fract_type_node;
10189       if (size == LONG_LONG_FRACT_TYPE_SIZE)
10190         return unsignedp ? unsigned_long_long_fract_type_node
10191                          : long_long_fract_type_node;
10192     }
10193
10194   return make_fract_type (size, unsignedp, satp);
10195 }
10196
10197 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP.  */
10198
10199 static tree
10200 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
10201 {
10202   if (satp)
10203     {
10204       if (size == SHORT_ACCUM_TYPE_SIZE)
10205         return unsignedp ? sat_unsigned_short_accum_type_node
10206                          : sat_short_accum_type_node;
10207       if (size == ACCUM_TYPE_SIZE)
10208         return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
10209       if (size == LONG_ACCUM_TYPE_SIZE)
10210         return unsignedp ? sat_unsigned_long_accum_type_node
10211                          : sat_long_accum_type_node;
10212       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10213         return unsignedp ? sat_unsigned_long_long_accum_type_node
10214                          : sat_long_long_accum_type_node;
10215     }
10216   else
10217     {
10218       if (size == SHORT_ACCUM_TYPE_SIZE)
10219         return unsignedp ? unsigned_short_accum_type_node
10220                          : short_accum_type_node;
10221       if (size == ACCUM_TYPE_SIZE)
10222         return unsignedp ? unsigned_accum_type_node : accum_type_node;
10223       if (size == LONG_ACCUM_TYPE_SIZE)
10224         return unsignedp ? unsigned_long_accum_type_node
10225                          : long_accum_type_node;
10226       if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10227         return unsignedp ? unsigned_long_long_accum_type_node
10228                          : long_long_accum_type_node;
10229     }
10230
10231   return make_accum_type (size, unsignedp, satp);
10232 }
10233
10234
10235 /* Create an atomic variant node for TYPE.  This routine is called
10236    during initialization of data types to create the 5 basic atomic
10237    types. The generic build_variant_type function requires these to
10238    already be set up in order to function properly, so cannot be
10239    called from there.  If ALIGN is non-zero, then ensure alignment is
10240    overridden to this value.  */
10241
10242 static tree
10243 build_atomic_base (tree type, unsigned int align)
10244 {
10245   tree t;
10246
10247   /* Make sure its not already registered.  */
10248   if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
10249     return t;
10250   
10251   t = build_variant_type_copy (type);
10252   set_type_quals (t, TYPE_QUAL_ATOMIC);
10253
10254   if (align)
10255     SET_TYPE_ALIGN (t, align);
10256
10257   return t;
10258 }
10259
10260 /* Information about the _FloatN and _FloatNx types.  This must be in
10261    the same order as the corresponding TI_* enum values.  */
10262 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
10263   {
10264     { 16, false },
10265     { 32, false },
10266     { 64, false },
10267     { 128, false },
10268     { 32, true },
10269     { 64, true },
10270     { 128, true },
10271   };
10272
10273
10274 /* Create nodes for all integer types (and error_mark_node) using the sizes
10275    of C datatypes.  SIGNED_CHAR specifies whether char is signed.  */
10276
10277 void
10278 build_common_tree_nodes (bool signed_char)
10279 {
10280   int i;
10281
10282   error_mark_node = make_node (ERROR_MARK);
10283   TREE_TYPE (error_mark_node) = error_mark_node;
10284
10285   initialize_sizetypes ();
10286
10287   /* Define both `signed char' and `unsigned char'.  */
10288   signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
10289   TYPE_STRING_FLAG (signed_char_type_node) = 1;
10290   unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
10291   TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
10292
10293   /* Define `char', which is like either `signed char' or `unsigned char'
10294      but not the same as either.  */
10295   char_type_node
10296     = (signed_char
10297        ? make_signed_type (CHAR_TYPE_SIZE)
10298        : make_unsigned_type (CHAR_TYPE_SIZE));
10299   TYPE_STRING_FLAG (char_type_node) = 1;
10300
10301   short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
10302   short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
10303   integer_type_node = make_signed_type (INT_TYPE_SIZE);
10304   unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
10305   long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
10306   long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
10307   long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
10308   long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
10309
10310   for (i = 0; i < NUM_INT_N_ENTS; i ++)
10311     {
10312       int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
10313       int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
10314       TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
10315       TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
10316
10317       if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
10318           && int_n_enabled_p[i])
10319         {
10320           integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
10321           integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
10322         }
10323     }
10324
10325   /* Define a boolean type.  This type only represents boolean values but
10326      may be larger than char depending on the value of BOOL_TYPE_SIZE.  */
10327   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
10328   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
10329   TYPE_PRECISION (boolean_type_node) = 1;
10330   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
10331
10332   /* Define what type to use for size_t.  */
10333   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
10334     size_type_node = unsigned_type_node;
10335   else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
10336     size_type_node = long_unsigned_type_node;
10337   else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
10338     size_type_node = long_long_unsigned_type_node;
10339   else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
10340     size_type_node = short_unsigned_type_node;
10341   else
10342     {
10343       int i;
10344
10345       size_type_node = NULL_TREE;
10346       for (i = 0; i < NUM_INT_N_ENTS; i++)
10347         if (int_n_enabled_p[i])
10348           {
10349             char name[50];
10350             sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
10351
10352             if (strcmp (name, SIZE_TYPE) == 0)
10353               {
10354                 size_type_node = int_n_trees[i].unsigned_type;
10355               }
10356           }
10357       if (size_type_node == NULL_TREE)
10358         gcc_unreachable ();
10359     }
10360
10361   /* Define what type to use for ptrdiff_t.  */
10362   if (strcmp (PTRDIFF_TYPE, "int") == 0)
10363     ptrdiff_type_node = integer_type_node;
10364   else if (strcmp (PTRDIFF_TYPE, "long int") == 0)
10365     ptrdiff_type_node = long_integer_type_node;
10366   else if (strcmp (PTRDIFF_TYPE, "long long int") == 0)
10367     ptrdiff_type_node = long_long_integer_type_node;
10368   else if (strcmp (PTRDIFF_TYPE, "short int") == 0)
10369     ptrdiff_type_node = short_integer_type_node;
10370   else
10371     {
10372       ptrdiff_type_node = NULL_TREE;
10373       for (int i = 0; i < NUM_INT_N_ENTS; i++)
10374         if (int_n_enabled_p[i])
10375           {
10376             char name[50];
10377             sprintf (name, "__int%d", int_n_data[i].bitsize);
10378             if (strcmp (name, PTRDIFF_TYPE) == 0)
10379               ptrdiff_type_node = int_n_trees[i].signed_type;
10380           }
10381       if (ptrdiff_type_node == NULL_TREE)
10382         gcc_unreachable ();
10383     }
10384
10385   /* Fill in the rest of the sized types.  Reuse existing type nodes
10386      when possible.  */
10387   intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
10388   intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
10389   intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
10390   intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
10391   intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
10392
10393   unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
10394   unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
10395   unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
10396   unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
10397   unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
10398
10399   /* Don't call build_qualified type for atomics.  That routine does
10400      special processing for atomics, and until they are initialized
10401      it's better not to make that call.
10402      
10403      Check to see if there is a target override for atomic types.  */
10404
10405   atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
10406                                         targetm.atomic_align_for_mode (QImode));
10407   atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
10408                                         targetm.atomic_align_for_mode (HImode));
10409   atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
10410                                         targetm.atomic_align_for_mode (SImode));
10411   atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
10412                                         targetm.atomic_align_for_mode (DImode));
10413   atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
10414                                         targetm.atomic_align_for_mode (TImode));
10415         
10416   access_public_node = get_identifier ("public");
10417   access_protected_node = get_identifier ("protected");
10418   access_private_node = get_identifier ("private");
10419
10420   /* Define these next since types below may used them.  */
10421   integer_zero_node = build_int_cst (integer_type_node, 0);
10422   integer_one_node = build_int_cst (integer_type_node, 1);
10423   integer_three_node = build_int_cst (integer_type_node, 3);
10424   integer_minus_one_node = build_int_cst (integer_type_node, -1);
10425
10426   size_zero_node = size_int (0);
10427   size_one_node = size_int (1);
10428   bitsize_zero_node = bitsize_int (0);
10429   bitsize_one_node = bitsize_int (1);
10430   bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
10431
10432   boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
10433   boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
10434
10435   void_type_node = make_node (VOID_TYPE);
10436   layout_type (void_type_node);
10437
10438   pointer_bounds_type_node = targetm.chkp_bound_type ();
10439
10440   /* We are not going to have real types in C with less than byte alignment,
10441      so we might as well not have any types that claim to have it.  */
10442   SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT);
10443   TYPE_USER_ALIGN (void_type_node) = 0;
10444
10445   void_node = make_node (VOID_CST);
10446   TREE_TYPE (void_node) = void_type_node;
10447
10448   null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
10449   layout_type (TREE_TYPE (null_pointer_node));
10450
10451   ptr_type_node = build_pointer_type (void_type_node);
10452   const_ptr_type_node
10453     = build_pointer_type (build_type_variant (void_type_node, 1, 0));
10454   for (unsigned i = 0;
10455        i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
10456        ++i)
10457     builtin_structptr_types[i].node = builtin_structptr_types[i].base;
10458
10459   pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
10460
10461   float_type_node = make_node (REAL_TYPE);
10462   TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
10463   layout_type (float_type_node);
10464
10465   double_type_node = make_node (REAL_TYPE);
10466   TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
10467   layout_type (double_type_node);
10468
10469   long_double_type_node = make_node (REAL_TYPE);
10470   TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
10471   layout_type (long_double_type_node);
10472
10473   for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10474     {
10475       int n = floatn_nx_types[i].n;
10476       bool extended = floatn_nx_types[i].extended;
10477       machine_mode mode = targetm.floatn_mode (n, extended);
10478       if (mode == VOIDmode)
10479         continue;
10480       int precision = GET_MODE_PRECISION (mode);
10481       /* Work around the rs6000 KFmode having precision 113 not
10482          128.  */
10483       const struct real_format *fmt = REAL_MODE_FORMAT (mode);
10484       gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3);
10485       int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin);
10486       if (!extended)
10487         gcc_assert (min_precision == n);
10488       if (precision < min_precision)
10489         precision = min_precision;
10490       FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE);
10491       TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision;
10492       layout_type (FLOATN_NX_TYPE_NODE (i));
10493       SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode);
10494     }
10495
10496   float_ptr_type_node = build_pointer_type (float_type_node);
10497   double_ptr_type_node = build_pointer_type (double_type_node);
10498   long_double_ptr_type_node = build_pointer_type (long_double_type_node);
10499   integer_ptr_type_node = build_pointer_type (integer_type_node);
10500
10501   /* Fixed size integer types.  */
10502   uint16_type_node = make_or_reuse_type (16, 1);
10503   uint32_type_node = make_or_reuse_type (32, 1);
10504   uint64_type_node = make_or_reuse_type (64, 1);
10505
10506   /* Decimal float types. */
10507   dfloat32_type_node = make_node (REAL_TYPE);
10508   TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
10509   SET_TYPE_MODE (dfloat32_type_node, SDmode);
10510   layout_type (dfloat32_type_node);
10511   dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
10512
10513   dfloat64_type_node = make_node (REAL_TYPE);
10514   TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
10515   SET_TYPE_MODE (dfloat64_type_node, DDmode);
10516   layout_type (dfloat64_type_node);
10517   dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
10518
10519   dfloat128_type_node = make_node (REAL_TYPE);
10520   TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
10521   SET_TYPE_MODE (dfloat128_type_node, TDmode);
10522   layout_type (dfloat128_type_node);
10523   dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
10524
10525   complex_integer_type_node = build_complex_type (integer_type_node, true);
10526   complex_float_type_node = build_complex_type (float_type_node, true);
10527   complex_double_type_node = build_complex_type (double_type_node, true);
10528   complex_long_double_type_node = build_complex_type (long_double_type_node,
10529                                                       true);
10530
10531   for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10532     {
10533       if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE)
10534         COMPLEX_FLOATN_NX_TYPE_NODE (i)
10535           = build_complex_type (FLOATN_NX_TYPE_NODE (i));
10536     }
10537
10538 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned.  */
10539 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
10540   sat_ ## KIND ## _type_node = \
10541     make_sat_signed_ ## KIND ## _type (SIZE); \
10542   sat_unsigned_ ## KIND ## _type_node = \
10543     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10544   KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10545   unsigned_ ## KIND ## _type_node = \
10546     make_unsigned_ ## KIND ## _type (SIZE);
10547
10548 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
10549   sat_ ## WIDTH ## KIND ## _type_node = \
10550     make_sat_signed_ ## KIND ## _type (SIZE); \
10551   sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
10552     make_sat_unsigned_ ## KIND ## _type (SIZE); \
10553   WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10554   unsigned_ ## WIDTH ## KIND ## _type_node = \
10555     make_unsigned_ ## KIND ## _type (SIZE);
10556
10557 /* Make fixed-point type nodes based on four different widths.  */
10558 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
10559   MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
10560   MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
10561   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
10562   MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
10563
10564 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned.  */
10565 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
10566   NAME ## _type_node = \
10567     make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
10568   u ## NAME ## _type_node = \
10569     make_or_reuse_unsigned_ ## KIND ## _type \
10570       (GET_MODE_BITSIZE (U ## MODE ## mode)); \
10571   sat_ ## NAME ## _type_node = \
10572     make_or_reuse_sat_signed_ ## KIND ## _type \
10573       (GET_MODE_BITSIZE (MODE ## mode)); \
10574   sat_u ## NAME ## _type_node = \
10575     make_or_reuse_sat_unsigned_ ## KIND ## _type \
10576       (GET_MODE_BITSIZE (U ## MODE ## mode));
10577
10578   /* Fixed-point type and mode nodes.  */
10579   MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
10580   MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
10581   MAKE_FIXED_MODE_NODE (fract, qq, QQ)
10582   MAKE_FIXED_MODE_NODE (fract, hq, HQ)
10583   MAKE_FIXED_MODE_NODE (fract, sq, SQ)
10584   MAKE_FIXED_MODE_NODE (fract, dq, DQ)
10585   MAKE_FIXED_MODE_NODE (fract, tq, TQ)
10586   MAKE_FIXED_MODE_NODE (accum, ha, HA)
10587   MAKE_FIXED_MODE_NODE (accum, sa, SA)
10588   MAKE_FIXED_MODE_NODE (accum, da, DA)
10589   MAKE_FIXED_MODE_NODE (accum, ta, TA)
10590
10591   {
10592     tree t = targetm.build_builtin_va_list ();
10593
10594     /* Many back-ends define record types without setting TYPE_NAME.
10595        If we copied the record type here, we'd keep the original
10596        record type without a name.  This breaks name mangling.  So,
10597        don't copy record types and let c_common_nodes_and_builtins()
10598        declare the type to be __builtin_va_list.  */
10599     if (TREE_CODE (t) != RECORD_TYPE)
10600       t = build_variant_type_copy (t);
10601
10602     va_list_type_node = t;
10603   }
10604 }
10605
10606 /* Modify DECL for given flags.
10607    TM_PURE attribute is set only on types, so the function will modify
10608    DECL's type when ECF_TM_PURE is used.  */
10609
10610 void
10611 set_call_expr_flags (tree decl, int flags)
10612 {
10613   if (flags & ECF_NOTHROW)
10614     TREE_NOTHROW (decl) = 1;
10615   if (flags & ECF_CONST)
10616     TREE_READONLY (decl) = 1;
10617   if (flags & ECF_PURE)
10618     DECL_PURE_P (decl) = 1;
10619   if (flags & ECF_LOOPING_CONST_OR_PURE)
10620     DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
10621   if (flags & ECF_NOVOPS)
10622     DECL_IS_NOVOPS (decl) = 1;
10623   if (flags & ECF_NORETURN)
10624     TREE_THIS_VOLATILE (decl) = 1;
10625   if (flags & ECF_MALLOC)
10626     DECL_IS_MALLOC (decl) = 1;
10627   if (flags & ECF_RETURNS_TWICE)
10628     DECL_IS_RETURNS_TWICE (decl) = 1;
10629   if (flags & ECF_LEAF)
10630     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
10631                                         NULL, DECL_ATTRIBUTES (decl));
10632   if (flags & ECF_COLD)
10633     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("cold"),
10634                                         NULL, DECL_ATTRIBUTES (decl));
10635   if (flags & ECF_RET1)
10636     DECL_ATTRIBUTES (decl)
10637       = tree_cons (get_identifier ("fn spec"),
10638                    build_tree_list (NULL_TREE, build_string (1, "1")),
10639                    DECL_ATTRIBUTES (decl));
10640   if ((flags & ECF_TM_PURE) && flag_tm)
10641     apply_tm_attr (decl, get_identifier ("transaction_pure"));
10642   /* Looping const or pure is implied by noreturn.
10643      There is currently no way to declare looping const or looping pure alone.  */
10644   gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
10645               || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
10646 }
10647
10648
10649 /* A subroutine of build_common_builtin_nodes.  Define a builtin function.  */
10650
10651 static void
10652 local_define_builtin (const char *name, tree type, enum built_in_function code,
10653                       const char *library_name, int ecf_flags)
10654 {
10655   tree decl;
10656
10657   decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10658                                library_name, NULL_TREE);
10659   set_call_expr_flags (decl, ecf_flags);
10660
10661   set_builtin_decl (code, decl, true);
10662 }
10663
10664 /* Call this function after instantiating all builtins that the language
10665    front end cares about.  This will build the rest of the builtins
10666    and internal functions that are relied upon by the tree optimizers and
10667    the middle-end.  */
10668
10669 void
10670 build_common_builtin_nodes (void)
10671 {
10672   tree tmp, ftype;
10673   int ecf_flags;
10674
10675   if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
10676       || !builtin_decl_explicit_p (BUILT_IN_ABORT))
10677     {
10678       ftype = build_function_type (void_type_node, void_list_node);
10679       if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10680         local_define_builtin ("__builtin_unreachable", ftype,
10681                               BUILT_IN_UNREACHABLE,
10682                               "__builtin_unreachable",
10683                               ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10684                               | ECF_CONST | ECF_COLD);
10685       if (!builtin_decl_explicit_p (BUILT_IN_ABORT))
10686         local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
10687                               "abort",
10688                               ECF_LEAF | ECF_NORETURN | ECF_CONST | ECF_COLD);
10689     }
10690
10691   if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10692       || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10693     {
10694       ftype = build_function_type_list (ptr_type_node,
10695                                         ptr_type_node, const_ptr_type_node,
10696                                         size_type_node, NULL_TREE);
10697
10698       if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10699         local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10700                               "memcpy", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10701       if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10702         local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10703                               "memmove", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10704     }
10705
10706   if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10707     {
10708       ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10709                                         const_ptr_type_node, size_type_node,
10710                                         NULL_TREE);
10711       local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10712                             "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10713     }
10714
10715   if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10716     {
10717       ftype = build_function_type_list (ptr_type_node,
10718                                         ptr_type_node, integer_type_node,
10719                                         size_type_node, NULL_TREE);
10720       local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10721                             "memset", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10722     }
10723
10724   /* If we're checking the stack, `alloca' can throw.  */
10725   const int alloca_flags
10726     = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW);
10727
10728   if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10729     {
10730       ftype = build_function_type_list (ptr_type_node,
10731                                         size_type_node, NULL_TREE);
10732       local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10733                             "alloca", alloca_flags);
10734     }
10735
10736   ftype = build_function_type_list (ptr_type_node, size_type_node,
10737                                     size_type_node, NULL_TREE);
10738   local_define_builtin ("__builtin_alloca_with_align", ftype,
10739                         BUILT_IN_ALLOCA_WITH_ALIGN,
10740                         "__builtin_alloca_with_align",
10741                         alloca_flags);
10742
10743   ftype = build_function_type_list (void_type_node,
10744                                     ptr_type_node, ptr_type_node,
10745                                     ptr_type_node, NULL_TREE);
10746   local_define_builtin ("__builtin_init_trampoline", ftype,
10747                         BUILT_IN_INIT_TRAMPOLINE,
10748                         "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10749   local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10750                         BUILT_IN_INIT_HEAP_TRAMPOLINE,
10751                         "__builtin_init_heap_trampoline",
10752                         ECF_NOTHROW | ECF_LEAF);
10753   local_define_builtin ("__builtin_init_descriptor", ftype,
10754                         BUILT_IN_INIT_DESCRIPTOR,
10755                         "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF);
10756
10757   ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10758   local_define_builtin ("__builtin_adjust_trampoline", ftype,
10759                         BUILT_IN_ADJUST_TRAMPOLINE,
10760                         "__builtin_adjust_trampoline",
10761                         ECF_CONST | ECF_NOTHROW);
10762   local_define_builtin ("__builtin_adjust_descriptor", ftype,
10763                         BUILT_IN_ADJUST_DESCRIPTOR,
10764                         "__builtin_adjust_descriptor",
10765                         ECF_CONST | ECF_NOTHROW);
10766
10767   ftype = build_function_type_list (void_type_node,
10768                                     ptr_type_node, ptr_type_node, NULL_TREE);
10769   local_define_builtin ("__builtin_nonlocal_goto", ftype,
10770                         BUILT_IN_NONLOCAL_GOTO,
10771                         "__builtin_nonlocal_goto",
10772                         ECF_NORETURN | ECF_NOTHROW);
10773
10774   ftype = build_function_type_list (void_type_node,
10775                                     ptr_type_node, ptr_type_node, NULL_TREE);
10776   local_define_builtin ("__builtin_setjmp_setup", ftype,
10777                         BUILT_IN_SETJMP_SETUP,
10778                         "__builtin_setjmp_setup", ECF_NOTHROW);
10779
10780   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10781   local_define_builtin ("__builtin_setjmp_receiver", ftype,
10782                         BUILT_IN_SETJMP_RECEIVER,
10783                         "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10784
10785   ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10786   local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10787                         "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10788
10789   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10790   local_define_builtin ("__builtin_stack_restore", ftype,
10791                         BUILT_IN_STACK_RESTORE,
10792                         "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10793
10794   ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10795                                     const_ptr_type_node, size_type_node,
10796                                     NULL_TREE);
10797   local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ,
10798                         "__builtin_memcmp_eq",
10799                         ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10800
10801   /* If there's a possibility that we might use the ARM EABI, build the
10802     alternate __cxa_end_cleanup node used to resume from C++ and Java.  */
10803   if (targetm.arm_eabi_unwinder)
10804     {
10805       ftype = build_function_type_list (void_type_node, NULL_TREE);
10806       local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10807                             BUILT_IN_CXA_END_CLEANUP,
10808                             "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10809     }
10810
10811   ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10812   local_define_builtin ("__builtin_unwind_resume", ftype,
10813                         BUILT_IN_UNWIND_RESUME,
10814                         ((targetm_common.except_unwind_info (&global_options)
10815                           == UI_SJLJ)
10816                          ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10817                         ECF_NORETURN);
10818
10819   if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10820     {
10821       ftype = build_function_type_list (ptr_type_node, integer_type_node,
10822                                         NULL_TREE);
10823       local_define_builtin ("__builtin_return_address", ftype,
10824                             BUILT_IN_RETURN_ADDRESS,
10825                             "__builtin_return_address",
10826                             ECF_NOTHROW);
10827     }
10828
10829   if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10830       || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10831     {
10832       ftype = build_function_type_list (void_type_node, ptr_type_node,
10833                                         ptr_type_node, NULL_TREE);
10834       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10835         local_define_builtin ("__cyg_profile_func_enter", ftype,
10836                               BUILT_IN_PROFILE_FUNC_ENTER,
10837                               "__cyg_profile_func_enter", 0);
10838       if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10839         local_define_builtin ("__cyg_profile_func_exit", ftype,
10840                               BUILT_IN_PROFILE_FUNC_EXIT,
10841                               "__cyg_profile_func_exit", 0);
10842     }
10843
10844   /* The exception object and filter values from the runtime.  The argument
10845      must be zero before exception lowering, i.e. from the front end.  After
10846      exception lowering, it will be the region number for the exception
10847      landing pad.  These functions are PURE instead of CONST to prevent
10848      them from being hoisted past the exception edge that will initialize
10849      its value in the landing pad.  */
10850   ftype = build_function_type_list (ptr_type_node,
10851                                     integer_type_node, NULL_TREE);
10852   ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10853   /* Only use TM_PURE if we have TM language support.  */
10854   if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10855     ecf_flags |= ECF_TM_PURE;
10856   local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10857                         "__builtin_eh_pointer", ecf_flags);
10858
10859   tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10860   ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10861   local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10862                         "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10863
10864   ftype = build_function_type_list (void_type_node,
10865                                     integer_type_node, integer_type_node,
10866                                     NULL_TREE);
10867   local_define_builtin ("__builtin_eh_copy_values", ftype,
10868                         BUILT_IN_EH_COPY_VALUES,
10869                         "__builtin_eh_copy_values", ECF_NOTHROW);
10870
10871   /* Complex multiplication and division.  These are handled as builtins
10872      rather than optabs because emit_library_call_value doesn't support
10873      complex.  Further, we can do slightly better with folding these
10874      beasties if the real and complex parts of the arguments are separate.  */
10875   {
10876     int mode;
10877
10878     for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10879       {
10880         char mode_name_buf[4], *q;
10881         const char *p;
10882         enum built_in_function mcode, dcode;
10883         tree type, inner_type;
10884         const char *prefix = "__";
10885
10886         if (targetm.libfunc_gnu_prefix)
10887           prefix = "__gnu_";
10888
10889         type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10890         if (type == NULL)
10891           continue;
10892         inner_type = TREE_TYPE (type);
10893
10894         ftype = build_function_type_list (type, inner_type, inner_type,
10895                                           inner_type, inner_type, NULL_TREE);
10896
10897         mcode = ((enum built_in_function)
10898                  (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10899         dcode = ((enum built_in_function)
10900                  (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10901
10902         for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10903           *q = TOLOWER (*p);
10904         *q = '\0';
10905
10906         built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10907                                         NULL);
10908         local_define_builtin (built_in_names[mcode], ftype, mcode,
10909                               built_in_names[mcode],
10910                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10911
10912         built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10913                                         NULL);
10914         local_define_builtin (built_in_names[dcode], ftype, dcode,
10915                               built_in_names[dcode],
10916                               ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10917       }
10918   }
10919
10920   init_internal_fns ();
10921 }
10922
10923 /* HACK.  GROSS.  This is absolutely disgusting.  I wish there was a
10924    better way.
10925
10926    If we requested a pointer to a vector, build up the pointers that
10927    we stripped off while looking for the inner type.  Similarly for
10928    return values from functions.
10929
10930    The argument TYPE is the top of the chain, and BOTTOM is the
10931    new type which we will point to.  */
10932
10933 tree
10934 reconstruct_complex_type (tree type, tree bottom)
10935 {
10936   tree inner, outer;
10937
10938   if (TREE_CODE (type) == POINTER_TYPE)
10939     {
10940       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10941       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10942                                            TYPE_REF_CAN_ALIAS_ALL (type));
10943     }
10944   else if (TREE_CODE (type) == REFERENCE_TYPE)
10945     {
10946       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10947       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10948                                              TYPE_REF_CAN_ALIAS_ALL (type));
10949     }
10950   else if (TREE_CODE (type) == ARRAY_TYPE)
10951     {
10952       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10953       outer = build_array_type (inner, TYPE_DOMAIN (type));
10954     }
10955   else if (TREE_CODE (type) == FUNCTION_TYPE)
10956     {
10957       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10958       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10959     }
10960   else if (TREE_CODE (type) == METHOD_TYPE)
10961     {
10962       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10963       /* The build_method_type_directly() routine prepends 'this' to argument list,
10964          so we must compensate by getting rid of it.  */
10965       outer
10966         = build_method_type_directly
10967             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10968              inner,
10969              TREE_CHAIN (TYPE_ARG_TYPES (type)));
10970     }
10971   else if (TREE_CODE (type) == OFFSET_TYPE)
10972     {
10973       inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10974       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10975     }
10976   else
10977     return bottom;
10978
10979   return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10980                                             TYPE_QUALS (type));
10981 }
10982
10983 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10984    the inner type.  */
10985 tree
10986 build_vector_type_for_mode (tree innertype, machine_mode mode)
10987 {
10988   int nunits;
10989
10990   switch (GET_MODE_CLASS (mode))
10991     {
10992     case MODE_VECTOR_INT:
10993     case MODE_VECTOR_FLOAT:
10994     case MODE_VECTOR_FRACT:
10995     case MODE_VECTOR_UFRACT:
10996     case MODE_VECTOR_ACCUM:
10997     case MODE_VECTOR_UACCUM:
10998       nunits = GET_MODE_NUNITS (mode);
10999       break;
11000
11001     case MODE_INT:
11002       /* Check that there are no leftover bits.  */
11003       gcc_assert (GET_MODE_BITSIZE (mode)
11004                   % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
11005
11006       nunits = GET_MODE_BITSIZE (mode)
11007                / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
11008       break;
11009
11010     default:
11011       gcc_unreachable ();
11012     }
11013
11014   return make_vector_type (innertype, nunits, mode);
11015 }
11016
11017 /* Similarly, but takes the inner type and number of units, which must be
11018    a power of two.  */
11019
11020 tree
11021 build_vector_type (tree innertype, int nunits)
11022 {
11023   return make_vector_type (innertype, nunits, VOIDmode);
11024 }
11025
11026 /* Build truth vector with specified length and number of units.  */
11027
11028 tree
11029 build_truth_vector_type (unsigned nunits, unsigned vector_size)
11030 {
11031   machine_mode mask_mode = targetm.vectorize.get_mask_mode (nunits,
11032                                                             vector_size);
11033
11034   gcc_assert (mask_mode != VOIDmode);
11035
11036   unsigned HOST_WIDE_INT vsize;
11037   if (mask_mode == BLKmode)
11038     vsize = vector_size * BITS_PER_UNIT;
11039   else
11040     vsize = GET_MODE_BITSIZE (mask_mode);
11041
11042   unsigned HOST_WIDE_INT esize = vsize / nunits;
11043   gcc_assert (esize * nunits == vsize);
11044
11045   tree bool_type = build_nonstandard_boolean_type (esize);
11046
11047   return make_vector_type (bool_type, nunits, mask_mode);
11048 }
11049
11050 /* Returns a vector type corresponding to a comparison of VECTYPE.  */
11051
11052 tree
11053 build_same_sized_truth_vector_type (tree vectype)
11054 {
11055   if (VECTOR_BOOLEAN_TYPE_P (vectype))
11056     return vectype;
11057
11058   unsigned HOST_WIDE_INT size = GET_MODE_SIZE (TYPE_MODE (vectype));
11059
11060   if (!size)
11061     size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
11062
11063   return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
11064 }
11065
11066 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set.  */
11067
11068 tree
11069 build_opaque_vector_type (tree innertype, int nunits)
11070 {
11071   tree t = make_vector_type (innertype, nunits, VOIDmode);
11072   tree cand;
11073   /* We always build the non-opaque variant before the opaque one,
11074      so if it already exists, it is TYPE_NEXT_VARIANT of this one.  */
11075   cand = TYPE_NEXT_VARIANT (t);
11076   if (cand
11077       && TYPE_VECTOR_OPAQUE (cand)
11078       && check_qualified_type (cand, t, TYPE_QUALS (t)))
11079     return cand;
11080   /* Othewise build a variant type and make sure to queue it after
11081      the non-opaque type.  */
11082   cand = build_distinct_type_copy (t);
11083   TYPE_VECTOR_OPAQUE (cand) = true;
11084   TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
11085   TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
11086   TYPE_NEXT_VARIANT (t) = cand;
11087   TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
11088   return cand;
11089 }
11090
11091
11092 /* Given an initializer INIT, return TRUE if INIT is zero or some
11093    aggregate of zeros.  Otherwise return FALSE.  */
11094 bool
11095 initializer_zerop (const_tree init)
11096 {
11097   tree elt;
11098
11099   STRIP_NOPS (init);
11100
11101   switch (TREE_CODE (init))
11102     {
11103     case INTEGER_CST:
11104       return integer_zerop (init);
11105
11106     case REAL_CST:
11107       /* ??? Note that this is not correct for C4X float formats.  There,
11108          a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
11109          negative exponent.  */
11110       return real_zerop (init)
11111         && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
11112
11113     case FIXED_CST:
11114       return fixed_zerop (init);
11115
11116     case COMPLEX_CST:
11117       return integer_zerop (init)
11118         || (real_zerop (init)
11119             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
11120             && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
11121
11122     case VECTOR_CST:
11123       {
11124         unsigned i;
11125         for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
11126           if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
11127             return false;
11128         return true;
11129       }
11130
11131     case CONSTRUCTOR:
11132       {
11133         unsigned HOST_WIDE_INT idx;
11134
11135         if (TREE_CLOBBER_P (init))
11136           return false;
11137         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
11138           if (!initializer_zerop (elt))
11139             return false;
11140         return true;
11141       }
11142
11143     case STRING_CST:
11144       {
11145         int i;
11146
11147         /* We need to loop through all elements to handle cases like
11148            "\0" and "\0foobar".  */
11149         for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
11150           if (TREE_STRING_POINTER (init)[i] != '\0')
11151             return false;
11152
11153         return true;
11154       }
11155
11156     default:
11157       return false;
11158     }
11159 }
11160
11161 /* Check if vector VEC consists of all the equal elements and
11162    that the number of elements corresponds to the type of VEC.
11163    The function returns first element of the vector
11164    or NULL_TREE if the vector is not uniform.  */
11165 tree
11166 uniform_vector_p (const_tree vec)
11167 {
11168   tree first, t;
11169   unsigned i;
11170
11171   if (vec == NULL_TREE)
11172     return NULL_TREE;
11173
11174   gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
11175
11176   if (TREE_CODE (vec) == VECTOR_CST)
11177     {
11178       first = VECTOR_CST_ELT (vec, 0);
11179       for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
11180         if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
11181           return NULL_TREE;
11182
11183       return first;
11184     }
11185
11186   else if (TREE_CODE (vec) == CONSTRUCTOR)
11187     {
11188       first = error_mark_node;
11189
11190       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
11191         {
11192           if (i == 0)
11193             {
11194               first = t;
11195               continue;
11196             }
11197           if (!operand_equal_p (first, t, 0))
11198             return NULL_TREE;
11199         }
11200       if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
11201         return NULL_TREE;
11202
11203       return first;
11204     }
11205
11206   return NULL_TREE;
11207 }
11208
11209 /* Build an empty statement at location LOC.  */
11210
11211 tree
11212 build_empty_stmt (location_t loc)
11213 {
11214   tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
11215   SET_EXPR_LOCATION (t, loc);
11216   return t;
11217 }
11218
11219
11220 /* Build an OpenMP clause with code CODE.  LOC is the location of the
11221    clause.  */
11222
11223 tree
11224 build_omp_clause (location_t loc, enum omp_clause_code code)
11225 {
11226   tree t;
11227   int size, length;
11228
11229   length = omp_clause_num_ops[code];
11230   size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
11231
11232   record_node_allocation_statistics (OMP_CLAUSE, size);
11233
11234   t = (tree) ggc_internal_alloc (size);
11235   memset (t, 0, size);
11236   TREE_SET_CODE (t, OMP_CLAUSE);
11237   OMP_CLAUSE_SET_CODE (t, code);
11238   OMP_CLAUSE_LOCATION (t) = loc;
11239
11240   return t;
11241 }
11242
11243 /* Build a tcc_vl_exp object with code CODE and room for LEN operands.  LEN
11244    includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
11245    Except for the CODE and operand count field, other storage for the
11246    object is initialized to zeros.  */
11247
11248 tree
11249 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
11250 {
11251   tree t;
11252   int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
11253
11254   gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
11255   gcc_assert (len >= 1);
11256
11257   record_node_allocation_statistics (code, length);
11258
11259   t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
11260
11261   TREE_SET_CODE (t, code);
11262
11263   /* Can't use TREE_OPERAND to store the length because if checking is
11264      enabled, it will try to check the length before we store it.  :-P  */
11265   t->exp.operands[0] = build_int_cst (sizetype, len);
11266
11267   return t;
11268 }
11269
11270 /* Helper function for build_call_* functions; build a CALL_EXPR with
11271    indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
11272    the argument slots.  */
11273
11274 static tree
11275 build_call_1 (tree return_type, tree fn, int nargs)
11276 {
11277   tree t;
11278
11279   t = build_vl_exp (CALL_EXPR, nargs + 3);
11280   TREE_TYPE (t) = return_type;
11281   CALL_EXPR_FN (t) = fn;
11282   CALL_EXPR_STATIC_CHAIN (t) = NULL;
11283
11284   return t;
11285 }
11286
11287 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11288    FN and a null static chain slot.  NARGS is the number of call arguments
11289    which are specified as "..." arguments.  */
11290
11291 tree
11292 build_call_nary (tree return_type, tree fn, int nargs, ...)
11293 {
11294   tree ret;
11295   va_list args;
11296   va_start (args, nargs);
11297   ret = build_call_valist (return_type, fn, nargs, args);
11298   va_end (args);
11299   return ret;
11300 }
11301
11302 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11303    FN and a null static chain slot.  NARGS is the number of call arguments
11304    which are specified as a va_list ARGS.  */
11305
11306 tree
11307 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
11308 {
11309   tree t;
11310   int i;
11311
11312   t = build_call_1 (return_type, fn, nargs);
11313   for (i = 0; i < nargs; i++)
11314     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
11315   process_call_operands (t);
11316   return t;
11317 }
11318
11319 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11320    FN and a null static chain slot.  NARGS is the number of call arguments
11321    which are specified as a tree array ARGS.  */
11322
11323 tree
11324 build_call_array_loc (location_t loc, tree return_type, tree fn,
11325                       int nargs, const tree *args)
11326 {
11327   tree t;
11328   int i;
11329
11330   t = build_call_1 (return_type, fn, nargs);
11331   for (i = 0; i < nargs; i++)
11332     CALL_EXPR_ARG (t, i) = args[i];
11333   process_call_operands (t);
11334   SET_EXPR_LOCATION (t, loc);
11335   return t;
11336 }
11337
11338 /* Like build_call_array, but takes a vec.  */
11339
11340 tree
11341 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
11342 {
11343   tree ret, t;
11344   unsigned int ix;
11345
11346   ret = build_call_1 (return_type, fn, vec_safe_length (args));
11347   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
11348     CALL_EXPR_ARG (ret, ix) = t;
11349   process_call_operands (ret);
11350   return ret;
11351 }
11352
11353 /* Conveniently construct a function call expression.  FNDECL names the
11354    function to be called and N arguments are passed in the array
11355    ARGARRAY.  */
11356
11357 tree
11358 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
11359 {
11360   tree fntype = TREE_TYPE (fndecl);
11361   tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
11362  
11363   return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
11364 }
11365
11366 /* Conveniently construct a function call expression.  FNDECL names the
11367    function to be called and the arguments are passed in the vector
11368    VEC.  */
11369
11370 tree
11371 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
11372 {
11373   return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
11374                                     vec_safe_address (vec));
11375 }
11376
11377
11378 /* Conveniently construct a function call expression.  FNDECL names the
11379    function to be called, N is the number of arguments, and the "..."
11380    parameters are the argument expressions.  */
11381
11382 tree
11383 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
11384 {
11385   va_list ap;
11386   tree *argarray = XALLOCAVEC (tree, n);
11387   int i;
11388
11389   va_start (ap, n);
11390   for (i = 0; i < n; i++)
11391     argarray[i] = va_arg (ap, tree);
11392   va_end (ap);
11393   return build_call_expr_loc_array (loc, fndecl, n, argarray);
11394 }
11395
11396 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...).  Duplicated because
11397    varargs macros aren't supported by all bootstrap compilers.  */
11398
11399 tree
11400 build_call_expr (tree fndecl, int n, ...)
11401 {
11402   va_list ap;
11403   tree *argarray = XALLOCAVEC (tree, n);
11404   int i;
11405
11406   va_start (ap, n);
11407   for (i = 0; i < n; i++)
11408     argarray[i] = va_arg (ap, tree);
11409   va_end (ap);
11410   return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
11411 }
11412
11413 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
11414    type TYPE.  This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
11415    It will get gimplified later into an ordinary internal function.  */
11416
11417 tree
11418 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
11419                                     tree type, int n, const tree *args)
11420 {
11421   tree t = build_call_1 (type, NULL_TREE, n);
11422   for (int i = 0; i < n; ++i)
11423     CALL_EXPR_ARG (t, i) = args[i];
11424   SET_EXPR_LOCATION (t, loc);
11425   CALL_EXPR_IFN (t) = ifn;
11426   return t;
11427 }
11428
11429 /* Build internal call expression.  This is just like CALL_EXPR, except
11430    its CALL_EXPR_FN is NULL.  It will get gimplified later into ordinary
11431    internal function.  */
11432
11433 tree
11434 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
11435                               tree type, 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   return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11446 }
11447
11448 /* Return a function call to FN, if the target is guaranteed to support it,
11449    or null otherwise.
11450
11451    N is the number of arguments, passed in the "...", and TYPE is the
11452    type of the return value.  */
11453
11454 tree
11455 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
11456                            int n, ...)
11457 {
11458   va_list ap;
11459   tree *argarray = XALLOCAVEC (tree, n);
11460   int i;
11461
11462   va_start (ap, n);
11463   for (i = 0; i < n; i++)
11464     argarray[i] = va_arg (ap, tree);
11465   va_end (ap);
11466   if (internal_fn_p (fn))
11467     {
11468       internal_fn ifn = as_internal_fn (fn);
11469       if (direct_internal_fn_p (ifn))
11470         {
11471           tree_pair types = direct_internal_fn_types (ifn, type, argarray);
11472           if (!direct_internal_fn_supported_p (ifn, types,
11473                                                OPTIMIZE_FOR_BOTH))
11474             return NULL_TREE;
11475         }
11476       return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11477     }
11478   else
11479     {
11480       tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
11481       if (!fndecl)
11482         return NULL_TREE;
11483       return build_call_expr_loc_array (loc, fndecl, n, argarray);
11484     }
11485 }
11486
11487 /* Create a new constant string literal and return a char* pointer to it.
11488    The STRING_CST value is the LEN characters at STR.  */
11489 tree
11490 build_string_literal (int len, const char *str)
11491 {
11492   tree t, elem, index, type;
11493
11494   t = build_string (len, str);
11495   elem = build_type_variant (char_type_node, 1, 0);
11496   index = build_index_type (size_int (len - 1));
11497   type = build_array_type (elem, index);
11498   TREE_TYPE (t) = type;
11499   TREE_CONSTANT (t) = 1;
11500   TREE_READONLY (t) = 1;
11501   TREE_STATIC (t) = 1;
11502
11503   type = build_pointer_type (elem);
11504   t = build1 (ADDR_EXPR, type,
11505               build4 (ARRAY_REF, elem,
11506                       t, integer_zero_node, NULL_TREE, NULL_TREE));
11507   return t;
11508 }
11509
11510
11511
11512 /* Return true if T (assumed to be a DECL) must be assigned a memory
11513    location.  */
11514
11515 bool
11516 needs_to_live_in_memory (const_tree t)
11517 {
11518   return (TREE_ADDRESSABLE (t)
11519           || is_global_var (t)
11520           || (TREE_CODE (t) == RESULT_DECL
11521               && !DECL_BY_REFERENCE (t)
11522               && aggregate_value_p (t, current_function_decl)));
11523 }
11524
11525 /* Return value of a constant X and sign-extend it.  */
11526
11527 HOST_WIDE_INT
11528 int_cst_value (const_tree x)
11529 {
11530   unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
11531   unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
11532
11533   /* Make sure the sign-extended value will fit in a HOST_WIDE_INT.  */
11534   gcc_assert (cst_and_fits_in_hwi (x));
11535
11536   if (bits < HOST_BITS_PER_WIDE_INT)
11537     {
11538       bool negative = ((val >> (bits - 1)) & 1) != 0;
11539       if (negative)
11540         val |= HOST_WIDE_INT_M1U << (bits - 1) << 1;
11541       else
11542         val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1);
11543     }
11544
11545   return val;
11546 }
11547
11548 /* If TYPE is an integral or pointer type, return an integer type with
11549    the same precision which is unsigned iff UNSIGNEDP is true, or itself
11550    if TYPE is already an integer type of signedness UNSIGNEDP.  */
11551
11552 tree
11553 signed_or_unsigned_type_for (int unsignedp, tree type)
11554 {
11555   if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
11556     return type;
11557
11558   if (TREE_CODE (type) == VECTOR_TYPE)
11559     {
11560       tree inner = TREE_TYPE (type);
11561       tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11562       if (!inner2)
11563         return NULL_TREE;
11564       if (inner == inner2)
11565         return type;
11566       return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
11567     }
11568
11569   if (!INTEGRAL_TYPE_P (type)
11570       && !POINTER_TYPE_P (type)
11571       && TREE_CODE (type) != OFFSET_TYPE)
11572     return NULL_TREE;
11573
11574   return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
11575 }
11576
11577 /* If TYPE is an integral or pointer type, return an integer type with
11578    the same precision which is unsigned, or itself if TYPE is already an
11579    unsigned integer type.  */
11580
11581 tree
11582 unsigned_type_for (tree type)
11583 {
11584   return signed_or_unsigned_type_for (1, type);
11585 }
11586
11587 /* If TYPE is an integral or pointer type, return an integer type with
11588    the same precision which is signed, or itself if TYPE is already a
11589    signed integer type.  */
11590
11591 tree
11592 signed_type_for (tree type)
11593 {
11594   return signed_or_unsigned_type_for (0, type);
11595 }
11596
11597 /* If TYPE is a vector type, return a signed integer vector type with the
11598    same width and number of subparts. Otherwise return boolean_type_node.  */
11599
11600 tree
11601 truth_type_for (tree type)
11602 {
11603   if (TREE_CODE (type) == VECTOR_TYPE)
11604     {
11605       if (VECTOR_BOOLEAN_TYPE_P (type))
11606         return type;
11607       return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
11608                                       GET_MODE_SIZE (TYPE_MODE (type)));
11609     }
11610   else
11611     return boolean_type_node;
11612 }
11613
11614 /* Returns the largest value obtainable by casting something in INNER type to
11615    OUTER type.  */
11616
11617 tree
11618 upper_bound_in_type (tree outer, tree inner)
11619 {
11620   unsigned int det = 0;
11621   unsigned oprec = TYPE_PRECISION (outer);
11622   unsigned iprec = TYPE_PRECISION (inner);
11623   unsigned prec;
11624
11625   /* Compute a unique number for every combination.  */
11626   det |= (oprec > iprec) ? 4 : 0;
11627   det |= TYPE_UNSIGNED (outer) ? 2 : 0;
11628   det |= TYPE_UNSIGNED (inner) ? 1 : 0;
11629
11630   /* Determine the exponent to use.  */
11631   switch (det)
11632     {
11633     case 0:
11634     case 1:
11635       /* oprec <= iprec, outer: signed, inner: don't care.  */
11636       prec = oprec - 1;
11637       break;
11638     case 2:
11639     case 3:
11640       /* oprec <= iprec, outer: unsigned, inner: don't care.  */
11641       prec = oprec;
11642       break;
11643     case 4:
11644       /* oprec > iprec, outer: signed, inner: signed.  */
11645       prec = iprec - 1;
11646       break;
11647     case 5:
11648       /* oprec > iprec, outer: signed, inner: unsigned.  */
11649       prec = iprec;
11650       break;
11651     case 6:
11652       /* oprec > iprec, outer: unsigned, inner: signed.  */
11653       prec = oprec;
11654       break;
11655     case 7:
11656       /* oprec > iprec, outer: unsigned, inner: unsigned.  */
11657       prec = iprec;
11658       break;
11659     default:
11660       gcc_unreachable ();
11661     }
11662
11663   return wide_int_to_tree (outer,
11664                            wi::mask (prec, false, TYPE_PRECISION (outer)));
11665 }
11666
11667 /* Returns the smallest value obtainable by casting something in INNER type to
11668    OUTER type.  */
11669
11670 tree
11671 lower_bound_in_type (tree outer, tree inner)
11672 {
11673   unsigned oprec = TYPE_PRECISION (outer);
11674   unsigned iprec = TYPE_PRECISION (inner);
11675
11676   /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11677      and obtain 0.  */
11678   if (TYPE_UNSIGNED (outer)
11679       /* If we are widening something of an unsigned type, OUTER type
11680          contains all values of INNER type.  In particular, both INNER
11681          and OUTER types have zero in common.  */
11682       || (oprec > iprec && TYPE_UNSIGNED (inner)))
11683     return build_int_cst (outer, 0);
11684   else
11685     {
11686       /* If we are widening a signed type to another signed type, we
11687          want to obtain -2^^(iprec-1).  If we are keeping the
11688          precision or narrowing to a signed type, we want to obtain
11689          -2^(oprec-1).  */
11690       unsigned prec = oprec > iprec ? iprec : oprec;
11691       return wide_int_to_tree (outer,
11692                                wi::mask (prec - 1, true,
11693                                          TYPE_PRECISION (outer)));
11694     }
11695 }
11696
11697 /* Return nonzero if two operands that are suitable for PHI nodes are
11698    necessarily equal.  Specifically, both ARG0 and ARG1 must be either
11699    SSA_NAME or invariant.  Note that this is strictly an optimization.
11700    That is, callers of this function can directly call operand_equal_p
11701    and get the same result, only slower.  */
11702
11703 int
11704 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11705 {
11706   if (arg0 == arg1)
11707     return 1;
11708   if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11709     return 0;
11710   return operand_equal_p (arg0, arg1, 0);
11711 }
11712
11713 /* Returns number of zeros at the end of binary representation of X.  */
11714
11715 tree
11716 num_ending_zeros (const_tree x)
11717 {
11718   return build_int_cst (TREE_TYPE (x), wi::ctz (x));
11719 }
11720
11721
11722 #define WALK_SUBTREE(NODE)                              \
11723   do                                                    \
11724     {                                                   \
11725       result = walk_tree_1 (&(NODE), func, data, pset, lh);     \
11726       if (result)                                       \
11727         return result;                                  \
11728     }                                                   \
11729   while (0)
11730
11731 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11732    be walked whenever a type is seen in the tree.  Rest of operands and return
11733    value are as for walk_tree.  */
11734
11735 static tree
11736 walk_type_fields (tree type, walk_tree_fn func, void *data,
11737                   hash_set<tree> *pset, walk_tree_lh lh)
11738 {
11739   tree result = NULL_TREE;
11740
11741   switch (TREE_CODE (type))
11742     {
11743     case POINTER_TYPE:
11744     case REFERENCE_TYPE:
11745     case VECTOR_TYPE:
11746       /* We have to worry about mutually recursive pointers.  These can't
11747          be written in C.  They can in Ada.  It's pathological, but
11748          there's an ACATS test (c38102a) that checks it.  Deal with this
11749          by checking if we're pointing to another pointer, that one
11750          points to another pointer, that one does too, and we have no htab.
11751          If so, get a hash table.  We check three levels deep to avoid
11752          the cost of the hash table if we don't need one.  */
11753       if (POINTER_TYPE_P (TREE_TYPE (type))
11754           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11755           && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11756           && !pset)
11757         {
11758           result = walk_tree_without_duplicates (&TREE_TYPE (type),
11759                                                  func, data);
11760           if (result)
11761             return result;
11762
11763           break;
11764         }
11765
11766       /* fall through */
11767
11768     case COMPLEX_TYPE:
11769       WALK_SUBTREE (TREE_TYPE (type));
11770       break;
11771
11772     case METHOD_TYPE:
11773       WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11774
11775       /* Fall through.  */
11776
11777     case FUNCTION_TYPE:
11778       WALK_SUBTREE (TREE_TYPE (type));
11779       {
11780         tree arg;
11781
11782         /* We never want to walk into default arguments.  */
11783         for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11784           WALK_SUBTREE (TREE_VALUE (arg));
11785       }
11786       break;
11787
11788     case ARRAY_TYPE:
11789       /* Don't follow this nodes's type if a pointer for fear that
11790          we'll have infinite recursion.  If we have a PSET, then we
11791          need not fear.  */
11792       if (pset
11793           || (!POINTER_TYPE_P (TREE_TYPE (type))
11794               && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11795         WALK_SUBTREE (TREE_TYPE (type));
11796       WALK_SUBTREE (TYPE_DOMAIN (type));
11797       break;
11798
11799     case OFFSET_TYPE:
11800       WALK_SUBTREE (TREE_TYPE (type));
11801       WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11802       break;
11803
11804     default:
11805       break;
11806     }
11807
11808   return NULL_TREE;
11809 }
11810
11811 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal.  FUNC is
11812    called with the DATA and the address of each sub-tree.  If FUNC returns a
11813    non-NULL value, the traversal is stopped, and the value returned by FUNC
11814    is returned.  If PSET is non-NULL it is used to record the nodes visited,
11815    and to avoid visiting a node more than once.  */
11816
11817 tree
11818 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11819              hash_set<tree> *pset, walk_tree_lh lh)
11820 {
11821   enum tree_code code;
11822   int walk_subtrees;
11823   tree result;
11824
11825 #define WALK_SUBTREE_TAIL(NODE)                         \
11826   do                                                    \
11827     {                                                   \
11828        tp = & (NODE);                                   \
11829        goto tail_recurse;                               \
11830     }                                                   \
11831   while (0)
11832
11833  tail_recurse:
11834   /* Skip empty subtrees.  */
11835   if (!*tp)
11836     return NULL_TREE;
11837
11838   /* Don't walk the same tree twice, if the user has requested
11839      that we avoid doing so.  */
11840   if (pset && pset->add (*tp))
11841     return NULL_TREE;
11842
11843   /* Call the function.  */
11844   walk_subtrees = 1;
11845   result = (*func) (tp, &walk_subtrees, data);
11846
11847   /* If we found something, return it.  */
11848   if (result)
11849     return result;
11850
11851   code = TREE_CODE (*tp);
11852
11853   /* Even if we didn't, FUNC may have decided that there was nothing
11854      interesting below this point in the tree.  */
11855   if (!walk_subtrees)
11856     {
11857       /* But we still need to check our siblings.  */
11858       if (code == TREE_LIST)
11859         WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11860       else if (code == OMP_CLAUSE)
11861         WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11862       else
11863         return NULL_TREE;
11864     }
11865
11866   if (lh)
11867     {
11868       result = (*lh) (tp, &walk_subtrees, func, data, pset);
11869       if (result || !walk_subtrees)
11870         return result;
11871     }
11872
11873   switch (code)
11874     {
11875     case ERROR_MARK:
11876     case IDENTIFIER_NODE:
11877     case INTEGER_CST:
11878     case REAL_CST:
11879     case FIXED_CST:
11880     case VECTOR_CST:
11881     case STRING_CST:
11882     case BLOCK:
11883     case PLACEHOLDER_EXPR:
11884     case SSA_NAME:
11885     case FIELD_DECL:
11886     case RESULT_DECL:
11887       /* None of these have subtrees other than those already walked
11888          above.  */
11889       break;
11890
11891     case TREE_LIST:
11892       WALK_SUBTREE (TREE_VALUE (*tp));
11893       WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11894       break;
11895
11896     case TREE_VEC:
11897       {
11898         int len = TREE_VEC_LENGTH (*tp);
11899
11900         if (len == 0)
11901           break;
11902
11903         /* Walk all elements but the first.  */
11904         while (--len)
11905           WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11906
11907         /* Now walk the first one as a tail call.  */
11908         WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11909       }
11910
11911     case COMPLEX_CST:
11912       WALK_SUBTREE (TREE_REALPART (*tp));
11913       WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11914
11915     case CONSTRUCTOR:
11916       {
11917         unsigned HOST_WIDE_INT idx;
11918         constructor_elt *ce;
11919
11920         for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11921              idx++)
11922           WALK_SUBTREE (ce->value);
11923       }
11924       break;
11925
11926     case SAVE_EXPR:
11927       WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11928
11929     case BIND_EXPR:
11930       {
11931         tree decl;
11932         for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11933           {
11934             /* Walk the DECL_INITIAL and DECL_SIZE.  We don't want to walk
11935                into declarations that are just mentioned, rather than
11936                declared; they don't really belong to this part of the tree.
11937                And, we can see cycles: the initializer for a declaration
11938                can refer to the declaration itself.  */
11939             WALK_SUBTREE (DECL_INITIAL (decl));
11940             WALK_SUBTREE (DECL_SIZE (decl));
11941             WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11942           }
11943         WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11944       }
11945
11946     case STATEMENT_LIST:
11947       {
11948         tree_stmt_iterator i;
11949         for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11950           WALK_SUBTREE (*tsi_stmt_ptr (i));
11951       }
11952       break;
11953
11954     case OMP_CLAUSE:
11955       switch (OMP_CLAUSE_CODE (*tp))
11956         {
11957         case OMP_CLAUSE_GANG:
11958         case OMP_CLAUSE__GRIDDIM_:
11959           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11960           /* FALLTHRU */
11961
11962         case OMP_CLAUSE_ASYNC:
11963         case OMP_CLAUSE_WAIT:
11964         case OMP_CLAUSE_WORKER:
11965         case OMP_CLAUSE_VECTOR:
11966         case OMP_CLAUSE_NUM_GANGS:
11967         case OMP_CLAUSE_NUM_WORKERS:
11968         case OMP_CLAUSE_VECTOR_LENGTH:
11969         case OMP_CLAUSE_PRIVATE:
11970         case OMP_CLAUSE_SHARED:
11971         case OMP_CLAUSE_FIRSTPRIVATE:
11972         case OMP_CLAUSE_COPYIN:
11973         case OMP_CLAUSE_COPYPRIVATE:
11974         case OMP_CLAUSE_FINAL:
11975         case OMP_CLAUSE_IF:
11976         case OMP_CLAUSE_NUM_THREADS:
11977         case OMP_CLAUSE_SCHEDULE:
11978         case OMP_CLAUSE_UNIFORM:
11979         case OMP_CLAUSE_DEPEND:
11980         case OMP_CLAUSE_NUM_TEAMS:
11981         case OMP_CLAUSE_THREAD_LIMIT:
11982         case OMP_CLAUSE_DEVICE:
11983         case OMP_CLAUSE_DIST_SCHEDULE:
11984         case OMP_CLAUSE_SAFELEN:
11985         case OMP_CLAUSE_SIMDLEN:
11986         case OMP_CLAUSE_ORDERED:
11987         case OMP_CLAUSE_PRIORITY:
11988         case OMP_CLAUSE_GRAINSIZE:
11989         case OMP_CLAUSE_NUM_TASKS:
11990         case OMP_CLAUSE_HINT:
11991         case OMP_CLAUSE_TO_DECLARE:
11992         case OMP_CLAUSE_LINK:
11993         case OMP_CLAUSE_USE_DEVICE_PTR:
11994         case OMP_CLAUSE_IS_DEVICE_PTR:
11995         case OMP_CLAUSE__LOOPTEMP_:
11996         case OMP_CLAUSE__SIMDUID_:
11997         case OMP_CLAUSE__CILK_FOR_COUNT_:
11998           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11999           /* FALLTHRU */
12000
12001         case OMP_CLAUSE_INDEPENDENT:
12002         case OMP_CLAUSE_NOWAIT:
12003         case OMP_CLAUSE_DEFAULT:
12004         case OMP_CLAUSE_UNTIED:
12005         case OMP_CLAUSE_MERGEABLE:
12006         case OMP_CLAUSE_PROC_BIND:
12007         case OMP_CLAUSE_INBRANCH:
12008         case OMP_CLAUSE_NOTINBRANCH:
12009         case OMP_CLAUSE_FOR:
12010         case OMP_CLAUSE_PARALLEL:
12011         case OMP_CLAUSE_SECTIONS:
12012         case OMP_CLAUSE_TASKGROUP:
12013         case OMP_CLAUSE_NOGROUP:
12014         case OMP_CLAUSE_THREADS:
12015         case OMP_CLAUSE_SIMD:
12016         case OMP_CLAUSE_DEFAULTMAP:
12017         case OMP_CLAUSE_AUTO:
12018         case OMP_CLAUSE_SEQ:
12019         case OMP_CLAUSE_TILE:
12020         case OMP_CLAUSE__SIMT_:
12021           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12022
12023         case OMP_CLAUSE_LASTPRIVATE:
12024           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12025           WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
12026           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12027
12028         case OMP_CLAUSE_COLLAPSE:
12029           {
12030             int i;
12031             for (i = 0; i < 3; i++)
12032               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12033             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12034           }
12035
12036         case OMP_CLAUSE_LINEAR:
12037           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12038           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
12039           WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
12040           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12041
12042         case OMP_CLAUSE_ALIGNED:
12043         case OMP_CLAUSE_FROM:
12044         case OMP_CLAUSE_TO:
12045         case OMP_CLAUSE_MAP:
12046         case OMP_CLAUSE__CACHE_:
12047           WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12048           WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
12049           WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12050
12051         case OMP_CLAUSE_REDUCTION:
12052           {
12053             int i;
12054             for (i = 0; i < 5; i++)
12055               WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12056             WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12057           }
12058
12059         default:
12060           gcc_unreachable ();
12061         }
12062       break;
12063
12064     case TARGET_EXPR:
12065       {
12066         int i, len;
12067
12068         /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
12069            But, we only want to walk once.  */
12070         len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
12071         for (i = 0; i < len; ++i)
12072           WALK_SUBTREE (TREE_OPERAND (*tp, i));
12073         WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
12074       }
12075
12076     case DECL_EXPR:
12077       /* If this is a TYPE_DECL, walk into the fields of the type that it's
12078          defining.  We only want to walk into these fields of a type in this
12079          case and not in the general case of a mere reference to the type.
12080
12081          The criterion is as follows: if the field can be an expression, it
12082          must be walked only here.  This should be in keeping with the fields
12083          that are directly gimplified in gimplify_type_sizes in order for the
12084          mark/copy-if-shared/unmark machinery of the gimplifier to work with
12085          variable-sized types.
12086
12087          Note that DECLs get walked as part of processing the BIND_EXPR.  */
12088       if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
12089         {
12090           tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
12091           if (TREE_CODE (*type_p) == ERROR_MARK)
12092             return NULL_TREE;
12093
12094           /* Call the function for the type.  See if it returns anything or
12095              doesn't want us to continue.  If we are to continue, walk both
12096              the normal fields and those for the declaration case.  */
12097           result = (*func) (type_p, &walk_subtrees, data);
12098           if (result || !walk_subtrees)
12099             return result;
12100
12101           /* But do not walk a pointed-to type since it may itself need to
12102              be walked in the declaration case if it isn't anonymous.  */
12103           if (!POINTER_TYPE_P (*type_p))
12104             {
12105               result = walk_type_fields (*type_p, func, data, pset, lh);
12106               if (result)
12107                 return result;
12108             }
12109
12110           /* If this is a record type, also walk the fields.  */
12111           if (RECORD_OR_UNION_TYPE_P (*type_p))
12112             {
12113               tree field;
12114
12115               for (field = TYPE_FIELDS (*type_p); field;
12116                    field = DECL_CHAIN (field))
12117                 {
12118                   /* We'd like to look at the type of the field, but we can
12119                      easily get infinite recursion.  So assume it's pointed
12120                      to elsewhere in the tree.  Also, ignore things that
12121                      aren't fields.  */
12122                   if (TREE_CODE (field) != FIELD_DECL)
12123                     continue;
12124
12125                   WALK_SUBTREE (DECL_FIELD_OFFSET (field));
12126                   WALK_SUBTREE (DECL_SIZE (field));
12127                   WALK_SUBTREE (DECL_SIZE_UNIT (field));
12128                   if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
12129                     WALK_SUBTREE (DECL_QUALIFIER (field));
12130                 }
12131             }
12132
12133           /* Same for scalar types.  */
12134           else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
12135                    || TREE_CODE (*type_p) == ENUMERAL_TYPE
12136                    || TREE_CODE (*type_p) == INTEGER_TYPE
12137                    || TREE_CODE (*type_p) == FIXED_POINT_TYPE
12138                    || TREE_CODE (*type_p) == REAL_TYPE)
12139             {
12140               WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
12141               WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
12142             }
12143
12144           WALK_SUBTREE (TYPE_SIZE (*type_p));
12145           WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
12146         }
12147       /* FALLTHRU */
12148
12149     default:
12150       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
12151         {
12152           int i, len;
12153
12154           /* Walk over all the sub-trees of this operand.  */
12155           len = TREE_OPERAND_LENGTH (*tp);
12156
12157           /* Go through the subtrees.  We need to do this in forward order so
12158              that the scope of a FOR_EXPR is handled properly.  */
12159           if (len)
12160             {
12161               for (i = 0; i < len - 1; ++i)
12162                 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12163               WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
12164             }
12165         }
12166       /* If this is a type, walk the needed fields in the type.  */
12167       else if (TYPE_P (*tp))
12168         return walk_type_fields (*tp, func, data, pset, lh);
12169       break;
12170     }
12171
12172   /* We didn't find what we were looking for.  */
12173   return NULL_TREE;
12174
12175 #undef WALK_SUBTREE_TAIL
12176 }
12177 #undef WALK_SUBTREE
12178
12179 /* Like walk_tree, but does not walk duplicate nodes more than once.  */
12180
12181 tree
12182 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
12183                                 walk_tree_lh lh)
12184 {
12185   tree result;
12186
12187   hash_set<tree> pset;
12188   result = walk_tree_1 (tp, func, data, &pset, lh);
12189   return result;
12190 }
12191
12192
12193 tree
12194 tree_block (tree t)
12195 {
12196   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12197
12198   if (IS_EXPR_CODE_CLASS (c))
12199     return LOCATION_BLOCK (t->exp.locus);
12200   gcc_unreachable ();
12201   return NULL;
12202 }
12203
12204 void
12205 tree_set_block (tree t, tree b)
12206 {
12207   const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12208
12209   if (IS_EXPR_CODE_CLASS (c))
12210     {
12211       t->exp.locus = set_block (t->exp.locus, b);
12212     }
12213   else
12214     gcc_unreachable ();
12215 }
12216
12217 /* Create a nameless artificial label and put it in the current
12218    function context.  The label has a location of LOC.  Returns the
12219    newly created label.  */
12220
12221 tree
12222 create_artificial_label (location_t loc)
12223 {
12224   tree lab = build_decl (loc,
12225                          LABEL_DECL, NULL_TREE, void_type_node);
12226
12227   DECL_ARTIFICIAL (lab) = 1;
12228   DECL_IGNORED_P (lab) = 1;
12229   DECL_CONTEXT (lab) = current_function_decl;
12230   return lab;
12231 }
12232
12233 /*  Given a tree, try to return a useful variable name that we can use
12234     to prefix a temporary that is being assigned the value of the tree.
12235     I.E. given  <temp> = &A, return A.  */
12236
12237 const char *
12238 get_name (tree t)
12239 {
12240   tree stripped_decl;
12241
12242   stripped_decl = t;
12243   STRIP_NOPS (stripped_decl);
12244   if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
12245     return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
12246   else if (TREE_CODE (stripped_decl) == SSA_NAME)
12247     {
12248       tree name = SSA_NAME_IDENTIFIER (stripped_decl);
12249       if (!name)
12250         return NULL;
12251       return IDENTIFIER_POINTER (name);
12252     }
12253   else
12254     {
12255       switch (TREE_CODE (stripped_decl))
12256         {
12257         case ADDR_EXPR:
12258           return get_name (TREE_OPERAND (stripped_decl, 0));
12259         default:
12260           return NULL;
12261         }
12262     }
12263 }
12264
12265 /* Return true if TYPE has a variable argument list.  */
12266
12267 bool
12268 stdarg_p (const_tree fntype)
12269 {
12270   function_args_iterator args_iter;
12271   tree n = NULL_TREE, t;
12272
12273   if (!fntype)
12274     return false;
12275
12276   FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
12277     {
12278       n = t;
12279     }
12280
12281   return n != NULL_TREE && n != void_type_node;
12282 }
12283
12284 /* Return true if TYPE has a prototype.  */
12285
12286 bool
12287 prototype_p (const_tree fntype)
12288 {
12289   tree t;
12290
12291   gcc_assert (fntype != NULL_TREE);
12292
12293   t = TYPE_ARG_TYPES (fntype);
12294   return (t != NULL_TREE);
12295 }
12296
12297 /* If BLOCK is inlined from an __attribute__((__artificial__))
12298    routine, return pointer to location from where it has been
12299    called.  */
12300 location_t *
12301 block_nonartificial_location (tree block)
12302 {
12303   location_t *ret = NULL;
12304
12305   while (block && TREE_CODE (block) == BLOCK
12306          && BLOCK_ABSTRACT_ORIGIN (block))
12307     {
12308       tree ao = BLOCK_ABSTRACT_ORIGIN (block);
12309
12310       while (TREE_CODE (ao) == BLOCK
12311              && BLOCK_ABSTRACT_ORIGIN (ao)
12312              && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
12313         ao = BLOCK_ABSTRACT_ORIGIN (ao);
12314
12315       if (TREE_CODE (ao) == FUNCTION_DECL)
12316         {
12317           /* If AO is an artificial inline, point RET to the
12318              call site locus at which it has been inlined and continue
12319              the loop, in case AO's caller is also an artificial
12320              inline.  */
12321           if (DECL_DECLARED_INLINE_P (ao)
12322               && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
12323             ret = &BLOCK_SOURCE_LOCATION (block);
12324           else
12325             break;
12326         }
12327       else if (TREE_CODE (ao) != BLOCK)
12328         break;
12329
12330       block = BLOCK_SUPERCONTEXT (block);
12331     }
12332   return ret;
12333 }
12334
12335
12336 /* If EXP is inlined from an __attribute__((__artificial__))
12337    function, return the location of the original call expression.  */
12338
12339 location_t
12340 tree_nonartificial_location (tree exp)
12341 {
12342   location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
12343
12344   if (loc)
12345     return *loc;
12346   else
12347     return EXPR_LOCATION (exp);
12348 }
12349
12350
12351 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
12352    nodes.  */
12353
12354 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code.  */
12355
12356 hashval_t
12357 cl_option_hasher::hash (tree x)
12358 {
12359   const_tree const t = x;
12360   const char *p;
12361   size_t i;
12362   size_t len = 0;
12363   hashval_t hash = 0;
12364
12365   if (TREE_CODE (t) == OPTIMIZATION_NODE)
12366     {
12367       p = (const char *)TREE_OPTIMIZATION (t);
12368       len = sizeof (struct cl_optimization);
12369     }
12370
12371   else if (TREE_CODE (t) == TARGET_OPTION_NODE)
12372     return cl_target_option_hash (TREE_TARGET_OPTION (t));
12373
12374   else
12375     gcc_unreachable ();
12376
12377   /* assume most opt flags are just 0/1, some are 2-3, and a few might be
12378      something else.  */
12379   for (i = 0; i < len; i++)
12380     if (p[i])
12381       hash = (hash << 4) ^ ((i << 2) | p[i]);
12382
12383   return hash;
12384 }
12385
12386 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
12387    TARGET_OPTION tree node) is the same as that given by *Y, which is the
12388    same.  */
12389
12390 bool
12391 cl_option_hasher::equal (tree x, tree y)
12392 {
12393   const_tree const xt = x;
12394   const_tree const yt = y;
12395   const char *xp;
12396   const char *yp;
12397   size_t len;
12398
12399   if (TREE_CODE (xt) != TREE_CODE (yt))
12400     return 0;
12401
12402   if (TREE_CODE (xt) == OPTIMIZATION_NODE)
12403     {
12404       xp = (const char *)TREE_OPTIMIZATION (xt);
12405       yp = (const char *)TREE_OPTIMIZATION (yt);
12406       len = sizeof (struct cl_optimization);
12407     }
12408
12409   else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
12410     {
12411       return cl_target_option_eq (TREE_TARGET_OPTION (xt),
12412                                   TREE_TARGET_OPTION (yt));
12413     }
12414
12415   else
12416     gcc_unreachable ();
12417
12418   return (memcmp (xp, yp, len) == 0);
12419 }
12420
12421 /* Build an OPTIMIZATION_NODE based on the options in OPTS.  */
12422
12423 tree
12424 build_optimization_node (struct gcc_options *opts)
12425 {
12426   tree t;
12427
12428   /* Use the cache of optimization nodes.  */
12429
12430   cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
12431                         opts);
12432
12433   tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
12434   t = *slot;
12435   if (!t)
12436     {
12437       /* Insert this one into the hash table.  */
12438       t = cl_optimization_node;
12439       *slot = t;
12440
12441       /* Make a new node for next time round.  */
12442       cl_optimization_node = make_node (OPTIMIZATION_NODE);
12443     }
12444
12445   return t;
12446 }
12447
12448 /* Build a TARGET_OPTION_NODE based on the options in OPTS.  */
12449
12450 tree
12451 build_target_option_node (struct gcc_options *opts)
12452 {
12453   tree t;
12454
12455   /* Use the cache of optimization nodes.  */
12456
12457   cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
12458                          opts);
12459
12460   tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
12461   t = *slot;
12462   if (!t)
12463     {
12464       /* Insert this one into the hash table.  */
12465       t = cl_target_option_node;
12466       *slot = t;
12467
12468       /* Make a new node for next time round.  */
12469       cl_target_option_node = make_node (TARGET_OPTION_NODE);
12470     }
12471
12472   return t;
12473 }
12474
12475 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
12476    so that they aren't saved during PCH writing.  */
12477
12478 void
12479 prepare_target_option_nodes_for_pch (void)
12480 {
12481   hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
12482   for (; iter != cl_option_hash_table->end (); ++iter)
12483     if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
12484       TREE_TARGET_GLOBALS (*iter) = NULL;
12485 }
12486
12487 /* Determine the "ultimate origin" of a block.  The block may be an inlined
12488    instance of an inlined instance of a block which is local to an inline
12489    function, so we have to trace all of the way back through the origin chain
12490    to find out what sort of node actually served as the original seed for the
12491    given block.  */
12492
12493 tree
12494 block_ultimate_origin (const_tree block)
12495 {
12496   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
12497
12498   /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
12499      we're trying to output the abstract instance of this function.  */
12500   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
12501     return NULL_TREE;
12502
12503   if (immediate_origin == NULL_TREE)
12504     return NULL_TREE;
12505   else
12506     {
12507       tree ret_val;
12508       tree lookahead = immediate_origin;
12509
12510       do
12511         {
12512           ret_val = lookahead;
12513           lookahead = (TREE_CODE (ret_val) == BLOCK
12514                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
12515         }
12516       while (lookahead != NULL && lookahead != ret_val);
12517
12518       /* The block's abstract origin chain may not be the *ultimate* origin of
12519          the block. It could lead to a DECL that has an abstract origin set.
12520          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
12521          will give us if it has one).  Note that DECL's abstract origins are
12522          supposed to be the most distant ancestor (or so decl_ultimate_origin
12523          claims), so we don't need to loop following the DECL origins.  */
12524       if (DECL_P (ret_val))
12525         return DECL_ORIGIN (ret_val);
12526
12527       return ret_val;
12528     }
12529 }
12530
12531 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
12532    no instruction.  */
12533
12534 bool
12535 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
12536 {
12537   /* Do not strip casts into or out of differing address spaces.  */
12538   if (POINTER_TYPE_P (outer_type)
12539       && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
12540     {
12541       if (!POINTER_TYPE_P (inner_type)
12542           || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
12543               != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
12544         return false;
12545     }
12546   else if (POINTER_TYPE_P (inner_type)
12547            && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
12548     {
12549       /* We already know that outer_type is not a pointer with
12550          a non-generic address space.  */
12551       return false;
12552     }
12553
12554   /* Use precision rather then machine mode when we can, which gives
12555      the correct answer even for submode (bit-field) types.  */
12556   if ((INTEGRAL_TYPE_P (outer_type)
12557        || POINTER_TYPE_P (outer_type)
12558        || TREE_CODE (outer_type) == OFFSET_TYPE)
12559       && (INTEGRAL_TYPE_P (inner_type)
12560           || POINTER_TYPE_P (inner_type)
12561           || TREE_CODE (inner_type) == OFFSET_TYPE))
12562     return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
12563
12564   /* Otherwise fall back on comparing machine modes (e.g. for
12565      aggregate types, floats).  */
12566   return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
12567 }
12568
12569 /* Return true iff conversion in EXP generates no instruction.  Mark
12570    it inline so that we fully inline into the stripping functions even
12571    though we have two uses of this function.  */
12572
12573 static inline bool
12574 tree_nop_conversion (const_tree exp)
12575 {
12576   tree outer_type, inner_type;
12577
12578   if (!CONVERT_EXPR_P (exp)
12579       && TREE_CODE (exp) != NON_LVALUE_EXPR)
12580     return false;
12581   if (TREE_OPERAND (exp, 0) == error_mark_node)
12582     return false;
12583
12584   outer_type = TREE_TYPE (exp);
12585   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12586
12587   if (!inner_type)
12588     return false;
12589
12590   return tree_nop_conversion_p (outer_type, inner_type);
12591 }
12592
12593 /* Return true iff conversion in EXP generates no instruction.  Don't
12594    consider conversions changing the signedness.  */
12595
12596 static bool
12597 tree_sign_nop_conversion (const_tree exp)
12598 {
12599   tree outer_type, inner_type;
12600
12601   if (!tree_nop_conversion (exp))
12602     return false;
12603
12604   outer_type = TREE_TYPE (exp);
12605   inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12606
12607   return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
12608           && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
12609 }
12610
12611 /* Strip conversions from EXP according to tree_nop_conversion and
12612    return the resulting expression.  */
12613
12614 tree
12615 tree_strip_nop_conversions (tree exp)
12616 {
12617   while (tree_nop_conversion (exp))
12618     exp = TREE_OPERAND (exp, 0);
12619   return exp;
12620 }
12621
12622 /* Strip conversions from EXP according to tree_sign_nop_conversion
12623    and return the resulting expression.  */
12624
12625 tree
12626 tree_strip_sign_nop_conversions (tree exp)
12627 {
12628   while (tree_sign_nop_conversion (exp))
12629     exp = TREE_OPERAND (exp, 0);
12630   return exp;
12631 }
12632
12633 /* Avoid any floating point extensions from EXP.  */
12634 tree
12635 strip_float_extensions (tree exp)
12636 {
12637   tree sub, expt, subt;
12638
12639   /*  For floating point constant look up the narrowest type that can hold
12640       it properly and handle it like (type)(narrowest_type)constant.
12641       This way we can optimize for instance a=a*2.0 where "a" is float
12642       but 2.0 is double constant.  */
12643   if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
12644     {
12645       REAL_VALUE_TYPE orig;
12646       tree type = NULL;
12647
12648       orig = TREE_REAL_CST (exp);
12649       if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12650           && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12651         type = float_type_node;
12652       else if (TYPE_PRECISION (TREE_TYPE (exp))
12653                > TYPE_PRECISION (double_type_node)
12654                && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12655         type = double_type_node;
12656       if (type)
12657         return build_real_truncate (type, orig);
12658     }
12659
12660   if (!CONVERT_EXPR_P (exp))
12661     return exp;
12662
12663   sub = TREE_OPERAND (exp, 0);
12664   subt = TREE_TYPE (sub);
12665   expt = TREE_TYPE (exp);
12666
12667   if (!FLOAT_TYPE_P (subt))
12668     return exp;
12669
12670   if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12671     return exp;
12672
12673   if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12674     return exp;
12675
12676   return strip_float_extensions (sub);
12677 }
12678
12679 /* Strip out all handled components that produce invariant
12680    offsets.  */
12681
12682 const_tree
12683 strip_invariant_refs (const_tree op)
12684 {
12685   while (handled_component_p (op))
12686     {
12687       switch (TREE_CODE (op))
12688         {
12689         case ARRAY_REF:
12690         case ARRAY_RANGE_REF:
12691           if (!is_gimple_constant (TREE_OPERAND (op, 1))
12692               || TREE_OPERAND (op, 2) != NULL_TREE
12693               || TREE_OPERAND (op, 3) != NULL_TREE)
12694             return NULL;
12695           break;
12696
12697         case COMPONENT_REF:
12698           if (TREE_OPERAND (op, 2) != NULL_TREE)
12699             return NULL;
12700           break;
12701
12702         default:;
12703         }
12704       op = TREE_OPERAND (op, 0);
12705     }
12706
12707   return op;
12708 }
12709
12710 static GTY(()) tree gcc_eh_personality_decl;
12711
12712 /* Return the GCC personality function decl.  */
12713
12714 tree
12715 lhd_gcc_personality (void)
12716 {
12717   if (!gcc_eh_personality_decl)
12718     gcc_eh_personality_decl = build_personality_function ("gcc");
12719   return gcc_eh_personality_decl;
12720 }
12721
12722 /* TARGET is a call target of GIMPLE call statement
12723    (obtained by gimple_call_fn).  Return true if it is
12724    OBJ_TYPE_REF representing an virtual call of C++ method.
12725    (As opposed to OBJ_TYPE_REF representing objc calls
12726    through a cast where middle-end devirtualization machinery
12727    can't apply.) */
12728
12729 bool
12730 virtual_method_call_p (const_tree target)
12731 {
12732   if (TREE_CODE (target) != OBJ_TYPE_REF)
12733     return false;
12734   tree t = TREE_TYPE (target);
12735   gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12736   t = TREE_TYPE (t);
12737   if (TREE_CODE (t) == FUNCTION_TYPE)
12738     return false;
12739   gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12740   /* If we do not have BINFO associated, it means that type was built
12741      without devirtualization enabled.  Do not consider this a virtual
12742      call.  */
12743   if (!TYPE_BINFO (obj_type_ref_class (target)))
12744     return false;
12745   return true;
12746 }
12747
12748 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to.  */
12749
12750 tree
12751 obj_type_ref_class (const_tree ref)
12752 {
12753   gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12754   ref = TREE_TYPE (ref);
12755   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12756   ref = TREE_TYPE (ref);
12757   /* We look for type THIS points to.  ObjC also builds
12758      OBJ_TYPE_REF with non-method calls, Their first parameter
12759      ID however also corresponds to class type. */
12760   gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12761                        || TREE_CODE (ref) == FUNCTION_TYPE);
12762   ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12763   gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12764   return TREE_TYPE (ref);
12765 }
12766
12767 /* Lookup sub-BINFO of BINFO of TYPE at offset POS.  */
12768
12769 static tree
12770 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12771 {
12772   unsigned int i;
12773   tree base_binfo, b;
12774
12775   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12776     if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12777         && types_same_for_odr (TREE_TYPE (base_binfo), type))
12778       return base_binfo;
12779     else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12780       return b;
12781   return NULL;
12782 }
12783
12784 /* Try to find a base info of BINFO that would have its field decl at offset
12785    OFFSET within the BINFO type and which is of EXPECTED_TYPE.  If it can be
12786    found, return, otherwise return NULL_TREE.  */
12787
12788 tree
12789 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12790 {
12791   tree type = BINFO_TYPE (binfo);
12792
12793   while (true)
12794     {
12795       HOST_WIDE_INT pos, size;
12796       tree fld;
12797       int i;
12798
12799       if (types_same_for_odr (type, expected_type))
12800           return binfo;
12801       if (offset < 0)
12802         return NULL_TREE;
12803
12804       for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12805         {
12806           if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12807             continue;
12808
12809           pos = int_bit_position (fld);
12810           size = tree_to_uhwi (DECL_SIZE (fld));
12811           if (pos <= offset && (pos + size) > offset)
12812             break;
12813         }
12814       if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12815         return NULL_TREE;
12816
12817       /* Offset 0 indicates the primary base, whose vtable contents are
12818          represented in the binfo for the derived class.  */
12819       else if (offset != 0)
12820         {
12821           tree found_binfo = NULL, base_binfo;
12822           /* Offsets in BINFO are in bytes relative to the whole structure
12823              while POS is in bits relative to the containing field.  */
12824           int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12825                              / BITS_PER_UNIT);
12826
12827           for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12828             if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12829                 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12830               {
12831                 found_binfo = base_binfo;
12832                 break;
12833               }
12834           if (found_binfo)
12835             binfo = found_binfo;
12836           else
12837             binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12838                                             binfo_offset);
12839          }
12840
12841       type = TREE_TYPE (fld);
12842       offset -= pos;
12843     }
12844 }
12845
12846 /* Returns true if X is a typedef decl.  */
12847
12848 bool
12849 is_typedef_decl (const_tree x)
12850 {
12851   return (x && TREE_CODE (x) == TYPE_DECL
12852           && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12853 }
12854
12855 /* Returns true iff TYPE is a type variant created for a typedef. */
12856
12857 bool
12858 typedef_variant_p (const_tree type)
12859 {
12860   return is_typedef_decl (TYPE_NAME (type));
12861 }
12862
12863 /* Warn about a use of an identifier which was marked deprecated.  */
12864 void
12865 warn_deprecated_use (tree node, tree attr)
12866 {
12867   const char *msg;
12868
12869   if (node == 0 || !warn_deprecated_decl)
12870     return;
12871
12872   if (!attr)
12873     {
12874       if (DECL_P (node))
12875         attr = DECL_ATTRIBUTES (node);
12876       else if (TYPE_P (node))
12877         {
12878           tree decl = TYPE_STUB_DECL (node);
12879           if (decl)
12880             attr = lookup_attribute ("deprecated",
12881                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12882         }
12883     }
12884
12885   if (attr)
12886     attr = lookup_attribute ("deprecated", attr);
12887
12888   if (attr)
12889     msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12890   else
12891     msg = NULL;
12892
12893   bool w;
12894   if (DECL_P (node))
12895     {
12896       if (msg)
12897         w = warning (OPT_Wdeprecated_declarations,
12898                      "%qD is deprecated: %s", node, msg);
12899       else
12900         w = warning (OPT_Wdeprecated_declarations,
12901                      "%qD is deprecated", node);
12902       if (w)
12903         inform (DECL_SOURCE_LOCATION (node), "declared here");
12904     }
12905   else if (TYPE_P (node))
12906     {
12907       tree what = NULL_TREE;
12908       tree decl = TYPE_STUB_DECL (node);
12909
12910       if (TYPE_NAME (node))
12911         {
12912           if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12913             what = TYPE_NAME (node);
12914           else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12915                    && DECL_NAME (TYPE_NAME (node)))
12916             what = DECL_NAME (TYPE_NAME (node));
12917         }
12918
12919       if (decl)
12920         {
12921           if (what)
12922             {
12923               if (msg)
12924                 w = warning (OPT_Wdeprecated_declarations,
12925                              "%qE is deprecated: %s", what, msg);
12926               else
12927                 w = warning (OPT_Wdeprecated_declarations,
12928                              "%qE is deprecated", what);
12929             }
12930           else
12931             {
12932               if (msg)
12933                 w = warning (OPT_Wdeprecated_declarations,
12934                              "type is deprecated: %s", msg);
12935               else
12936                 w = warning (OPT_Wdeprecated_declarations,
12937                              "type is deprecated");
12938             }
12939           if (w)
12940             inform (DECL_SOURCE_LOCATION (decl), "declared here");
12941         }
12942       else
12943         {
12944           if (what)
12945             {
12946               if (msg)
12947                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12948                          what, msg);
12949               else
12950                 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12951             }
12952           else
12953             {
12954               if (msg)
12955                 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12956                          msg);
12957               else
12958                 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12959             }
12960         }
12961     }
12962 }
12963
12964 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12965    somewhere in it.  */
12966
12967 bool
12968 contains_bitfld_component_ref_p (const_tree ref)
12969 {
12970   while (handled_component_p (ref))
12971     {
12972       if (TREE_CODE (ref) == COMPONENT_REF
12973           && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12974         return true;
12975       ref = TREE_OPERAND (ref, 0);
12976     }
12977
12978   return false;
12979 }
12980
12981 /* Try to determine whether a TRY_CATCH expression can fall through.
12982    This is a subroutine of block_may_fallthru.  */
12983
12984 static bool
12985 try_catch_may_fallthru (const_tree stmt)
12986 {
12987   tree_stmt_iterator i;
12988
12989   /* If the TRY block can fall through, the whole TRY_CATCH can
12990      fall through.  */
12991   if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12992     return true;
12993
12994   i = tsi_start (TREE_OPERAND (stmt, 1));
12995   switch (TREE_CODE (tsi_stmt (i)))
12996     {
12997     case CATCH_EXPR:
12998       /* We expect to see a sequence of CATCH_EXPR trees, each with a
12999          catch expression and a body.  The whole TRY_CATCH may fall
13000          through iff any of the catch bodies falls through.  */
13001       for (; !tsi_end_p (i); tsi_next (&i))
13002         {
13003           if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
13004             return true;
13005         }
13006       return false;
13007
13008     case EH_FILTER_EXPR:
13009       /* The exception filter expression only matters if there is an
13010          exception.  If the exception does not match EH_FILTER_TYPES,
13011          we will execute EH_FILTER_FAILURE, and we will fall through
13012          if that falls through.  If the exception does match
13013          EH_FILTER_TYPES, the stack unwinder will continue up the
13014          stack, so we will not fall through.  We don't know whether we
13015          will throw an exception which matches EH_FILTER_TYPES or not,
13016          so we just ignore EH_FILTER_TYPES and assume that we might
13017          throw an exception which doesn't match.  */
13018       return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
13019
13020     default:
13021       /* This case represents statements to be executed when an
13022          exception occurs.  Those statements are implicitly followed
13023          by a RESX statement to resume execution after the exception.
13024          So in this case the TRY_CATCH never falls through.  */
13025       return false;
13026     }
13027 }
13028
13029 /* Try to determine if we can fall out of the bottom of BLOCK.  This guess
13030    need not be 100% accurate; simply be conservative and return true if we
13031    don't know.  This is used only to avoid stupidly generating extra code.
13032    If we're wrong, we'll just delete the extra code later.  */
13033
13034 bool
13035 block_may_fallthru (const_tree block)
13036 {
13037   /* This CONST_CAST is okay because expr_last returns its argument
13038      unmodified and we assign it to a const_tree.  */
13039   const_tree stmt = expr_last (CONST_CAST_TREE (block));
13040
13041   switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
13042     {
13043     case GOTO_EXPR:
13044     case RETURN_EXPR:
13045       /* Easy cases.  If the last statement of the block implies
13046          control transfer, then we can't fall through.  */
13047       return false;
13048
13049     case SWITCH_EXPR:
13050       /* If SWITCH_LABELS is set, this is lowered, and represents a
13051          branch to a selected label and hence can not fall through.
13052          Otherwise SWITCH_BODY is set, and the switch can fall
13053          through.  */
13054       return SWITCH_LABELS (stmt) == NULL_TREE;
13055
13056     case COND_EXPR:
13057       if (block_may_fallthru (COND_EXPR_THEN (stmt)))
13058         return true;
13059       return block_may_fallthru (COND_EXPR_ELSE (stmt));
13060
13061     case BIND_EXPR:
13062       return block_may_fallthru (BIND_EXPR_BODY (stmt));
13063
13064     case TRY_CATCH_EXPR:
13065       return try_catch_may_fallthru (stmt);
13066
13067     case TRY_FINALLY_EXPR:
13068       /* The finally clause is always executed after the try clause,
13069          so if it does not fall through, then the try-finally will not
13070          fall through.  Otherwise, if the try clause does not fall
13071          through, then when the finally clause falls through it will
13072          resume execution wherever the try clause was going.  So the
13073          whole try-finally will only fall through if both the try
13074          clause and the finally clause fall through.  */
13075       return (block_may_fallthru (TREE_OPERAND (stmt, 0))
13076               && block_may_fallthru (TREE_OPERAND (stmt, 1)));
13077
13078     case MODIFY_EXPR:
13079       if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
13080         stmt = TREE_OPERAND (stmt, 1);
13081       else
13082         return true;
13083       /* FALLTHRU */
13084
13085     case CALL_EXPR:
13086       /* Functions that do not return do not fall through.  */
13087       return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
13088
13089     case CLEANUP_POINT_EXPR:
13090       return block_may_fallthru (TREE_OPERAND (stmt, 0));
13091
13092     case TARGET_EXPR:
13093       return block_may_fallthru (TREE_OPERAND (stmt, 1));
13094
13095     case ERROR_MARK:
13096       return true;
13097
13098     default:
13099       return lang_hooks.block_may_fallthru (stmt);
13100     }
13101 }
13102
13103 /* True if we are using EH to handle cleanups.  */
13104 static bool using_eh_for_cleanups_flag = false;
13105
13106 /* This routine is called from front ends to indicate eh should be used for
13107    cleanups.  */
13108 void
13109 using_eh_for_cleanups (void)
13110 {
13111   using_eh_for_cleanups_flag = true;
13112 }
13113
13114 /* Query whether EH is used for cleanups.  */
13115 bool
13116 using_eh_for_cleanups_p (void)
13117 {
13118   return using_eh_for_cleanups_flag;
13119 }
13120
13121 /* Wrapper for tree_code_name to ensure that tree code is valid */
13122 const char *
13123 get_tree_code_name (enum tree_code code)
13124 {
13125   const char *invalid = "<invalid tree code>";
13126
13127   if (code >= MAX_TREE_CODES)
13128     return invalid;
13129
13130   return tree_code_name[code];
13131 }
13132
13133 /* Drops the TREE_OVERFLOW flag from T.  */
13134
13135 tree
13136 drop_tree_overflow (tree t)
13137 {
13138   gcc_checking_assert (TREE_OVERFLOW (t));
13139
13140   /* For tree codes with a sharing machinery re-build the result.  */
13141   if (TREE_CODE (t) == INTEGER_CST)
13142     return wide_int_to_tree (TREE_TYPE (t), t);
13143
13144   /* Otherwise, as all tcc_constants are possibly shared, copy the node
13145      and drop the flag.  */
13146   t = copy_node (t);
13147   TREE_OVERFLOW (t) = 0;
13148
13149   /* For constants that contain nested constants, drop the flag
13150      from those as well.  */
13151   if (TREE_CODE (t) == COMPLEX_CST)
13152     {
13153       if (TREE_OVERFLOW (TREE_REALPART (t)))
13154         TREE_REALPART (t) = drop_tree_overflow (TREE_REALPART (t));
13155       if (TREE_OVERFLOW (TREE_IMAGPART (t)))
13156         TREE_IMAGPART (t) = drop_tree_overflow (TREE_IMAGPART (t));
13157     }
13158   if (TREE_CODE (t) == VECTOR_CST)
13159     {
13160       for (unsigned i = 0; i < VECTOR_CST_NELTS (t); ++i)
13161         {
13162           tree& elt = VECTOR_CST_ELT (t, i);
13163           if (TREE_OVERFLOW (elt))
13164             elt = drop_tree_overflow (elt);
13165         }
13166     }
13167   return t;
13168 }
13169
13170 /* Given a memory reference expression T, return its base address.
13171    The base address of a memory reference expression is the main
13172    object being referenced.  For instance, the base address for
13173    'array[i].fld[j]' is 'array'.  You can think of this as stripping
13174    away the offset part from a memory address.
13175
13176    This function calls handled_component_p to strip away all the inner
13177    parts of the memory reference until it reaches the base object.  */
13178
13179 tree
13180 get_base_address (tree t)
13181 {
13182   while (handled_component_p (t))
13183     t = TREE_OPERAND (t, 0);
13184
13185   if ((TREE_CODE (t) == MEM_REF
13186        || TREE_CODE (t) == TARGET_MEM_REF)
13187       && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
13188     t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
13189
13190   /* ???  Either the alias oracle or all callers need to properly deal
13191      with WITH_SIZE_EXPRs before we can look through those.  */
13192   if (TREE_CODE (t) == WITH_SIZE_EXPR)
13193     return NULL_TREE;
13194
13195   return t;
13196 }
13197
13198 /* Return a tree of sizetype representing the size, in bytes, of the element
13199    of EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13200
13201 tree
13202 array_ref_element_size (tree exp)
13203 {
13204   tree aligned_size = TREE_OPERAND (exp, 3);
13205   tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
13206   location_t loc = EXPR_LOCATION (exp);
13207
13208   /* If a size was specified in the ARRAY_REF, it's the size measured
13209      in alignment units of the element type.  So multiply by that value.  */
13210   if (aligned_size)
13211     {
13212       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13213          sizetype from another type of the same width and signedness.  */
13214       if (TREE_TYPE (aligned_size) != sizetype)
13215         aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
13216       return size_binop_loc (loc, MULT_EXPR, aligned_size,
13217                              size_int (TYPE_ALIGN_UNIT (elmt_type)));
13218     }
13219
13220   /* Otherwise, take the size from that of the element type.  Substitute
13221      any PLACEHOLDER_EXPR that we have.  */
13222   else
13223     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
13224 }
13225
13226 /* Return a tree representing the lower bound of the array mentioned in
13227    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13228
13229 tree
13230 array_ref_low_bound (tree exp)
13231 {
13232   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13233
13234   /* If a lower bound is specified in EXP, use it.  */
13235   if (TREE_OPERAND (exp, 2))
13236     return TREE_OPERAND (exp, 2);
13237
13238   /* Otherwise, if there is a domain type and it has a lower bound, use it,
13239      substituting for a PLACEHOLDER_EXPR as needed.  */
13240   if (domain_type && TYPE_MIN_VALUE (domain_type))
13241     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
13242
13243   /* Otherwise, return a zero of the appropriate type.  */
13244   return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0);
13245 }
13246
13247 /* Return a tree representing the upper bound of the array mentioned in
13248    EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
13249
13250 tree
13251 array_ref_up_bound (tree exp)
13252 {
13253   tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13254
13255   /* If there is a domain type and it has an upper bound, use it, substituting
13256      for a PLACEHOLDER_EXPR as needed.  */
13257   if (domain_type && TYPE_MAX_VALUE (domain_type))
13258     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
13259
13260   /* Otherwise fail.  */
13261   return NULL_TREE;
13262 }
13263
13264 /* Returns true if REF is an array reference or a component reference
13265    to an array at the end of a structure.
13266    If this is the case, the array may be allocated larger
13267    than its upper bound implies.  */
13268
13269 bool
13270 array_at_struct_end_p (tree ref)
13271 {
13272   tree atype;
13273
13274   if (TREE_CODE (ref) == ARRAY_REF
13275       || TREE_CODE (ref) == ARRAY_RANGE_REF)
13276     {
13277       atype = TREE_TYPE (TREE_OPERAND (ref, 0));
13278       ref = TREE_OPERAND (ref, 0);
13279     }
13280   else if (TREE_CODE (ref) == COMPONENT_REF
13281            && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 1))) == ARRAY_TYPE)
13282     atype = TREE_TYPE (TREE_OPERAND (ref, 1));
13283   else
13284     return false;
13285
13286   while (handled_component_p (ref))
13287     {
13288       /* If the reference chain contains a component reference to a
13289          non-union type and there follows another field the reference
13290          is not at the end of a structure.  */
13291       if (TREE_CODE (ref) == COMPONENT_REF)
13292         {
13293           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
13294             {
13295               tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
13296               while (nextf && TREE_CODE (nextf) != FIELD_DECL)
13297                 nextf = DECL_CHAIN (nextf);
13298               if (nextf)
13299                 return false;
13300             }
13301         }
13302       /* If we have a multi-dimensional array we do not consider
13303          a non-innermost dimension as flex array if the whole
13304          multi-dimensional array is at struct end.
13305          Same for an array of aggregates with a trailing array
13306          member.  */
13307       else if (TREE_CODE (ref) == ARRAY_REF)
13308         return false;
13309       else if (TREE_CODE (ref) == ARRAY_RANGE_REF)
13310         ;
13311       /* If we view an underlying object as sth else then what we
13312          gathered up to now is what we have to rely on.  */
13313       else if (TREE_CODE (ref) == VIEW_CONVERT_EXPR)
13314         break;
13315       else
13316         gcc_unreachable ();
13317
13318       ref = TREE_OPERAND (ref, 0);
13319     }
13320
13321   /* The array now is at struct end.  Treat flexible arrays as
13322      always subject to extend, even into just padding constrained by
13323      an underlying decl.  */
13324   if (! TYPE_SIZE (atype))
13325     return true;
13326
13327   tree size = NULL;
13328
13329   if (TREE_CODE (ref) == MEM_REF
13330       && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
13331     {
13332       size = TYPE_SIZE (TREE_TYPE (ref));
13333       ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
13334     }
13335
13336   /* If the reference is based on a declared entity, the size of the array
13337      is constrained by its given domain.  (Do not trust commons PR/69368).  */
13338   if (DECL_P (ref)
13339       /* Be sure the size of MEM_REF target match.  For example:
13340
13341            char buf[10];
13342            struct foo *str = (struct foo *)&buf;
13343
13344            str->trailin_array[2] = 1;
13345
13346          is valid because BUF allocate enough space.  */
13347
13348       && (!size || (DECL_SIZE (ref) != NULL
13349                     && operand_equal_p (DECL_SIZE (ref), size, 0)))
13350       && !(flag_unconstrained_commons
13351            && VAR_P (ref) && DECL_COMMON (ref)))
13352     return false;
13353
13354   return true;
13355 }
13356
13357 /* Return a tree representing the offset, in bytes, of the field referenced
13358    by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */
13359
13360 tree
13361 component_ref_field_offset (tree exp)
13362 {
13363   tree aligned_offset = TREE_OPERAND (exp, 2);
13364   tree field = TREE_OPERAND (exp, 1);
13365   location_t loc = EXPR_LOCATION (exp);
13366
13367   /* If an offset was specified in the COMPONENT_REF, it's the offset measured
13368      in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT.  So multiply by that
13369      value.  */
13370   if (aligned_offset)
13371     {
13372       /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13373          sizetype from another type of the same width and signedness.  */
13374       if (TREE_TYPE (aligned_offset) != sizetype)
13375         aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
13376       return size_binop_loc (loc, MULT_EXPR, aligned_offset,
13377                              size_int (DECL_OFFSET_ALIGN (field)
13378                                        / BITS_PER_UNIT));
13379     }
13380
13381   /* Otherwise, take the offset from that of the field.  Substitute
13382      any PLACEHOLDER_EXPR that we have.  */
13383   else
13384     return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
13385 }
13386
13387 /* Return the machine mode of T.  For vectors, returns the mode of the
13388    inner type.  The main use case is to feed the result to HONOR_NANS,
13389    avoiding the BLKmode that a direct TYPE_MODE (T) might return.  */
13390
13391 machine_mode
13392 element_mode (const_tree t)
13393 {
13394   if (!TYPE_P (t))
13395     t = TREE_TYPE (t);
13396   if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
13397     t = TREE_TYPE (t);
13398   return TYPE_MODE (t);
13399 }
13400  
13401
13402 /* Veirfy that basic properties of T match TV and thus T can be a variant of
13403    TV.  TV should be the more specified variant (i.e. the main variant).  */
13404
13405 static bool
13406 verify_type_variant (const_tree t, tree tv)
13407 {
13408   /* Type variant can differ by:
13409
13410      - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
13411                    ENCODE_QUAL_ADDR_SPACE. 
13412      - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
13413        in this case some values may not be set in the variant types
13414        (see TYPE_COMPLETE_P checks).
13415      - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
13416      - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
13417      - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
13418      - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
13419      - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
13420        this is necessary to make it possible to merge types form different TUs
13421      - arrays, pointers and references may have TREE_TYPE that is a variant
13422        of TREE_TYPE of their main variants.
13423      - aggregates may have new TYPE_FIELDS list that list variants of
13424        the main variant TYPE_FIELDS.
13425      - vector types may differ by TYPE_VECTOR_OPAQUE
13426      - TYPE_METHODS is always NULL for variant types and maintained for
13427        main variant only.
13428    */
13429
13430   /* Convenience macro for matching individual fields.  */
13431 #define verify_variant_match(flag)                                          \
13432   do {                                                                      \
13433     if (flag (tv) != flag (t))                                              \
13434       {                                                                     \
13435         error ("type variant differs by " #flag ".");                       \
13436         debug_tree (tv);                                                    \
13437         return false;                                                       \
13438       }                                                                     \
13439   } while (false)
13440
13441   /* tree_base checks.  */
13442
13443   verify_variant_match (TREE_CODE);
13444   /* FIXME: Ada builds non-artificial variants of artificial types.  */
13445   if (TYPE_ARTIFICIAL (tv) && 0)
13446     verify_variant_match (TYPE_ARTIFICIAL);
13447   if (POINTER_TYPE_P (tv))
13448     verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
13449   /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build.  */
13450   verify_variant_match (TYPE_UNSIGNED);
13451   verify_variant_match (TYPE_PACKED);
13452   if (TREE_CODE (t) == REFERENCE_TYPE)
13453     verify_variant_match (TYPE_REF_IS_RVALUE);
13454   if (AGGREGATE_TYPE_P (t))
13455     verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
13456   else
13457     verify_variant_match (TYPE_SATURATING);
13458   /* FIXME: This check trigger during libstdc++ build.  */
13459   if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
13460     verify_variant_match (TYPE_FINAL_P);
13461
13462   /* tree_type_common checks.  */
13463
13464   if (COMPLETE_TYPE_P (t))
13465     {
13466       verify_variant_match (TYPE_MODE);
13467       if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR
13468           && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR)
13469         verify_variant_match (TYPE_SIZE);
13470       if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR
13471           && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR
13472           && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv))
13473         {
13474           gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t),
13475                                         TYPE_SIZE_UNIT (tv), 0));
13476           error ("type variant has different TYPE_SIZE_UNIT");
13477           debug_tree (tv);
13478           error ("type variant's TYPE_SIZE_UNIT");
13479           debug_tree (TYPE_SIZE_UNIT (tv));
13480           error ("type's TYPE_SIZE_UNIT");
13481           debug_tree (TYPE_SIZE_UNIT (t));
13482           return false;
13483         }
13484     }
13485   verify_variant_match (TYPE_PRECISION);
13486   verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
13487   if (RECORD_OR_UNION_TYPE_P (t))
13488     verify_variant_match (TYPE_TRANSPARENT_AGGR);
13489   else if (TREE_CODE (t) == ARRAY_TYPE)
13490     verify_variant_match (TYPE_NONALIASED_COMPONENT);
13491   /* During LTO we merge variant lists from diferent translation units
13492      that may differ BY TYPE_CONTEXT that in turn may point 
13493      to TRANSLATION_UNIT_DECL.
13494      Ada also builds variants of types with different TYPE_CONTEXT.   */
13495   if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
13496     verify_variant_match (TYPE_CONTEXT);
13497   verify_variant_match (TYPE_STRING_FLAG);
13498   if (TYPE_ALIAS_SET_KNOWN_P (t))
13499     {
13500       error ("type variant with TYPE_ALIAS_SET_KNOWN_P");
13501       debug_tree (tv);
13502       return false;
13503     }
13504
13505   /* tree_type_non_common checks.  */
13506
13507   /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13508      and dangle the pointer from time to time.  */
13509   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
13510       && (in_lto_p || !TYPE_VFIELD (tv)
13511           || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
13512     {
13513       error ("type variant has different TYPE_VFIELD");
13514       debug_tree (tv);
13515       return false;
13516     }
13517   if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
13518        || TREE_CODE (t) == INTEGER_TYPE
13519        || TREE_CODE (t) == BOOLEAN_TYPE
13520        || TREE_CODE (t) == REAL_TYPE
13521        || TREE_CODE (t) == FIXED_POINT_TYPE)
13522     {
13523       verify_variant_match (TYPE_MAX_VALUE);
13524       verify_variant_match (TYPE_MIN_VALUE);
13525     }
13526   if (TREE_CODE (t) == METHOD_TYPE)
13527     verify_variant_match (TYPE_METHOD_BASETYPE);
13528   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_METHODS (t))
13529     {
13530       error ("type variant has TYPE_METHODS");
13531       debug_tree (tv);
13532       return false;
13533     }
13534   if (TREE_CODE (t) == OFFSET_TYPE)
13535     verify_variant_match (TYPE_OFFSET_BASETYPE);
13536   if (TREE_CODE (t) == ARRAY_TYPE)
13537     verify_variant_match (TYPE_ARRAY_MAX_SIZE);
13538   /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
13539      or even type's main variant.  This is needed to make bootstrap pass
13540      and the bug seems new in GCC 5.
13541      C++ FE should be updated to make this consistent and we should check
13542      that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
13543      is a match with main variant.
13544
13545      Also disable the check for Java for now because of parser hack that builds
13546      first an dummy BINFO and then sometimes replace it by real BINFO in some
13547      of the copies.  */
13548   if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
13549       && TYPE_BINFO (t) != TYPE_BINFO (tv)
13550       /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
13551          Since there is no cheap way to tell C++/Java type w/o LTO, do checking
13552          at LTO time only.  */
13553       && (in_lto_p && odr_type_p (t)))
13554     {
13555       error ("type variant has different TYPE_BINFO");
13556       debug_tree (tv);
13557       error ("type variant's TYPE_BINFO");
13558       debug_tree (TYPE_BINFO (tv));
13559       error ("type's TYPE_BINFO");
13560       debug_tree (TYPE_BINFO (t));
13561       return false;
13562     }
13563
13564   /* Check various uses of TYPE_VALUES_RAW.  */
13565   if (TREE_CODE (t) == ENUMERAL_TYPE)
13566     verify_variant_match (TYPE_VALUES);
13567   else if (TREE_CODE (t) == ARRAY_TYPE)
13568     verify_variant_match (TYPE_DOMAIN);
13569   /* Permit incomplete variants of complete type.  While FEs may complete
13570      all variants, this does not happen for C++ templates in all cases.  */
13571   else if (RECORD_OR_UNION_TYPE_P (t)
13572            && COMPLETE_TYPE_P (t)
13573            && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
13574     {
13575       tree f1, f2;
13576
13577       /* Fortran builds qualified variants as new records with items of
13578          qualified type. Verify that they looks same.  */
13579       for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
13580            f1 && f2;
13581            f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13582         if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
13583             || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
13584                  != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
13585                 /* FIXME: gfc_nonrestricted_type builds all types as variants
13586                    with exception of pointer types.  It deeply copies the type
13587                    which means that we may end up with a variant type
13588                    referring non-variant pointer.  We may change it to
13589                    produce types as variants, too, like
13590                    objc_get_protocol_qualified_type does.  */
13591                 && !POINTER_TYPE_P (TREE_TYPE (f1)))
13592             || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
13593             || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
13594           break;
13595       if (f1 || f2)
13596         {
13597           error ("type variant has different TYPE_FIELDS");
13598           debug_tree (tv);
13599           error ("first mismatch is field");
13600           debug_tree (f1);
13601           error ("and field");
13602           debug_tree (f2);
13603           return false;
13604         }
13605     }
13606   else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
13607     verify_variant_match (TYPE_ARG_TYPES);
13608   /* For C++ the qualified variant of array type is really an array type
13609      of qualified TREE_TYPE.
13610      objc builds variants of pointer where pointer to type is a variant, too
13611      in objc_get_protocol_qualified_type.  */
13612   if (TREE_TYPE (t) != TREE_TYPE (tv)
13613       && ((TREE_CODE (t) != ARRAY_TYPE
13614            && !POINTER_TYPE_P (t))
13615           || TYPE_MAIN_VARIANT (TREE_TYPE (t))
13616              != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
13617     {
13618       error ("type variant has different TREE_TYPE");
13619       debug_tree (tv);
13620       error ("type variant's TREE_TYPE");
13621       debug_tree (TREE_TYPE (tv));
13622       error ("type's TREE_TYPE");
13623       debug_tree (TREE_TYPE (t));
13624       return false;
13625     }
13626   if (type_with_alias_set_p (t)
13627       && !gimple_canonical_types_compatible_p (t, tv, false))
13628     {
13629       error ("type is not compatible with its variant");
13630       debug_tree (tv);
13631       error ("type variant's TREE_TYPE");
13632       debug_tree (TREE_TYPE (tv));
13633       error ("type's TREE_TYPE");
13634       debug_tree (TREE_TYPE (t));
13635       return false;
13636     }
13637   return true;
13638 #undef verify_variant_match
13639 }
13640
13641
13642 /* The TYPE_CANONICAL merging machinery.  It should closely resemble
13643    the middle-end types_compatible_p function.  It needs to avoid
13644    claiming types are different for types that should be treated
13645    the same with respect to TBAA.  Canonical types are also used
13646    for IL consistency checks via the useless_type_conversion_p
13647    predicate which does not handle all type kinds itself but falls
13648    back to pointer-comparison of TYPE_CANONICAL for aggregates
13649    for example.  */
13650
13651 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
13652    type calculation because we need to allow inter-operability between signed
13653    and unsigned variants.  */
13654
13655 bool
13656 type_with_interoperable_signedness (const_tree type)
13657 {
13658   /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
13659      signed char and unsigned char.  Similarly fortran FE builds
13660      C_SIZE_T as signed type, while C defines it unsigned.  */
13661
13662   return tree_code_for_canonical_type_merging (TREE_CODE (type))
13663            == INTEGER_TYPE
13664          && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
13665              || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
13666 }
13667
13668 /* Return true iff T1 and T2 are structurally identical for what
13669    TBAA is concerned.  
13670    This function is used both by lto.c canonical type merging and by the
13671    verifier.  If TRUST_TYPE_CANONICAL we do not look into structure of types
13672    that have TYPE_CANONICAL defined and assume them equivalent.  This is useful
13673    only for LTO because only in these cases TYPE_CANONICAL equivalence
13674    correspond to one defined by gimple_canonical_types_compatible_p.  */
13675
13676 bool
13677 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
13678                                      bool trust_type_canonical)
13679 {
13680   /* Type variants should be same as the main variant.  When not doing sanity
13681      checking to verify this fact, go to main variants and save some work.  */
13682   if (trust_type_canonical)
13683     {
13684       t1 = TYPE_MAIN_VARIANT (t1);
13685       t2 = TYPE_MAIN_VARIANT (t2);
13686     }
13687
13688   /* Check first for the obvious case of pointer identity.  */
13689   if (t1 == t2)
13690     return true;
13691
13692   /* Check that we have two types to compare.  */
13693   if (t1 == NULL_TREE || t2 == NULL_TREE)
13694     return false;
13695
13696   /* We consider complete types always compatible with incomplete type.
13697      This does not make sense for canonical type calculation and thus we
13698      need to ensure that we are never called on it.
13699
13700      FIXME: For more correctness the function probably should have three modes
13701         1) mode assuming that types are complete mathcing their structure
13702         2) mode allowing incomplete types but producing equivalence classes
13703            and thus ignoring all info from complete types
13704         3) mode allowing incomplete types to match complete but checking
13705            compatibility between complete types.
13706
13707      1 and 2 can be used for canonical type calculation. 3 is the real
13708      definition of type compatibility that can be used i.e. for warnings during
13709      declaration merging.  */
13710
13711   gcc_assert (!trust_type_canonical
13712               || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
13713   /* If the types have been previously registered and found equal
13714      they still are.  */
13715
13716   if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
13717       && trust_type_canonical)
13718     {
13719       /* Do not use TYPE_CANONICAL of pointer types.  For LTO streamed types
13720          they are always NULL, but they are set to non-NULL for types
13721          constructed by build_pointer_type and variants.  In this case the
13722          TYPE_CANONICAL is more fine grained than the equivalnce we test (where
13723          all pointers are considered equal.  Be sure to not return false
13724          negatives.  */
13725       gcc_checking_assert (canonical_type_used_p (t1)
13726                            && canonical_type_used_p (t2));
13727       return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
13728     }
13729
13730   /* Can't be the same type if the types don't have the same code.  */
13731   enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
13732   if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
13733     return false;
13734
13735   /* Qualifiers do not matter for canonical type comparison purposes.  */
13736
13737   /* Void types and nullptr types are always the same.  */
13738   if (TREE_CODE (t1) == VOID_TYPE
13739       || TREE_CODE (t1) == NULLPTR_TYPE)
13740     return true;
13741
13742   /* Can't be the same type if they have different mode.  */
13743   if (TYPE_MODE (t1) != TYPE_MODE (t2))
13744     return false;
13745
13746   /* Non-aggregate types can be handled cheaply.  */
13747   if (INTEGRAL_TYPE_P (t1)
13748       || SCALAR_FLOAT_TYPE_P (t1)
13749       || FIXED_POINT_TYPE_P (t1)
13750       || TREE_CODE (t1) == VECTOR_TYPE
13751       || TREE_CODE (t1) == COMPLEX_TYPE
13752       || TREE_CODE (t1) == OFFSET_TYPE
13753       || POINTER_TYPE_P (t1))
13754     {
13755       /* Can't be the same type if they have different recision.  */
13756       if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
13757         return false;
13758
13759       /* In some cases the signed and unsigned types are required to be
13760          inter-operable.  */
13761       if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
13762           && !type_with_interoperable_signedness (t1))
13763         return false;
13764
13765       /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
13766          interoperable with "signed char".  Unless all frontends are revisited
13767          to agree on these types, we must ignore the flag completely.  */
13768
13769       /* Fortran standard define C_PTR type that is compatible with every
13770          C pointer.  For this reason we need to glob all pointers into one.
13771          Still pointers in different address spaces are not compatible.  */
13772       if (POINTER_TYPE_P (t1))
13773         {
13774           if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
13775               != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
13776             return false;
13777         }
13778
13779       /* Tail-recurse to components.  */
13780       if (TREE_CODE (t1) == VECTOR_TYPE
13781           || TREE_CODE (t1) == COMPLEX_TYPE)
13782         return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
13783                                                     TREE_TYPE (t2),
13784                                                     trust_type_canonical);
13785
13786       return true;
13787     }
13788
13789   /* Do type-specific comparisons.  */
13790   switch (TREE_CODE (t1))
13791     {
13792     case ARRAY_TYPE:
13793       /* Array types are the same if the element types are the same and
13794          the number of elements are the same.  */
13795       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13796                                                 trust_type_canonical)
13797           || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
13798           || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
13799           || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
13800         return false;
13801       else
13802         {
13803           tree i1 = TYPE_DOMAIN (t1);
13804           tree i2 = TYPE_DOMAIN (t2);
13805
13806           /* For an incomplete external array, the type domain can be
13807              NULL_TREE.  Check this condition also.  */
13808           if (i1 == NULL_TREE && i2 == NULL_TREE)
13809             return true;
13810           else if (i1 == NULL_TREE || i2 == NULL_TREE)
13811             return false;
13812           else
13813             {
13814               tree min1 = TYPE_MIN_VALUE (i1);
13815               tree min2 = TYPE_MIN_VALUE (i2);
13816               tree max1 = TYPE_MAX_VALUE (i1);
13817               tree max2 = TYPE_MAX_VALUE (i2);
13818
13819               /* The minimum/maximum values have to be the same.  */
13820               if ((min1 == min2
13821                    || (min1 && min2
13822                        && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
13823                             && TREE_CODE (min2) == PLACEHOLDER_EXPR)
13824                            || operand_equal_p (min1, min2, 0))))
13825                   && (max1 == max2
13826                       || (max1 && max2
13827                           && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
13828                                && TREE_CODE (max2) == PLACEHOLDER_EXPR)
13829                               || operand_equal_p (max1, max2, 0)))))
13830                 return true;
13831               else
13832                 return false;
13833             }
13834         }
13835
13836     case METHOD_TYPE:
13837     case FUNCTION_TYPE:
13838       /* Function types are the same if the return type and arguments types
13839          are the same.  */
13840       if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13841                                                 trust_type_canonical))
13842         return false;
13843
13844       if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
13845         return true;
13846       else
13847         {
13848           tree parms1, parms2;
13849
13850           for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
13851                parms1 && parms2;
13852                parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
13853             {
13854               if (!gimple_canonical_types_compatible_p
13855                      (TREE_VALUE (parms1), TREE_VALUE (parms2),
13856                       trust_type_canonical))
13857                 return false;
13858             }
13859
13860           if (parms1 || parms2)
13861             return false;
13862
13863           return true;
13864         }
13865
13866     case RECORD_TYPE:
13867     case UNION_TYPE:
13868     case QUAL_UNION_TYPE:
13869       {
13870         tree f1, f2;
13871
13872         /* Don't try to compare variants of an incomplete type, before
13873            TYPE_FIELDS has been copied around.  */
13874         if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
13875           return true;
13876
13877
13878         if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
13879           return false;
13880
13881         /* For aggregate types, all the fields must be the same.  */
13882         for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
13883              f1 || f2;
13884              f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13885           {
13886             /* Skip non-fields and zero-sized fields.  */
13887             while (f1 && (TREE_CODE (f1) != FIELD_DECL
13888                           || (DECL_SIZE (f1)
13889                               && integer_zerop (DECL_SIZE (f1)))))
13890               f1 = TREE_CHAIN (f1);
13891             while (f2 && (TREE_CODE (f2) != FIELD_DECL
13892                           || (DECL_SIZE (f2)
13893                               && integer_zerop (DECL_SIZE (f2)))))
13894               f2 = TREE_CHAIN (f2);
13895             if (!f1 || !f2)
13896               break;
13897             /* The fields must have the same name, offset and type.  */
13898             if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
13899                 || !gimple_compare_field_offset (f1, f2)
13900                 || !gimple_canonical_types_compatible_p
13901                       (TREE_TYPE (f1), TREE_TYPE (f2),
13902                        trust_type_canonical))
13903               return false;
13904           }
13905
13906         /* If one aggregate has more fields than the other, they
13907            are not the same.  */
13908         if (f1 || f2)
13909           return false;
13910
13911         return true;
13912       }
13913
13914     default:
13915       /* Consider all types with language specific trees in them mutually
13916          compatible.  This is executed only from verify_type and false
13917          positives can be tolerated.  */
13918       gcc_assert (!in_lto_p);
13919       return true;
13920     }
13921 }
13922
13923 /* Verify type T.  */
13924
13925 void
13926 verify_type (const_tree t)
13927 {
13928   bool error_found = false;
13929   tree mv = TYPE_MAIN_VARIANT (t);
13930   if (!mv)
13931     {
13932       error ("Main variant is not defined");
13933       error_found = true;
13934     }
13935   else if (mv != TYPE_MAIN_VARIANT (mv))
13936     {
13937       error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT");
13938       debug_tree (mv);
13939       error_found = true;
13940     }
13941   else if (t != mv && !verify_type_variant (t, mv))
13942     error_found = true;
13943
13944   tree ct = TYPE_CANONICAL (t);
13945   if (!ct)
13946     ;
13947   else if (TYPE_CANONICAL (t) != ct)
13948     {
13949       error ("TYPE_CANONICAL has different TYPE_CANONICAL");
13950       debug_tree (ct);
13951       error_found = true;
13952     }
13953   /* Method and function types can not be used to address memory and thus
13954      TYPE_CANONICAL really matters only for determining useless conversions.
13955
13956      FIXME: C++ FE produce declarations of builtin functions that are not
13957      compatible with main variants.  */
13958   else if (TREE_CODE (t) == FUNCTION_TYPE)
13959     ;
13960   else if (t != ct
13961            /* FIXME: gimple_canonical_types_compatible_p can not compare types
13962               with variably sized arrays because their sizes possibly
13963               gimplified to different variables.  */
13964            && !variably_modified_type_p (ct, NULL)
13965            && !gimple_canonical_types_compatible_p (t, ct, false))
13966     {
13967       error ("TYPE_CANONICAL is not compatible");
13968       debug_tree (ct);
13969       error_found = true;
13970     }
13971
13972   if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
13973       && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
13974     {
13975       error ("TYPE_MODE of TYPE_CANONICAL is not compatible");
13976       debug_tree (ct);
13977       error_found = true;
13978     }
13979   /* FIXME: this is violated by the C++ FE as discussed in PR70029, when
13980      FUNCTION_*_QUALIFIED flags are set.  */
13981   if (0 && TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
13982    {
13983       error ("TYPE_CANONICAL of main variant is not main variant");
13984       debug_tree (ct);
13985       debug_tree (TYPE_MAIN_VARIANT (ct));
13986       error_found = true;
13987    }
13988
13989
13990   /* Check various uses of TYPE_MINVAL.  */
13991   if (RECORD_OR_UNION_TYPE_P (t))
13992     {
13993       /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13994          and danagle the pointer from time to time.  */
13995       if (TYPE_VFIELD (t)
13996           && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
13997           && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
13998         {
13999           error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST");
14000           debug_tree (TYPE_VFIELD (t));
14001           error_found = true;
14002         }
14003     }
14004   else if (TREE_CODE (t) == POINTER_TYPE)
14005     {
14006       if (TYPE_NEXT_PTR_TO (t)
14007           && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
14008         {
14009           error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE");
14010           debug_tree (TYPE_NEXT_PTR_TO (t));
14011           error_found = true;
14012         }
14013     }
14014   else if (TREE_CODE (t) == REFERENCE_TYPE)
14015     {
14016       if (TYPE_NEXT_REF_TO (t)
14017           && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
14018         {
14019           error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE");
14020           debug_tree (TYPE_NEXT_REF_TO (t));
14021           error_found = true;
14022         }
14023     }
14024   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14025            || TREE_CODE (t) == FIXED_POINT_TYPE)
14026     {
14027       /* FIXME: The following check should pass:
14028           useless_type_conversion_p (const_cast <tree> (t),
14029                                      TREE_TYPE (TYPE_MIN_VALUE (t))
14030          but does not for C sizetypes in LTO.  */
14031     }
14032   /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE.  */
14033   else if (TYPE_MINVAL (t)
14034            && ((TREE_CODE (t) != METHOD_TYPE && TREE_CODE (t) != FUNCTION_TYPE)
14035                || in_lto_p))
14036     {
14037       error ("TYPE_MINVAL non-NULL");
14038       debug_tree (TYPE_MINVAL (t));
14039       error_found = true;
14040     }
14041
14042   /* Check various uses of TYPE_MAXVAL.  */
14043   if (RECORD_OR_UNION_TYPE_P (t))
14044     {
14045       if (TYPE_METHODS (t) && TREE_CODE (TYPE_METHODS (t)) != FUNCTION_DECL
14046           && TREE_CODE (TYPE_METHODS (t)) != TEMPLATE_DECL
14047           && TYPE_METHODS (t) != error_mark_node)
14048         {
14049           error ("TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node");
14050           debug_tree (TYPE_METHODS (t));
14051           error_found = true;
14052         }
14053     }
14054   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14055     {
14056       if (TYPE_METHOD_BASETYPE (t)
14057           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
14058           && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
14059         {
14060           error ("TYPE_METHOD_BASETYPE is not record nor union");
14061           debug_tree (TYPE_METHOD_BASETYPE (t));
14062           error_found = true;
14063         }
14064     }
14065   else if (TREE_CODE (t) == OFFSET_TYPE)
14066     {
14067       if (TYPE_OFFSET_BASETYPE (t)
14068           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
14069           && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
14070         {
14071           error ("TYPE_OFFSET_BASETYPE is not record nor union");
14072           debug_tree (TYPE_OFFSET_BASETYPE (t));
14073           error_found = true;
14074         }
14075     }
14076   else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14077            || TREE_CODE (t) == FIXED_POINT_TYPE)
14078     {
14079       /* FIXME: The following check should pass:
14080           useless_type_conversion_p (const_cast <tree> (t),
14081                                      TREE_TYPE (TYPE_MAX_VALUE (t))
14082          but does not for C sizetypes in LTO.  */
14083     }
14084   else if (TREE_CODE (t) == ARRAY_TYPE)
14085     {
14086       if (TYPE_ARRAY_MAX_SIZE (t)
14087           && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
14088         {
14089           error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST");
14090           debug_tree (TYPE_ARRAY_MAX_SIZE (t));
14091           error_found = true;
14092         } 
14093     }
14094   else if (TYPE_MAXVAL (t))
14095     {
14096       error ("TYPE_MAXVAL non-NULL");
14097       debug_tree (TYPE_MAXVAL (t));
14098       error_found = true;
14099     }
14100
14101   /* Check various uses of TYPE_BINFO.  */
14102   if (RECORD_OR_UNION_TYPE_P (t))
14103     {
14104       if (!TYPE_BINFO (t))
14105         ;
14106       else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
14107         {
14108           error ("TYPE_BINFO is not TREE_BINFO");
14109           debug_tree (TYPE_BINFO (t));
14110           error_found = true;
14111         }
14112       /* FIXME: Java builds invalid empty binfos that do not have
14113          TREE_TYPE set.  */
14114       else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t) && 0)
14115         {
14116           error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT");
14117           debug_tree (TREE_TYPE (TYPE_BINFO (t)));
14118           error_found = true;
14119         }
14120     }
14121   else if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
14122     {
14123       error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL");
14124       debug_tree (TYPE_LANG_SLOT_1 (t));
14125       error_found = true;
14126     }
14127
14128   /* Check various uses of TYPE_VALUES_RAW.  */
14129   if (TREE_CODE (t) == ENUMERAL_TYPE)
14130     for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
14131       {
14132         tree value = TREE_VALUE (l);
14133         tree name = TREE_PURPOSE (l);
14134
14135         /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
14136            CONST_DECL of ENUMERAL TYPE.  */
14137         if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
14138           {
14139             error ("Enum value is not CONST_DECL or INTEGER_CST");
14140             debug_tree (value);
14141             debug_tree (name);
14142             error_found = true;
14143           }
14144         if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
14145             && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
14146           {
14147             error ("Enum value type is not INTEGER_TYPE nor convertible to the enum");
14148             debug_tree (value);
14149             debug_tree (name);
14150             error_found = true;
14151           }
14152         if (TREE_CODE (name) != IDENTIFIER_NODE)
14153           {
14154             error ("Enum value name is not IDENTIFIER_NODE");
14155             debug_tree (value);
14156             debug_tree (name);
14157             error_found = true;
14158           }
14159       }
14160   else if (TREE_CODE (t) == ARRAY_TYPE)
14161     {
14162       if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
14163         {
14164           error ("Array TYPE_DOMAIN is not integer type");
14165           debug_tree (TYPE_DOMAIN (t));
14166           error_found = true;
14167         }
14168     }
14169   else if (RECORD_OR_UNION_TYPE_P (t))
14170     {
14171       if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
14172         {
14173           error ("TYPE_FIELDS defined in incomplete type");
14174           error_found = true;
14175         }
14176       for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
14177         {
14178           /* TODO: verify properties of decls.  */
14179           if (TREE_CODE (fld) == FIELD_DECL)
14180             ;
14181           else if (TREE_CODE (fld) == TYPE_DECL)
14182             ;
14183           else if (TREE_CODE (fld) == CONST_DECL)
14184             ;
14185           else if (VAR_P (fld))
14186             ;
14187           else if (TREE_CODE (fld) == TEMPLATE_DECL)
14188             ;
14189           else if (TREE_CODE (fld) == USING_DECL)
14190             ;
14191           else
14192             {
14193               error ("Wrong tree in TYPE_FIELDS list");
14194               debug_tree (fld);
14195               error_found = true;
14196             }
14197         }
14198     }
14199   else if (TREE_CODE (t) == INTEGER_TYPE
14200            || TREE_CODE (t) == BOOLEAN_TYPE
14201            || TREE_CODE (t) == OFFSET_TYPE
14202            || TREE_CODE (t) == REFERENCE_TYPE
14203            || TREE_CODE (t) == NULLPTR_TYPE
14204            || TREE_CODE (t) == POINTER_TYPE)
14205     {
14206       if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
14207         {
14208           error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p",
14209                  TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
14210           error_found = true;
14211         }
14212       else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
14213         {
14214           error ("TYPE_CACHED_VALUES is not TREE_VEC");
14215           debug_tree (TYPE_CACHED_VALUES (t));
14216           error_found = true;
14217         }
14218       /* Verify just enough of cache to ensure that no one copied it to new type.
14219          All copying should go by copy_node that should clear it.  */
14220       else if (TYPE_CACHED_VALUES_P (t))
14221         {
14222           int i;
14223           for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
14224             if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
14225                 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
14226               {
14227                 error ("wrong TYPE_CACHED_VALUES entry");
14228                 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
14229                 error_found = true;
14230                 break;
14231               }
14232         }
14233     }
14234   else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14235     for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
14236       {
14237         /* C++ FE uses TREE_PURPOSE to store initial values.  */
14238         if (TREE_PURPOSE (l) && in_lto_p)
14239           {
14240             error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list");
14241             debug_tree (l);
14242             error_found = true;
14243           }
14244         if (!TYPE_P (TREE_VALUE (l)))
14245           {
14246             error ("Wrong entry in TYPE_ARG_TYPES list");
14247             debug_tree (l);
14248             error_found = true;
14249           }
14250       }
14251   else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
14252     {
14253       error ("TYPE_VALUES_RAW field is non-NULL");
14254       debug_tree (TYPE_VALUES_RAW (t));
14255       error_found = true;
14256     }
14257   if (TREE_CODE (t) != INTEGER_TYPE
14258       && TREE_CODE (t) != BOOLEAN_TYPE
14259       && TREE_CODE (t) != OFFSET_TYPE
14260       && TREE_CODE (t) != REFERENCE_TYPE
14261       && TREE_CODE (t) != NULLPTR_TYPE
14262       && TREE_CODE (t) != POINTER_TYPE
14263       && TYPE_CACHED_VALUES_P (t))
14264     {
14265       error ("TYPE_CACHED_VALUES_P is set while it should not");
14266       error_found = true;
14267     }
14268   if (TYPE_STRING_FLAG (t)
14269       && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE)
14270     {
14271       error ("TYPE_STRING_FLAG is set on wrong type code");
14272       error_found = true;
14273     }
14274   else if (TYPE_STRING_FLAG (t))
14275     {
14276       const_tree b = t;
14277       if (TREE_CODE (b) == ARRAY_TYPE)
14278         b = TREE_TYPE (t);
14279       /* Java builds arrays with TYPE_STRING_FLAG of promoted_char_type
14280          that is 32bits.  */
14281       if (TREE_CODE (b) != INTEGER_TYPE)
14282         {
14283           error ("TYPE_STRING_FLAG is set on type that does not look like "
14284                  "char nor array of chars");
14285           error_found = true;
14286         }
14287     }
14288   
14289   /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
14290      TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
14291      of a type. */
14292   if (TREE_CODE (t) == METHOD_TYPE
14293       && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
14294     {
14295         error ("TYPE_METHOD_BASETYPE is not main variant");
14296         error_found = true;
14297     }
14298
14299   if (error_found)
14300     {
14301       debug_tree (const_cast <tree> (t));
14302       internal_error ("verify_type failed");
14303     }
14304 }
14305
14306
14307 /* Return 1 if ARG interpreted as signed in its precision is known to be
14308    always positive or 2 if ARG is known to be always negative, or 3 if
14309    ARG may be positive or negative.  */
14310
14311 int
14312 get_range_pos_neg (tree arg)
14313 {
14314   if (arg == error_mark_node)
14315     return 3;
14316
14317   int prec = TYPE_PRECISION (TREE_TYPE (arg));
14318   int cnt = 0;
14319   if (TREE_CODE (arg) == INTEGER_CST)
14320     {
14321       wide_int w = wi::sext (arg, prec);
14322       if (wi::neg_p (w))
14323         return 2;
14324       else
14325         return 1;
14326     }
14327   while (CONVERT_EXPR_P (arg)
14328          && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0)))
14329          && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec)
14330     {
14331       arg = TREE_OPERAND (arg, 0);
14332       /* Narrower value zero extended into wider type
14333          will always result in positive values.  */
14334       if (TYPE_UNSIGNED (TREE_TYPE (arg))
14335           && TYPE_PRECISION (TREE_TYPE (arg)) < prec)
14336         return 1;
14337       prec = TYPE_PRECISION (TREE_TYPE (arg));
14338       if (++cnt > 30)
14339         return 3;
14340     }
14341
14342   if (TREE_CODE (arg) != SSA_NAME)
14343     return 3;
14344   wide_int arg_min, arg_max;
14345   while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE)
14346     {
14347       gimple *g = SSA_NAME_DEF_STMT (arg);
14348       if (is_gimple_assign (g)
14349           && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g)))
14350         {
14351           tree t = gimple_assign_rhs1 (g);
14352           if (INTEGRAL_TYPE_P (TREE_TYPE (t))
14353               && TYPE_PRECISION (TREE_TYPE (t)) <= prec)
14354             {
14355               if (TYPE_UNSIGNED (TREE_TYPE (t))
14356                   && TYPE_PRECISION (TREE_TYPE (t)) < prec)
14357                 return 1;
14358               prec = TYPE_PRECISION (TREE_TYPE (t));
14359               arg = t;
14360               if (++cnt > 30)
14361                 return 3;
14362               continue;
14363             }
14364         }
14365       return 3;
14366     }
14367   if (TYPE_UNSIGNED (TREE_TYPE (arg)))
14368     {
14369       /* For unsigned values, the "positive" range comes
14370          below the "negative" range.  */
14371       if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14372         return 1;
14373       if (wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14374         return 2;
14375     }
14376   else
14377     {
14378       if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14379         return 1;
14380       if (wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14381         return 2;
14382     }
14383   return 3;
14384 }
14385
14386
14387
14388
14389 /* Return true if ARG is marked with the nonnull attribute in the
14390    current function signature.  */
14391
14392 bool
14393 nonnull_arg_p (const_tree arg)
14394 {
14395   tree t, attrs, fntype;
14396   unsigned HOST_WIDE_INT arg_num;
14397
14398   gcc_assert (TREE_CODE (arg) == PARM_DECL
14399               && (POINTER_TYPE_P (TREE_TYPE (arg))
14400                   || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
14401
14402   /* The static chain decl is always non null.  */
14403   if (arg == cfun->static_chain_decl)
14404     return true;
14405
14406   /* THIS argument of method is always non-NULL.  */
14407   if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
14408       && arg == DECL_ARGUMENTS (cfun->decl)
14409       && flag_delete_null_pointer_checks)
14410     return true;
14411
14412   /* Values passed by reference are always non-NULL.  */
14413   if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
14414       && flag_delete_null_pointer_checks)
14415     return true;
14416
14417   fntype = TREE_TYPE (cfun->decl);
14418   for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
14419     {
14420       attrs = lookup_attribute ("nonnull", attrs);
14421
14422       /* If "nonnull" wasn't specified, we know nothing about the argument.  */
14423       if (attrs == NULL_TREE)
14424         return false;
14425
14426       /* If "nonnull" applies to all the arguments, then ARG is non-null.  */
14427       if (TREE_VALUE (attrs) == NULL_TREE)
14428         return true;
14429
14430       /* Get the position number for ARG in the function signature.  */
14431       for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
14432            t;
14433            t = DECL_CHAIN (t), arg_num++)
14434         {
14435           if (t == arg)
14436             break;
14437         }
14438
14439       gcc_assert (t == arg);
14440
14441       /* Now see if ARG_NUM is mentioned in the nonnull list.  */
14442       for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
14443         {
14444           if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
14445             return true;
14446         }
14447     }
14448
14449   return false;
14450 }
14451
14452 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
14453    information.  */
14454
14455 location_t
14456 set_block (location_t loc, tree block)
14457 {
14458   location_t pure_loc = get_pure_location (loc);
14459   source_range src_range = get_range_from_loc (line_table, loc);
14460   return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
14461 }
14462
14463 location_t
14464 set_source_range (tree expr, location_t start, location_t finish)
14465 {
14466   source_range src_range;
14467   src_range.m_start = start;
14468   src_range.m_finish = finish;
14469   return set_source_range (expr, src_range);
14470 }
14471
14472 location_t
14473 set_source_range (tree expr, source_range src_range)
14474 {
14475   if (!EXPR_P (expr))
14476     return UNKNOWN_LOCATION;
14477
14478   location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
14479   location_t adhoc = COMBINE_LOCATION_DATA (line_table,
14480                                             pure_loc,
14481                                             src_range,
14482                                             NULL);
14483   SET_EXPR_LOCATION (expr, adhoc);
14484   return adhoc;
14485 }
14486
14487 /* Return the name of combined function FN, for debugging purposes.  */
14488
14489 const char *
14490 combined_fn_name (combined_fn fn)
14491 {
14492   if (builtin_fn_p (fn))
14493     {
14494       tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
14495       return IDENTIFIER_POINTER (DECL_NAME (fndecl));
14496     }
14497   else
14498     return internal_fn_name (as_internal_fn (fn));
14499 }
14500
14501 /* Return a bitmap with a bit set corresponding to each argument in
14502    a function call type FNTYPE declared with attribute nonnull,
14503    or null if none of the function's argument are nonnull.  The caller
14504    must free the bitmap.  */
14505
14506 bitmap
14507 get_nonnull_args (const_tree fntype)
14508 {
14509   if (fntype == NULL_TREE)
14510     return NULL;
14511
14512   tree attrs = TYPE_ATTRIBUTES (fntype);
14513   if (!attrs)
14514     return NULL;
14515
14516   bitmap argmap = NULL;
14517
14518   /* A function declaration can specify multiple attribute nonnull,
14519      each with zero or more arguments.  The loop below creates a bitmap
14520      representing a union of all the arguments.  An empty (but non-null)
14521      bitmap means that all arguments have been declaraed nonnull.  */
14522   for ( ; attrs; attrs = TREE_CHAIN (attrs))
14523     {
14524       attrs = lookup_attribute ("nonnull", attrs);
14525       if (!attrs)
14526         break;
14527
14528       if (!argmap)
14529         argmap = BITMAP_ALLOC (NULL);
14530
14531       if (!TREE_VALUE (attrs))
14532         {
14533           /* Clear the bitmap in case a previous attribute nonnull
14534              set it and this one overrides it for all arguments.  */
14535           bitmap_clear (argmap);
14536           return argmap;
14537         }
14538
14539       /* Iterate over the indices of the format arguments declared nonnull
14540          and set a bit for each.  */
14541       for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx))
14542         {
14543           unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1;
14544           bitmap_set_bit (argmap, val);
14545         }
14546     }
14547
14548   return argmap;
14549 }
14550
14551 /* List of pointer types used to declare builtins before we have seen their
14552    real declaration.
14553
14554    Keep the size up to date in tree.h !  */
14555 const builtin_structptr_type builtin_structptr_types[6] = 
14556 {
14557   { fileptr_type_node, ptr_type_node, "FILE" },
14558   { const_tm_ptr_type_node, const_ptr_type_node, "tm" },
14559   { fenv_t_ptr_type_node, ptr_type_node, "fenv_t" },
14560   { const_fenv_t_ptr_type_node, const_ptr_type_node, "fenv_t" },
14561   { fexcept_t_ptr_type_node, ptr_type_node, "fexcept_t" },
14562   { const_fexcept_t_ptr_type_node, const_ptr_type_node, "fexcept_t" }
14563 };
14564
14565 #if CHECKING_P
14566
14567 namespace selftest {
14568
14569 /* Selftests for tree.  */
14570
14571 /* Verify that integer constants are sane.  */
14572
14573 static void
14574 test_integer_constants ()
14575 {
14576   ASSERT_TRUE (integer_type_node != NULL);
14577   ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL);
14578
14579   tree type = integer_type_node;
14580
14581   tree zero = build_zero_cst (type);
14582   ASSERT_EQ (INTEGER_CST, TREE_CODE (zero));
14583   ASSERT_EQ (type, TREE_TYPE (zero));
14584
14585   tree one = build_int_cst (type, 1);
14586   ASSERT_EQ (INTEGER_CST, TREE_CODE (one));
14587   ASSERT_EQ (type, TREE_TYPE (zero));
14588 }
14589
14590 /* Verify identifiers.  */
14591
14592 static void
14593 test_identifiers ()
14594 {
14595   tree identifier = get_identifier ("foo");
14596   ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier));
14597   ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier));
14598 }
14599
14600 /* Verify LABEL_DECL.  */
14601
14602 static void
14603 test_labels ()
14604 {
14605   tree identifier = get_identifier ("err");
14606   tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
14607                                 identifier, void_type_node);
14608   ASSERT_EQ (-1, LABEL_DECL_UID (label_decl));
14609   ASSERT_FALSE (FORCED_LABEL (label_decl));
14610 }
14611
14612 /* Run all of the selftests within this file.  */
14613
14614 void
14615 tree_c_tests ()
14616 {
14617   test_integer_constants ();
14618   test_identifiers ();
14619   test_labels ();
14620 }
14621
14622 } // namespace selftest
14623
14624 #endif /* CHECKING_P */
14625
14626 #include "gt-tree.h"