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