New VECTOR_CST layout
[official-gcc.git] / gcc / tree.c
blobe3a60fb3e141640123a5396c1d0b65b387028271
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2017 Free Software Foundation, Inc.
4 This file is part of GCC.
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.
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.
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/>. */
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.
27 It is intended to be language-independent but can occasionally
28 calls language-dependent routines. */
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "backend.h"
34 #include "target.h"
35 #include "tree.h"
36 #include "gimple.h"
37 #include "tree-pass.h"
38 #include "ssa.h"
39 #include "cgraph.h"
40 #include "diagnostic.h"
41 #include "flags.h"
42 #include "alias.h"
43 #include "fold-const.h"
44 #include "stor-layout.h"
45 #include "calls.h"
46 #include "attribs.h"
47 #include "toplev.h" /* get_random_seed */
48 #include "output.h"
49 #include "common/common-target.h"
50 #include "langhooks.h"
51 #include "tree-inline.h"
52 #include "tree-iterator.h"
53 #include "internal-fn.h"
54 #include "gimple-iterator.h"
55 #include "gimplify.h"
56 #include "tree-dfa.h"
57 #include "params.h"
58 #include "langhooks-def.h"
59 #include "tree-diagnostic.h"
60 #include "except.h"
61 #include "builtins.h"
62 #include "print-tree.h"
63 #include "ipa-utils.h"
64 #include "selftest.h"
65 #include "stringpool.h"
66 #include "attribs.h"
67 #include "rtl.h"
68 #include "regs.h"
69 #include "tree-vector-builder.h"
71 /* Tree code classes. */
73 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
74 #define END_OF_BASE_TREE_CODES tcc_exceptional,
76 const enum tree_code_class tree_code_type[] = {
77 #include "all-tree.def"
80 #undef DEFTREECODE
81 #undef END_OF_BASE_TREE_CODES
83 /* Table indexed by tree code giving number of expression
84 operands beyond the fixed part of the node structure.
85 Not used for types or decls. */
87 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
88 #define END_OF_BASE_TREE_CODES 0,
90 const unsigned char tree_code_length[] = {
91 #include "all-tree.def"
94 #undef DEFTREECODE
95 #undef END_OF_BASE_TREE_CODES
97 /* Names of tree components.
98 Used for printing out the tree and error messages. */
99 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
100 #define END_OF_BASE_TREE_CODES "@dummy",
102 static const char *const tree_code_name[] = {
103 #include "all-tree.def"
106 #undef DEFTREECODE
107 #undef END_OF_BASE_TREE_CODES
109 /* Each tree code class has an associated string representation.
110 These must correspond to the tree_code_class entries. */
112 const char *const tree_code_class_strings[] =
114 "exceptional",
115 "constant",
116 "type",
117 "declaration",
118 "reference",
119 "comparison",
120 "unary",
121 "binary",
122 "statement",
123 "vl_exp",
124 "expression"
127 /* obstack.[ch] explicitly declined to prototype this. */
128 extern int _obstack_allocated_p (struct obstack *h, void *obj);
130 /* Statistics-gathering stuff. */
132 static int tree_code_counts[MAX_TREE_CODES];
133 int tree_node_counts[(int) all_kinds];
134 int tree_node_sizes[(int) all_kinds];
136 /* Keep in sync with tree.h:enum tree_node_kind. */
137 static const char * const tree_node_kind_names[] = {
138 "decls",
139 "types",
140 "blocks",
141 "stmts",
142 "refs",
143 "exprs",
144 "constants",
145 "identifiers",
146 "vecs",
147 "binfos",
148 "ssa names",
149 "constructors",
150 "random kinds",
151 "lang_decl kinds",
152 "lang_type kinds",
153 "omp clauses",
156 /* Unique id for next decl created. */
157 static GTY(()) int next_decl_uid;
158 /* Unique id for next type created. */
159 static GTY(()) unsigned next_type_uid = 1;
160 /* Unique id for next debug decl created. Use negative numbers,
161 to catch erroneous uses. */
162 static GTY(()) int next_debug_decl_uid;
164 /* Since we cannot rehash a type after it is in the table, we have to
165 keep the hash code. */
167 struct GTY((for_user)) type_hash {
168 unsigned long hash;
169 tree type;
172 /* Initial size of the hash table (rounded to next prime). */
173 #define TYPE_HASH_INITIAL_SIZE 1000
175 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash>
177 static hashval_t hash (type_hash *t) { return t->hash; }
178 static bool equal (type_hash *a, type_hash *b);
180 static int
181 keep_cache_entry (type_hash *&t)
183 return ggc_marked_p (t->type);
187 /* Now here is the hash table. When recording a type, it is added to
188 the slot whose index is the hash code. Note that the hash table is
189 used for several kinds of types (function types, array types and
190 array index range types, for now). While all these live in the
191 same table, they are completely independent, and the hash code is
192 computed differently for each of these. */
194 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
196 /* Hash table and temporary node for larger integer const values. */
197 static GTY (()) tree int_cst_node;
199 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node>
201 static hashval_t hash (tree t);
202 static bool equal (tree x, tree y);
205 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
207 /* Hash table for optimization flags and target option flags. Use the same
208 hash table for both sets of options. Nodes for building the current
209 optimization and target option nodes. The assumption is most of the time
210 the options created will already be in the hash table, so we avoid
211 allocating and freeing up a node repeatably. */
212 static GTY (()) tree cl_optimization_node;
213 static GTY (()) tree cl_target_option_node;
215 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node>
217 static hashval_t hash (tree t);
218 static bool equal (tree x, tree y);
221 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
223 /* General tree->tree mapping structure for use in hash tables. */
226 static GTY ((cache))
227 hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
229 static GTY ((cache))
230 hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
232 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
234 static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
236 static bool
237 equal (tree_vec_map *a, tree_vec_map *b)
239 return a->base.from == b->base.from;
242 static int
243 keep_cache_entry (tree_vec_map *&m)
245 return ggc_marked_p (m->base.from);
249 static GTY ((cache))
250 hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
252 static void set_type_quals (tree, int);
253 static void print_type_hash_statistics (void);
254 static void print_debug_expr_statistics (void);
255 static void print_value_expr_statistics (void);
257 tree global_trees[TI_MAX];
258 tree integer_types[itk_none];
260 bool int_n_enabled_p[NUM_INT_N_ENTS];
261 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
263 bool tree_contains_struct[MAX_TREE_CODES][64];
265 /* Number of operands for each OpenMP clause. */
266 unsigned const char omp_clause_num_ops[] =
268 0, /* OMP_CLAUSE_ERROR */
269 1, /* OMP_CLAUSE_PRIVATE */
270 1, /* OMP_CLAUSE_SHARED */
271 1, /* OMP_CLAUSE_FIRSTPRIVATE */
272 2, /* OMP_CLAUSE_LASTPRIVATE */
273 5, /* OMP_CLAUSE_REDUCTION */
274 1, /* OMP_CLAUSE_COPYIN */
275 1, /* OMP_CLAUSE_COPYPRIVATE */
276 3, /* OMP_CLAUSE_LINEAR */
277 2, /* OMP_CLAUSE_ALIGNED */
278 1, /* OMP_CLAUSE_DEPEND */
279 1, /* OMP_CLAUSE_UNIFORM */
280 1, /* OMP_CLAUSE_TO_DECLARE */
281 1, /* OMP_CLAUSE_LINK */
282 2, /* OMP_CLAUSE_FROM */
283 2, /* OMP_CLAUSE_TO */
284 2, /* OMP_CLAUSE_MAP */
285 1, /* OMP_CLAUSE_USE_DEVICE_PTR */
286 1, /* OMP_CLAUSE_IS_DEVICE_PTR */
287 2, /* OMP_CLAUSE__CACHE_ */
288 2, /* OMP_CLAUSE_GANG */
289 1, /* OMP_CLAUSE_ASYNC */
290 1, /* OMP_CLAUSE_WAIT */
291 0, /* OMP_CLAUSE_AUTO */
292 0, /* OMP_CLAUSE_SEQ */
293 1, /* OMP_CLAUSE__LOOPTEMP_ */
294 1, /* OMP_CLAUSE_IF */
295 1, /* OMP_CLAUSE_NUM_THREADS */
296 1, /* OMP_CLAUSE_SCHEDULE */
297 0, /* OMP_CLAUSE_NOWAIT */
298 1, /* OMP_CLAUSE_ORDERED */
299 0, /* OMP_CLAUSE_DEFAULT */
300 3, /* OMP_CLAUSE_COLLAPSE */
301 0, /* OMP_CLAUSE_UNTIED */
302 1, /* OMP_CLAUSE_FINAL */
303 0, /* OMP_CLAUSE_MERGEABLE */
304 1, /* OMP_CLAUSE_DEVICE */
305 1, /* OMP_CLAUSE_DIST_SCHEDULE */
306 0, /* OMP_CLAUSE_INBRANCH */
307 0, /* OMP_CLAUSE_NOTINBRANCH */
308 1, /* OMP_CLAUSE_NUM_TEAMS */
309 1, /* OMP_CLAUSE_THREAD_LIMIT */
310 0, /* OMP_CLAUSE_PROC_BIND */
311 1, /* OMP_CLAUSE_SAFELEN */
312 1, /* OMP_CLAUSE_SIMDLEN */
313 0, /* OMP_CLAUSE_FOR */
314 0, /* OMP_CLAUSE_PARALLEL */
315 0, /* OMP_CLAUSE_SECTIONS */
316 0, /* OMP_CLAUSE_TASKGROUP */
317 1, /* OMP_CLAUSE_PRIORITY */
318 1, /* OMP_CLAUSE_GRAINSIZE */
319 1, /* OMP_CLAUSE_NUM_TASKS */
320 0, /* OMP_CLAUSE_NOGROUP */
321 0, /* OMP_CLAUSE_THREADS */
322 0, /* OMP_CLAUSE_SIMD */
323 1, /* OMP_CLAUSE_HINT */
324 0, /* OMP_CLAUSE_DEFALTMAP */
325 1, /* OMP_CLAUSE__SIMDUID_ */
326 0, /* OMP_CLAUSE__SIMT_ */
327 0, /* OMP_CLAUSE_INDEPENDENT */
328 1, /* OMP_CLAUSE_WORKER */
329 1, /* OMP_CLAUSE_VECTOR */
330 1, /* OMP_CLAUSE_NUM_GANGS */
331 1, /* OMP_CLAUSE_NUM_WORKERS */
332 1, /* OMP_CLAUSE_VECTOR_LENGTH */
333 3, /* OMP_CLAUSE_TILE */
334 2, /* OMP_CLAUSE__GRIDDIM_ */
337 const char * const omp_clause_code_name[] =
339 "error_clause",
340 "private",
341 "shared",
342 "firstprivate",
343 "lastprivate",
344 "reduction",
345 "copyin",
346 "copyprivate",
347 "linear",
348 "aligned",
349 "depend",
350 "uniform",
351 "to",
352 "link",
353 "from",
354 "to",
355 "map",
356 "use_device_ptr",
357 "is_device_ptr",
358 "_cache_",
359 "gang",
360 "async",
361 "wait",
362 "auto",
363 "seq",
364 "_looptemp_",
365 "if",
366 "num_threads",
367 "schedule",
368 "nowait",
369 "ordered",
370 "default",
371 "collapse",
372 "untied",
373 "final",
374 "mergeable",
375 "device",
376 "dist_schedule",
377 "inbranch",
378 "notinbranch",
379 "num_teams",
380 "thread_limit",
381 "proc_bind",
382 "safelen",
383 "simdlen",
384 "for",
385 "parallel",
386 "sections",
387 "taskgroup",
388 "priority",
389 "grainsize",
390 "num_tasks",
391 "nogroup",
392 "threads",
393 "simd",
394 "hint",
395 "defaultmap",
396 "_simduid_",
397 "_simt_",
398 "independent",
399 "worker",
400 "vector",
401 "num_gangs",
402 "num_workers",
403 "vector_length",
404 "tile",
405 "_griddim_"
409 /* Return the tree node structure used by tree code CODE. */
411 static inline enum tree_node_structure_enum
412 tree_node_structure_for_code (enum tree_code code)
414 switch (TREE_CODE_CLASS (code))
416 case tcc_declaration:
418 switch (code)
420 case FIELD_DECL:
421 return TS_FIELD_DECL;
422 case PARM_DECL:
423 return TS_PARM_DECL;
424 case VAR_DECL:
425 return TS_VAR_DECL;
426 case LABEL_DECL:
427 return TS_LABEL_DECL;
428 case RESULT_DECL:
429 return TS_RESULT_DECL;
430 case DEBUG_EXPR_DECL:
431 return TS_DECL_WRTL;
432 case CONST_DECL:
433 return TS_CONST_DECL;
434 case TYPE_DECL:
435 return TS_TYPE_DECL;
436 case FUNCTION_DECL:
437 return TS_FUNCTION_DECL;
438 case TRANSLATION_UNIT_DECL:
439 return TS_TRANSLATION_UNIT_DECL;
440 default:
441 return TS_DECL_NON_COMMON;
444 case tcc_type:
445 return TS_TYPE_NON_COMMON;
446 case tcc_reference:
447 case tcc_comparison:
448 case tcc_unary:
449 case tcc_binary:
450 case tcc_expression:
451 case tcc_statement:
452 case tcc_vl_exp:
453 return TS_EXP;
454 default: /* tcc_constant and tcc_exceptional */
455 break;
457 switch (code)
459 /* tcc_constant cases. */
460 case VOID_CST: return TS_TYPED;
461 case INTEGER_CST: return TS_INT_CST;
462 case REAL_CST: return TS_REAL_CST;
463 case FIXED_CST: return TS_FIXED_CST;
464 case COMPLEX_CST: return TS_COMPLEX;
465 case VECTOR_CST: return TS_VECTOR;
466 case STRING_CST: return TS_STRING;
467 /* tcc_exceptional cases. */
468 case ERROR_MARK: return TS_COMMON;
469 case IDENTIFIER_NODE: return TS_IDENTIFIER;
470 case TREE_LIST: return TS_LIST;
471 case TREE_VEC: return TS_VEC;
472 case SSA_NAME: return TS_SSA_NAME;
473 case PLACEHOLDER_EXPR: return TS_COMMON;
474 case STATEMENT_LIST: return TS_STATEMENT_LIST;
475 case BLOCK: return TS_BLOCK;
476 case CONSTRUCTOR: return TS_CONSTRUCTOR;
477 case TREE_BINFO: return TS_BINFO;
478 case OMP_CLAUSE: return TS_OMP_CLAUSE;
479 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
480 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
482 default:
483 gcc_unreachable ();
488 /* Initialize tree_contains_struct to describe the hierarchy of tree
489 nodes. */
491 static void
492 initialize_tree_contains_struct (void)
494 unsigned i;
496 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
498 enum tree_code code;
499 enum tree_node_structure_enum ts_code;
501 code = (enum tree_code) i;
502 ts_code = tree_node_structure_for_code (code);
504 /* Mark the TS structure itself. */
505 tree_contains_struct[code][ts_code] = 1;
507 /* Mark all the structures that TS is derived from. */
508 switch (ts_code)
510 case TS_TYPED:
511 case TS_BLOCK:
512 case TS_OPTIMIZATION:
513 case TS_TARGET_OPTION:
514 MARK_TS_BASE (code);
515 break;
517 case TS_COMMON:
518 case TS_INT_CST:
519 case TS_REAL_CST:
520 case TS_FIXED_CST:
521 case TS_VECTOR:
522 case TS_STRING:
523 case TS_COMPLEX:
524 case TS_SSA_NAME:
525 case TS_CONSTRUCTOR:
526 case TS_EXP:
527 case TS_STATEMENT_LIST:
528 MARK_TS_TYPED (code);
529 break;
531 case TS_IDENTIFIER:
532 case TS_DECL_MINIMAL:
533 case TS_TYPE_COMMON:
534 case TS_LIST:
535 case TS_VEC:
536 case TS_BINFO:
537 case TS_OMP_CLAUSE:
538 MARK_TS_COMMON (code);
539 break;
541 case TS_TYPE_WITH_LANG_SPECIFIC:
542 MARK_TS_TYPE_COMMON (code);
543 break;
545 case TS_TYPE_NON_COMMON:
546 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
547 break;
549 case TS_DECL_COMMON:
550 MARK_TS_DECL_MINIMAL (code);
551 break;
553 case TS_DECL_WRTL:
554 case TS_CONST_DECL:
555 MARK_TS_DECL_COMMON (code);
556 break;
558 case TS_DECL_NON_COMMON:
559 MARK_TS_DECL_WITH_VIS (code);
560 break;
562 case TS_DECL_WITH_VIS:
563 case TS_PARM_DECL:
564 case TS_LABEL_DECL:
565 case TS_RESULT_DECL:
566 MARK_TS_DECL_WRTL (code);
567 break;
569 case TS_FIELD_DECL:
570 MARK_TS_DECL_COMMON (code);
571 break;
573 case TS_VAR_DECL:
574 MARK_TS_DECL_WITH_VIS (code);
575 break;
577 case TS_TYPE_DECL:
578 case TS_FUNCTION_DECL:
579 MARK_TS_DECL_NON_COMMON (code);
580 break;
582 case TS_TRANSLATION_UNIT_DECL:
583 MARK_TS_DECL_COMMON (code);
584 break;
586 default:
587 gcc_unreachable ();
591 /* Basic consistency checks for attributes used in fold. */
592 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
593 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
594 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
595 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
596 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
597 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
598 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
599 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
600 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
601 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
602 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
603 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
604 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
605 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
606 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
607 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
608 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
609 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
610 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
611 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
612 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
613 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
614 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
615 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
616 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
617 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
618 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
619 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
620 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
621 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
622 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
623 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
624 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
625 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
626 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
627 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
628 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
629 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
630 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
631 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
635 /* Init tree.c. */
637 void
638 init_ttree (void)
640 /* Initialize the hash table of types. */
641 type_hash_table
642 = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
644 debug_expr_for_decl
645 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
647 value_expr_for_decl
648 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
650 int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
652 int_cst_node = make_int_cst (1, 1);
654 cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
656 cl_optimization_node = make_node (OPTIMIZATION_NODE);
657 cl_target_option_node = make_node (TARGET_OPTION_NODE);
659 /* Initialize the tree_contains_struct array. */
660 initialize_tree_contains_struct ();
661 lang_hooks.init_ts ();
665 /* The name of the object as the assembler will see it (but before any
666 translations made by ASM_OUTPUT_LABELREF). Often this is the same
667 as DECL_NAME. It is an IDENTIFIER_NODE. */
668 tree
669 decl_assembler_name (tree decl)
671 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
672 lang_hooks.set_decl_assembler_name (decl);
673 return DECL_ASSEMBLER_NAME_RAW (decl);
676 /* The DECL_ASSEMBLER_NAME_RAW of DECL is being explicitly set to NAME
677 (either of which may be NULL). Inform the FE, if this changes the
678 name. */
680 void
681 overwrite_decl_assembler_name (tree decl, tree name)
683 if (DECL_ASSEMBLER_NAME_RAW (decl) != name)
684 lang_hooks.overwrite_decl_assembler_name (decl, name);
687 /* When the target supports COMDAT groups, this indicates which group the
688 DECL is associated with. This can be either an IDENTIFIER_NODE or a
689 decl, in which case its DECL_ASSEMBLER_NAME identifies the group. */
690 tree
691 decl_comdat_group (const_tree node)
693 struct symtab_node *snode = symtab_node::get (node);
694 if (!snode)
695 return NULL;
696 return snode->get_comdat_group ();
699 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE. */
700 tree
701 decl_comdat_group_id (const_tree node)
703 struct symtab_node *snode = symtab_node::get (node);
704 if (!snode)
705 return NULL;
706 return snode->get_comdat_group_id ();
709 /* When the target supports named section, return its name as IDENTIFIER_NODE
710 or NULL if it is in no section. */
711 const char *
712 decl_section_name (const_tree node)
714 struct symtab_node *snode = symtab_node::get (node);
715 if (!snode)
716 return NULL;
717 return snode->get_section ();
720 /* Set section name of NODE to VALUE (that is expected to be
721 identifier node) */
722 void
723 set_decl_section_name (tree node, const char *value)
725 struct symtab_node *snode;
727 if (value == NULL)
729 snode = symtab_node::get (node);
730 if (!snode)
731 return;
733 else if (VAR_P (node))
734 snode = varpool_node::get_create (node);
735 else
736 snode = cgraph_node::get_create (node);
737 snode->set_section (value);
740 /* Return TLS model of a variable NODE. */
741 enum tls_model
742 decl_tls_model (const_tree node)
744 struct varpool_node *snode = varpool_node::get (node);
745 if (!snode)
746 return TLS_MODEL_NONE;
747 return snode->tls_model;
750 /* Set TLS model of variable NODE to MODEL. */
751 void
752 set_decl_tls_model (tree node, enum tls_model model)
754 struct varpool_node *vnode;
756 if (model == TLS_MODEL_NONE)
758 vnode = varpool_node::get (node);
759 if (!vnode)
760 return;
762 else
763 vnode = varpool_node::get_create (node);
764 vnode->tls_model = model;
767 /* Compute the number of bytes occupied by a tree with code CODE.
768 This function cannot be used for nodes that have variable sizes,
769 including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR. */
770 size_t
771 tree_code_size (enum tree_code code)
773 switch (TREE_CODE_CLASS (code))
775 case tcc_declaration: /* A decl node */
776 switch (code)
778 case FIELD_DECL: return sizeof (tree_field_decl);
779 case PARM_DECL: return sizeof (tree_parm_decl);
780 case VAR_DECL: return sizeof (tree_var_decl);
781 case LABEL_DECL: return sizeof (tree_label_decl);
782 case RESULT_DECL: return sizeof (tree_result_decl);
783 case CONST_DECL: return sizeof (tree_const_decl);
784 case TYPE_DECL: return sizeof (tree_type_decl);
785 case FUNCTION_DECL: return sizeof (tree_function_decl);
786 case DEBUG_EXPR_DECL: return sizeof (tree_decl_with_rtl);
787 case TRANSLATION_UNIT_DECL: return sizeof (tree_translation_unit_decl);
788 case NAMESPACE_DECL:
789 case IMPORTED_DECL:
790 case NAMELIST_DECL: return sizeof (tree_decl_non_common);
791 default:
792 gcc_checking_assert (code >= NUM_TREE_CODES);
793 return lang_hooks.tree_size (code);
796 case tcc_type: /* a type node */
797 switch (code)
799 case OFFSET_TYPE:
800 case ENUMERAL_TYPE:
801 case BOOLEAN_TYPE:
802 case INTEGER_TYPE:
803 case REAL_TYPE:
804 case POINTER_TYPE:
805 case REFERENCE_TYPE:
806 case NULLPTR_TYPE:
807 case FIXED_POINT_TYPE:
808 case COMPLEX_TYPE:
809 case VECTOR_TYPE:
810 case ARRAY_TYPE:
811 case RECORD_TYPE:
812 case UNION_TYPE:
813 case QUAL_UNION_TYPE:
814 case VOID_TYPE:
815 case POINTER_BOUNDS_TYPE:
816 case FUNCTION_TYPE:
817 case METHOD_TYPE:
818 case LANG_TYPE: return sizeof (tree_type_non_common);
819 default:
820 gcc_checking_assert (code >= NUM_TREE_CODES);
821 return lang_hooks.tree_size (code);
824 case tcc_reference: /* a reference */
825 case tcc_expression: /* an expression */
826 case tcc_statement: /* an expression with side effects */
827 case tcc_comparison: /* a comparison expression */
828 case tcc_unary: /* a unary arithmetic expression */
829 case tcc_binary: /* a binary arithmetic expression */
830 return (sizeof (struct tree_exp)
831 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
833 case tcc_constant: /* a constant */
834 switch (code)
836 case VOID_CST: return sizeof (tree_typed);
837 case INTEGER_CST: gcc_unreachable ();
838 case REAL_CST: return sizeof (tree_real_cst);
839 case FIXED_CST: return sizeof (tree_fixed_cst);
840 case COMPLEX_CST: return sizeof (tree_complex);
841 case VECTOR_CST: gcc_unreachable ();
842 case STRING_CST: gcc_unreachable ();
843 default:
844 gcc_checking_assert (code >= NUM_TREE_CODES);
845 return lang_hooks.tree_size (code);
848 case tcc_exceptional: /* something random, like an identifier. */
849 switch (code)
851 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
852 case TREE_LIST: return sizeof (tree_list);
854 case ERROR_MARK:
855 case PLACEHOLDER_EXPR: return sizeof (tree_common);
857 case TREE_VEC: gcc_unreachable ();
858 case OMP_CLAUSE: gcc_unreachable ();
860 case SSA_NAME: return sizeof (tree_ssa_name);
862 case STATEMENT_LIST: return sizeof (tree_statement_list);
863 case BLOCK: return sizeof (struct tree_block);
864 case CONSTRUCTOR: return sizeof (tree_constructor);
865 case OPTIMIZATION_NODE: return sizeof (tree_optimization_option);
866 case TARGET_OPTION_NODE: return sizeof (tree_target_option);
868 default:
869 gcc_checking_assert (code >= NUM_TREE_CODES);
870 return lang_hooks.tree_size (code);
873 default:
874 gcc_unreachable ();
878 /* Compute the number of bytes occupied by NODE. This routine only
879 looks at TREE_CODE, except for those nodes that have variable sizes. */
880 size_t
881 tree_size (const_tree node)
883 const enum tree_code code = TREE_CODE (node);
884 switch (code)
886 case INTEGER_CST:
887 return (sizeof (struct tree_int_cst)
888 + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
890 case TREE_BINFO:
891 return (offsetof (struct tree_binfo, base_binfos)
892 + vec<tree, va_gc>
893 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
895 case TREE_VEC:
896 return (sizeof (struct tree_vec)
897 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
899 case VECTOR_CST:
900 return (sizeof (struct tree_vector)
901 + (vector_cst_encoded_nelts (node) - 1) * sizeof (tree));
903 case STRING_CST:
904 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
906 case OMP_CLAUSE:
907 return (sizeof (struct tree_omp_clause)
908 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
909 * sizeof (tree));
911 default:
912 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
913 return (sizeof (struct tree_exp)
914 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
915 else
916 return tree_code_size (code);
920 /* Record interesting allocation statistics for a tree node with CODE
921 and LENGTH. */
923 static void
924 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
925 size_t length ATTRIBUTE_UNUSED)
927 enum tree_code_class type = TREE_CODE_CLASS (code);
928 tree_node_kind kind;
930 if (!GATHER_STATISTICS)
931 return;
933 switch (type)
935 case tcc_declaration: /* A decl node */
936 kind = d_kind;
937 break;
939 case tcc_type: /* a type node */
940 kind = t_kind;
941 break;
943 case tcc_statement: /* an expression with side effects */
944 kind = s_kind;
945 break;
947 case tcc_reference: /* a reference */
948 kind = r_kind;
949 break;
951 case tcc_expression: /* an expression */
952 case tcc_comparison: /* a comparison expression */
953 case tcc_unary: /* a unary arithmetic expression */
954 case tcc_binary: /* a binary arithmetic expression */
955 kind = e_kind;
956 break;
958 case tcc_constant: /* a constant */
959 kind = c_kind;
960 break;
962 case tcc_exceptional: /* something random, like an identifier. */
963 switch (code)
965 case IDENTIFIER_NODE:
966 kind = id_kind;
967 break;
969 case TREE_VEC:
970 kind = vec_kind;
971 break;
973 case TREE_BINFO:
974 kind = binfo_kind;
975 break;
977 case SSA_NAME:
978 kind = ssa_name_kind;
979 break;
981 case BLOCK:
982 kind = b_kind;
983 break;
985 case CONSTRUCTOR:
986 kind = constr_kind;
987 break;
989 case OMP_CLAUSE:
990 kind = omp_clause_kind;
991 break;
993 default:
994 kind = x_kind;
995 break;
997 break;
999 case tcc_vl_exp:
1000 kind = e_kind;
1001 break;
1003 default:
1004 gcc_unreachable ();
1007 tree_code_counts[(int) code]++;
1008 tree_node_counts[(int) kind]++;
1009 tree_node_sizes[(int) kind] += length;
1012 /* Allocate and return a new UID from the DECL_UID namespace. */
1015 allocate_decl_uid (void)
1017 return next_decl_uid++;
1020 /* Return a newly allocated node of code CODE. For decl and type
1021 nodes, some other fields are initialized. The rest of the node is
1022 initialized to zero. This function cannot be used for TREE_VEC,
1023 INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
1024 tree_code_size.
1026 Achoo! I got a code in the node. */
1028 tree
1029 make_node (enum tree_code code MEM_STAT_DECL)
1031 tree t;
1032 enum tree_code_class type = TREE_CODE_CLASS (code);
1033 size_t length = tree_code_size (code);
1035 record_node_allocation_statistics (code, length);
1037 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1038 TREE_SET_CODE (t, code);
1040 switch (type)
1042 case tcc_statement:
1043 TREE_SIDE_EFFECTS (t) = 1;
1044 break;
1046 case tcc_declaration:
1047 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1049 if (code == FUNCTION_DECL)
1051 SET_DECL_ALIGN (t, FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY));
1052 SET_DECL_MODE (t, FUNCTION_MODE);
1054 else
1055 SET_DECL_ALIGN (t, 1);
1057 DECL_SOURCE_LOCATION (t) = input_location;
1058 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1059 DECL_UID (t) = --next_debug_decl_uid;
1060 else
1062 DECL_UID (t) = allocate_decl_uid ();
1063 SET_DECL_PT_UID (t, -1);
1065 if (TREE_CODE (t) == LABEL_DECL)
1066 LABEL_DECL_UID (t) = -1;
1068 break;
1070 case tcc_type:
1071 TYPE_UID (t) = next_type_uid++;
1072 SET_TYPE_ALIGN (t, BITS_PER_UNIT);
1073 TYPE_USER_ALIGN (t) = 0;
1074 TYPE_MAIN_VARIANT (t) = t;
1075 TYPE_CANONICAL (t) = t;
1077 /* Default to no attributes for type, but let target change that. */
1078 TYPE_ATTRIBUTES (t) = NULL_TREE;
1079 targetm.set_default_type_attributes (t);
1081 /* We have not yet computed the alias set for this type. */
1082 TYPE_ALIAS_SET (t) = -1;
1083 break;
1085 case tcc_constant:
1086 TREE_CONSTANT (t) = 1;
1087 break;
1089 case tcc_expression:
1090 switch (code)
1092 case INIT_EXPR:
1093 case MODIFY_EXPR:
1094 case VA_ARG_EXPR:
1095 case PREDECREMENT_EXPR:
1096 case PREINCREMENT_EXPR:
1097 case POSTDECREMENT_EXPR:
1098 case POSTINCREMENT_EXPR:
1099 /* All of these have side-effects, no matter what their
1100 operands are. */
1101 TREE_SIDE_EFFECTS (t) = 1;
1102 break;
1104 default:
1105 break;
1107 break;
1109 case tcc_exceptional:
1110 switch (code)
1112 case TARGET_OPTION_NODE:
1113 TREE_TARGET_OPTION(t)
1114 = ggc_cleared_alloc<struct cl_target_option> ();
1115 break;
1117 case OPTIMIZATION_NODE:
1118 TREE_OPTIMIZATION (t)
1119 = ggc_cleared_alloc<struct cl_optimization> ();
1120 break;
1122 default:
1123 break;
1125 break;
1127 default:
1128 /* Other classes need no special treatment. */
1129 break;
1132 return t;
1135 /* Free tree node. */
1137 void
1138 free_node (tree node)
1140 enum tree_code code = TREE_CODE (node);
1141 if (GATHER_STATISTICS)
1143 tree_code_counts[(int) TREE_CODE (node)]--;
1144 tree_node_counts[(int) t_kind]--;
1145 tree_node_sizes[(int) t_kind] -= tree_size (node);
1147 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1148 vec_free (CONSTRUCTOR_ELTS (node));
1149 else if (code == BLOCK)
1150 vec_free (BLOCK_NONLOCALIZED_VARS (node));
1151 else if (code == TREE_BINFO)
1152 vec_free (BINFO_BASE_ACCESSES (node));
1153 ggc_free (node);
1156 /* Return a new node with the same contents as NODE except that its
1157 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
1159 tree
1160 copy_node (tree node MEM_STAT_DECL)
1162 tree t;
1163 enum tree_code code = TREE_CODE (node);
1164 size_t length;
1166 gcc_assert (code != STATEMENT_LIST);
1168 length = tree_size (node);
1169 record_node_allocation_statistics (code, length);
1170 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1171 memcpy (t, node, length);
1173 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1174 TREE_CHAIN (t) = 0;
1175 TREE_ASM_WRITTEN (t) = 0;
1176 TREE_VISITED (t) = 0;
1178 if (TREE_CODE_CLASS (code) == tcc_declaration)
1180 if (code == DEBUG_EXPR_DECL)
1181 DECL_UID (t) = --next_debug_decl_uid;
1182 else
1184 DECL_UID (t) = allocate_decl_uid ();
1185 if (DECL_PT_UID_SET_P (node))
1186 SET_DECL_PT_UID (t, DECL_PT_UID (node));
1188 if ((TREE_CODE (node) == PARM_DECL || VAR_P (node))
1189 && DECL_HAS_VALUE_EXPR_P (node))
1191 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1192 DECL_HAS_VALUE_EXPR_P (t) = 1;
1194 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
1195 if (VAR_P (node))
1197 DECL_HAS_DEBUG_EXPR_P (t) = 0;
1198 t->decl_with_vis.symtab_node = NULL;
1200 if (VAR_P (node) && DECL_HAS_INIT_PRIORITY_P (node))
1202 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1203 DECL_HAS_INIT_PRIORITY_P (t) = 1;
1205 if (TREE_CODE (node) == FUNCTION_DECL)
1207 DECL_STRUCT_FUNCTION (t) = NULL;
1208 t->decl_with_vis.symtab_node = NULL;
1211 else if (TREE_CODE_CLASS (code) == tcc_type)
1213 TYPE_UID (t) = next_type_uid++;
1214 /* The following is so that the debug code for
1215 the copy is different from the original type.
1216 The two statements usually duplicate each other
1217 (because they clear fields of the same union),
1218 but the optimizer should catch that. */
1219 TYPE_SYMTAB_ADDRESS (t) = 0;
1220 TYPE_SYMTAB_DIE (t) = 0;
1222 /* Do not copy the values cache. */
1223 if (TYPE_CACHED_VALUES_P (t))
1225 TYPE_CACHED_VALUES_P (t) = 0;
1226 TYPE_CACHED_VALUES (t) = NULL_TREE;
1229 else if (code == TARGET_OPTION_NODE)
1231 TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
1232 memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
1233 sizeof (struct cl_target_option));
1235 else if (code == OPTIMIZATION_NODE)
1237 TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>();
1238 memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node),
1239 sizeof (struct cl_optimization));
1242 return t;
1245 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1246 For example, this can copy a list made of TREE_LIST nodes. */
1248 tree
1249 copy_list (tree list)
1251 tree head;
1252 tree prev, next;
1254 if (list == 0)
1255 return 0;
1257 head = prev = copy_node (list);
1258 next = TREE_CHAIN (list);
1259 while (next)
1261 TREE_CHAIN (prev) = copy_node (next);
1262 prev = TREE_CHAIN (prev);
1263 next = TREE_CHAIN (next);
1265 return head;
1269 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1270 INTEGER_CST with value CST and type TYPE. */
1272 static unsigned int
1273 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1275 gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1276 /* We need extra HWIs if CST is an unsigned integer with its
1277 upper bit set. */
1278 if (TYPE_UNSIGNED (type) && wi::neg_p (cst))
1279 return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1280 return cst.get_len ();
1283 /* Return a new INTEGER_CST with value CST and type TYPE. */
1285 static tree
1286 build_new_int_cst (tree type, const wide_int &cst)
1288 unsigned int len = cst.get_len ();
1289 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1290 tree nt = make_int_cst (len, ext_len);
1292 if (len < ext_len)
1294 --ext_len;
1295 TREE_INT_CST_ELT (nt, ext_len)
1296 = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1297 for (unsigned int i = len; i < ext_len; ++i)
1298 TREE_INT_CST_ELT (nt, i) = -1;
1300 else if (TYPE_UNSIGNED (type)
1301 && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1303 len--;
1304 TREE_INT_CST_ELT (nt, len)
1305 = zext_hwi (cst.elt (len),
1306 cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1309 for (unsigned int i = 0; i < len; i++)
1310 TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1311 TREE_TYPE (nt) = type;
1312 return nt;
1315 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1317 tree
1318 build_int_cst (tree type, HOST_WIDE_INT low)
1320 /* Support legacy code. */
1321 if (!type)
1322 type = integer_type_node;
1324 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1327 tree
1328 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
1330 return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1333 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1335 tree
1336 build_int_cst_type (tree type, HOST_WIDE_INT low)
1338 gcc_assert (type);
1339 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1342 /* Constructs tree in type TYPE from with value given by CST. Signedness
1343 of CST is assumed to be the same as the signedness of TYPE. */
1345 tree
1346 double_int_to_tree (tree type, double_int cst)
1348 return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1351 /* We force the wide_int CST to the range of the type TYPE by sign or
1352 zero extending it. OVERFLOWABLE indicates if we are interested in
1353 overflow of the value, when >0 we are only interested in signed
1354 overflow, for <0 we are interested in any overflow. OVERFLOWED
1355 indicates whether overflow has already occurred. CONST_OVERFLOWED
1356 indicates whether constant overflow has already occurred. We force
1357 T's value to be within range of T's type (by setting to 0 or 1 all
1358 the bits outside the type's range). We set TREE_OVERFLOWED if,
1359 OVERFLOWED is nonzero,
1360 or OVERFLOWABLE is >0 and signed overflow occurs
1361 or OVERFLOWABLE is <0 and any overflow occurs
1362 We return a new tree node for the extended wide_int. The node
1363 is shared if no overflow flags are set. */
1366 tree
1367 force_fit_type (tree type, const wide_int_ref &cst,
1368 int overflowable, bool overflowed)
1370 signop sign = TYPE_SIGN (type);
1372 /* If we need to set overflow flags, return a new unshared node. */
1373 if (overflowed || !wi::fits_to_tree_p (cst, type))
1375 if (overflowed
1376 || overflowable < 0
1377 || (overflowable > 0 && sign == SIGNED))
1379 wide_int tmp = wide_int::from (cst, TYPE_PRECISION (type), sign);
1380 tree t = build_new_int_cst (type, tmp);
1381 TREE_OVERFLOW (t) = 1;
1382 return t;
1386 /* Else build a shared node. */
1387 return wide_int_to_tree (type, cst);
1390 /* These are the hash table functions for the hash table of INTEGER_CST
1391 nodes of a sizetype. */
1393 /* Return the hash code X, an INTEGER_CST. */
1395 hashval_t
1396 int_cst_hasher::hash (tree x)
1398 const_tree const t = x;
1399 hashval_t code = TYPE_UID (TREE_TYPE (t));
1400 int i;
1402 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1403 code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code);
1405 return code;
1408 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1409 is the same as that given by *Y, which is the same. */
1411 bool
1412 int_cst_hasher::equal (tree x, tree y)
1414 const_tree const xt = x;
1415 const_tree const yt = y;
1417 if (TREE_TYPE (xt) != TREE_TYPE (yt)
1418 || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1419 || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1420 return false;
1422 for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1423 if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1424 return false;
1426 return true;
1429 /* Create an INT_CST node of TYPE and value CST.
1430 The returned node is always shared. For small integers we use a
1431 per-type vector cache, for larger ones we use a single hash table.
1432 The value is extended from its precision according to the sign of
1433 the type to be a multiple of HOST_BITS_PER_WIDE_INT. This defines
1434 the upper bits and ensures that hashing and value equality based
1435 upon the underlying HOST_WIDE_INTs works without masking. */
1437 tree
1438 wide_int_to_tree (tree type, const wide_int_ref &pcst)
1440 tree t;
1441 int ix = -1;
1442 int limit = 0;
1444 gcc_assert (type);
1445 unsigned int prec = TYPE_PRECISION (type);
1446 signop sgn = TYPE_SIGN (type);
1448 /* Verify that everything is canonical. */
1449 int l = pcst.get_len ();
1450 if (l > 1)
1452 if (pcst.elt (l - 1) == 0)
1453 gcc_checking_assert (pcst.elt (l - 2) < 0);
1454 if (pcst.elt (l - 1) == HOST_WIDE_INT_M1)
1455 gcc_checking_assert (pcst.elt (l - 2) >= 0);
1458 wide_int cst = wide_int::from (pcst, prec, sgn);
1459 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1461 if (ext_len == 1)
1463 /* We just need to store a single HOST_WIDE_INT. */
1464 HOST_WIDE_INT hwi;
1465 if (TYPE_UNSIGNED (type))
1466 hwi = cst.to_uhwi ();
1467 else
1468 hwi = cst.to_shwi ();
1470 switch (TREE_CODE (type))
1472 case NULLPTR_TYPE:
1473 gcc_assert (hwi == 0);
1474 /* Fallthru. */
1476 case POINTER_TYPE:
1477 case REFERENCE_TYPE:
1478 case POINTER_BOUNDS_TYPE:
1479 /* Cache NULL pointer and zero bounds. */
1480 if (hwi == 0)
1482 limit = 1;
1483 ix = 0;
1485 break;
1487 case BOOLEAN_TYPE:
1488 /* Cache false or true. */
1489 limit = 2;
1490 if (IN_RANGE (hwi, 0, 1))
1491 ix = hwi;
1492 break;
1494 case INTEGER_TYPE:
1495 case OFFSET_TYPE:
1496 if (TYPE_SIGN (type) == UNSIGNED)
1498 /* Cache [0, N). */
1499 limit = INTEGER_SHARE_LIMIT;
1500 if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1))
1501 ix = hwi;
1503 else
1505 /* Cache [-1, N). */
1506 limit = INTEGER_SHARE_LIMIT + 1;
1507 if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1))
1508 ix = hwi + 1;
1510 break;
1512 case ENUMERAL_TYPE:
1513 break;
1515 default:
1516 gcc_unreachable ();
1519 if (ix >= 0)
1521 /* Look for it in the type's vector of small shared ints. */
1522 if (!TYPE_CACHED_VALUES_P (type))
1524 TYPE_CACHED_VALUES_P (type) = 1;
1525 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1528 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1529 if (t)
1530 /* Make sure no one is clobbering the shared constant. */
1531 gcc_checking_assert (TREE_TYPE (t) == type
1532 && TREE_INT_CST_NUNITS (t) == 1
1533 && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1534 && TREE_INT_CST_EXT_NUNITS (t) == 1
1535 && TREE_INT_CST_ELT (t, 0) == hwi);
1536 else
1538 /* Create a new shared int. */
1539 t = build_new_int_cst (type, cst);
1540 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1543 else
1545 /* Use the cache of larger shared ints, using int_cst_node as
1546 a temporary. */
1548 TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1549 TREE_TYPE (int_cst_node) = type;
1551 tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1552 t = *slot;
1553 if (!t)
1555 /* Insert this one into the hash table. */
1556 t = int_cst_node;
1557 *slot = t;
1558 /* Make a new node for next time round. */
1559 int_cst_node = make_int_cst (1, 1);
1563 else
1565 /* The value either hashes properly or we drop it on the floor
1566 for the gc to take care of. There will not be enough of them
1567 to worry about. */
1569 tree nt = build_new_int_cst (type, cst);
1570 tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1571 t = *slot;
1572 if (!t)
1574 /* Insert this one into the hash table. */
1575 t = nt;
1576 *slot = t;
1578 else
1579 ggc_free (nt);
1582 return t;
1585 void
1586 cache_integer_cst (tree t)
1588 tree type = TREE_TYPE (t);
1589 int ix = -1;
1590 int limit = 0;
1591 int prec = TYPE_PRECISION (type);
1593 gcc_assert (!TREE_OVERFLOW (t));
1595 switch (TREE_CODE (type))
1597 case NULLPTR_TYPE:
1598 gcc_assert (integer_zerop (t));
1599 /* Fallthru. */
1601 case POINTER_TYPE:
1602 case REFERENCE_TYPE:
1603 /* Cache NULL pointer. */
1604 if (integer_zerop (t))
1606 limit = 1;
1607 ix = 0;
1609 break;
1611 case BOOLEAN_TYPE:
1612 /* Cache false or true. */
1613 limit = 2;
1614 if (wi::ltu_p (wi::to_wide (t), 2))
1615 ix = TREE_INT_CST_ELT (t, 0);
1616 break;
1618 case INTEGER_TYPE:
1619 case OFFSET_TYPE:
1620 if (TYPE_UNSIGNED (type))
1622 /* Cache 0..N */
1623 limit = INTEGER_SHARE_LIMIT;
1625 /* This is a little hokie, but if the prec is smaller than
1626 what is necessary to hold INTEGER_SHARE_LIMIT, then the
1627 obvious test will not get the correct answer. */
1628 if (prec < HOST_BITS_PER_WIDE_INT)
1630 if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT)
1631 ix = tree_to_uhwi (t);
1633 else if (wi::ltu_p (wi::to_wide (t), INTEGER_SHARE_LIMIT))
1634 ix = tree_to_uhwi (t);
1636 else
1638 /* Cache -1..N */
1639 limit = INTEGER_SHARE_LIMIT + 1;
1641 if (integer_minus_onep (t))
1642 ix = 0;
1643 else if (!wi::neg_p (wi::to_wide (t)))
1645 if (prec < HOST_BITS_PER_WIDE_INT)
1647 if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT)
1648 ix = tree_to_shwi (t) + 1;
1650 else if (wi::ltu_p (wi::to_wide (t), INTEGER_SHARE_LIMIT))
1651 ix = tree_to_shwi (t) + 1;
1654 break;
1656 case ENUMERAL_TYPE:
1657 break;
1659 default:
1660 gcc_unreachable ();
1663 if (ix >= 0)
1665 /* Look for it in the type's vector of small shared ints. */
1666 if (!TYPE_CACHED_VALUES_P (type))
1668 TYPE_CACHED_VALUES_P (type) = 1;
1669 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1672 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1673 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1675 else
1677 /* Use the cache of larger shared ints. */
1678 tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1679 /* If there is already an entry for the number verify it's the
1680 same. */
1681 if (*slot)
1682 gcc_assert (wi::to_wide (tree (*slot)) == wi::to_wide (t));
1683 else
1684 /* Otherwise insert this one into the hash table. */
1685 *slot = t;
1690 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1691 and the rest are zeros. */
1693 tree
1694 build_low_bits_mask (tree type, unsigned bits)
1696 gcc_assert (bits <= TYPE_PRECISION (type));
1698 return wide_int_to_tree (type, wi::mask (bits, false,
1699 TYPE_PRECISION (type)));
1702 /* Checks that X is integer constant that can be expressed in (unsigned)
1703 HOST_WIDE_INT without loss of precision. */
1705 bool
1706 cst_and_fits_in_hwi (const_tree x)
1708 return (TREE_CODE (x) == INTEGER_CST
1709 && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
1712 /* Build a newly constructed VECTOR_CST with the given values of
1713 (VECTOR_CST_)LOG2_NPATTERNS and (VECTOR_CST_)NELTS_PER_PATTERN. */
1715 tree
1716 make_vector (unsigned log2_npatterns,
1717 unsigned int nelts_per_pattern MEM_STAT_DECL)
1719 gcc_assert (IN_RANGE (nelts_per_pattern, 1, 3));
1720 tree t;
1721 unsigned npatterns = 1 << log2_npatterns;
1722 unsigned encoded_nelts = npatterns * nelts_per_pattern;
1723 unsigned length = (sizeof (struct tree_vector)
1724 + (encoded_nelts - 1) * sizeof (tree));
1726 record_node_allocation_statistics (VECTOR_CST, length);
1728 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1730 TREE_SET_CODE (t, VECTOR_CST);
1731 TREE_CONSTANT (t) = 1;
1732 VECTOR_CST_LOG2_NPATTERNS (t) = log2_npatterns;
1733 VECTOR_CST_NELTS_PER_PATTERN (t) = nelts_per_pattern;
1735 return t;
1738 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1739 are given by VALS. */
1741 tree
1742 build_vector (tree type, vec<tree> vals MEM_STAT_DECL)
1744 gcc_assert (vals.length () == TYPE_VECTOR_SUBPARTS (type));
1745 tree_vector_builder builder (type, vals.length (), 1);
1746 builder.splice (vals);
1747 return builder.build ();
1750 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1751 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1753 tree
1754 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1756 unsigned int nelts = TYPE_VECTOR_SUBPARTS (type);
1757 unsigned HOST_WIDE_INT idx;
1758 tree value;
1760 auto_vec<tree, 32> vec (nelts);
1761 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1763 if (TREE_CODE (value) == VECTOR_CST)
1764 for (unsigned i = 0; i < VECTOR_CST_NELTS (value); ++i)
1765 vec.quick_push (VECTOR_CST_ELT (value, i));
1766 else
1767 vec.quick_push (value);
1769 while (vec.length () < nelts)
1770 vec.quick_push (build_zero_cst (TREE_TYPE (type)));
1772 return build_vector (type, vec);
1775 /* Build a vector of type VECTYPE where all the elements are SCs. */
1776 tree
1777 build_vector_from_val (tree vectype, tree sc)
1779 int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1781 if (sc == error_mark_node)
1782 return sc;
1784 /* Verify that the vector type is suitable for SC. Note that there
1785 is some inconsistency in the type-system with respect to restrict
1786 qualifications of pointers. Vector types always have a main-variant
1787 element type and the qualification is applied to the vector-type.
1788 So TREE_TYPE (vector-type) does not return a properly qualified
1789 vector element-type. */
1790 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1791 TREE_TYPE (vectype)));
1793 if (CONSTANT_CLASS_P (sc))
1795 auto_vec<tree, 32> v (nunits);
1796 for (i = 0; i < nunits; ++i)
1797 v.quick_push (sc);
1798 return build_vector (vectype, v);
1800 else
1802 vec<constructor_elt, va_gc> *v;
1803 vec_alloc (v, nunits);
1804 for (i = 0; i < nunits; ++i)
1805 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1806 return build_constructor (vectype, v);
1810 /* Something has messed with the elements of CONSTRUCTOR C after it was built;
1811 calculate TREE_CONSTANT and TREE_SIDE_EFFECTS. */
1813 void
1814 recompute_constructor_flags (tree c)
1816 unsigned int i;
1817 tree val;
1818 bool constant_p = true;
1819 bool side_effects_p = false;
1820 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1822 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1824 /* Mostly ctors will have elts that don't have side-effects, so
1825 the usual case is to scan all the elements. Hence a single
1826 loop for both const and side effects, rather than one loop
1827 each (with early outs). */
1828 if (!TREE_CONSTANT (val))
1829 constant_p = false;
1830 if (TREE_SIDE_EFFECTS (val))
1831 side_effects_p = true;
1834 TREE_SIDE_EFFECTS (c) = side_effects_p;
1835 TREE_CONSTANT (c) = constant_p;
1838 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for
1839 CONSTRUCTOR C. */
1841 void
1842 verify_constructor_flags (tree c)
1844 unsigned int i;
1845 tree val;
1846 bool constant_p = TREE_CONSTANT (c);
1847 bool side_effects_p = TREE_SIDE_EFFECTS (c);
1848 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1850 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1852 if (constant_p && !TREE_CONSTANT (val))
1853 internal_error ("non-constant element in constant CONSTRUCTOR");
1854 if (!side_effects_p && TREE_SIDE_EFFECTS (val))
1855 internal_error ("side-effects element in no-side-effects CONSTRUCTOR");
1859 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1860 are in the vec pointed to by VALS. */
1861 tree
1862 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1864 tree c = make_node (CONSTRUCTOR);
1866 TREE_TYPE (c) = type;
1867 CONSTRUCTOR_ELTS (c) = vals;
1869 recompute_constructor_flags (c);
1871 return c;
1874 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1875 INDEX and VALUE. */
1876 tree
1877 build_constructor_single (tree type, tree index, tree value)
1879 vec<constructor_elt, va_gc> *v;
1880 constructor_elt elt = {index, value};
1882 vec_alloc (v, 1);
1883 v->quick_push (elt);
1885 return build_constructor (type, v);
1889 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1890 are in a list pointed to by VALS. */
1891 tree
1892 build_constructor_from_list (tree type, tree vals)
1894 tree t;
1895 vec<constructor_elt, va_gc> *v = NULL;
1897 if (vals)
1899 vec_alloc (v, list_length (vals));
1900 for (t = vals; t; t = TREE_CHAIN (t))
1901 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1904 return build_constructor (type, v);
1907 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
1908 of elements, provided as index/value pairs. */
1910 tree
1911 build_constructor_va (tree type, int nelts, ...)
1913 vec<constructor_elt, va_gc> *v = NULL;
1914 va_list p;
1916 va_start (p, nelts);
1917 vec_alloc (v, nelts);
1918 while (nelts--)
1920 tree index = va_arg (p, tree);
1921 tree value = va_arg (p, tree);
1922 CONSTRUCTOR_APPEND_ELT (v, index, value);
1924 va_end (p);
1925 return build_constructor (type, v);
1928 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1930 tree
1931 build_fixed (tree type, FIXED_VALUE_TYPE f)
1933 tree v;
1934 FIXED_VALUE_TYPE *fp;
1936 v = make_node (FIXED_CST);
1937 fp = ggc_alloc<fixed_value> ();
1938 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1940 TREE_TYPE (v) = type;
1941 TREE_FIXED_CST_PTR (v) = fp;
1942 return v;
1945 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1947 tree
1948 build_real (tree type, REAL_VALUE_TYPE d)
1950 tree v;
1951 REAL_VALUE_TYPE *dp;
1952 int overflow = 0;
1954 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1955 Consider doing it via real_convert now. */
1957 v = make_node (REAL_CST);
1958 dp = ggc_alloc<real_value> ();
1959 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1961 TREE_TYPE (v) = type;
1962 TREE_REAL_CST_PTR (v) = dp;
1963 TREE_OVERFLOW (v) = overflow;
1964 return v;
1967 /* Like build_real, but first truncate D to the type. */
1969 tree
1970 build_real_truncate (tree type, REAL_VALUE_TYPE d)
1972 return build_real (type, real_value_truncate (TYPE_MODE (type), d));
1975 /* Return a new REAL_CST node whose type is TYPE
1976 and whose value is the integer value of the INTEGER_CST node I. */
1978 REAL_VALUE_TYPE
1979 real_value_from_int_cst (const_tree type, const_tree i)
1981 REAL_VALUE_TYPE d;
1983 /* Clear all bits of the real value type so that we can later do
1984 bitwise comparisons to see if two values are the same. */
1985 memset (&d, 0, sizeof d);
1987 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, wi::to_wide (i),
1988 TYPE_SIGN (TREE_TYPE (i)));
1989 return d;
1992 /* Given a tree representing an integer constant I, return a tree
1993 representing the same value as a floating-point constant of type TYPE. */
1995 tree
1996 build_real_from_int_cst (tree type, const_tree i)
1998 tree v;
1999 int overflow = TREE_OVERFLOW (i);
2001 v = build_real (type, real_value_from_int_cst (type, i));
2003 TREE_OVERFLOW (v) |= overflow;
2004 return v;
2007 /* Return a newly constructed STRING_CST node whose value is
2008 the LEN characters at STR.
2009 Note that for a C string literal, LEN should include the trailing NUL.
2010 The TREE_TYPE is not initialized. */
2012 tree
2013 build_string (int len, const char *str)
2015 tree s;
2016 size_t length;
2018 /* Do not waste bytes provided by padding of struct tree_string. */
2019 length = len + offsetof (struct tree_string, str) + 1;
2021 record_node_allocation_statistics (STRING_CST, length);
2023 s = (tree) ggc_internal_alloc (length);
2025 memset (s, 0, sizeof (struct tree_typed));
2026 TREE_SET_CODE (s, STRING_CST);
2027 TREE_CONSTANT (s) = 1;
2028 TREE_STRING_LENGTH (s) = len;
2029 memcpy (s->string.str, str, len);
2030 s->string.str[len] = '\0';
2032 return s;
2035 /* Return a newly constructed COMPLEX_CST node whose value is
2036 specified by the real and imaginary parts REAL and IMAG.
2037 Both REAL and IMAG should be constant nodes. TYPE, if specified,
2038 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
2040 tree
2041 build_complex (tree type, tree real, tree imag)
2043 tree t = make_node (COMPLEX_CST);
2045 TREE_REALPART (t) = real;
2046 TREE_IMAGPART (t) = imag;
2047 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
2048 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
2049 return t;
2052 /* Build a complex (inf +- 0i), such as for the result of cproj.
2053 TYPE is the complex tree type of the result. If NEG is true, the
2054 imaginary zero is negative. */
2056 tree
2057 build_complex_inf (tree type, bool neg)
2059 REAL_VALUE_TYPE rinf, rzero = dconst0;
2061 real_inf (&rinf);
2062 rzero.sign = neg;
2063 return build_complex (type, build_real (TREE_TYPE (type), rinf),
2064 build_real (TREE_TYPE (type), rzero));
2067 /* Return the constant 1 in type TYPE. If TYPE has several elements, each
2068 element is set to 1. In particular, this is 1 + i for complex types. */
2070 tree
2071 build_each_one_cst (tree type)
2073 if (TREE_CODE (type) == COMPLEX_TYPE)
2075 tree scalar = build_one_cst (TREE_TYPE (type));
2076 return build_complex (type, scalar, scalar);
2078 else
2079 return build_one_cst (type);
2082 /* Return a constant of arithmetic type TYPE which is the
2083 multiplicative identity of the set TYPE. */
2085 tree
2086 build_one_cst (tree type)
2088 switch (TREE_CODE (type))
2090 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2091 case POINTER_TYPE: case REFERENCE_TYPE:
2092 case OFFSET_TYPE:
2093 return build_int_cst (type, 1);
2095 case REAL_TYPE:
2096 return build_real (type, dconst1);
2098 case FIXED_POINT_TYPE:
2099 /* We can only generate 1 for accum types. */
2100 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2101 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
2103 case VECTOR_TYPE:
2105 tree scalar = build_one_cst (TREE_TYPE (type));
2107 return build_vector_from_val (type, scalar);
2110 case COMPLEX_TYPE:
2111 return build_complex (type,
2112 build_one_cst (TREE_TYPE (type)),
2113 build_zero_cst (TREE_TYPE (type)));
2115 default:
2116 gcc_unreachable ();
2120 /* Return an integer of type TYPE containing all 1's in as much precision as
2121 it contains, or a complex or vector whose subparts are such integers. */
2123 tree
2124 build_all_ones_cst (tree type)
2126 if (TREE_CODE (type) == COMPLEX_TYPE)
2128 tree scalar = build_all_ones_cst (TREE_TYPE (type));
2129 return build_complex (type, scalar, scalar);
2131 else
2132 return build_minus_one_cst (type);
2135 /* Return a constant of arithmetic type TYPE which is the
2136 opposite of the multiplicative identity of the set TYPE. */
2138 tree
2139 build_minus_one_cst (tree type)
2141 switch (TREE_CODE (type))
2143 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2144 case POINTER_TYPE: case REFERENCE_TYPE:
2145 case OFFSET_TYPE:
2146 return build_int_cst (type, -1);
2148 case REAL_TYPE:
2149 return build_real (type, dconstm1);
2151 case FIXED_POINT_TYPE:
2152 /* We can only generate 1 for accum types. */
2153 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2154 return build_fixed (type,
2155 fixed_from_double_int (double_int_minus_one,
2156 SCALAR_TYPE_MODE (type)));
2158 case VECTOR_TYPE:
2160 tree scalar = build_minus_one_cst (TREE_TYPE (type));
2162 return build_vector_from_val (type, scalar);
2165 case COMPLEX_TYPE:
2166 return build_complex (type,
2167 build_minus_one_cst (TREE_TYPE (type)),
2168 build_zero_cst (TREE_TYPE (type)));
2170 default:
2171 gcc_unreachable ();
2175 /* Build 0 constant of type TYPE. This is used by constructor folding
2176 and thus the constant should be represented in memory by
2177 zero(es). */
2179 tree
2180 build_zero_cst (tree type)
2182 switch (TREE_CODE (type))
2184 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2185 case POINTER_TYPE: case REFERENCE_TYPE:
2186 case OFFSET_TYPE: case NULLPTR_TYPE:
2187 return build_int_cst (type, 0);
2189 case REAL_TYPE:
2190 return build_real (type, dconst0);
2192 case FIXED_POINT_TYPE:
2193 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2195 case VECTOR_TYPE:
2197 tree scalar = build_zero_cst (TREE_TYPE (type));
2199 return build_vector_from_val (type, scalar);
2202 case COMPLEX_TYPE:
2204 tree zero = build_zero_cst (TREE_TYPE (type));
2206 return build_complex (type, zero, zero);
2209 default:
2210 if (!AGGREGATE_TYPE_P (type))
2211 return fold_convert (type, integer_zero_node);
2212 return build_constructor (type, NULL);
2217 /* Build a BINFO with LEN language slots. */
2219 tree
2220 make_tree_binfo (unsigned base_binfos MEM_STAT_DECL)
2222 tree t;
2223 size_t length = (offsetof (struct tree_binfo, base_binfos)
2224 + vec<tree, va_gc>::embedded_size (base_binfos));
2226 record_node_allocation_statistics (TREE_BINFO, length);
2228 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2230 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2232 TREE_SET_CODE (t, TREE_BINFO);
2234 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2236 return t;
2239 /* Create a CASE_LABEL_EXPR tree node and return it. */
2241 tree
2242 build_case_label (tree low_value, tree high_value, tree label_decl)
2244 tree t = make_node (CASE_LABEL_EXPR);
2246 TREE_TYPE (t) = void_type_node;
2247 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2249 CASE_LOW (t) = low_value;
2250 CASE_HIGH (t) = high_value;
2251 CASE_LABEL (t) = label_decl;
2252 CASE_CHAIN (t) = NULL_TREE;
2254 return t;
2257 /* Build a newly constructed INTEGER_CST node. LEN and EXT_LEN are the
2258 values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2259 The latter determines the length of the HOST_WIDE_INT vector. */
2261 tree
2262 make_int_cst (int len, int ext_len MEM_STAT_DECL)
2264 tree t;
2265 int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2266 + sizeof (struct tree_int_cst));
2268 gcc_assert (len);
2269 record_node_allocation_statistics (INTEGER_CST, length);
2271 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2273 TREE_SET_CODE (t, INTEGER_CST);
2274 TREE_INT_CST_NUNITS (t) = len;
2275 TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2276 /* to_offset can only be applied to trees that are offset_int-sized
2277 or smaller. EXT_LEN is correct if it fits, otherwise the constant
2278 must be exactly the precision of offset_int and so LEN is correct. */
2279 if (ext_len <= OFFSET_INT_ELTS)
2280 TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2281 else
2282 TREE_INT_CST_OFFSET_NUNITS (t) = len;
2284 TREE_CONSTANT (t) = 1;
2286 return t;
2289 /* Build a newly constructed TREE_VEC node of length LEN. */
2291 tree
2292 make_tree_vec (int len MEM_STAT_DECL)
2294 tree t;
2295 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2297 record_node_allocation_statistics (TREE_VEC, length);
2299 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2301 TREE_SET_CODE (t, TREE_VEC);
2302 TREE_VEC_LENGTH (t) = len;
2304 return t;
2307 /* Grow a TREE_VEC node to new length LEN. */
2309 tree
2310 grow_tree_vec (tree v, int len MEM_STAT_DECL)
2312 gcc_assert (TREE_CODE (v) == TREE_VEC);
2314 int oldlen = TREE_VEC_LENGTH (v);
2315 gcc_assert (len > oldlen);
2317 size_t oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2318 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2320 record_node_allocation_statistics (TREE_VEC, length - oldlength);
2322 v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2324 TREE_VEC_LENGTH (v) = len;
2326 return v;
2329 /* Return 1 if EXPR is the constant zero, whether it is integral, float or
2330 fixed, and scalar, complex or vector. */
2333 zerop (const_tree expr)
2335 return (integer_zerop (expr)
2336 || real_zerop (expr)
2337 || fixed_zerop (expr));
2340 /* Return 1 if EXPR is the integer constant zero or a complex constant
2341 of zero. */
2344 integer_zerop (const_tree expr)
2346 switch (TREE_CODE (expr))
2348 case INTEGER_CST:
2349 return wi::to_wide (expr) == 0;
2350 case COMPLEX_CST:
2351 return (integer_zerop (TREE_REALPART (expr))
2352 && integer_zerop (TREE_IMAGPART (expr)));
2353 case VECTOR_CST:
2355 unsigned i;
2356 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2357 if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
2358 return false;
2359 return true;
2361 default:
2362 return false;
2366 /* Return 1 if EXPR is the integer constant one or the corresponding
2367 complex constant. */
2370 integer_onep (const_tree expr)
2372 switch (TREE_CODE (expr))
2374 case INTEGER_CST:
2375 return wi::eq_p (wi::to_widest (expr), 1);
2376 case COMPLEX_CST:
2377 return (integer_onep (TREE_REALPART (expr))
2378 && integer_zerop (TREE_IMAGPART (expr)));
2379 case VECTOR_CST:
2381 unsigned i;
2382 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2383 if (!integer_onep (VECTOR_CST_ELT (expr, i)))
2384 return false;
2385 return true;
2387 default:
2388 return false;
2392 /* Return 1 if EXPR is the integer constant one. For complex and vector,
2393 return 1 if every piece is the integer constant one. */
2396 integer_each_onep (const_tree expr)
2398 if (TREE_CODE (expr) == COMPLEX_CST)
2399 return (integer_onep (TREE_REALPART (expr))
2400 && integer_onep (TREE_IMAGPART (expr)));
2401 else
2402 return integer_onep (expr);
2405 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2406 it contains, or a complex or vector whose subparts are such integers. */
2409 integer_all_onesp (const_tree expr)
2411 if (TREE_CODE (expr) == COMPLEX_CST
2412 && integer_all_onesp (TREE_REALPART (expr))
2413 && integer_all_onesp (TREE_IMAGPART (expr)))
2414 return 1;
2416 else if (TREE_CODE (expr) == VECTOR_CST)
2418 unsigned i;
2419 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2420 if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2421 return 0;
2422 return 1;
2425 else if (TREE_CODE (expr) != INTEGER_CST)
2426 return 0;
2428 return (wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED)
2429 == wi::to_wide (expr));
2432 /* Return 1 if EXPR is the integer constant minus one. */
2435 integer_minus_onep (const_tree expr)
2437 if (TREE_CODE (expr) == COMPLEX_CST)
2438 return (integer_all_onesp (TREE_REALPART (expr))
2439 && integer_zerop (TREE_IMAGPART (expr)));
2440 else
2441 return integer_all_onesp (expr);
2444 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2445 one bit on). */
2448 integer_pow2p (const_tree expr)
2450 if (TREE_CODE (expr) == COMPLEX_CST
2451 && integer_pow2p (TREE_REALPART (expr))
2452 && integer_zerop (TREE_IMAGPART (expr)))
2453 return 1;
2455 if (TREE_CODE (expr) != INTEGER_CST)
2456 return 0;
2458 return wi::popcount (wi::to_wide (expr)) == 1;
2461 /* Return 1 if EXPR is an integer constant other than zero or a
2462 complex constant other than zero. */
2465 integer_nonzerop (const_tree expr)
2467 return ((TREE_CODE (expr) == INTEGER_CST
2468 && wi::to_wide (expr) != 0)
2469 || (TREE_CODE (expr) == COMPLEX_CST
2470 && (integer_nonzerop (TREE_REALPART (expr))
2471 || integer_nonzerop (TREE_IMAGPART (expr)))));
2474 /* Return 1 if EXPR is the integer constant one. For vector,
2475 return 1 if every piece is the integer constant minus one
2476 (representing the value TRUE). */
2479 integer_truep (const_tree expr)
2481 if (TREE_CODE (expr) == VECTOR_CST)
2482 return integer_all_onesp (expr);
2483 return integer_onep (expr);
2486 /* Return 1 if EXPR is the fixed-point constant zero. */
2489 fixed_zerop (const_tree expr)
2491 return (TREE_CODE (expr) == FIXED_CST
2492 && TREE_FIXED_CST (expr).data.is_zero ());
2495 /* Return the power of two represented by a tree node known to be a
2496 power of two. */
2499 tree_log2 (const_tree expr)
2501 if (TREE_CODE (expr) == COMPLEX_CST)
2502 return tree_log2 (TREE_REALPART (expr));
2504 return wi::exact_log2 (wi::to_wide (expr));
2507 /* Similar, but return the largest integer Y such that 2 ** Y is less
2508 than or equal to EXPR. */
2511 tree_floor_log2 (const_tree expr)
2513 if (TREE_CODE (expr) == COMPLEX_CST)
2514 return tree_log2 (TREE_REALPART (expr));
2516 return wi::floor_log2 (wi::to_wide (expr));
2519 /* Return number of known trailing zero bits in EXPR, or, if the value of
2520 EXPR is known to be zero, the precision of it's type. */
2522 unsigned int
2523 tree_ctz (const_tree expr)
2525 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2526 && !POINTER_TYPE_P (TREE_TYPE (expr)))
2527 return 0;
2529 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2530 switch (TREE_CODE (expr))
2532 case INTEGER_CST:
2533 ret1 = wi::ctz (wi::to_wide (expr));
2534 return MIN (ret1, prec);
2535 case SSA_NAME:
2536 ret1 = wi::ctz (get_nonzero_bits (expr));
2537 return MIN (ret1, prec);
2538 case PLUS_EXPR:
2539 case MINUS_EXPR:
2540 case BIT_IOR_EXPR:
2541 case BIT_XOR_EXPR:
2542 case MIN_EXPR:
2543 case MAX_EXPR:
2544 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2545 if (ret1 == 0)
2546 return ret1;
2547 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2548 return MIN (ret1, ret2);
2549 case POINTER_PLUS_EXPR:
2550 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2551 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2552 /* Second operand is sizetype, which could be in theory
2553 wider than pointer's precision. Make sure we never
2554 return more than prec. */
2555 ret2 = MIN (ret2, prec);
2556 return MIN (ret1, ret2);
2557 case BIT_AND_EXPR:
2558 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2559 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2560 return MAX (ret1, ret2);
2561 case MULT_EXPR:
2562 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2563 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2564 return MIN (ret1 + ret2, prec);
2565 case LSHIFT_EXPR:
2566 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2567 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2568 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2570 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2571 return MIN (ret1 + ret2, prec);
2573 return ret1;
2574 case RSHIFT_EXPR:
2575 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2576 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2578 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2579 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2580 if (ret1 > ret2)
2581 return ret1 - ret2;
2583 return 0;
2584 case TRUNC_DIV_EXPR:
2585 case CEIL_DIV_EXPR:
2586 case FLOOR_DIV_EXPR:
2587 case ROUND_DIV_EXPR:
2588 case EXACT_DIV_EXPR:
2589 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2590 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2592 int l = tree_log2 (TREE_OPERAND (expr, 1));
2593 if (l >= 0)
2595 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2596 ret2 = l;
2597 if (ret1 > ret2)
2598 return ret1 - ret2;
2601 return 0;
2602 CASE_CONVERT:
2603 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2604 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2605 ret1 = prec;
2606 return MIN (ret1, prec);
2607 case SAVE_EXPR:
2608 return tree_ctz (TREE_OPERAND (expr, 0));
2609 case COND_EXPR:
2610 ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2611 if (ret1 == 0)
2612 return 0;
2613 ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2614 return MIN (ret1, ret2);
2615 case COMPOUND_EXPR:
2616 return tree_ctz (TREE_OPERAND (expr, 1));
2617 case ADDR_EXPR:
2618 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2619 if (ret1 > BITS_PER_UNIT)
2621 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2622 return MIN (ret1, prec);
2624 return 0;
2625 default:
2626 return 0;
2630 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2631 decimal float constants, so don't return 1 for them. */
2634 real_zerop (const_tree expr)
2636 switch (TREE_CODE (expr))
2638 case REAL_CST:
2639 return real_equal (&TREE_REAL_CST (expr), &dconst0)
2640 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2641 case COMPLEX_CST:
2642 return real_zerop (TREE_REALPART (expr))
2643 && real_zerop (TREE_IMAGPART (expr));
2644 case VECTOR_CST:
2646 unsigned i;
2647 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2648 if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2649 return false;
2650 return true;
2652 default:
2653 return false;
2657 /* Return 1 if EXPR is the real constant one in real or complex form.
2658 Trailing zeroes matter for decimal float constants, so don't return
2659 1 for them. */
2662 real_onep (const_tree expr)
2664 switch (TREE_CODE (expr))
2666 case REAL_CST:
2667 return real_equal (&TREE_REAL_CST (expr), &dconst1)
2668 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2669 case COMPLEX_CST:
2670 return real_onep (TREE_REALPART (expr))
2671 && real_zerop (TREE_IMAGPART (expr));
2672 case VECTOR_CST:
2674 unsigned i;
2675 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2676 if (!real_onep (VECTOR_CST_ELT (expr, i)))
2677 return false;
2678 return true;
2680 default:
2681 return false;
2685 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2686 matter for decimal float constants, so don't return 1 for them. */
2689 real_minus_onep (const_tree expr)
2691 switch (TREE_CODE (expr))
2693 case REAL_CST:
2694 return real_equal (&TREE_REAL_CST (expr), &dconstm1)
2695 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2696 case COMPLEX_CST:
2697 return real_minus_onep (TREE_REALPART (expr))
2698 && real_zerop (TREE_IMAGPART (expr));
2699 case VECTOR_CST:
2701 unsigned i;
2702 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2703 if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2704 return false;
2705 return true;
2707 default:
2708 return false;
2712 /* Nonzero if EXP is a constant or a cast of a constant. */
2715 really_constant_p (const_tree exp)
2717 /* This is not quite the same as STRIP_NOPS. It does more. */
2718 while (CONVERT_EXPR_P (exp)
2719 || TREE_CODE (exp) == NON_LVALUE_EXPR)
2720 exp = TREE_OPERAND (exp, 0);
2721 return TREE_CONSTANT (exp);
2724 /* Return first list element whose TREE_VALUE is ELEM.
2725 Return 0 if ELEM is not in LIST. */
2727 tree
2728 value_member (tree elem, tree list)
2730 while (list)
2732 if (elem == TREE_VALUE (list))
2733 return list;
2734 list = TREE_CHAIN (list);
2736 return NULL_TREE;
2739 /* Return first list element whose TREE_PURPOSE is ELEM.
2740 Return 0 if ELEM is not in LIST. */
2742 tree
2743 purpose_member (const_tree elem, tree list)
2745 while (list)
2747 if (elem == TREE_PURPOSE (list))
2748 return list;
2749 list = TREE_CHAIN (list);
2751 return NULL_TREE;
2754 /* Return true if ELEM is in V. */
2756 bool
2757 vec_member (const_tree elem, vec<tree, va_gc> *v)
2759 unsigned ix;
2760 tree t;
2761 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2762 if (elem == t)
2763 return true;
2764 return false;
2767 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2768 NULL_TREE. */
2770 tree
2771 chain_index (int idx, tree chain)
2773 for (; chain && idx > 0; --idx)
2774 chain = TREE_CHAIN (chain);
2775 return chain;
2778 /* Return nonzero if ELEM is part of the chain CHAIN. */
2781 chain_member (const_tree elem, const_tree chain)
2783 while (chain)
2785 if (elem == chain)
2786 return 1;
2787 chain = DECL_CHAIN (chain);
2790 return 0;
2793 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2794 We expect a null pointer to mark the end of the chain.
2795 This is the Lisp primitive `length'. */
2798 list_length (const_tree t)
2800 const_tree p = t;
2801 #ifdef ENABLE_TREE_CHECKING
2802 const_tree q = t;
2803 #endif
2804 int len = 0;
2806 while (p)
2808 p = TREE_CHAIN (p);
2809 #ifdef ENABLE_TREE_CHECKING
2810 if (len % 2)
2811 q = TREE_CHAIN (q);
2812 gcc_assert (p != q);
2813 #endif
2814 len++;
2817 return len;
2820 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2821 UNION_TYPE TYPE, or NULL_TREE if none. */
2823 tree
2824 first_field (const_tree type)
2826 tree t = TYPE_FIELDS (type);
2827 while (t && TREE_CODE (t) != FIELD_DECL)
2828 t = TREE_CHAIN (t);
2829 return t;
2832 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2833 by modifying the last node in chain 1 to point to chain 2.
2834 This is the Lisp primitive `nconc'. */
2836 tree
2837 chainon (tree op1, tree op2)
2839 tree t1;
2841 if (!op1)
2842 return op2;
2843 if (!op2)
2844 return op1;
2846 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2847 continue;
2848 TREE_CHAIN (t1) = op2;
2850 #ifdef ENABLE_TREE_CHECKING
2852 tree t2;
2853 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2854 gcc_assert (t2 != t1);
2856 #endif
2858 return op1;
2861 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2863 tree
2864 tree_last (tree chain)
2866 tree next;
2867 if (chain)
2868 while ((next = TREE_CHAIN (chain)))
2869 chain = next;
2870 return chain;
2873 /* Reverse the order of elements in the chain T,
2874 and return the new head of the chain (old last element). */
2876 tree
2877 nreverse (tree t)
2879 tree prev = 0, decl, next;
2880 for (decl = t; decl; decl = next)
2882 /* We shouldn't be using this function to reverse BLOCK chains; we
2883 have blocks_nreverse for that. */
2884 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2885 next = TREE_CHAIN (decl);
2886 TREE_CHAIN (decl) = prev;
2887 prev = decl;
2889 return prev;
2892 /* Return a newly created TREE_LIST node whose
2893 purpose and value fields are PARM and VALUE. */
2895 tree
2896 build_tree_list (tree parm, tree value MEM_STAT_DECL)
2898 tree t = make_node (TREE_LIST PASS_MEM_STAT);
2899 TREE_PURPOSE (t) = parm;
2900 TREE_VALUE (t) = value;
2901 return t;
2904 /* Build a chain of TREE_LIST nodes from a vector. */
2906 tree
2907 build_tree_list_vec (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2909 tree ret = NULL_TREE;
2910 tree *pp = &ret;
2911 unsigned int i;
2912 tree t;
2913 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2915 *pp = build_tree_list (NULL, t PASS_MEM_STAT);
2916 pp = &TREE_CHAIN (*pp);
2918 return ret;
2921 /* Return a newly created TREE_LIST node whose
2922 purpose and value fields are PURPOSE and VALUE
2923 and whose TREE_CHAIN is CHAIN. */
2925 tree
2926 tree_cons (tree purpose, tree value, tree chain MEM_STAT_DECL)
2928 tree node;
2930 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2931 memset (node, 0, sizeof (struct tree_common));
2933 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2935 TREE_SET_CODE (node, TREE_LIST);
2936 TREE_CHAIN (node) = chain;
2937 TREE_PURPOSE (node) = purpose;
2938 TREE_VALUE (node) = value;
2939 return node;
2942 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2943 trees. */
2945 vec<tree, va_gc> *
2946 ctor_to_vec (tree ctor)
2948 vec<tree, va_gc> *vec;
2949 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2950 unsigned int ix;
2951 tree val;
2953 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2954 vec->quick_push (val);
2956 return vec;
2959 /* Return the size nominally occupied by an object of type TYPE
2960 when it resides in memory. The value is measured in units of bytes,
2961 and its data type is that normally used for type sizes
2962 (which is the first type created by make_signed_type or
2963 make_unsigned_type). */
2965 tree
2966 size_in_bytes_loc (location_t loc, const_tree type)
2968 tree t;
2970 if (type == error_mark_node)
2971 return integer_zero_node;
2973 type = TYPE_MAIN_VARIANT (type);
2974 t = TYPE_SIZE_UNIT (type);
2976 if (t == 0)
2978 lang_hooks.types.incomplete_type_error (loc, NULL_TREE, type);
2979 return size_zero_node;
2982 return t;
2985 /* Return the size of TYPE (in bytes) as a wide integer
2986 or return -1 if the size can vary or is larger than an integer. */
2988 HOST_WIDE_INT
2989 int_size_in_bytes (const_tree type)
2991 tree t;
2993 if (type == error_mark_node)
2994 return 0;
2996 type = TYPE_MAIN_VARIANT (type);
2997 t = TYPE_SIZE_UNIT (type);
2999 if (t && tree_fits_uhwi_p (t))
3000 return TREE_INT_CST_LOW (t);
3001 else
3002 return -1;
3005 /* Return the maximum size of TYPE (in bytes) as a wide integer
3006 or return -1 if the size can vary or is larger than an integer. */
3008 HOST_WIDE_INT
3009 max_int_size_in_bytes (const_tree type)
3011 HOST_WIDE_INT size = -1;
3012 tree size_tree;
3014 /* If this is an array type, check for a possible MAX_SIZE attached. */
3016 if (TREE_CODE (type) == ARRAY_TYPE)
3018 size_tree = TYPE_ARRAY_MAX_SIZE (type);
3020 if (size_tree && tree_fits_uhwi_p (size_tree))
3021 size = tree_to_uhwi (size_tree);
3024 /* If we still haven't been able to get a size, see if the language
3025 can compute a maximum size. */
3027 if (size == -1)
3029 size_tree = lang_hooks.types.max_size (type);
3031 if (size_tree && tree_fits_uhwi_p (size_tree))
3032 size = tree_to_uhwi (size_tree);
3035 return size;
3038 /* Return the bit position of FIELD, in bits from the start of the record.
3039 This is a tree of type bitsizetype. */
3041 tree
3042 bit_position (const_tree field)
3044 return bit_from_pos (DECL_FIELD_OFFSET (field),
3045 DECL_FIELD_BIT_OFFSET (field));
3048 /* Return the byte position of FIELD, in bytes from the start of the record.
3049 This is a tree of type sizetype. */
3051 tree
3052 byte_position (const_tree field)
3054 return byte_from_pos (DECL_FIELD_OFFSET (field),
3055 DECL_FIELD_BIT_OFFSET (field));
3058 /* Likewise, but return as an integer. It must be representable in
3059 that way (since it could be a signed value, we don't have the
3060 option of returning -1 like int_size_in_byte can. */
3062 HOST_WIDE_INT
3063 int_byte_position (const_tree field)
3065 return tree_to_shwi (byte_position (field));
3068 /* Return the strictest alignment, in bits, that T is known to have. */
3070 unsigned int
3071 expr_align (const_tree t)
3073 unsigned int align0, align1;
3075 switch (TREE_CODE (t))
3077 CASE_CONVERT: case NON_LVALUE_EXPR:
3078 /* If we have conversions, we know that the alignment of the
3079 object must meet each of the alignments of the types. */
3080 align0 = expr_align (TREE_OPERAND (t, 0));
3081 align1 = TYPE_ALIGN (TREE_TYPE (t));
3082 return MAX (align0, align1);
3084 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
3085 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
3086 case CLEANUP_POINT_EXPR:
3087 /* These don't change the alignment of an object. */
3088 return expr_align (TREE_OPERAND (t, 0));
3090 case COND_EXPR:
3091 /* The best we can do is say that the alignment is the least aligned
3092 of the two arms. */
3093 align0 = expr_align (TREE_OPERAND (t, 1));
3094 align1 = expr_align (TREE_OPERAND (t, 2));
3095 return MIN (align0, align1);
3097 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
3098 meaningfully, it's always 1. */
3099 case LABEL_DECL: case CONST_DECL:
3100 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
3101 case FUNCTION_DECL:
3102 gcc_assert (DECL_ALIGN (t) != 0);
3103 return DECL_ALIGN (t);
3105 default:
3106 break;
3109 /* Otherwise take the alignment from that of the type. */
3110 return TYPE_ALIGN (TREE_TYPE (t));
3113 /* Return, as a tree node, the number of elements for TYPE (which is an
3114 ARRAY_TYPE) minus one. This counts only elements of the top array. */
3116 tree
3117 array_type_nelts (const_tree type)
3119 tree index_type, min, max;
3121 /* If they did it with unspecified bounds, then we should have already
3122 given an error about it before we got here. */
3123 if (! TYPE_DOMAIN (type))
3124 return error_mark_node;
3126 index_type = TYPE_DOMAIN (type);
3127 min = TYPE_MIN_VALUE (index_type);
3128 max = TYPE_MAX_VALUE (index_type);
3130 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
3131 if (!max)
3132 return error_mark_node;
3134 return (integer_zerop (min)
3135 ? max
3136 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3139 /* If arg is static -- a reference to an object in static storage -- then
3140 return the object. This is not the same as the C meaning of `static'.
3141 If arg isn't static, return NULL. */
3143 tree
3144 staticp (tree arg)
3146 switch (TREE_CODE (arg))
3148 case FUNCTION_DECL:
3149 /* Nested functions are static, even though taking their address will
3150 involve a trampoline as we unnest the nested function and create
3151 the trampoline on the tree level. */
3152 return arg;
3154 case VAR_DECL:
3155 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3156 && ! DECL_THREAD_LOCAL_P (arg)
3157 && ! DECL_DLLIMPORT_P (arg)
3158 ? arg : NULL);
3160 case CONST_DECL:
3161 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3162 ? arg : NULL);
3164 case CONSTRUCTOR:
3165 return TREE_STATIC (arg) ? arg : NULL;
3167 case LABEL_DECL:
3168 case STRING_CST:
3169 return arg;
3171 case COMPONENT_REF:
3172 /* If the thing being referenced is not a field, then it is
3173 something language specific. */
3174 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3176 /* If we are referencing a bitfield, we can't evaluate an
3177 ADDR_EXPR at compile time and so it isn't a constant. */
3178 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3179 return NULL;
3181 return staticp (TREE_OPERAND (arg, 0));
3183 case BIT_FIELD_REF:
3184 return NULL;
3186 case INDIRECT_REF:
3187 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3189 case ARRAY_REF:
3190 case ARRAY_RANGE_REF:
3191 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3192 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3193 return staticp (TREE_OPERAND (arg, 0));
3194 else
3195 return NULL;
3197 case COMPOUND_LITERAL_EXPR:
3198 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3200 default:
3201 return NULL;
3208 /* Return whether OP is a DECL whose address is function-invariant. */
3210 bool
3211 decl_address_invariant_p (const_tree op)
3213 /* The conditions below are slightly less strict than the one in
3214 staticp. */
3216 switch (TREE_CODE (op))
3218 case PARM_DECL:
3219 case RESULT_DECL:
3220 case LABEL_DECL:
3221 case FUNCTION_DECL:
3222 return true;
3224 case VAR_DECL:
3225 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3226 || DECL_THREAD_LOCAL_P (op)
3227 || DECL_CONTEXT (op) == current_function_decl
3228 || decl_function_context (op) == current_function_decl)
3229 return true;
3230 break;
3232 case CONST_DECL:
3233 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3234 || decl_function_context (op) == current_function_decl)
3235 return true;
3236 break;
3238 default:
3239 break;
3242 return false;
3245 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
3247 bool
3248 decl_address_ip_invariant_p (const_tree op)
3250 /* The conditions below are slightly less strict than the one in
3251 staticp. */
3253 switch (TREE_CODE (op))
3255 case LABEL_DECL:
3256 case FUNCTION_DECL:
3257 case STRING_CST:
3258 return true;
3260 case VAR_DECL:
3261 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3262 && !DECL_DLLIMPORT_P (op))
3263 || DECL_THREAD_LOCAL_P (op))
3264 return true;
3265 break;
3267 case CONST_DECL:
3268 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3269 return true;
3270 break;
3272 default:
3273 break;
3276 return false;
3280 /* Return true if T is function-invariant (internal function, does
3281 not handle arithmetic; that's handled in skip_simple_arithmetic and
3282 tree_invariant_p). */
3284 static bool
3285 tree_invariant_p_1 (tree t)
3287 tree op;
3289 if (TREE_CONSTANT (t)
3290 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3291 return true;
3293 switch (TREE_CODE (t))
3295 case SAVE_EXPR:
3296 return true;
3298 case ADDR_EXPR:
3299 op = TREE_OPERAND (t, 0);
3300 while (handled_component_p (op))
3302 switch (TREE_CODE (op))
3304 case ARRAY_REF:
3305 case ARRAY_RANGE_REF:
3306 if (!tree_invariant_p (TREE_OPERAND (op, 1))
3307 || TREE_OPERAND (op, 2) != NULL_TREE
3308 || TREE_OPERAND (op, 3) != NULL_TREE)
3309 return false;
3310 break;
3312 case COMPONENT_REF:
3313 if (TREE_OPERAND (op, 2) != NULL_TREE)
3314 return false;
3315 break;
3317 default:;
3319 op = TREE_OPERAND (op, 0);
3322 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3324 default:
3325 break;
3328 return false;
3331 /* Return true if T is function-invariant. */
3333 bool
3334 tree_invariant_p (tree t)
3336 tree inner = skip_simple_arithmetic (t);
3337 return tree_invariant_p_1 (inner);
3340 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3341 Do this to any expression which may be used in more than one place,
3342 but must be evaluated only once.
3344 Normally, expand_expr would reevaluate the expression each time.
3345 Calling save_expr produces something that is evaluated and recorded
3346 the first time expand_expr is called on it. Subsequent calls to
3347 expand_expr just reuse the recorded value.
3349 The call to expand_expr that generates code that actually computes
3350 the value is the first call *at compile time*. Subsequent calls
3351 *at compile time* generate code to use the saved value.
3352 This produces correct result provided that *at run time* control
3353 always flows through the insns made by the first expand_expr
3354 before reaching the other places where the save_expr was evaluated.
3355 You, the caller of save_expr, must make sure this is so.
3357 Constants, and certain read-only nodes, are returned with no
3358 SAVE_EXPR because that is safe. Expressions containing placeholders
3359 are not touched; see tree.def for an explanation of what these
3360 are used for. */
3362 tree
3363 save_expr (tree expr)
3365 tree inner;
3367 /* If the tree evaluates to a constant, then we don't want to hide that
3368 fact (i.e. this allows further folding, and direct checks for constants).
3369 However, a read-only object that has side effects cannot be bypassed.
3370 Since it is no problem to reevaluate literals, we just return the
3371 literal node. */
3372 inner = skip_simple_arithmetic (expr);
3373 if (TREE_CODE (inner) == ERROR_MARK)
3374 return inner;
3376 if (tree_invariant_p_1 (inner))
3377 return expr;
3379 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3380 it means that the size or offset of some field of an object depends on
3381 the value within another field.
3383 Note that it must not be the case that EXPR contains both a PLACEHOLDER_EXPR
3384 and some variable since it would then need to be both evaluated once and
3385 evaluated more than once. Front-ends must assure this case cannot
3386 happen by surrounding any such subexpressions in their own SAVE_EXPR
3387 and forcing evaluation at the proper time. */
3388 if (contains_placeholder_p (inner))
3389 return expr;
3391 expr = build1_loc (EXPR_LOCATION (expr), SAVE_EXPR, TREE_TYPE (expr), expr);
3393 /* This expression might be placed ahead of a jump to ensure that the
3394 value was computed on both sides of the jump. So make sure it isn't
3395 eliminated as dead. */
3396 TREE_SIDE_EFFECTS (expr) = 1;
3397 return expr;
3400 /* Look inside EXPR into any simple arithmetic operations. Return the
3401 outermost non-arithmetic or non-invariant node. */
3403 tree
3404 skip_simple_arithmetic (tree expr)
3406 /* We don't care about whether this can be used as an lvalue in this
3407 context. */
3408 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3409 expr = TREE_OPERAND (expr, 0);
3411 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3412 a constant, it will be more efficient to not make another SAVE_EXPR since
3413 it will allow better simplification and GCSE will be able to merge the
3414 computations if they actually occur. */
3415 while (true)
3417 if (UNARY_CLASS_P (expr))
3418 expr = TREE_OPERAND (expr, 0);
3419 else if (BINARY_CLASS_P (expr))
3421 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3422 expr = TREE_OPERAND (expr, 0);
3423 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3424 expr = TREE_OPERAND (expr, 1);
3425 else
3426 break;
3428 else
3429 break;
3432 return expr;
3435 /* Look inside EXPR into simple arithmetic operations involving constants.
3436 Return the outermost non-arithmetic or non-constant node. */
3438 tree
3439 skip_simple_constant_arithmetic (tree expr)
3441 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3442 expr = TREE_OPERAND (expr, 0);
3444 while (true)
3446 if (UNARY_CLASS_P (expr))
3447 expr = TREE_OPERAND (expr, 0);
3448 else if (BINARY_CLASS_P (expr))
3450 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3451 expr = TREE_OPERAND (expr, 0);
3452 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3453 expr = TREE_OPERAND (expr, 1);
3454 else
3455 break;
3457 else
3458 break;
3461 return expr;
3464 /* Return which tree structure is used by T. */
3466 enum tree_node_structure_enum
3467 tree_node_structure (const_tree t)
3469 const enum tree_code code = TREE_CODE (t);
3470 return tree_node_structure_for_code (code);
3473 /* Set various status flags when building a CALL_EXPR object T. */
3475 static void
3476 process_call_operands (tree t)
3478 bool side_effects = TREE_SIDE_EFFECTS (t);
3479 bool read_only = false;
3480 int i = call_expr_flags (t);
3482 /* Calls have side-effects, except those to const or pure functions. */
3483 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3484 side_effects = true;
3485 /* Propagate TREE_READONLY of arguments for const functions. */
3486 if (i & ECF_CONST)
3487 read_only = true;
3489 if (!side_effects || read_only)
3490 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3492 tree op = TREE_OPERAND (t, i);
3493 if (op && TREE_SIDE_EFFECTS (op))
3494 side_effects = true;
3495 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3496 read_only = false;
3499 TREE_SIDE_EFFECTS (t) = side_effects;
3500 TREE_READONLY (t) = read_only;
3503 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3504 size or offset that depends on a field within a record. */
3506 bool
3507 contains_placeholder_p (const_tree exp)
3509 enum tree_code code;
3511 if (!exp)
3512 return 0;
3514 code = TREE_CODE (exp);
3515 if (code == PLACEHOLDER_EXPR)
3516 return 1;
3518 switch (TREE_CODE_CLASS (code))
3520 case tcc_reference:
3521 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3522 position computations since they will be converted into a
3523 WITH_RECORD_EXPR involving the reference, which will assume
3524 here will be valid. */
3525 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3527 case tcc_exceptional:
3528 if (code == TREE_LIST)
3529 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3530 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3531 break;
3533 case tcc_unary:
3534 case tcc_binary:
3535 case tcc_comparison:
3536 case tcc_expression:
3537 switch (code)
3539 case COMPOUND_EXPR:
3540 /* Ignoring the first operand isn't quite right, but works best. */
3541 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3543 case COND_EXPR:
3544 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3545 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3546 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3548 case SAVE_EXPR:
3549 /* The save_expr function never wraps anything containing
3550 a PLACEHOLDER_EXPR. */
3551 return 0;
3553 default:
3554 break;
3557 switch (TREE_CODE_LENGTH (code))
3559 case 1:
3560 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3561 case 2:
3562 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3563 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3564 default:
3565 return 0;
3568 case tcc_vl_exp:
3569 switch (code)
3571 case CALL_EXPR:
3573 const_tree arg;
3574 const_call_expr_arg_iterator iter;
3575 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3576 if (CONTAINS_PLACEHOLDER_P (arg))
3577 return 1;
3578 return 0;
3580 default:
3581 return 0;
3584 default:
3585 return 0;
3587 return 0;
3590 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3591 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3592 field positions. */
3594 static bool
3595 type_contains_placeholder_1 (const_tree type)
3597 /* If the size contains a placeholder or the parent type (component type in
3598 the case of arrays) type involves a placeholder, this type does. */
3599 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3600 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3601 || (!POINTER_TYPE_P (type)
3602 && TREE_TYPE (type)
3603 && type_contains_placeholder_p (TREE_TYPE (type))))
3604 return true;
3606 /* Now do type-specific checks. Note that the last part of the check above
3607 greatly limits what we have to do below. */
3608 switch (TREE_CODE (type))
3610 case VOID_TYPE:
3611 case POINTER_BOUNDS_TYPE:
3612 case COMPLEX_TYPE:
3613 case ENUMERAL_TYPE:
3614 case BOOLEAN_TYPE:
3615 case POINTER_TYPE:
3616 case OFFSET_TYPE:
3617 case REFERENCE_TYPE:
3618 case METHOD_TYPE:
3619 case FUNCTION_TYPE:
3620 case VECTOR_TYPE:
3621 case NULLPTR_TYPE:
3622 return false;
3624 case INTEGER_TYPE:
3625 case REAL_TYPE:
3626 case FIXED_POINT_TYPE:
3627 /* Here we just check the bounds. */
3628 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3629 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3631 case ARRAY_TYPE:
3632 /* We have already checked the component type above, so just check
3633 the domain type. Flexible array members have a null domain. */
3634 return TYPE_DOMAIN (type) ?
3635 type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3637 case RECORD_TYPE:
3638 case UNION_TYPE:
3639 case QUAL_UNION_TYPE:
3641 tree field;
3643 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3644 if (TREE_CODE (field) == FIELD_DECL
3645 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3646 || (TREE_CODE (type) == QUAL_UNION_TYPE
3647 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3648 || type_contains_placeholder_p (TREE_TYPE (field))))
3649 return true;
3651 return false;
3654 default:
3655 gcc_unreachable ();
3659 /* Wrapper around above function used to cache its result. */
3661 bool
3662 type_contains_placeholder_p (tree type)
3664 bool result;
3666 /* If the contains_placeholder_bits field has been initialized,
3667 then we know the answer. */
3668 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3669 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3671 /* Indicate that we've seen this type node, and the answer is false.
3672 This is what we want to return if we run into recursion via fields. */
3673 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3675 /* Compute the real value. */
3676 result = type_contains_placeholder_1 (type);
3678 /* Store the real value. */
3679 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3681 return result;
3684 /* Push tree EXP onto vector QUEUE if it is not already present. */
3686 static void
3687 push_without_duplicates (tree exp, vec<tree> *queue)
3689 unsigned int i;
3690 tree iter;
3692 FOR_EACH_VEC_ELT (*queue, i, iter)
3693 if (simple_cst_equal (iter, exp) == 1)
3694 break;
3696 if (!iter)
3697 queue->safe_push (exp);
3700 /* Given a tree EXP, find all occurrences of references to fields
3701 in a PLACEHOLDER_EXPR and place them in vector REFS without
3702 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
3703 we assume here that EXP contains only arithmetic expressions
3704 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3705 argument list. */
3707 void
3708 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3710 enum tree_code code = TREE_CODE (exp);
3711 tree inner;
3712 int i;
3714 /* We handle TREE_LIST and COMPONENT_REF separately. */
3715 if (code == TREE_LIST)
3717 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3718 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3720 else if (code == COMPONENT_REF)
3722 for (inner = TREE_OPERAND (exp, 0);
3723 REFERENCE_CLASS_P (inner);
3724 inner = TREE_OPERAND (inner, 0))
3727 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3728 push_without_duplicates (exp, refs);
3729 else
3730 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3732 else
3733 switch (TREE_CODE_CLASS (code))
3735 case tcc_constant:
3736 break;
3738 case tcc_declaration:
3739 /* Variables allocated to static storage can stay. */
3740 if (!TREE_STATIC (exp))
3741 push_without_duplicates (exp, refs);
3742 break;
3744 case tcc_expression:
3745 /* This is the pattern built in ada/make_aligning_type. */
3746 if (code == ADDR_EXPR
3747 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3749 push_without_duplicates (exp, refs);
3750 break;
3753 /* Fall through. */
3755 case tcc_exceptional:
3756 case tcc_unary:
3757 case tcc_binary:
3758 case tcc_comparison:
3759 case tcc_reference:
3760 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3761 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3762 break;
3764 case tcc_vl_exp:
3765 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3766 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3767 break;
3769 default:
3770 gcc_unreachable ();
3774 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3775 return a tree with all occurrences of references to F in a
3776 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
3777 CONST_DECLs. Note that we assume here that EXP contains only
3778 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3779 occurring only in their argument list. */
3781 tree
3782 substitute_in_expr (tree exp, tree f, tree r)
3784 enum tree_code code = TREE_CODE (exp);
3785 tree op0, op1, op2, op3;
3786 tree new_tree;
3788 /* We handle TREE_LIST and COMPONENT_REF separately. */
3789 if (code == TREE_LIST)
3791 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3792 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3793 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3794 return exp;
3796 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3798 else if (code == COMPONENT_REF)
3800 tree inner;
3802 /* If this expression is getting a value from a PLACEHOLDER_EXPR
3803 and it is the right field, replace it with R. */
3804 for (inner = TREE_OPERAND (exp, 0);
3805 REFERENCE_CLASS_P (inner);
3806 inner = TREE_OPERAND (inner, 0))
3809 /* The field. */
3810 op1 = TREE_OPERAND (exp, 1);
3812 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3813 return r;
3815 /* If this expression hasn't been completed let, leave it alone. */
3816 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3817 return exp;
3819 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3820 if (op0 == TREE_OPERAND (exp, 0))
3821 return exp;
3823 new_tree
3824 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3826 else
3827 switch (TREE_CODE_CLASS (code))
3829 case tcc_constant:
3830 return exp;
3832 case tcc_declaration:
3833 if (exp == f)
3834 return r;
3835 else
3836 return exp;
3838 case tcc_expression:
3839 if (exp == f)
3840 return r;
3842 /* Fall through. */
3844 case tcc_exceptional:
3845 case tcc_unary:
3846 case tcc_binary:
3847 case tcc_comparison:
3848 case tcc_reference:
3849 switch (TREE_CODE_LENGTH (code))
3851 case 0:
3852 return exp;
3854 case 1:
3855 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3856 if (op0 == TREE_OPERAND (exp, 0))
3857 return exp;
3859 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3860 break;
3862 case 2:
3863 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3864 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3866 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3867 return exp;
3869 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3870 break;
3872 case 3:
3873 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3874 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3875 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3877 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3878 && op2 == TREE_OPERAND (exp, 2))
3879 return exp;
3881 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3882 break;
3884 case 4:
3885 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3886 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3887 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3888 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3890 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3891 && op2 == TREE_OPERAND (exp, 2)
3892 && op3 == TREE_OPERAND (exp, 3))
3893 return exp;
3895 new_tree
3896 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3897 break;
3899 default:
3900 gcc_unreachable ();
3902 break;
3904 case tcc_vl_exp:
3906 int i;
3908 new_tree = NULL_TREE;
3910 /* If we are trying to replace F with a constant or with another
3911 instance of one of the arguments of the call, inline back
3912 functions which do nothing else than computing a value from
3913 the arguments they are passed. This makes it possible to
3914 fold partially or entirely the replacement expression. */
3915 if (code == CALL_EXPR)
3917 bool maybe_inline = false;
3918 if (CONSTANT_CLASS_P (r))
3919 maybe_inline = true;
3920 else
3921 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
3922 if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
3924 maybe_inline = true;
3925 break;
3927 if (maybe_inline)
3929 tree t = maybe_inline_call_in_expr (exp);
3930 if (t)
3931 return SUBSTITUTE_IN_EXPR (t, f, r);
3935 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3937 tree op = TREE_OPERAND (exp, i);
3938 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3939 if (new_op != op)
3941 if (!new_tree)
3942 new_tree = copy_node (exp);
3943 TREE_OPERAND (new_tree, i) = new_op;
3947 if (new_tree)
3949 new_tree = fold (new_tree);
3950 if (TREE_CODE (new_tree) == CALL_EXPR)
3951 process_call_operands (new_tree);
3953 else
3954 return exp;
3956 break;
3958 default:
3959 gcc_unreachable ();
3962 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3964 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3965 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3967 return new_tree;
3970 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3971 for it within OBJ, a tree that is an object or a chain of references. */
3973 tree
3974 substitute_placeholder_in_expr (tree exp, tree obj)
3976 enum tree_code code = TREE_CODE (exp);
3977 tree op0, op1, op2, op3;
3978 tree new_tree;
3980 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3981 in the chain of OBJ. */
3982 if (code == PLACEHOLDER_EXPR)
3984 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3985 tree elt;
3987 for (elt = obj; elt != 0;
3988 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3989 || TREE_CODE (elt) == COND_EXPR)
3990 ? TREE_OPERAND (elt, 1)
3991 : (REFERENCE_CLASS_P (elt)
3992 || UNARY_CLASS_P (elt)
3993 || BINARY_CLASS_P (elt)
3994 || VL_EXP_CLASS_P (elt)
3995 || EXPRESSION_CLASS_P (elt))
3996 ? TREE_OPERAND (elt, 0) : 0))
3997 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3998 return elt;
4000 for (elt = obj; elt != 0;
4001 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
4002 || TREE_CODE (elt) == COND_EXPR)
4003 ? TREE_OPERAND (elt, 1)
4004 : (REFERENCE_CLASS_P (elt)
4005 || UNARY_CLASS_P (elt)
4006 || BINARY_CLASS_P (elt)
4007 || VL_EXP_CLASS_P (elt)
4008 || EXPRESSION_CLASS_P (elt))
4009 ? TREE_OPERAND (elt, 0) : 0))
4010 if (POINTER_TYPE_P (TREE_TYPE (elt))
4011 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
4012 == need_type))
4013 return fold_build1 (INDIRECT_REF, need_type, elt);
4015 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
4016 survives until RTL generation, there will be an error. */
4017 return exp;
4020 /* TREE_LIST is special because we need to look at TREE_VALUE
4021 and TREE_CHAIN, not TREE_OPERANDS. */
4022 else if (code == TREE_LIST)
4024 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
4025 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
4026 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4027 return exp;
4029 return tree_cons (TREE_PURPOSE (exp), op1, op0);
4031 else
4032 switch (TREE_CODE_CLASS (code))
4034 case tcc_constant:
4035 case tcc_declaration:
4036 return exp;
4038 case tcc_exceptional:
4039 case tcc_unary:
4040 case tcc_binary:
4041 case tcc_comparison:
4042 case tcc_expression:
4043 case tcc_reference:
4044 case tcc_statement:
4045 switch (TREE_CODE_LENGTH (code))
4047 case 0:
4048 return exp;
4050 case 1:
4051 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4052 if (op0 == TREE_OPERAND (exp, 0))
4053 return exp;
4055 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4056 break;
4058 case 2:
4059 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4060 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4062 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4063 return exp;
4065 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4066 break;
4068 case 3:
4069 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4070 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4071 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4073 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4074 && op2 == TREE_OPERAND (exp, 2))
4075 return exp;
4077 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4078 break;
4080 case 4:
4081 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4082 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4083 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4084 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4086 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4087 && op2 == TREE_OPERAND (exp, 2)
4088 && op3 == TREE_OPERAND (exp, 3))
4089 return exp;
4091 new_tree
4092 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4093 break;
4095 default:
4096 gcc_unreachable ();
4098 break;
4100 case tcc_vl_exp:
4102 int i;
4104 new_tree = NULL_TREE;
4106 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4108 tree op = TREE_OPERAND (exp, i);
4109 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4110 if (new_op != op)
4112 if (!new_tree)
4113 new_tree = copy_node (exp);
4114 TREE_OPERAND (new_tree, i) = new_op;
4118 if (new_tree)
4120 new_tree = fold (new_tree);
4121 if (TREE_CODE (new_tree) == CALL_EXPR)
4122 process_call_operands (new_tree);
4124 else
4125 return exp;
4127 break;
4129 default:
4130 gcc_unreachable ();
4133 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4135 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4136 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4138 return new_tree;
4142 /* Subroutine of stabilize_reference; this is called for subtrees of
4143 references. Any expression with side-effects must be put in a SAVE_EXPR
4144 to ensure that it is only evaluated once.
4146 We don't put SAVE_EXPR nodes around everything, because assigning very
4147 simple expressions to temporaries causes us to miss good opportunities
4148 for optimizations. Among other things, the opportunity to fold in the
4149 addition of a constant into an addressing mode often gets lost, e.g.
4150 "y[i+1] += x;". In general, we take the approach that we should not make
4151 an assignment unless we are forced into it - i.e., that any non-side effect
4152 operator should be allowed, and that cse should take care of coalescing
4153 multiple utterances of the same expression should that prove fruitful. */
4155 static tree
4156 stabilize_reference_1 (tree e)
4158 tree result;
4159 enum tree_code code = TREE_CODE (e);
4161 /* We cannot ignore const expressions because it might be a reference
4162 to a const array but whose index contains side-effects. But we can
4163 ignore things that are actual constant or that already have been
4164 handled by this function. */
4166 if (tree_invariant_p (e))
4167 return e;
4169 switch (TREE_CODE_CLASS (code))
4171 case tcc_exceptional:
4172 case tcc_type:
4173 case tcc_declaration:
4174 case tcc_comparison:
4175 case tcc_statement:
4176 case tcc_expression:
4177 case tcc_reference:
4178 case tcc_vl_exp:
4179 /* If the expression has side-effects, then encase it in a SAVE_EXPR
4180 so that it will only be evaluated once. */
4181 /* The reference (r) and comparison (<) classes could be handled as
4182 below, but it is generally faster to only evaluate them once. */
4183 if (TREE_SIDE_EFFECTS (e))
4184 return save_expr (e);
4185 return e;
4187 case tcc_constant:
4188 /* Constants need no processing. In fact, we should never reach
4189 here. */
4190 return e;
4192 case tcc_binary:
4193 /* Division is slow and tends to be compiled with jumps,
4194 especially the division by powers of 2 that is often
4195 found inside of an array reference. So do it just once. */
4196 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4197 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4198 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4199 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4200 return save_expr (e);
4201 /* Recursively stabilize each operand. */
4202 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4203 stabilize_reference_1 (TREE_OPERAND (e, 1)));
4204 break;
4206 case tcc_unary:
4207 /* Recursively stabilize each operand. */
4208 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4209 break;
4211 default:
4212 gcc_unreachable ();
4215 TREE_TYPE (result) = TREE_TYPE (e);
4216 TREE_READONLY (result) = TREE_READONLY (e);
4217 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4218 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4220 return result;
4223 /* Stabilize a reference so that we can use it any number of times
4224 without causing its operands to be evaluated more than once.
4225 Returns the stabilized reference. This works by means of save_expr,
4226 so see the caveats in the comments about save_expr.
4228 Also allows conversion expressions whose operands are references.
4229 Any other kind of expression is returned unchanged. */
4231 tree
4232 stabilize_reference (tree ref)
4234 tree result;
4235 enum tree_code code = TREE_CODE (ref);
4237 switch (code)
4239 case VAR_DECL:
4240 case PARM_DECL:
4241 case RESULT_DECL:
4242 /* No action is needed in this case. */
4243 return ref;
4245 CASE_CONVERT:
4246 case FLOAT_EXPR:
4247 case FIX_TRUNC_EXPR:
4248 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4249 break;
4251 case INDIRECT_REF:
4252 result = build_nt (INDIRECT_REF,
4253 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4254 break;
4256 case COMPONENT_REF:
4257 result = build_nt (COMPONENT_REF,
4258 stabilize_reference (TREE_OPERAND (ref, 0)),
4259 TREE_OPERAND (ref, 1), NULL_TREE);
4260 break;
4262 case BIT_FIELD_REF:
4263 result = build_nt (BIT_FIELD_REF,
4264 stabilize_reference (TREE_OPERAND (ref, 0)),
4265 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4266 REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4267 break;
4269 case ARRAY_REF:
4270 result = build_nt (ARRAY_REF,
4271 stabilize_reference (TREE_OPERAND (ref, 0)),
4272 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4273 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4274 break;
4276 case ARRAY_RANGE_REF:
4277 result = build_nt (ARRAY_RANGE_REF,
4278 stabilize_reference (TREE_OPERAND (ref, 0)),
4279 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4280 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4281 break;
4283 case COMPOUND_EXPR:
4284 /* We cannot wrap the first expression in a SAVE_EXPR, as then
4285 it wouldn't be ignored. This matters when dealing with
4286 volatiles. */
4287 return stabilize_reference_1 (ref);
4289 /* If arg isn't a kind of lvalue we recognize, make no change.
4290 Caller should recognize the error for an invalid lvalue. */
4291 default:
4292 return ref;
4294 case ERROR_MARK:
4295 return error_mark_node;
4298 TREE_TYPE (result) = TREE_TYPE (ref);
4299 TREE_READONLY (result) = TREE_READONLY (ref);
4300 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4301 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4303 return result;
4306 /* Low-level constructors for expressions. */
4308 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
4309 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
4311 void
4312 recompute_tree_invariant_for_addr_expr (tree t)
4314 tree node;
4315 bool tc = true, se = false;
4317 gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4319 /* We started out assuming this address is both invariant and constant, but
4320 does not have side effects. Now go down any handled components and see if
4321 any of them involve offsets that are either non-constant or non-invariant.
4322 Also check for side-effects.
4324 ??? Note that this code makes no attempt to deal with the case where
4325 taking the address of something causes a copy due to misalignment. */
4327 #define UPDATE_FLAGS(NODE) \
4328 do { tree _node = (NODE); \
4329 if (_node && !TREE_CONSTANT (_node)) tc = false; \
4330 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4332 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4333 node = TREE_OPERAND (node, 0))
4335 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4336 array reference (probably made temporarily by the G++ front end),
4337 so ignore all the operands. */
4338 if ((TREE_CODE (node) == ARRAY_REF
4339 || TREE_CODE (node) == ARRAY_RANGE_REF)
4340 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4342 UPDATE_FLAGS (TREE_OPERAND (node, 1));
4343 if (TREE_OPERAND (node, 2))
4344 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4345 if (TREE_OPERAND (node, 3))
4346 UPDATE_FLAGS (TREE_OPERAND (node, 3));
4348 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4349 FIELD_DECL, apparently. The G++ front end can put something else
4350 there, at least temporarily. */
4351 else if (TREE_CODE (node) == COMPONENT_REF
4352 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4354 if (TREE_OPERAND (node, 2))
4355 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4359 node = lang_hooks.expr_to_decl (node, &tc, &se);
4361 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4362 the address, since &(*a)->b is a form of addition. If it's a constant, the
4363 address is constant too. If it's a decl, its address is constant if the
4364 decl is static. Everything else is not constant and, furthermore,
4365 taking the address of a volatile variable is not volatile. */
4366 if (TREE_CODE (node) == INDIRECT_REF
4367 || TREE_CODE (node) == MEM_REF)
4368 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4369 else if (CONSTANT_CLASS_P (node))
4371 else if (DECL_P (node))
4372 tc &= (staticp (node) != NULL_TREE);
4373 else
4375 tc = false;
4376 se |= TREE_SIDE_EFFECTS (node);
4380 TREE_CONSTANT (t) = tc;
4381 TREE_SIDE_EFFECTS (t) = se;
4382 #undef UPDATE_FLAGS
4385 /* Build an expression of code CODE, data type TYPE, and operands as
4386 specified. Expressions and reference nodes can be created this way.
4387 Constants, decls, types and misc nodes cannot be.
4389 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4390 enough for all extant tree codes. */
4392 tree
4393 build0 (enum tree_code code, tree tt MEM_STAT_DECL)
4395 tree t;
4397 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4399 t = make_node (code PASS_MEM_STAT);
4400 TREE_TYPE (t) = tt;
4402 return t;
4405 tree
4406 build1 (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4408 int length = sizeof (struct tree_exp);
4409 tree t;
4411 record_node_allocation_statistics (code, length);
4413 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4415 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4417 memset (t, 0, sizeof (struct tree_common));
4419 TREE_SET_CODE (t, code);
4421 TREE_TYPE (t) = type;
4422 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4423 TREE_OPERAND (t, 0) = node;
4424 if (node && !TYPE_P (node))
4426 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4427 TREE_READONLY (t) = TREE_READONLY (node);
4430 if (TREE_CODE_CLASS (code) == tcc_statement)
4431 TREE_SIDE_EFFECTS (t) = 1;
4432 else switch (code)
4434 case VA_ARG_EXPR:
4435 /* All of these have side-effects, no matter what their
4436 operands are. */
4437 TREE_SIDE_EFFECTS (t) = 1;
4438 TREE_READONLY (t) = 0;
4439 break;
4441 case INDIRECT_REF:
4442 /* Whether a dereference is readonly has nothing to do with whether
4443 its operand is readonly. */
4444 TREE_READONLY (t) = 0;
4445 break;
4447 case ADDR_EXPR:
4448 if (node)
4449 recompute_tree_invariant_for_addr_expr (t);
4450 break;
4452 default:
4453 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4454 && node && !TYPE_P (node)
4455 && TREE_CONSTANT (node))
4456 TREE_CONSTANT (t) = 1;
4457 if (TREE_CODE_CLASS (code) == tcc_reference
4458 && node && TREE_THIS_VOLATILE (node))
4459 TREE_THIS_VOLATILE (t) = 1;
4460 break;
4463 return t;
4466 #define PROCESS_ARG(N) \
4467 do { \
4468 TREE_OPERAND (t, N) = arg##N; \
4469 if (arg##N &&!TYPE_P (arg##N)) \
4471 if (TREE_SIDE_EFFECTS (arg##N)) \
4472 side_effects = 1; \
4473 if (!TREE_READONLY (arg##N) \
4474 && !CONSTANT_CLASS_P (arg##N)) \
4475 (void) (read_only = 0); \
4476 if (!TREE_CONSTANT (arg##N)) \
4477 (void) (constant = 0); \
4479 } while (0)
4481 tree
4482 build2 (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4484 bool constant, read_only, side_effects, div_by_zero;
4485 tree t;
4487 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4489 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4490 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4491 /* When sizetype precision doesn't match that of pointers
4492 we need to be able to build explicit extensions or truncations
4493 of the offset argument. */
4494 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4495 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4496 && TREE_CODE (arg1) == INTEGER_CST);
4498 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4499 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4500 && ptrofftype_p (TREE_TYPE (arg1)));
4502 t = make_node (code PASS_MEM_STAT);
4503 TREE_TYPE (t) = tt;
4505 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4506 result based on those same flags for the arguments. But if the
4507 arguments aren't really even `tree' expressions, we shouldn't be trying
4508 to do this. */
4510 /* Expressions without side effects may be constant if their
4511 arguments are as well. */
4512 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4513 || TREE_CODE_CLASS (code) == tcc_binary);
4514 read_only = 1;
4515 side_effects = TREE_SIDE_EFFECTS (t);
4517 switch (code)
4519 case TRUNC_DIV_EXPR:
4520 case CEIL_DIV_EXPR:
4521 case FLOOR_DIV_EXPR:
4522 case ROUND_DIV_EXPR:
4523 case EXACT_DIV_EXPR:
4524 case CEIL_MOD_EXPR:
4525 case FLOOR_MOD_EXPR:
4526 case ROUND_MOD_EXPR:
4527 case TRUNC_MOD_EXPR:
4528 div_by_zero = integer_zerop (arg1);
4529 break;
4530 default:
4531 div_by_zero = false;
4534 PROCESS_ARG (0);
4535 PROCESS_ARG (1);
4537 TREE_SIDE_EFFECTS (t) = side_effects;
4538 if (code == MEM_REF)
4540 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4542 tree o = TREE_OPERAND (arg0, 0);
4543 TREE_READONLY (t) = TREE_READONLY (o);
4544 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4547 else
4549 TREE_READONLY (t) = read_only;
4550 /* Don't mark X / 0 as constant. */
4551 TREE_CONSTANT (t) = constant && !div_by_zero;
4552 TREE_THIS_VOLATILE (t)
4553 = (TREE_CODE_CLASS (code) == tcc_reference
4554 && arg0 && TREE_THIS_VOLATILE (arg0));
4557 return t;
4561 tree
4562 build3 (enum tree_code code, tree tt, tree arg0, tree arg1,
4563 tree arg2 MEM_STAT_DECL)
4565 bool constant, read_only, side_effects;
4566 tree t;
4568 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4569 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4571 t = make_node (code PASS_MEM_STAT);
4572 TREE_TYPE (t) = tt;
4574 read_only = 1;
4576 /* As a special exception, if COND_EXPR has NULL branches, we
4577 assume that it is a gimple statement and always consider
4578 it to have side effects. */
4579 if (code == COND_EXPR
4580 && tt == void_type_node
4581 && arg1 == NULL_TREE
4582 && arg2 == NULL_TREE)
4583 side_effects = true;
4584 else
4585 side_effects = TREE_SIDE_EFFECTS (t);
4587 PROCESS_ARG (0);
4588 PROCESS_ARG (1);
4589 PROCESS_ARG (2);
4591 if (code == COND_EXPR)
4592 TREE_READONLY (t) = read_only;
4594 TREE_SIDE_EFFECTS (t) = side_effects;
4595 TREE_THIS_VOLATILE (t)
4596 = (TREE_CODE_CLASS (code) == tcc_reference
4597 && arg0 && TREE_THIS_VOLATILE (arg0));
4599 return t;
4602 tree
4603 build4 (enum tree_code code, tree tt, tree arg0, tree arg1,
4604 tree arg2, tree arg3 MEM_STAT_DECL)
4606 bool constant, read_only, side_effects;
4607 tree t;
4609 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4611 t = make_node (code PASS_MEM_STAT);
4612 TREE_TYPE (t) = tt;
4614 side_effects = TREE_SIDE_EFFECTS (t);
4616 PROCESS_ARG (0);
4617 PROCESS_ARG (1);
4618 PROCESS_ARG (2);
4619 PROCESS_ARG (3);
4621 TREE_SIDE_EFFECTS (t) = side_effects;
4622 TREE_THIS_VOLATILE (t)
4623 = (TREE_CODE_CLASS (code) == tcc_reference
4624 && arg0 && TREE_THIS_VOLATILE (arg0));
4626 return t;
4629 tree
4630 build5 (enum tree_code code, tree tt, tree arg0, tree arg1,
4631 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4633 bool constant, read_only, side_effects;
4634 tree t;
4636 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4638 t = make_node (code PASS_MEM_STAT);
4639 TREE_TYPE (t) = tt;
4641 side_effects = TREE_SIDE_EFFECTS (t);
4643 PROCESS_ARG (0);
4644 PROCESS_ARG (1);
4645 PROCESS_ARG (2);
4646 PROCESS_ARG (3);
4647 PROCESS_ARG (4);
4649 TREE_SIDE_EFFECTS (t) = side_effects;
4650 if (code == TARGET_MEM_REF)
4652 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4654 tree o = TREE_OPERAND (arg0, 0);
4655 TREE_READONLY (t) = TREE_READONLY (o);
4656 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4659 else
4660 TREE_THIS_VOLATILE (t)
4661 = (TREE_CODE_CLASS (code) == tcc_reference
4662 && arg0 && TREE_THIS_VOLATILE (arg0));
4664 return t;
4667 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4668 on the pointer PTR. */
4670 tree
4671 build_simple_mem_ref_loc (location_t loc, tree ptr)
4673 HOST_WIDE_INT offset = 0;
4674 tree ptype = TREE_TYPE (ptr);
4675 tree tem;
4676 /* For convenience allow addresses that collapse to a simple base
4677 and offset. */
4678 if (TREE_CODE (ptr) == ADDR_EXPR
4679 && (handled_component_p (TREE_OPERAND (ptr, 0))
4680 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4682 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4683 gcc_assert (ptr);
4684 if (TREE_CODE (ptr) == MEM_REF)
4686 offset += mem_ref_offset (ptr).to_short_addr ();
4687 ptr = TREE_OPERAND (ptr, 0);
4689 else
4690 ptr = build_fold_addr_expr (ptr);
4691 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4693 tem = build2 (MEM_REF, TREE_TYPE (ptype),
4694 ptr, build_int_cst (ptype, offset));
4695 SET_EXPR_LOCATION (tem, loc);
4696 return tem;
4699 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
4701 offset_int
4702 mem_ref_offset (const_tree t)
4704 return offset_int::from (wi::to_wide (TREE_OPERAND (t, 1)), SIGNED);
4707 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4708 offsetted by OFFSET units. */
4710 tree
4711 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4713 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4714 build_fold_addr_expr (base),
4715 build_int_cst (ptr_type_node, offset));
4716 tree addr = build1 (ADDR_EXPR, type, ref);
4717 recompute_tree_invariant_for_addr_expr (addr);
4718 return addr;
4721 /* Similar except don't specify the TREE_TYPE
4722 and leave the TREE_SIDE_EFFECTS as 0.
4723 It is permissible for arguments to be null,
4724 or even garbage if their values do not matter. */
4726 tree
4727 build_nt (enum tree_code code, ...)
4729 tree t;
4730 int length;
4731 int i;
4732 va_list p;
4734 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4736 va_start (p, code);
4738 t = make_node (code);
4739 length = TREE_CODE_LENGTH (code);
4741 for (i = 0; i < length; i++)
4742 TREE_OPERAND (t, i) = va_arg (p, tree);
4744 va_end (p);
4745 return t;
4748 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4749 tree vec. */
4751 tree
4752 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4754 tree ret, t;
4755 unsigned int ix;
4757 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4758 CALL_EXPR_FN (ret) = fn;
4759 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4760 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4761 CALL_EXPR_ARG (ret, ix) = t;
4762 return ret;
4765 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4766 We do NOT enter this node in any sort of symbol table.
4768 LOC is the location of the decl.
4770 layout_decl is used to set up the decl's storage layout.
4771 Other slots are initialized to 0 or null pointers. */
4773 tree
4774 build_decl (location_t loc, enum tree_code code, tree name,
4775 tree type MEM_STAT_DECL)
4777 tree t;
4779 t = make_node (code PASS_MEM_STAT);
4780 DECL_SOURCE_LOCATION (t) = loc;
4782 /* if (type == error_mark_node)
4783 type = integer_type_node; */
4784 /* That is not done, deliberately, so that having error_mark_node
4785 as the type can suppress useless errors in the use of this variable. */
4787 DECL_NAME (t) = name;
4788 TREE_TYPE (t) = type;
4790 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4791 layout_decl (t, 0);
4793 return t;
4796 /* Builds and returns function declaration with NAME and TYPE. */
4798 tree
4799 build_fn_decl (const char *name, tree type)
4801 tree id = get_identifier (name);
4802 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4804 DECL_EXTERNAL (decl) = 1;
4805 TREE_PUBLIC (decl) = 1;
4806 DECL_ARTIFICIAL (decl) = 1;
4807 TREE_NOTHROW (decl) = 1;
4809 return decl;
4812 vec<tree, va_gc> *all_translation_units;
4814 /* Builds a new translation-unit decl with name NAME, queues it in the
4815 global list of translation-unit decls and returns it. */
4817 tree
4818 build_translation_unit_decl (tree name)
4820 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4821 name, NULL_TREE);
4822 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4823 vec_safe_push (all_translation_units, tu);
4824 return tu;
4828 /* BLOCK nodes are used to represent the structure of binding contours
4829 and declarations, once those contours have been exited and their contents
4830 compiled. This information is used for outputting debugging info. */
4832 tree
4833 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4835 tree block = make_node (BLOCK);
4837 BLOCK_VARS (block) = vars;
4838 BLOCK_SUBBLOCKS (block) = subblocks;
4839 BLOCK_SUPERCONTEXT (block) = supercontext;
4840 BLOCK_CHAIN (block) = chain;
4841 return block;
4845 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4847 LOC is the location to use in tree T. */
4849 void
4850 protected_set_expr_location (tree t, location_t loc)
4852 if (CAN_HAVE_LOCATION_P (t))
4853 SET_EXPR_LOCATION (t, loc);
4856 /* Reset the expression *EXPR_P, a size or position.
4858 ??? We could reset all non-constant sizes or positions. But it's cheap
4859 enough to not do so and refrain from adding workarounds to dwarf2out.c.
4861 We need to reset self-referential sizes or positions because they cannot
4862 be gimplified and thus can contain a CALL_EXPR after the gimplification
4863 is finished, which will run afoul of LTO streaming. And they need to be
4864 reset to something essentially dummy but not constant, so as to preserve
4865 the properties of the object they are attached to. */
4867 static inline void
4868 free_lang_data_in_one_sizepos (tree *expr_p)
4870 tree expr = *expr_p;
4871 if (CONTAINS_PLACEHOLDER_P (expr))
4872 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
4876 /* Reset all the fields in a binfo node BINFO. We only keep
4877 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
4879 static void
4880 free_lang_data_in_binfo (tree binfo)
4882 unsigned i;
4883 tree t;
4885 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
4887 BINFO_VIRTUALS (binfo) = NULL_TREE;
4888 BINFO_BASE_ACCESSES (binfo) = NULL;
4889 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
4890 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
4892 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
4893 free_lang_data_in_binfo (t);
4897 /* Reset all language specific information still present in TYPE. */
4899 static void
4900 free_lang_data_in_type (tree type)
4902 gcc_assert (TYPE_P (type));
4904 /* Give the FE a chance to remove its own data first. */
4905 lang_hooks.free_lang_data (type);
4907 TREE_LANG_FLAG_0 (type) = 0;
4908 TREE_LANG_FLAG_1 (type) = 0;
4909 TREE_LANG_FLAG_2 (type) = 0;
4910 TREE_LANG_FLAG_3 (type) = 0;
4911 TREE_LANG_FLAG_4 (type) = 0;
4912 TREE_LANG_FLAG_5 (type) = 0;
4913 TREE_LANG_FLAG_6 (type) = 0;
4915 if (TREE_CODE (type) == FUNCTION_TYPE)
4917 /* Remove the const and volatile qualifiers from arguments. The
4918 C++ front end removes them, but the C front end does not,
4919 leading to false ODR violation errors when merging two
4920 instances of the same function signature compiled by
4921 different front ends. */
4922 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
4924 tree arg_type = TREE_VALUE (p);
4926 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
4928 int quals = TYPE_QUALS (arg_type)
4929 & ~TYPE_QUAL_CONST
4930 & ~TYPE_QUAL_VOLATILE;
4931 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
4932 free_lang_data_in_type (TREE_VALUE (p));
4934 /* C++ FE uses TREE_PURPOSE to store initial values. */
4935 TREE_PURPOSE (p) = NULL;
4938 else if (TREE_CODE (type) == METHOD_TYPE)
4939 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
4940 /* C++ FE uses TREE_PURPOSE to store initial values. */
4941 TREE_PURPOSE (p) = NULL;
4942 else if (RECORD_OR_UNION_TYPE_P (type))
4944 /* Remove members that are not FIELD_DECLs (and maybe
4945 TYPE_DECLs) from the field list of an aggregate. These occur
4946 in C++. */
4947 for (tree *prev = &TYPE_FIELDS (type), member; (member = *prev);)
4948 if (TREE_CODE (member) == FIELD_DECL
4949 || (TREE_CODE (member) == TYPE_DECL
4950 && !DECL_IGNORED_P (member)
4951 && debug_info_level > DINFO_LEVEL_TERSE
4952 && !is_redundant_typedef (member)))
4953 prev = &DECL_CHAIN (member);
4954 else
4955 *prev = DECL_CHAIN (member);
4957 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
4958 and danagle the pointer from time to time. */
4959 if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
4960 TYPE_VFIELD (type) = NULL_TREE;
4962 if (TYPE_BINFO (type))
4964 free_lang_data_in_binfo (TYPE_BINFO (type));
4965 /* We need to preserve link to bases and virtual table for all
4966 polymorphic types to make devirtualization machinery working.
4967 Debug output cares only about bases, but output also
4968 virtual table pointers so merging of -fdevirtualize and
4969 -fno-devirtualize units is easier. */
4970 if ((!BINFO_VTABLE (TYPE_BINFO (type))
4971 || !flag_devirtualize)
4972 && ((!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
4973 && !BINFO_VTABLE (TYPE_BINFO (type)))
4974 || debug_info_level != DINFO_LEVEL_NONE))
4975 TYPE_BINFO (type) = NULL;
4978 else if (INTEGRAL_TYPE_P (type)
4979 || SCALAR_FLOAT_TYPE_P (type)
4980 || FIXED_POINT_TYPE_P (type))
4982 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
4983 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
4986 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
4988 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
4989 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
4991 if (TYPE_CONTEXT (type)
4992 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
4994 tree ctx = TYPE_CONTEXT (type);
4997 ctx = BLOCK_SUPERCONTEXT (ctx);
4999 while (ctx && TREE_CODE (ctx) == BLOCK);
5000 TYPE_CONTEXT (type) = ctx;
5005 /* Return true if DECL may need an assembler name to be set. */
5007 static inline bool
5008 need_assembler_name_p (tree decl)
5010 /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5011 Rule merging. This makes type_odr_p to return true on those types during
5012 LTO and by comparing the mangled name, we can say what types are intended
5013 to be equivalent across compilation unit.
5015 We do not store names of type_in_anonymous_namespace_p.
5017 Record, union and enumeration type have linkage that allows use
5018 to check type_in_anonymous_namespace_p. We do not mangle compound types
5019 that always can be compared structurally.
5021 Similarly for builtin types, we compare properties of their main variant.
5022 A special case are integer types where mangling do make differences
5023 between char/signed char/unsigned char etc. Storing name for these makes
5024 e.g. -fno-signed-char/-fsigned-char mismatches to be handled well.
5025 See cp/mangle.c:write_builtin_type for details. */
5027 if (flag_lto_odr_type_mering
5028 && TREE_CODE (decl) == TYPE_DECL
5029 && DECL_NAME (decl)
5030 && decl == TYPE_NAME (TREE_TYPE (decl))
5031 && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
5032 && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5033 && (type_with_linkage_p (TREE_TYPE (decl))
5034 || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5035 && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5036 return !DECL_ASSEMBLER_NAME_SET_P (decl);
5037 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
5038 if (!VAR_OR_FUNCTION_DECL_P (decl))
5039 return false;
5041 /* If DECL already has its assembler name set, it does not need a
5042 new one. */
5043 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5044 || DECL_ASSEMBLER_NAME_SET_P (decl))
5045 return false;
5047 /* Abstract decls do not need an assembler name. */
5048 if (DECL_ABSTRACT_P (decl))
5049 return false;
5051 /* For VAR_DECLs, only static, public and external symbols need an
5052 assembler name. */
5053 if (VAR_P (decl)
5054 && !TREE_STATIC (decl)
5055 && !TREE_PUBLIC (decl)
5056 && !DECL_EXTERNAL (decl))
5057 return false;
5059 if (TREE_CODE (decl) == FUNCTION_DECL)
5061 /* Do not set assembler name on builtins. Allow RTL expansion to
5062 decide whether to expand inline or via a regular call. */
5063 if (DECL_BUILT_IN (decl)
5064 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5065 return false;
5067 /* Functions represented in the callgraph need an assembler name. */
5068 if (cgraph_node::get (decl) != NULL)
5069 return true;
5071 /* Unused and not public functions don't need an assembler name. */
5072 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5073 return false;
5076 return true;
5080 /* Reset all language specific information still present in symbol
5081 DECL. */
5083 static void
5084 free_lang_data_in_decl (tree decl)
5086 gcc_assert (DECL_P (decl));
5088 /* Give the FE a chance to remove its own data first. */
5089 lang_hooks.free_lang_data (decl);
5091 TREE_LANG_FLAG_0 (decl) = 0;
5092 TREE_LANG_FLAG_1 (decl) = 0;
5093 TREE_LANG_FLAG_2 (decl) = 0;
5094 TREE_LANG_FLAG_3 (decl) = 0;
5095 TREE_LANG_FLAG_4 (decl) = 0;
5096 TREE_LANG_FLAG_5 (decl) = 0;
5097 TREE_LANG_FLAG_6 (decl) = 0;
5099 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5100 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5101 if (TREE_CODE (decl) == FIELD_DECL)
5103 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5104 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5105 DECL_QUALIFIER (decl) = NULL_TREE;
5108 if (TREE_CODE (decl) == FUNCTION_DECL)
5110 struct cgraph_node *node;
5111 if (!(node = cgraph_node::get (decl))
5112 || (!node->definition && !node->clones))
5114 if (node)
5115 node->release_body ();
5116 else
5118 release_function_body (decl);
5119 DECL_ARGUMENTS (decl) = NULL;
5120 DECL_RESULT (decl) = NULL;
5121 DECL_INITIAL (decl) = error_mark_node;
5124 if (gimple_has_body_p (decl) || (node && node->thunk.thunk_p))
5126 tree t;
5128 /* If DECL has a gimple body, then the context for its
5129 arguments must be DECL. Otherwise, it doesn't really
5130 matter, as we will not be emitting any code for DECL. In
5131 general, there may be other instances of DECL created by
5132 the front end and since PARM_DECLs are generally shared,
5133 their DECL_CONTEXT changes as the replicas of DECL are
5134 created. The only time where DECL_CONTEXT is important
5135 is for the FUNCTION_DECLs that have a gimple body (since
5136 the PARM_DECL will be used in the function's body). */
5137 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5138 DECL_CONTEXT (t) = decl;
5139 if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5140 DECL_FUNCTION_SPECIFIC_TARGET (decl)
5141 = target_option_default_node;
5142 if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5143 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5144 = optimization_default_node;
5147 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5148 At this point, it is not needed anymore. */
5149 DECL_SAVED_TREE (decl) = NULL_TREE;
5151 /* Clear the abstract origin if it refers to a method.
5152 Otherwise dwarf2out.c will ICE as we splice functions out of
5153 TYPE_FIELDS and thus the origin will not be output
5154 correctly. */
5155 if (DECL_ABSTRACT_ORIGIN (decl)
5156 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5157 && RECORD_OR_UNION_TYPE_P
5158 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5159 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5161 /* Sometimes the C++ frontend doesn't manage to transform a temporary
5162 DECL_VINDEX referring to itself into a vtable slot number as it
5163 should. Happens with functions that are copied and then forgotten
5164 about. Just clear it, it won't matter anymore. */
5165 if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5166 DECL_VINDEX (decl) = NULL_TREE;
5168 else if (VAR_P (decl))
5170 if ((DECL_EXTERNAL (decl)
5171 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5172 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5173 DECL_INITIAL (decl) = NULL_TREE;
5175 else if (TREE_CODE (decl) == TYPE_DECL)
5177 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5178 DECL_VISIBILITY_SPECIFIED (decl) = 0;
5179 DECL_INITIAL (decl) = NULL_TREE;
5181 else if (TREE_CODE (decl) == FIELD_DECL)
5182 DECL_INITIAL (decl) = NULL_TREE;
5183 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5184 && DECL_INITIAL (decl)
5185 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5187 /* Strip builtins from the translation-unit BLOCK. We still have targets
5188 without builtin_decl_explicit support and also builtins are shared
5189 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5190 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5191 while (*nextp)
5193 tree var = *nextp;
5194 if (TREE_CODE (var) == FUNCTION_DECL
5195 && DECL_BUILT_IN (var))
5196 *nextp = TREE_CHAIN (var);
5197 else
5198 nextp = &TREE_CHAIN (var);
5204 /* Data used when collecting DECLs and TYPEs for language data removal. */
5206 struct free_lang_data_d
5208 free_lang_data_d () : decls (100), types (100) {}
5210 /* Worklist to avoid excessive recursion. */
5211 auto_vec<tree> worklist;
5213 /* Set of traversed objects. Used to avoid duplicate visits. */
5214 hash_set<tree> pset;
5216 /* Array of symbols to process with free_lang_data_in_decl. */
5217 auto_vec<tree> decls;
5219 /* Array of types to process with free_lang_data_in_type. */
5220 auto_vec<tree> types;
5224 /* Save all language fields needed to generate proper debug information
5225 for DECL. This saves most fields cleared out by free_lang_data_in_decl. */
5227 static void
5228 save_debug_info_for_decl (tree t)
5230 /*struct saved_debug_info_d *sdi;*/
5232 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5234 /* FIXME. Partial implementation for saving debug info removed. */
5238 /* Save all language fields needed to generate proper debug information
5239 for TYPE. This saves most fields cleared out by free_lang_data_in_type. */
5241 static void
5242 save_debug_info_for_type (tree t)
5244 /*struct saved_debug_info_d *sdi;*/
5246 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5248 /* FIXME. Partial implementation for saving debug info removed. */
5252 /* Add type or decl T to one of the list of tree nodes that need their
5253 language data removed. The lists are held inside FLD. */
5255 static void
5256 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5258 if (DECL_P (t))
5260 fld->decls.safe_push (t);
5261 if (debug_info_level > DINFO_LEVEL_TERSE)
5262 save_debug_info_for_decl (t);
5264 else if (TYPE_P (t))
5266 fld->types.safe_push (t);
5267 if (debug_info_level > DINFO_LEVEL_TERSE)
5268 save_debug_info_for_type (t);
5270 else
5271 gcc_unreachable ();
5274 /* Push tree node T into FLD->WORKLIST. */
5276 static inline void
5277 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5279 if (t && !is_lang_specific (t) && !fld->pset.contains (t))
5280 fld->worklist.safe_push ((t));
5284 /* Operand callback helper for free_lang_data_in_node. *TP is the
5285 subtree operand being considered. */
5287 static tree
5288 find_decls_types_r (tree *tp, int *ws, void *data)
5290 tree t = *tp;
5291 struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5293 if (TREE_CODE (t) == TREE_LIST)
5294 return NULL_TREE;
5296 /* Language specific nodes will be removed, so there is no need
5297 to gather anything under them. */
5298 if (is_lang_specific (t))
5300 *ws = 0;
5301 return NULL_TREE;
5304 if (DECL_P (t))
5306 /* Note that walk_tree does not traverse every possible field in
5307 decls, so we have to do our own traversals here. */
5308 add_tree_to_fld_list (t, fld);
5310 fld_worklist_push (DECL_NAME (t), fld);
5311 fld_worklist_push (DECL_CONTEXT (t), fld);
5312 fld_worklist_push (DECL_SIZE (t), fld);
5313 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5315 /* We are going to remove everything under DECL_INITIAL for
5316 TYPE_DECLs. No point walking them. */
5317 if (TREE_CODE (t) != TYPE_DECL)
5318 fld_worklist_push (DECL_INITIAL (t), fld);
5320 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5321 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5323 if (TREE_CODE (t) == FUNCTION_DECL)
5325 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5326 fld_worklist_push (DECL_RESULT (t), fld);
5328 else if (TREE_CODE (t) == TYPE_DECL)
5330 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5332 else if (TREE_CODE (t) == FIELD_DECL)
5334 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5335 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5336 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5337 fld_worklist_push (DECL_FCONTEXT (t), fld);
5340 if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
5341 && DECL_HAS_VALUE_EXPR_P (t))
5342 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5344 if (TREE_CODE (t) != FIELD_DECL
5345 && TREE_CODE (t) != TYPE_DECL)
5346 fld_worklist_push (TREE_CHAIN (t), fld);
5347 *ws = 0;
5349 else if (TYPE_P (t))
5351 /* Note that walk_tree does not traverse every possible field in
5352 types, so we have to do our own traversals here. */
5353 add_tree_to_fld_list (t, fld);
5355 if (!RECORD_OR_UNION_TYPE_P (t))
5356 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5357 fld_worklist_push (TYPE_SIZE (t), fld);
5358 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5359 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5360 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5361 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5362 fld_worklist_push (TYPE_NAME (t), fld);
5363 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
5364 them and thus do not and want not to reach unused pointer types
5365 this way. */
5366 if (!POINTER_TYPE_P (t))
5367 fld_worklist_push (TYPE_MIN_VALUE_RAW (t), fld);
5368 /* TYPE_MAX_VALUE_RAW is TYPE_BINFO for record types. */
5369 if (!RECORD_OR_UNION_TYPE_P (t))
5370 fld_worklist_push (TYPE_MAX_VALUE_RAW (t), fld);
5371 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5372 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5373 do not and want not to reach unused variants this way. */
5374 if (TYPE_CONTEXT (t))
5376 tree ctx = TYPE_CONTEXT (t);
5377 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5378 So push that instead. */
5379 while (ctx && TREE_CODE (ctx) == BLOCK)
5380 ctx = BLOCK_SUPERCONTEXT (ctx);
5381 fld_worklist_push (ctx, fld);
5383 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not
5384 and want not to reach unused types this way. */
5386 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5388 unsigned i;
5389 tree tem;
5390 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5391 fld_worklist_push (TREE_TYPE (tem), fld);
5392 fld_worklist_push (BINFO_VIRTUALS (TYPE_BINFO (t)), fld);
5394 if (RECORD_OR_UNION_TYPE_P (t))
5396 tree tem;
5397 /* Push all TYPE_FIELDS - there can be interleaving interesting
5398 and non-interesting things. */
5399 tem = TYPE_FIELDS (t);
5400 while (tem)
5402 if (TREE_CODE (tem) == FIELD_DECL
5403 || (TREE_CODE (tem) == TYPE_DECL
5404 && !DECL_IGNORED_P (tem)
5405 && debug_info_level > DINFO_LEVEL_TERSE
5406 && !is_redundant_typedef (tem)))
5407 fld_worklist_push (tem, fld);
5408 tem = TREE_CHAIN (tem);
5412 fld_worklist_push (TYPE_STUB_DECL (t), fld);
5413 *ws = 0;
5415 else if (TREE_CODE (t) == BLOCK)
5417 tree tem;
5418 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5419 fld_worklist_push (tem, fld);
5420 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5421 fld_worklist_push (tem, fld);
5422 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5425 if (TREE_CODE (t) != IDENTIFIER_NODE
5426 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5427 fld_worklist_push (TREE_TYPE (t), fld);
5429 return NULL_TREE;
5433 /* Find decls and types in T. */
5435 static void
5436 find_decls_types (tree t, struct free_lang_data_d *fld)
5438 while (1)
5440 if (!fld->pset.contains (t))
5441 walk_tree (&t, find_decls_types_r, fld, &fld->pset);
5442 if (fld->worklist.is_empty ())
5443 break;
5444 t = fld->worklist.pop ();
5448 /* Translate all the types in LIST with the corresponding runtime
5449 types. */
5451 static tree
5452 get_eh_types_for_runtime (tree list)
5454 tree head, prev;
5456 if (list == NULL_TREE)
5457 return NULL_TREE;
5459 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5460 prev = head;
5461 list = TREE_CHAIN (list);
5462 while (list)
5464 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5465 TREE_CHAIN (prev) = n;
5466 prev = TREE_CHAIN (prev);
5467 list = TREE_CHAIN (list);
5470 return head;
5474 /* Find decls and types referenced in EH region R and store them in
5475 FLD->DECLS and FLD->TYPES. */
5477 static void
5478 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5480 switch (r->type)
5482 case ERT_CLEANUP:
5483 break;
5485 case ERT_TRY:
5487 eh_catch c;
5489 /* The types referenced in each catch must first be changed to the
5490 EH types used at runtime. This removes references to FE types
5491 in the region. */
5492 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5494 c->type_list = get_eh_types_for_runtime (c->type_list);
5495 walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset);
5498 break;
5500 case ERT_ALLOWED_EXCEPTIONS:
5501 r->u.allowed.type_list
5502 = get_eh_types_for_runtime (r->u.allowed.type_list);
5503 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset);
5504 break;
5506 case ERT_MUST_NOT_THROW:
5507 walk_tree (&r->u.must_not_throw.failure_decl,
5508 find_decls_types_r, fld, &fld->pset);
5509 break;
5514 /* Find decls and types referenced in cgraph node N and store them in
5515 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5516 look for *every* kind of DECL and TYPE node reachable from N,
5517 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5518 NAMESPACE_DECLs, etc). */
5520 static void
5521 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5523 basic_block bb;
5524 struct function *fn;
5525 unsigned ix;
5526 tree t;
5528 find_decls_types (n->decl, fld);
5530 if (!gimple_has_body_p (n->decl))
5531 return;
5533 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5535 fn = DECL_STRUCT_FUNCTION (n->decl);
5537 /* Traverse locals. */
5538 FOR_EACH_LOCAL_DECL (fn, ix, t)
5539 find_decls_types (t, fld);
5541 /* Traverse EH regions in FN. */
5543 eh_region r;
5544 FOR_ALL_EH_REGION_FN (r, fn)
5545 find_decls_types_in_eh_region (r, fld);
5548 /* Traverse every statement in FN. */
5549 FOR_EACH_BB_FN (bb, fn)
5551 gphi_iterator psi;
5552 gimple_stmt_iterator si;
5553 unsigned i;
5555 for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5557 gphi *phi = psi.phi ();
5559 for (i = 0; i < gimple_phi_num_args (phi); i++)
5561 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5562 find_decls_types (*arg_p, fld);
5566 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5568 gimple *stmt = gsi_stmt (si);
5570 if (is_gimple_call (stmt))
5571 find_decls_types (gimple_call_fntype (stmt), fld);
5573 for (i = 0; i < gimple_num_ops (stmt); i++)
5575 tree arg = gimple_op (stmt, i);
5576 find_decls_types (arg, fld);
5583 /* Find decls and types referenced in varpool node N and store them in
5584 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5585 look for *every* kind of DECL and TYPE node reachable from N,
5586 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5587 NAMESPACE_DECLs, etc). */
5589 static void
5590 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5592 find_decls_types (v->decl, fld);
5595 /* If T needs an assembler name, have one created for it. */
5597 void
5598 assign_assembler_name_if_needed (tree t)
5600 if (need_assembler_name_p (t))
5602 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5603 diagnostics that use input_location to show locus
5604 information. The problem here is that, at this point,
5605 input_location is generally anchored to the end of the file
5606 (since the parser is long gone), so we don't have a good
5607 position to pin it to.
5609 To alleviate this problem, this uses the location of T's
5610 declaration. Examples of this are
5611 testsuite/g++.dg/template/cond2.C and
5612 testsuite/g++.dg/template/pr35240.C. */
5613 location_t saved_location = input_location;
5614 input_location = DECL_SOURCE_LOCATION (t);
5616 decl_assembler_name (t);
5618 input_location = saved_location;
5623 /* Free language specific information for every operand and expression
5624 in every node of the call graph. This process operates in three stages:
5626 1- Every callgraph node and varpool node is traversed looking for
5627 decls and types embedded in them. This is a more exhaustive
5628 search than that done by find_referenced_vars, because it will
5629 also collect individual fields, decls embedded in types, etc.
5631 2- All the decls found are sent to free_lang_data_in_decl.
5633 3- All the types found are sent to free_lang_data_in_type.
5635 The ordering between decls and types is important because
5636 free_lang_data_in_decl sets assembler names, which includes
5637 mangling. So types cannot be freed up until assembler names have
5638 been set up. */
5640 static void
5641 free_lang_data_in_cgraph (void)
5643 struct cgraph_node *n;
5644 varpool_node *v;
5645 struct free_lang_data_d fld;
5646 tree t;
5647 unsigned i;
5648 alias_pair *p;
5650 /* Find decls and types in the body of every function in the callgraph. */
5651 FOR_EACH_FUNCTION (n)
5652 find_decls_types_in_node (n, &fld);
5654 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5655 find_decls_types (p->decl, &fld);
5657 /* Find decls and types in every varpool symbol. */
5658 FOR_EACH_VARIABLE (v)
5659 find_decls_types_in_var (v, &fld);
5661 /* Set the assembler name on every decl found. We need to do this
5662 now because free_lang_data_in_decl will invalidate data needed
5663 for mangling. This breaks mangling on interdependent decls. */
5664 FOR_EACH_VEC_ELT (fld.decls, i, t)
5665 assign_assembler_name_if_needed (t);
5667 /* Traverse every decl found freeing its language data. */
5668 FOR_EACH_VEC_ELT (fld.decls, i, t)
5669 free_lang_data_in_decl (t);
5671 /* Traverse every type found freeing its language data. */
5672 FOR_EACH_VEC_ELT (fld.types, i, t)
5673 free_lang_data_in_type (t);
5674 if (flag_checking)
5676 FOR_EACH_VEC_ELT (fld.types, i, t)
5677 verify_type (t);
5682 /* Free resources that are used by FE but are not needed once they are done. */
5684 static unsigned
5685 free_lang_data (void)
5687 unsigned i;
5689 /* If we are the LTO frontend we have freed lang-specific data already. */
5690 if (in_lto_p
5691 || (!flag_generate_lto && !flag_generate_offload))
5692 return 0;
5694 /* Provide a dummy TRANSLATION_UNIT_DECL if the FE failed to provide one. */
5695 if (vec_safe_is_empty (all_translation_units))
5696 build_translation_unit_decl (NULL_TREE);
5698 /* Allocate and assign alias sets to the standard integer types
5699 while the slots are still in the way the frontends generated them. */
5700 for (i = 0; i < itk_none; ++i)
5701 if (integer_types[i])
5702 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5704 /* Traverse the IL resetting language specific information for
5705 operands, expressions, etc. */
5706 free_lang_data_in_cgraph ();
5708 /* Create gimple variants for common types. */
5709 for (unsigned i = 0;
5710 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
5711 ++i)
5712 builtin_structptr_types[i].node = builtin_structptr_types[i].base;
5714 /* Reset some langhooks. Do not reset types_compatible_p, it may
5715 still be used indirectly via the get_alias_set langhook. */
5716 lang_hooks.dwarf_name = lhd_dwarf_name;
5717 lang_hooks.decl_printable_name = gimple_decl_printable_name;
5718 lang_hooks.gimplify_expr = lhd_gimplify_expr;
5720 /* We do not want the default decl_assembler_name implementation,
5721 rather if we have fixed everything we want a wrapper around it
5722 asserting that all non-local symbols already got their assembler
5723 name and only produce assembler names for local symbols. Or rather
5724 make sure we never call decl_assembler_name on local symbols and
5725 devise a separate, middle-end private scheme for it. */
5727 /* Reset diagnostic machinery. */
5728 tree_diagnostics_defaults (global_dc);
5730 return 0;
5734 namespace {
5736 const pass_data pass_data_ipa_free_lang_data =
5738 SIMPLE_IPA_PASS, /* type */
5739 "*free_lang_data", /* name */
5740 OPTGROUP_NONE, /* optinfo_flags */
5741 TV_IPA_FREE_LANG_DATA, /* tv_id */
5742 0, /* properties_required */
5743 0, /* properties_provided */
5744 0, /* properties_destroyed */
5745 0, /* todo_flags_start */
5746 0, /* todo_flags_finish */
5749 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
5751 public:
5752 pass_ipa_free_lang_data (gcc::context *ctxt)
5753 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
5756 /* opt_pass methods: */
5757 virtual unsigned int execute (function *) { return free_lang_data (); }
5759 }; // class pass_ipa_free_lang_data
5761 } // anon namespace
5763 simple_ipa_opt_pass *
5764 make_pass_ipa_free_lang_data (gcc::context *ctxt)
5766 return new pass_ipa_free_lang_data (ctxt);
5769 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
5770 of the various TYPE_QUAL values. */
5772 static void
5773 set_type_quals (tree type, int type_quals)
5775 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
5776 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
5777 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
5778 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
5779 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
5782 /* Returns true iff CAND and BASE have equivalent language-specific
5783 qualifiers. */
5785 bool
5786 check_lang_type (const_tree cand, const_tree base)
5788 if (lang_hooks.types.type_hash_eq == NULL)
5789 return true;
5790 /* type_hash_eq currently only applies to these types. */
5791 if (TREE_CODE (cand) != FUNCTION_TYPE
5792 && TREE_CODE (cand) != METHOD_TYPE)
5793 return true;
5794 return lang_hooks.types.type_hash_eq (cand, base);
5797 /* Returns true iff unqualified CAND and BASE are equivalent. */
5799 bool
5800 check_base_type (const_tree cand, const_tree base)
5802 return (TYPE_NAME (cand) == TYPE_NAME (base)
5803 /* Apparently this is needed for Objective-C. */
5804 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
5805 /* Check alignment. */
5806 && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
5807 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
5808 TYPE_ATTRIBUTES (base)));
5811 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */
5813 bool
5814 check_qualified_type (const_tree cand, const_tree base, int type_quals)
5816 return (TYPE_QUALS (cand) == type_quals
5817 && check_base_type (cand, base)
5818 && check_lang_type (cand, base));
5821 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
5823 static bool
5824 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
5826 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
5827 && TYPE_NAME (cand) == TYPE_NAME (base)
5828 /* Apparently this is needed for Objective-C. */
5829 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
5830 /* Check alignment. */
5831 && TYPE_ALIGN (cand) == align
5832 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
5833 TYPE_ATTRIBUTES (base))
5834 && check_lang_type (cand, base));
5837 /* This function checks to see if TYPE matches the size one of the built-in
5838 atomic types, and returns that core atomic type. */
5840 static tree
5841 find_atomic_core_type (tree type)
5843 tree base_atomic_type;
5845 /* Only handle complete types. */
5846 if (!tree_fits_uhwi_p (TYPE_SIZE (type)))
5847 return NULL_TREE;
5849 switch (tree_to_uhwi (TYPE_SIZE (type)))
5851 case 8:
5852 base_atomic_type = atomicQI_type_node;
5853 break;
5855 case 16:
5856 base_atomic_type = atomicHI_type_node;
5857 break;
5859 case 32:
5860 base_atomic_type = atomicSI_type_node;
5861 break;
5863 case 64:
5864 base_atomic_type = atomicDI_type_node;
5865 break;
5867 case 128:
5868 base_atomic_type = atomicTI_type_node;
5869 break;
5871 default:
5872 base_atomic_type = NULL_TREE;
5875 return base_atomic_type;
5878 /* Return a version of the TYPE, qualified as indicated by the
5879 TYPE_QUALS, if one exists. If no qualified version exists yet,
5880 return NULL_TREE. */
5882 tree
5883 get_qualified_type (tree type, int type_quals)
5885 tree t;
5887 if (TYPE_QUALS (type) == type_quals)
5888 return type;
5890 /* Search the chain of variants to see if there is already one there just
5891 like the one we need to have. If so, use that existing one. We must
5892 preserve the TYPE_NAME, since there is code that depends on this. */
5893 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
5894 if (check_qualified_type (t, type, type_quals))
5895 return t;
5897 return NULL_TREE;
5900 /* Like get_qualified_type, but creates the type if it does not
5901 exist. This function never returns NULL_TREE. */
5903 tree
5904 build_qualified_type (tree type, int type_quals MEM_STAT_DECL)
5906 tree t;
5908 /* See if we already have the appropriate qualified variant. */
5909 t = get_qualified_type (type, type_quals);
5911 /* If not, build it. */
5912 if (!t)
5914 t = build_variant_type_copy (type PASS_MEM_STAT);
5915 set_type_quals (t, type_quals);
5917 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
5919 /* See if this object can map to a basic atomic type. */
5920 tree atomic_type = find_atomic_core_type (type);
5921 if (atomic_type)
5923 /* Ensure the alignment of this type is compatible with
5924 the required alignment of the atomic type. */
5925 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
5926 SET_TYPE_ALIGN (t, TYPE_ALIGN (atomic_type));
5930 if (TYPE_STRUCTURAL_EQUALITY_P (type))
5931 /* Propagate structural equality. */
5932 SET_TYPE_STRUCTURAL_EQUALITY (t);
5933 else if (TYPE_CANONICAL (type) != type)
5934 /* Build the underlying canonical type, since it is different
5935 from TYPE. */
5937 tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
5938 TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
5940 else
5941 /* T is its own canonical type. */
5942 TYPE_CANONICAL (t) = t;
5946 return t;
5949 /* Create a variant of type T with alignment ALIGN. */
5951 tree
5952 build_aligned_type (tree type, unsigned int align)
5954 tree t;
5956 if (TYPE_PACKED (type)
5957 || TYPE_ALIGN (type) == align)
5958 return type;
5960 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
5961 if (check_aligned_type (t, type, align))
5962 return t;
5964 t = build_variant_type_copy (type);
5965 SET_TYPE_ALIGN (t, align);
5966 TYPE_USER_ALIGN (t) = 1;
5968 return t;
5971 /* Create a new distinct copy of TYPE. The new type is made its own
5972 MAIN_VARIANT. If TYPE requires structural equality checks, the
5973 resulting type requires structural equality checks; otherwise, its
5974 TYPE_CANONICAL points to itself. */
5976 tree
5977 build_distinct_type_copy (tree type MEM_STAT_DECL)
5979 tree t = copy_node (type PASS_MEM_STAT);
5981 TYPE_POINTER_TO (t) = 0;
5982 TYPE_REFERENCE_TO (t) = 0;
5984 /* Set the canonical type either to a new equivalence class, or
5985 propagate the need for structural equality checks. */
5986 if (TYPE_STRUCTURAL_EQUALITY_P (type))
5987 SET_TYPE_STRUCTURAL_EQUALITY (t);
5988 else
5989 TYPE_CANONICAL (t) = t;
5991 /* Make it its own variant. */
5992 TYPE_MAIN_VARIANT (t) = t;
5993 TYPE_NEXT_VARIANT (t) = 0;
5995 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
5996 whose TREE_TYPE is not t. This can also happen in the Ada
5997 frontend when using subtypes. */
5999 return t;
6002 /* Create a new variant of TYPE, equivalent but distinct. This is so
6003 the caller can modify it. TYPE_CANONICAL for the return type will
6004 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6005 are considered equal by the language itself (or that both types
6006 require structural equality checks). */
6008 tree
6009 build_variant_type_copy (tree type MEM_STAT_DECL)
6011 tree t, m = TYPE_MAIN_VARIANT (type);
6013 t = build_distinct_type_copy (type PASS_MEM_STAT);
6015 /* Since we're building a variant, assume that it is a non-semantic
6016 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6017 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6018 /* Type variants have no alias set defined. */
6019 TYPE_ALIAS_SET (t) = -1;
6021 /* Add the new type to the chain of variants of TYPE. */
6022 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6023 TYPE_NEXT_VARIANT (m) = t;
6024 TYPE_MAIN_VARIANT (t) = m;
6026 return t;
6029 /* Return true if the from tree in both tree maps are equal. */
6032 tree_map_base_eq (const void *va, const void *vb)
6034 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6035 *const b = (const struct tree_map_base *) vb;
6036 return (a->from == b->from);
6039 /* Hash a from tree in a tree_base_map. */
6041 unsigned int
6042 tree_map_base_hash (const void *item)
6044 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6047 /* Return true if this tree map structure is marked for garbage collection
6048 purposes. We simply return true if the from tree is marked, so that this
6049 structure goes away when the from tree goes away. */
6052 tree_map_base_marked_p (const void *p)
6054 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6057 /* Hash a from tree in a tree_map. */
6059 unsigned int
6060 tree_map_hash (const void *item)
6062 return (((const struct tree_map *) item)->hash);
6065 /* Hash a from tree in a tree_decl_map. */
6067 unsigned int
6068 tree_decl_map_hash (const void *item)
6070 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6073 /* Return the initialization priority for DECL. */
6075 priority_type
6076 decl_init_priority_lookup (tree decl)
6078 symtab_node *snode = symtab_node::get (decl);
6080 if (!snode)
6081 return DEFAULT_INIT_PRIORITY;
6082 return
6083 snode->get_init_priority ();
6086 /* Return the finalization priority for DECL. */
6088 priority_type
6089 decl_fini_priority_lookup (tree decl)
6091 cgraph_node *node = cgraph_node::get (decl);
6093 if (!node)
6094 return DEFAULT_INIT_PRIORITY;
6095 return
6096 node->get_fini_priority ();
6099 /* Set the initialization priority for DECL to PRIORITY. */
6101 void
6102 decl_init_priority_insert (tree decl, priority_type priority)
6104 struct symtab_node *snode;
6106 if (priority == DEFAULT_INIT_PRIORITY)
6108 snode = symtab_node::get (decl);
6109 if (!snode)
6110 return;
6112 else if (VAR_P (decl))
6113 snode = varpool_node::get_create (decl);
6114 else
6115 snode = cgraph_node::get_create (decl);
6116 snode->set_init_priority (priority);
6119 /* Set the finalization priority for DECL to PRIORITY. */
6121 void
6122 decl_fini_priority_insert (tree decl, priority_type priority)
6124 struct cgraph_node *node;
6126 if (priority == DEFAULT_INIT_PRIORITY)
6128 node = cgraph_node::get (decl);
6129 if (!node)
6130 return;
6132 else
6133 node = cgraph_node::get_create (decl);
6134 node->set_fini_priority (priority);
6137 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6139 static void
6140 print_debug_expr_statistics (void)
6142 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6143 (long) debug_expr_for_decl->size (),
6144 (long) debug_expr_for_decl->elements (),
6145 debug_expr_for_decl->collisions ());
6148 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6150 static void
6151 print_value_expr_statistics (void)
6153 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6154 (long) value_expr_for_decl->size (),
6155 (long) value_expr_for_decl->elements (),
6156 value_expr_for_decl->collisions ());
6159 /* Lookup a debug expression for FROM, and return it if we find one. */
6161 tree
6162 decl_debug_expr_lookup (tree from)
6164 struct tree_decl_map *h, in;
6165 in.base.from = from;
6167 h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6168 if (h)
6169 return h->to;
6170 return NULL_TREE;
6173 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6175 void
6176 decl_debug_expr_insert (tree from, tree to)
6178 struct tree_decl_map *h;
6180 h = ggc_alloc<tree_decl_map> ();
6181 h->base.from = from;
6182 h->to = to;
6183 *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6186 /* Lookup a value expression for FROM, and return it if we find one. */
6188 tree
6189 decl_value_expr_lookup (tree from)
6191 struct tree_decl_map *h, in;
6192 in.base.from = from;
6194 h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6195 if (h)
6196 return h->to;
6197 return NULL_TREE;
6200 /* Insert a mapping FROM->TO in the value expression hashtable. */
6202 void
6203 decl_value_expr_insert (tree from, tree to)
6205 struct tree_decl_map *h;
6207 h = ggc_alloc<tree_decl_map> ();
6208 h->base.from = from;
6209 h->to = to;
6210 *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6213 /* Lookup a vector of debug arguments for FROM, and return it if we
6214 find one. */
6216 vec<tree, va_gc> **
6217 decl_debug_args_lookup (tree from)
6219 struct tree_vec_map *h, in;
6221 if (!DECL_HAS_DEBUG_ARGS_P (from))
6222 return NULL;
6223 gcc_checking_assert (debug_args_for_decl != NULL);
6224 in.base.from = from;
6225 h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6226 if (h)
6227 return &h->to;
6228 return NULL;
6231 /* Insert a mapping FROM->empty vector of debug arguments in the value
6232 expression hashtable. */
6234 vec<tree, va_gc> **
6235 decl_debug_args_insert (tree from)
6237 struct tree_vec_map *h;
6238 tree_vec_map **loc;
6240 if (DECL_HAS_DEBUG_ARGS_P (from))
6241 return decl_debug_args_lookup (from);
6242 if (debug_args_for_decl == NULL)
6243 debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6244 h = ggc_alloc<tree_vec_map> ();
6245 h->base.from = from;
6246 h->to = NULL;
6247 loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6248 *loc = h;
6249 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6250 return &h->to;
6253 /* Hashing of types so that we don't make duplicates.
6254 The entry point is `type_hash_canon'. */
6256 /* Generate the default hash code for TYPE. This is designed for
6257 speed, rather than maximum entropy. */
6259 hashval_t
6260 type_hash_canon_hash (tree type)
6262 inchash::hash hstate;
6264 hstate.add_int (TREE_CODE (type));
6266 if (TREE_TYPE (type))
6267 hstate.add_object (TYPE_HASH (TREE_TYPE (type)));
6269 for (tree t = TYPE_ATTRIBUTES (type); t; t = TREE_CHAIN (t))
6270 /* Just the identifier is adequate to distinguish. */
6271 hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (t)));
6273 switch (TREE_CODE (type))
6275 case METHOD_TYPE:
6276 hstate.add_object (TYPE_HASH (TYPE_METHOD_BASETYPE (type)));
6277 /* FALLTHROUGH. */
6278 case FUNCTION_TYPE:
6279 for (tree t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6280 if (TREE_VALUE (t) != error_mark_node)
6281 hstate.add_object (TYPE_HASH (TREE_VALUE (t)));
6282 break;
6284 case OFFSET_TYPE:
6285 hstate.add_object (TYPE_HASH (TYPE_OFFSET_BASETYPE (type)));
6286 break;
6288 case ARRAY_TYPE:
6290 if (TYPE_DOMAIN (type))
6291 hstate.add_object (TYPE_HASH (TYPE_DOMAIN (type)));
6292 if (!AGGREGATE_TYPE_P (TREE_TYPE (type)))
6294 unsigned typeless = TYPE_TYPELESS_STORAGE (type);
6295 hstate.add_object (typeless);
6298 break;
6300 case INTEGER_TYPE:
6302 tree t = TYPE_MAX_VALUE (type);
6303 if (!t)
6304 t = TYPE_MIN_VALUE (type);
6305 for (int i = 0; i < TREE_INT_CST_NUNITS (t); i++)
6306 hstate.add_object (TREE_INT_CST_ELT (t, i));
6307 break;
6310 case REAL_TYPE:
6311 case FIXED_POINT_TYPE:
6313 unsigned prec = TYPE_PRECISION (type);
6314 hstate.add_object (prec);
6315 break;
6318 case VECTOR_TYPE:
6320 unsigned nunits = TYPE_VECTOR_SUBPARTS (type);
6321 hstate.add_object (nunits);
6322 break;
6325 default:
6326 break;
6329 return hstate.end ();
6332 /* These are the Hashtable callback functions. */
6334 /* Returns true iff the types are equivalent. */
6336 bool
6337 type_cache_hasher::equal (type_hash *a, type_hash *b)
6339 /* First test the things that are the same for all types. */
6340 if (a->hash != b->hash
6341 || TREE_CODE (a->type) != TREE_CODE (b->type)
6342 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
6343 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
6344 TYPE_ATTRIBUTES (b->type))
6345 || (TREE_CODE (a->type) != COMPLEX_TYPE
6346 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
6347 return 0;
6349 /* Be careful about comparing arrays before and after the element type
6350 has been completed; don't compare TYPE_ALIGN unless both types are
6351 complete. */
6352 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
6353 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
6354 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
6355 return 0;
6357 switch (TREE_CODE (a->type))
6359 case VOID_TYPE:
6360 case COMPLEX_TYPE:
6361 case POINTER_TYPE:
6362 case REFERENCE_TYPE:
6363 case NULLPTR_TYPE:
6364 return 1;
6366 case VECTOR_TYPE:
6367 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
6369 case ENUMERAL_TYPE:
6370 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
6371 && !(TYPE_VALUES (a->type)
6372 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
6373 && TYPE_VALUES (b->type)
6374 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
6375 && type_list_equal (TYPE_VALUES (a->type),
6376 TYPE_VALUES (b->type))))
6377 return 0;
6379 /* fall through */
6381 case INTEGER_TYPE:
6382 case REAL_TYPE:
6383 case BOOLEAN_TYPE:
6384 if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
6385 return false;
6386 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
6387 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
6388 TYPE_MAX_VALUE (b->type)))
6389 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
6390 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
6391 TYPE_MIN_VALUE (b->type))));
6393 case FIXED_POINT_TYPE:
6394 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
6396 case OFFSET_TYPE:
6397 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
6399 case METHOD_TYPE:
6400 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
6401 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6402 || (TYPE_ARG_TYPES (a->type)
6403 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6404 && TYPE_ARG_TYPES (b->type)
6405 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6406 && type_list_equal (TYPE_ARG_TYPES (a->type),
6407 TYPE_ARG_TYPES (b->type)))))
6408 break;
6409 return 0;
6410 case ARRAY_TYPE:
6411 /* Don't compare TYPE_TYPELESS_STORAGE flag on aggregates,
6412 where the flag should be inherited from the element type
6413 and can change after ARRAY_TYPEs are created; on non-aggregates
6414 compare it and hash it, scalars will never have that flag set
6415 and we need to differentiate between arrays created by different
6416 front-ends or middle-end created arrays. */
6417 return (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
6418 && (AGGREGATE_TYPE_P (TREE_TYPE (a->type))
6419 || (TYPE_TYPELESS_STORAGE (a->type)
6420 == TYPE_TYPELESS_STORAGE (b->type))));
6422 case RECORD_TYPE:
6423 case UNION_TYPE:
6424 case QUAL_UNION_TYPE:
6425 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
6426 || (TYPE_FIELDS (a->type)
6427 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
6428 && TYPE_FIELDS (b->type)
6429 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
6430 && type_list_equal (TYPE_FIELDS (a->type),
6431 TYPE_FIELDS (b->type))));
6433 case FUNCTION_TYPE:
6434 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6435 || (TYPE_ARG_TYPES (a->type)
6436 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6437 && TYPE_ARG_TYPES (b->type)
6438 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6439 && type_list_equal (TYPE_ARG_TYPES (a->type),
6440 TYPE_ARG_TYPES (b->type))))
6441 break;
6442 return 0;
6444 default:
6445 return 0;
6448 if (lang_hooks.types.type_hash_eq != NULL)
6449 return lang_hooks.types.type_hash_eq (a->type, b->type);
6451 return 1;
6454 /* Given TYPE, and HASHCODE its hash code, return the canonical
6455 object for an identical type if one already exists.
6456 Otherwise, return TYPE, and record it as the canonical object.
6458 To use this function, first create a type of the sort you want.
6459 Then compute its hash code from the fields of the type that
6460 make it different from other similar types.
6461 Then call this function and use the value. */
6463 tree
6464 type_hash_canon (unsigned int hashcode, tree type)
6466 type_hash in;
6467 type_hash **loc;
6469 /* The hash table only contains main variants, so ensure that's what we're
6470 being passed. */
6471 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
6473 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
6474 must call that routine before comparing TYPE_ALIGNs. */
6475 layout_type (type);
6477 in.hash = hashcode;
6478 in.type = type;
6480 loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
6481 if (*loc)
6483 tree t1 = ((type_hash *) *loc)->type;
6484 gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
6485 if (TYPE_UID (type) + 1 == next_type_uid)
6486 --next_type_uid;
6487 /* Free also min/max values and the cache for integer
6488 types. This can't be done in free_node, as LTO frees
6489 those on its own. */
6490 if (TREE_CODE (type) == INTEGER_TYPE)
6492 if (TYPE_MIN_VALUE (type)
6493 && TREE_TYPE (TYPE_MIN_VALUE (type)) == type)
6495 /* Zero is always in TYPE_CACHED_VALUES. */
6496 if (! TYPE_UNSIGNED (type))
6497 int_cst_hash_table->remove_elt (TYPE_MIN_VALUE (type));
6498 ggc_free (TYPE_MIN_VALUE (type));
6500 if (TYPE_MAX_VALUE (type)
6501 && TREE_TYPE (TYPE_MAX_VALUE (type)) == type)
6503 int_cst_hash_table->remove_elt (TYPE_MAX_VALUE (type));
6504 ggc_free (TYPE_MAX_VALUE (type));
6506 if (TYPE_CACHED_VALUES_P (type))
6507 ggc_free (TYPE_CACHED_VALUES (type));
6509 free_node (type);
6510 return t1;
6512 else
6514 struct type_hash *h;
6516 h = ggc_alloc<type_hash> ();
6517 h->hash = hashcode;
6518 h->type = type;
6519 *loc = h;
6521 return type;
6525 static void
6526 print_type_hash_statistics (void)
6528 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
6529 (long) type_hash_table->size (),
6530 (long) type_hash_table->elements (),
6531 type_hash_table->collisions ());
6534 /* Given two lists of types
6535 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
6536 return 1 if the lists contain the same types in the same order.
6537 Also, the TREE_PURPOSEs must match. */
6540 type_list_equal (const_tree l1, const_tree l2)
6542 const_tree t1, t2;
6544 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6545 if (TREE_VALUE (t1) != TREE_VALUE (t2)
6546 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
6547 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
6548 && (TREE_TYPE (TREE_PURPOSE (t1))
6549 == TREE_TYPE (TREE_PURPOSE (t2))))))
6550 return 0;
6552 return t1 == t2;
6555 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
6556 given by TYPE. If the argument list accepts variable arguments,
6557 then this function counts only the ordinary arguments. */
6560 type_num_arguments (const_tree type)
6562 int i = 0;
6563 tree t;
6565 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6566 /* If the function does not take a variable number of arguments,
6567 the last element in the list will have type `void'. */
6568 if (VOID_TYPE_P (TREE_VALUE (t)))
6569 break;
6570 else
6571 ++i;
6573 return i;
6576 /* Nonzero if integer constants T1 and T2
6577 represent the same constant value. */
6580 tree_int_cst_equal (const_tree t1, const_tree t2)
6582 if (t1 == t2)
6583 return 1;
6585 if (t1 == 0 || t2 == 0)
6586 return 0;
6588 if (TREE_CODE (t1) == INTEGER_CST
6589 && TREE_CODE (t2) == INTEGER_CST
6590 && wi::to_widest (t1) == wi::to_widest (t2))
6591 return 1;
6593 return 0;
6596 /* Return true if T is an INTEGER_CST whose numerical value (extended
6597 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */
6599 bool
6600 tree_fits_shwi_p (const_tree t)
6602 return (t != NULL_TREE
6603 && TREE_CODE (t) == INTEGER_CST
6604 && wi::fits_shwi_p (wi::to_widest (t)));
6607 /* Return true if T is an INTEGER_CST whose numerical value (extended
6608 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */
6610 bool
6611 tree_fits_uhwi_p (const_tree t)
6613 return (t != NULL_TREE
6614 && TREE_CODE (t) == INTEGER_CST
6615 && wi::fits_uhwi_p (wi::to_widest (t)));
6618 /* T is an INTEGER_CST whose numerical value (extended according to
6619 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that
6620 HOST_WIDE_INT. */
6622 HOST_WIDE_INT
6623 tree_to_shwi (const_tree t)
6625 gcc_assert (tree_fits_shwi_p (t));
6626 return TREE_INT_CST_LOW (t);
6629 /* T is an INTEGER_CST whose numerical value (extended according to
6630 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that
6631 HOST_WIDE_INT. */
6633 unsigned HOST_WIDE_INT
6634 tree_to_uhwi (const_tree t)
6636 gcc_assert (tree_fits_uhwi_p (t));
6637 return TREE_INT_CST_LOW (t);
6640 /* Return the most significant (sign) bit of T. */
6643 tree_int_cst_sign_bit (const_tree t)
6645 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
6647 return wi::extract_uhwi (wi::to_wide (t), bitno, 1);
6650 /* Return an indication of the sign of the integer constant T.
6651 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
6652 Note that -1 will never be returned if T's type is unsigned. */
6655 tree_int_cst_sgn (const_tree t)
6657 if (wi::to_wide (t) == 0)
6658 return 0;
6659 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
6660 return 1;
6661 else if (wi::neg_p (wi::to_wide (t)))
6662 return -1;
6663 else
6664 return 1;
6667 /* Return the minimum number of bits needed to represent VALUE in a
6668 signed or unsigned type, UNSIGNEDP says which. */
6670 unsigned int
6671 tree_int_cst_min_precision (tree value, signop sgn)
6673 /* If the value is negative, compute its negative minus 1. The latter
6674 adjustment is because the absolute value of the largest negative value
6675 is one larger than the largest positive value. This is equivalent to
6676 a bit-wise negation, so use that operation instead. */
6678 if (tree_int_cst_sgn (value) < 0)
6679 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
6681 /* Return the number of bits needed, taking into account the fact
6682 that we need one more bit for a signed than unsigned type.
6683 If value is 0 or -1, the minimum precision is 1 no matter
6684 whether unsignedp is true or false. */
6686 if (integer_zerop (value))
6687 return 1;
6688 else
6689 return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
6692 /* Return truthvalue of whether T1 is the same tree structure as T2.
6693 Return 1 if they are the same.
6694 Return 0 if they are understandably different.
6695 Return -1 if either contains tree structure not understood by
6696 this function. */
6699 simple_cst_equal (const_tree t1, const_tree t2)
6701 enum tree_code code1, code2;
6702 int cmp;
6703 int i;
6705 if (t1 == t2)
6706 return 1;
6707 if (t1 == 0 || t2 == 0)
6708 return 0;
6710 code1 = TREE_CODE (t1);
6711 code2 = TREE_CODE (t2);
6713 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
6715 if (CONVERT_EXPR_CODE_P (code2)
6716 || code2 == NON_LVALUE_EXPR)
6717 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6718 else
6719 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
6722 else if (CONVERT_EXPR_CODE_P (code2)
6723 || code2 == NON_LVALUE_EXPR)
6724 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
6726 if (code1 != code2)
6727 return 0;
6729 switch (code1)
6731 case INTEGER_CST:
6732 return wi::to_widest (t1) == wi::to_widest (t2);
6734 case REAL_CST:
6735 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
6737 case FIXED_CST:
6738 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
6740 case STRING_CST:
6741 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
6742 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
6743 TREE_STRING_LENGTH (t1)));
6745 case CONSTRUCTOR:
6747 unsigned HOST_WIDE_INT idx;
6748 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
6749 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
6751 if (vec_safe_length (v1) != vec_safe_length (v2))
6752 return false;
6754 for (idx = 0; idx < vec_safe_length (v1); ++idx)
6755 /* ??? Should we handle also fields here? */
6756 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
6757 return false;
6758 return true;
6761 case SAVE_EXPR:
6762 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6764 case CALL_EXPR:
6765 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
6766 if (cmp <= 0)
6767 return cmp;
6768 if (call_expr_nargs (t1) != call_expr_nargs (t2))
6769 return 0;
6771 const_tree arg1, arg2;
6772 const_call_expr_arg_iterator iter1, iter2;
6773 for (arg1 = first_const_call_expr_arg (t1, &iter1),
6774 arg2 = first_const_call_expr_arg (t2, &iter2);
6775 arg1 && arg2;
6776 arg1 = next_const_call_expr_arg (&iter1),
6777 arg2 = next_const_call_expr_arg (&iter2))
6779 cmp = simple_cst_equal (arg1, arg2);
6780 if (cmp <= 0)
6781 return cmp;
6783 return arg1 == arg2;
6786 case TARGET_EXPR:
6787 /* Special case: if either target is an unallocated VAR_DECL,
6788 it means that it's going to be unified with whatever the
6789 TARGET_EXPR is really supposed to initialize, so treat it
6790 as being equivalent to anything. */
6791 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
6792 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
6793 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
6794 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
6795 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
6796 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
6797 cmp = 1;
6798 else
6799 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6801 if (cmp <= 0)
6802 return cmp;
6804 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
6806 case WITH_CLEANUP_EXPR:
6807 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6808 if (cmp <= 0)
6809 return cmp;
6811 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
6813 case COMPONENT_REF:
6814 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
6815 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
6817 return 0;
6819 case VAR_DECL:
6820 case PARM_DECL:
6821 case CONST_DECL:
6822 case FUNCTION_DECL:
6823 return 0;
6825 default:
6826 break;
6829 /* This general rule works for most tree codes. All exceptions should be
6830 handled above. If this is a language-specific tree code, we can't
6831 trust what might be in the operand, so say we don't know
6832 the situation. */
6833 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
6834 return -1;
6836 switch (TREE_CODE_CLASS (code1))
6838 case tcc_unary:
6839 case tcc_binary:
6840 case tcc_comparison:
6841 case tcc_expression:
6842 case tcc_reference:
6843 case tcc_statement:
6844 cmp = 1;
6845 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
6847 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
6848 if (cmp <= 0)
6849 return cmp;
6852 return cmp;
6854 default:
6855 return -1;
6859 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
6860 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
6861 than U, respectively. */
6864 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
6866 if (tree_int_cst_sgn (t) < 0)
6867 return -1;
6868 else if (!tree_fits_uhwi_p (t))
6869 return 1;
6870 else if (TREE_INT_CST_LOW (t) == u)
6871 return 0;
6872 else if (TREE_INT_CST_LOW (t) < u)
6873 return -1;
6874 else
6875 return 1;
6878 /* Return true if SIZE represents a constant size that is in bounds of
6879 what the middle-end and the backend accepts (covering not more than
6880 half of the address-space). */
6882 bool
6883 valid_constant_size_p (const_tree size)
6885 if (! tree_fits_uhwi_p (size)
6886 || TREE_OVERFLOW (size)
6887 || tree_int_cst_sign_bit (size) != 0)
6888 return false;
6889 return true;
6892 /* Return the precision of the type, or for a complex or vector type the
6893 precision of the type of its elements. */
6895 unsigned int
6896 element_precision (const_tree type)
6898 if (!TYPE_P (type))
6899 type = TREE_TYPE (type);
6900 enum tree_code code = TREE_CODE (type);
6901 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
6902 type = TREE_TYPE (type);
6904 return TYPE_PRECISION (type);
6907 /* Return true if CODE represents an associative tree code. Otherwise
6908 return false. */
6909 bool
6910 associative_tree_code (enum tree_code code)
6912 switch (code)
6914 case BIT_IOR_EXPR:
6915 case BIT_AND_EXPR:
6916 case BIT_XOR_EXPR:
6917 case PLUS_EXPR:
6918 case MULT_EXPR:
6919 case MIN_EXPR:
6920 case MAX_EXPR:
6921 return true;
6923 default:
6924 break;
6926 return false;
6929 /* Return true if CODE represents a commutative tree code. Otherwise
6930 return false. */
6931 bool
6932 commutative_tree_code (enum tree_code code)
6934 switch (code)
6936 case PLUS_EXPR:
6937 case MULT_EXPR:
6938 case MULT_HIGHPART_EXPR:
6939 case MIN_EXPR:
6940 case MAX_EXPR:
6941 case BIT_IOR_EXPR:
6942 case BIT_XOR_EXPR:
6943 case BIT_AND_EXPR:
6944 case NE_EXPR:
6945 case EQ_EXPR:
6946 case UNORDERED_EXPR:
6947 case ORDERED_EXPR:
6948 case UNEQ_EXPR:
6949 case LTGT_EXPR:
6950 case TRUTH_AND_EXPR:
6951 case TRUTH_XOR_EXPR:
6952 case TRUTH_OR_EXPR:
6953 case WIDEN_MULT_EXPR:
6954 case VEC_WIDEN_MULT_HI_EXPR:
6955 case VEC_WIDEN_MULT_LO_EXPR:
6956 case VEC_WIDEN_MULT_EVEN_EXPR:
6957 case VEC_WIDEN_MULT_ODD_EXPR:
6958 return true;
6960 default:
6961 break;
6963 return false;
6966 /* Return true if CODE represents a ternary tree code for which the
6967 first two operands are commutative. Otherwise return false. */
6968 bool
6969 commutative_ternary_tree_code (enum tree_code code)
6971 switch (code)
6973 case WIDEN_MULT_PLUS_EXPR:
6974 case WIDEN_MULT_MINUS_EXPR:
6975 case DOT_PROD_EXPR:
6976 case FMA_EXPR:
6977 return true;
6979 default:
6980 break;
6982 return false;
6985 /* Returns true if CODE can overflow. */
6987 bool
6988 operation_can_overflow (enum tree_code code)
6990 switch (code)
6992 case PLUS_EXPR:
6993 case MINUS_EXPR:
6994 case MULT_EXPR:
6995 case LSHIFT_EXPR:
6996 /* Can overflow in various ways. */
6997 return true;
6998 case TRUNC_DIV_EXPR:
6999 case EXACT_DIV_EXPR:
7000 case FLOOR_DIV_EXPR:
7001 case CEIL_DIV_EXPR:
7002 /* For INT_MIN / -1. */
7003 return true;
7004 case NEGATE_EXPR:
7005 case ABS_EXPR:
7006 /* For -INT_MIN. */
7007 return true;
7008 default:
7009 /* These operators cannot overflow. */
7010 return false;
7014 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7015 ftrapv doesn't generate trapping insns for CODE. */
7017 bool
7018 operation_no_trapping_overflow (tree type, enum tree_code code)
7020 gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7022 /* We don't generate instructions that trap on overflow for complex or vector
7023 types. */
7024 if (!INTEGRAL_TYPE_P (type))
7025 return true;
7027 if (!TYPE_OVERFLOW_TRAPS (type))
7028 return true;
7030 switch (code)
7032 case PLUS_EXPR:
7033 case MINUS_EXPR:
7034 case MULT_EXPR:
7035 case NEGATE_EXPR:
7036 case ABS_EXPR:
7037 /* These operators can overflow, and -ftrapv generates trapping code for
7038 these. */
7039 return false;
7040 case TRUNC_DIV_EXPR:
7041 case EXACT_DIV_EXPR:
7042 case FLOOR_DIV_EXPR:
7043 case CEIL_DIV_EXPR:
7044 case LSHIFT_EXPR:
7045 /* These operators can overflow, but -ftrapv does not generate trapping
7046 code for these. */
7047 return true;
7048 default:
7049 /* These operators cannot overflow. */
7050 return true;
7054 namespace inchash
7057 /* Generate a hash value for an expression. This can be used iteratively
7058 by passing a previous result as the HSTATE argument.
7060 This function is intended to produce the same hash for expressions which
7061 would compare equal using operand_equal_p. */
7062 void
7063 add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
7065 int i;
7066 enum tree_code code;
7067 enum tree_code_class tclass;
7069 if (t == NULL_TREE || t == error_mark_node)
7071 hstate.merge_hash (0);
7072 return;
7075 if (!(flags & OEP_ADDRESS_OF))
7076 STRIP_NOPS (t);
7078 code = TREE_CODE (t);
7080 switch (code)
7082 /* Alas, constants aren't shared, so we can't rely on pointer
7083 identity. */
7084 case VOID_CST:
7085 hstate.merge_hash (0);
7086 return;
7087 case INTEGER_CST:
7088 gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7089 for (i = 0; i < TREE_INT_CST_EXT_NUNITS (t); i++)
7090 hstate.add_hwi (TREE_INT_CST_ELT (t, i));
7091 return;
7092 case REAL_CST:
7094 unsigned int val2;
7095 if (!HONOR_SIGNED_ZEROS (t) && real_zerop (t))
7096 val2 = rvc_zero;
7097 else
7098 val2 = real_hash (TREE_REAL_CST_PTR (t));
7099 hstate.merge_hash (val2);
7100 return;
7102 case FIXED_CST:
7104 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7105 hstate.merge_hash (val2);
7106 return;
7108 case STRING_CST:
7109 hstate.add ((const void *) TREE_STRING_POINTER (t),
7110 TREE_STRING_LENGTH (t));
7111 return;
7112 case COMPLEX_CST:
7113 inchash::add_expr (TREE_REALPART (t), hstate, flags);
7114 inchash::add_expr (TREE_IMAGPART (t), hstate, flags);
7115 return;
7116 case VECTOR_CST:
7118 unsigned i;
7119 for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7120 inchash::add_expr (VECTOR_CST_ELT (t, i), hstate, flags);
7121 return;
7123 case SSA_NAME:
7124 /* We can just compare by pointer. */
7125 hstate.add_hwi (SSA_NAME_VERSION (t));
7126 return;
7127 case PLACEHOLDER_EXPR:
7128 /* The node itself doesn't matter. */
7129 return;
7130 case BLOCK:
7131 case OMP_CLAUSE:
7132 /* Ignore. */
7133 return;
7134 case TREE_LIST:
7135 /* A list of expressions, for a CALL_EXPR or as the elements of a
7136 VECTOR_CST. */
7137 for (; t; t = TREE_CHAIN (t))
7138 inchash::add_expr (TREE_VALUE (t), hstate, flags);
7139 return;
7140 case CONSTRUCTOR:
7142 unsigned HOST_WIDE_INT idx;
7143 tree field, value;
7144 flags &= ~OEP_ADDRESS_OF;
7145 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7147 inchash::add_expr (field, hstate, flags);
7148 inchash::add_expr (value, hstate, flags);
7150 return;
7152 case STATEMENT_LIST:
7154 tree_stmt_iterator i;
7155 for (i = tsi_start (CONST_CAST_TREE (t));
7156 !tsi_end_p (i); tsi_next (&i))
7157 inchash::add_expr (tsi_stmt (i), hstate, flags);
7158 return;
7160 case TREE_VEC:
7161 for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
7162 inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags);
7163 return;
7164 case FUNCTION_DECL:
7165 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7166 Otherwise nodes that compare equal according to operand_equal_p might
7167 get different hash codes. However, don't do this for machine specific
7168 or front end builtins, since the function code is overloaded in those
7169 cases. */
7170 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7171 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7173 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7174 code = TREE_CODE (t);
7176 /* FALL THROUGH */
7177 default:
7178 tclass = TREE_CODE_CLASS (code);
7180 if (tclass == tcc_declaration)
7182 /* DECL's have a unique ID */
7183 hstate.add_hwi (DECL_UID (t));
7185 else if (tclass == tcc_comparison && !commutative_tree_code (code))
7187 /* For comparisons that can be swapped, use the lower
7188 tree code. */
7189 enum tree_code ccode = swap_tree_comparison (code);
7190 if (code < ccode)
7191 ccode = code;
7192 hstate.add_object (ccode);
7193 inchash::add_expr (TREE_OPERAND (t, ccode != code), hstate, flags);
7194 inchash::add_expr (TREE_OPERAND (t, ccode == code), hstate, flags);
7196 else if (CONVERT_EXPR_CODE_P (code))
7198 /* NOP_EXPR and CONVERT_EXPR are considered equal by
7199 operand_equal_p. */
7200 enum tree_code ccode = NOP_EXPR;
7201 hstate.add_object (ccode);
7203 /* Don't hash the type, that can lead to having nodes which
7204 compare equal according to operand_equal_p, but which
7205 have different hash codes. Make sure to include signedness
7206 in the hash computation. */
7207 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7208 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
7210 /* For OEP_ADDRESS_OF, hash MEM_EXPR[&decl, 0] the same as decl. */
7211 else if (code == MEM_REF
7212 && (flags & OEP_ADDRESS_OF) != 0
7213 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR
7214 && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0))
7215 && integer_zerop (TREE_OPERAND (t, 1)))
7216 inchash::add_expr (TREE_OPERAND (TREE_OPERAND (t, 0), 0),
7217 hstate, flags);
7218 /* Don't ICE on FE specific trees, or their arguments etc.
7219 during operand_equal_p hash verification. */
7220 else if (!IS_EXPR_CODE_CLASS (tclass))
7221 gcc_assert (flags & OEP_HASH_CHECK);
7222 else
7224 unsigned int sflags = flags;
7226 hstate.add_object (code);
7228 switch (code)
7230 case ADDR_EXPR:
7231 gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7232 flags |= OEP_ADDRESS_OF;
7233 sflags = flags;
7234 break;
7236 case INDIRECT_REF:
7237 case MEM_REF:
7238 case TARGET_MEM_REF:
7239 flags &= ~OEP_ADDRESS_OF;
7240 sflags = flags;
7241 break;
7243 case ARRAY_REF:
7244 case ARRAY_RANGE_REF:
7245 case COMPONENT_REF:
7246 case BIT_FIELD_REF:
7247 sflags &= ~OEP_ADDRESS_OF;
7248 break;
7250 case COND_EXPR:
7251 flags &= ~OEP_ADDRESS_OF;
7252 break;
7254 case FMA_EXPR:
7255 case WIDEN_MULT_PLUS_EXPR:
7256 case WIDEN_MULT_MINUS_EXPR:
7258 /* The multiplication operands are commutative. */
7259 inchash::hash one, two;
7260 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
7261 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
7262 hstate.add_commutative (one, two);
7263 inchash::add_expr (TREE_OPERAND (t, 2), two, flags);
7264 return;
7267 case CALL_EXPR:
7268 if (CALL_EXPR_FN (t) == NULL_TREE)
7269 hstate.add_int (CALL_EXPR_IFN (t));
7270 break;
7272 case TARGET_EXPR:
7273 /* For TARGET_EXPR, just hash on the TARGET_EXPR_SLOT.
7274 Usually different TARGET_EXPRs just should use
7275 different temporaries in their slots. */
7276 inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags);
7277 return;
7279 default:
7280 break;
7283 /* Don't hash the type, that can lead to having nodes which
7284 compare equal according to operand_equal_p, but which
7285 have different hash codes. */
7286 if (code == NON_LVALUE_EXPR)
7288 /* Make sure to include signness in the hash computation. */
7289 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7290 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
7293 else if (commutative_tree_code (code))
7295 /* It's a commutative expression. We want to hash it the same
7296 however it appears. We do this by first hashing both operands
7297 and then rehashing based on the order of their independent
7298 hashes. */
7299 inchash::hash one, two;
7300 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
7301 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
7302 hstate.add_commutative (one, two);
7304 else
7305 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
7306 inchash::add_expr (TREE_OPERAND (t, i), hstate,
7307 i == 0 ? flags : sflags);
7309 return;
7315 /* Constructors for pointer, array and function types.
7316 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7317 constructed by language-dependent code, not here.) */
7319 /* Construct, lay out and return the type of pointers to TO_TYPE with
7320 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
7321 reference all of memory. If such a type has already been
7322 constructed, reuse it. */
7324 tree
7325 build_pointer_type_for_mode (tree to_type, machine_mode mode,
7326 bool can_alias_all)
7328 tree t;
7329 bool could_alias = can_alias_all;
7331 if (to_type == error_mark_node)
7332 return error_mark_node;
7334 /* If the pointed-to type has the may_alias attribute set, force
7335 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7336 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7337 can_alias_all = true;
7339 /* In some cases, languages will have things that aren't a POINTER_TYPE
7340 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7341 In that case, return that type without regard to the rest of our
7342 operands.
7344 ??? This is a kludge, but consistent with the way this function has
7345 always operated and there doesn't seem to be a good way to avoid this
7346 at the moment. */
7347 if (TYPE_POINTER_TO (to_type) != 0
7348 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7349 return TYPE_POINTER_TO (to_type);
7351 /* First, if we already have a type for pointers to TO_TYPE and it's
7352 the proper mode, use it. */
7353 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7354 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7355 return t;
7357 t = make_node (POINTER_TYPE);
7359 TREE_TYPE (t) = to_type;
7360 SET_TYPE_MODE (t, mode);
7361 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7362 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7363 TYPE_POINTER_TO (to_type) = t;
7365 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
7366 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
7367 SET_TYPE_STRUCTURAL_EQUALITY (t);
7368 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
7369 TYPE_CANONICAL (t)
7370 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7371 mode, false);
7373 /* Lay out the type. This function has many callers that are concerned
7374 with expression-construction, and this simplifies them all. */
7375 layout_type (t);
7377 return t;
7380 /* By default build pointers in ptr_mode. */
7382 tree
7383 build_pointer_type (tree to_type)
7385 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7386 : TYPE_ADDR_SPACE (to_type);
7387 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7388 return build_pointer_type_for_mode (to_type, pointer_mode, false);
7391 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
7393 tree
7394 build_reference_type_for_mode (tree to_type, machine_mode mode,
7395 bool can_alias_all)
7397 tree t;
7398 bool could_alias = can_alias_all;
7400 if (to_type == error_mark_node)
7401 return error_mark_node;
7403 /* If the pointed-to type has the may_alias attribute set, force
7404 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7405 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7406 can_alias_all = true;
7408 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7409 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7410 In that case, return that type without regard to the rest of our
7411 operands.
7413 ??? This is a kludge, but consistent with the way this function has
7414 always operated and there doesn't seem to be a good way to avoid this
7415 at the moment. */
7416 if (TYPE_REFERENCE_TO (to_type) != 0
7417 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
7418 return TYPE_REFERENCE_TO (to_type);
7420 /* First, if we already have a type for pointers to TO_TYPE and it's
7421 the proper mode, use it. */
7422 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
7423 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7424 return t;
7426 t = make_node (REFERENCE_TYPE);
7428 TREE_TYPE (t) = to_type;
7429 SET_TYPE_MODE (t, mode);
7430 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7431 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
7432 TYPE_REFERENCE_TO (to_type) = t;
7434 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
7435 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
7436 SET_TYPE_STRUCTURAL_EQUALITY (t);
7437 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
7438 TYPE_CANONICAL (t)
7439 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
7440 mode, false);
7442 layout_type (t);
7444 return t;
7448 /* Build the node for the type of references-to-TO_TYPE by default
7449 in ptr_mode. */
7451 tree
7452 build_reference_type (tree to_type)
7454 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7455 : TYPE_ADDR_SPACE (to_type);
7456 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7457 return build_reference_type_for_mode (to_type, pointer_mode, false);
7460 #define MAX_INT_CACHED_PREC \
7461 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
7462 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
7464 /* Builds a signed or unsigned integer type of precision PRECISION.
7465 Used for C bitfields whose precision does not match that of
7466 built-in target types. */
7467 tree
7468 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
7469 int unsignedp)
7471 tree itype, ret;
7473 if (unsignedp)
7474 unsignedp = MAX_INT_CACHED_PREC + 1;
7476 if (precision <= MAX_INT_CACHED_PREC)
7478 itype = nonstandard_integer_type_cache[precision + unsignedp];
7479 if (itype)
7480 return itype;
7483 itype = make_node (INTEGER_TYPE);
7484 TYPE_PRECISION (itype) = precision;
7486 if (unsignedp)
7487 fixup_unsigned_type (itype);
7488 else
7489 fixup_signed_type (itype);
7491 ret = itype;
7493 inchash::hash hstate;
7494 inchash::add_expr (TYPE_MAX_VALUE (itype), hstate);
7495 ret = type_hash_canon (hstate.end (), itype);
7496 if (precision <= MAX_INT_CACHED_PREC)
7497 nonstandard_integer_type_cache[precision + unsignedp] = ret;
7499 return ret;
7502 #define MAX_BOOL_CACHED_PREC \
7503 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
7504 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
7506 /* Builds a boolean type of precision PRECISION.
7507 Used for boolean vectors to choose proper vector element size. */
7508 tree
7509 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
7511 tree type;
7513 if (precision <= MAX_BOOL_CACHED_PREC)
7515 type = nonstandard_boolean_type_cache[precision];
7516 if (type)
7517 return type;
7520 type = make_node (BOOLEAN_TYPE);
7521 TYPE_PRECISION (type) = precision;
7522 fixup_signed_type (type);
7524 if (precision <= MAX_INT_CACHED_PREC)
7525 nonstandard_boolean_type_cache[precision] = type;
7527 return type;
7530 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
7531 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
7532 is true, reuse such a type that has already been constructed. */
7534 static tree
7535 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
7537 tree itype = make_node (INTEGER_TYPE);
7539 TREE_TYPE (itype) = type;
7541 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
7542 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
7544 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
7545 SET_TYPE_MODE (itype, TYPE_MODE (type));
7546 TYPE_SIZE (itype) = TYPE_SIZE (type);
7547 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
7548 SET_TYPE_ALIGN (itype, TYPE_ALIGN (type));
7549 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
7550 SET_TYPE_WARN_IF_NOT_ALIGN (itype, TYPE_WARN_IF_NOT_ALIGN (type));
7552 if (!shared)
7553 return itype;
7555 if ((TYPE_MIN_VALUE (itype)
7556 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
7557 || (TYPE_MAX_VALUE (itype)
7558 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
7560 /* Since we cannot reliably merge this type, we need to compare it using
7561 structural equality checks. */
7562 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7563 return itype;
7566 hashval_t hash = type_hash_canon_hash (itype);
7567 itype = type_hash_canon (hash, itype);
7569 return itype;
7572 /* Wrapper around build_range_type_1 with SHARED set to true. */
7574 tree
7575 build_range_type (tree type, tree lowval, tree highval)
7577 return build_range_type_1 (type, lowval, highval, true);
7580 /* Wrapper around build_range_type_1 with SHARED set to false. */
7582 tree
7583 build_nonshared_range_type (tree type, tree lowval, tree highval)
7585 return build_range_type_1 (type, lowval, highval, false);
7588 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
7589 MAXVAL should be the maximum value in the domain
7590 (one less than the length of the array).
7592 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
7593 We don't enforce this limit, that is up to caller (e.g. language front end).
7594 The limit exists because the result is a signed type and we don't handle
7595 sizes that use more than one HOST_WIDE_INT. */
7597 tree
7598 build_index_type (tree maxval)
7600 return build_range_type (sizetype, size_zero_node, maxval);
7603 /* Return true if the debug information for TYPE, a subtype, should be emitted
7604 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
7605 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
7606 debug info and doesn't reflect the source code. */
7608 bool
7609 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
7611 tree base_type = TREE_TYPE (type), low, high;
7613 /* Subrange types have a base type which is an integral type. */
7614 if (!INTEGRAL_TYPE_P (base_type))
7615 return false;
7617 /* Get the real bounds of the subtype. */
7618 if (lang_hooks.types.get_subrange_bounds)
7619 lang_hooks.types.get_subrange_bounds (type, &low, &high);
7620 else
7622 low = TYPE_MIN_VALUE (type);
7623 high = TYPE_MAX_VALUE (type);
7626 /* If the type and its base type have the same representation and the same
7627 name, then the type is not a subrange but a copy of the base type. */
7628 if ((TREE_CODE (base_type) == INTEGER_TYPE
7629 || TREE_CODE (base_type) == BOOLEAN_TYPE)
7630 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
7631 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
7632 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
7633 && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
7634 return false;
7636 if (lowval)
7637 *lowval = low;
7638 if (highval)
7639 *highval = high;
7640 return true;
7643 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
7644 and number of elements specified by the range of values of INDEX_TYPE.
7645 If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type.
7646 If SHARED is true, reuse such a type that has already been constructed. */
7648 static tree
7649 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
7650 bool shared)
7652 tree t;
7654 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
7656 error ("arrays of functions are not meaningful");
7657 elt_type = integer_type_node;
7660 t = make_node (ARRAY_TYPE);
7661 TREE_TYPE (t) = elt_type;
7662 TYPE_DOMAIN (t) = index_type;
7663 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
7664 TYPE_TYPELESS_STORAGE (t) = typeless_storage;
7665 layout_type (t);
7667 /* If the element type is incomplete at this point we get marked for
7668 structural equality. Do not record these types in the canonical
7669 type hashtable. */
7670 if (TYPE_STRUCTURAL_EQUALITY_P (t))
7671 return t;
7673 if (shared)
7675 hashval_t hash = type_hash_canon_hash (t);
7676 t = type_hash_canon (hash, t);
7679 if (TYPE_CANONICAL (t) == t)
7681 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
7682 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
7683 || in_lto_p)
7684 SET_TYPE_STRUCTURAL_EQUALITY (t);
7685 else if (TYPE_CANONICAL (elt_type) != elt_type
7686 || (index_type && TYPE_CANONICAL (index_type) != index_type))
7687 TYPE_CANONICAL (t)
7688 = build_array_type_1 (TYPE_CANONICAL (elt_type),
7689 index_type
7690 ? TYPE_CANONICAL (index_type) : NULL_TREE,
7691 typeless_storage, shared);
7694 return t;
7697 /* Wrapper around build_array_type_1 with SHARED set to true. */
7699 tree
7700 build_array_type (tree elt_type, tree index_type, bool typeless_storage)
7702 return build_array_type_1 (elt_type, index_type, typeless_storage, true);
7705 /* Wrapper around build_array_type_1 with SHARED set to false. */
7707 tree
7708 build_nonshared_array_type (tree elt_type, tree index_type)
7710 return build_array_type_1 (elt_type, index_type, false, false);
7713 /* Return a representation of ELT_TYPE[NELTS], using indices of type
7714 sizetype. */
7716 tree
7717 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
7719 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
7722 /* Recursively examines the array elements of TYPE, until a non-array
7723 element type is found. */
7725 tree
7726 strip_array_types (tree type)
7728 while (TREE_CODE (type) == ARRAY_TYPE)
7729 type = TREE_TYPE (type);
7731 return type;
7734 /* Computes the canonical argument types from the argument type list
7735 ARGTYPES.
7737 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
7738 on entry to this function, or if any of the ARGTYPES are
7739 structural.
7741 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
7742 true on entry to this function, or if any of the ARGTYPES are
7743 non-canonical.
7745 Returns a canonical argument list, which may be ARGTYPES when the
7746 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
7747 true) or would not differ from ARGTYPES. */
7749 static tree
7750 maybe_canonicalize_argtypes (tree argtypes,
7751 bool *any_structural_p,
7752 bool *any_noncanonical_p)
7754 tree arg;
7755 bool any_noncanonical_argtypes_p = false;
7757 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
7759 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
7760 /* Fail gracefully by stating that the type is structural. */
7761 *any_structural_p = true;
7762 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
7763 *any_structural_p = true;
7764 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
7765 || TREE_PURPOSE (arg))
7766 /* If the argument has a default argument, we consider it
7767 non-canonical even though the type itself is canonical.
7768 That way, different variants of function and method types
7769 with default arguments will all point to the variant with
7770 no defaults as their canonical type. */
7771 any_noncanonical_argtypes_p = true;
7774 if (*any_structural_p)
7775 return argtypes;
7777 if (any_noncanonical_argtypes_p)
7779 /* Build the canonical list of argument types. */
7780 tree canon_argtypes = NULL_TREE;
7781 bool is_void = false;
7783 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
7785 if (arg == void_list_node)
7786 is_void = true;
7787 else
7788 canon_argtypes = tree_cons (NULL_TREE,
7789 TYPE_CANONICAL (TREE_VALUE (arg)),
7790 canon_argtypes);
7793 canon_argtypes = nreverse (canon_argtypes);
7794 if (is_void)
7795 canon_argtypes = chainon (canon_argtypes, void_list_node);
7797 /* There is a non-canonical type. */
7798 *any_noncanonical_p = true;
7799 return canon_argtypes;
7802 /* The canonical argument types are the same as ARGTYPES. */
7803 return argtypes;
7806 /* Construct, lay out and return
7807 the type of functions returning type VALUE_TYPE
7808 given arguments of types ARG_TYPES.
7809 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
7810 are data type nodes for the arguments of the function.
7811 If such a type has already been constructed, reuse it. */
7813 tree
7814 build_function_type (tree value_type, tree arg_types)
7816 tree t;
7817 inchash::hash hstate;
7818 bool any_structural_p, any_noncanonical_p;
7819 tree canon_argtypes;
7821 if (TREE_CODE (value_type) == FUNCTION_TYPE)
7823 error ("function return type cannot be function");
7824 value_type = integer_type_node;
7827 /* Make a node of the sort we want. */
7828 t = make_node (FUNCTION_TYPE);
7829 TREE_TYPE (t) = value_type;
7830 TYPE_ARG_TYPES (t) = arg_types;
7832 /* If we already have such a type, use the old one. */
7833 hashval_t hash = type_hash_canon_hash (t);
7834 t = type_hash_canon (hash, t);
7836 /* Set up the canonical type. */
7837 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
7838 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
7839 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
7840 &any_structural_p,
7841 &any_noncanonical_p);
7842 if (any_structural_p)
7843 SET_TYPE_STRUCTURAL_EQUALITY (t);
7844 else if (any_noncanonical_p)
7845 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
7846 canon_argtypes);
7848 if (!COMPLETE_TYPE_P (t))
7849 layout_type (t);
7850 return t;
7853 /* Build a function type. The RETURN_TYPE is the type returned by the
7854 function. If VAARGS is set, no void_type_node is appended to the
7855 list. ARGP must be always be terminated be a NULL_TREE. */
7857 static tree
7858 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
7860 tree t, args, last;
7862 t = va_arg (argp, tree);
7863 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
7864 args = tree_cons (NULL_TREE, t, args);
7866 if (vaargs)
7868 last = args;
7869 if (args != NULL_TREE)
7870 args = nreverse (args);
7871 gcc_assert (last != void_list_node);
7873 else if (args == NULL_TREE)
7874 args = void_list_node;
7875 else
7877 last = args;
7878 args = nreverse (args);
7879 TREE_CHAIN (last) = void_list_node;
7881 args = build_function_type (return_type, args);
7883 return args;
7886 /* Build a function type. The RETURN_TYPE is the type returned by the
7887 function. If additional arguments are provided, they are
7888 additional argument types. The list of argument types must always
7889 be terminated by NULL_TREE. */
7891 tree
7892 build_function_type_list (tree return_type, ...)
7894 tree args;
7895 va_list p;
7897 va_start (p, return_type);
7898 args = build_function_type_list_1 (false, return_type, p);
7899 va_end (p);
7900 return args;
7903 /* Build a variable argument function type. The RETURN_TYPE is the
7904 type returned by the function. If additional arguments are provided,
7905 they are additional argument types. The list of argument types must
7906 always be terminated by NULL_TREE. */
7908 tree
7909 build_varargs_function_type_list (tree return_type, ...)
7911 tree args;
7912 va_list p;
7914 va_start (p, return_type);
7915 args = build_function_type_list_1 (true, return_type, p);
7916 va_end (p);
7918 return args;
7921 /* Build a function type. RETURN_TYPE is the type returned by the
7922 function; VAARGS indicates whether the function takes varargs. The
7923 function takes N named arguments, the types of which are provided in
7924 ARG_TYPES. */
7926 static tree
7927 build_function_type_array_1 (bool vaargs, tree return_type, int n,
7928 tree *arg_types)
7930 int i;
7931 tree t = vaargs ? NULL_TREE : void_list_node;
7933 for (i = n - 1; i >= 0; i--)
7934 t = tree_cons (NULL_TREE, arg_types[i], t);
7936 return build_function_type (return_type, t);
7939 /* Build a function type. RETURN_TYPE is the type returned by the
7940 function. The function takes N named arguments, the types of which
7941 are provided in ARG_TYPES. */
7943 tree
7944 build_function_type_array (tree return_type, int n, tree *arg_types)
7946 return build_function_type_array_1 (false, return_type, n, arg_types);
7949 /* Build a variable argument function type. RETURN_TYPE is the type
7950 returned by the function. The function takes N named arguments, the
7951 types of which are provided in ARG_TYPES. */
7953 tree
7954 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
7956 return build_function_type_array_1 (true, return_type, n, arg_types);
7959 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
7960 and ARGTYPES (a TREE_LIST) are the return type and arguments types
7961 for the method. An implicit additional parameter (of type
7962 pointer-to-BASETYPE) is added to the ARGTYPES. */
7964 tree
7965 build_method_type_directly (tree basetype,
7966 tree rettype,
7967 tree argtypes)
7969 tree t;
7970 tree ptype;
7971 bool any_structural_p, any_noncanonical_p;
7972 tree canon_argtypes;
7974 /* Make a node of the sort we want. */
7975 t = make_node (METHOD_TYPE);
7977 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
7978 TREE_TYPE (t) = rettype;
7979 ptype = build_pointer_type (basetype);
7981 /* The actual arglist for this function includes a "hidden" argument
7982 which is "this". Put it into the list of argument types. */
7983 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
7984 TYPE_ARG_TYPES (t) = argtypes;
7986 /* If we already have such a type, use the old one. */
7987 hashval_t hash = type_hash_canon_hash (t);
7988 t = type_hash_canon (hash, t);
7990 /* Set up the canonical type. */
7991 any_structural_p
7992 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
7993 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
7994 any_noncanonical_p
7995 = (TYPE_CANONICAL (basetype) != basetype
7996 || TYPE_CANONICAL (rettype) != rettype);
7997 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
7998 &any_structural_p,
7999 &any_noncanonical_p);
8000 if (any_structural_p)
8001 SET_TYPE_STRUCTURAL_EQUALITY (t);
8002 else if (any_noncanonical_p)
8003 TYPE_CANONICAL (t)
8004 = build_method_type_directly (TYPE_CANONICAL (basetype),
8005 TYPE_CANONICAL (rettype),
8006 canon_argtypes);
8007 if (!COMPLETE_TYPE_P (t))
8008 layout_type (t);
8010 return t;
8013 /* Construct, lay out and return the type of methods belonging to class
8014 BASETYPE and whose arguments and values are described by TYPE.
8015 If that type exists already, reuse it.
8016 TYPE must be a FUNCTION_TYPE node. */
8018 tree
8019 build_method_type (tree basetype, tree type)
8021 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8023 return build_method_type_directly (basetype,
8024 TREE_TYPE (type),
8025 TYPE_ARG_TYPES (type));
8028 /* Construct, lay out and return the type of offsets to a value
8029 of type TYPE, within an object of type BASETYPE.
8030 If a suitable offset type exists already, reuse it. */
8032 tree
8033 build_offset_type (tree basetype, tree type)
8035 tree t;
8037 /* Make a node of the sort we want. */
8038 t = make_node (OFFSET_TYPE);
8040 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8041 TREE_TYPE (t) = type;
8043 /* If we already have such a type, use the old one. */
8044 hashval_t hash = type_hash_canon_hash (t);
8045 t = type_hash_canon (hash, t);
8047 if (!COMPLETE_TYPE_P (t))
8048 layout_type (t);
8050 if (TYPE_CANONICAL (t) == t)
8052 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8053 || TYPE_STRUCTURAL_EQUALITY_P (type))
8054 SET_TYPE_STRUCTURAL_EQUALITY (t);
8055 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8056 || TYPE_CANONICAL (type) != type)
8057 TYPE_CANONICAL (t)
8058 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8059 TYPE_CANONICAL (type));
8062 return t;
8065 /* Create a complex type whose components are COMPONENT_TYPE.
8067 If NAMED is true, the type is given a TYPE_NAME. We do not always
8068 do so because this creates a DECL node and thus make the DECL_UIDs
8069 dependent on the type canonicalization hashtable, which is GC-ed,
8070 so the DECL_UIDs would not be stable wrt garbage collection. */
8072 tree
8073 build_complex_type (tree component_type, bool named)
8075 gcc_assert (INTEGRAL_TYPE_P (component_type)
8076 || SCALAR_FLOAT_TYPE_P (component_type)
8077 || FIXED_POINT_TYPE_P (component_type));
8079 /* Make a node of the sort we want. */
8080 tree probe = make_node (COMPLEX_TYPE);
8082 TREE_TYPE (probe) = TYPE_MAIN_VARIANT (component_type);
8084 /* If we already have such a type, use the old one. */
8085 hashval_t hash = type_hash_canon_hash (probe);
8086 tree t = type_hash_canon (hash, probe);
8088 if (t == probe)
8090 /* We created a new type. The hash insertion will have laid
8091 out the type. We need to check the canonicalization and
8092 maybe set the name. */
8093 gcc_checking_assert (COMPLETE_TYPE_P (t)
8094 && !TYPE_NAME (t)
8095 && TYPE_CANONICAL (t) == t);
8097 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (t)))
8098 SET_TYPE_STRUCTURAL_EQUALITY (t);
8099 else if (TYPE_CANONICAL (TREE_TYPE (t)) != TREE_TYPE (t))
8100 TYPE_CANONICAL (t)
8101 = build_complex_type (TYPE_CANONICAL (TREE_TYPE (t)), named);
8103 /* We need to create a name, since complex is a fundamental type. */
8104 if (named)
8106 const char *name = NULL;
8108 if (TREE_TYPE (t) == char_type_node)
8109 name = "complex char";
8110 else if (TREE_TYPE (t) == signed_char_type_node)
8111 name = "complex signed char";
8112 else if (TREE_TYPE (t) == unsigned_char_type_node)
8113 name = "complex unsigned char";
8114 else if (TREE_TYPE (t) == short_integer_type_node)
8115 name = "complex short int";
8116 else if (TREE_TYPE (t) == short_unsigned_type_node)
8117 name = "complex short unsigned int";
8118 else if (TREE_TYPE (t) == integer_type_node)
8119 name = "complex int";
8120 else if (TREE_TYPE (t) == unsigned_type_node)
8121 name = "complex unsigned int";
8122 else if (TREE_TYPE (t) == long_integer_type_node)
8123 name = "complex long int";
8124 else if (TREE_TYPE (t) == long_unsigned_type_node)
8125 name = "complex long unsigned int";
8126 else if (TREE_TYPE (t) == long_long_integer_type_node)
8127 name = "complex long long int";
8128 else if (TREE_TYPE (t) == long_long_unsigned_type_node)
8129 name = "complex long long unsigned int";
8131 if (name != NULL)
8132 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8133 get_identifier (name), t);
8137 return build_qualified_type (t, TYPE_QUALS (component_type));
8140 /* If TYPE is a real or complex floating-point type and the target
8141 does not directly support arithmetic on TYPE then return the wider
8142 type to be used for arithmetic on TYPE. Otherwise, return
8143 NULL_TREE. */
8145 tree
8146 excess_precision_type (tree type)
8148 /* The target can give two different responses to the question of
8149 which excess precision mode it would like depending on whether we
8150 are in -fexcess-precision=standard or -fexcess-precision=fast. */
8152 enum excess_precision_type requested_type
8153 = (flag_excess_precision == EXCESS_PRECISION_FAST
8154 ? EXCESS_PRECISION_TYPE_FAST
8155 : EXCESS_PRECISION_TYPE_STANDARD);
8157 enum flt_eval_method target_flt_eval_method
8158 = targetm.c.excess_precision (requested_type);
8160 /* The target should not ask for unpredictable float evaluation (though
8161 it might advertise that implicitly the evaluation is unpredictable,
8162 but we don't care about that here, it will have been reported
8163 elsewhere). If it does ask for unpredictable evaluation, we have
8164 nothing to do here. */
8165 gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE);
8167 /* Nothing to do. The target has asked for all types we know about
8168 to be computed with their native precision and range. */
8169 if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16)
8170 return NULL_TREE;
8172 /* The target will promote this type in a target-dependent way, so excess
8173 precision ought to leave it alone. */
8174 if (targetm.promoted_type (type) != NULL_TREE)
8175 return NULL_TREE;
8177 machine_mode float16_type_mode = (float16_type_node
8178 ? TYPE_MODE (float16_type_node)
8179 : VOIDmode);
8180 machine_mode float_type_mode = TYPE_MODE (float_type_node);
8181 machine_mode double_type_mode = TYPE_MODE (double_type_node);
8183 switch (TREE_CODE (type))
8185 case REAL_TYPE:
8187 machine_mode type_mode = TYPE_MODE (type);
8188 switch (target_flt_eval_method)
8190 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8191 if (type_mode == float16_type_mode)
8192 return float_type_node;
8193 break;
8194 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8195 if (type_mode == float16_type_mode
8196 || type_mode == float_type_mode)
8197 return double_type_node;
8198 break;
8199 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8200 if (type_mode == float16_type_mode
8201 || type_mode == float_type_mode
8202 || type_mode == double_type_mode)
8203 return long_double_type_node;
8204 break;
8205 default:
8206 gcc_unreachable ();
8208 break;
8210 case COMPLEX_TYPE:
8212 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8213 return NULL_TREE;
8214 machine_mode type_mode = TYPE_MODE (TREE_TYPE (type));
8215 switch (target_flt_eval_method)
8217 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8218 if (type_mode == float16_type_mode)
8219 return complex_float_type_node;
8220 break;
8221 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8222 if (type_mode == float16_type_mode
8223 || type_mode == float_type_mode)
8224 return complex_double_type_node;
8225 break;
8226 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8227 if (type_mode == float16_type_mode
8228 || type_mode == float_type_mode
8229 || type_mode == double_type_mode)
8230 return complex_long_double_type_node;
8231 break;
8232 default:
8233 gcc_unreachable ();
8235 break;
8237 default:
8238 break;
8241 return NULL_TREE;
8244 /* Return OP, stripped of any conversions to wider types as much as is safe.
8245 Converting the value back to OP's type makes a value equivalent to OP.
8247 If FOR_TYPE is nonzero, we return a value which, if converted to
8248 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8250 OP must have integer, real or enumeral type. Pointers are not allowed!
8252 There are some cases where the obvious value we could return
8253 would regenerate to OP if converted to OP's type,
8254 but would not extend like OP to wider types.
8255 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8256 For example, if OP is (unsigned short)(signed char)-1,
8257 we avoid returning (signed char)-1 if FOR_TYPE is int,
8258 even though extending that to an unsigned short would regenerate OP,
8259 since the result of extending (signed char)-1 to (int)
8260 is different from (int) OP. */
8262 tree
8263 get_unwidened (tree op, tree for_type)
8265 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
8266 tree type = TREE_TYPE (op);
8267 unsigned final_prec
8268 = TYPE_PRECISION (for_type != 0 ? for_type : type);
8269 int uns
8270 = (for_type != 0 && for_type != type
8271 && final_prec > TYPE_PRECISION (type)
8272 && TYPE_UNSIGNED (type));
8273 tree win = op;
8275 while (CONVERT_EXPR_P (op))
8277 int bitschange;
8279 /* TYPE_PRECISION on vector types has different meaning
8280 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8281 so avoid them here. */
8282 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8283 break;
8285 bitschange = TYPE_PRECISION (TREE_TYPE (op))
8286 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8288 /* Truncations are many-one so cannot be removed.
8289 Unless we are later going to truncate down even farther. */
8290 if (bitschange < 0
8291 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8292 break;
8294 /* See what's inside this conversion. If we decide to strip it,
8295 we will set WIN. */
8296 op = TREE_OPERAND (op, 0);
8298 /* If we have not stripped any zero-extensions (uns is 0),
8299 we can strip any kind of extension.
8300 If we have previously stripped a zero-extension,
8301 only zero-extensions can safely be stripped.
8302 Any extension can be stripped if the bits it would produce
8303 are all going to be discarded later by truncating to FOR_TYPE. */
8305 if (bitschange > 0)
8307 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8308 win = op;
8309 /* TYPE_UNSIGNED says whether this is a zero-extension.
8310 Let's avoid computing it if it does not affect WIN
8311 and if UNS will not be needed again. */
8312 if ((uns
8313 || CONVERT_EXPR_P (op))
8314 && TYPE_UNSIGNED (TREE_TYPE (op)))
8316 uns = 1;
8317 win = op;
8322 /* If we finally reach a constant see if it fits in sth smaller and
8323 in that case convert it. */
8324 if (TREE_CODE (win) == INTEGER_CST)
8326 tree wtype = TREE_TYPE (win);
8327 unsigned prec = wi::min_precision (wi::to_wide (win), TYPE_SIGN (wtype));
8328 if (for_type)
8329 prec = MAX (prec, final_prec);
8330 if (prec < TYPE_PRECISION (wtype))
8332 tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype));
8333 if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype))
8334 win = fold_convert (t, win);
8338 return win;
8341 /* Return OP or a simpler expression for a narrower value
8342 which can be sign-extended or zero-extended to give back OP.
8343 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8344 or 0 if the value should be sign-extended. */
8346 tree
8347 get_narrower (tree op, int *unsignedp_ptr)
8349 int uns = 0;
8350 int first = 1;
8351 tree win = op;
8352 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8354 while (TREE_CODE (op) == NOP_EXPR)
8356 int bitschange
8357 = (TYPE_PRECISION (TREE_TYPE (op))
8358 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8360 /* Truncations are many-one so cannot be removed. */
8361 if (bitschange < 0)
8362 break;
8364 /* See what's inside this conversion. If we decide to strip it,
8365 we will set WIN. */
8367 if (bitschange > 0)
8369 op = TREE_OPERAND (op, 0);
8370 /* An extension: the outermost one can be stripped,
8371 but remember whether it is zero or sign extension. */
8372 if (first)
8373 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8374 /* Otherwise, if a sign extension has been stripped,
8375 only sign extensions can now be stripped;
8376 if a zero extension has been stripped, only zero-extensions. */
8377 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8378 break;
8379 first = 0;
8381 else /* bitschange == 0 */
8383 /* A change in nominal type can always be stripped, but we must
8384 preserve the unsignedness. */
8385 if (first)
8386 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8387 first = 0;
8388 op = TREE_OPERAND (op, 0);
8389 /* Keep trying to narrow, but don't assign op to win if it
8390 would turn an integral type into something else. */
8391 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8392 continue;
8395 win = op;
8398 if (TREE_CODE (op) == COMPONENT_REF
8399 /* Since type_for_size always gives an integer type. */
8400 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8401 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8402 /* Ensure field is laid out already. */
8403 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8404 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
8406 unsigned HOST_WIDE_INT innerprec
8407 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
8408 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8409 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8410 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8412 /* We can get this structure field in a narrower type that fits it,
8413 but the resulting extension to its nominal type (a fullword type)
8414 must satisfy the same conditions as for other extensions.
8416 Do this only for fields that are aligned (not bit-fields),
8417 because when bit-field insns will be used there is no
8418 advantage in doing this. */
8420 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8421 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8422 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8423 && type != 0)
8425 if (first)
8426 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8427 win = fold_convert (type, op);
8431 *unsignedp_ptr = uns;
8432 return win;
8435 /* Return true if integer constant C has a value that is permissible
8436 for TYPE, an integral type. */
8438 bool
8439 int_fits_type_p (const_tree c, const_tree type)
8441 tree type_low_bound, type_high_bound;
8442 bool ok_for_low_bound, ok_for_high_bound;
8443 signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
8445 /* Non-standard boolean types can have arbitrary precision but various
8446 transformations assume that they can only take values 0 and +/-1. */
8447 if (TREE_CODE (type) == BOOLEAN_TYPE)
8448 return wi::fits_to_boolean_p (wi::to_wide (c), type);
8450 retry:
8451 type_low_bound = TYPE_MIN_VALUE (type);
8452 type_high_bound = TYPE_MAX_VALUE (type);
8454 /* If at least one bound of the type is a constant integer, we can check
8455 ourselves and maybe make a decision. If no such decision is possible, but
8456 this type is a subtype, try checking against that. Otherwise, use
8457 fits_to_tree_p, which checks against the precision.
8459 Compute the status for each possibly constant bound, and return if we see
8460 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
8461 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
8462 for "constant known to fit". */
8464 /* Check if c >= type_low_bound. */
8465 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
8467 if (tree_int_cst_lt (c, type_low_bound))
8468 return false;
8469 ok_for_low_bound = true;
8471 else
8472 ok_for_low_bound = false;
8474 /* Check if c <= type_high_bound. */
8475 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
8477 if (tree_int_cst_lt (type_high_bound, c))
8478 return false;
8479 ok_for_high_bound = true;
8481 else
8482 ok_for_high_bound = false;
8484 /* If the constant fits both bounds, the result is known. */
8485 if (ok_for_low_bound && ok_for_high_bound)
8486 return true;
8488 /* Perform some generic filtering which may allow making a decision
8489 even if the bounds are not constant. First, negative integers
8490 never fit in unsigned types, */
8491 if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (wi::to_wide (c)))
8492 return false;
8494 /* Second, narrower types always fit in wider ones. */
8495 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
8496 return true;
8498 /* Third, unsigned integers with top bit set never fit signed types. */
8499 if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
8501 int prec = GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (TREE_TYPE (c))) - 1;
8502 if (prec < TYPE_PRECISION (TREE_TYPE (c)))
8504 /* When a tree_cst is converted to a wide-int, the precision
8505 is taken from the type. However, if the precision of the
8506 mode underneath the type is smaller than that, it is
8507 possible that the value will not fit. The test below
8508 fails if any bit is set between the sign bit of the
8509 underlying mode and the top bit of the type. */
8510 if (wi::zext (wi::to_wide (c), prec - 1) != wi::to_wide (c))
8511 return false;
8513 else if (wi::neg_p (wi::to_wide (c)))
8514 return false;
8517 /* If we haven't been able to decide at this point, there nothing more we
8518 can check ourselves here. Look at the base type if we have one and it
8519 has the same precision. */
8520 if (TREE_CODE (type) == INTEGER_TYPE
8521 && TREE_TYPE (type) != 0
8522 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
8524 type = TREE_TYPE (type);
8525 goto retry;
8528 /* Or to fits_to_tree_p, if nothing else. */
8529 return wi::fits_to_tree_p (wi::to_wide (c), type);
8532 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
8533 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
8534 represented (assuming two's-complement arithmetic) within the bit
8535 precision of the type are returned instead. */
8537 void
8538 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
8540 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
8541 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
8542 wi::to_mpz (wi::to_wide (TYPE_MIN_VALUE (type)), min, TYPE_SIGN (type));
8543 else
8545 if (TYPE_UNSIGNED (type))
8546 mpz_set_ui (min, 0);
8547 else
8549 wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
8550 wi::to_mpz (mn, min, SIGNED);
8554 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
8555 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
8556 wi::to_mpz (wi::to_wide (TYPE_MAX_VALUE (type)), max, TYPE_SIGN (type));
8557 else
8559 wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
8560 wi::to_mpz (mn, max, TYPE_SIGN (type));
8564 /* Return true if VAR is an automatic variable defined in function FN. */
8566 bool
8567 auto_var_in_fn_p (const_tree var, const_tree fn)
8569 return (DECL_P (var) && DECL_CONTEXT (var) == fn
8570 && ((((VAR_P (var) && ! DECL_EXTERNAL (var))
8571 || TREE_CODE (var) == PARM_DECL)
8572 && ! TREE_STATIC (var))
8573 || TREE_CODE (var) == LABEL_DECL
8574 || TREE_CODE (var) == RESULT_DECL));
8577 /* Subprogram of following function. Called by walk_tree.
8579 Return *TP if it is an automatic variable or parameter of the
8580 function passed in as DATA. */
8582 static tree
8583 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
8585 tree fn = (tree) data;
8587 if (TYPE_P (*tp))
8588 *walk_subtrees = 0;
8590 else if (DECL_P (*tp)
8591 && auto_var_in_fn_p (*tp, fn))
8592 return *tp;
8594 return NULL_TREE;
8597 /* Returns true if T is, contains, or refers to a type with variable
8598 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
8599 arguments, but not the return type. If FN is nonzero, only return
8600 true if a modifier of the type or position of FN is a variable or
8601 parameter inside FN.
8603 This concept is more general than that of C99 'variably modified types':
8604 in C99, a struct type is never variably modified because a VLA may not
8605 appear as a structure member. However, in GNU C code like:
8607 struct S { int i[f()]; };
8609 is valid, and other languages may define similar constructs. */
8611 bool
8612 variably_modified_type_p (tree type, tree fn)
8614 tree t;
8616 /* Test if T is either variable (if FN is zero) or an expression containing
8617 a variable in FN. If TYPE isn't gimplified, return true also if
8618 gimplify_one_sizepos would gimplify the expression into a local
8619 variable. */
8620 #define RETURN_TRUE_IF_VAR(T) \
8621 do { tree _t = (T); \
8622 if (_t != NULL_TREE \
8623 && _t != error_mark_node \
8624 && TREE_CODE (_t) != INTEGER_CST \
8625 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
8626 && (!fn \
8627 || (!TYPE_SIZES_GIMPLIFIED (type) \
8628 && !is_gimple_sizepos (_t)) \
8629 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
8630 return true; } while (0)
8632 if (type == error_mark_node)
8633 return false;
8635 /* If TYPE itself has variable size, it is variably modified. */
8636 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
8637 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
8639 switch (TREE_CODE (type))
8641 case POINTER_TYPE:
8642 case REFERENCE_TYPE:
8643 case VECTOR_TYPE:
8644 /* Ada can have pointer types refering to themselves indirectly. */
8645 if (TREE_VISITED (type))
8646 return false;
8647 TREE_VISITED (type) = true;
8648 if (variably_modified_type_p (TREE_TYPE (type), fn))
8650 TREE_VISITED (type) = false;
8651 return true;
8653 TREE_VISITED (type) = false;
8654 break;
8656 case FUNCTION_TYPE:
8657 case METHOD_TYPE:
8658 /* If TYPE is a function type, it is variably modified if the
8659 return type is variably modified. */
8660 if (variably_modified_type_p (TREE_TYPE (type), fn))
8661 return true;
8662 break;
8664 case INTEGER_TYPE:
8665 case REAL_TYPE:
8666 case FIXED_POINT_TYPE:
8667 case ENUMERAL_TYPE:
8668 case BOOLEAN_TYPE:
8669 /* Scalar types are variably modified if their end points
8670 aren't constant. */
8671 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
8672 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
8673 break;
8675 case RECORD_TYPE:
8676 case UNION_TYPE:
8677 case QUAL_UNION_TYPE:
8678 /* We can't see if any of the fields are variably-modified by the
8679 definition we normally use, since that would produce infinite
8680 recursion via pointers. */
8681 /* This is variably modified if some field's type is. */
8682 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
8683 if (TREE_CODE (t) == FIELD_DECL)
8685 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
8686 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
8687 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
8689 if (TREE_CODE (type) == QUAL_UNION_TYPE)
8690 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
8692 break;
8694 case ARRAY_TYPE:
8695 /* Do not call ourselves to avoid infinite recursion. This is
8696 variably modified if the element type is. */
8697 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
8698 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
8699 break;
8701 default:
8702 break;
8705 /* The current language may have other cases to check, but in general,
8706 all other types are not variably modified. */
8707 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
8709 #undef RETURN_TRUE_IF_VAR
8712 /* Given a DECL or TYPE, return the scope in which it was declared, or
8713 NULL_TREE if there is no containing scope. */
8715 tree
8716 get_containing_scope (const_tree t)
8718 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
8721 /* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL. */
8723 const_tree
8724 get_ultimate_context (const_tree decl)
8726 while (decl && TREE_CODE (decl) != TRANSLATION_UNIT_DECL)
8728 if (TREE_CODE (decl) == BLOCK)
8729 decl = BLOCK_SUPERCONTEXT (decl);
8730 else
8731 decl = get_containing_scope (decl);
8733 return decl;
8736 /* Return the innermost context enclosing DECL that is
8737 a FUNCTION_DECL, or zero if none. */
8739 tree
8740 decl_function_context (const_tree decl)
8742 tree context;
8744 if (TREE_CODE (decl) == ERROR_MARK)
8745 return 0;
8747 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
8748 where we look up the function at runtime. Such functions always take
8749 a first argument of type 'pointer to real context'.
8751 C++ should really be fixed to use DECL_CONTEXT for the real context,
8752 and use something else for the "virtual context". */
8753 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
8754 context
8755 = TYPE_MAIN_VARIANT
8756 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
8757 else
8758 context = DECL_CONTEXT (decl);
8760 while (context && TREE_CODE (context) != FUNCTION_DECL)
8762 if (TREE_CODE (context) == BLOCK)
8763 context = BLOCK_SUPERCONTEXT (context);
8764 else
8765 context = get_containing_scope (context);
8768 return context;
8771 /* Return the innermost context enclosing DECL that is
8772 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
8773 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
8775 tree
8776 decl_type_context (const_tree decl)
8778 tree context = DECL_CONTEXT (decl);
8780 while (context)
8781 switch (TREE_CODE (context))
8783 case NAMESPACE_DECL:
8784 case TRANSLATION_UNIT_DECL:
8785 return NULL_TREE;
8787 case RECORD_TYPE:
8788 case UNION_TYPE:
8789 case QUAL_UNION_TYPE:
8790 return context;
8792 case TYPE_DECL:
8793 case FUNCTION_DECL:
8794 context = DECL_CONTEXT (context);
8795 break;
8797 case BLOCK:
8798 context = BLOCK_SUPERCONTEXT (context);
8799 break;
8801 default:
8802 gcc_unreachable ();
8805 return NULL_TREE;
8808 /* CALL is a CALL_EXPR. Return the declaration for the function
8809 called, or NULL_TREE if the called function cannot be
8810 determined. */
8812 tree
8813 get_callee_fndecl (const_tree call)
8815 tree addr;
8817 if (call == error_mark_node)
8818 return error_mark_node;
8820 /* It's invalid to call this function with anything but a
8821 CALL_EXPR. */
8822 gcc_assert (TREE_CODE (call) == CALL_EXPR);
8824 /* The first operand to the CALL is the address of the function
8825 called. */
8826 addr = CALL_EXPR_FN (call);
8828 /* If there is no function, return early. */
8829 if (addr == NULL_TREE)
8830 return NULL_TREE;
8832 STRIP_NOPS (addr);
8834 /* If this is a readonly function pointer, extract its initial value. */
8835 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
8836 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
8837 && DECL_INITIAL (addr))
8838 addr = DECL_INITIAL (addr);
8840 /* If the address is just `&f' for some function `f', then we know
8841 that `f' is being called. */
8842 if (TREE_CODE (addr) == ADDR_EXPR
8843 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
8844 return TREE_OPERAND (addr, 0);
8846 /* We couldn't figure out what was being called. */
8847 return NULL_TREE;
8850 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
8851 return the associated function code, otherwise return CFN_LAST. */
8853 combined_fn
8854 get_call_combined_fn (const_tree call)
8856 /* It's invalid to call this function with anything but a CALL_EXPR. */
8857 gcc_assert (TREE_CODE (call) == CALL_EXPR);
8859 if (!CALL_EXPR_FN (call))
8860 return as_combined_fn (CALL_EXPR_IFN (call));
8862 tree fndecl = get_callee_fndecl (call);
8863 if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
8864 return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
8866 return CFN_LAST;
8869 #define TREE_MEM_USAGE_SPACES 40
8871 /* Print debugging information about tree nodes generated during the compile,
8872 and any language-specific information. */
8874 void
8875 dump_tree_statistics (void)
8877 if (GATHER_STATISTICS)
8879 int i;
8880 int total_nodes, total_bytes;
8881 fprintf (stderr, "\nKind Nodes Bytes\n");
8882 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
8883 total_nodes = total_bytes = 0;
8884 for (i = 0; i < (int) all_kinds; i++)
8886 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
8887 tree_node_counts[i], tree_node_sizes[i]);
8888 total_nodes += tree_node_counts[i];
8889 total_bytes += tree_node_sizes[i];
8891 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
8892 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
8893 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
8894 fprintf (stderr, "Code Nodes\n");
8895 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
8896 for (i = 0; i < (int) MAX_TREE_CODES; i++)
8897 fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i),
8898 tree_code_counts[i]);
8899 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
8900 fprintf (stderr, "\n");
8901 ssanames_print_statistics ();
8902 fprintf (stderr, "\n");
8903 phinodes_print_statistics ();
8904 fprintf (stderr, "\n");
8906 else
8907 fprintf (stderr, "(No per-node statistics)\n");
8909 print_type_hash_statistics ();
8910 print_debug_expr_statistics ();
8911 print_value_expr_statistics ();
8912 lang_hooks.print_statistics ();
8915 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
8917 /* Generate a crc32 of the low BYTES bytes of VALUE. */
8919 unsigned
8920 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes)
8922 /* This relies on the raw feedback's top 4 bits being zero. */
8923 #define FEEDBACK(X) ((X) * 0x04c11db7)
8924 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \
8925 ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8))
8926 static const unsigned syndromes[16] =
8928 SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3),
8929 SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7),
8930 SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb),
8931 SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf),
8933 #undef FEEDBACK
8934 #undef SYNDROME
8936 value <<= (32 - bytes * 8);
8937 for (unsigned ix = bytes * 2; ix--; value <<= 4)
8939 unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf];
8941 chksum = (chksum << 4) ^ feedback;
8944 return chksum;
8947 /* Generate a crc32 of a string. */
8949 unsigned
8950 crc32_string (unsigned chksum, const char *string)
8953 chksum = crc32_byte (chksum, *string);
8954 while (*string++);
8955 return chksum;
8958 /* P is a string that will be used in a symbol. Mask out any characters
8959 that are not valid in that context. */
8961 void
8962 clean_symbol_name (char *p)
8964 for (; *p; p++)
8965 if (! (ISALNUM (*p)
8966 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
8967 || *p == '$'
8968 #endif
8969 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
8970 || *p == '.'
8971 #endif
8973 *p = '_';
8976 /* For anonymous aggregate types, we need some sort of name to
8977 hold on to. In practice, this should not appear, but it should
8978 not be harmful if it does. */
8979 bool
8980 anon_aggrname_p(const_tree id_node)
8982 #ifndef NO_DOT_IN_LABEL
8983 return (IDENTIFIER_POINTER (id_node)[0] == '.'
8984 && IDENTIFIER_POINTER (id_node)[1] == '_');
8985 #else /* NO_DOT_IN_LABEL */
8986 #ifndef NO_DOLLAR_IN_LABEL
8987 return (IDENTIFIER_POINTER (id_node)[0] == '$' \
8988 && IDENTIFIER_POINTER (id_node)[1] == '_');
8989 #else /* NO_DOLLAR_IN_LABEL */
8990 #define ANON_AGGRNAME_PREFIX "__anon_"
8991 return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX,
8992 sizeof (ANON_AGGRNAME_PREFIX) - 1));
8993 #endif /* NO_DOLLAR_IN_LABEL */
8994 #endif /* NO_DOT_IN_LABEL */
8997 /* Return a format for an anonymous aggregate name. */
8998 const char *
8999 anon_aggrname_format()
9001 #ifndef NO_DOT_IN_LABEL
9002 return "._%d";
9003 #else /* NO_DOT_IN_LABEL */
9004 #ifndef NO_DOLLAR_IN_LABEL
9005 return "$_%d";
9006 #else /* NO_DOLLAR_IN_LABEL */
9007 return "__anon_%d";
9008 #endif /* NO_DOLLAR_IN_LABEL */
9009 #endif /* NO_DOT_IN_LABEL */
9012 /* Generate a name for a special-purpose function.
9013 The generated name may need to be unique across the whole link.
9014 Changes to this function may also require corresponding changes to
9015 xstrdup_mask_random.
9016 TYPE is some string to identify the purpose of this function to the
9017 linker or collect2; it must start with an uppercase letter,
9018 one of:
9019 I - for constructors
9020 D - for destructors
9021 N - for C++ anonymous namespaces
9022 F - for DWARF unwind frame information. */
9024 tree
9025 get_file_function_name (const char *type)
9027 char *buf;
9028 const char *p;
9029 char *q;
9031 /* If we already have a name we know to be unique, just use that. */
9032 if (first_global_object_name)
9033 p = q = ASTRDUP (first_global_object_name);
9034 /* If the target is handling the constructors/destructors, they
9035 will be local to this file and the name is only necessary for
9036 debugging purposes.
9037 We also assign sub_I and sub_D sufixes to constructors called from
9038 the global static constructors. These are always local. */
9039 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9040 || (strncmp (type, "sub_", 4) == 0
9041 && (type[4] == 'I' || type[4] == 'D')))
9043 const char *file = main_input_filename;
9044 if (! file)
9045 file = LOCATION_FILE (input_location);
9046 /* Just use the file's basename, because the full pathname
9047 might be quite long. */
9048 p = q = ASTRDUP (lbasename (file));
9050 else
9052 /* Otherwise, the name must be unique across the entire link.
9053 We don't have anything that we know to be unique to this translation
9054 unit, so use what we do have and throw in some randomness. */
9055 unsigned len;
9056 const char *name = weak_global_object_name;
9057 const char *file = main_input_filename;
9059 if (! name)
9060 name = "";
9061 if (! file)
9062 file = LOCATION_FILE (input_location);
9064 len = strlen (file);
9065 q = (char *) alloca (9 + 19 + len + 1);
9066 memcpy (q, file, len + 1);
9068 snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9069 crc32_string (0, name), get_random_seed (false));
9071 p = q;
9074 clean_symbol_name (q);
9075 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9076 + strlen (type));
9078 /* Set up the name of the file-level functions we may need.
9079 Use a global object (which is already required to be unique over
9080 the program) rather than the file name (which imposes extra
9081 constraints). */
9082 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9084 return get_identifier (buf);
9087 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9089 /* Complain that the tree code of NODE does not match the expected 0
9090 terminated list of trailing codes. The trailing code list can be
9091 empty, for a more vague error message. FILE, LINE, and FUNCTION
9092 are of the caller. */
9094 void
9095 tree_check_failed (const_tree node, const char *file,
9096 int line, const char *function, ...)
9098 va_list args;
9099 const char *buffer;
9100 unsigned length = 0;
9101 enum tree_code code;
9103 va_start (args, function);
9104 while ((code = (enum tree_code) va_arg (args, int)))
9105 length += 4 + strlen (get_tree_code_name (code));
9106 va_end (args);
9107 if (length)
9109 char *tmp;
9110 va_start (args, function);
9111 length += strlen ("expected ");
9112 buffer = tmp = (char *) alloca (length);
9113 length = 0;
9114 while ((code = (enum tree_code) va_arg (args, int)))
9116 const char *prefix = length ? " or " : "expected ";
9118 strcpy (tmp + length, prefix);
9119 length += strlen (prefix);
9120 strcpy (tmp + length, get_tree_code_name (code));
9121 length += strlen (get_tree_code_name (code));
9123 va_end (args);
9125 else
9126 buffer = "unexpected node";
9128 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9129 buffer, get_tree_code_name (TREE_CODE (node)),
9130 function, trim_filename (file), line);
9133 /* Complain that the tree code of NODE does match the expected 0
9134 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9135 the caller. */
9137 void
9138 tree_not_check_failed (const_tree node, const char *file,
9139 int line, const char *function, ...)
9141 va_list args;
9142 char *buffer;
9143 unsigned length = 0;
9144 enum tree_code code;
9146 va_start (args, function);
9147 while ((code = (enum tree_code) va_arg (args, int)))
9148 length += 4 + strlen (get_tree_code_name (code));
9149 va_end (args);
9150 va_start (args, function);
9151 buffer = (char *) alloca (length);
9152 length = 0;
9153 while ((code = (enum tree_code) va_arg (args, int)))
9155 if (length)
9157 strcpy (buffer + length, " or ");
9158 length += 4;
9160 strcpy (buffer + length, get_tree_code_name (code));
9161 length += strlen (get_tree_code_name (code));
9163 va_end (args);
9165 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9166 buffer, get_tree_code_name (TREE_CODE (node)),
9167 function, trim_filename (file), line);
9170 /* Similar to tree_check_failed, except that we check for a class of tree
9171 code, given in CL. */
9173 void
9174 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9175 const char *file, int line, const char *function)
9177 internal_error
9178 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9179 TREE_CODE_CLASS_STRING (cl),
9180 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9181 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9184 /* Similar to tree_check_failed, except that instead of specifying a
9185 dozen codes, use the knowledge that they're all sequential. */
9187 void
9188 tree_range_check_failed (const_tree node, const char *file, int line,
9189 const char *function, enum tree_code c1,
9190 enum tree_code c2)
9192 char *buffer;
9193 unsigned length = 0;
9194 unsigned int c;
9196 for (c = c1; c <= c2; ++c)
9197 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9199 length += strlen ("expected ");
9200 buffer = (char *) alloca (length);
9201 length = 0;
9203 for (c = c1; c <= c2; ++c)
9205 const char *prefix = length ? " or " : "expected ";
9207 strcpy (buffer + length, prefix);
9208 length += strlen (prefix);
9209 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9210 length += strlen (get_tree_code_name ((enum tree_code) c));
9213 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9214 buffer, get_tree_code_name (TREE_CODE (node)),
9215 function, trim_filename (file), line);
9219 /* Similar to tree_check_failed, except that we check that a tree does
9220 not have the specified code, given in CL. */
9222 void
9223 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9224 const char *file, int line, const char *function)
9226 internal_error
9227 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9228 TREE_CODE_CLASS_STRING (cl),
9229 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9230 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9234 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9236 void
9237 omp_clause_check_failed (const_tree node, const char *file, int line,
9238 const char *function, enum omp_clause_code code)
9240 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9241 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9242 function, trim_filename (file), line);
9246 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9248 void
9249 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9250 const char *function, enum omp_clause_code c1,
9251 enum omp_clause_code c2)
9253 char *buffer;
9254 unsigned length = 0;
9255 unsigned int c;
9257 for (c = c1; c <= c2; ++c)
9258 length += 4 + strlen (omp_clause_code_name[c]);
9260 length += strlen ("expected ");
9261 buffer = (char *) alloca (length);
9262 length = 0;
9264 for (c = c1; c <= c2; ++c)
9266 const char *prefix = length ? " or " : "expected ";
9268 strcpy (buffer + length, prefix);
9269 length += strlen (prefix);
9270 strcpy (buffer + length, omp_clause_code_name[c]);
9271 length += strlen (omp_clause_code_name[c]);
9274 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9275 buffer, omp_clause_code_name[TREE_CODE (node)],
9276 function, trim_filename (file), line);
9280 #undef DEFTREESTRUCT
9281 #define DEFTREESTRUCT(VAL, NAME) NAME,
9283 static const char *ts_enum_names[] = {
9284 #include "treestruct.def"
9286 #undef DEFTREESTRUCT
9288 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9290 /* Similar to tree_class_check_failed, except that we check for
9291 whether CODE contains the tree structure identified by EN. */
9293 void
9294 tree_contains_struct_check_failed (const_tree node,
9295 const enum tree_node_structure_enum en,
9296 const char *file, int line,
9297 const char *function)
9299 internal_error
9300 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9301 TS_ENUM_NAME (en),
9302 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9306 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9307 (dynamically sized) vector. */
9309 void
9310 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
9311 const char *function)
9313 internal_error
9314 ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
9315 idx + 1, len, function, trim_filename (file), line);
9318 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9319 (dynamically sized) vector. */
9321 void
9322 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9323 const char *function)
9325 internal_error
9326 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
9327 idx + 1, len, function, trim_filename (file), line);
9330 /* Similar to above, except that the check is for the bounds of the operand
9331 vector of an expression node EXP. */
9333 void
9334 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9335 int line, const char *function)
9337 enum tree_code code = TREE_CODE (exp);
9338 internal_error
9339 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9340 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9341 function, trim_filename (file), line);
9344 /* Similar to above, except that the check is for the number of
9345 operands of an OMP_CLAUSE node. */
9347 void
9348 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9349 int line, const char *function)
9351 internal_error
9352 ("tree check: accessed operand %d of omp_clause %s with %d operands "
9353 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9354 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9355 trim_filename (file), line);
9357 #endif /* ENABLE_TREE_CHECKING */
9359 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
9360 and mapped to the machine mode MODE. Initialize its fields and build
9361 the information necessary for debugging output. */
9363 static tree
9364 make_vector_type (tree innertype, int nunits, machine_mode mode)
9366 tree t;
9367 tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
9369 t = make_node (VECTOR_TYPE);
9370 TREE_TYPE (t) = mv_innertype;
9371 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9372 SET_TYPE_MODE (t, mode);
9374 if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
9375 SET_TYPE_STRUCTURAL_EQUALITY (t);
9376 else if ((TYPE_CANONICAL (mv_innertype) != innertype
9377 || mode != VOIDmode)
9378 && !VECTOR_BOOLEAN_TYPE_P (t))
9379 TYPE_CANONICAL (t)
9380 = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
9382 layout_type (t);
9384 hashval_t hash = type_hash_canon_hash (t);
9385 t = type_hash_canon (hash, t);
9387 /* We have built a main variant, based on the main variant of the
9388 inner type. Use it to build the variant we return. */
9389 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
9390 && TREE_TYPE (t) != innertype)
9391 return build_type_attribute_qual_variant (t,
9392 TYPE_ATTRIBUTES (innertype),
9393 TYPE_QUALS (innertype));
9395 return t;
9398 static tree
9399 make_or_reuse_type (unsigned size, int unsignedp)
9401 int i;
9403 if (size == INT_TYPE_SIZE)
9404 return unsignedp ? unsigned_type_node : integer_type_node;
9405 if (size == CHAR_TYPE_SIZE)
9406 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
9407 if (size == SHORT_TYPE_SIZE)
9408 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
9409 if (size == LONG_TYPE_SIZE)
9410 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
9411 if (size == LONG_LONG_TYPE_SIZE)
9412 return (unsignedp ? long_long_unsigned_type_node
9413 : long_long_integer_type_node);
9415 for (i = 0; i < NUM_INT_N_ENTS; i ++)
9416 if (size == int_n_data[i].bitsize
9417 && int_n_enabled_p[i])
9418 return (unsignedp ? int_n_trees[i].unsigned_type
9419 : int_n_trees[i].signed_type);
9421 if (unsignedp)
9422 return make_unsigned_type (size);
9423 else
9424 return make_signed_type (size);
9427 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
9429 static tree
9430 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
9432 if (satp)
9434 if (size == SHORT_FRACT_TYPE_SIZE)
9435 return unsignedp ? sat_unsigned_short_fract_type_node
9436 : sat_short_fract_type_node;
9437 if (size == FRACT_TYPE_SIZE)
9438 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
9439 if (size == LONG_FRACT_TYPE_SIZE)
9440 return unsignedp ? sat_unsigned_long_fract_type_node
9441 : sat_long_fract_type_node;
9442 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9443 return unsignedp ? sat_unsigned_long_long_fract_type_node
9444 : sat_long_long_fract_type_node;
9446 else
9448 if (size == SHORT_FRACT_TYPE_SIZE)
9449 return unsignedp ? unsigned_short_fract_type_node
9450 : short_fract_type_node;
9451 if (size == FRACT_TYPE_SIZE)
9452 return unsignedp ? unsigned_fract_type_node : fract_type_node;
9453 if (size == LONG_FRACT_TYPE_SIZE)
9454 return unsignedp ? unsigned_long_fract_type_node
9455 : long_fract_type_node;
9456 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9457 return unsignedp ? unsigned_long_long_fract_type_node
9458 : long_long_fract_type_node;
9461 return make_fract_type (size, unsignedp, satp);
9464 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
9466 static tree
9467 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
9469 if (satp)
9471 if (size == SHORT_ACCUM_TYPE_SIZE)
9472 return unsignedp ? sat_unsigned_short_accum_type_node
9473 : sat_short_accum_type_node;
9474 if (size == ACCUM_TYPE_SIZE)
9475 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
9476 if (size == LONG_ACCUM_TYPE_SIZE)
9477 return unsignedp ? sat_unsigned_long_accum_type_node
9478 : sat_long_accum_type_node;
9479 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9480 return unsignedp ? sat_unsigned_long_long_accum_type_node
9481 : sat_long_long_accum_type_node;
9483 else
9485 if (size == SHORT_ACCUM_TYPE_SIZE)
9486 return unsignedp ? unsigned_short_accum_type_node
9487 : short_accum_type_node;
9488 if (size == ACCUM_TYPE_SIZE)
9489 return unsignedp ? unsigned_accum_type_node : accum_type_node;
9490 if (size == LONG_ACCUM_TYPE_SIZE)
9491 return unsignedp ? unsigned_long_accum_type_node
9492 : long_accum_type_node;
9493 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9494 return unsignedp ? unsigned_long_long_accum_type_node
9495 : long_long_accum_type_node;
9498 return make_accum_type (size, unsignedp, satp);
9502 /* Create an atomic variant node for TYPE. This routine is called
9503 during initialization of data types to create the 5 basic atomic
9504 types. The generic build_variant_type function requires these to
9505 already be set up in order to function properly, so cannot be
9506 called from there. If ALIGN is non-zero, then ensure alignment is
9507 overridden to this value. */
9509 static tree
9510 build_atomic_base (tree type, unsigned int align)
9512 tree t;
9514 /* Make sure its not already registered. */
9515 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
9516 return t;
9518 t = build_variant_type_copy (type);
9519 set_type_quals (t, TYPE_QUAL_ATOMIC);
9521 if (align)
9522 SET_TYPE_ALIGN (t, align);
9524 return t;
9527 /* Information about the _FloatN and _FloatNx types. This must be in
9528 the same order as the corresponding TI_* enum values. */
9529 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
9531 { 16, false },
9532 { 32, false },
9533 { 64, false },
9534 { 128, false },
9535 { 32, true },
9536 { 64, true },
9537 { 128, true },
9541 /* Create nodes for all integer types (and error_mark_node) using the sizes
9542 of C datatypes. SIGNED_CHAR specifies whether char is signed. */
9544 void
9545 build_common_tree_nodes (bool signed_char)
9547 int i;
9549 error_mark_node = make_node (ERROR_MARK);
9550 TREE_TYPE (error_mark_node) = error_mark_node;
9552 initialize_sizetypes ();
9554 /* Define both `signed char' and `unsigned char'. */
9555 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
9556 TYPE_STRING_FLAG (signed_char_type_node) = 1;
9557 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
9558 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
9560 /* Define `char', which is like either `signed char' or `unsigned char'
9561 but not the same as either. */
9562 char_type_node
9563 = (signed_char
9564 ? make_signed_type (CHAR_TYPE_SIZE)
9565 : make_unsigned_type (CHAR_TYPE_SIZE));
9566 TYPE_STRING_FLAG (char_type_node) = 1;
9568 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
9569 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
9570 integer_type_node = make_signed_type (INT_TYPE_SIZE);
9571 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
9572 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
9573 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
9574 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
9575 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
9577 for (i = 0; i < NUM_INT_N_ENTS; i ++)
9579 int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
9580 int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
9581 TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
9582 TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
9584 if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
9585 && int_n_enabled_p[i])
9587 integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
9588 integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
9592 /* Define a boolean type. This type only represents boolean values but
9593 may be larger than char depending on the value of BOOL_TYPE_SIZE. */
9594 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
9595 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
9596 TYPE_PRECISION (boolean_type_node) = 1;
9597 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
9599 /* Define what type to use for size_t. */
9600 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
9601 size_type_node = unsigned_type_node;
9602 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
9603 size_type_node = long_unsigned_type_node;
9604 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
9605 size_type_node = long_long_unsigned_type_node;
9606 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
9607 size_type_node = short_unsigned_type_node;
9608 else
9610 int i;
9612 size_type_node = NULL_TREE;
9613 for (i = 0; i < NUM_INT_N_ENTS; i++)
9614 if (int_n_enabled_p[i])
9616 char name[50];
9617 sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
9619 if (strcmp (name, SIZE_TYPE) == 0)
9621 size_type_node = int_n_trees[i].unsigned_type;
9624 if (size_type_node == NULL_TREE)
9625 gcc_unreachable ();
9628 /* Define what type to use for ptrdiff_t. */
9629 if (strcmp (PTRDIFF_TYPE, "int") == 0)
9630 ptrdiff_type_node = integer_type_node;
9631 else if (strcmp (PTRDIFF_TYPE, "long int") == 0)
9632 ptrdiff_type_node = long_integer_type_node;
9633 else if (strcmp (PTRDIFF_TYPE, "long long int") == 0)
9634 ptrdiff_type_node = long_long_integer_type_node;
9635 else if (strcmp (PTRDIFF_TYPE, "short int") == 0)
9636 ptrdiff_type_node = short_integer_type_node;
9637 else
9639 ptrdiff_type_node = NULL_TREE;
9640 for (int i = 0; i < NUM_INT_N_ENTS; i++)
9641 if (int_n_enabled_p[i])
9643 char name[50];
9644 sprintf (name, "__int%d", int_n_data[i].bitsize);
9645 if (strcmp (name, PTRDIFF_TYPE) == 0)
9646 ptrdiff_type_node = int_n_trees[i].signed_type;
9648 if (ptrdiff_type_node == NULL_TREE)
9649 gcc_unreachable ();
9652 /* Fill in the rest of the sized types. Reuse existing type nodes
9653 when possible. */
9654 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
9655 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
9656 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
9657 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
9658 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
9660 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
9661 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
9662 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
9663 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
9664 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
9666 /* Don't call build_qualified type for atomics. That routine does
9667 special processing for atomics, and until they are initialized
9668 it's better not to make that call.
9670 Check to see if there is a target override for atomic types. */
9672 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
9673 targetm.atomic_align_for_mode (QImode));
9674 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
9675 targetm.atomic_align_for_mode (HImode));
9676 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
9677 targetm.atomic_align_for_mode (SImode));
9678 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
9679 targetm.atomic_align_for_mode (DImode));
9680 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
9681 targetm.atomic_align_for_mode (TImode));
9683 access_public_node = get_identifier ("public");
9684 access_protected_node = get_identifier ("protected");
9685 access_private_node = get_identifier ("private");
9687 /* Define these next since types below may used them. */
9688 integer_zero_node = build_int_cst (integer_type_node, 0);
9689 integer_one_node = build_int_cst (integer_type_node, 1);
9690 integer_three_node = build_int_cst (integer_type_node, 3);
9691 integer_minus_one_node = build_int_cst (integer_type_node, -1);
9693 size_zero_node = size_int (0);
9694 size_one_node = size_int (1);
9695 bitsize_zero_node = bitsize_int (0);
9696 bitsize_one_node = bitsize_int (1);
9697 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
9699 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
9700 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
9702 void_type_node = make_node (VOID_TYPE);
9703 layout_type (void_type_node);
9705 pointer_bounds_type_node = targetm.chkp_bound_type ();
9707 /* We are not going to have real types in C with less than byte alignment,
9708 so we might as well not have any types that claim to have it. */
9709 SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT);
9710 TYPE_USER_ALIGN (void_type_node) = 0;
9712 void_node = make_node (VOID_CST);
9713 TREE_TYPE (void_node) = void_type_node;
9715 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
9716 layout_type (TREE_TYPE (null_pointer_node));
9718 ptr_type_node = build_pointer_type (void_type_node);
9719 const_ptr_type_node
9720 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
9721 for (unsigned i = 0;
9722 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
9723 ++i)
9724 builtin_structptr_types[i].node = builtin_structptr_types[i].base;
9726 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
9728 float_type_node = make_node (REAL_TYPE);
9729 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
9730 layout_type (float_type_node);
9732 double_type_node = make_node (REAL_TYPE);
9733 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
9734 layout_type (double_type_node);
9736 long_double_type_node = make_node (REAL_TYPE);
9737 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
9738 layout_type (long_double_type_node);
9740 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
9742 int n = floatn_nx_types[i].n;
9743 bool extended = floatn_nx_types[i].extended;
9744 scalar_float_mode mode;
9745 if (!targetm.floatn_mode (n, extended).exists (&mode))
9746 continue;
9747 int precision = GET_MODE_PRECISION (mode);
9748 /* Work around the rs6000 KFmode having precision 113 not
9749 128. */
9750 const struct real_format *fmt = REAL_MODE_FORMAT (mode);
9751 gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3);
9752 int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin);
9753 if (!extended)
9754 gcc_assert (min_precision == n);
9755 if (precision < min_precision)
9756 precision = min_precision;
9757 FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE);
9758 TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision;
9759 layout_type (FLOATN_NX_TYPE_NODE (i));
9760 SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode);
9763 float_ptr_type_node = build_pointer_type (float_type_node);
9764 double_ptr_type_node = build_pointer_type (double_type_node);
9765 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
9766 integer_ptr_type_node = build_pointer_type (integer_type_node);
9768 /* Fixed size integer types. */
9769 uint16_type_node = make_or_reuse_type (16, 1);
9770 uint32_type_node = make_or_reuse_type (32, 1);
9771 uint64_type_node = make_or_reuse_type (64, 1);
9773 /* Decimal float types. */
9774 dfloat32_type_node = make_node (REAL_TYPE);
9775 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
9776 SET_TYPE_MODE (dfloat32_type_node, SDmode);
9777 layout_type (dfloat32_type_node);
9778 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
9780 dfloat64_type_node = make_node (REAL_TYPE);
9781 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
9782 SET_TYPE_MODE (dfloat64_type_node, DDmode);
9783 layout_type (dfloat64_type_node);
9784 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
9786 dfloat128_type_node = make_node (REAL_TYPE);
9787 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
9788 SET_TYPE_MODE (dfloat128_type_node, TDmode);
9789 layout_type (dfloat128_type_node);
9790 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
9792 complex_integer_type_node = build_complex_type (integer_type_node, true);
9793 complex_float_type_node = build_complex_type (float_type_node, true);
9794 complex_double_type_node = build_complex_type (double_type_node, true);
9795 complex_long_double_type_node = build_complex_type (long_double_type_node,
9796 true);
9798 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
9800 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE)
9801 COMPLEX_FLOATN_NX_TYPE_NODE (i)
9802 = build_complex_type (FLOATN_NX_TYPE_NODE (i));
9805 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
9806 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
9807 sat_ ## KIND ## _type_node = \
9808 make_sat_signed_ ## KIND ## _type (SIZE); \
9809 sat_unsigned_ ## KIND ## _type_node = \
9810 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9811 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9812 unsigned_ ## KIND ## _type_node = \
9813 make_unsigned_ ## KIND ## _type (SIZE);
9815 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
9816 sat_ ## WIDTH ## KIND ## _type_node = \
9817 make_sat_signed_ ## KIND ## _type (SIZE); \
9818 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
9819 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9820 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9821 unsigned_ ## WIDTH ## KIND ## _type_node = \
9822 make_unsigned_ ## KIND ## _type (SIZE);
9824 /* Make fixed-point type nodes based on four different widths. */
9825 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
9826 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
9827 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
9828 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
9829 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
9831 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
9832 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
9833 NAME ## _type_node = \
9834 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
9835 u ## NAME ## _type_node = \
9836 make_or_reuse_unsigned_ ## KIND ## _type \
9837 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
9838 sat_ ## NAME ## _type_node = \
9839 make_or_reuse_sat_signed_ ## KIND ## _type \
9840 (GET_MODE_BITSIZE (MODE ## mode)); \
9841 sat_u ## NAME ## _type_node = \
9842 make_or_reuse_sat_unsigned_ ## KIND ## _type \
9843 (GET_MODE_BITSIZE (U ## MODE ## mode));
9845 /* Fixed-point type and mode nodes. */
9846 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
9847 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
9848 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
9849 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
9850 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
9851 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
9852 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
9853 MAKE_FIXED_MODE_NODE (accum, ha, HA)
9854 MAKE_FIXED_MODE_NODE (accum, sa, SA)
9855 MAKE_FIXED_MODE_NODE (accum, da, DA)
9856 MAKE_FIXED_MODE_NODE (accum, ta, TA)
9859 tree t = targetm.build_builtin_va_list ();
9861 /* Many back-ends define record types without setting TYPE_NAME.
9862 If we copied the record type here, we'd keep the original
9863 record type without a name. This breaks name mangling. So,
9864 don't copy record types and let c_common_nodes_and_builtins()
9865 declare the type to be __builtin_va_list. */
9866 if (TREE_CODE (t) != RECORD_TYPE)
9867 t = build_variant_type_copy (t);
9869 va_list_type_node = t;
9873 /* Modify DECL for given flags.
9874 TM_PURE attribute is set only on types, so the function will modify
9875 DECL's type when ECF_TM_PURE is used. */
9877 void
9878 set_call_expr_flags (tree decl, int flags)
9880 if (flags & ECF_NOTHROW)
9881 TREE_NOTHROW (decl) = 1;
9882 if (flags & ECF_CONST)
9883 TREE_READONLY (decl) = 1;
9884 if (flags & ECF_PURE)
9885 DECL_PURE_P (decl) = 1;
9886 if (flags & ECF_LOOPING_CONST_OR_PURE)
9887 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
9888 if (flags & ECF_NOVOPS)
9889 DECL_IS_NOVOPS (decl) = 1;
9890 if (flags & ECF_NORETURN)
9891 TREE_THIS_VOLATILE (decl) = 1;
9892 if (flags & ECF_MALLOC)
9893 DECL_IS_MALLOC (decl) = 1;
9894 if (flags & ECF_RETURNS_TWICE)
9895 DECL_IS_RETURNS_TWICE (decl) = 1;
9896 if (flags & ECF_LEAF)
9897 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
9898 NULL, DECL_ATTRIBUTES (decl));
9899 if (flags & ECF_COLD)
9900 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("cold"),
9901 NULL, DECL_ATTRIBUTES (decl));
9902 if (flags & ECF_RET1)
9903 DECL_ATTRIBUTES (decl)
9904 = tree_cons (get_identifier ("fn spec"),
9905 build_tree_list (NULL_TREE, build_string (1, "1")),
9906 DECL_ATTRIBUTES (decl));
9907 if ((flags & ECF_TM_PURE) && flag_tm)
9908 apply_tm_attr (decl, get_identifier ("transaction_pure"));
9909 /* Looping const or pure is implied by noreturn.
9910 There is currently no way to declare looping const or looping pure alone. */
9911 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
9912 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
9916 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
9918 static void
9919 local_define_builtin (const char *name, tree type, enum built_in_function code,
9920 const char *library_name, int ecf_flags)
9922 tree decl;
9924 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
9925 library_name, NULL_TREE);
9926 set_call_expr_flags (decl, ecf_flags);
9928 set_builtin_decl (code, decl, true);
9931 /* Call this function after instantiating all builtins that the language
9932 front end cares about. This will build the rest of the builtins
9933 and internal functions that are relied upon by the tree optimizers and
9934 the middle-end. */
9936 void
9937 build_common_builtin_nodes (void)
9939 tree tmp, ftype;
9940 int ecf_flags;
9942 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
9943 || !builtin_decl_explicit_p (BUILT_IN_ABORT))
9945 ftype = build_function_type (void_type_node, void_list_node);
9946 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
9947 local_define_builtin ("__builtin_unreachable", ftype,
9948 BUILT_IN_UNREACHABLE,
9949 "__builtin_unreachable",
9950 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
9951 | ECF_CONST | ECF_COLD);
9952 if (!builtin_decl_explicit_p (BUILT_IN_ABORT))
9953 local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
9954 "abort",
9955 ECF_LEAF | ECF_NORETURN | ECF_CONST | ECF_COLD);
9958 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
9959 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9961 ftype = build_function_type_list (ptr_type_node,
9962 ptr_type_node, const_ptr_type_node,
9963 size_type_node, NULL_TREE);
9965 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
9966 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
9967 "memcpy", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
9968 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9969 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
9970 "memmove", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
9973 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
9975 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
9976 const_ptr_type_node, size_type_node,
9977 NULL_TREE);
9978 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
9979 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
9982 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
9984 ftype = build_function_type_list (ptr_type_node,
9985 ptr_type_node, integer_type_node,
9986 size_type_node, NULL_TREE);
9987 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
9988 "memset", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
9991 /* If we're checking the stack, `alloca' can throw. */
9992 const int alloca_flags
9993 = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW);
9995 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
9997 ftype = build_function_type_list (ptr_type_node,
9998 size_type_node, NULL_TREE);
9999 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10000 "alloca", alloca_flags);
10003 ftype = build_function_type_list (ptr_type_node, size_type_node,
10004 size_type_node, NULL_TREE);
10005 local_define_builtin ("__builtin_alloca_with_align", ftype,
10006 BUILT_IN_ALLOCA_WITH_ALIGN,
10007 "__builtin_alloca_with_align",
10008 alloca_flags);
10010 ftype = build_function_type_list (ptr_type_node, size_type_node,
10011 size_type_node, size_type_node, NULL_TREE);
10012 local_define_builtin ("__builtin_alloca_with_align_and_max", ftype,
10013 BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX,
10014 "__builtin_alloca_with_align_and_max",
10015 alloca_flags);
10017 ftype = build_function_type_list (void_type_node,
10018 ptr_type_node, ptr_type_node,
10019 ptr_type_node, NULL_TREE);
10020 local_define_builtin ("__builtin_init_trampoline", ftype,
10021 BUILT_IN_INIT_TRAMPOLINE,
10022 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10023 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10024 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10025 "__builtin_init_heap_trampoline",
10026 ECF_NOTHROW | ECF_LEAF);
10027 local_define_builtin ("__builtin_init_descriptor", ftype,
10028 BUILT_IN_INIT_DESCRIPTOR,
10029 "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF);
10031 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10032 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10033 BUILT_IN_ADJUST_TRAMPOLINE,
10034 "__builtin_adjust_trampoline",
10035 ECF_CONST | ECF_NOTHROW);
10036 local_define_builtin ("__builtin_adjust_descriptor", ftype,
10037 BUILT_IN_ADJUST_DESCRIPTOR,
10038 "__builtin_adjust_descriptor",
10039 ECF_CONST | ECF_NOTHROW);
10041 ftype = build_function_type_list (void_type_node,
10042 ptr_type_node, ptr_type_node, NULL_TREE);
10043 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10044 BUILT_IN_NONLOCAL_GOTO,
10045 "__builtin_nonlocal_goto",
10046 ECF_NORETURN | ECF_NOTHROW);
10048 ftype = build_function_type_list (void_type_node,
10049 ptr_type_node, ptr_type_node, NULL_TREE);
10050 local_define_builtin ("__builtin_setjmp_setup", ftype,
10051 BUILT_IN_SETJMP_SETUP,
10052 "__builtin_setjmp_setup", ECF_NOTHROW);
10054 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10055 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10056 BUILT_IN_SETJMP_RECEIVER,
10057 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10059 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10060 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10061 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10063 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10064 local_define_builtin ("__builtin_stack_restore", ftype,
10065 BUILT_IN_STACK_RESTORE,
10066 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10068 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10069 const_ptr_type_node, size_type_node,
10070 NULL_TREE);
10071 local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ,
10072 "__builtin_memcmp_eq",
10073 ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10075 /* If there's a possibility that we might use the ARM EABI, build the
10076 alternate __cxa_end_cleanup node used to resume from C++. */
10077 if (targetm.arm_eabi_unwinder)
10079 ftype = build_function_type_list (void_type_node, NULL_TREE);
10080 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10081 BUILT_IN_CXA_END_CLEANUP,
10082 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10085 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10086 local_define_builtin ("__builtin_unwind_resume", ftype,
10087 BUILT_IN_UNWIND_RESUME,
10088 ((targetm_common.except_unwind_info (&global_options)
10089 == UI_SJLJ)
10090 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10091 ECF_NORETURN);
10093 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10095 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10096 NULL_TREE);
10097 local_define_builtin ("__builtin_return_address", ftype,
10098 BUILT_IN_RETURN_ADDRESS,
10099 "__builtin_return_address",
10100 ECF_NOTHROW);
10103 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10104 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10106 ftype = build_function_type_list (void_type_node, ptr_type_node,
10107 ptr_type_node, NULL_TREE);
10108 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10109 local_define_builtin ("__cyg_profile_func_enter", ftype,
10110 BUILT_IN_PROFILE_FUNC_ENTER,
10111 "__cyg_profile_func_enter", 0);
10112 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10113 local_define_builtin ("__cyg_profile_func_exit", ftype,
10114 BUILT_IN_PROFILE_FUNC_EXIT,
10115 "__cyg_profile_func_exit", 0);
10118 /* The exception object and filter values from the runtime. The argument
10119 must be zero before exception lowering, i.e. from the front end. After
10120 exception lowering, it will be the region number for the exception
10121 landing pad. These functions are PURE instead of CONST to prevent
10122 them from being hoisted past the exception edge that will initialize
10123 its value in the landing pad. */
10124 ftype = build_function_type_list (ptr_type_node,
10125 integer_type_node, NULL_TREE);
10126 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10127 /* Only use TM_PURE if we have TM language support. */
10128 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10129 ecf_flags |= ECF_TM_PURE;
10130 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10131 "__builtin_eh_pointer", ecf_flags);
10133 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10134 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10135 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10136 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10138 ftype = build_function_type_list (void_type_node,
10139 integer_type_node, integer_type_node,
10140 NULL_TREE);
10141 local_define_builtin ("__builtin_eh_copy_values", ftype,
10142 BUILT_IN_EH_COPY_VALUES,
10143 "__builtin_eh_copy_values", ECF_NOTHROW);
10145 /* Complex multiplication and division. These are handled as builtins
10146 rather than optabs because emit_library_call_value doesn't support
10147 complex. Further, we can do slightly better with folding these
10148 beasties if the real and complex parts of the arguments are separate. */
10150 int mode;
10152 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10154 char mode_name_buf[4], *q;
10155 const char *p;
10156 enum built_in_function mcode, dcode;
10157 tree type, inner_type;
10158 const char *prefix = "__";
10160 if (targetm.libfunc_gnu_prefix)
10161 prefix = "__gnu_";
10163 type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10164 if (type == NULL)
10165 continue;
10166 inner_type = TREE_TYPE (type);
10168 ftype = build_function_type_list (type, inner_type, inner_type,
10169 inner_type, inner_type, NULL_TREE);
10171 mcode = ((enum built_in_function)
10172 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10173 dcode = ((enum built_in_function)
10174 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10176 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10177 *q = TOLOWER (*p);
10178 *q = '\0';
10180 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10181 NULL);
10182 local_define_builtin (built_in_names[mcode], ftype, mcode,
10183 built_in_names[mcode],
10184 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10186 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10187 NULL);
10188 local_define_builtin (built_in_names[dcode], ftype, dcode,
10189 built_in_names[dcode],
10190 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10194 init_internal_fns ();
10197 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10198 better way.
10200 If we requested a pointer to a vector, build up the pointers that
10201 we stripped off while looking for the inner type. Similarly for
10202 return values from functions.
10204 The argument TYPE is the top of the chain, and BOTTOM is the
10205 new type which we will point to. */
10207 tree
10208 reconstruct_complex_type (tree type, tree bottom)
10210 tree inner, outer;
10212 if (TREE_CODE (type) == POINTER_TYPE)
10214 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10215 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10216 TYPE_REF_CAN_ALIAS_ALL (type));
10218 else if (TREE_CODE (type) == REFERENCE_TYPE)
10220 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10221 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10222 TYPE_REF_CAN_ALIAS_ALL (type));
10224 else if (TREE_CODE (type) == ARRAY_TYPE)
10226 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10227 outer = build_array_type (inner, TYPE_DOMAIN (type));
10229 else if (TREE_CODE (type) == FUNCTION_TYPE)
10231 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10232 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10234 else if (TREE_CODE (type) == METHOD_TYPE)
10236 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10237 /* The build_method_type_directly() routine prepends 'this' to argument list,
10238 so we must compensate by getting rid of it. */
10239 outer
10240 = build_method_type_directly
10241 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10242 inner,
10243 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10245 else if (TREE_CODE (type) == OFFSET_TYPE)
10247 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10248 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10250 else
10251 return bottom;
10253 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10254 TYPE_QUALS (type));
10257 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10258 the inner type. */
10259 tree
10260 build_vector_type_for_mode (tree innertype, machine_mode mode)
10262 int nunits;
10263 unsigned int bitsize;
10265 switch (GET_MODE_CLASS (mode))
10267 case MODE_VECTOR_INT:
10268 case MODE_VECTOR_FLOAT:
10269 case MODE_VECTOR_FRACT:
10270 case MODE_VECTOR_UFRACT:
10271 case MODE_VECTOR_ACCUM:
10272 case MODE_VECTOR_UACCUM:
10273 nunits = GET_MODE_NUNITS (mode);
10274 break;
10276 case MODE_INT:
10277 /* Check that there are no leftover bits. */
10278 bitsize = GET_MODE_BITSIZE (as_a <scalar_int_mode> (mode));
10279 gcc_assert (bitsize % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10280 nunits = bitsize / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10281 break;
10283 default:
10284 gcc_unreachable ();
10287 return make_vector_type (innertype, nunits, mode);
10290 /* Similarly, but takes the inner type and number of units, which must be
10291 a power of two. */
10293 tree
10294 build_vector_type (tree innertype, int nunits)
10296 return make_vector_type (innertype, nunits, VOIDmode);
10299 /* Build truth vector with specified length and number of units. */
10301 tree
10302 build_truth_vector_type (unsigned nunits, unsigned vector_size)
10304 machine_mode mask_mode
10305 = targetm.vectorize.get_mask_mode (nunits, vector_size).else_blk ();
10307 unsigned HOST_WIDE_INT vsize;
10308 if (mask_mode == BLKmode)
10309 vsize = vector_size * BITS_PER_UNIT;
10310 else
10311 vsize = GET_MODE_BITSIZE (mask_mode);
10313 unsigned HOST_WIDE_INT esize = vsize / nunits;
10314 gcc_assert (esize * nunits == vsize);
10316 tree bool_type = build_nonstandard_boolean_type (esize);
10318 return make_vector_type (bool_type, nunits, mask_mode);
10321 /* Returns a vector type corresponding to a comparison of VECTYPE. */
10323 tree
10324 build_same_sized_truth_vector_type (tree vectype)
10326 if (VECTOR_BOOLEAN_TYPE_P (vectype))
10327 return vectype;
10329 unsigned HOST_WIDE_INT size = GET_MODE_SIZE (TYPE_MODE (vectype));
10331 if (!size)
10332 size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
10334 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
10337 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
10339 tree
10340 build_opaque_vector_type (tree innertype, int nunits)
10342 tree t = make_vector_type (innertype, nunits, VOIDmode);
10343 tree cand;
10344 /* We always build the non-opaque variant before the opaque one,
10345 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
10346 cand = TYPE_NEXT_VARIANT (t);
10347 if (cand
10348 && TYPE_VECTOR_OPAQUE (cand)
10349 && check_qualified_type (cand, t, TYPE_QUALS (t)))
10350 return cand;
10351 /* Othewise build a variant type and make sure to queue it after
10352 the non-opaque type. */
10353 cand = build_distinct_type_copy (t);
10354 TYPE_VECTOR_OPAQUE (cand) = true;
10355 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
10356 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
10357 TYPE_NEXT_VARIANT (t) = cand;
10358 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
10359 return cand;
10362 /* Return the value of element I of VECTOR_CST T as a wide_int. */
10364 wide_int
10365 vector_cst_int_elt (const_tree t, unsigned int i)
10367 /* First handle elements that are directly encoded. */
10368 unsigned int encoded_nelts = vector_cst_encoded_nelts (t);
10369 if (i < encoded_nelts)
10370 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, i));
10372 /* Identify the pattern that contains element I and work out the index of
10373 the last encoded element for that pattern. */
10374 unsigned int npatterns = VECTOR_CST_NPATTERNS (t);
10375 unsigned int pattern = i % npatterns;
10376 unsigned int count = i / npatterns;
10377 unsigned int final_i = encoded_nelts - npatterns + pattern;
10379 /* If there are no steps, the final encoded value is the right one. */
10380 if (!VECTOR_CST_STEPPED_P (t))
10381 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, final_i));
10383 /* Otherwise work out the value from the last two encoded elements. */
10384 tree v1 = VECTOR_CST_ENCODED_ELT (t, final_i - npatterns);
10385 tree v2 = VECTOR_CST_ENCODED_ELT (t, final_i);
10386 wide_int diff = wi::to_wide (v2) - wi::to_wide (v1);
10387 return wi::to_wide (v2) + (count - 2) * diff;
10390 /* Return the value of element I of VECTOR_CST T. */
10392 tree
10393 vector_cst_elt (const_tree t, unsigned int i)
10395 /* First handle elements that are directly encoded. */
10396 unsigned int encoded_nelts = vector_cst_encoded_nelts (t);
10397 if (i < encoded_nelts)
10398 return VECTOR_CST_ENCODED_ELT (t, i);
10400 /* If there are no steps, the final encoded value is the right one. */
10401 if (!VECTOR_CST_STEPPED_P (t))
10403 /* Identify the pattern that contains element I and work out the index of
10404 the last encoded element for that pattern. */
10405 unsigned int npatterns = VECTOR_CST_NPATTERNS (t);
10406 unsigned int pattern = i % npatterns;
10407 unsigned int final_i = encoded_nelts - npatterns + pattern;
10408 return VECTOR_CST_ENCODED_ELT (t, final_i);
10411 /* Otherwise work out the value from the last two encoded elements. */
10412 return wide_int_to_tree (TREE_TYPE (TREE_TYPE (t)),
10413 vector_cst_int_elt (t, i));
10416 /* Given an initializer INIT, return TRUE if INIT is zero or some
10417 aggregate of zeros. Otherwise return FALSE. */
10418 bool
10419 initializer_zerop (const_tree init)
10421 tree elt;
10423 STRIP_NOPS (init);
10425 switch (TREE_CODE (init))
10427 case INTEGER_CST:
10428 return integer_zerop (init);
10430 case REAL_CST:
10431 /* ??? Note that this is not correct for C4X float formats. There,
10432 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
10433 negative exponent. */
10434 return real_zerop (init)
10435 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
10437 case FIXED_CST:
10438 return fixed_zerop (init);
10440 case COMPLEX_CST:
10441 return integer_zerop (init)
10442 || (real_zerop (init)
10443 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
10444 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
10446 case VECTOR_CST:
10448 unsigned i;
10449 for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
10450 if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
10451 return false;
10452 return true;
10455 case CONSTRUCTOR:
10457 unsigned HOST_WIDE_INT idx;
10459 if (TREE_CLOBBER_P (init))
10460 return false;
10461 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
10462 if (!initializer_zerop (elt))
10463 return false;
10464 return true;
10467 case STRING_CST:
10469 int i;
10471 /* We need to loop through all elements to handle cases like
10472 "\0" and "\0foobar". */
10473 for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
10474 if (TREE_STRING_POINTER (init)[i] != '\0')
10475 return false;
10477 return true;
10480 default:
10481 return false;
10485 /* Check if vector VEC consists of all the equal elements and
10486 that the number of elements corresponds to the type of VEC.
10487 The function returns first element of the vector
10488 or NULL_TREE if the vector is not uniform. */
10489 tree
10490 uniform_vector_p (const_tree vec)
10492 tree first, t;
10493 unsigned i;
10495 if (vec == NULL_TREE)
10496 return NULL_TREE;
10498 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
10500 if (TREE_CODE (vec) == VECTOR_CST)
10502 first = VECTOR_CST_ELT (vec, 0);
10503 for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
10504 if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
10505 return NULL_TREE;
10507 return first;
10510 else if (TREE_CODE (vec) == CONSTRUCTOR)
10512 first = error_mark_node;
10514 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
10516 if (i == 0)
10518 first = t;
10519 continue;
10521 if (!operand_equal_p (first, t, 0))
10522 return NULL_TREE;
10524 if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
10525 return NULL_TREE;
10527 return first;
10530 return NULL_TREE;
10533 /* Build an empty statement at location LOC. */
10535 tree
10536 build_empty_stmt (location_t loc)
10538 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
10539 SET_EXPR_LOCATION (t, loc);
10540 return t;
10544 /* Build an OpenMP clause with code CODE. LOC is the location of the
10545 clause. */
10547 tree
10548 build_omp_clause (location_t loc, enum omp_clause_code code)
10550 tree t;
10551 int size, length;
10553 length = omp_clause_num_ops[code];
10554 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
10556 record_node_allocation_statistics (OMP_CLAUSE, size);
10558 t = (tree) ggc_internal_alloc (size);
10559 memset (t, 0, size);
10560 TREE_SET_CODE (t, OMP_CLAUSE);
10561 OMP_CLAUSE_SET_CODE (t, code);
10562 OMP_CLAUSE_LOCATION (t) = loc;
10564 return t;
10567 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
10568 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
10569 Except for the CODE and operand count field, other storage for the
10570 object is initialized to zeros. */
10572 tree
10573 build_vl_exp (enum tree_code code, int len MEM_STAT_DECL)
10575 tree t;
10576 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
10578 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
10579 gcc_assert (len >= 1);
10581 record_node_allocation_statistics (code, length);
10583 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
10585 TREE_SET_CODE (t, code);
10587 /* Can't use TREE_OPERAND to store the length because if checking is
10588 enabled, it will try to check the length before we store it. :-P */
10589 t->exp.operands[0] = build_int_cst (sizetype, len);
10591 return t;
10594 /* Helper function for build_call_* functions; build a CALL_EXPR with
10595 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
10596 the argument slots. */
10598 static tree
10599 build_call_1 (tree return_type, tree fn, int nargs)
10601 tree t;
10603 t = build_vl_exp (CALL_EXPR, nargs + 3);
10604 TREE_TYPE (t) = return_type;
10605 CALL_EXPR_FN (t) = fn;
10606 CALL_EXPR_STATIC_CHAIN (t) = NULL;
10608 return t;
10611 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10612 FN and a null static chain slot. NARGS is the number of call arguments
10613 which are specified as "..." arguments. */
10615 tree
10616 build_call_nary (tree return_type, tree fn, int nargs, ...)
10618 tree ret;
10619 va_list args;
10620 va_start (args, nargs);
10621 ret = build_call_valist (return_type, fn, nargs, args);
10622 va_end (args);
10623 return ret;
10626 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10627 FN and a null static chain slot. NARGS is the number of call arguments
10628 which are specified as a va_list ARGS. */
10630 tree
10631 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
10633 tree t;
10634 int i;
10636 t = build_call_1 (return_type, fn, nargs);
10637 for (i = 0; i < nargs; i++)
10638 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
10639 process_call_operands (t);
10640 return t;
10643 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10644 FN and a null static chain slot. NARGS is the number of call arguments
10645 which are specified as a tree array ARGS. */
10647 tree
10648 build_call_array_loc (location_t loc, tree return_type, tree fn,
10649 int nargs, const tree *args)
10651 tree t;
10652 int i;
10654 t = build_call_1 (return_type, fn, nargs);
10655 for (i = 0; i < nargs; i++)
10656 CALL_EXPR_ARG (t, i) = args[i];
10657 process_call_operands (t);
10658 SET_EXPR_LOCATION (t, loc);
10659 return t;
10662 /* Like build_call_array, but takes a vec. */
10664 tree
10665 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
10667 tree ret, t;
10668 unsigned int ix;
10670 ret = build_call_1 (return_type, fn, vec_safe_length (args));
10671 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
10672 CALL_EXPR_ARG (ret, ix) = t;
10673 process_call_operands (ret);
10674 return ret;
10677 /* Conveniently construct a function call expression. FNDECL names the
10678 function to be called and N arguments are passed in the array
10679 ARGARRAY. */
10681 tree
10682 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
10684 tree fntype = TREE_TYPE (fndecl);
10685 tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
10687 return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
10690 /* Conveniently construct a function call expression. FNDECL names the
10691 function to be called and the arguments are passed in the vector
10692 VEC. */
10694 tree
10695 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
10697 return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
10698 vec_safe_address (vec));
10702 /* Conveniently construct a function call expression. FNDECL names the
10703 function to be called, N is the number of arguments, and the "..."
10704 parameters are the argument expressions. */
10706 tree
10707 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
10709 va_list ap;
10710 tree *argarray = XALLOCAVEC (tree, n);
10711 int i;
10713 va_start (ap, n);
10714 for (i = 0; i < n; i++)
10715 argarray[i] = va_arg (ap, tree);
10716 va_end (ap);
10717 return build_call_expr_loc_array (loc, fndecl, n, argarray);
10720 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...). Duplicated because
10721 varargs macros aren't supported by all bootstrap compilers. */
10723 tree
10724 build_call_expr (tree fndecl, int n, ...)
10726 va_list ap;
10727 tree *argarray = XALLOCAVEC (tree, n);
10728 int i;
10730 va_start (ap, n);
10731 for (i = 0; i < n; i++)
10732 argarray[i] = va_arg (ap, tree);
10733 va_end (ap);
10734 return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
10737 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
10738 type TYPE. This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
10739 It will get gimplified later into an ordinary internal function. */
10741 tree
10742 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
10743 tree type, int n, const tree *args)
10745 tree t = build_call_1 (type, NULL_TREE, n);
10746 for (int i = 0; i < n; ++i)
10747 CALL_EXPR_ARG (t, i) = args[i];
10748 SET_EXPR_LOCATION (t, loc);
10749 CALL_EXPR_IFN (t) = ifn;
10750 return t;
10753 /* Build internal call expression. This is just like CALL_EXPR, except
10754 its CALL_EXPR_FN is NULL. It will get gimplified later into ordinary
10755 internal function. */
10757 tree
10758 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
10759 tree type, int n, ...)
10761 va_list ap;
10762 tree *argarray = XALLOCAVEC (tree, n);
10763 int i;
10765 va_start (ap, n);
10766 for (i = 0; i < n; i++)
10767 argarray[i] = va_arg (ap, tree);
10768 va_end (ap);
10769 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
10772 /* Return a function call to FN, if the target is guaranteed to support it,
10773 or null otherwise.
10775 N is the number of arguments, passed in the "...", and TYPE is the
10776 type of the return value. */
10778 tree
10779 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
10780 int n, ...)
10782 va_list ap;
10783 tree *argarray = XALLOCAVEC (tree, n);
10784 int i;
10786 va_start (ap, n);
10787 for (i = 0; i < n; i++)
10788 argarray[i] = va_arg (ap, tree);
10789 va_end (ap);
10790 if (internal_fn_p (fn))
10792 internal_fn ifn = as_internal_fn (fn);
10793 if (direct_internal_fn_p (ifn))
10795 tree_pair types = direct_internal_fn_types (ifn, type, argarray);
10796 if (!direct_internal_fn_supported_p (ifn, types,
10797 OPTIMIZE_FOR_BOTH))
10798 return NULL_TREE;
10800 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
10802 else
10804 tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
10805 if (!fndecl)
10806 return NULL_TREE;
10807 return build_call_expr_loc_array (loc, fndecl, n, argarray);
10811 /* Return a function call to the appropriate builtin alloca variant.
10813 SIZE is the size to be allocated. ALIGN, if non-zero, is the requested
10814 alignment of the allocated area. MAX_SIZE, if non-negative, is an upper
10815 bound for SIZE in case it is not a fixed value. */
10817 tree
10818 build_alloca_call_expr (tree size, unsigned int align, HOST_WIDE_INT max_size)
10820 if (max_size >= 0)
10822 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX);
10823 return
10824 build_call_expr (t, 3, size, size_int (align), size_int (max_size));
10826 else if (align > 0)
10828 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN);
10829 return build_call_expr (t, 2, size, size_int (align));
10831 else
10833 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA);
10834 return build_call_expr (t, 1, size);
10838 /* Create a new constant string literal and return a char* pointer to it.
10839 The STRING_CST value is the LEN characters at STR. */
10840 tree
10841 build_string_literal (int len, const char *str)
10843 tree t, elem, index, type;
10845 t = build_string (len, str);
10846 elem = build_type_variant (char_type_node, 1, 0);
10847 index = build_index_type (size_int (len - 1));
10848 type = build_array_type (elem, index);
10849 TREE_TYPE (t) = type;
10850 TREE_CONSTANT (t) = 1;
10851 TREE_READONLY (t) = 1;
10852 TREE_STATIC (t) = 1;
10854 type = build_pointer_type (elem);
10855 t = build1 (ADDR_EXPR, type,
10856 build4 (ARRAY_REF, elem,
10857 t, integer_zero_node, NULL_TREE, NULL_TREE));
10858 return t;
10863 /* Return true if T (assumed to be a DECL) must be assigned a memory
10864 location. */
10866 bool
10867 needs_to_live_in_memory (const_tree t)
10869 return (TREE_ADDRESSABLE (t)
10870 || is_global_var (t)
10871 || (TREE_CODE (t) == RESULT_DECL
10872 && !DECL_BY_REFERENCE (t)
10873 && aggregate_value_p (t, current_function_decl)));
10876 /* Return value of a constant X and sign-extend it. */
10878 HOST_WIDE_INT
10879 int_cst_value (const_tree x)
10881 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10882 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
10884 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10885 gcc_assert (cst_and_fits_in_hwi (x));
10887 if (bits < HOST_BITS_PER_WIDE_INT)
10889 bool negative = ((val >> (bits - 1)) & 1) != 0;
10890 if (negative)
10891 val |= HOST_WIDE_INT_M1U << (bits - 1) << 1;
10892 else
10893 val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1);
10896 return val;
10899 /* If TYPE is an integral or pointer type, return an integer type with
10900 the same precision which is unsigned iff UNSIGNEDP is true, or itself
10901 if TYPE is already an integer type of signedness UNSIGNEDP. */
10903 tree
10904 signed_or_unsigned_type_for (int unsignedp, tree type)
10906 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
10907 return type;
10909 if (TREE_CODE (type) == VECTOR_TYPE)
10911 tree inner = TREE_TYPE (type);
10912 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
10913 if (!inner2)
10914 return NULL_TREE;
10915 if (inner == inner2)
10916 return type;
10917 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
10920 if (!INTEGRAL_TYPE_P (type)
10921 && !POINTER_TYPE_P (type)
10922 && TREE_CODE (type) != OFFSET_TYPE)
10923 return NULL_TREE;
10925 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
10928 /* If TYPE is an integral or pointer type, return an integer type with
10929 the same precision which is unsigned, or itself if TYPE is already an
10930 unsigned integer type. */
10932 tree
10933 unsigned_type_for (tree type)
10935 return signed_or_unsigned_type_for (1, type);
10938 /* If TYPE is an integral or pointer type, return an integer type with
10939 the same precision which is signed, or itself if TYPE is already a
10940 signed integer type. */
10942 tree
10943 signed_type_for (tree type)
10945 return signed_or_unsigned_type_for (0, type);
10948 /* If TYPE is a vector type, return a signed integer vector type with the
10949 same width and number of subparts. Otherwise return boolean_type_node. */
10951 tree
10952 truth_type_for (tree type)
10954 if (TREE_CODE (type) == VECTOR_TYPE)
10956 if (VECTOR_BOOLEAN_TYPE_P (type))
10957 return type;
10958 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
10959 GET_MODE_SIZE (TYPE_MODE (type)));
10961 else
10962 return boolean_type_node;
10965 /* Returns the largest value obtainable by casting something in INNER type to
10966 OUTER type. */
10968 tree
10969 upper_bound_in_type (tree outer, tree inner)
10971 unsigned int det = 0;
10972 unsigned oprec = TYPE_PRECISION (outer);
10973 unsigned iprec = TYPE_PRECISION (inner);
10974 unsigned prec;
10976 /* Compute a unique number for every combination. */
10977 det |= (oprec > iprec) ? 4 : 0;
10978 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
10979 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
10981 /* Determine the exponent to use. */
10982 switch (det)
10984 case 0:
10985 case 1:
10986 /* oprec <= iprec, outer: signed, inner: don't care. */
10987 prec = oprec - 1;
10988 break;
10989 case 2:
10990 case 3:
10991 /* oprec <= iprec, outer: unsigned, inner: don't care. */
10992 prec = oprec;
10993 break;
10994 case 4:
10995 /* oprec > iprec, outer: signed, inner: signed. */
10996 prec = iprec - 1;
10997 break;
10998 case 5:
10999 /* oprec > iprec, outer: signed, inner: unsigned. */
11000 prec = iprec;
11001 break;
11002 case 6:
11003 /* oprec > iprec, outer: unsigned, inner: signed. */
11004 prec = oprec;
11005 break;
11006 case 7:
11007 /* oprec > iprec, outer: unsigned, inner: unsigned. */
11008 prec = iprec;
11009 break;
11010 default:
11011 gcc_unreachable ();
11014 return wide_int_to_tree (outer,
11015 wi::mask (prec, false, TYPE_PRECISION (outer)));
11018 /* Returns the smallest value obtainable by casting something in INNER type to
11019 OUTER type. */
11021 tree
11022 lower_bound_in_type (tree outer, tree inner)
11024 unsigned oprec = TYPE_PRECISION (outer);
11025 unsigned iprec = TYPE_PRECISION (inner);
11027 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11028 and obtain 0. */
11029 if (TYPE_UNSIGNED (outer)
11030 /* If we are widening something of an unsigned type, OUTER type
11031 contains all values of INNER type. In particular, both INNER
11032 and OUTER types have zero in common. */
11033 || (oprec > iprec && TYPE_UNSIGNED (inner)))
11034 return build_int_cst (outer, 0);
11035 else
11037 /* If we are widening a signed type to another signed type, we
11038 want to obtain -2^^(iprec-1). If we are keeping the
11039 precision or narrowing to a signed type, we want to obtain
11040 -2^(oprec-1). */
11041 unsigned prec = oprec > iprec ? iprec : oprec;
11042 return wide_int_to_tree (outer,
11043 wi::mask (prec - 1, true,
11044 TYPE_PRECISION (outer)));
11048 /* Return nonzero if two operands that are suitable for PHI nodes are
11049 necessarily equal. Specifically, both ARG0 and ARG1 must be either
11050 SSA_NAME or invariant. Note that this is strictly an optimization.
11051 That is, callers of this function can directly call operand_equal_p
11052 and get the same result, only slower. */
11055 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11057 if (arg0 == arg1)
11058 return 1;
11059 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11060 return 0;
11061 return operand_equal_p (arg0, arg1, 0);
11064 /* Returns number of zeros at the end of binary representation of X. */
11066 tree
11067 num_ending_zeros (const_tree x)
11069 return build_int_cst (TREE_TYPE (x), wi::ctz (wi::to_wide (x)));
11073 #define WALK_SUBTREE(NODE) \
11074 do \
11076 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
11077 if (result) \
11078 return result; \
11080 while (0)
11082 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11083 be walked whenever a type is seen in the tree. Rest of operands and return
11084 value are as for walk_tree. */
11086 static tree
11087 walk_type_fields (tree type, walk_tree_fn func, void *data,
11088 hash_set<tree> *pset, walk_tree_lh lh)
11090 tree result = NULL_TREE;
11092 switch (TREE_CODE (type))
11094 case POINTER_TYPE:
11095 case REFERENCE_TYPE:
11096 case VECTOR_TYPE:
11097 /* We have to worry about mutually recursive pointers. These can't
11098 be written in C. They can in Ada. It's pathological, but
11099 there's an ACATS test (c38102a) that checks it. Deal with this
11100 by checking if we're pointing to another pointer, that one
11101 points to another pointer, that one does too, and we have no htab.
11102 If so, get a hash table. We check three levels deep to avoid
11103 the cost of the hash table if we don't need one. */
11104 if (POINTER_TYPE_P (TREE_TYPE (type))
11105 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11106 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11107 && !pset)
11109 result = walk_tree_without_duplicates (&TREE_TYPE (type),
11110 func, data);
11111 if (result)
11112 return result;
11114 break;
11117 /* fall through */
11119 case COMPLEX_TYPE:
11120 WALK_SUBTREE (TREE_TYPE (type));
11121 break;
11123 case METHOD_TYPE:
11124 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11126 /* Fall through. */
11128 case FUNCTION_TYPE:
11129 WALK_SUBTREE (TREE_TYPE (type));
11131 tree arg;
11133 /* We never want to walk into default arguments. */
11134 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11135 WALK_SUBTREE (TREE_VALUE (arg));
11137 break;
11139 case ARRAY_TYPE:
11140 /* Don't follow this nodes's type if a pointer for fear that
11141 we'll have infinite recursion. If we have a PSET, then we
11142 need not fear. */
11143 if (pset
11144 || (!POINTER_TYPE_P (TREE_TYPE (type))
11145 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11146 WALK_SUBTREE (TREE_TYPE (type));
11147 WALK_SUBTREE (TYPE_DOMAIN (type));
11148 break;
11150 case OFFSET_TYPE:
11151 WALK_SUBTREE (TREE_TYPE (type));
11152 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11153 break;
11155 default:
11156 break;
11159 return NULL_TREE;
11162 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
11163 called with the DATA and the address of each sub-tree. If FUNC returns a
11164 non-NULL value, the traversal is stopped, and the value returned by FUNC
11165 is returned. If PSET is non-NULL it is used to record the nodes visited,
11166 and to avoid visiting a node more than once. */
11168 tree
11169 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11170 hash_set<tree> *pset, walk_tree_lh lh)
11172 enum tree_code code;
11173 int walk_subtrees;
11174 tree result;
11176 #define WALK_SUBTREE_TAIL(NODE) \
11177 do \
11179 tp = & (NODE); \
11180 goto tail_recurse; \
11182 while (0)
11184 tail_recurse:
11185 /* Skip empty subtrees. */
11186 if (!*tp)
11187 return NULL_TREE;
11189 /* Don't walk the same tree twice, if the user has requested
11190 that we avoid doing so. */
11191 if (pset && pset->add (*tp))
11192 return NULL_TREE;
11194 /* Call the function. */
11195 walk_subtrees = 1;
11196 result = (*func) (tp, &walk_subtrees, data);
11198 /* If we found something, return it. */
11199 if (result)
11200 return result;
11202 code = TREE_CODE (*tp);
11204 /* Even if we didn't, FUNC may have decided that there was nothing
11205 interesting below this point in the tree. */
11206 if (!walk_subtrees)
11208 /* But we still need to check our siblings. */
11209 if (code == TREE_LIST)
11210 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11211 else if (code == OMP_CLAUSE)
11212 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11213 else
11214 return NULL_TREE;
11217 if (lh)
11219 result = (*lh) (tp, &walk_subtrees, func, data, pset);
11220 if (result || !walk_subtrees)
11221 return result;
11224 switch (code)
11226 case ERROR_MARK:
11227 case IDENTIFIER_NODE:
11228 case INTEGER_CST:
11229 case REAL_CST:
11230 case FIXED_CST:
11231 case VECTOR_CST:
11232 case STRING_CST:
11233 case BLOCK:
11234 case PLACEHOLDER_EXPR:
11235 case SSA_NAME:
11236 case FIELD_DECL:
11237 case RESULT_DECL:
11238 /* None of these have subtrees other than those already walked
11239 above. */
11240 break;
11242 case TREE_LIST:
11243 WALK_SUBTREE (TREE_VALUE (*tp));
11244 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11245 break;
11247 case TREE_VEC:
11249 int len = TREE_VEC_LENGTH (*tp);
11251 if (len == 0)
11252 break;
11254 /* Walk all elements but the first. */
11255 while (--len)
11256 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11258 /* Now walk the first one as a tail call. */
11259 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11262 case COMPLEX_CST:
11263 WALK_SUBTREE (TREE_REALPART (*tp));
11264 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11266 case CONSTRUCTOR:
11268 unsigned HOST_WIDE_INT idx;
11269 constructor_elt *ce;
11271 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11272 idx++)
11273 WALK_SUBTREE (ce->value);
11275 break;
11277 case SAVE_EXPR:
11278 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11280 case BIND_EXPR:
11282 tree decl;
11283 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11285 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
11286 into declarations that are just mentioned, rather than
11287 declared; they don't really belong to this part of the tree.
11288 And, we can see cycles: the initializer for a declaration
11289 can refer to the declaration itself. */
11290 WALK_SUBTREE (DECL_INITIAL (decl));
11291 WALK_SUBTREE (DECL_SIZE (decl));
11292 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11294 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11297 case STATEMENT_LIST:
11299 tree_stmt_iterator i;
11300 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11301 WALK_SUBTREE (*tsi_stmt_ptr (i));
11303 break;
11305 case OMP_CLAUSE:
11306 switch (OMP_CLAUSE_CODE (*tp))
11308 case OMP_CLAUSE_GANG:
11309 case OMP_CLAUSE__GRIDDIM_:
11310 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11311 /* FALLTHRU */
11313 case OMP_CLAUSE_ASYNC:
11314 case OMP_CLAUSE_WAIT:
11315 case OMP_CLAUSE_WORKER:
11316 case OMP_CLAUSE_VECTOR:
11317 case OMP_CLAUSE_NUM_GANGS:
11318 case OMP_CLAUSE_NUM_WORKERS:
11319 case OMP_CLAUSE_VECTOR_LENGTH:
11320 case OMP_CLAUSE_PRIVATE:
11321 case OMP_CLAUSE_SHARED:
11322 case OMP_CLAUSE_FIRSTPRIVATE:
11323 case OMP_CLAUSE_COPYIN:
11324 case OMP_CLAUSE_COPYPRIVATE:
11325 case OMP_CLAUSE_FINAL:
11326 case OMP_CLAUSE_IF:
11327 case OMP_CLAUSE_NUM_THREADS:
11328 case OMP_CLAUSE_SCHEDULE:
11329 case OMP_CLAUSE_UNIFORM:
11330 case OMP_CLAUSE_DEPEND:
11331 case OMP_CLAUSE_NUM_TEAMS:
11332 case OMP_CLAUSE_THREAD_LIMIT:
11333 case OMP_CLAUSE_DEVICE:
11334 case OMP_CLAUSE_DIST_SCHEDULE:
11335 case OMP_CLAUSE_SAFELEN:
11336 case OMP_CLAUSE_SIMDLEN:
11337 case OMP_CLAUSE_ORDERED:
11338 case OMP_CLAUSE_PRIORITY:
11339 case OMP_CLAUSE_GRAINSIZE:
11340 case OMP_CLAUSE_NUM_TASKS:
11341 case OMP_CLAUSE_HINT:
11342 case OMP_CLAUSE_TO_DECLARE:
11343 case OMP_CLAUSE_LINK:
11344 case OMP_CLAUSE_USE_DEVICE_PTR:
11345 case OMP_CLAUSE_IS_DEVICE_PTR:
11346 case OMP_CLAUSE__LOOPTEMP_:
11347 case OMP_CLAUSE__SIMDUID_:
11348 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11349 /* FALLTHRU */
11351 case OMP_CLAUSE_INDEPENDENT:
11352 case OMP_CLAUSE_NOWAIT:
11353 case OMP_CLAUSE_DEFAULT:
11354 case OMP_CLAUSE_UNTIED:
11355 case OMP_CLAUSE_MERGEABLE:
11356 case OMP_CLAUSE_PROC_BIND:
11357 case OMP_CLAUSE_INBRANCH:
11358 case OMP_CLAUSE_NOTINBRANCH:
11359 case OMP_CLAUSE_FOR:
11360 case OMP_CLAUSE_PARALLEL:
11361 case OMP_CLAUSE_SECTIONS:
11362 case OMP_CLAUSE_TASKGROUP:
11363 case OMP_CLAUSE_NOGROUP:
11364 case OMP_CLAUSE_THREADS:
11365 case OMP_CLAUSE_SIMD:
11366 case OMP_CLAUSE_DEFAULTMAP:
11367 case OMP_CLAUSE_AUTO:
11368 case OMP_CLAUSE_SEQ:
11369 case OMP_CLAUSE_TILE:
11370 case OMP_CLAUSE__SIMT_:
11371 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11373 case OMP_CLAUSE_LASTPRIVATE:
11374 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11375 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
11376 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11378 case OMP_CLAUSE_COLLAPSE:
11380 int i;
11381 for (i = 0; i < 3; i++)
11382 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11383 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11386 case OMP_CLAUSE_LINEAR:
11387 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11388 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
11389 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
11390 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11392 case OMP_CLAUSE_ALIGNED:
11393 case OMP_CLAUSE_FROM:
11394 case OMP_CLAUSE_TO:
11395 case OMP_CLAUSE_MAP:
11396 case OMP_CLAUSE__CACHE_:
11397 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11398 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11399 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11401 case OMP_CLAUSE_REDUCTION:
11403 int i;
11404 for (i = 0; i < 5; i++)
11405 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11406 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11409 default:
11410 gcc_unreachable ();
11412 break;
11414 case TARGET_EXPR:
11416 int i, len;
11418 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
11419 But, we only want to walk once. */
11420 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
11421 for (i = 0; i < len; ++i)
11422 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11423 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
11426 case DECL_EXPR:
11427 /* If this is a TYPE_DECL, walk into the fields of the type that it's
11428 defining. We only want to walk into these fields of a type in this
11429 case and not in the general case of a mere reference to the type.
11431 The criterion is as follows: if the field can be an expression, it
11432 must be walked only here. This should be in keeping with the fields
11433 that are directly gimplified in gimplify_type_sizes in order for the
11434 mark/copy-if-shared/unmark machinery of the gimplifier to work with
11435 variable-sized types.
11437 Note that DECLs get walked as part of processing the BIND_EXPR. */
11438 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
11440 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
11441 if (TREE_CODE (*type_p) == ERROR_MARK)
11442 return NULL_TREE;
11444 /* Call the function for the type. See if it returns anything or
11445 doesn't want us to continue. If we are to continue, walk both
11446 the normal fields and those for the declaration case. */
11447 result = (*func) (type_p, &walk_subtrees, data);
11448 if (result || !walk_subtrees)
11449 return result;
11451 /* But do not walk a pointed-to type since it may itself need to
11452 be walked in the declaration case if it isn't anonymous. */
11453 if (!POINTER_TYPE_P (*type_p))
11455 result = walk_type_fields (*type_p, func, data, pset, lh);
11456 if (result)
11457 return result;
11460 /* If this is a record type, also walk the fields. */
11461 if (RECORD_OR_UNION_TYPE_P (*type_p))
11463 tree field;
11465 for (field = TYPE_FIELDS (*type_p); field;
11466 field = DECL_CHAIN (field))
11468 /* We'd like to look at the type of the field, but we can
11469 easily get infinite recursion. So assume it's pointed
11470 to elsewhere in the tree. Also, ignore things that
11471 aren't fields. */
11472 if (TREE_CODE (field) != FIELD_DECL)
11473 continue;
11475 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
11476 WALK_SUBTREE (DECL_SIZE (field));
11477 WALK_SUBTREE (DECL_SIZE_UNIT (field));
11478 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
11479 WALK_SUBTREE (DECL_QUALIFIER (field));
11483 /* Same for scalar types. */
11484 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
11485 || TREE_CODE (*type_p) == ENUMERAL_TYPE
11486 || TREE_CODE (*type_p) == INTEGER_TYPE
11487 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
11488 || TREE_CODE (*type_p) == REAL_TYPE)
11490 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
11491 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
11494 WALK_SUBTREE (TYPE_SIZE (*type_p));
11495 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
11497 /* FALLTHRU */
11499 default:
11500 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
11502 int i, len;
11504 /* Walk over all the sub-trees of this operand. */
11505 len = TREE_OPERAND_LENGTH (*tp);
11507 /* Go through the subtrees. We need to do this in forward order so
11508 that the scope of a FOR_EXPR is handled properly. */
11509 if (len)
11511 for (i = 0; i < len - 1; ++i)
11512 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11513 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
11516 /* If this is a type, walk the needed fields in the type. */
11517 else if (TYPE_P (*tp))
11518 return walk_type_fields (*tp, func, data, pset, lh);
11519 break;
11522 /* We didn't find what we were looking for. */
11523 return NULL_TREE;
11525 #undef WALK_SUBTREE_TAIL
11527 #undef WALK_SUBTREE
11529 /* Like walk_tree, but does not walk duplicate nodes more than once. */
11531 tree
11532 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
11533 walk_tree_lh lh)
11535 tree result;
11537 hash_set<tree> pset;
11538 result = walk_tree_1 (tp, func, data, &pset, lh);
11539 return result;
11543 tree
11544 tree_block (tree t)
11546 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11548 if (IS_EXPR_CODE_CLASS (c))
11549 return LOCATION_BLOCK (t->exp.locus);
11550 gcc_unreachable ();
11551 return NULL;
11554 void
11555 tree_set_block (tree t, tree b)
11557 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11559 if (IS_EXPR_CODE_CLASS (c))
11561 t->exp.locus = set_block (t->exp.locus, b);
11563 else
11564 gcc_unreachable ();
11567 /* Create a nameless artificial label and put it in the current
11568 function context. The label has a location of LOC. Returns the
11569 newly created label. */
11571 tree
11572 create_artificial_label (location_t loc)
11574 tree lab = build_decl (loc,
11575 LABEL_DECL, NULL_TREE, void_type_node);
11577 DECL_ARTIFICIAL (lab) = 1;
11578 DECL_IGNORED_P (lab) = 1;
11579 DECL_CONTEXT (lab) = current_function_decl;
11580 return lab;
11583 /* Given a tree, try to return a useful variable name that we can use
11584 to prefix a temporary that is being assigned the value of the tree.
11585 I.E. given <temp> = &A, return A. */
11587 const char *
11588 get_name (tree t)
11590 tree stripped_decl;
11592 stripped_decl = t;
11593 STRIP_NOPS (stripped_decl);
11594 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
11595 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
11596 else if (TREE_CODE (stripped_decl) == SSA_NAME)
11598 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
11599 if (!name)
11600 return NULL;
11601 return IDENTIFIER_POINTER (name);
11603 else
11605 switch (TREE_CODE (stripped_decl))
11607 case ADDR_EXPR:
11608 return get_name (TREE_OPERAND (stripped_decl, 0));
11609 default:
11610 return NULL;
11615 /* Return true if TYPE has a variable argument list. */
11617 bool
11618 stdarg_p (const_tree fntype)
11620 function_args_iterator args_iter;
11621 tree n = NULL_TREE, t;
11623 if (!fntype)
11624 return false;
11626 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
11628 n = t;
11631 return n != NULL_TREE && n != void_type_node;
11634 /* Return true if TYPE has a prototype. */
11636 bool
11637 prototype_p (const_tree fntype)
11639 tree t;
11641 gcc_assert (fntype != NULL_TREE);
11643 t = TYPE_ARG_TYPES (fntype);
11644 return (t != NULL_TREE);
11647 /* If BLOCK is inlined from an __attribute__((__artificial__))
11648 routine, return pointer to location from where it has been
11649 called. */
11650 location_t *
11651 block_nonartificial_location (tree block)
11653 location_t *ret = NULL;
11655 while (block && TREE_CODE (block) == BLOCK
11656 && BLOCK_ABSTRACT_ORIGIN (block))
11658 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
11660 while (TREE_CODE (ao) == BLOCK
11661 && BLOCK_ABSTRACT_ORIGIN (ao)
11662 && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
11663 ao = BLOCK_ABSTRACT_ORIGIN (ao);
11665 if (TREE_CODE (ao) == FUNCTION_DECL)
11667 /* If AO is an artificial inline, point RET to the
11668 call site locus at which it has been inlined and continue
11669 the loop, in case AO's caller is also an artificial
11670 inline. */
11671 if (DECL_DECLARED_INLINE_P (ao)
11672 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
11673 ret = &BLOCK_SOURCE_LOCATION (block);
11674 else
11675 break;
11677 else if (TREE_CODE (ao) != BLOCK)
11678 break;
11680 block = BLOCK_SUPERCONTEXT (block);
11682 return ret;
11686 /* If EXP is inlined from an __attribute__((__artificial__))
11687 function, return the location of the original call expression. */
11689 location_t
11690 tree_nonartificial_location (tree exp)
11692 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
11694 if (loc)
11695 return *loc;
11696 else
11697 return EXPR_LOCATION (exp);
11701 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
11702 nodes. */
11704 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
11706 hashval_t
11707 cl_option_hasher::hash (tree x)
11709 const_tree const t = x;
11710 const char *p;
11711 size_t i;
11712 size_t len = 0;
11713 hashval_t hash = 0;
11715 if (TREE_CODE (t) == OPTIMIZATION_NODE)
11717 p = (const char *)TREE_OPTIMIZATION (t);
11718 len = sizeof (struct cl_optimization);
11721 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
11722 return cl_target_option_hash (TREE_TARGET_OPTION (t));
11724 else
11725 gcc_unreachable ();
11727 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
11728 something else. */
11729 for (i = 0; i < len; i++)
11730 if (p[i])
11731 hash = (hash << 4) ^ ((i << 2) | p[i]);
11733 return hash;
11736 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
11737 TARGET_OPTION tree node) is the same as that given by *Y, which is the
11738 same. */
11740 bool
11741 cl_option_hasher::equal (tree x, tree y)
11743 const_tree const xt = x;
11744 const_tree const yt = y;
11745 const char *xp;
11746 const char *yp;
11747 size_t len;
11749 if (TREE_CODE (xt) != TREE_CODE (yt))
11750 return 0;
11752 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
11754 xp = (const char *)TREE_OPTIMIZATION (xt);
11755 yp = (const char *)TREE_OPTIMIZATION (yt);
11756 len = sizeof (struct cl_optimization);
11759 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
11761 return cl_target_option_eq (TREE_TARGET_OPTION (xt),
11762 TREE_TARGET_OPTION (yt));
11765 else
11766 gcc_unreachable ();
11768 return (memcmp (xp, yp, len) == 0);
11771 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */
11773 tree
11774 build_optimization_node (struct gcc_options *opts)
11776 tree t;
11778 /* Use the cache of optimization nodes. */
11780 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
11781 opts);
11783 tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
11784 t = *slot;
11785 if (!t)
11787 /* Insert this one into the hash table. */
11788 t = cl_optimization_node;
11789 *slot = t;
11791 /* Make a new node for next time round. */
11792 cl_optimization_node = make_node (OPTIMIZATION_NODE);
11795 return t;
11798 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */
11800 tree
11801 build_target_option_node (struct gcc_options *opts)
11803 tree t;
11805 /* Use the cache of optimization nodes. */
11807 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
11808 opts);
11810 tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
11811 t = *slot;
11812 if (!t)
11814 /* Insert this one into the hash table. */
11815 t = cl_target_option_node;
11816 *slot = t;
11818 /* Make a new node for next time round. */
11819 cl_target_option_node = make_node (TARGET_OPTION_NODE);
11822 return t;
11825 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
11826 so that they aren't saved during PCH writing. */
11828 void
11829 prepare_target_option_nodes_for_pch (void)
11831 hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
11832 for (; iter != cl_option_hash_table->end (); ++iter)
11833 if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
11834 TREE_TARGET_GLOBALS (*iter) = NULL;
11837 /* Determine the "ultimate origin" of a block. The block may be an inlined
11838 instance of an inlined instance of a block which is local to an inline
11839 function, so we have to trace all of the way back through the origin chain
11840 to find out what sort of node actually served as the original seed for the
11841 given block. */
11843 tree
11844 block_ultimate_origin (const_tree block)
11846 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
11848 /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
11849 we're trying to output the abstract instance of this function. */
11850 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
11851 return NULL_TREE;
11853 if (immediate_origin == NULL_TREE)
11854 return NULL_TREE;
11855 else
11857 tree ret_val;
11858 tree lookahead = immediate_origin;
11862 ret_val = lookahead;
11863 lookahead = (TREE_CODE (ret_val) == BLOCK
11864 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
11866 while (lookahead != NULL && lookahead != ret_val);
11868 /* The block's abstract origin chain may not be the *ultimate* origin of
11869 the block. It could lead to a DECL that has an abstract origin set.
11870 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
11871 will give us if it has one). Note that DECL's abstract origins are
11872 supposed to be the most distant ancestor (or so decl_ultimate_origin
11873 claims), so we don't need to loop following the DECL origins. */
11874 if (DECL_P (ret_val))
11875 return DECL_ORIGIN (ret_val);
11877 return ret_val;
11881 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
11882 no instruction. */
11884 bool
11885 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
11887 /* Do not strip casts into or out of differing address spaces. */
11888 if (POINTER_TYPE_P (outer_type)
11889 && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
11891 if (!POINTER_TYPE_P (inner_type)
11892 || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
11893 != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
11894 return false;
11896 else if (POINTER_TYPE_P (inner_type)
11897 && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
11899 /* We already know that outer_type is not a pointer with
11900 a non-generic address space. */
11901 return false;
11904 /* Use precision rather then machine mode when we can, which gives
11905 the correct answer even for submode (bit-field) types. */
11906 if ((INTEGRAL_TYPE_P (outer_type)
11907 || POINTER_TYPE_P (outer_type)
11908 || TREE_CODE (outer_type) == OFFSET_TYPE)
11909 && (INTEGRAL_TYPE_P (inner_type)
11910 || POINTER_TYPE_P (inner_type)
11911 || TREE_CODE (inner_type) == OFFSET_TYPE))
11912 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
11914 /* Otherwise fall back on comparing machine modes (e.g. for
11915 aggregate types, floats). */
11916 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
11919 /* Return true iff conversion in EXP generates no instruction. Mark
11920 it inline so that we fully inline into the stripping functions even
11921 though we have two uses of this function. */
11923 static inline bool
11924 tree_nop_conversion (const_tree exp)
11926 tree outer_type, inner_type;
11928 if (!CONVERT_EXPR_P (exp)
11929 && TREE_CODE (exp) != NON_LVALUE_EXPR)
11930 return false;
11931 if (TREE_OPERAND (exp, 0) == error_mark_node)
11932 return false;
11934 outer_type = TREE_TYPE (exp);
11935 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11937 if (!inner_type)
11938 return false;
11940 return tree_nop_conversion_p (outer_type, inner_type);
11943 /* Return true iff conversion in EXP generates no instruction. Don't
11944 consider conversions changing the signedness. */
11946 static bool
11947 tree_sign_nop_conversion (const_tree exp)
11949 tree outer_type, inner_type;
11951 if (!tree_nop_conversion (exp))
11952 return false;
11954 outer_type = TREE_TYPE (exp);
11955 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11957 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
11958 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
11961 /* Strip conversions from EXP according to tree_nop_conversion and
11962 return the resulting expression. */
11964 tree
11965 tree_strip_nop_conversions (tree exp)
11967 while (tree_nop_conversion (exp))
11968 exp = TREE_OPERAND (exp, 0);
11969 return exp;
11972 /* Strip conversions from EXP according to tree_sign_nop_conversion
11973 and return the resulting expression. */
11975 tree
11976 tree_strip_sign_nop_conversions (tree exp)
11978 while (tree_sign_nop_conversion (exp))
11979 exp = TREE_OPERAND (exp, 0);
11980 return exp;
11983 /* Avoid any floating point extensions from EXP. */
11984 tree
11985 strip_float_extensions (tree exp)
11987 tree sub, expt, subt;
11989 /* For floating point constant look up the narrowest type that can hold
11990 it properly and handle it like (type)(narrowest_type)constant.
11991 This way we can optimize for instance a=a*2.0 where "a" is float
11992 but 2.0 is double constant. */
11993 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
11995 REAL_VALUE_TYPE orig;
11996 tree type = NULL;
11998 orig = TREE_REAL_CST (exp);
11999 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12000 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12001 type = float_type_node;
12002 else if (TYPE_PRECISION (TREE_TYPE (exp))
12003 > TYPE_PRECISION (double_type_node)
12004 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12005 type = double_type_node;
12006 if (type)
12007 return build_real_truncate (type, orig);
12010 if (!CONVERT_EXPR_P (exp))
12011 return exp;
12013 sub = TREE_OPERAND (exp, 0);
12014 subt = TREE_TYPE (sub);
12015 expt = TREE_TYPE (exp);
12017 if (!FLOAT_TYPE_P (subt))
12018 return exp;
12020 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12021 return exp;
12023 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12024 return exp;
12026 return strip_float_extensions (sub);
12029 /* Strip out all handled components that produce invariant
12030 offsets. */
12032 const_tree
12033 strip_invariant_refs (const_tree op)
12035 while (handled_component_p (op))
12037 switch (TREE_CODE (op))
12039 case ARRAY_REF:
12040 case ARRAY_RANGE_REF:
12041 if (!is_gimple_constant (TREE_OPERAND (op, 1))
12042 || TREE_OPERAND (op, 2) != NULL_TREE
12043 || TREE_OPERAND (op, 3) != NULL_TREE)
12044 return NULL;
12045 break;
12047 case COMPONENT_REF:
12048 if (TREE_OPERAND (op, 2) != NULL_TREE)
12049 return NULL;
12050 break;
12052 default:;
12054 op = TREE_OPERAND (op, 0);
12057 return op;
12060 static GTY(()) tree gcc_eh_personality_decl;
12062 /* Return the GCC personality function decl. */
12064 tree
12065 lhd_gcc_personality (void)
12067 if (!gcc_eh_personality_decl)
12068 gcc_eh_personality_decl = build_personality_function ("gcc");
12069 return gcc_eh_personality_decl;
12072 /* TARGET is a call target of GIMPLE call statement
12073 (obtained by gimple_call_fn). Return true if it is
12074 OBJ_TYPE_REF representing an virtual call of C++ method.
12075 (As opposed to OBJ_TYPE_REF representing objc calls
12076 through a cast where middle-end devirtualization machinery
12077 can't apply.) */
12079 bool
12080 virtual_method_call_p (const_tree target)
12082 if (TREE_CODE (target) != OBJ_TYPE_REF)
12083 return false;
12084 tree t = TREE_TYPE (target);
12085 gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12086 t = TREE_TYPE (t);
12087 if (TREE_CODE (t) == FUNCTION_TYPE)
12088 return false;
12089 gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12090 /* If we do not have BINFO associated, it means that type was built
12091 without devirtualization enabled. Do not consider this a virtual
12092 call. */
12093 if (!TYPE_BINFO (obj_type_ref_class (target)))
12094 return false;
12095 return true;
12098 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */
12100 tree
12101 obj_type_ref_class (const_tree ref)
12103 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12104 ref = TREE_TYPE (ref);
12105 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12106 ref = TREE_TYPE (ref);
12107 /* We look for type THIS points to. ObjC also builds
12108 OBJ_TYPE_REF with non-method calls, Their first parameter
12109 ID however also corresponds to class type. */
12110 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12111 || TREE_CODE (ref) == FUNCTION_TYPE);
12112 ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12113 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12114 return TREE_TYPE (ref);
12117 /* Lookup sub-BINFO of BINFO of TYPE at offset POS. */
12119 static tree
12120 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12122 unsigned int i;
12123 tree base_binfo, b;
12125 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12126 if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12127 && types_same_for_odr (TREE_TYPE (base_binfo), type))
12128 return base_binfo;
12129 else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12130 return b;
12131 return NULL;
12134 /* Try to find a base info of BINFO that would have its field decl at offset
12135 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
12136 found, return, otherwise return NULL_TREE. */
12138 tree
12139 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12141 tree type = BINFO_TYPE (binfo);
12143 while (true)
12145 HOST_WIDE_INT pos, size;
12146 tree fld;
12147 int i;
12149 if (types_same_for_odr (type, expected_type))
12150 return binfo;
12151 if (offset < 0)
12152 return NULL_TREE;
12154 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12156 if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12157 continue;
12159 pos = int_bit_position (fld);
12160 size = tree_to_uhwi (DECL_SIZE (fld));
12161 if (pos <= offset && (pos + size) > offset)
12162 break;
12164 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12165 return NULL_TREE;
12167 /* Offset 0 indicates the primary base, whose vtable contents are
12168 represented in the binfo for the derived class. */
12169 else if (offset != 0)
12171 tree found_binfo = NULL, base_binfo;
12172 /* Offsets in BINFO are in bytes relative to the whole structure
12173 while POS is in bits relative to the containing field. */
12174 int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12175 / BITS_PER_UNIT);
12177 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12178 if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12179 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12181 found_binfo = base_binfo;
12182 break;
12184 if (found_binfo)
12185 binfo = found_binfo;
12186 else
12187 binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12188 binfo_offset);
12191 type = TREE_TYPE (fld);
12192 offset -= pos;
12196 /* Returns true if X is a typedef decl. */
12198 bool
12199 is_typedef_decl (const_tree x)
12201 return (x && TREE_CODE (x) == TYPE_DECL
12202 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12205 /* Returns true iff TYPE is a type variant created for a typedef. */
12207 bool
12208 typedef_variant_p (const_tree type)
12210 return is_typedef_decl (TYPE_NAME (type));
12213 /* Warn about a use of an identifier which was marked deprecated. */
12214 void
12215 warn_deprecated_use (tree node, tree attr)
12217 const char *msg;
12219 if (node == 0 || !warn_deprecated_decl)
12220 return;
12222 if (!attr)
12224 if (DECL_P (node))
12225 attr = DECL_ATTRIBUTES (node);
12226 else if (TYPE_P (node))
12228 tree decl = TYPE_STUB_DECL (node);
12229 if (decl)
12230 attr = lookup_attribute ("deprecated",
12231 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12235 if (attr)
12236 attr = lookup_attribute ("deprecated", attr);
12238 if (attr)
12239 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12240 else
12241 msg = NULL;
12243 bool w;
12244 if (DECL_P (node))
12246 if (msg)
12247 w = warning (OPT_Wdeprecated_declarations,
12248 "%qD is deprecated: %s", node, msg);
12249 else
12250 w = warning (OPT_Wdeprecated_declarations,
12251 "%qD is deprecated", node);
12252 if (w)
12253 inform (DECL_SOURCE_LOCATION (node), "declared here");
12255 else if (TYPE_P (node))
12257 tree what = NULL_TREE;
12258 tree decl = TYPE_STUB_DECL (node);
12260 if (TYPE_NAME (node))
12262 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12263 what = TYPE_NAME (node);
12264 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12265 && DECL_NAME (TYPE_NAME (node)))
12266 what = DECL_NAME (TYPE_NAME (node));
12269 if (decl)
12271 if (what)
12273 if (msg)
12274 w = warning (OPT_Wdeprecated_declarations,
12275 "%qE is deprecated: %s", what, msg);
12276 else
12277 w = warning (OPT_Wdeprecated_declarations,
12278 "%qE is deprecated", what);
12280 else
12282 if (msg)
12283 w = warning (OPT_Wdeprecated_declarations,
12284 "type is deprecated: %s", msg);
12285 else
12286 w = warning (OPT_Wdeprecated_declarations,
12287 "type is deprecated");
12289 if (w)
12290 inform (DECL_SOURCE_LOCATION (decl), "declared here");
12292 else
12294 if (what)
12296 if (msg)
12297 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12298 what, msg);
12299 else
12300 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12302 else
12304 if (msg)
12305 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12306 msg);
12307 else
12308 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12314 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12315 somewhere in it. */
12317 bool
12318 contains_bitfld_component_ref_p (const_tree ref)
12320 while (handled_component_p (ref))
12322 if (TREE_CODE (ref) == COMPONENT_REF
12323 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12324 return true;
12325 ref = TREE_OPERAND (ref, 0);
12328 return false;
12331 /* Try to determine whether a TRY_CATCH expression can fall through.
12332 This is a subroutine of block_may_fallthru. */
12334 static bool
12335 try_catch_may_fallthru (const_tree stmt)
12337 tree_stmt_iterator i;
12339 /* If the TRY block can fall through, the whole TRY_CATCH can
12340 fall through. */
12341 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12342 return true;
12344 i = tsi_start (TREE_OPERAND (stmt, 1));
12345 switch (TREE_CODE (tsi_stmt (i)))
12347 case CATCH_EXPR:
12348 /* We expect to see a sequence of CATCH_EXPR trees, each with a
12349 catch expression and a body. The whole TRY_CATCH may fall
12350 through iff any of the catch bodies falls through. */
12351 for (; !tsi_end_p (i); tsi_next (&i))
12353 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12354 return true;
12356 return false;
12358 case EH_FILTER_EXPR:
12359 /* The exception filter expression only matters if there is an
12360 exception. If the exception does not match EH_FILTER_TYPES,
12361 we will execute EH_FILTER_FAILURE, and we will fall through
12362 if that falls through. If the exception does match
12363 EH_FILTER_TYPES, the stack unwinder will continue up the
12364 stack, so we will not fall through. We don't know whether we
12365 will throw an exception which matches EH_FILTER_TYPES or not,
12366 so we just ignore EH_FILTER_TYPES and assume that we might
12367 throw an exception which doesn't match. */
12368 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12370 default:
12371 /* This case represents statements to be executed when an
12372 exception occurs. Those statements are implicitly followed
12373 by a RESX statement to resume execution after the exception.
12374 So in this case the TRY_CATCH never falls through. */
12375 return false;
12379 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
12380 need not be 100% accurate; simply be conservative and return true if we
12381 don't know. This is used only to avoid stupidly generating extra code.
12382 If we're wrong, we'll just delete the extra code later. */
12384 bool
12385 block_may_fallthru (const_tree block)
12387 /* This CONST_CAST is okay because expr_last returns its argument
12388 unmodified and we assign it to a const_tree. */
12389 const_tree stmt = expr_last (CONST_CAST_TREE (block));
12391 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
12393 case GOTO_EXPR:
12394 case RETURN_EXPR:
12395 /* Easy cases. If the last statement of the block implies
12396 control transfer, then we can't fall through. */
12397 return false;
12399 case SWITCH_EXPR:
12400 /* If there is a default: label or case labels cover all possible
12401 SWITCH_COND values, then the SWITCH_EXPR will transfer control
12402 to some case label in all cases and all we care is whether the
12403 SWITCH_BODY falls through. */
12404 if (SWITCH_ALL_CASES_P (stmt))
12405 return block_may_fallthru (SWITCH_BODY (stmt));
12406 return true;
12408 case COND_EXPR:
12409 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
12410 return true;
12411 return block_may_fallthru (COND_EXPR_ELSE (stmt));
12413 case BIND_EXPR:
12414 return block_may_fallthru (BIND_EXPR_BODY (stmt));
12416 case TRY_CATCH_EXPR:
12417 return try_catch_may_fallthru (stmt);
12419 case TRY_FINALLY_EXPR:
12420 /* The finally clause is always executed after the try clause,
12421 so if it does not fall through, then the try-finally will not
12422 fall through. Otherwise, if the try clause does not fall
12423 through, then when the finally clause falls through it will
12424 resume execution wherever the try clause was going. So the
12425 whole try-finally will only fall through if both the try
12426 clause and the finally clause fall through. */
12427 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
12428 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
12430 case MODIFY_EXPR:
12431 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
12432 stmt = TREE_OPERAND (stmt, 1);
12433 else
12434 return true;
12435 /* FALLTHRU */
12437 case CALL_EXPR:
12438 /* Functions that do not return do not fall through. */
12439 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
12441 case CLEANUP_POINT_EXPR:
12442 return block_may_fallthru (TREE_OPERAND (stmt, 0));
12444 case TARGET_EXPR:
12445 return block_may_fallthru (TREE_OPERAND (stmt, 1));
12447 case ERROR_MARK:
12448 return true;
12450 default:
12451 return lang_hooks.block_may_fallthru (stmt);
12455 /* True if we are using EH to handle cleanups. */
12456 static bool using_eh_for_cleanups_flag = false;
12458 /* This routine is called from front ends to indicate eh should be used for
12459 cleanups. */
12460 void
12461 using_eh_for_cleanups (void)
12463 using_eh_for_cleanups_flag = true;
12466 /* Query whether EH is used for cleanups. */
12467 bool
12468 using_eh_for_cleanups_p (void)
12470 return using_eh_for_cleanups_flag;
12473 /* Wrapper for tree_code_name to ensure that tree code is valid */
12474 const char *
12475 get_tree_code_name (enum tree_code code)
12477 const char *invalid = "<invalid tree code>";
12479 if (code >= MAX_TREE_CODES)
12480 return invalid;
12482 return tree_code_name[code];
12485 /* Drops the TREE_OVERFLOW flag from T. */
12487 tree
12488 drop_tree_overflow (tree t)
12490 gcc_checking_assert (TREE_OVERFLOW (t));
12492 /* For tree codes with a sharing machinery re-build the result. */
12493 if (TREE_CODE (t) == INTEGER_CST)
12494 return wide_int_to_tree (TREE_TYPE (t), wi::to_wide (t));
12496 /* For VECTOR_CST, remove the overflow bits from the encoded elements
12497 and canonicalize the result. */
12498 if (TREE_CODE (t) == VECTOR_CST)
12500 tree_vector_builder builder;
12501 builder.new_unary_operation (TREE_TYPE (t), t, true);
12502 unsigned int count = builder.encoded_nelts ();
12503 for (unsigned int i = 0; i < count; ++i)
12505 tree elt = VECTOR_CST_ELT (t, i);
12506 if (TREE_OVERFLOW (elt))
12507 elt = drop_tree_overflow (elt);
12508 builder.quick_push (elt);
12510 return builder.build ();
12513 /* Otherwise, as all tcc_constants are possibly shared, copy the node
12514 and drop the flag. */
12515 t = copy_node (t);
12516 TREE_OVERFLOW (t) = 0;
12518 /* For constants that contain nested constants, drop the flag
12519 from those as well. */
12520 if (TREE_CODE (t) == COMPLEX_CST)
12522 if (TREE_OVERFLOW (TREE_REALPART (t)))
12523 TREE_REALPART (t) = drop_tree_overflow (TREE_REALPART (t));
12524 if (TREE_OVERFLOW (TREE_IMAGPART (t)))
12525 TREE_IMAGPART (t) = drop_tree_overflow (TREE_IMAGPART (t));
12528 return t;
12531 /* Given a memory reference expression T, return its base address.
12532 The base address of a memory reference expression is the main
12533 object being referenced. For instance, the base address for
12534 'array[i].fld[j]' is 'array'. You can think of this as stripping
12535 away the offset part from a memory address.
12537 This function calls handled_component_p to strip away all the inner
12538 parts of the memory reference until it reaches the base object. */
12540 tree
12541 get_base_address (tree t)
12543 while (handled_component_p (t))
12544 t = TREE_OPERAND (t, 0);
12546 if ((TREE_CODE (t) == MEM_REF
12547 || TREE_CODE (t) == TARGET_MEM_REF)
12548 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
12549 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
12551 /* ??? Either the alias oracle or all callers need to properly deal
12552 with WITH_SIZE_EXPRs before we can look through those. */
12553 if (TREE_CODE (t) == WITH_SIZE_EXPR)
12554 return NULL_TREE;
12556 return t;
12559 /* Return a tree of sizetype representing the size, in bytes, of the element
12560 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
12562 tree
12563 array_ref_element_size (tree exp)
12565 tree aligned_size = TREE_OPERAND (exp, 3);
12566 tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
12567 location_t loc = EXPR_LOCATION (exp);
12569 /* If a size was specified in the ARRAY_REF, it's the size measured
12570 in alignment units of the element type. So multiply by that value. */
12571 if (aligned_size)
12573 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
12574 sizetype from another type of the same width and signedness. */
12575 if (TREE_TYPE (aligned_size) != sizetype)
12576 aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
12577 return size_binop_loc (loc, MULT_EXPR, aligned_size,
12578 size_int (TYPE_ALIGN_UNIT (elmt_type)));
12581 /* Otherwise, take the size from that of the element type. Substitute
12582 any PLACEHOLDER_EXPR that we have. */
12583 else
12584 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
12587 /* Return a tree representing the lower bound of the array mentioned in
12588 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
12590 tree
12591 array_ref_low_bound (tree exp)
12593 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
12595 /* If a lower bound is specified in EXP, use it. */
12596 if (TREE_OPERAND (exp, 2))
12597 return TREE_OPERAND (exp, 2);
12599 /* Otherwise, if there is a domain type and it has a lower bound, use it,
12600 substituting for a PLACEHOLDER_EXPR as needed. */
12601 if (domain_type && TYPE_MIN_VALUE (domain_type))
12602 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
12604 /* Otherwise, return a zero of the appropriate type. */
12605 return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0);
12608 /* Return a tree representing the upper bound of the array mentioned in
12609 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
12611 tree
12612 array_ref_up_bound (tree exp)
12614 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
12616 /* If there is a domain type and it has an upper bound, use it, substituting
12617 for a PLACEHOLDER_EXPR as needed. */
12618 if (domain_type && TYPE_MAX_VALUE (domain_type))
12619 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
12621 /* Otherwise fail. */
12622 return NULL_TREE;
12625 /* Returns true if REF is an array reference or a component reference
12626 to an array at the end of a structure.
12627 If this is the case, the array may be allocated larger
12628 than its upper bound implies. */
12630 bool
12631 array_at_struct_end_p (tree ref)
12633 tree atype;
12635 if (TREE_CODE (ref) == ARRAY_REF
12636 || TREE_CODE (ref) == ARRAY_RANGE_REF)
12638 atype = TREE_TYPE (TREE_OPERAND (ref, 0));
12639 ref = TREE_OPERAND (ref, 0);
12641 else if (TREE_CODE (ref) == COMPONENT_REF
12642 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 1))) == ARRAY_TYPE)
12643 atype = TREE_TYPE (TREE_OPERAND (ref, 1));
12644 else
12645 return false;
12647 if (TREE_CODE (ref) == STRING_CST)
12648 return false;
12650 while (handled_component_p (ref))
12652 /* If the reference chain contains a component reference to a
12653 non-union type and there follows another field the reference
12654 is not at the end of a structure. */
12655 if (TREE_CODE (ref) == COMPONENT_REF)
12657 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
12659 tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
12660 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
12661 nextf = DECL_CHAIN (nextf);
12662 if (nextf)
12663 return false;
12666 /* If we have a multi-dimensional array we do not consider
12667 a non-innermost dimension as flex array if the whole
12668 multi-dimensional array is at struct end.
12669 Same for an array of aggregates with a trailing array
12670 member. */
12671 else if (TREE_CODE (ref) == ARRAY_REF)
12672 return false;
12673 else if (TREE_CODE (ref) == ARRAY_RANGE_REF)
12675 /* If we view an underlying object as sth else then what we
12676 gathered up to now is what we have to rely on. */
12677 else if (TREE_CODE (ref) == VIEW_CONVERT_EXPR)
12678 break;
12679 else
12680 gcc_unreachable ();
12682 ref = TREE_OPERAND (ref, 0);
12685 /* The array now is at struct end. Treat flexible arrays as
12686 always subject to extend, even into just padding constrained by
12687 an underlying decl. */
12688 if (! TYPE_SIZE (atype))
12689 return true;
12691 tree size = NULL;
12693 if (TREE_CODE (ref) == MEM_REF
12694 && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
12696 size = TYPE_SIZE (TREE_TYPE (ref));
12697 ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
12700 /* If the reference is based on a declared entity, the size of the array
12701 is constrained by its given domain. (Do not trust commons PR/69368). */
12702 if (DECL_P (ref)
12703 /* Be sure the size of MEM_REF target match. For example:
12705 char buf[10];
12706 struct foo *str = (struct foo *)&buf;
12708 str->trailin_array[2] = 1;
12710 is valid because BUF allocate enough space. */
12712 && (!size || (DECL_SIZE (ref) != NULL
12713 && operand_equal_p (DECL_SIZE (ref), size, 0)))
12714 && !(flag_unconstrained_commons
12715 && VAR_P (ref) && DECL_COMMON (ref)))
12716 return false;
12718 return true;
12721 /* Return a tree representing the offset, in bytes, of the field referenced
12722 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */
12724 tree
12725 component_ref_field_offset (tree exp)
12727 tree aligned_offset = TREE_OPERAND (exp, 2);
12728 tree field = TREE_OPERAND (exp, 1);
12729 location_t loc = EXPR_LOCATION (exp);
12731 /* If an offset was specified in the COMPONENT_REF, it's the offset measured
12732 in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. So multiply by that
12733 value. */
12734 if (aligned_offset)
12736 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
12737 sizetype from another type of the same width and signedness. */
12738 if (TREE_TYPE (aligned_offset) != sizetype)
12739 aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
12740 return size_binop_loc (loc, MULT_EXPR, aligned_offset,
12741 size_int (DECL_OFFSET_ALIGN (field)
12742 / BITS_PER_UNIT));
12745 /* Otherwise, take the offset from that of the field. Substitute
12746 any PLACEHOLDER_EXPR that we have. */
12747 else
12748 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
12751 /* Return the machine mode of T. For vectors, returns the mode of the
12752 inner type. The main use case is to feed the result to HONOR_NANS,
12753 avoiding the BLKmode that a direct TYPE_MODE (T) might return. */
12755 machine_mode
12756 element_mode (const_tree t)
12758 if (!TYPE_P (t))
12759 t = TREE_TYPE (t);
12760 if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
12761 t = TREE_TYPE (t);
12762 return TYPE_MODE (t);
12765 /* Vector types need to re-check the target flags each time we report
12766 the machine mode. We need to do this because attribute target can
12767 change the result of vector_mode_supported_p and have_regs_of_mode
12768 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can
12769 change on a per-function basis. */
12770 /* ??? Possibly a better solution is to run through all the types
12771 referenced by a function and re-compute the TYPE_MODE once, rather
12772 than make the TYPE_MODE macro call a function. */
12774 machine_mode
12775 vector_type_mode (const_tree t)
12777 machine_mode mode;
12779 gcc_assert (TREE_CODE (t) == VECTOR_TYPE);
12781 mode = t->type_common.mode;
12782 if (VECTOR_MODE_P (mode)
12783 && (!targetm.vector_mode_supported_p (mode)
12784 || !have_regs_of_mode[mode]))
12786 scalar_int_mode innermode;
12788 /* For integers, try mapping it to a same-sized scalar mode. */
12789 if (is_int_mode (TREE_TYPE (t)->type_common.mode, &innermode))
12791 unsigned int size = (TYPE_VECTOR_SUBPARTS (t)
12792 * GET_MODE_BITSIZE (innermode));
12793 scalar_int_mode mode;
12794 if (int_mode_for_size (size, 0).exists (&mode)
12795 && have_regs_of_mode[mode])
12796 return mode;
12799 return BLKmode;
12802 return mode;
12805 /* Verify that basic properties of T match TV and thus T can be a variant of
12806 TV. TV should be the more specified variant (i.e. the main variant). */
12808 static bool
12809 verify_type_variant (const_tree t, tree tv)
12811 /* Type variant can differ by:
12813 - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
12814 ENCODE_QUAL_ADDR_SPACE.
12815 - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
12816 in this case some values may not be set in the variant types
12817 (see TYPE_COMPLETE_P checks).
12818 - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
12819 - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
12820 - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
12821 - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
12822 - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
12823 this is necessary to make it possible to merge types form different TUs
12824 - arrays, pointers and references may have TREE_TYPE that is a variant
12825 of TREE_TYPE of their main variants.
12826 - aggregates may have new TYPE_FIELDS list that list variants of
12827 the main variant TYPE_FIELDS.
12828 - vector types may differ by TYPE_VECTOR_OPAQUE
12831 /* Convenience macro for matching individual fields. */
12832 #define verify_variant_match(flag) \
12833 do { \
12834 if (flag (tv) != flag (t)) \
12836 error ("type variant differs by " #flag "."); \
12837 debug_tree (tv); \
12838 return false; \
12840 } while (false)
12842 /* tree_base checks. */
12844 verify_variant_match (TREE_CODE);
12845 /* FIXME: Ada builds non-artificial variants of artificial types. */
12846 if (TYPE_ARTIFICIAL (tv) && 0)
12847 verify_variant_match (TYPE_ARTIFICIAL);
12848 if (POINTER_TYPE_P (tv))
12849 verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
12850 /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build. */
12851 verify_variant_match (TYPE_UNSIGNED);
12852 verify_variant_match (TYPE_PACKED);
12853 if (TREE_CODE (t) == REFERENCE_TYPE)
12854 verify_variant_match (TYPE_REF_IS_RVALUE);
12855 if (AGGREGATE_TYPE_P (t))
12856 verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
12857 else
12858 verify_variant_match (TYPE_SATURATING);
12859 /* FIXME: This check trigger during libstdc++ build. */
12860 if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
12861 verify_variant_match (TYPE_FINAL_P);
12863 /* tree_type_common checks. */
12865 if (COMPLETE_TYPE_P (t))
12867 verify_variant_match (TYPE_MODE);
12868 if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR
12869 && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR)
12870 verify_variant_match (TYPE_SIZE);
12871 if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR
12872 && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR
12873 && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv))
12875 gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t),
12876 TYPE_SIZE_UNIT (tv), 0));
12877 error ("type variant has different TYPE_SIZE_UNIT");
12878 debug_tree (tv);
12879 error ("type variant's TYPE_SIZE_UNIT");
12880 debug_tree (TYPE_SIZE_UNIT (tv));
12881 error ("type's TYPE_SIZE_UNIT");
12882 debug_tree (TYPE_SIZE_UNIT (t));
12883 return false;
12886 verify_variant_match (TYPE_PRECISION);
12887 verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
12888 if (RECORD_OR_UNION_TYPE_P (t))
12889 verify_variant_match (TYPE_TRANSPARENT_AGGR);
12890 else if (TREE_CODE (t) == ARRAY_TYPE)
12891 verify_variant_match (TYPE_NONALIASED_COMPONENT);
12892 /* During LTO we merge variant lists from diferent translation units
12893 that may differ BY TYPE_CONTEXT that in turn may point
12894 to TRANSLATION_UNIT_DECL.
12895 Ada also builds variants of types with different TYPE_CONTEXT. */
12896 if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
12897 verify_variant_match (TYPE_CONTEXT);
12898 verify_variant_match (TYPE_STRING_FLAG);
12899 if (TYPE_ALIAS_SET_KNOWN_P (t))
12901 error ("type variant with TYPE_ALIAS_SET_KNOWN_P");
12902 debug_tree (tv);
12903 return false;
12906 /* tree_type_non_common checks. */
12908 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
12909 and dangle the pointer from time to time. */
12910 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
12911 && (in_lto_p || !TYPE_VFIELD (tv)
12912 || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
12914 error ("type variant has different TYPE_VFIELD");
12915 debug_tree (tv);
12916 return false;
12918 if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
12919 || TREE_CODE (t) == INTEGER_TYPE
12920 || TREE_CODE (t) == BOOLEAN_TYPE
12921 || TREE_CODE (t) == REAL_TYPE
12922 || TREE_CODE (t) == FIXED_POINT_TYPE)
12924 verify_variant_match (TYPE_MAX_VALUE);
12925 verify_variant_match (TYPE_MIN_VALUE);
12927 if (TREE_CODE (t) == METHOD_TYPE)
12928 verify_variant_match (TYPE_METHOD_BASETYPE);
12929 if (TREE_CODE (t) == OFFSET_TYPE)
12930 verify_variant_match (TYPE_OFFSET_BASETYPE);
12931 if (TREE_CODE (t) == ARRAY_TYPE)
12932 verify_variant_match (TYPE_ARRAY_MAX_SIZE);
12933 /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
12934 or even type's main variant. This is needed to make bootstrap pass
12935 and the bug seems new in GCC 5.
12936 C++ FE should be updated to make this consistent and we should check
12937 that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
12938 is a match with main variant.
12940 Also disable the check for Java for now because of parser hack that builds
12941 first an dummy BINFO and then sometimes replace it by real BINFO in some
12942 of the copies. */
12943 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
12944 && TYPE_BINFO (t) != TYPE_BINFO (tv)
12945 /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
12946 Since there is no cheap way to tell C++/Java type w/o LTO, do checking
12947 at LTO time only. */
12948 && (in_lto_p && odr_type_p (t)))
12950 error ("type variant has different TYPE_BINFO");
12951 debug_tree (tv);
12952 error ("type variant's TYPE_BINFO");
12953 debug_tree (TYPE_BINFO (tv));
12954 error ("type's TYPE_BINFO");
12955 debug_tree (TYPE_BINFO (t));
12956 return false;
12959 /* Check various uses of TYPE_VALUES_RAW. */
12960 if (TREE_CODE (t) == ENUMERAL_TYPE)
12961 verify_variant_match (TYPE_VALUES);
12962 else if (TREE_CODE (t) == ARRAY_TYPE)
12963 verify_variant_match (TYPE_DOMAIN);
12964 /* Permit incomplete variants of complete type. While FEs may complete
12965 all variants, this does not happen for C++ templates in all cases. */
12966 else if (RECORD_OR_UNION_TYPE_P (t)
12967 && COMPLETE_TYPE_P (t)
12968 && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
12970 tree f1, f2;
12972 /* Fortran builds qualified variants as new records with items of
12973 qualified type. Verify that they looks same. */
12974 for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
12975 f1 && f2;
12976 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
12977 if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
12978 || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
12979 != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
12980 /* FIXME: gfc_nonrestricted_type builds all types as variants
12981 with exception of pointer types. It deeply copies the type
12982 which means that we may end up with a variant type
12983 referring non-variant pointer. We may change it to
12984 produce types as variants, too, like
12985 objc_get_protocol_qualified_type does. */
12986 && !POINTER_TYPE_P (TREE_TYPE (f1)))
12987 || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
12988 || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
12989 break;
12990 if (f1 || f2)
12992 error ("type variant has different TYPE_FIELDS");
12993 debug_tree (tv);
12994 error ("first mismatch is field");
12995 debug_tree (f1);
12996 error ("and field");
12997 debug_tree (f2);
12998 return false;
13001 else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
13002 verify_variant_match (TYPE_ARG_TYPES);
13003 /* For C++ the qualified variant of array type is really an array type
13004 of qualified TREE_TYPE.
13005 objc builds variants of pointer where pointer to type is a variant, too
13006 in objc_get_protocol_qualified_type. */
13007 if (TREE_TYPE (t) != TREE_TYPE (tv)
13008 && ((TREE_CODE (t) != ARRAY_TYPE
13009 && !POINTER_TYPE_P (t))
13010 || TYPE_MAIN_VARIANT (TREE_TYPE (t))
13011 != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
13013 error ("type variant has different TREE_TYPE");
13014 debug_tree (tv);
13015 error ("type variant's TREE_TYPE");
13016 debug_tree (TREE_TYPE (tv));
13017 error ("type's TREE_TYPE");
13018 debug_tree (TREE_TYPE (t));
13019 return false;
13021 if (type_with_alias_set_p (t)
13022 && !gimple_canonical_types_compatible_p (t, tv, false))
13024 error ("type is not compatible with its variant");
13025 debug_tree (tv);
13026 error ("type variant's TREE_TYPE");
13027 debug_tree (TREE_TYPE (tv));
13028 error ("type's TREE_TYPE");
13029 debug_tree (TREE_TYPE (t));
13030 return false;
13032 return true;
13033 #undef verify_variant_match
13037 /* The TYPE_CANONICAL merging machinery. It should closely resemble
13038 the middle-end types_compatible_p function. It needs to avoid
13039 claiming types are different for types that should be treated
13040 the same with respect to TBAA. Canonical types are also used
13041 for IL consistency checks via the useless_type_conversion_p
13042 predicate which does not handle all type kinds itself but falls
13043 back to pointer-comparison of TYPE_CANONICAL for aggregates
13044 for example. */
13046 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
13047 type calculation because we need to allow inter-operability between signed
13048 and unsigned variants. */
13050 bool
13051 type_with_interoperable_signedness (const_tree type)
13053 /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
13054 signed char and unsigned char. Similarly fortran FE builds
13055 C_SIZE_T as signed type, while C defines it unsigned. */
13057 return tree_code_for_canonical_type_merging (TREE_CODE (type))
13058 == INTEGER_TYPE
13059 && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
13060 || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
13063 /* Return true iff T1 and T2 are structurally identical for what
13064 TBAA is concerned.
13065 This function is used both by lto.c canonical type merging and by the
13066 verifier. If TRUST_TYPE_CANONICAL we do not look into structure of types
13067 that have TYPE_CANONICAL defined and assume them equivalent. This is useful
13068 only for LTO because only in these cases TYPE_CANONICAL equivalence
13069 correspond to one defined by gimple_canonical_types_compatible_p. */
13071 bool
13072 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
13073 bool trust_type_canonical)
13075 /* Type variants should be same as the main variant. When not doing sanity
13076 checking to verify this fact, go to main variants and save some work. */
13077 if (trust_type_canonical)
13079 t1 = TYPE_MAIN_VARIANT (t1);
13080 t2 = TYPE_MAIN_VARIANT (t2);
13083 /* Check first for the obvious case of pointer identity. */
13084 if (t1 == t2)
13085 return true;
13087 /* Check that we have two types to compare. */
13088 if (t1 == NULL_TREE || t2 == NULL_TREE)
13089 return false;
13091 /* We consider complete types always compatible with incomplete type.
13092 This does not make sense for canonical type calculation and thus we
13093 need to ensure that we are never called on it.
13095 FIXME: For more correctness the function probably should have three modes
13096 1) mode assuming that types are complete mathcing their structure
13097 2) mode allowing incomplete types but producing equivalence classes
13098 and thus ignoring all info from complete types
13099 3) mode allowing incomplete types to match complete but checking
13100 compatibility between complete types.
13102 1 and 2 can be used for canonical type calculation. 3 is the real
13103 definition of type compatibility that can be used i.e. for warnings during
13104 declaration merging. */
13106 gcc_assert (!trust_type_canonical
13107 || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
13108 /* If the types have been previously registered and found equal
13109 they still are. */
13111 if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
13112 && trust_type_canonical)
13114 /* Do not use TYPE_CANONICAL of pointer types. For LTO streamed types
13115 they are always NULL, but they are set to non-NULL for types
13116 constructed by build_pointer_type and variants. In this case the
13117 TYPE_CANONICAL is more fine grained than the equivalnce we test (where
13118 all pointers are considered equal. Be sure to not return false
13119 negatives. */
13120 gcc_checking_assert (canonical_type_used_p (t1)
13121 && canonical_type_used_p (t2));
13122 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
13125 /* Can't be the same type if the types don't have the same code. */
13126 enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
13127 if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
13128 return false;
13130 /* Qualifiers do not matter for canonical type comparison purposes. */
13132 /* Void types and nullptr types are always the same. */
13133 if (TREE_CODE (t1) == VOID_TYPE
13134 || TREE_CODE (t1) == NULLPTR_TYPE)
13135 return true;
13137 /* Can't be the same type if they have different mode. */
13138 if (TYPE_MODE (t1) != TYPE_MODE (t2))
13139 return false;
13141 /* Non-aggregate types can be handled cheaply. */
13142 if (INTEGRAL_TYPE_P (t1)
13143 || SCALAR_FLOAT_TYPE_P (t1)
13144 || FIXED_POINT_TYPE_P (t1)
13145 || TREE_CODE (t1) == VECTOR_TYPE
13146 || TREE_CODE (t1) == COMPLEX_TYPE
13147 || TREE_CODE (t1) == OFFSET_TYPE
13148 || POINTER_TYPE_P (t1))
13150 /* Can't be the same type if they have different recision. */
13151 if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
13152 return false;
13154 /* In some cases the signed and unsigned types are required to be
13155 inter-operable. */
13156 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
13157 && !type_with_interoperable_signedness (t1))
13158 return false;
13160 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
13161 interoperable with "signed char". Unless all frontends are revisited
13162 to agree on these types, we must ignore the flag completely. */
13164 /* Fortran standard define C_PTR type that is compatible with every
13165 C pointer. For this reason we need to glob all pointers into one.
13166 Still pointers in different address spaces are not compatible. */
13167 if (POINTER_TYPE_P (t1))
13169 if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
13170 != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
13171 return false;
13174 /* Tail-recurse to components. */
13175 if (TREE_CODE (t1) == VECTOR_TYPE
13176 || TREE_CODE (t1) == COMPLEX_TYPE)
13177 return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
13178 TREE_TYPE (t2),
13179 trust_type_canonical);
13181 return true;
13184 /* Do type-specific comparisons. */
13185 switch (TREE_CODE (t1))
13187 case ARRAY_TYPE:
13188 /* Array types are the same if the element types are the same and
13189 the number of elements are the same. */
13190 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13191 trust_type_canonical)
13192 || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
13193 || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
13194 || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
13195 return false;
13196 else
13198 tree i1 = TYPE_DOMAIN (t1);
13199 tree i2 = TYPE_DOMAIN (t2);
13201 /* For an incomplete external array, the type domain can be
13202 NULL_TREE. Check this condition also. */
13203 if (i1 == NULL_TREE && i2 == NULL_TREE)
13204 return true;
13205 else if (i1 == NULL_TREE || i2 == NULL_TREE)
13206 return false;
13207 else
13209 tree min1 = TYPE_MIN_VALUE (i1);
13210 tree min2 = TYPE_MIN_VALUE (i2);
13211 tree max1 = TYPE_MAX_VALUE (i1);
13212 tree max2 = TYPE_MAX_VALUE (i2);
13214 /* The minimum/maximum values have to be the same. */
13215 if ((min1 == min2
13216 || (min1 && min2
13217 && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
13218 && TREE_CODE (min2) == PLACEHOLDER_EXPR)
13219 || operand_equal_p (min1, min2, 0))))
13220 && (max1 == max2
13221 || (max1 && max2
13222 && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
13223 && TREE_CODE (max2) == PLACEHOLDER_EXPR)
13224 || operand_equal_p (max1, max2, 0)))))
13225 return true;
13226 else
13227 return false;
13231 case METHOD_TYPE:
13232 case FUNCTION_TYPE:
13233 /* Function types are the same if the return type and arguments types
13234 are the same. */
13235 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13236 trust_type_canonical))
13237 return false;
13239 if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
13240 return true;
13241 else
13243 tree parms1, parms2;
13245 for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
13246 parms1 && parms2;
13247 parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
13249 if (!gimple_canonical_types_compatible_p
13250 (TREE_VALUE (parms1), TREE_VALUE (parms2),
13251 trust_type_canonical))
13252 return false;
13255 if (parms1 || parms2)
13256 return false;
13258 return true;
13261 case RECORD_TYPE:
13262 case UNION_TYPE:
13263 case QUAL_UNION_TYPE:
13265 tree f1, f2;
13267 /* Don't try to compare variants of an incomplete type, before
13268 TYPE_FIELDS has been copied around. */
13269 if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
13270 return true;
13273 if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
13274 return false;
13276 /* For aggregate types, all the fields must be the same. */
13277 for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
13278 f1 || f2;
13279 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13281 /* Skip non-fields and zero-sized fields. */
13282 while (f1 && (TREE_CODE (f1) != FIELD_DECL
13283 || (DECL_SIZE (f1)
13284 && integer_zerop (DECL_SIZE (f1)))))
13285 f1 = TREE_CHAIN (f1);
13286 while (f2 && (TREE_CODE (f2) != FIELD_DECL
13287 || (DECL_SIZE (f2)
13288 && integer_zerop (DECL_SIZE (f2)))))
13289 f2 = TREE_CHAIN (f2);
13290 if (!f1 || !f2)
13291 break;
13292 /* The fields must have the same name, offset and type. */
13293 if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
13294 || !gimple_compare_field_offset (f1, f2)
13295 || !gimple_canonical_types_compatible_p
13296 (TREE_TYPE (f1), TREE_TYPE (f2),
13297 trust_type_canonical))
13298 return false;
13301 /* If one aggregate has more fields than the other, they
13302 are not the same. */
13303 if (f1 || f2)
13304 return false;
13306 return true;
13309 default:
13310 /* Consider all types with language specific trees in them mutually
13311 compatible. This is executed only from verify_type and false
13312 positives can be tolerated. */
13313 gcc_assert (!in_lto_p);
13314 return true;
13318 /* Verify type T. */
13320 void
13321 verify_type (const_tree t)
13323 bool error_found = false;
13324 tree mv = TYPE_MAIN_VARIANT (t);
13325 if (!mv)
13327 error ("Main variant is not defined");
13328 error_found = true;
13330 else if (mv != TYPE_MAIN_VARIANT (mv))
13332 error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT");
13333 debug_tree (mv);
13334 error_found = true;
13336 else if (t != mv && !verify_type_variant (t, mv))
13337 error_found = true;
13339 tree ct = TYPE_CANONICAL (t);
13340 if (!ct)
13342 else if (TYPE_CANONICAL (t) != ct)
13344 error ("TYPE_CANONICAL has different TYPE_CANONICAL");
13345 debug_tree (ct);
13346 error_found = true;
13348 /* Method and function types can not be used to address memory and thus
13349 TYPE_CANONICAL really matters only for determining useless conversions.
13351 FIXME: C++ FE produce declarations of builtin functions that are not
13352 compatible with main variants. */
13353 else if (TREE_CODE (t) == FUNCTION_TYPE)
13355 else if (t != ct
13356 /* FIXME: gimple_canonical_types_compatible_p can not compare types
13357 with variably sized arrays because their sizes possibly
13358 gimplified to different variables. */
13359 && !variably_modified_type_p (ct, NULL)
13360 && !gimple_canonical_types_compatible_p (t, ct, false))
13362 error ("TYPE_CANONICAL is not compatible");
13363 debug_tree (ct);
13364 error_found = true;
13367 if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
13368 && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
13370 error ("TYPE_MODE of TYPE_CANONICAL is not compatible");
13371 debug_tree (ct);
13372 error_found = true;
13374 if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
13376 error ("TYPE_CANONICAL of main variant is not main variant");
13377 debug_tree (ct);
13378 debug_tree (TYPE_MAIN_VARIANT (ct));
13379 error_found = true;
13383 /* Check various uses of TYPE_MIN_VALUE_RAW. */
13384 if (RECORD_OR_UNION_TYPE_P (t))
13386 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13387 and danagle the pointer from time to time. */
13388 if (TYPE_VFIELD (t)
13389 && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
13390 && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
13392 error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST");
13393 debug_tree (TYPE_VFIELD (t));
13394 error_found = true;
13397 else if (TREE_CODE (t) == POINTER_TYPE)
13399 if (TYPE_NEXT_PTR_TO (t)
13400 && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
13402 error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE");
13403 debug_tree (TYPE_NEXT_PTR_TO (t));
13404 error_found = true;
13407 else if (TREE_CODE (t) == REFERENCE_TYPE)
13409 if (TYPE_NEXT_REF_TO (t)
13410 && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
13412 error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE");
13413 debug_tree (TYPE_NEXT_REF_TO (t));
13414 error_found = true;
13417 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13418 || TREE_CODE (t) == FIXED_POINT_TYPE)
13420 /* FIXME: The following check should pass:
13421 useless_type_conversion_p (const_cast <tree> (t),
13422 TREE_TYPE (TYPE_MIN_VALUE (t))
13423 but does not for C sizetypes in LTO. */
13426 /* Check various uses of TYPE_MAXVAL_RAW. */
13427 if (RECORD_OR_UNION_TYPE_P (t))
13429 if (!TYPE_BINFO (t))
13431 else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
13433 error ("TYPE_BINFO is not TREE_BINFO");
13434 debug_tree (TYPE_BINFO (t));
13435 error_found = true;
13437 else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t))
13439 error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT");
13440 debug_tree (TREE_TYPE (TYPE_BINFO (t)));
13441 error_found = true;
13444 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13446 if (TYPE_METHOD_BASETYPE (t)
13447 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
13448 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
13450 error ("TYPE_METHOD_BASETYPE is not record nor union");
13451 debug_tree (TYPE_METHOD_BASETYPE (t));
13452 error_found = true;
13455 else if (TREE_CODE (t) == OFFSET_TYPE)
13457 if (TYPE_OFFSET_BASETYPE (t)
13458 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
13459 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
13461 error ("TYPE_OFFSET_BASETYPE is not record nor union");
13462 debug_tree (TYPE_OFFSET_BASETYPE (t));
13463 error_found = true;
13466 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13467 || TREE_CODE (t) == FIXED_POINT_TYPE)
13469 /* FIXME: The following check should pass:
13470 useless_type_conversion_p (const_cast <tree> (t),
13471 TREE_TYPE (TYPE_MAX_VALUE (t))
13472 but does not for C sizetypes in LTO. */
13474 else if (TREE_CODE (t) == ARRAY_TYPE)
13476 if (TYPE_ARRAY_MAX_SIZE (t)
13477 && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
13479 error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST");
13480 debug_tree (TYPE_ARRAY_MAX_SIZE (t));
13481 error_found = true;
13484 else if (TYPE_MAX_VALUE_RAW (t))
13486 error ("TYPE_MAX_VALUE_RAW non-NULL");
13487 debug_tree (TYPE_MAX_VALUE_RAW (t));
13488 error_found = true;
13491 if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
13493 error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL");
13494 debug_tree (TYPE_LANG_SLOT_1 (t));
13495 error_found = true;
13498 /* Check various uses of TYPE_VALUES_RAW. */
13499 if (TREE_CODE (t) == ENUMERAL_TYPE)
13500 for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
13502 tree value = TREE_VALUE (l);
13503 tree name = TREE_PURPOSE (l);
13505 /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
13506 CONST_DECL of ENUMERAL TYPE. */
13507 if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
13509 error ("Enum value is not CONST_DECL or INTEGER_CST");
13510 debug_tree (value);
13511 debug_tree (name);
13512 error_found = true;
13514 if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
13515 && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
13517 error ("Enum value type is not INTEGER_TYPE nor convertible to the enum");
13518 debug_tree (value);
13519 debug_tree (name);
13520 error_found = true;
13522 if (TREE_CODE (name) != IDENTIFIER_NODE)
13524 error ("Enum value name is not IDENTIFIER_NODE");
13525 debug_tree (value);
13526 debug_tree (name);
13527 error_found = true;
13530 else if (TREE_CODE (t) == ARRAY_TYPE)
13532 if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
13534 error ("Array TYPE_DOMAIN is not integer type");
13535 debug_tree (TYPE_DOMAIN (t));
13536 error_found = true;
13539 else if (RECORD_OR_UNION_TYPE_P (t))
13541 if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
13543 error ("TYPE_FIELDS defined in incomplete type");
13544 error_found = true;
13546 for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
13548 /* TODO: verify properties of decls. */
13549 if (TREE_CODE (fld) == FIELD_DECL)
13551 else if (TREE_CODE (fld) == TYPE_DECL)
13553 else if (TREE_CODE (fld) == CONST_DECL)
13555 else if (VAR_P (fld))
13557 else if (TREE_CODE (fld) == TEMPLATE_DECL)
13559 else if (TREE_CODE (fld) == USING_DECL)
13561 else if (TREE_CODE (fld) == FUNCTION_DECL)
13563 else
13565 error ("Wrong tree in TYPE_FIELDS list");
13566 debug_tree (fld);
13567 error_found = true;
13571 else if (TREE_CODE (t) == INTEGER_TYPE
13572 || TREE_CODE (t) == BOOLEAN_TYPE
13573 || TREE_CODE (t) == OFFSET_TYPE
13574 || TREE_CODE (t) == REFERENCE_TYPE
13575 || TREE_CODE (t) == NULLPTR_TYPE
13576 || TREE_CODE (t) == POINTER_TYPE)
13578 if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
13580 error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p",
13581 TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
13582 error_found = true;
13584 else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
13586 error ("TYPE_CACHED_VALUES is not TREE_VEC");
13587 debug_tree (TYPE_CACHED_VALUES (t));
13588 error_found = true;
13590 /* Verify just enough of cache to ensure that no one copied it to new type.
13591 All copying should go by copy_node that should clear it. */
13592 else if (TYPE_CACHED_VALUES_P (t))
13594 int i;
13595 for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
13596 if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
13597 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
13599 error ("wrong TYPE_CACHED_VALUES entry");
13600 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
13601 error_found = true;
13602 break;
13606 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13607 for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
13609 /* C++ FE uses TREE_PURPOSE to store initial values. */
13610 if (TREE_PURPOSE (l) && in_lto_p)
13612 error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list");
13613 debug_tree (l);
13614 error_found = true;
13616 if (!TYPE_P (TREE_VALUE (l)))
13618 error ("Wrong entry in TYPE_ARG_TYPES list");
13619 debug_tree (l);
13620 error_found = true;
13623 else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
13625 error ("TYPE_VALUES_RAW field is non-NULL");
13626 debug_tree (TYPE_VALUES_RAW (t));
13627 error_found = true;
13629 if (TREE_CODE (t) != INTEGER_TYPE
13630 && TREE_CODE (t) != BOOLEAN_TYPE
13631 && TREE_CODE (t) != OFFSET_TYPE
13632 && TREE_CODE (t) != REFERENCE_TYPE
13633 && TREE_CODE (t) != NULLPTR_TYPE
13634 && TREE_CODE (t) != POINTER_TYPE
13635 && TYPE_CACHED_VALUES_P (t))
13637 error ("TYPE_CACHED_VALUES_P is set while it should not");
13638 error_found = true;
13640 if (TYPE_STRING_FLAG (t)
13641 && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE)
13643 error ("TYPE_STRING_FLAG is set on wrong type code");
13644 error_found = true;
13647 /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
13648 TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
13649 of a type. */
13650 if (TREE_CODE (t) == METHOD_TYPE
13651 && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
13653 error ("TYPE_METHOD_BASETYPE is not main variant");
13654 error_found = true;
13657 if (error_found)
13659 debug_tree (const_cast <tree> (t));
13660 internal_error ("verify_type failed");
13665 /* Return 1 if ARG interpreted as signed in its precision is known to be
13666 always positive or 2 if ARG is known to be always negative, or 3 if
13667 ARG may be positive or negative. */
13670 get_range_pos_neg (tree arg)
13672 if (arg == error_mark_node)
13673 return 3;
13675 int prec = TYPE_PRECISION (TREE_TYPE (arg));
13676 int cnt = 0;
13677 if (TREE_CODE (arg) == INTEGER_CST)
13679 wide_int w = wi::sext (wi::to_wide (arg), prec);
13680 if (wi::neg_p (w))
13681 return 2;
13682 else
13683 return 1;
13685 while (CONVERT_EXPR_P (arg)
13686 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0)))
13687 && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec)
13689 arg = TREE_OPERAND (arg, 0);
13690 /* Narrower value zero extended into wider type
13691 will always result in positive values. */
13692 if (TYPE_UNSIGNED (TREE_TYPE (arg))
13693 && TYPE_PRECISION (TREE_TYPE (arg)) < prec)
13694 return 1;
13695 prec = TYPE_PRECISION (TREE_TYPE (arg));
13696 if (++cnt > 30)
13697 return 3;
13700 if (TREE_CODE (arg) != SSA_NAME)
13701 return 3;
13702 wide_int arg_min, arg_max;
13703 while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE)
13705 gimple *g = SSA_NAME_DEF_STMT (arg);
13706 if (is_gimple_assign (g)
13707 && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g)))
13709 tree t = gimple_assign_rhs1 (g);
13710 if (INTEGRAL_TYPE_P (TREE_TYPE (t))
13711 && TYPE_PRECISION (TREE_TYPE (t)) <= prec)
13713 if (TYPE_UNSIGNED (TREE_TYPE (t))
13714 && TYPE_PRECISION (TREE_TYPE (t)) < prec)
13715 return 1;
13716 prec = TYPE_PRECISION (TREE_TYPE (t));
13717 arg = t;
13718 if (++cnt > 30)
13719 return 3;
13720 continue;
13723 return 3;
13725 if (TYPE_UNSIGNED (TREE_TYPE (arg)))
13727 /* For unsigned values, the "positive" range comes
13728 below the "negative" range. */
13729 if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED))
13730 return 1;
13731 if (wi::neg_p (wi::sext (arg_min, prec), SIGNED))
13732 return 2;
13734 else
13736 if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED))
13737 return 1;
13738 if (wi::neg_p (wi::sext (arg_max, prec), SIGNED))
13739 return 2;
13741 return 3;
13747 /* Return true if ARG is marked with the nonnull attribute in the
13748 current function signature. */
13750 bool
13751 nonnull_arg_p (const_tree arg)
13753 tree t, attrs, fntype;
13754 unsigned HOST_WIDE_INT arg_num;
13756 gcc_assert (TREE_CODE (arg) == PARM_DECL
13757 && (POINTER_TYPE_P (TREE_TYPE (arg))
13758 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
13760 /* The static chain decl is always non null. */
13761 if (arg == cfun->static_chain_decl)
13762 return true;
13764 /* THIS argument of method is always non-NULL. */
13765 if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
13766 && arg == DECL_ARGUMENTS (cfun->decl)
13767 && flag_delete_null_pointer_checks)
13768 return true;
13770 /* Values passed by reference are always non-NULL. */
13771 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
13772 && flag_delete_null_pointer_checks)
13773 return true;
13775 fntype = TREE_TYPE (cfun->decl);
13776 for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
13778 attrs = lookup_attribute ("nonnull", attrs);
13780 /* If "nonnull" wasn't specified, we know nothing about the argument. */
13781 if (attrs == NULL_TREE)
13782 return false;
13784 /* If "nonnull" applies to all the arguments, then ARG is non-null. */
13785 if (TREE_VALUE (attrs) == NULL_TREE)
13786 return true;
13788 /* Get the position number for ARG in the function signature. */
13789 for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
13791 t = DECL_CHAIN (t), arg_num++)
13793 if (t == arg)
13794 break;
13797 gcc_assert (t == arg);
13799 /* Now see if ARG_NUM is mentioned in the nonnull list. */
13800 for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
13802 if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
13803 return true;
13807 return false;
13810 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
13811 information. */
13813 location_t
13814 set_block (location_t loc, tree block)
13816 location_t pure_loc = get_pure_location (loc);
13817 source_range src_range = get_range_from_loc (line_table, loc);
13818 return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
13821 location_t
13822 set_source_range (tree expr, location_t start, location_t finish)
13824 source_range src_range;
13825 src_range.m_start = start;
13826 src_range.m_finish = finish;
13827 return set_source_range (expr, src_range);
13830 location_t
13831 set_source_range (tree expr, source_range src_range)
13833 if (!EXPR_P (expr))
13834 return UNKNOWN_LOCATION;
13836 location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
13837 location_t adhoc = COMBINE_LOCATION_DATA (line_table,
13838 pure_loc,
13839 src_range,
13840 NULL);
13841 SET_EXPR_LOCATION (expr, adhoc);
13842 return adhoc;
13845 /* Return the name of combined function FN, for debugging purposes. */
13847 const char *
13848 combined_fn_name (combined_fn fn)
13850 if (builtin_fn_p (fn))
13852 tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
13853 return IDENTIFIER_POINTER (DECL_NAME (fndecl));
13855 else
13856 return internal_fn_name (as_internal_fn (fn));
13859 /* Return a bitmap with a bit set corresponding to each argument in
13860 a function call type FNTYPE declared with attribute nonnull,
13861 or null if none of the function's argument are nonnull. The caller
13862 must free the bitmap. */
13864 bitmap
13865 get_nonnull_args (const_tree fntype)
13867 if (fntype == NULL_TREE)
13868 return NULL;
13870 tree attrs = TYPE_ATTRIBUTES (fntype);
13871 if (!attrs)
13872 return NULL;
13874 bitmap argmap = NULL;
13876 /* A function declaration can specify multiple attribute nonnull,
13877 each with zero or more arguments. The loop below creates a bitmap
13878 representing a union of all the arguments. An empty (but non-null)
13879 bitmap means that all arguments have been declaraed nonnull. */
13880 for ( ; attrs; attrs = TREE_CHAIN (attrs))
13882 attrs = lookup_attribute ("nonnull", attrs);
13883 if (!attrs)
13884 break;
13886 if (!argmap)
13887 argmap = BITMAP_ALLOC (NULL);
13889 if (!TREE_VALUE (attrs))
13891 /* Clear the bitmap in case a previous attribute nonnull
13892 set it and this one overrides it for all arguments. */
13893 bitmap_clear (argmap);
13894 return argmap;
13897 /* Iterate over the indices of the format arguments declared nonnull
13898 and set a bit for each. */
13899 for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx))
13901 unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1;
13902 bitmap_set_bit (argmap, val);
13906 return argmap;
13909 /* Returns true if TYPE is a type where it and all of its subobjects
13910 (recursively) are of structure, union, or array type. */
13912 static bool
13913 default_is_empty_type (tree type)
13915 if (RECORD_OR_UNION_TYPE_P (type))
13917 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
13918 if (TREE_CODE (field) == FIELD_DECL
13919 && !DECL_PADDING_P (field)
13920 && !default_is_empty_type (TREE_TYPE (field)))
13921 return false;
13922 return true;
13924 else if (TREE_CODE (type) == ARRAY_TYPE)
13925 return (integer_minus_onep (array_type_nelts (type))
13926 || TYPE_DOMAIN (type) == NULL_TREE
13927 || default_is_empty_type (TREE_TYPE (type)));
13928 return false;
13931 /* Implement TARGET_EMPTY_RECORD_P. Return true if TYPE is an empty type
13932 that shouldn't be passed via stack. */
13934 bool
13935 default_is_empty_record (const_tree type)
13937 if (!abi_version_at_least (12))
13938 return false;
13940 if (type == error_mark_node)
13941 return false;
13943 if (TREE_ADDRESSABLE (type))
13944 return false;
13946 return default_is_empty_type (TYPE_MAIN_VARIANT (type));
13949 /* Like int_size_in_bytes, but handle empty records specially. */
13951 HOST_WIDE_INT
13952 arg_int_size_in_bytes (const_tree type)
13954 return TYPE_EMPTY_P (type) ? 0 : int_size_in_bytes (type);
13957 /* Like size_in_bytes, but handle empty records specially. */
13959 tree
13960 arg_size_in_bytes (const_tree type)
13962 return TYPE_EMPTY_P (type) ? size_zero_node : size_in_bytes (type);
13965 /* Return true if an expression with CODE has to have the same result type as
13966 its first operand. */
13968 bool
13969 expr_type_first_operand_type_p (tree_code code)
13971 switch (code)
13973 case NEGATE_EXPR:
13974 case ABS_EXPR:
13975 case BIT_NOT_EXPR:
13976 case PAREN_EXPR:
13977 case CONJ_EXPR:
13979 case PLUS_EXPR:
13980 case MINUS_EXPR:
13981 case MULT_EXPR:
13982 case TRUNC_DIV_EXPR:
13983 case CEIL_DIV_EXPR:
13984 case FLOOR_DIV_EXPR:
13985 case ROUND_DIV_EXPR:
13986 case TRUNC_MOD_EXPR:
13987 case CEIL_MOD_EXPR:
13988 case FLOOR_MOD_EXPR:
13989 case ROUND_MOD_EXPR:
13990 case RDIV_EXPR:
13991 case EXACT_DIV_EXPR:
13992 case MIN_EXPR:
13993 case MAX_EXPR:
13994 case BIT_IOR_EXPR:
13995 case BIT_XOR_EXPR:
13996 case BIT_AND_EXPR:
13998 case LSHIFT_EXPR:
13999 case RSHIFT_EXPR:
14000 case LROTATE_EXPR:
14001 case RROTATE_EXPR:
14002 return true;
14004 default:
14005 return false;
14009 /* List of pointer types used to declare builtins before we have seen their
14010 real declaration.
14012 Keep the size up to date in tree.h ! */
14013 const builtin_structptr_type builtin_structptr_types[6] =
14015 { fileptr_type_node, ptr_type_node, "FILE" },
14016 { const_tm_ptr_type_node, const_ptr_type_node, "tm" },
14017 { fenv_t_ptr_type_node, ptr_type_node, "fenv_t" },
14018 { const_fenv_t_ptr_type_node, const_ptr_type_node, "fenv_t" },
14019 { fexcept_t_ptr_type_node, ptr_type_node, "fexcept_t" },
14020 { const_fexcept_t_ptr_type_node, const_ptr_type_node, "fexcept_t" }
14023 #if CHECKING_P
14025 namespace selftest {
14027 /* Selftests for tree. */
14029 /* Verify that integer constants are sane. */
14031 static void
14032 test_integer_constants ()
14034 ASSERT_TRUE (integer_type_node != NULL);
14035 ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL);
14037 tree type = integer_type_node;
14039 tree zero = build_zero_cst (type);
14040 ASSERT_EQ (INTEGER_CST, TREE_CODE (zero));
14041 ASSERT_EQ (type, TREE_TYPE (zero));
14043 tree one = build_int_cst (type, 1);
14044 ASSERT_EQ (INTEGER_CST, TREE_CODE (one));
14045 ASSERT_EQ (type, TREE_TYPE (zero));
14048 /* Verify identifiers. */
14050 static void
14051 test_identifiers ()
14053 tree identifier = get_identifier ("foo");
14054 ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier));
14055 ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier));
14058 /* Verify LABEL_DECL. */
14060 static void
14061 test_labels ()
14063 tree identifier = get_identifier ("err");
14064 tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
14065 identifier, void_type_node);
14066 ASSERT_EQ (-1, LABEL_DECL_UID (label_decl));
14067 ASSERT_FALSE (FORCED_LABEL (label_decl));
14070 /* Check that VECTOR_CST ACTUAL contains the elements in EXPECTED. */
14072 static void
14073 check_vector_cst (vec<tree> expected, tree actual)
14075 ASSERT_EQ (expected.length (), TYPE_VECTOR_SUBPARTS (TREE_TYPE (actual)));
14076 for (unsigned int i = 0; i < expected.length (); ++i)
14077 ASSERT_EQ (wi::to_wide (expected[i]),
14078 wi::to_wide (vector_cst_elt (actual, i)));
14081 /* Check that VECTOR_CST ACTUAL contains NPATTERNS duplicated elements,
14082 and that its elements match EXPECTED. */
14084 static void
14085 check_vector_cst_duplicate (vec<tree> expected, tree actual,
14086 unsigned int npatterns)
14088 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
14089 ASSERT_EQ (1, VECTOR_CST_NELTS_PER_PATTERN (actual));
14090 ASSERT_EQ (npatterns, vector_cst_encoded_nelts (actual));
14091 ASSERT_TRUE (VECTOR_CST_DUPLICATE_P (actual));
14092 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual));
14093 check_vector_cst (expected, actual);
14096 /* Check that VECTOR_CST ACTUAL contains NPATTERNS foreground elements
14097 and NPATTERNS background elements, and that its elements match
14098 EXPECTED. */
14100 static void
14101 check_vector_cst_fill (vec<tree> expected, tree actual,
14102 unsigned int npatterns)
14104 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
14105 ASSERT_EQ (2, VECTOR_CST_NELTS_PER_PATTERN (actual));
14106 ASSERT_EQ (2 * npatterns, vector_cst_encoded_nelts (actual));
14107 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual));
14108 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual));
14109 check_vector_cst (expected, actual);
14112 /* Check that VECTOR_CST ACTUAL contains NPATTERNS stepped patterns,
14113 and that its elements match EXPECTED. */
14115 static void
14116 check_vector_cst_stepped (vec<tree> expected, tree actual,
14117 unsigned int npatterns)
14119 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual));
14120 ASSERT_EQ (3, VECTOR_CST_NELTS_PER_PATTERN (actual));
14121 ASSERT_EQ (3 * npatterns, vector_cst_encoded_nelts (actual));
14122 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual));
14123 ASSERT_TRUE (VECTOR_CST_STEPPED_P (actual));
14124 check_vector_cst (expected, actual);
14127 /* Test the creation of VECTOR_CSTs. */
14129 static void
14130 test_vector_cst_patterns ()
14132 auto_vec<tree, 8> elements (8);
14133 elements.quick_grow (8);
14134 tree element_type = build_nonstandard_integer_type (16, true);
14135 tree vector_type = build_vector_type (element_type, 8);
14137 /* Test a simple linear series with a base of 0 and a step of 1:
14138 { 0, 1, 2, 3, 4, 5, 6, 7 }. */
14139 for (unsigned int i = 0; i < 8; ++i)
14140 elements[i] = build_int_cst (element_type, i);
14141 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 1);
14143 /* Try the same with the first element replaced by 100:
14144 { 100, 1, 2, 3, 4, 5, 6, 7 }. */
14145 elements[0] = build_int_cst (element_type, 100);
14146 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 1);
14148 /* Try a series that wraps around.
14149 { 100, 65531, 65532, 65533, 65534, 65535, 0, 1 }. */
14150 for (unsigned int i = 1; i < 8; ++i)
14151 elements[i] = build_int_cst (element_type, (65530 + i) & 0xffff);
14152 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 1);
14154 /* Try a downward series:
14155 { 100, 79, 78, 77, 76, 75, 75, 73 }. */
14156 for (unsigned int i = 1; i < 8; ++i)
14157 elements[i] = build_int_cst (element_type, 80 - i);
14158 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 1);
14160 /* Try two interleaved series with different bases and steps:
14161 { 100, 53, 66, 206, 62, 212, 58, 218 }. */
14162 elements[1] = build_int_cst (element_type, 53);
14163 for (unsigned int i = 2; i < 8; i += 2)
14165 elements[i] = build_int_cst (element_type, 70 - i * 2);
14166 elements[i + 1] = build_int_cst (element_type, 200 + i * 3);
14168 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 2);
14170 /* Try a duplicated value:
14171 { 100, 100, 100, 100, 100, 100, 100, 100 }. */
14172 for (unsigned int i = 1; i < 8; ++i)
14173 elements[i] = elements[0];
14174 check_vector_cst_duplicate (elements,
14175 build_vector (vector_type, elements), 1);
14177 /* Try an interleaved duplicated value:
14178 { 100, 55, 100, 55, 100, 55, 100, 55 }. */
14179 elements[1] = build_int_cst (element_type, 55);
14180 for (unsigned int i = 2; i < 8; ++i)
14181 elements[i] = elements[i - 2];
14182 check_vector_cst_duplicate (elements,
14183 build_vector (vector_type, elements), 2);
14185 /* Try a duplicated value with 2 exceptions
14186 { 41, 97, 100, 55, 100, 55, 100, 55 }. */
14187 elements[0] = build_int_cst (element_type, 41);
14188 elements[1] = build_int_cst (element_type, 97);
14189 check_vector_cst_fill (elements, build_vector (vector_type, elements), 2);
14191 /* Try with and without a step
14192 { 41, 97, 100, 21, 100, 35, 100, 49 }. */
14193 for (unsigned int i = 3; i < 8; i += 2)
14194 elements[i] = build_int_cst (element_type, i * 7);
14195 check_vector_cst_stepped (elements, build_vector (vector_type, elements), 2);
14197 /* Try a fully-general constant:
14198 { 41, 97, 100, 21, 100, 9990, 100, 49 }. */
14199 elements[5] = build_int_cst (element_type, 9990);
14200 check_vector_cst_fill (elements, build_vector (vector_type, elements), 4);
14203 /* Run all of the selftests within this file. */
14205 void
14206 tree_c_tests ()
14208 test_integer_constants ();
14209 test_identifiers ();
14210 test_labels ();
14211 test_vector_cst_patterns ();
14214 } // namespace selftest
14216 #endif /* CHECKING_P */
14218 #include "gt-tree.h"