openmp: Implement OpenMP 5.0 base-pointer attachement and clause ordering
[gcc.git] / gcc / tree.c
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2020 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 "langhooks-def.h"
58 #include "tree-diagnostic.h"
59 #include "except.h"
60 #include "builtins.h"
61 #include "print-tree.h"
62 #include "ipa-utils.h"
63 #include "selftest.h"
64 #include "stringpool.h"
65 #include "attribs.h"
66 #include "rtl.h"
67 #include "regs.h"
68 #include "tree-vector-builder.h"
69 #include "gimple-fold.h"
70 #include "escaped_string.h"
71
72 /* Tree code classes. */
73
74 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
75 #define END_OF_BASE_TREE_CODES tcc_exceptional,
76
77 const enum tree_code_class tree_code_type[] = {
78 #include "all-tree.def"
79 };
80
81 #undef DEFTREECODE
82 #undef END_OF_BASE_TREE_CODES
83
84 /* Table indexed by tree code giving number of expression
85 operands beyond the fixed part of the node structure.
86 Not used for types or decls. */
87
88 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
89 #define END_OF_BASE_TREE_CODES 0,
90
91 const unsigned char tree_code_length[] = {
92 #include "all-tree.def"
93 };
94
95 #undef DEFTREECODE
96 #undef END_OF_BASE_TREE_CODES
97
98 /* Names of tree components.
99 Used for printing out the tree and error messages. */
100 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
101 #define END_OF_BASE_TREE_CODES "@dummy",
102
103 static const char *const tree_code_name[] = {
104 #include "all-tree.def"
105 };
106
107 #undef DEFTREECODE
108 #undef END_OF_BASE_TREE_CODES
109
110 /* Each tree code class has an associated string representation.
111 These must correspond to the tree_code_class entries. */
112
113 const char *const tree_code_class_strings[] =
114 {
115 "exceptional",
116 "constant",
117 "type",
118 "declaration",
119 "reference",
120 "comparison",
121 "unary",
122 "binary",
123 "statement",
124 "vl_exp",
125 "expression"
126 };
127
128 /* obstack.[ch] explicitly declined to prototype this. */
129 extern int _obstack_allocated_p (struct obstack *h, void *obj);
130
131 /* Statistics-gathering stuff. */
132
133 static uint64_t tree_code_counts[MAX_TREE_CODES];
134 uint64_t tree_node_counts[(int) all_kinds];
135 uint64_t tree_node_sizes[(int) all_kinds];
136
137 /* Keep in sync with tree.h:enum tree_node_kind. */
138 static const char * const tree_node_kind_names[] = {
139 "decls",
140 "types",
141 "blocks",
142 "stmts",
143 "refs",
144 "exprs",
145 "constants",
146 "identifiers",
147 "vecs",
148 "binfos",
149 "ssa names",
150 "constructors",
151 "random kinds",
152 "lang_decl kinds",
153 "lang_type kinds",
154 "omp clauses",
155 };
156
157 /* Unique id for next decl created. */
158 static GTY(()) int next_decl_uid;
159 /* Unique id for next type created. */
160 static GTY(()) unsigned next_type_uid = 1;
161 /* Unique id for next debug decl created. Use negative numbers,
162 to catch erroneous uses. */
163 static GTY(()) int next_debug_decl_uid;
164
165 /* Since we cannot rehash a type after it is in the table, we have to
166 keep the hash code. */
167
168 struct GTY((for_user)) type_hash {
169 unsigned long hash;
170 tree type;
171 };
172
173 /* Initial size of the hash table (rounded to next prime). */
174 #define TYPE_HASH_INITIAL_SIZE 1000
175
176 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash>
177 {
178 static hashval_t hash (type_hash *t) { return t->hash; }
179 static bool equal (type_hash *a, type_hash *b);
180
181 static int
182 keep_cache_entry (type_hash *&t)
183 {
184 return ggc_marked_p (t->type);
185 }
186 };
187
188 /* Now here is the hash table. When recording a type, it is added to
189 the slot whose index is the hash code. Note that the hash table is
190 used for several kinds of types (function types, array types and
191 array index range types, for now). While all these live in the
192 same table, they are completely independent, and the hash code is
193 computed differently for each of these. */
194
195 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
196
197 /* Hash table and temporary node for larger integer const values. */
198 static GTY (()) tree int_cst_node;
199
200 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node>
201 {
202 static hashval_t hash (tree t);
203 static bool equal (tree x, tree y);
204 };
205
206 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
207
208 /* Class and variable for making sure that there is a single POLY_INT_CST
209 for a given value. */
210 struct poly_int_cst_hasher : ggc_cache_ptr_hash<tree_node>
211 {
212 typedef std::pair<tree, const poly_wide_int *> compare_type;
213 static hashval_t hash (tree t);
214 static bool equal (tree x, const compare_type &y);
215 };
216
217 static GTY ((cache)) hash_table<poly_int_cst_hasher> *poly_int_cst_hash_table;
218
219 /* Hash table for optimization flags and target option flags. Use the same
220 hash table for both sets of options. Nodes for building the current
221 optimization and target option nodes. The assumption is most of the time
222 the options created will already be in the hash table, so we avoid
223 allocating and freeing up a node repeatably. */
224 static GTY (()) tree cl_optimization_node;
225 static GTY (()) tree cl_target_option_node;
226
227 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node>
228 {
229 static hashval_t hash (tree t);
230 static bool equal (tree x, tree y);
231 };
232
233 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
234
235 /* General tree->tree mapping structure for use in hash tables. */
236
237
238 static GTY ((cache))
239 hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
240
241 static GTY ((cache))
242 hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
243
244 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
245 {
246 static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
247
248 static bool
249 equal (tree_vec_map *a, tree_vec_map *b)
250 {
251 return a->base.from == b->base.from;
252 }
253
254 static int
255 keep_cache_entry (tree_vec_map *&m)
256 {
257 return ggc_marked_p (m->base.from);
258 }
259 };
260
261 static GTY ((cache))
262 hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
263
264 static void set_type_quals (tree, int);
265 static void print_type_hash_statistics (void);
266 static void print_debug_expr_statistics (void);
267 static void print_value_expr_statistics (void);
268
269 static tree build_array_type_1 (tree, tree, bool, bool, bool);
270
271 tree global_trees[TI_MAX];
272 tree integer_types[itk_none];
273
274 bool int_n_enabled_p[NUM_INT_N_ENTS];
275 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
276
277 bool tree_contains_struct[MAX_TREE_CODES][64];
278
279 /* Number of operands for each OpenMP clause. */
280 unsigned const char omp_clause_num_ops[] =
281 {
282 0, /* OMP_CLAUSE_ERROR */
283 1, /* OMP_CLAUSE_PRIVATE */
284 1, /* OMP_CLAUSE_SHARED */
285 1, /* OMP_CLAUSE_FIRSTPRIVATE */
286 2, /* OMP_CLAUSE_LASTPRIVATE */
287 5, /* OMP_CLAUSE_REDUCTION */
288 5, /* OMP_CLAUSE_TASK_REDUCTION */
289 5, /* OMP_CLAUSE_IN_REDUCTION */
290 1, /* OMP_CLAUSE_COPYIN */
291 1, /* OMP_CLAUSE_COPYPRIVATE */
292 3, /* OMP_CLAUSE_LINEAR */
293 2, /* OMP_CLAUSE_ALIGNED */
294 2, /* OMP_CLAUSE_ALLOCATE */
295 1, /* OMP_CLAUSE_DEPEND */
296 1, /* OMP_CLAUSE_NONTEMPORAL */
297 1, /* OMP_CLAUSE_UNIFORM */
298 1, /* OMP_CLAUSE_TO_DECLARE */
299 1, /* OMP_CLAUSE_LINK */
300 2, /* OMP_CLAUSE_FROM */
301 2, /* OMP_CLAUSE_TO */
302 2, /* OMP_CLAUSE_MAP */
303 1, /* OMP_CLAUSE_USE_DEVICE_PTR */
304 1, /* OMP_CLAUSE_USE_DEVICE_ADDR */
305 1, /* OMP_CLAUSE_IS_DEVICE_PTR */
306 1, /* OMP_CLAUSE_INCLUSIVE */
307 1, /* OMP_CLAUSE_EXCLUSIVE */
308 2, /* OMP_CLAUSE__CACHE_ */
309 2, /* OMP_CLAUSE_GANG */
310 1, /* OMP_CLAUSE_ASYNC */
311 1, /* OMP_CLAUSE_WAIT */
312 0, /* OMP_CLAUSE_AUTO */
313 0, /* OMP_CLAUSE_SEQ */
314 1, /* OMP_CLAUSE__LOOPTEMP_ */
315 1, /* OMP_CLAUSE__REDUCTEMP_ */
316 1, /* OMP_CLAUSE__CONDTEMP_ */
317 1, /* OMP_CLAUSE__SCANTEMP_ */
318 1, /* OMP_CLAUSE_IF */
319 1, /* OMP_CLAUSE_NUM_THREADS */
320 1, /* OMP_CLAUSE_SCHEDULE */
321 0, /* OMP_CLAUSE_NOWAIT */
322 1, /* OMP_CLAUSE_ORDERED */
323 0, /* OMP_CLAUSE_DEFAULT */
324 3, /* OMP_CLAUSE_COLLAPSE */
325 0, /* OMP_CLAUSE_UNTIED */
326 1, /* OMP_CLAUSE_FINAL */
327 0, /* OMP_CLAUSE_MERGEABLE */
328 1, /* OMP_CLAUSE_DEVICE */
329 1, /* OMP_CLAUSE_DIST_SCHEDULE */
330 0, /* OMP_CLAUSE_INBRANCH */
331 0, /* OMP_CLAUSE_NOTINBRANCH */
332 1, /* OMP_CLAUSE_NUM_TEAMS */
333 1, /* OMP_CLAUSE_THREAD_LIMIT */
334 0, /* OMP_CLAUSE_PROC_BIND */
335 1, /* OMP_CLAUSE_SAFELEN */
336 1, /* OMP_CLAUSE_SIMDLEN */
337 0, /* OMP_CLAUSE_DEVICE_TYPE */
338 0, /* OMP_CLAUSE_FOR */
339 0, /* OMP_CLAUSE_PARALLEL */
340 0, /* OMP_CLAUSE_SECTIONS */
341 0, /* OMP_CLAUSE_TASKGROUP */
342 1, /* OMP_CLAUSE_PRIORITY */
343 1, /* OMP_CLAUSE_GRAINSIZE */
344 1, /* OMP_CLAUSE_NUM_TASKS */
345 0, /* OMP_CLAUSE_NOGROUP */
346 0, /* OMP_CLAUSE_THREADS */
347 0, /* OMP_CLAUSE_SIMD */
348 1, /* OMP_CLAUSE_HINT */
349 0, /* OMP_CLAUSE_DEFAULTMAP */
350 0, /* OMP_CLAUSE_ORDER */
351 0, /* OMP_CLAUSE_BIND */
352 1, /* OMP_CLAUSE__SIMDUID_ */
353 0, /* OMP_CLAUSE__SIMT_ */
354 0, /* OMP_CLAUSE_INDEPENDENT */
355 1, /* OMP_CLAUSE_WORKER */
356 1, /* OMP_CLAUSE_VECTOR */
357 1, /* OMP_CLAUSE_NUM_GANGS */
358 1, /* OMP_CLAUSE_NUM_WORKERS */
359 1, /* OMP_CLAUSE_VECTOR_LENGTH */
360 3, /* OMP_CLAUSE_TILE */
361 0, /* OMP_CLAUSE_IF_PRESENT */
362 0, /* OMP_CLAUSE_FINALIZE */
363 };
364
365 const char * const omp_clause_code_name[] =
366 {
367 "error_clause",
368 "private",
369 "shared",
370 "firstprivate",
371 "lastprivate",
372 "reduction",
373 "task_reduction",
374 "in_reduction",
375 "copyin",
376 "copyprivate",
377 "linear",
378 "aligned",
379 "allocate",
380 "depend",
381 "nontemporal",
382 "uniform",
383 "to",
384 "link",
385 "from",
386 "to",
387 "map",
388 "use_device_ptr",
389 "use_device_addr",
390 "is_device_ptr",
391 "inclusive",
392 "exclusive",
393 "_cache_",
394 "gang",
395 "async",
396 "wait",
397 "auto",
398 "seq",
399 "_looptemp_",
400 "_reductemp_",
401 "_condtemp_",
402 "_scantemp_",
403 "if",
404 "num_threads",
405 "schedule",
406 "nowait",
407 "ordered",
408 "default",
409 "collapse",
410 "untied",
411 "final",
412 "mergeable",
413 "device",
414 "dist_schedule",
415 "inbranch",
416 "notinbranch",
417 "num_teams",
418 "thread_limit",
419 "proc_bind",
420 "safelen",
421 "simdlen",
422 "device_type",
423 "for",
424 "parallel",
425 "sections",
426 "taskgroup",
427 "priority",
428 "grainsize",
429 "num_tasks",
430 "nogroup",
431 "threads",
432 "simd",
433 "hint",
434 "defaultmap",
435 "order",
436 "bind",
437 "_simduid_",
438 "_simt_",
439 "independent",
440 "worker",
441 "vector",
442 "num_gangs",
443 "num_workers",
444 "vector_length",
445 "tile",
446 "if_present",
447 "finalize",
448 };
449
450
451 /* Return the tree node structure used by tree code CODE. */
452
453 static inline enum tree_node_structure_enum
454 tree_node_structure_for_code (enum tree_code code)
455 {
456 switch (TREE_CODE_CLASS (code))
457 {
458 case tcc_declaration:
459 switch (code)
460 {
461 case CONST_DECL: return TS_CONST_DECL;
462 case DEBUG_EXPR_DECL: return TS_DECL_WRTL;
463 case FIELD_DECL: return TS_FIELD_DECL;
464 case FUNCTION_DECL: return TS_FUNCTION_DECL;
465 case LABEL_DECL: return TS_LABEL_DECL;
466 case PARM_DECL: return TS_PARM_DECL;
467 case RESULT_DECL: return TS_RESULT_DECL;
468 case TRANSLATION_UNIT_DECL: return TS_TRANSLATION_UNIT_DECL;
469 case TYPE_DECL: return TS_TYPE_DECL;
470 case VAR_DECL: return TS_VAR_DECL;
471 default: return TS_DECL_NON_COMMON;
472 }
473
474 case tcc_type: return TS_TYPE_NON_COMMON;
475
476 case tcc_binary:
477 case tcc_comparison:
478 case tcc_expression:
479 case tcc_reference:
480 case tcc_statement:
481 case tcc_unary:
482 case tcc_vl_exp: return TS_EXP;
483
484 default: /* tcc_constant and tcc_exceptional */
485 break;
486 }
487
488 switch (code)
489 {
490 /* tcc_constant cases. */
491 case COMPLEX_CST: return TS_COMPLEX;
492 case FIXED_CST: return TS_FIXED_CST;
493 case INTEGER_CST: return TS_INT_CST;
494 case POLY_INT_CST: return TS_POLY_INT_CST;
495 case REAL_CST: return TS_REAL_CST;
496 case STRING_CST: return TS_STRING;
497 case VECTOR_CST: return TS_VECTOR;
498 case VOID_CST: return TS_TYPED;
499
500 /* tcc_exceptional cases. */
501 case BLOCK: return TS_BLOCK;
502 case CONSTRUCTOR: return TS_CONSTRUCTOR;
503 case ERROR_MARK: return TS_COMMON;
504 case IDENTIFIER_NODE: return TS_IDENTIFIER;
505 case OMP_CLAUSE: return TS_OMP_CLAUSE;
506 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
507 case PLACEHOLDER_EXPR: return TS_COMMON;
508 case SSA_NAME: return TS_SSA_NAME;
509 case STATEMENT_LIST: return TS_STATEMENT_LIST;
510 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
511 case TREE_BINFO: return TS_BINFO;
512 case TREE_LIST: return TS_LIST;
513 case TREE_VEC: return TS_VEC;
514
515 default:
516 gcc_unreachable ();
517 }
518 }
519
520
521 /* Initialize tree_contains_struct to describe the hierarchy of tree
522 nodes. */
523
524 static void
525 initialize_tree_contains_struct (void)
526 {
527 unsigned i;
528
529 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
530 {
531 enum tree_code code;
532 enum tree_node_structure_enum ts_code;
533
534 code = (enum tree_code) i;
535 ts_code = tree_node_structure_for_code (code);
536
537 /* Mark the TS structure itself. */
538 tree_contains_struct[code][ts_code] = 1;
539
540 /* Mark all the structures that TS is derived from. */
541 switch (ts_code)
542 {
543 case TS_TYPED:
544 case TS_BLOCK:
545 case TS_OPTIMIZATION:
546 case TS_TARGET_OPTION:
547 MARK_TS_BASE (code);
548 break;
549
550 case TS_COMMON:
551 case TS_INT_CST:
552 case TS_POLY_INT_CST:
553 case TS_REAL_CST:
554 case TS_FIXED_CST:
555 case TS_VECTOR:
556 case TS_STRING:
557 case TS_COMPLEX:
558 case TS_SSA_NAME:
559 case TS_CONSTRUCTOR:
560 case TS_EXP:
561 case TS_STATEMENT_LIST:
562 MARK_TS_TYPED (code);
563 break;
564
565 case TS_IDENTIFIER:
566 case TS_DECL_MINIMAL:
567 case TS_TYPE_COMMON:
568 case TS_LIST:
569 case TS_VEC:
570 case TS_BINFO:
571 case TS_OMP_CLAUSE:
572 MARK_TS_COMMON (code);
573 break;
574
575 case TS_TYPE_WITH_LANG_SPECIFIC:
576 MARK_TS_TYPE_COMMON (code);
577 break;
578
579 case TS_TYPE_NON_COMMON:
580 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
581 break;
582
583 case TS_DECL_COMMON:
584 MARK_TS_DECL_MINIMAL (code);
585 break;
586
587 case TS_DECL_WRTL:
588 case TS_CONST_DECL:
589 MARK_TS_DECL_COMMON (code);
590 break;
591
592 case TS_DECL_NON_COMMON:
593 MARK_TS_DECL_WITH_VIS (code);
594 break;
595
596 case TS_DECL_WITH_VIS:
597 case TS_PARM_DECL:
598 case TS_LABEL_DECL:
599 case TS_RESULT_DECL:
600 MARK_TS_DECL_WRTL (code);
601 break;
602
603 case TS_FIELD_DECL:
604 MARK_TS_DECL_COMMON (code);
605 break;
606
607 case TS_VAR_DECL:
608 MARK_TS_DECL_WITH_VIS (code);
609 break;
610
611 case TS_TYPE_DECL:
612 case TS_FUNCTION_DECL:
613 MARK_TS_DECL_NON_COMMON (code);
614 break;
615
616 case TS_TRANSLATION_UNIT_DECL:
617 MARK_TS_DECL_COMMON (code);
618 break;
619
620 default:
621 gcc_unreachable ();
622 }
623 }
624
625 /* Basic consistency checks for attributes used in fold. */
626 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
627 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
628 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
629 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
630 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
631 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
632 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
633 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
634 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
635 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
636 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
637 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
638 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
639 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
640 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
641 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
642 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
643 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
644 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
645 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
646 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
647 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
648 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
649 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
650 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
651 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
652 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
653 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
654 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
655 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
656 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
657 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
658 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
659 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
660 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
661 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
662 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
663 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
664 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
665 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
666 }
667
668
669 /* Init tree.c. */
670
671 void
672 init_ttree (void)
673 {
674 /* Initialize the hash table of types. */
675 type_hash_table
676 = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
677
678 debug_expr_for_decl
679 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
680
681 value_expr_for_decl
682 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
683
684 int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
685
686 poly_int_cst_hash_table = hash_table<poly_int_cst_hasher>::create_ggc (64);
687
688 int_cst_node = make_int_cst (1, 1);
689
690 cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
691
692 cl_optimization_node = make_node (OPTIMIZATION_NODE);
693 cl_target_option_node = make_node (TARGET_OPTION_NODE);
694
695 /* Initialize the tree_contains_struct array. */
696 initialize_tree_contains_struct ();
697 lang_hooks.init_ts ();
698 }
699
700 \f
701 /* The name of the object as the assembler will see it (but before any
702 translations made by ASM_OUTPUT_LABELREF). Often this is the same
703 as DECL_NAME. It is an IDENTIFIER_NODE. */
704 tree
705 decl_assembler_name (tree decl)
706 {
707 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
708 lang_hooks.set_decl_assembler_name (decl);
709 return DECL_ASSEMBLER_NAME_RAW (decl);
710 }
711
712 /* The DECL_ASSEMBLER_NAME_RAW of DECL is being explicitly set to NAME
713 (either of which may be NULL). Inform the FE, if this changes the
714 name. */
715
716 void
717 overwrite_decl_assembler_name (tree decl, tree name)
718 {
719 if (DECL_ASSEMBLER_NAME_RAW (decl) != name)
720 lang_hooks.overwrite_decl_assembler_name (decl, name);
721 }
722
723 /* When the target supports COMDAT groups, this indicates which group the
724 DECL is associated with. This can be either an IDENTIFIER_NODE or a
725 decl, in which case its DECL_ASSEMBLER_NAME identifies the group. */
726 tree
727 decl_comdat_group (const_tree node)
728 {
729 struct symtab_node *snode = symtab_node::get (node);
730 if (!snode)
731 return NULL;
732 return snode->get_comdat_group ();
733 }
734
735 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE. */
736 tree
737 decl_comdat_group_id (const_tree node)
738 {
739 struct symtab_node *snode = symtab_node::get (node);
740 if (!snode)
741 return NULL;
742 return snode->get_comdat_group_id ();
743 }
744
745 /* When the target supports named section, return its name as IDENTIFIER_NODE
746 or NULL if it is in no section. */
747 const char *
748 decl_section_name (const_tree node)
749 {
750 struct symtab_node *snode = symtab_node::get (node);
751 if (!snode)
752 return NULL;
753 return snode->get_section ();
754 }
755
756 /* Set section name of NODE to VALUE (that is expected to be
757 identifier node) */
758 void
759 set_decl_section_name (tree node, const char *value)
760 {
761 struct symtab_node *snode;
762
763 if (value == NULL)
764 {
765 snode = symtab_node::get (node);
766 if (!snode)
767 return;
768 }
769 else if (VAR_P (node))
770 snode = varpool_node::get_create (node);
771 else
772 snode = cgraph_node::get_create (node);
773 snode->set_section (value);
774 }
775
776 /* Return TLS model of a variable NODE. */
777 enum tls_model
778 decl_tls_model (const_tree node)
779 {
780 struct varpool_node *snode = varpool_node::get (node);
781 if (!snode)
782 return TLS_MODEL_NONE;
783 return snode->tls_model;
784 }
785
786 /* Set TLS model of variable NODE to MODEL. */
787 void
788 set_decl_tls_model (tree node, enum tls_model model)
789 {
790 struct varpool_node *vnode;
791
792 if (model == TLS_MODEL_NONE)
793 {
794 vnode = varpool_node::get (node);
795 if (!vnode)
796 return;
797 }
798 else
799 vnode = varpool_node::get_create (node);
800 vnode->tls_model = model;
801 }
802
803 /* Compute the number of bytes occupied by a tree with code CODE.
804 This function cannot be used for nodes that have variable sizes,
805 including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR. */
806 size_t
807 tree_code_size (enum tree_code code)
808 {
809 switch (TREE_CODE_CLASS (code))
810 {
811 case tcc_declaration: /* A decl node */
812 switch (code)
813 {
814 case FIELD_DECL: return sizeof (tree_field_decl);
815 case PARM_DECL: return sizeof (tree_parm_decl);
816 case VAR_DECL: return sizeof (tree_var_decl);
817 case LABEL_DECL: return sizeof (tree_label_decl);
818 case RESULT_DECL: return sizeof (tree_result_decl);
819 case CONST_DECL: return sizeof (tree_const_decl);
820 case TYPE_DECL: return sizeof (tree_type_decl);
821 case FUNCTION_DECL: return sizeof (tree_function_decl);
822 case DEBUG_EXPR_DECL: return sizeof (tree_decl_with_rtl);
823 case TRANSLATION_UNIT_DECL: return sizeof (tree_translation_unit_decl);
824 case NAMESPACE_DECL:
825 case IMPORTED_DECL:
826 case NAMELIST_DECL: return sizeof (tree_decl_non_common);
827 default:
828 gcc_checking_assert (code >= NUM_TREE_CODES);
829 return lang_hooks.tree_size (code);
830 }
831
832 case tcc_type: /* a type node */
833 switch (code)
834 {
835 case OFFSET_TYPE:
836 case ENUMERAL_TYPE:
837 case BOOLEAN_TYPE:
838 case INTEGER_TYPE:
839 case REAL_TYPE:
840 case POINTER_TYPE:
841 case REFERENCE_TYPE:
842 case NULLPTR_TYPE:
843 case FIXED_POINT_TYPE:
844 case COMPLEX_TYPE:
845 case VECTOR_TYPE:
846 case ARRAY_TYPE:
847 case RECORD_TYPE:
848 case UNION_TYPE:
849 case QUAL_UNION_TYPE:
850 case VOID_TYPE:
851 case FUNCTION_TYPE:
852 case METHOD_TYPE:
853 case LANG_TYPE: return sizeof (tree_type_non_common);
854 default:
855 gcc_checking_assert (code >= NUM_TREE_CODES);
856 return lang_hooks.tree_size (code);
857 }
858
859 case tcc_reference: /* a reference */
860 case tcc_expression: /* an expression */
861 case tcc_statement: /* an expression with side effects */
862 case tcc_comparison: /* a comparison expression */
863 case tcc_unary: /* a unary arithmetic expression */
864 case tcc_binary: /* a binary arithmetic expression */
865 return (sizeof (struct tree_exp)
866 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
867
868 case tcc_constant: /* a constant */
869 switch (code)
870 {
871 case VOID_CST: return sizeof (tree_typed);
872 case INTEGER_CST: gcc_unreachable ();
873 case POLY_INT_CST: return sizeof (tree_poly_int_cst);
874 case REAL_CST: return sizeof (tree_real_cst);
875 case FIXED_CST: return sizeof (tree_fixed_cst);
876 case COMPLEX_CST: return sizeof (tree_complex);
877 case VECTOR_CST: gcc_unreachable ();
878 case STRING_CST: gcc_unreachable ();
879 default:
880 gcc_checking_assert (code >= NUM_TREE_CODES);
881 return lang_hooks.tree_size (code);
882 }
883
884 case tcc_exceptional: /* something random, like an identifier. */
885 switch (code)
886 {
887 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
888 case TREE_LIST: return sizeof (tree_list);
889
890 case ERROR_MARK:
891 case PLACEHOLDER_EXPR: return sizeof (tree_common);
892
893 case TREE_VEC: gcc_unreachable ();
894 case OMP_CLAUSE: gcc_unreachable ();
895
896 case SSA_NAME: return sizeof (tree_ssa_name);
897
898 case STATEMENT_LIST: return sizeof (tree_statement_list);
899 case BLOCK: return sizeof (struct tree_block);
900 case CONSTRUCTOR: return sizeof (tree_constructor);
901 case OPTIMIZATION_NODE: return sizeof (tree_optimization_option);
902 case TARGET_OPTION_NODE: return sizeof (tree_target_option);
903
904 default:
905 gcc_checking_assert (code >= NUM_TREE_CODES);
906 return lang_hooks.tree_size (code);
907 }
908
909 default:
910 gcc_unreachable ();
911 }
912 }
913
914 /* Compute the number of bytes occupied by NODE. This routine only
915 looks at TREE_CODE, except for those nodes that have variable sizes. */
916 size_t
917 tree_size (const_tree node)
918 {
919 const enum tree_code code = TREE_CODE (node);
920 switch (code)
921 {
922 case INTEGER_CST:
923 return (sizeof (struct tree_int_cst)
924 + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
925
926 case TREE_BINFO:
927 return (offsetof (struct tree_binfo, base_binfos)
928 + vec<tree, va_gc>
929 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
930
931 case TREE_VEC:
932 return (sizeof (struct tree_vec)
933 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
934
935 case VECTOR_CST:
936 return (sizeof (struct tree_vector)
937 + (vector_cst_encoded_nelts (node) - 1) * sizeof (tree));
938
939 case STRING_CST:
940 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
941
942 case OMP_CLAUSE:
943 return (sizeof (struct tree_omp_clause)
944 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
945 * sizeof (tree));
946
947 default:
948 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
949 return (sizeof (struct tree_exp)
950 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
951 else
952 return tree_code_size (code);
953 }
954 }
955
956 /* Return tree node kind based on tree CODE. */
957
958 static tree_node_kind
959 get_stats_node_kind (enum tree_code code)
960 {
961 enum tree_code_class type = TREE_CODE_CLASS (code);
962
963 switch (type)
964 {
965 case tcc_declaration: /* A decl node */
966 return d_kind;
967 case tcc_type: /* a type node */
968 return t_kind;
969 case tcc_statement: /* an expression with side effects */
970 return s_kind;
971 case tcc_reference: /* a reference */
972 return r_kind;
973 case tcc_expression: /* an expression */
974 case tcc_comparison: /* a comparison expression */
975 case tcc_unary: /* a unary arithmetic expression */
976 case tcc_binary: /* a binary arithmetic expression */
977 return e_kind;
978 case tcc_constant: /* a constant */
979 return c_kind;
980 case tcc_exceptional: /* something random, like an identifier. */
981 switch (code)
982 {
983 case IDENTIFIER_NODE:
984 return id_kind;
985 case TREE_VEC:
986 return vec_kind;
987 case TREE_BINFO:
988 return binfo_kind;
989 case SSA_NAME:
990 return ssa_name_kind;
991 case BLOCK:
992 return b_kind;
993 case CONSTRUCTOR:
994 return constr_kind;
995 case OMP_CLAUSE:
996 return omp_clause_kind;
997 default:
998 return x_kind;
999 }
1000 break;
1001 case tcc_vl_exp:
1002 return e_kind;
1003 default:
1004 gcc_unreachable ();
1005 }
1006 }
1007
1008 /* Record interesting allocation statistics for a tree node with CODE
1009 and LENGTH. */
1010
1011 static void
1012 record_node_allocation_statistics (enum tree_code code, size_t length)
1013 {
1014 if (!GATHER_STATISTICS)
1015 return;
1016
1017 tree_node_kind kind = get_stats_node_kind (code);
1018
1019 tree_code_counts[(int) code]++;
1020 tree_node_counts[(int) kind]++;
1021 tree_node_sizes[(int) kind] += length;
1022 }
1023
1024 /* Allocate and return a new UID from the DECL_UID namespace. */
1025
1026 int
1027 allocate_decl_uid (void)
1028 {
1029 return next_decl_uid++;
1030 }
1031
1032 /* Return a newly allocated node of code CODE. For decl and type
1033 nodes, some other fields are initialized. The rest of the node is
1034 initialized to zero. This function cannot be used for TREE_VEC,
1035 INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
1036 tree_code_size.
1037
1038 Achoo! I got a code in the node. */
1039
1040 tree
1041 make_node (enum tree_code code MEM_STAT_DECL)
1042 {
1043 tree t;
1044 enum tree_code_class type = TREE_CODE_CLASS (code);
1045 size_t length = tree_code_size (code);
1046
1047 record_node_allocation_statistics (code, length);
1048
1049 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1050 TREE_SET_CODE (t, code);
1051
1052 switch (type)
1053 {
1054 case tcc_statement:
1055 if (code != DEBUG_BEGIN_STMT)
1056 TREE_SIDE_EFFECTS (t) = 1;
1057 break;
1058
1059 case tcc_declaration:
1060 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1061 {
1062 if (code == FUNCTION_DECL)
1063 {
1064 SET_DECL_ALIGN (t, FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY));
1065 SET_DECL_MODE (t, FUNCTION_MODE);
1066 }
1067 else
1068 SET_DECL_ALIGN (t, 1);
1069 }
1070 DECL_SOURCE_LOCATION (t) = input_location;
1071 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1072 DECL_UID (t) = --next_debug_decl_uid;
1073 else
1074 {
1075 DECL_UID (t) = allocate_decl_uid ();
1076 SET_DECL_PT_UID (t, -1);
1077 }
1078 if (TREE_CODE (t) == LABEL_DECL)
1079 LABEL_DECL_UID (t) = -1;
1080
1081 break;
1082
1083 case tcc_type:
1084 TYPE_UID (t) = next_type_uid++;
1085 SET_TYPE_ALIGN (t, BITS_PER_UNIT);
1086 TYPE_USER_ALIGN (t) = 0;
1087 TYPE_MAIN_VARIANT (t) = t;
1088 TYPE_CANONICAL (t) = t;
1089
1090 /* Default to no attributes for type, but let target change that. */
1091 TYPE_ATTRIBUTES (t) = NULL_TREE;
1092 targetm.set_default_type_attributes (t);
1093
1094 /* We have not yet computed the alias set for this type. */
1095 TYPE_ALIAS_SET (t) = -1;
1096 break;
1097
1098 case tcc_constant:
1099 TREE_CONSTANT (t) = 1;
1100 break;
1101
1102 case tcc_expression:
1103 switch (code)
1104 {
1105 case INIT_EXPR:
1106 case MODIFY_EXPR:
1107 case VA_ARG_EXPR:
1108 case PREDECREMENT_EXPR:
1109 case PREINCREMENT_EXPR:
1110 case POSTDECREMENT_EXPR:
1111 case POSTINCREMENT_EXPR:
1112 /* All of these have side-effects, no matter what their
1113 operands are. */
1114 TREE_SIDE_EFFECTS (t) = 1;
1115 break;
1116
1117 default:
1118 break;
1119 }
1120 break;
1121
1122 case tcc_exceptional:
1123 switch (code)
1124 {
1125 case TARGET_OPTION_NODE:
1126 TREE_TARGET_OPTION(t)
1127 = ggc_cleared_alloc<struct cl_target_option> ();
1128 break;
1129
1130 case OPTIMIZATION_NODE:
1131 TREE_OPTIMIZATION (t)
1132 = ggc_cleared_alloc<struct cl_optimization> ();
1133 break;
1134
1135 default:
1136 break;
1137 }
1138 break;
1139
1140 default:
1141 /* Other classes need no special treatment. */
1142 break;
1143 }
1144
1145 return t;
1146 }
1147
1148 /* Free tree node. */
1149
1150 void
1151 free_node (tree node)
1152 {
1153 enum tree_code code = TREE_CODE (node);
1154 if (GATHER_STATISTICS)
1155 {
1156 enum tree_node_kind kind = get_stats_node_kind (code);
1157
1158 gcc_checking_assert (tree_code_counts[(int) TREE_CODE (node)] != 0);
1159 gcc_checking_assert (tree_node_counts[(int) kind] != 0);
1160 gcc_checking_assert (tree_node_sizes[(int) kind] >= tree_size (node));
1161
1162 tree_code_counts[(int) TREE_CODE (node)]--;
1163 tree_node_counts[(int) kind]--;
1164 tree_node_sizes[(int) kind] -= tree_size (node);
1165 }
1166 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1167 vec_free (CONSTRUCTOR_ELTS (node));
1168 else if (code == BLOCK)
1169 vec_free (BLOCK_NONLOCALIZED_VARS (node));
1170 else if (code == TREE_BINFO)
1171 vec_free (BINFO_BASE_ACCESSES (node));
1172 else if (code == OPTIMIZATION_NODE)
1173 cl_optimization_option_free (TREE_OPTIMIZATION (node));
1174 else if (code == TARGET_OPTION_NODE)
1175 cl_target_option_free (TREE_TARGET_OPTION (node));
1176 ggc_free (node);
1177 }
1178 \f
1179 /* Return a new node with the same contents as NODE except that its
1180 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
1181
1182 tree
1183 copy_node (tree node MEM_STAT_DECL)
1184 {
1185 tree t;
1186 enum tree_code code = TREE_CODE (node);
1187 size_t length;
1188
1189 gcc_assert (code != STATEMENT_LIST);
1190
1191 length = tree_size (node);
1192 record_node_allocation_statistics (code, length);
1193 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1194 memcpy (t, node, length);
1195
1196 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1197 TREE_CHAIN (t) = 0;
1198 TREE_ASM_WRITTEN (t) = 0;
1199 TREE_VISITED (t) = 0;
1200
1201 if (TREE_CODE_CLASS (code) == tcc_declaration)
1202 {
1203 if (code == DEBUG_EXPR_DECL)
1204 DECL_UID (t) = --next_debug_decl_uid;
1205 else
1206 {
1207 DECL_UID (t) = allocate_decl_uid ();
1208 if (DECL_PT_UID_SET_P (node))
1209 SET_DECL_PT_UID (t, DECL_PT_UID (node));
1210 }
1211 if ((TREE_CODE (node) == PARM_DECL || VAR_P (node))
1212 && DECL_HAS_VALUE_EXPR_P (node))
1213 {
1214 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1215 DECL_HAS_VALUE_EXPR_P (t) = 1;
1216 }
1217 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
1218 if (VAR_P (node))
1219 {
1220 DECL_HAS_DEBUG_EXPR_P (t) = 0;
1221 t->decl_with_vis.symtab_node = NULL;
1222 }
1223 if (VAR_P (node) && DECL_HAS_INIT_PRIORITY_P (node))
1224 {
1225 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1226 DECL_HAS_INIT_PRIORITY_P (t) = 1;
1227 }
1228 if (TREE_CODE (node) == FUNCTION_DECL)
1229 {
1230 DECL_STRUCT_FUNCTION (t) = NULL;
1231 t->decl_with_vis.symtab_node = NULL;
1232 }
1233 }
1234 else if (TREE_CODE_CLASS (code) == tcc_type)
1235 {
1236 TYPE_UID (t) = next_type_uid++;
1237 /* The following is so that the debug code for
1238 the copy is different from the original type.
1239 The two statements usually duplicate each other
1240 (because they clear fields of the same union),
1241 but the optimizer should catch that. */
1242 TYPE_SYMTAB_ADDRESS (t) = 0;
1243 TYPE_SYMTAB_DIE (t) = 0;
1244
1245 /* Do not copy the values cache. */
1246 if (TYPE_CACHED_VALUES_P (t))
1247 {
1248 TYPE_CACHED_VALUES_P (t) = 0;
1249 TYPE_CACHED_VALUES (t) = NULL_TREE;
1250 }
1251 }
1252 else if (code == TARGET_OPTION_NODE)
1253 {
1254 TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
1255 memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
1256 sizeof (struct cl_target_option));
1257 }
1258 else if (code == OPTIMIZATION_NODE)
1259 {
1260 TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>();
1261 memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node),
1262 sizeof (struct cl_optimization));
1263 }
1264
1265 return t;
1266 }
1267
1268 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1269 For example, this can copy a list made of TREE_LIST nodes. */
1270
1271 tree
1272 copy_list (tree list)
1273 {
1274 tree head;
1275 tree prev, next;
1276
1277 if (list == 0)
1278 return 0;
1279
1280 head = prev = copy_node (list);
1281 next = TREE_CHAIN (list);
1282 while (next)
1283 {
1284 TREE_CHAIN (prev) = copy_node (next);
1285 prev = TREE_CHAIN (prev);
1286 next = TREE_CHAIN (next);
1287 }
1288 return head;
1289 }
1290
1291 \f
1292 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1293 INTEGER_CST with value CST and type TYPE. */
1294
1295 static unsigned int
1296 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1297 {
1298 gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1299 /* We need extra HWIs if CST is an unsigned integer with its
1300 upper bit set. */
1301 if (TYPE_UNSIGNED (type) && wi::neg_p (cst))
1302 return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1303 return cst.get_len ();
1304 }
1305
1306 /* Return a new INTEGER_CST with value CST and type TYPE. */
1307
1308 static tree
1309 build_new_int_cst (tree type, const wide_int &cst)
1310 {
1311 unsigned int len = cst.get_len ();
1312 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1313 tree nt = make_int_cst (len, ext_len);
1314
1315 if (len < ext_len)
1316 {
1317 --ext_len;
1318 TREE_INT_CST_ELT (nt, ext_len)
1319 = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1320 for (unsigned int i = len; i < ext_len; ++i)
1321 TREE_INT_CST_ELT (nt, i) = -1;
1322 }
1323 else if (TYPE_UNSIGNED (type)
1324 && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1325 {
1326 len--;
1327 TREE_INT_CST_ELT (nt, len)
1328 = zext_hwi (cst.elt (len),
1329 cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1330 }
1331
1332 for (unsigned int i = 0; i < len; i++)
1333 TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1334 TREE_TYPE (nt) = type;
1335 return nt;
1336 }
1337
1338 /* Return a new POLY_INT_CST with coefficients COEFFS and type TYPE. */
1339
1340 static tree
1341 build_new_poly_int_cst (tree type, tree (&coeffs)[NUM_POLY_INT_COEFFS]
1342 CXX_MEM_STAT_INFO)
1343 {
1344 size_t length = sizeof (struct tree_poly_int_cst);
1345 record_node_allocation_statistics (POLY_INT_CST, length);
1346
1347 tree t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1348
1349 TREE_SET_CODE (t, POLY_INT_CST);
1350 TREE_CONSTANT (t) = 1;
1351 TREE_TYPE (t) = type;
1352 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1353 POLY_INT_CST_COEFF (t, i) = coeffs[i];
1354 return t;
1355 }
1356
1357 /* Create a constant tree that contains CST sign-extended to TYPE. */
1358
1359 tree
1360 build_int_cst (tree type, poly_int64 cst)
1361 {
1362 /* Support legacy code. */
1363 if (!type)
1364 type = integer_type_node;
1365
1366 return wide_int_to_tree (type, wi::shwi (cst, TYPE_PRECISION (type)));
1367 }
1368
1369 /* Create a constant tree that contains CST zero-extended to TYPE. */
1370
1371 tree
1372 build_int_cstu (tree type, poly_uint64 cst)
1373 {
1374 return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1375 }
1376
1377 /* Create a constant tree that contains CST sign-extended to TYPE. */
1378
1379 tree
1380 build_int_cst_type (tree type, poly_int64 cst)
1381 {
1382 gcc_assert (type);
1383 return wide_int_to_tree (type, wi::shwi (cst, TYPE_PRECISION (type)));
1384 }
1385
1386 /* Constructs tree in type TYPE from with value given by CST. Signedness
1387 of CST is assumed to be the same as the signedness of TYPE. */
1388
1389 tree
1390 double_int_to_tree (tree type, double_int cst)
1391 {
1392 return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1393 }
1394
1395 /* We force the wide_int CST to the range of the type TYPE by sign or
1396 zero extending it. OVERFLOWABLE indicates if we are interested in
1397 overflow of the value, when >0 we are only interested in signed
1398 overflow, for <0 we are interested in any overflow. OVERFLOWED
1399 indicates whether overflow has already occurred. CONST_OVERFLOWED
1400 indicates whether constant overflow has already occurred. We force
1401 T's value to be within range of T's type (by setting to 0 or 1 all
1402 the bits outside the type's range). We set TREE_OVERFLOWED if,
1403 OVERFLOWED is nonzero,
1404 or OVERFLOWABLE is >0 and signed overflow occurs
1405 or OVERFLOWABLE is <0 and any overflow occurs
1406 We return a new tree node for the extended wide_int. The node
1407 is shared if no overflow flags are set. */
1408
1409
1410 tree
1411 force_fit_type (tree type, const poly_wide_int_ref &cst,
1412 int overflowable, bool overflowed)
1413 {
1414 signop sign = TYPE_SIGN (type);
1415
1416 /* If we need to set overflow flags, return a new unshared node. */
1417 if (overflowed || !wi::fits_to_tree_p (cst, type))
1418 {
1419 if (overflowed
1420 || overflowable < 0
1421 || (overflowable > 0 && sign == SIGNED))
1422 {
1423 poly_wide_int tmp = poly_wide_int::from (cst, TYPE_PRECISION (type),
1424 sign);
1425 tree t;
1426 if (tmp.is_constant ())
1427 t = build_new_int_cst (type, tmp.coeffs[0]);
1428 else
1429 {
1430 tree coeffs[NUM_POLY_INT_COEFFS];
1431 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1432 {
1433 coeffs[i] = build_new_int_cst (type, tmp.coeffs[i]);
1434 TREE_OVERFLOW (coeffs[i]) = 1;
1435 }
1436 t = build_new_poly_int_cst (type, coeffs);
1437 }
1438 TREE_OVERFLOW (t) = 1;
1439 return t;
1440 }
1441 }
1442
1443 /* Else build a shared node. */
1444 return wide_int_to_tree (type, cst);
1445 }
1446
1447 /* These are the hash table functions for the hash table of INTEGER_CST
1448 nodes of a sizetype. */
1449
1450 /* Return the hash code X, an INTEGER_CST. */
1451
1452 hashval_t
1453 int_cst_hasher::hash (tree x)
1454 {
1455 const_tree const t = x;
1456 hashval_t code = TYPE_UID (TREE_TYPE (t));
1457 int i;
1458
1459 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1460 code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code);
1461
1462 return code;
1463 }
1464
1465 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1466 is the same as that given by *Y, which is the same. */
1467
1468 bool
1469 int_cst_hasher::equal (tree x, tree y)
1470 {
1471 const_tree const xt = x;
1472 const_tree const yt = y;
1473
1474 if (TREE_TYPE (xt) != TREE_TYPE (yt)
1475 || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1476 || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1477 return false;
1478
1479 for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1480 if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1481 return false;
1482
1483 return true;
1484 }
1485
1486 /* Cache wide_int CST into the TYPE_CACHED_VALUES cache for TYPE.
1487 SLOT is the slot entry to store it in, and MAX_SLOTS is the maximum
1488 number of slots that can be cached for the type. */
1489
1490 static inline tree
1491 cache_wide_int_in_type_cache (tree type, const wide_int &cst,
1492 int slot, int max_slots)
1493 {
1494 gcc_checking_assert (slot >= 0);
1495 /* Initialize cache. */
1496 if (!TYPE_CACHED_VALUES_P (type))
1497 {
1498 TYPE_CACHED_VALUES_P (type) = 1;
1499 TYPE_CACHED_VALUES (type) = make_tree_vec (max_slots);
1500 }
1501 tree t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), slot);
1502 if (!t)
1503 {
1504 /* Create a new shared int. */
1505 t = build_new_int_cst (type, cst);
1506 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), slot) = t;
1507 }
1508 return t;
1509 }
1510
1511 /* Create an INT_CST node of TYPE and value CST.
1512 The returned node is always shared. For small integers we use a
1513 per-type vector cache, for larger ones we use a single hash table.
1514 The value is extended from its precision according to the sign of
1515 the type to be a multiple of HOST_BITS_PER_WIDE_INT. This defines
1516 the upper bits and ensures that hashing and value equality based
1517 upon the underlying HOST_WIDE_INTs works without masking. */
1518
1519 static tree
1520 wide_int_to_tree_1 (tree type, const wide_int_ref &pcst)
1521 {
1522 tree t;
1523 int ix = -1;
1524 int limit = 0;
1525
1526 gcc_assert (type);
1527 unsigned int prec = TYPE_PRECISION (type);
1528 signop sgn = TYPE_SIGN (type);
1529
1530 /* Verify that everything is canonical. */
1531 int l = pcst.get_len ();
1532 if (l > 1)
1533 {
1534 if (pcst.elt (l - 1) == 0)
1535 gcc_checking_assert (pcst.elt (l - 2) < 0);
1536 if (pcst.elt (l - 1) == HOST_WIDE_INT_M1)
1537 gcc_checking_assert (pcst.elt (l - 2) >= 0);
1538 }
1539
1540 wide_int cst = wide_int::from (pcst, prec, sgn);
1541 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1542
1543 enum tree_code code = TREE_CODE (type);
1544 if (code == POINTER_TYPE || code == REFERENCE_TYPE)
1545 {
1546 /* Cache NULL pointer and zero bounds. */
1547 if (cst == 0)
1548 ix = 0;
1549 /* Cache upper bounds of pointers. */
1550 else if (cst == wi::max_value (prec, sgn))
1551 ix = 1;
1552 /* Cache 1 which is used for a non-zero range. */
1553 else if (cst == 1)
1554 ix = 2;
1555
1556 if (ix >= 0)
1557 {
1558 t = cache_wide_int_in_type_cache (type, cst, ix, 3);
1559 /* Make sure no one is clobbering the shared constant. */
1560 gcc_checking_assert (TREE_TYPE (t) == type
1561 && cst == wi::to_wide (t));
1562 return t;
1563 }
1564 }
1565 if (ext_len == 1)
1566 {
1567 /* We just need to store a single HOST_WIDE_INT. */
1568 HOST_WIDE_INT hwi;
1569 if (TYPE_UNSIGNED (type))
1570 hwi = cst.to_uhwi ();
1571 else
1572 hwi = cst.to_shwi ();
1573
1574 switch (code)
1575 {
1576 case NULLPTR_TYPE:
1577 gcc_assert (hwi == 0);
1578 /* Fallthru. */
1579
1580 case POINTER_TYPE:
1581 case REFERENCE_TYPE:
1582 /* Ignore pointers, as they were already handled above. */
1583 break;
1584
1585 case BOOLEAN_TYPE:
1586 /* Cache false or true. */
1587 limit = 2;
1588 if (IN_RANGE (hwi, 0, 1))
1589 ix = hwi;
1590 break;
1591
1592 case INTEGER_TYPE:
1593 case OFFSET_TYPE:
1594 if (TYPE_SIGN (type) == UNSIGNED)
1595 {
1596 /* Cache [0, N). */
1597 limit = param_integer_share_limit;
1598 if (IN_RANGE (hwi, 0, param_integer_share_limit - 1))
1599 ix = hwi;
1600 }
1601 else
1602 {
1603 /* Cache [-1, N). */
1604 limit = param_integer_share_limit + 1;
1605 if (IN_RANGE (hwi, -1, param_integer_share_limit - 1))
1606 ix = hwi + 1;
1607 }
1608 break;
1609
1610 case ENUMERAL_TYPE:
1611 break;
1612
1613 default:
1614 gcc_unreachable ();
1615 }
1616
1617 if (ix >= 0)
1618 {
1619 t = cache_wide_int_in_type_cache (type, cst, ix, limit);
1620 /* Make sure no one is clobbering the shared constant. */
1621 gcc_checking_assert (TREE_TYPE (t) == type
1622 && TREE_INT_CST_NUNITS (t) == 1
1623 && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1624 && TREE_INT_CST_EXT_NUNITS (t) == 1
1625 && TREE_INT_CST_ELT (t, 0) == hwi);
1626 return t;
1627 }
1628 else
1629 {
1630 /* Use the cache of larger shared ints, using int_cst_node as
1631 a temporary. */
1632
1633 TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1634 TREE_TYPE (int_cst_node) = type;
1635
1636 tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1637 t = *slot;
1638 if (!t)
1639 {
1640 /* Insert this one into the hash table. */
1641 t = int_cst_node;
1642 *slot = t;
1643 /* Make a new node for next time round. */
1644 int_cst_node = make_int_cst (1, 1);
1645 }
1646 }
1647 }
1648 else
1649 {
1650 /* The value either hashes properly or we drop it on the floor
1651 for the gc to take care of. There will not be enough of them
1652 to worry about. */
1653
1654 tree nt = build_new_int_cst (type, cst);
1655 tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1656 t = *slot;
1657 if (!t)
1658 {
1659 /* Insert this one into the hash table. */
1660 t = nt;
1661 *slot = t;
1662 }
1663 else
1664 ggc_free (nt);
1665 }
1666
1667 return t;
1668 }
1669
1670 hashval_t
1671 poly_int_cst_hasher::hash (tree t)
1672 {
1673 inchash::hash hstate;
1674
1675 hstate.add_int (TYPE_UID (TREE_TYPE (t)));
1676 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1677 hstate.add_wide_int (wi::to_wide (POLY_INT_CST_COEFF (t, i)));
1678
1679 return hstate.end ();
1680 }
1681
1682 bool
1683 poly_int_cst_hasher::equal (tree x, const compare_type &y)
1684 {
1685 if (TREE_TYPE (x) != y.first)
1686 return false;
1687 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1688 if (wi::to_wide (POLY_INT_CST_COEFF (x, i)) != y.second->coeffs[i])
1689 return false;
1690 return true;
1691 }
1692
1693 /* Build a POLY_INT_CST node with type TYPE and with the elements in VALUES.
1694 The elements must also have type TYPE. */
1695
1696 tree
1697 build_poly_int_cst (tree type, const poly_wide_int_ref &values)
1698 {
1699 unsigned int prec = TYPE_PRECISION (type);
1700 gcc_assert (prec <= values.coeffs[0].get_precision ());
1701 poly_wide_int c = poly_wide_int::from (values, prec, SIGNED);
1702
1703 inchash::hash h;
1704 h.add_int (TYPE_UID (type));
1705 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1706 h.add_wide_int (c.coeffs[i]);
1707 poly_int_cst_hasher::compare_type comp (type, &c);
1708 tree *slot = poly_int_cst_hash_table->find_slot_with_hash (comp, h.end (),
1709 INSERT);
1710 if (*slot == NULL_TREE)
1711 {
1712 tree coeffs[NUM_POLY_INT_COEFFS];
1713 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
1714 coeffs[i] = wide_int_to_tree_1 (type, c.coeffs[i]);
1715 *slot = build_new_poly_int_cst (type, coeffs);
1716 }
1717 return *slot;
1718 }
1719
1720 /* Create a constant tree with value VALUE in type TYPE. */
1721
1722 tree
1723 wide_int_to_tree (tree type, const poly_wide_int_ref &value)
1724 {
1725 if (value.is_constant ())
1726 return wide_int_to_tree_1 (type, value.coeffs[0]);
1727 return build_poly_int_cst (type, value);
1728 }
1729
1730 void
1731 cache_integer_cst (tree t)
1732 {
1733 tree type = TREE_TYPE (t);
1734 int ix = -1;
1735 int limit = 0;
1736 int prec = TYPE_PRECISION (type);
1737
1738 gcc_assert (!TREE_OVERFLOW (t));
1739
1740 /* The caching indices here must match those in
1741 wide_int_to_type_1. */
1742 switch (TREE_CODE (type))
1743 {
1744 case NULLPTR_TYPE:
1745 gcc_assert (integer_zerop (t));
1746 /* Fallthru. */
1747
1748 case POINTER_TYPE:
1749 case REFERENCE_TYPE:
1750 {
1751 if (integer_zerop (t))
1752 ix = 0;
1753 else if (integer_onep (t))
1754 ix = 2;
1755
1756 if (ix >= 0)
1757 limit = 3;
1758 }
1759 break;
1760
1761 case BOOLEAN_TYPE:
1762 /* Cache false or true. */
1763 limit = 2;
1764 if (wi::ltu_p (wi::to_wide (t), 2))
1765 ix = TREE_INT_CST_ELT (t, 0);
1766 break;
1767
1768 case INTEGER_TYPE:
1769 case OFFSET_TYPE:
1770 if (TYPE_UNSIGNED (type))
1771 {
1772 /* Cache 0..N */
1773 limit = param_integer_share_limit;
1774
1775 /* This is a little hokie, but if the prec is smaller than
1776 what is necessary to hold param_integer_share_limit, then the
1777 obvious test will not get the correct answer. */
1778 if (prec < HOST_BITS_PER_WIDE_INT)
1779 {
1780 if (tree_to_uhwi (t)
1781 < (unsigned HOST_WIDE_INT) param_integer_share_limit)
1782 ix = tree_to_uhwi (t);
1783 }
1784 else if (wi::ltu_p (wi::to_wide (t), param_integer_share_limit))
1785 ix = tree_to_uhwi (t);
1786 }
1787 else
1788 {
1789 /* Cache -1..N */
1790 limit = param_integer_share_limit + 1;
1791
1792 if (integer_minus_onep (t))
1793 ix = 0;
1794 else if (!wi::neg_p (wi::to_wide (t)))
1795 {
1796 if (prec < HOST_BITS_PER_WIDE_INT)
1797 {
1798 if (tree_to_shwi (t) < param_integer_share_limit)
1799 ix = tree_to_shwi (t) + 1;
1800 }
1801 else if (wi::ltu_p (wi::to_wide (t), param_integer_share_limit))
1802 ix = tree_to_shwi (t) + 1;
1803 }
1804 }
1805 break;
1806
1807 case ENUMERAL_TYPE:
1808 /* The slot used by TYPE_CACHED_VALUES is used for the enum
1809 members. */
1810 break;
1811
1812 default:
1813 gcc_unreachable ();
1814 }
1815
1816 if (ix >= 0)
1817 {
1818 /* Look for it in the type's vector of small shared ints. */
1819 if (!TYPE_CACHED_VALUES_P (type))
1820 {
1821 TYPE_CACHED_VALUES_P (type) = 1;
1822 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1823 }
1824
1825 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1826 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1827 }
1828 else
1829 {
1830 /* Use the cache of larger shared ints. */
1831 tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1832 /* If there is already an entry for the number verify it's the
1833 same. */
1834 if (*slot)
1835 gcc_assert (wi::to_wide (tree (*slot)) == wi::to_wide (t));
1836 else
1837 /* Otherwise insert this one into the hash table. */
1838 *slot = t;
1839 }
1840 }
1841
1842
1843 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1844 and the rest are zeros. */
1845
1846 tree
1847 build_low_bits_mask (tree type, unsigned bits)
1848 {
1849 gcc_assert (bits <= TYPE_PRECISION (type));
1850
1851 return wide_int_to_tree (type, wi::mask (bits, false,
1852 TYPE_PRECISION (type)));
1853 }
1854
1855 /* Checks that X is integer constant that can be expressed in (unsigned)
1856 HOST_WIDE_INT without loss of precision. */
1857
1858 bool
1859 cst_and_fits_in_hwi (const_tree x)
1860 {
1861 return (TREE_CODE (x) == INTEGER_CST
1862 && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
1863 }
1864
1865 /* Build a newly constructed VECTOR_CST with the given values of
1866 (VECTOR_CST_)LOG2_NPATTERNS and (VECTOR_CST_)NELTS_PER_PATTERN. */
1867
1868 tree
1869 make_vector (unsigned log2_npatterns,
1870 unsigned int nelts_per_pattern MEM_STAT_DECL)
1871 {
1872 gcc_assert (IN_RANGE (nelts_per_pattern, 1, 3));
1873 tree t;
1874 unsigned npatterns = 1 << log2_npatterns;
1875 unsigned encoded_nelts = npatterns * nelts_per_pattern;
1876 unsigned length = (sizeof (struct tree_vector)
1877 + (encoded_nelts - 1) * sizeof (tree));
1878
1879 record_node_allocation_statistics (VECTOR_CST, length);
1880
1881 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1882
1883 TREE_SET_CODE (t, VECTOR_CST);
1884 TREE_CONSTANT (t) = 1;
1885 VECTOR_CST_LOG2_NPATTERNS (t) = log2_npatterns;
1886 VECTOR_CST_NELTS_PER_PATTERN (t) = nelts_per_pattern;
1887
1888 return t;
1889 }
1890
1891 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1892 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1893
1894 tree
1895 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1896 {
1897 if (vec_safe_length (v) == 0)
1898 return build_zero_cst (type);
1899
1900 unsigned HOST_WIDE_INT idx, nelts;
1901 tree value;
1902
1903 /* We can't construct a VECTOR_CST for a variable number of elements. */
1904 nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
1905 tree_vector_builder vec (type, nelts, 1);
1906 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1907 {
1908 if (TREE_CODE (value) == VECTOR_CST)
1909 {
1910 /* If NELTS is constant then this must be too. */
1911 unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant ();
1912 for (unsigned i = 0; i < sub_nelts; ++i)
1913 vec.quick_push (VECTOR_CST_ELT (value, i));
1914 }
1915 else
1916 vec.quick_push (value);
1917 }
1918 while (vec.length () < nelts)
1919 vec.quick_push (build_zero_cst (TREE_TYPE (type)));
1920
1921 return vec.build ();
1922 }
1923
1924 /* Build a vector of type VECTYPE where all the elements are SCs. */
1925 tree
1926 build_vector_from_val (tree vectype, tree sc)
1927 {
1928 unsigned HOST_WIDE_INT i, nunits;
1929
1930 if (sc == error_mark_node)
1931 return sc;
1932
1933 /* Verify that the vector type is suitable for SC. Note that there
1934 is some inconsistency in the type-system with respect to restrict
1935 qualifications of pointers. Vector types always have a main-variant
1936 element type and the qualification is applied to the vector-type.
1937 So TREE_TYPE (vector-type) does not return a properly qualified
1938 vector element-type. */
1939 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1940 TREE_TYPE (vectype)));
1941
1942 if (CONSTANT_CLASS_P (sc))
1943 {
1944 tree_vector_builder v (vectype, 1, 1);
1945 v.quick_push (sc);
1946 return v.build ();
1947 }
1948 else if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant (&nunits))
1949 return fold_build1 (VEC_DUPLICATE_EXPR, vectype, sc);
1950 else
1951 {
1952 vec<constructor_elt, va_gc> *v;
1953 vec_alloc (v, nunits);
1954 for (i = 0; i < nunits; ++i)
1955 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1956 return build_constructor (vectype, v);
1957 }
1958 }
1959
1960 /* If TYPE is not a vector type, just return SC, otherwise return
1961 build_vector_from_val (TYPE, SC). */
1962
1963 tree
1964 build_uniform_cst (tree type, tree sc)
1965 {
1966 if (!VECTOR_TYPE_P (type))
1967 return sc;
1968
1969 return build_vector_from_val (type, sc);
1970 }
1971
1972 /* Build a vector series of type TYPE in which element I has the value
1973 BASE + I * STEP. The result is a constant if BASE and STEP are constant
1974 and a VEC_SERIES_EXPR otherwise. */
1975
1976 tree
1977 build_vec_series (tree type, tree base, tree step)
1978 {
1979 if (integer_zerop (step))
1980 return build_vector_from_val (type, base);
1981 if (TREE_CODE (base) == INTEGER_CST && TREE_CODE (step) == INTEGER_CST)
1982 {
1983 tree_vector_builder builder (type, 1, 3);
1984 tree elt1 = wide_int_to_tree (TREE_TYPE (base),
1985 wi::to_wide (base) + wi::to_wide (step));
1986 tree elt2 = wide_int_to_tree (TREE_TYPE (base),
1987 wi::to_wide (elt1) + wi::to_wide (step));
1988 builder.quick_push (base);
1989 builder.quick_push (elt1);
1990 builder.quick_push (elt2);
1991 return builder.build ();
1992 }
1993 return build2 (VEC_SERIES_EXPR, type, base, step);
1994 }
1995
1996 /* Return a vector with the same number of units and number of bits
1997 as VEC_TYPE, but in which the elements are a linear series of unsigned
1998 integers { BASE, BASE + STEP, BASE + STEP * 2, ... }. */
1999
2000 tree
2001 build_index_vector (tree vec_type, poly_uint64 base, poly_uint64 step)
2002 {
2003 tree index_vec_type = vec_type;
2004 tree index_elt_type = TREE_TYPE (vec_type);
2005 poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vec_type);
2006 if (!INTEGRAL_TYPE_P (index_elt_type) || !TYPE_UNSIGNED (index_elt_type))
2007 {
2008 index_elt_type = build_nonstandard_integer_type
2009 (GET_MODE_BITSIZE (SCALAR_TYPE_MODE (index_elt_type)), true);
2010 index_vec_type = build_vector_type (index_elt_type, nunits);
2011 }
2012
2013 tree_vector_builder v (index_vec_type, 1, 3);
2014 for (unsigned int i = 0; i < 3; ++i)
2015 v.quick_push (build_int_cstu (index_elt_type, base + i * step));
2016 return v.build ();
2017 }
2018
2019 /* Return a VECTOR_CST of type VEC_TYPE in which the first NUM_A
2020 elements are A and the rest are B. */
2021
2022 tree
2023 build_vector_a_then_b (tree vec_type, unsigned int num_a, tree a, tree b)
2024 {
2025 gcc_assert (known_le (num_a, TYPE_VECTOR_SUBPARTS (vec_type)));
2026 unsigned int count = constant_lower_bound (TYPE_VECTOR_SUBPARTS (vec_type));
2027 /* Optimize the constant case. */
2028 if ((count & 1) == 0 && TYPE_VECTOR_SUBPARTS (vec_type).is_constant ())
2029 count /= 2;
2030 tree_vector_builder builder (vec_type, count, 2);
2031 for (unsigned int i = 0; i < count * 2; ++i)
2032 builder.quick_push (i < num_a ? a : b);
2033 return builder.build ();
2034 }
2035
2036 /* Something has messed with the elements of CONSTRUCTOR C after it was built;
2037 calculate TREE_CONSTANT and TREE_SIDE_EFFECTS. */
2038
2039 void
2040 recompute_constructor_flags (tree c)
2041 {
2042 unsigned int i;
2043 tree val;
2044 bool constant_p = true;
2045 bool side_effects_p = false;
2046 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
2047
2048 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
2049 {
2050 /* Mostly ctors will have elts that don't have side-effects, so
2051 the usual case is to scan all the elements. Hence a single
2052 loop for both const and side effects, rather than one loop
2053 each (with early outs). */
2054 if (!TREE_CONSTANT (val))
2055 constant_p = false;
2056 if (TREE_SIDE_EFFECTS (val))
2057 side_effects_p = true;
2058 }
2059
2060 TREE_SIDE_EFFECTS (c) = side_effects_p;
2061 TREE_CONSTANT (c) = constant_p;
2062 }
2063
2064 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for
2065 CONSTRUCTOR C. */
2066
2067 void
2068 verify_constructor_flags (tree c)
2069 {
2070 unsigned int i;
2071 tree val;
2072 bool constant_p = TREE_CONSTANT (c);
2073 bool side_effects_p = TREE_SIDE_EFFECTS (c);
2074 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
2075
2076 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
2077 {
2078 if (constant_p && !TREE_CONSTANT (val))
2079 internal_error ("non-constant element in constant CONSTRUCTOR");
2080 if (!side_effects_p && TREE_SIDE_EFFECTS (val))
2081 internal_error ("side-effects element in no-side-effects CONSTRUCTOR");
2082 }
2083 }
2084
2085 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
2086 are in the vec pointed to by VALS. */
2087 tree
2088 build_constructor (tree type, vec<constructor_elt, va_gc> *vals MEM_STAT_DECL)
2089 {
2090 tree c = make_node (CONSTRUCTOR PASS_MEM_STAT);
2091
2092 TREE_TYPE (c) = type;
2093 CONSTRUCTOR_ELTS (c) = vals;
2094
2095 recompute_constructor_flags (c);
2096
2097 return c;
2098 }
2099
2100 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
2101 INDEX and VALUE. */
2102 tree
2103 build_constructor_single (tree type, tree index, tree value)
2104 {
2105 vec<constructor_elt, va_gc> *v;
2106 constructor_elt elt = {index, value};
2107
2108 vec_alloc (v, 1);
2109 v->quick_push (elt);
2110
2111 return build_constructor (type, v);
2112 }
2113
2114
2115 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
2116 are in a list pointed to by VALS. */
2117 tree
2118 build_constructor_from_list (tree type, tree vals)
2119 {
2120 tree t;
2121 vec<constructor_elt, va_gc> *v = NULL;
2122
2123 if (vals)
2124 {
2125 vec_alloc (v, list_length (vals));
2126 for (t = vals; t; t = TREE_CHAIN (t))
2127 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
2128 }
2129
2130 return build_constructor (type, v);
2131 }
2132
2133 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
2134 are in a vector pointed to by VALS. Note that the TREE_PURPOSE
2135 fields in the constructor remain null. */
2136
2137 tree
2138 build_constructor_from_vec (tree type, const vec<tree, va_gc> *vals)
2139 {
2140 vec<constructor_elt, va_gc> *v = NULL;
2141
2142 for (tree t : *vals)
2143 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, t);
2144
2145 return build_constructor (type, v);
2146 }
2147
2148 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
2149 of elements, provided as index/value pairs. */
2150
2151 tree
2152 build_constructor_va (tree type, int nelts, ...)
2153 {
2154 vec<constructor_elt, va_gc> *v = NULL;
2155 va_list p;
2156
2157 va_start (p, nelts);
2158 vec_alloc (v, nelts);
2159 while (nelts--)
2160 {
2161 tree index = va_arg (p, tree);
2162 tree value = va_arg (p, tree);
2163 CONSTRUCTOR_APPEND_ELT (v, index, value);
2164 }
2165 va_end (p);
2166 return build_constructor (type, v);
2167 }
2168
2169 /* Return a node of type TYPE for which TREE_CLOBBER_P is true. */
2170
2171 tree
2172 build_clobber (tree type)
2173 {
2174 tree clobber = build_constructor (type, NULL);
2175 TREE_THIS_VOLATILE (clobber) = true;
2176 return clobber;
2177 }
2178
2179 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
2180
2181 tree
2182 build_fixed (tree type, FIXED_VALUE_TYPE f)
2183 {
2184 tree v;
2185 FIXED_VALUE_TYPE *fp;
2186
2187 v = make_node (FIXED_CST);
2188 fp = ggc_alloc<fixed_value> ();
2189 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
2190
2191 TREE_TYPE (v) = type;
2192 TREE_FIXED_CST_PTR (v) = fp;
2193 return v;
2194 }
2195
2196 /* Return a new REAL_CST node whose type is TYPE and value is D. */
2197
2198 tree
2199 build_real (tree type, REAL_VALUE_TYPE d)
2200 {
2201 tree v;
2202 REAL_VALUE_TYPE *dp;
2203 int overflow = 0;
2204
2205 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
2206 Consider doing it via real_convert now. */
2207
2208 v = make_node (REAL_CST);
2209 dp = ggc_alloc<real_value> ();
2210 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
2211
2212 TREE_TYPE (v) = type;
2213 TREE_REAL_CST_PTR (v) = dp;
2214 TREE_OVERFLOW (v) = overflow;
2215 return v;
2216 }
2217
2218 /* Like build_real, but first truncate D to the type. */
2219
2220 tree
2221 build_real_truncate (tree type, REAL_VALUE_TYPE d)
2222 {
2223 return build_real (type, real_value_truncate (TYPE_MODE (type), d));
2224 }
2225
2226 /* Return a new REAL_CST node whose type is TYPE
2227 and whose value is the integer value of the INTEGER_CST node I. */
2228
2229 REAL_VALUE_TYPE
2230 real_value_from_int_cst (const_tree type, const_tree i)
2231 {
2232 REAL_VALUE_TYPE d;
2233
2234 /* Clear all bits of the real value type so that we can later do
2235 bitwise comparisons to see if two values are the same. */
2236 memset (&d, 0, sizeof d);
2237
2238 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, wi::to_wide (i),
2239 TYPE_SIGN (TREE_TYPE (i)));
2240 return d;
2241 }
2242
2243 /* Given a tree representing an integer constant I, return a tree
2244 representing the same value as a floating-point constant of type TYPE. */
2245
2246 tree
2247 build_real_from_int_cst (tree type, const_tree i)
2248 {
2249 tree v;
2250 int overflow = TREE_OVERFLOW (i);
2251
2252 v = build_real (type, real_value_from_int_cst (type, i));
2253
2254 TREE_OVERFLOW (v) |= overflow;
2255 return v;
2256 }
2257
2258 /* Return a new REAL_CST node whose type is TYPE
2259 and whose value is the integer value I which has sign SGN. */
2260
2261 tree
2262 build_real_from_wide (tree type, const wide_int_ref &i, signop sgn)
2263 {
2264 REAL_VALUE_TYPE d;
2265
2266 /* Clear all bits of the real value type so that we can later do
2267 bitwise comparisons to see if two values are the same. */
2268 memset (&d, 0, sizeof d);
2269
2270 real_from_integer (&d, TYPE_MODE (type), i, sgn);
2271 return build_real (type, d);
2272 }
2273
2274 /* Return a newly constructed STRING_CST node whose value is the LEN
2275 characters at STR when STR is nonnull, or all zeros otherwise.
2276 Note that for a C string literal, LEN should include the trailing NUL.
2277 The TREE_TYPE is not initialized. */
2278
2279 tree
2280 build_string (unsigned len, const char *str /*= NULL */)
2281 {
2282 /* Do not waste bytes provided by padding of struct tree_string. */
2283 unsigned size = len + offsetof (struct tree_string, str) + 1;
2284
2285 record_node_allocation_statistics (STRING_CST, size);
2286
2287 tree s = (tree) ggc_internal_alloc (size);
2288
2289 memset (s, 0, sizeof (struct tree_typed));
2290 TREE_SET_CODE (s, STRING_CST);
2291 TREE_CONSTANT (s) = 1;
2292 TREE_STRING_LENGTH (s) = len;
2293 if (str)
2294 memcpy (s->string.str, str, len);
2295 else
2296 memset (s->string.str, 0, len);
2297 s->string.str[len] = '\0';
2298
2299 return s;
2300 }
2301
2302 /* Return a newly constructed COMPLEX_CST node whose value is
2303 specified by the real and imaginary parts REAL and IMAG.
2304 Both REAL and IMAG should be constant nodes. TYPE, if specified,
2305 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
2306
2307 tree
2308 build_complex (tree type, tree real, tree imag)
2309 {
2310 gcc_assert (CONSTANT_CLASS_P (real));
2311 gcc_assert (CONSTANT_CLASS_P (imag));
2312
2313 tree t = make_node (COMPLEX_CST);
2314
2315 TREE_REALPART (t) = real;
2316 TREE_IMAGPART (t) = imag;
2317 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
2318 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
2319 return t;
2320 }
2321
2322 /* Build a complex (inf +- 0i), such as for the result of cproj.
2323 TYPE is the complex tree type of the result. If NEG is true, the
2324 imaginary zero is negative. */
2325
2326 tree
2327 build_complex_inf (tree type, bool neg)
2328 {
2329 REAL_VALUE_TYPE rinf, rzero = dconst0;
2330
2331 real_inf (&rinf);
2332 rzero.sign = neg;
2333 return build_complex (type, build_real (TREE_TYPE (type), rinf),
2334 build_real (TREE_TYPE (type), rzero));
2335 }
2336
2337 /* Return the constant 1 in type TYPE. If TYPE has several elements, each
2338 element is set to 1. In particular, this is 1 + i for complex types. */
2339
2340 tree
2341 build_each_one_cst (tree type)
2342 {
2343 if (TREE_CODE (type) == COMPLEX_TYPE)
2344 {
2345 tree scalar = build_one_cst (TREE_TYPE (type));
2346 return build_complex (type, scalar, scalar);
2347 }
2348 else
2349 return build_one_cst (type);
2350 }
2351
2352 /* Return a constant of arithmetic type TYPE which is the
2353 multiplicative identity of the set TYPE. */
2354
2355 tree
2356 build_one_cst (tree type)
2357 {
2358 switch (TREE_CODE (type))
2359 {
2360 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2361 case POINTER_TYPE: case REFERENCE_TYPE:
2362 case OFFSET_TYPE:
2363 return build_int_cst (type, 1);
2364
2365 case REAL_TYPE:
2366 return build_real (type, dconst1);
2367
2368 case FIXED_POINT_TYPE:
2369 /* We can only generate 1 for accum types. */
2370 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2371 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
2372
2373 case VECTOR_TYPE:
2374 {
2375 tree scalar = build_one_cst (TREE_TYPE (type));
2376
2377 return build_vector_from_val (type, scalar);
2378 }
2379
2380 case COMPLEX_TYPE:
2381 return build_complex (type,
2382 build_one_cst (TREE_TYPE (type)),
2383 build_zero_cst (TREE_TYPE (type)));
2384
2385 default:
2386 gcc_unreachable ();
2387 }
2388 }
2389
2390 /* Return an integer of type TYPE containing all 1's in as much precision as
2391 it contains, or a complex or vector whose subparts are such integers. */
2392
2393 tree
2394 build_all_ones_cst (tree type)
2395 {
2396 if (TREE_CODE (type) == COMPLEX_TYPE)
2397 {
2398 tree scalar = build_all_ones_cst (TREE_TYPE (type));
2399 return build_complex (type, scalar, scalar);
2400 }
2401 else
2402 return build_minus_one_cst (type);
2403 }
2404
2405 /* Return a constant of arithmetic type TYPE which is the
2406 opposite of the multiplicative identity of the set TYPE. */
2407
2408 tree
2409 build_minus_one_cst (tree type)
2410 {
2411 switch (TREE_CODE (type))
2412 {
2413 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2414 case POINTER_TYPE: case REFERENCE_TYPE:
2415 case OFFSET_TYPE:
2416 return build_int_cst (type, -1);
2417
2418 case REAL_TYPE:
2419 return build_real (type, dconstm1);
2420
2421 case FIXED_POINT_TYPE:
2422 /* We can only generate 1 for accum types. */
2423 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2424 return build_fixed (type,
2425 fixed_from_double_int (double_int_minus_one,
2426 SCALAR_TYPE_MODE (type)));
2427
2428 case VECTOR_TYPE:
2429 {
2430 tree scalar = build_minus_one_cst (TREE_TYPE (type));
2431
2432 return build_vector_from_val (type, scalar);
2433 }
2434
2435 case COMPLEX_TYPE:
2436 return build_complex (type,
2437 build_minus_one_cst (TREE_TYPE (type)),
2438 build_zero_cst (TREE_TYPE (type)));
2439
2440 default:
2441 gcc_unreachable ();
2442 }
2443 }
2444
2445 /* Build 0 constant of type TYPE. This is used by constructor folding
2446 and thus the constant should be represented in memory by
2447 zero(es). */
2448
2449 tree
2450 build_zero_cst (tree type)
2451 {
2452 switch (TREE_CODE (type))
2453 {
2454 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2455 case POINTER_TYPE: case REFERENCE_TYPE:
2456 case OFFSET_TYPE: case NULLPTR_TYPE:
2457 return build_int_cst (type, 0);
2458
2459 case REAL_TYPE:
2460 return build_real (type, dconst0);
2461
2462 case FIXED_POINT_TYPE:
2463 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2464
2465 case VECTOR_TYPE:
2466 {
2467 tree scalar = build_zero_cst (TREE_TYPE (type));
2468
2469 return build_vector_from_val (type, scalar);
2470 }
2471
2472 case COMPLEX_TYPE:
2473 {
2474 tree zero = build_zero_cst (TREE_TYPE (type));
2475
2476 return build_complex (type, zero, zero);
2477 }
2478
2479 default:
2480 if (!AGGREGATE_TYPE_P (type))
2481 return fold_convert (type, integer_zero_node);
2482 return build_constructor (type, NULL);
2483 }
2484 }
2485
2486
2487 /* Build a BINFO with LEN language slots. */
2488
2489 tree
2490 make_tree_binfo (unsigned base_binfos MEM_STAT_DECL)
2491 {
2492 tree t;
2493 size_t length = (offsetof (struct tree_binfo, base_binfos)
2494 + vec<tree, va_gc>::embedded_size (base_binfos));
2495
2496 record_node_allocation_statistics (TREE_BINFO, length);
2497
2498 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2499
2500 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2501
2502 TREE_SET_CODE (t, TREE_BINFO);
2503
2504 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2505
2506 return t;
2507 }
2508
2509 /* Create a CASE_LABEL_EXPR tree node and return it. */
2510
2511 tree
2512 build_case_label (tree low_value, tree high_value, tree label_decl)
2513 {
2514 tree t = make_node (CASE_LABEL_EXPR);
2515
2516 TREE_TYPE (t) = void_type_node;
2517 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2518
2519 CASE_LOW (t) = low_value;
2520 CASE_HIGH (t) = high_value;
2521 CASE_LABEL (t) = label_decl;
2522 CASE_CHAIN (t) = NULL_TREE;
2523
2524 return t;
2525 }
2526
2527 /* Build a newly constructed INTEGER_CST node. LEN and EXT_LEN are the
2528 values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2529 The latter determines the length of the HOST_WIDE_INT vector. */
2530
2531 tree
2532 make_int_cst (int len, int ext_len MEM_STAT_DECL)
2533 {
2534 tree t;
2535 int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2536 + sizeof (struct tree_int_cst));
2537
2538 gcc_assert (len);
2539 record_node_allocation_statistics (INTEGER_CST, length);
2540
2541 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2542
2543 TREE_SET_CODE (t, INTEGER_CST);
2544 TREE_INT_CST_NUNITS (t) = len;
2545 TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2546 /* to_offset can only be applied to trees that are offset_int-sized
2547 or smaller. EXT_LEN is correct if it fits, otherwise the constant
2548 must be exactly the precision of offset_int and so LEN is correct. */
2549 if (ext_len <= OFFSET_INT_ELTS)
2550 TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2551 else
2552 TREE_INT_CST_OFFSET_NUNITS (t) = len;
2553
2554 TREE_CONSTANT (t) = 1;
2555
2556 return t;
2557 }
2558
2559 /* Build a newly constructed TREE_VEC node of length LEN. */
2560
2561 tree
2562 make_tree_vec (int len MEM_STAT_DECL)
2563 {
2564 tree t;
2565 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2566
2567 record_node_allocation_statistics (TREE_VEC, length);
2568
2569 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2570
2571 TREE_SET_CODE (t, TREE_VEC);
2572 TREE_VEC_LENGTH (t) = len;
2573
2574 return t;
2575 }
2576
2577 /* Grow a TREE_VEC node to new length LEN. */
2578
2579 tree
2580 grow_tree_vec (tree v, int len MEM_STAT_DECL)
2581 {
2582 gcc_assert (TREE_CODE (v) == TREE_VEC);
2583
2584 int oldlen = TREE_VEC_LENGTH (v);
2585 gcc_assert (len > oldlen);
2586
2587 size_t oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2588 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2589
2590 record_node_allocation_statistics (TREE_VEC, length - oldlength);
2591
2592 v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2593
2594 TREE_VEC_LENGTH (v) = len;
2595
2596 return v;
2597 }
2598 \f
2599 /* Return 1 if EXPR is the constant zero, whether it is integral, float or
2600 fixed, and scalar, complex or vector. */
2601
2602 bool
2603 zerop (const_tree expr)
2604 {
2605 return (integer_zerop (expr)
2606 || real_zerop (expr)
2607 || fixed_zerop (expr));
2608 }
2609
2610 /* Return 1 if EXPR is the integer constant zero or a complex constant
2611 of zero, or a location wrapper for such a constant. */
2612
2613 bool
2614 integer_zerop (const_tree expr)
2615 {
2616 STRIP_ANY_LOCATION_WRAPPER (expr);
2617
2618 switch (TREE_CODE (expr))
2619 {
2620 case INTEGER_CST:
2621 return wi::to_wide (expr) == 0;
2622 case COMPLEX_CST:
2623 return (integer_zerop (TREE_REALPART (expr))
2624 && integer_zerop (TREE_IMAGPART (expr)));
2625 case VECTOR_CST:
2626 return (VECTOR_CST_NPATTERNS (expr) == 1
2627 && VECTOR_CST_DUPLICATE_P (expr)
2628 && integer_zerop (VECTOR_CST_ENCODED_ELT (expr, 0)));
2629 default:
2630 return false;
2631 }
2632 }
2633
2634 /* Return 1 if EXPR is the integer constant one or the corresponding
2635 complex constant, or a location wrapper for such a constant. */
2636
2637 bool
2638 integer_onep (const_tree expr)
2639 {
2640 STRIP_ANY_LOCATION_WRAPPER (expr);
2641
2642 switch (TREE_CODE (expr))
2643 {
2644 case INTEGER_CST:
2645 return wi::eq_p (wi::to_widest (expr), 1);
2646 case COMPLEX_CST:
2647 return (integer_onep (TREE_REALPART (expr))
2648 && integer_zerop (TREE_IMAGPART (expr)));
2649 case VECTOR_CST:
2650 return (VECTOR_CST_NPATTERNS (expr) == 1
2651 && VECTOR_CST_DUPLICATE_P (expr)
2652 && integer_onep (VECTOR_CST_ENCODED_ELT (expr, 0)));
2653 default:
2654 return false;
2655 }
2656 }
2657
2658 /* Return 1 if EXPR is the integer constant one. For complex and vector,
2659 return 1 if every piece is the integer constant one.
2660 Also return 1 for location wrappers for such a constant. */
2661
2662 bool
2663 integer_each_onep (const_tree expr)
2664 {
2665 STRIP_ANY_LOCATION_WRAPPER (expr);
2666
2667 if (TREE_CODE (expr) == COMPLEX_CST)
2668 return (integer_onep (TREE_REALPART (expr))
2669 && integer_onep (TREE_IMAGPART (expr)));
2670 else
2671 return integer_onep (expr);
2672 }
2673
2674 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2675 it contains, or a complex or vector whose subparts are such integers,
2676 or a location wrapper for such a constant. */
2677
2678 bool
2679 integer_all_onesp (const_tree expr)
2680 {
2681 STRIP_ANY_LOCATION_WRAPPER (expr);
2682
2683 if (TREE_CODE (expr) == COMPLEX_CST
2684 && integer_all_onesp (TREE_REALPART (expr))
2685 && integer_all_onesp (TREE_IMAGPART (expr)))
2686 return true;
2687
2688 else if (TREE_CODE (expr) == VECTOR_CST)
2689 return (VECTOR_CST_NPATTERNS (expr) == 1
2690 && VECTOR_CST_DUPLICATE_P (expr)
2691 && integer_all_onesp (VECTOR_CST_ENCODED_ELT (expr, 0)));
2692
2693 else if (TREE_CODE (expr) != INTEGER_CST)
2694 return false;
2695
2696 return (wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED)
2697 == wi::to_wide (expr));
2698 }
2699
2700 /* Return 1 if EXPR is the integer constant minus one, or a location wrapper
2701 for such a constant. */
2702
2703 bool
2704 integer_minus_onep (const_tree expr)
2705 {
2706 STRIP_ANY_LOCATION_WRAPPER (expr);
2707
2708 if (TREE_CODE (expr) == COMPLEX_CST)
2709 return (integer_all_onesp (TREE_REALPART (expr))
2710 && integer_zerop (TREE_IMAGPART (expr)));
2711 else
2712 return integer_all_onesp (expr);
2713 }
2714
2715 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2716 one bit on), or a location wrapper for such a constant. */
2717
2718 bool
2719 integer_pow2p (const_tree expr)
2720 {
2721 STRIP_ANY_LOCATION_WRAPPER (expr);
2722
2723 if (TREE_CODE (expr) == COMPLEX_CST
2724 && integer_pow2p (TREE_REALPART (expr))
2725 && integer_zerop (TREE_IMAGPART (expr)))
2726 return true;
2727
2728 if (TREE_CODE (expr) != INTEGER_CST)
2729 return false;
2730
2731 return wi::popcount (wi::to_wide (expr)) == 1;
2732 }
2733
2734 /* Return 1 if EXPR is an integer constant other than zero or a
2735 complex constant other than zero, or a location wrapper for such a
2736 constant. */
2737
2738 bool
2739 integer_nonzerop (const_tree expr)
2740 {
2741 STRIP_ANY_LOCATION_WRAPPER (expr);
2742
2743 return ((TREE_CODE (expr) == INTEGER_CST
2744 && wi::to_wide (expr) != 0)
2745 || (TREE_CODE (expr) == COMPLEX_CST
2746 && (integer_nonzerop (TREE_REALPART (expr))
2747 || integer_nonzerop (TREE_IMAGPART (expr)))));
2748 }
2749
2750 /* Return 1 if EXPR is the integer constant one. For vector,
2751 return 1 if every piece is the integer constant minus one
2752 (representing the value TRUE).
2753 Also return 1 for location wrappers for such a constant. */
2754
2755 bool
2756 integer_truep (const_tree expr)
2757 {
2758 STRIP_ANY_LOCATION_WRAPPER (expr);
2759
2760 if (TREE_CODE (expr) == VECTOR_CST)
2761 return integer_all_onesp (expr);
2762 return integer_onep (expr);
2763 }
2764
2765 /* Return 1 if EXPR is the fixed-point constant zero, or a location wrapper
2766 for such a constant. */
2767
2768 bool
2769 fixed_zerop (const_tree expr)
2770 {
2771 STRIP_ANY_LOCATION_WRAPPER (expr);
2772
2773 return (TREE_CODE (expr) == FIXED_CST
2774 && TREE_FIXED_CST (expr).data.is_zero ());
2775 }
2776
2777 /* Return the power of two represented by a tree node known to be a
2778 power of two. */
2779
2780 int
2781 tree_log2 (const_tree expr)
2782 {
2783 if (TREE_CODE (expr) == COMPLEX_CST)
2784 return tree_log2 (TREE_REALPART (expr));
2785
2786 return wi::exact_log2 (wi::to_wide (expr));
2787 }
2788
2789 /* Similar, but return the largest integer Y such that 2 ** Y is less
2790 than or equal to EXPR. */
2791
2792 int
2793 tree_floor_log2 (const_tree expr)
2794 {
2795 if (TREE_CODE (expr) == COMPLEX_CST)
2796 return tree_log2 (TREE_REALPART (expr));
2797
2798 return wi::floor_log2 (wi::to_wide (expr));
2799 }
2800
2801 /* Return number of known trailing zero bits in EXPR, or, if the value of
2802 EXPR is known to be zero, the precision of it's type. */
2803
2804 unsigned int
2805 tree_ctz (const_tree expr)
2806 {
2807 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2808 && !POINTER_TYPE_P (TREE_TYPE (expr)))
2809 return 0;
2810
2811 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2812 switch (TREE_CODE (expr))
2813 {
2814 case INTEGER_CST:
2815 ret1 = wi::ctz (wi::to_wide (expr));
2816 return MIN (ret1, prec);
2817 case SSA_NAME:
2818 ret1 = wi::ctz (get_nonzero_bits (expr));
2819 return MIN (ret1, prec);
2820 case PLUS_EXPR:
2821 case MINUS_EXPR:
2822 case BIT_IOR_EXPR:
2823 case BIT_XOR_EXPR:
2824 case MIN_EXPR:
2825 case MAX_EXPR:
2826 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2827 if (ret1 == 0)
2828 return ret1;
2829 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2830 return MIN (ret1, ret2);
2831 case POINTER_PLUS_EXPR:
2832 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2833 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2834 /* Second operand is sizetype, which could be in theory
2835 wider than pointer's precision. Make sure we never
2836 return more than prec. */
2837 ret2 = MIN (ret2, prec);
2838 return MIN (ret1, ret2);
2839 case BIT_AND_EXPR:
2840 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2841 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2842 return MAX (ret1, ret2);
2843 case MULT_EXPR:
2844 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2845 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2846 return MIN (ret1 + ret2, prec);
2847 case LSHIFT_EXPR:
2848 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2849 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2850 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2851 {
2852 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2853 return MIN (ret1 + ret2, prec);
2854 }
2855 return ret1;
2856 case RSHIFT_EXPR:
2857 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2858 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2859 {
2860 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2861 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2862 if (ret1 > ret2)
2863 return ret1 - ret2;
2864 }
2865 return 0;
2866 case TRUNC_DIV_EXPR:
2867 case CEIL_DIV_EXPR:
2868 case FLOOR_DIV_EXPR:
2869 case ROUND_DIV_EXPR:
2870 case EXACT_DIV_EXPR:
2871 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2872 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2873 {
2874 int l = tree_log2 (TREE_OPERAND (expr, 1));
2875 if (l >= 0)
2876 {
2877 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2878 ret2 = l;
2879 if (ret1 > ret2)
2880 return ret1 - ret2;
2881 }
2882 }
2883 return 0;
2884 CASE_CONVERT:
2885 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2886 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2887 ret1 = prec;
2888 return MIN (ret1, prec);
2889 case SAVE_EXPR:
2890 return tree_ctz (TREE_OPERAND (expr, 0));
2891 case COND_EXPR:
2892 ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2893 if (ret1 == 0)
2894 return 0;
2895 ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2896 return MIN (ret1, ret2);
2897 case COMPOUND_EXPR:
2898 return tree_ctz (TREE_OPERAND (expr, 1));
2899 case ADDR_EXPR:
2900 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2901 if (ret1 > BITS_PER_UNIT)
2902 {
2903 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2904 return MIN (ret1, prec);
2905 }
2906 return 0;
2907 default:
2908 return 0;
2909 }
2910 }
2911
2912 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2913 decimal float constants, so don't return 1 for them.
2914 Also return 1 for location wrappers around such a constant. */
2915
2916 bool
2917 real_zerop (const_tree expr)
2918 {
2919 STRIP_ANY_LOCATION_WRAPPER (expr);
2920
2921 switch (TREE_CODE (expr))
2922 {
2923 case REAL_CST:
2924 return real_equal (&TREE_REAL_CST (expr), &dconst0)
2925 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2926 case COMPLEX_CST:
2927 return real_zerop (TREE_REALPART (expr))
2928 && real_zerop (TREE_IMAGPART (expr));
2929 case VECTOR_CST:
2930 {
2931 /* Don't simply check for a duplicate because the predicate
2932 accepts both +0.0 and -0.0. */
2933 unsigned count = vector_cst_encoded_nelts (expr);
2934 for (unsigned int i = 0; i < count; ++i)
2935 if (!real_zerop (VECTOR_CST_ENCODED_ELT (expr, i)))
2936 return false;
2937 return true;
2938 }
2939 default:
2940 return false;
2941 }
2942 }
2943
2944 /* Return 1 if EXPR is the real constant one in real or complex form.
2945 Trailing zeroes matter for decimal float constants, so don't return
2946 1 for them.
2947 Also return 1 for location wrappers around such a constant. */
2948
2949 bool
2950 real_onep (const_tree expr)
2951 {
2952 STRIP_ANY_LOCATION_WRAPPER (expr);
2953
2954 switch (TREE_CODE (expr))
2955 {
2956 case REAL_CST:
2957 return real_equal (&TREE_REAL_CST (expr), &dconst1)
2958 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2959 case COMPLEX_CST:
2960 return real_onep (TREE_REALPART (expr))
2961 && real_zerop (TREE_IMAGPART (expr));
2962 case VECTOR_CST:
2963 return (VECTOR_CST_NPATTERNS (expr) == 1
2964 && VECTOR_CST_DUPLICATE_P (expr)
2965 && real_onep (VECTOR_CST_ENCODED_ELT (expr, 0)));
2966 default:
2967 return false;
2968 }
2969 }
2970
2971 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2972 matter for decimal float constants, so don't return 1 for them.
2973 Also return 1 for location wrappers around such a constant. */
2974
2975 bool
2976 real_minus_onep (const_tree expr)
2977 {
2978 STRIP_ANY_LOCATION_WRAPPER (expr);
2979
2980 switch (TREE_CODE (expr))
2981 {
2982 case REAL_CST:
2983 return real_equal (&TREE_REAL_CST (expr), &dconstm1)
2984 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2985 case COMPLEX_CST:
2986 return real_minus_onep (TREE_REALPART (expr))
2987 && real_zerop (TREE_IMAGPART (expr));
2988 case VECTOR_CST:
2989 return (VECTOR_CST_NPATTERNS (expr) == 1
2990 && VECTOR_CST_DUPLICATE_P (expr)
2991 && real_minus_onep (VECTOR_CST_ENCODED_ELT (expr, 0)));
2992 default:
2993 return false;
2994 }
2995 }
2996
2997 /* Nonzero if EXP is a constant or a cast of a constant. */
2998
2999 bool
3000 really_constant_p (const_tree exp)
3001 {
3002 /* This is not quite the same as STRIP_NOPS. It does more. */
3003 while (CONVERT_EXPR_P (exp)
3004 || TREE_CODE (exp) == NON_LVALUE_EXPR)
3005 exp = TREE_OPERAND (exp, 0);
3006 return TREE_CONSTANT (exp);
3007 }
3008
3009 /* Return true if T holds a polynomial pointer difference, storing it in
3010 *VALUE if so. A true return means that T's precision is no greater
3011 than 64 bits, which is the largest address space we support, so *VALUE
3012 never loses precision. However, the signedness of the result does
3013 not necessarily match the signedness of T: sometimes an unsigned type
3014 like sizetype is used to encode a value that is actually negative. */
3015
3016 bool
3017 ptrdiff_tree_p (const_tree t, poly_int64_pod *value)
3018 {
3019 if (!t)
3020 return false;
3021 if (TREE_CODE (t) == INTEGER_CST)
3022 {
3023 if (!cst_and_fits_in_hwi (t))
3024 return false;
3025 *value = int_cst_value (t);
3026 return true;
3027 }
3028 if (POLY_INT_CST_P (t))
3029 {
3030 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
3031 if (!cst_and_fits_in_hwi (POLY_INT_CST_COEFF (t, i)))
3032 return false;
3033 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
3034 value->coeffs[i] = int_cst_value (POLY_INT_CST_COEFF (t, i));
3035 return true;
3036 }
3037 return false;
3038 }
3039
3040 poly_int64
3041 tree_to_poly_int64 (const_tree t)
3042 {
3043 gcc_assert (tree_fits_poly_int64_p (t));
3044 if (POLY_INT_CST_P (t))
3045 return poly_int_cst_value (t).force_shwi ();
3046 return TREE_INT_CST_LOW (t);
3047 }
3048
3049 poly_uint64
3050 tree_to_poly_uint64 (const_tree t)
3051 {
3052 gcc_assert (tree_fits_poly_uint64_p (t));
3053 if (POLY_INT_CST_P (t))
3054 return poly_int_cst_value (t).force_uhwi ();
3055 return TREE_INT_CST_LOW (t);
3056 }
3057 \f
3058 /* Return first list element whose TREE_VALUE is ELEM.
3059 Return 0 if ELEM is not in LIST. */
3060
3061 tree
3062 value_member (tree elem, tree list)
3063 {
3064 while (list)
3065 {
3066 if (elem == TREE_VALUE (list))
3067 return list;
3068 list = TREE_CHAIN (list);
3069 }
3070 return NULL_TREE;
3071 }
3072
3073 /* Return first list element whose TREE_PURPOSE is ELEM.
3074 Return 0 if ELEM is not in LIST. */
3075
3076 tree
3077 purpose_member (const_tree elem, tree list)
3078 {
3079 while (list)
3080 {
3081 if (elem == TREE_PURPOSE (list))
3082 return list;
3083 list = TREE_CHAIN (list);
3084 }
3085 return NULL_TREE;
3086 }
3087
3088 /* Return true if ELEM is in V. */
3089
3090 bool
3091 vec_member (const_tree elem, vec<tree, va_gc> *v)
3092 {
3093 unsigned ix;
3094 tree t;
3095 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
3096 if (elem == t)
3097 return true;
3098 return false;
3099 }
3100
3101 /* Returns element number IDX (zero-origin) of chain CHAIN, or
3102 NULL_TREE. */
3103
3104 tree
3105 chain_index (int idx, tree chain)
3106 {
3107 for (; chain && idx > 0; --idx)
3108 chain = TREE_CHAIN (chain);
3109 return chain;
3110 }
3111
3112 /* Return nonzero if ELEM is part of the chain CHAIN. */
3113
3114 bool
3115 chain_member (const_tree elem, const_tree chain)
3116 {
3117 while (chain)
3118 {
3119 if (elem == chain)
3120 return true;
3121 chain = DECL_CHAIN (chain);
3122 }
3123
3124 return false;
3125 }
3126
3127 /* Return the length of a chain of nodes chained through TREE_CHAIN.
3128 We expect a null pointer to mark the end of the chain.
3129 This is the Lisp primitive `length'. */
3130
3131 int
3132 list_length (const_tree t)
3133 {
3134 const_tree p = t;
3135 #ifdef ENABLE_TREE_CHECKING
3136 const_tree q = t;
3137 #endif
3138 int len = 0;
3139
3140 while (p)
3141 {
3142 p = TREE_CHAIN (p);
3143 #ifdef ENABLE_TREE_CHECKING
3144 if (len % 2)
3145 q = TREE_CHAIN (q);
3146 gcc_assert (p != q);
3147 #endif
3148 len++;
3149 }
3150
3151 return len;
3152 }
3153
3154 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
3155 UNION_TYPE TYPE, or NULL_TREE if none. */
3156
3157 tree
3158 first_field (const_tree type)
3159 {
3160 tree t = TYPE_FIELDS (type);
3161 while (t && TREE_CODE (t) != FIELD_DECL)
3162 t = TREE_CHAIN (t);
3163 return t;
3164 }
3165
3166 /* Returns the last FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
3167 UNION_TYPE TYPE, or NULL_TREE if none. */
3168
3169 tree
3170 last_field (const_tree type)
3171 {
3172 tree last = NULL_TREE;
3173
3174 for (tree fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld))
3175 {
3176 if (TREE_CODE (fld) != FIELD_DECL)
3177 continue;
3178
3179 last = fld;
3180 }
3181
3182 return last;
3183 }
3184
3185 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
3186 by modifying the last node in chain 1 to point to chain 2.
3187 This is the Lisp primitive `nconc'. */
3188
3189 tree
3190 chainon (tree op1, tree op2)
3191 {
3192 tree t1;
3193
3194 if (!op1)
3195 return op2;
3196 if (!op2)
3197 return op1;
3198
3199 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
3200 continue;
3201 TREE_CHAIN (t1) = op2;
3202
3203 #ifdef ENABLE_TREE_CHECKING
3204 {
3205 tree t2;
3206 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
3207 gcc_assert (t2 != t1);
3208 }
3209 #endif
3210
3211 return op1;
3212 }
3213
3214 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
3215
3216 tree
3217 tree_last (tree chain)
3218 {
3219 tree next;
3220 if (chain)
3221 while ((next = TREE_CHAIN (chain)))
3222 chain = next;
3223 return chain;
3224 }
3225
3226 /* Reverse the order of elements in the chain T,
3227 and return the new head of the chain (old last element). */
3228
3229 tree
3230 nreverse (tree t)
3231 {
3232 tree prev = 0, decl, next;
3233 for (decl = t; decl; decl = next)
3234 {
3235 /* We shouldn't be using this function to reverse BLOCK chains; we
3236 have blocks_nreverse for that. */
3237 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
3238 next = TREE_CHAIN (decl);
3239 TREE_CHAIN (decl) = prev;
3240 prev = decl;
3241 }
3242 return prev;
3243 }
3244 \f
3245 /* Return a newly created TREE_LIST node whose
3246 purpose and value fields are PARM and VALUE. */
3247
3248 tree
3249 build_tree_list (tree parm, tree value MEM_STAT_DECL)
3250 {
3251 tree t = make_node (TREE_LIST PASS_MEM_STAT);
3252 TREE_PURPOSE (t) = parm;
3253 TREE_VALUE (t) = value;
3254 return t;
3255 }
3256
3257 /* Build a chain of TREE_LIST nodes from a vector. */
3258
3259 tree
3260 build_tree_list_vec (const vec<tree, va_gc> *vec MEM_STAT_DECL)
3261 {
3262 tree ret = NULL_TREE;
3263 tree *pp = &ret;
3264 unsigned int i;
3265 tree t;
3266 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
3267 {
3268 *pp = build_tree_list (NULL, t PASS_MEM_STAT);
3269 pp = &TREE_CHAIN (*pp);
3270 }
3271 return ret;
3272 }
3273
3274 /* Return a newly created TREE_LIST node whose
3275 purpose and value fields are PURPOSE and VALUE
3276 and whose TREE_CHAIN is CHAIN. */
3277
3278 tree
3279 tree_cons (tree purpose, tree value, tree chain MEM_STAT_DECL)
3280 {
3281 tree node;
3282
3283 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
3284 memset (node, 0, sizeof (struct tree_common));
3285
3286 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
3287
3288 TREE_SET_CODE (node, TREE_LIST);
3289 TREE_CHAIN (node) = chain;
3290 TREE_PURPOSE (node) = purpose;
3291 TREE_VALUE (node) = value;
3292 return node;
3293 }
3294
3295 /* Return the values of the elements of a CONSTRUCTOR as a vector of
3296 trees. */
3297
3298 vec<tree, va_gc> *
3299 ctor_to_vec (tree ctor)
3300 {
3301 vec<tree, va_gc> *vec;
3302 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
3303 unsigned int ix;
3304 tree val;
3305
3306 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
3307 vec->quick_push (val);
3308
3309 return vec;
3310 }
3311 \f
3312 /* Return the size nominally occupied by an object of type TYPE
3313 when it resides in memory. The value is measured in units of bytes,
3314 and its data type is that normally used for type sizes
3315 (which is the first type created by make_signed_type or
3316 make_unsigned_type). */
3317
3318 tree
3319 size_in_bytes_loc (location_t loc, const_tree type)
3320 {
3321 tree t;
3322
3323 if (type == error_mark_node)
3324 return integer_zero_node;
3325
3326 type = TYPE_MAIN_VARIANT (type);
3327 t = TYPE_SIZE_UNIT (type);
3328
3329 if (t == 0)
3330 {
3331 lang_hooks.types.incomplete_type_error (loc, NULL_TREE, type);
3332 return size_zero_node;
3333 }
3334
3335 return t;
3336 }
3337
3338 /* Return the size of TYPE (in bytes) as a wide integer
3339 or return -1 if the size can vary or is larger than an integer. */
3340
3341 HOST_WIDE_INT
3342 int_size_in_bytes (const_tree type)
3343 {
3344 tree t;
3345
3346 if (type == error_mark_node)
3347 return 0;
3348
3349 type = TYPE_MAIN_VARIANT (type);
3350 t = TYPE_SIZE_UNIT (type);
3351
3352 if (t && tree_fits_uhwi_p (t))
3353 return TREE_INT_CST_LOW (t);
3354 else
3355 return -1;
3356 }
3357
3358 /* Return the maximum size of TYPE (in bytes) as a wide integer
3359 or return -1 if the size can vary or is larger than an integer. */
3360
3361 HOST_WIDE_INT
3362 max_int_size_in_bytes (const_tree type)
3363 {
3364 HOST_WIDE_INT size = -1;
3365 tree size_tree;
3366
3367 /* If this is an array type, check for a possible MAX_SIZE attached. */
3368
3369 if (TREE_CODE (type) == ARRAY_TYPE)
3370 {
3371 size_tree = TYPE_ARRAY_MAX_SIZE (type);
3372
3373 if (size_tree && tree_fits_uhwi_p (size_tree))
3374 size = tree_to_uhwi (size_tree);
3375 }
3376
3377 /* If we still haven't been able to get a size, see if the language
3378 can compute a maximum size. */
3379
3380 if (size == -1)
3381 {
3382 size_tree = lang_hooks.types.max_size (type);
3383
3384 if (size_tree && tree_fits_uhwi_p (size_tree))
3385 size = tree_to_uhwi (size_tree);
3386 }
3387
3388 return size;
3389 }
3390 \f
3391 /* Return the bit position of FIELD, in bits from the start of the record.
3392 This is a tree of type bitsizetype. */
3393
3394 tree
3395 bit_position (const_tree field)
3396 {
3397 return bit_from_pos (DECL_FIELD_OFFSET (field),
3398 DECL_FIELD_BIT_OFFSET (field));
3399 }
3400 \f
3401 /* Return the byte position of FIELD, in bytes from the start of the record.
3402 This is a tree of type sizetype. */
3403
3404 tree
3405 byte_position (const_tree field)
3406 {
3407 return byte_from_pos (DECL_FIELD_OFFSET (field),
3408 DECL_FIELD_BIT_OFFSET (field));
3409 }
3410
3411 /* Likewise, but return as an integer. It must be representable in
3412 that way (since it could be a signed value, we don't have the
3413 option of returning -1 like int_size_in_byte can. */
3414
3415 HOST_WIDE_INT
3416 int_byte_position (const_tree field)
3417 {
3418 return tree_to_shwi (byte_position (field));
3419 }
3420 \f
3421 /* Return, as a tree node, the number of elements for TYPE (which is an
3422 ARRAY_TYPE) minus one. This counts only elements of the top array. */
3423
3424 tree
3425 array_type_nelts (const_tree type)
3426 {
3427 tree index_type, min, max;
3428
3429 /* If they did it with unspecified bounds, then we should have already
3430 given an error about it before we got here. */
3431 if (! TYPE_DOMAIN (type))
3432 return error_mark_node;
3433
3434 index_type = TYPE_DOMAIN (type);
3435 min = TYPE_MIN_VALUE (index_type);
3436 max = TYPE_MAX_VALUE (index_type);
3437
3438 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
3439 if (!max)
3440 return error_mark_node;
3441
3442 return (integer_zerop (min)
3443 ? max
3444 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3445 }
3446 \f
3447 /* If arg is static -- a reference to an object in static storage -- then
3448 return the object. This is not the same as the C meaning of `static'.
3449 If arg isn't static, return NULL. */
3450
3451 tree
3452 staticp (tree arg)
3453 {
3454 switch (TREE_CODE (arg))
3455 {
3456 case FUNCTION_DECL:
3457 /* Nested functions are static, even though taking their address will
3458 involve a trampoline as we unnest the nested function and create
3459 the trampoline on the tree level. */
3460 return arg;
3461
3462 case VAR_DECL:
3463 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3464 && ! DECL_THREAD_LOCAL_P (arg)
3465 && ! DECL_DLLIMPORT_P (arg)
3466 ? arg : NULL);
3467
3468 case CONST_DECL:
3469 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3470 ? arg : NULL);
3471
3472 case CONSTRUCTOR:
3473 return TREE_STATIC (arg) ? arg : NULL;
3474
3475 case LABEL_DECL:
3476 case STRING_CST:
3477 return arg;
3478
3479 case COMPONENT_REF:
3480 /* If the thing being referenced is not a field, then it is
3481 something language specific. */
3482 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3483
3484 /* If we are referencing a bitfield, we can't evaluate an
3485 ADDR_EXPR at compile time and so it isn't a constant. */
3486 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3487 return NULL;
3488
3489 return staticp (TREE_OPERAND (arg, 0));
3490
3491 case BIT_FIELD_REF:
3492 return NULL;
3493
3494 case INDIRECT_REF:
3495 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3496
3497 case ARRAY_REF:
3498 case ARRAY_RANGE_REF:
3499 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3500 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3501 return staticp (TREE_OPERAND (arg, 0));
3502 else
3503 return NULL;
3504
3505 case COMPOUND_LITERAL_EXPR:
3506 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3507
3508 default:
3509 return NULL;
3510 }
3511 }
3512
3513 \f
3514
3515
3516 /* Return whether OP is a DECL whose address is function-invariant. */
3517
3518 bool
3519 decl_address_invariant_p (const_tree op)
3520 {
3521 /* The conditions below are slightly less strict than the one in
3522 staticp. */
3523
3524 switch (TREE_CODE (op))
3525 {
3526 case PARM_DECL:
3527 case RESULT_DECL:
3528 case LABEL_DECL:
3529 case FUNCTION_DECL:
3530 return true;
3531
3532 case VAR_DECL:
3533 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3534 || DECL_THREAD_LOCAL_P (op)
3535 || DECL_CONTEXT (op) == current_function_decl
3536 || decl_function_context (op) == current_function_decl)
3537 return true;
3538 break;
3539
3540 case CONST_DECL:
3541 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3542 || decl_function_context (op) == current_function_decl)
3543 return true;
3544 break;
3545
3546 default:
3547 break;
3548 }
3549
3550 return false;
3551 }
3552
3553 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
3554
3555 bool
3556 decl_address_ip_invariant_p (const_tree op)
3557 {
3558 /* The conditions below are slightly less strict than the one in
3559 staticp. */
3560
3561 switch (TREE_CODE (op))
3562 {
3563 case LABEL_DECL:
3564 case FUNCTION_DECL:
3565 case STRING_CST:
3566 return true;
3567
3568 case VAR_DECL:
3569 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3570 && !DECL_DLLIMPORT_P (op))
3571 || DECL_THREAD_LOCAL_P (op))
3572 return true;
3573 break;
3574
3575 case CONST_DECL:
3576 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3577 return true;
3578 break;
3579
3580 default:
3581 break;
3582 }
3583
3584 return false;
3585 }
3586
3587
3588 /* Return true if T is function-invariant (internal function, does
3589 not handle arithmetic; that's handled in skip_simple_arithmetic and
3590 tree_invariant_p). */
3591
3592 static bool
3593 tree_invariant_p_1 (tree t)
3594 {
3595 tree op;
3596
3597 if (TREE_CONSTANT (t)
3598 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3599 return true;
3600
3601 switch (TREE_CODE (t))
3602 {
3603 case SAVE_EXPR:
3604 return true;
3605
3606 case ADDR_EXPR:
3607 op = TREE_OPERAND (t, 0);
3608 while (handled_component_p (op))
3609 {
3610 switch (TREE_CODE (op))
3611 {
3612 case ARRAY_REF:
3613 case ARRAY_RANGE_REF:
3614 if (!tree_invariant_p (TREE_OPERAND (op, 1))
3615 || TREE_OPERAND (op, 2) != NULL_TREE
3616 || TREE_OPERAND (op, 3) != NULL_TREE)
3617 return false;
3618 break;
3619
3620 case COMPONENT_REF:
3621 if (TREE_OPERAND (op, 2) != NULL_TREE)
3622 return false;
3623 break;
3624
3625 default:;
3626 }
3627 op = TREE_OPERAND (op, 0);
3628 }
3629
3630 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3631
3632 default:
3633 break;
3634 }
3635
3636 return false;
3637 }
3638
3639 /* Return true if T is function-invariant. */
3640
3641 bool
3642 tree_invariant_p (tree t)
3643 {
3644 tree inner = skip_simple_arithmetic (t);
3645 return tree_invariant_p_1 (inner);
3646 }
3647
3648 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3649 Do this to any expression which may be used in more than one place,
3650 but must be evaluated only once.
3651
3652 Normally, expand_expr would reevaluate the expression each time.
3653 Calling save_expr produces something that is evaluated and recorded
3654 the first time expand_expr is called on it. Subsequent calls to
3655 expand_expr just reuse the recorded value.
3656
3657 The call to expand_expr that generates code that actually computes
3658 the value is the first call *at compile time*. Subsequent calls
3659 *at compile time* generate code to use the saved value.
3660 This produces correct result provided that *at run time* control
3661 always flows through the insns made by the first expand_expr
3662 before reaching the other places where the save_expr was evaluated.
3663 You, the caller of save_expr, must make sure this is so.
3664
3665 Constants, and certain read-only nodes, are returned with no
3666 SAVE_EXPR because that is safe. Expressions containing placeholders
3667 are not touched; see tree.def for an explanation of what these
3668 are used for. */
3669
3670 tree
3671 save_expr (tree expr)
3672 {
3673 tree inner;
3674
3675 /* If the tree evaluates to a constant, then we don't want to hide that
3676 fact (i.e. this allows further folding, and direct checks for constants).
3677 However, a read-only object that has side effects cannot be bypassed.
3678 Since it is no problem to reevaluate literals, we just return the
3679 literal node. */
3680 inner = skip_simple_arithmetic (expr);
3681 if (TREE_CODE (inner) == ERROR_MARK)
3682 return inner;
3683
3684 if (tree_invariant_p_1 (inner))
3685 return expr;
3686
3687 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3688 it means that the size or offset of some field of an object depends on
3689 the value within another field.
3690
3691 Note that it must not be the case that EXPR contains both a PLACEHOLDER_EXPR
3692 and some variable since it would then need to be both evaluated once and
3693 evaluated more than once. Front-ends must assure this case cannot
3694 happen by surrounding any such subexpressions in their own SAVE_EXPR
3695 and forcing evaluation at the proper time. */
3696 if (contains_placeholder_p (inner))
3697 return expr;
3698
3699 expr = build1_loc (EXPR_LOCATION (expr), SAVE_EXPR, TREE_TYPE (expr), expr);
3700
3701 /* This expression might be placed ahead of a jump to ensure that the
3702 value was computed on both sides of the jump. So make sure it isn't
3703 eliminated as dead. */
3704 TREE_SIDE_EFFECTS (expr) = 1;
3705 return expr;
3706 }
3707
3708 /* Look inside EXPR into any simple arithmetic operations. Return the
3709 outermost non-arithmetic or non-invariant node. */
3710
3711 tree
3712 skip_simple_arithmetic (tree expr)
3713 {
3714 /* We don't care about whether this can be used as an lvalue in this
3715 context. */
3716 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3717 expr = TREE_OPERAND (expr, 0);
3718
3719 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3720 a constant, it will be more efficient to not make another SAVE_EXPR since
3721 it will allow better simplification and GCSE will be able to merge the
3722 computations if they actually occur. */
3723 while (true)
3724 {
3725 if (UNARY_CLASS_P (expr))
3726 expr = TREE_OPERAND (expr, 0);
3727 else if (BINARY_CLASS_P (expr))
3728 {
3729 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3730 expr = TREE_OPERAND (expr, 0);
3731 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3732 expr = TREE_OPERAND (expr, 1);
3733 else
3734 break;
3735 }
3736 else
3737 break;
3738 }
3739
3740 return expr;
3741 }
3742
3743 /* Look inside EXPR into simple arithmetic operations involving constants.
3744 Return the outermost non-arithmetic or non-constant node. */
3745
3746 tree
3747 skip_simple_constant_arithmetic (tree expr)
3748 {
3749 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3750 expr = TREE_OPERAND (expr, 0);
3751
3752 while (true)
3753 {
3754 if (UNARY_CLASS_P (expr))
3755 expr = TREE_OPERAND (expr, 0);
3756 else if (BINARY_CLASS_P (expr))
3757 {
3758 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3759 expr = TREE_OPERAND (expr, 0);
3760 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3761 expr = TREE_OPERAND (expr, 1);
3762 else
3763 break;
3764 }
3765 else
3766 break;
3767 }
3768
3769 return expr;
3770 }
3771
3772 /* Return which tree structure is used by T. */
3773
3774 enum tree_node_structure_enum
3775 tree_node_structure (const_tree t)
3776 {
3777 const enum tree_code code = TREE_CODE (t);
3778 return tree_node_structure_for_code (code);
3779 }
3780
3781 /* Set various status flags when building a CALL_EXPR object T. */
3782
3783 static void
3784 process_call_operands (tree t)
3785 {
3786 bool side_effects = TREE_SIDE_EFFECTS (t);
3787 bool read_only = false;
3788 int i = call_expr_flags (t);
3789
3790 /* Calls have side-effects, except those to const or pure functions. */
3791 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3792 side_effects = true;
3793 /* Propagate TREE_READONLY of arguments for const functions. */
3794 if (i & ECF_CONST)
3795 read_only = true;
3796
3797 if (!side_effects || read_only)
3798 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3799 {
3800 tree op = TREE_OPERAND (t, i);
3801 if (op && TREE_SIDE_EFFECTS (op))
3802 side_effects = true;
3803 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3804 read_only = false;
3805 }
3806
3807 TREE_SIDE_EFFECTS (t) = side_effects;
3808 TREE_READONLY (t) = read_only;
3809 }
3810 \f
3811 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3812 size or offset that depends on a field within a record. */
3813
3814 bool
3815 contains_placeholder_p (const_tree exp)
3816 {
3817 enum tree_code code;
3818
3819 if (!exp)
3820 return 0;
3821
3822 code = TREE_CODE (exp);
3823 if (code == PLACEHOLDER_EXPR)
3824 return 1;
3825
3826 switch (TREE_CODE_CLASS (code))
3827 {
3828 case tcc_reference:
3829 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3830 position computations since they will be converted into a
3831 WITH_RECORD_EXPR involving the reference, which will assume
3832 here will be valid. */
3833 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3834
3835 case tcc_exceptional:
3836 if (code == TREE_LIST)
3837 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3838 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3839 break;
3840
3841 case tcc_unary:
3842 case tcc_binary:
3843 case tcc_comparison:
3844 case tcc_expression:
3845 switch (code)
3846 {
3847 case COMPOUND_EXPR:
3848 /* Ignoring the first operand isn't quite right, but works best. */
3849 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3850
3851 case COND_EXPR:
3852 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3853 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3854 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3855
3856 case SAVE_EXPR:
3857 /* The save_expr function never wraps anything containing
3858 a PLACEHOLDER_EXPR. */
3859 return 0;
3860
3861 default:
3862 break;
3863 }
3864
3865 switch (TREE_CODE_LENGTH (code))
3866 {
3867 case 1:
3868 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3869 case 2:
3870 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3871 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3872 default:
3873 return 0;
3874 }
3875
3876 case tcc_vl_exp:
3877 switch (code)
3878 {
3879 case CALL_EXPR:
3880 {
3881 const_tree arg;
3882 const_call_expr_arg_iterator iter;
3883 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3884 if (CONTAINS_PLACEHOLDER_P (arg))
3885 return 1;
3886 return 0;
3887 }
3888 default:
3889 return 0;
3890 }
3891
3892 default:
3893 return 0;
3894 }
3895 return 0;
3896 }
3897
3898 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3899 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3900 field positions. */
3901
3902 static bool
3903 type_contains_placeholder_1 (const_tree type)
3904 {
3905 /* If the size contains a placeholder or the parent type (component type in
3906 the case of arrays) type involves a placeholder, this type does. */
3907 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3908 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3909 || (!POINTER_TYPE_P (type)
3910 && TREE_TYPE (type)
3911 && type_contains_placeholder_p (TREE_TYPE (type))))
3912 return true;
3913
3914 /* Now do type-specific checks. Note that the last part of the check above
3915 greatly limits what we have to do below. */
3916 switch (TREE_CODE (type))
3917 {
3918 case VOID_TYPE:
3919 case COMPLEX_TYPE:
3920 case ENUMERAL_TYPE:
3921 case BOOLEAN_TYPE:
3922 case POINTER_TYPE:
3923 case OFFSET_TYPE:
3924 case REFERENCE_TYPE:
3925 case METHOD_TYPE:
3926 case FUNCTION_TYPE:
3927 case VECTOR_TYPE:
3928 case NULLPTR_TYPE:
3929 return false;
3930
3931 case INTEGER_TYPE:
3932 case REAL_TYPE:
3933 case FIXED_POINT_TYPE:
3934 /* Here we just check the bounds. */
3935 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3936 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3937
3938 case ARRAY_TYPE:
3939 /* We have already checked the component type above, so just check
3940 the domain type. Flexible array members have a null domain. */
3941 return TYPE_DOMAIN (type) ?
3942 type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3943
3944 case RECORD_TYPE:
3945 case UNION_TYPE:
3946 case QUAL_UNION_TYPE:
3947 {
3948 tree field;
3949
3950 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3951 if (TREE_CODE (field) == FIELD_DECL
3952 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3953 || (TREE_CODE (type) == QUAL_UNION_TYPE
3954 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3955 || type_contains_placeholder_p (TREE_TYPE (field))))
3956 return true;
3957
3958 return false;
3959 }
3960
3961 default:
3962 gcc_unreachable ();
3963 }
3964 }
3965
3966 /* Wrapper around above function used to cache its result. */
3967
3968 bool
3969 type_contains_placeholder_p (tree type)
3970 {
3971 bool result;
3972
3973 /* If the contains_placeholder_bits field has been initialized,
3974 then we know the answer. */
3975 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3976 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3977
3978 /* Indicate that we've seen this type node, and the answer is false.
3979 This is what we want to return if we run into recursion via fields. */
3980 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3981
3982 /* Compute the real value. */
3983 result = type_contains_placeholder_1 (type);
3984
3985 /* Store the real value. */
3986 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3987
3988 return result;
3989 }
3990 \f
3991 /* Push tree EXP onto vector QUEUE if it is not already present. */
3992
3993 static void
3994 push_without_duplicates (tree exp, vec<tree> *queue)
3995 {
3996 unsigned int i;
3997 tree iter;
3998
3999 FOR_EACH_VEC_ELT (*queue, i, iter)
4000 if (simple_cst_equal (iter, exp) == 1)
4001 break;
4002
4003 if (!iter)
4004 queue->safe_push (exp);
4005 }
4006
4007 /* Given a tree EXP, find all occurrences of references to fields
4008 in a PLACEHOLDER_EXPR and place them in vector REFS without
4009 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
4010 we assume here that EXP contains only arithmetic expressions
4011 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
4012 argument list. */
4013
4014 void
4015 find_placeholder_in_expr (tree exp, vec<tree> *refs)
4016 {
4017 enum tree_code code = TREE_CODE (exp);
4018 tree inner;
4019 int i;
4020
4021 /* We handle TREE_LIST and COMPONENT_REF separately. */
4022 if (code == TREE_LIST)
4023 {
4024 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
4025 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
4026 }
4027 else if (code == COMPONENT_REF)
4028 {
4029 for (inner = TREE_OPERAND (exp, 0);
4030 REFERENCE_CLASS_P (inner);
4031 inner = TREE_OPERAND (inner, 0))
4032 ;
4033
4034 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
4035 push_without_duplicates (exp, refs);
4036 else
4037 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
4038 }
4039 else
4040 switch (TREE_CODE_CLASS (code))
4041 {
4042 case tcc_constant:
4043 break;
4044
4045 case tcc_declaration:
4046 /* Variables allocated to static storage can stay. */
4047 if (!TREE_STATIC (exp))
4048 push_without_duplicates (exp, refs);
4049 break;
4050
4051 case tcc_expression:
4052 /* This is the pattern built in ada/make_aligning_type. */
4053 if (code == ADDR_EXPR
4054 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
4055 {
4056 push_without_duplicates (exp, refs);
4057 break;
4058 }
4059
4060 /* Fall through. */
4061
4062 case tcc_exceptional:
4063 case tcc_unary:
4064 case tcc_binary:
4065 case tcc_comparison:
4066 case tcc_reference:
4067 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
4068 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
4069 break;
4070
4071 case tcc_vl_exp:
4072 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4073 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
4074 break;
4075
4076 default:
4077 gcc_unreachable ();
4078 }
4079 }
4080
4081 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
4082 return a tree with all occurrences of references to F in a
4083 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
4084 CONST_DECLs. Note that we assume here that EXP contains only
4085 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
4086 occurring only in their argument list. */
4087
4088 tree
4089 substitute_in_expr (tree exp, tree f, tree r)
4090 {
4091 enum tree_code code = TREE_CODE (exp);
4092 tree op0, op1, op2, op3;
4093 tree new_tree;
4094
4095 /* We handle TREE_LIST and COMPONENT_REF separately. */
4096 if (code == TREE_LIST)
4097 {
4098 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
4099 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
4100 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4101 return exp;
4102
4103 return tree_cons (TREE_PURPOSE (exp), op1, op0);
4104 }
4105 else if (code == COMPONENT_REF)
4106 {
4107 tree inner;
4108
4109 /* If this expression is getting a value from a PLACEHOLDER_EXPR
4110 and it is the right field, replace it with R. */
4111 for (inner = TREE_OPERAND (exp, 0);
4112 REFERENCE_CLASS_P (inner);
4113 inner = TREE_OPERAND (inner, 0))
4114 ;
4115
4116 /* The field. */
4117 op1 = TREE_OPERAND (exp, 1);
4118
4119 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
4120 return r;
4121
4122 /* If this expression hasn't been completed let, leave it alone. */
4123 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
4124 return exp;
4125
4126 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
4127 if (op0 == TREE_OPERAND (exp, 0))
4128 return exp;
4129
4130 new_tree
4131 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
4132 }
4133 else
4134 switch (TREE_CODE_CLASS (code))
4135 {
4136 case tcc_constant:
4137 return exp;
4138
4139 case tcc_declaration:
4140 if (exp == f)
4141 return r;
4142 else
4143 return exp;
4144
4145 case tcc_expression:
4146 if (exp == f)
4147 return r;
4148
4149 /* Fall through. */
4150
4151 case tcc_exceptional:
4152 case tcc_unary:
4153 case tcc_binary:
4154 case tcc_comparison:
4155 case tcc_reference:
4156 switch (TREE_CODE_LENGTH (code))
4157 {
4158 case 0:
4159 return exp;
4160
4161 case 1:
4162 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
4163 if (op0 == TREE_OPERAND (exp, 0))
4164 return exp;
4165
4166 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4167 break;
4168
4169 case 2:
4170 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
4171 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
4172
4173 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4174 return exp;
4175
4176 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4177 break;
4178
4179 case 3:
4180 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
4181 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
4182 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
4183
4184 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4185 && op2 == TREE_OPERAND (exp, 2))
4186 return exp;
4187
4188 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4189 break;
4190
4191 case 4:
4192 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
4193 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
4194 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
4195 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
4196
4197 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4198 && op2 == TREE_OPERAND (exp, 2)
4199 && op3 == TREE_OPERAND (exp, 3))
4200 return exp;
4201
4202 new_tree
4203 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4204 break;
4205
4206 default:
4207 gcc_unreachable ();
4208 }
4209 break;
4210
4211 case tcc_vl_exp:
4212 {
4213 int i;
4214
4215 new_tree = NULL_TREE;
4216
4217 /* If we are trying to replace F with a constant or with another
4218 instance of one of the arguments of the call, inline back
4219 functions which do nothing else than computing a value from
4220 the arguments they are passed. This makes it possible to
4221 fold partially or entirely the replacement expression. */
4222 if (code == CALL_EXPR)
4223 {
4224 bool maybe_inline = false;
4225 if (CONSTANT_CLASS_P (r))
4226 maybe_inline = true;
4227 else
4228 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
4229 if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
4230 {
4231 maybe_inline = true;
4232 break;
4233 }
4234 if (maybe_inline)
4235 {
4236 tree t = maybe_inline_call_in_expr (exp);
4237 if (t)
4238 return SUBSTITUTE_IN_EXPR (t, f, r);
4239 }
4240 }
4241
4242 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4243 {
4244 tree op = TREE_OPERAND (exp, i);
4245 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
4246 if (new_op != op)
4247 {
4248 if (!new_tree)
4249 new_tree = copy_node (exp);
4250 TREE_OPERAND (new_tree, i) = new_op;
4251 }
4252 }
4253
4254 if (new_tree)
4255 {
4256 new_tree = fold (new_tree);
4257 if (TREE_CODE (new_tree) == CALL_EXPR)
4258 process_call_operands (new_tree);
4259 }
4260 else
4261 return exp;
4262 }
4263 break;
4264
4265 default:
4266 gcc_unreachable ();
4267 }
4268
4269 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4270
4271 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4272 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4273
4274 return new_tree;
4275 }
4276
4277 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
4278 for it within OBJ, a tree that is an object or a chain of references. */
4279
4280 tree
4281 substitute_placeholder_in_expr (tree exp, tree obj)
4282 {
4283 enum tree_code code = TREE_CODE (exp);
4284 tree op0, op1, op2, op3;
4285 tree new_tree;
4286
4287 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
4288 in the chain of OBJ. */
4289 if (code == PLACEHOLDER_EXPR)
4290 {
4291 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
4292 tree elt;
4293
4294 for (elt = obj; elt != 0;
4295 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
4296 || TREE_CODE (elt) == COND_EXPR)
4297 ? TREE_OPERAND (elt, 1)
4298 : (REFERENCE_CLASS_P (elt)
4299 || UNARY_CLASS_P (elt)
4300 || BINARY_CLASS_P (elt)
4301 || VL_EXP_CLASS_P (elt)
4302 || EXPRESSION_CLASS_P (elt))
4303 ? TREE_OPERAND (elt, 0) : 0))
4304 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
4305 return elt;
4306
4307 for (elt = obj; elt != 0;
4308 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
4309 || TREE_CODE (elt) == COND_EXPR)
4310 ? TREE_OPERAND (elt, 1)
4311 : (REFERENCE_CLASS_P (elt)
4312 || UNARY_CLASS_P (elt)
4313 || BINARY_CLASS_P (elt)
4314 || VL_EXP_CLASS_P (elt)
4315 || EXPRESSION_CLASS_P (elt))
4316 ? TREE_OPERAND (elt, 0) : 0))
4317 if (POINTER_TYPE_P (TREE_TYPE (elt))
4318 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
4319 == need_type))
4320 return fold_build1 (INDIRECT_REF, need_type, elt);
4321
4322 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
4323 survives until RTL generation, there will be an error. */
4324 return exp;
4325 }
4326
4327 /* TREE_LIST is special because we need to look at TREE_VALUE
4328 and TREE_CHAIN, not TREE_OPERANDS. */
4329 else if (code == TREE_LIST)
4330 {
4331 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
4332 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
4333 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4334 return exp;
4335
4336 return tree_cons (TREE_PURPOSE (exp), op1, op0);
4337 }
4338 else
4339 switch (TREE_CODE_CLASS (code))
4340 {
4341 case tcc_constant:
4342 case tcc_declaration:
4343 return exp;
4344
4345 case tcc_exceptional:
4346 case tcc_unary:
4347 case tcc_binary:
4348 case tcc_comparison:
4349 case tcc_expression:
4350 case tcc_reference:
4351 case tcc_statement:
4352 switch (TREE_CODE_LENGTH (code))
4353 {
4354 case 0:
4355 return exp;
4356
4357 case 1:
4358 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4359 if (op0 == TREE_OPERAND (exp, 0))
4360 return exp;
4361
4362 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4363 break;
4364
4365 case 2:
4366 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4367 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4368
4369 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4370 return exp;
4371
4372 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4373 break;
4374
4375 case 3:
4376 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4377 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4378 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4379
4380 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4381 && op2 == TREE_OPERAND (exp, 2))
4382 return exp;
4383
4384 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4385 break;
4386
4387 case 4:
4388 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4389 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4390 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4391 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4392
4393 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4394 && op2 == TREE_OPERAND (exp, 2)
4395 && op3 == TREE_OPERAND (exp, 3))
4396 return exp;
4397
4398 new_tree
4399 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4400 break;
4401
4402 default:
4403 gcc_unreachable ();
4404 }
4405 break;
4406
4407 case tcc_vl_exp:
4408 {
4409 int i;
4410
4411 new_tree = NULL_TREE;
4412
4413 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4414 {
4415 tree op = TREE_OPERAND (exp, i);
4416 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4417 if (new_op != op)
4418 {
4419 if (!new_tree)
4420 new_tree = copy_node (exp);
4421 TREE_OPERAND (new_tree, i) = new_op;
4422 }
4423 }
4424
4425 if (new_tree)
4426 {
4427 new_tree = fold (new_tree);
4428 if (TREE_CODE (new_tree) == CALL_EXPR)
4429 process_call_operands (new_tree);
4430 }
4431 else
4432 return exp;
4433 }
4434 break;
4435
4436 default:
4437 gcc_unreachable ();
4438 }
4439
4440 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4441
4442 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4443 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4444
4445 return new_tree;
4446 }
4447 \f
4448
4449 /* Subroutine of stabilize_reference; this is called for subtrees of
4450 references. Any expression with side-effects must be put in a SAVE_EXPR
4451 to ensure that it is only evaluated once.
4452
4453 We don't put SAVE_EXPR nodes around everything, because assigning very
4454 simple expressions to temporaries causes us to miss good opportunities
4455 for optimizations. Among other things, the opportunity to fold in the
4456 addition of a constant into an addressing mode often gets lost, e.g.
4457 "y[i+1] += x;". In general, we take the approach that we should not make
4458 an assignment unless we are forced into it - i.e., that any non-side effect
4459 operator should be allowed, and that cse should take care of coalescing
4460 multiple utterances of the same expression should that prove fruitful. */
4461
4462 static tree
4463 stabilize_reference_1 (tree e)
4464 {
4465 tree result;
4466 enum tree_code code = TREE_CODE (e);
4467
4468 /* We cannot ignore const expressions because it might be a reference
4469 to a const array but whose index contains side-effects. But we can
4470 ignore things that are actual constant or that already have been
4471 handled by this function. */
4472
4473 if (tree_invariant_p (e))
4474 return e;
4475
4476 switch (TREE_CODE_CLASS (code))
4477 {
4478 case tcc_exceptional:
4479 /* Always wrap STATEMENT_LIST into SAVE_EXPR, even if it doesn't
4480 have side-effects. */
4481 if (code == STATEMENT_LIST)
4482 return save_expr (e);
4483 /* FALLTHRU */
4484 case tcc_type:
4485 case tcc_declaration:
4486 case tcc_comparison:
4487 case tcc_statement:
4488 case tcc_expression:
4489 case tcc_reference:
4490 case tcc_vl_exp:
4491 /* If the expression has side-effects, then encase it in a SAVE_EXPR
4492 so that it will only be evaluated once. */
4493 /* The reference (r) and comparison (<) classes could be handled as
4494 below, but it is generally faster to only evaluate them once. */
4495 if (TREE_SIDE_EFFECTS (e))
4496 return save_expr (e);
4497 return e;
4498
4499 case tcc_constant:
4500 /* Constants need no processing. In fact, we should never reach
4501 here. */
4502 return e;
4503
4504 case tcc_binary:
4505 /* Division is slow and tends to be compiled with jumps,
4506 especially the division by powers of 2 that is often
4507 found inside of an array reference. So do it just once. */
4508 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4509 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4510 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4511 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4512 return save_expr (e);
4513 /* Recursively stabilize each operand. */
4514 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4515 stabilize_reference_1 (TREE_OPERAND (e, 1)));
4516 break;
4517
4518 case tcc_unary:
4519 /* Recursively stabilize each operand. */
4520 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4521 break;
4522
4523 default:
4524 gcc_unreachable ();
4525 }
4526
4527 TREE_TYPE (result) = TREE_TYPE (e);
4528 TREE_READONLY (result) = TREE_READONLY (e);
4529 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4530 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4531
4532 return result;
4533 }
4534
4535 /* Stabilize a reference so that we can use it any number of times
4536 without causing its operands to be evaluated more than once.
4537 Returns the stabilized reference. This works by means of save_expr,
4538 so see the caveats in the comments about save_expr.
4539
4540 Also allows conversion expressions whose operands are references.
4541 Any other kind of expression is returned unchanged. */
4542
4543 tree
4544 stabilize_reference (tree ref)
4545 {
4546 tree result;
4547 enum tree_code code = TREE_CODE (ref);
4548
4549 switch (code)
4550 {
4551 case VAR_DECL:
4552 case PARM_DECL:
4553 case RESULT_DECL:
4554 /* No action is needed in this case. */
4555 return ref;
4556
4557 CASE_CONVERT:
4558 case FLOAT_EXPR:
4559 case FIX_TRUNC_EXPR:
4560 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4561 break;
4562
4563 case INDIRECT_REF:
4564 result = build_nt (INDIRECT_REF,
4565 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4566 break;
4567
4568 case COMPONENT_REF:
4569 result = build_nt (COMPONENT_REF,
4570 stabilize_reference (TREE_OPERAND (ref, 0)),
4571 TREE_OPERAND (ref, 1), NULL_TREE);
4572 break;
4573
4574 case BIT_FIELD_REF:
4575 result = build_nt (BIT_FIELD_REF,
4576 stabilize_reference (TREE_OPERAND (ref, 0)),
4577 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4578 REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4579 break;
4580
4581 case ARRAY_REF:
4582 result = build_nt (ARRAY_REF,
4583 stabilize_reference (TREE_OPERAND (ref, 0)),
4584 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4585 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4586 break;
4587
4588 case ARRAY_RANGE_REF:
4589 result = build_nt (ARRAY_RANGE_REF,
4590 stabilize_reference (TREE_OPERAND (ref, 0)),
4591 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4592 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4593 break;
4594
4595 case COMPOUND_EXPR:
4596 /* We cannot wrap the first expression in a SAVE_EXPR, as then
4597 it wouldn't be ignored. This matters when dealing with
4598 volatiles. */
4599 return stabilize_reference_1 (ref);
4600
4601 /* If arg isn't a kind of lvalue we recognize, make no change.
4602 Caller should recognize the error for an invalid lvalue. */
4603 default:
4604 return ref;
4605
4606 case ERROR_MARK:
4607 return error_mark_node;
4608 }
4609
4610 TREE_TYPE (result) = TREE_TYPE (ref);
4611 TREE_READONLY (result) = TREE_READONLY (ref);
4612 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4613 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4614
4615 return result;
4616 }
4617 \f
4618 /* Low-level constructors for expressions. */
4619
4620 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
4621 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
4622
4623 void
4624 recompute_tree_invariant_for_addr_expr (tree t)
4625 {
4626 tree node;
4627 bool tc = true, se = false;
4628
4629 gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4630
4631 /* We started out assuming this address is both invariant and constant, but
4632 does not have side effects. Now go down any handled components and see if
4633 any of them involve offsets that are either non-constant or non-invariant.
4634 Also check for side-effects.
4635
4636 ??? Note that this code makes no attempt to deal with the case where
4637 taking the address of something causes a copy due to misalignment. */
4638
4639 #define UPDATE_FLAGS(NODE) \
4640 do { tree _node = (NODE); \
4641 if (_node && !TREE_CONSTANT (_node)) tc = false; \
4642 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4643
4644 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4645 node = TREE_OPERAND (node, 0))
4646 {
4647 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4648 array reference (probably made temporarily by the G++ front end),
4649 so ignore all the operands. */
4650 if ((TREE_CODE (node) == ARRAY_REF
4651 || TREE_CODE (node) == ARRAY_RANGE_REF)
4652 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4653 {
4654 UPDATE_FLAGS (TREE_OPERAND (node, 1));
4655 if (TREE_OPERAND (node, 2))
4656 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4657 if (TREE_OPERAND (node, 3))
4658 UPDATE_FLAGS (TREE_OPERAND (node, 3));
4659 }
4660 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4661 FIELD_DECL, apparently. The G++ front end can put something else
4662 there, at least temporarily. */
4663 else if (TREE_CODE (node) == COMPONENT_REF
4664 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4665 {
4666 if (TREE_OPERAND (node, 2))
4667 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4668 }
4669 }
4670
4671 node = lang_hooks.expr_to_decl (node, &tc, &se);
4672
4673 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4674 the address, since &(*a)->b is a form of addition. If it's a constant, the
4675 address is constant too. If it's a decl, its address is constant if the
4676 decl is static. Everything else is not constant and, furthermore,
4677 taking the address of a volatile variable is not volatile. */
4678 if (TREE_CODE (node) == INDIRECT_REF
4679 || TREE_CODE (node) == MEM_REF)
4680 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4681 else if (CONSTANT_CLASS_P (node))
4682 ;
4683 else if (DECL_P (node))
4684 tc &= (staticp (node) != NULL_TREE);
4685 else
4686 {
4687 tc = false;
4688 se |= TREE_SIDE_EFFECTS (node);
4689 }
4690
4691
4692 TREE_CONSTANT (t) = tc;
4693 TREE_SIDE_EFFECTS (t) = se;
4694 #undef UPDATE_FLAGS
4695 }
4696
4697 /* Build an expression of code CODE, data type TYPE, and operands as
4698 specified. Expressions and reference nodes can be created this way.
4699 Constants, decls, types and misc nodes cannot be.
4700
4701 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4702 enough for all extant tree codes. */
4703
4704 tree
4705 build0 (enum tree_code code, tree tt MEM_STAT_DECL)
4706 {
4707 tree t;
4708
4709 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4710
4711 t = make_node (code PASS_MEM_STAT);
4712 TREE_TYPE (t) = tt;
4713
4714 return t;
4715 }
4716
4717 tree
4718 build1 (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4719 {
4720 int length = sizeof (struct tree_exp);
4721 tree t;
4722
4723 record_node_allocation_statistics (code, length);
4724
4725 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4726
4727 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4728
4729 memset (t, 0, sizeof (struct tree_common));
4730
4731 TREE_SET_CODE (t, code);
4732
4733 TREE_TYPE (t) = type;
4734 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4735 TREE_OPERAND (t, 0) = node;
4736 if (node && !TYPE_P (node))
4737 {
4738 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4739 TREE_READONLY (t) = TREE_READONLY (node);
4740 }
4741
4742 if (TREE_CODE_CLASS (code) == tcc_statement)
4743 {
4744 if (code != DEBUG_BEGIN_STMT)
4745 TREE_SIDE_EFFECTS (t) = 1;
4746 }
4747 else switch (code)
4748 {
4749 case VA_ARG_EXPR:
4750 /* All of these have side-effects, no matter what their
4751 operands are. */
4752 TREE_SIDE_EFFECTS (t) = 1;
4753 TREE_READONLY (t) = 0;
4754 break;
4755
4756 case INDIRECT_REF:
4757 /* Whether a dereference is readonly has nothing to do with whether
4758 its operand is readonly. */
4759 TREE_READONLY (t) = 0;
4760 break;
4761
4762 case ADDR_EXPR:
4763 if (node)
4764 recompute_tree_invariant_for_addr_expr (t);
4765 break;
4766
4767 default:
4768 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4769 && node && !TYPE_P (node)
4770 && TREE_CONSTANT (node))
4771 TREE_CONSTANT (t) = 1;
4772 if (TREE_CODE_CLASS (code) == tcc_reference
4773 && node && TREE_THIS_VOLATILE (node))
4774 TREE_THIS_VOLATILE (t) = 1;
4775 break;
4776 }
4777
4778 return t;
4779 }
4780
4781 #define PROCESS_ARG(N) \
4782 do { \
4783 TREE_OPERAND (t, N) = arg##N; \
4784 if (arg##N &&!TYPE_P (arg##N)) \
4785 { \
4786 if (TREE_SIDE_EFFECTS (arg##N)) \
4787 side_effects = 1; \
4788 if (!TREE_READONLY (arg##N) \
4789 && !CONSTANT_CLASS_P (arg##N)) \
4790 (void) (read_only = 0); \
4791 if (!TREE_CONSTANT (arg##N)) \
4792 (void) (constant = 0); \
4793 } \
4794 } while (0)
4795
4796 tree
4797 build2 (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4798 {
4799 bool constant, read_only, side_effects, div_by_zero;
4800 tree t;
4801
4802 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4803
4804 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4805 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4806 /* When sizetype precision doesn't match that of pointers
4807 we need to be able to build explicit extensions or truncations
4808 of the offset argument. */
4809 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4810 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4811 && TREE_CODE (arg1) == INTEGER_CST);
4812
4813 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4814 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4815 && ptrofftype_p (TREE_TYPE (arg1)));
4816
4817 t = make_node (code PASS_MEM_STAT);
4818 TREE_TYPE (t) = tt;
4819
4820 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4821 result based on those same flags for the arguments. But if the
4822 arguments aren't really even `tree' expressions, we shouldn't be trying
4823 to do this. */
4824
4825 /* Expressions without side effects may be constant if their
4826 arguments are as well. */
4827 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4828 || TREE_CODE_CLASS (code) == tcc_binary);
4829 read_only = 1;
4830 side_effects = TREE_SIDE_EFFECTS (t);
4831
4832 switch (code)
4833 {
4834 case TRUNC_DIV_EXPR:
4835 case CEIL_DIV_EXPR:
4836 case FLOOR_DIV_EXPR:
4837 case ROUND_DIV_EXPR:
4838 case EXACT_DIV_EXPR:
4839 case CEIL_MOD_EXPR:
4840 case FLOOR_MOD_EXPR:
4841 case ROUND_MOD_EXPR:
4842 case TRUNC_MOD_EXPR:
4843 div_by_zero = integer_zerop (arg1);
4844 break;
4845 default:
4846 div_by_zero = false;
4847 }
4848
4849 PROCESS_ARG (0);
4850 PROCESS_ARG (1);
4851
4852 TREE_SIDE_EFFECTS (t) = side_effects;
4853 if (code == MEM_REF)
4854 {
4855 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4856 {
4857 tree o = TREE_OPERAND (arg0, 0);
4858 TREE_READONLY (t) = TREE_READONLY (o);
4859 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4860 }
4861 }
4862 else
4863 {
4864 TREE_READONLY (t) = read_only;
4865 /* Don't mark X / 0 as constant. */
4866 TREE_CONSTANT (t) = constant && !div_by_zero;
4867 TREE_THIS_VOLATILE (t)
4868 = (TREE_CODE_CLASS (code) == tcc_reference
4869 && arg0 && TREE_THIS_VOLATILE (arg0));
4870 }
4871
4872 return t;
4873 }
4874
4875
4876 tree
4877 build3 (enum tree_code code, tree tt, tree arg0, tree arg1,
4878 tree arg2 MEM_STAT_DECL)
4879 {
4880 bool constant, read_only, side_effects;
4881 tree t;
4882
4883 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4884 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4885
4886 t = make_node (code PASS_MEM_STAT);
4887 TREE_TYPE (t) = tt;
4888
4889 read_only = 1;
4890
4891 /* As a special exception, if COND_EXPR has NULL branches, we
4892 assume that it is a gimple statement and always consider
4893 it to have side effects. */
4894 if (code == COND_EXPR
4895 && tt == void_type_node
4896 && arg1 == NULL_TREE
4897 && arg2 == NULL_TREE)
4898 side_effects = true;
4899 else
4900 side_effects = TREE_SIDE_EFFECTS (t);
4901
4902 PROCESS_ARG (0);
4903 PROCESS_ARG (1);
4904 PROCESS_ARG (2);
4905
4906 if (code == COND_EXPR)
4907 TREE_READONLY (t) = read_only;
4908
4909 TREE_SIDE_EFFECTS (t) = side_effects;
4910 TREE_THIS_VOLATILE (t)
4911 = (TREE_CODE_CLASS (code) == tcc_reference
4912 && arg0 && TREE_THIS_VOLATILE (arg0));
4913
4914 return t;
4915 }
4916
4917 tree
4918 build4 (enum tree_code code, tree tt, tree arg0, tree arg1,
4919 tree arg2, tree arg3 MEM_STAT_DECL)
4920 {
4921 bool constant, read_only, side_effects;
4922 tree t;
4923
4924 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4925
4926 t = make_node (code PASS_MEM_STAT);
4927 TREE_TYPE (t) = tt;
4928
4929 side_effects = TREE_SIDE_EFFECTS (t);
4930
4931 PROCESS_ARG (0);
4932 PROCESS_ARG (1);
4933 PROCESS_ARG (2);
4934 PROCESS_ARG (3);
4935
4936 TREE_SIDE_EFFECTS (t) = side_effects;
4937 TREE_THIS_VOLATILE (t)
4938 = (TREE_CODE_CLASS (code) == tcc_reference
4939 && arg0 && TREE_THIS_VOLATILE (arg0));
4940
4941 return t;
4942 }
4943
4944 tree
4945 build5 (enum tree_code code, tree tt, tree arg0, tree arg1,
4946 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4947 {
4948 bool constant, read_only, side_effects;
4949 tree t;
4950
4951 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4952
4953 t = make_node (code PASS_MEM_STAT);
4954 TREE_TYPE (t) = tt;
4955
4956 side_effects = TREE_SIDE_EFFECTS (t);
4957
4958 PROCESS_ARG (0);
4959 PROCESS_ARG (1);
4960 PROCESS_ARG (2);
4961 PROCESS_ARG (3);
4962 PROCESS_ARG (4);
4963
4964 TREE_SIDE_EFFECTS (t) = side_effects;
4965 if (code == TARGET_MEM_REF)
4966 {
4967 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4968 {
4969 tree o = TREE_OPERAND (arg0, 0);
4970 TREE_READONLY (t) = TREE_READONLY (o);
4971 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4972 }
4973 }
4974 else
4975 TREE_THIS_VOLATILE (t)
4976 = (TREE_CODE_CLASS (code) == tcc_reference
4977 && arg0 && TREE_THIS_VOLATILE (arg0));
4978
4979 return t;
4980 }
4981
4982 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4983 on the pointer PTR. */
4984
4985 tree
4986 build_simple_mem_ref_loc (location_t loc, tree ptr)
4987 {
4988 poly_int64 offset = 0;
4989 tree ptype = TREE_TYPE (ptr);
4990 tree tem;
4991 /* For convenience allow addresses that collapse to a simple base
4992 and offset. */
4993 if (TREE_CODE (ptr) == ADDR_EXPR
4994 && (handled_component_p (TREE_OPERAND (ptr, 0))
4995 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4996 {
4997 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4998 gcc_assert (ptr);
4999 if (TREE_CODE (ptr) == MEM_REF)
5000 {
5001 offset += mem_ref_offset (ptr).force_shwi ();
5002 ptr = TREE_OPERAND (ptr, 0);
5003 }
5004 else
5005 ptr = build_fold_addr_expr (ptr);
5006 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
5007 }
5008 tem = build2 (MEM_REF, TREE_TYPE (ptype),
5009 ptr, build_int_cst (ptype, offset));
5010 SET_EXPR_LOCATION (tem, loc);
5011 return tem;
5012 }
5013
5014 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
5015
5016 poly_offset_int
5017 mem_ref_offset (const_tree t)
5018 {
5019 return poly_offset_int::from (wi::to_poly_wide (TREE_OPERAND (t, 1)),
5020 SIGNED);
5021 }
5022
5023 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
5024 offsetted by OFFSET units. */
5025
5026 tree
5027 build_invariant_address (tree type, tree base, poly_int64 offset)
5028 {
5029 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
5030 build_fold_addr_expr (base),
5031 build_int_cst (ptr_type_node, offset));
5032 tree addr = build1 (ADDR_EXPR, type, ref);
5033 recompute_tree_invariant_for_addr_expr (addr);
5034 return addr;
5035 }
5036
5037 /* Similar except don't specify the TREE_TYPE
5038 and leave the TREE_SIDE_EFFECTS as 0.
5039 It is permissible for arguments to be null,
5040 or even garbage if their values do not matter. */
5041
5042 tree
5043 build_nt (enum tree_code code, ...)
5044 {
5045 tree t;
5046 int length;
5047 int i;
5048 va_list p;
5049
5050 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
5051
5052 va_start (p, code);
5053
5054 t = make_node (code);
5055 length = TREE_CODE_LENGTH (code);
5056
5057 for (i = 0; i < length; i++)
5058 TREE_OPERAND (t, i) = va_arg (p, tree);
5059
5060 va_end (p);
5061 return t;
5062 }
5063
5064 /* Similar to build_nt, but for creating a CALL_EXPR object with a
5065 tree vec. */
5066
5067 tree
5068 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
5069 {
5070 tree ret, t;
5071 unsigned int ix;
5072
5073 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
5074 CALL_EXPR_FN (ret) = fn;
5075 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
5076 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
5077 CALL_EXPR_ARG (ret, ix) = t;
5078 return ret;
5079 }
5080 \f
5081 /* Create a DECL_... node of code CODE, name NAME (if non-null)
5082 and data type TYPE.
5083 We do NOT enter this node in any sort of symbol table.
5084
5085 LOC is the location of the decl.
5086
5087 layout_decl is used to set up the decl's storage layout.
5088 Other slots are initialized to 0 or null pointers. */
5089
5090 tree
5091 build_decl (location_t loc, enum tree_code code, tree name,
5092 tree type MEM_STAT_DECL)
5093 {
5094 tree t;
5095
5096 t = make_node (code PASS_MEM_STAT);
5097 DECL_SOURCE_LOCATION (t) = loc;
5098
5099 /* if (type == error_mark_node)
5100 type = integer_type_node; */
5101 /* That is not done, deliberately, so that having error_mark_node
5102 as the type can suppress useless errors in the use of this variable. */
5103
5104 DECL_NAME (t) = name;
5105 TREE_TYPE (t) = type;
5106
5107 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
5108 layout_decl (t, 0);
5109
5110 return t;
5111 }
5112
5113 /* Builds and returns function declaration with NAME and TYPE. */
5114
5115 tree
5116 build_fn_decl (const char *name, tree type)
5117 {
5118 tree id = get_identifier (name);
5119 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
5120
5121 DECL_EXTERNAL (decl) = 1;
5122 TREE_PUBLIC (decl) = 1;
5123 DECL_ARTIFICIAL (decl) = 1;
5124 TREE_NOTHROW (decl) = 1;
5125
5126 return decl;
5127 }
5128
5129 vec<tree, va_gc> *all_translation_units;
5130
5131 /* Builds a new translation-unit decl with name NAME, queues it in the
5132 global list of translation-unit decls and returns it. */
5133
5134 tree
5135 build_translation_unit_decl (tree name)
5136 {
5137 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
5138 name, NULL_TREE);
5139 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
5140 vec_safe_push (all_translation_units, tu);
5141 return tu;
5142 }
5143
5144 \f
5145 /* BLOCK nodes are used to represent the structure of binding contours
5146 and declarations, once those contours have been exited and their contents
5147 compiled. This information is used for outputting debugging info. */
5148
5149 tree
5150 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
5151 {
5152 tree block = make_node (BLOCK);
5153
5154 BLOCK_VARS (block) = vars;
5155 BLOCK_SUBBLOCKS (block) = subblocks;
5156 BLOCK_SUPERCONTEXT (block) = supercontext;
5157 BLOCK_CHAIN (block) = chain;
5158 return block;
5159 }
5160
5161 \f
5162 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
5163
5164 LOC is the location to use in tree T. */
5165
5166 void
5167 protected_set_expr_location (tree t, location_t loc)
5168 {
5169 if (CAN_HAVE_LOCATION_P (t))
5170 SET_EXPR_LOCATION (t, loc);
5171 else if (t && TREE_CODE (t) == STATEMENT_LIST)
5172 {
5173 t = expr_single (t);
5174 if (t && CAN_HAVE_LOCATION_P (t))
5175 SET_EXPR_LOCATION (t, loc);
5176 }
5177 }
5178
5179 /* Like PROTECTED_SET_EXPR_LOCATION, but only do that if T has
5180 UNKNOWN_LOCATION. */
5181
5182 void
5183 protected_set_expr_location_if_unset (tree t, location_t loc)
5184 {
5185 t = expr_single (t);
5186 if (t && !EXPR_HAS_LOCATION (t))
5187 protected_set_expr_location (t, loc);
5188 }
5189
5190 /* Data used when collecting DECLs and TYPEs for language data removal. */
5191
5192 class free_lang_data_d
5193 {
5194 public:
5195 free_lang_data_d () : decls (100), types (100) {}
5196
5197 /* Worklist to avoid excessive recursion. */
5198 auto_vec<tree> worklist;
5199
5200 /* Set of traversed objects. Used to avoid duplicate visits. */
5201 hash_set<tree> pset;
5202
5203 /* Array of symbols to process with free_lang_data_in_decl. */
5204 auto_vec<tree> decls;
5205
5206 /* Array of types to process with free_lang_data_in_type. */
5207 auto_vec<tree> types;
5208 };
5209
5210
5211 /* Add type or decl T to one of the list of tree nodes that need their
5212 language data removed. The lists are held inside FLD. */
5213
5214 static void
5215 add_tree_to_fld_list (tree t, class free_lang_data_d *fld)
5216 {
5217 if (DECL_P (t))
5218 fld->decls.safe_push (t);
5219 else if (TYPE_P (t))
5220 fld->types.safe_push (t);
5221 else
5222 gcc_unreachable ();
5223 }
5224
5225 /* Push tree node T into FLD->WORKLIST. */
5226
5227 static inline void
5228 fld_worklist_push (tree t, class free_lang_data_d *fld)
5229 {
5230 if (t && !is_lang_specific (t) && !fld->pset.contains (t))
5231 fld->worklist.safe_push ((t));
5232 }
5233
5234
5235 \f
5236 /* Return simplified TYPE_NAME of TYPE. */
5237
5238 static tree
5239 fld_simplified_type_name (tree type)
5240 {
5241 if (!TYPE_NAME (type) || TREE_CODE (TYPE_NAME (type)) != TYPE_DECL)
5242 return TYPE_NAME (type);
5243 /* Drop TYPE_DECLs in TYPE_NAME in favor of the identifier in the
5244 TYPE_DECL if the type doesn't have linkage.
5245 this must match fld_ */
5246 if (type != TYPE_MAIN_VARIANT (type)
5247 || (!DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (type))
5248 && (TREE_CODE (type) != RECORD_TYPE
5249 || !TYPE_BINFO (type)
5250 || !BINFO_VTABLE (TYPE_BINFO (type)))))
5251 return DECL_NAME (TYPE_NAME (type));
5252 return TYPE_NAME (type);
5253 }
5254
5255 /* Do same comparsion as check_qualified_type skipping lang part of type
5256 and be more permissive about type names: we only care that names are
5257 same (for diagnostics) and that ODR names are the same.
5258 If INNER_TYPE is non-NULL, be sure that TREE_TYPE match it. */
5259
5260 static bool
5261 fld_type_variant_equal_p (tree t, tree v, tree inner_type)
5262 {
5263 if (TYPE_QUALS (t) != TYPE_QUALS (v)
5264 /* We want to match incomplete variants with complete types.
5265 In this case we need to ignore alignment. */
5266 || ((!RECORD_OR_UNION_TYPE_P (t) || COMPLETE_TYPE_P (v))
5267 && (TYPE_ALIGN (t) != TYPE_ALIGN (v)
5268 || TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (v)))
5269 || fld_simplified_type_name (t) != fld_simplified_type_name (v)
5270 || !attribute_list_equal (TYPE_ATTRIBUTES (t),
5271 TYPE_ATTRIBUTES (v))
5272 || (inner_type && TREE_TYPE (v) != inner_type))
5273 return false;
5274
5275 return true;
5276 }
5277
5278 /* Find variant of FIRST that match T and create new one if necessary.
5279 Set TREE_TYPE to INNER_TYPE if non-NULL. */
5280
5281 static tree
5282 fld_type_variant (tree first, tree t, class free_lang_data_d *fld,
5283 tree inner_type = NULL)
5284 {
5285 if (first == TYPE_MAIN_VARIANT (t))
5286 return t;
5287 for (tree v = first; v; v = TYPE_NEXT_VARIANT (v))
5288 if (fld_type_variant_equal_p (t, v, inner_type))
5289 return v;
5290 tree v = build_variant_type_copy (first);
5291 TYPE_READONLY (v) = TYPE_READONLY (t);
5292 TYPE_VOLATILE (v) = TYPE_VOLATILE (t);
5293 TYPE_ATOMIC (v) = TYPE_ATOMIC (t);
5294 TYPE_RESTRICT (v) = TYPE_RESTRICT (t);
5295 TYPE_ADDR_SPACE (v) = TYPE_ADDR_SPACE (t);
5296 TYPE_NAME (v) = TYPE_NAME (t);
5297 TYPE_ATTRIBUTES (v) = TYPE_ATTRIBUTES (t);
5298 TYPE_CANONICAL (v) = TYPE_CANONICAL (t);
5299 /* Variants of incomplete types should have alignment
5300 set to BITS_PER_UNIT. Do not copy the actual alignment. */
5301 if (!RECORD_OR_UNION_TYPE_P (v) || COMPLETE_TYPE_P (v))
5302 {
5303 SET_TYPE_ALIGN (v, TYPE_ALIGN (t));
5304 TYPE_USER_ALIGN (v) = TYPE_USER_ALIGN (t);
5305 }
5306 if (inner_type)
5307 TREE_TYPE (v) = inner_type;
5308 gcc_checking_assert (fld_type_variant_equal_p (t,v, inner_type));
5309 if (!fld->pset.add (v))
5310 add_tree_to_fld_list (v, fld);
5311 return v;
5312 }
5313
5314 /* Map complete types to incomplete types. */
5315
5316 static hash_map<tree, tree> *fld_incomplete_types;
5317
5318 /* Map types to simplified types. */
5319
5320 static hash_map<tree, tree> *fld_simplified_types;
5321
5322 /* Produce variant of T whose TREE_TYPE is T2. If it is main variant,
5323 use MAP to prevent duplicates. */
5324
5325 static tree
5326 fld_process_array_type (tree t, tree t2, hash_map<tree, tree> *map,
5327 class free_lang_data_d *fld)
5328 {
5329 if (TREE_TYPE (t) == t2)
5330 return t;
5331
5332 if (TYPE_MAIN_VARIANT (t) != t)
5333 {
5334 return fld_type_variant
5335 (fld_process_array_type (TYPE_MAIN_VARIANT (t),
5336 TYPE_MAIN_VARIANT (t2), map, fld),
5337 t, fld, t2);
5338 }
5339
5340 bool existed;
5341 tree &array
5342 = map->get_or_insert (t, &existed);
5343 if (!existed)
5344 {
5345 array
5346 = build_array_type_1 (t2, TYPE_DOMAIN (t), TYPE_TYPELESS_STORAGE (t),
5347 false, false);
5348 TYPE_CANONICAL (array) = TYPE_CANONICAL (t);
5349 if (!fld->pset.add (array))
5350 add_tree_to_fld_list (array, fld);
5351 }
5352 return array;
5353 }
5354
5355 /* Return CTX after removal of contexts that are not relevant */
5356
5357 static tree
5358 fld_decl_context (tree ctx)
5359 {
5360 /* Variably modified types are needed for tree_is_indexable to decide
5361 whether the type needs to go to local or global section.
5362 This code is semi-broken but for now it is easiest to keep contexts
5363 as expected. */
5364 if (ctx && TYPE_P (ctx)
5365 && !variably_modified_type_p (ctx, NULL_TREE))
5366 {
5367 while (ctx && TYPE_P (ctx))
5368 ctx = TYPE_CONTEXT (ctx);
5369 }
5370 return ctx;
5371 }
5372
5373 /* For T being aggregate type try to turn it into a incomplete variant.
5374 Return T if no simplification is possible. */
5375
5376 static tree
5377 fld_incomplete_type_of (tree t, class free_lang_data_d *fld)
5378 {
5379 if (!t)
5380 return NULL;
5381 if (POINTER_TYPE_P (t))
5382 {
5383 tree t2 = fld_incomplete_type_of (TREE_TYPE (t), fld);
5384 if (t2 != TREE_TYPE (t))
5385 {
5386 tree first;
5387 if (TREE_CODE (t) == POINTER_TYPE)
5388 first = build_pointer_type_for_mode (t2, TYPE_MODE (t),
5389 TYPE_REF_CAN_ALIAS_ALL (t));
5390 else
5391 first = build_reference_type_for_mode (t2, TYPE_MODE (t),
5392 TYPE_REF_CAN_ALIAS_ALL (t));
5393 gcc_assert (TYPE_CANONICAL (t2) != t2
5394 && TYPE_CANONICAL (t2) == TYPE_CANONICAL (TREE_TYPE (t)));
5395 if (!fld->pset.add (first))
5396 add_tree_to_fld_list (first, fld);
5397 return fld_type_variant (first, t, fld);
5398 }
5399 return t;
5400 }
5401 if (TREE_CODE (t) == ARRAY_TYPE)
5402 return fld_process_array_type (t,
5403 fld_incomplete_type_of (TREE_TYPE (t), fld),
5404 fld_incomplete_types, fld);
5405 if ((!RECORD_OR_UNION_TYPE_P (t) && TREE_CODE (t) != ENUMERAL_TYPE)
5406 || !COMPLETE_TYPE_P (t))
5407 return t;
5408 if (TYPE_MAIN_VARIANT (t) == t)
5409 {
5410 bool existed;
5411 tree &copy
5412 = fld_incomplete_types->get_or_insert (t, &existed);
5413
5414 if (!existed)
5415 {
5416 copy = build_distinct_type_copy (t);
5417
5418 /* It is possible that type was not seen by free_lang_data yet. */
5419 if (!fld->pset.add (copy))
5420 add_tree_to_fld_list (copy, fld);
5421 TYPE_SIZE (copy) = NULL;
5422 TYPE_USER_ALIGN (copy) = 0;
5423 TYPE_SIZE_UNIT (copy) = NULL;
5424 TYPE_CANONICAL (copy) = TYPE_CANONICAL (t);
5425 TREE_ADDRESSABLE (copy) = 0;
5426 if (AGGREGATE_TYPE_P (t))
5427 {
5428 SET_TYPE_MODE (copy, VOIDmode);
5429 SET_TYPE_ALIGN (copy, BITS_PER_UNIT);
5430 TYPE_TYPELESS_STORAGE (copy) = 0;
5431 TYPE_FIELDS (copy) = NULL;
5432 TYPE_BINFO (copy) = NULL;
5433 TYPE_FINAL_P (copy) = 0;
5434 TYPE_EMPTY_P (copy) = 0;
5435 }
5436 else
5437 {
5438 TYPE_VALUES (copy) = NULL;
5439 ENUM_IS_OPAQUE (copy) = 0;
5440 ENUM_IS_SCOPED (copy) = 0;
5441 }
5442
5443 /* Build copy of TYPE_DECL in TYPE_NAME if necessary.
5444 This is needed for ODR violation warnings to come out right (we
5445 want duplicate TYPE_DECLs whenever the type is duplicated because
5446 of ODR violation. Because lang data in the TYPE_DECL may not
5447 have been freed yet, rebuild it from scratch and copy relevant
5448 fields. */
5449 TYPE_NAME (copy) = fld_simplified_type_name (copy);
5450 tree name = TYPE_NAME (copy);
5451
5452 if (name && TREE_CODE (name) == TYPE_DECL)
5453 {
5454 gcc_checking_assert (TREE_TYPE (name) == t);
5455 tree name2 = build_decl (DECL_SOURCE_LOCATION (name), TYPE_DECL,
5456 DECL_NAME (name), copy);
5457 if (DECL_ASSEMBLER_NAME_SET_P (name))
5458 SET_DECL_ASSEMBLER_NAME (name2, DECL_ASSEMBLER_NAME (name));
5459 SET_DECL_ALIGN (name2, 0);
5460 DECL_CONTEXT (name2) = fld_decl_context
5461 (DECL_CONTEXT (name));
5462 TYPE_NAME (copy) = name2;
5463 }
5464 }
5465 return copy;
5466 }
5467 return (fld_type_variant
5468 (fld_incomplete_type_of (TYPE_MAIN_VARIANT (t), fld), t, fld));
5469 }
5470
5471 /* Simplify type T for scenarios where we do not need complete pointer
5472 types. */
5473
5474 static tree
5475 fld_simplified_type (tree t, class free_lang_data_d *fld)
5476 {
5477 if (!t)
5478 return t;
5479 if (POINTER_TYPE_P (t))
5480 return fld_incomplete_type_of (t, fld);
5481 /* FIXME: This triggers verification error, see PR88140. */
5482 if (TREE_CODE (t) == ARRAY_TYPE && 0)
5483 return fld_process_array_type (t, fld_simplified_type (TREE_TYPE (t), fld),
5484 fld_simplified_types, fld);
5485 return t;
5486 }
5487
5488 /* Reset the expression *EXPR_P, a size or position.
5489
5490 ??? We could reset all non-constant sizes or positions. But it's cheap
5491 enough to not do so and refrain from adding workarounds to dwarf2out.c.
5492
5493 We need to reset self-referential sizes or positions because they cannot
5494 be gimplified and thus can contain a CALL_EXPR after the gimplification
5495 is finished, which will run afoul of LTO streaming. And they need to be
5496 reset to something essentially dummy but not constant, so as to preserve
5497 the properties of the object they are attached to. */
5498
5499 static inline void
5500 free_lang_data_in_one_sizepos (tree *expr_p)
5501 {
5502 tree expr = *expr_p;
5503 if (CONTAINS_PLACEHOLDER_P (expr))
5504 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
5505 }
5506
5507
5508 /* Reset all the fields in a binfo node BINFO. We only keep
5509 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
5510
5511 static void
5512 free_lang_data_in_binfo (tree binfo)
5513 {
5514 unsigned i;
5515 tree t;
5516
5517 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
5518
5519 BINFO_VIRTUALS (binfo) = NULL_TREE;
5520 BINFO_BASE_ACCESSES (binfo) = NULL;
5521 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
5522 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
5523 BINFO_VPTR_FIELD (binfo) = NULL_TREE;
5524 TREE_PUBLIC (binfo) = 0;
5525
5526 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
5527 free_lang_data_in_binfo (t);
5528 }
5529
5530
5531 /* Reset all language specific information still present in TYPE. */
5532
5533 static void
5534 free_lang_data_in_type (tree type, class free_lang_data_d *fld)
5535 {
5536 gcc_assert (TYPE_P (type));
5537
5538 /* Give the FE a chance to remove its own data first. */
5539 lang_hooks.free_lang_data (type);
5540
5541 TREE_LANG_FLAG_0 (type) = 0;
5542 TREE_LANG_FLAG_1 (type) = 0;
5543 TREE_LANG_FLAG_2 (type) = 0;
5544 TREE_LANG_FLAG_3 (type) = 0;
5545 TREE_LANG_FLAG_4 (type) = 0;
5546 TREE_LANG_FLAG_5 (type) = 0;
5547 TREE_LANG_FLAG_6 (type) = 0;
5548
5549 TYPE_NEEDS_CONSTRUCTING (type) = 0;
5550
5551 /* Purge non-marked variants from the variants chain, so that they
5552 don't reappear in the IL after free_lang_data. */
5553 while (TYPE_NEXT_VARIANT (type)
5554 && !fld->pset.contains (TYPE_NEXT_VARIANT (type)))
5555 {
5556 tree t = TYPE_NEXT_VARIANT (type);
5557 TYPE_NEXT_VARIANT (type) = TYPE_NEXT_VARIANT (t);
5558 /* Turn the removed types into distinct types. */
5559 TYPE_MAIN_VARIANT (t) = t;
5560 TYPE_NEXT_VARIANT (t) = NULL_TREE;
5561 }
5562
5563 if (TREE_CODE (type) == FUNCTION_TYPE)
5564 {
5565 TREE_TYPE (type) = fld_simplified_type (TREE_TYPE (type), fld);
5566 /* Remove the const and volatile qualifiers from arguments. The
5567 C++ front end removes them, but the C front end does not,
5568 leading to false ODR violation errors when merging two
5569 instances of the same function signature compiled by
5570 different front ends. */
5571 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5572 {
5573 TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld);
5574 tree arg_type = TREE_VALUE (p);
5575
5576 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5577 {
5578 int quals = TYPE_QUALS (arg_type)
5579 & ~TYPE_QUAL_CONST
5580 & ~TYPE_QUAL_VOLATILE;
5581 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5582 if (!fld->pset.add (TREE_VALUE (p)))
5583 free_lang_data_in_type (TREE_VALUE (p), fld);
5584 }
5585 /* C++ FE uses TREE_PURPOSE to store initial values. */
5586 TREE_PURPOSE (p) = NULL;
5587 }
5588 }
5589 else if (TREE_CODE (type) == METHOD_TYPE)
5590 {
5591 TREE_TYPE (type) = fld_simplified_type (TREE_TYPE (type), fld);
5592 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5593 {
5594 /* C++ FE uses TREE_PURPOSE to store initial values. */
5595 TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld);
5596 TREE_PURPOSE (p) = NULL;
5597 }
5598 }
5599 else if (RECORD_OR_UNION_TYPE_P (type))
5600 {
5601 /* Remove members that are not FIELD_DECLs from the field list
5602 of an aggregate. These occur in C++. */
5603 for (tree *prev = &TYPE_FIELDS (type), member; (member = *prev);)
5604 if (TREE_CODE (member) == FIELD_DECL)
5605 prev = &DECL_CHAIN (member);
5606 else
5607 *prev = DECL_CHAIN (member);
5608
5609 TYPE_VFIELD (type) = NULL_TREE;
5610
5611 if (TYPE_BINFO (type))
5612 {
5613 free_lang_data_in_binfo (TYPE_BINFO (type));
5614 /* We need to preserve link to bases and virtual table for all
5615 polymorphic types to make devirtualization machinery working. */
5616 if (!BINFO_VTABLE (TYPE_BINFO (type)))
5617 TYPE_BINFO (type) = NULL;
5618 }
5619 }
5620 else if (INTEGRAL_TYPE_P (type)
5621 || SCALAR_FLOAT_TYPE_P (type)
5622 || FIXED_POINT_TYPE_P (type))
5623 {
5624 if (TREE_CODE (type) == ENUMERAL_TYPE)
5625 {
5626 ENUM_IS_OPAQUE (type) = 0;
5627 ENUM_IS_SCOPED (type) = 0;
5628 /* Type values are used only for C++ ODR checking. Drop them
5629 for all type variants and non-ODR types.
5630 For ODR types the data is freed in free_odr_warning_data. */
5631 if (!TYPE_VALUES (type))
5632 ;
5633 else if (TYPE_MAIN_VARIANT (type) != type
5634 || !type_with_linkage_p (type)
5635 || type_in_anonymous_namespace_p (type))
5636 TYPE_VALUES (type) = NULL;
5637 else
5638 register_odr_enum (type);
5639 }
5640 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5641 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5642 }
5643
5644 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5645
5646 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5647 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5648
5649 if (TYPE_CONTEXT (type)
5650 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5651 {
5652 tree ctx = TYPE_CONTEXT (type);
5653 do
5654 {
5655 ctx = BLOCK_SUPERCONTEXT (ctx);
5656 }
5657 while (ctx && TREE_CODE (ctx) == BLOCK);
5658 TYPE_CONTEXT (type) = ctx;
5659 }
5660
5661 TYPE_STUB_DECL (type) = NULL;
5662 TYPE_NAME (type) = fld_simplified_type_name (type);
5663 }
5664
5665
5666 /* Return true if DECL may need an assembler name to be set. */
5667
5668 static inline bool
5669 need_assembler_name_p (tree decl)
5670 {
5671 /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5672 Rule merging. This makes type_odr_p to return true on those types during
5673 LTO and by comparing the mangled name, we can say what types are intended
5674 to be equivalent across compilation unit.
5675
5676 We do not store names of type_in_anonymous_namespace_p.
5677
5678 Record, union and enumeration type have linkage that allows use
5679 to check type_in_anonymous_namespace_p. We do not mangle compound types
5680 that always can be compared structurally.
5681
5682 Similarly for builtin types, we compare properties of their main variant.
5683 A special case are integer types where mangling do make differences
5684 between char/signed char/unsigned char etc. Storing name for these makes
5685 e.g. -fno-signed-char/-fsigned-char mismatches to be handled well.
5686 See cp/mangle.c:write_builtin_type for details. */
5687
5688 if (TREE_CODE (decl) == TYPE_DECL)
5689 {
5690 if (DECL_NAME (decl)
5691 && decl == TYPE_NAME (TREE_TYPE (decl))
5692 && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
5693 && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5694 && ((TREE_CODE (TREE_TYPE (decl)) != RECORD_TYPE
5695 && TREE_CODE (TREE_TYPE (decl)) != UNION_TYPE)
5696 || TYPE_CXX_ODR_P (TREE_TYPE (decl)))
5697 && (type_with_linkage_p (TREE_TYPE (decl))
5698 || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5699 && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5700 return !DECL_ASSEMBLER_NAME_SET_P (decl);
5701 return false;
5702 }
5703 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
5704 if (!VAR_OR_FUNCTION_DECL_P (decl))
5705 return false;
5706
5707 /* If DECL already has its assembler name set, it does not need a
5708 new one. */
5709 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5710 || DECL_ASSEMBLER_NAME_SET_P (decl))
5711 return false;
5712
5713 /* Abstract decls do not need an assembler name. */
5714 if (DECL_ABSTRACT_P (decl))
5715 return false;
5716
5717 /* For VAR_DECLs, only static, public and external symbols need an
5718 assembler name. */
5719 if (VAR_P (decl)
5720 && !TREE_STATIC (decl)
5721 && !TREE_PUBLIC (decl)
5722 && !DECL_EXTERNAL (decl))
5723 return false;
5724
5725 if (TREE_CODE (decl) == FUNCTION_DECL)
5726 {
5727 /* Do not set assembler name on builtins. Allow RTL expansion to
5728 decide whether to expand inline or via a regular call. */
5729 if (fndecl_built_in_p (decl)
5730 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5731 return false;
5732
5733 /* Functions represented in the callgraph need an assembler name. */
5734 if (cgraph_node::get (decl) != NULL)
5735 return true;
5736
5737 /* Unused and not public functions don't need an assembler name. */
5738 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5739 return false;
5740 }
5741
5742 return true;
5743 }
5744
5745
5746 /* Reset all language specific information still present in symbol
5747 DECL. */
5748
5749 static void
5750 free_lang_data_in_decl (tree decl, class free_lang_data_d *fld)
5751 {
5752 gcc_assert (DECL_P (decl));
5753
5754 /* Give the FE a chance to remove its own data first. */
5755 lang_hooks.free_lang_data (decl);
5756
5757 TREE_LANG_FLAG_0 (decl) = 0;
5758 TREE_LANG_FLAG_1 (decl) = 0;
5759 TREE_LANG_FLAG_2 (decl) = 0;
5760 TREE_LANG_FLAG_3 (decl) = 0;
5761 TREE_LANG_FLAG_4 (decl) = 0;
5762 TREE_LANG_FLAG_5 (decl) = 0;
5763 TREE_LANG_FLAG_6 (decl) = 0;
5764
5765 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5766 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5767 if (TREE_CODE (decl) == FIELD_DECL)
5768 {
5769 DECL_FCONTEXT (decl) = NULL;
5770 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5771 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5772 DECL_QUALIFIER (decl) = NULL_TREE;
5773 }
5774
5775 if (TREE_CODE (decl) == FUNCTION_DECL)
5776 {
5777 struct cgraph_node *node;
5778 /* Frontends do not set TREE_ADDRESSABLE on public variables even though
5779 the address may be taken in other unit, so this flag has no practical
5780 use for middle-end.
5781
5782 It would make more sense if frontends set TREE_ADDRESSABLE to 0 only
5783 for public objects that indeed cannot be adressed, but it is not
5784 the case. Set the flag to true so we do not get merge failures for
5785 i.e. virtual tables between units that take address of it and
5786 units that don't. */
5787 if (TREE_PUBLIC (decl))
5788 TREE_ADDRESSABLE (decl) = true;
5789 TREE_TYPE (decl) = fld_simplified_type (TREE_TYPE (decl), fld);
5790 if (!(node = cgraph_node::get (decl))
5791 || (!node->definition && !node->clones))
5792 {
5793 if (node)
5794 node->release_body ();
5795 else
5796 {
5797 release_function_body (decl);
5798 DECL_ARGUMENTS (decl) = NULL;
5799 DECL_RESULT (decl) = NULL;
5800 DECL_INITIAL (decl) = error_mark_node;
5801 }
5802 }
5803 if (gimple_has_body_p (decl) || (node && node->thunk))
5804 {
5805 tree t;
5806
5807 /* If DECL has a gimple body, then the context for its
5808 arguments must be DECL. Otherwise, it doesn't really
5809 matter, as we will not be emitting any code for DECL. In
5810 general, there may be other instances of DECL created by
5811 the front end and since PARM_DECLs are generally shared,
5812 their DECL_CONTEXT changes as the replicas of DECL are
5813 created. The only time where DECL_CONTEXT is important
5814 is for the FUNCTION_DECLs that have a gimple body (since
5815 the PARM_DECL will be used in the function's body). */
5816 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5817 DECL_CONTEXT (t) = decl;
5818 if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5819 DECL_FUNCTION_SPECIFIC_TARGET (decl)
5820 = target_option_default_node;
5821 if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5822 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5823 = optimization_default_node;
5824 }
5825
5826 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5827 At this point, it is not needed anymore. */
5828 DECL_SAVED_TREE (decl) = NULL_TREE;
5829
5830 /* Clear the abstract origin if it refers to a method.
5831 Otherwise dwarf2out.c will ICE as we splice functions out of
5832 TYPE_FIELDS and thus the origin will not be output
5833 correctly. */
5834 if (DECL_ABSTRACT_ORIGIN (decl)
5835 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5836 && RECORD_OR_UNION_TYPE_P
5837 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5838 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5839
5840 DECL_VINDEX (decl) = NULL_TREE;
5841 }
5842 else if (VAR_P (decl))
5843 {
5844 /* See comment above why we set the flag for functions. */
5845 if (TREE_PUBLIC (decl))
5846 TREE_ADDRESSABLE (decl) = true;
5847 if ((DECL_EXTERNAL (decl)
5848 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5849 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5850 DECL_INITIAL (decl) = NULL_TREE;
5851 }
5852 else if (TREE_CODE (decl) == TYPE_DECL)
5853 {
5854 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5855 DECL_VISIBILITY_SPECIFIED (decl) = 0;
5856 TREE_PUBLIC (decl) = 0;
5857 TREE_PRIVATE (decl) = 0;
5858 DECL_ARTIFICIAL (decl) = 0;
5859 TYPE_DECL_SUPPRESS_DEBUG (decl) = 0;
5860 DECL_INITIAL (decl) = NULL_TREE;
5861 DECL_ORIGINAL_TYPE (decl) = NULL_TREE;
5862 DECL_MODE (decl) = VOIDmode;
5863 SET_DECL_ALIGN (decl, 0);
5864 /* TREE_TYPE is cleared at WPA time in free_odr_warning_data. */
5865 }
5866 else if (TREE_CODE (decl) == FIELD_DECL)
5867 {
5868 TREE_TYPE (decl) = fld_simplified_type (TREE_TYPE (decl), fld);
5869 DECL_INITIAL (decl) = NULL_TREE;
5870 }
5871 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5872 && DECL_INITIAL (decl)
5873 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5874 {
5875 /* Strip builtins from the translation-unit BLOCK. We still have targets
5876 without builtin_decl_explicit support and also builtins are shared
5877 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5878 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5879 while (*nextp)
5880 {
5881 tree var = *nextp;
5882 if (TREE_CODE (var) == FUNCTION_DECL
5883 && fndecl_built_in_p (var))
5884 *nextp = TREE_CHAIN (var);
5885 else
5886 nextp = &TREE_CHAIN (var);
5887 }
5888 }
5889 /* We need to keep field decls associated with their trees. Otherwise tree
5890 merging may merge some fileds and keep others disjoint wich in turn will
5891 not do well with TREE_CHAIN pointers linking them.
5892
5893 Also do not drop containing types for virtual methods and tables because
5894 these are needed by devirtualization.
5895 C++ destructors are special because C++ frontends sometimes produces
5896 virtual destructor as an alias of non-virtual destructor. In
5897 devirutalization code we always walk through aliases and we need
5898 context to be preserved too. See PR89335 */
5899 if (TREE_CODE (decl) != FIELD_DECL
5900 && ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
5901 || (!DECL_VIRTUAL_P (decl)
5902 && (TREE_CODE (decl) != FUNCTION_DECL
5903 || !DECL_CXX_DESTRUCTOR_P (decl)))))
5904 DECL_CONTEXT (decl) = fld_decl_context (DECL_CONTEXT (decl));
5905 }
5906
5907
5908 /* Operand callback helper for free_lang_data_in_node. *TP is the
5909 subtree operand being considered. */
5910
5911 static tree
5912 find_decls_types_r (tree *tp, int *ws, void *data)
5913 {
5914 tree t = *tp;
5915 class free_lang_data_d *fld = (class free_lang_data_d *) data;
5916
5917 if (TREE_CODE (t) == TREE_LIST)
5918 return NULL_TREE;
5919
5920 /* Language specific nodes will be removed, so there is no need
5921 to gather anything under them. */
5922 if (is_lang_specific (t))
5923 {
5924 *ws = 0;
5925 return NULL_TREE;
5926 }
5927
5928 if (DECL_P (t))
5929 {
5930 /* Note that walk_tree does not traverse every possible field in
5931 decls, so we have to do our own traversals here. */
5932 add_tree_to_fld_list (t, fld);
5933
5934 fld_worklist_push (DECL_NAME (t), fld);
5935 fld_worklist_push (DECL_CONTEXT (t), fld);
5936 fld_worklist_push (DECL_SIZE (t), fld);
5937 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5938
5939 /* We are going to remove everything under DECL_INITIAL for
5940 TYPE_DECLs. No point walking them. */
5941 if (TREE_CODE (t) != TYPE_DECL)
5942 fld_worklist_push (DECL_INITIAL (t), fld);
5943
5944 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5945 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5946
5947 if (TREE_CODE (t) == FUNCTION_DECL)
5948 {
5949 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5950 fld_worklist_push (DECL_RESULT (t), fld);
5951 }
5952 else if (TREE_CODE (t) == FIELD_DECL)
5953 {
5954 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5955 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5956 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5957 fld_worklist_push (DECL_FCONTEXT (t), fld);
5958 }
5959
5960 if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
5961 && DECL_HAS_VALUE_EXPR_P (t))
5962 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5963
5964 if (TREE_CODE (t) != FIELD_DECL
5965 && TREE_CODE (t) != TYPE_DECL)
5966 fld_worklist_push (TREE_CHAIN (t), fld);
5967 *ws = 0;
5968 }
5969 else if (TYPE_P (t))
5970 {
5971 /* Note that walk_tree does not traverse every possible field in
5972 types, so we have to do our own traversals here. */
5973 add_tree_to_fld_list (t, fld);
5974
5975 if (!RECORD_OR_UNION_TYPE_P (t))
5976 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5977 fld_worklist_push (TYPE_SIZE (t), fld);
5978 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5979 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5980 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5981 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5982 fld_worklist_push (TYPE_NAME (t), fld);
5983 /* While we do not stream TYPE_POINTER_TO and TYPE_REFERENCE_TO
5984 lists, we may look types up in these lists and use them while
5985 optimizing the function body. Thus we need to free lang data
5986 in them. */
5987 if (TREE_CODE (t) == POINTER_TYPE)
5988 fld_worklist_push (TYPE_NEXT_PTR_TO (t), fld);
5989 if (TREE_CODE (t) == REFERENCE_TYPE)
5990 fld_worklist_push (TYPE_NEXT_REF_TO (t), fld);
5991 if (!POINTER_TYPE_P (t))
5992 fld_worklist_push (TYPE_MIN_VALUE_RAW (t), fld);
5993 /* TYPE_MAX_VALUE_RAW is TYPE_BINFO for record types. */
5994 if (!RECORD_OR_UNION_TYPE_P (t))
5995 fld_worklist_push (TYPE_MAX_VALUE_RAW (t), fld);
5996 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5997 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5998 do not and want not to reach unused variants this way. */
5999 if (TYPE_CONTEXT (t))
6000 {
6001 tree ctx = TYPE_CONTEXT (t);
6002 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
6003 So push that instead. */
6004 while (ctx && TREE_CODE (ctx) == BLOCK)
6005 ctx = BLOCK_SUPERCONTEXT (ctx);
6006 fld_worklist_push (ctx, fld);
6007 }
6008 fld_worklist_push (TYPE_CANONICAL (t), fld);
6009
6010 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
6011 {
6012 unsigned i;
6013 tree tem;
6014 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
6015 fld_worklist_push (TREE_TYPE (tem), fld);
6016 fld_worklist_push (BINFO_TYPE (TYPE_BINFO (t)), fld);
6017 fld_worklist_push (BINFO_VTABLE (TYPE_BINFO (t)), fld);
6018 }
6019 if (RECORD_OR_UNION_TYPE_P (t))
6020 {
6021 tree tem;
6022 /* Push all TYPE_FIELDS - there can be interleaving interesting
6023 and non-interesting things. */
6024 tem = TYPE_FIELDS (t);
6025 while (tem)
6026 {
6027 if (TREE_CODE (tem) == FIELD_DECL)
6028 fld_worklist_push (tem, fld);
6029 tem = TREE_CHAIN (tem);
6030 }
6031 }
6032 if (FUNC_OR_METHOD_TYPE_P (t))
6033 fld_worklist_push (TYPE_METHOD_BASETYPE (t), fld);
6034
6035 fld_worklist_push (TYPE_STUB_DECL (t), fld);
6036 *ws = 0;
6037 }
6038 else if (TREE_CODE (t) == BLOCK)
6039 {
6040 for (tree *tem = &BLOCK_VARS (t); *tem; )
6041 {
6042 if (TREE_CODE (*tem) != LABEL_DECL
6043 && (TREE_CODE (*tem) != VAR_DECL
6044 || !auto_var_in_fn_p (*tem, DECL_CONTEXT (*tem))))
6045 {
6046 gcc_assert (TREE_CODE (*tem) != RESULT_DECL
6047 && TREE_CODE (*tem) != PARM_DECL);
6048 *tem = TREE_CHAIN (*tem);
6049 }
6050 else
6051 {
6052 fld_worklist_push (*tem, fld);
6053 tem = &TREE_CHAIN (*tem);
6054 }
6055 }
6056 for (tree tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
6057 fld_worklist_push (tem, fld);
6058 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
6059 }
6060
6061 if (TREE_CODE (t) != IDENTIFIER_NODE
6062 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
6063 fld_worklist_push (TREE_TYPE (t), fld);
6064
6065 return NULL_TREE;
6066 }
6067
6068
6069 /* Find decls and types in T. */
6070
6071 static void
6072 find_decls_types (tree t, class free_lang_data_d *fld)
6073 {
6074 while (1)
6075 {
6076 if (!fld->pset.contains (t))
6077 walk_tree (&t, find_decls_types_r, fld, &fld->pset);
6078 if (fld->worklist.is_empty ())
6079 break;
6080 t = fld->worklist.pop ();
6081 }
6082 }
6083
6084 /* Translate all the types in LIST with the corresponding runtime
6085 types. */
6086
6087 static tree
6088 get_eh_types_for_runtime (tree list)
6089 {
6090 tree head, prev;
6091
6092 if (list == NULL_TREE)
6093 return NULL_TREE;
6094
6095 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
6096 prev = head;
6097 list = TREE_CHAIN (list);
6098 while (list)
6099 {
6100 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
6101 TREE_CHAIN (prev) = n;
6102 prev = TREE_CHAIN (prev);
6103 list = TREE_CHAIN (list);
6104 }
6105
6106 return head;
6107 }
6108
6109
6110 /* Find decls and types referenced in EH region R and store them in
6111 FLD->DECLS and FLD->TYPES. */
6112
6113 static void
6114 find_decls_types_in_eh_region (eh_region r, class free_lang_data_d *fld)
6115 {
6116 switch (r->type)
6117 {
6118 case ERT_CLEANUP:
6119 break;
6120
6121 case ERT_TRY:
6122 {
6123 eh_catch c;
6124
6125 /* The types referenced in each catch must first be changed to the
6126 EH types used at runtime. This removes references to FE types
6127 in the region. */
6128 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
6129 {
6130 c->type_list = get_eh_types_for_runtime (c->type_list);
6131 walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset);
6132 }
6133 }
6134 break;
6135
6136 case ERT_ALLOWED_EXCEPTIONS:
6137 r->u.allowed.type_list
6138 = get_eh_types_for_runtime (r->u.allowed.type_list);
6139 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset);
6140 break;
6141
6142 case ERT_MUST_NOT_THROW:
6143 walk_tree (&r->u.must_not_throw.failure_decl,
6144 find_decls_types_r, fld, &fld->pset);
6145 break;
6146 }
6147 }
6148
6149
6150 /* Find decls and types referenced in cgraph node N and store them in
6151 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
6152 look for *every* kind of DECL and TYPE node reachable from N,
6153 including those embedded inside types and decls (i.e,, TYPE_DECLs,
6154 NAMESPACE_DECLs, etc). */
6155
6156 static void
6157 find_decls_types_in_node (struct cgraph_node *n, class free_lang_data_d *fld)
6158 {
6159 basic_block bb;
6160 struct function *fn;
6161 unsigned ix;
6162 tree t;
6163
6164 find_decls_types (n->decl, fld);
6165
6166 if (!gimple_has_body_p (n->decl))
6167 return;
6168
6169 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
6170
6171 fn = DECL_STRUCT_FUNCTION (n->decl);
6172
6173 /* Traverse locals. */
6174 FOR_EACH_LOCAL_DECL (fn, ix, t)
6175 find_decls_types (t, fld);
6176
6177 /* Traverse EH regions in FN. */
6178 {
6179 eh_region r;
6180 FOR_ALL_EH_REGION_FN (r, fn)
6181 find_decls_types_in_eh_region (r, fld);
6182 }
6183
6184 /* Traverse every statement in FN. */
6185 FOR_EACH_BB_FN (bb, fn)
6186 {
6187 gphi_iterator psi;
6188 gimple_stmt_iterator si;
6189 unsigned i;
6190
6191 for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
6192 {
6193 gphi *phi = psi.phi ();
6194
6195 for (i = 0; i < gimple_phi_num_args (phi); i++)
6196 {
6197 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
6198 find_decls_types (*arg_p, fld);
6199 }
6200 }
6201
6202 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
6203 {
6204 gimple *stmt = gsi_stmt (si);
6205
6206 if (is_gimple_call (stmt))
6207 find_decls_types (gimple_call_fntype (stmt), fld);
6208
6209 for (i = 0; i < gimple_num_ops (stmt); i++)
6210 {
6211 tree arg = gimple_op (stmt, i);
6212 find_decls_types (arg, fld);
6213 /* find_decls_types doesn't walk TREE_PURPOSE of TREE_LISTs,
6214 which we need for asm stmts. */
6215 if (arg
6216 && TREE_CODE (arg) == TREE_LIST
6217 && TREE_PURPOSE (arg)
6218 && gimple_code (stmt) == GIMPLE_ASM)
6219 find_decls_types (TREE_PURPOSE (arg), fld);
6220 }
6221 }
6222 }
6223 }
6224
6225
6226 /* Find decls and types referenced in varpool node N and store them in
6227 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
6228 look for *every* kind of DECL and TYPE node reachable from N,
6229 including those embedded inside types and decls (i.e,, TYPE_DECLs,
6230 NAMESPACE_DECLs, etc). */
6231
6232 static void
6233 find_decls_types_in_var (varpool_node *v, class free_lang_data_d *fld)
6234 {
6235 find_decls_types (v->decl, fld);
6236 }
6237
6238 /* If T needs an assembler name, have one created for it. */
6239
6240 void
6241 assign_assembler_name_if_needed (tree t)
6242 {
6243 if (need_assembler_name_p (t))
6244 {
6245 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
6246 diagnostics that use input_location to show locus
6247 information. The problem here is that, at this point,
6248 input_location is generally anchored to the end of the file
6249 (since the parser is long gone), so we don't have a good
6250 position to pin it to.
6251
6252 To alleviate this problem, this uses the location of T's
6253 declaration. Examples of this are
6254 testsuite/g++.dg/template/cond2.C and
6255 testsuite/g++.dg/template/pr35240.C. */
6256 location_t saved_location = input_location;
6257 input_location = DECL_SOURCE_LOCATION (t);
6258
6259 decl_assembler_name (t);
6260
6261 input_location = saved_location;
6262 }
6263 }
6264
6265
6266 /* Free language specific information for every operand and expression
6267 in every node of the call graph. This process operates in three stages:
6268
6269 1- Every callgraph node and varpool node is traversed looking for
6270 decls and types embedded in them. This is a more exhaustive
6271 search than that done by find_referenced_vars, because it will
6272 also collect individual fields, decls embedded in types, etc.
6273
6274 2- All the decls found are sent to free_lang_data_in_decl.
6275
6276 3- All the types found are sent to free_lang_data_in_type.
6277
6278 The ordering between decls and types is important because
6279 free_lang_data_in_decl sets assembler names, which includes
6280 mangling. So types cannot be freed up until assembler names have
6281 been set up. */
6282
6283 static void
6284 free_lang_data_in_cgraph (class free_lang_data_d *fld)
6285 {
6286 struct cgraph_node *n;
6287 varpool_node *v;
6288 tree t;
6289 unsigned i;
6290 alias_pair *p;
6291
6292 /* Find decls and types in the body of every function in the callgraph. */
6293 FOR_EACH_FUNCTION (n)
6294 find_decls_types_in_node (n, fld);
6295
6296 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
6297 find_decls_types (p->decl, fld);
6298
6299 /* Find decls and types in every varpool symbol. */
6300 FOR_EACH_VARIABLE (v)
6301 find_decls_types_in_var (v, fld);
6302
6303 /* Set the assembler name on every decl found. We need to do this
6304 now because free_lang_data_in_decl will invalidate data needed
6305 for mangling. This breaks mangling on interdependent decls. */
6306 FOR_EACH_VEC_ELT (fld->decls, i, t)
6307 assign_assembler_name_if_needed (t);
6308
6309 /* Traverse every decl found freeing its language data. */
6310 FOR_EACH_VEC_ELT (fld->decls, i, t)
6311 free_lang_data_in_decl (t, fld);
6312
6313 /* Traverse every type found freeing its language data. */
6314 FOR_EACH_VEC_ELT (fld->types, i, t)
6315 free_lang_data_in_type (t, fld);
6316 }
6317
6318
6319 /* Free resources that are used by FE but are not needed once they are done. */
6320
6321 static unsigned
6322 free_lang_data (void)
6323 {
6324 unsigned i;
6325 class free_lang_data_d fld;
6326
6327 /* If we are the LTO frontend we have freed lang-specific data already. */
6328 if (in_lto_p
6329 || (!flag_generate_lto && !flag_generate_offload))
6330 {
6331 /* Rebuild type inheritance graph even when not doing LTO to get
6332 consistent profile data. */
6333 rebuild_type_inheritance_graph ();
6334 return 0;
6335 }
6336
6337 fld_incomplete_types = new hash_map<tree, tree>;
6338 fld_simplified_types = new hash_map<tree, tree>;
6339
6340 /* Provide a dummy TRANSLATION_UNIT_DECL if the FE failed to provide one. */
6341 if (vec_safe_is_empty (all_translation_units))
6342 build_translation_unit_decl (NULL_TREE);
6343
6344 /* Allocate and assign alias sets to the standard integer types
6345 while the slots are still in the way the frontends generated them. */
6346 for (i = 0; i < itk_none; ++i)
6347 if (integer_types[i])
6348 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
6349
6350 /* Traverse the IL resetting language specific information for
6351 operands, expressions, etc. */
6352 free_lang_data_in_cgraph (&fld);
6353
6354 /* Create gimple variants for common types. */
6355 for (unsigned i = 0;
6356 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
6357 ++i)
6358 builtin_structptr_types[i].node = builtin_structptr_types[i].base;
6359
6360 /* Reset some langhooks. Do not reset types_compatible_p, it may
6361 still be used indirectly via the get_alias_set langhook. */
6362 lang_hooks.dwarf_name = lhd_dwarf_name;
6363 lang_hooks.decl_printable_name = gimple_decl_printable_name;
6364 lang_hooks.gimplify_expr = lhd_gimplify_expr;
6365 lang_hooks.overwrite_decl_assembler_name = lhd_overwrite_decl_assembler_name;
6366 lang_hooks.print_xnode = lhd_print_tree_nothing;
6367 lang_hooks.print_decl = lhd_print_tree_nothing;
6368 lang_hooks.print_type = lhd_print_tree_nothing;
6369 lang_hooks.print_identifier = lhd_print_tree_nothing;
6370
6371 lang_hooks.tree_inlining.var_mod_type_p = hook_bool_tree_tree_false;
6372
6373 if (flag_checking)
6374 {
6375 int i;
6376 tree t;
6377
6378 FOR_EACH_VEC_ELT (fld.types, i, t)
6379 verify_type (t);
6380 }
6381
6382 /* We do not want the default decl_assembler_name implementation,
6383 rather if we have fixed everything we want a wrapper around it
6384 asserting that all non-local symbols already got their assembler
6385 name and only produce assembler names for local symbols. Or rather
6386 make sure we never call decl_assembler_name on local symbols and
6387 devise a separate, middle-end private scheme for it. */
6388
6389 /* Reset diagnostic machinery. */
6390 tree_diagnostics_defaults (global_dc);
6391
6392 rebuild_type_inheritance_graph ();
6393
6394 delete fld_incomplete_types;
6395 delete fld_simplified_types;
6396
6397 return 0;
6398 }
6399
6400
6401 namespace {
6402
6403 const pass_data pass_data_ipa_free_lang_data =
6404 {
6405 SIMPLE_IPA_PASS, /* type */
6406 "*free_lang_data", /* name */
6407 OPTGROUP_NONE, /* optinfo_flags */
6408 TV_IPA_FREE_LANG_DATA, /* tv_id */
6409 0, /* properties_required */
6410 0, /* properties_provided */
6411 0, /* properties_destroyed */
6412 0, /* todo_flags_start */
6413 0, /* todo_flags_finish */
6414 };
6415
6416 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
6417 {
6418 public:
6419 pass_ipa_free_lang_data (gcc::context *ctxt)
6420 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
6421 {}
6422
6423 /* opt_pass methods: */
6424 virtual unsigned int execute (function *) { return free_lang_data (); }
6425
6426 }; // class pass_ipa_free_lang_data
6427
6428 } // anon namespace
6429
6430 simple_ipa_opt_pass *
6431 make_pass_ipa_free_lang_data (gcc::context *ctxt)
6432 {
6433 return new pass_ipa_free_lang_data (ctxt);
6434 }
6435 \f
6436 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6437 of the various TYPE_QUAL values. */
6438
6439 static void
6440 set_type_quals (tree type, int type_quals)
6441 {
6442 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6443 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6444 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6445 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6446 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6447 }
6448
6449 /* Returns true iff CAND and BASE have equivalent language-specific
6450 qualifiers. */
6451
6452 bool
6453 check_lang_type (const_tree cand, const_tree base)
6454 {
6455 if (lang_hooks.types.type_hash_eq == NULL)
6456 return true;
6457 /* type_hash_eq currently only applies to these types. */
6458 if (TREE_CODE (cand) != FUNCTION_TYPE
6459 && TREE_CODE (cand) != METHOD_TYPE)
6460 return true;
6461 return lang_hooks.types.type_hash_eq (cand, base);
6462 }
6463
6464 /* This function checks to see if TYPE matches the size one of the built-in
6465 atomic types, and returns that core atomic type. */
6466
6467 static tree
6468 find_atomic_core_type (const_tree type)
6469 {
6470 tree base_atomic_type;
6471
6472 /* Only handle complete types. */
6473 if (!tree_fits_uhwi_p (TYPE_SIZE (type)))
6474 return NULL_TREE;
6475
6476 switch (tree_to_uhwi (TYPE_SIZE (type)))
6477 {
6478 case 8:
6479 base_atomic_type = atomicQI_type_node;
6480 break;
6481
6482 case 16:
6483 base_atomic_type = atomicHI_type_node;
6484 break;
6485
6486 case 32:
6487 base_atomic_type = atomicSI_type_node;
6488 break;
6489
6490 case 64:
6491 base_atomic_type = atomicDI_type_node;
6492 break;
6493
6494 case 128:
6495 base_atomic_type = atomicTI_type_node;
6496 break;
6497
6498 default:
6499 base_atomic_type = NULL_TREE;
6500 }
6501
6502 return base_atomic_type;
6503 }
6504
6505 /* Returns true iff unqualified CAND and BASE are equivalent. */
6506
6507 bool
6508 check_base_type (const_tree cand, const_tree base)
6509 {
6510 if (TYPE_NAME (cand) != TYPE_NAME (base)
6511 /* Apparently this is needed for Objective-C. */
6512 || TYPE_CONTEXT (cand) != TYPE_CONTEXT (base)
6513 || !attribute_list_equal (TYPE_ATTRIBUTES (cand),
6514 TYPE_ATTRIBUTES (base)))
6515 return false;
6516 /* Check alignment. */
6517 if (TYPE_ALIGN (cand) == TYPE_ALIGN (base))
6518 return true;
6519 /* Atomic types increase minimal alignment. We must to do so as well
6520 or we get duplicated canonical types. See PR88686. */
6521 if ((TYPE_QUALS (cand) & TYPE_QUAL_ATOMIC))
6522 {
6523 /* See if this object can map to a basic atomic type. */
6524 tree atomic_type = find_atomic_core_type (cand);
6525 if (atomic_type && TYPE_ALIGN (atomic_type) == TYPE_ALIGN (cand))
6526 return true;
6527 }
6528 return false;
6529 }
6530
6531 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */
6532
6533 bool
6534 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6535 {
6536 return (TYPE_QUALS (cand) == type_quals
6537 && check_base_type (cand, base)
6538 && check_lang_type (cand, base));
6539 }
6540
6541 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
6542
6543 static bool
6544 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6545 {
6546 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6547 && TYPE_NAME (cand) == TYPE_NAME (base)
6548 /* Apparently this is needed for Objective-C. */
6549 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6550 /* Check alignment. */
6551 && TYPE_ALIGN (cand) == align
6552 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6553 TYPE_ATTRIBUTES (base))
6554 && check_lang_type (cand, base));
6555 }
6556
6557 /* Return a version of the TYPE, qualified as indicated by the
6558 TYPE_QUALS, if one exists. If no qualified version exists yet,
6559 return NULL_TREE. */
6560
6561 tree
6562 get_qualified_type (tree type, int type_quals)
6563 {
6564 if (TYPE_QUALS (type) == type_quals)
6565 return type;
6566
6567 tree mv = TYPE_MAIN_VARIANT (type);
6568 if (check_qualified_type (mv, type, type_quals))
6569 return mv;
6570
6571 /* Search the chain of variants to see if there is already one there just
6572 like the one we need to have. If so, use that existing one. We must
6573 preserve the TYPE_NAME, since there is code that depends on this. */
6574 for (tree *tp = &TYPE_NEXT_VARIANT (mv); *tp; tp = &TYPE_NEXT_VARIANT (*tp))
6575 if (check_qualified_type (*tp, type, type_quals))
6576 {
6577 /* Put the found variant at the head of the variant list so
6578 frequently searched variants get found faster. The C++ FE
6579 benefits greatly from this. */
6580 tree t = *tp;
6581 *tp = TYPE_NEXT_VARIANT (t);
6582 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (mv);
6583 TYPE_NEXT_VARIANT (mv) = t;
6584 return t;
6585 }
6586
6587 return NULL_TREE;
6588 }
6589
6590 /* Like get_qualified_type, but creates the type if it does not
6591 exist. This function never returns NULL_TREE. */
6592
6593 tree
6594 build_qualified_type (tree type, int type_quals MEM_STAT_DECL)
6595 {
6596 tree t;
6597
6598 /* See if we already have the appropriate qualified variant. */
6599 t = get_qualified_type (type, type_quals);
6600
6601 /* If not, build it. */
6602 if (!t)
6603 {
6604 t = build_variant_type_copy (type PASS_MEM_STAT);
6605 set_type_quals (t, type_quals);
6606
6607 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6608 {
6609 /* See if this object can map to a basic atomic type. */
6610 tree atomic_type = find_atomic_core_type (type);
6611 if (atomic_type)
6612 {
6613 /* Ensure the alignment of this type is compatible with
6614 the required alignment of the atomic type. */
6615 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6616 SET_TYPE_ALIGN (t, TYPE_ALIGN (atomic_type));
6617 }
6618 }
6619
6620 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6621 /* Propagate structural equality. */
6622 SET_TYPE_STRUCTURAL_EQUALITY (t);
6623 else if (TYPE_CANONICAL (type) != type)
6624 /* Build the underlying canonical type, since it is different
6625 from TYPE. */
6626 {
6627 tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
6628 TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
6629 }
6630 else
6631 /* T is its own canonical type. */
6632 TYPE_CANONICAL (t) = t;
6633
6634 }
6635
6636 return t;
6637 }
6638
6639 /* Create a variant of type T with alignment ALIGN. */
6640
6641 tree
6642 build_aligned_type (tree type, unsigned int align)
6643 {
6644 tree t;
6645
6646 if (TYPE_PACKED (type)
6647 || TYPE_ALIGN (type) == align)
6648 return type;
6649
6650 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6651 if (check_aligned_type (t, type, align))
6652 return t;
6653
6654 t = build_variant_type_copy (type);
6655 SET_TYPE_ALIGN (t, align);
6656 TYPE_USER_ALIGN (t) = 1;
6657
6658 return t;
6659 }
6660
6661 /* Create a new distinct copy of TYPE. The new type is made its own
6662 MAIN_VARIANT. If TYPE requires structural equality checks, the
6663 resulting type requires structural equality checks; otherwise, its
6664 TYPE_CANONICAL points to itself. */
6665
6666 tree
6667 build_distinct_type_copy (tree type MEM_STAT_DECL)
6668 {
6669 tree t = copy_node (type PASS_MEM_STAT);
6670
6671 TYPE_POINTER_TO (t) = 0;
6672 TYPE_REFERENCE_TO (t) = 0;
6673
6674 /* Set the canonical type either to a new equivalence class, or
6675 propagate the need for structural equality checks. */
6676 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6677 SET_TYPE_STRUCTURAL_EQUALITY (t);
6678 else
6679 TYPE_CANONICAL (t) = t;
6680
6681 /* Make it its own variant. */
6682 TYPE_MAIN_VARIANT (t) = t;
6683 TYPE_NEXT_VARIANT (t) = 0;
6684
6685 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6686 whose TREE_TYPE is not t. This can also happen in the Ada
6687 frontend when using subtypes. */
6688
6689 return t;
6690 }
6691
6692 /* Create a new variant of TYPE, equivalent but distinct. This is so
6693 the caller can modify it. TYPE_CANONICAL for the return type will
6694 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6695 are considered equal by the language itself (or that both types
6696 require structural equality checks). */
6697
6698 tree
6699 build_variant_type_copy (tree type MEM_STAT_DECL)
6700 {
6701 tree t, m = TYPE_MAIN_VARIANT (type);
6702
6703 t = build_distinct_type_copy (type PASS_MEM_STAT);
6704
6705 /* Since we're building a variant, assume that it is a non-semantic
6706 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6707 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6708 /* Type variants have no alias set defined. */
6709 TYPE_ALIAS_SET (t) = -1;
6710
6711 /* Add the new type to the chain of variants of TYPE. */
6712 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6713 TYPE_NEXT_VARIANT (m) = t;
6714 TYPE_MAIN_VARIANT (t) = m;
6715
6716 return t;
6717 }
6718 \f
6719 /* Return true if the from tree in both tree maps are equal. */
6720
6721 int
6722 tree_map_base_eq (const void *va, const void *vb)
6723 {
6724 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6725 *const b = (const struct tree_map_base *) vb;
6726 return (a->from == b->from);
6727 }
6728
6729 /* Hash a from tree in a tree_base_map. */
6730
6731 unsigned int
6732 tree_map_base_hash (const void *item)
6733 {
6734 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6735 }
6736
6737 /* Return true if this tree map structure is marked for garbage collection
6738 purposes. We simply return true if the from tree is marked, so that this
6739 structure goes away when the from tree goes away. */
6740
6741 int
6742 tree_map_base_marked_p (const void *p)
6743 {
6744 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6745 }
6746
6747 /* Hash a from tree in a tree_map. */
6748
6749 unsigned int
6750 tree_map_hash (const void *item)
6751 {
6752 return (((const struct tree_map *) item)->hash);
6753 }
6754
6755 /* Hash a from tree in a tree_decl_map. */
6756
6757 unsigned int
6758 tree_decl_map_hash (const void *item)
6759 {
6760 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6761 }
6762
6763 /* Return the initialization priority for DECL. */
6764
6765 priority_type
6766 decl_init_priority_lookup (tree decl)
6767 {
6768 symtab_node *snode = symtab_node::get (decl);
6769
6770 if (!snode)
6771 return DEFAULT_INIT_PRIORITY;
6772 return
6773 snode->get_init_priority ();
6774 }
6775
6776 /* Return the finalization priority for DECL. */
6777
6778 priority_type
6779 decl_fini_priority_lookup (tree decl)
6780 {
6781 cgraph_node *node = cgraph_node::get (decl);
6782
6783 if (!node)
6784 return DEFAULT_INIT_PRIORITY;
6785 return
6786 node->get_fini_priority ();
6787 }
6788
6789 /* Set the initialization priority for DECL to PRIORITY. */
6790
6791 void
6792 decl_init_priority_insert (tree decl, priority_type priority)
6793 {
6794 struct symtab_node *snode;
6795
6796 if (priority == DEFAULT_INIT_PRIORITY)
6797 {
6798 snode = symtab_node::get (decl);
6799 if (!snode)
6800 return;
6801 }
6802 else if (VAR_P (decl))
6803 snode = varpool_node::get_create (decl);
6804 else
6805 snode = cgraph_node::get_create (decl);
6806 snode->set_init_priority (priority);
6807 }
6808
6809 /* Set the finalization priority for DECL to PRIORITY. */
6810
6811 void
6812 decl_fini_priority_insert (tree decl, priority_type priority)
6813 {
6814 struct cgraph_node *node;
6815
6816 if (priority == DEFAULT_INIT_PRIORITY)
6817 {
6818 node = cgraph_node::get (decl);
6819 if (!node)
6820 return;
6821 }
6822 else
6823 node = cgraph_node::get_create (decl);
6824 node->set_fini_priority (priority);
6825 }
6826
6827 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6828
6829 static void
6830 print_debug_expr_statistics (void)
6831 {
6832 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6833 (long) debug_expr_for_decl->size (),
6834 (long) debug_expr_for_decl->elements (),
6835 debug_expr_for_decl->collisions ());
6836 }
6837
6838 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6839
6840 static void
6841 print_value_expr_statistics (void)
6842 {
6843 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6844 (long) value_expr_for_decl->size (),
6845 (long) value_expr_for_decl->elements (),
6846 value_expr_for_decl->collisions ());
6847 }
6848
6849 /* Lookup a debug expression for FROM, and return it if we find one. */
6850
6851 tree
6852 decl_debug_expr_lookup (tree from)
6853 {
6854 struct tree_decl_map *h, in;
6855 in.base.from = from;
6856
6857 h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6858 if (h)
6859 return h->to;
6860 return NULL_TREE;
6861 }
6862
6863 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6864
6865 void
6866 decl_debug_expr_insert (tree from, tree to)
6867 {
6868 struct tree_decl_map *h;
6869
6870 h = ggc_alloc<tree_decl_map> ();
6871 h->base.from = from;
6872 h->to = to;
6873 *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6874 }
6875
6876 /* Lookup a value expression for FROM, and return it if we find one. */
6877
6878 tree
6879 decl_value_expr_lookup (tree from)
6880 {
6881 struct tree_decl_map *h, in;
6882 in.base.from = from;
6883
6884 h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6885 if (h)
6886 return h->to;
6887 return NULL_TREE;
6888 }
6889
6890 /* Insert a mapping FROM->TO in the value expression hashtable. */
6891
6892 void
6893 decl_value_expr_insert (tree from, tree to)
6894 {
6895 struct tree_decl_map *h;
6896
6897 h = ggc_alloc<tree_decl_map> ();
6898 h->base.from = from;
6899 h->to = to;
6900 *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6901 }
6902
6903 /* Lookup a vector of debug arguments for FROM, and return it if we
6904 find one. */
6905
6906 vec<tree, va_gc> **
6907 decl_debug_args_lookup (tree from)
6908 {
6909 struct tree_vec_map *h, in;
6910
6911 if (!DECL_HAS_DEBUG_ARGS_P (from))
6912 return NULL;
6913 gcc_checking_assert (debug_args_for_decl != NULL);
6914 in.base.from = from;
6915 h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6916 if (h)
6917 return &h->to;
6918 return NULL;
6919 }
6920
6921 /* Insert a mapping FROM->empty vector of debug arguments in the value
6922 expression hashtable. */
6923
6924 vec<tree, va_gc> **
6925 decl_debug_args_insert (tree from)
6926 {
6927 struct tree_vec_map *h;
6928 tree_vec_map **loc;
6929
6930 if (DECL_HAS_DEBUG_ARGS_P (from))
6931 return decl_debug_args_lookup (from);
6932 if (debug_args_for_decl == NULL)
6933 debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6934 h = ggc_alloc<tree_vec_map> ();
6935 h->base.from = from;
6936 h->to = NULL;
6937 loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6938 *loc = h;
6939 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6940 return &h->to;
6941 }
6942
6943 /* Hashing of types so that we don't make duplicates.
6944 The entry point is `type_hash_canon'. */
6945
6946 /* Generate the default hash code for TYPE. This is designed for
6947 speed, rather than maximum entropy. */
6948
6949 hashval_t
6950 type_hash_canon_hash (tree type)
6951 {
6952 inchash::hash hstate;
6953
6954 hstate.add_int (TREE_CODE (type));
6955
6956 if (TREE_TYPE (type))
6957 hstate.add_object (TYPE_HASH (TREE_TYPE (type)));
6958
6959 for (tree t = TYPE_ATTRIBUTES (type); t; t = TREE_CHAIN (t))
6960 /* Just the identifier is adequate to distinguish. */
6961 hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (t)));
6962
6963 switch (TREE_CODE (type))
6964 {
6965 case METHOD_TYPE:
6966 hstate.add_object (TYPE_HASH (TYPE_METHOD_BASETYPE (type)));
6967 /* FALLTHROUGH. */
6968 case FUNCTION_TYPE:
6969 for (tree t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6970 if (TREE_VALUE (t) != error_mark_node)
6971 hstate.add_object (TYPE_HASH (TREE_VALUE (t)));
6972 break;
6973
6974 case OFFSET_TYPE:
6975 hstate.add_object (TYPE_HASH (TYPE_OFFSET_BASETYPE (type)));
6976 break;
6977
6978 case ARRAY_TYPE:
6979 {
6980 if (TYPE_DOMAIN (type))
6981 hstate.add_object (TYPE_HASH (TYPE_DOMAIN (type)));
6982 if (!AGGREGATE_TYPE_P (TREE_TYPE (type)))
6983 {
6984 unsigned typeless = TYPE_TYPELESS_STORAGE (type);
6985 hstate.add_object (typeless);
6986 }
6987 }
6988 break;
6989
6990 case INTEGER_TYPE:
6991 {
6992 tree t = TYPE_MAX_VALUE (type);
6993 if (!t)
6994 t = TYPE_MIN_VALUE (type);
6995 for (int i = 0; i < TREE_INT_CST_NUNITS (t); i++)
6996 hstate.add_object (TREE_INT_CST_ELT (t, i));
6997 break;
6998 }
6999
7000 case REAL_TYPE:
7001 case FIXED_POINT_TYPE:
7002 {
7003 unsigned prec = TYPE_PRECISION (type);
7004 hstate.add_object (prec);
7005 break;
7006 }
7007
7008 case VECTOR_TYPE:
7009 hstate.add_poly_int (TYPE_VECTOR_SUBPARTS (type));
7010 break;
7011
7012 default:
7013 break;
7014 }
7015
7016 return hstate.end ();
7017 }
7018
7019 /* These are the Hashtable callback functions. */
7020
7021 /* Returns true iff the types are equivalent. */
7022
7023 bool
7024 type_cache_hasher::equal (type_hash *a, type_hash *b)
7025 {
7026 /* First test the things that are the same for all types. */
7027 if (a->hash != b->hash
7028 || TREE_CODE (a->type) != TREE_CODE (b->type)
7029 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
7030 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
7031 TYPE_ATTRIBUTES (b->type))
7032 || (TREE_CODE (a->type) != COMPLEX_TYPE
7033 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
7034 return 0;
7035
7036 /* Be careful about comparing arrays before and after the element type
7037 has been completed; don't compare TYPE_ALIGN unless both types are
7038 complete. */
7039 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
7040 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
7041 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
7042 return 0;
7043
7044 switch (TREE_CODE (a->type))
7045 {
7046 case VOID_TYPE:
7047 case COMPLEX_TYPE:
7048 case POINTER_TYPE:
7049 case REFERENCE_TYPE:
7050 case NULLPTR_TYPE:
7051 return 1;
7052
7053 case VECTOR_TYPE:
7054 return known_eq (TYPE_VECTOR_SUBPARTS (a->type),
7055 TYPE_VECTOR_SUBPARTS (b->type));
7056
7057 case ENUMERAL_TYPE:
7058 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
7059 && !(TYPE_VALUES (a->type)
7060 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
7061 && TYPE_VALUES (b->type)
7062 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
7063 && type_list_equal (TYPE_VALUES (a->type),
7064 TYPE_VALUES (b->type))))
7065 return 0;
7066
7067 /* fall through */
7068
7069 case INTEGER_TYPE:
7070 case REAL_TYPE:
7071 case BOOLEAN_TYPE:
7072 if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
7073 return false;
7074 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
7075 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
7076 TYPE_MAX_VALUE (b->type)))
7077 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
7078 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
7079 TYPE_MIN_VALUE (b->type))));
7080
7081 case FIXED_POINT_TYPE:
7082 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
7083
7084 case OFFSET_TYPE:
7085 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
7086
7087 case METHOD_TYPE:
7088 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
7089 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7090 || (TYPE_ARG_TYPES (a->type)
7091 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7092 && TYPE_ARG_TYPES (b->type)
7093 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7094 && type_list_equal (TYPE_ARG_TYPES (a->type),
7095 TYPE_ARG_TYPES (b->type)))))
7096 break;
7097 return 0;
7098 case ARRAY_TYPE:
7099 /* Don't compare TYPE_TYPELESS_STORAGE flag on aggregates,
7100 where the flag should be inherited from the element type
7101 and can change after ARRAY_TYPEs are created; on non-aggregates
7102 compare it and hash it, scalars will never have that flag set
7103 and we need to differentiate between arrays created by different
7104 front-ends or middle-end created arrays. */
7105 return (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
7106 && (AGGREGATE_TYPE_P (TREE_TYPE (a->type))
7107 || (TYPE_TYPELESS_STORAGE (a->type)
7108 == TYPE_TYPELESS_STORAGE (b->type))));
7109
7110 case RECORD_TYPE:
7111 case UNION_TYPE:
7112 case QUAL_UNION_TYPE:
7113 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
7114 || (TYPE_FIELDS (a->type)
7115 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
7116 && TYPE_FIELDS (b->type)
7117 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
7118 && type_list_equal (TYPE_FIELDS (a->type),
7119 TYPE_FIELDS (b->type))));
7120
7121 case FUNCTION_TYPE:
7122 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7123 || (TYPE_ARG_TYPES (a->type)
7124 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7125 && TYPE_ARG_TYPES (b->type)
7126 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7127 && type_list_equal (TYPE_ARG_TYPES (a->type),
7128 TYPE_ARG_TYPES (b->type))))
7129 break;
7130 return 0;
7131
7132 default:
7133 return 0;
7134 }
7135
7136 if (lang_hooks.types.type_hash_eq != NULL)
7137 return lang_hooks.types.type_hash_eq (a->type, b->type);
7138
7139 return 1;
7140 }
7141
7142 /* Given TYPE, and HASHCODE its hash code, return the canonical
7143 object for an identical type if one already exists.
7144 Otherwise, return TYPE, and record it as the canonical object.
7145
7146 To use this function, first create a type of the sort you want.
7147 Then compute its hash code from the fields of the type that
7148 make it different from other similar types.
7149 Then call this function and use the value. */
7150
7151 tree
7152 type_hash_canon (unsigned int hashcode, tree type)
7153 {
7154 type_hash in;
7155 type_hash **loc;
7156
7157 /* The hash table only contains main variants, so ensure that's what we're
7158 being passed. */
7159 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
7160
7161 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
7162 must call that routine before comparing TYPE_ALIGNs. */
7163 layout_type (type);
7164
7165 in.hash = hashcode;
7166 in.type = type;
7167
7168 loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
7169 if (*loc)
7170 {
7171 tree t1 = ((type_hash *) *loc)->type;
7172 gcc_assert (TYPE_MAIN_VARIANT (t1) == t1
7173 && t1 != type);
7174 if (TYPE_UID (type) + 1 == next_type_uid)
7175 --next_type_uid;
7176 /* Free also min/max values and the cache for integer
7177 types. This can't be done in free_node, as LTO frees
7178 those on its own. */
7179 if (TREE_CODE (type) == INTEGER_TYPE)
7180 {
7181 if (TYPE_MIN_VALUE (type)
7182 && TREE_TYPE (TYPE_MIN_VALUE (type)) == type)
7183 {
7184 /* Zero is always in TYPE_CACHED_VALUES. */
7185 if (! TYPE_UNSIGNED (type))
7186 int_cst_hash_table->remove_elt (TYPE_MIN_VALUE (type));
7187 ggc_free (TYPE_MIN_VALUE (type));
7188 }
7189 if (TYPE_MAX_VALUE (type)
7190 && TREE_TYPE (TYPE_MAX_VALUE (type)) == type)
7191 {
7192 int_cst_hash_table->remove_elt (TYPE_MAX_VALUE (type));
7193 ggc_free (TYPE_MAX_VALUE (type));
7194 }
7195 if (TYPE_CACHED_VALUES_P (type))
7196 ggc_free (TYPE_CACHED_VALUES (type));
7197 }
7198 free_node (type);
7199 return t1;
7200 }
7201 else
7202 {
7203 struct type_hash *h;
7204
7205 h = ggc_alloc<type_hash> ();
7206 h->hash = hashcode;
7207 h->type = type;
7208 *loc = h;
7209
7210 return type;
7211 }
7212 }
7213
7214 static void
7215 print_type_hash_statistics (void)
7216 {
7217 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
7218 (long) type_hash_table->size (),
7219 (long) type_hash_table->elements (),
7220 type_hash_table->collisions ());
7221 }
7222
7223 /* Given two lists of types
7224 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7225 return 1 if the lists contain the same types in the same order.
7226 Also, the TREE_PURPOSEs must match. */
7227
7228 bool
7229 type_list_equal (const_tree l1, const_tree l2)
7230 {
7231 const_tree t1, t2;
7232
7233 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7234 if (TREE_VALUE (t1) != TREE_VALUE (t2)
7235 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7236 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7237 && (TREE_TYPE (TREE_PURPOSE (t1))
7238 == TREE_TYPE (TREE_PURPOSE (t2))))))
7239 return false;
7240
7241 return t1 == t2;
7242 }
7243
7244 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7245 given by TYPE. If the argument list accepts variable arguments,
7246 then this function counts only the ordinary arguments. */
7247
7248 int
7249 type_num_arguments (const_tree fntype)
7250 {
7251 int i = 0;
7252
7253 for (tree t = TYPE_ARG_TYPES (fntype); t; t = TREE_CHAIN (t))
7254 /* If the function does not take a variable number of arguments,
7255 the last element in the list will have type `void'. */
7256 if (VOID_TYPE_P (TREE_VALUE (t)))
7257 break;
7258 else
7259 ++i;
7260
7261 return i;
7262 }
7263
7264 /* Return the type of the function TYPE's argument ARGNO if known.
7265 For vararg function's where ARGNO refers to one of the variadic
7266 arguments return null. Otherwise, return a void_type_node for
7267 out-of-bounds ARGNO. */
7268
7269 tree
7270 type_argument_type (const_tree fntype, unsigned argno)
7271 {
7272 /* Treat zero the same as an out-of-bounds argument number. */
7273 if (!argno)
7274 return void_type_node;
7275
7276 function_args_iterator iter;
7277
7278 tree argtype;
7279 unsigned i = 1;
7280 FOREACH_FUNCTION_ARGS (fntype, argtype, iter)
7281 {
7282 /* A vararg function's argument list ends in a null. Otherwise,
7283 an ordinary function's argument list ends with void. Return
7284 null if ARGNO refers to a vararg argument, void_type_node if
7285 it's out of bounds, and the formal argument type otherwise. */
7286 if (!argtype)
7287 break;
7288
7289 if (i == argno || VOID_TYPE_P (argtype))
7290 return argtype;
7291
7292 ++i;
7293 }
7294
7295 return NULL_TREE;
7296 }
7297
7298 /* Nonzero if integer constants T1 and T2
7299 represent the same constant value. */
7300
7301 int
7302 tree_int_cst_equal (const_tree t1, const_tree t2)
7303 {
7304 if (t1 == t2)
7305 return 1;
7306
7307 if (t1 == 0 || t2 == 0)
7308 return 0;
7309
7310 STRIP_ANY_LOCATION_WRAPPER (t1);
7311 STRIP_ANY_LOCATION_WRAPPER (t2);
7312
7313 if (TREE_CODE (t1) == INTEGER_CST
7314 && TREE_CODE (t2) == INTEGER_CST
7315 && wi::to_widest (t1) == wi::to_widest (t2))
7316 return 1;
7317
7318 return 0;
7319 }
7320
7321 /* Return true if T is an INTEGER_CST whose numerical value (extended
7322 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */
7323
7324 bool
7325 tree_fits_shwi_p (const_tree t)
7326 {
7327 return (t != NULL_TREE
7328 && TREE_CODE (t) == INTEGER_CST
7329 && wi::fits_shwi_p (wi::to_widest (t)));
7330 }
7331
7332 /* Return true if T is an INTEGER_CST or POLY_INT_CST whose numerical
7333 value (extended according to TYPE_UNSIGNED) fits in a poly_int64. */
7334
7335 bool
7336 tree_fits_poly_int64_p (const_tree t)
7337 {
7338 if (t == NULL_TREE)
7339 return false;
7340 if (POLY_INT_CST_P (t))
7341 {
7342 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; i++)
7343 if (!wi::fits_shwi_p (wi::to_wide (POLY_INT_CST_COEFF (t, i))))
7344 return false;
7345 return true;
7346 }
7347 return (TREE_CODE (t) == INTEGER_CST
7348 && wi::fits_shwi_p (wi::to_widest (t)));
7349 }
7350
7351 /* Return true if T is an INTEGER_CST whose numerical value (extended
7352 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */
7353
7354 bool
7355 tree_fits_uhwi_p (const_tree t)
7356 {
7357 return (t != NULL_TREE
7358 && TREE_CODE (t) == INTEGER_CST
7359 && wi::fits_uhwi_p (wi::to_widest (t)));
7360 }
7361
7362 /* Return true if T is an INTEGER_CST or POLY_INT_CST whose numerical
7363 value (extended according to TYPE_UNSIGNED) fits in a poly_uint64. */
7364
7365 bool
7366 tree_fits_poly_uint64_p (const_tree t)
7367 {
7368 if (t == NULL_TREE)
7369 return false;
7370 if (POLY_INT_CST_P (t))
7371 {
7372 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; i++)
7373 if (!wi::fits_uhwi_p (wi::to_widest (POLY_INT_CST_COEFF (t, i))))
7374 return false;
7375 return true;
7376 }
7377 return (TREE_CODE (t) == INTEGER_CST
7378 && wi::fits_uhwi_p (wi::to_widest (t)));
7379 }
7380
7381 /* T is an INTEGER_CST whose numerical value (extended according to
7382 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that
7383 HOST_WIDE_INT. */
7384
7385 HOST_WIDE_INT
7386 tree_to_shwi (const_tree t)
7387 {
7388 gcc_assert (tree_fits_shwi_p (t));
7389 return TREE_INT_CST_LOW (t);
7390 }
7391
7392 /* T is an INTEGER_CST whose numerical value (extended according to
7393 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that
7394 HOST_WIDE_INT. */
7395
7396 unsigned HOST_WIDE_INT
7397 tree_to_uhwi (const_tree t)
7398 {
7399 gcc_assert (tree_fits_uhwi_p (t));
7400 return TREE_INT_CST_LOW (t);
7401 }
7402
7403 /* Return the most significant (sign) bit of T. */
7404
7405 int
7406 tree_int_cst_sign_bit (const_tree t)
7407 {
7408 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7409
7410 return wi::extract_uhwi (wi::to_wide (t), bitno, 1);
7411 }
7412
7413 /* Return an indication of the sign of the integer constant T.
7414 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7415 Note that -1 will never be returned if T's type is unsigned. */
7416
7417 int
7418 tree_int_cst_sgn (const_tree t)
7419 {
7420 if (wi::to_wide (t) == 0)
7421 return 0;
7422 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7423 return 1;
7424 else if (wi::neg_p (wi::to_wide (t)))
7425 return -1;
7426 else
7427 return 1;
7428 }
7429
7430 /* Return the minimum number of bits needed to represent VALUE in a
7431 signed or unsigned type, UNSIGNEDP says which. */
7432
7433 unsigned int
7434 tree_int_cst_min_precision (tree value, signop sgn)
7435 {
7436 /* If the value is negative, compute its negative minus 1. The latter
7437 adjustment is because the absolute value of the largest negative value
7438 is one larger than the largest positive value. This is equivalent to
7439 a bit-wise negation, so use that operation instead. */
7440
7441 if (tree_int_cst_sgn (value) < 0)
7442 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7443
7444 /* Return the number of bits needed, taking into account the fact
7445 that we need one more bit for a signed than unsigned type.
7446 If value is 0 or -1, the minimum precision is 1 no matter
7447 whether unsignedp is true or false. */
7448
7449 if (integer_zerop (value))
7450 return 1;
7451 else
7452 return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7453 }
7454
7455 /* Return truthvalue of whether T1 is the same tree structure as T2.
7456 Return 1 if they are the same.
7457 Return 0 if they are understandably different.
7458 Return -1 if either contains tree structure not understood by
7459 this function. */
7460
7461 int
7462 simple_cst_equal (const_tree t1, const_tree t2)
7463 {
7464 enum tree_code code1, code2;
7465 int cmp;
7466 int i;
7467
7468 if (t1 == t2)
7469 return 1;
7470 if (t1 == 0 || t2 == 0)
7471 return 0;
7472
7473 /* For location wrappers to be the same, they must be at the same
7474 source location (and wrap the same thing). */
7475 if (location_wrapper_p (t1) && location_wrapper_p (t2))
7476 {
7477 if (EXPR_LOCATION (t1) != EXPR_LOCATION (t2))
7478 return 0;
7479 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7480 }
7481
7482 code1 = TREE_CODE (t1);
7483 code2 = TREE_CODE (t2);
7484
7485 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7486 {
7487 if (CONVERT_EXPR_CODE_P (code2)
7488 || code2 == NON_LVALUE_EXPR)
7489 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7490 else
7491 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7492 }
7493
7494 else if (CONVERT_EXPR_CODE_P (code2)
7495 || code2 == NON_LVALUE_EXPR)
7496 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7497
7498 if (code1 != code2)
7499 return 0;
7500
7501 switch (code1)
7502 {
7503 case INTEGER_CST:
7504 return wi::to_widest (t1) == wi::to_widest (t2);
7505
7506 case REAL_CST:
7507 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
7508
7509 case FIXED_CST:
7510 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7511
7512 case STRING_CST:
7513 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7514 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7515 TREE_STRING_LENGTH (t1)));
7516
7517 case CONSTRUCTOR:
7518 {
7519 unsigned HOST_WIDE_INT idx;
7520 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7521 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7522
7523 if (vec_safe_length (v1) != vec_safe_length (v2))
7524 return false;
7525
7526 for (idx = 0; idx < vec_safe_length (v1); ++idx)
7527 /* ??? Should we handle also fields here? */
7528 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7529 return false;
7530 return true;
7531 }
7532
7533 case SAVE_EXPR:
7534 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7535
7536 case CALL_EXPR:
7537 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7538 if (cmp <= 0)
7539 return cmp;
7540 if (call_expr_nargs (t1) != call_expr_nargs (t2))
7541 return 0;
7542 {
7543 const_tree arg1, arg2;
7544 const_call_expr_arg_iterator iter1, iter2;
7545 for (arg1 = first_const_call_expr_arg (t1, &iter1),
7546 arg2 = first_const_call_expr_arg (t2, &iter2);
7547 arg1 && arg2;
7548 arg1 = next_const_call_expr_arg (&iter1),
7549 arg2 = next_const_call_expr_arg (&iter2))
7550 {
7551 cmp = simple_cst_equal (arg1, arg2);
7552 if (cmp <= 0)
7553 return cmp;
7554 }
7555 return arg1 == arg2;
7556 }
7557
7558 case TARGET_EXPR:
7559 /* Special case: if either target is an unallocated VAR_DECL,
7560 it means that it's going to be unified with whatever the
7561 TARGET_EXPR is really supposed to initialize, so treat it
7562 as being equivalent to anything. */
7563 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7564 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7565 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7566 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7567 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7568 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7569 cmp = 1;
7570 else
7571 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7572
7573 if (cmp <= 0)
7574 return cmp;
7575
7576 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7577
7578 case WITH_CLEANUP_EXPR:
7579 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7580 if (cmp <= 0)
7581 return cmp;
7582
7583 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7584
7585 case COMPONENT_REF:
7586 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7587 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7588
7589 return 0;
7590
7591 case VAR_DECL:
7592 case PARM_DECL:
7593 case CONST_DECL:
7594 case FUNCTION_DECL:
7595 return 0;
7596
7597 default:
7598 if (POLY_INT_CST_P (t1))
7599 /* A false return means maybe_ne rather than known_ne. */
7600 return known_eq (poly_widest_int::from (poly_int_cst_value (t1),
7601 TYPE_SIGN (TREE_TYPE (t1))),
7602 poly_widest_int::from (poly_int_cst_value (t2),
7603 TYPE_SIGN (TREE_TYPE (t2))));
7604 break;
7605 }
7606
7607 /* This general rule works for most tree codes. All exceptions should be
7608 handled above. If this is a language-specific tree code, we can't
7609 trust what might be in the operand, so say we don't know
7610 the situation. */
7611 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7612 return -1;
7613
7614 switch (TREE_CODE_CLASS (code1))
7615 {
7616 case tcc_unary:
7617 case tcc_binary:
7618 case tcc_comparison:
7619 case tcc_expression:
7620 case tcc_reference:
7621 case tcc_statement:
7622 cmp = 1;
7623 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7624 {
7625 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7626 if (cmp <= 0)
7627 return cmp;
7628 }
7629
7630 return cmp;
7631
7632 default:
7633 return -1;
7634 }
7635 }
7636
7637 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7638 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7639 than U, respectively. */
7640
7641 int
7642 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7643 {
7644 if (tree_int_cst_sgn (t) < 0)
7645 return -1;
7646 else if (!tree_fits_uhwi_p (t))
7647 return 1;
7648 else if (TREE_INT_CST_LOW (t) == u)
7649 return 0;
7650 else if (TREE_INT_CST_LOW (t) < u)
7651 return -1;
7652 else
7653 return 1;
7654 }
7655
7656 /* Return true if SIZE represents a constant size that is in bounds of
7657 what the middle-end and the backend accepts (covering not more than
7658 half of the address-space).
7659 When PERR is non-null, set *PERR on failure to the description of
7660 why SIZE is not valid. */
7661
7662 bool
7663 valid_constant_size_p (const_tree size, cst_size_error *perr /* = NULL */)
7664 {
7665 if (POLY_INT_CST_P (size))
7666 {
7667 if (TREE_OVERFLOW (size))
7668 return false;
7669 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
7670 if (!valid_constant_size_p (POLY_INT_CST_COEFF (size, i)))
7671 return false;
7672 return true;
7673 }
7674
7675 cst_size_error error;
7676 if (!perr)
7677 perr = &error;
7678
7679 if (TREE_CODE (size) != INTEGER_CST)
7680 {
7681 *perr = cst_size_not_constant;
7682 return false;
7683 }
7684
7685 if (TREE_OVERFLOW_P (size))
7686 {
7687 *perr = cst_size_overflow;
7688 return false;
7689 }
7690
7691 if (tree_int_cst_sgn (size) < 0)
7692 {
7693 *perr = cst_size_negative;
7694 return false;
7695 }
7696 if (!tree_fits_uhwi_p (size)
7697 || (wi::to_widest (TYPE_MAX_VALUE (sizetype))
7698 < wi::to_widest (size) * 2))
7699 {
7700 *perr = cst_size_too_big;
7701 return false;
7702 }
7703
7704 return true;
7705 }
7706
7707 /* Return the precision of the type, or for a complex or vector type the
7708 precision of the type of its elements. */
7709
7710 unsigned int
7711 element_precision (const_tree type)
7712 {
7713 if (!TYPE_P (type))
7714 type = TREE_TYPE (type);
7715 enum tree_code code = TREE_CODE (type);
7716 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7717 type = TREE_TYPE (type);
7718
7719 return TYPE_PRECISION (type);
7720 }
7721
7722 /* Return true if CODE represents an associative tree code. Otherwise
7723 return false. */
7724 bool
7725 associative_tree_code (enum tree_code code)
7726 {
7727 switch (code)
7728 {
7729 case BIT_IOR_EXPR:
7730 case BIT_AND_EXPR:
7731 case BIT_XOR_EXPR:
7732 case PLUS_EXPR:
7733 case MULT_EXPR:
7734 case MIN_EXPR:
7735 case MAX_EXPR:
7736 return true;
7737
7738 default:
7739 break;
7740 }
7741 return false;
7742 }
7743
7744 /* Return true if CODE represents a commutative tree code. Otherwise
7745 return false. */
7746 bool
7747 commutative_tree_code (enum tree_code code)
7748 {
7749 switch (code)
7750 {
7751 case PLUS_EXPR:
7752 case MULT_EXPR:
7753 case MULT_HIGHPART_EXPR:
7754 case MIN_EXPR:
7755 case MAX_EXPR:
7756 case BIT_IOR_EXPR:
7757 case BIT_XOR_EXPR:
7758 case BIT_AND_EXPR:
7759 case NE_EXPR:
7760 case EQ_EXPR:
7761 case UNORDERED_EXPR:
7762 case ORDERED_EXPR:
7763 case UNEQ_EXPR:
7764 case LTGT_EXPR:
7765 case TRUTH_AND_EXPR:
7766 case TRUTH_XOR_EXPR:
7767 case TRUTH_OR_EXPR:
7768 case WIDEN_MULT_EXPR:
7769 case VEC_WIDEN_MULT_HI_EXPR:
7770 case VEC_WIDEN_MULT_LO_EXPR:
7771 case VEC_WIDEN_MULT_EVEN_EXPR:
7772 case VEC_WIDEN_MULT_ODD_EXPR:
7773 return true;
7774
7775 default:
7776 break;
7777 }
7778 return false;
7779 }
7780
7781 /* Return true if CODE represents a ternary tree code for which the
7782 first two operands are commutative. Otherwise return false. */
7783 bool
7784 commutative_ternary_tree_code (enum tree_code code)
7785 {
7786 switch (code)
7787 {
7788 case WIDEN_MULT_PLUS_EXPR:
7789 case WIDEN_MULT_MINUS_EXPR:
7790 case DOT_PROD_EXPR:
7791 return true;
7792
7793 default:
7794 break;
7795 }
7796 return false;
7797 }
7798
7799 /* Returns true if CODE can overflow. */
7800
7801 bool
7802 operation_can_overflow (enum tree_code code)
7803 {
7804 switch (code)
7805 {
7806 case PLUS_EXPR:
7807 case MINUS_EXPR:
7808 case MULT_EXPR:
7809 case LSHIFT_EXPR:
7810 /* Can overflow in various ways. */
7811 return true;
7812 case TRUNC_DIV_EXPR:
7813 case EXACT_DIV_EXPR:
7814 case FLOOR_DIV_EXPR:
7815 case CEIL_DIV_EXPR:
7816 /* For INT_MIN / -1. */
7817 return true;
7818 case NEGATE_EXPR:
7819 case ABS_EXPR:
7820 /* For -INT_MIN. */
7821 return true;
7822 default:
7823 /* These operators cannot overflow. */
7824 return false;
7825 }
7826 }
7827
7828 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7829 ftrapv doesn't generate trapping insns for CODE. */
7830
7831 bool
7832 operation_no_trapping_overflow (tree type, enum tree_code code)
7833 {
7834 gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7835
7836 /* We don't generate instructions that trap on overflow for complex or vector
7837 types. */
7838 if (!INTEGRAL_TYPE_P (type))
7839 return true;
7840
7841 if (!TYPE_OVERFLOW_TRAPS (type))
7842 return true;
7843
7844 switch (code)
7845 {
7846 case PLUS_EXPR:
7847 case MINUS_EXPR:
7848 case MULT_EXPR:
7849 case NEGATE_EXPR:
7850 case ABS_EXPR:
7851 /* These operators can overflow, and -ftrapv generates trapping code for
7852 these. */
7853 return false;
7854 case TRUNC_DIV_EXPR:
7855 case EXACT_DIV_EXPR:
7856 case FLOOR_DIV_EXPR:
7857 case CEIL_DIV_EXPR:
7858 case LSHIFT_EXPR:
7859 /* These operators can overflow, but -ftrapv does not generate trapping
7860 code for these. */
7861 return true;
7862 default:
7863 /* These operators cannot overflow. */
7864 return true;
7865 }
7866 }
7867
7868 /* Constructors for pointer, array and function types.
7869 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7870 constructed by language-dependent code, not here.) */
7871
7872 /* Construct, lay out and return the type of pointers to TO_TYPE with
7873 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
7874 reference all of memory. If such a type has already been
7875 constructed, reuse it. */
7876
7877 tree
7878 build_pointer_type_for_mode (tree to_type, machine_mode mode,
7879 bool can_alias_all)
7880 {
7881 tree t;
7882 bool could_alias = can_alias_all;
7883
7884 if (to_type == error_mark_node)
7885 return error_mark_node;
7886
7887 /* If the pointed-to type has the may_alias attribute set, force
7888 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7889 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7890 can_alias_all = true;
7891
7892 /* In some cases, languages will have things that aren't a POINTER_TYPE
7893 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7894 In that case, return that type without regard to the rest of our
7895 operands.
7896
7897 ??? This is a kludge, but consistent with the way this function has
7898 always operated and there doesn't seem to be a good way to avoid this
7899 at the moment. */
7900 if (TYPE_POINTER_TO (to_type) != 0
7901 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7902 return TYPE_POINTER_TO (to_type);
7903
7904 /* First, if we already have a type for pointers to TO_TYPE and it's
7905 the proper mode, use it. */
7906 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7907 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7908 return t;
7909
7910 t = make_node (POINTER_TYPE);
7911
7912 TREE_TYPE (t) = to_type;
7913 SET_TYPE_MODE (t, mode);
7914 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7915 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7916 TYPE_POINTER_TO (to_type) = t;
7917
7918 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
7919 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
7920 SET_TYPE_STRUCTURAL_EQUALITY (t);
7921 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
7922 TYPE_CANONICAL (t)
7923 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7924 mode, false);
7925
7926 /* Lay out the type. This function has many callers that are concerned
7927 with expression-construction, and this simplifies them all. */
7928 layout_type (t);
7929
7930 return t;
7931 }
7932
7933 /* By default build pointers in ptr_mode. */
7934
7935 tree
7936 build_pointer_type (tree to_type)
7937 {
7938 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7939 : TYPE_ADDR_SPACE (to_type);
7940 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7941 return build_pointer_type_for_mode (to_type, pointer_mode, false);
7942 }
7943
7944 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
7945
7946 tree
7947 build_reference_type_for_mode (tree to_type, machine_mode mode,
7948 bool can_alias_all)
7949 {
7950 tree t;
7951 bool could_alias = can_alias_all;
7952
7953 if (to_type == error_mark_node)
7954 return error_mark_node;
7955
7956 /* If the pointed-to type has the may_alias attribute set, force
7957 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7958 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7959 can_alias_all = true;
7960
7961 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7962 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7963 In that case, return that type without regard to the rest of our
7964 operands.
7965
7966 ??? This is a kludge, but consistent with the way this function has
7967 always operated and there doesn't seem to be a good way to avoid this
7968 at the moment. */
7969 if (TYPE_REFERENCE_TO (to_type) != 0
7970 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
7971 return TYPE_REFERENCE_TO (to_type);
7972
7973 /* First, if we already have a type for pointers to TO_TYPE and it's
7974 the proper mode, use it. */
7975 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
7976 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7977 return t;
7978
7979 t = make_node (REFERENCE_TYPE);
7980
7981 TREE_TYPE (t) = to_type;
7982 SET_TYPE_MODE (t, mode);
7983 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7984 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
7985 TYPE_REFERENCE_TO (to_type) = t;
7986
7987 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
7988 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
7989 SET_TYPE_STRUCTURAL_EQUALITY (t);
7990 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
7991 TYPE_CANONICAL (t)
7992 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
7993 mode, false);
7994
7995 layout_type (t);
7996
7997 return t;
7998 }
7999
8000
8001 /* Build the node for the type of references-to-TO_TYPE by default
8002 in ptr_mode. */
8003
8004 tree
8005 build_reference_type (tree to_type)
8006 {
8007 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8008 : TYPE_ADDR_SPACE (to_type);
8009 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8010 return build_reference_type_for_mode (to_type, pointer_mode, false);
8011 }
8012
8013 #define MAX_INT_CACHED_PREC \
8014 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8015 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
8016
8017 /* Builds a signed or unsigned integer type of precision PRECISION.
8018 Used for C bitfields whose precision does not match that of
8019 built-in target types. */
8020 tree
8021 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
8022 int unsignedp)
8023 {
8024 tree itype, ret;
8025
8026 if (unsignedp)
8027 unsignedp = MAX_INT_CACHED_PREC + 1;
8028
8029 if (precision <= MAX_INT_CACHED_PREC)
8030 {
8031 itype = nonstandard_integer_type_cache[precision + unsignedp];
8032 if (itype)
8033 return itype;
8034 }
8035
8036 itype = make_node (INTEGER_TYPE);
8037 TYPE_PRECISION (itype) = precision;
8038
8039 if (unsignedp)
8040 fixup_unsigned_type (itype);
8041 else
8042 fixup_signed_type (itype);
8043
8044 inchash::hash hstate;
8045 inchash::add_expr (TYPE_MAX_VALUE (itype), hstate);
8046 ret = type_hash_canon (hstate.end (), itype);
8047 if (precision <= MAX_INT_CACHED_PREC)
8048 nonstandard_integer_type_cache[precision + unsignedp] = ret;
8049
8050 return ret;
8051 }
8052
8053 #define MAX_BOOL_CACHED_PREC \
8054 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8055 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
8056
8057 /* Builds a boolean type of precision PRECISION.
8058 Used for boolean vectors to choose proper vector element size. */
8059 tree
8060 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
8061 {
8062 tree type;
8063
8064 if (precision <= MAX_BOOL_CACHED_PREC)
8065 {
8066 type = nonstandard_boolean_type_cache[precision];
8067 if (type)
8068 return type;
8069 }
8070
8071 type = make_node (BOOLEAN_TYPE);
8072 TYPE_PRECISION (type) = precision;
8073 fixup_signed_type (type);
8074
8075 if (precision <= MAX_INT_CACHED_PREC)
8076 nonstandard_boolean_type_cache[precision] = type;
8077
8078 return type;
8079 }
8080
8081 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
8082 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
8083 is true, reuse such a type that has already been constructed. */
8084
8085 static tree
8086 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
8087 {
8088 tree itype = make_node (INTEGER_TYPE);
8089
8090 TREE_TYPE (itype) = type;
8091
8092 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
8093 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
8094
8095 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
8096 SET_TYPE_MODE (itype, TYPE_MODE (type));
8097 TYPE_SIZE (itype) = TYPE_SIZE (type);
8098 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
8099 SET_TYPE_ALIGN (itype, TYPE_ALIGN (type));
8100 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
8101 SET_TYPE_WARN_IF_NOT_ALIGN (itype, TYPE_WARN_IF_NOT_ALIGN (type));
8102
8103 if (!shared)
8104 return itype;
8105
8106 if ((TYPE_MIN_VALUE (itype)
8107 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
8108 || (TYPE_MAX_VALUE (itype)
8109 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
8110 {
8111 /* Since we cannot reliably merge this type, we need to compare it using
8112 structural equality checks. */
8113 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8114 return itype;
8115 }
8116
8117 hashval_t hash = type_hash_canon_hash (itype);
8118 itype = type_hash_canon (hash, itype);
8119
8120 return itype;
8121 }
8122
8123 /* Wrapper around build_range_type_1 with SHARED set to true. */
8124
8125 tree
8126 build_range_type (tree type, tree lowval, tree highval)
8127 {
8128 return build_range_type_1 (type, lowval, highval, true);
8129 }
8130
8131 /* Wrapper around build_range_type_1 with SHARED set to false. */
8132
8133 tree
8134 build_nonshared_range_type (tree type, tree lowval, tree highval)
8135 {
8136 return build_range_type_1 (type, lowval, highval, false);
8137 }
8138
8139 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
8140 MAXVAL should be the maximum value in the domain
8141 (one less than the length of the array).
8142
8143 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
8144 We don't enforce this limit, that is up to caller (e.g. language front end).
8145 The limit exists because the result is a signed type and we don't handle
8146 sizes that use more than one HOST_WIDE_INT. */
8147
8148 tree
8149 build_index_type (tree maxval)
8150 {
8151 return build_range_type (sizetype, size_zero_node, maxval);
8152 }
8153
8154 /* Return true if the debug information for TYPE, a subtype, should be emitted
8155 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
8156 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
8157 debug info and doesn't reflect the source code. */
8158
8159 bool
8160 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
8161 {
8162 tree base_type = TREE_TYPE (type), low, high;
8163
8164 /* Subrange types have a base type which is an integral type. */
8165 if (!INTEGRAL_TYPE_P (base_type))
8166 return false;
8167
8168 /* Get the real bounds of the subtype. */
8169 if (lang_hooks.types.get_subrange_bounds)
8170 lang_hooks.types.get_subrange_bounds (type, &low, &high);
8171 else
8172 {
8173 low = TYPE_MIN_VALUE (type);
8174 high = TYPE_MAX_VALUE (type);
8175 }
8176
8177 /* If the type and its base type have the same representation and the same
8178 name, then the type is not a subrange but a copy of the base type. */
8179 if ((TREE_CODE (base_type) == INTEGER_TYPE
8180 || TREE_CODE (base_type) == BOOLEAN_TYPE)
8181 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
8182 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
8183 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
8184 && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
8185 return false;
8186
8187 if (lowval)
8188 *lowval = low;
8189 if (highval)
8190 *highval = high;
8191 return true;
8192 }
8193
8194 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
8195 and number of elements specified by the range of values of INDEX_TYPE.
8196 If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type.
8197 If SHARED is true, reuse such a type that has already been constructed.
8198 If SET_CANONICAL is true, compute TYPE_CANONICAL from the element type. */
8199
8200 static tree
8201 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
8202 bool shared, bool set_canonical)
8203 {
8204 tree t;
8205
8206 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
8207 {
8208 error ("arrays of functions are not meaningful");
8209 elt_type = integer_type_node;
8210 }
8211
8212 t = make_node (ARRAY_TYPE);
8213 TREE_TYPE (t) = elt_type;
8214 TYPE_DOMAIN (t) = index_type;
8215 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
8216 TYPE_TYPELESS_STORAGE (t) = typeless_storage;
8217 layout_type (t);
8218
8219 if (shared)
8220 {
8221 hashval_t hash = type_hash_canon_hash (t);
8222 t = type_hash_canon (hash, t);
8223 }
8224
8225 if (TYPE_CANONICAL (t) == t && set_canonical)
8226 {
8227 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
8228 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
8229 || in_lto_p)
8230 SET_TYPE_STRUCTURAL_EQUALITY (t);
8231 else if (TYPE_CANONICAL (elt_type) != elt_type
8232 || (index_type && TYPE_CANONICAL (index_type) != index_type))
8233 TYPE_CANONICAL (t)
8234 = build_array_type_1 (TYPE_CANONICAL (elt_type),
8235 index_type
8236 ? TYPE_CANONICAL (index_type) : NULL_TREE,
8237 typeless_storage, shared, set_canonical);
8238 }
8239
8240 return t;
8241 }
8242
8243 /* Wrapper around build_array_type_1 with SHARED set to true. */
8244
8245 tree
8246 build_array_type (tree elt_type, tree index_type, bool typeless_storage)
8247 {
8248 return
8249 build_array_type_1 (elt_type, index_type, typeless_storage, true, true);
8250 }
8251
8252 /* Wrapper around build_array_type_1 with SHARED set to false. */
8253
8254 tree
8255 build_nonshared_array_type (tree elt_type, tree index_type)
8256 {
8257 return build_array_type_1 (elt_type, index_type, false, false, true);
8258 }
8259
8260 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8261 sizetype. */
8262
8263 tree
8264 build_array_type_nelts (tree elt_type, poly_uint64 nelts)
8265 {
8266 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8267 }
8268
8269 /* Recursively examines the array elements of TYPE, until a non-array
8270 element type is found. */
8271
8272 tree
8273 strip_array_types (tree type)
8274 {
8275 while (TREE_CODE (type) == ARRAY_TYPE)
8276 type = TREE_TYPE (type);
8277
8278 return type;
8279 }
8280
8281 /* Computes the canonical argument types from the argument type list
8282 ARGTYPES.
8283
8284 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8285 on entry to this function, or if any of the ARGTYPES are
8286 structural.
8287
8288 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8289 true on entry to this function, or if any of the ARGTYPES are
8290 non-canonical.
8291
8292 Returns a canonical argument list, which may be ARGTYPES when the
8293 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8294 true) or would not differ from ARGTYPES. */
8295
8296 static tree
8297 maybe_canonicalize_argtypes (tree argtypes,
8298 bool *any_structural_p,
8299 bool *any_noncanonical_p)
8300 {
8301 tree arg;
8302 bool any_noncanonical_argtypes_p = false;
8303
8304 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8305 {
8306 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8307 /* Fail gracefully by stating that the type is structural. */
8308 *any_structural_p = true;
8309 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8310 *any_structural_p = true;
8311 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8312 || TREE_PURPOSE (arg))
8313 /* If the argument has a default argument, we consider it
8314 non-canonical even though the type itself is canonical.
8315 That way, different variants of function and method types
8316 with default arguments will all point to the variant with
8317 no defaults as their canonical type. */
8318 any_noncanonical_argtypes_p = true;
8319 }
8320
8321 if (*any_structural_p)
8322 return argtypes;
8323
8324 if (any_noncanonical_argtypes_p)
8325 {
8326 /* Build the canonical list of argument types. */
8327 tree canon_argtypes = NULL_TREE;
8328 bool is_void = false;
8329
8330 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8331 {
8332 if (arg == void_list_node)
8333 is_void = true;
8334 else
8335 canon_argtypes = tree_cons (NULL_TREE,
8336 TYPE_CANONICAL (TREE_VALUE (arg)),
8337 canon_argtypes);
8338 }
8339
8340 canon_argtypes = nreverse (canon_argtypes);
8341 if (is_void)
8342 canon_argtypes = chainon (canon_argtypes, void_list_node);
8343
8344 /* There is a non-canonical type. */
8345 *any_noncanonical_p = true;
8346 return canon_argtypes;
8347 }
8348
8349 /* The canonical argument types are the same as ARGTYPES. */
8350 return argtypes;
8351 }
8352
8353 /* Construct, lay out and return
8354 the type of functions returning type VALUE_TYPE
8355 given arguments of types ARG_TYPES.
8356 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8357 are data type nodes for the arguments of the function.
8358 If such a type has already been constructed, reuse it. */
8359
8360 tree
8361 build_function_type (tree value_type, tree arg_types)
8362 {
8363 tree t;
8364 inchash::hash hstate;
8365 bool any_structural_p, any_noncanonical_p;
8366 tree canon_argtypes;
8367
8368 gcc_assert (arg_types != error_mark_node);
8369
8370 if (TREE_CODE (value_type) == FUNCTION_TYPE)
8371 {
8372 error ("function return type cannot be function");
8373 value_type = integer_type_node;
8374 }
8375
8376 /* Make a node of the sort we want. */
8377 t = make_node (FUNCTION_TYPE);
8378 TREE_TYPE (t) = value_type;
8379 TYPE_ARG_TYPES (t) = arg_types;
8380
8381 /* If we already have such a type, use the old one. */
8382 hashval_t hash = type_hash_canon_hash (t);
8383 t = type_hash_canon (hash, t);
8384
8385 /* Set up the canonical type. */
8386 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8387 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8388 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8389 &any_structural_p,
8390 &any_noncanonical_p);
8391 if (any_structural_p)
8392 SET_TYPE_STRUCTURAL_EQUALITY (t);
8393 else if (any_noncanonical_p)
8394 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8395 canon_argtypes);
8396
8397 if (!COMPLETE_TYPE_P (t))
8398 layout_type (t);
8399 return t;
8400 }
8401
8402 /* Build a function type. The RETURN_TYPE is the type returned by the
8403 function. If VAARGS is set, no void_type_node is appended to the
8404 list. ARGP must be always be terminated be a NULL_TREE. */
8405
8406 static tree
8407 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8408 {
8409 tree t, args, last;
8410
8411 t = va_arg (argp, tree);
8412 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8413 args = tree_cons (NULL_TREE, t, args);
8414
8415 if (vaargs)
8416 {
8417 last = args;
8418 if (args != NULL_TREE)
8419 args = nreverse (args);
8420 gcc_assert (last != void_list_node);
8421 }
8422 else if (args == NULL_TREE)
8423 args = void_list_node;
8424 else
8425 {
8426 last = args;
8427 args = nreverse (args);
8428 TREE_CHAIN (last) = void_list_node;
8429 }
8430 args = build_function_type (return_type, args);
8431
8432 return args;
8433 }
8434
8435 /* Build a function type. The RETURN_TYPE is the type returned by the
8436 function. If additional arguments are provided, they are
8437 additional argument types. The list of argument types must always
8438 be terminated by NULL_TREE. */
8439
8440 tree
8441 build_function_type_list (tree return_type, ...)
8442 {
8443 tree args;
8444 va_list p;
8445
8446 va_start (p, return_type);
8447 args = build_function_type_list_1 (false, return_type, p);
8448 va_end (p);
8449 return args;
8450 }
8451
8452 /* Build a variable argument function type. The RETURN_TYPE is the
8453 type returned by the function. If additional arguments are provided,
8454 they are additional argument types. The list of argument types must
8455 always be terminated by NULL_TREE. */
8456
8457 tree
8458 build_varargs_function_type_list (tree return_type, ...)
8459 {
8460 tree args;
8461 va_list p;
8462
8463 va_start (p, return_type);
8464 args = build_function_type_list_1 (true, return_type, p);
8465 va_end (p);
8466
8467 return args;
8468 }
8469
8470 /* Build a function type. RETURN_TYPE is the type returned by the
8471 function; VAARGS indicates whether the function takes varargs. The
8472 function takes N named arguments, the types of which are provided in
8473 ARG_TYPES. */
8474
8475 static tree
8476 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8477 tree *arg_types)
8478 {
8479 int i;
8480 tree t = vaargs ? NULL_TREE : void_list_node;
8481
8482 for (i = n - 1; i >= 0; i--)
8483 t = tree_cons (NULL_TREE, arg_types[i], t);
8484
8485 return build_function_type (return_type, t);
8486 }
8487
8488 /* Build a function type. RETURN_TYPE is the type returned by the
8489 function. The function takes N named arguments, the types of which
8490 are provided in ARG_TYPES. */
8491
8492 tree
8493 build_function_type_array (tree return_type, int n, tree *arg_types)
8494 {
8495 return build_function_type_array_1 (false, return_type, n, arg_types);
8496 }
8497
8498 /* Build a variable argument function type. RETURN_TYPE is the type
8499 returned by the function. The function takes N named arguments, the
8500 types of which are provided in ARG_TYPES. */
8501
8502 tree
8503 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8504 {
8505 return build_function_type_array_1 (true, return_type, n, arg_types);
8506 }
8507
8508 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
8509 and ARGTYPES (a TREE_LIST) are the return type and arguments types
8510 for the method. An implicit additional parameter (of type
8511 pointer-to-BASETYPE) is added to the ARGTYPES. */
8512
8513 tree
8514 build_method_type_directly (tree basetype,
8515 tree rettype,
8516 tree argtypes)
8517 {
8518 tree t;
8519 tree ptype;
8520 bool any_structural_p, any_noncanonical_p;
8521 tree canon_argtypes;
8522
8523 /* Make a node of the sort we want. */
8524 t = make_node (METHOD_TYPE);
8525
8526 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8527 TREE_TYPE (t) = rettype;
8528 ptype = build_pointer_type (basetype);
8529
8530 /* The actual arglist for this function includes a "hidden" argument
8531 which is "this". Put it into the list of argument types. */
8532 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8533 TYPE_ARG_TYPES (t) = argtypes;
8534
8535 /* If we already have such a type, use the old one. */
8536 hashval_t hash = type_hash_canon_hash (t);
8537 t = type_hash_canon (hash, t);
8538
8539 /* Set up the canonical type. */
8540 any_structural_p
8541 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8542 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8543 any_noncanonical_p
8544 = (TYPE_CANONICAL (basetype) != basetype
8545 || TYPE_CANONICAL (rettype) != rettype);
8546 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8547 &any_structural_p,
8548 &any_noncanonical_p);
8549 if (any_structural_p)
8550 SET_TYPE_STRUCTURAL_EQUALITY (t);
8551 else if (any_noncanonical_p)
8552 TYPE_CANONICAL (t)
8553 = build_method_type_directly (TYPE_CANONICAL (basetype),
8554 TYPE_CANONICAL (rettype),
8555 canon_argtypes);
8556 if (!COMPLETE_TYPE_P (t))
8557 layout_type (t);
8558
8559 return t;
8560 }
8561
8562 /* Construct, lay out and return the type of methods belonging to class
8563 BASETYPE and whose arguments and values are described by TYPE.
8564 If that type exists already, reuse it.
8565 TYPE must be a FUNCTION_TYPE node. */
8566
8567 tree
8568 build_method_type (tree basetype, tree type)
8569 {
8570 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8571
8572 return build_method_type_directly (basetype,
8573 TREE_TYPE (type),
8574 TYPE_ARG_TYPES (type));
8575 }
8576
8577 /* Construct, lay out and return the type of offsets to a value
8578 of type TYPE, within an object of type BASETYPE.
8579 If a suitable offset type exists already, reuse it. */
8580
8581 tree
8582 build_offset_type (tree basetype, tree type)
8583 {
8584 tree t;
8585
8586 /* Make a node of the sort we want. */
8587 t = make_node (OFFSET_TYPE);
8588
8589 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8590 TREE_TYPE (t) = type;
8591
8592 /* If we already have such a type, use the old one. */
8593 hashval_t hash = type_hash_canon_hash (t);
8594 t = type_hash_canon (hash, t);
8595
8596 if (!COMPLETE_TYPE_P (t))
8597 layout_type (t);
8598
8599 if (TYPE_CANONICAL (t) == t)
8600 {
8601 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8602 || TYPE_STRUCTURAL_EQUALITY_P (type))
8603 SET_TYPE_STRUCTURAL_EQUALITY (t);
8604 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8605 || TYPE_CANONICAL (type) != type)
8606 TYPE_CANONICAL (t)
8607 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8608 TYPE_CANONICAL (type));
8609 }
8610
8611 return t;
8612 }
8613
8614 /* Create a complex type whose components are COMPONENT_TYPE.
8615
8616 If NAMED is true, the type is given a TYPE_NAME. We do not always
8617 do so because this creates a DECL node and thus make the DECL_UIDs
8618 dependent on the type canonicalization hashtable, which is GC-ed,
8619 so the DECL_UIDs would not be stable wrt garbage collection. */
8620
8621 tree
8622 build_complex_type (tree component_type, bool named)
8623 {
8624 gcc_assert (INTEGRAL_TYPE_P (component_type)
8625 || SCALAR_FLOAT_TYPE_P (component_type)
8626 || FIXED_POINT_TYPE_P (component_type));
8627
8628 /* Make a node of the sort we want. */
8629 tree probe = make_node (COMPLEX_TYPE);
8630
8631 TREE_TYPE (probe) = TYPE_MAIN_VARIANT (component_type);
8632
8633 /* If we already have such a type, use the old one. */
8634 hashval_t hash = type_hash_canon_hash (probe);
8635 tree t = type_hash_canon (hash, probe);
8636
8637 if (t == probe)
8638 {
8639 /* We created a new type. The hash insertion will have laid
8640 out the type. We need to check the canonicalization and
8641 maybe set the name. */
8642 gcc_checking_assert (COMPLETE_TYPE_P (t)
8643 && !TYPE_NAME (t)
8644 && TYPE_CANONICAL (t) == t);
8645
8646 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (t)))
8647 SET_TYPE_STRUCTURAL_EQUALITY (t);
8648 else if (TYPE_CANONICAL (TREE_TYPE (t)) != TREE_TYPE (t))
8649 TYPE_CANONICAL (t)
8650 = build_complex_type (TYPE_CANONICAL (TREE_TYPE (t)), named);
8651
8652 /* We need to create a name, since complex is a fundamental type. */
8653 if (named)
8654 {
8655 const char *name = NULL;
8656
8657 if (TREE_TYPE (t) == char_type_node)
8658 name = "complex char";
8659 else if (TREE_TYPE (t) == signed_char_type_node)
8660 name = "complex signed char";
8661 else if (TREE_TYPE (t) == unsigned_char_type_node)
8662 name = "complex unsigned char";
8663 else if (TREE_TYPE (t) == short_integer_type_node)
8664 name = "complex short int";
8665 else if (TREE_TYPE (t) == short_unsigned_type_node)
8666 name = "complex short unsigned int";
8667 else if (TREE_TYPE (t) == integer_type_node)
8668 name = "complex int";
8669 else if (TREE_TYPE (t) == unsigned_type_node)
8670 name = "complex unsigned int";
8671 else if (TREE_TYPE (t) == long_integer_type_node)
8672 name = "complex long int";
8673 else if (TREE_TYPE (t) == long_unsigned_type_node)
8674 name = "complex long unsigned int";
8675 else if (TREE_TYPE (t) == long_long_integer_type_node)
8676 name = "complex long long int";
8677 else if (TREE_TYPE (t) == long_long_unsigned_type_node)
8678 name = "complex long long unsigned int";
8679
8680 if (name != NULL)
8681 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8682 get_identifier (name), t);
8683 }
8684 }
8685
8686 return build_qualified_type (t, TYPE_QUALS (component_type));
8687 }
8688
8689 /* If TYPE is a real or complex floating-point type and the target
8690 does not directly support arithmetic on TYPE then return the wider
8691 type to be used for arithmetic on TYPE. Otherwise, return
8692 NULL_TREE. */
8693
8694 tree
8695 excess_precision_type (tree type)
8696 {
8697 /* The target can give two different responses to the question of
8698 which excess precision mode it would like depending on whether we
8699 are in -fexcess-precision=standard or -fexcess-precision=fast. */
8700
8701 enum excess_precision_type requested_type
8702 = (flag_excess_precision == EXCESS_PRECISION_FAST
8703 ? EXCESS_PRECISION_TYPE_FAST
8704 : EXCESS_PRECISION_TYPE_STANDARD);
8705
8706 enum flt_eval_method target_flt_eval_method
8707 = targetm.c.excess_precision (requested_type);
8708
8709 /* The target should not ask for unpredictable float evaluation (though
8710 it might advertise that implicitly the evaluation is unpredictable,
8711 but we don't care about that here, it will have been reported
8712 elsewhere). If it does ask for unpredictable evaluation, we have
8713 nothing to do here. */
8714 gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE);
8715
8716 /* Nothing to do. The target has asked for all types we know about
8717 to be computed with their native precision and range. */
8718 if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16)
8719 return NULL_TREE;
8720
8721 /* The target will promote this type in a target-dependent way, so excess
8722 precision ought to leave it alone. */
8723 if (targetm.promoted_type (type) != NULL_TREE)
8724 return NULL_TREE;
8725
8726 machine_mode float16_type_mode = (float16_type_node
8727 ? TYPE_MODE (float16_type_node)
8728 : VOIDmode);
8729 machine_mode float_type_mode = TYPE_MODE (float_type_node);
8730 machine_mode double_type_mode = TYPE_MODE (double_type_node);
8731
8732 switch (TREE_CODE (type))
8733 {
8734 case REAL_TYPE:
8735 {
8736 machine_mode type_mode = TYPE_MODE (type);
8737 switch (target_flt_eval_method)
8738 {
8739 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8740 if (type_mode == float16_type_mode)
8741 return float_type_node;
8742 break;
8743 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8744 if (type_mode == float16_type_mode
8745 || type_mode == float_type_mode)
8746 return double_type_node;
8747 break;
8748 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8749 if (type_mode == float16_type_mode
8750 || type_mode == float_type_mode
8751 || type_mode == double_type_mode)
8752 return long_double_type_node;
8753 break;
8754 default:
8755 gcc_unreachable ();
8756 }
8757 break;
8758 }
8759 case COMPLEX_TYPE:
8760 {
8761 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8762 return NULL_TREE;
8763 machine_mode type_mode = TYPE_MODE (TREE_TYPE (type));
8764 switch (target_flt_eval_method)
8765 {
8766 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8767 if (type_mode == float16_type_mode)
8768 return complex_float_type_node;
8769 break;
8770 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8771 if (type_mode == float16_type_mode
8772 || type_mode == float_type_mode)
8773 return complex_double_type_node;
8774 break;
8775 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8776 if (type_mode == float16_type_mode
8777 || type_mode == float_type_mode
8778 || type_mode == double_type_mode)
8779 return complex_long_double_type_node;
8780 break;
8781 default:
8782 gcc_unreachable ();
8783 }
8784 break;
8785 }
8786 default:
8787 break;
8788 }
8789
8790 return NULL_TREE;
8791 }
8792 \f
8793 /* Return OP, stripped of any conversions to wider types as much as is safe.
8794 Converting the value back to OP's type makes a value equivalent to OP.
8795
8796 If FOR_TYPE is nonzero, we return a value which, if converted to
8797 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8798
8799 OP must have integer, real or enumeral type. Pointers are not allowed!
8800
8801 There are some cases where the obvious value we could return
8802 would regenerate to OP if converted to OP's type,
8803 but would not extend like OP to wider types.
8804 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8805 For example, if OP is (unsigned short)(signed char)-1,
8806 we avoid returning (signed char)-1 if FOR_TYPE is int,
8807 even though extending that to an unsigned short would regenerate OP,
8808 since the result of extending (signed char)-1 to (int)
8809 is different from (int) OP. */
8810
8811 tree
8812 get_unwidened (tree op, tree for_type)
8813 {
8814 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
8815 tree type = TREE_TYPE (op);
8816 unsigned final_prec
8817 = TYPE_PRECISION (for_type != 0 ? for_type : type);
8818 int uns
8819 = (for_type != 0 && for_type != type
8820 && final_prec > TYPE_PRECISION (type)
8821 && TYPE_UNSIGNED (type));
8822 tree win = op;
8823
8824 while (CONVERT_EXPR_P (op))
8825 {
8826 int bitschange;
8827
8828 /* TYPE_PRECISION on vector types has different meaning
8829 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8830 so avoid them here. */
8831 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8832 break;
8833
8834 bitschange = TYPE_PRECISION (TREE_TYPE (op))
8835 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8836
8837 /* Truncations are many-one so cannot be removed.
8838 Unless we are later going to truncate down even farther. */
8839 if (bitschange < 0
8840 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8841 break;
8842
8843 /* See what's inside this conversion. If we decide to strip it,
8844 we will set WIN. */
8845 op = TREE_OPERAND (op, 0);
8846
8847 /* If we have not stripped any zero-extensions (uns is 0),
8848 we can strip any kind of extension.
8849 If we have previously stripped a zero-extension,
8850 only zero-extensions can safely be stripped.
8851 Any extension can be stripped if the bits it would produce
8852 are all going to be discarded later by truncating to FOR_TYPE. */
8853
8854 if (bitschange > 0)
8855 {
8856 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8857 win = op;
8858 /* TYPE_UNSIGNED says whether this is a zero-extension.
8859 Let's avoid computing it if it does not affect WIN
8860 and if UNS will not be needed again. */
8861 if ((uns
8862 || CONVERT_EXPR_P (op))
8863 && TYPE_UNSIGNED (TREE_TYPE (op)))
8864 {
8865 uns = 1;
8866 win = op;
8867 }
8868 }
8869 }
8870
8871 /* If we finally reach a constant see if it fits in sth smaller and
8872 in that case convert it. */
8873 if (TREE_CODE (win) == INTEGER_CST)
8874 {
8875 tree wtype = TREE_TYPE (win);
8876 unsigned prec = wi::min_precision (wi::to_wide (win), TYPE_SIGN (wtype));
8877 if (for_type)
8878 prec = MAX (prec, final_prec);
8879 if (prec < TYPE_PRECISION (wtype))
8880 {
8881 tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype));
8882 if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype))
8883 win = fold_convert (t, win);
8884 }
8885 }
8886
8887 return win;
8888 }
8889 \f
8890 /* Return OP or a simpler expression for a narrower value
8891 which can be sign-extended or zero-extended to give back OP.
8892 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8893 or 0 if the value should be sign-extended. */
8894
8895 tree
8896 get_narrower (tree op, int *unsignedp_ptr)
8897 {
8898 int uns = 0;
8899 int first = 1;
8900 tree win = op;
8901 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8902
8903 if (TREE_CODE (op) == COMPOUND_EXPR)
8904 {
8905 do
8906 op = TREE_OPERAND (op, 1);
8907 while (TREE_CODE (op) == COMPOUND_EXPR);
8908 tree ret = get_narrower (op, unsignedp_ptr);
8909 if (ret == op)
8910 return win;
8911 auto_vec <tree, 16> v;
8912 unsigned int i;
8913 for (op = win; TREE_CODE (op) == COMPOUND_EXPR;
8914 op = TREE_OPERAND (op, 1))
8915 v.safe_push (op);
8916 FOR_EACH_VEC_ELT_REVERSE (v, i, op)
8917 ret = build2_loc (EXPR_LOCATION (op), COMPOUND_EXPR,
8918 TREE_TYPE (ret), TREE_OPERAND (op, 0),
8919 ret);
8920 return ret;
8921 }
8922 while (TREE_CODE (op) == NOP_EXPR)
8923 {
8924 int bitschange
8925 = (TYPE_PRECISION (TREE_TYPE (op))
8926 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8927
8928 /* Truncations are many-one so cannot be removed. */
8929 if (bitschange < 0)
8930 break;
8931
8932 /* See what's inside this conversion. If we decide to strip it,
8933 we will set WIN. */
8934
8935 if (bitschange > 0)
8936 {
8937 op = TREE_OPERAND (op, 0);
8938 /* An extension: the outermost one can be stripped,
8939 but remember whether it is zero or sign extension. */
8940 if (first)
8941 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8942 /* Otherwise, if a sign extension has been stripped,
8943 only sign extensions can now be stripped;
8944 if a zero extension has been stripped, only zero-extensions. */
8945 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8946 break;
8947 first = 0;
8948 }
8949 else /* bitschange == 0 */
8950 {
8951 /* A change in nominal type can always be stripped, but we must
8952 preserve the unsignedness. */
8953 if (first)
8954 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8955 first = 0;
8956 op = TREE_OPERAND (op, 0);
8957 /* Keep trying to narrow, but don't assign op to win if it
8958 would turn an integral type into something else. */
8959 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8960 continue;
8961 }
8962
8963 win = op;
8964 }
8965
8966 if (TREE_CODE (op) == COMPONENT_REF
8967 /* Since type_for_size always gives an integer type. */
8968 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8969 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8970 /* Ensure field is laid out already. */
8971 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8972 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
8973 {
8974 unsigned HOST_WIDE_INT innerprec
8975 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
8976 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8977 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8978 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8979
8980 /* We can get this structure field in a narrower type that fits it,
8981 but the resulting extension to its nominal type (a fullword type)
8982 must satisfy the same conditions as for other extensions.
8983
8984 Do this only for fields that are aligned (not bit-fields),
8985 because when bit-field insns will be used there is no
8986 advantage in doing this. */
8987
8988 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8989 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8990 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8991 && type != 0)
8992 {
8993 if (first)
8994 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8995 win = fold_convert (type, op);
8996 }
8997 }
8998
8999 *unsignedp_ptr = uns;
9000 return win;
9001 }
9002 \f
9003 /* Return true if integer constant C has a value that is permissible
9004 for TYPE, an integral type. */
9005
9006 bool
9007 int_fits_type_p (const_tree c, const_tree type)
9008 {
9009 tree type_low_bound, type_high_bound;
9010 bool ok_for_low_bound, ok_for_high_bound;
9011 signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
9012
9013 /* Non-standard boolean types can have arbitrary precision but various
9014 transformations assume that they can only take values 0 and +/-1. */
9015 if (TREE_CODE (type) == BOOLEAN_TYPE)
9016 return wi::fits_to_boolean_p (wi::to_wide (c), type);
9017
9018 retry:
9019 type_low_bound = TYPE_MIN_VALUE (type);
9020 type_high_bound = TYPE_MAX_VALUE (type);
9021
9022 /* If at least one bound of the type is a constant integer, we can check
9023 ourselves and maybe make a decision. If no such decision is possible, but
9024 this type is a subtype, try checking against that. Otherwise, use
9025 fits_to_tree_p, which checks against the precision.
9026
9027 Compute the status for each possibly constant bound, and return if we see
9028 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
9029 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
9030 for "constant known to fit". */
9031
9032 /* Check if c >= type_low_bound. */
9033 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
9034 {
9035 if (tree_int_cst_lt (c, type_low_bound))
9036 return false;
9037 ok_for_low_bound = true;
9038 }
9039 else
9040 ok_for_low_bound = false;
9041
9042 /* Check if c <= type_high_bound. */
9043 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
9044 {
9045 if (tree_int_cst_lt (type_high_bound, c))
9046 return false;
9047 ok_for_high_bound = true;
9048 }
9049 else
9050 ok_for_high_bound = false;
9051
9052 /* If the constant fits both bounds, the result is known. */
9053 if (ok_for_low_bound && ok_for_high_bound)
9054 return true;
9055
9056 /* Perform some generic filtering which may allow making a decision
9057 even if the bounds are not constant. First, negative integers
9058 never fit in unsigned types, */
9059 if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (wi::to_wide (c)))
9060 return false;
9061
9062 /* Second, narrower types always fit in wider ones. */
9063 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
9064 return true;
9065
9066 /* Third, unsigned integers with top bit set never fit signed types. */
9067 if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
9068 {
9069 int prec = GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (TREE_TYPE (c))) - 1;
9070 if (prec < TYPE_PRECISION (TREE_TYPE (c)))
9071 {
9072 /* When a tree_cst is converted to a wide-int, the precision
9073 is taken from the type. However, if the precision of the
9074 mode underneath the type is smaller than that, it is
9075 possible that the value will not fit. The test below
9076 fails if any bit is set between the sign bit of the
9077 underlying mode and the top bit of the type. */
9078 if (wi::zext (wi::to_wide (c), prec - 1) != wi::to_wide (c))
9079 return false;
9080 }
9081 else if (wi::neg_p (wi::to_wide (c)))
9082 return false;
9083 }
9084
9085 /* If we haven't been able to decide at this point, there nothing more we
9086 can check ourselves here. Look at the base type if we have one and it
9087 has the same precision. */
9088 if (TREE_CODE (type) == INTEGER_TYPE
9089 && TREE_TYPE (type) != 0
9090 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
9091 {
9092 type = TREE_TYPE (type);
9093 goto retry;
9094 }
9095
9096 /* Or to fits_to_tree_p, if nothing else. */
9097 return wi::fits_to_tree_p (wi::to_wide (c), type);
9098 }
9099
9100 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
9101 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
9102 represented (assuming two's-complement arithmetic) within the bit
9103 precision of the type are returned instead. */
9104
9105 void
9106 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
9107 {
9108 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
9109 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
9110 wi::to_mpz (wi::to_wide (TYPE_MIN_VALUE (type)), min, TYPE_SIGN (type));
9111 else
9112 {
9113 if (TYPE_UNSIGNED (type))
9114 mpz_set_ui (min, 0);
9115 else
9116 {
9117 wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
9118 wi::to_mpz (mn, min, SIGNED);
9119 }
9120 }
9121
9122 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
9123 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
9124 wi::to_mpz (wi::to_wide (TYPE_MAX_VALUE (type)), max, TYPE_SIGN (type));
9125 else
9126 {
9127 wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
9128 wi::to_mpz (mn, max, TYPE_SIGN (type));
9129 }
9130 }
9131
9132 /* Return true if VAR is an automatic variable. */
9133
9134 bool
9135 auto_var_p (const_tree var)
9136 {
9137 return ((((VAR_P (var) && ! DECL_EXTERNAL (var))
9138 || TREE_CODE (var) == PARM_DECL)
9139 && ! TREE_STATIC (var))
9140 || TREE_CODE (var) == RESULT_DECL);
9141 }
9142
9143 /* Return true if VAR is an automatic variable defined in function FN. */
9144
9145 bool
9146 auto_var_in_fn_p (const_tree var, const_tree fn)
9147 {
9148 return (DECL_P (var) && DECL_CONTEXT (var) == fn
9149 && (auto_var_p (var)
9150 || TREE_CODE (var) == LABEL_DECL));
9151 }
9152
9153 /* Subprogram of following function. Called by walk_tree.
9154
9155 Return *TP if it is an automatic variable or parameter of the
9156 function passed in as DATA. */
9157
9158 static tree
9159 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
9160 {
9161 tree fn = (tree) data;
9162
9163 if (TYPE_P (*tp))
9164 *walk_subtrees = 0;
9165
9166 else if (DECL_P (*tp)
9167 && auto_var_in_fn_p (*tp, fn))
9168 return *tp;
9169
9170 return NULL_TREE;
9171 }
9172
9173 /* Returns true if T is, contains, or refers to a type with variable
9174 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
9175 arguments, but not the return type. If FN is nonzero, only return
9176 true if a modifier of the type or position of FN is a variable or
9177 parameter inside FN.
9178
9179 This concept is more general than that of C99 'variably modified types':
9180 in C99, a struct type is never variably modified because a VLA may not
9181 appear as a structure member. However, in GNU C code like:
9182
9183 struct S { int i[f()]; };
9184
9185 is valid, and other languages may define similar constructs. */
9186
9187 bool
9188 variably_modified_type_p (tree type, tree fn)
9189 {
9190 tree t;
9191
9192 /* Test if T is either variable (if FN is zero) or an expression containing
9193 a variable in FN. If TYPE isn't gimplified, return true also if
9194 gimplify_one_sizepos would gimplify the expression into a local
9195 variable. */
9196 #define RETURN_TRUE_IF_VAR(T) \
9197 do { tree _t = (T); \
9198 if (_t != NULL_TREE \
9199 && _t != error_mark_node \
9200 && !CONSTANT_CLASS_P (_t) \
9201 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
9202 && (!fn \
9203 || (!TYPE_SIZES_GIMPLIFIED (type) \
9204 && (TREE_CODE (_t) != VAR_DECL \
9205 && !CONTAINS_PLACEHOLDER_P (_t))) \
9206 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
9207 return true; } while (0)
9208
9209 if (type == error_mark_node)
9210 return false;
9211
9212 /* If TYPE itself has variable size, it is variably modified. */
9213 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
9214 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
9215
9216 switch (TREE_CODE (type))
9217 {
9218 case POINTER_TYPE:
9219 case REFERENCE_TYPE:
9220 case VECTOR_TYPE:
9221 /* Ada can have pointer types refering to themselves indirectly. */
9222 if (TREE_VISITED (type))
9223 return false;
9224 TREE_VISITED (type) = true;
9225 if (variably_modified_type_p (TREE_TYPE (type), fn))
9226 {
9227 TREE_VISITED (type) = false;
9228 return true;
9229 }
9230 TREE_VISITED (type) = false;
9231 break;
9232
9233 case FUNCTION_TYPE:
9234 case METHOD_TYPE:
9235 /* If TYPE is a function type, it is variably modified if the
9236 return type is variably modified. */
9237 if (variably_modified_type_p (TREE_TYPE (type), fn))
9238 return true;
9239 break;
9240
9241 case INTEGER_TYPE:
9242 case REAL_TYPE:
9243 case FIXED_POINT_TYPE:
9244 case ENUMERAL_TYPE:
9245 case BOOLEAN_TYPE:
9246 /* Scalar types are variably modified if their end points
9247 aren't constant. */
9248 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
9249 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
9250 break;
9251
9252 case RECORD_TYPE:
9253 case UNION_TYPE:
9254 case QUAL_UNION_TYPE:
9255 /* We can't see if any of the fields are variably-modified by the
9256 definition we normally use, since that would produce infinite
9257 recursion via pointers. */
9258 /* This is variably modified if some field's type is. */
9259 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
9260 if (TREE_CODE (t) == FIELD_DECL)
9261 {
9262 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
9263 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
9264 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
9265
9266 /* If the type is a qualified union, then the DECL_QUALIFIER
9267 of fields can also be an expression containing a variable. */
9268 if (TREE_CODE (type) == QUAL_UNION_TYPE)
9269 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
9270
9271 /* If the field is a qualified union, then it's only a container
9272 for what's inside so we look into it. That's necessary in LTO
9273 mode because the sizes of the field tested above have been set
9274 to PLACEHOLDER_EXPRs by free_lang_data. */
9275 if (TREE_CODE (TREE_TYPE (t)) == QUAL_UNION_TYPE
9276 && variably_modified_type_p (TREE_TYPE (t), fn))
9277 return true;
9278 }
9279 break;
9280
9281 case ARRAY_TYPE:
9282 /* Do not call ourselves to avoid infinite recursion. This is
9283 variably modified if the element type is. */
9284 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
9285 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
9286 break;
9287
9288 default:
9289 break;
9290 }
9291
9292 /* The current language may have other cases to check, but in general,
9293 all other types are not variably modified. */
9294 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
9295
9296 #undef RETURN_TRUE_IF_VAR
9297 }
9298
9299 /* Given a DECL or TYPE, return the scope in which it was declared, or
9300 NULL_TREE if there is no containing scope. */
9301
9302 tree
9303 get_containing_scope (const_tree t)
9304 {
9305 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
9306 }
9307
9308 /* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL. */
9309
9310 const_tree
9311 get_ultimate_context (const_tree decl)
9312 {
9313 while (decl && TREE_CODE (decl) != TRANSLATION_UNIT_DECL)
9314 {
9315 if (TREE_CODE (decl) == BLOCK)
9316 decl = BLOCK_SUPERCONTEXT (decl);
9317 else
9318 decl = get_containing_scope (decl);
9319 }
9320 return decl;
9321 }
9322
9323 /* Return the innermost context enclosing DECL that is
9324 a FUNCTION_DECL, or zero if none. */
9325
9326 tree
9327 decl_function_context (const_tree decl)
9328 {
9329 tree context;
9330
9331 if (TREE_CODE (decl) == ERROR_MARK)
9332 return 0;
9333
9334 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
9335 where we look up the function at runtime. Such functions always take
9336 a first argument of type 'pointer to real context'.
9337
9338 C++ should really be fixed to use DECL_CONTEXT for the real context,
9339 and use something else for the "virtual context". */
9340 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
9341 context
9342 = TYPE_MAIN_VARIANT
9343 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
9344 else
9345 context = DECL_CONTEXT (decl);
9346
9347 while (context && TREE_CODE (context) != FUNCTION_DECL)
9348 {
9349 if (TREE_CODE (context) == BLOCK)
9350 context = BLOCK_SUPERCONTEXT (context);
9351 else
9352 context = get_containing_scope (context);
9353 }
9354
9355 return context;
9356 }
9357
9358 /* Return the innermost context enclosing DECL that is
9359 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9360 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
9361
9362 tree
9363 decl_type_context (const_tree decl)
9364 {
9365 tree context = DECL_CONTEXT (decl);
9366
9367 while (context)
9368 switch (TREE_CODE (context))
9369 {
9370 case NAMESPACE_DECL:
9371 case TRANSLATION_UNIT_DECL:
9372 return NULL_TREE;
9373
9374 case RECORD_TYPE:
9375 case UNION_TYPE:
9376 case QUAL_UNION_TYPE:
9377 return context;
9378
9379 case TYPE_DECL:
9380 case FUNCTION_DECL:
9381 context = DECL_CONTEXT (context);
9382 break;
9383
9384 case BLOCK:
9385 context = BLOCK_SUPERCONTEXT (context);
9386 break;
9387
9388 default:
9389 gcc_unreachable ();
9390 }
9391
9392 return NULL_TREE;
9393 }
9394
9395 /* CALL is a CALL_EXPR. Return the declaration for the function
9396 called, or NULL_TREE if the called function cannot be
9397 determined. */
9398
9399 tree
9400 get_callee_fndecl (const_tree call)
9401 {
9402 tree addr;
9403
9404 if (call == error_mark_node)
9405 return error_mark_node;
9406
9407 /* It's invalid to call this function with anything but a
9408 CALL_EXPR. */
9409 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9410
9411 /* The first operand to the CALL is the address of the function
9412 called. */
9413 addr = CALL_EXPR_FN (call);
9414
9415 /* If there is no function, return early. */
9416 if (addr == NULL_TREE)
9417 return NULL_TREE;
9418
9419 STRIP_NOPS (addr);
9420
9421 /* If this is a readonly function pointer, extract its initial value. */
9422 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9423 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9424 && DECL_INITIAL (addr))
9425 addr = DECL_INITIAL (addr);
9426
9427 /* If the address is just `&f' for some function `f', then we know
9428 that `f' is being called. */
9429 if (TREE_CODE (addr) == ADDR_EXPR
9430 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9431 return TREE_OPERAND (addr, 0);
9432
9433 /* We couldn't figure out what was being called. */
9434 return NULL_TREE;
9435 }
9436
9437 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
9438 return the associated function code, otherwise return CFN_LAST. */
9439
9440 combined_fn
9441 get_call_combined_fn (const_tree call)
9442 {
9443 /* It's invalid to call this function with anything but a CALL_EXPR. */
9444 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9445
9446 if (!CALL_EXPR_FN (call))
9447 return as_combined_fn (CALL_EXPR_IFN (call));
9448
9449 tree fndecl = get_callee_fndecl (call);
9450 if (fndecl && fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
9451 return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
9452
9453 return CFN_LAST;
9454 }
9455
9456 /* Comparator of indices based on tree_node_counts. */
9457
9458 static int
9459 tree_nodes_cmp (const void *p1, const void *p2)
9460 {
9461 const unsigned *n1 = (const unsigned *)p1;
9462 const unsigned *n2 = (const unsigned *)p2;
9463
9464 return tree_node_counts[*n1] - tree_node_counts[*n2];
9465 }
9466
9467 /* Comparator of indices based on tree_code_counts. */
9468
9469 static int
9470 tree_codes_cmp (const void *p1, const void *p2)
9471 {
9472 const unsigned *n1 = (const unsigned *)p1;
9473 const unsigned *n2 = (const unsigned *)p2;
9474
9475 return tree_code_counts[*n1] - tree_code_counts[*n2];
9476 }
9477
9478 #define TREE_MEM_USAGE_SPACES 40
9479
9480 /* Print debugging information about tree nodes generated during the compile,
9481 and any language-specific information. */
9482
9483 void
9484 dump_tree_statistics (void)
9485 {
9486 if (GATHER_STATISTICS)
9487 {
9488 uint64_t total_nodes, total_bytes;
9489 fprintf (stderr, "\nKind Nodes Bytes\n");
9490 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9491 total_nodes = total_bytes = 0;
9492
9493 {
9494 auto_vec<unsigned> indices (all_kinds);
9495 for (unsigned i = 0; i < all_kinds; i++)
9496 indices.quick_push (i);
9497 indices.qsort (tree_nodes_cmp);
9498
9499 for (unsigned i = 0; i < (int) all_kinds; i++)
9500 {
9501 unsigned j = indices[i];
9502 fprintf (stderr, "%-20s %6" PRIu64 "%c %9" PRIu64 "%c\n",
9503 tree_node_kind_names[j], SIZE_AMOUNT (tree_node_counts[j]),
9504 SIZE_AMOUNT (tree_node_sizes[j]));
9505 total_nodes += tree_node_counts[j];
9506 total_bytes += tree_node_sizes[j];
9507 }
9508 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9509 fprintf (stderr, "%-20s %6" PRIu64 "%c %9" PRIu64 "%c\n", "Total",
9510 SIZE_AMOUNT (total_nodes), SIZE_AMOUNT (total_bytes));
9511 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9512 }
9513
9514 {
9515 fprintf (stderr, "Code Nodes\n");
9516 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9517
9518 auto_vec<unsigned> indices (MAX_TREE_CODES);
9519 for (unsigned i = 0; i < MAX_TREE_CODES; i++)
9520 indices.quick_push (i);
9521 indices.qsort (tree_codes_cmp);
9522
9523 for (unsigned i = 0; i < MAX_TREE_CODES; i++)
9524 {
9525 unsigned j = indices[i];
9526 fprintf (stderr, "%-32s %6" PRIu64 "%c\n",
9527 get_tree_code_name ((enum tree_code) j),
9528 SIZE_AMOUNT (tree_code_counts[j]));
9529 }
9530 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9531 fprintf (stderr, "\n");
9532 ssanames_print_statistics ();
9533 fprintf (stderr, "\n");
9534 phinodes_print_statistics ();
9535 fprintf (stderr, "\n");
9536 }
9537 }
9538 else
9539 fprintf (stderr, "(No per-node statistics)\n");
9540
9541 print_type_hash_statistics ();
9542 print_debug_expr_statistics ();
9543 print_value_expr_statistics ();
9544 lang_hooks.print_statistics ();
9545 }
9546 \f
9547 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9548
9549 /* Generate a crc32 of the low BYTES bytes of VALUE. */
9550
9551 unsigned
9552 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes)
9553 {
9554 /* This relies on the raw feedback's top 4 bits being zero. */
9555 #define FEEDBACK(X) ((X) * 0x04c11db7)
9556 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \
9557 ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8))
9558 static const unsigned syndromes[16] =
9559 {
9560 SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3),
9561 SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7),
9562 SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb),
9563 SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf),
9564 };
9565 #undef FEEDBACK
9566 #undef SYNDROME
9567
9568 value <<= (32 - bytes * 8);
9569 for (unsigned ix = bytes * 2; ix--; value <<= 4)
9570 {
9571 unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf];
9572
9573 chksum = (chksum << 4) ^ feedback;
9574 }
9575
9576 return chksum;
9577 }
9578
9579 /* Generate a crc32 of a string. */
9580
9581 unsigned
9582 crc32_string (unsigned chksum, const char *string)
9583 {
9584 do
9585 chksum = crc32_byte (chksum, *string);
9586 while (*string++);
9587 return chksum;
9588 }
9589
9590 /* P is a string that will be used in a symbol. Mask out any characters
9591 that are not valid in that context. */
9592
9593 void
9594 clean_symbol_name (char *p)
9595 {
9596 for (; *p; p++)
9597 if (! (ISALNUM (*p)
9598 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
9599 || *p == '$'
9600 #endif
9601 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
9602 || *p == '.'
9603 #endif
9604 ))
9605 *p = '_';
9606 }
9607
9608 static GTY(()) unsigned anon_cnt = 0; /* Saved for PCH. */
9609
9610 /* Create a unique anonymous identifier. The identifier is still a
9611 valid assembly label. */
9612
9613 tree
9614 make_anon_name ()
9615 {
9616 const char *fmt =
9617 #if !defined (NO_DOT_IN_LABEL)
9618 "."
9619 #elif !defined (NO_DOLLAR_IN_LABEL)
9620 "$"
9621 #else
9622 "_"
9623 #endif
9624 "_anon_%d";
9625
9626 char buf[24];
9627 int len = snprintf (buf, sizeof (buf), fmt, anon_cnt++);
9628 gcc_checking_assert (len < int (sizeof (buf)));
9629
9630 tree id = get_identifier_with_length (buf, len);
9631 IDENTIFIER_ANON_P (id) = true;
9632
9633 return id;
9634 }
9635
9636 /* Generate a name for a special-purpose function.
9637 The generated name may need to be unique across the whole link.
9638 Changes to this function may also require corresponding changes to
9639 xstrdup_mask_random.
9640 TYPE is some string to identify the purpose of this function to the
9641 linker or collect2; it must start with an uppercase letter,
9642 one of:
9643 I - for constructors
9644 D - for destructors
9645 N - for C++ anonymous namespaces
9646 F - for DWARF unwind frame information. */
9647
9648 tree
9649 get_file_function_name (const char *type)
9650 {
9651 char *buf;
9652 const char *p;
9653 char *q;
9654
9655 /* If we already have a name we know to be unique, just use that. */
9656 if (first_global_object_name)
9657 p = q = ASTRDUP (first_global_object_name);
9658 /* If the target is handling the constructors/destructors, they
9659 will be local to this file and the name is only necessary for
9660 debugging purposes.
9661 We also assign sub_I and sub_D sufixes to constructors called from
9662 the global static constructors. These are always local. */
9663 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9664 || (strncmp (type, "sub_", 4) == 0
9665 && (type[4] == 'I' || type[4] == 'D')))
9666 {
9667 const char *file = main_input_filename;
9668 if (! file)
9669 file = LOCATION_FILE (input_location);
9670 /* Just use the file's basename, because the full pathname
9671 might be quite long. */
9672 p = q = ASTRDUP (lbasename (file));
9673 }
9674 else
9675 {
9676 /* Otherwise, the name must be unique across the entire link.
9677 We don't have anything that we know to be unique to this translation
9678 unit, so use what we do have and throw in some randomness. */
9679 unsigned len;
9680 const char *name = weak_global_object_name;
9681 const char *file = main_input_filename;
9682
9683 if (! name)
9684 name = "";
9685 if (! file)
9686 file = LOCATION_FILE (input_location);
9687
9688 len = strlen (file);
9689 q = (char *) alloca (9 + 19 + len + 1);
9690 memcpy (q, file, len + 1);
9691
9692 snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9693 crc32_string (0, name), get_random_seed (false));
9694
9695 p = q;
9696 }
9697
9698 clean_symbol_name (q);
9699 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9700 + strlen (type));
9701
9702 /* Set up the name of the file-level functions we may need.
9703 Use a global object (which is already required to be unique over
9704 the program) rather than the file name (which imposes extra
9705 constraints). */
9706 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9707
9708 return get_identifier (buf);
9709 }
9710 \f
9711 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9712
9713 /* Complain that the tree code of NODE does not match the expected 0
9714 terminated list of trailing codes. The trailing code list can be
9715 empty, for a more vague error message. FILE, LINE, and FUNCTION
9716 are of the caller. */
9717
9718 void
9719 tree_check_failed (const_tree node, const char *file,
9720 int line, const char *function, ...)
9721 {
9722 va_list args;
9723 const char *buffer;
9724 unsigned length = 0;
9725 enum tree_code code;
9726
9727 va_start (args, function);
9728 while ((code = (enum tree_code) va_arg (args, int)))
9729 length += 4 + strlen (get_tree_code_name (code));
9730 va_end (args);
9731 if (length)
9732 {
9733 char *tmp;
9734 va_start (args, function);
9735 length += strlen ("expected ");
9736 buffer = tmp = (char *) alloca (length);
9737 length = 0;
9738 while ((code = (enum tree_code) va_arg (args, int)))
9739 {
9740 const char *prefix = length ? " or " : "expected ";
9741
9742 strcpy (tmp + length, prefix);
9743 length += strlen (prefix);
9744 strcpy (tmp + length, get_tree_code_name (code));
9745 length += strlen (get_tree_code_name (code));
9746 }
9747 va_end (args);
9748 }
9749 else
9750 buffer = "unexpected node";
9751
9752 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9753 buffer, get_tree_code_name (TREE_CODE (node)),
9754 function, trim_filename (file), line);
9755 }
9756
9757 /* Complain that the tree code of NODE does match the expected 0
9758 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9759 the caller. */
9760
9761 void
9762 tree_not_check_failed (const_tree node, const char *file,
9763 int line, const char *function, ...)
9764 {
9765 va_list args;
9766 char *buffer;
9767 unsigned length = 0;
9768 enum tree_code code;
9769
9770 va_start (args, function);
9771 while ((code = (enum tree_code) va_arg (args, int)))
9772 length += 4 + strlen (get_tree_code_name (code));
9773 va_end (args);
9774 va_start (args, function);
9775 buffer = (char *) alloca (length);
9776 length = 0;
9777 while ((code = (enum tree_code) va_arg (args, int)))
9778 {
9779 if (length)
9780 {
9781 strcpy (buffer + length, " or ");
9782 length += 4;
9783 }
9784 strcpy (buffer + length, get_tree_code_name (code));
9785 length += strlen (get_tree_code_name (code));
9786 }
9787 va_end (args);
9788
9789 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9790 buffer, get_tree_code_name (TREE_CODE (node)),
9791 function, trim_filename (file), line);
9792 }
9793
9794 /* Similar to tree_check_failed, except that we check for a class of tree
9795 code, given in CL. */
9796
9797 void
9798 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9799 const char *file, int line, const char *function)
9800 {
9801 internal_error
9802 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9803 TREE_CODE_CLASS_STRING (cl),
9804 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9805 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9806 }
9807
9808 /* Similar to tree_check_failed, except that instead of specifying a
9809 dozen codes, use the knowledge that they're all sequential. */
9810
9811 void
9812 tree_range_check_failed (const_tree node, const char *file, int line,
9813 const char *function, enum tree_code c1,
9814 enum tree_code c2)
9815 {
9816 char *buffer;
9817 unsigned length = 0;
9818 unsigned int c;
9819
9820 for (c = c1; c <= c2; ++c)
9821 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9822
9823 length += strlen ("expected ");
9824 buffer = (char *) alloca (length);
9825 length = 0;
9826
9827 for (c = c1; c <= c2; ++c)
9828 {
9829 const char *prefix = length ? " or " : "expected ";
9830
9831 strcpy (buffer + length, prefix);
9832 length += strlen (prefix);
9833 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9834 length += strlen (get_tree_code_name ((enum tree_code) c));
9835 }
9836
9837 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9838 buffer, get_tree_code_name (TREE_CODE (node)),
9839 function, trim_filename (file), line);
9840 }
9841
9842
9843 /* Similar to tree_check_failed, except that we check that a tree does
9844 not have the specified code, given in CL. */
9845
9846 void
9847 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9848 const char *file, int line, const char *function)
9849 {
9850 internal_error
9851 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9852 TREE_CODE_CLASS_STRING (cl),
9853 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9854 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9855 }
9856
9857
9858 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9859
9860 void
9861 omp_clause_check_failed (const_tree node, const char *file, int line,
9862 const char *function, enum omp_clause_code code)
9863 {
9864 internal_error ("tree check: expected %<omp_clause %s%>, have %qs "
9865 "in %s, at %s:%d",
9866 omp_clause_code_name[code],
9867 get_tree_code_name (TREE_CODE (node)),
9868 function, trim_filename (file), line);
9869 }
9870
9871
9872 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9873
9874 void
9875 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9876 const char *function, enum omp_clause_code c1,
9877 enum omp_clause_code c2)
9878 {
9879 char *buffer;
9880 unsigned length = 0;
9881 unsigned int c;
9882
9883 for (c = c1; c <= c2; ++c)
9884 length += 4 + strlen (omp_clause_code_name[c]);
9885
9886 length += strlen ("expected ");
9887 buffer = (char *) alloca (length);
9888 length = 0;
9889
9890 for (c = c1; c <= c2; ++c)
9891 {
9892 const char *prefix = length ? " or " : "expected ";
9893
9894 strcpy (buffer + length, prefix);
9895 length += strlen (prefix);
9896 strcpy (buffer + length, omp_clause_code_name[c]);
9897 length += strlen (omp_clause_code_name[c]);
9898 }
9899
9900 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9901 buffer, omp_clause_code_name[TREE_CODE (node)],
9902 function, trim_filename (file), line);
9903 }
9904
9905
9906 #undef DEFTREESTRUCT
9907 #define DEFTREESTRUCT(VAL, NAME) NAME,
9908
9909 static const char *ts_enum_names[] = {
9910 #include "treestruct.def"
9911 };
9912 #undef DEFTREESTRUCT
9913
9914 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9915
9916 /* Similar to tree_class_check_failed, except that we check for
9917 whether CODE contains the tree structure identified by EN. */
9918
9919 void
9920 tree_contains_struct_check_failed (const_tree node,
9921 const enum tree_node_structure_enum en,
9922 const char *file, int line,
9923 const char *function)
9924 {
9925 internal_error
9926 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9927 TS_ENUM_NAME (en),
9928 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9929 }
9930
9931
9932 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9933 (dynamically sized) vector. */
9934
9935 void
9936 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
9937 const char *function)
9938 {
9939 internal_error
9940 ("tree check: accessed elt %d of %<tree_int_cst%> with %d elts in %s, "
9941 "at %s:%d",
9942 idx + 1, len, function, trim_filename (file), line);
9943 }
9944
9945 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9946 (dynamically sized) vector. */
9947
9948 void
9949 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9950 const char *function)
9951 {
9952 internal_error
9953 ("tree check: accessed elt %d of %<tree_vec%> with %d elts in %s, at %s:%d",
9954 idx + 1, len, function, trim_filename (file), line);
9955 }
9956
9957 /* Similar to above, except that the check is for the bounds of the operand
9958 vector of an expression node EXP. */
9959
9960 void
9961 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9962 int line, const char *function)
9963 {
9964 enum tree_code code = TREE_CODE (exp);
9965 internal_error
9966 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9967 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9968 function, trim_filename (file), line);
9969 }
9970
9971 /* Similar to above, except that the check is for the number of
9972 operands of an OMP_CLAUSE node. */
9973
9974 void
9975 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9976 int line, const char *function)
9977 {
9978 internal_error
9979 ("tree check: accessed operand %d of %<omp_clause %s%> with %d operands "
9980 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9981 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9982 trim_filename (file), line);
9983 }
9984 #endif /* ENABLE_TREE_CHECKING */
9985 \f
9986 /* Create a new vector type node holding NUNITS units of type INNERTYPE,
9987 and mapped to the machine mode MODE. Initialize its fields and build
9988 the information necessary for debugging output. */
9989
9990 static tree
9991 make_vector_type (tree innertype, poly_int64 nunits, machine_mode mode)
9992 {
9993 tree t;
9994 tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
9995
9996 t = make_node (VECTOR_TYPE);
9997 TREE_TYPE (t) = mv_innertype;
9998 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9999 SET_TYPE_MODE (t, mode);
10000
10001 if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
10002 SET_TYPE_STRUCTURAL_EQUALITY (t);
10003 else if ((TYPE_CANONICAL (mv_innertype) != innertype
10004 || mode != VOIDmode)
10005 && !VECTOR_BOOLEAN_TYPE_P (t))
10006 TYPE_CANONICAL (t)
10007 = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
10008
10009 layout_type (t);
10010
10011 hashval_t hash = type_hash_canon_hash (t);
10012 t = type_hash_canon (hash, t);
10013
10014 /* We have built a main variant, based on the main variant of the
10015 inner type. Use it to build the variant we return. */
10016 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
10017 && TREE_TYPE (t) != innertype)
10018 return build_type_attribute_qual_variant (t,
10019 TYPE_ATTRIBUTES (innertype),
10020 TYPE_QUALS (innertype));
10021
10022 return t;
10023 }
10024
10025 static tree
10026 make_or_reuse_type (unsigned size, int unsignedp)
10027 {
10028 int i;
10029
10030 if (size == INT_TYPE_SIZE)
10031 return unsignedp ? unsigned_type_node : integer_type_node;
10032 if (size == CHAR_TYPE_SIZE)
10033 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
10034 if (size == SHORT_TYPE_SIZE)
10035 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
10036 if (size == LONG_TYPE_SIZE)
10037 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
10038 if (size == LONG_LONG_TYPE_SIZE)
10039 return (unsignedp ? long_long_unsigned_type_node
10040 : long_long_integer_type_node);
10041
10042 for (i = 0; i < NUM_INT_N_ENTS; i ++)
10043 if (size == int_n_data[i].bitsize
10044 && int_n_enabled_p[i])
10045 return (unsignedp ? int_n_trees[i].unsigned_type
10046 : int_n_trees[i].signed_type);
10047
10048 if (unsignedp)
10049 return make_unsigned_type (size);
10050 else
10051 return make_signed_type (size);
10052 }
10053
10054 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
10055
10056 static tree
10057 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
10058 {
10059 if (satp)
10060 {
10061 if (size == SHORT_FRACT_TYPE_SIZE)
10062 return unsignedp ? sat_unsigned_short_fract_type_node
10063 : sat_short_fract_type_node;
10064 if (size == FRACT_TYPE_SIZE)
10065 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
10066 if (size == LONG_FRACT_TYPE_SIZE)
10067 return unsignedp ? sat_unsigned_long_fract_type_node
10068 : sat_long_fract_type_node;
10069 if (size == LONG_LONG_FRACT_TYPE_SIZE)
10070 return unsignedp ? sat_unsigned_long_long_fract_type_node
10071 : sat_long_long_fract_type_node;
10072 }
10073 else
10074 {
10075 if (size == SHORT_FRACT_TYPE_SIZE)
10076 return unsignedp ? unsigned_short_fract_type_node
10077 : short_fract_type_node;
10078 if (size == FRACT_TYPE_SIZE)
10079 return unsignedp ? unsigned_fract_type_node : fract_type_node;
10080 if (size == LONG_FRACT_TYPE_SIZE)
10081 return unsignedp ? unsigned_long_fract_type_node
10082 : long_fract_type_node;
10083 if (size == LONG_LONG_FRACT_TYPE_SIZE)
10084 return unsignedp ? unsigned_long_long_fract_type_node
10085 : long_long_fract_type_node;
10086 }
10087
10088 return make_fract_type (size, unsignedp, satp);
10089 }
10090
10091 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
10092
10093 static tree
10094 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
10095 {
10096 if (satp)
10097 {
10098 if (size == SHORT_ACCUM_TYPE_SIZE)
10099 return unsignedp ? sat_unsigned_short_accum_type_node
10100 : sat_short_accum_type_node;
10101 if (size == ACCUM_TYPE_SIZE)
10102 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
10103 if (size == LONG_ACCUM_TYPE_SIZE)
10104 return unsignedp ? sat_unsigned_long_accum_type_node
10105 : sat_long_accum_type_node;
10106 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10107 return unsignedp ? sat_unsigned_long_long_accum_type_node
10108 : sat_long_long_accum_type_node;
10109 }
10110 else
10111 {
10112 if (size == SHORT_ACCUM_TYPE_SIZE)
10113 return unsignedp ? unsigned_short_accum_type_node
10114 : short_accum_type_node;
10115 if (size == ACCUM_TYPE_SIZE)
10116 return unsignedp ? unsigned_accum_type_node : accum_type_node;
10117 if (size == LONG_ACCUM_TYPE_SIZE)
10118 return unsignedp ? unsigned_long_accum_type_node
10119 : long_accum_type_node;
10120 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10121 return unsignedp ? unsigned_long_long_accum_type_node
10122 : long_long_accum_type_node;
10123 }
10124
10125 return make_accum_type (size, unsignedp, satp);
10126 }
10127
10128
10129 /* Create an atomic variant node for TYPE. This routine is called
10130 during initialization of data types to create the 5 basic atomic
10131 types. The generic build_variant_type function requires these to
10132 already be set up in order to function properly, so cannot be
10133 called from there. If ALIGN is non-zero, then ensure alignment is
10134 overridden to this value. */
10135
10136 static tree
10137 build_atomic_base (tree type, unsigned int align)
10138 {
10139 tree t;
10140
10141 /* Make sure its not already registered. */
10142 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
10143 return t;
10144
10145 t = build_variant_type_copy (type);
10146 set_type_quals (t, TYPE_QUAL_ATOMIC);
10147
10148 if (align)
10149 SET_TYPE_ALIGN (t, align);
10150
10151 return t;
10152 }
10153
10154 /* Information about the _FloatN and _FloatNx types. This must be in
10155 the same order as the corresponding TI_* enum values. */
10156 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
10157 {
10158 { 16, false },
10159 { 32, false },
10160 { 64, false },
10161 { 128, false },
10162 { 32, true },
10163 { 64, true },
10164 { 128, true },
10165 };
10166
10167
10168 /* Create nodes for all integer types (and error_mark_node) using the sizes
10169 of C datatypes. SIGNED_CHAR specifies whether char is signed. */
10170
10171 void
10172 build_common_tree_nodes (bool signed_char)
10173 {
10174 int i;
10175
10176 error_mark_node = make_node (ERROR_MARK);
10177 TREE_TYPE (error_mark_node) = error_mark_node;
10178
10179 initialize_sizetypes ();
10180
10181 /* Define both `signed char' and `unsigned char'. */
10182 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
10183 TYPE_STRING_FLAG (signed_char_type_node) = 1;
10184 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
10185 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
10186
10187 /* Define `char', which is like either `signed char' or `unsigned char'
10188 but not the same as either. */
10189 char_type_node
10190 = (signed_char
10191 ? make_signed_type (CHAR_TYPE_SIZE)
10192 : make_unsigned_type (CHAR_TYPE_SIZE));
10193 TYPE_STRING_FLAG (char_type_node) = 1;
10194
10195 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
10196 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
10197 integer_type_node = make_signed_type (INT_TYPE_SIZE);
10198 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
10199 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
10200 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
10201 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
10202 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
10203
10204 for (i = 0; i < NUM_INT_N_ENTS; i ++)
10205 {
10206 int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
10207 int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
10208
10209 if (int_n_enabled_p[i])
10210 {
10211 integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
10212 integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
10213 }
10214 }
10215
10216 /* Define a boolean type. This type only represents boolean values but
10217 may be larger than char depending on the value of BOOL_TYPE_SIZE. */
10218 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
10219 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
10220 TYPE_PRECISION (boolean_type_node) = 1;
10221 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
10222
10223 /* Define what type to use for size_t. */
10224 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
10225 size_type_node = unsigned_type_node;
10226 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
10227 size_type_node = long_unsigned_type_node;
10228 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
10229 size_type_node = long_long_unsigned_type_node;
10230 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
10231 size_type_node = short_unsigned_type_node;
10232 else
10233 {
10234 int i;
10235
10236 size_type_node = NULL_TREE;
10237 for (i = 0; i < NUM_INT_N_ENTS; i++)
10238 if (int_n_enabled_p[i])
10239 {
10240 char name[50], altname[50];
10241 sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
10242 sprintf (altname, "__int%d__ unsigned", int_n_data[i].bitsize);
10243
10244 if (strcmp (name, SIZE_TYPE) == 0
10245 || strcmp (altname, SIZE_TYPE) == 0)
10246 {
10247 size_type_node = int_n_trees[i].unsigned_type;
10248 }
10249 }
10250 if (size_type_node == NULL_TREE)
10251 gcc_unreachable ();
10252 }
10253
10254 /* Define what type to use for ptrdiff_t. */
10255 if (strcmp (PTRDIFF_TYPE, "int") == 0)
10256 ptrdiff_type_node = integer_type_node;
10257 else if (strcmp (PTRDIFF_TYPE, "long int") == 0)
10258 ptrdiff_type_node = long_integer_type_node;
10259 else if (strcmp (PTRDIFF_TYPE, "long long int") == 0)
10260 ptrdiff_type_node = long_long_integer_type_node;
10261 else if (strcmp (PTRDIFF_TYPE, "short int") == 0)
10262 ptrdiff_type_node = short_integer_type_node;
10263 else
10264 {
10265 ptrdiff_type_node = NULL_TREE;
10266 for (int i = 0; i < NUM_INT_N_ENTS; i++)
10267 if (int_n_enabled_p[i])
10268 {
10269 char name[50], altname[50];
10270 sprintf (name, "__int%d", int_n_data[i].bitsize);
10271 sprintf (altname, "__int%d__", int_n_data[i].bitsize);
10272
10273 if (strcmp (name, PTRDIFF_TYPE) == 0
10274 || strcmp (altname, PTRDIFF_TYPE) == 0)
10275 ptrdiff_type_node = int_n_trees[i].signed_type;
10276 }
10277 if (ptrdiff_type_node == NULL_TREE)
10278 gcc_unreachable ();
10279 }
10280
10281 /* Fill in the rest of the sized types. Reuse existing type nodes
10282 when possible. */
10283 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
10284 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
10285 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
10286 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
10287 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
10288
10289 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
10290 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
10291 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
10292 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
10293 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
10294
10295 /* Don't call build_qualified type for atomics. That routine does
10296 special processing for atomics, and until they are initialized
10297 it's better not to make that call.
10298
10299 Check to see if there is a target override for atomic types. */
10300
10301 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
10302 targetm.atomic_align_for_mode (QImode));
10303 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
10304 targetm.atomic_align_for_mode (HImode));
10305 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
10306 targetm.atomic_align_for_mode (SImode));
10307 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
10308 targetm.atomic_align_for_mode (DImode));
10309 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
10310 targetm.atomic_align_for_mode (TImode));
10311
10312 access_public_node = get_identifier ("public");
10313 access_protected_node = get_identifier ("protected");
10314 access_private_node = get_identifier ("private");
10315
10316 /* Define these next since types below may used them. */
10317 integer_zero_node = build_int_cst (integer_type_node, 0);
10318 integer_one_node = build_int_cst (integer_type_node, 1);
10319 integer_three_node = build_int_cst (integer_type_node, 3);
10320 integer_minus_one_node = build_int_cst (integer_type_node, -1);
10321
10322 size_zero_node = size_int (0);
10323 size_one_node = size_int (1);
10324 bitsize_zero_node = bitsize_int (0);
10325 bitsize_one_node = bitsize_int (1);
10326 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
10327
10328 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
10329 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
10330
10331 void_type_node = make_node (VOID_TYPE);
10332 layout_type (void_type_node);
10333
10334 /* We are not going to have real types in C with less than byte alignment,
10335 so we might as well not have any types that claim to have it. */
10336 SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT);
10337 TYPE_USER_ALIGN (void_type_node) = 0;
10338
10339 void_node = make_node (VOID_CST);
10340 TREE_TYPE (void_node) = void_type_node;
10341
10342 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
10343 layout_type (TREE_TYPE (null_pointer_node));
10344
10345 ptr_type_node = build_pointer_type (void_type_node);
10346 const_ptr_type_node
10347 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
10348 for (unsigned i = 0;
10349 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
10350 ++i)
10351 builtin_structptr_types[i].node = builtin_structptr_types[i].base;
10352
10353 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
10354
10355 float_type_node = make_node (REAL_TYPE);
10356 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
10357 layout_type (float_type_node);
10358
10359 double_type_node = make_node (REAL_TYPE);
10360 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
10361 layout_type (double_type_node);
10362
10363 long_double_type_node = make_node (REAL_TYPE);
10364 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
10365 layout_type (long_double_type_node);
10366
10367 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10368 {
10369 int n = floatn_nx_types[i].n;
10370 bool extended = floatn_nx_types[i].extended;
10371 scalar_float_mode mode;
10372 if (!targetm.floatn_mode (n, extended).exists (&mode))
10373 continue;
10374 int precision = GET_MODE_PRECISION (mode);
10375 /* Work around the rs6000 KFmode having precision 113 not
10376 128. */
10377 const struct real_format *fmt = REAL_MODE_FORMAT (mode);
10378 gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3);
10379 int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin);
10380 if (!extended)
10381 gcc_assert (min_precision == n);
10382 if (precision < min_precision)
10383 precision = min_precision;
10384 FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE);
10385 TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision;
10386 layout_type (FLOATN_NX_TYPE_NODE (i));
10387 SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode);
10388 }
10389
10390 float_ptr_type_node = build_pointer_type (float_type_node);
10391 double_ptr_type_node = build_pointer_type (double_type_node);
10392 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
10393 integer_ptr_type_node = build_pointer_type (integer_type_node);
10394
10395 /* Fixed size integer types. */
10396 uint16_type_node = make_or_reuse_type (16, 1);
10397 uint32_type_node = make_or_reuse_type (32, 1);
10398 uint64_type_node = make_or_reuse_type (64, 1);
10399 if (targetm.scalar_mode_supported_p (TImode))
10400 uint128_type_node = make_or_reuse_type (128, 1);
10401
10402 /* Decimal float types. */
10403 if (targetm.decimal_float_supported_p ())
10404 {
10405 dfloat32_type_node = make_node (REAL_TYPE);
10406 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
10407 SET_TYPE_MODE (dfloat32_type_node, SDmode);
10408 layout_type (dfloat32_type_node);
10409
10410 dfloat64_type_node = make_node (REAL_TYPE);
10411 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
10412 SET_TYPE_MODE (dfloat64_type_node, DDmode);
10413 layout_type (dfloat64_type_node);
10414
10415 dfloat128_type_node = make_node (REAL_TYPE);
10416 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
10417 SET_TYPE_MODE (dfloat128_type_node, TDmode);
10418 layout_type (dfloat128_type_node);
10419 }
10420
10421 complex_integer_type_node = build_complex_type (integer_type_node, true);
10422 complex_float_type_node = build_complex_type (float_type_node, true);
10423 complex_double_type_node = build_complex_type (double_type_node, true);
10424 complex_long_double_type_node = build_complex_type (long_double_type_node,
10425 true);
10426
10427 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10428 {
10429 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE)
10430 COMPLEX_FLOATN_NX_TYPE_NODE (i)
10431 = build_complex_type (FLOATN_NX_TYPE_NODE (i));
10432 }
10433
10434 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
10435 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
10436 sat_ ## KIND ## _type_node = \
10437 make_sat_signed_ ## KIND ## _type (SIZE); \
10438 sat_unsigned_ ## KIND ## _type_node = \
10439 make_sat_unsigned_ ## KIND ## _type (SIZE); \
10440 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10441 unsigned_ ## KIND ## _type_node = \
10442 make_unsigned_ ## KIND ## _type (SIZE);
10443
10444 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
10445 sat_ ## WIDTH ## KIND ## _type_node = \
10446 make_sat_signed_ ## KIND ## _type (SIZE); \
10447 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
10448 make_sat_unsigned_ ## KIND ## _type (SIZE); \
10449 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10450 unsigned_ ## WIDTH ## KIND ## _type_node = \
10451 make_unsigned_ ## KIND ## _type (SIZE);
10452
10453 /* Make fixed-point type nodes based on four different widths. */
10454 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
10455 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
10456 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
10457 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
10458 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
10459
10460 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
10461 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
10462 NAME ## _type_node = \
10463 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
10464 u ## NAME ## _type_node = \
10465 make_or_reuse_unsigned_ ## KIND ## _type \
10466 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
10467 sat_ ## NAME ## _type_node = \
10468 make_or_reuse_sat_signed_ ## KIND ## _type \
10469 (GET_MODE_BITSIZE (MODE ## mode)); \
10470 sat_u ## NAME ## _type_node = \
10471 make_or_reuse_sat_unsigned_ ## KIND ## _type \
10472 (GET_MODE_BITSIZE (U ## MODE ## mode));
10473
10474 /* Fixed-point type and mode nodes. */
10475 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
10476 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
10477 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
10478 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
10479 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
10480 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
10481 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
10482 MAKE_FIXED_MODE_NODE (accum, ha, HA)
10483 MAKE_FIXED_MODE_NODE (accum, sa, SA)
10484 MAKE_FIXED_MODE_NODE (accum, da, DA)
10485 MAKE_FIXED_MODE_NODE (accum, ta, TA)
10486
10487 {
10488 tree t = targetm.build_builtin_va_list ();
10489
10490 /* Many back-ends define record types without setting TYPE_NAME.
10491 If we copied the record type here, we'd keep the original
10492 record type without a name. This breaks name mangling. So,
10493 don't copy record types and let c_common_nodes_and_builtins()
10494 declare the type to be __builtin_va_list. */
10495 if (TREE_CODE (t) != RECORD_TYPE)
10496 t = build_variant_type_copy (t);
10497
10498 va_list_type_node = t;
10499 }
10500
10501 /* SCEV analyzer global shared trees. */
10502 chrec_dont_know = make_node (SCEV_NOT_KNOWN);
10503 TREE_TYPE (chrec_dont_know) = void_type_node;
10504 chrec_known = make_node (SCEV_KNOWN);
10505 TREE_TYPE (chrec_known) = void_type_node;
10506 }
10507
10508 /* Modify DECL for given flags.
10509 TM_PURE attribute is set only on types, so the function will modify
10510 DECL's type when ECF_TM_PURE is used. */
10511
10512 void
10513 set_call_expr_flags (tree decl, int flags)
10514 {
10515 if (flags & ECF_NOTHROW)
10516 TREE_NOTHROW (decl) = 1;
10517 if (flags & ECF_CONST)
10518 TREE_READONLY (decl) = 1;
10519 if (flags & ECF_PURE)
10520 DECL_PURE_P (decl) = 1;
10521 if (flags & ECF_LOOPING_CONST_OR_PURE)
10522 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
10523 if (flags & ECF_NOVOPS)
10524 DECL_IS_NOVOPS (decl) = 1;
10525 if (flags & ECF_NORETURN)
10526 TREE_THIS_VOLATILE (decl) = 1;
10527 if (flags & ECF_MALLOC)
10528 DECL_IS_MALLOC (decl) = 1;
10529 if (flags & ECF_RETURNS_TWICE)
10530 DECL_IS_RETURNS_TWICE (decl) = 1;
10531 if (flags & ECF_LEAF)
10532 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
10533 NULL, DECL_ATTRIBUTES (decl));
10534 if (flags & ECF_COLD)
10535 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("cold"),
10536 NULL, DECL_ATTRIBUTES (decl));
10537 if (flags & ECF_RET1)
10538 DECL_ATTRIBUTES (decl)
10539 = tree_cons (get_identifier ("fn spec"),
10540 build_tree_list (NULL_TREE, build_string (2, "1 ")),
10541 DECL_ATTRIBUTES (decl));
10542 if ((flags & ECF_TM_PURE) && flag_tm)
10543 apply_tm_attr (decl, get_identifier ("transaction_pure"));
10544 /* Looping const or pure is implied by noreturn.
10545 There is currently no way to declare looping const or looping pure alone. */
10546 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
10547 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
10548 }
10549
10550
10551 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
10552
10553 static void
10554 local_define_builtin (const char *name, tree type, enum built_in_function code,
10555 const char *library_name, int ecf_flags)
10556 {
10557 tree decl;
10558
10559 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10560 library_name, NULL_TREE);
10561 set_call_expr_flags (decl, ecf_flags);
10562
10563 set_builtin_decl (code, decl, true);
10564 }
10565
10566 /* Call this function after instantiating all builtins that the language
10567 front end cares about. This will build the rest of the builtins
10568 and internal functions that are relied upon by the tree optimizers and
10569 the middle-end. */
10570
10571 void
10572 build_common_builtin_nodes (void)
10573 {
10574 tree tmp, ftype;
10575 int ecf_flags;
10576
10577 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
10578 || !builtin_decl_explicit_p (BUILT_IN_ABORT))
10579 {
10580 ftype = build_function_type (void_type_node, void_list_node);
10581 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10582 local_define_builtin ("__builtin_unreachable", ftype,
10583 BUILT_IN_UNREACHABLE,
10584 "__builtin_unreachable",
10585 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10586 | ECF_CONST | ECF_COLD);
10587 if (!builtin_decl_explicit_p (BUILT_IN_ABORT))
10588 local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
10589 "abort",
10590 ECF_LEAF | ECF_NORETURN | ECF_CONST | ECF_COLD);
10591 }
10592
10593 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10594 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10595 {
10596 ftype = build_function_type_list (ptr_type_node,
10597 ptr_type_node, const_ptr_type_node,
10598 size_type_node, NULL_TREE);
10599
10600 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10601 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10602 "memcpy", ECF_NOTHROW | ECF_LEAF);
10603 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10604 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10605 "memmove", ECF_NOTHROW | ECF_LEAF);
10606 }
10607
10608 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10609 {
10610 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10611 const_ptr_type_node, size_type_node,
10612 NULL_TREE);
10613 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10614 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10615 }
10616
10617 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10618 {
10619 ftype = build_function_type_list (ptr_type_node,
10620 ptr_type_node, integer_type_node,
10621 size_type_node, NULL_TREE);
10622 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10623 "memset", ECF_NOTHROW | ECF_LEAF);
10624 }
10625
10626 /* If we're checking the stack, `alloca' can throw. */
10627 const int alloca_flags
10628 = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW);
10629
10630 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10631 {
10632 ftype = build_function_type_list (ptr_type_node,
10633 size_type_node, NULL_TREE);
10634 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10635 "alloca", alloca_flags);
10636 }
10637
10638 ftype = build_function_type_list (ptr_type_node, size_type_node,
10639 size_type_node, NULL_TREE);
10640 local_define_builtin ("__builtin_alloca_with_align", ftype,
10641 BUILT_IN_ALLOCA_WITH_ALIGN,
10642 "__builtin_alloca_with_align",
10643 alloca_flags);
10644
10645 ftype = build_function_type_list (ptr_type_node, size_type_node,
10646 size_type_node, size_type_node, NULL_TREE);
10647 local_define_builtin ("__builtin_alloca_with_align_and_max", ftype,
10648 BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX,
10649 "__builtin_alloca_with_align_and_max",
10650 alloca_flags);
10651
10652 ftype = build_function_type_list (void_type_node,
10653 ptr_type_node, ptr_type_node,
10654 ptr_type_node, NULL_TREE);
10655 local_define_builtin ("__builtin_init_trampoline", ftype,
10656 BUILT_IN_INIT_TRAMPOLINE,
10657 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10658 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10659 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10660 "__builtin_init_heap_trampoline",
10661 ECF_NOTHROW | ECF_LEAF);
10662 local_define_builtin ("__builtin_init_descriptor", ftype,
10663 BUILT_IN_INIT_DESCRIPTOR,
10664 "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF);
10665
10666 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10667 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10668 BUILT_IN_ADJUST_TRAMPOLINE,
10669 "__builtin_adjust_trampoline",
10670 ECF_CONST | ECF_NOTHROW);
10671 local_define_builtin ("__builtin_adjust_descriptor", ftype,
10672 BUILT_IN_ADJUST_DESCRIPTOR,
10673 "__builtin_adjust_descriptor",
10674 ECF_CONST | ECF_NOTHROW);
10675
10676 ftype = build_function_type_list (void_type_node,
10677 ptr_type_node, ptr_type_node, NULL_TREE);
10678 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10679 BUILT_IN_NONLOCAL_GOTO,
10680 "__builtin_nonlocal_goto",
10681 ECF_NORETURN | ECF_NOTHROW);
10682
10683 ftype = build_function_type_list (void_type_node,
10684 ptr_type_node, ptr_type_node, NULL_TREE);
10685 local_define_builtin ("__builtin_setjmp_setup", ftype,
10686 BUILT_IN_SETJMP_SETUP,
10687 "__builtin_setjmp_setup", ECF_NOTHROW);
10688
10689 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10690 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10691 BUILT_IN_SETJMP_RECEIVER,
10692 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10693
10694 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10695 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10696 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10697
10698 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10699 local_define_builtin ("__builtin_stack_restore", ftype,
10700 BUILT_IN_STACK_RESTORE,
10701 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10702
10703 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10704 const_ptr_type_node, size_type_node,
10705 NULL_TREE);
10706 local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ,
10707 "__builtin_memcmp_eq",
10708 ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10709
10710 local_define_builtin ("__builtin_strncmp_eq", ftype, BUILT_IN_STRNCMP_EQ,
10711 "__builtin_strncmp_eq",
10712 ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10713
10714 local_define_builtin ("__builtin_strcmp_eq", ftype, BUILT_IN_STRCMP_EQ,
10715 "__builtin_strcmp_eq",
10716 ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10717
10718 /* If there's a possibility that we might use the ARM EABI, build the
10719 alternate __cxa_end_cleanup node used to resume from C++. */
10720 if (targetm.arm_eabi_unwinder)
10721 {
10722 ftype = build_function_type_list (void_type_node, NULL_TREE);
10723 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10724 BUILT_IN_CXA_END_CLEANUP,
10725 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10726 }
10727
10728 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10729 local_define_builtin ("__builtin_unwind_resume", ftype,
10730 BUILT_IN_UNWIND_RESUME,
10731 ((targetm_common.except_unwind_info (&global_options)
10732 == UI_SJLJ)
10733 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10734 ECF_NORETURN);
10735
10736 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10737 {
10738 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10739 NULL_TREE);
10740 local_define_builtin ("__builtin_return_address", ftype,
10741 BUILT_IN_RETURN_ADDRESS,
10742 "__builtin_return_address",
10743 ECF_NOTHROW);
10744 }
10745
10746 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10747 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10748 {
10749 ftype = build_function_type_list (void_type_node, ptr_type_node,
10750 ptr_type_node, NULL_TREE);
10751 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10752 local_define_builtin ("__cyg_profile_func_enter", ftype,
10753 BUILT_IN_PROFILE_FUNC_ENTER,
10754 "__cyg_profile_func_enter", 0);
10755 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10756 local_define_builtin ("__cyg_profile_func_exit", ftype,
10757 BUILT_IN_PROFILE_FUNC_EXIT,
10758 "__cyg_profile_func_exit", 0);
10759 }
10760
10761 /* The exception object and filter values from the runtime. The argument
10762 must be zero before exception lowering, i.e. from the front end. After
10763 exception lowering, it will be the region number for the exception
10764 landing pad. These functions are PURE instead of CONST to prevent
10765 them from being hoisted past the exception edge that will initialize
10766 its value in the landing pad. */
10767 ftype = build_function_type_list (ptr_type_node,
10768 integer_type_node, NULL_TREE);
10769 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10770 /* Only use TM_PURE if we have TM language support. */
10771 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10772 ecf_flags |= ECF_TM_PURE;
10773 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10774 "__builtin_eh_pointer", ecf_flags);
10775
10776 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10777 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10778 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10779 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10780
10781 ftype = build_function_type_list (void_type_node,
10782 integer_type_node, integer_type_node,
10783 NULL_TREE);
10784 local_define_builtin ("__builtin_eh_copy_values", ftype,
10785 BUILT_IN_EH_COPY_VALUES,
10786 "__builtin_eh_copy_values", ECF_NOTHROW);
10787
10788 /* Complex multiplication and division. These are handled as builtins
10789 rather than optabs because emit_library_call_value doesn't support
10790 complex. Further, we can do slightly better with folding these
10791 beasties if the real and complex parts of the arguments are separate. */
10792 {
10793 int mode;
10794
10795 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10796 {
10797 char mode_name_buf[4], *q;
10798 const char *p;
10799 enum built_in_function mcode, dcode;
10800 tree type, inner_type;
10801 const char *prefix = "__";
10802
10803 if (targetm.libfunc_gnu_prefix)
10804 prefix = "__gnu_";
10805
10806 type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10807 if (type == NULL)
10808 continue;
10809 inner_type = TREE_TYPE (type);
10810
10811 ftype = build_function_type_list (type, inner_type, inner_type,
10812 inner_type, inner_type, NULL_TREE);
10813
10814 mcode = ((enum built_in_function)
10815 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10816 dcode = ((enum built_in_function)
10817 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10818
10819 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10820 *q = TOLOWER (*p);
10821 *q = '\0';
10822
10823 /* For -ftrapping-math these should throw from a former
10824 -fnon-call-exception stmt. */
10825 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10826 NULL);
10827 local_define_builtin (built_in_names[mcode], ftype, mcode,
10828 built_in_names[mcode],
10829 ECF_CONST | ECF_LEAF);
10830
10831 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10832 NULL);
10833 local_define_builtin (built_in_names[dcode], ftype, dcode,
10834 built_in_names[dcode],
10835 ECF_CONST | ECF_LEAF);
10836 }
10837 }
10838
10839 init_internal_fns ();
10840 }
10841
10842 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10843 better way.
10844
10845 If we requested a pointer to a vector, build up the pointers that
10846 we stripped off while looking for the inner type. Similarly for
10847 return values from functions.
10848
10849 The argument TYPE is the top of the chain, and BOTTOM is the
10850 new type which we will point to. */
10851
10852 tree
10853 reconstruct_complex_type (tree type, tree bottom)
10854 {
10855 tree inner, outer;
10856
10857 if (TREE_CODE (type) == POINTER_TYPE)
10858 {
10859 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10860 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10861 TYPE_REF_CAN_ALIAS_ALL (type));
10862 }
10863 else if (TREE_CODE (type) == REFERENCE_TYPE)
10864 {
10865 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10866 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10867 TYPE_REF_CAN_ALIAS_ALL (type));
10868 }
10869 else if (TREE_CODE (type) == ARRAY_TYPE)
10870 {
10871 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10872 outer = build_array_type (inner, TYPE_DOMAIN (type));
10873 }
10874 else if (TREE_CODE (type) == FUNCTION_TYPE)
10875 {
10876 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10877 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10878 }
10879 else if (TREE_CODE (type) == METHOD_TYPE)
10880 {
10881 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10882 /* The build_method_type_directly() routine prepends 'this' to argument list,
10883 so we must compensate by getting rid of it. */
10884 outer
10885 = build_method_type_directly
10886 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10887 inner,
10888 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10889 }
10890 else if (TREE_CODE (type) == OFFSET_TYPE)
10891 {
10892 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10893 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10894 }
10895 else
10896 return bottom;
10897
10898 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10899 TYPE_QUALS (type));
10900 }
10901
10902 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10903 the inner type. */
10904 tree
10905 build_vector_type_for_mode (tree innertype, machine_mode mode)
10906 {
10907 poly_int64 nunits;
10908 unsigned int bitsize;
10909
10910 switch (GET_MODE_CLASS (mode))
10911 {
10912 case MODE_VECTOR_BOOL:
10913 case MODE_VECTOR_INT:
10914 case MODE_VECTOR_FLOAT:
10915 case MODE_VECTOR_FRACT:
10916 case MODE_VECTOR_UFRACT:
10917 case MODE_VECTOR_ACCUM:
10918 case MODE_VECTOR_UACCUM:
10919 nunits = GET_MODE_NUNITS (mode);
10920 break;
10921
10922 case MODE_INT:
10923 /* Check that there are no leftover bits. */
10924 bitsize = GET_MODE_BITSIZE (as_a <scalar_int_mode> (mode));
10925 gcc_assert (bitsize % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10926 nunits = bitsize / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10927 break;
10928
10929 default:
10930 gcc_unreachable ();
10931 }
10932
10933 return make_vector_type (innertype, nunits, mode);
10934 }
10935
10936 /* Similarly, but takes the inner type and number of units, which must be
10937 a power of two. */
10938
10939 tree
10940 build_vector_type (tree innertype, poly_int64 nunits)
10941 {
10942 return make_vector_type (innertype, nunits, VOIDmode);
10943 }
10944
10945 /* Build a truth vector with NUNITS units, giving it mode MASK_MODE. */
10946
10947 tree
10948 build_truth_vector_type_for_mode (poly_uint64 nunits, machine_mode mask_mode)
10949 {
10950 gcc_assert (mask_mode != BLKmode);
10951
10952 unsigned HOST_WIDE_INT esize;
10953 if (VECTOR_MODE_P (mask_mode))
10954 {
10955 poly_uint64 vsize = GET_MODE_BITSIZE (mask_mode);
10956 esize = vector_element_size (vsize, nunits);
10957 }
10958 else
10959 esize = 1;
10960
10961 tree bool_type = build_nonstandard_boolean_type (esize);
10962
10963 return make_vector_type (bool_type, nunits, mask_mode);
10964 }
10965
10966 /* Build a vector type that holds one boolean result for each element of
10967 vector type VECTYPE. The public interface for this operation is
10968 truth_type_for. */
10969
10970 static tree
10971 build_truth_vector_type_for (tree vectype)
10972 {
10973 machine_mode vector_mode = TYPE_MODE (vectype);
10974 poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
10975
10976 machine_mode mask_mode;
10977 if (VECTOR_MODE_P (vector_mode)
10978 && targetm.vectorize.get_mask_mode (vector_mode).exists (&mask_mode))
10979 return build_truth_vector_type_for_mode (nunits, mask_mode);
10980
10981 poly_uint64 vsize = tree_to_poly_uint64 (TYPE_SIZE (vectype));
10982 unsigned HOST_WIDE_INT esize = vector_element_size (vsize, nunits);
10983 tree bool_type = build_nonstandard_boolean_type (esize);
10984
10985 return make_vector_type (bool_type, nunits, VOIDmode);
10986 }
10987
10988 /* Like build_vector_type, but builds a variant type with TYPE_VECTOR_OPAQUE
10989 set. */
10990
10991 tree
10992 build_opaque_vector_type (tree innertype, poly_int64 nunits)
10993 {
10994 tree t = make_vector_type (innertype, nunits, VOIDmode);
10995 tree cand;
10996 /* We always build the non-opaque variant before the opaque one,
10997 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
10998 cand = TYPE_NEXT_VARIANT (t);
10999 if (cand
11000 && TYPE_VECTOR_OPAQUE (cand)
11001 && check_qualified_type (cand, t, TYPE_QUALS (t)))
11002 return cand;
11003 /* Othewise build a variant type and make sure to queue it after
11004 the non-opaque type. */
11005 cand = build_distinct_type_copy (t);
11006 TYPE_VECTOR_OPAQUE (cand) = true;
11007 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
11008 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
11009 TYPE_NEXT_VARIANT (t) = cand;
11010 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
11011 return cand;
11012 }
11013
11014 /* Return the value of element I of VECTOR_CST T as a wide_int. */
11015
11016 wide_int
11017 vector_cst_int_elt (const_tree t, unsigned int i)
11018 {
11019 /* First handle elements that are directly encoded. */
11020 unsigned int encoded_nelts = vector_cst_encoded_nelts (t);
11021 if (i < encoded_nelts)
11022 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, i));
11023
11024 /* Identify the pattern that contains element I and work out the index of
11025 the last encoded element for that pattern. */
11026 unsigned int npatterns = VECTOR_CST_NPATTERNS (t);
11027 unsigned int pattern = i % npatterns;
11028 unsigned int count = i / npatterns;
11029 unsigned int final_i = encoded_nelts - npatterns + pattern;
11030
11031 /* If there are no steps, the final encoded value is the right one. */
11032 if (!VECTOR_CST_STEPPED_P (t))
11033 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, final_i));
11034
11035 /* Otherwise work out the value from the last two encoded elements. */
11036 tree v1 = VECTOR_CST_ENCODED_ELT (t, final_i - npatterns);
11037 tree v2 = VECTOR_CST_ENCODED_ELT (t, final_i);
11038 wide_int diff = wi::to_wide (v2) - wi::to_wide (v1);
11039 return wi::to_wide (v2) + (count - 2) * diff;
11040 }
11041
11042 /* Return the value of element I of VECTOR_CST T. */
11043
11044 tree
11045 vector_cst_elt (const_tree t, unsigned int i)
11046 {
11047 /* First handle elements that are directly encoded. */
11048 unsigned int encoded_nelts = vector_cst_encoded_nelts (t);
11049 if (i < encoded_nelts)
11050 return VECTOR_CST_ENCODED_ELT (t, i);
11051
11052 /* If there are no steps, the final encoded value is the right one. */
11053 if (!VECTOR_CST_STEPPED_P (t))
11054 {
11055 /* Identify the pattern that contains element I and work out the index of
11056 the last encoded element for that pattern. */
11057 unsigned int npatterns = VECTOR_CST_NPATTERNS (t);
11058 unsigned int pattern = i % npatterns;
11059 unsigned int final_i = encoded_nelts - npatterns + pattern;
11060 return VECTOR_CST_ENCODED_ELT (t, final_i);
11061 }
11062
11063 /* Otherwise work out the value from the last two encoded elements. */
11064 return wide_int_to_tree (TREE_TYPE (TREE_TYPE (t)),
11065 vector_cst_int_elt (t, i));
11066 }
11067
11068 /* Given an initializer INIT, return TRUE if INIT is zero or some
11069 aggregate of zeros. Otherwise return FALSE. If NONZERO is not
11070 null, set *NONZERO if and only if INIT is known not to be all
11071 zeros. The combination of return value of false and *NONZERO
11072 false implies that INIT may but need not be all zeros. Other
11073 combinations indicate definitive answers. */
11074
11075 bool
11076 initializer_zerop (const_tree init, bool *nonzero /* = NULL */)
11077 {
11078 bool dummy;
11079 if (!nonzero)
11080 nonzero = &dummy;
11081
11082 /* Conservatively clear NONZERO and set it only if INIT is definitely
11083 not all zero. */
11084 *nonzero = false;
11085
11086 STRIP_NOPS (init);
11087
11088 unsigned HOST_WIDE_INT off = 0;
11089
11090 switch (TREE_CODE (init))
11091 {
11092 case INTEGER_CST:
11093 if (integer_zerop (init))
11094 return true;
11095
11096 *nonzero = true;
11097 return false;
11098
11099 case REAL_CST:
11100 /* ??? Note that this is not correct for C4X float formats. There,
11101 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
11102 negative exponent. */
11103 if (real_zerop (init)
11104 && !REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init)))
11105 return true;
11106
11107 *nonzero = true;
11108 return false;
11109
11110 case FIXED_CST:
11111 if (fixed_zerop (init))
11112 return true;
11113
11114 *nonzero = true;
11115 return false;
11116
11117 case COMPLEX_CST:
11118 if (integer_zerop (init)
11119 || (real_zerop (init)
11120 && !REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
11121 && !REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init)))))
11122 return true;
11123
11124 *nonzero = true;
11125 return false;
11126
11127 case VECTOR_CST:
11128 if (VECTOR_CST_NPATTERNS (init) == 1
11129 && VECTOR_CST_DUPLICATE_P (init)
11130 && initializer_zerop (VECTOR_CST_ENCODED_ELT (init, 0)))
11131 return true;
11132
11133 *nonzero = true;
11134 return false;
11135
11136 case CONSTRUCTOR:
11137 {
11138 if (TREE_CLOBBER_P (init))
11139 return false;
11140
11141 unsigned HOST_WIDE_INT idx;
11142 tree elt;
11143
11144 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
11145 if (!initializer_zerop (elt, nonzero))
11146 return false;
11147
11148 return true;
11149 }
11150
11151 case MEM_REF:
11152 {
11153 tree arg = TREE_OPERAND (init, 0);
11154 if (TREE_CODE (arg) != ADDR_EXPR)
11155 return false;
11156 tree offset = TREE_OPERAND (init, 1);
11157 if (TREE_CODE (offset) != INTEGER_CST
11158 || !tree_fits_uhwi_p (offset))
11159 return false;
11160 off = tree_to_uhwi (offset);
11161 if (INT_MAX < off)
11162 return false;
11163 arg = TREE_OPERAND (arg, 0);
11164 if (TREE_CODE (arg) != STRING_CST)
11165 return false;
11166 init = arg;
11167 }
11168 /* Fall through. */
11169
11170 case STRING_CST:
11171 {
11172 gcc_assert (off <= INT_MAX);
11173
11174 int i = off;
11175 int n = TREE_STRING_LENGTH (init);
11176 if (n <= i)
11177 return false;
11178
11179 /* We need to loop through all elements to handle cases like
11180 "\0" and "\0foobar". */
11181 for (i = 0; i < n; ++i)
11182 if (TREE_STRING_POINTER (init)[i] != '\0')
11183 {
11184 *nonzero = true;
11185 return false;
11186 }
11187
11188 return true;
11189 }
11190
11191 default:
11192 return false;
11193 }
11194 }
11195
11196 /* Return true if EXPR is an initializer expression in which every element
11197 is a constant that is numerically equal to 0 or 1. The elements do not
11198 need to be equal to each other. */
11199
11200 bool
11201 initializer_each_zero_or_onep (const_tree expr)
11202 {
11203 STRIP_ANY_LOCATION_WRAPPER (expr);
11204
11205 switch (TREE_CODE (expr))
11206 {
11207 case INTEGER_CST:
11208 return integer_zerop (expr) || integer_onep (expr);
11209
11210 case REAL_CST:
11211 return real_zerop (expr) || real_onep (expr);
11212
11213 case VECTOR_CST:
11214 {
11215 unsigned HOST_WIDE_INT nelts = vector_cst_encoded_nelts (expr);
11216 if (VECTOR_CST_STEPPED_P (expr)
11217 && !TYPE_VECTOR_SUBPARTS (TREE_TYPE (expr)).is_constant (&nelts))
11218 return false;
11219
11220 for (unsigned int i = 0; i < nelts; ++i)
11221 {
11222 tree elt = vector_cst_elt (expr, i);
11223 if (!initializer_each_zero_or_onep (elt))
11224 return false;
11225 }
11226
11227 return true;
11228 }
11229
11230 default:
11231 return false;
11232 }
11233 }
11234
11235 /* Check if vector VEC consists of all the equal elements and
11236 that the number of elements corresponds to the type of VEC.
11237 The function returns first element of the vector
11238 or NULL_TREE if the vector is not uniform. */
11239 tree
11240 uniform_vector_p (const_tree vec)
11241 {
11242 tree first, t;
11243 unsigned HOST_WIDE_INT i, nelts;
11244
11245 if (vec == NULL_TREE)
11246 return NULL_TREE;
11247
11248 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
11249
11250 if (TREE_CODE (vec) == VEC_DUPLICATE_EXPR)
11251 return TREE_OPERAND (vec, 0);
11252
11253 else if (TREE_CODE (vec) == VECTOR_CST)
11254 {
11255 if (VECTOR_CST_NPATTERNS (vec) == 1 && VECTOR_CST_DUPLICATE_P (vec))
11256 return VECTOR_CST_ENCODED_ELT (vec, 0);
11257 return NULL_TREE;
11258 }
11259
11260 else if (TREE_CODE (vec) == CONSTRUCTOR
11261 && TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)).is_constant (&nelts))
11262 {
11263 first = error_mark_node;
11264
11265 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
11266 {
11267 if (i == 0)
11268 {
11269 first = t;
11270 continue;
11271 }
11272 if (!operand_equal_p (first, t, 0))
11273 return NULL_TREE;
11274 }
11275 if (i != nelts)
11276 return NULL_TREE;
11277
11278 return first;
11279 }
11280
11281 return NULL_TREE;
11282 }
11283
11284 /* If the argument is INTEGER_CST, return it. If the argument is vector
11285 with all elements the same INTEGER_CST, return that INTEGER_CST. Otherwise
11286 return NULL_TREE.
11287 Look through location wrappers. */
11288
11289 tree
11290 uniform_integer_cst_p (tree t)
11291 {
11292 STRIP_ANY_LOCATION_WRAPPER (t);
11293
11294 if (TREE_CODE (t) == INTEGER_CST)
11295 return t;
11296
11297 if (VECTOR_TYPE_P (TREE_TYPE (t)))
11298 {
11299 t = uniform_vector_p (t);
11300 if (t && TREE_CODE (t) == INTEGER_CST)
11301 return t;
11302 }
11303
11304 return NULL_TREE;
11305 }
11306
11307 /* If VECTOR_CST T has a single nonzero element, return the index of that
11308 element, otherwise return -1. */
11309
11310 int
11311 single_nonzero_element (const_tree t)
11312 {
11313 unsigned HOST_WIDE_INT nelts;
11314 unsigned int repeat_nelts;
11315 if (VECTOR_CST_NELTS (t).is_constant (&nelts))
11316 repeat_nelts = nelts;
11317 else if (VECTOR_CST_NELTS_PER_PATTERN (t) == 2)
11318 {
11319 nelts = vector_cst_encoded_nelts (t);
11320 repeat_nelts = VECTOR_CST_NPATTERNS (t);
11321 }
11322 else
11323 return -1;
11324
11325 int res = -1;
11326 for (unsigned int i = 0; i < nelts; ++i)
11327 {
11328 tree elt = vector_cst_elt (t, i);
11329 if (!integer_zerop (elt) && !real_zerop (elt))
11330 {
11331 if (res >= 0 || i >= repeat_nelts)
11332 return -1;
11333 res = i;
11334 }
11335 }
11336 return res;
11337 }
11338
11339 /* Build an empty statement at location LOC. */
11340
11341 tree
11342 build_empty_stmt (location_t loc)
11343 {
11344 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
11345 SET_EXPR_LOCATION (t, loc);
11346 return t;
11347 }
11348
11349
11350 /* Build an OpenMP clause with code CODE. LOC is the location of the
11351 clause. */
11352
11353 tree
11354 build_omp_clause (location_t loc, enum omp_clause_code code)
11355 {
11356 tree t;
11357 int size, length;
11358
11359 length = omp_clause_num_ops[code];
11360 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
11361
11362 record_node_allocation_statistics (OMP_CLAUSE, size);
11363
11364 t = (tree) ggc_internal_alloc (size);
11365 memset (t, 0, size);
11366 TREE_SET_CODE (t, OMP_CLAUSE);
11367 OMP_CLAUSE_SET_CODE (t, code);
11368 OMP_CLAUSE_LOCATION (t) = loc;
11369
11370 return t;
11371 }
11372
11373 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
11374 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
11375 Except for the CODE and operand count field, other storage for the
11376 object is initialized to zeros. */
11377
11378 tree
11379 build_vl_exp (enum tree_code code, int len MEM_STAT_DECL)
11380 {
11381 tree t;
11382 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
11383
11384 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
11385 gcc_assert (len >= 1);
11386
11387 record_node_allocation_statistics (code, length);
11388
11389 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
11390
11391 TREE_SET_CODE (t, code);
11392
11393 /* Can't use TREE_OPERAND to store the length because if checking is
11394 enabled, it will try to check the length before we store it. :-P */
11395 t->exp.operands[0] = build_int_cst (sizetype, len);
11396
11397 return t;
11398 }
11399
11400 /* Helper function for build_call_* functions; build a CALL_EXPR with
11401 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
11402 the argument slots. */
11403
11404 static tree
11405 build_call_1 (tree return_type, tree fn, int nargs)
11406 {
11407 tree t;
11408
11409 t = build_vl_exp (CALL_EXPR, nargs + 3);
11410 TREE_TYPE (t) = return_type;
11411 CALL_EXPR_FN (t) = fn;
11412 CALL_EXPR_STATIC_CHAIN (t) = NULL;
11413
11414 return t;
11415 }
11416
11417 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11418 FN and a null static chain slot. NARGS is the number of call arguments
11419 which are specified as "..." arguments. */
11420
11421 tree
11422 build_call_nary (tree return_type, tree fn, int nargs, ...)
11423 {
11424 tree ret;
11425 va_list args;
11426 va_start (args, nargs);
11427 ret = build_call_valist (return_type, fn, nargs, args);
11428 va_end (args);
11429 return ret;
11430 }
11431
11432 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11433 FN and a null static chain slot. NARGS is the number of call arguments
11434 which are specified as a va_list ARGS. */
11435
11436 tree
11437 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
11438 {
11439 tree t;
11440 int i;
11441
11442 t = build_call_1 (return_type, fn, nargs);
11443 for (i = 0; i < nargs; i++)
11444 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
11445 process_call_operands (t);
11446 return t;
11447 }
11448
11449 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11450 FN and a null static chain slot. NARGS is the number of call arguments
11451 which are specified as a tree array ARGS. */
11452
11453 tree
11454 build_call_array_loc (location_t loc, tree return_type, tree fn,
11455 int nargs, const tree *args)
11456 {
11457 tree t;
11458 int i;
11459
11460 t = build_call_1 (return_type, fn, nargs);
11461 for (i = 0; i < nargs; i++)
11462 CALL_EXPR_ARG (t, i) = args[i];
11463 process_call_operands (t);
11464 SET_EXPR_LOCATION (t, loc);
11465 return t;
11466 }
11467
11468 /* Like build_call_array, but takes a vec. */
11469
11470 tree
11471 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
11472 {
11473 tree ret, t;
11474 unsigned int ix;
11475
11476 ret = build_call_1 (return_type, fn, vec_safe_length (args));
11477 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
11478 CALL_EXPR_ARG (ret, ix) = t;
11479 process_call_operands (ret);
11480 return ret;
11481 }
11482
11483 /* Conveniently construct a function call expression. FNDECL names the
11484 function to be called and N arguments are passed in the array
11485 ARGARRAY. */
11486
11487 tree
11488 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
11489 {
11490 tree fntype = TREE_TYPE (fndecl);
11491 tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
11492
11493 return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
11494 }
11495
11496 /* Conveniently construct a function call expression. FNDECL names the
11497 function to be called and the arguments are passed in the vector
11498 VEC. */
11499
11500 tree
11501 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
11502 {
11503 return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
11504 vec_safe_address (vec));
11505 }
11506
11507
11508 /* Conveniently construct a function call expression. FNDECL names the
11509 function to be called, N is the number of arguments, and the "..."
11510 parameters are the argument expressions. */
11511
11512 tree
11513 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
11514 {
11515 va_list ap;
11516 tree *argarray = XALLOCAVEC (tree, n);
11517 int i;
11518
11519 va_start (ap, n);
11520 for (i = 0; i < n; i++)
11521 argarray[i] = va_arg (ap, tree);
11522 va_end (ap);
11523 return build_call_expr_loc_array (loc, fndecl, n, argarray);
11524 }
11525
11526 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...). Duplicated because
11527 varargs macros aren't supported by all bootstrap compilers. */
11528
11529 tree
11530 build_call_expr (tree fndecl, int n, ...)
11531 {
11532 va_list ap;
11533 tree *argarray = XALLOCAVEC (tree, n);
11534 int i;
11535
11536 va_start (ap, n);
11537 for (i = 0; i < n; i++)
11538 argarray[i] = va_arg (ap, tree);
11539 va_end (ap);
11540 return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
11541 }
11542
11543 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
11544 type TYPE. This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
11545 It will get gimplified later into an ordinary internal function. */
11546
11547 tree
11548 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
11549 tree type, int n, const tree *args)
11550 {
11551 tree t = build_call_1 (type, NULL_TREE, n);
11552 for (int i = 0; i < n; ++i)
11553 CALL_EXPR_ARG (t, i) = args[i];
11554 SET_EXPR_LOCATION (t, loc);
11555 CALL_EXPR_IFN (t) = ifn;
11556 process_call_operands (t);
11557 return t;
11558 }
11559
11560 /* Build internal call expression. This is just like CALL_EXPR, except
11561 its CALL_EXPR_FN is NULL. It will get gimplified later into ordinary
11562 internal function. */
11563
11564 tree
11565 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
11566 tree type, int n, ...)
11567 {
11568 va_list ap;
11569 tree *argarray = XALLOCAVEC (tree, n);
11570 int i;
11571
11572 va_start (ap, n);
11573 for (i = 0; i < n; i++)
11574 argarray[i] = va_arg (ap, tree);
11575 va_end (ap);
11576 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11577 }
11578
11579 /* Return a function call to FN, if the target is guaranteed to support it,
11580 or null otherwise.
11581
11582 N is the number of arguments, passed in the "...", and TYPE is the
11583 type of the return value. */
11584
11585 tree
11586 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
11587 int n, ...)
11588 {
11589 va_list ap;
11590 tree *argarray = XALLOCAVEC (tree, n);
11591 int i;
11592
11593 va_start (ap, n);
11594 for (i = 0; i < n; i++)
11595 argarray[i] = va_arg (ap, tree);
11596 va_end (ap);
11597 if (internal_fn_p (fn))
11598 {
11599 internal_fn ifn = as_internal_fn (fn);
11600 if (direct_internal_fn_p (ifn))
11601 {
11602 tree_pair types = direct_internal_fn_types (ifn, type, argarray);
11603 if (!direct_internal_fn_supported_p (ifn, types,
11604 OPTIMIZE_FOR_BOTH))
11605 return NULL_TREE;
11606 }
11607 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11608 }
11609 else
11610 {
11611 tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
11612 if (!fndecl)
11613 return NULL_TREE;
11614 return build_call_expr_loc_array (loc, fndecl, n, argarray);
11615 }
11616 }
11617
11618 /* Return a function call to the appropriate builtin alloca variant.
11619
11620 SIZE is the size to be allocated. ALIGN, if non-zero, is the requested
11621 alignment of the allocated area. MAX_SIZE, if non-negative, is an upper
11622 bound for SIZE in case it is not a fixed value. */
11623
11624 tree
11625 build_alloca_call_expr (tree size, unsigned int align, HOST_WIDE_INT max_size)
11626 {
11627 if (max_size >= 0)
11628 {
11629 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX);
11630 return
11631 build_call_expr (t, 3, size, size_int (align), size_int (max_size));
11632 }
11633 else if (align > 0)
11634 {
11635 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN);
11636 return build_call_expr (t, 2, size, size_int (align));
11637 }
11638 else
11639 {
11640 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA);
11641 return build_call_expr (t, 1, size);
11642 }
11643 }
11644
11645 /* Create a new constant string literal of type ELTYPE[SIZE] (or LEN
11646 if SIZE == -1) and return a tree node representing char* pointer to
11647 it as an ADDR_EXPR (ARRAY_REF (ELTYPE, ...)). When STR is nonnull
11648 the STRING_CST value is the LEN bytes at STR (the representation
11649 of the string, which may be wide). Otherwise it's all zeros. */
11650
11651 tree
11652 build_string_literal (unsigned len, const char *str /* = NULL */,
11653 tree eltype /* = char_type_node */,
11654 unsigned HOST_WIDE_INT size /* = -1 */)
11655 {
11656 tree t = build_string (len, str);
11657 /* Set the maximum valid index based on the string length or SIZE. */
11658 unsigned HOST_WIDE_INT maxidx
11659 = (size == HOST_WIDE_INT_M1U ? len : size) - 1;
11660
11661 tree index = build_index_type (size_int (maxidx));
11662 eltype = build_type_variant (eltype, 1, 0);
11663 tree type = build_array_type (eltype, index);
11664 TREE_TYPE (t) = type;
11665 TREE_CONSTANT (t) = 1;
11666 TREE_READONLY (t) = 1;
11667 TREE_STATIC (t) = 1;
11668
11669 type = build_pointer_type (eltype);
11670 t = build1 (ADDR_EXPR, type,
11671 build4 (ARRAY_REF, eltype,
11672 t, integer_zero_node, NULL_TREE, NULL_TREE));
11673 return t;
11674 }
11675
11676
11677
11678 /* Return true if T (assumed to be a DECL) must be assigned a memory
11679 location. */
11680
11681 bool
11682 needs_to_live_in_memory (const_tree t)
11683 {
11684 return (TREE_ADDRESSABLE (t)
11685 || is_global_var (t)
11686 || (TREE_CODE (t) == RESULT_DECL
11687 && !DECL_BY_REFERENCE (t)
11688 && aggregate_value_p (t, current_function_decl)));
11689 }
11690
11691 /* Return value of a constant X and sign-extend it. */
11692
11693 HOST_WIDE_INT
11694 int_cst_value (const_tree x)
11695 {
11696 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
11697 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
11698
11699 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
11700 gcc_assert (cst_and_fits_in_hwi (x));
11701
11702 if (bits < HOST_BITS_PER_WIDE_INT)
11703 {
11704 bool negative = ((val >> (bits - 1)) & 1) != 0;
11705 if (negative)
11706 val |= HOST_WIDE_INT_M1U << (bits - 1) << 1;
11707 else
11708 val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1);
11709 }
11710
11711 return val;
11712 }
11713
11714 /* If TYPE is an integral or pointer type, return an integer type with
11715 the same precision which is unsigned iff UNSIGNEDP is true, or itself
11716 if TYPE is already an integer type of signedness UNSIGNEDP.
11717 If TYPE is a floating-point type, return an integer type with the same
11718 bitsize and with the signedness given by UNSIGNEDP; this is useful
11719 when doing bit-level operations on a floating-point value. */
11720
11721 tree
11722 signed_or_unsigned_type_for (int unsignedp, tree type)
11723 {
11724 if (ANY_INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type) == unsignedp)
11725 return type;
11726
11727 if (TREE_CODE (type) == VECTOR_TYPE)
11728 {
11729 tree inner = TREE_TYPE (type);
11730 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11731 if (!inner2)
11732 return NULL_TREE;
11733 if (inner == inner2)
11734 return type;
11735 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
11736 }
11737
11738 if (TREE_CODE (type) == COMPLEX_TYPE)
11739 {
11740 tree inner = TREE_TYPE (type);
11741 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11742 if (!inner2)
11743 return NULL_TREE;
11744 if (inner == inner2)
11745 return type;
11746 return build_complex_type (inner2);
11747 }
11748
11749 unsigned int bits;
11750 if (INTEGRAL_TYPE_P (type)
11751 || POINTER_TYPE_P (type)
11752 || TREE_CODE (type) == OFFSET_TYPE)
11753 bits = TYPE_PRECISION (type);
11754 else if (TREE_CODE (type) == REAL_TYPE)
11755 bits = GET_MODE_BITSIZE (SCALAR_TYPE_MODE (type));
11756 else
11757 return NULL_TREE;
11758
11759 return build_nonstandard_integer_type (bits, unsignedp);
11760 }
11761
11762 /* If TYPE is an integral or pointer type, return an integer type with
11763 the same precision which is unsigned, or itself if TYPE is already an
11764 unsigned integer type. If TYPE is a floating-point type, return an
11765 unsigned integer type with the same bitsize as TYPE. */
11766
11767 tree
11768 unsigned_type_for (tree type)
11769 {
11770 return signed_or_unsigned_type_for (1, type);
11771 }
11772
11773 /* If TYPE is an integral or pointer type, return an integer type with
11774 the same precision which is signed, or itself if TYPE is already a
11775 signed integer type. If TYPE is a floating-point type, return a
11776 signed integer type with the same bitsize as TYPE. */
11777
11778 tree
11779 signed_type_for (tree type)
11780 {
11781 return signed_or_unsigned_type_for (0, type);
11782 }
11783
11784 /* If TYPE is a vector type, return a signed integer vector type with the
11785 same width and number of subparts. Otherwise return boolean_type_node. */
11786
11787 tree
11788 truth_type_for (tree type)
11789 {
11790 if (TREE_CODE (type) == VECTOR_TYPE)
11791 {
11792 if (VECTOR_BOOLEAN_TYPE_P (type))
11793 return type;
11794 return build_truth_vector_type_for (type);
11795 }
11796 else
11797 return boolean_type_node;
11798 }
11799
11800 /* Returns the largest value obtainable by casting something in INNER type to
11801 OUTER type. */
11802
11803 tree
11804 upper_bound_in_type (tree outer, tree inner)
11805 {
11806 unsigned int det = 0;
11807 unsigned oprec = TYPE_PRECISION (outer);
11808 unsigned iprec = TYPE_PRECISION (inner);
11809 unsigned prec;
11810
11811 /* Compute a unique number for every combination. */
11812 det |= (oprec > iprec) ? 4 : 0;
11813 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
11814 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
11815
11816 /* Determine the exponent to use. */
11817 switch (det)
11818 {
11819 case 0:
11820 case 1:
11821 /* oprec <= iprec, outer: signed, inner: don't care. */
11822 prec = oprec - 1;
11823 break;
11824 case 2:
11825 case 3:
11826 /* oprec <= iprec, outer: unsigned, inner: don't care. */
11827 prec = oprec;
11828 break;
11829 case 4:
11830 /* oprec > iprec, outer: signed, inner: signed. */
11831 prec = iprec - 1;
11832 break;
11833 case 5:
11834 /* oprec > iprec, outer: signed, inner: unsigned. */
11835 prec = iprec;
11836 break;
11837 case 6:
11838 /* oprec > iprec, outer: unsigned, inner: signed. */
11839 prec = oprec;
11840 break;
11841 case 7:
11842 /* oprec > iprec, outer: unsigned, inner: unsigned. */
11843 prec = iprec;
11844 break;
11845 default:
11846 gcc_unreachable ();
11847 }
11848
11849 return wide_int_to_tree (outer,
11850 wi::mask (prec, false, TYPE_PRECISION (outer)));
11851 }
11852
11853 /* Returns the smallest value obtainable by casting something in INNER type to
11854 OUTER type. */
11855
11856 tree
11857 lower_bound_in_type (tree outer, tree inner)
11858 {
11859 unsigned oprec = TYPE_PRECISION (outer);
11860 unsigned iprec = TYPE_PRECISION (inner);
11861
11862 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11863 and obtain 0. */
11864 if (TYPE_UNSIGNED (outer)
11865 /* If we are widening something of an unsigned type, OUTER type
11866 contains all values of INNER type. In particular, both INNER
11867 and OUTER types have zero in common. */
11868 || (oprec > iprec && TYPE_UNSIGNED (inner)))
11869 return build_int_cst (outer, 0);
11870 else
11871 {
11872 /* If we are widening a signed type to another signed type, we
11873 want to obtain -2^^(iprec-1). If we are keeping the
11874 precision or narrowing to a signed type, we want to obtain
11875 -2^(oprec-1). */
11876 unsigned prec = oprec > iprec ? iprec : oprec;
11877 return wide_int_to_tree (outer,
11878 wi::mask (prec - 1, true,
11879 TYPE_PRECISION (outer)));
11880 }
11881 }
11882
11883 /* Return nonzero if two operands that are suitable for PHI nodes are
11884 necessarily equal. Specifically, both ARG0 and ARG1 must be either
11885 SSA_NAME or invariant. Note that this is strictly an optimization.
11886 That is, callers of this function can directly call operand_equal_p
11887 and get the same result, only slower. */
11888
11889 int
11890 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11891 {
11892 if (arg0 == arg1)
11893 return 1;
11894 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11895 return 0;
11896 return operand_equal_p (arg0, arg1, 0);
11897 }
11898
11899 /* Returns number of zeros at the end of binary representation of X. */
11900
11901 tree
11902 num_ending_zeros (const_tree x)
11903 {
11904 return build_int_cst (TREE_TYPE (x), wi::ctz (wi::to_wide (x)));
11905 }
11906
11907
11908 #define WALK_SUBTREE(NODE) \
11909 do \
11910 { \
11911 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
11912 if (result) \
11913 return result; \
11914 } \
11915 while (0)
11916
11917 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11918 be walked whenever a type is seen in the tree. Rest of operands and return
11919 value are as for walk_tree. */
11920
11921 static tree
11922 walk_type_fields (tree type, walk_tree_fn func, void *data,
11923 hash_set<tree> *pset, walk_tree_lh lh)
11924 {
11925 tree result = NULL_TREE;
11926
11927 switch (TREE_CODE (type))
11928 {
11929 case POINTER_TYPE:
11930 case REFERENCE_TYPE:
11931 case VECTOR_TYPE:
11932 /* We have to worry about mutually recursive pointers. These can't
11933 be written in C. They can in Ada. It's pathological, but
11934 there's an ACATS test (c38102a) that checks it. Deal with this
11935 by checking if we're pointing to another pointer, that one
11936 points to another pointer, that one does too, and we have no htab.
11937 If so, get a hash table. We check three levels deep to avoid
11938 the cost of the hash table if we don't need one. */
11939 if (POINTER_TYPE_P (TREE_TYPE (type))
11940 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11941 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11942 && !pset)
11943 {
11944 result = walk_tree_without_duplicates (&TREE_TYPE (type),
11945 func, data);
11946 if (result)
11947 return result;
11948
11949 break;
11950 }
11951
11952 /* fall through */
11953
11954 case COMPLEX_TYPE:
11955 WALK_SUBTREE (TREE_TYPE (type));
11956 break;
11957
11958 case METHOD_TYPE:
11959 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11960
11961 /* Fall through. */
11962
11963 case FUNCTION_TYPE:
11964 WALK_SUBTREE (TREE_TYPE (type));
11965 {
11966 tree arg;
11967
11968 /* We never want to walk into default arguments. */
11969 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11970 WALK_SUBTREE (TREE_VALUE (arg));
11971 }
11972 break;
11973
11974 case ARRAY_TYPE:
11975 /* Don't follow this nodes's type if a pointer for fear that
11976 we'll have infinite recursion. If we have a PSET, then we
11977 need not fear. */
11978 if (pset
11979 || (!POINTER_TYPE_P (TREE_TYPE (type))
11980 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11981 WALK_SUBTREE (TREE_TYPE (type));
11982 WALK_SUBTREE (TYPE_DOMAIN (type));
11983 break;
11984
11985 case OFFSET_TYPE:
11986 WALK_SUBTREE (TREE_TYPE (type));
11987 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11988 break;
11989
11990 default:
11991 break;
11992 }
11993
11994 return NULL_TREE;
11995 }
11996
11997 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
11998 called with the DATA and the address of each sub-tree. If FUNC returns a
11999 non-NULL value, the traversal is stopped, and the value returned by FUNC
12000 is returned. If PSET is non-NULL it is used to record the nodes visited,
12001 and to avoid visiting a node more than once. */
12002
12003 tree
12004 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
12005 hash_set<tree> *pset, walk_tree_lh lh)
12006 {
12007 enum tree_code code;
12008 int walk_subtrees;
12009 tree result;
12010
12011 #define WALK_SUBTREE_TAIL(NODE) \
12012 do \
12013 { \
12014 tp = & (NODE); \
12015 goto tail_recurse; \
12016 } \
12017 while (0)
12018
12019 tail_recurse:
12020 /* Skip empty subtrees. */
12021 if (!*tp)
12022 return NULL_TREE;
12023
12024 /* Don't walk the same tree twice, if the user has requested
12025 that we avoid doing so. */
12026 if (pset && pset->add (*tp))
12027 return NULL_TREE;
12028
12029 /* Call the function. */
12030 walk_subtrees = 1;
12031 result = (*func) (tp, &walk_subtrees, data);
12032
12033 /* If we found something, return it. */
12034 if (result)
12035 return result;
12036
12037 code = TREE_CODE (*tp);
12038
12039 /* Even if we didn't, FUNC may have decided that there was nothing
12040 interesting below this point in the tree. */
12041 if (!walk_subtrees)
12042 {
12043 /* But we still need to check our siblings. */
12044 if (code == TREE_LIST)
12045 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
12046 else if (code == OMP_CLAUSE)
12047 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12048 else
12049 return NULL_TREE;
12050 }
12051
12052 if (lh)
12053 {
12054 result = (*lh) (tp, &walk_subtrees, func, data, pset);
12055 if (result || !walk_subtrees)
12056 return result;
12057 }
12058
12059 switch (code)
12060 {
12061 case ERROR_MARK:
12062 case IDENTIFIER_NODE:
12063 case INTEGER_CST:
12064 case REAL_CST:
12065 case FIXED_CST:
12066 case VECTOR_CST:
12067 case STRING_CST:
12068 case BLOCK:
12069 case PLACEHOLDER_EXPR:
12070 case SSA_NAME:
12071 case FIELD_DECL:
12072 case RESULT_DECL:
12073 /* None of these have subtrees other than those already walked
12074 above. */
12075 break;
12076
12077 case TREE_LIST:
12078 WALK_SUBTREE (TREE_VALUE (*tp));
12079 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
12080 break;
12081
12082 case TREE_VEC:
12083 {
12084 int len = TREE_VEC_LENGTH (*tp);
12085
12086 if (len == 0)
12087 break;
12088
12089 /* Walk all elements but the first. */
12090 while (--len)
12091 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
12092
12093 /* Now walk the first one as a tail call. */
12094 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
12095 }
12096
12097 case COMPLEX_CST:
12098 WALK_SUBTREE (TREE_REALPART (*tp));
12099 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
12100
12101 case CONSTRUCTOR:
12102 {
12103 unsigned HOST_WIDE_INT idx;
12104 constructor_elt *ce;
12105
12106 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
12107 idx++)
12108 WALK_SUBTREE (ce->value);
12109 }
12110 break;
12111
12112 case SAVE_EXPR:
12113 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
12114
12115 case BIND_EXPR:
12116 {
12117 tree decl;
12118 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
12119 {
12120 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
12121 into declarations that are just mentioned, rather than
12122 declared; they don't really belong to this part of the tree.
12123 And, we can see cycles: the initializer for a declaration
12124 can refer to the declaration itself. */
12125 WALK_SUBTREE (DECL_INITIAL (decl));
12126 WALK_SUBTREE (DECL_SIZE (decl));
12127 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
12128 }
12129 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
12130 }
12131
12132 case STATEMENT_LIST:
12133 {
12134 tree_stmt_iterator i;
12135 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
12136 WALK_SUBTREE (*tsi_stmt_ptr (i));
12137 }
12138 break;
12139
12140 case OMP_CLAUSE:
12141 switch (OMP_CLAUSE_CODE (*tp))
12142 {
12143 case OMP_CLAUSE_GANG:
12144 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
12145 /* FALLTHRU */
12146
12147 case OMP_CLAUSE_ASYNC:
12148 case OMP_CLAUSE_WAIT:
12149 case OMP_CLAUSE_WORKER:
12150 case OMP_CLAUSE_VECTOR:
12151 case OMP_CLAUSE_NUM_GANGS:
12152 case OMP_CLAUSE_NUM_WORKERS:
12153 case OMP_CLAUSE_VECTOR_LENGTH:
12154 case OMP_CLAUSE_PRIVATE:
12155 case OMP_CLAUSE_SHARED:
12156 case OMP_CLAUSE_FIRSTPRIVATE:
12157 case OMP_CLAUSE_COPYIN:
12158 case OMP_CLAUSE_COPYPRIVATE:
12159 case OMP_CLAUSE_FINAL:
12160 case OMP_CLAUSE_IF:
12161 case OMP_CLAUSE_NUM_THREADS:
12162 case OMP_CLAUSE_SCHEDULE:
12163 case OMP_CLAUSE_UNIFORM:
12164 case OMP_CLAUSE_DEPEND:
12165 case OMP_CLAUSE_NONTEMPORAL:
12166 case OMP_CLAUSE_NUM_TEAMS:
12167 case OMP_CLAUSE_THREAD_LIMIT:
12168 case OMP_CLAUSE_DEVICE:
12169 case OMP_CLAUSE_DIST_SCHEDULE:
12170 case OMP_CLAUSE_SAFELEN:
12171 case OMP_CLAUSE_SIMDLEN:
12172 case OMP_CLAUSE_ORDERED:
12173 case OMP_CLAUSE_PRIORITY:
12174 case OMP_CLAUSE_GRAINSIZE:
12175 case OMP_CLAUSE_NUM_TASKS:
12176 case OMP_CLAUSE_HINT:
12177 case OMP_CLAUSE_TO_DECLARE:
12178 case OMP_CLAUSE_LINK:
12179 case OMP_CLAUSE_USE_DEVICE_PTR:
12180 case OMP_CLAUSE_USE_DEVICE_ADDR:
12181 case OMP_CLAUSE_IS_DEVICE_PTR:
12182 case OMP_CLAUSE_INCLUSIVE:
12183 case OMP_CLAUSE_EXCLUSIVE:
12184 case OMP_CLAUSE__LOOPTEMP_:
12185 case OMP_CLAUSE__REDUCTEMP_:
12186 case OMP_CLAUSE__CONDTEMP_:
12187 case OMP_CLAUSE__SCANTEMP_:
12188 case OMP_CLAUSE__SIMDUID_:
12189 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
12190 /* FALLTHRU */
12191
12192 case OMP_CLAUSE_INDEPENDENT:
12193 case OMP_CLAUSE_NOWAIT:
12194 case OMP_CLAUSE_DEFAULT:
12195 case OMP_CLAUSE_UNTIED:
12196 case OMP_CLAUSE_MERGEABLE:
12197 case OMP_CLAUSE_PROC_BIND:
12198 case OMP_CLAUSE_DEVICE_TYPE:
12199 case OMP_CLAUSE_INBRANCH:
12200 case OMP_CLAUSE_NOTINBRANCH:
12201 case OMP_CLAUSE_FOR:
12202 case OMP_CLAUSE_PARALLEL:
12203 case OMP_CLAUSE_SECTIONS:
12204 case OMP_CLAUSE_TASKGROUP:
12205 case OMP_CLAUSE_NOGROUP:
12206 case OMP_CLAUSE_THREADS:
12207 case OMP_CLAUSE_SIMD:
12208 case OMP_CLAUSE_DEFAULTMAP:
12209 case OMP_CLAUSE_ORDER:
12210 case OMP_CLAUSE_BIND:
12211 case OMP_CLAUSE_AUTO:
12212 case OMP_CLAUSE_SEQ:
12213 case OMP_CLAUSE_TILE:
12214 case OMP_CLAUSE__SIMT_:
12215 case OMP_CLAUSE_IF_PRESENT:
12216 case OMP_CLAUSE_FINALIZE:
12217 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12218
12219 case OMP_CLAUSE_LASTPRIVATE:
12220 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12221 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
12222 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12223
12224 case OMP_CLAUSE_COLLAPSE:
12225 {
12226 int i;
12227 for (i = 0; i < 3; i++)
12228 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12229 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12230 }
12231
12232 case OMP_CLAUSE_LINEAR:
12233 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12234 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
12235 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
12236 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12237
12238 case OMP_CLAUSE_ALIGNED:
12239 case OMP_CLAUSE_ALLOCATE:
12240 case OMP_CLAUSE_FROM:
12241 case OMP_CLAUSE_TO:
12242 case OMP_CLAUSE_MAP:
12243 case OMP_CLAUSE__CACHE_:
12244 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12245 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
12246 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12247
12248 case OMP_CLAUSE_REDUCTION:
12249 case OMP_CLAUSE_TASK_REDUCTION:
12250 case OMP_CLAUSE_IN_REDUCTION:
12251 {
12252 int i;
12253 for (i = 0; i < 5; i++)
12254 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12255 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12256 }
12257
12258 default:
12259 gcc_unreachable ();
12260 }
12261 break;
12262
12263 case TARGET_EXPR:
12264 {
12265 int i, len;
12266
12267 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
12268 But, we only want to walk once. */
12269 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
12270 for (i = 0; i < len; ++i)
12271 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12272 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
12273 }
12274
12275 case DECL_EXPR:
12276 /* If this is a TYPE_DECL, walk into the fields of the type that it's
12277 defining. We only want to walk into these fields of a type in this
12278 case and not in the general case of a mere reference to the type.
12279
12280 The criterion is as follows: if the field can be an expression, it
12281 must be walked only here. This should be in keeping with the fields
12282 that are directly gimplified in gimplify_type_sizes in order for the
12283 mark/copy-if-shared/unmark machinery of the gimplifier to work with
12284 variable-sized types.
12285
12286 Note that DECLs get walked as part of processing the BIND_EXPR. */
12287 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
12288 {
12289 /* Call the function for the decl so e.g. copy_tree_body_r can
12290 replace it with the remapped one. */
12291 result = (*func) (&DECL_EXPR_DECL (*tp), &walk_subtrees, data);
12292 if (result || !walk_subtrees)
12293 return result;
12294
12295 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
12296 if (TREE_CODE (*type_p) == ERROR_MARK)
12297 return NULL_TREE;
12298
12299 /* Call the function for the type. See if it returns anything or
12300 doesn't want us to continue. If we are to continue, walk both
12301 the normal fields and those for the declaration case. */
12302 result = (*func) (type_p, &walk_subtrees, data);
12303 if (result || !walk_subtrees)
12304 return result;
12305
12306 /* But do not walk a pointed-to type since it may itself need to
12307 be walked in the declaration case if it isn't anonymous. */
12308 if (!POINTER_TYPE_P (*type_p))
12309 {
12310 result = walk_type_fields (*type_p, func, data, pset, lh);
12311 if (result)
12312 return result;
12313 }
12314
12315 /* If this is a record type, also walk the fields. */
12316 if (RECORD_OR_UNION_TYPE_P (*type_p))
12317 {
12318 tree field;
12319
12320 for (field = TYPE_FIELDS (*type_p); field;
12321 field = DECL_CHAIN (field))
12322 {
12323 /* We'd like to look at the type of the field, but we can
12324 easily get infinite recursion. So assume it's pointed
12325 to elsewhere in the tree. Also, ignore things that
12326 aren't fields. */
12327 if (TREE_CODE (field) != FIELD_DECL)
12328 continue;
12329
12330 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
12331 WALK_SUBTREE (DECL_SIZE (field));
12332 WALK_SUBTREE (DECL_SIZE_UNIT (field));
12333 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
12334 WALK_SUBTREE (DECL_QUALIFIER (field));
12335 }
12336 }
12337
12338 /* Same for scalar types. */
12339 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
12340 || TREE_CODE (*type_p) == ENUMERAL_TYPE
12341 || TREE_CODE (*type_p) == INTEGER_TYPE
12342 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
12343 || TREE_CODE (*type_p) == REAL_TYPE)
12344 {
12345 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
12346 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
12347 }
12348
12349 WALK_SUBTREE (TYPE_SIZE (*type_p));
12350 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
12351 }
12352 /* FALLTHRU */
12353
12354 default:
12355 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
12356 {
12357 int i, len;
12358
12359 /* Walk over all the sub-trees of this operand. */
12360 len = TREE_OPERAND_LENGTH (*tp);
12361
12362 /* Go through the subtrees. We need to do this in forward order so
12363 that the scope of a FOR_EXPR is handled properly. */
12364 if (len)
12365 {
12366 for (i = 0; i < len - 1; ++i)
12367 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12368 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
12369 }
12370 }
12371 /* If this is a type, walk the needed fields in the type. */
12372 else if (TYPE_P (*tp))
12373 return walk_type_fields (*tp, func, data, pset, lh);
12374 break;
12375 }
12376
12377 /* We didn't find what we were looking for. */
12378 return NULL_TREE;
12379
12380 #undef WALK_SUBTREE_TAIL
12381 }
12382 #undef WALK_SUBTREE
12383
12384 /* Like walk_tree, but does not walk duplicate nodes more than once. */
12385
12386 tree
12387 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
12388 walk_tree_lh lh)
12389 {
12390 tree result;
12391
12392 hash_set<tree> pset;
12393 result = walk_tree_1 (tp, func, data, &pset, lh);
12394 return result;
12395 }
12396
12397
12398 tree
12399 tree_block (tree t)
12400 {
12401 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12402
12403 if (IS_EXPR_CODE_CLASS (c))
12404 return LOCATION_BLOCK (t->exp.locus);
12405 gcc_unreachable ();
12406 return NULL;
12407 }
12408
12409 void
12410 tree_set_block (tree t, tree b)
12411 {
12412 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12413
12414 if (IS_EXPR_CODE_CLASS (c))
12415 {
12416 t->exp.locus = set_block (t->exp.locus, b);
12417 }
12418 else
12419 gcc_unreachable ();
12420 }
12421
12422 /* Create a nameless artificial label and put it in the current
12423 function context. The label has a location of LOC. Returns the
12424 newly created label. */
12425
12426 tree
12427 create_artificial_label (location_t loc)
12428 {
12429 tree lab = build_decl (loc,
12430 LABEL_DECL, NULL_TREE, void_type_node);
12431
12432 DECL_ARTIFICIAL (lab) = 1;
12433 DECL_IGNORED_P (lab) = 1;
12434 DECL_CONTEXT (lab) = current_function_decl;
12435 return lab;
12436 }
12437
12438 /* Given a tree, try to return a useful variable name that we can use
12439 to prefix a temporary that is being assigned the value of the tree.
12440 I.E. given <temp> = &A, return A. */
12441
12442 const char *
12443 get_name (tree t)
12444 {
12445 tree stripped_decl;
12446
12447 stripped_decl = t;
12448 STRIP_NOPS (stripped_decl);
12449 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
12450 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
12451 else if (TREE_CODE (stripped_decl) == SSA_NAME)
12452 {
12453 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
12454 if (!name)
12455 return NULL;
12456 return IDENTIFIER_POINTER (name);
12457 }
12458 else
12459 {
12460 switch (TREE_CODE (stripped_decl))
12461 {
12462 case ADDR_EXPR:
12463 return get_name (TREE_OPERAND (stripped_decl, 0));
12464 default:
12465 return NULL;
12466 }
12467 }
12468 }
12469
12470 /* Return true if TYPE has a variable argument list. */
12471
12472 bool
12473 stdarg_p (const_tree fntype)
12474 {
12475 function_args_iterator args_iter;
12476 tree n = NULL_TREE, t;
12477
12478 if (!fntype)
12479 return false;
12480
12481 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
12482 {
12483 n = t;
12484 }
12485
12486 return n != NULL_TREE && n != void_type_node;
12487 }
12488
12489 /* Return true if TYPE has a prototype. */
12490
12491 bool
12492 prototype_p (const_tree fntype)
12493 {
12494 tree t;
12495
12496 gcc_assert (fntype != NULL_TREE);
12497
12498 t = TYPE_ARG_TYPES (fntype);
12499 return (t != NULL_TREE);
12500 }
12501
12502 /* If BLOCK is inlined from an __attribute__((__artificial__))
12503 routine, return pointer to location from where it has been
12504 called. */
12505 location_t *
12506 block_nonartificial_location (tree block)
12507 {
12508 location_t *ret = NULL;
12509
12510 while (block && TREE_CODE (block) == BLOCK
12511 && BLOCK_ABSTRACT_ORIGIN (block))
12512 {
12513 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
12514 if (TREE_CODE (ao) == FUNCTION_DECL)
12515 {
12516 /* If AO is an artificial inline, point RET to the
12517 call site locus at which it has been inlined and continue
12518 the loop, in case AO's caller is also an artificial
12519 inline. */
12520 if (DECL_DECLARED_INLINE_P (ao)
12521 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
12522 ret = &BLOCK_SOURCE_LOCATION (block);
12523 else
12524 break;
12525 }
12526 else if (TREE_CODE (ao) != BLOCK)
12527 break;
12528
12529 block = BLOCK_SUPERCONTEXT (block);
12530 }
12531 return ret;
12532 }
12533
12534
12535 /* If EXP is inlined from an __attribute__((__artificial__))
12536 function, return the location of the original call expression. */
12537
12538 location_t
12539 tree_nonartificial_location (tree exp)
12540 {
12541 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
12542
12543 if (loc)
12544 return *loc;
12545 else
12546 return EXPR_LOCATION (exp);
12547 }
12548
12549
12550 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
12551 nodes. */
12552
12553 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
12554
12555 hashval_t
12556 cl_option_hasher::hash (tree x)
12557 {
12558 const_tree const t = x;
12559 const char *p;
12560 size_t i;
12561 size_t len = 0;
12562 hashval_t hash = 0;
12563
12564 if (TREE_CODE (t) == OPTIMIZATION_NODE)
12565 {
12566 p = (const char *)TREE_OPTIMIZATION (t);
12567 len = sizeof (struct cl_optimization);
12568 }
12569
12570 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
12571 return cl_target_option_hash (TREE_TARGET_OPTION (t));
12572
12573 else
12574 gcc_unreachable ();
12575
12576 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
12577 something else. */
12578 for (i = 0; i < len; i++)
12579 if (p[i])
12580 hash = (hash << 4) ^ ((i << 2) | p[i]);
12581
12582 return hash;
12583 }
12584
12585 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
12586 TARGET_OPTION tree node) is the same as that given by *Y, which is the
12587 same. */
12588
12589 bool
12590 cl_option_hasher::equal (tree x, tree y)
12591 {
12592 const_tree const xt = x;
12593 const_tree const yt = y;
12594
12595 if (TREE_CODE (xt) != TREE_CODE (yt))
12596 return 0;
12597
12598 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
12599 return cl_optimization_option_eq (TREE_OPTIMIZATION (xt),
12600 TREE_OPTIMIZATION (yt));
12601 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
12602 return cl_target_option_eq (TREE_TARGET_OPTION (xt),
12603 TREE_TARGET_OPTION (yt));
12604 else
12605 gcc_unreachable ();
12606 }
12607
12608 /* Build an OPTIMIZATION_NODE based on the options in OPTS and OPTS_SET. */
12609
12610 tree
12611 build_optimization_node (struct gcc_options *opts,
12612 struct gcc_options *opts_set)
12613 {
12614 tree t;
12615
12616 /* Use the cache of optimization nodes. */
12617
12618 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
12619 opts, opts_set);
12620
12621 tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
12622 t = *slot;
12623 if (!t)
12624 {
12625 /* Insert this one into the hash table. */
12626 t = cl_optimization_node;
12627 *slot = t;
12628
12629 /* Make a new node for next time round. */
12630 cl_optimization_node = make_node (OPTIMIZATION_NODE);
12631 }
12632
12633 return t;
12634 }
12635
12636 /* Build a TARGET_OPTION_NODE based on the options in OPTS and OPTS_SET. */
12637
12638 tree
12639 build_target_option_node (struct gcc_options *opts,
12640 struct gcc_options *opts_set)
12641 {
12642 tree t;
12643
12644 /* Use the cache of optimization nodes. */
12645
12646 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
12647 opts, opts_set);
12648
12649 tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
12650 t = *slot;
12651 if (!t)
12652 {
12653 /* Insert this one into the hash table. */
12654 t = cl_target_option_node;
12655 *slot = t;
12656
12657 /* Make a new node for next time round. */
12658 cl_target_option_node = make_node (TARGET_OPTION_NODE);
12659 }
12660
12661 return t;
12662 }
12663
12664 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
12665 so that they aren't saved during PCH writing. */
12666
12667 void
12668 prepare_target_option_nodes_for_pch (void)
12669 {
12670 hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
12671 for (; iter != cl_option_hash_table->end (); ++iter)
12672 if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
12673 TREE_TARGET_GLOBALS (*iter) = NULL;
12674 }
12675
12676 /* Determine the "ultimate origin" of a block. */
12677
12678 tree
12679 block_ultimate_origin (const_tree block)
12680 {
12681 tree origin = BLOCK_ABSTRACT_ORIGIN (block);
12682
12683 if (origin == NULL_TREE)
12684 return NULL_TREE;
12685 else
12686 {
12687 gcc_checking_assert ((DECL_P (origin)
12688 && DECL_ORIGIN (origin) == origin)
12689 || BLOCK_ORIGIN (origin) == origin);
12690 return origin;
12691 }
12692 }
12693
12694 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
12695 no instruction. */
12696
12697 bool
12698 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
12699 {
12700 /* Do not strip casts into or out of differing address spaces. */
12701 if (POINTER_TYPE_P (outer_type)
12702 && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
12703 {
12704 if (!POINTER_TYPE_P (inner_type)
12705 || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
12706 != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
12707 return false;
12708 }
12709 else if (POINTER_TYPE_P (inner_type)
12710 && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
12711 {
12712 /* We already know that outer_type is not a pointer with
12713 a non-generic address space. */
12714 return false;
12715 }
12716
12717 /* Use precision rather then machine mode when we can, which gives
12718 the correct answer even for submode (bit-field) types. */
12719 if ((INTEGRAL_TYPE_P (outer_type)
12720 || POINTER_TYPE_P (outer_type)
12721 || TREE_CODE (outer_type) == OFFSET_TYPE)
12722 && (INTEGRAL_TYPE_P (inner_type)
12723 || POINTER_TYPE_P (inner_type)
12724 || TREE_CODE (inner_type) == OFFSET_TYPE))
12725 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
12726
12727 /* Otherwise fall back on comparing machine modes (e.g. for
12728 aggregate types, floats). */
12729 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
12730 }
12731
12732 /* Return true iff conversion in EXP generates no instruction. Mark
12733 it inline so that we fully inline into the stripping functions even
12734 though we have two uses of this function. */
12735
12736 static inline bool
12737 tree_nop_conversion (const_tree exp)
12738 {
12739 tree outer_type, inner_type;
12740
12741 if (location_wrapper_p (exp))
12742 return true;
12743 if (!CONVERT_EXPR_P (exp)
12744 && TREE_CODE (exp) != NON_LVALUE_EXPR)
12745 return false;
12746
12747 outer_type = TREE_TYPE (exp);
12748 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12749 if (!inner_type || inner_type == error_mark_node)
12750 return false;
12751
12752 return tree_nop_conversion_p (outer_type, inner_type);
12753 }
12754
12755 /* Return true iff conversion in EXP generates no instruction. Don't
12756 consider conversions changing the signedness. */
12757
12758 static bool
12759 tree_sign_nop_conversion (const_tree exp)
12760 {
12761 tree outer_type, inner_type;
12762
12763 if (!tree_nop_conversion (exp))
12764 return false;
12765
12766 outer_type = TREE_TYPE (exp);
12767 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12768
12769 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
12770 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
12771 }
12772
12773 /* Strip conversions from EXP according to tree_nop_conversion and
12774 return the resulting expression. */
12775
12776 tree
12777 tree_strip_nop_conversions (tree exp)
12778 {
12779 while (tree_nop_conversion (exp))
12780 exp = TREE_OPERAND (exp, 0);
12781 return exp;
12782 }
12783
12784 /* Strip conversions from EXP according to tree_sign_nop_conversion
12785 and return the resulting expression. */
12786
12787 tree
12788 tree_strip_sign_nop_conversions (tree exp)
12789 {
12790 while (tree_sign_nop_conversion (exp))
12791 exp = TREE_OPERAND (exp, 0);
12792 return exp;
12793 }
12794
12795 /* Avoid any floating point extensions from EXP. */
12796 tree
12797 strip_float_extensions (tree exp)
12798 {
12799 tree sub, expt, subt;
12800
12801 /* For floating point constant look up the narrowest type that can hold
12802 it properly and handle it like (type)(narrowest_type)constant.
12803 This way we can optimize for instance a=a*2.0 where "a" is float
12804 but 2.0 is double constant. */
12805 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
12806 {
12807 REAL_VALUE_TYPE orig;
12808 tree type = NULL;
12809
12810 orig = TREE_REAL_CST (exp);
12811 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12812 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12813 type = float_type_node;
12814 else if (TYPE_PRECISION (TREE_TYPE (exp))
12815 > TYPE_PRECISION (double_type_node)
12816 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12817 type = double_type_node;
12818 if (type)
12819 return build_real_truncate (type, orig);
12820 }
12821
12822 if (!CONVERT_EXPR_P (exp))
12823 return exp;
12824
12825 sub = TREE_OPERAND (exp, 0);
12826 subt = TREE_TYPE (sub);
12827 expt = TREE_TYPE (exp);
12828
12829 if (!FLOAT_TYPE_P (subt))
12830 return exp;
12831
12832 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12833 return exp;
12834
12835 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12836 return exp;
12837
12838 return strip_float_extensions (sub);
12839 }
12840
12841 /* Strip out all handled components that produce invariant
12842 offsets. */
12843
12844 const_tree
12845 strip_invariant_refs (const_tree op)
12846 {
12847 while (handled_component_p (op))
12848 {
12849 switch (TREE_CODE (op))
12850 {
12851 case ARRAY_REF:
12852 case ARRAY_RANGE_REF:
12853 if (!is_gimple_constant (TREE_OPERAND (op, 1))
12854 || TREE_OPERAND (op, 2) != NULL_TREE
12855 || TREE_OPERAND (op, 3) != NULL_TREE)
12856 return NULL;
12857 break;
12858
12859 case COMPONENT_REF:
12860 if (TREE_OPERAND (op, 2) != NULL_TREE)
12861 return NULL;
12862 break;
12863
12864 default:;
12865 }
12866 op = TREE_OPERAND (op, 0);
12867 }
12868
12869 return op;
12870 }
12871
12872 static GTY(()) tree gcc_eh_personality_decl;
12873
12874 /* Return the GCC personality function decl. */
12875
12876 tree
12877 lhd_gcc_personality (void)
12878 {
12879 if (!gcc_eh_personality_decl)
12880 gcc_eh_personality_decl = build_personality_function ("gcc");
12881 return gcc_eh_personality_decl;
12882 }
12883
12884 /* TARGET is a call target of GIMPLE call statement
12885 (obtained by gimple_call_fn). Return true if it is
12886 OBJ_TYPE_REF representing an virtual call of C++ method.
12887 (As opposed to OBJ_TYPE_REF representing objc calls
12888 through a cast where middle-end devirtualization machinery
12889 can't apply.) FOR_DUMP_P is true when being called from
12890 the dump routines. */
12891
12892 bool
12893 virtual_method_call_p (const_tree target, bool for_dump_p)
12894 {
12895 if (TREE_CODE (target) != OBJ_TYPE_REF)
12896 return false;
12897 tree t = TREE_TYPE (target);
12898 gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12899 t = TREE_TYPE (t);
12900 if (TREE_CODE (t) == FUNCTION_TYPE)
12901 return false;
12902 gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12903 /* If we do not have BINFO associated, it means that type was built
12904 without devirtualization enabled. Do not consider this a virtual
12905 call. */
12906 if (!TYPE_BINFO (obj_type_ref_class (target, for_dump_p)))
12907 return false;
12908 return true;
12909 }
12910
12911 /* Lookup sub-BINFO of BINFO of TYPE at offset POS. */
12912
12913 static tree
12914 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12915 {
12916 unsigned int i;
12917 tree base_binfo, b;
12918
12919 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12920 if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12921 && types_same_for_odr (TREE_TYPE (base_binfo), type))
12922 return base_binfo;
12923 else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12924 return b;
12925 return NULL;
12926 }
12927
12928 /* Try to find a base info of BINFO that would have its field decl at offset
12929 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
12930 found, return, otherwise return NULL_TREE. */
12931
12932 tree
12933 get_binfo_at_offset (tree binfo, poly_int64 offset, tree expected_type)
12934 {
12935 tree type = BINFO_TYPE (binfo);
12936
12937 while (true)
12938 {
12939 HOST_WIDE_INT pos, size;
12940 tree fld;
12941 int i;
12942
12943 if (types_same_for_odr (type, expected_type))
12944 return binfo;
12945 if (maybe_lt (offset, 0))
12946 return NULL_TREE;
12947
12948 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12949 {
12950 if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12951 continue;
12952
12953 pos = int_bit_position (fld);
12954 size = tree_to_uhwi (DECL_SIZE (fld));
12955 if (known_in_range_p (offset, pos, size))
12956 break;
12957 }
12958 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12959 return NULL_TREE;
12960
12961 /* Offset 0 indicates the primary base, whose vtable contents are
12962 represented in the binfo for the derived class. */
12963 else if (maybe_ne (offset, 0))
12964 {
12965 tree found_binfo = NULL, base_binfo;
12966 /* Offsets in BINFO are in bytes relative to the whole structure
12967 while POS is in bits relative to the containing field. */
12968 int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12969 / BITS_PER_UNIT);
12970
12971 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12972 if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12973 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12974 {
12975 found_binfo = base_binfo;
12976 break;
12977 }
12978 if (found_binfo)
12979 binfo = found_binfo;
12980 else
12981 binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12982 binfo_offset);
12983 }
12984
12985 type = TREE_TYPE (fld);
12986 offset -= pos;
12987 }
12988 }
12989
12990 /* Returns true if X is a typedef decl. */
12991
12992 bool
12993 is_typedef_decl (const_tree x)
12994 {
12995 return (x && TREE_CODE (x) == TYPE_DECL
12996 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12997 }
12998
12999 /* Returns true iff TYPE is a type variant created for a typedef. */
13000
13001 bool
13002 typedef_variant_p (const_tree type)
13003 {
13004 return is_typedef_decl (TYPE_NAME (type));
13005 }
13006
13007 /* PR 84195: Replace control characters in "unescaped" with their
13008 escaped equivalents. Allow newlines if -fmessage-length has
13009 been set to a non-zero value. This is done here, rather than
13010 where the attribute is recorded as the message length can
13011 change between these two locations. */
13012
13013 void
13014 escaped_string::escape (const char *unescaped)
13015 {
13016 char *escaped;
13017 size_t i, new_i, len;
13018
13019 if (m_owned)
13020 free (m_str);
13021
13022 m_str = const_cast<char *> (unescaped);
13023 m_owned = false;
13024
13025 if (unescaped == NULL || *unescaped == 0)
13026 return;
13027
13028 len = strlen (unescaped);
13029 escaped = NULL;
13030 new_i = 0;
13031
13032 for (i = 0; i < len; i++)
13033 {
13034 char c = unescaped[i];
13035
13036 if (!ISCNTRL (c))
13037 {
13038 if (escaped)
13039 escaped[new_i++] = c;
13040 continue;
13041 }
13042
13043 if (c != '\n' || !pp_is_wrapping_line (global_dc->printer))
13044 {
13045 if (escaped == NULL)
13046 {
13047 /* We only allocate space for a new string if we
13048 actually encounter a control character that
13049 needs replacing. */
13050 escaped = (char *) xmalloc (len * 2 + 1);
13051 strncpy (escaped, unescaped, i);
13052 new_i = i;
13053 }
13054
13055 escaped[new_i++] = '\\';
13056
13057 switch (c)
13058 {
13059 case '\a': escaped[new_i++] = 'a'; break;
13060 case '\b': escaped[new_i++] = 'b'; break;
13061 case '\f': escaped[new_i++] = 'f'; break;
13062 case '\n': escaped[new_i++] = 'n'; break;
13063 case '\r': escaped[new_i++] = 'r'; break;
13064 case '\t': escaped[new_i++] = 't'; break;
13065 case '\v': escaped[new_i++] = 'v'; break;
13066 default: escaped[new_i++] = '?'; break;
13067 }
13068 }
13069 else if (escaped)
13070 escaped[new_i++] = c;
13071 }
13072
13073 if (escaped)
13074 {
13075 escaped[new_i] = 0;
13076 m_str = escaped;
13077 m_owned = true;
13078 }
13079 }
13080
13081 /* Warn about a use of an identifier which was marked deprecated. Returns
13082 whether a warning was given. */
13083
13084 bool
13085 warn_deprecated_use (tree node, tree attr)
13086 {
13087 escaped_string msg;
13088
13089 if (node == 0 || !warn_deprecated_decl)
13090 return false;
13091
13092 if (!attr)
13093 {
13094 if (DECL_P (node))
13095 attr = DECL_ATTRIBUTES (node);
13096 else if (TYPE_P (node))
13097 {
13098 tree decl = TYPE_STUB_DECL (node);
13099 if (decl)
13100 attr = lookup_attribute ("deprecated",
13101 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
13102 }
13103 }
13104
13105 if (attr)
13106 attr = lookup_attribute ("deprecated", attr);
13107
13108 if (attr)
13109 msg.escape (TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
13110
13111 bool w = false;
13112 if (DECL_P (node))
13113 {
13114 auto_diagnostic_group d;
13115 if (msg)
13116 w = warning (OPT_Wdeprecated_declarations,
13117 "%qD is deprecated: %s", node, (const char *) msg);
13118 else
13119 w = warning (OPT_Wdeprecated_declarations,
13120 "%qD is deprecated", node);
13121 if (w)
13122 inform (DECL_SOURCE_LOCATION (node), "declared here");
13123 }
13124 else if (TYPE_P (node))
13125 {
13126 tree what = NULL_TREE;
13127 tree decl = TYPE_STUB_DECL (node);
13128
13129 if (TYPE_NAME (node))
13130 {
13131 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
13132 what = TYPE_NAME (node);
13133 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
13134 && DECL_NAME (TYPE_NAME (node)))
13135 what = DECL_NAME (TYPE_NAME (node));
13136 }
13137
13138 auto_diagnostic_group d;
13139 if (what)
13140 {
13141 if (msg)
13142 w = warning (OPT_Wdeprecated_declarations,
13143 "%qE is deprecated: %s", what, (const char *) msg);
13144 else
13145 w = warning (OPT_Wdeprecated_declarations,
13146 "%qE is deprecated", what);
13147 }
13148 else
13149 {
13150 if (msg)
13151 w = warning (OPT_Wdeprecated_declarations,
13152 "type is deprecated: %s", (const char *) msg);
13153 else
13154 w = warning (OPT_Wdeprecated_declarations,
13155 "type is deprecated");
13156 }
13157
13158 if (w && decl)
13159 inform (DECL_SOURCE_LOCATION (decl), "declared here");
13160 }
13161
13162 return w;
13163 }
13164
13165 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
13166 somewhere in it. */
13167
13168 bool
13169 contains_bitfld_component_ref_p (const_tree ref)
13170 {
13171 while (handled_component_p (ref))
13172 {
13173 if (TREE_CODE (ref) == COMPONENT_REF
13174 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
13175 return true;
13176 ref = TREE_OPERAND (ref, 0);
13177 }
13178
13179 return false;
13180 }
13181
13182 /* Try to determine whether a TRY_CATCH expression can fall through.
13183 This is a subroutine of block_may_fallthru. */
13184
13185 static bool
13186 try_catch_may_fallthru (const_tree stmt)
13187 {
13188 tree_stmt_iterator i;
13189
13190 /* If the TRY block can fall through, the whole TRY_CATCH can
13191 fall through. */
13192 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
13193 return true;
13194
13195 i = tsi_start (TREE_OPERAND (stmt, 1));
13196 switch (TREE_CODE (tsi_stmt (i)))
13197 {
13198 case CATCH_EXPR:
13199 /* We expect to see a sequence of CATCH_EXPR trees, each with a
13200 catch expression and a body. The whole TRY_CATCH may fall
13201 through iff any of the catch bodies falls through. */
13202 for (; !tsi_end_p (i); tsi_next (&i))
13203 {
13204 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
13205 return true;
13206 }
13207 return false;
13208
13209 case EH_FILTER_EXPR:
13210 /* The exception filter expression only matters if there is an
13211 exception. If the exception does not match EH_FILTER_TYPES,
13212 we will execute EH_FILTER_FAILURE, and we will fall through
13213 if that falls through. If the exception does match
13214 EH_FILTER_TYPES, the stack unwinder will continue up the
13215 stack, so we will not fall through. We don't know whether we
13216 will throw an exception which matches EH_FILTER_TYPES or not,
13217 so we just ignore EH_FILTER_TYPES and assume that we might
13218 throw an exception which doesn't match. */
13219 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
13220
13221 default:
13222 /* This case represents statements to be executed when an
13223 exception occurs. Those statements are implicitly followed
13224 by a RESX statement to resume execution after the exception.
13225 So in this case the TRY_CATCH never falls through. */
13226 return false;
13227 }
13228 }
13229
13230 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
13231 need not be 100% accurate; simply be conservative and return true if we
13232 don't know. This is used only to avoid stupidly generating extra code.
13233 If we're wrong, we'll just delete the extra code later. */
13234
13235 bool
13236 block_may_fallthru (const_tree block)
13237 {
13238 /* This CONST_CAST is okay because expr_last returns its argument
13239 unmodified and we assign it to a const_tree. */
13240 const_tree stmt = expr_last (CONST_CAST_TREE (block));
13241
13242 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
13243 {
13244 case GOTO_EXPR:
13245 case RETURN_EXPR:
13246 /* Easy cases. If the last statement of the block implies
13247 control transfer, then we can't fall through. */
13248 return false;
13249
13250 case SWITCH_EXPR:
13251 /* If there is a default: label or case labels cover all possible
13252 SWITCH_COND values, then the SWITCH_EXPR will transfer control
13253 to some case label in all cases and all we care is whether the
13254 SWITCH_BODY falls through. */
13255 if (SWITCH_ALL_CASES_P (stmt))
13256 return block_may_fallthru (SWITCH_BODY (stmt));
13257 return true;
13258
13259 case COND_EXPR:
13260 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
13261 return true;
13262 return block_may_fallthru (COND_EXPR_ELSE (stmt));
13263
13264 case BIND_EXPR:
13265 return block_may_fallthru (BIND_EXPR_BODY (stmt));
13266
13267 case TRY_CATCH_EXPR:
13268 return try_catch_may_fallthru (stmt);
13269
13270 case TRY_FINALLY_EXPR:
13271 /* The finally clause is always executed after the try clause,
13272 so if it does not fall through, then the try-finally will not
13273 fall through. Otherwise, if the try clause does not fall
13274 through, then when the finally clause falls through it will
13275 resume execution wherever the try clause was going. So the
13276 whole try-finally will only fall through if both the try
13277 clause and the finally clause fall through. */
13278 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
13279 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
13280
13281 case EH_ELSE_EXPR:
13282 return block_may_fallthru (TREE_OPERAND (stmt, 0));
13283
13284 case MODIFY_EXPR:
13285 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
13286 stmt = TREE_OPERAND (stmt, 1);
13287 else
13288 return true;
13289 /* FALLTHRU */
13290
13291 case CALL_EXPR:
13292 /* Functions that do not return do not fall through. */
13293 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
13294
13295 case CLEANUP_POINT_EXPR:
13296 return block_may_fallthru (TREE_OPERAND (stmt, 0));
13297
13298 case TARGET_EXPR:
13299 return block_may_fallthru (TREE_OPERAND (stmt, 1));
13300
13301 case ERROR_MARK:
13302 return true;
13303
13304 default:
13305 return lang_hooks.block_may_fallthru (stmt);
13306 }
13307 }
13308
13309 /* True if we are using EH to handle cleanups. */
13310 static bool using_eh_for_cleanups_flag = false;
13311
13312 /* This routine is called from front ends to indicate eh should be used for
13313 cleanups. */
13314 void
13315 using_eh_for_cleanups (void)
13316 {
13317 using_eh_for_cleanups_flag = true;
13318 }
13319
13320 /* Query whether EH is used for cleanups. */
13321 bool
13322 using_eh_for_cleanups_p (void)
13323 {
13324 return using_eh_for_cleanups_flag;
13325 }
13326
13327 /* Wrapper for tree_code_name to ensure that tree code is valid */
13328 const char *
13329 get_tree_code_name (enum tree_code code)
13330 {
13331 const char *invalid = "<invalid tree code>";
13332
13333 /* The tree_code enum promotes to signed, but we could be getting
13334 invalid values, so force an unsigned comparison. */
13335 if (unsigned (code) >= MAX_TREE_CODES)
13336 {
13337 if (code == 0xa5a5)
13338 return "ggc_freed";
13339 return invalid;
13340 }
13341
13342 return tree_code_name[code];
13343 }
13344
13345 /* Drops the TREE_OVERFLOW flag from T. */
13346
13347 tree
13348 drop_tree_overflow (tree t)
13349 {
13350 gcc_checking_assert (TREE_OVERFLOW (t));
13351
13352 /* For tree codes with a sharing machinery re-build the result. */
13353 if (poly_int_tree_p (t))
13354 return wide_int_to_tree (TREE_TYPE (t), wi::to_poly_wide (t));
13355
13356 /* For VECTOR_CST, remove the overflow bits from the encoded elements
13357 and canonicalize the result. */
13358 if (TREE_CODE (t) == VECTOR_CST)
13359 {
13360 tree_vector_builder builder;
13361 builder.new_unary_operation (TREE_TYPE (t), t, true);
13362 unsigned int count = builder.encoded_nelts ();
13363 for (unsigned int i = 0; i < count; ++i)
13364 {
13365 tree elt = VECTOR_CST_ELT (t, i);
13366 if (TREE_OVERFLOW (elt))
13367 elt = drop_tree_overflow (elt);
13368 builder.quick_push (elt);
13369 }
13370 return builder.build ();
13371 }
13372
13373 /* Otherwise, as all tcc_constants are possibly shared, copy the node
13374 and drop the flag. */
13375 t = copy_node (t);
13376 TREE_OVERFLOW (t) = 0;
13377
13378 /* For constants that contain nested constants, drop the flag
13379 from those as well. */
13380 if (TREE_CODE (t) == COMPLEX_CST)
13381 {
13382 if (TREE_OVERFLOW (TREE_REALPART (t)))
13383 TREE_REALPART (t) = drop_tree_overflow (TREE_REALPART (t));
13384 if (TREE_OVERFLOW (TREE_IMAGPART (t)))
13385 TREE_IMAGPART (t) = drop_tree_overflow (TREE_IMAGPART (t));
13386 }
13387
13388 return t;
13389 }
13390
13391 /* Given a memory reference expression T, return its base address.
13392 The base address of a memory reference expression is the main
13393 object being referenced. For instance, the base address for
13394 'array[i].fld[j]' is 'array'. You can think of this as stripping
13395 away the offset part from a memory address.
13396
13397 This function calls handled_component_p to strip away all the inner
13398 parts of the memory reference until it reaches the base object. */
13399
13400 tree
13401 get_base_address (tree t)
13402 {
13403 while (handled_component_p (t))
13404 t = TREE_OPERAND (t, 0);
13405
13406 if ((TREE_CODE (t) == MEM_REF
13407 || TREE_CODE (t) == TARGET_MEM_REF)
13408 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
13409 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
13410
13411 /* ??? Either the alias oracle or all callers need to properly deal
13412 with WITH_SIZE_EXPRs before we can look through those. */
13413 if (TREE_CODE (t) == WITH_SIZE_EXPR)
13414 return NULL_TREE;
13415
13416 return t;
13417 }
13418
13419 /* Return a tree of sizetype representing the size, in bytes, of the element
13420 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13421
13422 tree
13423 array_ref_element_size (tree exp)
13424 {
13425 tree aligned_size = TREE_OPERAND (exp, 3);
13426 tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
13427 location_t loc = EXPR_LOCATION (exp);
13428
13429 /* If a size was specified in the ARRAY_REF, it's the size measured
13430 in alignment units of the element type. So multiply by that value. */
13431 if (aligned_size)
13432 {
13433 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13434 sizetype from another type of the same width and signedness. */
13435 if (TREE_TYPE (aligned_size) != sizetype)
13436 aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
13437 return size_binop_loc (loc, MULT_EXPR, aligned_size,
13438 size_int (TYPE_ALIGN_UNIT (elmt_type)));
13439 }
13440
13441 /* Otherwise, take the size from that of the element type. Substitute
13442 any PLACEHOLDER_EXPR that we have. */
13443 else
13444 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
13445 }
13446
13447 /* Return a tree representing the lower bound of the array mentioned in
13448 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13449
13450 tree
13451 array_ref_low_bound (tree exp)
13452 {
13453 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13454
13455 /* If a lower bound is specified in EXP, use it. */
13456 if (TREE_OPERAND (exp, 2))
13457 return TREE_OPERAND (exp, 2);
13458
13459 /* Otherwise, if there is a domain type and it has a lower bound, use it,
13460 substituting for a PLACEHOLDER_EXPR as needed. */
13461 if (domain_type && TYPE_MIN_VALUE (domain_type))
13462 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
13463
13464 /* Otherwise, return a zero of the appropriate type. */
13465 tree idxtype = TREE_TYPE (TREE_OPERAND (exp, 1));
13466 return (idxtype == error_mark_node
13467 ? integer_zero_node : build_int_cst (idxtype, 0));
13468 }
13469
13470 /* Return a tree representing the upper bound of the array mentioned in
13471 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13472
13473 tree
13474 array_ref_up_bound (tree exp)
13475 {
13476 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13477
13478 /* If there is a domain type and it has an upper bound, use it, substituting
13479 for a PLACEHOLDER_EXPR as needed. */
13480 if (domain_type && TYPE_MAX_VALUE (domain_type))
13481 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
13482
13483 /* Otherwise fail. */
13484 return NULL_TREE;
13485 }
13486
13487 /* Returns true if REF is an array reference, component reference,
13488 or memory reference to an array at the end of a structure.
13489 If this is the case, the array may be allocated larger
13490 than its upper bound implies. */
13491
13492 bool
13493 array_at_struct_end_p (tree ref)
13494 {
13495 tree atype;
13496
13497 if (TREE_CODE (ref) == ARRAY_REF
13498 || TREE_CODE (ref) == ARRAY_RANGE_REF)
13499 {
13500 atype = TREE_TYPE (TREE_OPERAND (ref, 0));
13501 ref = TREE_OPERAND (ref, 0);
13502 }
13503 else if (TREE_CODE (ref) == COMPONENT_REF
13504 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 1))) == ARRAY_TYPE)
13505 atype = TREE_TYPE (TREE_OPERAND (ref, 1));
13506 else if (TREE_CODE (ref) == MEM_REF)
13507 {
13508 tree arg = TREE_OPERAND (ref, 0);
13509 if (TREE_CODE (arg) == ADDR_EXPR)
13510 arg = TREE_OPERAND (arg, 0);
13511 tree argtype = TREE_TYPE (arg);
13512 if (TREE_CODE (argtype) == RECORD_TYPE)
13513 {
13514 if (tree fld = last_field (argtype))
13515 {
13516 atype = TREE_TYPE (fld);
13517 if (TREE_CODE (atype) != ARRAY_TYPE)
13518 return false;
13519 if (VAR_P (arg) && DECL_SIZE (fld))
13520 return false;
13521 }
13522 else
13523 return false;
13524 }
13525 else
13526 return false;
13527 }
13528 else
13529 return false;
13530
13531 if (TREE_CODE (ref) == STRING_CST)
13532 return false;
13533
13534 tree ref_to_array = ref;
13535 while (handled_component_p (ref))
13536 {
13537 /* If the reference chain contains a component reference to a
13538 non-union type and there follows another field the reference
13539 is not at the end of a structure. */
13540 if (TREE_CODE (ref) == COMPONENT_REF)
13541 {
13542 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
13543 {
13544 tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
13545 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
13546 nextf = DECL_CHAIN (nextf);
13547 if (nextf)
13548 return false;
13549 }
13550 }
13551 /* If we have a multi-dimensional array we do not consider
13552 a non-innermost dimension as flex array if the whole
13553 multi-dimensional array is at struct end.
13554 Same for an array of aggregates with a trailing array
13555 member. */
13556 else if (TREE_CODE (ref) == ARRAY_REF)
13557 return false;
13558 else if (TREE_CODE (ref) == ARRAY_RANGE_REF)
13559 ;
13560 /* If we view an underlying object as sth else then what we
13561 gathered up to now is what we have to rely on. */
13562 else if (TREE_CODE (ref) == VIEW_CONVERT_EXPR)
13563 break;
13564 else
13565 gcc_unreachable ();
13566
13567 ref = TREE_OPERAND (ref, 0);
13568 }
13569
13570 /* The array now is at struct end. Treat flexible arrays as
13571 always subject to extend, even into just padding constrained by
13572 an underlying decl. */
13573 if (! TYPE_SIZE (atype)
13574 || ! TYPE_DOMAIN (atype)
13575 || ! TYPE_MAX_VALUE (TYPE_DOMAIN (atype)))
13576 return true;
13577
13578 if (TREE_CODE (ref) == MEM_REF
13579 && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
13580 ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
13581
13582 /* If the reference is based on a declared entity, the size of the array
13583 is constrained by its given domain. (Do not trust commons PR/69368). */
13584 if (DECL_P (ref)
13585 && !(flag_unconstrained_commons
13586 && VAR_P (ref) && DECL_COMMON (ref))
13587 && DECL_SIZE_UNIT (ref)
13588 && TREE_CODE (DECL_SIZE_UNIT (ref)) == INTEGER_CST)
13589 {
13590 /* Check whether the array domain covers all of the available
13591 padding. */
13592 poly_int64 offset;
13593 if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (atype))) != INTEGER_CST
13594 || TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (atype))) != INTEGER_CST
13595 || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (atype))) != INTEGER_CST)
13596 return true;
13597 if (! get_addr_base_and_unit_offset (ref_to_array, &offset))
13598 return true;
13599
13600 /* If at least one extra element fits it is a flexarray. */
13601 if (known_le ((wi::to_offset (TYPE_MAX_VALUE (TYPE_DOMAIN (atype)))
13602 - wi::to_offset (TYPE_MIN_VALUE (TYPE_DOMAIN (atype)))
13603 + 2)
13604 * wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (atype))),
13605 wi::to_offset (DECL_SIZE_UNIT (ref)) - offset))
13606 return true;
13607
13608 return false;
13609 }
13610
13611 return true;
13612 }
13613
13614 /* Return a tree representing the offset, in bytes, of the field referenced
13615 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */
13616
13617 tree
13618 component_ref_field_offset (tree exp)
13619 {
13620 tree aligned_offset = TREE_OPERAND (exp, 2);
13621 tree field = TREE_OPERAND (exp, 1);
13622 location_t loc = EXPR_LOCATION (exp);
13623
13624 /* If an offset was specified in the COMPONENT_REF, it's the offset measured
13625 in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. So multiply by that
13626 value. */
13627 if (aligned_offset)
13628 {
13629 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13630 sizetype from another type of the same width and signedness. */
13631 if (TREE_TYPE (aligned_offset) != sizetype)
13632 aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
13633 return size_binop_loc (loc, MULT_EXPR, aligned_offset,
13634 size_int (DECL_OFFSET_ALIGN (field)
13635 / BITS_PER_UNIT));
13636 }
13637
13638 /* Otherwise, take the offset from that of the field. Substitute
13639 any PLACEHOLDER_EXPR that we have. */
13640 else
13641 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
13642 }
13643
13644 /* Given the initializer INIT, return the initializer for the field
13645 DECL if it exists, otherwise null. Used to obtain the initializer
13646 for a flexible array member and determine its size. */
13647
13648 static tree
13649 get_initializer_for (tree init, tree decl)
13650 {
13651 STRIP_NOPS (init);
13652
13653 tree fld, fld_init;
13654 unsigned HOST_WIDE_INT i;
13655 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), i, fld, fld_init)
13656 {
13657 if (decl == fld)
13658 return fld_init;
13659
13660 if (TREE_CODE (fld) == CONSTRUCTOR)
13661 {
13662 fld_init = get_initializer_for (fld_init, decl);
13663 if (fld_init)
13664 return fld_init;
13665 }
13666 }
13667
13668 return NULL_TREE;
13669 }
13670
13671 /* Determines the size of the member referenced by the COMPONENT_REF
13672 REF, using its initializer expression if necessary in order to
13673 determine the size of an initialized flexible array member.
13674 If non-null, set *ARK when REF refers to an interior zero-length
13675 array or a trailing one-element array.
13676 Returns the size as sizetype (which might be zero for an object
13677 with an uninitialized flexible array member) or null if the size
13678 cannot be determined. */
13679
13680 tree
13681 component_ref_size (tree ref, special_array_member *sam /* = NULL */)
13682 {
13683 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
13684
13685 special_array_member arkbuf;
13686 if (!sam)
13687 sam = &arkbuf;
13688 *sam = special_array_member::none;
13689
13690 /* The object/argument referenced by the COMPONENT_REF and its type. */
13691 tree arg = TREE_OPERAND (ref, 0);
13692 tree argtype = TREE_TYPE (arg);
13693 /* The referenced member. */
13694 tree member = TREE_OPERAND (ref, 1);
13695
13696 tree memsize = DECL_SIZE_UNIT (member);
13697 if (memsize)
13698 {
13699 tree memtype = TREE_TYPE (member);
13700 if (TREE_CODE (memtype) != ARRAY_TYPE)
13701 return memsize;
13702
13703 bool trailing = array_at_struct_end_p (ref);
13704 bool zero_length = integer_zerop (memsize);
13705 if (!trailing && !zero_length)
13706 /* MEMBER is either an interior array or is an array with
13707 more than one element. */
13708 return memsize;
13709
13710 if (zero_length)
13711 {
13712 if (trailing)
13713 *sam = special_array_member::trail_0;
13714 else
13715 {
13716 *sam = special_array_member::int_0;
13717 memsize = NULL_TREE;
13718 }
13719 }
13720
13721 if (!zero_length)
13722 if (tree dom = TYPE_DOMAIN (memtype))
13723 if (tree min = TYPE_MIN_VALUE (dom))
13724 if (tree max = TYPE_MAX_VALUE (dom))
13725 if (TREE_CODE (min) == INTEGER_CST
13726 && TREE_CODE (max) == INTEGER_CST)
13727 {
13728 offset_int minidx = wi::to_offset (min);
13729 offset_int maxidx = wi::to_offset (max);
13730 offset_int neltsm1 = maxidx - minidx;
13731 if (neltsm1 > 0)
13732 /* MEMBER is an array with more than one element. */
13733 return memsize;
13734
13735 if (neltsm1 == 0)
13736 *sam = special_array_member::trail_1;
13737 }
13738
13739 /* For a refernce to a zero- or one-element array member of a union
13740 use the size of the union instead of the size of the member. */
13741 if (TREE_CODE (argtype) == UNION_TYPE)
13742 memsize = TYPE_SIZE_UNIT (argtype);
13743 }
13744
13745 /* MEMBER is either a bona fide flexible array member, or a zero-length
13746 array member, or an array of length one treated as such. */
13747
13748 /* If the reference is to a declared object and the member a true
13749 flexible array, try to determine its size from its initializer. */
13750 poly_int64 baseoff = 0;
13751 tree base = get_addr_base_and_unit_offset (ref, &baseoff);
13752 if (!base || !VAR_P (base))
13753 {
13754 if (*sam != special_array_member::int_0)
13755 return NULL_TREE;
13756
13757 if (TREE_CODE (arg) != COMPONENT_REF)
13758 return NULL_TREE;
13759
13760 base = arg;
13761 while (TREE_CODE (base) == COMPONENT_REF)
13762 base = TREE_OPERAND (base, 0);
13763 baseoff = tree_to_poly_int64 (byte_position (TREE_OPERAND (ref, 1)));
13764 }
13765
13766 /* BASE is the declared object of which MEMBER is either a member
13767 or that is cast to ARGTYPE (e.g., a char buffer used to store
13768 an ARGTYPE object). */
13769 tree basetype = TREE_TYPE (base);
13770
13771 /* Determine the base type of the referenced object. If it's
13772 the same as ARGTYPE and MEMBER has a known size, return it. */
13773 tree bt = basetype;
13774 if (*sam != special_array_member::int_0)
13775 while (TREE_CODE (bt) == ARRAY_TYPE)
13776 bt = TREE_TYPE (bt);
13777 bool typematch = useless_type_conversion_p (argtype, bt);
13778 if (memsize && typematch)
13779 return memsize;
13780
13781 memsize = NULL_TREE;
13782
13783 if (typematch)
13784 /* MEMBER is a true flexible array member. Compute its size from
13785 the initializer of the BASE object if it has one. */
13786 if (tree init = DECL_P (base) ? DECL_INITIAL (base) : NULL_TREE)
13787 if (init != error_mark_node)
13788 {
13789 init = get_initializer_for (init, member);
13790 if (init)
13791 {
13792 memsize = TYPE_SIZE_UNIT (TREE_TYPE (init));
13793 if (tree refsize = TYPE_SIZE_UNIT (argtype))
13794 {
13795 /* Use the larger of the initializer size and the tail
13796 padding in the enclosing struct. */
13797 poly_int64 rsz = tree_to_poly_int64 (refsize);
13798 rsz -= baseoff;
13799 if (known_lt (tree_to_poly_int64 (memsize), rsz))
13800 memsize = wide_int_to_tree (TREE_TYPE (memsize), rsz);
13801 }
13802
13803 baseoff = 0;
13804 }
13805 }
13806
13807 if (!memsize)
13808 {
13809 if (typematch)
13810 {
13811 if (DECL_P (base)
13812 && DECL_EXTERNAL (base)
13813 && bt == basetype
13814 && *sam != special_array_member::int_0)
13815 /* The size of a flexible array member of an extern struct
13816 with no initializer cannot be determined (it's defined
13817 in another translation unit and can have an initializer
13818 with an arbitrary number of elements). */
13819 return NULL_TREE;
13820
13821 /* Use the size of the base struct or, for interior zero-length
13822 arrays, the size of the enclosing type. */
13823 memsize = TYPE_SIZE_UNIT (bt);
13824 }
13825 else if (DECL_P (base))
13826 /* Use the size of the BASE object (possibly an array of some
13827 other type such as char used to store the struct). */
13828 memsize = DECL_SIZE_UNIT (base);
13829 else
13830 return NULL_TREE;
13831 }
13832
13833 /* If the flexible array member has a known size use the greater
13834 of it and the tail padding in the enclosing struct.
13835 Otherwise, when the size of the flexible array member is unknown
13836 and the referenced object is not a struct, use the size of its
13837 type when known. This detects sizes of array buffers when cast
13838 to struct types with flexible array members. */
13839 if (memsize)
13840 {
13841 poly_int64 memsz64 = memsize ? tree_to_poly_int64 (memsize) : 0;
13842 if (known_lt (baseoff, memsz64))
13843 {
13844 memsz64 -= baseoff;
13845 return wide_int_to_tree (TREE_TYPE (memsize), memsz64);
13846 }
13847 return size_zero_node;
13848 }
13849
13850 /* Return "don't know" for an external non-array object since its
13851 flexible array member can be initialized to have any number of
13852 elements. Otherwise, return zero because the flexible array
13853 member has no elements. */
13854 return (DECL_P (base)
13855 && DECL_EXTERNAL (base)
13856 && (!typematch
13857 || TREE_CODE (basetype) != ARRAY_TYPE)
13858 ? NULL_TREE : size_zero_node);
13859 }
13860
13861 /* Return the machine mode of T. For vectors, returns the mode of the
13862 inner type. The main use case is to feed the result to HONOR_NANS,
13863 avoiding the BLKmode that a direct TYPE_MODE (T) might return. */
13864
13865 machine_mode
13866 element_mode (const_tree t)
13867 {
13868 if (!TYPE_P (t))
13869 t = TREE_TYPE (t);
13870 if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
13871 t = TREE_TYPE (t);
13872 return TYPE_MODE (t);
13873 }
13874
13875 /* Vector types need to re-check the target flags each time we report
13876 the machine mode. We need to do this because attribute target can
13877 change the result of vector_mode_supported_p and have_regs_of_mode
13878 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
13879 change on a per-function basis. */
13880 /* ??? Possibly a better solution is to run through all the types
13881 referenced by a function and re-compute the TYPE_MODE once, rather
13882 than make the TYPE_MODE macro call a function. */
13883
13884 machine_mode
13885 vector_type_mode (const_tree t)
13886 {
13887 machine_mode mode;
13888
13889 gcc_assert (TREE_CODE (t) == VECTOR_TYPE);
13890
13891 mode = t->type_common.mode;
13892 if (VECTOR_MODE_P (mode)
13893 && (!targetm.vector_mode_supported_p (mode)
13894 || !have_regs_of_mode[mode]))
13895 {
13896 scalar_int_mode innermode;
13897
13898 /* For integers, try mapping it to a same-sized scalar mode. */
13899 if (is_int_mode (TREE_TYPE (t)->type_common.mode, &innermode))
13900 {
13901 poly_int64 size = (TYPE_VECTOR_SUBPARTS (t)
13902 * GET_MODE_BITSIZE (innermode));
13903 scalar_int_mode mode;
13904 if (int_mode_for_size (size, 0).exists (&mode)
13905 && have_regs_of_mode[mode])
13906 return mode;
13907 }
13908
13909 return BLKmode;
13910 }
13911
13912 return mode;
13913 }
13914
13915 /* Return the size in bits of each element of vector type TYPE. */
13916
13917 unsigned int
13918 vector_element_bits (const_tree type)
13919 {
13920 gcc_checking_assert (VECTOR_TYPE_P (type));
13921 if (VECTOR_BOOLEAN_TYPE_P (type))
13922 return vector_element_size (tree_to_poly_uint64 (TYPE_SIZE (type)),
13923 TYPE_VECTOR_SUBPARTS (type));
13924 return tree_to_uhwi (TYPE_SIZE (TREE_TYPE (type)));
13925 }
13926
13927 /* Calculate the size in bits of each element of vector type TYPE
13928 and return the result as a tree of type bitsizetype. */
13929
13930 tree
13931 vector_element_bits_tree (const_tree type)
13932 {
13933 gcc_checking_assert (VECTOR_TYPE_P (type));
13934 if (VECTOR_BOOLEAN_TYPE_P (type))
13935 return bitsize_int (vector_element_bits (type));
13936 return TYPE_SIZE (TREE_TYPE (type));
13937 }
13938
13939 /* Verify that basic properties of T match TV and thus T can be a variant of
13940 TV. TV should be the more specified variant (i.e. the main variant). */
13941
13942 static bool
13943 verify_type_variant (const_tree t, tree tv)
13944 {
13945 /* Type variant can differ by:
13946
13947 - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
13948 ENCODE_QUAL_ADDR_SPACE.
13949 - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
13950 in this case some values may not be set in the variant types
13951 (see TYPE_COMPLETE_P checks).
13952 - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
13953 - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
13954 - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
13955 - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
13956 - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
13957 this is necessary to make it possible to merge types form different TUs
13958 - arrays, pointers and references may have TREE_TYPE that is a variant
13959 of TREE_TYPE of their main variants.
13960 - aggregates may have new TYPE_FIELDS list that list variants of
13961 the main variant TYPE_FIELDS.
13962 - vector types may differ by TYPE_VECTOR_OPAQUE
13963 */
13964
13965 /* Convenience macro for matching individual fields. */
13966 #define verify_variant_match(flag) \
13967 do { \
13968 if (flag (tv) != flag (t)) \
13969 { \
13970 error ("type variant differs by %s", #flag); \
13971 debug_tree (tv); \
13972 return false; \
13973 } \
13974 } while (false)
13975
13976 /* tree_base checks. */
13977
13978 verify_variant_match (TREE_CODE);
13979 /* FIXME: Ada builds non-artificial variants of artificial types. */
13980 if (TYPE_ARTIFICIAL (tv) && 0)
13981 verify_variant_match (TYPE_ARTIFICIAL);
13982 if (POINTER_TYPE_P (tv))
13983 verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
13984 /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build. */
13985 verify_variant_match (TYPE_UNSIGNED);
13986 verify_variant_match (TYPE_PACKED);
13987 if (TREE_CODE (t) == REFERENCE_TYPE)
13988 verify_variant_match (TYPE_REF_IS_RVALUE);
13989 if (AGGREGATE_TYPE_P (t))
13990 verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
13991 else
13992 verify_variant_match (TYPE_SATURATING);
13993 /* FIXME: This check trigger during libstdc++ build. */
13994 if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
13995 verify_variant_match (TYPE_FINAL_P);
13996
13997 /* tree_type_common checks. */
13998
13999 if (COMPLETE_TYPE_P (t))
14000 {
14001 verify_variant_match (TYPE_MODE);
14002 if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR
14003 && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR)
14004 verify_variant_match (TYPE_SIZE);
14005 if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR
14006 && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR
14007 && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv))
14008 {
14009 gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t),
14010 TYPE_SIZE_UNIT (tv), 0));
14011 error ("type variant has different %<TYPE_SIZE_UNIT%>");
14012 debug_tree (tv);
14013 error ("type variant%'s %<TYPE_SIZE_UNIT%>");
14014 debug_tree (TYPE_SIZE_UNIT (tv));
14015 error ("type%'s %<TYPE_SIZE_UNIT%>");
14016 debug_tree (TYPE_SIZE_UNIT (t));
14017 return false;
14018 }
14019 verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
14020 }
14021 verify_variant_match (TYPE_PRECISION);
14022 if (RECORD_OR_UNION_TYPE_P (t))
14023 verify_variant_match (TYPE_TRANSPARENT_AGGR);
14024 else if (TREE_CODE (t) == ARRAY_TYPE)
14025 verify_variant_match (TYPE_NONALIASED_COMPONENT);
14026 /* During LTO we merge variant lists from diferent translation units
14027 that may differ BY TYPE_CONTEXT that in turn may point
14028 to TRANSLATION_UNIT_DECL.
14029 Ada also builds variants of types with different TYPE_CONTEXT. */
14030 if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
14031 verify_variant_match (TYPE_CONTEXT);
14032 if (TREE_CODE (t) == ARRAY_TYPE || TREE_CODE (t) == INTEGER_TYPE)
14033 verify_variant_match (TYPE_STRING_FLAG);
14034 if (TREE_CODE (t) == RECORD_TYPE || TREE_CODE (t) == UNION_TYPE)
14035 verify_variant_match (TYPE_CXX_ODR_P);
14036 if (TYPE_ALIAS_SET_KNOWN_P (t))
14037 {
14038 error ("type variant with %<TYPE_ALIAS_SET_KNOWN_P%>");
14039 debug_tree (tv);
14040 return false;
14041 }
14042
14043 /* tree_type_non_common checks. */
14044
14045 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
14046 and dangle the pointer from time to time. */
14047 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
14048 && (in_lto_p || !TYPE_VFIELD (tv)
14049 || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
14050 {
14051 error ("type variant has different %<TYPE_VFIELD%>");
14052 debug_tree (tv);
14053 return false;
14054 }
14055 if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
14056 || TREE_CODE (t) == INTEGER_TYPE
14057 || TREE_CODE (t) == BOOLEAN_TYPE
14058 || TREE_CODE (t) == REAL_TYPE
14059 || TREE_CODE (t) == FIXED_POINT_TYPE)
14060 {
14061 verify_variant_match (TYPE_MAX_VALUE);
14062 verify_variant_match (TYPE_MIN_VALUE);
14063 }
14064 if (TREE_CODE (t) == METHOD_TYPE)
14065 verify_variant_match (TYPE_METHOD_BASETYPE);
14066 if (TREE_CODE (t) == OFFSET_TYPE)
14067 verify_variant_match (TYPE_OFFSET_BASETYPE);
14068 if (TREE_CODE (t) == ARRAY_TYPE)
14069 verify_variant_match (TYPE_ARRAY_MAX_SIZE);
14070 /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
14071 or even type's main variant. This is needed to make bootstrap pass
14072 and the bug seems new in GCC 5.
14073 C++ FE should be updated to make this consistent and we should check
14074 that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
14075 is a match with main variant.
14076
14077 Also disable the check for Java for now because of parser hack that builds
14078 first an dummy BINFO and then sometimes replace it by real BINFO in some
14079 of the copies. */
14080 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
14081 && TYPE_BINFO (t) != TYPE_BINFO (tv)
14082 /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
14083 Since there is no cheap way to tell C++/Java type w/o LTO, do checking
14084 at LTO time only. */
14085 && (in_lto_p && odr_type_p (t)))
14086 {
14087 error ("type variant has different %<TYPE_BINFO%>");
14088 debug_tree (tv);
14089 error ("type variant%'s %<TYPE_BINFO%>");
14090 debug_tree (TYPE_BINFO (tv));
14091 error ("type%'s %<TYPE_BINFO%>");
14092 debug_tree (TYPE_BINFO (t));
14093 return false;
14094 }
14095
14096 /* Check various uses of TYPE_VALUES_RAW. */
14097 if (TREE_CODE (t) == ENUMERAL_TYPE
14098 && TYPE_VALUES (t))
14099 verify_variant_match (TYPE_VALUES);
14100 else if (TREE_CODE (t) == ARRAY_TYPE)
14101 verify_variant_match (TYPE_DOMAIN);
14102 /* Permit incomplete variants of complete type. While FEs may complete
14103 all variants, this does not happen for C++ templates in all cases. */
14104 else if (RECORD_OR_UNION_TYPE_P (t)
14105 && COMPLETE_TYPE_P (t)
14106 && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
14107 {
14108 tree f1, f2;
14109
14110 /* Fortran builds qualified variants as new records with items of
14111 qualified type. Verify that they looks same. */
14112 for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
14113 f1 && f2;
14114 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
14115 if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
14116 || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
14117 != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
14118 /* FIXME: gfc_nonrestricted_type builds all types as variants
14119 with exception of pointer types. It deeply copies the type
14120 which means that we may end up with a variant type
14121 referring non-variant pointer. We may change it to
14122 produce types as variants, too, like
14123 objc_get_protocol_qualified_type does. */
14124 && !POINTER_TYPE_P (TREE_TYPE (f1)))
14125 || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
14126 || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
14127 break;
14128 if (f1 || f2)
14129 {
14130 error ("type variant has different %<TYPE_FIELDS%>");
14131 debug_tree (tv);
14132 error ("first mismatch is field");
14133 debug_tree (f1);
14134 error ("and field");
14135 debug_tree (f2);
14136 return false;
14137 }
14138 }
14139 else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
14140 verify_variant_match (TYPE_ARG_TYPES);
14141 /* For C++ the qualified variant of array type is really an array type
14142 of qualified TREE_TYPE.
14143 objc builds variants of pointer where pointer to type is a variant, too
14144 in objc_get_protocol_qualified_type. */
14145 if (TREE_TYPE (t) != TREE_TYPE (tv)
14146 && ((TREE_CODE (t) != ARRAY_TYPE
14147 && !POINTER_TYPE_P (t))
14148 || TYPE_MAIN_VARIANT (TREE_TYPE (t))
14149 != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
14150 {
14151 error ("type variant has different %<TREE_TYPE%>");
14152 debug_tree (tv);
14153 error ("type variant%'s %<TREE_TYPE%>");
14154 debug_tree (TREE_TYPE (tv));
14155 error ("type%'s %<TREE_TYPE%>");
14156 debug_tree (TREE_TYPE (t));
14157 return false;
14158 }
14159 if (type_with_alias_set_p (t)
14160 && !gimple_canonical_types_compatible_p (t, tv, false))
14161 {
14162 error ("type is not compatible with its variant");
14163 debug_tree (tv);
14164 error ("type variant%'s %<TREE_TYPE%>");
14165 debug_tree (TREE_TYPE (tv));
14166 error ("type%'s %<TREE_TYPE%>");
14167 debug_tree (TREE_TYPE (t));
14168 return false;
14169 }
14170 return true;
14171 #undef verify_variant_match
14172 }
14173
14174
14175 /* The TYPE_CANONICAL merging machinery. It should closely resemble
14176 the middle-end types_compatible_p function. It needs to avoid
14177 claiming types are different for types that should be treated
14178 the same with respect to TBAA. Canonical types are also used
14179 for IL consistency checks via the useless_type_conversion_p
14180 predicate which does not handle all type kinds itself but falls
14181 back to pointer-comparison of TYPE_CANONICAL for aggregates
14182 for example. */
14183
14184 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
14185 type calculation because we need to allow inter-operability between signed
14186 and unsigned variants. */
14187
14188 bool
14189 type_with_interoperable_signedness (const_tree type)
14190 {
14191 /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
14192 signed char and unsigned char. Similarly fortran FE builds
14193 C_SIZE_T as signed type, while C defines it unsigned. */
14194
14195 return tree_code_for_canonical_type_merging (TREE_CODE (type))
14196 == INTEGER_TYPE
14197 && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
14198 || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
14199 }
14200
14201 /* Return true iff T1 and T2 are structurally identical for what
14202 TBAA is concerned.
14203 This function is used both by lto.c canonical type merging and by the
14204 verifier. If TRUST_TYPE_CANONICAL we do not look into structure of types
14205 that have TYPE_CANONICAL defined and assume them equivalent. This is useful
14206 only for LTO because only in these cases TYPE_CANONICAL equivalence
14207 correspond to one defined by gimple_canonical_types_compatible_p. */
14208
14209 bool
14210 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
14211 bool trust_type_canonical)
14212 {
14213 /* Type variants should be same as the main variant. When not doing sanity
14214 checking to verify this fact, go to main variants and save some work. */
14215 if (trust_type_canonical)
14216 {
14217 t1 = TYPE_MAIN_VARIANT (t1);
14218 t2 = TYPE_MAIN_VARIANT (t2);
14219 }
14220
14221 /* Check first for the obvious case of pointer identity. */
14222 if (t1 == t2)
14223 return true;
14224
14225 /* Check that we have two types to compare. */
14226 if (t1 == NULL_TREE || t2 == NULL_TREE)
14227 return false;
14228
14229 /* We consider complete types always compatible with incomplete type.
14230 This does not make sense for canonical type calculation and thus we
14231 need to ensure that we are never called on it.
14232
14233 FIXME: For more correctness the function probably should have three modes
14234 1) mode assuming that types are complete mathcing their structure
14235 2) mode allowing incomplete types but producing equivalence classes
14236 and thus ignoring all info from complete types
14237 3) mode allowing incomplete types to match complete but checking
14238 compatibility between complete types.
14239
14240 1 and 2 can be used for canonical type calculation. 3 is the real
14241 definition of type compatibility that can be used i.e. for warnings during
14242 declaration merging. */
14243
14244 gcc_assert (!trust_type_canonical
14245 || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
14246
14247 /* If the types have been previously registered and found equal
14248 they still are. */
14249
14250 if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
14251 && trust_type_canonical)
14252 {
14253 /* Do not use TYPE_CANONICAL of pointer types. For LTO streamed types
14254 they are always NULL, but they are set to non-NULL for types
14255 constructed by build_pointer_type and variants. In this case the
14256 TYPE_CANONICAL is more fine grained than the equivalnce we test (where
14257 all pointers are considered equal. Be sure to not return false
14258 negatives. */
14259 gcc_checking_assert (canonical_type_used_p (t1)
14260 && canonical_type_used_p (t2));
14261 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
14262 }
14263
14264 /* For types where we do ODR based TBAA the canonical type is always
14265 set correctly, so we know that types are different if their
14266 canonical types does not match. */
14267 if (trust_type_canonical
14268 && (odr_type_p (t1) && odr_based_tbaa_p (t1))
14269 != (odr_type_p (t2) && odr_based_tbaa_p (t2)))
14270 return false;
14271
14272 /* Can't be the same type if the types don't have the same code. */
14273 enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
14274 if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
14275 return false;
14276
14277 /* Qualifiers do not matter for canonical type comparison purposes. */
14278
14279 /* Void types and nullptr types are always the same. */
14280 if (TREE_CODE (t1) == VOID_TYPE
14281 || TREE_CODE (t1) == NULLPTR_TYPE)
14282 return true;
14283
14284 /* Can't be the same type if they have different mode. */
14285 if (TYPE_MODE (t1) != TYPE_MODE (t2))
14286 return false;
14287
14288 /* Non-aggregate types can be handled cheaply. */
14289 if (INTEGRAL_TYPE_P (t1)
14290 || SCALAR_FLOAT_TYPE_P (t1)
14291 || FIXED_POINT_TYPE_P (t1)
14292 || TREE_CODE (t1) == VECTOR_TYPE
14293 || TREE_CODE (t1) == COMPLEX_TYPE
14294 || TREE_CODE (t1) == OFFSET_TYPE
14295 || POINTER_TYPE_P (t1))
14296 {
14297 /* Can't be the same type if they have different recision. */
14298 if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
14299 return false;
14300
14301 /* In some cases the signed and unsigned types are required to be
14302 inter-operable. */
14303 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
14304 && !type_with_interoperable_signedness (t1))
14305 return false;
14306
14307 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
14308 interoperable with "signed char". Unless all frontends are revisited
14309 to agree on these types, we must ignore the flag completely. */
14310
14311 /* Fortran standard define C_PTR type that is compatible with every
14312 C pointer. For this reason we need to glob all pointers into one.
14313 Still pointers in different address spaces are not compatible. */
14314 if (POINTER_TYPE_P (t1))
14315 {
14316 if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
14317 != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
14318 return false;
14319 }
14320
14321 /* Tail-recurse to components. */
14322 if (TREE_CODE (t1) == VECTOR_TYPE
14323 || TREE_CODE (t1) == COMPLEX_TYPE)
14324 return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
14325 TREE_TYPE (t2),
14326 trust_type_canonical);
14327
14328 return true;
14329 }
14330
14331 /* Do type-specific comparisons. */
14332 switch (TREE_CODE (t1))
14333 {
14334 case ARRAY_TYPE:
14335 /* Array types are the same if the element types are the same and
14336 the number of elements are the same. */
14337 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
14338 trust_type_canonical)
14339 || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
14340 || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
14341 || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
14342 return false;
14343 else
14344 {
14345 tree i1 = TYPE_DOMAIN (t1);
14346 tree i2 = TYPE_DOMAIN (t2);
14347
14348 /* For an incomplete external array, the type domain can be
14349 NULL_TREE. Check this condition also. */
14350 if (i1 == NULL_TREE && i2 == NULL_TREE)
14351 return true;
14352 else if (i1 == NULL_TREE || i2 == NULL_TREE)
14353 return false;
14354 else
14355 {
14356 tree min1 = TYPE_MIN_VALUE (i1);
14357 tree min2 = TYPE_MIN_VALUE (i2);
14358 tree max1 = TYPE_MAX_VALUE (i1);
14359 tree max2 = TYPE_MAX_VALUE (i2);
14360
14361 /* The minimum/maximum values have to be the same. */
14362 if ((min1 == min2
14363 || (min1 && min2
14364 && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
14365 && TREE_CODE (min2) == PLACEHOLDER_EXPR)
14366 || operand_equal_p (min1, min2, 0))))
14367 && (max1 == max2
14368 || (max1 && max2
14369 && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
14370 && TREE_CODE (max2) == PLACEHOLDER_EXPR)
14371 || operand_equal_p (max1, max2, 0)))))
14372 return true;
14373 else
14374 return false;
14375 }
14376 }
14377
14378 case METHOD_TYPE:
14379 case FUNCTION_TYPE:
14380 /* Function types are the same if the return type and arguments types
14381 are the same. */
14382 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
14383 trust_type_canonical))
14384 return false;
14385
14386 if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
14387 return true;
14388 else
14389 {
14390 tree parms1, parms2;
14391
14392 for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
14393 parms1 && parms2;
14394 parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
14395 {
14396 if (!gimple_canonical_types_compatible_p
14397 (TREE_VALUE (parms1), TREE_VALUE (parms2),
14398 trust_type_canonical))
14399 return false;
14400 }
14401
14402 if (parms1 || parms2)
14403 return false;
14404
14405 return true;
14406 }
14407
14408 case RECORD_TYPE:
14409 case UNION_TYPE:
14410 case QUAL_UNION_TYPE:
14411 {
14412 tree f1, f2;
14413
14414 /* Don't try to compare variants of an incomplete type, before
14415 TYPE_FIELDS has been copied around. */
14416 if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
14417 return true;
14418
14419
14420 if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
14421 return false;
14422
14423 /* For aggregate types, all the fields must be the same. */
14424 for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
14425 f1 || f2;
14426 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
14427 {
14428 /* Skip non-fields and zero-sized fields. */
14429 while (f1 && (TREE_CODE (f1) != FIELD_DECL
14430 || (DECL_SIZE (f1)
14431 && integer_zerop (DECL_SIZE (f1)))))
14432 f1 = TREE_CHAIN (f1);
14433 while (f2 && (TREE_CODE (f2) != FIELD_DECL
14434 || (DECL_SIZE (f2)
14435 && integer_zerop (DECL_SIZE (f2)))))
14436 f2 = TREE_CHAIN (f2);
14437 if (!f1 || !f2)
14438 break;
14439 /* The fields must have the same name, offset and type. */
14440 if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
14441 || !gimple_compare_field_offset (f1, f2)
14442 || !gimple_canonical_types_compatible_p
14443 (TREE_TYPE (f1), TREE_TYPE (f2),
14444 trust_type_canonical))
14445 return false;
14446 }
14447
14448 /* If one aggregate has more fields than the other, they
14449 are not the same. */
14450 if (f1 || f2)
14451 return false;
14452
14453 return true;
14454 }
14455
14456 default:
14457 /* Consider all types with language specific trees in them mutually
14458 compatible. This is executed only from verify_type and false
14459 positives can be tolerated. */
14460 gcc_assert (!in_lto_p);
14461 return true;
14462 }
14463 }
14464
14465 /* Verify type T. */
14466
14467 void
14468 verify_type (const_tree t)
14469 {
14470 bool error_found = false;
14471 tree mv = TYPE_MAIN_VARIANT (t);
14472 if (!mv)
14473 {
14474 error ("main variant is not defined");
14475 error_found = true;
14476 }
14477 else if (mv != TYPE_MAIN_VARIANT (mv))
14478 {
14479 error ("%<TYPE_MAIN_VARIANT%> has different %<TYPE_MAIN_VARIANT%>");
14480 debug_tree (mv);
14481 error_found = true;
14482 }
14483 else if (t != mv && !verify_type_variant (t, mv))
14484 error_found = true;
14485
14486 tree ct = TYPE_CANONICAL (t);
14487 if (!ct)
14488 ;
14489 else if (TYPE_CANONICAL (t) != ct)
14490 {
14491 error ("%<TYPE_CANONICAL%> has different %<TYPE_CANONICAL%>");
14492 debug_tree (ct);
14493 error_found = true;
14494 }
14495 /* Method and function types cannot be used to address memory and thus
14496 TYPE_CANONICAL really matters only for determining useless conversions.
14497
14498 FIXME: C++ FE produce declarations of builtin functions that are not
14499 compatible with main variants. */
14500 else if (TREE_CODE (t) == FUNCTION_TYPE)
14501 ;
14502 else if (t != ct
14503 /* FIXME: gimple_canonical_types_compatible_p cannot compare types
14504 with variably sized arrays because their sizes possibly
14505 gimplified to different variables. */
14506 && !variably_modified_type_p (ct, NULL)
14507 && !gimple_canonical_types_compatible_p (t, ct, false)
14508 && COMPLETE_TYPE_P (t))
14509 {
14510 error ("%<TYPE_CANONICAL%> is not compatible");
14511 debug_tree (ct);
14512 error_found = true;
14513 }
14514
14515 if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
14516 && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
14517 {
14518 error ("%<TYPE_MODE%> of %<TYPE_CANONICAL%> is not compatible");
14519 debug_tree (ct);
14520 error_found = true;
14521 }
14522 if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
14523 {
14524 error ("%<TYPE_CANONICAL%> of main variant is not main variant");
14525 debug_tree (ct);
14526 debug_tree (TYPE_MAIN_VARIANT (ct));
14527 error_found = true;
14528 }
14529
14530
14531 /* Check various uses of TYPE_MIN_VALUE_RAW. */
14532 if (RECORD_OR_UNION_TYPE_P (t))
14533 {
14534 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
14535 and danagle the pointer from time to time. */
14536 if (TYPE_VFIELD (t)
14537 && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
14538 && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
14539 {
14540 error ("%<TYPE_VFIELD%> is not %<FIELD_DECL%> nor %<TREE_LIST%>");
14541 debug_tree (TYPE_VFIELD (t));
14542 error_found = true;
14543 }
14544 }
14545 else if (TREE_CODE (t) == POINTER_TYPE)
14546 {
14547 if (TYPE_NEXT_PTR_TO (t)
14548 && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
14549 {
14550 error ("%<TYPE_NEXT_PTR_TO%> is not %<POINTER_TYPE%>");
14551 debug_tree (TYPE_NEXT_PTR_TO (t));
14552 error_found = true;
14553 }
14554 }
14555 else if (TREE_CODE (t) == REFERENCE_TYPE)
14556 {
14557 if (TYPE_NEXT_REF_TO (t)
14558 && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
14559 {
14560 error ("%<TYPE_NEXT_REF_TO%> is not %<REFERENCE_TYPE%>");
14561 debug_tree (TYPE_NEXT_REF_TO (t));
14562 error_found = true;
14563 }
14564 }
14565 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14566 || TREE_CODE (t) == FIXED_POINT_TYPE)
14567 {
14568 /* FIXME: The following check should pass:
14569 useless_type_conversion_p (const_cast <tree> (t),
14570 TREE_TYPE (TYPE_MIN_VALUE (t))
14571 but does not for C sizetypes in LTO. */
14572 }
14573
14574 /* Check various uses of TYPE_MAXVAL_RAW. */
14575 if (RECORD_OR_UNION_TYPE_P (t))
14576 {
14577 if (!TYPE_BINFO (t))
14578 ;
14579 else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
14580 {
14581 error ("%<TYPE_BINFO%> is not %<TREE_BINFO%>");
14582 debug_tree (TYPE_BINFO (t));
14583 error_found = true;
14584 }
14585 else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t))
14586 {
14587 error ("%<TYPE_BINFO%> type is not %<TYPE_MAIN_VARIANT%>");
14588 debug_tree (TREE_TYPE (TYPE_BINFO (t)));
14589 error_found = true;
14590 }
14591 }
14592 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14593 {
14594 if (TYPE_METHOD_BASETYPE (t)
14595 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
14596 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
14597 {
14598 error ("%<TYPE_METHOD_BASETYPE%> is not record nor union");
14599 debug_tree (TYPE_METHOD_BASETYPE (t));
14600 error_found = true;
14601 }
14602 }
14603 else if (TREE_CODE (t) == OFFSET_TYPE)
14604 {
14605 if (TYPE_OFFSET_BASETYPE (t)
14606 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
14607 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
14608 {
14609 error ("%<TYPE_OFFSET_BASETYPE%> is not record nor union");
14610 debug_tree (TYPE_OFFSET_BASETYPE (t));
14611 error_found = true;
14612 }
14613 }
14614 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14615 || TREE_CODE (t) == FIXED_POINT_TYPE)
14616 {
14617 /* FIXME: The following check should pass:
14618 useless_type_conversion_p (const_cast <tree> (t),
14619 TREE_TYPE (TYPE_MAX_VALUE (t))
14620 but does not for C sizetypes in LTO. */
14621 }
14622 else if (TREE_CODE (t) == ARRAY_TYPE)
14623 {
14624 if (TYPE_ARRAY_MAX_SIZE (t)
14625 && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
14626 {
14627 error ("%<TYPE_ARRAY_MAX_SIZE%> not %<INTEGER_CST%>");
14628 debug_tree (TYPE_ARRAY_MAX_SIZE (t));
14629 error_found = true;
14630 }
14631 }
14632 else if (TYPE_MAX_VALUE_RAW (t))
14633 {
14634 error ("%<TYPE_MAX_VALUE_RAW%> non-NULL");
14635 debug_tree (TYPE_MAX_VALUE_RAW (t));
14636 error_found = true;
14637 }
14638
14639 if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
14640 {
14641 error ("%<TYPE_LANG_SLOT_1 (binfo)%> field is non-NULL");
14642 debug_tree (TYPE_LANG_SLOT_1 (t));
14643 error_found = true;
14644 }
14645
14646 /* Check various uses of TYPE_VALUES_RAW. */
14647 if (TREE_CODE (t) == ENUMERAL_TYPE)
14648 for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
14649 {
14650 tree value = TREE_VALUE (l);
14651 tree name = TREE_PURPOSE (l);
14652
14653 /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
14654 CONST_DECL of ENUMERAL TYPE. */
14655 if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
14656 {
14657 error ("enum value is not %<CONST_DECL%> or %<INTEGER_CST%>");
14658 debug_tree (value);
14659 debug_tree (name);
14660 error_found = true;
14661 }
14662 if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
14663 && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
14664 {
14665 error ("enum value type is not %<INTEGER_TYPE%> nor convertible "
14666 "to the enum");
14667 debug_tree (value);
14668 debug_tree (name);
14669 error_found = true;
14670 }
14671 if (TREE_CODE (name) != IDENTIFIER_NODE)
14672 {
14673 error ("enum value name is not %<IDENTIFIER_NODE%>");
14674 debug_tree (value);
14675 debug_tree (name);
14676 error_found = true;
14677 }
14678 }
14679 else if (TREE_CODE (t) == ARRAY_TYPE)
14680 {
14681 if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
14682 {
14683 error ("array %<TYPE_DOMAIN%> is not integer type");
14684 debug_tree (TYPE_DOMAIN (t));
14685 error_found = true;
14686 }
14687 }
14688 else if (RECORD_OR_UNION_TYPE_P (t))
14689 {
14690 if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
14691 {
14692 error ("%<TYPE_FIELDS%> defined in incomplete type");
14693 error_found = true;
14694 }
14695 for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
14696 {
14697 /* TODO: verify properties of decls. */
14698 if (TREE_CODE (fld) == FIELD_DECL)
14699 ;
14700 else if (TREE_CODE (fld) == TYPE_DECL)
14701 ;
14702 else if (TREE_CODE (fld) == CONST_DECL)
14703 ;
14704 else if (VAR_P (fld))
14705 ;
14706 else if (TREE_CODE (fld) == TEMPLATE_DECL)
14707 ;
14708 else if (TREE_CODE (fld) == USING_DECL)
14709 ;
14710 else if (TREE_CODE (fld) == FUNCTION_DECL)
14711 ;
14712 else
14713 {
14714 error ("wrong tree in %<TYPE_FIELDS%> list");
14715 debug_tree (fld);
14716 error_found = true;
14717 }
14718 }
14719 }
14720 else if (TREE_CODE (t) == INTEGER_TYPE
14721 || TREE_CODE (t) == BOOLEAN_TYPE
14722 || TREE_CODE (t) == OFFSET_TYPE
14723 || TREE_CODE (t) == REFERENCE_TYPE
14724 || TREE_CODE (t) == NULLPTR_TYPE
14725 || TREE_CODE (t) == POINTER_TYPE)
14726 {
14727 if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
14728 {
14729 error ("%<TYPE_CACHED_VALUES_P%> is %i while %<TYPE_CACHED_VALUES%> "
14730 "is %p",
14731 TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
14732 error_found = true;
14733 }
14734 else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
14735 {
14736 error ("%<TYPE_CACHED_VALUES%> is not %<TREE_VEC%>");
14737 debug_tree (TYPE_CACHED_VALUES (t));
14738 error_found = true;
14739 }
14740 /* Verify just enough of cache to ensure that no one copied it to new type.
14741 All copying should go by copy_node that should clear it. */
14742 else if (TYPE_CACHED_VALUES_P (t))
14743 {
14744 int i;
14745 for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
14746 if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
14747 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
14748 {
14749 error ("wrong %<TYPE_CACHED_VALUES%> entry");
14750 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
14751 error_found = true;
14752 break;
14753 }
14754 }
14755 }
14756 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14757 for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
14758 {
14759 /* C++ FE uses TREE_PURPOSE to store initial values. */
14760 if (TREE_PURPOSE (l) && in_lto_p)
14761 {
14762 error ("%<TREE_PURPOSE%> is non-NULL in %<TYPE_ARG_TYPES%> list");
14763 debug_tree (l);
14764 error_found = true;
14765 }
14766 if (!TYPE_P (TREE_VALUE (l)))
14767 {
14768 error ("wrong entry in %<TYPE_ARG_TYPES%> list");
14769 debug_tree (l);
14770 error_found = true;
14771 }
14772 }
14773 else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
14774 {
14775 error ("%<TYPE_VALUES_RAW%> field is non-NULL");
14776 debug_tree (TYPE_VALUES_RAW (t));
14777 error_found = true;
14778 }
14779 if (TREE_CODE (t) != INTEGER_TYPE
14780 && TREE_CODE (t) != BOOLEAN_TYPE
14781 && TREE_CODE (t) != OFFSET_TYPE
14782 && TREE_CODE (t) != REFERENCE_TYPE
14783 && TREE_CODE (t) != NULLPTR_TYPE
14784 && TREE_CODE (t) != POINTER_TYPE
14785 && TYPE_CACHED_VALUES_P (t))
14786 {
14787 error ("%<TYPE_CACHED_VALUES_P%> is set while it should not be");
14788 error_found = true;
14789 }
14790
14791 /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
14792 TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
14793 of a type. */
14794 if (TREE_CODE (t) == METHOD_TYPE
14795 && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
14796 {
14797 error ("%<TYPE_METHOD_BASETYPE%> is not main variant");
14798 error_found = true;
14799 }
14800
14801 if (error_found)
14802 {
14803 debug_tree (const_cast <tree> (t));
14804 internal_error ("%qs failed", __func__);
14805 }
14806 }
14807
14808
14809 /* Return 1 if ARG interpreted as signed in its precision is known to be
14810 always positive or 2 if ARG is known to be always negative, or 3 if
14811 ARG may be positive or negative. */
14812
14813 int
14814 get_range_pos_neg (tree arg)
14815 {
14816 if (arg == error_mark_node)
14817 return 3;
14818
14819 int prec = TYPE_PRECISION (TREE_TYPE (arg));
14820 int cnt = 0;
14821 if (TREE_CODE (arg) == INTEGER_CST)
14822 {
14823 wide_int w = wi::sext (wi::to_wide (arg), prec);
14824 if (wi::neg_p (w))
14825 return 2;
14826 else
14827 return 1;
14828 }
14829 while (CONVERT_EXPR_P (arg)
14830 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0)))
14831 && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec)
14832 {
14833 arg = TREE_OPERAND (arg, 0);
14834 /* Narrower value zero extended into wider type
14835 will always result in positive values. */
14836 if (TYPE_UNSIGNED (TREE_TYPE (arg))
14837 && TYPE_PRECISION (TREE_TYPE (arg)) < prec)
14838 return 1;
14839 prec = TYPE_PRECISION (TREE_TYPE (arg));
14840 if (++cnt > 30)
14841 return 3;
14842 }
14843
14844 if (TREE_CODE (arg) != SSA_NAME)
14845 return 3;
14846 wide_int arg_min, arg_max;
14847 while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE)
14848 {
14849 gimple *g = SSA_NAME_DEF_STMT (arg);
14850 if (is_gimple_assign (g)
14851 && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g)))
14852 {
14853 tree t = gimple_assign_rhs1 (g);
14854 if (INTEGRAL_TYPE_P (TREE_TYPE (t))
14855 && TYPE_PRECISION (TREE_TYPE (t)) <= prec)
14856 {
14857 if (TYPE_UNSIGNED (TREE_TYPE (t))
14858 && TYPE_PRECISION (TREE_TYPE (t)) < prec)
14859 return 1;
14860 prec = TYPE_PRECISION (TREE_TYPE (t));
14861 arg = t;
14862 if (++cnt > 30)
14863 return 3;
14864 continue;
14865 }
14866 }
14867 return 3;
14868 }
14869 if (TYPE_UNSIGNED (TREE_TYPE (arg)))
14870 {
14871 /* For unsigned values, the "positive" range comes
14872 below the "negative" range. */
14873 if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14874 return 1;
14875 if (wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14876 return 2;
14877 }
14878 else
14879 {
14880 if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14881 return 1;
14882 if (wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14883 return 2;
14884 }
14885 return 3;
14886 }
14887
14888
14889
14890
14891 /* Return true if ARG is marked with the nonnull attribute in the
14892 current function signature. */
14893
14894 bool
14895 nonnull_arg_p (const_tree arg)
14896 {
14897 tree t, attrs, fntype;
14898 unsigned HOST_WIDE_INT arg_num;
14899
14900 gcc_assert (TREE_CODE (arg) == PARM_DECL
14901 && (POINTER_TYPE_P (TREE_TYPE (arg))
14902 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
14903
14904 /* The static chain decl is always non null. */
14905 if (arg == cfun->static_chain_decl)
14906 return true;
14907
14908 /* THIS argument of method is always non-NULL. */
14909 if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
14910 && arg == DECL_ARGUMENTS (cfun->decl)
14911 && flag_delete_null_pointer_checks)
14912 return true;
14913
14914 /* Values passed by reference are always non-NULL. */
14915 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
14916 && flag_delete_null_pointer_checks)
14917 return true;
14918
14919 fntype = TREE_TYPE (cfun->decl);
14920 for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
14921 {
14922 attrs = lookup_attribute ("nonnull", attrs);
14923
14924 /* If "nonnull" wasn't specified, we know nothing about the argument. */
14925 if (attrs == NULL_TREE)
14926 return false;
14927
14928 /* If "nonnull" applies to all the arguments, then ARG is non-null. */
14929 if (TREE_VALUE (attrs) == NULL_TREE)
14930 return true;
14931
14932 /* Get the position number for ARG in the function signature. */
14933 for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
14934 t;
14935 t = DECL_CHAIN (t), arg_num++)
14936 {
14937 if (t == arg)
14938 break;
14939 }
14940
14941 gcc_assert (t == arg);
14942
14943 /* Now see if ARG_NUM is mentioned in the nonnull list. */
14944 for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
14945 {
14946 if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
14947 return true;
14948 }
14949 }
14950
14951 return false;
14952 }
14953
14954 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
14955 information. */
14956
14957 location_t
14958 set_block (location_t loc, tree block)
14959 {
14960 location_t pure_loc = get_pure_location (loc);
14961 source_range src_range = get_range_from_loc (line_table, loc);
14962 return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
14963 }
14964
14965 location_t
14966 set_source_range (tree expr, location_t start, location_t finish)
14967 {
14968 source_range src_range;
14969 src_range.m_start = start;
14970 src_range.m_finish = finish;
14971 return set_source_range (expr, src_range);
14972 }
14973
14974 location_t
14975 set_source_range (tree expr, source_range src_range)
14976 {
14977 if (!EXPR_P (expr))
14978 return UNKNOWN_LOCATION;
14979
14980 location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
14981 location_t adhoc = COMBINE_LOCATION_DATA (line_table,
14982 pure_loc,
14983 src_range,
14984 NULL);
14985 SET_EXPR_LOCATION (expr, adhoc);
14986 return adhoc;
14987 }
14988
14989 /* Return EXPR, potentially wrapped with a node expression LOC,
14990 if !CAN_HAVE_LOCATION_P (expr).
14991
14992 NON_LVALUE_EXPR is used for wrapping constants, apart from STRING_CST.
14993 VIEW_CONVERT_EXPR is used for wrapping non-constants and STRING_CST.
14994
14995 Wrapper nodes can be identified using location_wrapper_p. */
14996
14997 tree
14998 maybe_wrap_with_location (tree expr, location_t loc)
14999 {
15000 if (expr == NULL)
15001 return NULL;
15002 if (loc == UNKNOWN_LOCATION)
15003 return expr;
15004 if (CAN_HAVE_LOCATION_P (expr))
15005 return expr;
15006 /* We should only be adding wrappers for constants and for decls,
15007 or for some exceptional tree nodes (e.g. BASELINK in the C++ FE). */
15008 gcc_assert (CONSTANT_CLASS_P (expr)
15009 || DECL_P (expr)
15010 || EXCEPTIONAL_CLASS_P (expr));
15011
15012 /* For now, don't add wrappers to exceptional tree nodes, to minimize
15013 any impact of the wrapper nodes. */
15014 if (EXCEPTIONAL_CLASS_P (expr))
15015 return expr;
15016
15017 /* If any auto_suppress_location_wrappers are active, don't create
15018 wrappers. */
15019 if (suppress_location_wrappers > 0)
15020 return expr;
15021
15022 tree_code code
15023 = (((CONSTANT_CLASS_P (expr) && TREE_CODE (expr) != STRING_CST)
15024 || (TREE_CODE (expr) == CONST_DECL && !TREE_STATIC (expr)))
15025 ? NON_LVALUE_EXPR : VIEW_CONVERT_EXPR);
15026 tree wrapper = build1_loc (loc, code, TREE_TYPE (expr), expr);
15027 /* Mark this node as being a wrapper. */
15028 EXPR_LOCATION_WRAPPER_P (wrapper) = 1;
15029 return wrapper;
15030 }
15031
15032 int suppress_location_wrappers;
15033
15034 /* Return the name of combined function FN, for debugging purposes. */
15035
15036 const char *
15037 combined_fn_name (combined_fn fn)
15038 {
15039 if (builtin_fn_p (fn))
15040 {
15041 tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
15042 return IDENTIFIER_POINTER (DECL_NAME (fndecl));
15043 }
15044 else
15045 return internal_fn_name (as_internal_fn (fn));
15046 }
15047
15048 /* Return a bitmap with a bit set corresponding to each argument in
15049 a function call type FNTYPE declared with attribute nonnull,
15050 or null if none of the function's argument are nonnull. The caller
15051 must free the bitmap. */
15052
15053 bitmap
15054 get_nonnull_args (const_tree fntype)
15055 {
15056 if (fntype == NULL_TREE)
15057 return NULL;
15058
15059 bitmap argmap = NULL;
15060 if (TREE_CODE (fntype) == METHOD_TYPE)
15061 {
15062 /* The this pointer in C++ non-static member functions is
15063 implicitly nonnull whether or not it's declared as such. */
15064 argmap = BITMAP_ALLOC (NULL);
15065 bitmap_set_bit (argmap, 0);
15066 }
15067
15068 tree attrs = TYPE_ATTRIBUTES (fntype);
15069 if (!attrs)
15070 return argmap;
15071
15072 /* A function declaration can specify multiple attribute nonnull,
15073 each with zero or more arguments. The loop below creates a bitmap
15074 representing a union of all the arguments. An empty (but non-null)
15075 bitmap means that all arguments have been declaraed nonnull. */
15076 for ( ; attrs; attrs = TREE_CHAIN (attrs))
15077 {
15078 attrs = lookup_attribute ("nonnull", attrs);
15079 if (!attrs)
15080 break;
15081
15082 if (!argmap)
15083 argmap = BITMAP_ALLOC (NULL);
15084
15085 if (!TREE_VALUE (attrs))
15086 {
15087 /* Clear the bitmap in case a previous attribute nonnull
15088 set it and this one overrides it for all arguments. */
15089 bitmap_clear (argmap);
15090 return argmap;
15091 }
15092
15093 /* Iterate over the indices of the format arguments declared nonnull
15094 and set a bit for each. */
15095 for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx))
15096 {
15097 unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1;
15098 bitmap_set_bit (argmap, val);
15099 }
15100 }
15101
15102 return argmap;
15103 }
15104
15105 /* Returns true if TYPE is a type where it and all of its subobjects
15106 (recursively) are of structure, union, or array type. */
15107
15108 static bool
15109 default_is_empty_type (tree type)
15110 {
15111 if (RECORD_OR_UNION_TYPE_P (type))
15112 {
15113 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
15114 if (TREE_CODE (field) == FIELD_DECL
15115 && !DECL_PADDING_P (field)
15116 && !default_is_empty_type (TREE_TYPE (field)))
15117 return false;
15118 return true;
15119 }
15120 else if (TREE_CODE (type) == ARRAY_TYPE)
15121 return (integer_minus_onep (array_type_nelts (type))
15122 || TYPE_DOMAIN (type) == NULL_TREE
15123 || default_is_empty_type (TREE_TYPE (type)));
15124 return false;
15125 }
15126
15127 /* Implement TARGET_EMPTY_RECORD_P. Return true if TYPE is an empty type
15128 that shouldn't be passed via stack. */
15129
15130 bool
15131 default_is_empty_record (const_tree type)
15132 {
15133 if (!abi_version_at_least (12))
15134 return false;
15135
15136 if (type == error_mark_node)
15137 return false;
15138
15139 if (TREE_ADDRESSABLE (type))
15140 return false;
15141
15142 return default_is_empty_type (TYPE_MAIN_VARIANT (type));
15143 }
15144
15145 /* Determine whether TYPE is a structure with a flexible array member,
15146 or a union containing such a structure (possibly recursively). */
15147
15148 bool
15149 flexible_array_type_p (const_tree type)
15150 {
15151 tree x, last;
15152 switch (TREE_CODE (type))
15153 {
15154 case RECORD_TYPE:
15155 last = NULL_TREE;
15156 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
15157 if (TREE_CODE (x) == FIELD_DECL)
15158 last = x;
15159 if (last == NULL_TREE)
15160 return false;
15161 if (TREE_CODE (TREE_TYPE (last)) == ARRAY_TYPE
15162 && TYPE_SIZE (TREE_TYPE (last)) == NULL_TREE
15163 && TYPE_DOMAIN (TREE_TYPE (last)) != NULL_TREE
15164 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (last))) == NULL_TREE)
15165 return true;
15166 return false;
15167 case UNION_TYPE:
15168 for (x = TYPE_FIELDS (type); x != NULL_TREE; x = DECL_CHAIN (x))
15169 {
15170 if (TREE_CODE (x) == FIELD_DECL
15171 && flexible_array_type_p (TREE_TYPE (x)))
15172 return true;
15173 }
15174 return false;
15175 default:
15176 return false;
15177 }
15178 }
15179
15180 /* Like int_size_in_bytes, but handle empty records specially. */
15181
15182 HOST_WIDE_INT
15183 arg_int_size_in_bytes (const_tree type)
15184 {
15185 return TYPE_EMPTY_P (type) ? 0 : int_size_in_bytes (type);
15186 }
15187
15188 /* Like size_in_bytes, but handle empty records specially. */
15189
15190 tree
15191 arg_size_in_bytes (const_tree type)
15192 {
15193 return TYPE_EMPTY_P (type) ? size_zero_node : size_in_bytes (type);
15194 }
15195
15196 /* Return true if an expression with CODE has to have the same result type as
15197 its first operand. */
15198
15199 bool
15200 expr_type_first_operand_type_p (tree_code code)
15201 {
15202 switch (code)
15203 {
15204 case NEGATE_EXPR:
15205 case ABS_EXPR:
15206 case BIT_NOT_EXPR:
15207 case PAREN_EXPR:
15208 case CONJ_EXPR:
15209
15210 case PLUS_EXPR:
15211 case MINUS_EXPR:
15212 case MULT_EXPR:
15213 case TRUNC_DIV_EXPR:
15214 case CEIL_DIV_EXPR:
15215 case FLOOR_DIV_EXPR:
15216 case ROUND_DIV_EXPR:
15217 case TRUNC_MOD_EXPR:
15218 case CEIL_MOD_EXPR:
15219 case FLOOR_MOD_EXPR:
15220 case ROUND_MOD_EXPR:
15221 case RDIV_EXPR:
15222 case EXACT_DIV_EXPR:
15223 case MIN_EXPR:
15224 case MAX_EXPR:
15225 case BIT_IOR_EXPR:
15226 case BIT_XOR_EXPR:
15227 case BIT_AND_EXPR:
15228
15229 case LSHIFT_EXPR:
15230 case RSHIFT_EXPR:
15231 case LROTATE_EXPR:
15232 case RROTATE_EXPR:
15233 return true;
15234
15235 default:
15236 return false;
15237 }
15238 }
15239
15240 /* Return a typenode for the "standard" C type with a given name. */
15241 tree
15242 get_typenode_from_name (const char *name)
15243 {
15244 if (name == NULL || *name == '\0')
15245 return NULL_TREE;
15246
15247 if (strcmp (name, "char") == 0)
15248 return char_type_node;
15249 if (strcmp (name, "unsigned char") == 0)
15250 return unsigned_char_type_node;
15251 if (strcmp (name, "signed char") == 0)
15252 return signed_char_type_node;
15253
15254 if (strcmp (name, "short int") == 0)
15255 return short_integer_type_node;
15256 if (strcmp (name, "short unsigned int") == 0)
15257 return short_unsigned_type_node;
15258
15259 if (strcmp (name, "int") == 0)
15260 return integer_type_node;
15261 if (strcmp (name, "unsigned int") == 0)
15262 return unsigned_type_node;
15263
15264 if (strcmp (name, "long int") == 0)
15265 return long_integer_type_node;
15266 if (strcmp (name, "long unsigned int") == 0)
15267 return long_unsigned_type_node;
15268
15269 if (strcmp (name, "long long int") == 0)
15270 return long_long_integer_type_node;
15271 if (strcmp (name, "long long unsigned int") == 0)
15272 return long_long_unsigned_type_node;
15273
15274 gcc_unreachable ();
15275 }
15276
15277 /* List of pointer types used to declare builtins before we have seen their
15278 real declaration.
15279
15280 Keep the size up to date in tree.h ! */
15281 const builtin_structptr_type builtin_structptr_types[6] =
15282 {
15283 { fileptr_type_node, ptr_type_node, "FILE" },
15284 { const_tm_ptr_type_node, const_ptr_type_node, "tm" },
15285 { fenv_t_ptr_type_node, ptr_type_node, "fenv_t" },
15286 { const_fenv_t_ptr_type_node, const_ptr_type_node, "fenv_t" },
15287 { fexcept_t_ptr_type_node, ptr_type_node, "fexcept_t" },
15288 { const_fexcept_t_ptr_type_node, const_ptr_type_node, "fexcept_t" }
15289 };
15290
15291 /* Return the maximum object size. */
15292
15293 tree
15294 max_object_size (void)
15295 {
15296 /* To do: Make this a configurable parameter. */
15297 return TYPE_MAX_VALUE (ptrdiff_type_node);
15298 }
15299
15300 /* A wrapper around TARGET_VERIFY_TYPE_CONTEXT that makes the silent_p
15301 parameter default to false and that weeds out error_mark_node. */
15302
15303 bool
15304 verify_type_context (location_t loc, type_context_kind context,
15305 const_tree type, bool silent_p)
15306 {
15307 if (type == error_mark_node)
15308 return true;
15309
15310 gcc_assert (TYPE_P (type));
15311 return (!targetm.verify_type_context
15312 || targetm.verify_type_context (loc, context, type, silent_p));
15313 }
15314
15315 #if CHECKING_P
15316
15317 namespace selftest {
15318
15319 /* Selftests for tree. */
15320
15321 /* Verify that integer constants are sane. */
15322
15323 static void
15324 test_integer_constants ()
15325 {
15326 ASSERT_TRUE (integer_type_node != NULL);
15327 ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL);
15328
15329 tree type = integer_type_node;
15330
15331 tree zero = build_zero_cst (type);
15332 ASSERT_EQ (INTEGER_CST, TREE_CODE (zero));
15333 ASSERT_EQ (type, TREE_TYPE (zero));
15334
15335 tree one = build_int_cst (type, 1);
15336 ASSERT_EQ (INTEGER_CST, TREE_CODE (one));
15337 ASSERT_EQ (type, TREE_TYPE (zero));
15338 }
15339
15340 /* Verify identifiers. */
15341
15342 static void
15343 test_identifiers ()
15344 {
15345 tree identifier = get_identifier ("foo");
15346 ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier));
15347 ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier));
15348 }
15349
15350 /* Verify LABEL_DECL. */
15351
15352 static void
15353 test_labels ()
15354 {
15355 tree identifier = get_identifier ("err");
15356 tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
15357 identifier, void_type_node);
15358 ASSERT_EQ (-1, LABEL_DECL_UID (label_decl));
15359 ASSERT_FALSE (FORCED_LABEL (label_decl));
15360 }
15361
15362 /* Return a new VECTOR_CST node whose type is TYPE and whose values
15363 are given by VALS. */
15364
15365 static tree
15366 build_vector (tree type, vec<tree> vals MEM_STAT_DECL)
15367 {
15368 gcc_assert (known_eq (vals.length (), TYPE_VECTOR_SUBPARTS (type)));
15369 tree_vector_builder builder (type, vals.length (), 1);
15370 builder.splice (vals);
15371 return builder.build ();
15372 }
15373
15374 /* Check that VECTOR_CST ACTUAL contains the elements in EXPECTED. */
15375
15376 static void
15377 check_vector_cst (vec<tree> expected, tree actual)
15378 {
15379 ASSERT_KNOWN_EQ (expected.length (),
15380 TYPE_VECTOR_SUBPARTS (TREE_TYPE (actual)));
15381 for (unsigned int i = 0; i < expected.length (); ++i)
15382 ASSERT_EQ (wi::to_wide (expected[i]),
15383 wi::to_wide (vector_cst_elt (actual, i)));
15384 }
15385
15386 /* Check that VECTOR_CST ACTUAL contains NPATTERNS duplicated elements,
15387 and that its elements match EXPECTED. */
15388
15389 static void
15390 check_vector_cst_duplicate (vec<tree> expected, tree actual,
15391 unsigned int npatterns)
15392 {
15393 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
15394 ASSERT_EQ (1, VECTOR_CST_NELTS_PER_PATTERN (actual));
15395 ASSERT_EQ (npatterns, vector_cst_encoded_nelts (actual));
15396 ASSERT_TRUE (VECTOR_CST_DUPLICATE_P (actual));
15397 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual));
15398 check_vector_cst (expected, actual);
15399 }
15400
15401 /* Check that VECTOR_CST ACTUAL contains NPATTERNS foreground elements
15402 and NPATTERNS background elements, and that its elements match
15403 EXPECTED. */
15404
15405 static void
15406 check_vector_cst_fill (vec<tree> expected, tree actual,
15407 unsigned int npatterns)
15408 {
15409 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
15410 ASSERT_EQ (2, VECTOR_CST_NELTS_PER_PATTERN (actual));
15411 ASSERT_EQ (2 * npatterns, vector_cst_encoded_nelts (actual));
15412 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual));
15413 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual));
15414 check_vector_cst (expected, actual);
15415 }
15416
15417 /* Check that VECTOR_CST ACTUAL contains NPATTERNS stepped patterns,
15418 and that its elements match EXPECTED. */
15419
15420 static void
15421 check_vector_cst_stepped (vec<tree> expected, tree actual,
15422 unsigned int npatterns)
15423 {
15424 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
15425 ASSERT_EQ (3, VECTOR_CST_NELTS_PER_PATTERN (actual));
15426 ASSERT_EQ (3 * npatterns, vector_cst_encoded_nelts (actual));
15427 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual));
15428 ASSERT_TRUE (VECTOR_CST_STEPPED_P (actual));
15429 check_vector_cst (expected, actual);
15430 }
15431
15432 /* Test the creation of VECTOR_CSTs. */
15433
15434 static void
15435 test_vector_cst_patterns (ALONE_CXX_MEM_STAT_INFO)
15436 {
15437 auto_vec<tree, 8> elements (8);
15438 elements.quick_grow (8);
15439 tree element_type = build_nonstandard_integer_type (16, true);
15440 tree vector_type = build_vector_type (element_type, 8);
15441
15442 /* Test a simple linear series with a base of 0 and a step of 1:
15443 { 0, 1, 2, 3, 4, 5, 6, 7 }. */
15444 for (unsigned int i = 0; i < 8; ++i)
15445 elements[i] = build_int_cst (element_type, i);
15446 tree vector = build_vector (vector_type, elements PASS_MEM_STAT);
15447 check_vector_cst_stepped (elements, vector, 1);
15448
15449 /* Try the same with the first element replaced by 100:
15450 { 100, 1, 2, 3, 4, 5, 6, 7 }. */
15451 elements[0] = build_int_cst (element_type, 100);
15452 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15453 check_vector_cst_stepped (elements, vector, 1);
15454
15455 /* Try a series that wraps around.
15456 { 100, 65531, 65532, 65533, 65534, 65535, 0, 1 }. */
15457 for (unsigned int i = 1; i < 8; ++i)
15458 elements[i] = build_int_cst (element_type, (65530 + i) & 0xffff);
15459 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15460 check_vector_cst_stepped (elements, vector, 1);
15461
15462 /* Try a downward series:
15463 { 100, 79, 78, 77, 76, 75, 75, 73 }. */
15464 for (unsigned int i = 1; i < 8; ++i)
15465 elements[i] = build_int_cst (element_type, 80 - i);
15466 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15467 check_vector_cst_stepped (elements, vector, 1);
15468
15469 /* Try two interleaved series with different bases and steps:
15470 { 100, 53, 66, 206, 62, 212, 58, 218 }. */
15471 elements[1] = build_int_cst (element_type, 53);
15472 for (unsigned int i = 2; i < 8; i += 2)
15473 {
15474 elements[i] = build_int_cst (element_type, 70 - i * 2);
15475 elements[i + 1] = build_int_cst (element_type, 200 + i * 3);
15476 }
15477 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15478 check_vector_cst_stepped (elements, vector, 2);
15479
15480 /* Try a duplicated value:
15481 { 100, 100, 100, 100, 100, 100, 100, 100 }. */
15482 for (unsigned int i = 1; i < 8; ++i)
15483 elements[i] = elements[0];
15484 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15485 check_vector_cst_duplicate (elements, vector, 1);
15486
15487 /* Try an interleaved duplicated value:
15488 { 100, 55, 100, 55, 100, 55, 100, 55 }. */
15489 elements[1] = build_int_cst (element_type, 55);
15490 for (unsigned int i = 2; i < 8; ++i)
15491 elements[i] = elements[i - 2];
15492 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15493 check_vector_cst_duplicate (elements, vector, 2);
15494
15495 /* Try a duplicated value with 2 exceptions
15496 { 41, 97, 100, 55, 100, 55, 100, 55 }. */
15497 elements[0] = build_int_cst (element_type, 41);
15498 elements[1] = build_int_cst (element_type, 97);
15499 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15500 check_vector_cst_fill (elements, vector, 2);
15501
15502 /* Try with and without a step
15503 { 41, 97, 100, 21, 100, 35, 100, 49 }. */
15504 for (unsigned int i = 3; i < 8; i += 2)
15505 elements[i] = build_int_cst (element_type, i * 7);
15506 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15507 check_vector_cst_stepped (elements, vector, 2);
15508
15509 /* Try a fully-general constant:
15510 { 41, 97, 100, 21, 100, 9990, 100, 49 }. */
15511 elements[5] = build_int_cst (element_type, 9990);
15512 vector = build_vector (vector_type, elements PASS_MEM_STAT);
15513 check_vector_cst_fill (elements, vector, 4);
15514 }
15515
15516 /* Verify that STRIP_NOPS (NODE) is EXPECTED.
15517 Helper function for test_location_wrappers, to deal with STRIP_NOPS
15518 modifying its argument in-place. */
15519
15520 static void
15521 check_strip_nops (tree node, tree expected)
15522 {
15523 STRIP_NOPS (node);
15524 ASSERT_EQ (expected, node);
15525 }
15526
15527 /* Verify location wrappers. */
15528
15529 static void
15530 test_location_wrappers ()
15531 {
15532 location_t loc = BUILTINS_LOCATION;
15533
15534 ASSERT_EQ (NULL_TREE, maybe_wrap_with_location (NULL_TREE, loc));
15535
15536 /* Wrapping a constant. */
15537 tree int_cst = build_int_cst (integer_type_node, 42);
15538 ASSERT_FALSE (CAN_HAVE_LOCATION_P (int_cst));
15539 ASSERT_FALSE (location_wrapper_p (int_cst));
15540
15541 tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
15542 ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
15543 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_int_cst));
15544 ASSERT_EQ (int_cst, tree_strip_any_location_wrapper (wrapped_int_cst));
15545
15546 /* We shouldn't add wrapper nodes for UNKNOWN_LOCATION. */
15547 ASSERT_EQ (int_cst, maybe_wrap_with_location (int_cst, UNKNOWN_LOCATION));
15548
15549 /* We shouldn't add wrapper nodes for nodes that CAN_HAVE_LOCATION_P. */
15550 tree cast = build1 (NOP_EXPR, char_type_node, int_cst);
15551 ASSERT_TRUE (CAN_HAVE_LOCATION_P (cast));
15552 ASSERT_EQ (cast, maybe_wrap_with_location (cast, loc));
15553
15554 /* Wrapping a STRING_CST. */
15555 tree string_cst = build_string (4, "foo");
15556 ASSERT_FALSE (CAN_HAVE_LOCATION_P (string_cst));
15557 ASSERT_FALSE (location_wrapper_p (string_cst));
15558
15559 tree wrapped_string_cst = maybe_wrap_with_location (string_cst, loc);
15560 ASSERT_TRUE (location_wrapper_p (wrapped_string_cst));
15561 ASSERT_EQ (VIEW_CONVERT_EXPR, TREE_CODE (wrapped_string_cst));
15562 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_string_cst));
15563 ASSERT_EQ (string_cst, tree_strip_any_location_wrapper (wrapped_string_cst));
15564
15565
15566 /* Wrapping a variable. */
15567 tree int_var = build_decl (UNKNOWN_LOCATION, VAR_DECL,
15568 get_identifier ("some_int_var"),
15569 integer_type_node);
15570 ASSERT_FALSE (CAN_HAVE_LOCATION_P (int_var));
15571 ASSERT_FALSE (location_wrapper_p (int_var));
15572
15573 tree wrapped_int_var = maybe_wrap_with_location (int_var, loc);
15574 ASSERT_TRUE (location_wrapper_p (wrapped_int_var));
15575 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_int_var));
15576 ASSERT_EQ (int_var, tree_strip_any_location_wrapper (wrapped_int_var));
15577
15578 /* Verify that "reinterpret_cast<int>(some_int_var)" is not a location
15579 wrapper. */
15580 tree r_cast = build1 (NON_LVALUE_EXPR, integer_type_node, int_var);
15581 ASSERT_FALSE (location_wrapper_p (r_cast));
15582 ASSERT_EQ (r_cast, tree_strip_any_location_wrapper (r_cast));
15583
15584 /* Verify that STRIP_NOPS removes wrappers. */
15585 check_strip_nops (wrapped_int_cst, int_cst);
15586 check_strip_nops (wrapped_string_cst, string_cst);
15587 check_strip_nops (wrapped_int_var, int_var);
15588 }
15589
15590 /* Test various tree predicates. Verify that location wrappers don't
15591 affect the results. */
15592
15593 static void
15594 test_predicates ()
15595 {
15596 /* Build various constants and wrappers around them. */
15597
15598 location_t loc = BUILTINS_LOCATION;
15599
15600 tree i_0 = build_int_cst (integer_type_node, 0);
15601 tree wr_i_0 = maybe_wrap_with_location (i_0, loc);
15602
15603 tree i_1 = build_int_cst (integer_type_node, 1);
15604 tree wr_i_1 = maybe_wrap_with_location (i_1, loc);
15605
15606 tree i_m1 = build_int_cst (integer_type_node, -1);
15607 tree wr_i_m1 = maybe_wrap_with_location (i_m1, loc);
15608
15609 tree f_0 = build_real_from_int_cst (float_type_node, i_0);
15610 tree wr_f_0 = maybe_wrap_with_location (f_0, loc);
15611 tree f_1 = build_real_from_int_cst (float_type_node, i_1);
15612 tree wr_f_1 = maybe_wrap_with_location (f_1, loc);
15613 tree f_m1 = build_real_from_int_cst (float_type_node, i_m1);
15614 tree wr_f_m1 = maybe_wrap_with_location (f_m1, loc);
15615
15616 tree c_i_0 = build_complex (NULL_TREE, i_0, i_0);
15617 tree c_i_1 = build_complex (NULL_TREE, i_1, i_0);
15618 tree c_i_m1 = build_complex (NULL_TREE, i_m1, i_0);
15619
15620 tree c_f_0 = build_complex (NULL_TREE, f_0, f_0);
15621 tree c_f_1 = build_complex (NULL_TREE, f_1, f_0);
15622 tree c_f_m1 = build_complex (NULL_TREE, f_m1, f_0);
15623
15624 /* TODO: vector constants. */
15625
15626 /* Test integer_onep. */
15627 ASSERT_FALSE (integer_onep (i_0));
15628 ASSERT_FALSE (integer_onep (wr_i_0));
15629 ASSERT_TRUE (integer_onep (i_1));
15630 ASSERT_TRUE (integer_onep (wr_i_1));
15631 ASSERT_FALSE (integer_onep (i_m1));
15632 ASSERT_FALSE (integer_onep (wr_i_m1));
15633 ASSERT_FALSE (integer_onep (f_0));
15634 ASSERT_FALSE (integer_onep (wr_f_0));
15635 ASSERT_FALSE (integer_onep (f_1));
15636 ASSERT_FALSE (integer_onep (wr_f_1));
15637 ASSERT_FALSE (integer_onep (f_m1));
15638 ASSERT_FALSE (integer_onep (wr_f_m1));
15639 ASSERT_FALSE (integer_onep (c_i_0));
15640 ASSERT_TRUE (integer_onep (c_i_1));
15641 ASSERT_FALSE (integer_onep (c_i_m1));
15642 ASSERT_FALSE (integer_onep (c_f_0));
15643 ASSERT_FALSE (integer_onep (c_f_1));
15644 ASSERT_FALSE (integer_onep (c_f_m1));
15645
15646 /* Test integer_zerop. */
15647 ASSERT_TRUE (integer_zerop (i_0));
15648 ASSERT_TRUE (integer_zerop (wr_i_0));
15649 ASSERT_FALSE (integer_zerop (i_1));
15650 ASSERT_FALSE (integer_zerop (wr_i_1));
15651 ASSERT_FALSE (integer_zerop (i_m1));
15652 ASSERT_FALSE (integer_zerop (wr_i_m1));
15653 ASSERT_FALSE (integer_zerop (f_0));
15654 ASSERT_FALSE (integer_zerop (wr_f_0));
15655 ASSERT_FALSE (integer_zerop (f_1));
15656 ASSERT_FALSE (integer_zerop (wr_f_1));
15657 ASSERT_FALSE (integer_zerop (f_m1));
15658 ASSERT_FALSE (integer_zerop (wr_f_m1));
15659 ASSERT_TRUE (integer_zerop (c_i_0));
15660 ASSERT_FALSE (integer_zerop (c_i_1));
15661 ASSERT_FALSE (integer_zerop (c_i_m1));
15662 ASSERT_FALSE (integer_zerop (c_f_0));
15663 ASSERT_FALSE (integer_zerop (c_f_1));
15664 ASSERT_FALSE (integer_zerop (c_f_m1));
15665
15666 /* Test integer_all_onesp. */
15667 ASSERT_FALSE (integer_all_onesp (i_0));
15668 ASSERT_FALSE (integer_all_onesp (wr_i_0));
15669 ASSERT_FALSE (integer_all_onesp (i_1));
15670 ASSERT_FALSE (integer_all_onesp (wr_i_1));
15671 ASSERT_TRUE (integer_all_onesp (i_m1));
15672 ASSERT_TRUE (integer_all_onesp (wr_i_m1));
15673 ASSERT_FALSE (integer_all_onesp (f_0));
15674 ASSERT_FALSE (integer_all_onesp (wr_f_0));
15675 ASSERT_FALSE (integer_all_onesp (f_1));
15676 ASSERT_FALSE (integer_all_onesp (wr_f_1));
15677 ASSERT_FALSE (integer_all_onesp (f_m1));
15678 ASSERT_FALSE (integer_all_onesp (wr_f_m1));
15679 ASSERT_FALSE (integer_all_onesp (c_i_0));
15680 ASSERT_FALSE (integer_all_onesp (c_i_1));
15681 ASSERT_FALSE (integer_all_onesp (c_i_m1));
15682 ASSERT_FALSE (integer_all_onesp (c_f_0));
15683 ASSERT_FALSE (integer_all_onesp (c_f_1));
15684 ASSERT_FALSE (integer_all_onesp (c_f_m1));
15685
15686 /* Test integer_minus_onep. */
15687 ASSERT_FALSE (integer_minus_onep (i_0));
15688 ASSERT_FALSE (integer_minus_onep (wr_i_0));
15689 ASSERT_FALSE (integer_minus_onep (i_1));
15690 ASSERT_FALSE (integer_minus_onep (wr_i_1));
15691 ASSERT_TRUE (integer_minus_onep (i_m1));
15692 ASSERT_TRUE (integer_minus_onep (wr_i_m1));
15693 ASSERT_FALSE (integer_minus_onep (f_0));
15694 ASSERT_FALSE (integer_minus_onep (wr_f_0));
15695 ASSERT_FALSE (integer_minus_onep (f_1));
15696 ASSERT_FALSE (integer_minus_onep (wr_f_1));
15697 ASSERT_FALSE (integer_minus_onep (f_m1));
15698 ASSERT_FALSE (integer_minus_onep (wr_f_m1));
15699 ASSERT_FALSE (integer_minus_onep (c_i_0));
15700 ASSERT_FALSE (integer_minus_onep (c_i_1));
15701 ASSERT_TRUE (integer_minus_onep (c_i_m1));
15702 ASSERT_FALSE (integer_minus_onep (c_f_0));
15703 ASSERT_FALSE (integer_minus_onep (c_f_1));
15704 ASSERT_FALSE (integer_minus_onep (c_f_m1));
15705
15706 /* Test integer_each_onep. */
15707 ASSERT_FALSE (integer_each_onep (i_0));
15708 ASSERT_FALSE (integer_each_onep (wr_i_0));
15709 ASSERT_TRUE (integer_each_onep (i_1));
15710 ASSERT_TRUE (integer_each_onep (wr_i_1));
15711 ASSERT_FALSE (integer_each_onep (i_m1));
15712 ASSERT_FALSE (integer_each_onep (wr_i_m1));
15713 ASSERT_FALSE (integer_each_onep (f_0));
15714 ASSERT_FALSE (integer_each_onep (wr_f_0));
15715 ASSERT_FALSE (integer_each_onep (f_1));
15716 ASSERT_FALSE (integer_each_onep (wr_f_1));
15717 ASSERT_FALSE (integer_each_onep (f_m1));
15718 ASSERT_FALSE (integer_each_onep (wr_f_m1));
15719 ASSERT_FALSE (integer_each_onep (c_i_0));
15720 ASSERT_FALSE (integer_each_onep (c_i_1));
15721 ASSERT_FALSE (integer_each_onep (c_i_m1));
15722 ASSERT_FALSE (integer_each_onep (c_f_0));
15723 ASSERT_FALSE (integer_each_onep (c_f_1));
15724 ASSERT_FALSE (integer_each_onep (c_f_m1));
15725
15726 /* Test integer_truep. */
15727 ASSERT_FALSE (integer_truep (i_0));
15728 ASSERT_FALSE (integer_truep (wr_i_0));
15729 ASSERT_TRUE (integer_truep (i_1));
15730 ASSERT_TRUE (integer_truep (wr_i_1));
15731 ASSERT_FALSE (integer_truep (i_m1));
15732 ASSERT_FALSE (integer_truep (wr_i_m1));
15733 ASSERT_FALSE (integer_truep (f_0));
15734 ASSERT_FALSE (integer_truep (wr_f_0));
15735 ASSERT_FALSE (integer_truep (f_1));
15736 ASSERT_FALSE (integer_truep (wr_f_1));
15737 ASSERT_FALSE (integer_truep (f_m1));
15738 ASSERT_FALSE (integer_truep (wr_f_m1));
15739 ASSERT_FALSE (integer_truep (c_i_0));
15740 ASSERT_TRUE (integer_truep (c_i_1));
15741 ASSERT_FALSE (integer_truep (c_i_m1));
15742 ASSERT_FALSE (integer_truep (c_f_0));
15743 ASSERT_FALSE (integer_truep (c_f_1));
15744 ASSERT_FALSE (integer_truep (c_f_m1));
15745
15746 /* Test integer_nonzerop. */
15747 ASSERT_FALSE (integer_nonzerop (i_0));
15748 ASSERT_FALSE (integer_nonzerop (wr_i_0));
15749 ASSERT_TRUE (integer_nonzerop (i_1));
15750 ASSERT_TRUE (integer_nonzerop (wr_i_1));
15751 ASSERT_TRUE (integer_nonzerop (i_m1));
15752 ASSERT_TRUE (integer_nonzerop (wr_i_m1));
15753 ASSERT_FALSE (integer_nonzerop (f_0));
15754 ASSERT_FALSE (integer_nonzerop (wr_f_0));
15755 ASSERT_FALSE (integer_nonzerop (f_1));
15756 ASSERT_FALSE (integer_nonzerop (wr_f_1));
15757 ASSERT_FALSE (integer_nonzerop (f_m1));
15758 ASSERT_FALSE (integer_nonzerop (wr_f_m1));
15759 ASSERT_FALSE (integer_nonzerop (c_i_0));
15760 ASSERT_TRUE (integer_nonzerop (c_i_1));
15761 ASSERT_TRUE (integer_nonzerop (c_i_m1));
15762 ASSERT_FALSE (integer_nonzerop (c_f_0));
15763 ASSERT_FALSE (integer_nonzerop (c_f_1));
15764 ASSERT_FALSE (integer_nonzerop (c_f_m1));
15765
15766 /* Test real_zerop. */
15767 ASSERT_FALSE (real_zerop (i_0));
15768 ASSERT_FALSE (real_zerop (wr_i_0));
15769 ASSERT_FALSE (real_zerop (i_1));
15770 ASSERT_FALSE (real_zerop (wr_i_1));
15771 ASSERT_FALSE (real_zerop (i_m1));
15772 ASSERT_FALSE (real_zerop (wr_i_m1));
15773 ASSERT_TRUE (real_zerop (f_0));
15774 ASSERT_TRUE (real_zerop (wr_f_0));
15775 ASSERT_FALSE (real_zerop (f_1));
15776 ASSERT_FALSE (real_zerop (wr_f_1));
15777 ASSERT_FALSE (real_zerop (f_m1));
15778 ASSERT_FALSE (real_zerop (wr_f_m1));
15779 ASSERT_FALSE (real_zerop (c_i_0));
15780 ASSERT_FALSE (real_zerop (c_i_1));
15781 ASSERT_FALSE (real_zerop (c_i_m1));
15782 ASSERT_TRUE (real_zerop (c_f_0));
15783 ASSERT_FALSE (real_zerop (c_f_1));
15784 ASSERT_FALSE (real_zerop (c_f_m1));
15785
15786 /* Test real_onep. */
15787 ASSERT_FALSE (real_onep (i_0));
15788 ASSERT_FALSE (real_onep (wr_i_0));
15789 ASSERT_FALSE (real_onep (i_1));
15790 ASSERT_FALSE (real_onep (wr_i_1));
15791 ASSERT_FALSE (real_onep (i_m1));
15792 ASSERT_FALSE (real_onep (wr_i_m1));
15793 ASSERT_FALSE (real_onep (f_0));
15794 ASSERT_FALSE (real_onep (wr_f_0));
15795 ASSERT_TRUE (real_onep (f_1));
15796 ASSERT_TRUE (real_onep (wr_f_1));
15797 ASSERT_FALSE (real_onep (f_m1));
15798 ASSERT_FALSE (real_onep (wr_f_m1));
15799 ASSERT_FALSE (real_onep (c_i_0));
15800 ASSERT_FALSE (real_onep (c_i_1));
15801 ASSERT_FALSE (real_onep (c_i_m1));
15802 ASSERT_FALSE (real_onep (c_f_0));
15803 ASSERT_TRUE (real_onep (c_f_1));
15804 ASSERT_FALSE (real_onep (c_f_m1));
15805
15806 /* Test real_minus_onep. */
15807 ASSERT_FALSE (real_minus_onep (i_0));
15808 ASSERT_FALSE (real_minus_onep (wr_i_0));
15809 ASSERT_FALSE (real_minus_onep (i_1));
15810 ASSERT_FALSE (real_minus_onep (wr_i_1));
15811 ASSERT_FALSE (real_minus_onep (i_m1));
15812 ASSERT_FALSE (real_minus_onep (wr_i_m1));
15813 ASSERT_FALSE (real_minus_onep (f_0));
15814 ASSERT_FALSE (real_minus_onep (wr_f_0));
15815 ASSERT_FALSE (real_minus_onep (f_1));
15816 ASSERT_FALSE (real_minus_onep (wr_f_1));
15817 ASSERT_TRUE (real_minus_onep (f_m1));
15818 ASSERT_TRUE (real_minus_onep (wr_f_m1));
15819 ASSERT_FALSE (real_minus_onep (c_i_0));
15820 ASSERT_FALSE (real_minus_onep (c_i_1));
15821 ASSERT_FALSE (real_minus_onep (c_i_m1));
15822 ASSERT_FALSE (real_minus_onep (c_f_0));
15823 ASSERT_FALSE (real_minus_onep (c_f_1));
15824 ASSERT_TRUE (real_minus_onep (c_f_m1));
15825
15826 /* Test zerop. */
15827 ASSERT_TRUE (zerop (i_0));
15828 ASSERT_TRUE (zerop (wr_i_0));
15829 ASSERT_FALSE (zerop (i_1));
15830 ASSERT_FALSE (zerop (wr_i_1));
15831 ASSERT_FALSE (zerop (i_m1));
15832 ASSERT_FALSE (zerop (wr_i_m1));
15833 ASSERT_TRUE (zerop (f_0));
15834 ASSERT_TRUE (zerop (wr_f_0));
15835 ASSERT_FALSE (zerop (f_1));
15836 ASSERT_FALSE (zerop (wr_f_1));
15837 ASSERT_FALSE (zerop (f_m1));
15838 ASSERT_FALSE (zerop (wr_f_m1));
15839 ASSERT_TRUE (zerop (c_i_0));
15840 ASSERT_FALSE (zerop (c_i_1));
15841 ASSERT_FALSE (zerop (c_i_m1));
15842 ASSERT_TRUE (zerop (c_f_0));
15843 ASSERT_FALSE (zerop (c_f_1));
15844 ASSERT_FALSE (zerop (c_f_m1));
15845
15846 /* Test tree_expr_nonnegative_p. */
15847 ASSERT_TRUE (tree_expr_nonnegative_p (i_0));
15848 ASSERT_TRUE (tree_expr_nonnegative_p (wr_i_0));
15849 ASSERT_TRUE (tree_expr_nonnegative_p (i_1));
15850 ASSERT_TRUE (tree_expr_nonnegative_p (wr_i_1));
15851 ASSERT_FALSE (tree_expr_nonnegative_p (i_m1));
15852 ASSERT_FALSE (tree_expr_nonnegative_p (wr_i_m1));
15853 ASSERT_TRUE (tree_expr_nonnegative_p (f_0));
15854 ASSERT_TRUE (tree_expr_nonnegative_p (wr_f_0));
15855 ASSERT_TRUE (tree_expr_nonnegative_p (f_1));
15856 ASSERT_TRUE (tree_expr_nonnegative_p (wr_f_1));
15857 ASSERT_FALSE (tree_expr_nonnegative_p (f_m1));
15858 ASSERT_FALSE (tree_expr_nonnegative_p (wr_f_m1));
15859 ASSERT_FALSE (tree_expr_nonnegative_p (c_i_0));
15860 ASSERT_FALSE (tree_expr_nonnegative_p (c_i_1));
15861 ASSERT_FALSE (tree_expr_nonnegative_p (c_i_m1));
15862 ASSERT_FALSE (tree_expr_nonnegative_p (c_f_0));
15863 ASSERT_FALSE (tree_expr_nonnegative_p (c_f_1));
15864 ASSERT_FALSE (tree_expr_nonnegative_p (c_f_m1));
15865
15866 /* Test tree_expr_nonzero_p. */
15867 ASSERT_FALSE (tree_expr_nonzero_p (i_0));
15868 ASSERT_FALSE (tree_expr_nonzero_p (wr_i_0));
15869 ASSERT_TRUE (tree_expr_nonzero_p (i_1));
15870 ASSERT_TRUE (tree_expr_nonzero_p (wr_i_1));
15871 ASSERT_TRUE (tree_expr_nonzero_p (i_m1));
15872 ASSERT_TRUE (tree_expr_nonzero_p (wr_i_m1));
15873
15874 /* Test integer_valued_real_p. */
15875 ASSERT_FALSE (integer_valued_real_p (i_0));
15876 ASSERT_TRUE (integer_valued_real_p (f_0));
15877 ASSERT_TRUE (integer_valued_real_p (wr_f_0));
15878 ASSERT_TRUE (integer_valued_real_p (f_1));
15879 ASSERT_TRUE (integer_valued_real_p (wr_f_1));
15880
15881 /* Test integer_pow2p. */
15882 ASSERT_FALSE (integer_pow2p (i_0));
15883 ASSERT_TRUE (integer_pow2p (i_1));
15884 ASSERT_TRUE (integer_pow2p (wr_i_1));
15885
15886 /* Test uniform_integer_cst_p. */
15887 ASSERT_TRUE (uniform_integer_cst_p (i_0));
15888 ASSERT_TRUE (uniform_integer_cst_p (wr_i_0));
15889 ASSERT_TRUE (uniform_integer_cst_p (i_1));
15890 ASSERT_TRUE (uniform_integer_cst_p (wr_i_1));
15891 ASSERT_TRUE (uniform_integer_cst_p (i_m1));
15892 ASSERT_TRUE (uniform_integer_cst_p (wr_i_m1));
15893 ASSERT_FALSE (uniform_integer_cst_p (f_0));
15894 ASSERT_FALSE (uniform_integer_cst_p (wr_f_0));
15895 ASSERT_FALSE (uniform_integer_cst_p (f_1));
15896 ASSERT_FALSE (uniform_integer_cst_p (wr_f_1));
15897 ASSERT_FALSE (uniform_integer_cst_p (f_m1));
15898 ASSERT_FALSE (uniform_integer_cst_p (wr_f_m1));
15899 ASSERT_FALSE (uniform_integer_cst_p (c_i_0));
15900 ASSERT_FALSE (uniform_integer_cst_p (c_i_1));
15901 ASSERT_FALSE (uniform_integer_cst_p (c_i_m1));
15902 ASSERT_FALSE (uniform_integer_cst_p (c_f_0));
15903 ASSERT_FALSE (uniform_integer_cst_p (c_f_1));
15904 ASSERT_FALSE (uniform_integer_cst_p (c_f_m1));
15905 }
15906
15907 /* Check that string escaping works correctly. */
15908
15909 static void
15910 test_escaped_strings (void)
15911 {
15912 int saved_cutoff;
15913 escaped_string msg;
15914
15915 msg.escape (NULL);
15916 /* ASSERT_STREQ does not accept NULL as a valid test
15917 result, so we have to use ASSERT_EQ instead. */
15918 ASSERT_EQ (NULL, (const char *) msg);
15919
15920 msg.escape ("");
15921 ASSERT_STREQ ("", (const char *) msg);
15922
15923 msg.escape ("foobar");
15924 ASSERT_STREQ ("foobar", (const char *) msg);
15925
15926 /* Ensure that we have -fmessage-length set to 0. */
15927 saved_cutoff = pp_line_cutoff (global_dc->printer);
15928 pp_line_cutoff (global_dc->printer) = 0;
15929
15930 msg.escape ("foo\nbar");
15931 ASSERT_STREQ ("foo\\nbar", (const char *) msg);
15932
15933 msg.escape ("\a\b\f\n\r\t\v");
15934 ASSERT_STREQ ("\\a\\b\\f\\n\\r\\t\\v", (const char *) msg);
15935
15936 /* Now repeat the tests with -fmessage-length set to 5. */
15937 pp_line_cutoff (global_dc->printer) = 5;
15938
15939 /* Note that the newline is not translated into an escape. */
15940 msg.escape ("foo\nbar");
15941 ASSERT_STREQ ("foo\nbar", (const char *) msg);
15942
15943 msg.escape ("\a\b\f\n\r\t\v");
15944 ASSERT_STREQ ("\\a\\b\\f\n\\r\\t\\v", (const char *) msg);
15945
15946 /* Restore the original message length setting. */
15947 pp_line_cutoff (global_dc->printer) = saved_cutoff;
15948 }
15949
15950 /* Run all of the selftests within this file. */
15951
15952 void
15953 tree_c_tests ()
15954 {
15955 test_integer_constants ();
15956 test_identifiers ();
15957 test_labels ();
15958 test_vector_cst_patterns ();
15959 test_location_wrappers ();
15960 test_predicates ();
15961 test_escaped_strings ();
15962 }
15963
15964 } // namespace selftest
15965
15966 #endif /* CHECKING_P */
15967
15968 #include "gt-tree.h"