* tree.c (substitute_in_expr) <tcc_vl_exp>: Also inline a call if the
[official-gcc.git] / gcc / tree.c
blob1a926d9a650bde84ee4ab1d19e7540165fc8560a
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"
66 /* Tree code classes. */
68 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
69 #define END_OF_BASE_TREE_CODES tcc_exceptional,
71 const enum tree_code_class tree_code_type[] = {
72 #include "all-tree.def"
75 #undef DEFTREECODE
76 #undef END_OF_BASE_TREE_CODES
78 /* Table indexed by tree code giving number of expression
79 operands beyond the fixed part of the node structure.
80 Not used for types or decls. */
82 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
83 #define END_OF_BASE_TREE_CODES 0,
85 const unsigned char tree_code_length[] = {
86 #include "all-tree.def"
89 #undef DEFTREECODE
90 #undef END_OF_BASE_TREE_CODES
92 /* Names of tree components.
93 Used for printing out the tree and error messages. */
94 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
95 #define END_OF_BASE_TREE_CODES "@dummy",
97 static const char *const tree_code_name[] = {
98 #include "all-tree.def"
101 #undef DEFTREECODE
102 #undef END_OF_BASE_TREE_CODES
104 /* Each tree code class has an associated string representation.
105 These must correspond to the tree_code_class entries. */
107 const char *const tree_code_class_strings[] =
109 "exceptional",
110 "constant",
111 "type",
112 "declaration",
113 "reference",
114 "comparison",
115 "unary",
116 "binary",
117 "statement",
118 "vl_exp",
119 "expression"
122 /* obstack.[ch] explicitly declined to prototype this. */
123 extern int _obstack_allocated_p (struct obstack *h, void *obj);
125 /* Statistics-gathering stuff. */
127 static int tree_code_counts[MAX_TREE_CODES];
128 int tree_node_counts[(int) all_kinds];
129 int tree_node_sizes[(int) all_kinds];
131 /* Keep in sync with tree.h:enum tree_node_kind. */
132 static const char * const tree_node_kind_names[] = {
133 "decls",
134 "types",
135 "blocks",
136 "stmts",
137 "refs",
138 "exprs",
139 "constants",
140 "identifiers",
141 "vecs",
142 "binfos",
143 "ssa names",
144 "constructors",
145 "random kinds",
146 "lang_decl kinds",
147 "lang_type kinds",
148 "omp clauses",
151 /* Unique id for next decl created. */
152 static GTY(()) int next_decl_uid;
153 /* Unique id for next type created. */
154 static GTY(()) int next_type_uid = 1;
155 /* Unique id for next debug decl created. Use negative numbers,
156 to catch erroneous uses. */
157 static GTY(()) int next_debug_decl_uid;
159 /* Since we cannot rehash a type after it is in the table, we have to
160 keep the hash code. */
162 struct GTY((for_user)) type_hash {
163 unsigned long hash;
164 tree type;
167 /* Initial size of the hash table (rounded to next prime). */
168 #define TYPE_HASH_INITIAL_SIZE 1000
170 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash>
172 static hashval_t hash (type_hash *t) { return t->hash; }
173 static bool equal (type_hash *a, type_hash *b);
175 static int
176 keep_cache_entry (type_hash *&t)
178 return ggc_marked_p (t->type);
182 /* Now here is the hash table. When recording a type, it is added to
183 the slot whose index is the hash code. Note that the hash table is
184 used for several kinds of types (function types, array types and
185 array index range types, for now). While all these live in the
186 same table, they are completely independent, and the hash code is
187 computed differently for each of these. */
189 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
191 /* Hash table and temporary node for larger integer const values. */
192 static GTY (()) tree int_cst_node;
194 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node>
196 static hashval_t hash (tree t);
197 static bool equal (tree x, tree y);
200 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
202 /* Hash table for optimization flags and target option flags. Use the same
203 hash table for both sets of options. Nodes for building the current
204 optimization and target option nodes. The assumption is most of the time
205 the options created will already be in the hash table, so we avoid
206 allocating and freeing up a node repeatably. */
207 static GTY (()) tree cl_optimization_node;
208 static GTY (()) tree cl_target_option_node;
210 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node>
212 static hashval_t hash (tree t);
213 static bool equal (tree x, tree y);
216 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
218 /* General tree->tree mapping structure for use in hash tables. */
221 static GTY ((cache))
222 hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
224 static GTY ((cache))
225 hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
227 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map>
229 static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
231 static bool
232 equal (tree_vec_map *a, tree_vec_map *b)
234 return a->base.from == b->base.from;
237 static int
238 keep_cache_entry (tree_vec_map *&m)
240 return ggc_marked_p (m->base.from);
244 static GTY ((cache))
245 hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
247 static void set_type_quals (tree, int);
248 static void print_type_hash_statistics (void);
249 static void print_debug_expr_statistics (void);
250 static void print_value_expr_statistics (void);
251 static void type_hash_list (const_tree, inchash::hash &);
252 static void attribute_hash_list (const_tree, inchash::hash &);
254 tree global_trees[TI_MAX];
255 tree integer_types[itk_none];
257 bool int_n_enabled_p[NUM_INT_N_ENTS];
258 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
260 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
262 /* Number of operands for each OpenMP clause. */
263 unsigned const char omp_clause_num_ops[] =
265 0, /* OMP_CLAUSE_ERROR */
266 1, /* OMP_CLAUSE_PRIVATE */
267 1, /* OMP_CLAUSE_SHARED */
268 1, /* OMP_CLAUSE_FIRSTPRIVATE */
269 2, /* OMP_CLAUSE_LASTPRIVATE */
270 5, /* OMP_CLAUSE_REDUCTION */
271 1, /* OMP_CLAUSE_COPYIN */
272 1, /* OMP_CLAUSE_COPYPRIVATE */
273 3, /* OMP_CLAUSE_LINEAR */
274 2, /* OMP_CLAUSE_ALIGNED */
275 1, /* OMP_CLAUSE_DEPEND */
276 1, /* OMP_CLAUSE_UNIFORM */
277 1, /* OMP_CLAUSE_TO_DECLARE */
278 1, /* OMP_CLAUSE_LINK */
279 2, /* OMP_CLAUSE_FROM */
280 2, /* OMP_CLAUSE_TO */
281 2, /* OMP_CLAUSE_MAP */
282 1, /* OMP_CLAUSE_USE_DEVICE_PTR */
283 1, /* OMP_CLAUSE_IS_DEVICE_PTR */
284 2, /* OMP_CLAUSE__CACHE_ */
285 2, /* OMP_CLAUSE_GANG */
286 1, /* OMP_CLAUSE_ASYNC */
287 1, /* OMP_CLAUSE_WAIT */
288 0, /* OMP_CLAUSE_AUTO */
289 0, /* OMP_CLAUSE_SEQ */
290 1, /* OMP_CLAUSE__LOOPTEMP_ */
291 1, /* OMP_CLAUSE_IF */
292 1, /* OMP_CLAUSE_NUM_THREADS */
293 1, /* OMP_CLAUSE_SCHEDULE */
294 0, /* OMP_CLAUSE_NOWAIT */
295 1, /* OMP_CLAUSE_ORDERED */
296 0, /* OMP_CLAUSE_DEFAULT */
297 3, /* OMP_CLAUSE_COLLAPSE */
298 0, /* OMP_CLAUSE_UNTIED */
299 1, /* OMP_CLAUSE_FINAL */
300 0, /* OMP_CLAUSE_MERGEABLE */
301 1, /* OMP_CLAUSE_DEVICE */
302 1, /* OMP_CLAUSE_DIST_SCHEDULE */
303 0, /* OMP_CLAUSE_INBRANCH */
304 0, /* OMP_CLAUSE_NOTINBRANCH */
305 1, /* OMP_CLAUSE_NUM_TEAMS */
306 1, /* OMP_CLAUSE_THREAD_LIMIT */
307 0, /* OMP_CLAUSE_PROC_BIND */
308 1, /* OMP_CLAUSE_SAFELEN */
309 1, /* OMP_CLAUSE_SIMDLEN */
310 0, /* OMP_CLAUSE_FOR */
311 0, /* OMP_CLAUSE_PARALLEL */
312 0, /* OMP_CLAUSE_SECTIONS */
313 0, /* OMP_CLAUSE_TASKGROUP */
314 1, /* OMP_CLAUSE_PRIORITY */
315 1, /* OMP_CLAUSE_GRAINSIZE */
316 1, /* OMP_CLAUSE_NUM_TASKS */
317 0, /* OMP_CLAUSE_NOGROUP */
318 0, /* OMP_CLAUSE_THREADS */
319 0, /* OMP_CLAUSE_SIMD */
320 1, /* OMP_CLAUSE_HINT */
321 0, /* OMP_CLAUSE_DEFALTMAP */
322 1, /* OMP_CLAUSE__SIMDUID_ */
323 0, /* OMP_CLAUSE__SIMT_ */
324 1, /* OMP_CLAUSE__CILK_FOR_COUNT_ */
325 0, /* OMP_CLAUSE_INDEPENDENT */
326 1, /* OMP_CLAUSE_WORKER */
327 1, /* OMP_CLAUSE_VECTOR */
328 1, /* OMP_CLAUSE_NUM_GANGS */
329 1, /* OMP_CLAUSE_NUM_WORKERS */
330 1, /* OMP_CLAUSE_VECTOR_LENGTH */
331 3, /* OMP_CLAUSE_TILE */
332 2, /* OMP_CLAUSE__GRIDDIM_ */
335 const char * const omp_clause_code_name[] =
337 "error_clause",
338 "private",
339 "shared",
340 "firstprivate",
341 "lastprivate",
342 "reduction",
343 "copyin",
344 "copyprivate",
345 "linear",
346 "aligned",
347 "depend",
348 "uniform",
349 "to",
350 "link",
351 "from",
352 "to",
353 "map",
354 "use_device_ptr",
355 "is_device_ptr",
356 "_cache_",
357 "gang",
358 "async",
359 "wait",
360 "auto",
361 "seq",
362 "_looptemp_",
363 "if",
364 "num_threads",
365 "schedule",
366 "nowait",
367 "ordered",
368 "default",
369 "collapse",
370 "untied",
371 "final",
372 "mergeable",
373 "device",
374 "dist_schedule",
375 "inbranch",
376 "notinbranch",
377 "num_teams",
378 "thread_limit",
379 "proc_bind",
380 "safelen",
381 "simdlen",
382 "for",
383 "parallel",
384 "sections",
385 "taskgroup",
386 "priority",
387 "grainsize",
388 "num_tasks",
389 "nogroup",
390 "threads",
391 "simd",
392 "hint",
393 "defaultmap",
394 "_simduid_",
395 "_simt_",
396 "_Cilk_for_count_",
397 "independent",
398 "worker",
399 "vector",
400 "num_gangs",
401 "num_workers",
402 "vector_length",
403 "tile",
404 "_griddim_"
408 /* Return the tree node structure used by tree code CODE. */
410 static inline enum tree_node_structure_enum
411 tree_node_structure_for_code (enum tree_code code)
413 switch (TREE_CODE_CLASS (code))
415 case tcc_declaration:
417 switch (code)
419 case FIELD_DECL:
420 return TS_FIELD_DECL;
421 case PARM_DECL:
422 return TS_PARM_DECL;
423 case VAR_DECL:
424 return TS_VAR_DECL;
425 case LABEL_DECL:
426 return TS_LABEL_DECL;
427 case RESULT_DECL:
428 return TS_RESULT_DECL;
429 case DEBUG_EXPR_DECL:
430 return TS_DECL_WRTL;
431 case CONST_DECL:
432 return TS_CONST_DECL;
433 case TYPE_DECL:
434 return TS_TYPE_DECL;
435 case FUNCTION_DECL:
436 return TS_FUNCTION_DECL;
437 case TRANSLATION_UNIT_DECL:
438 return TS_TRANSLATION_UNIT_DECL;
439 default:
440 return TS_DECL_NON_COMMON;
443 case tcc_type:
444 return TS_TYPE_NON_COMMON;
445 case tcc_reference:
446 case tcc_comparison:
447 case tcc_unary:
448 case tcc_binary:
449 case tcc_expression:
450 case tcc_statement:
451 case tcc_vl_exp:
452 return TS_EXP;
453 default: /* tcc_constant and tcc_exceptional */
454 break;
456 switch (code)
458 /* tcc_constant cases. */
459 case VOID_CST: return TS_TYPED;
460 case INTEGER_CST: return TS_INT_CST;
461 case REAL_CST: return TS_REAL_CST;
462 case FIXED_CST: return TS_FIXED_CST;
463 case COMPLEX_CST: return TS_COMPLEX;
464 case VECTOR_CST: return TS_VECTOR;
465 case STRING_CST: return TS_STRING;
466 /* tcc_exceptional cases. */
467 case ERROR_MARK: return TS_COMMON;
468 case IDENTIFIER_NODE: return TS_IDENTIFIER;
469 case TREE_LIST: return TS_LIST;
470 case TREE_VEC: return TS_VEC;
471 case SSA_NAME: return TS_SSA_NAME;
472 case PLACEHOLDER_EXPR: return TS_COMMON;
473 case STATEMENT_LIST: return TS_STATEMENT_LIST;
474 case BLOCK: return TS_BLOCK;
475 case CONSTRUCTOR: return TS_CONSTRUCTOR;
476 case TREE_BINFO: return TS_BINFO;
477 case OMP_CLAUSE: return TS_OMP_CLAUSE;
478 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
479 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
481 default:
482 gcc_unreachable ();
487 /* Initialize tree_contains_struct to describe the hierarchy of tree
488 nodes. */
490 static void
491 initialize_tree_contains_struct (void)
493 unsigned i;
495 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
497 enum tree_code code;
498 enum tree_node_structure_enum ts_code;
500 code = (enum tree_code) i;
501 ts_code = tree_node_structure_for_code (code);
503 /* Mark the TS structure itself. */
504 tree_contains_struct[code][ts_code] = 1;
506 /* Mark all the structures that TS is derived from. */
507 switch (ts_code)
509 case TS_TYPED:
510 case TS_BLOCK:
511 case TS_OPTIMIZATION:
512 case TS_TARGET_OPTION:
513 MARK_TS_BASE (code);
514 break;
516 case TS_COMMON:
517 case TS_INT_CST:
518 case TS_REAL_CST:
519 case TS_FIXED_CST:
520 case TS_VECTOR:
521 case TS_STRING:
522 case TS_COMPLEX:
523 case TS_SSA_NAME:
524 case TS_CONSTRUCTOR:
525 case TS_EXP:
526 case TS_STATEMENT_LIST:
527 MARK_TS_TYPED (code);
528 break;
530 case TS_IDENTIFIER:
531 case TS_DECL_MINIMAL:
532 case TS_TYPE_COMMON:
533 case TS_LIST:
534 case TS_VEC:
535 case TS_BINFO:
536 case TS_OMP_CLAUSE:
537 MARK_TS_COMMON (code);
538 break;
540 case TS_TYPE_WITH_LANG_SPECIFIC:
541 MARK_TS_TYPE_COMMON (code);
542 break;
544 case TS_TYPE_NON_COMMON:
545 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
546 break;
548 case TS_DECL_COMMON:
549 MARK_TS_DECL_MINIMAL (code);
550 break;
552 case TS_DECL_WRTL:
553 case TS_CONST_DECL:
554 MARK_TS_DECL_COMMON (code);
555 break;
557 case TS_DECL_NON_COMMON:
558 MARK_TS_DECL_WITH_VIS (code);
559 break;
561 case TS_DECL_WITH_VIS:
562 case TS_PARM_DECL:
563 case TS_LABEL_DECL:
564 case TS_RESULT_DECL:
565 MARK_TS_DECL_WRTL (code);
566 break;
568 case TS_FIELD_DECL:
569 MARK_TS_DECL_COMMON (code);
570 break;
572 case TS_VAR_DECL:
573 MARK_TS_DECL_WITH_VIS (code);
574 break;
576 case TS_TYPE_DECL:
577 case TS_FUNCTION_DECL:
578 MARK_TS_DECL_NON_COMMON (code);
579 break;
581 case TS_TRANSLATION_UNIT_DECL:
582 MARK_TS_DECL_COMMON (code);
583 break;
585 default:
586 gcc_unreachable ();
590 /* Basic consistency checks for attributes used in fold. */
591 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
592 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
593 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
594 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
595 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
596 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
597 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
598 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
599 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
600 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
601 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
602 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
603 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
604 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
605 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
606 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
607 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
608 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
609 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
610 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
611 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
612 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
613 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
614 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
615 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
616 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
617 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
618 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
619 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
620 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
621 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
622 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
623 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
624 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
625 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
626 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
627 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
628 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
629 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
630 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
634 /* Init tree.c. */
636 void
637 init_ttree (void)
639 /* Initialize the hash table of types. */
640 type_hash_table
641 = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
643 debug_expr_for_decl
644 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
646 value_expr_for_decl
647 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
649 int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
651 int_cst_node = make_int_cst (1, 1);
653 cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
655 cl_optimization_node = make_node (OPTIMIZATION_NODE);
656 cl_target_option_node = make_node (TARGET_OPTION_NODE);
658 /* Initialize the tree_contains_struct array. */
659 initialize_tree_contains_struct ();
660 lang_hooks.init_ts ();
664 /* The name of the object as the assembler will see it (but before any
665 translations made by ASM_OUTPUT_LABELREF). Often this is the same
666 as DECL_NAME. It is an IDENTIFIER_NODE. */
667 tree
668 decl_assembler_name (tree decl)
670 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
671 lang_hooks.set_decl_assembler_name (decl);
672 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
675 /* When the target supports COMDAT groups, this indicates which group the
676 DECL is associated with. This can be either an IDENTIFIER_NODE or a
677 decl, in which case its DECL_ASSEMBLER_NAME identifies the group. */
678 tree
679 decl_comdat_group (const_tree node)
681 struct symtab_node *snode = symtab_node::get (node);
682 if (!snode)
683 return NULL;
684 return snode->get_comdat_group ();
687 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE. */
688 tree
689 decl_comdat_group_id (const_tree node)
691 struct symtab_node *snode = symtab_node::get (node);
692 if (!snode)
693 return NULL;
694 return snode->get_comdat_group_id ();
697 /* When the target supports named section, return its name as IDENTIFIER_NODE
698 or NULL if it is in no section. */
699 const char *
700 decl_section_name (const_tree node)
702 struct symtab_node *snode = symtab_node::get (node);
703 if (!snode)
704 return NULL;
705 return snode->get_section ();
708 /* Set section name of NODE to VALUE (that is expected to be
709 identifier node) */
710 void
711 set_decl_section_name (tree node, const char *value)
713 struct symtab_node *snode;
715 if (value == NULL)
717 snode = symtab_node::get (node);
718 if (!snode)
719 return;
721 else if (VAR_P (node))
722 snode = varpool_node::get_create (node);
723 else
724 snode = cgraph_node::get_create (node);
725 snode->set_section (value);
728 /* Return TLS model of a variable NODE. */
729 enum tls_model
730 decl_tls_model (const_tree node)
732 struct varpool_node *snode = varpool_node::get (node);
733 if (!snode)
734 return TLS_MODEL_NONE;
735 return snode->tls_model;
738 /* Set TLS model of variable NODE to MODEL. */
739 void
740 set_decl_tls_model (tree node, enum tls_model model)
742 struct varpool_node *vnode;
744 if (model == TLS_MODEL_NONE)
746 vnode = varpool_node::get (node);
747 if (!vnode)
748 return;
750 else
751 vnode = varpool_node::get_create (node);
752 vnode->tls_model = model;
755 /* Compute the number of bytes occupied by a tree with code CODE.
756 This function cannot be used for nodes that have variable sizes,
757 including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR. */
758 size_t
759 tree_code_size (enum tree_code code)
761 switch (TREE_CODE_CLASS (code))
763 case tcc_declaration: /* A decl node */
765 switch (code)
767 case FIELD_DECL:
768 return sizeof (struct tree_field_decl);
769 case PARM_DECL:
770 return sizeof (struct tree_parm_decl);
771 case VAR_DECL:
772 return sizeof (struct tree_var_decl);
773 case LABEL_DECL:
774 return sizeof (struct tree_label_decl);
775 case RESULT_DECL:
776 return sizeof (struct tree_result_decl);
777 case CONST_DECL:
778 return sizeof (struct tree_const_decl);
779 case TYPE_DECL:
780 return sizeof (struct tree_type_decl);
781 case FUNCTION_DECL:
782 return sizeof (struct tree_function_decl);
783 case DEBUG_EXPR_DECL:
784 return sizeof (struct tree_decl_with_rtl);
785 case TRANSLATION_UNIT_DECL:
786 return sizeof (struct tree_translation_unit_decl);
787 case NAMESPACE_DECL:
788 case IMPORTED_DECL:
789 case NAMELIST_DECL:
790 return sizeof (struct tree_decl_non_common);
791 default:
792 return lang_hooks.tree_size (code);
796 case tcc_type: /* a type node */
797 return sizeof (struct tree_type_non_common);
799 case tcc_reference: /* a reference */
800 case tcc_expression: /* an expression */
801 case tcc_statement: /* an expression with side effects */
802 case tcc_comparison: /* a comparison expression */
803 case tcc_unary: /* a unary arithmetic expression */
804 case tcc_binary: /* a binary arithmetic expression */
805 return (sizeof (struct tree_exp)
806 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
808 case tcc_constant: /* a constant */
809 switch (code)
811 case VOID_CST: return sizeof (struct tree_typed);
812 case INTEGER_CST: gcc_unreachable ();
813 case REAL_CST: return sizeof (struct tree_real_cst);
814 case FIXED_CST: return sizeof (struct tree_fixed_cst);
815 case COMPLEX_CST: return sizeof (struct tree_complex);
816 case VECTOR_CST: return sizeof (struct tree_vector);
817 case STRING_CST: gcc_unreachable ();
818 default:
819 return lang_hooks.tree_size (code);
822 case tcc_exceptional: /* something random, like an identifier. */
823 switch (code)
825 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
826 case TREE_LIST: return sizeof (struct tree_list);
828 case ERROR_MARK:
829 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
831 case TREE_VEC:
832 case OMP_CLAUSE: gcc_unreachable ();
834 case SSA_NAME: return sizeof (struct tree_ssa_name);
836 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
837 case BLOCK: return sizeof (struct tree_block);
838 case CONSTRUCTOR: return sizeof (struct tree_constructor);
839 case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
840 case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
842 default:
843 return lang_hooks.tree_size (code);
846 default:
847 gcc_unreachable ();
851 /* Compute the number of bytes occupied by NODE. This routine only
852 looks at TREE_CODE, except for those nodes that have variable sizes. */
853 size_t
854 tree_size (const_tree node)
856 const enum tree_code code = TREE_CODE (node);
857 switch (code)
859 case INTEGER_CST:
860 return (sizeof (struct tree_int_cst)
861 + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
863 case TREE_BINFO:
864 return (offsetof (struct tree_binfo, base_binfos)
865 + vec<tree, va_gc>
866 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
868 case TREE_VEC:
869 return (sizeof (struct tree_vec)
870 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
872 case VECTOR_CST:
873 return (sizeof (struct tree_vector)
874 + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
876 case STRING_CST:
877 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
879 case OMP_CLAUSE:
880 return (sizeof (struct tree_omp_clause)
881 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
882 * sizeof (tree));
884 default:
885 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
886 return (sizeof (struct tree_exp)
887 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
888 else
889 return tree_code_size (code);
893 /* Record interesting allocation statistics for a tree node with CODE
894 and LENGTH. */
896 static void
897 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
898 size_t length ATTRIBUTE_UNUSED)
900 enum tree_code_class type = TREE_CODE_CLASS (code);
901 tree_node_kind kind;
903 if (!GATHER_STATISTICS)
904 return;
906 switch (type)
908 case tcc_declaration: /* A decl node */
909 kind = d_kind;
910 break;
912 case tcc_type: /* a type node */
913 kind = t_kind;
914 break;
916 case tcc_statement: /* an expression with side effects */
917 kind = s_kind;
918 break;
920 case tcc_reference: /* a reference */
921 kind = r_kind;
922 break;
924 case tcc_expression: /* an expression */
925 case tcc_comparison: /* a comparison expression */
926 case tcc_unary: /* a unary arithmetic expression */
927 case tcc_binary: /* a binary arithmetic expression */
928 kind = e_kind;
929 break;
931 case tcc_constant: /* a constant */
932 kind = c_kind;
933 break;
935 case tcc_exceptional: /* something random, like an identifier. */
936 switch (code)
938 case IDENTIFIER_NODE:
939 kind = id_kind;
940 break;
942 case TREE_VEC:
943 kind = vec_kind;
944 break;
946 case TREE_BINFO:
947 kind = binfo_kind;
948 break;
950 case SSA_NAME:
951 kind = ssa_name_kind;
952 break;
954 case BLOCK:
955 kind = b_kind;
956 break;
958 case CONSTRUCTOR:
959 kind = constr_kind;
960 break;
962 case OMP_CLAUSE:
963 kind = omp_clause_kind;
964 break;
966 default:
967 kind = x_kind;
968 break;
970 break;
972 case tcc_vl_exp:
973 kind = e_kind;
974 break;
976 default:
977 gcc_unreachable ();
980 tree_code_counts[(int) code]++;
981 tree_node_counts[(int) kind]++;
982 tree_node_sizes[(int) kind] += length;
985 /* Allocate and return a new UID from the DECL_UID namespace. */
988 allocate_decl_uid (void)
990 return next_decl_uid++;
993 /* Return a newly allocated node of code CODE. For decl and type
994 nodes, some other fields are initialized. The rest of the node is
995 initialized to zero. This function cannot be used for TREE_VEC,
996 INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
997 tree_code_size.
999 Achoo! I got a code in the node. */
1001 tree
1002 make_node_stat (enum tree_code code MEM_STAT_DECL)
1004 tree t;
1005 enum tree_code_class type = TREE_CODE_CLASS (code);
1006 size_t length = tree_code_size (code);
1008 record_node_allocation_statistics (code, length);
1010 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1011 TREE_SET_CODE (t, code);
1013 switch (type)
1015 case tcc_statement:
1016 TREE_SIDE_EFFECTS (t) = 1;
1017 break;
1019 case tcc_declaration:
1020 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1022 if (code == FUNCTION_DECL)
1024 SET_DECL_ALIGN (t, FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY));
1025 SET_DECL_MODE (t, FUNCTION_MODE);
1027 else
1028 SET_DECL_ALIGN (t, 1);
1030 DECL_SOURCE_LOCATION (t) = input_location;
1031 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1032 DECL_UID (t) = --next_debug_decl_uid;
1033 else
1035 DECL_UID (t) = allocate_decl_uid ();
1036 SET_DECL_PT_UID (t, -1);
1038 if (TREE_CODE (t) == LABEL_DECL)
1039 LABEL_DECL_UID (t) = -1;
1041 break;
1043 case tcc_type:
1044 TYPE_UID (t) = next_type_uid++;
1045 SET_TYPE_ALIGN (t, BITS_PER_UNIT);
1046 TYPE_USER_ALIGN (t) = 0;
1047 TYPE_MAIN_VARIANT (t) = t;
1048 TYPE_CANONICAL (t) = t;
1050 /* Default to no attributes for type, but let target change that. */
1051 TYPE_ATTRIBUTES (t) = NULL_TREE;
1052 targetm.set_default_type_attributes (t);
1054 /* We have not yet computed the alias set for this type. */
1055 TYPE_ALIAS_SET (t) = -1;
1056 break;
1058 case tcc_constant:
1059 TREE_CONSTANT (t) = 1;
1060 break;
1062 case tcc_expression:
1063 switch (code)
1065 case INIT_EXPR:
1066 case MODIFY_EXPR:
1067 case VA_ARG_EXPR:
1068 case PREDECREMENT_EXPR:
1069 case PREINCREMENT_EXPR:
1070 case POSTDECREMENT_EXPR:
1071 case POSTINCREMENT_EXPR:
1072 /* All of these have side-effects, no matter what their
1073 operands are. */
1074 TREE_SIDE_EFFECTS (t) = 1;
1075 break;
1077 default:
1078 break;
1080 break;
1082 case tcc_exceptional:
1083 switch (code)
1085 case TARGET_OPTION_NODE:
1086 TREE_TARGET_OPTION(t)
1087 = ggc_cleared_alloc<struct cl_target_option> ();
1088 break;
1090 case OPTIMIZATION_NODE:
1091 TREE_OPTIMIZATION (t)
1092 = ggc_cleared_alloc<struct cl_optimization> ();
1093 break;
1095 default:
1096 break;
1098 break;
1100 default:
1101 /* Other classes need no special treatment. */
1102 break;
1105 return t;
1108 /* Free tree node. */
1110 void
1111 free_node (tree node)
1113 enum tree_code code = TREE_CODE (node);
1114 if (GATHER_STATISTICS)
1116 tree_code_counts[(int) TREE_CODE (node)]--;
1117 tree_node_counts[(int) t_kind]--;
1118 tree_node_sizes[(int) t_kind] -= tree_size (node);
1120 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
1121 vec_free (CONSTRUCTOR_ELTS (node));
1122 else if (code == BLOCK)
1123 vec_free (BLOCK_NONLOCALIZED_VARS (node));
1124 else if (code == TREE_BINFO)
1125 vec_free (BINFO_BASE_ACCESSES (node));
1126 ggc_free (node);
1129 /* Return a new node with the same contents as NODE except that its
1130 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
1132 tree
1133 copy_node_stat (tree node MEM_STAT_DECL)
1135 tree t;
1136 enum tree_code code = TREE_CODE (node);
1137 size_t length;
1139 gcc_assert (code != STATEMENT_LIST);
1141 length = tree_size (node);
1142 record_node_allocation_statistics (code, length);
1143 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1144 memcpy (t, node, length);
1146 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1147 TREE_CHAIN (t) = 0;
1148 TREE_ASM_WRITTEN (t) = 0;
1149 TREE_VISITED (t) = 0;
1151 if (TREE_CODE_CLASS (code) == tcc_declaration)
1153 if (code == DEBUG_EXPR_DECL)
1154 DECL_UID (t) = --next_debug_decl_uid;
1155 else
1157 DECL_UID (t) = allocate_decl_uid ();
1158 if (DECL_PT_UID_SET_P (node))
1159 SET_DECL_PT_UID (t, DECL_PT_UID (node));
1161 if ((TREE_CODE (node) == PARM_DECL || VAR_P (node))
1162 && DECL_HAS_VALUE_EXPR_P (node))
1164 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1165 DECL_HAS_VALUE_EXPR_P (t) = 1;
1167 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
1168 if (VAR_P (node))
1170 DECL_HAS_DEBUG_EXPR_P (t) = 0;
1171 t->decl_with_vis.symtab_node = NULL;
1173 if (VAR_P (node) && DECL_HAS_INIT_PRIORITY_P (node))
1175 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1176 DECL_HAS_INIT_PRIORITY_P (t) = 1;
1178 if (TREE_CODE (node) == FUNCTION_DECL)
1180 DECL_STRUCT_FUNCTION (t) = NULL;
1181 t->decl_with_vis.symtab_node = NULL;
1184 else if (TREE_CODE_CLASS (code) == tcc_type)
1186 TYPE_UID (t) = next_type_uid++;
1187 /* The following is so that the debug code for
1188 the copy is different from the original type.
1189 The two statements usually duplicate each other
1190 (because they clear fields of the same union),
1191 but the optimizer should catch that. */
1192 TYPE_SYMTAB_POINTER (t) = 0;
1193 TYPE_SYMTAB_ADDRESS (t) = 0;
1195 /* Do not copy the values cache. */
1196 if (TYPE_CACHED_VALUES_P (t))
1198 TYPE_CACHED_VALUES_P (t) = 0;
1199 TYPE_CACHED_VALUES (t) = NULL_TREE;
1202 else if (code == TARGET_OPTION_NODE)
1204 TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
1205 memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
1206 sizeof (struct cl_target_option));
1208 else if (code == OPTIMIZATION_NODE)
1210 TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>();
1211 memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node),
1212 sizeof (struct cl_optimization));
1215 return t;
1218 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1219 For example, this can copy a list made of TREE_LIST nodes. */
1221 tree
1222 copy_list (tree list)
1224 tree head;
1225 tree prev, next;
1227 if (list == 0)
1228 return 0;
1230 head = prev = copy_node (list);
1231 next = TREE_CHAIN (list);
1232 while (next)
1234 TREE_CHAIN (prev) = copy_node (next);
1235 prev = TREE_CHAIN (prev);
1236 next = TREE_CHAIN (next);
1238 return head;
1242 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1243 INTEGER_CST with value CST and type TYPE. */
1245 static unsigned int
1246 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1248 gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1249 /* We need extra HWIs if CST is an unsigned integer with its
1250 upper bit set. */
1251 if (TYPE_UNSIGNED (type) && wi::neg_p (cst))
1252 return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1253 return cst.get_len ();
1256 /* Return a new INTEGER_CST with value CST and type TYPE. */
1258 static tree
1259 build_new_int_cst (tree type, const wide_int &cst)
1261 unsigned int len = cst.get_len ();
1262 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1263 tree nt = make_int_cst (len, ext_len);
1265 if (len < ext_len)
1267 --ext_len;
1268 TREE_INT_CST_ELT (nt, ext_len)
1269 = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1270 for (unsigned int i = len; i < ext_len; ++i)
1271 TREE_INT_CST_ELT (nt, i) = -1;
1273 else if (TYPE_UNSIGNED (type)
1274 && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1276 len--;
1277 TREE_INT_CST_ELT (nt, len)
1278 = zext_hwi (cst.elt (len),
1279 cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1282 for (unsigned int i = 0; i < len; i++)
1283 TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1284 TREE_TYPE (nt) = type;
1285 return nt;
1288 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1290 tree
1291 build_int_cst (tree type, HOST_WIDE_INT low)
1293 /* Support legacy code. */
1294 if (!type)
1295 type = integer_type_node;
1297 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1300 tree
1301 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
1303 return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1306 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1308 tree
1309 build_int_cst_type (tree type, HOST_WIDE_INT low)
1311 gcc_assert (type);
1312 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1315 /* Constructs tree in type TYPE from with value given by CST. Signedness
1316 of CST is assumed to be the same as the signedness of TYPE. */
1318 tree
1319 double_int_to_tree (tree type, double_int cst)
1321 return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1324 /* We force the wide_int CST to the range of the type TYPE by sign or
1325 zero extending it. OVERFLOWABLE indicates if we are interested in
1326 overflow of the value, when >0 we are only interested in signed
1327 overflow, for <0 we are interested in any overflow. OVERFLOWED
1328 indicates whether overflow has already occurred. CONST_OVERFLOWED
1329 indicates whether constant overflow has already occurred. We force
1330 T's value to be within range of T's type (by setting to 0 or 1 all
1331 the bits outside the type's range). We set TREE_OVERFLOWED if,
1332 OVERFLOWED is nonzero,
1333 or OVERFLOWABLE is >0 and signed overflow occurs
1334 or OVERFLOWABLE is <0 and any overflow occurs
1335 We return a new tree node for the extended wide_int. The node
1336 is shared if no overflow flags are set. */
1339 tree
1340 force_fit_type (tree type, const wide_int_ref &cst,
1341 int overflowable, bool overflowed)
1343 signop sign = TYPE_SIGN (type);
1345 /* If we need to set overflow flags, return a new unshared node. */
1346 if (overflowed || !wi::fits_to_tree_p (cst, type))
1348 if (overflowed
1349 || overflowable < 0
1350 || (overflowable > 0 && sign == SIGNED))
1352 wide_int tmp = wide_int::from (cst, TYPE_PRECISION (type), sign);
1353 tree t = build_new_int_cst (type, tmp);
1354 TREE_OVERFLOW (t) = 1;
1355 return t;
1359 /* Else build a shared node. */
1360 return wide_int_to_tree (type, cst);
1363 /* These are the hash table functions for the hash table of INTEGER_CST
1364 nodes of a sizetype. */
1366 /* Return the hash code X, an INTEGER_CST. */
1368 hashval_t
1369 int_cst_hasher::hash (tree x)
1371 const_tree const t = x;
1372 hashval_t code = TYPE_UID (TREE_TYPE (t));
1373 int i;
1375 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1376 code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code);
1378 return code;
1381 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1382 is the same as that given by *Y, which is the same. */
1384 bool
1385 int_cst_hasher::equal (tree x, tree y)
1387 const_tree const xt = x;
1388 const_tree const yt = y;
1390 if (TREE_TYPE (xt) != TREE_TYPE (yt)
1391 || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1392 || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1393 return false;
1395 for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1396 if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1397 return false;
1399 return true;
1402 /* Create an INT_CST node of TYPE and value CST.
1403 The returned node is always shared. For small integers we use a
1404 per-type vector cache, for larger ones we use a single hash table.
1405 The value is extended from its precision according to the sign of
1406 the type to be a multiple of HOST_BITS_PER_WIDE_INT. This defines
1407 the upper bits and ensures that hashing and value equality based
1408 upon the underlying HOST_WIDE_INTs works without masking. */
1410 tree
1411 wide_int_to_tree (tree type, const wide_int_ref &pcst)
1413 tree t;
1414 int ix = -1;
1415 int limit = 0;
1417 gcc_assert (type);
1418 unsigned int prec = TYPE_PRECISION (type);
1419 signop sgn = TYPE_SIGN (type);
1421 /* Verify that everything is canonical. */
1422 int l = pcst.get_len ();
1423 if (l > 1)
1425 if (pcst.elt (l - 1) == 0)
1426 gcc_checking_assert (pcst.elt (l - 2) < 0);
1427 if (pcst.elt (l - 1) == HOST_WIDE_INT_M1)
1428 gcc_checking_assert (pcst.elt (l - 2) >= 0);
1431 wide_int cst = wide_int::from (pcst, prec, sgn);
1432 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1434 if (ext_len == 1)
1436 /* We just need to store a single HOST_WIDE_INT. */
1437 HOST_WIDE_INT hwi;
1438 if (TYPE_UNSIGNED (type))
1439 hwi = cst.to_uhwi ();
1440 else
1441 hwi = cst.to_shwi ();
1443 switch (TREE_CODE (type))
1445 case NULLPTR_TYPE:
1446 gcc_assert (hwi == 0);
1447 /* Fallthru. */
1449 case POINTER_TYPE:
1450 case REFERENCE_TYPE:
1451 case POINTER_BOUNDS_TYPE:
1452 /* Cache NULL pointer and zero bounds. */
1453 if (hwi == 0)
1455 limit = 1;
1456 ix = 0;
1458 break;
1460 case BOOLEAN_TYPE:
1461 /* Cache false or true. */
1462 limit = 2;
1463 if (IN_RANGE (hwi, 0, 1))
1464 ix = hwi;
1465 break;
1467 case INTEGER_TYPE:
1468 case OFFSET_TYPE:
1469 if (TYPE_SIGN (type) == UNSIGNED)
1471 /* Cache [0, N). */
1472 limit = INTEGER_SHARE_LIMIT;
1473 if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1))
1474 ix = hwi;
1476 else
1478 /* Cache [-1, N). */
1479 limit = INTEGER_SHARE_LIMIT + 1;
1480 if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1))
1481 ix = hwi + 1;
1483 break;
1485 case ENUMERAL_TYPE:
1486 break;
1488 default:
1489 gcc_unreachable ();
1492 if (ix >= 0)
1494 /* Look for it in the type's vector of small shared ints. */
1495 if (!TYPE_CACHED_VALUES_P (type))
1497 TYPE_CACHED_VALUES_P (type) = 1;
1498 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1501 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1502 if (t)
1503 /* Make sure no one is clobbering the shared constant. */
1504 gcc_checking_assert (TREE_TYPE (t) == type
1505 && TREE_INT_CST_NUNITS (t) == 1
1506 && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1507 && TREE_INT_CST_EXT_NUNITS (t) == 1
1508 && TREE_INT_CST_ELT (t, 0) == hwi);
1509 else
1511 /* Create a new shared int. */
1512 t = build_new_int_cst (type, cst);
1513 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1516 else
1518 /* Use the cache of larger shared ints, using int_cst_node as
1519 a temporary. */
1521 TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1522 TREE_TYPE (int_cst_node) = type;
1524 tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1525 t = *slot;
1526 if (!t)
1528 /* Insert this one into the hash table. */
1529 t = int_cst_node;
1530 *slot = t;
1531 /* Make a new node for next time round. */
1532 int_cst_node = make_int_cst (1, 1);
1536 else
1538 /* The value either hashes properly or we drop it on the floor
1539 for the gc to take care of. There will not be enough of them
1540 to worry about. */
1542 tree nt = build_new_int_cst (type, cst);
1543 tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1544 t = *slot;
1545 if (!t)
1547 /* Insert this one into the hash table. */
1548 t = nt;
1549 *slot = t;
1553 return t;
1556 void
1557 cache_integer_cst (tree t)
1559 tree type = TREE_TYPE (t);
1560 int ix = -1;
1561 int limit = 0;
1562 int prec = TYPE_PRECISION (type);
1564 gcc_assert (!TREE_OVERFLOW (t));
1566 switch (TREE_CODE (type))
1568 case NULLPTR_TYPE:
1569 gcc_assert (integer_zerop (t));
1570 /* Fallthru. */
1572 case POINTER_TYPE:
1573 case REFERENCE_TYPE:
1574 /* Cache NULL pointer. */
1575 if (integer_zerop (t))
1577 limit = 1;
1578 ix = 0;
1580 break;
1582 case BOOLEAN_TYPE:
1583 /* Cache false or true. */
1584 limit = 2;
1585 if (wi::ltu_p (t, 2))
1586 ix = TREE_INT_CST_ELT (t, 0);
1587 break;
1589 case INTEGER_TYPE:
1590 case OFFSET_TYPE:
1591 if (TYPE_UNSIGNED (type))
1593 /* Cache 0..N */
1594 limit = INTEGER_SHARE_LIMIT;
1596 /* This is a little hokie, but if the prec is smaller than
1597 what is necessary to hold INTEGER_SHARE_LIMIT, then the
1598 obvious test will not get the correct answer. */
1599 if (prec < HOST_BITS_PER_WIDE_INT)
1601 if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT)
1602 ix = tree_to_uhwi (t);
1604 else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1605 ix = tree_to_uhwi (t);
1607 else
1609 /* Cache -1..N */
1610 limit = INTEGER_SHARE_LIMIT + 1;
1612 if (integer_minus_onep (t))
1613 ix = 0;
1614 else if (!wi::neg_p (t))
1616 if (prec < HOST_BITS_PER_WIDE_INT)
1618 if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT)
1619 ix = tree_to_shwi (t) + 1;
1621 else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1622 ix = tree_to_shwi (t) + 1;
1625 break;
1627 case ENUMERAL_TYPE:
1628 break;
1630 default:
1631 gcc_unreachable ();
1634 if (ix >= 0)
1636 /* Look for it in the type's vector of small shared ints. */
1637 if (!TYPE_CACHED_VALUES_P (type))
1639 TYPE_CACHED_VALUES_P (type) = 1;
1640 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1643 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1644 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1646 else
1648 /* Use the cache of larger shared ints. */
1649 tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1650 /* If there is already an entry for the number verify it's the
1651 same. */
1652 if (*slot)
1653 gcc_assert (wi::eq_p (tree (*slot), t));
1654 else
1655 /* Otherwise insert this one into the hash table. */
1656 *slot = t;
1661 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1662 and the rest are zeros. */
1664 tree
1665 build_low_bits_mask (tree type, unsigned bits)
1667 gcc_assert (bits <= TYPE_PRECISION (type));
1669 return wide_int_to_tree (type, wi::mask (bits, false,
1670 TYPE_PRECISION (type)));
1673 /* Checks that X is integer constant that can be expressed in (unsigned)
1674 HOST_WIDE_INT without loss of precision. */
1676 bool
1677 cst_and_fits_in_hwi (const_tree x)
1679 return (TREE_CODE (x) == INTEGER_CST
1680 && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
1683 /* Build a newly constructed VECTOR_CST node of length LEN. */
1685 tree
1686 make_vector_stat (unsigned len MEM_STAT_DECL)
1688 tree t;
1689 unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1691 record_node_allocation_statistics (VECTOR_CST, length);
1693 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1695 TREE_SET_CODE (t, VECTOR_CST);
1696 TREE_CONSTANT (t) = 1;
1698 return t;
1701 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1702 are in a list pointed to by VALS. */
1704 tree
1705 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1707 int over = 0;
1708 unsigned cnt = 0;
1709 tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1710 TREE_TYPE (v) = type;
1712 /* Iterate through elements and check for overflow. */
1713 for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1715 tree value = vals[cnt];
1717 VECTOR_CST_ELT (v, cnt) = value;
1719 /* Don't crash if we get an address constant. */
1720 if (!CONSTANT_CLASS_P (value))
1721 continue;
1723 over |= TREE_OVERFLOW (value);
1726 TREE_OVERFLOW (v) = over;
1727 return v;
1730 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1731 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1733 tree
1734 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1736 tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1737 unsigned HOST_WIDE_INT idx, pos = 0;
1738 tree value;
1740 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1742 if (TREE_CODE (value) == VECTOR_CST)
1743 for (unsigned i = 0; i < VECTOR_CST_NELTS (value); ++i)
1744 vec[pos++] = VECTOR_CST_ELT (value, i);
1745 else
1746 vec[pos++] = value;
1748 while (pos < TYPE_VECTOR_SUBPARTS (type))
1749 vec[pos++] = build_zero_cst (TREE_TYPE (type));
1751 return build_vector (type, vec);
1754 /* Build a vector of type VECTYPE where all the elements are SCs. */
1755 tree
1756 build_vector_from_val (tree vectype, tree sc)
1758 int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1760 if (sc == error_mark_node)
1761 return sc;
1763 /* Verify that the vector type is suitable for SC. Note that there
1764 is some inconsistency in the type-system with respect to restrict
1765 qualifications of pointers. Vector types always have a main-variant
1766 element type and the qualification is applied to the vector-type.
1767 So TREE_TYPE (vector-type) does not return a properly qualified
1768 vector element-type. */
1769 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1770 TREE_TYPE (vectype)));
1772 if (CONSTANT_CLASS_P (sc))
1774 tree *v = XALLOCAVEC (tree, nunits);
1775 for (i = 0; i < nunits; ++i)
1776 v[i] = sc;
1777 return build_vector (vectype, v);
1779 else
1781 vec<constructor_elt, va_gc> *v;
1782 vec_alloc (v, nunits);
1783 for (i = 0; i < nunits; ++i)
1784 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1785 return build_constructor (vectype, v);
1789 /* Something has messed with the elements of CONSTRUCTOR C after it was built;
1790 calculate TREE_CONSTANT and TREE_SIDE_EFFECTS. */
1792 void
1793 recompute_constructor_flags (tree c)
1795 unsigned int i;
1796 tree val;
1797 bool constant_p = true;
1798 bool side_effects_p = false;
1799 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1801 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1803 /* Mostly ctors will have elts that don't have side-effects, so
1804 the usual case is to scan all the elements. Hence a single
1805 loop for both const and side effects, rather than one loop
1806 each (with early outs). */
1807 if (!TREE_CONSTANT (val))
1808 constant_p = false;
1809 if (TREE_SIDE_EFFECTS (val))
1810 side_effects_p = true;
1813 TREE_SIDE_EFFECTS (c) = side_effects_p;
1814 TREE_CONSTANT (c) = constant_p;
1817 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for
1818 CONSTRUCTOR C. */
1820 void
1821 verify_constructor_flags (tree c)
1823 unsigned int i;
1824 tree val;
1825 bool constant_p = TREE_CONSTANT (c);
1826 bool side_effects_p = TREE_SIDE_EFFECTS (c);
1827 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c);
1829 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val)
1831 if (constant_p && !TREE_CONSTANT (val))
1832 internal_error ("non-constant element in constant CONSTRUCTOR");
1833 if (!side_effects_p && TREE_SIDE_EFFECTS (val))
1834 internal_error ("side-effects element in no-side-effects CONSTRUCTOR");
1838 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1839 are in the vec pointed to by VALS. */
1840 tree
1841 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1843 tree c = make_node (CONSTRUCTOR);
1845 TREE_TYPE (c) = type;
1846 CONSTRUCTOR_ELTS (c) = vals;
1848 recompute_constructor_flags (c);
1850 return c;
1853 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1854 INDEX and VALUE. */
1855 tree
1856 build_constructor_single (tree type, tree index, tree value)
1858 vec<constructor_elt, va_gc> *v;
1859 constructor_elt elt = {index, value};
1861 vec_alloc (v, 1);
1862 v->quick_push (elt);
1864 return build_constructor (type, v);
1868 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1869 are in a list pointed to by VALS. */
1870 tree
1871 build_constructor_from_list (tree type, tree vals)
1873 tree t;
1874 vec<constructor_elt, va_gc> *v = NULL;
1876 if (vals)
1878 vec_alloc (v, list_length (vals));
1879 for (t = vals; t; t = TREE_CHAIN (t))
1880 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1883 return build_constructor (type, v);
1886 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
1887 of elements, provided as index/value pairs. */
1889 tree
1890 build_constructor_va (tree type, int nelts, ...)
1892 vec<constructor_elt, va_gc> *v = NULL;
1893 va_list p;
1895 va_start (p, nelts);
1896 vec_alloc (v, nelts);
1897 while (nelts--)
1899 tree index = va_arg (p, tree);
1900 tree value = va_arg (p, tree);
1901 CONSTRUCTOR_APPEND_ELT (v, index, value);
1903 va_end (p);
1904 return build_constructor (type, v);
1907 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1909 tree
1910 build_fixed (tree type, FIXED_VALUE_TYPE f)
1912 tree v;
1913 FIXED_VALUE_TYPE *fp;
1915 v = make_node (FIXED_CST);
1916 fp = ggc_alloc<fixed_value> ();
1917 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1919 TREE_TYPE (v) = type;
1920 TREE_FIXED_CST_PTR (v) = fp;
1921 return v;
1924 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1926 tree
1927 build_real (tree type, REAL_VALUE_TYPE d)
1929 tree v;
1930 REAL_VALUE_TYPE *dp;
1931 int overflow = 0;
1933 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1934 Consider doing it via real_convert now. */
1936 v = make_node (REAL_CST);
1937 dp = ggc_alloc<real_value> ();
1938 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1940 TREE_TYPE (v) = type;
1941 TREE_REAL_CST_PTR (v) = dp;
1942 TREE_OVERFLOW (v) = overflow;
1943 return v;
1946 /* Like build_real, but first truncate D to the type. */
1948 tree
1949 build_real_truncate (tree type, REAL_VALUE_TYPE d)
1951 return build_real (type, real_value_truncate (TYPE_MODE (type), d));
1954 /* Return a new REAL_CST node whose type is TYPE
1955 and whose value is the integer value of the INTEGER_CST node I. */
1957 REAL_VALUE_TYPE
1958 real_value_from_int_cst (const_tree type, const_tree i)
1960 REAL_VALUE_TYPE d;
1962 /* Clear all bits of the real value type so that we can later do
1963 bitwise comparisons to see if two values are the same. */
1964 memset (&d, 0, sizeof d);
1966 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, i,
1967 TYPE_SIGN (TREE_TYPE (i)));
1968 return d;
1971 /* Given a tree representing an integer constant I, return a tree
1972 representing the same value as a floating-point constant of type TYPE. */
1974 tree
1975 build_real_from_int_cst (tree type, const_tree i)
1977 tree v;
1978 int overflow = TREE_OVERFLOW (i);
1980 v = build_real (type, real_value_from_int_cst (type, i));
1982 TREE_OVERFLOW (v) |= overflow;
1983 return v;
1986 /* Return a newly constructed STRING_CST node whose value is
1987 the LEN characters at STR.
1988 Note that for a C string literal, LEN should include the trailing NUL.
1989 The TREE_TYPE is not initialized. */
1991 tree
1992 build_string (int len, const char *str)
1994 tree s;
1995 size_t length;
1997 /* Do not waste bytes provided by padding of struct tree_string. */
1998 length = len + offsetof (struct tree_string, str) + 1;
2000 record_node_allocation_statistics (STRING_CST, length);
2002 s = (tree) ggc_internal_alloc (length);
2004 memset (s, 0, sizeof (struct tree_typed));
2005 TREE_SET_CODE (s, STRING_CST);
2006 TREE_CONSTANT (s) = 1;
2007 TREE_STRING_LENGTH (s) = len;
2008 memcpy (s->string.str, str, len);
2009 s->string.str[len] = '\0';
2011 return s;
2014 /* Return a newly constructed COMPLEX_CST node whose value is
2015 specified by the real and imaginary parts REAL and IMAG.
2016 Both REAL and IMAG should be constant nodes. TYPE, if specified,
2017 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
2019 tree
2020 build_complex (tree type, tree real, tree imag)
2022 tree t = make_node (COMPLEX_CST);
2024 TREE_REALPART (t) = real;
2025 TREE_IMAGPART (t) = imag;
2026 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
2027 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
2028 return t;
2031 /* Build a complex (inf +- 0i), such as for the result of cproj.
2032 TYPE is the complex tree type of the result. If NEG is true, the
2033 imaginary zero is negative. */
2035 tree
2036 build_complex_inf (tree type, bool neg)
2038 REAL_VALUE_TYPE rinf, rzero = dconst0;
2040 real_inf (&rinf);
2041 rzero.sign = neg;
2042 return build_complex (type, build_real (TREE_TYPE (type), rinf),
2043 build_real (TREE_TYPE (type), rzero));
2046 /* Return the constant 1 in type TYPE. If TYPE has several elements, each
2047 element is set to 1. In particular, this is 1 + i for complex types. */
2049 tree
2050 build_each_one_cst (tree type)
2052 if (TREE_CODE (type) == COMPLEX_TYPE)
2054 tree scalar = build_one_cst (TREE_TYPE (type));
2055 return build_complex (type, scalar, scalar);
2057 else
2058 return build_one_cst (type);
2061 /* Return a constant of arithmetic type TYPE which is the
2062 multiplicative identity of the set TYPE. */
2064 tree
2065 build_one_cst (tree type)
2067 switch (TREE_CODE (type))
2069 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2070 case POINTER_TYPE: case REFERENCE_TYPE:
2071 case OFFSET_TYPE:
2072 return build_int_cst (type, 1);
2074 case REAL_TYPE:
2075 return build_real (type, dconst1);
2077 case FIXED_POINT_TYPE:
2078 /* We can only generate 1 for accum types. */
2079 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2080 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
2082 case VECTOR_TYPE:
2084 tree scalar = build_one_cst (TREE_TYPE (type));
2086 return build_vector_from_val (type, scalar);
2089 case COMPLEX_TYPE:
2090 return build_complex (type,
2091 build_one_cst (TREE_TYPE (type)),
2092 build_zero_cst (TREE_TYPE (type)));
2094 default:
2095 gcc_unreachable ();
2099 /* Return an integer of type TYPE containing all 1's in as much precision as
2100 it contains, or a complex or vector whose subparts are such integers. */
2102 tree
2103 build_all_ones_cst (tree type)
2105 if (TREE_CODE (type) == COMPLEX_TYPE)
2107 tree scalar = build_all_ones_cst (TREE_TYPE (type));
2108 return build_complex (type, scalar, scalar);
2110 else
2111 return build_minus_one_cst (type);
2114 /* Return a constant of arithmetic type TYPE which is the
2115 opposite of the multiplicative identity of the set TYPE. */
2117 tree
2118 build_minus_one_cst (tree type)
2120 switch (TREE_CODE (type))
2122 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2123 case POINTER_TYPE: case REFERENCE_TYPE:
2124 case OFFSET_TYPE:
2125 return build_int_cst (type, -1);
2127 case REAL_TYPE:
2128 return build_real (type, dconstm1);
2130 case FIXED_POINT_TYPE:
2131 /* We can only generate 1 for accum types. */
2132 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2133 return build_fixed (type, fixed_from_double_int (double_int_minus_one,
2134 TYPE_MODE (type)));
2136 case VECTOR_TYPE:
2138 tree scalar = build_minus_one_cst (TREE_TYPE (type));
2140 return build_vector_from_val (type, scalar);
2143 case COMPLEX_TYPE:
2144 return build_complex (type,
2145 build_minus_one_cst (TREE_TYPE (type)),
2146 build_zero_cst (TREE_TYPE (type)));
2148 default:
2149 gcc_unreachable ();
2153 /* Build 0 constant of type TYPE. This is used by constructor folding
2154 and thus the constant should be represented in memory by
2155 zero(es). */
2157 tree
2158 build_zero_cst (tree type)
2160 switch (TREE_CODE (type))
2162 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2163 case POINTER_TYPE: case REFERENCE_TYPE:
2164 case OFFSET_TYPE: case NULLPTR_TYPE:
2165 return build_int_cst (type, 0);
2167 case REAL_TYPE:
2168 return build_real (type, dconst0);
2170 case FIXED_POINT_TYPE:
2171 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2173 case VECTOR_TYPE:
2175 tree scalar = build_zero_cst (TREE_TYPE (type));
2177 return build_vector_from_val (type, scalar);
2180 case COMPLEX_TYPE:
2182 tree zero = build_zero_cst (TREE_TYPE (type));
2184 return build_complex (type, zero, zero);
2187 default:
2188 if (!AGGREGATE_TYPE_P (type))
2189 return fold_convert (type, integer_zero_node);
2190 return build_constructor (type, NULL);
2195 /* Build a BINFO with LEN language slots. */
2197 tree
2198 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
2200 tree t;
2201 size_t length = (offsetof (struct tree_binfo, base_binfos)
2202 + vec<tree, va_gc>::embedded_size (base_binfos));
2204 record_node_allocation_statistics (TREE_BINFO, length);
2206 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2208 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2210 TREE_SET_CODE (t, TREE_BINFO);
2212 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2214 return t;
2217 /* Create a CASE_LABEL_EXPR tree node and return it. */
2219 tree
2220 build_case_label (tree low_value, tree high_value, tree label_decl)
2222 tree t = make_node (CASE_LABEL_EXPR);
2224 TREE_TYPE (t) = void_type_node;
2225 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2227 CASE_LOW (t) = low_value;
2228 CASE_HIGH (t) = high_value;
2229 CASE_LABEL (t) = label_decl;
2230 CASE_CHAIN (t) = NULL_TREE;
2232 return t;
2235 /* Build a newly constructed INTEGER_CST node. LEN and EXT_LEN are the
2236 values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2237 The latter determines the length of the HOST_WIDE_INT vector. */
2239 tree
2240 make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
2242 tree t;
2243 int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2244 + sizeof (struct tree_int_cst));
2246 gcc_assert (len);
2247 record_node_allocation_statistics (INTEGER_CST, length);
2249 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2251 TREE_SET_CODE (t, INTEGER_CST);
2252 TREE_INT_CST_NUNITS (t) = len;
2253 TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2254 /* to_offset can only be applied to trees that are offset_int-sized
2255 or smaller. EXT_LEN is correct if it fits, otherwise the constant
2256 must be exactly the precision of offset_int and so LEN is correct. */
2257 if (ext_len <= OFFSET_INT_ELTS)
2258 TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2259 else
2260 TREE_INT_CST_OFFSET_NUNITS (t) = len;
2262 TREE_CONSTANT (t) = 1;
2264 return t;
2267 /* Build a newly constructed TREE_VEC node of length LEN. */
2269 tree
2270 make_tree_vec_stat (int len MEM_STAT_DECL)
2272 tree t;
2273 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2275 record_node_allocation_statistics (TREE_VEC, length);
2277 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2279 TREE_SET_CODE (t, TREE_VEC);
2280 TREE_VEC_LENGTH (t) = len;
2282 return t;
2285 /* Grow a TREE_VEC node to new length LEN. */
2287 tree
2288 grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
2290 gcc_assert (TREE_CODE (v) == TREE_VEC);
2292 int oldlen = TREE_VEC_LENGTH (v);
2293 gcc_assert (len > oldlen);
2295 int oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2296 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2298 record_node_allocation_statistics (TREE_VEC, length - oldlength);
2300 v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2302 TREE_VEC_LENGTH (v) = len;
2304 return v;
2307 /* Return 1 if EXPR is the constant zero, whether it is integral, float or
2308 fixed, and scalar, complex or vector. */
2311 zerop (const_tree expr)
2313 return (integer_zerop (expr)
2314 || real_zerop (expr)
2315 || fixed_zerop (expr));
2318 /* Return 1 if EXPR is the integer constant zero or a complex constant
2319 of zero. */
2322 integer_zerop (const_tree expr)
2324 switch (TREE_CODE (expr))
2326 case INTEGER_CST:
2327 return wi::eq_p (expr, 0);
2328 case COMPLEX_CST:
2329 return (integer_zerop (TREE_REALPART (expr))
2330 && integer_zerop (TREE_IMAGPART (expr)));
2331 case VECTOR_CST:
2333 unsigned i;
2334 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2335 if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
2336 return false;
2337 return true;
2339 default:
2340 return false;
2344 /* Return 1 if EXPR is the integer constant one or the corresponding
2345 complex constant. */
2348 integer_onep (const_tree expr)
2350 switch (TREE_CODE (expr))
2352 case INTEGER_CST:
2353 return wi::eq_p (wi::to_widest (expr), 1);
2354 case COMPLEX_CST:
2355 return (integer_onep (TREE_REALPART (expr))
2356 && integer_zerop (TREE_IMAGPART (expr)));
2357 case VECTOR_CST:
2359 unsigned i;
2360 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2361 if (!integer_onep (VECTOR_CST_ELT (expr, i)))
2362 return false;
2363 return true;
2365 default:
2366 return false;
2370 /* Return 1 if EXPR is the integer constant one. For complex and vector,
2371 return 1 if every piece is the integer constant one. */
2374 integer_each_onep (const_tree expr)
2376 if (TREE_CODE (expr) == COMPLEX_CST)
2377 return (integer_onep (TREE_REALPART (expr))
2378 && integer_onep (TREE_IMAGPART (expr)));
2379 else
2380 return integer_onep (expr);
2383 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2384 it contains, or a complex or vector whose subparts are such integers. */
2387 integer_all_onesp (const_tree expr)
2389 if (TREE_CODE (expr) == COMPLEX_CST
2390 && integer_all_onesp (TREE_REALPART (expr))
2391 && integer_all_onesp (TREE_IMAGPART (expr)))
2392 return 1;
2394 else if (TREE_CODE (expr) == VECTOR_CST)
2396 unsigned i;
2397 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2398 if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2399 return 0;
2400 return 1;
2403 else if (TREE_CODE (expr) != INTEGER_CST)
2404 return 0;
2406 return wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED) == expr;
2409 /* Return 1 if EXPR is the integer constant minus one. */
2412 integer_minus_onep (const_tree expr)
2414 if (TREE_CODE (expr) == COMPLEX_CST)
2415 return (integer_all_onesp (TREE_REALPART (expr))
2416 && integer_zerop (TREE_IMAGPART (expr)));
2417 else
2418 return integer_all_onesp (expr);
2421 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2422 one bit on). */
2425 integer_pow2p (const_tree expr)
2427 if (TREE_CODE (expr) == COMPLEX_CST
2428 && integer_pow2p (TREE_REALPART (expr))
2429 && integer_zerop (TREE_IMAGPART (expr)))
2430 return 1;
2432 if (TREE_CODE (expr) != INTEGER_CST)
2433 return 0;
2435 return wi::popcount (expr) == 1;
2438 /* Return 1 if EXPR is an integer constant other than zero or a
2439 complex constant other than zero. */
2442 integer_nonzerop (const_tree expr)
2444 return ((TREE_CODE (expr) == INTEGER_CST
2445 && !wi::eq_p (expr, 0))
2446 || (TREE_CODE (expr) == COMPLEX_CST
2447 && (integer_nonzerop (TREE_REALPART (expr))
2448 || integer_nonzerop (TREE_IMAGPART (expr)))));
2451 /* Return 1 if EXPR is the integer constant one. For vector,
2452 return 1 if every piece is the integer constant minus one
2453 (representing the value TRUE). */
2456 integer_truep (const_tree expr)
2458 if (TREE_CODE (expr) == VECTOR_CST)
2459 return integer_all_onesp (expr);
2460 return integer_onep (expr);
2463 /* Return 1 if EXPR is the fixed-point constant zero. */
2466 fixed_zerop (const_tree expr)
2468 return (TREE_CODE (expr) == FIXED_CST
2469 && TREE_FIXED_CST (expr).data.is_zero ());
2472 /* Return the power of two represented by a tree node known to be a
2473 power of two. */
2476 tree_log2 (const_tree expr)
2478 if (TREE_CODE (expr) == COMPLEX_CST)
2479 return tree_log2 (TREE_REALPART (expr));
2481 return wi::exact_log2 (expr);
2484 /* Similar, but return the largest integer Y such that 2 ** Y is less
2485 than or equal to EXPR. */
2488 tree_floor_log2 (const_tree expr)
2490 if (TREE_CODE (expr) == COMPLEX_CST)
2491 return tree_log2 (TREE_REALPART (expr));
2493 return wi::floor_log2 (expr);
2496 /* Return number of known trailing zero bits in EXPR, or, if the value of
2497 EXPR is known to be zero, the precision of it's type. */
2499 unsigned int
2500 tree_ctz (const_tree expr)
2502 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2503 && !POINTER_TYPE_P (TREE_TYPE (expr)))
2504 return 0;
2506 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2507 switch (TREE_CODE (expr))
2509 case INTEGER_CST:
2510 ret1 = wi::ctz (expr);
2511 return MIN (ret1, prec);
2512 case SSA_NAME:
2513 ret1 = wi::ctz (get_nonzero_bits (expr));
2514 return MIN (ret1, prec);
2515 case PLUS_EXPR:
2516 case MINUS_EXPR:
2517 case BIT_IOR_EXPR:
2518 case BIT_XOR_EXPR:
2519 case MIN_EXPR:
2520 case MAX_EXPR:
2521 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2522 if (ret1 == 0)
2523 return ret1;
2524 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2525 return MIN (ret1, ret2);
2526 case POINTER_PLUS_EXPR:
2527 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2528 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2529 /* Second operand is sizetype, which could be in theory
2530 wider than pointer's precision. Make sure we never
2531 return more than prec. */
2532 ret2 = MIN (ret2, prec);
2533 return MIN (ret1, ret2);
2534 case BIT_AND_EXPR:
2535 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2536 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2537 return MAX (ret1, ret2);
2538 case MULT_EXPR:
2539 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2540 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2541 return MIN (ret1 + ret2, prec);
2542 case LSHIFT_EXPR:
2543 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2544 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2545 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2547 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2548 return MIN (ret1 + ret2, prec);
2550 return ret1;
2551 case RSHIFT_EXPR:
2552 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2553 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2555 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2556 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2557 if (ret1 > ret2)
2558 return ret1 - ret2;
2560 return 0;
2561 case TRUNC_DIV_EXPR:
2562 case CEIL_DIV_EXPR:
2563 case FLOOR_DIV_EXPR:
2564 case ROUND_DIV_EXPR:
2565 case EXACT_DIV_EXPR:
2566 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2567 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2569 int l = tree_log2 (TREE_OPERAND (expr, 1));
2570 if (l >= 0)
2572 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2573 ret2 = l;
2574 if (ret1 > ret2)
2575 return ret1 - ret2;
2578 return 0;
2579 CASE_CONVERT:
2580 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2581 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2582 ret1 = prec;
2583 return MIN (ret1, prec);
2584 case SAVE_EXPR:
2585 return tree_ctz (TREE_OPERAND (expr, 0));
2586 case COND_EXPR:
2587 ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2588 if (ret1 == 0)
2589 return 0;
2590 ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2591 return MIN (ret1, ret2);
2592 case COMPOUND_EXPR:
2593 return tree_ctz (TREE_OPERAND (expr, 1));
2594 case ADDR_EXPR:
2595 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2596 if (ret1 > BITS_PER_UNIT)
2598 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2599 return MIN (ret1, prec);
2601 return 0;
2602 default:
2603 return 0;
2607 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2608 decimal float constants, so don't return 1 for them. */
2611 real_zerop (const_tree expr)
2613 switch (TREE_CODE (expr))
2615 case REAL_CST:
2616 return real_equal (&TREE_REAL_CST (expr), &dconst0)
2617 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2618 case COMPLEX_CST:
2619 return real_zerop (TREE_REALPART (expr))
2620 && real_zerop (TREE_IMAGPART (expr));
2621 case VECTOR_CST:
2623 unsigned i;
2624 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2625 if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2626 return false;
2627 return true;
2629 default:
2630 return false;
2634 /* Return 1 if EXPR is the real constant one in real or complex form.
2635 Trailing zeroes matter for decimal float constants, so don't return
2636 1 for them. */
2639 real_onep (const_tree expr)
2641 switch (TREE_CODE (expr))
2643 case REAL_CST:
2644 return real_equal (&TREE_REAL_CST (expr), &dconst1)
2645 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2646 case COMPLEX_CST:
2647 return real_onep (TREE_REALPART (expr))
2648 && real_zerop (TREE_IMAGPART (expr));
2649 case VECTOR_CST:
2651 unsigned i;
2652 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2653 if (!real_onep (VECTOR_CST_ELT (expr, i)))
2654 return false;
2655 return true;
2657 default:
2658 return false;
2662 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2663 matter for decimal float constants, so don't return 1 for them. */
2666 real_minus_onep (const_tree expr)
2668 switch (TREE_CODE (expr))
2670 case REAL_CST:
2671 return real_equal (&TREE_REAL_CST (expr), &dconstm1)
2672 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2673 case COMPLEX_CST:
2674 return real_minus_onep (TREE_REALPART (expr))
2675 && real_zerop (TREE_IMAGPART (expr));
2676 case VECTOR_CST:
2678 unsigned i;
2679 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2680 if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2681 return false;
2682 return true;
2684 default:
2685 return false;
2689 /* Nonzero if EXP is a constant or a cast of a constant. */
2692 really_constant_p (const_tree exp)
2694 /* This is not quite the same as STRIP_NOPS. It does more. */
2695 while (CONVERT_EXPR_P (exp)
2696 || TREE_CODE (exp) == NON_LVALUE_EXPR)
2697 exp = TREE_OPERAND (exp, 0);
2698 return TREE_CONSTANT (exp);
2701 /* Return first list element whose TREE_VALUE is ELEM.
2702 Return 0 if ELEM is not in LIST. */
2704 tree
2705 value_member (tree elem, tree list)
2707 while (list)
2709 if (elem == TREE_VALUE (list))
2710 return list;
2711 list = TREE_CHAIN (list);
2713 return NULL_TREE;
2716 /* Return first list element whose TREE_PURPOSE is ELEM.
2717 Return 0 if ELEM is not in LIST. */
2719 tree
2720 purpose_member (const_tree elem, tree list)
2722 while (list)
2724 if (elem == TREE_PURPOSE (list))
2725 return list;
2726 list = TREE_CHAIN (list);
2728 return NULL_TREE;
2731 /* Return true if ELEM is in V. */
2733 bool
2734 vec_member (const_tree elem, vec<tree, va_gc> *v)
2736 unsigned ix;
2737 tree t;
2738 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2739 if (elem == t)
2740 return true;
2741 return false;
2744 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2745 NULL_TREE. */
2747 tree
2748 chain_index (int idx, tree chain)
2750 for (; chain && idx > 0; --idx)
2751 chain = TREE_CHAIN (chain);
2752 return chain;
2755 /* Return nonzero if ELEM is part of the chain CHAIN. */
2758 chain_member (const_tree elem, const_tree chain)
2760 while (chain)
2762 if (elem == chain)
2763 return 1;
2764 chain = DECL_CHAIN (chain);
2767 return 0;
2770 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2771 We expect a null pointer to mark the end of the chain.
2772 This is the Lisp primitive `length'. */
2775 list_length (const_tree t)
2777 const_tree p = t;
2778 #ifdef ENABLE_TREE_CHECKING
2779 const_tree q = t;
2780 #endif
2781 int len = 0;
2783 while (p)
2785 p = TREE_CHAIN (p);
2786 #ifdef ENABLE_TREE_CHECKING
2787 if (len % 2)
2788 q = TREE_CHAIN (q);
2789 gcc_assert (p != q);
2790 #endif
2791 len++;
2794 return len;
2797 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2798 UNION_TYPE TYPE, or NULL_TREE if none. */
2800 tree
2801 first_field (const_tree type)
2803 tree t = TYPE_FIELDS (type);
2804 while (t && TREE_CODE (t) != FIELD_DECL)
2805 t = TREE_CHAIN (t);
2806 return t;
2809 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2810 by modifying the last node in chain 1 to point to chain 2.
2811 This is the Lisp primitive `nconc'. */
2813 tree
2814 chainon (tree op1, tree op2)
2816 tree t1;
2818 if (!op1)
2819 return op2;
2820 if (!op2)
2821 return op1;
2823 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2824 continue;
2825 TREE_CHAIN (t1) = op2;
2827 #ifdef ENABLE_TREE_CHECKING
2829 tree t2;
2830 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2831 gcc_assert (t2 != t1);
2833 #endif
2835 return op1;
2838 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2840 tree
2841 tree_last (tree chain)
2843 tree next;
2844 if (chain)
2845 while ((next = TREE_CHAIN (chain)))
2846 chain = next;
2847 return chain;
2850 /* Reverse the order of elements in the chain T,
2851 and return the new head of the chain (old last element). */
2853 tree
2854 nreverse (tree t)
2856 tree prev = 0, decl, next;
2857 for (decl = t; decl; decl = next)
2859 /* We shouldn't be using this function to reverse BLOCK chains; we
2860 have blocks_nreverse for that. */
2861 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2862 next = TREE_CHAIN (decl);
2863 TREE_CHAIN (decl) = prev;
2864 prev = decl;
2866 return prev;
2869 /* Return a newly created TREE_LIST node whose
2870 purpose and value fields are PARM and VALUE. */
2872 tree
2873 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2875 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2876 TREE_PURPOSE (t) = parm;
2877 TREE_VALUE (t) = value;
2878 return t;
2881 /* Build a chain of TREE_LIST nodes from a vector. */
2883 tree
2884 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2886 tree ret = NULL_TREE;
2887 tree *pp = &ret;
2888 unsigned int i;
2889 tree t;
2890 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2892 *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2893 pp = &TREE_CHAIN (*pp);
2895 return ret;
2898 /* Return a newly created TREE_LIST node whose
2899 purpose and value fields are PURPOSE and VALUE
2900 and whose TREE_CHAIN is CHAIN. */
2902 tree
2903 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2905 tree node;
2907 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2908 memset (node, 0, sizeof (struct tree_common));
2910 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2912 TREE_SET_CODE (node, TREE_LIST);
2913 TREE_CHAIN (node) = chain;
2914 TREE_PURPOSE (node) = purpose;
2915 TREE_VALUE (node) = value;
2916 return node;
2919 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2920 trees. */
2922 vec<tree, va_gc> *
2923 ctor_to_vec (tree ctor)
2925 vec<tree, va_gc> *vec;
2926 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2927 unsigned int ix;
2928 tree val;
2930 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2931 vec->quick_push (val);
2933 return vec;
2936 /* Return the size nominally occupied by an object of type TYPE
2937 when it resides in memory. The value is measured in units of bytes,
2938 and its data type is that normally used for type sizes
2939 (which is the first type created by make_signed_type or
2940 make_unsigned_type). */
2942 tree
2943 size_in_bytes_loc (location_t loc, const_tree type)
2945 tree t;
2947 if (type == error_mark_node)
2948 return integer_zero_node;
2950 type = TYPE_MAIN_VARIANT (type);
2951 t = TYPE_SIZE_UNIT (type);
2953 if (t == 0)
2955 lang_hooks.types.incomplete_type_error (loc, NULL_TREE, type);
2956 return size_zero_node;
2959 return t;
2962 /* Return the size of TYPE (in bytes) as a wide integer
2963 or return -1 if the size can vary or is larger than an integer. */
2965 HOST_WIDE_INT
2966 int_size_in_bytes (const_tree type)
2968 tree t;
2970 if (type == error_mark_node)
2971 return 0;
2973 type = TYPE_MAIN_VARIANT (type);
2974 t = TYPE_SIZE_UNIT (type);
2976 if (t && tree_fits_uhwi_p (t))
2977 return TREE_INT_CST_LOW (t);
2978 else
2979 return -1;
2982 /* Return the maximum size of TYPE (in bytes) as a wide integer
2983 or return -1 if the size can vary or is larger than an integer. */
2985 HOST_WIDE_INT
2986 max_int_size_in_bytes (const_tree type)
2988 HOST_WIDE_INT size = -1;
2989 tree size_tree;
2991 /* If this is an array type, check for a possible MAX_SIZE attached. */
2993 if (TREE_CODE (type) == ARRAY_TYPE)
2995 size_tree = TYPE_ARRAY_MAX_SIZE (type);
2997 if (size_tree && tree_fits_uhwi_p (size_tree))
2998 size = tree_to_uhwi (size_tree);
3001 /* If we still haven't been able to get a size, see if the language
3002 can compute a maximum size. */
3004 if (size == -1)
3006 size_tree = lang_hooks.types.max_size (type);
3008 if (size_tree && tree_fits_uhwi_p (size_tree))
3009 size = tree_to_uhwi (size_tree);
3012 return size;
3015 /* Return the bit position of FIELD, in bits from the start of the record.
3016 This is a tree of type bitsizetype. */
3018 tree
3019 bit_position (const_tree field)
3021 return bit_from_pos (DECL_FIELD_OFFSET (field),
3022 DECL_FIELD_BIT_OFFSET (field));
3025 /* Return the byte position of FIELD, in bytes from the start of the record.
3026 This is a tree of type sizetype. */
3028 tree
3029 byte_position (const_tree field)
3031 return byte_from_pos (DECL_FIELD_OFFSET (field),
3032 DECL_FIELD_BIT_OFFSET (field));
3035 /* Likewise, but return as an integer. It must be representable in
3036 that way (since it could be a signed value, we don't have the
3037 option of returning -1 like int_size_in_byte can. */
3039 HOST_WIDE_INT
3040 int_byte_position (const_tree field)
3042 return tree_to_shwi (byte_position (field));
3045 /* Return the strictest alignment, in bits, that T is known to have. */
3047 unsigned int
3048 expr_align (const_tree t)
3050 unsigned int align0, align1;
3052 switch (TREE_CODE (t))
3054 CASE_CONVERT: case NON_LVALUE_EXPR:
3055 /* If we have conversions, we know that the alignment of the
3056 object must meet each of the alignments of the types. */
3057 align0 = expr_align (TREE_OPERAND (t, 0));
3058 align1 = TYPE_ALIGN (TREE_TYPE (t));
3059 return MAX (align0, align1);
3061 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
3062 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
3063 case CLEANUP_POINT_EXPR:
3064 /* These don't change the alignment of an object. */
3065 return expr_align (TREE_OPERAND (t, 0));
3067 case COND_EXPR:
3068 /* The best we can do is say that the alignment is the least aligned
3069 of the two arms. */
3070 align0 = expr_align (TREE_OPERAND (t, 1));
3071 align1 = expr_align (TREE_OPERAND (t, 2));
3072 return MIN (align0, align1);
3074 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
3075 meaningfully, it's always 1. */
3076 case LABEL_DECL: case CONST_DECL:
3077 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
3078 case FUNCTION_DECL:
3079 gcc_assert (DECL_ALIGN (t) != 0);
3080 return DECL_ALIGN (t);
3082 default:
3083 break;
3086 /* Otherwise take the alignment from that of the type. */
3087 return TYPE_ALIGN (TREE_TYPE (t));
3090 /* Return, as a tree node, the number of elements for TYPE (which is an
3091 ARRAY_TYPE) minus one. This counts only elements of the top array. */
3093 tree
3094 array_type_nelts (const_tree type)
3096 tree index_type, min, max;
3098 /* If they did it with unspecified bounds, then we should have already
3099 given an error about it before we got here. */
3100 if (! TYPE_DOMAIN (type))
3101 return error_mark_node;
3103 index_type = TYPE_DOMAIN (type);
3104 min = TYPE_MIN_VALUE (index_type);
3105 max = TYPE_MAX_VALUE (index_type);
3107 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
3108 if (!max)
3109 return error_mark_node;
3111 return (integer_zerop (min)
3112 ? max
3113 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3116 /* If arg is static -- a reference to an object in static storage -- then
3117 return the object. This is not the same as the C meaning of `static'.
3118 If arg isn't static, return NULL. */
3120 tree
3121 staticp (tree arg)
3123 switch (TREE_CODE (arg))
3125 case FUNCTION_DECL:
3126 /* Nested functions are static, even though taking their address will
3127 involve a trampoline as we unnest the nested function and create
3128 the trampoline on the tree level. */
3129 return arg;
3131 case VAR_DECL:
3132 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3133 && ! DECL_THREAD_LOCAL_P (arg)
3134 && ! DECL_DLLIMPORT_P (arg)
3135 ? arg : NULL);
3137 case CONST_DECL:
3138 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3139 ? arg : NULL);
3141 case CONSTRUCTOR:
3142 return TREE_STATIC (arg) ? arg : NULL;
3144 case LABEL_DECL:
3145 case STRING_CST:
3146 return arg;
3148 case COMPONENT_REF:
3149 /* If the thing being referenced is not a field, then it is
3150 something language specific. */
3151 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3153 /* If we are referencing a bitfield, we can't evaluate an
3154 ADDR_EXPR at compile time and so it isn't a constant. */
3155 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3156 return NULL;
3158 return staticp (TREE_OPERAND (arg, 0));
3160 case BIT_FIELD_REF:
3161 return NULL;
3163 case INDIRECT_REF:
3164 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3166 case ARRAY_REF:
3167 case ARRAY_RANGE_REF:
3168 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3169 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3170 return staticp (TREE_OPERAND (arg, 0));
3171 else
3172 return NULL;
3174 case COMPOUND_LITERAL_EXPR:
3175 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3177 default:
3178 return NULL;
3185 /* Return whether OP is a DECL whose address is function-invariant. */
3187 bool
3188 decl_address_invariant_p (const_tree op)
3190 /* The conditions below are slightly less strict than the one in
3191 staticp. */
3193 switch (TREE_CODE (op))
3195 case PARM_DECL:
3196 case RESULT_DECL:
3197 case LABEL_DECL:
3198 case FUNCTION_DECL:
3199 return true;
3201 case VAR_DECL:
3202 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3203 || DECL_THREAD_LOCAL_P (op)
3204 || DECL_CONTEXT (op) == current_function_decl
3205 || decl_function_context (op) == current_function_decl)
3206 return true;
3207 break;
3209 case CONST_DECL:
3210 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3211 || decl_function_context (op) == current_function_decl)
3212 return true;
3213 break;
3215 default:
3216 break;
3219 return false;
3222 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
3224 bool
3225 decl_address_ip_invariant_p (const_tree op)
3227 /* The conditions below are slightly less strict than the one in
3228 staticp. */
3230 switch (TREE_CODE (op))
3232 case LABEL_DECL:
3233 case FUNCTION_DECL:
3234 case STRING_CST:
3235 return true;
3237 case VAR_DECL:
3238 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3239 && !DECL_DLLIMPORT_P (op))
3240 || DECL_THREAD_LOCAL_P (op))
3241 return true;
3242 break;
3244 case CONST_DECL:
3245 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3246 return true;
3247 break;
3249 default:
3250 break;
3253 return false;
3257 /* Return true if T is function-invariant (internal function, does
3258 not handle arithmetic; that's handled in skip_simple_arithmetic and
3259 tree_invariant_p). */
3261 static bool
3262 tree_invariant_p_1 (tree t)
3264 tree op;
3266 if (TREE_CONSTANT (t)
3267 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3268 return true;
3270 switch (TREE_CODE (t))
3272 case SAVE_EXPR:
3273 return true;
3275 case ADDR_EXPR:
3276 op = TREE_OPERAND (t, 0);
3277 while (handled_component_p (op))
3279 switch (TREE_CODE (op))
3281 case ARRAY_REF:
3282 case ARRAY_RANGE_REF:
3283 if (!tree_invariant_p (TREE_OPERAND (op, 1))
3284 || TREE_OPERAND (op, 2) != NULL_TREE
3285 || TREE_OPERAND (op, 3) != NULL_TREE)
3286 return false;
3287 break;
3289 case COMPONENT_REF:
3290 if (TREE_OPERAND (op, 2) != NULL_TREE)
3291 return false;
3292 break;
3294 default:;
3296 op = TREE_OPERAND (op, 0);
3299 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3301 default:
3302 break;
3305 return false;
3308 /* Return true if T is function-invariant. */
3310 bool
3311 tree_invariant_p (tree t)
3313 tree inner = skip_simple_arithmetic (t);
3314 return tree_invariant_p_1 (inner);
3317 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3318 Do this to any expression which may be used in more than one place,
3319 but must be evaluated only once.
3321 Normally, expand_expr would reevaluate the expression each time.
3322 Calling save_expr produces something that is evaluated and recorded
3323 the first time expand_expr is called on it. Subsequent calls to
3324 expand_expr just reuse the recorded value.
3326 The call to expand_expr that generates code that actually computes
3327 the value is the first call *at compile time*. Subsequent calls
3328 *at compile time* generate code to use the saved value.
3329 This produces correct result provided that *at run time* control
3330 always flows through the insns made by the first expand_expr
3331 before reaching the other places where the save_expr was evaluated.
3332 You, the caller of save_expr, must make sure this is so.
3334 Constants, and certain read-only nodes, are returned with no
3335 SAVE_EXPR because that is safe. Expressions containing placeholders
3336 are not touched; see tree.def for an explanation of what these
3337 are used for. */
3339 tree
3340 save_expr (tree expr)
3342 tree t = fold (expr);
3343 tree inner;
3345 /* If the tree evaluates to a constant, then we don't want to hide that
3346 fact (i.e. this allows further folding, and direct checks for constants).
3347 However, a read-only object that has side effects cannot be bypassed.
3348 Since it is no problem to reevaluate literals, we just return the
3349 literal node. */
3350 inner = skip_simple_arithmetic (t);
3351 if (TREE_CODE (inner) == ERROR_MARK)
3352 return inner;
3354 if (tree_invariant_p_1 (inner))
3355 return t;
3357 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3358 it means that the size or offset of some field of an object depends on
3359 the value within another field.
3361 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3362 and some variable since it would then need to be both evaluated once and
3363 evaluated more than once. Front-ends must assure this case cannot
3364 happen by surrounding any such subexpressions in their own SAVE_EXPR
3365 and forcing evaluation at the proper time. */
3366 if (contains_placeholder_p (inner))
3367 return t;
3369 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3370 SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3372 /* This expression might be placed ahead of a jump to ensure that the
3373 value was computed on both sides of the jump. So make sure it isn't
3374 eliminated as dead. */
3375 TREE_SIDE_EFFECTS (t) = 1;
3376 return t;
3379 /* Look inside EXPR into any simple arithmetic operations. Return the
3380 outermost non-arithmetic or non-invariant node. */
3382 tree
3383 skip_simple_arithmetic (tree expr)
3385 /* We don't care about whether this can be used as an lvalue in this
3386 context. */
3387 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3388 expr = TREE_OPERAND (expr, 0);
3390 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3391 a constant, it will be more efficient to not make another SAVE_EXPR since
3392 it will allow better simplification and GCSE will be able to merge the
3393 computations if they actually occur. */
3394 while (true)
3396 if (UNARY_CLASS_P (expr))
3397 expr = TREE_OPERAND (expr, 0);
3398 else if (BINARY_CLASS_P (expr))
3400 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3401 expr = TREE_OPERAND (expr, 0);
3402 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3403 expr = TREE_OPERAND (expr, 1);
3404 else
3405 break;
3407 else
3408 break;
3411 return expr;
3414 /* Look inside EXPR into simple arithmetic operations involving constants.
3415 Return the outermost non-arithmetic or non-constant node. */
3417 tree
3418 skip_simple_constant_arithmetic (tree expr)
3420 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3421 expr = TREE_OPERAND (expr, 0);
3423 while (true)
3425 if (UNARY_CLASS_P (expr))
3426 expr = TREE_OPERAND (expr, 0);
3427 else if (BINARY_CLASS_P (expr))
3429 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3430 expr = TREE_OPERAND (expr, 0);
3431 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3432 expr = TREE_OPERAND (expr, 1);
3433 else
3434 break;
3436 else
3437 break;
3440 return expr;
3443 /* Return which tree structure is used by T. */
3445 enum tree_node_structure_enum
3446 tree_node_structure (const_tree t)
3448 const enum tree_code code = TREE_CODE (t);
3449 return tree_node_structure_for_code (code);
3452 /* Set various status flags when building a CALL_EXPR object T. */
3454 static void
3455 process_call_operands (tree t)
3457 bool side_effects = TREE_SIDE_EFFECTS (t);
3458 bool read_only = false;
3459 int i = call_expr_flags (t);
3461 /* Calls have side-effects, except those to const or pure functions. */
3462 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3463 side_effects = true;
3464 /* Propagate TREE_READONLY of arguments for const functions. */
3465 if (i & ECF_CONST)
3466 read_only = true;
3468 if (!side_effects || read_only)
3469 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3471 tree op = TREE_OPERAND (t, i);
3472 if (op && TREE_SIDE_EFFECTS (op))
3473 side_effects = true;
3474 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3475 read_only = false;
3478 TREE_SIDE_EFFECTS (t) = side_effects;
3479 TREE_READONLY (t) = read_only;
3482 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3483 size or offset that depends on a field within a record. */
3485 bool
3486 contains_placeholder_p (const_tree exp)
3488 enum tree_code code;
3490 if (!exp)
3491 return 0;
3493 code = TREE_CODE (exp);
3494 if (code == PLACEHOLDER_EXPR)
3495 return 1;
3497 switch (TREE_CODE_CLASS (code))
3499 case tcc_reference:
3500 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3501 position computations since they will be converted into a
3502 WITH_RECORD_EXPR involving the reference, which will assume
3503 here will be valid. */
3504 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3506 case tcc_exceptional:
3507 if (code == TREE_LIST)
3508 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3509 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3510 break;
3512 case tcc_unary:
3513 case tcc_binary:
3514 case tcc_comparison:
3515 case tcc_expression:
3516 switch (code)
3518 case COMPOUND_EXPR:
3519 /* Ignoring the first operand isn't quite right, but works best. */
3520 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3522 case COND_EXPR:
3523 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3524 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3525 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3527 case SAVE_EXPR:
3528 /* The save_expr function never wraps anything containing
3529 a PLACEHOLDER_EXPR. */
3530 return 0;
3532 default:
3533 break;
3536 switch (TREE_CODE_LENGTH (code))
3538 case 1:
3539 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3540 case 2:
3541 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3542 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3543 default:
3544 return 0;
3547 case tcc_vl_exp:
3548 switch (code)
3550 case CALL_EXPR:
3552 const_tree arg;
3553 const_call_expr_arg_iterator iter;
3554 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3555 if (CONTAINS_PLACEHOLDER_P (arg))
3556 return 1;
3557 return 0;
3559 default:
3560 return 0;
3563 default:
3564 return 0;
3566 return 0;
3569 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3570 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3571 field positions. */
3573 static bool
3574 type_contains_placeholder_1 (const_tree type)
3576 /* If the size contains a placeholder or the parent type (component type in
3577 the case of arrays) type involves a placeholder, this type does. */
3578 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3579 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3580 || (!POINTER_TYPE_P (type)
3581 && TREE_TYPE (type)
3582 && type_contains_placeholder_p (TREE_TYPE (type))))
3583 return true;
3585 /* Now do type-specific checks. Note that the last part of the check above
3586 greatly limits what we have to do below. */
3587 switch (TREE_CODE (type))
3589 case VOID_TYPE:
3590 case POINTER_BOUNDS_TYPE:
3591 case COMPLEX_TYPE:
3592 case ENUMERAL_TYPE:
3593 case BOOLEAN_TYPE:
3594 case POINTER_TYPE:
3595 case OFFSET_TYPE:
3596 case REFERENCE_TYPE:
3597 case METHOD_TYPE:
3598 case FUNCTION_TYPE:
3599 case VECTOR_TYPE:
3600 case NULLPTR_TYPE:
3601 return false;
3603 case INTEGER_TYPE:
3604 case REAL_TYPE:
3605 case FIXED_POINT_TYPE:
3606 /* Here we just check the bounds. */
3607 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3608 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3610 case ARRAY_TYPE:
3611 /* We have already checked the component type above, so just check
3612 the domain type. Flexible array members have a null domain. */
3613 return TYPE_DOMAIN (type) ?
3614 type_contains_placeholder_p (TYPE_DOMAIN (type)) : false;
3616 case RECORD_TYPE:
3617 case UNION_TYPE:
3618 case QUAL_UNION_TYPE:
3620 tree field;
3622 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3623 if (TREE_CODE (field) == FIELD_DECL
3624 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3625 || (TREE_CODE (type) == QUAL_UNION_TYPE
3626 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3627 || type_contains_placeholder_p (TREE_TYPE (field))))
3628 return true;
3630 return false;
3633 default:
3634 gcc_unreachable ();
3638 /* Wrapper around above function used to cache its result. */
3640 bool
3641 type_contains_placeholder_p (tree type)
3643 bool result;
3645 /* If the contains_placeholder_bits field has been initialized,
3646 then we know the answer. */
3647 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3648 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3650 /* Indicate that we've seen this type node, and the answer is false.
3651 This is what we want to return if we run into recursion via fields. */
3652 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3654 /* Compute the real value. */
3655 result = type_contains_placeholder_1 (type);
3657 /* Store the real value. */
3658 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3660 return result;
3663 /* Push tree EXP onto vector QUEUE if it is not already present. */
3665 static void
3666 push_without_duplicates (tree exp, vec<tree> *queue)
3668 unsigned int i;
3669 tree iter;
3671 FOR_EACH_VEC_ELT (*queue, i, iter)
3672 if (simple_cst_equal (iter, exp) == 1)
3673 break;
3675 if (!iter)
3676 queue->safe_push (exp);
3679 /* Given a tree EXP, find all occurrences of references to fields
3680 in a PLACEHOLDER_EXPR and place them in vector REFS without
3681 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
3682 we assume here that EXP contains only arithmetic expressions
3683 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3684 argument list. */
3686 void
3687 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3689 enum tree_code code = TREE_CODE (exp);
3690 tree inner;
3691 int i;
3693 /* We handle TREE_LIST and COMPONENT_REF separately. */
3694 if (code == TREE_LIST)
3696 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3697 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3699 else if (code == COMPONENT_REF)
3701 for (inner = TREE_OPERAND (exp, 0);
3702 REFERENCE_CLASS_P (inner);
3703 inner = TREE_OPERAND (inner, 0))
3706 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3707 push_without_duplicates (exp, refs);
3708 else
3709 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3711 else
3712 switch (TREE_CODE_CLASS (code))
3714 case tcc_constant:
3715 break;
3717 case tcc_declaration:
3718 /* Variables allocated to static storage can stay. */
3719 if (!TREE_STATIC (exp))
3720 push_without_duplicates (exp, refs);
3721 break;
3723 case tcc_expression:
3724 /* This is the pattern built in ada/make_aligning_type. */
3725 if (code == ADDR_EXPR
3726 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3728 push_without_duplicates (exp, refs);
3729 break;
3732 /* Fall through. */
3734 case tcc_exceptional:
3735 case tcc_unary:
3736 case tcc_binary:
3737 case tcc_comparison:
3738 case tcc_reference:
3739 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3740 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3741 break;
3743 case tcc_vl_exp:
3744 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3745 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3746 break;
3748 default:
3749 gcc_unreachable ();
3753 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3754 return a tree with all occurrences of references to F in a
3755 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
3756 CONST_DECLs. Note that we assume here that EXP contains only
3757 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3758 occurring only in their argument list. */
3760 tree
3761 substitute_in_expr (tree exp, tree f, tree r)
3763 enum tree_code code = TREE_CODE (exp);
3764 tree op0, op1, op2, op3;
3765 tree new_tree;
3767 /* We handle TREE_LIST and COMPONENT_REF separately. */
3768 if (code == TREE_LIST)
3770 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3771 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3772 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3773 return exp;
3775 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3777 else if (code == COMPONENT_REF)
3779 tree inner;
3781 /* If this expression is getting a value from a PLACEHOLDER_EXPR
3782 and it is the right field, replace it with R. */
3783 for (inner = TREE_OPERAND (exp, 0);
3784 REFERENCE_CLASS_P (inner);
3785 inner = TREE_OPERAND (inner, 0))
3788 /* The field. */
3789 op1 = TREE_OPERAND (exp, 1);
3791 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3792 return r;
3794 /* If this expression hasn't been completed let, leave it alone. */
3795 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3796 return exp;
3798 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3799 if (op0 == TREE_OPERAND (exp, 0))
3800 return exp;
3802 new_tree
3803 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3805 else
3806 switch (TREE_CODE_CLASS (code))
3808 case tcc_constant:
3809 return exp;
3811 case tcc_declaration:
3812 if (exp == f)
3813 return r;
3814 else
3815 return exp;
3817 case tcc_expression:
3818 if (exp == f)
3819 return r;
3821 /* Fall through. */
3823 case tcc_exceptional:
3824 case tcc_unary:
3825 case tcc_binary:
3826 case tcc_comparison:
3827 case tcc_reference:
3828 switch (TREE_CODE_LENGTH (code))
3830 case 0:
3831 return exp;
3833 case 1:
3834 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3835 if (op0 == TREE_OPERAND (exp, 0))
3836 return exp;
3838 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3839 break;
3841 case 2:
3842 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3843 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3845 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3846 return exp;
3848 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3849 break;
3851 case 3:
3852 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3853 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3854 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3856 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3857 && op2 == TREE_OPERAND (exp, 2))
3858 return exp;
3860 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3861 break;
3863 case 4:
3864 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3865 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3866 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3867 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3869 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3870 && op2 == TREE_OPERAND (exp, 2)
3871 && op3 == TREE_OPERAND (exp, 3))
3872 return exp;
3874 new_tree
3875 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3876 break;
3878 default:
3879 gcc_unreachable ();
3881 break;
3883 case tcc_vl_exp:
3885 int i;
3887 new_tree = NULL_TREE;
3889 /* If we are trying to replace F with a constant or with another
3890 instance of one of the arguments of the call, inline back
3891 functions which do nothing else than computing a value from
3892 the arguments they are passed. This makes it possible to
3893 fold partially or entirely the replacement expression. */
3894 if (code == CALL_EXPR)
3896 bool maybe_inline = false;
3897 if (CONSTANT_CLASS_P (r))
3898 maybe_inline = true;
3899 else
3900 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++)
3901 if (operand_equal_p (TREE_OPERAND (exp, i), r, 0))
3903 maybe_inline = true;
3904 break;
3906 if (maybe_inline)
3908 tree t = maybe_inline_call_in_expr (exp);
3909 if (t)
3910 return SUBSTITUTE_IN_EXPR (t, f, r);
3914 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3916 tree op = TREE_OPERAND (exp, i);
3917 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3918 if (new_op != op)
3920 if (!new_tree)
3921 new_tree = copy_node (exp);
3922 TREE_OPERAND (new_tree, i) = new_op;
3926 if (new_tree)
3928 new_tree = fold (new_tree);
3929 if (TREE_CODE (new_tree) == CALL_EXPR)
3930 process_call_operands (new_tree);
3932 else
3933 return exp;
3935 break;
3937 default:
3938 gcc_unreachable ();
3941 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3943 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3944 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3946 return new_tree;
3949 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3950 for it within OBJ, a tree that is an object or a chain of references. */
3952 tree
3953 substitute_placeholder_in_expr (tree exp, tree obj)
3955 enum tree_code code = TREE_CODE (exp);
3956 tree op0, op1, op2, op3;
3957 tree new_tree;
3959 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3960 in the chain of OBJ. */
3961 if (code == PLACEHOLDER_EXPR)
3963 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3964 tree elt;
3966 for (elt = obj; elt != 0;
3967 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3968 || TREE_CODE (elt) == COND_EXPR)
3969 ? TREE_OPERAND (elt, 1)
3970 : (REFERENCE_CLASS_P (elt)
3971 || UNARY_CLASS_P (elt)
3972 || BINARY_CLASS_P (elt)
3973 || VL_EXP_CLASS_P (elt)
3974 || EXPRESSION_CLASS_P (elt))
3975 ? TREE_OPERAND (elt, 0) : 0))
3976 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3977 return elt;
3979 for (elt = obj; elt != 0;
3980 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3981 || TREE_CODE (elt) == COND_EXPR)
3982 ? TREE_OPERAND (elt, 1)
3983 : (REFERENCE_CLASS_P (elt)
3984 || UNARY_CLASS_P (elt)
3985 || BINARY_CLASS_P (elt)
3986 || VL_EXP_CLASS_P (elt)
3987 || EXPRESSION_CLASS_P (elt))
3988 ? TREE_OPERAND (elt, 0) : 0))
3989 if (POINTER_TYPE_P (TREE_TYPE (elt))
3990 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3991 == need_type))
3992 return fold_build1 (INDIRECT_REF, need_type, elt);
3994 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
3995 survives until RTL generation, there will be an error. */
3996 return exp;
3999 /* TREE_LIST is special because we need to look at TREE_VALUE
4000 and TREE_CHAIN, not TREE_OPERANDS. */
4001 else if (code == TREE_LIST)
4003 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
4004 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
4005 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
4006 return exp;
4008 return tree_cons (TREE_PURPOSE (exp), op1, op0);
4010 else
4011 switch (TREE_CODE_CLASS (code))
4013 case tcc_constant:
4014 case tcc_declaration:
4015 return exp;
4017 case tcc_exceptional:
4018 case tcc_unary:
4019 case tcc_binary:
4020 case tcc_comparison:
4021 case tcc_expression:
4022 case tcc_reference:
4023 case tcc_statement:
4024 switch (TREE_CODE_LENGTH (code))
4026 case 0:
4027 return exp;
4029 case 1:
4030 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4031 if (op0 == TREE_OPERAND (exp, 0))
4032 return exp;
4034 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
4035 break;
4037 case 2:
4038 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4039 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4041 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
4042 return exp;
4044 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
4045 break;
4047 case 3:
4048 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4049 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4050 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4052 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4053 && op2 == TREE_OPERAND (exp, 2))
4054 return exp;
4056 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
4057 break;
4059 case 4:
4060 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
4061 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
4062 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
4063 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
4065 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
4066 && op2 == TREE_OPERAND (exp, 2)
4067 && op3 == TREE_OPERAND (exp, 3))
4068 return exp;
4070 new_tree
4071 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
4072 break;
4074 default:
4075 gcc_unreachable ();
4077 break;
4079 case tcc_vl_exp:
4081 int i;
4083 new_tree = NULL_TREE;
4085 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
4087 tree op = TREE_OPERAND (exp, i);
4088 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
4089 if (new_op != op)
4091 if (!new_tree)
4092 new_tree = copy_node (exp);
4093 TREE_OPERAND (new_tree, i) = new_op;
4097 if (new_tree)
4099 new_tree = fold (new_tree);
4100 if (TREE_CODE (new_tree) == CALL_EXPR)
4101 process_call_operands (new_tree);
4103 else
4104 return exp;
4106 break;
4108 default:
4109 gcc_unreachable ();
4112 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4114 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4115 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4117 return new_tree;
4121 /* Subroutine of stabilize_reference; this is called for subtrees of
4122 references. Any expression with side-effects must be put in a SAVE_EXPR
4123 to ensure that it is only evaluated once.
4125 We don't put SAVE_EXPR nodes around everything, because assigning very
4126 simple expressions to temporaries causes us to miss good opportunities
4127 for optimizations. Among other things, the opportunity to fold in the
4128 addition of a constant into an addressing mode often gets lost, e.g.
4129 "y[i+1] += x;". In general, we take the approach that we should not make
4130 an assignment unless we are forced into it - i.e., that any non-side effect
4131 operator should be allowed, and that cse should take care of coalescing
4132 multiple utterances of the same expression should that prove fruitful. */
4134 static tree
4135 stabilize_reference_1 (tree e)
4137 tree result;
4138 enum tree_code code = TREE_CODE (e);
4140 /* We cannot ignore const expressions because it might be a reference
4141 to a const array but whose index contains side-effects. But we can
4142 ignore things that are actual constant or that already have been
4143 handled by this function. */
4145 if (tree_invariant_p (e))
4146 return e;
4148 switch (TREE_CODE_CLASS (code))
4150 case tcc_exceptional:
4151 case tcc_type:
4152 case tcc_declaration:
4153 case tcc_comparison:
4154 case tcc_statement:
4155 case tcc_expression:
4156 case tcc_reference:
4157 case tcc_vl_exp:
4158 /* If the expression has side-effects, then encase it in a SAVE_EXPR
4159 so that it will only be evaluated once. */
4160 /* The reference (r) and comparison (<) classes could be handled as
4161 below, but it is generally faster to only evaluate them once. */
4162 if (TREE_SIDE_EFFECTS (e))
4163 return save_expr (e);
4164 return e;
4166 case tcc_constant:
4167 /* Constants need no processing. In fact, we should never reach
4168 here. */
4169 return e;
4171 case tcc_binary:
4172 /* Division is slow and tends to be compiled with jumps,
4173 especially the division by powers of 2 that is often
4174 found inside of an array reference. So do it just once. */
4175 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4176 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4177 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4178 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4179 return save_expr (e);
4180 /* Recursively stabilize each operand. */
4181 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4182 stabilize_reference_1 (TREE_OPERAND (e, 1)));
4183 break;
4185 case tcc_unary:
4186 /* Recursively stabilize each operand. */
4187 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4188 break;
4190 default:
4191 gcc_unreachable ();
4194 TREE_TYPE (result) = TREE_TYPE (e);
4195 TREE_READONLY (result) = TREE_READONLY (e);
4196 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4197 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4199 return result;
4202 /* Stabilize a reference so that we can use it any number of times
4203 without causing its operands to be evaluated more than once.
4204 Returns the stabilized reference. This works by means of save_expr,
4205 so see the caveats in the comments about save_expr.
4207 Also allows conversion expressions whose operands are references.
4208 Any other kind of expression is returned unchanged. */
4210 tree
4211 stabilize_reference (tree ref)
4213 tree result;
4214 enum tree_code code = TREE_CODE (ref);
4216 switch (code)
4218 case VAR_DECL:
4219 case PARM_DECL:
4220 case RESULT_DECL:
4221 /* No action is needed in this case. */
4222 return ref;
4224 CASE_CONVERT:
4225 case FLOAT_EXPR:
4226 case FIX_TRUNC_EXPR:
4227 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4228 break;
4230 case INDIRECT_REF:
4231 result = build_nt (INDIRECT_REF,
4232 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4233 break;
4235 case COMPONENT_REF:
4236 result = build_nt (COMPONENT_REF,
4237 stabilize_reference (TREE_OPERAND (ref, 0)),
4238 TREE_OPERAND (ref, 1), NULL_TREE);
4239 break;
4241 case BIT_FIELD_REF:
4242 result = build_nt (BIT_FIELD_REF,
4243 stabilize_reference (TREE_OPERAND (ref, 0)),
4244 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4245 REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref);
4246 break;
4248 case ARRAY_REF:
4249 result = build_nt (ARRAY_REF,
4250 stabilize_reference (TREE_OPERAND (ref, 0)),
4251 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4252 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4253 break;
4255 case ARRAY_RANGE_REF:
4256 result = build_nt (ARRAY_RANGE_REF,
4257 stabilize_reference (TREE_OPERAND (ref, 0)),
4258 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4259 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4260 break;
4262 case COMPOUND_EXPR:
4263 /* We cannot wrap the first expression in a SAVE_EXPR, as then
4264 it wouldn't be ignored. This matters when dealing with
4265 volatiles. */
4266 return stabilize_reference_1 (ref);
4268 /* If arg isn't a kind of lvalue we recognize, make no change.
4269 Caller should recognize the error for an invalid lvalue. */
4270 default:
4271 return ref;
4273 case ERROR_MARK:
4274 return error_mark_node;
4277 TREE_TYPE (result) = TREE_TYPE (ref);
4278 TREE_READONLY (result) = TREE_READONLY (ref);
4279 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4280 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4282 return result;
4285 /* Low-level constructors for expressions. */
4287 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
4288 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
4290 void
4291 recompute_tree_invariant_for_addr_expr (tree t)
4293 tree node;
4294 bool tc = true, se = false;
4296 gcc_assert (TREE_CODE (t) == ADDR_EXPR);
4298 /* We started out assuming this address is both invariant and constant, but
4299 does not have side effects. Now go down any handled components and see if
4300 any of them involve offsets that are either non-constant or non-invariant.
4301 Also check for side-effects.
4303 ??? Note that this code makes no attempt to deal with the case where
4304 taking the address of something causes a copy due to misalignment. */
4306 #define UPDATE_FLAGS(NODE) \
4307 do { tree _node = (NODE); \
4308 if (_node && !TREE_CONSTANT (_node)) tc = false; \
4309 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4311 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4312 node = TREE_OPERAND (node, 0))
4314 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4315 array reference (probably made temporarily by the G++ front end),
4316 so ignore all the operands. */
4317 if ((TREE_CODE (node) == ARRAY_REF
4318 || TREE_CODE (node) == ARRAY_RANGE_REF)
4319 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4321 UPDATE_FLAGS (TREE_OPERAND (node, 1));
4322 if (TREE_OPERAND (node, 2))
4323 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4324 if (TREE_OPERAND (node, 3))
4325 UPDATE_FLAGS (TREE_OPERAND (node, 3));
4327 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4328 FIELD_DECL, apparently. The G++ front end can put something else
4329 there, at least temporarily. */
4330 else if (TREE_CODE (node) == COMPONENT_REF
4331 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4333 if (TREE_OPERAND (node, 2))
4334 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4338 node = lang_hooks.expr_to_decl (node, &tc, &se);
4340 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4341 the address, since &(*a)->b is a form of addition. If it's a constant, the
4342 address is constant too. If it's a decl, its address is constant if the
4343 decl is static. Everything else is not constant and, furthermore,
4344 taking the address of a volatile variable is not volatile. */
4345 if (TREE_CODE (node) == INDIRECT_REF
4346 || TREE_CODE (node) == MEM_REF)
4347 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4348 else if (CONSTANT_CLASS_P (node))
4350 else if (DECL_P (node))
4351 tc &= (staticp (node) != NULL_TREE);
4352 else
4354 tc = false;
4355 se |= TREE_SIDE_EFFECTS (node);
4359 TREE_CONSTANT (t) = tc;
4360 TREE_SIDE_EFFECTS (t) = se;
4361 #undef UPDATE_FLAGS
4364 /* Build an expression of code CODE, data type TYPE, and operands as
4365 specified. Expressions and reference nodes can be created this way.
4366 Constants, decls, types and misc nodes cannot be.
4368 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4369 enough for all extant tree codes. */
4371 tree
4372 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4374 tree t;
4376 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4378 t = make_node_stat (code PASS_MEM_STAT);
4379 TREE_TYPE (t) = tt;
4381 return t;
4384 tree
4385 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4387 int length = sizeof (struct tree_exp);
4388 tree t;
4390 record_node_allocation_statistics (code, length);
4392 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4394 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4396 memset (t, 0, sizeof (struct tree_common));
4398 TREE_SET_CODE (t, code);
4400 TREE_TYPE (t) = type;
4401 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4402 TREE_OPERAND (t, 0) = node;
4403 if (node && !TYPE_P (node))
4405 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4406 TREE_READONLY (t) = TREE_READONLY (node);
4409 if (TREE_CODE_CLASS (code) == tcc_statement)
4410 TREE_SIDE_EFFECTS (t) = 1;
4411 else switch (code)
4413 case VA_ARG_EXPR:
4414 /* All of these have side-effects, no matter what their
4415 operands are. */
4416 TREE_SIDE_EFFECTS (t) = 1;
4417 TREE_READONLY (t) = 0;
4418 break;
4420 case INDIRECT_REF:
4421 /* Whether a dereference is readonly has nothing to do with whether
4422 its operand is readonly. */
4423 TREE_READONLY (t) = 0;
4424 break;
4426 case ADDR_EXPR:
4427 if (node)
4428 recompute_tree_invariant_for_addr_expr (t);
4429 break;
4431 default:
4432 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4433 && node && !TYPE_P (node)
4434 && TREE_CONSTANT (node))
4435 TREE_CONSTANT (t) = 1;
4436 if (TREE_CODE_CLASS (code) == tcc_reference
4437 && node && TREE_THIS_VOLATILE (node))
4438 TREE_THIS_VOLATILE (t) = 1;
4439 break;
4442 return t;
4445 #define PROCESS_ARG(N) \
4446 do { \
4447 TREE_OPERAND (t, N) = arg##N; \
4448 if (arg##N &&!TYPE_P (arg##N)) \
4450 if (TREE_SIDE_EFFECTS (arg##N)) \
4451 side_effects = 1; \
4452 if (!TREE_READONLY (arg##N) \
4453 && !CONSTANT_CLASS_P (arg##N)) \
4454 (void) (read_only = 0); \
4455 if (!TREE_CONSTANT (arg##N)) \
4456 (void) (constant = 0); \
4458 } while (0)
4460 tree
4461 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4463 bool constant, read_only, side_effects;
4464 tree t;
4466 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4468 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4469 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4470 /* When sizetype precision doesn't match that of pointers
4471 we need to be able to build explicit extensions or truncations
4472 of the offset argument. */
4473 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4474 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4475 && TREE_CODE (arg1) == INTEGER_CST);
4477 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4478 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4479 && ptrofftype_p (TREE_TYPE (arg1)));
4481 t = make_node_stat (code PASS_MEM_STAT);
4482 TREE_TYPE (t) = tt;
4484 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4485 result based on those same flags for the arguments. But if the
4486 arguments aren't really even `tree' expressions, we shouldn't be trying
4487 to do this. */
4489 /* Expressions without side effects may be constant if their
4490 arguments are as well. */
4491 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4492 || TREE_CODE_CLASS (code) == tcc_binary);
4493 read_only = 1;
4494 side_effects = TREE_SIDE_EFFECTS (t);
4496 PROCESS_ARG (0);
4497 PROCESS_ARG (1);
4499 TREE_SIDE_EFFECTS (t) = side_effects;
4500 if (code == MEM_REF)
4502 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4504 tree o = TREE_OPERAND (arg0, 0);
4505 TREE_READONLY (t) = TREE_READONLY (o);
4506 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4509 else
4511 TREE_READONLY (t) = read_only;
4512 TREE_CONSTANT (t) = constant;
4513 TREE_THIS_VOLATILE (t)
4514 = (TREE_CODE_CLASS (code) == tcc_reference
4515 && arg0 && TREE_THIS_VOLATILE (arg0));
4518 return t;
4522 tree
4523 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4524 tree arg2 MEM_STAT_DECL)
4526 bool constant, read_only, side_effects;
4527 tree t;
4529 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4530 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4532 t = make_node_stat (code PASS_MEM_STAT);
4533 TREE_TYPE (t) = tt;
4535 read_only = 1;
4537 /* As a special exception, if COND_EXPR has NULL branches, we
4538 assume that it is a gimple statement and always consider
4539 it to have side effects. */
4540 if (code == COND_EXPR
4541 && tt == void_type_node
4542 && arg1 == NULL_TREE
4543 && arg2 == NULL_TREE)
4544 side_effects = true;
4545 else
4546 side_effects = TREE_SIDE_EFFECTS (t);
4548 PROCESS_ARG (0);
4549 PROCESS_ARG (1);
4550 PROCESS_ARG (2);
4552 if (code == COND_EXPR)
4553 TREE_READONLY (t) = read_only;
4555 TREE_SIDE_EFFECTS (t) = side_effects;
4556 TREE_THIS_VOLATILE (t)
4557 = (TREE_CODE_CLASS (code) == tcc_reference
4558 && arg0 && TREE_THIS_VOLATILE (arg0));
4560 return t;
4563 tree
4564 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4565 tree arg2, tree arg3 MEM_STAT_DECL)
4567 bool constant, read_only, side_effects;
4568 tree t;
4570 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4572 t = make_node_stat (code PASS_MEM_STAT);
4573 TREE_TYPE (t) = tt;
4575 side_effects = TREE_SIDE_EFFECTS (t);
4577 PROCESS_ARG (0);
4578 PROCESS_ARG (1);
4579 PROCESS_ARG (2);
4580 PROCESS_ARG (3);
4582 TREE_SIDE_EFFECTS (t) = side_effects;
4583 TREE_THIS_VOLATILE (t)
4584 = (TREE_CODE_CLASS (code) == tcc_reference
4585 && arg0 && TREE_THIS_VOLATILE (arg0));
4587 return t;
4590 tree
4591 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4592 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4594 bool constant, read_only, side_effects;
4595 tree t;
4597 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4599 t = make_node_stat (code PASS_MEM_STAT);
4600 TREE_TYPE (t) = tt;
4602 side_effects = TREE_SIDE_EFFECTS (t);
4604 PROCESS_ARG (0);
4605 PROCESS_ARG (1);
4606 PROCESS_ARG (2);
4607 PROCESS_ARG (3);
4608 PROCESS_ARG (4);
4610 TREE_SIDE_EFFECTS (t) = side_effects;
4611 if (code == TARGET_MEM_REF)
4613 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4615 tree o = TREE_OPERAND (arg0, 0);
4616 TREE_READONLY (t) = TREE_READONLY (o);
4617 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4620 else
4621 TREE_THIS_VOLATILE (t)
4622 = (TREE_CODE_CLASS (code) == tcc_reference
4623 && arg0 && TREE_THIS_VOLATILE (arg0));
4625 return t;
4628 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4629 on the pointer PTR. */
4631 tree
4632 build_simple_mem_ref_loc (location_t loc, tree ptr)
4634 HOST_WIDE_INT offset = 0;
4635 tree ptype = TREE_TYPE (ptr);
4636 tree tem;
4637 /* For convenience allow addresses that collapse to a simple base
4638 and offset. */
4639 if (TREE_CODE (ptr) == ADDR_EXPR
4640 && (handled_component_p (TREE_OPERAND (ptr, 0))
4641 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4643 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4644 gcc_assert (ptr);
4645 ptr = build_fold_addr_expr (ptr);
4646 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4648 tem = build2 (MEM_REF, TREE_TYPE (ptype),
4649 ptr, build_int_cst (ptype, offset));
4650 SET_EXPR_LOCATION (tem, loc);
4651 return tem;
4654 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
4656 offset_int
4657 mem_ref_offset (const_tree t)
4659 return offset_int::from (TREE_OPERAND (t, 1), SIGNED);
4662 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4663 offsetted by OFFSET units. */
4665 tree
4666 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4668 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4669 build_fold_addr_expr (base),
4670 build_int_cst (ptr_type_node, offset));
4671 tree addr = build1 (ADDR_EXPR, type, ref);
4672 recompute_tree_invariant_for_addr_expr (addr);
4673 return addr;
4676 /* Similar except don't specify the TREE_TYPE
4677 and leave the TREE_SIDE_EFFECTS as 0.
4678 It is permissible for arguments to be null,
4679 or even garbage if their values do not matter. */
4681 tree
4682 build_nt (enum tree_code code, ...)
4684 tree t;
4685 int length;
4686 int i;
4687 va_list p;
4689 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4691 va_start (p, code);
4693 t = make_node (code);
4694 length = TREE_CODE_LENGTH (code);
4696 for (i = 0; i < length; i++)
4697 TREE_OPERAND (t, i) = va_arg (p, tree);
4699 va_end (p);
4700 return t;
4703 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4704 tree vec. */
4706 tree
4707 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4709 tree ret, t;
4710 unsigned int ix;
4712 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4713 CALL_EXPR_FN (ret) = fn;
4714 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4715 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4716 CALL_EXPR_ARG (ret, ix) = t;
4717 return ret;
4720 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4721 We do NOT enter this node in any sort of symbol table.
4723 LOC is the location of the decl.
4725 layout_decl is used to set up the decl's storage layout.
4726 Other slots are initialized to 0 or null pointers. */
4728 tree
4729 build_decl_stat (location_t loc, enum tree_code code, tree name,
4730 tree type MEM_STAT_DECL)
4732 tree t;
4734 t = make_node_stat (code PASS_MEM_STAT);
4735 DECL_SOURCE_LOCATION (t) = loc;
4737 /* if (type == error_mark_node)
4738 type = integer_type_node; */
4739 /* That is not done, deliberately, so that having error_mark_node
4740 as the type can suppress useless errors in the use of this variable. */
4742 DECL_NAME (t) = name;
4743 TREE_TYPE (t) = type;
4745 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4746 layout_decl (t, 0);
4748 return t;
4751 /* Builds and returns function declaration with NAME and TYPE. */
4753 tree
4754 build_fn_decl (const char *name, tree type)
4756 tree id = get_identifier (name);
4757 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4759 DECL_EXTERNAL (decl) = 1;
4760 TREE_PUBLIC (decl) = 1;
4761 DECL_ARTIFICIAL (decl) = 1;
4762 TREE_NOTHROW (decl) = 1;
4764 return decl;
4767 vec<tree, va_gc> *all_translation_units;
4769 /* Builds a new translation-unit decl with name NAME, queues it in the
4770 global list of translation-unit decls and returns it. */
4772 tree
4773 build_translation_unit_decl (tree name)
4775 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4776 name, NULL_TREE);
4777 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4778 vec_safe_push (all_translation_units, tu);
4779 return tu;
4783 /* BLOCK nodes are used to represent the structure of binding contours
4784 and declarations, once those contours have been exited and their contents
4785 compiled. This information is used for outputting debugging info. */
4787 tree
4788 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4790 tree block = make_node (BLOCK);
4792 BLOCK_VARS (block) = vars;
4793 BLOCK_SUBBLOCKS (block) = subblocks;
4794 BLOCK_SUPERCONTEXT (block) = supercontext;
4795 BLOCK_CHAIN (block) = chain;
4796 return block;
4800 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4802 LOC is the location to use in tree T. */
4804 void
4805 protected_set_expr_location (tree t, location_t loc)
4807 if (CAN_HAVE_LOCATION_P (t))
4808 SET_EXPR_LOCATION (t, loc);
4811 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4812 is ATTRIBUTE. */
4814 tree
4815 build_decl_attribute_variant (tree ddecl, tree attribute)
4817 DECL_ATTRIBUTES (ddecl) = attribute;
4818 return ddecl;
4821 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4822 is ATTRIBUTE and its qualifiers are QUALS.
4824 Record such modified types already made so we don't make duplicates. */
4826 tree
4827 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4829 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4831 inchash::hash hstate;
4832 tree ntype;
4833 int i;
4834 tree t;
4835 enum tree_code code = TREE_CODE (ttype);
4837 /* Building a distinct copy of a tagged type is inappropriate; it
4838 causes breakage in code that expects there to be a one-to-one
4839 relationship between a struct and its fields.
4840 build_duplicate_type is another solution (as used in
4841 handle_transparent_union_attribute), but that doesn't play well
4842 with the stronger C++ type identity model. */
4843 if (TREE_CODE (ttype) == RECORD_TYPE
4844 || TREE_CODE (ttype) == UNION_TYPE
4845 || TREE_CODE (ttype) == QUAL_UNION_TYPE
4846 || TREE_CODE (ttype) == ENUMERAL_TYPE)
4848 warning (OPT_Wattributes,
4849 "ignoring attributes applied to %qT after definition",
4850 TYPE_MAIN_VARIANT (ttype));
4851 return build_qualified_type (ttype, quals);
4854 ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4855 ntype = build_distinct_type_copy (ttype);
4857 TYPE_ATTRIBUTES (ntype) = attribute;
4859 hstate.add_int (code);
4860 if (TREE_TYPE (ntype))
4861 hstate.add_object (TYPE_HASH (TREE_TYPE (ntype)));
4862 attribute_hash_list (attribute, hstate);
4864 switch (TREE_CODE (ntype))
4866 case FUNCTION_TYPE:
4867 type_hash_list (TYPE_ARG_TYPES (ntype), hstate);
4868 break;
4869 case ARRAY_TYPE:
4870 if (TYPE_DOMAIN (ntype))
4871 hstate.add_object (TYPE_HASH (TYPE_DOMAIN (ntype)));
4872 break;
4873 case INTEGER_TYPE:
4874 t = TYPE_MAX_VALUE (ntype);
4875 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
4876 hstate.add_object (TREE_INT_CST_ELT (t, i));
4877 break;
4878 case REAL_TYPE:
4879 case FIXED_POINT_TYPE:
4881 unsigned int precision = TYPE_PRECISION (ntype);
4882 hstate.add_object (precision);
4884 break;
4885 default:
4886 break;
4889 ntype = type_hash_canon (hstate.end(), ntype);
4891 /* If the target-dependent attributes make NTYPE different from
4892 its canonical type, we will need to use structural equality
4893 checks for this type. */
4894 if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4895 || !comp_type_attributes (ntype, ttype))
4896 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4897 else if (TYPE_CANONICAL (ntype) == ntype)
4898 TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4900 ttype = build_qualified_type (ntype, quals);
4902 else if (TYPE_QUALS (ttype) != quals)
4903 ttype = build_qualified_type (ttype, quals);
4905 return ttype;
4908 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4909 the same. */
4911 static bool
4912 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4914 tree cl1, cl2;
4915 for (cl1 = clauses1, cl2 = clauses2;
4916 cl1 && cl2;
4917 cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4919 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4920 return false;
4921 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4923 if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4924 OMP_CLAUSE_DECL (cl2)) != 1)
4925 return false;
4927 switch (OMP_CLAUSE_CODE (cl1))
4929 case OMP_CLAUSE_ALIGNED:
4930 if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4931 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4932 return false;
4933 break;
4934 case OMP_CLAUSE_LINEAR:
4935 if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4936 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4937 return false;
4938 break;
4939 case OMP_CLAUSE_SIMDLEN:
4940 if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4941 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4942 return false;
4943 default:
4944 break;
4947 return true;
4950 /* Compare two constructor-element-type constants. Return 1 if the lists
4951 are known to be equal; otherwise return 0. */
4953 static bool
4954 simple_cst_list_equal (const_tree l1, const_tree l2)
4956 while (l1 != NULL_TREE && l2 != NULL_TREE)
4958 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4959 return false;
4961 l1 = TREE_CHAIN (l1);
4962 l2 = TREE_CHAIN (l2);
4965 return l1 == l2;
4968 /* Compare two identifier nodes representing attributes. Either one may
4969 be in wrapped __ATTR__ form. Return true if they are the same, false
4970 otherwise. */
4972 static bool
4973 cmp_attrib_identifiers (const_tree attr1, const_tree attr2)
4975 /* Make sure we're dealing with IDENTIFIER_NODEs. */
4976 gcc_checking_assert (TREE_CODE (attr1) == IDENTIFIER_NODE
4977 && TREE_CODE (attr2) == IDENTIFIER_NODE);
4979 /* Identifiers can be compared directly for equality. */
4980 if (attr1 == attr2)
4981 return true;
4983 /* If they are not equal, they may still be one in the form
4984 'text' while the other one is in the form '__text__'. TODO:
4985 If we were storing attributes in normalized 'text' form, then
4986 this could all go away and we could take full advantage of
4987 the fact that we're comparing identifiers. :-) */
4988 const size_t attr1_len = IDENTIFIER_LENGTH (attr1);
4989 const size_t attr2_len = IDENTIFIER_LENGTH (attr2);
4991 if (attr2_len == attr1_len + 4)
4993 const char *p = IDENTIFIER_POINTER (attr2);
4994 const char *q = IDENTIFIER_POINTER (attr1);
4995 if (p[0] == '_' && p[1] == '_'
4996 && p[attr2_len - 2] == '_' && p[attr2_len - 1] == '_'
4997 && strncmp (q, p + 2, attr1_len) == 0)
4998 return true;;
5000 else if (attr2_len + 4 == attr1_len)
5002 const char *p = IDENTIFIER_POINTER (attr2);
5003 const char *q = IDENTIFIER_POINTER (attr1);
5004 if (q[0] == '_' && q[1] == '_'
5005 && q[attr1_len - 2] == '_' && q[attr1_len - 1] == '_'
5006 && strncmp (q + 2, p, attr2_len) == 0)
5007 return true;
5010 return false;
5013 /* Compare two attributes for their value identity. Return true if the
5014 attribute values are known to be equal; otherwise return false. */
5016 bool
5017 attribute_value_equal (const_tree attr1, const_tree attr2)
5019 if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
5020 return true;
5022 if (TREE_VALUE (attr1) != NULL_TREE
5023 && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
5024 && TREE_VALUE (attr2) != NULL_TREE
5025 && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
5027 /* Handle attribute format. */
5028 if (is_attribute_p ("format", get_attribute_name (attr1)))
5030 attr1 = TREE_VALUE (attr1);
5031 attr2 = TREE_VALUE (attr2);
5032 /* Compare the archetypes (printf/scanf/strftime/...). */
5033 if (!cmp_attrib_identifiers (TREE_VALUE (attr1),
5034 TREE_VALUE (attr2)))
5035 return false;
5036 /* Archetypes are the same. Compare the rest. */
5037 return (simple_cst_list_equal (TREE_CHAIN (attr1),
5038 TREE_CHAIN (attr2)) == 1);
5040 return (simple_cst_list_equal (TREE_VALUE (attr1),
5041 TREE_VALUE (attr2)) == 1);
5044 if ((flag_openmp || flag_openmp_simd)
5045 && TREE_VALUE (attr1) && TREE_VALUE (attr2)
5046 && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
5047 && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
5048 return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
5049 TREE_VALUE (attr2));
5051 return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
5054 /* Return 0 if the attributes for two types are incompatible, 1 if they
5055 are compatible, and 2 if they are nearly compatible (which causes a
5056 warning to be generated). */
5058 comp_type_attributes (const_tree type1, const_tree type2)
5060 const_tree a1 = TYPE_ATTRIBUTES (type1);
5061 const_tree a2 = TYPE_ATTRIBUTES (type2);
5062 const_tree a;
5064 if (a1 == a2)
5065 return 1;
5066 for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
5068 const struct attribute_spec *as;
5069 const_tree attr;
5071 as = lookup_attribute_spec (get_attribute_name (a));
5072 if (!as || as->affects_type_identity == false)
5073 continue;
5075 attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
5076 if (!attr || !attribute_value_equal (a, attr))
5077 break;
5079 if (!a)
5081 for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
5083 const struct attribute_spec *as;
5085 as = lookup_attribute_spec (get_attribute_name (a));
5086 if (!as || as->affects_type_identity == false)
5087 continue;
5089 if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
5090 break;
5091 /* We don't need to compare trees again, as we did this
5092 already in first loop. */
5094 /* All types - affecting identity - are equal, so
5095 there is no need to call target hook for comparison. */
5096 if (!a)
5097 return 1;
5099 if (lookup_attribute ("transaction_safe", CONST_CAST_TREE (a)))
5100 return 0;
5101 /* As some type combinations - like default calling-convention - might
5102 be compatible, we have to call the target hook to get the final result. */
5103 return targetm.comp_type_attributes (type1, type2);
5106 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
5107 is ATTRIBUTE.
5109 Record such modified types already made so we don't make duplicates. */
5111 tree
5112 build_type_attribute_variant (tree ttype, tree attribute)
5114 return build_type_attribute_qual_variant (ttype, attribute,
5115 TYPE_QUALS (ttype));
5119 /* Reset the expression *EXPR_P, a size or position.
5121 ??? We could reset all non-constant sizes or positions. But it's cheap
5122 enough to not do so and refrain from adding workarounds to dwarf2out.c.
5124 We need to reset self-referential sizes or positions because they cannot
5125 be gimplified and thus can contain a CALL_EXPR after the gimplification
5126 is finished, which will run afoul of LTO streaming. And they need to be
5127 reset to something essentially dummy but not constant, so as to preserve
5128 the properties of the object they are attached to. */
5130 static inline void
5131 free_lang_data_in_one_sizepos (tree *expr_p)
5133 tree expr = *expr_p;
5134 if (CONTAINS_PLACEHOLDER_P (expr))
5135 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
5139 /* Reset all the fields in a binfo node BINFO. We only keep
5140 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
5142 static void
5143 free_lang_data_in_binfo (tree binfo)
5145 unsigned i;
5146 tree t;
5148 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
5150 BINFO_VIRTUALS (binfo) = NULL_TREE;
5151 BINFO_BASE_ACCESSES (binfo) = NULL;
5152 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
5153 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
5155 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
5156 free_lang_data_in_binfo (t);
5160 /* Reset all language specific information still present in TYPE. */
5162 static void
5163 free_lang_data_in_type (tree type)
5165 gcc_assert (TYPE_P (type));
5167 /* Give the FE a chance to remove its own data first. */
5168 lang_hooks.free_lang_data (type);
5170 TREE_LANG_FLAG_0 (type) = 0;
5171 TREE_LANG_FLAG_1 (type) = 0;
5172 TREE_LANG_FLAG_2 (type) = 0;
5173 TREE_LANG_FLAG_3 (type) = 0;
5174 TREE_LANG_FLAG_4 (type) = 0;
5175 TREE_LANG_FLAG_5 (type) = 0;
5176 TREE_LANG_FLAG_6 (type) = 0;
5178 if (TREE_CODE (type) == FUNCTION_TYPE)
5180 /* Remove the const and volatile qualifiers from arguments. The
5181 C++ front end removes them, but the C front end does not,
5182 leading to false ODR violation errors when merging two
5183 instances of the same function signature compiled by
5184 different front ends. */
5185 tree p;
5187 for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5189 tree arg_type = TREE_VALUE (p);
5191 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5193 int quals = TYPE_QUALS (arg_type)
5194 & ~TYPE_QUAL_CONST
5195 & ~TYPE_QUAL_VOLATILE;
5196 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5197 free_lang_data_in_type (TREE_VALUE (p));
5199 /* C++ FE uses TREE_PURPOSE to store initial values. */
5200 TREE_PURPOSE (p) = NULL;
5202 /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE. */
5203 TYPE_MINVAL (type) = NULL;
5205 if (TREE_CODE (type) == METHOD_TYPE)
5207 tree p;
5209 for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5211 /* C++ FE uses TREE_PURPOSE to store initial values. */
5212 TREE_PURPOSE (p) = NULL;
5214 /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE. */
5215 TYPE_MINVAL (type) = NULL;
5218 /* Remove members that are not actually FIELD_DECLs from the field
5219 list of an aggregate. These occur in C++. */
5220 if (RECORD_OR_UNION_TYPE_P (type))
5222 tree prev, member;
5224 /* Note that TYPE_FIELDS can be shared across distinct
5225 TREE_TYPEs. Therefore, if the first field of TYPE_FIELDS is
5226 to be removed, we cannot set its TREE_CHAIN to NULL.
5227 Otherwise, we would not be able to find all the other fields
5228 in the other instances of this TREE_TYPE.
5230 This was causing an ICE in testsuite/g++.dg/lto/20080915.C. */
5231 prev = NULL_TREE;
5232 member = TYPE_FIELDS (type);
5233 while (member)
5235 if (TREE_CODE (member) == FIELD_DECL
5236 || (TREE_CODE (member) == TYPE_DECL
5237 && !DECL_IGNORED_P (member)
5238 && debug_info_level > DINFO_LEVEL_TERSE
5239 && !is_redundant_typedef (member)))
5241 if (prev)
5242 TREE_CHAIN (prev) = member;
5243 else
5244 TYPE_FIELDS (type) = member;
5245 prev = member;
5248 member = TREE_CHAIN (member);
5251 if (prev)
5252 TREE_CHAIN (prev) = NULL_TREE;
5253 else
5254 TYPE_FIELDS (type) = NULL_TREE;
5256 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
5257 and danagle the pointer from time to time. */
5258 if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL)
5259 TYPE_VFIELD (type) = NULL_TREE;
5261 /* Remove TYPE_METHODS list. While it would be nice to keep it
5262 to enable ODR warnings about different method lists, doing so
5263 seems to impractically increase size of LTO data streamed.
5264 Keep the information if TYPE_METHODS was non-NULL. This is used
5265 by function.c and pretty printers. */
5266 if (TYPE_METHODS (type))
5267 TYPE_METHODS (type) = error_mark_node;
5268 if (TYPE_BINFO (type))
5270 free_lang_data_in_binfo (TYPE_BINFO (type));
5271 /* We need to preserve link to bases and virtual table for all
5272 polymorphic types to make devirtualization machinery working.
5273 Debug output cares only about bases, but output also
5274 virtual table pointers so merging of -fdevirtualize and
5275 -fno-devirtualize units is easier. */
5276 if ((!BINFO_VTABLE (TYPE_BINFO (type))
5277 || !flag_devirtualize)
5278 && ((!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
5279 && !BINFO_VTABLE (TYPE_BINFO (type)))
5280 || debug_info_level != DINFO_LEVEL_NONE))
5281 TYPE_BINFO (type) = NULL;
5284 else
5286 /* For non-aggregate types, clear out the language slot (which
5287 overloads TYPE_BINFO). */
5288 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5290 if (INTEGRAL_TYPE_P (type)
5291 || SCALAR_FLOAT_TYPE_P (type)
5292 || FIXED_POINT_TYPE_P (type))
5294 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5295 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5299 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5300 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5302 if (TYPE_CONTEXT (type)
5303 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5305 tree ctx = TYPE_CONTEXT (type);
5308 ctx = BLOCK_SUPERCONTEXT (ctx);
5310 while (ctx && TREE_CODE (ctx) == BLOCK);
5311 TYPE_CONTEXT (type) = ctx;
5316 /* Return true if DECL may need an assembler name to be set. */
5318 static inline bool
5319 need_assembler_name_p (tree decl)
5321 /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition
5322 Rule merging. This makes type_odr_p to return true on those types during
5323 LTO and by comparing the mangled name, we can say what types are intended
5324 to be equivalent across compilation unit.
5326 We do not store names of type_in_anonymous_namespace_p.
5328 Record, union and enumeration type have linkage that allows use
5329 to check type_in_anonymous_namespace_p. We do not mangle compound types
5330 that always can be compared structurally.
5332 Similarly for builtin types, we compare properties of their main variant.
5333 A special case are integer types where mangling do make differences
5334 between char/signed char/unsigned char etc. Storing name for these makes
5335 e.g. -fno-signed-char/-fsigned-char mismatches to be handled well.
5336 See cp/mangle.c:write_builtin_type for details. */
5338 if (flag_lto_odr_type_mering
5339 && TREE_CODE (decl) == TYPE_DECL
5340 && DECL_NAME (decl)
5341 && decl == TYPE_NAME (TREE_TYPE (decl))
5342 && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl)
5343 && !TYPE_ARTIFICIAL (TREE_TYPE (decl))
5344 && (type_with_linkage_p (TREE_TYPE (decl))
5345 || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE)
5346 && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE))
5347 return !DECL_ASSEMBLER_NAME_SET_P (decl);
5348 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
5349 if (!VAR_OR_FUNCTION_DECL_P (decl))
5350 return false;
5352 /* If DECL already has its assembler name set, it does not need a
5353 new one. */
5354 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5355 || DECL_ASSEMBLER_NAME_SET_P (decl))
5356 return false;
5358 /* Abstract decls do not need an assembler name. */
5359 if (DECL_ABSTRACT_P (decl))
5360 return false;
5362 /* For VAR_DECLs, only static, public and external symbols need an
5363 assembler name. */
5364 if (VAR_P (decl)
5365 && !TREE_STATIC (decl)
5366 && !TREE_PUBLIC (decl)
5367 && !DECL_EXTERNAL (decl))
5368 return false;
5370 if (TREE_CODE (decl) == FUNCTION_DECL)
5372 /* Do not set assembler name on builtins. Allow RTL expansion to
5373 decide whether to expand inline or via a regular call. */
5374 if (DECL_BUILT_IN (decl)
5375 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5376 return false;
5378 /* Functions represented in the callgraph need an assembler name. */
5379 if (cgraph_node::get (decl) != NULL)
5380 return true;
5382 /* Unused and not public functions don't need an assembler name. */
5383 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5384 return false;
5387 return true;
5391 /* Reset all language specific information still present in symbol
5392 DECL. */
5394 static void
5395 free_lang_data_in_decl (tree decl)
5397 gcc_assert (DECL_P (decl));
5399 /* Give the FE a chance to remove its own data first. */
5400 lang_hooks.free_lang_data (decl);
5402 TREE_LANG_FLAG_0 (decl) = 0;
5403 TREE_LANG_FLAG_1 (decl) = 0;
5404 TREE_LANG_FLAG_2 (decl) = 0;
5405 TREE_LANG_FLAG_3 (decl) = 0;
5406 TREE_LANG_FLAG_4 (decl) = 0;
5407 TREE_LANG_FLAG_5 (decl) = 0;
5408 TREE_LANG_FLAG_6 (decl) = 0;
5410 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5411 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5412 if (TREE_CODE (decl) == FIELD_DECL)
5414 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5415 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5416 DECL_QUALIFIER (decl) = NULL_TREE;
5419 if (TREE_CODE (decl) == FUNCTION_DECL)
5421 struct cgraph_node *node;
5422 if (!(node = cgraph_node::get (decl))
5423 || (!node->definition && !node->clones))
5425 if (node)
5426 node->release_body ();
5427 else
5429 release_function_body (decl);
5430 DECL_ARGUMENTS (decl) = NULL;
5431 DECL_RESULT (decl) = NULL;
5432 DECL_INITIAL (decl) = error_mark_node;
5435 if (gimple_has_body_p (decl) || (node && node->thunk.thunk_p))
5437 tree t;
5439 /* If DECL has a gimple body, then the context for its
5440 arguments must be DECL. Otherwise, it doesn't really
5441 matter, as we will not be emitting any code for DECL. In
5442 general, there may be other instances of DECL created by
5443 the front end and since PARM_DECLs are generally shared,
5444 their DECL_CONTEXT changes as the replicas of DECL are
5445 created. The only time where DECL_CONTEXT is important
5446 is for the FUNCTION_DECLs that have a gimple body (since
5447 the PARM_DECL will be used in the function's body). */
5448 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5449 DECL_CONTEXT (t) = decl;
5450 if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5451 DECL_FUNCTION_SPECIFIC_TARGET (decl)
5452 = target_option_default_node;
5453 if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5454 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5455 = optimization_default_node;
5458 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5459 At this point, it is not needed anymore. */
5460 DECL_SAVED_TREE (decl) = NULL_TREE;
5462 /* Clear the abstract origin if it refers to a method. Otherwise
5463 dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5464 origin will not be output correctly. */
5465 if (DECL_ABSTRACT_ORIGIN (decl)
5466 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5467 && RECORD_OR_UNION_TYPE_P
5468 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5469 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5471 /* Sometimes the C++ frontend doesn't manage to transform a temporary
5472 DECL_VINDEX referring to itself into a vtable slot number as it
5473 should. Happens with functions that are copied and then forgotten
5474 about. Just clear it, it won't matter anymore. */
5475 if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5476 DECL_VINDEX (decl) = NULL_TREE;
5478 else if (VAR_P (decl))
5480 if ((DECL_EXTERNAL (decl)
5481 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5482 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5483 DECL_INITIAL (decl) = NULL_TREE;
5485 else if (TREE_CODE (decl) == TYPE_DECL)
5487 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
5488 DECL_VISIBILITY_SPECIFIED (decl) = 0;
5489 DECL_INITIAL (decl) = NULL_TREE;
5491 else if (TREE_CODE (decl) == FIELD_DECL)
5492 DECL_INITIAL (decl) = NULL_TREE;
5493 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5494 && DECL_INITIAL (decl)
5495 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5497 /* Strip builtins from the translation-unit BLOCK. We still have targets
5498 without builtin_decl_explicit support and also builtins are shared
5499 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5500 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5501 while (*nextp)
5503 tree var = *nextp;
5504 if (TREE_CODE (var) == FUNCTION_DECL
5505 && DECL_BUILT_IN (var))
5506 *nextp = TREE_CHAIN (var);
5507 else
5508 nextp = &TREE_CHAIN (var);
5514 /* Data used when collecting DECLs and TYPEs for language data removal. */
5516 struct free_lang_data_d
5518 free_lang_data_d () : decls (100), types (100) {}
5520 /* Worklist to avoid excessive recursion. */
5521 auto_vec<tree> worklist;
5523 /* Set of traversed objects. Used to avoid duplicate visits. */
5524 hash_set<tree> pset;
5526 /* Array of symbols to process with free_lang_data_in_decl. */
5527 auto_vec<tree> decls;
5529 /* Array of types to process with free_lang_data_in_type. */
5530 auto_vec<tree> types;
5534 /* Save all language fields needed to generate proper debug information
5535 for DECL. This saves most fields cleared out by free_lang_data_in_decl. */
5537 static void
5538 save_debug_info_for_decl (tree t)
5540 /*struct saved_debug_info_d *sdi;*/
5542 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5544 /* FIXME. Partial implementation for saving debug info removed. */
5548 /* Save all language fields needed to generate proper debug information
5549 for TYPE. This saves most fields cleared out by free_lang_data_in_type. */
5551 static void
5552 save_debug_info_for_type (tree t)
5554 /*struct saved_debug_info_d *sdi;*/
5556 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5558 /* FIXME. Partial implementation for saving debug info removed. */
5562 /* Add type or decl T to one of the list of tree nodes that need their
5563 language data removed. The lists are held inside FLD. */
5565 static void
5566 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5568 if (DECL_P (t))
5570 fld->decls.safe_push (t);
5571 if (debug_info_level > DINFO_LEVEL_TERSE)
5572 save_debug_info_for_decl (t);
5574 else if (TYPE_P (t))
5576 fld->types.safe_push (t);
5577 if (debug_info_level > DINFO_LEVEL_TERSE)
5578 save_debug_info_for_type (t);
5580 else
5581 gcc_unreachable ();
5584 /* Push tree node T into FLD->WORKLIST. */
5586 static inline void
5587 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5589 if (t && !is_lang_specific (t) && !fld->pset.contains (t))
5590 fld->worklist.safe_push ((t));
5594 /* Operand callback helper for free_lang_data_in_node. *TP is the
5595 subtree operand being considered. */
5597 static tree
5598 find_decls_types_r (tree *tp, int *ws, void *data)
5600 tree t = *tp;
5601 struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5603 if (TREE_CODE (t) == TREE_LIST)
5604 return NULL_TREE;
5606 /* Language specific nodes will be removed, so there is no need
5607 to gather anything under them. */
5608 if (is_lang_specific (t))
5610 *ws = 0;
5611 return NULL_TREE;
5614 if (DECL_P (t))
5616 /* Note that walk_tree does not traverse every possible field in
5617 decls, so we have to do our own traversals here. */
5618 add_tree_to_fld_list (t, fld);
5620 fld_worklist_push (DECL_NAME (t), fld);
5621 fld_worklist_push (DECL_CONTEXT (t), fld);
5622 fld_worklist_push (DECL_SIZE (t), fld);
5623 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5625 /* We are going to remove everything under DECL_INITIAL for
5626 TYPE_DECLs. No point walking them. */
5627 if (TREE_CODE (t) != TYPE_DECL)
5628 fld_worklist_push (DECL_INITIAL (t), fld);
5630 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5631 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5633 if (TREE_CODE (t) == FUNCTION_DECL)
5635 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5636 fld_worklist_push (DECL_RESULT (t), fld);
5638 else if (TREE_CODE (t) == TYPE_DECL)
5640 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5642 else if (TREE_CODE (t) == FIELD_DECL)
5644 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5645 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5646 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5647 fld_worklist_push (DECL_FCONTEXT (t), fld);
5650 if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
5651 && DECL_HAS_VALUE_EXPR_P (t))
5652 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5654 if (TREE_CODE (t) != FIELD_DECL
5655 && TREE_CODE (t) != TYPE_DECL)
5656 fld_worklist_push (TREE_CHAIN (t), fld);
5657 *ws = 0;
5659 else if (TYPE_P (t))
5661 /* Note that walk_tree does not traverse every possible field in
5662 types, so we have to do our own traversals here. */
5663 add_tree_to_fld_list (t, fld);
5665 if (!RECORD_OR_UNION_TYPE_P (t))
5666 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5667 fld_worklist_push (TYPE_SIZE (t), fld);
5668 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5669 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5670 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5671 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5672 fld_worklist_push (TYPE_NAME (t), fld);
5673 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
5674 them and thus do not and want not to reach unused pointer types
5675 this way. */
5676 if (!POINTER_TYPE_P (t))
5677 fld_worklist_push (TYPE_MINVAL (t), fld);
5678 if (!RECORD_OR_UNION_TYPE_P (t))
5679 fld_worklist_push (TYPE_MAXVAL (t), fld);
5680 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5681 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5682 do not and want not to reach unused variants this way. */
5683 if (TYPE_CONTEXT (t))
5685 tree ctx = TYPE_CONTEXT (t);
5686 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5687 So push that instead. */
5688 while (ctx && TREE_CODE (ctx) == BLOCK)
5689 ctx = BLOCK_SUPERCONTEXT (ctx);
5690 fld_worklist_push (ctx, fld);
5692 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not
5693 and want not to reach unused types this way. */
5695 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5697 unsigned i;
5698 tree tem;
5699 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5700 fld_worklist_push (TREE_TYPE (tem), fld);
5701 tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5702 if (tem
5703 /* The Java FE overloads BINFO_VIRTUALS for its own purpose. */
5704 && TREE_CODE (tem) == TREE_LIST)
5707 fld_worklist_push (TREE_VALUE (tem), fld);
5708 tem = TREE_CHAIN (tem);
5710 while (tem);
5712 if (RECORD_OR_UNION_TYPE_P (t))
5714 tree tem;
5715 /* Push all TYPE_FIELDS - there can be interleaving interesting
5716 and non-interesting things. */
5717 tem = TYPE_FIELDS (t);
5718 while (tem)
5720 if (TREE_CODE (tem) == FIELD_DECL
5721 || (TREE_CODE (tem) == TYPE_DECL
5722 && !DECL_IGNORED_P (tem)
5723 && debug_info_level > DINFO_LEVEL_TERSE
5724 && !is_redundant_typedef (tem)))
5725 fld_worklist_push (tem, fld);
5726 tem = TREE_CHAIN (tem);
5730 fld_worklist_push (TYPE_STUB_DECL (t), fld);
5731 *ws = 0;
5733 else if (TREE_CODE (t) == BLOCK)
5735 tree tem;
5736 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5737 fld_worklist_push (tem, fld);
5738 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5739 fld_worklist_push (tem, fld);
5740 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5743 if (TREE_CODE (t) != IDENTIFIER_NODE
5744 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5745 fld_worklist_push (TREE_TYPE (t), fld);
5747 return NULL_TREE;
5751 /* Find decls and types in T. */
5753 static void
5754 find_decls_types (tree t, struct free_lang_data_d *fld)
5756 while (1)
5758 if (!fld->pset.contains (t))
5759 walk_tree (&t, find_decls_types_r, fld, &fld->pset);
5760 if (fld->worklist.is_empty ())
5761 break;
5762 t = fld->worklist.pop ();
5766 /* Translate all the types in LIST with the corresponding runtime
5767 types. */
5769 static tree
5770 get_eh_types_for_runtime (tree list)
5772 tree head, prev;
5774 if (list == NULL_TREE)
5775 return NULL_TREE;
5777 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5778 prev = head;
5779 list = TREE_CHAIN (list);
5780 while (list)
5782 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5783 TREE_CHAIN (prev) = n;
5784 prev = TREE_CHAIN (prev);
5785 list = TREE_CHAIN (list);
5788 return head;
5792 /* Find decls and types referenced in EH region R and store them in
5793 FLD->DECLS and FLD->TYPES. */
5795 static void
5796 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5798 switch (r->type)
5800 case ERT_CLEANUP:
5801 break;
5803 case ERT_TRY:
5805 eh_catch c;
5807 /* The types referenced in each catch must first be changed to the
5808 EH types used at runtime. This removes references to FE types
5809 in the region. */
5810 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5812 c->type_list = get_eh_types_for_runtime (c->type_list);
5813 walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset);
5816 break;
5818 case ERT_ALLOWED_EXCEPTIONS:
5819 r->u.allowed.type_list
5820 = get_eh_types_for_runtime (r->u.allowed.type_list);
5821 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset);
5822 break;
5824 case ERT_MUST_NOT_THROW:
5825 walk_tree (&r->u.must_not_throw.failure_decl,
5826 find_decls_types_r, fld, &fld->pset);
5827 break;
5832 /* Find decls and types referenced in cgraph node N and store them in
5833 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5834 look for *every* kind of DECL and TYPE node reachable from N,
5835 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5836 NAMESPACE_DECLs, etc). */
5838 static void
5839 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5841 basic_block bb;
5842 struct function *fn;
5843 unsigned ix;
5844 tree t;
5846 find_decls_types (n->decl, fld);
5848 if (!gimple_has_body_p (n->decl))
5849 return;
5851 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5853 fn = DECL_STRUCT_FUNCTION (n->decl);
5855 /* Traverse locals. */
5856 FOR_EACH_LOCAL_DECL (fn, ix, t)
5857 find_decls_types (t, fld);
5859 /* Traverse EH regions in FN. */
5861 eh_region r;
5862 FOR_ALL_EH_REGION_FN (r, fn)
5863 find_decls_types_in_eh_region (r, fld);
5866 /* Traverse every statement in FN. */
5867 FOR_EACH_BB_FN (bb, fn)
5869 gphi_iterator psi;
5870 gimple_stmt_iterator si;
5871 unsigned i;
5873 for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5875 gphi *phi = psi.phi ();
5877 for (i = 0; i < gimple_phi_num_args (phi); i++)
5879 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5880 find_decls_types (*arg_p, fld);
5884 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5886 gimple *stmt = gsi_stmt (si);
5888 if (is_gimple_call (stmt))
5889 find_decls_types (gimple_call_fntype (stmt), fld);
5891 for (i = 0; i < gimple_num_ops (stmt); i++)
5893 tree arg = gimple_op (stmt, i);
5894 find_decls_types (arg, fld);
5901 /* Find decls and types referenced in varpool node N and store them in
5902 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5903 look for *every* kind of DECL and TYPE node reachable from N,
5904 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5905 NAMESPACE_DECLs, etc). */
5907 static void
5908 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5910 find_decls_types (v->decl, fld);
5913 /* If T needs an assembler name, have one created for it. */
5915 void
5916 assign_assembler_name_if_needed (tree t)
5918 if (need_assembler_name_p (t))
5920 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5921 diagnostics that use input_location to show locus
5922 information. The problem here is that, at this point,
5923 input_location is generally anchored to the end of the file
5924 (since the parser is long gone), so we don't have a good
5925 position to pin it to.
5927 To alleviate this problem, this uses the location of T's
5928 declaration. Examples of this are
5929 testsuite/g++.dg/template/cond2.C and
5930 testsuite/g++.dg/template/pr35240.C. */
5931 location_t saved_location = input_location;
5932 input_location = DECL_SOURCE_LOCATION (t);
5934 decl_assembler_name (t);
5936 input_location = saved_location;
5941 /* Free language specific information for every operand and expression
5942 in every node of the call graph. This process operates in three stages:
5944 1- Every callgraph node and varpool node is traversed looking for
5945 decls and types embedded in them. This is a more exhaustive
5946 search than that done by find_referenced_vars, because it will
5947 also collect individual fields, decls embedded in types, etc.
5949 2- All the decls found are sent to free_lang_data_in_decl.
5951 3- All the types found are sent to free_lang_data_in_type.
5953 The ordering between decls and types is important because
5954 free_lang_data_in_decl sets assembler names, which includes
5955 mangling. So types cannot be freed up until assembler names have
5956 been set up. */
5958 static void
5959 free_lang_data_in_cgraph (void)
5961 struct cgraph_node *n;
5962 varpool_node *v;
5963 struct free_lang_data_d fld;
5964 tree t;
5965 unsigned i;
5966 alias_pair *p;
5968 /* Find decls and types in the body of every function in the callgraph. */
5969 FOR_EACH_FUNCTION (n)
5970 find_decls_types_in_node (n, &fld);
5972 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5973 find_decls_types (p->decl, &fld);
5975 /* Find decls and types in every varpool symbol. */
5976 FOR_EACH_VARIABLE (v)
5977 find_decls_types_in_var (v, &fld);
5979 /* Set the assembler name on every decl found. We need to do this
5980 now because free_lang_data_in_decl will invalidate data needed
5981 for mangling. This breaks mangling on interdependent decls. */
5982 FOR_EACH_VEC_ELT (fld.decls, i, t)
5983 assign_assembler_name_if_needed (t);
5985 /* Traverse every decl found freeing its language data. */
5986 FOR_EACH_VEC_ELT (fld.decls, i, t)
5987 free_lang_data_in_decl (t);
5989 /* Traverse every type found freeing its language data. */
5990 FOR_EACH_VEC_ELT (fld.types, i, t)
5991 free_lang_data_in_type (t);
5992 if (flag_checking)
5994 FOR_EACH_VEC_ELT (fld.types, i, t)
5995 verify_type (t);
6000 /* Free resources that are used by FE but are not needed once they are done. */
6002 static unsigned
6003 free_lang_data (void)
6005 unsigned i;
6007 /* If we are the LTO frontend we have freed lang-specific data already. */
6008 if (in_lto_p
6009 || (!flag_generate_lto && !flag_generate_offload))
6010 return 0;
6012 /* Allocate and assign alias sets to the standard integer types
6013 while the slots are still in the way the frontends generated them. */
6014 for (i = 0; i < itk_none; ++i)
6015 if (integer_types[i])
6016 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
6018 /* Traverse the IL resetting language specific information for
6019 operands, expressions, etc. */
6020 free_lang_data_in_cgraph ();
6022 /* Create gimple variants for common types. */
6023 fileptr_type_node = ptr_type_node;
6024 const_tm_ptr_type_node = const_ptr_type_node;
6026 /* Reset some langhooks. Do not reset types_compatible_p, it may
6027 still be used indirectly via the get_alias_set langhook. */
6028 lang_hooks.dwarf_name = lhd_dwarf_name;
6029 lang_hooks.decl_printable_name = gimple_decl_printable_name;
6030 lang_hooks.gimplify_expr = lhd_gimplify_expr;
6032 /* We do not want the default decl_assembler_name implementation,
6033 rather if we have fixed everything we want a wrapper around it
6034 asserting that all non-local symbols already got their assembler
6035 name and only produce assembler names for local symbols. Or rather
6036 make sure we never call decl_assembler_name on local symbols and
6037 devise a separate, middle-end private scheme for it. */
6039 /* Reset diagnostic machinery. */
6040 tree_diagnostics_defaults (global_dc);
6042 return 0;
6046 namespace {
6048 const pass_data pass_data_ipa_free_lang_data =
6050 SIMPLE_IPA_PASS, /* type */
6051 "*free_lang_data", /* name */
6052 OPTGROUP_NONE, /* optinfo_flags */
6053 TV_IPA_FREE_LANG_DATA, /* tv_id */
6054 0, /* properties_required */
6055 0, /* properties_provided */
6056 0, /* properties_destroyed */
6057 0, /* todo_flags_start */
6058 0, /* todo_flags_finish */
6061 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
6063 public:
6064 pass_ipa_free_lang_data (gcc::context *ctxt)
6065 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
6068 /* opt_pass methods: */
6069 virtual unsigned int execute (function *) { return free_lang_data (); }
6071 }; // class pass_ipa_free_lang_data
6073 } // anon namespace
6075 simple_ipa_opt_pass *
6076 make_pass_ipa_free_lang_data (gcc::context *ctxt)
6078 return new pass_ipa_free_lang_data (ctxt);
6081 /* The backbone of is_attribute_p(). ATTR_LEN is the string length of
6082 ATTR_NAME. Also used internally by remove_attribute(). */
6083 bool
6084 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
6086 size_t ident_len = IDENTIFIER_LENGTH (ident);
6088 if (ident_len == attr_len)
6090 if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
6091 return true;
6093 else if (ident_len == attr_len + 4)
6095 /* There is the possibility that ATTR is 'text' and IDENT is
6096 '__text__'. */
6097 const char *p = IDENTIFIER_POINTER (ident);
6098 if (p[0] == '_' && p[1] == '_'
6099 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
6100 && strncmp (attr_name, p + 2, attr_len) == 0)
6101 return true;
6104 return false;
6107 /* The backbone of lookup_attribute(). ATTR_LEN is the string length
6108 of ATTR_NAME, and LIST is not NULL_TREE. */
6109 tree
6110 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
6112 while (list)
6114 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6116 if (ident_len == attr_len)
6118 if (!strcmp (attr_name,
6119 IDENTIFIER_POINTER (get_attribute_name (list))))
6120 break;
6122 /* TODO: If we made sure that attributes were stored in the
6123 canonical form without '__...__' (ie, as in 'text' as opposed
6124 to '__text__') then we could avoid the following case. */
6125 else if (ident_len == attr_len + 4)
6127 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6128 if (p[0] == '_' && p[1] == '_'
6129 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
6130 && strncmp (attr_name, p + 2, attr_len) == 0)
6131 break;
6133 list = TREE_CHAIN (list);
6136 return list;
6139 /* Given an attribute name ATTR_NAME and a list of attributes LIST,
6140 return a pointer to the attribute's list first element if the attribute
6141 starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
6142 '__text__'). */
6144 tree
6145 private_lookup_attribute_by_prefix (const char *attr_name, size_t attr_len,
6146 tree list)
6148 while (list)
6150 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
6152 if (attr_len > ident_len)
6154 list = TREE_CHAIN (list);
6155 continue;
6158 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6160 if (strncmp (attr_name, p, attr_len) == 0)
6161 break;
6163 /* TODO: If we made sure that attributes were stored in the
6164 canonical form without '__...__' (ie, as in 'text' as opposed
6165 to '__text__') then we could avoid the following case. */
6166 if (p[0] == '_' && p[1] == '_' &&
6167 strncmp (attr_name, p + 2, attr_len) == 0)
6168 break;
6170 list = TREE_CHAIN (list);
6173 return list;
6177 /* A variant of lookup_attribute() that can be used with an identifier
6178 as the first argument, and where the identifier can be either
6179 'text' or '__text__'.
6181 Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
6182 return a pointer to the attribute's list element if the attribute
6183 is part of the list, or NULL_TREE if not found. If the attribute
6184 appears more than once, this only returns the first occurrence; the
6185 TREE_CHAIN of the return value should be passed back in if further
6186 occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
6187 can be in the form 'text' or '__text__'. */
6188 static tree
6189 lookup_ident_attribute (tree attr_identifier, tree list)
6191 gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
6193 while (list)
6195 gcc_checking_assert (TREE_CODE (get_attribute_name (list))
6196 == IDENTIFIER_NODE);
6198 if (cmp_attrib_identifiers (attr_identifier,
6199 get_attribute_name (list)))
6200 /* Found it. */
6201 break;
6202 list = TREE_CHAIN (list);
6205 return list;
6208 /* Remove any instances of attribute ATTR_NAME in LIST and return the
6209 modified list. */
6211 tree
6212 remove_attribute (const char *attr_name, tree list)
6214 tree *p;
6215 size_t attr_len = strlen (attr_name);
6217 gcc_checking_assert (attr_name[0] != '_');
6219 for (p = &list; *p; )
6221 tree l = *p;
6222 /* TODO: If we were storing attributes in normalized form, here
6223 we could use a simple strcmp(). */
6224 if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
6225 *p = TREE_CHAIN (l);
6226 else
6227 p = &TREE_CHAIN (l);
6230 return list;
6233 /* Return an attribute list that is the union of a1 and a2. */
6235 tree
6236 merge_attributes (tree a1, tree a2)
6238 tree attributes;
6240 /* Either one unset? Take the set one. */
6242 if ((attributes = a1) == 0)
6243 attributes = a2;
6245 /* One that completely contains the other? Take it. */
6247 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
6249 if (attribute_list_contained (a2, a1))
6250 attributes = a2;
6251 else
6253 /* Pick the longest list, and hang on the other list. */
6255 if (list_length (a1) < list_length (a2))
6256 attributes = a2, a2 = a1;
6258 for (; a2 != 0; a2 = TREE_CHAIN (a2))
6260 tree a;
6261 for (a = lookup_ident_attribute (get_attribute_name (a2),
6262 attributes);
6263 a != NULL_TREE && !attribute_value_equal (a, a2);
6264 a = lookup_ident_attribute (get_attribute_name (a2),
6265 TREE_CHAIN (a)))
6267 if (a == NULL_TREE)
6269 a1 = copy_node (a2);
6270 TREE_CHAIN (a1) = attributes;
6271 attributes = a1;
6276 return attributes;
6279 /* Given types T1 and T2, merge their attributes and return
6280 the result. */
6282 tree
6283 merge_type_attributes (tree t1, tree t2)
6285 return merge_attributes (TYPE_ATTRIBUTES (t1),
6286 TYPE_ATTRIBUTES (t2));
6289 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
6290 the result. */
6292 tree
6293 merge_decl_attributes (tree olddecl, tree newdecl)
6295 return merge_attributes (DECL_ATTRIBUTES (olddecl),
6296 DECL_ATTRIBUTES (newdecl));
6299 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
6301 /* Specialization of merge_decl_attributes for various Windows targets.
6303 This handles the following situation:
6305 __declspec (dllimport) int foo;
6306 int foo;
6308 The second instance of `foo' nullifies the dllimport. */
6310 tree
6311 merge_dllimport_decl_attributes (tree old, tree new_tree)
6313 tree a;
6314 int delete_dllimport_p = 1;
6316 /* What we need to do here is remove from `old' dllimport if it doesn't
6317 appear in `new'. dllimport behaves like extern: if a declaration is
6318 marked dllimport and a definition appears later, then the object
6319 is not dllimport'd. We also remove a `new' dllimport if the old list
6320 contains dllexport: dllexport always overrides dllimport, regardless
6321 of the order of declaration. */
6322 if (!VAR_OR_FUNCTION_DECL_P (new_tree))
6323 delete_dllimport_p = 0;
6324 else if (DECL_DLLIMPORT_P (new_tree)
6325 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
6327 DECL_DLLIMPORT_P (new_tree) = 0;
6328 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
6329 "dllimport ignored", new_tree);
6331 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
6333 /* Warn about overriding a symbol that has already been used, e.g.:
6334 extern int __attribute__ ((dllimport)) foo;
6335 int* bar () {return &foo;}
6336 int foo;
6338 if (TREE_USED (old))
6340 warning (0, "%q+D redeclared without dllimport attribute "
6341 "after being referenced with dll linkage", new_tree);
6342 /* If we have used a variable's address with dllimport linkage,
6343 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
6344 decl may already have had TREE_CONSTANT computed.
6345 We still remove the attribute so that assembler code refers
6346 to '&foo rather than '_imp__foo'. */
6347 if (VAR_P (old) && TREE_ADDRESSABLE (old))
6348 DECL_DLLIMPORT_P (new_tree) = 1;
6351 /* Let an inline definition silently override the external reference,
6352 but otherwise warn about attribute inconsistency. */
6353 else if (VAR_P (new_tree) || !DECL_DECLARED_INLINE_P (new_tree))
6354 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
6355 "previous dllimport ignored", new_tree);
6357 else
6358 delete_dllimport_p = 0;
6360 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
6362 if (delete_dllimport_p)
6363 a = remove_attribute ("dllimport", a);
6365 return a;
6368 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
6369 struct attribute_spec.handler. */
6371 tree
6372 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
6373 bool *no_add_attrs)
6375 tree node = *pnode;
6376 bool is_dllimport;
6378 /* These attributes may apply to structure and union types being created,
6379 but otherwise should pass to the declaration involved. */
6380 if (!DECL_P (node))
6382 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
6383 | (int) ATTR_FLAG_ARRAY_NEXT))
6385 *no_add_attrs = true;
6386 return tree_cons (name, args, NULL_TREE);
6388 if (TREE_CODE (node) == RECORD_TYPE
6389 || TREE_CODE (node) == UNION_TYPE)
6391 node = TYPE_NAME (node);
6392 if (!node)
6393 return NULL_TREE;
6395 else
6397 warning (OPT_Wattributes, "%qE attribute ignored",
6398 name);
6399 *no_add_attrs = true;
6400 return NULL_TREE;
6404 if (!VAR_OR_FUNCTION_DECL_P (node) && TREE_CODE (node) != TYPE_DECL)
6406 *no_add_attrs = true;
6407 warning (OPT_Wattributes, "%qE attribute ignored",
6408 name);
6409 return NULL_TREE;
6412 if (TREE_CODE (node) == TYPE_DECL
6413 && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
6414 && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
6416 *no_add_attrs = true;
6417 warning (OPT_Wattributes, "%qE attribute ignored",
6418 name);
6419 return NULL_TREE;
6422 is_dllimport = is_attribute_p ("dllimport", name);
6424 /* Report error on dllimport ambiguities seen now before they cause
6425 any damage. */
6426 if (is_dllimport)
6428 /* Honor any target-specific overrides. */
6429 if (!targetm.valid_dllimport_attribute_p (node))
6430 *no_add_attrs = true;
6432 else if (TREE_CODE (node) == FUNCTION_DECL
6433 && DECL_DECLARED_INLINE_P (node))
6435 warning (OPT_Wattributes, "inline function %q+D declared as "
6436 " dllimport: attribute ignored", node);
6437 *no_add_attrs = true;
6439 /* Like MS, treat definition of dllimported variables and
6440 non-inlined functions on declaration as syntax errors. */
6441 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6443 error ("function %q+D definition is marked dllimport", node);
6444 *no_add_attrs = true;
6447 else if (VAR_P (node))
6449 if (DECL_INITIAL (node))
6451 error ("variable %q+D definition is marked dllimport",
6452 node);
6453 *no_add_attrs = true;
6456 /* `extern' needn't be specified with dllimport.
6457 Specify `extern' now and hope for the best. Sigh. */
6458 DECL_EXTERNAL (node) = 1;
6459 /* Also, implicitly give dllimport'd variables declared within
6460 a function global scope, unless declared static. */
6461 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6462 TREE_PUBLIC (node) = 1;
6465 if (*no_add_attrs == false)
6466 DECL_DLLIMPORT_P (node) = 1;
6468 else if (TREE_CODE (node) == FUNCTION_DECL
6469 && DECL_DECLARED_INLINE_P (node)
6470 && flag_keep_inline_dllexport)
6471 /* An exported function, even if inline, must be emitted. */
6472 DECL_EXTERNAL (node) = 0;
6474 /* Report error if symbol is not accessible at global scope. */
6475 if (!TREE_PUBLIC (node) && VAR_OR_FUNCTION_DECL_P (node))
6477 error ("external linkage required for symbol %q+D because of "
6478 "%qE attribute", node, name);
6479 *no_add_attrs = true;
6482 /* A dllexport'd entity must have default visibility so that other
6483 program units (shared libraries or the main executable) can see
6484 it. A dllimport'd entity must have default visibility so that
6485 the linker knows that undefined references within this program
6486 unit can be resolved by the dynamic linker. */
6487 if (!*no_add_attrs)
6489 if (DECL_VISIBILITY_SPECIFIED (node)
6490 && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6491 error ("%qE implies default visibility, but %qD has already "
6492 "been declared with a different visibility",
6493 name, node);
6494 DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6495 DECL_VISIBILITY_SPECIFIED (node) = 1;
6498 return NULL_TREE;
6501 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
6503 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6504 of the various TYPE_QUAL values. */
6506 static void
6507 set_type_quals (tree type, int type_quals)
6509 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6510 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6511 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6512 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6513 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6516 /* Returns true iff CAND and BASE have equivalent language-specific
6517 qualifiers. */
6519 bool
6520 check_lang_type (const_tree cand, const_tree base)
6522 if (lang_hooks.types.type_hash_eq == NULL)
6523 return true;
6524 /* type_hash_eq currently only applies to these types. */
6525 if (TREE_CODE (cand) != FUNCTION_TYPE
6526 && TREE_CODE (cand) != METHOD_TYPE)
6527 return true;
6528 return lang_hooks.types.type_hash_eq (cand, base);
6531 /* Returns true iff unqualified CAND and BASE are equivalent. */
6533 bool
6534 check_base_type (const_tree cand, const_tree base)
6536 return (TYPE_NAME (cand) == TYPE_NAME (base)
6537 /* Apparently this is needed for Objective-C. */
6538 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6539 /* Check alignment. */
6540 && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6541 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6542 TYPE_ATTRIBUTES (base)));
6545 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */
6547 bool
6548 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6550 return (TYPE_QUALS (cand) == type_quals
6551 && check_base_type (cand, base)
6552 && check_lang_type (cand, base));
6555 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
6557 static bool
6558 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6560 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6561 && TYPE_NAME (cand) == TYPE_NAME (base)
6562 /* Apparently this is needed for Objective-C. */
6563 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6564 /* Check alignment. */
6565 && TYPE_ALIGN (cand) == align
6566 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6567 TYPE_ATTRIBUTES (base))
6568 && check_lang_type (cand, base));
6571 /* This function checks to see if TYPE matches the size one of the built-in
6572 atomic types, and returns that core atomic type. */
6574 static tree
6575 find_atomic_core_type (tree type)
6577 tree base_atomic_type;
6579 /* Only handle complete types. */
6580 if (TYPE_SIZE (type) == NULL_TREE)
6581 return NULL_TREE;
6583 HOST_WIDE_INT type_size = tree_to_uhwi (TYPE_SIZE (type));
6584 switch (type_size)
6586 case 8:
6587 base_atomic_type = atomicQI_type_node;
6588 break;
6590 case 16:
6591 base_atomic_type = atomicHI_type_node;
6592 break;
6594 case 32:
6595 base_atomic_type = atomicSI_type_node;
6596 break;
6598 case 64:
6599 base_atomic_type = atomicDI_type_node;
6600 break;
6602 case 128:
6603 base_atomic_type = atomicTI_type_node;
6604 break;
6606 default:
6607 base_atomic_type = NULL_TREE;
6610 return base_atomic_type;
6613 /* Return a version of the TYPE, qualified as indicated by the
6614 TYPE_QUALS, if one exists. If no qualified version exists yet,
6615 return NULL_TREE. */
6617 tree
6618 get_qualified_type (tree type, int type_quals)
6620 tree t;
6622 if (TYPE_QUALS (type) == type_quals)
6623 return type;
6625 /* Search the chain of variants to see if there is already one there just
6626 like the one we need to have. If so, use that existing one. We must
6627 preserve the TYPE_NAME, since there is code that depends on this. */
6628 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6629 if (check_qualified_type (t, type, type_quals))
6630 return t;
6632 return NULL_TREE;
6635 /* Like get_qualified_type, but creates the type if it does not
6636 exist. This function never returns NULL_TREE. */
6638 tree
6639 build_qualified_type (tree type, int type_quals MEM_STAT_DECL)
6641 tree t;
6643 /* See if we already have the appropriate qualified variant. */
6644 t = get_qualified_type (type, type_quals);
6646 /* If not, build it. */
6647 if (!t)
6649 t = build_variant_type_copy (type PASS_MEM_STAT);
6650 set_type_quals (t, type_quals);
6652 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6654 /* See if this object can map to a basic atomic type. */
6655 tree atomic_type = find_atomic_core_type (type);
6656 if (atomic_type)
6658 /* Ensure the alignment of this type is compatible with
6659 the required alignment of the atomic type. */
6660 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6661 SET_TYPE_ALIGN (t, TYPE_ALIGN (atomic_type));
6665 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6666 /* Propagate structural equality. */
6667 SET_TYPE_STRUCTURAL_EQUALITY (t);
6668 else if (TYPE_CANONICAL (type) != type)
6669 /* Build the underlying canonical type, since it is different
6670 from TYPE. */
6672 tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
6673 TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
6675 else
6676 /* T is its own canonical type. */
6677 TYPE_CANONICAL (t) = t;
6681 return t;
6684 /* Create a variant of type T with alignment ALIGN. */
6686 tree
6687 build_aligned_type (tree type, unsigned int align)
6689 tree t;
6691 if (TYPE_PACKED (type)
6692 || TYPE_ALIGN (type) == align)
6693 return type;
6695 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6696 if (check_aligned_type (t, type, align))
6697 return t;
6699 t = build_variant_type_copy (type);
6700 SET_TYPE_ALIGN (t, align);
6701 TYPE_USER_ALIGN (t) = 1;
6703 return t;
6706 /* Create a new distinct copy of TYPE. The new type is made its own
6707 MAIN_VARIANT. If TYPE requires structural equality checks, the
6708 resulting type requires structural equality checks; otherwise, its
6709 TYPE_CANONICAL points to itself. */
6711 tree
6712 build_distinct_type_copy (tree type MEM_STAT_DECL)
6714 tree t = copy_node_stat (type PASS_MEM_STAT);
6716 TYPE_POINTER_TO (t) = 0;
6717 TYPE_REFERENCE_TO (t) = 0;
6719 /* Set the canonical type either to a new equivalence class, or
6720 propagate the need for structural equality checks. */
6721 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6722 SET_TYPE_STRUCTURAL_EQUALITY (t);
6723 else
6724 TYPE_CANONICAL (t) = t;
6726 /* Make it its own variant. */
6727 TYPE_MAIN_VARIANT (t) = t;
6728 TYPE_NEXT_VARIANT (t) = 0;
6730 /* We do not record methods in type copies nor variants
6731 so we do not need to keep them up to date when new method
6732 is inserted. */
6733 if (RECORD_OR_UNION_TYPE_P (t))
6734 TYPE_METHODS (t) = NULL_TREE;
6736 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6737 whose TREE_TYPE is not t. This can also happen in the Ada
6738 frontend when using subtypes. */
6740 return t;
6743 /* Create a new variant of TYPE, equivalent but distinct. This is so
6744 the caller can modify it. TYPE_CANONICAL for the return type will
6745 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6746 are considered equal by the language itself (or that both types
6747 require structural equality checks). */
6749 tree
6750 build_variant_type_copy (tree type MEM_STAT_DECL)
6752 tree t, m = TYPE_MAIN_VARIANT (type);
6754 t = build_distinct_type_copy (type PASS_MEM_STAT);
6756 /* Since we're building a variant, assume that it is a non-semantic
6757 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6758 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6759 /* Type variants have no alias set defined. */
6760 TYPE_ALIAS_SET (t) = -1;
6762 /* Add the new type to the chain of variants of TYPE. */
6763 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6764 TYPE_NEXT_VARIANT (m) = t;
6765 TYPE_MAIN_VARIANT (t) = m;
6767 return t;
6770 /* Return true if the from tree in both tree maps are equal. */
6773 tree_map_base_eq (const void *va, const void *vb)
6775 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6776 *const b = (const struct tree_map_base *) vb;
6777 return (a->from == b->from);
6780 /* Hash a from tree in a tree_base_map. */
6782 unsigned int
6783 tree_map_base_hash (const void *item)
6785 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6788 /* Return true if this tree map structure is marked for garbage collection
6789 purposes. We simply return true if the from tree is marked, so that this
6790 structure goes away when the from tree goes away. */
6793 tree_map_base_marked_p (const void *p)
6795 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6798 /* Hash a from tree in a tree_map. */
6800 unsigned int
6801 tree_map_hash (const void *item)
6803 return (((const struct tree_map *) item)->hash);
6806 /* Hash a from tree in a tree_decl_map. */
6808 unsigned int
6809 tree_decl_map_hash (const void *item)
6811 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6814 /* Return the initialization priority for DECL. */
6816 priority_type
6817 decl_init_priority_lookup (tree decl)
6819 symtab_node *snode = symtab_node::get (decl);
6821 if (!snode)
6822 return DEFAULT_INIT_PRIORITY;
6823 return
6824 snode->get_init_priority ();
6827 /* Return the finalization priority for DECL. */
6829 priority_type
6830 decl_fini_priority_lookup (tree decl)
6832 cgraph_node *node = cgraph_node::get (decl);
6834 if (!node)
6835 return DEFAULT_INIT_PRIORITY;
6836 return
6837 node->get_fini_priority ();
6840 /* Set the initialization priority for DECL to PRIORITY. */
6842 void
6843 decl_init_priority_insert (tree decl, priority_type priority)
6845 struct symtab_node *snode;
6847 if (priority == DEFAULT_INIT_PRIORITY)
6849 snode = symtab_node::get (decl);
6850 if (!snode)
6851 return;
6853 else if (VAR_P (decl))
6854 snode = varpool_node::get_create (decl);
6855 else
6856 snode = cgraph_node::get_create (decl);
6857 snode->set_init_priority (priority);
6860 /* Set the finalization priority for DECL to PRIORITY. */
6862 void
6863 decl_fini_priority_insert (tree decl, priority_type priority)
6865 struct cgraph_node *node;
6867 if (priority == DEFAULT_INIT_PRIORITY)
6869 node = cgraph_node::get (decl);
6870 if (!node)
6871 return;
6873 else
6874 node = cgraph_node::get_create (decl);
6875 node->set_fini_priority (priority);
6878 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6880 static void
6881 print_debug_expr_statistics (void)
6883 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6884 (long) debug_expr_for_decl->size (),
6885 (long) debug_expr_for_decl->elements (),
6886 debug_expr_for_decl->collisions ());
6889 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6891 static void
6892 print_value_expr_statistics (void)
6894 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6895 (long) value_expr_for_decl->size (),
6896 (long) value_expr_for_decl->elements (),
6897 value_expr_for_decl->collisions ());
6900 /* Lookup a debug expression for FROM, and return it if we find one. */
6902 tree
6903 decl_debug_expr_lookup (tree from)
6905 struct tree_decl_map *h, in;
6906 in.base.from = from;
6908 h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6909 if (h)
6910 return h->to;
6911 return NULL_TREE;
6914 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6916 void
6917 decl_debug_expr_insert (tree from, tree to)
6919 struct tree_decl_map *h;
6921 h = ggc_alloc<tree_decl_map> ();
6922 h->base.from = from;
6923 h->to = to;
6924 *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6927 /* Lookup a value expression for FROM, and return it if we find one. */
6929 tree
6930 decl_value_expr_lookup (tree from)
6932 struct tree_decl_map *h, in;
6933 in.base.from = from;
6935 h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6936 if (h)
6937 return h->to;
6938 return NULL_TREE;
6941 /* Insert a mapping FROM->TO in the value expression hashtable. */
6943 void
6944 decl_value_expr_insert (tree from, tree to)
6946 struct tree_decl_map *h;
6948 h = ggc_alloc<tree_decl_map> ();
6949 h->base.from = from;
6950 h->to = to;
6951 *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6954 /* Lookup a vector of debug arguments for FROM, and return it if we
6955 find one. */
6957 vec<tree, va_gc> **
6958 decl_debug_args_lookup (tree from)
6960 struct tree_vec_map *h, in;
6962 if (!DECL_HAS_DEBUG_ARGS_P (from))
6963 return NULL;
6964 gcc_checking_assert (debug_args_for_decl != NULL);
6965 in.base.from = from;
6966 h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6967 if (h)
6968 return &h->to;
6969 return NULL;
6972 /* Insert a mapping FROM->empty vector of debug arguments in the value
6973 expression hashtable. */
6975 vec<tree, va_gc> **
6976 decl_debug_args_insert (tree from)
6978 struct tree_vec_map *h;
6979 tree_vec_map **loc;
6981 if (DECL_HAS_DEBUG_ARGS_P (from))
6982 return decl_debug_args_lookup (from);
6983 if (debug_args_for_decl == NULL)
6984 debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6985 h = ggc_alloc<tree_vec_map> ();
6986 h->base.from = from;
6987 h->to = NULL;
6988 loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6989 *loc = h;
6990 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6991 return &h->to;
6994 /* Hashing of types so that we don't make duplicates.
6995 The entry point is `type_hash_canon'. */
6997 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
6998 with types in the TREE_VALUE slots), by adding the hash codes
6999 of the individual types. */
7001 static void
7002 type_hash_list (const_tree list, inchash::hash &hstate)
7004 const_tree tail;
7006 for (tail = list; tail; tail = TREE_CHAIN (tail))
7007 if (TREE_VALUE (tail) != error_mark_node)
7008 hstate.add_object (TYPE_HASH (TREE_VALUE (tail)));
7011 /* These are the Hashtable callback functions. */
7013 /* Returns true iff the types are equivalent. */
7015 bool
7016 type_cache_hasher::equal (type_hash *a, type_hash *b)
7018 /* First test the things that are the same for all types. */
7019 if (a->hash != b->hash
7020 || TREE_CODE (a->type) != TREE_CODE (b->type)
7021 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
7022 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
7023 TYPE_ATTRIBUTES (b->type))
7024 || (TREE_CODE (a->type) != COMPLEX_TYPE
7025 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
7026 return 0;
7028 /* Be careful about comparing arrays before and after the element type
7029 has been completed; don't compare TYPE_ALIGN unless both types are
7030 complete. */
7031 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
7032 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
7033 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
7034 return 0;
7036 switch (TREE_CODE (a->type))
7038 case VOID_TYPE:
7039 case COMPLEX_TYPE:
7040 case POINTER_TYPE:
7041 case REFERENCE_TYPE:
7042 case NULLPTR_TYPE:
7043 return 1;
7045 case VECTOR_TYPE:
7046 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
7048 case ENUMERAL_TYPE:
7049 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
7050 && !(TYPE_VALUES (a->type)
7051 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
7052 && TYPE_VALUES (b->type)
7053 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
7054 && type_list_equal (TYPE_VALUES (a->type),
7055 TYPE_VALUES (b->type))))
7056 return 0;
7058 /* fall through */
7060 case INTEGER_TYPE:
7061 case REAL_TYPE:
7062 case BOOLEAN_TYPE:
7063 if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
7064 return false;
7065 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
7066 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
7067 TYPE_MAX_VALUE (b->type)))
7068 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
7069 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
7070 TYPE_MIN_VALUE (b->type))));
7072 case FIXED_POINT_TYPE:
7073 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
7075 case OFFSET_TYPE:
7076 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
7078 case METHOD_TYPE:
7079 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
7080 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7081 || (TYPE_ARG_TYPES (a->type)
7082 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7083 && TYPE_ARG_TYPES (b->type)
7084 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7085 && type_list_equal (TYPE_ARG_TYPES (a->type),
7086 TYPE_ARG_TYPES (b->type)))))
7087 break;
7088 return 0;
7089 case ARRAY_TYPE:
7090 /* Don't compare TYPE_TYPELESS_STORAGE flag on aggregates,
7091 where the flag should be inherited from the element type
7092 and can change after ARRAY_TYPEs are created; on non-aggregates
7093 compare it and hash it, scalars will never have that flag set
7094 and we need to differentiate between arrays created by different
7095 front-ends or middle-end created arrays. */
7096 return (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type)
7097 && (AGGREGATE_TYPE_P (TREE_TYPE (a->type))
7098 || (TYPE_TYPELESS_STORAGE (a->type)
7099 == TYPE_TYPELESS_STORAGE (b->type))));
7101 case RECORD_TYPE:
7102 case UNION_TYPE:
7103 case QUAL_UNION_TYPE:
7104 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
7105 || (TYPE_FIELDS (a->type)
7106 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
7107 && TYPE_FIELDS (b->type)
7108 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
7109 && type_list_equal (TYPE_FIELDS (a->type),
7110 TYPE_FIELDS (b->type))));
7112 case FUNCTION_TYPE:
7113 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
7114 || (TYPE_ARG_TYPES (a->type)
7115 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
7116 && TYPE_ARG_TYPES (b->type)
7117 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
7118 && type_list_equal (TYPE_ARG_TYPES (a->type),
7119 TYPE_ARG_TYPES (b->type))))
7120 break;
7121 return 0;
7123 default:
7124 return 0;
7127 if (lang_hooks.types.type_hash_eq != NULL)
7128 return lang_hooks.types.type_hash_eq (a->type, b->type);
7130 return 1;
7133 /* Given TYPE, and HASHCODE its hash code, return the canonical
7134 object for an identical type if one already exists.
7135 Otherwise, return TYPE, and record it as the canonical object.
7137 To use this function, first create a type of the sort you want.
7138 Then compute its hash code from the fields of the type that
7139 make it different from other similar types.
7140 Then call this function and use the value. */
7142 tree
7143 type_hash_canon (unsigned int hashcode, tree type)
7145 type_hash in;
7146 type_hash **loc;
7148 /* The hash table only contains main variants, so ensure that's what we're
7149 being passed. */
7150 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
7152 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
7153 must call that routine before comparing TYPE_ALIGNs. */
7154 layout_type (type);
7156 in.hash = hashcode;
7157 in.type = type;
7159 loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
7160 if (*loc)
7162 tree t1 = ((type_hash *) *loc)->type;
7163 gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
7164 free_node (type);
7165 return t1;
7167 else
7169 struct type_hash *h;
7171 h = ggc_alloc<type_hash> ();
7172 h->hash = hashcode;
7173 h->type = type;
7174 *loc = h;
7176 return type;
7180 static void
7181 print_type_hash_statistics (void)
7183 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
7184 (long) type_hash_table->size (),
7185 (long) type_hash_table->elements (),
7186 type_hash_table->collisions ());
7189 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
7190 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
7191 by adding the hash codes of the individual attributes. */
7193 static void
7194 attribute_hash_list (const_tree list, inchash::hash &hstate)
7196 const_tree tail;
7198 for (tail = list; tail; tail = TREE_CHAIN (tail))
7199 /* ??? Do we want to add in TREE_VALUE too? */
7200 hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (tail)));
7203 /* Given two lists of attributes, return true if list l2 is
7204 equivalent to l1. */
7207 attribute_list_equal (const_tree l1, const_tree l2)
7209 if (l1 == l2)
7210 return 1;
7212 return attribute_list_contained (l1, l2)
7213 && attribute_list_contained (l2, l1);
7216 /* Given two lists of attributes, return true if list L2 is
7217 completely contained within L1. */
7218 /* ??? This would be faster if attribute names were stored in a canonicalized
7219 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
7220 must be used to show these elements are equivalent (which they are). */
7221 /* ??? It's not clear that attributes with arguments will always be handled
7222 correctly. */
7225 attribute_list_contained (const_tree l1, const_tree l2)
7227 const_tree t1, t2;
7229 /* First check the obvious, maybe the lists are identical. */
7230 if (l1 == l2)
7231 return 1;
7233 /* Maybe the lists are similar. */
7234 for (t1 = l1, t2 = l2;
7235 t1 != 0 && t2 != 0
7236 && get_attribute_name (t1) == get_attribute_name (t2)
7237 && TREE_VALUE (t1) == TREE_VALUE (t2);
7238 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7241 /* Maybe the lists are equal. */
7242 if (t1 == 0 && t2 == 0)
7243 return 1;
7245 for (; t2 != 0; t2 = TREE_CHAIN (t2))
7247 const_tree attr;
7248 /* This CONST_CAST is okay because lookup_attribute does not
7249 modify its argument and the return value is assigned to a
7250 const_tree. */
7251 for (attr = lookup_ident_attribute (get_attribute_name (t2),
7252 CONST_CAST_TREE (l1));
7253 attr != NULL_TREE && !attribute_value_equal (t2, attr);
7254 attr = lookup_ident_attribute (get_attribute_name (t2),
7255 TREE_CHAIN (attr)))
7258 if (attr == NULL_TREE)
7259 return 0;
7262 return 1;
7265 /* Given two lists of types
7266 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7267 return 1 if the lists contain the same types in the same order.
7268 Also, the TREE_PURPOSEs must match. */
7271 type_list_equal (const_tree l1, const_tree l2)
7273 const_tree t1, t2;
7275 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7276 if (TREE_VALUE (t1) != TREE_VALUE (t2)
7277 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7278 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7279 && (TREE_TYPE (TREE_PURPOSE (t1))
7280 == TREE_TYPE (TREE_PURPOSE (t2))))))
7281 return 0;
7283 return t1 == t2;
7286 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7287 given by TYPE. If the argument list accepts variable arguments,
7288 then this function counts only the ordinary arguments. */
7291 type_num_arguments (const_tree type)
7293 int i = 0;
7294 tree t;
7296 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7297 /* If the function does not take a variable number of arguments,
7298 the last element in the list will have type `void'. */
7299 if (VOID_TYPE_P (TREE_VALUE (t)))
7300 break;
7301 else
7302 ++i;
7304 return i;
7307 /* Nonzero if integer constants T1 and T2
7308 represent the same constant value. */
7311 tree_int_cst_equal (const_tree t1, const_tree t2)
7313 if (t1 == t2)
7314 return 1;
7316 if (t1 == 0 || t2 == 0)
7317 return 0;
7319 if (TREE_CODE (t1) == INTEGER_CST
7320 && TREE_CODE (t2) == INTEGER_CST
7321 && wi::to_widest (t1) == wi::to_widest (t2))
7322 return 1;
7324 return 0;
7327 /* Return true if T is an INTEGER_CST whose numerical value (extended
7328 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */
7330 bool
7331 tree_fits_shwi_p (const_tree t)
7333 return (t != NULL_TREE
7334 && TREE_CODE (t) == INTEGER_CST
7335 && wi::fits_shwi_p (wi::to_widest (t)));
7338 /* Return true if T is an INTEGER_CST whose numerical value (extended
7339 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */
7341 bool
7342 tree_fits_uhwi_p (const_tree t)
7344 return (t != NULL_TREE
7345 && TREE_CODE (t) == INTEGER_CST
7346 && wi::fits_uhwi_p (wi::to_widest (t)));
7349 /* T is an INTEGER_CST whose numerical value (extended according to
7350 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that
7351 HOST_WIDE_INT. */
7353 HOST_WIDE_INT
7354 tree_to_shwi (const_tree t)
7356 gcc_assert (tree_fits_shwi_p (t));
7357 return TREE_INT_CST_LOW (t);
7360 /* T is an INTEGER_CST whose numerical value (extended according to
7361 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that
7362 HOST_WIDE_INT. */
7364 unsigned HOST_WIDE_INT
7365 tree_to_uhwi (const_tree t)
7367 gcc_assert (tree_fits_uhwi_p (t));
7368 return TREE_INT_CST_LOW (t);
7371 /* Return the most significant (sign) bit of T. */
7374 tree_int_cst_sign_bit (const_tree t)
7376 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7378 return wi::extract_uhwi (t, bitno, 1);
7381 /* Return an indication of the sign of the integer constant T.
7382 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7383 Note that -1 will never be returned if T's type is unsigned. */
7386 tree_int_cst_sgn (const_tree t)
7388 if (wi::eq_p (t, 0))
7389 return 0;
7390 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7391 return 1;
7392 else if (wi::neg_p (t))
7393 return -1;
7394 else
7395 return 1;
7398 /* Return the minimum number of bits needed to represent VALUE in a
7399 signed or unsigned type, UNSIGNEDP says which. */
7401 unsigned int
7402 tree_int_cst_min_precision (tree value, signop sgn)
7404 /* If the value is negative, compute its negative minus 1. The latter
7405 adjustment is because the absolute value of the largest negative value
7406 is one larger than the largest positive value. This is equivalent to
7407 a bit-wise negation, so use that operation instead. */
7409 if (tree_int_cst_sgn (value) < 0)
7410 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7412 /* Return the number of bits needed, taking into account the fact
7413 that we need one more bit for a signed than unsigned type.
7414 If value is 0 or -1, the minimum precision is 1 no matter
7415 whether unsignedp is true or false. */
7417 if (integer_zerop (value))
7418 return 1;
7419 else
7420 return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7423 /* Return truthvalue of whether T1 is the same tree structure as T2.
7424 Return 1 if they are the same.
7425 Return 0 if they are understandably different.
7426 Return -1 if either contains tree structure not understood by
7427 this function. */
7430 simple_cst_equal (const_tree t1, const_tree t2)
7432 enum tree_code code1, code2;
7433 int cmp;
7434 int i;
7436 if (t1 == t2)
7437 return 1;
7438 if (t1 == 0 || t2 == 0)
7439 return 0;
7441 code1 = TREE_CODE (t1);
7442 code2 = TREE_CODE (t2);
7444 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7446 if (CONVERT_EXPR_CODE_P (code2)
7447 || code2 == NON_LVALUE_EXPR)
7448 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7449 else
7450 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7453 else if (CONVERT_EXPR_CODE_P (code2)
7454 || code2 == NON_LVALUE_EXPR)
7455 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7457 if (code1 != code2)
7458 return 0;
7460 switch (code1)
7462 case INTEGER_CST:
7463 return wi::to_widest (t1) == wi::to_widest (t2);
7465 case REAL_CST:
7466 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
7468 case FIXED_CST:
7469 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7471 case STRING_CST:
7472 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7473 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7474 TREE_STRING_LENGTH (t1)));
7476 case CONSTRUCTOR:
7478 unsigned HOST_WIDE_INT idx;
7479 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7480 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7482 if (vec_safe_length (v1) != vec_safe_length (v2))
7483 return false;
7485 for (idx = 0; idx < vec_safe_length (v1); ++idx)
7486 /* ??? Should we handle also fields here? */
7487 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7488 return false;
7489 return true;
7492 case SAVE_EXPR:
7493 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7495 case CALL_EXPR:
7496 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7497 if (cmp <= 0)
7498 return cmp;
7499 if (call_expr_nargs (t1) != call_expr_nargs (t2))
7500 return 0;
7502 const_tree arg1, arg2;
7503 const_call_expr_arg_iterator iter1, iter2;
7504 for (arg1 = first_const_call_expr_arg (t1, &iter1),
7505 arg2 = first_const_call_expr_arg (t2, &iter2);
7506 arg1 && arg2;
7507 arg1 = next_const_call_expr_arg (&iter1),
7508 arg2 = next_const_call_expr_arg (&iter2))
7510 cmp = simple_cst_equal (arg1, arg2);
7511 if (cmp <= 0)
7512 return cmp;
7514 return arg1 == arg2;
7517 case TARGET_EXPR:
7518 /* Special case: if either target is an unallocated VAR_DECL,
7519 it means that it's going to be unified with whatever the
7520 TARGET_EXPR is really supposed to initialize, so treat it
7521 as being equivalent to anything. */
7522 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7523 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7524 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7525 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7526 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7527 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7528 cmp = 1;
7529 else
7530 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7532 if (cmp <= 0)
7533 return cmp;
7535 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7537 case WITH_CLEANUP_EXPR:
7538 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7539 if (cmp <= 0)
7540 return cmp;
7542 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7544 case COMPONENT_REF:
7545 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7546 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7548 return 0;
7550 case VAR_DECL:
7551 case PARM_DECL:
7552 case CONST_DECL:
7553 case FUNCTION_DECL:
7554 return 0;
7556 default:
7557 break;
7560 /* This general rule works for most tree codes. All exceptions should be
7561 handled above. If this is a language-specific tree code, we can't
7562 trust what might be in the operand, so say we don't know
7563 the situation. */
7564 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7565 return -1;
7567 switch (TREE_CODE_CLASS (code1))
7569 case tcc_unary:
7570 case tcc_binary:
7571 case tcc_comparison:
7572 case tcc_expression:
7573 case tcc_reference:
7574 case tcc_statement:
7575 cmp = 1;
7576 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7578 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7579 if (cmp <= 0)
7580 return cmp;
7583 return cmp;
7585 default:
7586 return -1;
7590 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7591 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7592 than U, respectively. */
7595 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7597 if (tree_int_cst_sgn (t) < 0)
7598 return -1;
7599 else if (!tree_fits_uhwi_p (t))
7600 return 1;
7601 else if (TREE_INT_CST_LOW (t) == u)
7602 return 0;
7603 else if (TREE_INT_CST_LOW (t) < u)
7604 return -1;
7605 else
7606 return 1;
7609 /* Return true if SIZE represents a constant size that is in bounds of
7610 what the middle-end and the backend accepts (covering not more than
7611 half of the address-space). */
7613 bool
7614 valid_constant_size_p (const_tree size)
7616 if (! tree_fits_uhwi_p (size)
7617 || TREE_OVERFLOW (size)
7618 || tree_int_cst_sign_bit (size) != 0)
7619 return false;
7620 return true;
7623 /* Return the precision of the type, or for a complex or vector type the
7624 precision of the type of its elements. */
7626 unsigned int
7627 element_precision (const_tree type)
7629 if (!TYPE_P (type))
7630 type = TREE_TYPE (type);
7631 enum tree_code code = TREE_CODE (type);
7632 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7633 type = TREE_TYPE (type);
7635 return TYPE_PRECISION (type);
7638 /* Return true if CODE represents an associative tree code. Otherwise
7639 return false. */
7640 bool
7641 associative_tree_code (enum tree_code code)
7643 switch (code)
7645 case BIT_IOR_EXPR:
7646 case BIT_AND_EXPR:
7647 case BIT_XOR_EXPR:
7648 case PLUS_EXPR:
7649 case MULT_EXPR:
7650 case MIN_EXPR:
7651 case MAX_EXPR:
7652 return true;
7654 default:
7655 break;
7657 return false;
7660 /* Return true if CODE represents a commutative tree code. Otherwise
7661 return false. */
7662 bool
7663 commutative_tree_code (enum tree_code code)
7665 switch (code)
7667 case PLUS_EXPR:
7668 case MULT_EXPR:
7669 case MULT_HIGHPART_EXPR:
7670 case MIN_EXPR:
7671 case MAX_EXPR:
7672 case BIT_IOR_EXPR:
7673 case BIT_XOR_EXPR:
7674 case BIT_AND_EXPR:
7675 case NE_EXPR:
7676 case EQ_EXPR:
7677 case UNORDERED_EXPR:
7678 case ORDERED_EXPR:
7679 case UNEQ_EXPR:
7680 case LTGT_EXPR:
7681 case TRUTH_AND_EXPR:
7682 case TRUTH_XOR_EXPR:
7683 case TRUTH_OR_EXPR:
7684 case WIDEN_MULT_EXPR:
7685 case VEC_WIDEN_MULT_HI_EXPR:
7686 case VEC_WIDEN_MULT_LO_EXPR:
7687 case VEC_WIDEN_MULT_EVEN_EXPR:
7688 case VEC_WIDEN_MULT_ODD_EXPR:
7689 return true;
7691 default:
7692 break;
7694 return false;
7697 /* Return true if CODE represents a ternary tree code for which the
7698 first two operands are commutative. Otherwise return false. */
7699 bool
7700 commutative_ternary_tree_code (enum tree_code code)
7702 switch (code)
7704 case WIDEN_MULT_PLUS_EXPR:
7705 case WIDEN_MULT_MINUS_EXPR:
7706 case DOT_PROD_EXPR:
7707 case FMA_EXPR:
7708 return true;
7710 default:
7711 break;
7713 return false;
7716 /* Returns true if CODE can overflow. */
7718 bool
7719 operation_can_overflow (enum tree_code code)
7721 switch (code)
7723 case PLUS_EXPR:
7724 case MINUS_EXPR:
7725 case MULT_EXPR:
7726 case LSHIFT_EXPR:
7727 /* Can overflow in various ways. */
7728 return true;
7729 case TRUNC_DIV_EXPR:
7730 case EXACT_DIV_EXPR:
7731 case FLOOR_DIV_EXPR:
7732 case CEIL_DIV_EXPR:
7733 /* For INT_MIN / -1. */
7734 return true;
7735 case NEGATE_EXPR:
7736 case ABS_EXPR:
7737 /* For -INT_MIN. */
7738 return true;
7739 default:
7740 /* These operators cannot overflow. */
7741 return false;
7745 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or
7746 ftrapv doesn't generate trapping insns for CODE. */
7748 bool
7749 operation_no_trapping_overflow (tree type, enum tree_code code)
7751 gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type));
7753 /* We don't generate instructions that trap on overflow for complex or vector
7754 types. */
7755 if (!INTEGRAL_TYPE_P (type))
7756 return true;
7758 if (!TYPE_OVERFLOW_TRAPS (type))
7759 return true;
7761 switch (code)
7763 case PLUS_EXPR:
7764 case MINUS_EXPR:
7765 case MULT_EXPR:
7766 case NEGATE_EXPR:
7767 case ABS_EXPR:
7768 /* These operators can overflow, and -ftrapv generates trapping code for
7769 these. */
7770 return false;
7771 case TRUNC_DIV_EXPR:
7772 case EXACT_DIV_EXPR:
7773 case FLOOR_DIV_EXPR:
7774 case CEIL_DIV_EXPR:
7775 case LSHIFT_EXPR:
7776 /* These operators can overflow, but -ftrapv does not generate trapping
7777 code for these. */
7778 return true;
7779 default:
7780 /* These operators cannot overflow. */
7781 return true;
7785 namespace inchash
7788 /* Generate a hash value for an expression. This can be used iteratively
7789 by passing a previous result as the HSTATE argument.
7791 This function is intended to produce the same hash for expressions which
7792 would compare equal using operand_equal_p. */
7793 void
7794 add_expr (const_tree t, inchash::hash &hstate, unsigned int flags)
7796 int i;
7797 enum tree_code code;
7798 enum tree_code_class tclass;
7800 if (t == NULL_TREE || t == error_mark_node)
7802 hstate.merge_hash (0);
7803 return;
7806 if (!(flags & OEP_ADDRESS_OF))
7807 STRIP_NOPS (t);
7809 code = TREE_CODE (t);
7811 switch (code)
7813 /* Alas, constants aren't shared, so we can't rely on pointer
7814 identity. */
7815 case VOID_CST:
7816 hstate.merge_hash (0);
7817 return;
7818 case INTEGER_CST:
7819 gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7820 for (i = 0; i < TREE_INT_CST_EXT_NUNITS (t); i++)
7821 hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
7822 return;
7823 case REAL_CST:
7825 unsigned int val2;
7826 if (!HONOR_SIGNED_ZEROS (t) && real_zerop (t))
7827 val2 = rvc_zero;
7828 else
7829 val2 = real_hash (TREE_REAL_CST_PTR (t));
7830 hstate.merge_hash (val2);
7831 return;
7833 case FIXED_CST:
7835 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7836 hstate.merge_hash (val2);
7837 return;
7839 case STRING_CST:
7840 hstate.add ((const void *) TREE_STRING_POINTER (t),
7841 TREE_STRING_LENGTH (t));
7842 return;
7843 case COMPLEX_CST:
7844 inchash::add_expr (TREE_REALPART (t), hstate, flags);
7845 inchash::add_expr (TREE_IMAGPART (t), hstate, flags);
7846 return;
7847 case VECTOR_CST:
7849 unsigned i;
7850 for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7851 inchash::add_expr (VECTOR_CST_ELT (t, i), hstate, flags);
7852 return;
7854 case SSA_NAME:
7855 /* We can just compare by pointer. */
7856 hstate.add_wide_int (SSA_NAME_VERSION (t));
7857 return;
7858 case PLACEHOLDER_EXPR:
7859 /* The node itself doesn't matter. */
7860 return;
7861 case BLOCK:
7862 case OMP_CLAUSE:
7863 /* Ignore. */
7864 return;
7865 case TREE_LIST:
7866 /* A list of expressions, for a CALL_EXPR or as the elements of a
7867 VECTOR_CST. */
7868 for (; t; t = TREE_CHAIN (t))
7869 inchash::add_expr (TREE_VALUE (t), hstate, flags);
7870 return;
7871 case CONSTRUCTOR:
7873 unsigned HOST_WIDE_INT idx;
7874 tree field, value;
7875 flags &= ~OEP_ADDRESS_OF;
7876 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7878 inchash::add_expr (field, hstate, flags);
7879 inchash::add_expr (value, hstate, flags);
7881 return;
7883 case STATEMENT_LIST:
7885 tree_stmt_iterator i;
7886 for (i = tsi_start (CONST_CAST_TREE (t));
7887 !tsi_end_p (i); tsi_next (&i))
7888 inchash::add_expr (tsi_stmt (i), hstate, flags);
7889 return;
7891 case TREE_VEC:
7892 for (i = 0; i < TREE_VEC_LENGTH (t); ++i)
7893 inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags);
7894 return;
7895 case FUNCTION_DECL:
7896 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7897 Otherwise nodes that compare equal according to operand_equal_p might
7898 get different hash codes. However, don't do this for machine specific
7899 or front end builtins, since the function code is overloaded in those
7900 cases. */
7901 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7902 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7904 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7905 code = TREE_CODE (t);
7907 /* FALL THROUGH */
7908 default:
7909 tclass = TREE_CODE_CLASS (code);
7911 if (tclass == tcc_declaration)
7913 /* DECL's have a unique ID */
7914 hstate.add_wide_int (DECL_UID (t));
7916 else if (tclass == tcc_comparison && !commutative_tree_code (code))
7918 /* For comparisons that can be swapped, use the lower
7919 tree code. */
7920 enum tree_code ccode = swap_tree_comparison (code);
7921 if (code < ccode)
7922 ccode = code;
7923 hstate.add_object (ccode);
7924 inchash::add_expr (TREE_OPERAND (t, ccode != code), hstate, flags);
7925 inchash::add_expr (TREE_OPERAND (t, ccode == code), hstate, flags);
7927 else if (CONVERT_EXPR_CODE_P (code))
7929 /* NOP_EXPR and CONVERT_EXPR are considered equal by
7930 operand_equal_p. */
7931 enum tree_code ccode = NOP_EXPR;
7932 hstate.add_object (ccode);
7934 /* Don't hash the type, that can lead to having nodes which
7935 compare equal according to operand_equal_p, but which
7936 have different hash codes. Make sure to include signedness
7937 in the hash computation. */
7938 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7939 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
7941 /* For OEP_ADDRESS_OF, hash MEM_EXPR[&decl, 0] the same as decl. */
7942 else if (code == MEM_REF
7943 && (flags & OEP_ADDRESS_OF) != 0
7944 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR
7945 && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0))
7946 && integer_zerop (TREE_OPERAND (t, 1)))
7947 inchash::add_expr (TREE_OPERAND (TREE_OPERAND (t, 0), 0),
7948 hstate, flags);
7949 /* Don't ICE on FE specific trees, or their arguments etc.
7950 during operand_equal_p hash verification. */
7951 else if (!IS_EXPR_CODE_CLASS (tclass))
7952 gcc_assert (flags & OEP_HASH_CHECK);
7953 else
7955 unsigned int sflags = flags;
7957 hstate.add_object (code);
7959 switch (code)
7961 case ADDR_EXPR:
7962 gcc_checking_assert (!(flags & OEP_ADDRESS_OF));
7963 flags |= OEP_ADDRESS_OF;
7964 sflags = flags;
7965 break;
7967 case INDIRECT_REF:
7968 case MEM_REF:
7969 case TARGET_MEM_REF:
7970 flags &= ~OEP_ADDRESS_OF;
7971 sflags = flags;
7972 break;
7974 case ARRAY_REF:
7975 case ARRAY_RANGE_REF:
7976 case COMPONENT_REF:
7977 case BIT_FIELD_REF:
7978 sflags &= ~OEP_ADDRESS_OF;
7979 break;
7981 case COND_EXPR:
7982 flags &= ~OEP_ADDRESS_OF;
7983 break;
7985 case FMA_EXPR:
7986 case WIDEN_MULT_PLUS_EXPR:
7987 case WIDEN_MULT_MINUS_EXPR:
7989 /* The multiplication operands are commutative. */
7990 inchash::hash one, two;
7991 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
7992 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
7993 hstate.add_commutative (one, two);
7994 inchash::add_expr (TREE_OPERAND (t, 2), two, flags);
7995 return;
7998 case CALL_EXPR:
7999 if (CALL_EXPR_FN (t) == NULL_TREE)
8000 hstate.add_int (CALL_EXPR_IFN (t));
8001 break;
8003 case TARGET_EXPR:
8004 /* For TARGET_EXPR, just hash on the TARGET_EXPR_SLOT.
8005 Usually different TARGET_EXPRs just should use
8006 different temporaries in their slots. */
8007 inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags);
8008 return;
8010 default:
8011 break;
8014 /* Don't hash the type, that can lead to having nodes which
8015 compare equal according to operand_equal_p, but which
8016 have different hash codes. */
8017 if (code == NON_LVALUE_EXPR)
8019 /* Make sure to include signness in the hash computation. */
8020 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
8021 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags);
8024 else if (commutative_tree_code (code))
8026 /* It's a commutative expression. We want to hash it the same
8027 however it appears. We do this by first hashing both operands
8028 and then rehashing based on the order of their independent
8029 hashes. */
8030 inchash::hash one, two;
8031 inchash::add_expr (TREE_OPERAND (t, 0), one, flags);
8032 inchash::add_expr (TREE_OPERAND (t, 1), two, flags);
8033 hstate.add_commutative (one, two);
8035 else
8036 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
8037 inchash::add_expr (TREE_OPERAND (t, i), hstate,
8038 i == 0 ? flags : sflags);
8040 return;
8046 /* Constructors for pointer, array and function types.
8047 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
8048 constructed by language-dependent code, not here.) */
8050 /* Construct, lay out and return the type of pointers to TO_TYPE with
8051 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
8052 reference all of memory. If such a type has already been
8053 constructed, reuse it. */
8055 tree
8056 build_pointer_type_for_mode (tree to_type, machine_mode mode,
8057 bool can_alias_all)
8059 tree t;
8060 bool could_alias = can_alias_all;
8062 if (to_type == error_mark_node)
8063 return error_mark_node;
8065 /* If the pointed-to type has the may_alias attribute set, force
8066 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
8067 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8068 can_alias_all = true;
8070 /* In some cases, languages will have things that aren't a POINTER_TYPE
8071 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
8072 In that case, return that type without regard to the rest of our
8073 operands.
8075 ??? This is a kludge, but consistent with the way this function has
8076 always operated and there doesn't seem to be a good way to avoid this
8077 at the moment. */
8078 if (TYPE_POINTER_TO (to_type) != 0
8079 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
8080 return TYPE_POINTER_TO (to_type);
8082 /* First, if we already have a type for pointers to TO_TYPE and it's
8083 the proper mode, use it. */
8084 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
8085 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8086 return t;
8088 t = make_node (POINTER_TYPE);
8090 TREE_TYPE (t) = to_type;
8091 SET_TYPE_MODE (t, mode);
8092 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8093 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
8094 TYPE_POINTER_TO (to_type) = t;
8096 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
8097 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8098 SET_TYPE_STRUCTURAL_EQUALITY (t);
8099 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8100 TYPE_CANONICAL (t)
8101 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
8102 mode, false);
8104 /* Lay out the type. This function has many callers that are concerned
8105 with expression-construction, and this simplifies them all. */
8106 layout_type (t);
8108 return t;
8111 /* By default build pointers in ptr_mode. */
8113 tree
8114 build_pointer_type (tree to_type)
8116 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8117 : TYPE_ADDR_SPACE (to_type);
8118 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8119 return build_pointer_type_for_mode (to_type, pointer_mode, false);
8122 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
8124 tree
8125 build_reference_type_for_mode (tree to_type, machine_mode mode,
8126 bool can_alias_all)
8128 tree t;
8129 bool could_alias = can_alias_all;
8131 if (to_type == error_mark_node)
8132 return error_mark_node;
8134 /* If the pointed-to type has the may_alias attribute set, force
8135 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
8136 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
8137 can_alias_all = true;
8139 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
8140 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
8141 In that case, return that type without regard to the rest of our
8142 operands.
8144 ??? This is a kludge, but consistent with the way this function has
8145 always operated and there doesn't seem to be a good way to avoid this
8146 at the moment. */
8147 if (TYPE_REFERENCE_TO (to_type) != 0
8148 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
8149 return TYPE_REFERENCE_TO (to_type);
8151 /* First, if we already have a type for pointers to TO_TYPE and it's
8152 the proper mode, use it. */
8153 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
8154 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
8155 return t;
8157 t = make_node (REFERENCE_TYPE);
8159 TREE_TYPE (t) = to_type;
8160 SET_TYPE_MODE (t, mode);
8161 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
8162 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
8163 TYPE_REFERENCE_TO (to_type) = t;
8165 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */
8166 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p)
8167 SET_TYPE_STRUCTURAL_EQUALITY (t);
8168 else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
8169 TYPE_CANONICAL (t)
8170 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
8171 mode, false);
8173 layout_type (t);
8175 return t;
8179 /* Build the node for the type of references-to-TO_TYPE by default
8180 in ptr_mode. */
8182 tree
8183 build_reference_type (tree to_type)
8185 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
8186 : TYPE_ADDR_SPACE (to_type);
8187 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
8188 return build_reference_type_for_mode (to_type, pointer_mode, false);
8191 #define MAX_INT_CACHED_PREC \
8192 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8193 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
8195 /* Builds a signed or unsigned integer type of precision PRECISION.
8196 Used for C bitfields whose precision does not match that of
8197 built-in target types. */
8198 tree
8199 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
8200 int unsignedp)
8202 tree itype, ret;
8204 if (unsignedp)
8205 unsignedp = MAX_INT_CACHED_PREC + 1;
8207 if (precision <= MAX_INT_CACHED_PREC)
8209 itype = nonstandard_integer_type_cache[precision + unsignedp];
8210 if (itype)
8211 return itype;
8214 itype = make_node (INTEGER_TYPE);
8215 TYPE_PRECISION (itype) = precision;
8217 if (unsignedp)
8218 fixup_unsigned_type (itype);
8219 else
8220 fixup_signed_type (itype);
8222 ret = itype;
8223 if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
8224 ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
8225 if (precision <= MAX_INT_CACHED_PREC)
8226 nonstandard_integer_type_cache[precision + unsignedp] = ret;
8228 return ret;
8231 #define MAX_BOOL_CACHED_PREC \
8232 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
8233 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1];
8235 /* Builds a boolean type of precision PRECISION.
8236 Used for boolean vectors to choose proper vector element size. */
8237 tree
8238 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision)
8240 tree type;
8242 if (precision <= MAX_BOOL_CACHED_PREC)
8244 type = nonstandard_boolean_type_cache[precision];
8245 if (type)
8246 return type;
8249 type = make_node (BOOLEAN_TYPE);
8250 TYPE_PRECISION (type) = precision;
8251 fixup_signed_type (type);
8253 if (precision <= MAX_INT_CACHED_PREC)
8254 nonstandard_boolean_type_cache[precision] = type;
8256 return type;
8259 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
8260 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
8261 is true, reuse such a type that has already been constructed. */
8263 static tree
8264 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
8266 tree itype = make_node (INTEGER_TYPE);
8267 inchash::hash hstate;
8269 TREE_TYPE (itype) = type;
8271 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
8272 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
8274 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
8275 SET_TYPE_MODE (itype, TYPE_MODE (type));
8276 TYPE_SIZE (itype) = TYPE_SIZE (type);
8277 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
8278 SET_TYPE_ALIGN (itype, TYPE_ALIGN (type));
8279 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
8281 if (!shared)
8282 return itype;
8284 if ((TYPE_MIN_VALUE (itype)
8285 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
8286 || (TYPE_MAX_VALUE (itype)
8287 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
8289 /* Since we cannot reliably merge this type, we need to compare it using
8290 structural equality checks. */
8291 SET_TYPE_STRUCTURAL_EQUALITY (itype);
8292 return itype;
8295 inchash::add_expr (TYPE_MIN_VALUE (itype), hstate);
8296 inchash::add_expr (TYPE_MAX_VALUE (itype), hstate);
8297 hstate.merge_hash (TYPE_HASH (type));
8298 itype = type_hash_canon (hstate.end (), itype);
8300 return itype;
8303 /* Wrapper around build_range_type_1 with SHARED set to true. */
8305 tree
8306 build_range_type (tree type, tree lowval, tree highval)
8308 return build_range_type_1 (type, lowval, highval, true);
8311 /* Wrapper around build_range_type_1 with SHARED set to false. */
8313 tree
8314 build_nonshared_range_type (tree type, tree lowval, tree highval)
8316 return build_range_type_1 (type, lowval, highval, false);
8319 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
8320 MAXVAL should be the maximum value in the domain
8321 (one less than the length of the array).
8323 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
8324 We don't enforce this limit, that is up to caller (e.g. language front end).
8325 The limit exists because the result is a signed type and we don't handle
8326 sizes that use more than one HOST_WIDE_INT. */
8328 tree
8329 build_index_type (tree maxval)
8331 return build_range_type (sizetype, size_zero_node, maxval);
8334 /* Return true if the debug information for TYPE, a subtype, should be emitted
8335 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
8336 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
8337 debug info and doesn't reflect the source code. */
8339 bool
8340 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
8342 tree base_type = TREE_TYPE (type), low, high;
8344 /* Subrange types have a base type which is an integral type. */
8345 if (!INTEGRAL_TYPE_P (base_type))
8346 return false;
8348 /* Get the real bounds of the subtype. */
8349 if (lang_hooks.types.get_subrange_bounds)
8350 lang_hooks.types.get_subrange_bounds (type, &low, &high);
8351 else
8353 low = TYPE_MIN_VALUE (type);
8354 high = TYPE_MAX_VALUE (type);
8357 /* If the type and its base type have the same representation and the same
8358 name, then the type is not a subrange but a copy of the base type. */
8359 if ((TREE_CODE (base_type) == INTEGER_TYPE
8360 || TREE_CODE (base_type) == BOOLEAN_TYPE)
8361 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
8362 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
8363 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
8364 && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
8365 return false;
8367 if (lowval)
8368 *lowval = low;
8369 if (highval)
8370 *highval = high;
8371 return true;
8374 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
8375 and number of elements specified by the range of values of INDEX_TYPE.
8376 If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type.
8377 If SHARED is true, reuse such a type that has already been constructed. */
8379 static tree
8380 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
8381 bool shared)
8383 tree t;
8385 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
8387 error ("arrays of functions are not meaningful");
8388 elt_type = integer_type_node;
8391 t = make_node (ARRAY_TYPE);
8392 TREE_TYPE (t) = elt_type;
8393 TYPE_DOMAIN (t) = index_type;
8394 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
8395 TYPE_TYPELESS_STORAGE (t) = typeless_storage;
8396 layout_type (t);
8398 /* If the element type is incomplete at this point we get marked for
8399 structural equality. Do not record these types in the canonical
8400 type hashtable. */
8401 if (TYPE_STRUCTURAL_EQUALITY_P (t))
8402 return t;
8404 if (shared)
8406 inchash::hash hstate;
8407 hstate.add_object (TYPE_HASH (elt_type));
8408 if (index_type)
8409 hstate.add_object (TYPE_HASH (index_type));
8410 if (!AGGREGATE_TYPE_P (elt_type))
8411 hstate.add_flag (TYPE_TYPELESS_STORAGE (t));
8412 t = type_hash_canon (hstate.end (), t);
8415 if (TYPE_CANONICAL (t) == t)
8417 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
8418 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type))
8419 || in_lto_p)
8420 SET_TYPE_STRUCTURAL_EQUALITY (t);
8421 else if (TYPE_CANONICAL (elt_type) != elt_type
8422 || (index_type && TYPE_CANONICAL (index_type) != index_type))
8423 TYPE_CANONICAL (t)
8424 = build_array_type_1 (TYPE_CANONICAL (elt_type),
8425 index_type
8426 ? TYPE_CANONICAL (index_type) : NULL_TREE,
8427 typeless_storage, shared);
8430 return t;
8433 /* Wrapper around build_array_type_1 with SHARED set to true. */
8435 tree
8436 build_array_type (tree elt_type, tree index_type, bool typeless_storage)
8438 return build_array_type_1 (elt_type, index_type, typeless_storage, true);
8441 /* Wrapper around build_array_type_1 with SHARED set to false. */
8443 tree
8444 build_nonshared_array_type (tree elt_type, tree index_type)
8446 return build_array_type_1 (elt_type, index_type, false, false);
8449 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8450 sizetype. */
8452 tree
8453 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
8455 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8458 /* Recursively examines the array elements of TYPE, until a non-array
8459 element type is found. */
8461 tree
8462 strip_array_types (tree type)
8464 while (TREE_CODE (type) == ARRAY_TYPE)
8465 type = TREE_TYPE (type);
8467 return type;
8470 /* Computes the canonical argument types from the argument type list
8471 ARGTYPES.
8473 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8474 on entry to this function, or if any of the ARGTYPES are
8475 structural.
8477 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8478 true on entry to this function, or if any of the ARGTYPES are
8479 non-canonical.
8481 Returns a canonical argument list, which may be ARGTYPES when the
8482 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8483 true) or would not differ from ARGTYPES. */
8485 static tree
8486 maybe_canonicalize_argtypes (tree argtypes,
8487 bool *any_structural_p,
8488 bool *any_noncanonical_p)
8490 tree arg;
8491 bool any_noncanonical_argtypes_p = false;
8493 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8495 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8496 /* Fail gracefully by stating that the type is structural. */
8497 *any_structural_p = true;
8498 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8499 *any_structural_p = true;
8500 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8501 || TREE_PURPOSE (arg))
8502 /* If the argument has a default argument, we consider it
8503 non-canonical even though the type itself is canonical.
8504 That way, different variants of function and method types
8505 with default arguments will all point to the variant with
8506 no defaults as their canonical type. */
8507 any_noncanonical_argtypes_p = true;
8510 if (*any_structural_p)
8511 return argtypes;
8513 if (any_noncanonical_argtypes_p)
8515 /* Build the canonical list of argument types. */
8516 tree canon_argtypes = NULL_TREE;
8517 bool is_void = false;
8519 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8521 if (arg == void_list_node)
8522 is_void = true;
8523 else
8524 canon_argtypes = tree_cons (NULL_TREE,
8525 TYPE_CANONICAL (TREE_VALUE (arg)),
8526 canon_argtypes);
8529 canon_argtypes = nreverse (canon_argtypes);
8530 if (is_void)
8531 canon_argtypes = chainon (canon_argtypes, void_list_node);
8533 /* There is a non-canonical type. */
8534 *any_noncanonical_p = true;
8535 return canon_argtypes;
8538 /* The canonical argument types are the same as ARGTYPES. */
8539 return argtypes;
8542 /* Construct, lay out and return
8543 the type of functions returning type VALUE_TYPE
8544 given arguments of types ARG_TYPES.
8545 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8546 are data type nodes for the arguments of the function.
8547 If such a type has already been constructed, reuse it. */
8549 tree
8550 build_function_type (tree value_type, tree arg_types)
8552 tree t;
8553 inchash::hash hstate;
8554 bool any_structural_p, any_noncanonical_p;
8555 tree canon_argtypes;
8557 if (TREE_CODE (value_type) == FUNCTION_TYPE)
8559 error ("function return type cannot be function");
8560 value_type = integer_type_node;
8563 /* Make a node of the sort we want. */
8564 t = make_node (FUNCTION_TYPE);
8565 TREE_TYPE (t) = value_type;
8566 TYPE_ARG_TYPES (t) = arg_types;
8568 /* If we already have such a type, use the old one. */
8569 hstate.add_object (TYPE_HASH (value_type));
8570 type_hash_list (arg_types, hstate);
8571 t = type_hash_canon (hstate.end (), t);
8573 /* Set up the canonical type. */
8574 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8575 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8576 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8577 &any_structural_p,
8578 &any_noncanonical_p);
8579 if (any_structural_p)
8580 SET_TYPE_STRUCTURAL_EQUALITY (t);
8581 else if (any_noncanonical_p)
8582 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8583 canon_argtypes);
8585 if (!COMPLETE_TYPE_P (t))
8586 layout_type (t);
8587 return t;
8590 /* Build a function type. The RETURN_TYPE is the type returned by the
8591 function. If VAARGS is set, no void_type_node is appended to the
8592 list. ARGP must be always be terminated be a NULL_TREE. */
8594 static tree
8595 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8597 tree t, args, last;
8599 t = va_arg (argp, tree);
8600 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8601 args = tree_cons (NULL_TREE, t, args);
8603 if (vaargs)
8605 last = args;
8606 if (args != NULL_TREE)
8607 args = nreverse (args);
8608 gcc_assert (last != void_list_node);
8610 else if (args == NULL_TREE)
8611 args = void_list_node;
8612 else
8614 last = args;
8615 args = nreverse (args);
8616 TREE_CHAIN (last) = void_list_node;
8618 args = build_function_type (return_type, args);
8620 return args;
8623 /* Build a function type. The RETURN_TYPE is the type returned by the
8624 function. If additional arguments are provided, they are
8625 additional argument types. The list of argument types must always
8626 be terminated by NULL_TREE. */
8628 tree
8629 build_function_type_list (tree return_type, ...)
8631 tree args;
8632 va_list p;
8634 va_start (p, return_type);
8635 args = build_function_type_list_1 (false, return_type, p);
8636 va_end (p);
8637 return args;
8640 /* Build a variable argument function type. The RETURN_TYPE is the
8641 type returned by the function. If additional arguments are provided,
8642 they are additional argument types. The list of argument types must
8643 always be terminated by NULL_TREE. */
8645 tree
8646 build_varargs_function_type_list (tree return_type, ...)
8648 tree args;
8649 va_list p;
8651 va_start (p, return_type);
8652 args = build_function_type_list_1 (true, return_type, p);
8653 va_end (p);
8655 return args;
8658 /* Build a function type. RETURN_TYPE is the type returned by the
8659 function; VAARGS indicates whether the function takes varargs. The
8660 function takes N named arguments, the types of which are provided in
8661 ARG_TYPES. */
8663 static tree
8664 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8665 tree *arg_types)
8667 int i;
8668 tree t = vaargs ? NULL_TREE : void_list_node;
8670 for (i = n - 1; i >= 0; i--)
8671 t = tree_cons (NULL_TREE, arg_types[i], t);
8673 return build_function_type (return_type, t);
8676 /* Build a function type. RETURN_TYPE is the type returned by the
8677 function. The function takes N named arguments, the types of which
8678 are provided in ARG_TYPES. */
8680 tree
8681 build_function_type_array (tree return_type, int n, tree *arg_types)
8683 return build_function_type_array_1 (false, return_type, n, arg_types);
8686 /* Build a variable argument function type. RETURN_TYPE is the type
8687 returned by the function. The function takes N named arguments, the
8688 types of which are provided in ARG_TYPES. */
8690 tree
8691 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8693 return build_function_type_array_1 (true, return_type, n, arg_types);
8696 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
8697 and ARGTYPES (a TREE_LIST) are the return type and arguments types
8698 for the method. An implicit additional parameter (of type
8699 pointer-to-BASETYPE) is added to the ARGTYPES. */
8701 tree
8702 build_method_type_directly (tree basetype,
8703 tree rettype,
8704 tree argtypes)
8706 tree t;
8707 tree ptype;
8708 inchash::hash hstate;
8709 bool any_structural_p, any_noncanonical_p;
8710 tree canon_argtypes;
8712 /* Make a node of the sort we want. */
8713 t = make_node (METHOD_TYPE);
8715 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8716 TREE_TYPE (t) = rettype;
8717 ptype = build_pointer_type (basetype);
8719 /* The actual arglist for this function includes a "hidden" argument
8720 which is "this". Put it into the list of argument types. */
8721 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8722 TYPE_ARG_TYPES (t) = argtypes;
8724 /* If we already have such a type, use the old one. */
8725 hstate.add_object (TYPE_HASH (basetype));
8726 hstate.add_object (TYPE_HASH (rettype));
8727 type_hash_list (argtypes, hstate);
8728 t = type_hash_canon (hstate.end (), t);
8730 /* Set up the canonical type. */
8731 any_structural_p
8732 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8733 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8734 any_noncanonical_p
8735 = (TYPE_CANONICAL (basetype) != basetype
8736 || TYPE_CANONICAL (rettype) != rettype);
8737 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8738 &any_structural_p,
8739 &any_noncanonical_p);
8740 if (any_structural_p)
8741 SET_TYPE_STRUCTURAL_EQUALITY (t);
8742 else if (any_noncanonical_p)
8743 TYPE_CANONICAL (t)
8744 = build_method_type_directly (TYPE_CANONICAL (basetype),
8745 TYPE_CANONICAL (rettype),
8746 canon_argtypes);
8747 if (!COMPLETE_TYPE_P (t))
8748 layout_type (t);
8750 return t;
8753 /* Construct, lay out and return the type of methods belonging to class
8754 BASETYPE and whose arguments and values are described by TYPE.
8755 If that type exists already, reuse it.
8756 TYPE must be a FUNCTION_TYPE node. */
8758 tree
8759 build_method_type (tree basetype, tree type)
8761 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8763 return build_method_type_directly (basetype,
8764 TREE_TYPE (type),
8765 TYPE_ARG_TYPES (type));
8768 /* Construct, lay out and return the type of offsets to a value
8769 of type TYPE, within an object of type BASETYPE.
8770 If a suitable offset type exists already, reuse it. */
8772 tree
8773 build_offset_type (tree basetype, tree type)
8775 tree t;
8776 inchash::hash hstate;
8778 /* Make a node of the sort we want. */
8779 t = make_node (OFFSET_TYPE);
8781 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8782 TREE_TYPE (t) = type;
8784 /* If we already have such a type, use the old one. */
8785 hstate.add_object (TYPE_HASH (basetype));
8786 hstate.add_object (TYPE_HASH (type));
8787 t = type_hash_canon (hstate.end (), t);
8789 if (!COMPLETE_TYPE_P (t))
8790 layout_type (t);
8792 if (TYPE_CANONICAL (t) == t)
8794 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8795 || TYPE_STRUCTURAL_EQUALITY_P (type))
8796 SET_TYPE_STRUCTURAL_EQUALITY (t);
8797 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8798 || TYPE_CANONICAL (type) != type)
8799 TYPE_CANONICAL (t)
8800 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8801 TYPE_CANONICAL (type));
8804 return t;
8807 /* Create a complex type whose components are COMPONENT_TYPE.
8809 If NAMED is true, the type is given a TYPE_NAME. We do not always
8810 do so because this creates a DECL node and thus make the DECL_UIDs
8811 dependent on the type canonicalization hashtable, which is GC-ed,
8812 so the DECL_UIDs would not be stable wrt garbage collection. */
8814 tree
8815 build_complex_type (tree component_type, bool named)
8817 tree t;
8818 inchash::hash hstate;
8820 gcc_assert (INTEGRAL_TYPE_P (component_type)
8821 || SCALAR_FLOAT_TYPE_P (component_type)
8822 || FIXED_POINT_TYPE_P (component_type));
8824 /* Make a node of the sort we want. */
8825 t = make_node (COMPLEX_TYPE);
8827 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8829 /* If we already have such a type, use the old one. */
8830 hstate.add_object (TYPE_HASH (component_type));
8831 t = type_hash_canon (hstate.end (), t);
8833 if (!COMPLETE_TYPE_P (t))
8834 layout_type (t);
8836 if (TYPE_CANONICAL (t) == t)
8838 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8839 SET_TYPE_STRUCTURAL_EQUALITY (t);
8840 else if (TYPE_CANONICAL (component_type) != component_type)
8841 TYPE_CANONICAL (t)
8842 = build_complex_type (TYPE_CANONICAL (component_type), named);
8845 /* We need to create a name, since complex is a fundamental type. */
8846 if (!TYPE_NAME (t) && named)
8848 const char *name;
8849 if (component_type == char_type_node)
8850 name = "complex char";
8851 else if (component_type == signed_char_type_node)
8852 name = "complex signed char";
8853 else if (component_type == unsigned_char_type_node)
8854 name = "complex unsigned char";
8855 else if (component_type == short_integer_type_node)
8856 name = "complex short int";
8857 else if (component_type == short_unsigned_type_node)
8858 name = "complex short unsigned int";
8859 else if (component_type == integer_type_node)
8860 name = "complex int";
8861 else if (component_type == unsigned_type_node)
8862 name = "complex unsigned int";
8863 else if (component_type == long_integer_type_node)
8864 name = "complex long int";
8865 else if (component_type == long_unsigned_type_node)
8866 name = "complex long unsigned int";
8867 else if (component_type == long_long_integer_type_node)
8868 name = "complex long long int";
8869 else if (component_type == long_long_unsigned_type_node)
8870 name = "complex long long unsigned int";
8871 else
8872 name = 0;
8874 if (name != 0)
8875 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8876 get_identifier (name), t);
8879 return build_qualified_type (t, TYPE_QUALS (component_type));
8882 /* If TYPE is a real or complex floating-point type and the target
8883 does not directly support arithmetic on TYPE then return the wider
8884 type to be used for arithmetic on TYPE. Otherwise, return
8885 NULL_TREE. */
8887 tree
8888 excess_precision_type (tree type)
8890 /* The target can give two different responses to the question of
8891 which excess precision mode it would like depending on whether we
8892 are in -fexcess-precision=standard or -fexcess-precision=fast. */
8894 enum excess_precision_type requested_type
8895 = (flag_excess_precision == EXCESS_PRECISION_FAST
8896 ? EXCESS_PRECISION_TYPE_FAST
8897 : EXCESS_PRECISION_TYPE_STANDARD);
8899 enum flt_eval_method target_flt_eval_method
8900 = targetm.c.excess_precision (requested_type);
8902 /* The target should not ask for unpredictable float evaluation (though
8903 it might advertise that implicitly the evaluation is unpredictable,
8904 but we don't care about that here, it will have been reported
8905 elsewhere). If it does ask for unpredictable evaluation, we have
8906 nothing to do here. */
8907 gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE);
8909 /* Nothing to do. The target has asked for all types we know about
8910 to be computed with their native precision and range. */
8911 if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16)
8912 return NULL_TREE;
8914 /* The target will promote this type in a target-dependent way, so excess
8915 precision ought to leave it alone. */
8916 if (targetm.promoted_type (type) != NULL_TREE)
8917 return NULL_TREE;
8919 machine_mode float16_type_mode = (float16_type_node
8920 ? TYPE_MODE (float16_type_node)
8921 : VOIDmode);
8922 machine_mode float_type_mode = TYPE_MODE (float_type_node);
8923 machine_mode double_type_mode = TYPE_MODE (double_type_node);
8925 switch (TREE_CODE (type))
8927 case REAL_TYPE:
8929 machine_mode type_mode = TYPE_MODE (type);
8930 switch (target_flt_eval_method)
8932 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8933 if (type_mode == float16_type_mode)
8934 return float_type_node;
8935 break;
8936 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8937 if (type_mode == float16_type_mode
8938 || type_mode == float_type_mode)
8939 return double_type_node;
8940 break;
8941 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8942 if (type_mode == float16_type_mode
8943 || type_mode == float_type_mode
8944 || type_mode == double_type_mode)
8945 return long_double_type_node;
8946 break;
8947 default:
8948 gcc_unreachable ();
8950 break;
8952 case COMPLEX_TYPE:
8954 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8955 return NULL_TREE;
8956 machine_mode type_mode = TYPE_MODE (TREE_TYPE (type));
8957 switch (target_flt_eval_method)
8959 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT:
8960 if (type_mode == float16_type_mode)
8961 return complex_float_type_node;
8962 break;
8963 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE:
8964 if (type_mode == float16_type_mode
8965 || type_mode == float_type_mode)
8966 return complex_double_type_node;
8967 break;
8968 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE:
8969 if (type_mode == float16_type_mode
8970 || type_mode == float_type_mode
8971 || type_mode == double_type_mode)
8972 return complex_long_double_type_node;
8973 break;
8974 default:
8975 gcc_unreachable ();
8977 break;
8979 default:
8980 break;
8983 return NULL_TREE;
8986 /* Return OP, stripped of any conversions to wider types as much as is safe.
8987 Converting the value back to OP's type makes a value equivalent to OP.
8989 If FOR_TYPE is nonzero, we return a value which, if converted to
8990 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8992 OP must have integer, real or enumeral type. Pointers are not allowed!
8994 There are some cases where the obvious value we could return
8995 would regenerate to OP if converted to OP's type,
8996 but would not extend like OP to wider types.
8997 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8998 For example, if OP is (unsigned short)(signed char)-1,
8999 we avoid returning (signed char)-1 if FOR_TYPE is int,
9000 even though extending that to an unsigned short would regenerate OP,
9001 since the result of extending (signed char)-1 to (int)
9002 is different from (int) OP. */
9004 tree
9005 get_unwidened (tree op, tree for_type)
9007 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
9008 tree type = TREE_TYPE (op);
9009 unsigned final_prec
9010 = TYPE_PRECISION (for_type != 0 ? for_type : type);
9011 int uns
9012 = (for_type != 0 && for_type != type
9013 && final_prec > TYPE_PRECISION (type)
9014 && TYPE_UNSIGNED (type));
9015 tree win = op;
9017 while (CONVERT_EXPR_P (op))
9019 int bitschange;
9021 /* TYPE_PRECISION on vector types has different meaning
9022 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
9023 so avoid them here. */
9024 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
9025 break;
9027 bitschange = TYPE_PRECISION (TREE_TYPE (op))
9028 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
9030 /* Truncations are many-one so cannot be removed.
9031 Unless we are later going to truncate down even farther. */
9032 if (bitschange < 0
9033 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
9034 break;
9036 /* See what's inside this conversion. If we decide to strip it,
9037 we will set WIN. */
9038 op = TREE_OPERAND (op, 0);
9040 /* If we have not stripped any zero-extensions (uns is 0),
9041 we can strip any kind of extension.
9042 If we have previously stripped a zero-extension,
9043 only zero-extensions can safely be stripped.
9044 Any extension can be stripped if the bits it would produce
9045 are all going to be discarded later by truncating to FOR_TYPE. */
9047 if (bitschange > 0)
9049 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
9050 win = op;
9051 /* TYPE_UNSIGNED says whether this is a zero-extension.
9052 Let's avoid computing it if it does not affect WIN
9053 and if UNS will not be needed again. */
9054 if ((uns
9055 || CONVERT_EXPR_P (op))
9056 && TYPE_UNSIGNED (TREE_TYPE (op)))
9058 uns = 1;
9059 win = op;
9064 /* If we finally reach a constant see if it fits in sth smaller and
9065 in that case convert it. */
9066 if (TREE_CODE (win) == INTEGER_CST)
9068 tree wtype = TREE_TYPE (win);
9069 unsigned prec = wi::min_precision (win, TYPE_SIGN (wtype));
9070 if (for_type)
9071 prec = MAX (prec, final_prec);
9072 if (prec < TYPE_PRECISION (wtype))
9074 tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype));
9075 if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype))
9076 win = fold_convert (t, win);
9080 return win;
9083 /* Return OP or a simpler expression for a narrower value
9084 which can be sign-extended or zero-extended to give back OP.
9085 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
9086 or 0 if the value should be sign-extended. */
9088 tree
9089 get_narrower (tree op, int *unsignedp_ptr)
9091 int uns = 0;
9092 int first = 1;
9093 tree win = op;
9094 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
9096 while (TREE_CODE (op) == NOP_EXPR)
9098 int bitschange
9099 = (TYPE_PRECISION (TREE_TYPE (op))
9100 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
9102 /* Truncations are many-one so cannot be removed. */
9103 if (bitschange < 0)
9104 break;
9106 /* See what's inside this conversion. If we decide to strip it,
9107 we will set WIN. */
9109 if (bitschange > 0)
9111 op = TREE_OPERAND (op, 0);
9112 /* An extension: the outermost one can be stripped,
9113 but remember whether it is zero or sign extension. */
9114 if (first)
9115 uns = TYPE_UNSIGNED (TREE_TYPE (op));
9116 /* Otherwise, if a sign extension has been stripped,
9117 only sign extensions can now be stripped;
9118 if a zero extension has been stripped, only zero-extensions. */
9119 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
9120 break;
9121 first = 0;
9123 else /* bitschange == 0 */
9125 /* A change in nominal type can always be stripped, but we must
9126 preserve the unsignedness. */
9127 if (first)
9128 uns = TYPE_UNSIGNED (TREE_TYPE (op));
9129 first = 0;
9130 op = TREE_OPERAND (op, 0);
9131 /* Keep trying to narrow, but don't assign op to win if it
9132 would turn an integral type into something else. */
9133 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
9134 continue;
9137 win = op;
9140 if (TREE_CODE (op) == COMPONENT_REF
9141 /* Since type_for_size always gives an integer type. */
9142 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
9143 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
9144 /* Ensure field is laid out already. */
9145 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
9146 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
9148 unsigned HOST_WIDE_INT innerprec
9149 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
9150 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
9151 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
9152 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
9154 /* We can get this structure field in a narrower type that fits it,
9155 but the resulting extension to its nominal type (a fullword type)
9156 must satisfy the same conditions as for other extensions.
9158 Do this only for fields that are aligned (not bit-fields),
9159 because when bit-field insns will be used there is no
9160 advantage in doing this. */
9162 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
9163 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
9164 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
9165 && type != 0)
9167 if (first)
9168 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
9169 win = fold_convert (type, op);
9173 *unsignedp_ptr = uns;
9174 return win;
9177 /* Return true if integer constant C has a value that is permissible
9178 for TYPE, an integral type. */
9180 bool
9181 int_fits_type_p (const_tree c, const_tree type)
9183 tree type_low_bound, type_high_bound;
9184 bool ok_for_low_bound, ok_for_high_bound;
9185 signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
9187 /* Non-standard boolean types can have arbitrary precision but various
9188 transformations assume that they can only take values 0 and +/-1. */
9189 if (TREE_CODE (type) == BOOLEAN_TYPE)
9190 return wi::fits_to_boolean_p (c, type);
9192 retry:
9193 type_low_bound = TYPE_MIN_VALUE (type);
9194 type_high_bound = TYPE_MAX_VALUE (type);
9196 /* If at least one bound of the type is a constant integer, we can check
9197 ourselves and maybe make a decision. If no such decision is possible, but
9198 this type is a subtype, try checking against that. Otherwise, use
9199 fits_to_tree_p, which checks against the precision.
9201 Compute the status for each possibly constant bound, and return if we see
9202 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
9203 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
9204 for "constant known to fit". */
9206 /* Check if c >= type_low_bound. */
9207 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
9209 if (tree_int_cst_lt (c, type_low_bound))
9210 return false;
9211 ok_for_low_bound = true;
9213 else
9214 ok_for_low_bound = false;
9216 /* Check if c <= type_high_bound. */
9217 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
9219 if (tree_int_cst_lt (type_high_bound, c))
9220 return false;
9221 ok_for_high_bound = true;
9223 else
9224 ok_for_high_bound = false;
9226 /* If the constant fits both bounds, the result is known. */
9227 if (ok_for_low_bound && ok_for_high_bound)
9228 return true;
9230 /* Perform some generic filtering which may allow making a decision
9231 even if the bounds are not constant. First, negative integers
9232 never fit in unsigned types, */
9233 if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (c))
9234 return false;
9236 /* Second, narrower types always fit in wider ones. */
9237 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
9238 return true;
9240 /* Third, unsigned integers with top bit set never fit signed types. */
9241 if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
9243 int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
9244 if (prec < TYPE_PRECISION (TREE_TYPE (c)))
9246 /* When a tree_cst is converted to a wide-int, the precision
9247 is taken from the type. However, if the precision of the
9248 mode underneath the type is smaller than that, it is
9249 possible that the value will not fit. The test below
9250 fails if any bit is set between the sign bit of the
9251 underlying mode and the top bit of the type. */
9252 if (wi::ne_p (wi::zext (c, prec - 1), c))
9253 return false;
9255 else if (wi::neg_p (c))
9256 return false;
9259 /* If we haven't been able to decide at this point, there nothing more we
9260 can check ourselves here. Look at the base type if we have one and it
9261 has the same precision. */
9262 if (TREE_CODE (type) == INTEGER_TYPE
9263 && TREE_TYPE (type) != 0
9264 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
9266 type = TREE_TYPE (type);
9267 goto retry;
9270 /* Or to fits_to_tree_p, if nothing else. */
9271 return wi::fits_to_tree_p (c, type);
9274 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
9275 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
9276 represented (assuming two's-complement arithmetic) within the bit
9277 precision of the type are returned instead. */
9279 void
9280 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
9282 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
9283 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
9284 wi::to_mpz (TYPE_MIN_VALUE (type), min, TYPE_SIGN (type));
9285 else
9287 if (TYPE_UNSIGNED (type))
9288 mpz_set_ui (min, 0);
9289 else
9291 wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
9292 wi::to_mpz (mn, min, SIGNED);
9296 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
9297 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
9298 wi::to_mpz (TYPE_MAX_VALUE (type), max, TYPE_SIGN (type));
9299 else
9301 wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
9302 wi::to_mpz (mn, max, TYPE_SIGN (type));
9306 /* Return true if VAR is an automatic variable defined in function FN. */
9308 bool
9309 auto_var_in_fn_p (const_tree var, const_tree fn)
9311 return (DECL_P (var) && DECL_CONTEXT (var) == fn
9312 && ((((VAR_P (var) && ! DECL_EXTERNAL (var))
9313 || TREE_CODE (var) == PARM_DECL)
9314 && ! TREE_STATIC (var))
9315 || TREE_CODE (var) == LABEL_DECL
9316 || TREE_CODE (var) == RESULT_DECL));
9319 /* Subprogram of following function. Called by walk_tree.
9321 Return *TP if it is an automatic variable or parameter of the
9322 function passed in as DATA. */
9324 static tree
9325 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
9327 tree fn = (tree) data;
9329 if (TYPE_P (*tp))
9330 *walk_subtrees = 0;
9332 else if (DECL_P (*tp)
9333 && auto_var_in_fn_p (*tp, fn))
9334 return *tp;
9336 return NULL_TREE;
9339 /* Returns true if T is, contains, or refers to a type with variable
9340 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
9341 arguments, but not the return type. If FN is nonzero, only return
9342 true if a modifier of the type or position of FN is a variable or
9343 parameter inside FN.
9345 This concept is more general than that of C99 'variably modified types':
9346 in C99, a struct type is never variably modified because a VLA may not
9347 appear as a structure member. However, in GNU C code like:
9349 struct S { int i[f()]; };
9351 is valid, and other languages may define similar constructs. */
9353 bool
9354 variably_modified_type_p (tree type, tree fn)
9356 tree t;
9358 /* Test if T is either variable (if FN is zero) or an expression containing
9359 a variable in FN. If TYPE isn't gimplified, return true also if
9360 gimplify_one_sizepos would gimplify the expression into a local
9361 variable. */
9362 #define RETURN_TRUE_IF_VAR(T) \
9363 do { tree _t = (T); \
9364 if (_t != NULL_TREE \
9365 && _t != error_mark_node \
9366 && TREE_CODE (_t) != INTEGER_CST \
9367 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
9368 && (!fn \
9369 || (!TYPE_SIZES_GIMPLIFIED (type) \
9370 && !is_gimple_sizepos (_t)) \
9371 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
9372 return true; } while (0)
9374 if (type == error_mark_node)
9375 return false;
9377 /* If TYPE itself has variable size, it is variably modified. */
9378 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
9379 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
9381 switch (TREE_CODE (type))
9383 case POINTER_TYPE:
9384 case REFERENCE_TYPE:
9385 case VECTOR_TYPE:
9386 if (variably_modified_type_p (TREE_TYPE (type), fn))
9387 return true;
9388 break;
9390 case FUNCTION_TYPE:
9391 case METHOD_TYPE:
9392 /* If TYPE is a function type, it is variably modified if the
9393 return type is variably modified. */
9394 if (variably_modified_type_p (TREE_TYPE (type), fn))
9395 return true;
9396 break;
9398 case INTEGER_TYPE:
9399 case REAL_TYPE:
9400 case FIXED_POINT_TYPE:
9401 case ENUMERAL_TYPE:
9402 case BOOLEAN_TYPE:
9403 /* Scalar types are variably modified if their end points
9404 aren't constant. */
9405 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
9406 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
9407 break;
9409 case RECORD_TYPE:
9410 case UNION_TYPE:
9411 case QUAL_UNION_TYPE:
9412 /* We can't see if any of the fields are variably-modified by the
9413 definition we normally use, since that would produce infinite
9414 recursion via pointers. */
9415 /* This is variably modified if some field's type is. */
9416 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
9417 if (TREE_CODE (t) == FIELD_DECL)
9419 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
9420 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
9421 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
9423 if (TREE_CODE (type) == QUAL_UNION_TYPE)
9424 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
9426 break;
9428 case ARRAY_TYPE:
9429 /* Do not call ourselves to avoid infinite recursion. This is
9430 variably modified if the element type is. */
9431 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
9432 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
9433 break;
9435 default:
9436 break;
9439 /* The current language may have other cases to check, but in general,
9440 all other types are not variably modified. */
9441 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
9443 #undef RETURN_TRUE_IF_VAR
9446 /* Given a DECL or TYPE, return the scope in which it was declared, or
9447 NULL_TREE if there is no containing scope. */
9449 tree
9450 get_containing_scope (const_tree t)
9452 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
9455 /* Return the innermost context enclosing DECL that is
9456 a FUNCTION_DECL, or zero if none. */
9458 tree
9459 decl_function_context (const_tree decl)
9461 tree context;
9463 if (TREE_CODE (decl) == ERROR_MARK)
9464 return 0;
9466 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
9467 where we look up the function at runtime. Such functions always take
9468 a first argument of type 'pointer to real context'.
9470 C++ should really be fixed to use DECL_CONTEXT for the real context,
9471 and use something else for the "virtual context". */
9472 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
9473 context
9474 = TYPE_MAIN_VARIANT
9475 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
9476 else
9477 context = DECL_CONTEXT (decl);
9479 while (context && TREE_CODE (context) != FUNCTION_DECL)
9481 if (TREE_CODE (context) == BLOCK)
9482 context = BLOCK_SUPERCONTEXT (context);
9483 else
9484 context = get_containing_scope (context);
9487 return context;
9490 /* Return the innermost context enclosing DECL that is
9491 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
9492 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
9494 tree
9495 decl_type_context (const_tree decl)
9497 tree context = DECL_CONTEXT (decl);
9499 while (context)
9500 switch (TREE_CODE (context))
9502 case NAMESPACE_DECL:
9503 case TRANSLATION_UNIT_DECL:
9504 return NULL_TREE;
9506 case RECORD_TYPE:
9507 case UNION_TYPE:
9508 case QUAL_UNION_TYPE:
9509 return context;
9511 case TYPE_DECL:
9512 case FUNCTION_DECL:
9513 context = DECL_CONTEXT (context);
9514 break;
9516 case BLOCK:
9517 context = BLOCK_SUPERCONTEXT (context);
9518 break;
9520 default:
9521 gcc_unreachable ();
9524 return NULL_TREE;
9527 /* CALL is a CALL_EXPR. Return the declaration for the function
9528 called, or NULL_TREE if the called function cannot be
9529 determined. */
9531 tree
9532 get_callee_fndecl (const_tree call)
9534 tree addr;
9536 if (call == error_mark_node)
9537 return error_mark_node;
9539 /* It's invalid to call this function with anything but a
9540 CALL_EXPR. */
9541 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9543 /* The first operand to the CALL is the address of the function
9544 called. */
9545 addr = CALL_EXPR_FN (call);
9547 /* If there is no function, return early. */
9548 if (addr == NULL_TREE)
9549 return NULL_TREE;
9551 STRIP_NOPS (addr);
9553 /* If this is a readonly function pointer, extract its initial value. */
9554 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9555 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9556 && DECL_INITIAL (addr))
9557 addr = DECL_INITIAL (addr);
9559 /* If the address is just `&f' for some function `f', then we know
9560 that `f' is being called. */
9561 if (TREE_CODE (addr) == ADDR_EXPR
9562 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9563 return TREE_OPERAND (addr, 0);
9565 /* We couldn't figure out what was being called. */
9566 return NULL_TREE;
9569 /* If CALL_EXPR CALL calls a normal built-in function or an internal function,
9570 return the associated function code, otherwise return CFN_LAST. */
9572 combined_fn
9573 get_call_combined_fn (const_tree call)
9575 /* It's invalid to call this function with anything but a CALL_EXPR. */
9576 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9578 if (!CALL_EXPR_FN (call))
9579 return as_combined_fn (CALL_EXPR_IFN (call));
9581 tree fndecl = get_callee_fndecl (call);
9582 if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
9583 return as_combined_fn (DECL_FUNCTION_CODE (fndecl));
9585 return CFN_LAST;
9588 #define TREE_MEM_USAGE_SPACES 40
9590 /* Print debugging information about tree nodes generated during the compile,
9591 and any language-specific information. */
9593 void
9594 dump_tree_statistics (void)
9596 if (GATHER_STATISTICS)
9598 int i;
9599 int total_nodes, total_bytes;
9600 fprintf (stderr, "\nKind Nodes Bytes\n");
9601 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9602 total_nodes = total_bytes = 0;
9603 for (i = 0; i < (int) all_kinds; i++)
9605 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9606 tree_node_counts[i], tree_node_sizes[i]);
9607 total_nodes += tree_node_counts[i];
9608 total_bytes += tree_node_sizes[i];
9610 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9611 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9612 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9613 fprintf (stderr, "Code Nodes\n");
9614 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9615 for (i = 0; i < (int) MAX_TREE_CODES; i++)
9616 fprintf (stderr, "%-32s %7d\n", get_tree_code_name ((enum tree_code) i),
9617 tree_code_counts[i]);
9618 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES);
9619 fprintf (stderr, "\n");
9620 ssanames_print_statistics ();
9621 fprintf (stderr, "\n");
9622 phinodes_print_statistics ();
9623 fprintf (stderr, "\n");
9625 else
9626 fprintf (stderr, "(No per-node statistics)\n");
9628 print_type_hash_statistics ();
9629 print_debug_expr_statistics ();
9630 print_value_expr_statistics ();
9631 lang_hooks.print_statistics ();
9634 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9636 /* Generate a crc32 of the low BYTES bytes of VALUE. */
9638 unsigned
9639 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes)
9641 /* This relies on the raw feedback's top 4 bits being zero. */
9642 #define FEEDBACK(X) ((X) * 0x04c11db7)
9643 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \
9644 ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8))
9645 static const unsigned syndromes[16] =
9647 SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3),
9648 SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7),
9649 SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb),
9650 SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf),
9652 #undef FEEDBACK
9653 #undef SYNDROME
9655 value <<= (32 - bytes * 8);
9656 for (unsigned ix = bytes * 2; ix--; value <<= 4)
9658 unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf];
9660 chksum = (chksum << 4) ^ feedback;
9663 return chksum;
9666 /* Generate a crc32 of a string. */
9668 unsigned
9669 crc32_string (unsigned chksum, const char *string)
9672 chksum = crc32_byte (chksum, *string);
9673 while (*string++);
9674 return chksum;
9677 /* P is a string that will be used in a symbol. Mask out any characters
9678 that are not valid in that context. */
9680 void
9681 clean_symbol_name (char *p)
9683 for (; *p; p++)
9684 if (! (ISALNUM (*p)
9685 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
9686 || *p == '$'
9687 #endif
9688 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
9689 || *p == '.'
9690 #endif
9692 *p = '_';
9695 /* For anonymous aggregate types, we need some sort of name to
9696 hold on to. In practice, this should not appear, but it should
9697 not be harmful if it does. */
9698 bool
9699 anon_aggrname_p(const_tree id_node)
9701 #ifndef NO_DOT_IN_LABEL
9702 return (IDENTIFIER_POINTER (id_node)[0] == '.'
9703 && IDENTIFIER_POINTER (id_node)[1] == '_');
9704 #else /* NO_DOT_IN_LABEL */
9705 #ifndef NO_DOLLAR_IN_LABEL
9706 return (IDENTIFIER_POINTER (id_node)[0] == '$' \
9707 && IDENTIFIER_POINTER (id_node)[1] == '_');
9708 #else /* NO_DOLLAR_IN_LABEL */
9709 #define ANON_AGGRNAME_PREFIX "__anon_"
9710 return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX,
9711 sizeof (ANON_AGGRNAME_PREFIX) - 1));
9712 #endif /* NO_DOLLAR_IN_LABEL */
9713 #endif /* NO_DOT_IN_LABEL */
9716 /* Return a format for an anonymous aggregate name. */
9717 const char *
9718 anon_aggrname_format()
9720 #ifndef NO_DOT_IN_LABEL
9721 return "._%d";
9722 #else /* NO_DOT_IN_LABEL */
9723 #ifndef NO_DOLLAR_IN_LABEL
9724 return "$_%d";
9725 #else /* NO_DOLLAR_IN_LABEL */
9726 return "__anon_%d";
9727 #endif /* NO_DOLLAR_IN_LABEL */
9728 #endif /* NO_DOT_IN_LABEL */
9731 /* Generate a name for a special-purpose function.
9732 The generated name may need to be unique across the whole link.
9733 Changes to this function may also require corresponding changes to
9734 xstrdup_mask_random.
9735 TYPE is some string to identify the purpose of this function to the
9736 linker or collect2; it must start with an uppercase letter,
9737 one of:
9738 I - for constructors
9739 D - for destructors
9740 N - for C++ anonymous namespaces
9741 F - for DWARF unwind frame information. */
9743 tree
9744 get_file_function_name (const char *type)
9746 char *buf;
9747 const char *p;
9748 char *q;
9750 /* If we already have a name we know to be unique, just use that. */
9751 if (first_global_object_name)
9752 p = q = ASTRDUP (first_global_object_name);
9753 /* If the target is handling the constructors/destructors, they
9754 will be local to this file and the name is only necessary for
9755 debugging purposes.
9756 We also assign sub_I and sub_D sufixes to constructors called from
9757 the global static constructors. These are always local. */
9758 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9759 || (strncmp (type, "sub_", 4) == 0
9760 && (type[4] == 'I' || type[4] == 'D')))
9762 const char *file = main_input_filename;
9763 if (! file)
9764 file = LOCATION_FILE (input_location);
9765 /* Just use the file's basename, because the full pathname
9766 might be quite long. */
9767 p = q = ASTRDUP (lbasename (file));
9769 else
9771 /* Otherwise, the name must be unique across the entire link.
9772 We don't have anything that we know to be unique to this translation
9773 unit, so use what we do have and throw in some randomness. */
9774 unsigned len;
9775 const char *name = weak_global_object_name;
9776 const char *file = main_input_filename;
9778 if (! name)
9779 name = "";
9780 if (! file)
9781 file = LOCATION_FILE (input_location);
9783 len = strlen (file);
9784 q = (char *) alloca (9 + 19 + len + 1);
9785 memcpy (q, file, len + 1);
9787 snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9788 crc32_string (0, name), get_random_seed (false));
9790 p = q;
9793 clean_symbol_name (q);
9794 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9795 + strlen (type));
9797 /* Set up the name of the file-level functions we may need.
9798 Use a global object (which is already required to be unique over
9799 the program) rather than the file name (which imposes extra
9800 constraints). */
9801 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9803 return get_identifier (buf);
9806 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9808 /* Complain that the tree code of NODE does not match the expected 0
9809 terminated list of trailing codes. The trailing code list can be
9810 empty, for a more vague error message. FILE, LINE, and FUNCTION
9811 are of the caller. */
9813 void
9814 tree_check_failed (const_tree node, const char *file,
9815 int line, const char *function, ...)
9817 va_list args;
9818 const char *buffer;
9819 unsigned length = 0;
9820 enum tree_code code;
9822 va_start (args, function);
9823 while ((code = (enum tree_code) va_arg (args, int)))
9824 length += 4 + strlen (get_tree_code_name (code));
9825 va_end (args);
9826 if (length)
9828 char *tmp;
9829 va_start (args, function);
9830 length += strlen ("expected ");
9831 buffer = tmp = (char *) alloca (length);
9832 length = 0;
9833 while ((code = (enum tree_code) va_arg (args, int)))
9835 const char *prefix = length ? " or " : "expected ";
9837 strcpy (tmp + length, prefix);
9838 length += strlen (prefix);
9839 strcpy (tmp + length, get_tree_code_name (code));
9840 length += strlen (get_tree_code_name (code));
9842 va_end (args);
9844 else
9845 buffer = "unexpected node";
9847 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9848 buffer, get_tree_code_name (TREE_CODE (node)),
9849 function, trim_filename (file), line);
9852 /* Complain that the tree code of NODE does match the expected 0
9853 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9854 the caller. */
9856 void
9857 tree_not_check_failed (const_tree node, const char *file,
9858 int line, const char *function, ...)
9860 va_list args;
9861 char *buffer;
9862 unsigned length = 0;
9863 enum tree_code code;
9865 va_start (args, function);
9866 while ((code = (enum tree_code) va_arg (args, int)))
9867 length += 4 + strlen (get_tree_code_name (code));
9868 va_end (args);
9869 va_start (args, function);
9870 buffer = (char *) alloca (length);
9871 length = 0;
9872 while ((code = (enum tree_code) va_arg (args, int)))
9874 if (length)
9876 strcpy (buffer + length, " or ");
9877 length += 4;
9879 strcpy (buffer + length, get_tree_code_name (code));
9880 length += strlen (get_tree_code_name (code));
9882 va_end (args);
9884 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9885 buffer, get_tree_code_name (TREE_CODE (node)),
9886 function, trim_filename (file), line);
9889 /* Similar to tree_check_failed, except that we check for a class of tree
9890 code, given in CL. */
9892 void
9893 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9894 const char *file, int line, const char *function)
9896 internal_error
9897 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9898 TREE_CODE_CLASS_STRING (cl),
9899 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9900 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9903 /* Similar to tree_check_failed, except that instead of specifying a
9904 dozen codes, use the knowledge that they're all sequential. */
9906 void
9907 tree_range_check_failed (const_tree node, const char *file, int line,
9908 const char *function, enum tree_code c1,
9909 enum tree_code c2)
9911 char *buffer;
9912 unsigned length = 0;
9913 unsigned int c;
9915 for (c = c1; c <= c2; ++c)
9916 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9918 length += strlen ("expected ");
9919 buffer = (char *) alloca (length);
9920 length = 0;
9922 for (c = c1; c <= c2; ++c)
9924 const char *prefix = length ? " or " : "expected ";
9926 strcpy (buffer + length, prefix);
9927 length += strlen (prefix);
9928 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9929 length += strlen (get_tree_code_name ((enum tree_code) c));
9932 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9933 buffer, get_tree_code_name (TREE_CODE (node)),
9934 function, trim_filename (file), line);
9938 /* Similar to tree_check_failed, except that we check that a tree does
9939 not have the specified code, given in CL. */
9941 void
9942 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9943 const char *file, int line, const char *function)
9945 internal_error
9946 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9947 TREE_CODE_CLASS_STRING (cl),
9948 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9949 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9953 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9955 void
9956 omp_clause_check_failed (const_tree node, const char *file, int line,
9957 const char *function, enum omp_clause_code code)
9959 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9960 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9961 function, trim_filename (file), line);
9965 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9967 void
9968 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9969 const char *function, enum omp_clause_code c1,
9970 enum omp_clause_code c2)
9972 char *buffer;
9973 unsigned length = 0;
9974 unsigned int c;
9976 for (c = c1; c <= c2; ++c)
9977 length += 4 + strlen (omp_clause_code_name[c]);
9979 length += strlen ("expected ");
9980 buffer = (char *) alloca (length);
9981 length = 0;
9983 for (c = c1; c <= c2; ++c)
9985 const char *prefix = length ? " or " : "expected ";
9987 strcpy (buffer + length, prefix);
9988 length += strlen (prefix);
9989 strcpy (buffer + length, omp_clause_code_name[c]);
9990 length += strlen (omp_clause_code_name[c]);
9993 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9994 buffer, omp_clause_code_name[TREE_CODE (node)],
9995 function, trim_filename (file), line);
9999 #undef DEFTREESTRUCT
10000 #define DEFTREESTRUCT(VAL, NAME) NAME,
10002 static const char *ts_enum_names[] = {
10003 #include "treestruct.def"
10005 #undef DEFTREESTRUCT
10007 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
10009 /* Similar to tree_class_check_failed, except that we check for
10010 whether CODE contains the tree structure identified by EN. */
10012 void
10013 tree_contains_struct_check_failed (const_tree node,
10014 const enum tree_node_structure_enum en,
10015 const char *file, int line,
10016 const char *function)
10018 internal_error
10019 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
10020 TS_ENUM_NAME (en),
10021 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
10025 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10026 (dynamically sized) vector. */
10028 void
10029 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
10030 const char *function)
10032 internal_error
10033 ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
10034 idx + 1, len, function, trim_filename (file), line);
10037 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
10038 (dynamically sized) vector. */
10040 void
10041 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
10042 const char *function)
10044 internal_error
10045 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
10046 idx + 1, len, function, trim_filename (file), line);
10049 /* Similar to above, except that the check is for the bounds of the operand
10050 vector of an expression node EXP. */
10052 void
10053 tree_operand_check_failed (int idx, const_tree exp, const char *file,
10054 int line, const char *function)
10056 enum tree_code code = TREE_CODE (exp);
10057 internal_error
10058 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
10059 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
10060 function, trim_filename (file), line);
10063 /* Similar to above, except that the check is for the number of
10064 operands of an OMP_CLAUSE node. */
10066 void
10067 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
10068 int line, const char *function)
10070 internal_error
10071 ("tree check: accessed operand %d of omp_clause %s with %d operands "
10072 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
10073 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
10074 trim_filename (file), line);
10076 #endif /* ENABLE_TREE_CHECKING */
10078 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
10079 and mapped to the machine mode MODE. Initialize its fields and build
10080 the information necessary for debugging output. */
10082 static tree
10083 make_vector_type (tree innertype, int nunits, machine_mode mode)
10085 tree t;
10086 inchash::hash hstate;
10087 tree mv_innertype = TYPE_MAIN_VARIANT (innertype);
10089 t = make_node (VECTOR_TYPE);
10090 TREE_TYPE (t) = mv_innertype;
10091 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
10092 SET_TYPE_MODE (t, mode);
10094 if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p)
10095 SET_TYPE_STRUCTURAL_EQUALITY (t);
10096 else if ((TYPE_CANONICAL (mv_innertype) != innertype
10097 || mode != VOIDmode)
10098 && !VECTOR_BOOLEAN_TYPE_P (t))
10099 TYPE_CANONICAL (t)
10100 = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode);
10102 layout_type (t);
10104 hstate.add_wide_int (VECTOR_TYPE);
10105 hstate.add_wide_int (nunits);
10106 hstate.add_wide_int (mode);
10107 hstate.add_object (TYPE_HASH (TREE_TYPE (t)));
10108 t = type_hash_canon (hstate.end (), t);
10110 /* We have built a main variant, based on the main variant of the
10111 inner type. Use it to build the variant we return. */
10112 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
10113 && TREE_TYPE (t) != innertype)
10114 return build_type_attribute_qual_variant (t,
10115 TYPE_ATTRIBUTES (innertype),
10116 TYPE_QUALS (innertype));
10118 return t;
10121 static tree
10122 make_or_reuse_type (unsigned size, int unsignedp)
10124 int i;
10126 if (size == INT_TYPE_SIZE)
10127 return unsignedp ? unsigned_type_node : integer_type_node;
10128 if (size == CHAR_TYPE_SIZE)
10129 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
10130 if (size == SHORT_TYPE_SIZE)
10131 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
10132 if (size == LONG_TYPE_SIZE)
10133 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
10134 if (size == LONG_LONG_TYPE_SIZE)
10135 return (unsignedp ? long_long_unsigned_type_node
10136 : long_long_integer_type_node);
10138 for (i = 0; i < NUM_INT_N_ENTS; i ++)
10139 if (size == int_n_data[i].bitsize
10140 && int_n_enabled_p[i])
10141 return (unsignedp ? int_n_trees[i].unsigned_type
10142 : int_n_trees[i].signed_type);
10144 if (unsignedp)
10145 return make_unsigned_type (size);
10146 else
10147 return make_signed_type (size);
10150 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
10152 static tree
10153 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
10155 if (satp)
10157 if (size == SHORT_FRACT_TYPE_SIZE)
10158 return unsignedp ? sat_unsigned_short_fract_type_node
10159 : sat_short_fract_type_node;
10160 if (size == FRACT_TYPE_SIZE)
10161 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
10162 if (size == LONG_FRACT_TYPE_SIZE)
10163 return unsignedp ? sat_unsigned_long_fract_type_node
10164 : sat_long_fract_type_node;
10165 if (size == LONG_LONG_FRACT_TYPE_SIZE)
10166 return unsignedp ? sat_unsigned_long_long_fract_type_node
10167 : sat_long_long_fract_type_node;
10169 else
10171 if (size == SHORT_FRACT_TYPE_SIZE)
10172 return unsignedp ? unsigned_short_fract_type_node
10173 : short_fract_type_node;
10174 if (size == FRACT_TYPE_SIZE)
10175 return unsignedp ? unsigned_fract_type_node : fract_type_node;
10176 if (size == LONG_FRACT_TYPE_SIZE)
10177 return unsignedp ? unsigned_long_fract_type_node
10178 : long_fract_type_node;
10179 if (size == LONG_LONG_FRACT_TYPE_SIZE)
10180 return unsignedp ? unsigned_long_long_fract_type_node
10181 : long_long_fract_type_node;
10184 return make_fract_type (size, unsignedp, satp);
10187 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
10189 static tree
10190 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
10192 if (satp)
10194 if (size == SHORT_ACCUM_TYPE_SIZE)
10195 return unsignedp ? sat_unsigned_short_accum_type_node
10196 : sat_short_accum_type_node;
10197 if (size == ACCUM_TYPE_SIZE)
10198 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
10199 if (size == LONG_ACCUM_TYPE_SIZE)
10200 return unsignedp ? sat_unsigned_long_accum_type_node
10201 : sat_long_accum_type_node;
10202 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10203 return unsignedp ? sat_unsigned_long_long_accum_type_node
10204 : sat_long_long_accum_type_node;
10206 else
10208 if (size == SHORT_ACCUM_TYPE_SIZE)
10209 return unsignedp ? unsigned_short_accum_type_node
10210 : short_accum_type_node;
10211 if (size == ACCUM_TYPE_SIZE)
10212 return unsignedp ? unsigned_accum_type_node : accum_type_node;
10213 if (size == LONG_ACCUM_TYPE_SIZE)
10214 return unsignedp ? unsigned_long_accum_type_node
10215 : long_accum_type_node;
10216 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
10217 return unsignedp ? unsigned_long_long_accum_type_node
10218 : long_long_accum_type_node;
10221 return make_accum_type (size, unsignedp, satp);
10225 /* Create an atomic variant node for TYPE. This routine is called
10226 during initialization of data types to create the 5 basic atomic
10227 types. The generic build_variant_type function requires these to
10228 already be set up in order to function properly, so cannot be
10229 called from there. If ALIGN is non-zero, then ensure alignment is
10230 overridden to this value. */
10232 static tree
10233 build_atomic_base (tree type, unsigned int align)
10235 tree t;
10237 /* Make sure its not already registered. */
10238 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
10239 return t;
10241 t = build_variant_type_copy (type);
10242 set_type_quals (t, TYPE_QUAL_ATOMIC);
10244 if (align)
10245 SET_TYPE_ALIGN (t, align);
10247 return t;
10250 /* Information about the _FloatN and _FloatNx types. This must be in
10251 the same order as the corresponding TI_* enum values. */
10252 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] =
10254 { 16, false },
10255 { 32, false },
10256 { 64, false },
10257 { 128, false },
10258 { 32, true },
10259 { 64, true },
10260 { 128, true },
10264 /* Create nodes for all integer types (and error_mark_node) using the sizes
10265 of C datatypes. SIGNED_CHAR specifies whether char is signed. */
10267 void
10268 build_common_tree_nodes (bool signed_char)
10270 int i;
10272 error_mark_node = make_node (ERROR_MARK);
10273 TREE_TYPE (error_mark_node) = error_mark_node;
10275 initialize_sizetypes ();
10277 /* Define both `signed char' and `unsigned char'. */
10278 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
10279 TYPE_STRING_FLAG (signed_char_type_node) = 1;
10280 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
10281 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
10283 /* Define `char', which is like either `signed char' or `unsigned char'
10284 but not the same as either. */
10285 char_type_node
10286 = (signed_char
10287 ? make_signed_type (CHAR_TYPE_SIZE)
10288 : make_unsigned_type (CHAR_TYPE_SIZE));
10289 TYPE_STRING_FLAG (char_type_node) = 1;
10291 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
10292 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
10293 integer_type_node = make_signed_type (INT_TYPE_SIZE);
10294 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
10295 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
10296 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
10297 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
10298 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
10300 for (i = 0; i < NUM_INT_N_ENTS; i ++)
10302 int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
10303 int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
10304 TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
10305 TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
10307 if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
10308 && int_n_enabled_p[i])
10310 integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
10311 integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
10315 /* Define a boolean type. This type only represents boolean values but
10316 may be larger than char depending on the value of BOOL_TYPE_SIZE. */
10317 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
10318 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
10319 TYPE_PRECISION (boolean_type_node) = 1;
10320 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
10322 /* Define what type to use for size_t. */
10323 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
10324 size_type_node = unsigned_type_node;
10325 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
10326 size_type_node = long_unsigned_type_node;
10327 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
10328 size_type_node = long_long_unsigned_type_node;
10329 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
10330 size_type_node = short_unsigned_type_node;
10331 else
10333 int i;
10335 size_type_node = NULL_TREE;
10336 for (i = 0; i < NUM_INT_N_ENTS; i++)
10337 if (int_n_enabled_p[i])
10339 char name[50];
10340 sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
10342 if (strcmp (name, SIZE_TYPE) == 0)
10344 size_type_node = int_n_trees[i].unsigned_type;
10347 if (size_type_node == NULL_TREE)
10348 gcc_unreachable ();
10351 /* Define what type to use for ptrdiff_t. */
10352 if (strcmp (PTRDIFF_TYPE, "int") == 0)
10353 ptrdiff_type_node = integer_type_node;
10354 else if (strcmp (PTRDIFF_TYPE, "long int") == 0)
10355 ptrdiff_type_node = long_integer_type_node;
10356 else if (strcmp (PTRDIFF_TYPE, "long long int") == 0)
10357 ptrdiff_type_node = long_long_integer_type_node;
10358 else if (strcmp (PTRDIFF_TYPE, "short int") == 0)
10359 ptrdiff_type_node = short_integer_type_node;
10360 else
10362 ptrdiff_type_node = NULL_TREE;
10363 for (int i = 0; i < NUM_INT_N_ENTS; i++)
10364 if (int_n_enabled_p[i])
10366 char name[50];
10367 sprintf (name, "__int%d", int_n_data[i].bitsize);
10368 if (strcmp (name, PTRDIFF_TYPE) == 0)
10369 ptrdiff_type_node = int_n_trees[i].signed_type;
10371 if (ptrdiff_type_node == NULL_TREE)
10372 gcc_unreachable ();
10375 /* Fill in the rest of the sized types. Reuse existing type nodes
10376 when possible. */
10377 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
10378 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
10379 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
10380 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
10381 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
10383 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
10384 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
10385 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
10386 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
10387 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
10389 /* Don't call build_qualified type for atomics. That routine does
10390 special processing for atomics, and until they are initialized
10391 it's better not to make that call.
10393 Check to see if there is a target override for atomic types. */
10395 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
10396 targetm.atomic_align_for_mode (QImode));
10397 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
10398 targetm.atomic_align_for_mode (HImode));
10399 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
10400 targetm.atomic_align_for_mode (SImode));
10401 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
10402 targetm.atomic_align_for_mode (DImode));
10403 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
10404 targetm.atomic_align_for_mode (TImode));
10406 access_public_node = get_identifier ("public");
10407 access_protected_node = get_identifier ("protected");
10408 access_private_node = get_identifier ("private");
10410 /* Define these next since types below may used them. */
10411 integer_zero_node = build_int_cst (integer_type_node, 0);
10412 integer_one_node = build_int_cst (integer_type_node, 1);
10413 integer_three_node = build_int_cst (integer_type_node, 3);
10414 integer_minus_one_node = build_int_cst (integer_type_node, -1);
10416 size_zero_node = size_int (0);
10417 size_one_node = size_int (1);
10418 bitsize_zero_node = bitsize_int (0);
10419 bitsize_one_node = bitsize_int (1);
10420 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
10422 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
10423 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
10425 void_type_node = make_node (VOID_TYPE);
10426 layout_type (void_type_node);
10428 pointer_bounds_type_node = targetm.chkp_bound_type ();
10430 /* We are not going to have real types in C with less than byte alignment,
10431 so we might as well not have any types that claim to have it. */
10432 SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT);
10433 TYPE_USER_ALIGN (void_type_node) = 0;
10435 void_node = make_node (VOID_CST);
10436 TREE_TYPE (void_node) = void_type_node;
10438 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
10439 layout_type (TREE_TYPE (null_pointer_node));
10441 ptr_type_node = build_pointer_type (void_type_node);
10442 const_ptr_type_node
10443 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
10444 fileptr_type_node = ptr_type_node;
10445 const_tm_ptr_type_node = const_ptr_type_node;
10447 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
10449 float_type_node = make_node (REAL_TYPE);
10450 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
10451 layout_type (float_type_node);
10453 double_type_node = make_node (REAL_TYPE);
10454 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
10455 layout_type (double_type_node);
10457 long_double_type_node = make_node (REAL_TYPE);
10458 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
10459 layout_type (long_double_type_node);
10461 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10463 int n = floatn_nx_types[i].n;
10464 bool extended = floatn_nx_types[i].extended;
10465 machine_mode mode = targetm.floatn_mode (n, extended);
10466 if (mode == VOIDmode)
10467 continue;
10468 int precision = GET_MODE_PRECISION (mode);
10469 /* Work around the rs6000 KFmode having precision 113 not
10470 128. */
10471 const struct real_format *fmt = REAL_MODE_FORMAT (mode);
10472 gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3);
10473 int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin);
10474 if (!extended)
10475 gcc_assert (min_precision == n);
10476 if (precision < min_precision)
10477 precision = min_precision;
10478 FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE);
10479 TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision;
10480 layout_type (FLOATN_NX_TYPE_NODE (i));
10481 SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode);
10484 float_ptr_type_node = build_pointer_type (float_type_node);
10485 double_ptr_type_node = build_pointer_type (double_type_node);
10486 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
10487 integer_ptr_type_node = build_pointer_type (integer_type_node);
10489 /* Fixed size integer types. */
10490 uint16_type_node = make_or_reuse_type (16, 1);
10491 uint32_type_node = make_or_reuse_type (32, 1);
10492 uint64_type_node = make_or_reuse_type (64, 1);
10494 /* Decimal float types. */
10495 dfloat32_type_node = make_node (REAL_TYPE);
10496 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
10497 SET_TYPE_MODE (dfloat32_type_node, SDmode);
10498 layout_type (dfloat32_type_node);
10499 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
10501 dfloat64_type_node = make_node (REAL_TYPE);
10502 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
10503 SET_TYPE_MODE (dfloat64_type_node, DDmode);
10504 layout_type (dfloat64_type_node);
10505 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
10507 dfloat128_type_node = make_node (REAL_TYPE);
10508 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
10509 SET_TYPE_MODE (dfloat128_type_node, TDmode);
10510 layout_type (dfloat128_type_node);
10511 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
10513 complex_integer_type_node = build_complex_type (integer_type_node, true);
10514 complex_float_type_node = build_complex_type (float_type_node, true);
10515 complex_double_type_node = build_complex_type (double_type_node, true);
10516 complex_long_double_type_node = build_complex_type (long_double_type_node,
10517 true);
10519 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++)
10521 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE)
10522 COMPLEX_FLOATN_NX_TYPE_NODE (i)
10523 = build_complex_type (FLOATN_NX_TYPE_NODE (i));
10526 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
10527 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
10528 sat_ ## KIND ## _type_node = \
10529 make_sat_signed_ ## KIND ## _type (SIZE); \
10530 sat_unsigned_ ## KIND ## _type_node = \
10531 make_sat_unsigned_ ## KIND ## _type (SIZE); \
10532 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10533 unsigned_ ## KIND ## _type_node = \
10534 make_unsigned_ ## KIND ## _type (SIZE);
10536 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
10537 sat_ ## WIDTH ## KIND ## _type_node = \
10538 make_sat_signed_ ## KIND ## _type (SIZE); \
10539 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
10540 make_sat_unsigned_ ## KIND ## _type (SIZE); \
10541 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
10542 unsigned_ ## WIDTH ## KIND ## _type_node = \
10543 make_unsigned_ ## KIND ## _type (SIZE);
10545 /* Make fixed-point type nodes based on four different widths. */
10546 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
10547 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
10548 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
10549 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
10550 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
10552 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
10553 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
10554 NAME ## _type_node = \
10555 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
10556 u ## NAME ## _type_node = \
10557 make_or_reuse_unsigned_ ## KIND ## _type \
10558 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
10559 sat_ ## NAME ## _type_node = \
10560 make_or_reuse_sat_signed_ ## KIND ## _type \
10561 (GET_MODE_BITSIZE (MODE ## mode)); \
10562 sat_u ## NAME ## _type_node = \
10563 make_or_reuse_sat_unsigned_ ## KIND ## _type \
10564 (GET_MODE_BITSIZE (U ## MODE ## mode));
10566 /* Fixed-point type and mode nodes. */
10567 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
10568 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
10569 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
10570 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
10571 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
10572 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
10573 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
10574 MAKE_FIXED_MODE_NODE (accum, ha, HA)
10575 MAKE_FIXED_MODE_NODE (accum, sa, SA)
10576 MAKE_FIXED_MODE_NODE (accum, da, DA)
10577 MAKE_FIXED_MODE_NODE (accum, ta, TA)
10580 tree t = targetm.build_builtin_va_list ();
10582 /* Many back-ends define record types without setting TYPE_NAME.
10583 If we copied the record type here, we'd keep the original
10584 record type without a name. This breaks name mangling. So,
10585 don't copy record types and let c_common_nodes_and_builtins()
10586 declare the type to be __builtin_va_list. */
10587 if (TREE_CODE (t) != RECORD_TYPE)
10588 t = build_variant_type_copy (t);
10590 va_list_type_node = t;
10594 /* Modify DECL for given flags.
10595 TM_PURE attribute is set only on types, so the function will modify
10596 DECL's type when ECF_TM_PURE is used. */
10598 void
10599 set_call_expr_flags (tree decl, int flags)
10601 if (flags & ECF_NOTHROW)
10602 TREE_NOTHROW (decl) = 1;
10603 if (flags & ECF_CONST)
10604 TREE_READONLY (decl) = 1;
10605 if (flags & ECF_PURE)
10606 DECL_PURE_P (decl) = 1;
10607 if (flags & ECF_LOOPING_CONST_OR_PURE)
10608 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
10609 if (flags & ECF_NOVOPS)
10610 DECL_IS_NOVOPS (decl) = 1;
10611 if (flags & ECF_NORETURN)
10612 TREE_THIS_VOLATILE (decl) = 1;
10613 if (flags & ECF_MALLOC)
10614 DECL_IS_MALLOC (decl) = 1;
10615 if (flags & ECF_RETURNS_TWICE)
10616 DECL_IS_RETURNS_TWICE (decl) = 1;
10617 if (flags & ECF_LEAF)
10618 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
10619 NULL, DECL_ATTRIBUTES (decl));
10620 if (flags & ECF_RET1)
10621 DECL_ATTRIBUTES (decl)
10622 = tree_cons (get_identifier ("fn spec"),
10623 build_tree_list (NULL_TREE, build_string (1, "1")),
10624 DECL_ATTRIBUTES (decl));
10625 if ((flags & ECF_TM_PURE) && flag_tm)
10626 apply_tm_attr (decl, get_identifier ("transaction_pure"));
10627 /* Looping const or pure is implied by noreturn.
10628 There is currently no way to declare looping const or looping pure alone. */
10629 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
10630 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
10634 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
10636 static void
10637 local_define_builtin (const char *name, tree type, enum built_in_function code,
10638 const char *library_name, int ecf_flags)
10640 tree decl;
10642 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10643 library_name, NULL_TREE);
10644 set_call_expr_flags (decl, ecf_flags);
10646 set_builtin_decl (code, decl, true);
10649 /* Call this function after instantiating all builtins that the language
10650 front end cares about. This will build the rest of the builtins
10651 and internal functions that are relied upon by the tree optimizers and
10652 the middle-end. */
10654 void
10655 build_common_builtin_nodes (void)
10657 tree tmp, ftype;
10658 int ecf_flags;
10660 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)
10661 || !builtin_decl_explicit_p (BUILT_IN_ABORT))
10663 ftype = build_function_type (void_type_node, void_list_node);
10664 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10665 local_define_builtin ("__builtin_unreachable", ftype,
10666 BUILT_IN_UNREACHABLE,
10667 "__builtin_unreachable",
10668 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10669 | ECF_CONST);
10670 if (!builtin_decl_explicit_p (BUILT_IN_ABORT))
10671 local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT,
10672 "abort",
10673 ECF_LEAF | ECF_NORETURN | ECF_CONST);
10676 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10677 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10679 ftype = build_function_type_list (ptr_type_node,
10680 ptr_type_node, const_ptr_type_node,
10681 size_type_node, NULL_TREE);
10683 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10684 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10685 "memcpy", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10686 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10687 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10688 "memmove", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10691 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10693 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10694 const_ptr_type_node, size_type_node,
10695 NULL_TREE);
10696 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10697 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10700 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10702 ftype = build_function_type_list (ptr_type_node,
10703 ptr_type_node, integer_type_node,
10704 size_type_node, NULL_TREE);
10705 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10706 "memset", ECF_NOTHROW | ECF_LEAF | ECF_RET1);
10709 /* If we're checking the stack, `alloca' can throw. */
10710 const int alloca_flags
10711 = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW);
10713 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10715 ftype = build_function_type_list (ptr_type_node,
10716 size_type_node, NULL_TREE);
10717 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10718 "alloca", alloca_flags);
10721 ftype = build_function_type_list (ptr_type_node, size_type_node,
10722 size_type_node, NULL_TREE);
10723 local_define_builtin ("__builtin_alloca_with_align", ftype,
10724 BUILT_IN_ALLOCA_WITH_ALIGN,
10725 "__builtin_alloca_with_align",
10726 alloca_flags);
10728 ftype = build_function_type_list (void_type_node,
10729 ptr_type_node, ptr_type_node,
10730 ptr_type_node, NULL_TREE);
10731 local_define_builtin ("__builtin_init_trampoline", ftype,
10732 BUILT_IN_INIT_TRAMPOLINE,
10733 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10734 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10735 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10736 "__builtin_init_heap_trampoline",
10737 ECF_NOTHROW | ECF_LEAF);
10738 local_define_builtin ("__builtin_init_descriptor", ftype,
10739 BUILT_IN_INIT_DESCRIPTOR,
10740 "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF);
10742 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10743 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10744 BUILT_IN_ADJUST_TRAMPOLINE,
10745 "__builtin_adjust_trampoline",
10746 ECF_CONST | ECF_NOTHROW);
10747 local_define_builtin ("__builtin_adjust_descriptor", ftype,
10748 BUILT_IN_ADJUST_DESCRIPTOR,
10749 "__builtin_adjust_descriptor",
10750 ECF_CONST | ECF_NOTHROW);
10752 ftype = build_function_type_list (void_type_node,
10753 ptr_type_node, ptr_type_node, NULL_TREE);
10754 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10755 BUILT_IN_NONLOCAL_GOTO,
10756 "__builtin_nonlocal_goto",
10757 ECF_NORETURN | ECF_NOTHROW);
10759 ftype = build_function_type_list (void_type_node,
10760 ptr_type_node, ptr_type_node, NULL_TREE);
10761 local_define_builtin ("__builtin_setjmp_setup", ftype,
10762 BUILT_IN_SETJMP_SETUP,
10763 "__builtin_setjmp_setup", ECF_NOTHROW);
10765 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10766 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10767 BUILT_IN_SETJMP_RECEIVER,
10768 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10770 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10771 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10772 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10774 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10775 local_define_builtin ("__builtin_stack_restore", ftype,
10776 BUILT_IN_STACK_RESTORE,
10777 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10779 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10780 const_ptr_type_node, size_type_node,
10781 NULL_TREE);
10782 local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ,
10783 "__builtin_memcmp_eq",
10784 ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10786 /* If there's a possibility that we might use the ARM EABI, build the
10787 alternate __cxa_end_cleanup node used to resume from C++ and Java. */
10788 if (targetm.arm_eabi_unwinder)
10790 ftype = build_function_type_list (void_type_node, NULL_TREE);
10791 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10792 BUILT_IN_CXA_END_CLEANUP,
10793 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10796 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10797 local_define_builtin ("__builtin_unwind_resume", ftype,
10798 BUILT_IN_UNWIND_RESUME,
10799 ((targetm_common.except_unwind_info (&global_options)
10800 == UI_SJLJ)
10801 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10802 ECF_NORETURN);
10804 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10806 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10807 NULL_TREE);
10808 local_define_builtin ("__builtin_return_address", ftype,
10809 BUILT_IN_RETURN_ADDRESS,
10810 "__builtin_return_address",
10811 ECF_NOTHROW);
10814 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10815 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10817 ftype = build_function_type_list (void_type_node, ptr_type_node,
10818 ptr_type_node, NULL_TREE);
10819 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10820 local_define_builtin ("__cyg_profile_func_enter", ftype,
10821 BUILT_IN_PROFILE_FUNC_ENTER,
10822 "__cyg_profile_func_enter", 0);
10823 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10824 local_define_builtin ("__cyg_profile_func_exit", ftype,
10825 BUILT_IN_PROFILE_FUNC_EXIT,
10826 "__cyg_profile_func_exit", 0);
10829 /* The exception object and filter values from the runtime. The argument
10830 must be zero before exception lowering, i.e. from the front end. After
10831 exception lowering, it will be the region number for the exception
10832 landing pad. These functions are PURE instead of CONST to prevent
10833 them from being hoisted past the exception edge that will initialize
10834 its value in the landing pad. */
10835 ftype = build_function_type_list (ptr_type_node,
10836 integer_type_node, NULL_TREE);
10837 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10838 /* Only use TM_PURE if we have TM language support. */
10839 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10840 ecf_flags |= ECF_TM_PURE;
10841 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10842 "__builtin_eh_pointer", ecf_flags);
10844 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10845 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10846 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10847 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10849 ftype = build_function_type_list (void_type_node,
10850 integer_type_node, integer_type_node,
10851 NULL_TREE);
10852 local_define_builtin ("__builtin_eh_copy_values", ftype,
10853 BUILT_IN_EH_COPY_VALUES,
10854 "__builtin_eh_copy_values", ECF_NOTHROW);
10856 /* Complex multiplication and division. These are handled as builtins
10857 rather than optabs because emit_library_call_value doesn't support
10858 complex. Further, we can do slightly better with folding these
10859 beasties if the real and complex parts of the arguments are separate. */
10861 int mode;
10863 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10865 char mode_name_buf[4], *q;
10866 const char *p;
10867 enum built_in_function mcode, dcode;
10868 tree type, inner_type;
10869 const char *prefix = "__";
10871 if (targetm.libfunc_gnu_prefix)
10872 prefix = "__gnu_";
10874 type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10875 if (type == NULL)
10876 continue;
10877 inner_type = TREE_TYPE (type);
10879 ftype = build_function_type_list (type, inner_type, inner_type,
10880 inner_type, inner_type, NULL_TREE);
10882 mcode = ((enum built_in_function)
10883 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10884 dcode = ((enum built_in_function)
10885 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10887 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10888 *q = TOLOWER (*p);
10889 *q = '\0';
10891 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10892 NULL);
10893 local_define_builtin (built_in_names[mcode], ftype, mcode,
10894 built_in_names[mcode],
10895 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10897 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10898 NULL);
10899 local_define_builtin (built_in_names[dcode], ftype, dcode,
10900 built_in_names[dcode],
10901 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10905 init_internal_fns ();
10908 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10909 better way.
10911 If we requested a pointer to a vector, build up the pointers that
10912 we stripped off while looking for the inner type. Similarly for
10913 return values from functions.
10915 The argument TYPE is the top of the chain, and BOTTOM is the
10916 new type which we will point to. */
10918 tree
10919 reconstruct_complex_type (tree type, tree bottom)
10921 tree inner, outer;
10923 if (TREE_CODE (type) == POINTER_TYPE)
10925 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10926 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10927 TYPE_REF_CAN_ALIAS_ALL (type));
10929 else if (TREE_CODE (type) == REFERENCE_TYPE)
10931 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10932 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10933 TYPE_REF_CAN_ALIAS_ALL (type));
10935 else if (TREE_CODE (type) == ARRAY_TYPE)
10937 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10938 outer = build_array_type (inner, TYPE_DOMAIN (type));
10940 else if (TREE_CODE (type) == FUNCTION_TYPE)
10942 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10943 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10945 else if (TREE_CODE (type) == METHOD_TYPE)
10947 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10948 /* The build_method_type_directly() routine prepends 'this' to argument list,
10949 so we must compensate by getting rid of it. */
10950 outer
10951 = build_method_type_directly
10952 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10953 inner,
10954 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10956 else if (TREE_CODE (type) == OFFSET_TYPE)
10958 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10959 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10961 else
10962 return bottom;
10964 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10965 TYPE_QUALS (type));
10968 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10969 the inner type. */
10970 tree
10971 build_vector_type_for_mode (tree innertype, machine_mode mode)
10973 int nunits;
10975 switch (GET_MODE_CLASS (mode))
10977 case MODE_VECTOR_INT:
10978 case MODE_VECTOR_FLOAT:
10979 case MODE_VECTOR_FRACT:
10980 case MODE_VECTOR_UFRACT:
10981 case MODE_VECTOR_ACCUM:
10982 case MODE_VECTOR_UACCUM:
10983 nunits = GET_MODE_NUNITS (mode);
10984 break;
10986 case MODE_INT:
10987 /* Check that there are no leftover bits. */
10988 gcc_assert (GET_MODE_BITSIZE (mode)
10989 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10991 nunits = GET_MODE_BITSIZE (mode)
10992 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10993 break;
10995 default:
10996 gcc_unreachable ();
10999 return make_vector_type (innertype, nunits, mode);
11002 /* Similarly, but takes the inner type and number of units, which must be
11003 a power of two. */
11005 tree
11006 build_vector_type (tree innertype, int nunits)
11008 return make_vector_type (innertype, nunits, VOIDmode);
11011 /* Build truth vector with specified length and number of units. */
11013 tree
11014 build_truth_vector_type (unsigned nunits, unsigned vector_size)
11016 machine_mode mask_mode = targetm.vectorize.get_mask_mode (nunits,
11017 vector_size);
11019 gcc_assert (mask_mode != VOIDmode);
11021 unsigned HOST_WIDE_INT vsize;
11022 if (mask_mode == BLKmode)
11023 vsize = vector_size * BITS_PER_UNIT;
11024 else
11025 vsize = GET_MODE_BITSIZE (mask_mode);
11027 unsigned HOST_WIDE_INT esize = vsize / nunits;
11028 gcc_assert (esize * nunits == vsize);
11030 tree bool_type = build_nonstandard_boolean_type (esize);
11032 return make_vector_type (bool_type, nunits, mask_mode);
11035 /* Returns a vector type corresponding to a comparison of VECTYPE. */
11037 tree
11038 build_same_sized_truth_vector_type (tree vectype)
11040 if (VECTOR_BOOLEAN_TYPE_P (vectype))
11041 return vectype;
11043 unsigned HOST_WIDE_INT size = GET_MODE_SIZE (TYPE_MODE (vectype));
11045 if (!size)
11046 size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
11048 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
11051 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
11053 tree
11054 build_opaque_vector_type (tree innertype, int nunits)
11056 tree t = make_vector_type (innertype, nunits, VOIDmode);
11057 tree cand;
11058 /* We always build the non-opaque variant before the opaque one,
11059 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
11060 cand = TYPE_NEXT_VARIANT (t);
11061 if (cand
11062 && TYPE_VECTOR_OPAQUE (cand)
11063 && check_qualified_type (cand, t, TYPE_QUALS (t)))
11064 return cand;
11065 /* Othewise build a variant type and make sure to queue it after
11066 the non-opaque type. */
11067 cand = build_distinct_type_copy (t);
11068 TYPE_VECTOR_OPAQUE (cand) = true;
11069 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
11070 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
11071 TYPE_NEXT_VARIANT (t) = cand;
11072 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
11073 return cand;
11077 /* Given an initializer INIT, return TRUE if INIT is zero or some
11078 aggregate of zeros. Otherwise return FALSE. */
11079 bool
11080 initializer_zerop (const_tree init)
11082 tree elt;
11084 STRIP_NOPS (init);
11086 switch (TREE_CODE (init))
11088 case INTEGER_CST:
11089 return integer_zerop (init);
11091 case REAL_CST:
11092 /* ??? Note that this is not correct for C4X float formats. There,
11093 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
11094 negative exponent. */
11095 return real_zerop (init)
11096 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
11098 case FIXED_CST:
11099 return fixed_zerop (init);
11101 case COMPLEX_CST:
11102 return integer_zerop (init)
11103 || (real_zerop (init)
11104 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
11105 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
11107 case VECTOR_CST:
11109 unsigned i;
11110 for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
11111 if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
11112 return false;
11113 return true;
11116 case CONSTRUCTOR:
11118 unsigned HOST_WIDE_INT idx;
11120 if (TREE_CLOBBER_P (init))
11121 return false;
11122 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
11123 if (!initializer_zerop (elt))
11124 return false;
11125 return true;
11128 case STRING_CST:
11130 int i;
11132 /* We need to loop through all elements to handle cases like
11133 "\0" and "\0foobar". */
11134 for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
11135 if (TREE_STRING_POINTER (init)[i] != '\0')
11136 return false;
11138 return true;
11141 default:
11142 return false;
11146 /* Check if vector VEC consists of all the equal elements and
11147 that the number of elements corresponds to the type of VEC.
11148 The function returns first element of the vector
11149 or NULL_TREE if the vector is not uniform. */
11150 tree
11151 uniform_vector_p (const_tree vec)
11153 tree first, t;
11154 unsigned i;
11156 if (vec == NULL_TREE)
11157 return NULL_TREE;
11159 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
11161 if (TREE_CODE (vec) == VECTOR_CST)
11163 first = VECTOR_CST_ELT (vec, 0);
11164 for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
11165 if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
11166 return NULL_TREE;
11168 return first;
11171 else if (TREE_CODE (vec) == CONSTRUCTOR)
11173 first = error_mark_node;
11175 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
11177 if (i == 0)
11179 first = t;
11180 continue;
11182 if (!operand_equal_p (first, t, 0))
11183 return NULL_TREE;
11185 if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
11186 return NULL_TREE;
11188 return first;
11191 return NULL_TREE;
11194 /* Build an empty statement at location LOC. */
11196 tree
11197 build_empty_stmt (location_t loc)
11199 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
11200 SET_EXPR_LOCATION (t, loc);
11201 return t;
11205 /* Build an OpenMP clause with code CODE. LOC is the location of the
11206 clause. */
11208 tree
11209 build_omp_clause (location_t loc, enum omp_clause_code code)
11211 tree t;
11212 int size, length;
11214 length = omp_clause_num_ops[code];
11215 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
11217 record_node_allocation_statistics (OMP_CLAUSE, size);
11219 t = (tree) ggc_internal_alloc (size);
11220 memset (t, 0, size);
11221 TREE_SET_CODE (t, OMP_CLAUSE);
11222 OMP_CLAUSE_SET_CODE (t, code);
11223 OMP_CLAUSE_LOCATION (t) = loc;
11225 return t;
11228 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
11229 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
11230 Except for the CODE and operand count field, other storage for the
11231 object is initialized to zeros. */
11233 tree
11234 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
11236 tree t;
11237 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
11239 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
11240 gcc_assert (len >= 1);
11242 record_node_allocation_statistics (code, length);
11244 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
11246 TREE_SET_CODE (t, code);
11248 /* Can't use TREE_OPERAND to store the length because if checking is
11249 enabled, it will try to check the length before we store it. :-P */
11250 t->exp.operands[0] = build_int_cst (sizetype, len);
11252 return t;
11255 /* Helper function for build_call_* functions; build a CALL_EXPR with
11256 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
11257 the argument slots. */
11259 static tree
11260 build_call_1 (tree return_type, tree fn, int nargs)
11262 tree t;
11264 t = build_vl_exp (CALL_EXPR, nargs + 3);
11265 TREE_TYPE (t) = return_type;
11266 CALL_EXPR_FN (t) = fn;
11267 CALL_EXPR_STATIC_CHAIN (t) = NULL;
11269 return t;
11272 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11273 FN and a null static chain slot. NARGS is the number of call arguments
11274 which are specified as "..." arguments. */
11276 tree
11277 build_call_nary (tree return_type, tree fn, int nargs, ...)
11279 tree ret;
11280 va_list args;
11281 va_start (args, nargs);
11282 ret = build_call_valist (return_type, fn, nargs, args);
11283 va_end (args);
11284 return ret;
11287 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11288 FN and a null static chain slot. NARGS is the number of call arguments
11289 which are specified as a va_list ARGS. */
11291 tree
11292 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
11294 tree t;
11295 int i;
11297 t = build_call_1 (return_type, fn, nargs);
11298 for (i = 0; i < nargs; i++)
11299 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
11300 process_call_operands (t);
11301 return t;
11304 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
11305 FN and a null static chain slot. NARGS is the number of call arguments
11306 which are specified as a tree array ARGS. */
11308 tree
11309 build_call_array_loc (location_t loc, tree return_type, tree fn,
11310 int nargs, const tree *args)
11312 tree t;
11313 int i;
11315 t = build_call_1 (return_type, fn, nargs);
11316 for (i = 0; i < nargs; i++)
11317 CALL_EXPR_ARG (t, i) = args[i];
11318 process_call_operands (t);
11319 SET_EXPR_LOCATION (t, loc);
11320 return t;
11323 /* Like build_call_array, but takes a vec. */
11325 tree
11326 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
11328 tree ret, t;
11329 unsigned int ix;
11331 ret = build_call_1 (return_type, fn, vec_safe_length (args));
11332 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
11333 CALL_EXPR_ARG (ret, ix) = t;
11334 process_call_operands (ret);
11335 return ret;
11338 /* Conveniently construct a function call expression. FNDECL names the
11339 function to be called and N arguments are passed in the array
11340 ARGARRAY. */
11342 tree
11343 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
11345 tree fntype = TREE_TYPE (fndecl);
11346 tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
11348 return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
11351 /* Conveniently construct a function call expression. FNDECL names the
11352 function to be called and the arguments are passed in the vector
11353 VEC. */
11355 tree
11356 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
11358 return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
11359 vec_safe_address (vec));
11363 /* Conveniently construct a function call expression. FNDECL names the
11364 function to be called, N is the number of arguments, and the "..."
11365 parameters are the argument expressions. */
11367 tree
11368 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
11370 va_list ap;
11371 tree *argarray = XALLOCAVEC (tree, n);
11372 int i;
11374 va_start (ap, n);
11375 for (i = 0; i < n; i++)
11376 argarray[i] = va_arg (ap, tree);
11377 va_end (ap);
11378 return build_call_expr_loc_array (loc, fndecl, n, argarray);
11381 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...). Duplicated because
11382 varargs macros aren't supported by all bootstrap compilers. */
11384 tree
11385 build_call_expr (tree fndecl, int n, ...)
11387 va_list ap;
11388 tree *argarray = XALLOCAVEC (tree, n);
11389 int i;
11391 va_start (ap, n);
11392 for (i = 0; i < n; i++)
11393 argarray[i] = va_arg (ap, tree);
11394 va_end (ap);
11395 return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
11398 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return
11399 type TYPE. This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL.
11400 It will get gimplified later into an ordinary internal function. */
11402 tree
11403 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn,
11404 tree type, int n, const tree *args)
11406 tree t = build_call_1 (type, NULL_TREE, n);
11407 for (int i = 0; i < n; ++i)
11408 CALL_EXPR_ARG (t, i) = args[i];
11409 SET_EXPR_LOCATION (t, loc);
11410 CALL_EXPR_IFN (t) = ifn;
11411 return t;
11414 /* Build internal call expression. This is just like CALL_EXPR, except
11415 its CALL_EXPR_FN is NULL. It will get gimplified later into ordinary
11416 internal function. */
11418 tree
11419 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
11420 tree type, int n, ...)
11422 va_list ap;
11423 tree *argarray = XALLOCAVEC (tree, n);
11424 int i;
11426 va_start (ap, n);
11427 for (i = 0; i < n; i++)
11428 argarray[i] = va_arg (ap, tree);
11429 va_end (ap);
11430 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11433 /* Return a function call to FN, if the target is guaranteed to support it,
11434 or null otherwise.
11436 N is the number of arguments, passed in the "...", and TYPE is the
11437 type of the return value. */
11439 tree
11440 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type,
11441 int n, ...)
11443 va_list ap;
11444 tree *argarray = XALLOCAVEC (tree, n);
11445 int i;
11447 va_start (ap, n);
11448 for (i = 0; i < n; i++)
11449 argarray[i] = va_arg (ap, tree);
11450 va_end (ap);
11451 if (internal_fn_p (fn))
11453 internal_fn ifn = as_internal_fn (fn);
11454 if (direct_internal_fn_p (ifn))
11456 tree_pair types = direct_internal_fn_types (ifn, type, argarray);
11457 if (!direct_internal_fn_supported_p (ifn, types,
11458 OPTIMIZE_FOR_BOTH))
11459 return NULL_TREE;
11461 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray);
11463 else
11465 tree fndecl = builtin_decl_implicit (as_builtin_fn (fn));
11466 if (!fndecl)
11467 return NULL_TREE;
11468 return build_call_expr_loc_array (loc, fndecl, n, argarray);
11472 /* Create a new constant string literal and return a char* pointer to it.
11473 The STRING_CST value is the LEN characters at STR. */
11474 tree
11475 build_string_literal (int len, const char *str)
11477 tree t, elem, index, type;
11479 t = build_string (len, str);
11480 elem = build_type_variant (char_type_node, 1, 0);
11481 index = build_index_type (size_int (len - 1));
11482 type = build_array_type (elem, index);
11483 TREE_TYPE (t) = type;
11484 TREE_CONSTANT (t) = 1;
11485 TREE_READONLY (t) = 1;
11486 TREE_STATIC (t) = 1;
11488 type = build_pointer_type (elem);
11489 t = build1 (ADDR_EXPR, type,
11490 build4 (ARRAY_REF, elem,
11491 t, integer_zero_node, NULL_TREE, NULL_TREE));
11492 return t;
11497 /* Return true if T (assumed to be a DECL) must be assigned a memory
11498 location. */
11500 bool
11501 needs_to_live_in_memory (const_tree t)
11503 return (TREE_ADDRESSABLE (t)
11504 || is_global_var (t)
11505 || (TREE_CODE (t) == RESULT_DECL
11506 && !DECL_BY_REFERENCE (t)
11507 && aggregate_value_p (t, current_function_decl)));
11510 /* Return value of a constant X and sign-extend it. */
11512 HOST_WIDE_INT
11513 int_cst_value (const_tree x)
11515 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
11516 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
11518 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
11519 gcc_assert (cst_and_fits_in_hwi (x));
11521 if (bits < HOST_BITS_PER_WIDE_INT)
11523 bool negative = ((val >> (bits - 1)) & 1) != 0;
11524 if (negative)
11525 val |= HOST_WIDE_INT_M1U << (bits - 1) << 1;
11526 else
11527 val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1);
11530 return val;
11533 /* If TYPE is an integral or pointer type, return an integer type with
11534 the same precision which is unsigned iff UNSIGNEDP is true, or itself
11535 if TYPE is already an integer type of signedness UNSIGNEDP. */
11537 tree
11538 signed_or_unsigned_type_for (int unsignedp, tree type)
11540 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
11541 return type;
11543 if (TREE_CODE (type) == VECTOR_TYPE)
11545 tree inner = TREE_TYPE (type);
11546 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
11547 if (!inner2)
11548 return NULL_TREE;
11549 if (inner == inner2)
11550 return type;
11551 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
11554 if (!INTEGRAL_TYPE_P (type)
11555 && !POINTER_TYPE_P (type)
11556 && TREE_CODE (type) != OFFSET_TYPE)
11557 return NULL_TREE;
11559 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
11562 /* If TYPE is an integral or pointer type, return an integer type with
11563 the same precision which is unsigned, or itself if TYPE is already an
11564 unsigned integer type. */
11566 tree
11567 unsigned_type_for (tree type)
11569 return signed_or_unsigned_type_for (1, type);
11572 /* If TYPE is an integral or pointer type, return an integer type with
11573 the same precision which is signed, or itself if TYPE is already a
11574 signed integer type. */
11576 tree
11577 signed_type_for (tree type)
11579 return signed_or_unsigned_type_for (0, type);
11582 /* If TYPE is a vector type, return a signed integer vector type with the
11583 same width and number of subparts. Otherwise return boolean_type_node. */
11585 tree
11586 truth_type_for (tree type)
11588 if (TREE_CODE (type) == VECTOR_TYPE)
11590 if (VECTOR_BOOLEAN_TYPE_P (type))
11591 return type;
11592 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
11593 GET_MODE_SIZE (TYPE_MODE (type)));
11595 else
11596 return boolean_type_node;
11599 /* Returns the largest value obtainable by casting something in INNER type to
11600 OUTER type. */
11602 tree
11603 upper_bound_in_type (tree outer, tree inner)
11605 unsigned int det = 0;
11606 unsigned oprec = TYPE_PRECISION (outer);
11607 unsigned iprec = TYPE_PRECISION (inner);
11608 unsigned prec;
11610 /* Compute a unique number for every combination. */
11611 det |= (oprec > iprec) ? 4 : 0;
11612 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
11613 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
11615 /* Determine the exponent to use. */
11616 switch (det)
11618 case 0:
11619 case 1:
11620 /* oprec <= iprec, outer: signed, inner: don't care. */
11621 prec = oprec - 1;
11622 break;
11623 case 2:
11624 case 3:
11625 /* oprec <= iprec, outer: unsigned, inner: don't care. */
11626 prec = oprec;
11627 break;
11628 case 4:
11629 /* oprec > iprec, outer: signed, inner: signed. */
11630 prec = iprec - 1;
11631 break;
11632 case 5:
11633 /* oprec > iprec, outer: signed, inner: unsigned. */
11634 prec = iprec;
11635 break;
11636 case 6:
11637 /* oprec > iprec, outer: unsigned, inner: signed. */
11638 prec = oprec;
11639 break;
11640 case 7:
11641 /* oprec > iprec, outer: unsigned, inner: unsigned. */
11642 prec = iprec;
11643 break;
11644 default:
11645 gcc_unreachable ();
11648 return wide_int_to_tree (outer,
11649 wi::mask (prec, false, TYPE_PRECISION (outer)));
11652 /* Returns the smallest value obtainable by casting something in INNER type to
11653 OUTER type. */
11655 tree
11656 lower_bound_in_type (tree outer, tree inner)
11658 unsigned oprec = TYPE_PRECISION (outer);
11659 unsigned iprec = TYPE_PRECISION (inner);
11661 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
11662 and obtain 0. */
11663 if (TYPE_UNSIGNED (outer)
11664 /* If we are widening something of an unsigned type, OUTER type
11665 contains all values of INNER type. In particular, both INNER
11666 and OUTER types have zero in common. */
11667 || (oprec > iprec && TYPE_UNSIGNED (inner)))
11668 return build_int_cst (outer, 0);
11669 else
11671 /* If we are widening a signed type to another signed type, we
11672 want to obtain -2^^(iprec-1). If we are keeping the
11673 precision or narrowing to a signed type, we want to obtain
11674 -2^(oprec-1). */
11675 unsigned prec = oprec > iprec ? iprec : oprec;
11676 return wide_int_to_tree (outer,
11677 wi::mask (prec - 1, true,
11678 TYPE_PRECISION (outer)));
11682 /* Return nonzero if two operands that are suitable for PHI nodes are
11683 necessarily equal. Specifically, both ARG0 and ARG1 must be either
11684 SSA_NAME or invariant. Note that this is strictly an optimization.
11685 That is, callers of this function can directly call operand_equal_p
11686 and get the same result, only slower. */
11689 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
11691 if (arg0 == arg1)
11692 return 1;
11693 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
11694 return 0;
11695 return operand_equal_p (arg0, arg1, 0);
11698 /* Returns number of zeros at the end of binary representation of X. */
11700 tree
11701 num_ending_zeros (const_tree x)
11703 return build_int_cst (TREE_TYPE (x), wi::ctz (x));
11707 #define WALK_SUBTREE(NODE) \
11708 do \
11710 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
11711 if (result) \
11712 return result; \
11714 while (0)
11716 /* This is a subroutine of walk_tree that walks field of TYPE that are to
11717 be walked whenever a type is seen in the tree. Rest of operands and return
11718 value are as for walk_tree. */
11720 static tree
11721 walk_type_fields (tree type, walk_tree_fn func, void *data,
11722 hash_set<tree> *pset, walk_tree_lh lh)
11724 tree result = NULL_TREE;
11726 switch (TREE_CODE (type))
11728 case POINTER_TYPE:
11729 case REFERENCE_TYPE:
11730 case VECTOR_TYPE:
11731 /* We have to worry about mutually recursive pointers. These can't
11732 be written in C. They can in Ada. It's pathological, but
11733 there's an ACATS test (c38102a) that checks it. Deal with this
11734 by checking if we're pointing to another pointer, that one
11735 points to another pointer, that one does too, and we have no htab.
11736 If so, get a hash table. We check three levels deep to avoid
11737 the cost of the hash table if we don't need one. */
11738 if (POINTER_TYPE_P (TREE_TYPE (type))
11739 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
11740 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
11741 && !pset)
11743 result = walk_tree_without_duplicates (&TREE_TYPE (type),
11744 func, data);
11745 if (result)
11746 return result;
11748 break;
11751 /* fall through */
11753 case COMPLEX_TYPE:
11754 WALK_SUBTREE (TREE_TYPE (type));
11755 break;
11757 case METHOD_TYPE:
11758 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11760 /* Fall through. */
11762 case FUNCTION_TYPE:
11763 WALK_SUBTREE (TREE_TYPE (type));
11765 tree arg;
11767 /* We never want to walk into default arguments. */
11768 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11769 WALK_SUBTREE (TREE_VALUE (arg));
11771 break;
11773 case ARRAY_TYPE:
11774 /* Don't follow this nodes's type if a pointer for fear that
11775 we'll have infinite recursion. If we have a PSET, then we
11776 need not fear. */
11777 if (pset
11778 || (!POINTER_TYPE_P (TREE_TYPE (type))
11779 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11780 WALK_SUBTREE (TREE_TYPE (type));
11781 WALK_SUBTREE (TYPE_DOMAIN (type));
11782 break;
11784 case OFFSET_TYPE:
11785 WALK_SUBTREE (TREE_TYPE (type));
11786 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11787 break;
11789 default:
11790 break;
11793 return NULL_TREE;
11796 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
11797 called with the DATA and the address of each sub-tree. If FUNC returns a
11798 non-NULL value, the traversal is stopped, and the value returned by FUNC
11799 is returned. If PSET is non-NULL it is used to record the nodes visited,
11800 and to avoid visiting a node more than once. */
11802 tree
11803 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11804 hash_set<tree> *pset, walk_tree_lh lh)
11806 enum tree_code code;
11807 int walk_subtrees;
11808 tree result;
11810 #define WALK_SUBTREE_TAIL(NODE) \
11811 do \
11813 tp = & (NODE); \
11814 goto tail_recurse; \
11816 while (0)
11818 tail_recurse:
11819 /* Skip empty subtrees. */
11820 if (!*tp)
11821 return NULL_TREE;
11823 /* Don't walk the same tree twice, if the user has requested
11824 that we avoid doing so. */
11825 if (pset && pset->add (*tp))
11826 return NULL_TREE;
11828 /* Call the function. */
11829 walk_subtrees = 1;
11830 result = (*func) (tp, &walk_subtrees, data);
11832 /* If we found something, return it. */
11833 if (result)
11834 return result;
11836 code = TREE_CODE (*tp);
11838 /* Even if we didn't, FUNC may have decided that there was nothing
11839 interesting below this point in the tree. */
11840 if (!walk_subtrees)
11842 /* But we still need to check our siblings. */
11843 if (code == TREE_LIST)
11844 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11845 else if (code == OMP_CLAUSE)
11846 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11847 else
11848 return NULL_TREE;
11851 if (lh)
11853 result = (*lh) (tp, &walk_subtrees, func, data, pset);
11854 if (result || !walk_subtrees)
11855 return result;
11858 switch (code)
11860 case ERROR_MARK:
11861 case IDENTIFIER_NODE:
11862 case INTEGER_CST:
11863 case REAL_CST:
11864 case FIXED_CST:
11865 case VECTOR_CST:
11866 case STRING_CST:
11867 case BLOCK:
11868 case PLACEHOLDER_EXPR:
11869 case SSA_NAME:
11870 case FIELD_DECL:
11871 case RESULT_DECL:
11872 /* None of these have subtrees other than those already walked
11873 above. */
11874 break;
11876 case TREE_LIST:
11877 WALK_SUBTREE (TREE_VALUE (*tp));
11878 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11879 break;
11881 case TREE_VEC:
11883 int len = TREE_VEC_LENGTH (*tp);
11885 if (len == 0)
11886 break;
11888 /* Walk all elements but the first. */
11889 while (--len)
11890 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11892 /* Now walk the first one as a tail call. */
11893 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11896 case COMPLEX_CST:
11897 WALK_SUBTREE (TREE_REALPART (*tp));
11898 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11900 case CONSTRUCTOR:
11902 unsigned HOST_WIDE_INT idx;
11903 constructor_elt *ce;
11905 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11906 idx++)
11907 WALK_SUBTREE (ce->value);
11909 break;
11911 case SAVE_EXPR:
11912 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11914 case BIND_EXPR:
11916 tree decl;
11917 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11919 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
11920 into declarations that are just mentioned, rather than
11921 declared; they don't really belong to this part of the tree.
11922 And, we can see cycles: the initializer for a declaration
11923 can refer to the declaration itself. */
11924 WALK_SUBTREE (DECL_INITIAL (decl));
11925 WALK_SUBTREE (DECL_SIZE (decl));
11926 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11928 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11931 case STATEMENT_LIST:
11933 tree_stmt_iterator i;
11934 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11935 WALK_SUBTREE (*tsi_stmt_ptr (i));
11937 break;
11939 case OMP_CLAUSE:
11940 switch (OMP_CLAUSE_CODE (*tp))
11942 case OMP_CLAUSE_GANG:
11943 case OMP_CLAUSE__GRIDDIM_:
11944 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11945 /* FALLTHRU */
11947 case OMP_CLAUSE_ASYNC:
11948 case OMP_CLAUSE_WAIT:
11949 case OMP_CLAUSE_WORKER:
11950 case OMP_CLAUSE_VECTOR:
11951 case OMP_CLAUSE_NUM_GANGS:
11952 case OMP_CLAUSE_NUM_WORKERS:
11953 case OMP_CLAUSE_VECTOR_LENGTH:
11954 case OMP_CLAUSE_PRIVATE:
11955 case OMP_CLAUSE_SHARED:
11956 case OMP_CLAUSE_FIRSTPRIVATE:
11957 case OMP_CLAUSE_COPYIN:
11958 case OMP_CLAUSE_COPYPRIVATE:
11959 case OMP_CLAUSE_FINAL:
11960 case OMP_CLAUSE_IF:
11961 case OMP_CLAUSE_NUM_THREADS:
11962 case OMP_CLAUSE_SCHEDULE:
11963 case OMP_CLAUSE_UNIFORM:
11964 case OMP_CLAUSE_DEPEND:
11965 case OMP_CLAUSE_NUM_TEAMS:
11966 case OMP_CLAUSE_THREAD_LIMIT:
11967 case OMP_CLAUSE_DEVICE:
11968 case OMP_CLAUSE_DIST_SCHEDULE:
11969 case OMP_CLAUSE_SAFELEN:
11970 case OMP_CLAUSE_SIMDLEN:
11971 case OMP_CLAUSE_ORDERED:
11972 case OMP_CLAUSE_PRIORITY:
11973 case OMP_CLAUSE_GRAINSIZE:
11974 case OMP_CLAUSE_NUM_TASKS:
11975 case OMP_CLAUSE_HINT:
11976 case OMP_CLAUSE_TO_DECLARE:
11977 case OMP_CLAUSE_LINK:
11978 case OMP_CLAUSE_USE_DEVICE_PTR:
11979 case OMP_CLAUSE_IS_DEVICE_PTR:
11980 case OMP_CLAUSE__LOOPTEMP_:
11981 case OMP_CLAUSE__SIMDUID_:
11982 case OMP_CLAUSE__CILK_FOR_COUNT_:
11983 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11984 /* FALLTHRU */
11986 case OMP_CLAUSE_INDEPENDENT:
11987 case OMP_CLAUSE_NOWAIT:
11988 case OMP_CLAUSE_DEFAULT:
11989 case OMP_CLAUSE_UNTIED:
11990 case OMP_CLAUSE_MERGEABLE:
11991 case OMP_CLAUSE_PROC_BIND:
11992 case OMP_CLAUSE_INBRANCH:
11993 case OMP_CLAUSE_NOTINBRANCH:
11994 case OMP_CLAUSE_FOR:
11995 case OMP_CLAUSE_PARALLEL:
11996 case OMP_CLAUSE_SECTIONS:
11997 case OMP_CLAUSE_TASKGROUP:
11998 case OMP_CLAUSE_NOGROUP:
11999 case OMP_CLAUSE_THREADS:
12000 case OMP_CLAUSE_SIMD:
12001 case OMP_CLAUSE_DEFAULTMAP:
12002 case OMP_CLAUSE_AUTO:
12003 case OMP_CLAUSE_SEQ:
12004 case OMP_CLAUSE_TILE:
12005 case OMP_CLAUSE__SIMT_:
12006 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12008 case OMP_CLAUSE_LASTPRIVATE:
12009 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12010 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
12011 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12013 case OMP_CLAUSE_COLLAPSE:
12015 int i;
12016 for (i = 0; i < 3; i++)
12017 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12018 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12021 case OMP_CLAUSE_LINEAR:
12022 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12023 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
12024 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
12025 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12027 case OMP_CLAUSE_ALIGNED:
12028 case OMP_CLAUSE_FROM:
12029 case OMP_CLAUSE_TO:
12030 case OMP_CLAUSE_MAP:
12031 case OMP_CLAUSE__CACHE_:
12032 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
12033 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
12034 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12036 case OMP_CLAUSE_REDUCTION:
12038 int i;
12039 for (i = 0; i < 5; i++)
12040 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
12041 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
12044 default:
12045 gcc_unreachable ();
12047 break;
12049 case TARGET_EXPR:
12051 int i, len;
12053 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
12054 But, we only want to walk once. */
12055 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
12056 for (i = 0; i < len; ++i)
12057 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12058 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
12061 case DECL_EXPR:
12062 /* If this is a TYPE_DECL, walk into the fields of the type that it's
12063 defining. We only want to walk into these fields of a type in this
12064 case and not in the general case of a mere reference to the type.
12066 The criterion is as follows: if the field can be an expression, it
12067 must be walked only here. This should be in keeping with the fields
12068 that are directly gimplified in gimplify_type_sizes in order for the
12069 mark/copy-if-shared/unmark machinery of the gimplifier to work with
12070 variable-sized types.
12072 Note that DECLs get walked as part of processing the BIND_EXPR. */
12073 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
12075 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
12076 if (TREE_CODE (*type_p) == ERROR_MARK)
12077 return NULL_TREE;
12079 /* Call the function for the type. See if it returns anything or
12080 doesn't want us to continue. If we are to continue, walk both
12081 the normal fields and those for the declaration case. */
12082 result = (*func) (type_p, &walk_subtrees, data);
12083 if (result || !walk_subtrees)
12084 return result;
12086 /* But do not walk a pointed-to type since it may itself need to
12087 be walked in the declaration case if it isn't anonymous. */
12088 if (!POINTER_TYPE_P (*type_p))
12090 result = walk_type_fields (*type_p, func, data, pset, lh);
12091 if (result)
12092 return result;
12095 /* If this is a record type, also walk the fields. */
12096 if (RECORD_OR_UNION_TYPE_P (*type_p))
12098 tree field;
12100 for (field = TYPE_FIELDS (*type_p); field;
12101 field = DECL_CHAIN (field))
12103 /* We'd like to look at the type of the field, but we can
12104 easily get infinite recursion. So assume it's pointed
12105 to elsewhere in the tree. Also, ignore things that
12106 aren't fields. */
12107 if (TREE_CODE (field) != FIELD_DECL)
12108 continue;
12110 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
12111 WALK_SUBTREE (DECL_SIZE (field));
12112 WALK_SUBTREE (DECL_SIZE_UNIT (field));
12113 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
12114 WALK_SUBTREE (DECL_QUALIFIER (field));
12118 /* Same for scalar types. */
12119 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
12120 || TREE_CODE (*type_p) == ENUMERAL_TYPE
12121 || TREE_CODE (*type_p) == INTEGER_TYPE
12122 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
12123 || TREE_CODE (*type_p) == REAL_TYPE)
12125 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
12126 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
12129 WALK_SUBTREE (TYPE_SIZE (*type_p));
12130 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
12132 /* FALLTHRU */
12134 default:
12135 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
12137 int i, len;
12139 /* Walk over all the sub-trees of this operand. */
12140 len = TREE_OPERAND_LENGTH (*tp);
12142 /* Go through the subtrees. We need to do this in forward order so
12143 that the scope of a FOR_EXPR is handled properly. */
12144 if (len)
12146 for (i = 0; i < len - 1; ++i)
12147 WALK_SUBTREE (TREE_OPERAND (*tp, i));
12148 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
12151 /* If this is a type, walk the needed fields in the type. */
12152 else if (TYPE_P (*tp))
12153 return walk_type_fields (*tp, func, data, pset, lh);
12154 break;
12157 /* We didn't find what we were looking for. */
12158 return NULL_TREE;
12160 #undef WALK_SUBTREE_TAIL
12162 #undef WALK_SUBTREE
12164 /* Like walk_tree, but does not walk duplicate nodes more than once. */
12166 tree
12167 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
12168 walk_tree_lh lh)
12170 tree result;
12172 hash_set<tree> pset;
12173 result = walk_tree_1 (tp, func, data, &pset, lh);
12174 return result;
12178 tree
12179 tree_block (tree t)
12181 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12183 if (IS_EXPR_CODE_CLASS (c))
12184 return LOCATION_BLOCK (t->exp.locus);
12185 gcc_unreachable ();
12186 return NULL;
12189 void
12190 tree_set_block (tree t, tree b)
12192 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
12194 if (IS_EXPR_CODE_CLASS (c))
12196 t->exp.locus = set_block (t->exp.locus, b);
12198 else
12199 gcc_unreachable ();
12202 /* Create a nameless artificial label and put it in the current
12203 function context. The label has a location of LOC. Returns the
12204 newly created label. */
12206 tree
12207 create_artificial_label (location_t loc)
12209 tree lab = build_decl (loc,
12210 LABEL_DECL, NULL_TREE, void_type_node);
12212 DECL_ARTIFICIAL (lab) = 1;
12213 DECL_IGNORED_P (lab) = 1;
12214 DECL_CONTEXT (lab) = current_function_decl;
12215 return lab;
12218 /* Given a tree, try to return a useful variable name that we can use
12219 to prefix a temporary that is being assigned the value of the tree.
12220 I.E. given <temp> = &A, return A. */
12222 const char *
12223 get_name (tree t)
12225 tree stripped_decl;
12227 stripped_decl = t;
12228 STRIP_NOPS (stripped_decl);
12229 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
12230 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
12231 else if (TREE_CODE (stripped_decl) == SSA_NAME)
12233 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
12234 if (!name)
12235 return NULL;
12236 return IDENTIFIER_POINTER (name);
12238 else
12240 switch (TREE_CODE (stripped_decl))
12242 case ADDR_EXPR:
12243 return get_name (TREE_OPERAND (stripped_decl, 0));
12244 default:
12245 return NULL;
12250 /* Return true if TYPE has a variable argument list. */
12252 bool
12253 stdarg_p (const_tree fntype)
12255 function_args_iterator args_iter;
12256 tree n = NULL_TREE, t;
12258 if (!fntype)
12259 return false;
12261 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
12263 n = t;
12266 return n != NULL_TREE && n != void_type_node;
12269 /* Return true if TYPE has a prototype. */
12271 bool
12272 prototype_p (const_tree fntype)
12274 tree t;
12276 gcc_assert (fntype != NULL_TREE);
12278 t = TYPE_ARG_TYPES (fntype);
12279 return (t != NULL_TREE);
12282 /* If BLOCK is inlined from an __attribute__((__artificial__))
12283 routine, return pointer to location from where it has been
12284 called. */
12285 location_t *
12286 block_nonartificial_location (tree block)
12288 location_t *ret = NULL;
12290 while (block && TREE_CODE (block) == BLOCK
12291 && BLOCK_ABSTRACT_ORIGIN (block))
12293 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
12295 while (TREE_CODE (ao) == BLOCK
12296 && BLOCK_ABSTRACT_ORIGIN (ao)
12297 && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
12298 ao = BLOCK_ABSTRACT_ORIGIN (ao);
12300 if (TREE_CODE (ao) == FUNCTION_DECL)
12302 /* If AO is an artificial inline, point RET to the
12303 call site locus at which it has been inlined and continue
12304 the loop, in case AO's caller is also an artificial
12305 inline. */
12306 if (DECL_DECLARED_INLINE_P (ao)
12307 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
12308 ret = &BLOCK_SOURCE_LOCATION (block);
12309 else
12310 break;
12312 else if (TREE_CODE (ao) != BLOCK)
12313 break;
12315 block = BLOCK_SUPERCONTEXT (block);
12317 return ret;
12321 /* If EXP is inlined from an __attribute__((__artificial__))
12322 function, return the location of the original call expression. */
12324 location_t
12325 tree_nonartificial_location (tree exp)
12327 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
12329 if (loc)
12330 return *loc;
12331 else
12332 return EXPR_LOCATION (exp);
12336 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
12337 nodes. */
12339 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
12341 hashval_t
12342 cl_option_hasher::hash (tree x)
12344 const_tree const t = x;
12345 const char *p;
12346 size_t i;
12347 size_t len = 0;
12348 hashval_t hash = 0;
12350 if (TREE_CODE (t) == OPTIMIZATION_NODE)
12352 p = (const char *)TREE_OPTIMIZATION (t);
12353 len = sizeof (struct cl_optimization);
12356 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
12357 return cl_target_option_hash (TREE_TARGET_OPTION (t));
12359 else
12360 gcc_unreachable ();
12362 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
12363 something else. */
12364 for (i = 0; i < len; i++)
12365 if (p[i])
12366 hash = (hash << 4) ^ ((i << 2) | p[i]);
12368 return hash;
12371 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
12372 TARGET_OPTION tree node) is the same as that given by *Y, which is the
12373 same. */
12375 bool
12376 cl_option_hasher::equal (tree x, tree y)
12378 const_tree const xt = x;
12379 const_tree const yt = y;
12380 const char *xp;
12381 const char *yp;
12382 size_t len;
12384 if (TREE_CODE (xt) != TREE_CODE (yt))
12385 return 0;
12387 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
12389 xp = (const char *)TREE_OPTIMIZATION (xt);
12390 yp = (const char *)TREE_OPTIMIZATION (yt);
12391 len = sizeof (struct cl_optimization);
12394 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
12396 return cl_target_option_eq (TREE_TARGET_OPTION (xt),
12397 TREE_TARGET_OPTION (yt));
12400 else
12401 gcc_unreachable ();
12403 return (memcmp (xp, yp, len) == 0);
12406 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */
12408 tree
12409 build_optimization_node (struct gcc_options *opts)
12411 tree t;
12413 /* Use the cache of optimization nodes. */
12415 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
12416 opts);
12418 tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
12419 t = *slot;
12420 if (!t)
12422 /* Insert this one into the hash table. */
12423 t = cl_optimization_node;
12424 *slot = t;
12426 /* Make a new node for next time round. */
12427 cl_optimization_node = make_node (OPTIMIZATION_NODE);
12430 return t;
12433 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */
12435 tree
12436 build_target_option_node (struct gcc_options *opts)
12438 tree t;
12440 /* Use the cache of optimization nodes. */
12442 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
12443 opts);
12445 tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
12446 t = *slot;
12447 if (!t)
12449 /* Insert this one into the hash table. */
12450 t = cl_target_option_node;
12451 *slot = t;
12453 /* Make a new node for next time round. */
12454 cl_target_option_node = make_node (TARGET_OPTION_NODE);
12457 return t;
12460 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
12461 so that they aren't saved during PCH writing. */
12463 void
12464 prepare_target_option_nodes_for_pch (void)
12466 hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
12467 for (; iter != cl_option_hash_table->end (); ++iter)
12468 if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
12469 TREE_TARGET_GLOBALS (*iter) = NULL;
12472 /* Determine the "ultimate origin" of a block. The block may be an inlined
12473 instance of an inlined instance of a block which is local to an inline
12474 function, so we have to trace all of the way back through the origin chain
12475 to find out what sort of node actually served as the original seed for the
12476 given block. */
12478 tree
12479 block_ultimate_origin (const_tree block)
12481 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
12483 /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
12484 we're trying to output the abstract instance of this function. */
12485 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
12486 return NULL_TREE;
12488 if (immediate_origin == NULL_TREE)
12489 return NULL_TREE;
12490 else
12492 tree ret_val;
12493 tree lookahead = immediate_origin;
12497 ret_val = lookahead;
12498 lookahead = (TREE_CODE (ret_val) == BLOCK
12499 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
12501 while (lookahead != NULL && lookahead != ret_val);
12503 /* The block's abstract origin chain may not be the *ultimate* origin of
12504 the block. It could lead to a DECL that has an abstract origin set.
12505 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
12506 will give us if it has one). Note that DECL's abstract origins are
12507 supposed to be the most distant ancestor (or so decl_ultimate_origin
12508 claims), so we don't need to loop following the DECL origins. */
12509 if (DECL_P (ret_val))
12510 return DECL_ORIGIN (ret_val);
12512 return ret_val;
12516 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
12517 no instruction. */
12519 bool
12520 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
12522 /* Do not strip casts into or out of differing address spaces. */
12523 if (POINTER_TYPE_P (outer_type)
12524 && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC)
12526 if (!POINTER_TYPE_P (inner_type)
12527 || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type))
12528 != TYPE_ADDR_SPACE (TREE_TYPE (inner_type))))
12529 return false;
12531 else if (POINTER_TYPE_P (inner_type)
12532 && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC)
12534 /* We already know that outer_type is not a pointer with
12535 a non-generic address space. */
12536 return false;
12539 /* Use precision rather then machine mode when we can, which gives
12540 the correct answer even for submode (bit-field) types. */
12541 if ((INTEGRAL_TYPE_P (outer_type)
12542 || POINTER_TYPE_P (outer_type)
12543 || TREE_CODE (outer_type) == OFFSET_TYPE)
12544 && (INTEGRAL_TYPE_P (inner_type)
12545 || POINTER_TYPE_P (inner_type)
12546 || TREE_CODE (inner_type) == OFFSET_TYPE))
12547 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
12549 /* Otherwise fall back on comparing machine modes (e.g. for
12550 aggregate types, floats). */
12551 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
12554 /* Return true iff conversion in EXP generates no instruction. Mark
12555 it inline so that we fully inline into the stripping functions even
12556 though we have two uses of this function. */
12558 static inline bool
12559 tree_nop_conversion (const_tree exp)
12561 tree outer_type, inner_type;
12563 if (!CONVERT_EXPR_P (exp)
12564 && TREE_CODE (exp) != NON_LVALUE_EXPR)
12565 return false;
12566 if (TREE_OPERAND (exp, 0) == error_mark_node)
12567 return false;
12569 outer_type = TREE_TYPE (exp);
12570 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12572 if (!inner_type)
12573 return false;
12575 return tree_nop_conversion_p (outer_type, inner_type);
12578 /* Return true iff conversion in EXP generates no instruction. Don't
12579 consider conversions changing the signedness. */
12581 static bool
12582 tree_sign_nop_conversion (const_tree exp)
12584 tree outer_type, inner_type;
12586 if (!tree_nop_conversion (exp))
12587 return false;
12589 outer_type = TREE_TYPE (exp);
12590 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
12592 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
12593 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
12596 /* Strip conversions from EXP according to tree_nop_conversion and
12597 return the resulting expression. */
12599 tree
12600 tree_strip_nop_conversions (tree exp)
12602 while (tree_nop_conversion (exp))
12603 exp = TREE_OPERAND (exp, 0);
12604 return exp;
12607 /* Strip conversions from EXP according to tree_sign_nop_conversion
12608 and return the resulting expression. */
12610 tree
12611 tree_strip_sign_nop_conversions (tree exp)
12613 while (tree_sign_nop_conversion (exp))
12614 exp = TREE_OPERAND (exp, 0);
12615 return exp;
12618 /* Avoid any floating point extensions from EXP. */
12619 tree
12620 strip_float_extensions (tree exp)
12622 tree sub, expt, subt;
12624 /* For floating point constant look up the narrowest type that can hold
12625 it properly and handle it like (type)(narrowest_type)constant.
12626 This way we can optimize for instance a=a*2.0 where "a" is float
12627 but 2.0 is double constant. */
12628 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
12630 REAL_VALUE_TYPE orig;
12631 tree type = NULL;
12633 orig = TREE_REAL_CST (exp);
12634 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
12635 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
12636 type = float_type_node;
12637 else if (TYPE_PRECISION (TREE_TYPE (exp))
12638 > TYPE_PRECISION (double_type_node)
12639 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
12640 type = double_type_node;
12641 if (type)
12642 return build_real_truncate (type, orig);
12645 if (!CONVERT_EXPR_P (exp))
12646 return exp;
12648 sub = TREE_OPERAND (exp, 0);
12649 subt = TREE_TYPE (sub);
12650 expt = TREE_TYPE (exp);
12652 if (!FLOAT_TYPE_P (subt))
12653 return exp;
12655 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
12656 return exp;
12658 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
12659 return exp;
12661 return strip_float_extensions (sub);
12664 /* Strip out all handled components that produce invariant
12665 offsets. */
12667 const_tree
12668 strip_invariant_refs (const_tree op)
12670 while (handled_component_p (op))
12672 switch (TREE_CODE (op))
12674 case ARRAY_REF:
12675 case ARRAY_RANGE_REF:
12676 if (!is_gimple_constant (TREE_OPERAND (op, 1))
12677 || TREE_OPERAND (op, 2) != NULL_TREE
12678 || TREE_OPERAND (op, 3) != NULL_TREE)
12679 return NULL;
12680 break;
12682 case COMPONENT_REF:
12683 if (TREE_OPERAND (op, 2) != NULL_TREE)
12684 return NULL;
12685 break;
12687 default:;
12689 op = TREE_OPERAND (op, 0);
12692 return op;
12695 static GTY(()) tree gcc_eh_personality_decl;
12697 /* Return the GCC personality function decl. */
12699 tree
12700 lhd_gcc_personality (void)
12702 if (!gcc_eh_personality_decl)
12703 gcc_eh_personality_decl = build_personality_function ("gcc");
12704 return gcc_eh_personality_decl;
12707 /* TARGET is a call target of GIMPLE call statement
12708 (obtained by gimple_call_fn). Return true if it is
12709 OBJ_TYPE_REF representing an virtual call of C++ method.
12710 (As opposed to OBJ_TYPE_REF representing objc calls
12711 through a cast where middle-end devirtualization machinery
12712 can't apply.) */
12714 bool
12715 virtual_method_call_p (const_tree target)
12717 if (TREE_CODE (target) != OBJ_TYPE_REF)
12718 return false;
12719 tree t = TREE_TYPE (target);
12720 gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
12721 t = TREE_TYPE (t);
12722 if (TREE_CODE (t) == FUNCTION_TYPE)
12723 return false;
12724 gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
12725 /* If we do not have BINFO associated, it means that type was built
12726 without devirtualization enabled. Do not consider this a virtual
12727 call. */
12728 if (!TYPE_BINFO (obj_type_ref_class (target)))
12729 return false;
12730 return true;
12733 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */
12735 tree
12736 obj_type_ref_class (const_tree ref)
12738 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12739 ref = TREE_TYPE (ref);
12740 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12741 ref = TREE_TYPE (ref);
12742 /* We look for type THIS points to. ObjC also builds
12743 OBJ_TYPE_REF with non-method calls, Their first parameter
12744 ID however also corresponds to class type. */
12745 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12746 || TREE_CODE (ref) == FUNCTION_TYPE);
12747 ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12748 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12749 return TREE_TYPE (ref);
12752 /* Lookup sub-BINFO of BINFO of TYPE at offset POS. */
12754 static tree
12755 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos)
12757 unsigned int i;
12758 tree base_binfo, b;
12760 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12761 if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo))
12762 && types_same_for_odr (TREE_TYPE (base_binfo), type))
12763 return base_binfo;
12764 else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL)
12765 return b;
12766 return NULL;
12769 /* Try to find a base info of BINFO that would have its field decl at offset
12770 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
12771 found, return, otherwise return NULL_TREE. */
12773 tree
12774 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12776 tree type = BINFO_TYPE (binfo);
12778 while (true)
12780 HOST_WIDE_INT pos, size;
12781 tree fld;
12782 int i;
12784 if (types_same_for_odr (type, expected_type))
12785 return binfo;
12786 if (offset < 0)
12787 return NULL_TREE;
12789 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12791 if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12792 continue;
12794 pos = int_bit_position (fld);
12795 size = tree_to_uhwi (DECL_SIZE (fld));
12796 if (pos <= offset && (pos + size) > offset)
12797 break;
12799 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12800 return NULL_TREE;
12802 /* Offset 0 indicates the primary base, whose vtable contents are
12803 represented in the binfo for the derived class. */
12804 else if (offset != 0)
12806 tree found_binfo = NULL, base_binfo;
12807 /* Offsets in BINFO are in bytes relative to the whole structure
12808 while POS is in bits relative to the containing field. */
12809 int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos
12810 / BITS_PER_UNIT);
12812 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12813 if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset
12814 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12816 found_binfo = base_binfo;
12817 break;
12819 if (found_binfo)
12820 binfo = found_binfo;
12821 else
12822 binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld),
12823 binfo_offset);
12826 type = TREE_TYPE (fld);
12827 offset -= pos;
12831 /* Returns true if X is a typedef decl. */
12833 bool
12834 is_typedef_decl (const_tree x)
12836 return (x && TREE_CODE (x) == TYPE_DECL
12837 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12840 /* Returns true iff TYPE is a type variant created for a typedef. */
12842 bool
12843 typedef_variant_p (const_tree type)
12845 return is_typedef_decl (TYPE_NAME (type));
12848 /* Warn about a use of an identifier which was marked deprecated. */
12849 void
12850 warn_deprecated_use (tree node, tree attr)
12852 const char *msg;
12854 if (node == 0 || !warn_deprecated_decl)
12855 return;
12857 if (!attr)
12859 if (DECL_P (node))
12860 attr = DECL_ATTRIBUTES (node);
12861 else if (TYPE_P (node))
12863 tree decl = TYPE_STUB_DECL (node);
12864 if (decl)
12865 attr = lookup_attribute ("deprecated",
12866 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12870 if (attr)
12871 attr = lookup_attribute ("deprecated", attr);
12873 if (attr)
12874 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12875 else
12876 msg = NULL;
12878 bool w;
12879 if (DECL_P (node))
12881 if (msg)
12882 w = warning (OPT_Wdeprecated_declarations,
12883 "%qD is deprecated: %s", node, msg);
12884 else
12885 w = warning (OPT_Wdeprecated_declarations,
12886 "%qD is deprecated", node);
12887 if (w)
12888 inform (DECL_SOURCE_LOCATION (node), "declared here");
12890 else if (TYPE_P (node))
12892 tree what = NULL_TREE;
12893 tree decl = TYPE_STUB_DECL (node);
12895 if (TYPE_NAME (node))
12897 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12898 what = TYPE_NAME (node);
12899 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12900 && DECL_NAME (TYPE_NAME (node)))
12901 what = DECL_NAME (TYPE_NAME (node));
12904 if (decl)
12906 if (what)
12908 if (msg)
12909 w = warning (OPT_Wdeprecated_declarations,
12910 "%qE is deprecated: %s", what, msg);
12911 else
12912 w = warning (OPT_Wdeprecated_declarations,
12913 "%qE is deprecated", what);
12915 else
12917 if (msg)
12918 w = warning (OPT_Wdeprecated_declarations,
12919 "type is deprecated: %s", msg);
12920 else
12921 w = warning (OPT_Wdeprecated_declarations,
12922 "type is deprecated");
12924 if (w)
12925 inform (DECL_SOURCE_LOCATION (decl), "declared here");
12927 else
12929 if (what)
12931 if (msg)
12932 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12933 what, msg);
12934 else
12935 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12937 else
12939 if (msg)
12940 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12941 msg);
12942 else
12943 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12949 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12950 somewhere in it. */
12952 bool
12953 contains_bitfld_component_ref_p (const_tree ref)
12955 while (handled_component_p (ref))
12957 if (TREE_CODE (ref) == COMPONENT_REF
12958 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12959 return true;
12960 ref = TREE_OPERAND (ref, 0);
12963 return false;
12966 /* Try to determine whether a TRY_CATCH expression can fall through.
12967 This is a subroutine of block_may_fallthru. */
12969 static bool
12970 try_catch_may_fallthru (const_tree stmt)
12972 tree_stmt_iterator i;
12974 /* If the TRY block can fall through, the whole TRY_CATCH can
12975 fall through. */
12976 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12977 return true;
12979 i = tsi_start (TREE_OPERAND (stmt, 1));
12980 switch (TREE_CODE (tsi_stmt (i)))
12982 case CATCH_EXPR:
12983 /* We expect to see a sequence of CATCH_EXPR trees, each with a
12984 catch expression and a body. The whole TRY_CATCH may fall
12985 through iff any of the catch bodies falls through. */
12986 for (; !tsi_end_p (i); tsi_next (&i))
12988 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12989 return true;
12991 return false;
12993 case EH_FILTER_EXPR:
12994 /* The exception filter expression only matters if there is an
12995 exception. If the exception does not match EH_FILTER_TYPES,
12996 we will execute EH_FILTER_FAILURE, and we will fall through
12997 if that falls through. If the exception does match
12998 EH_FILTER_TYPES, the stack unwinder will continue up the
12999 stack, so we will not fall through. We don't know whether we
13000 will throw an exception which matches EH_FILTER_TYPES or not,
13001 so we just ignore EH_FILTER_TYPES and assume that we might
13002 throw an exception which doesn't match. */
13003 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
13005 default:
13006 /* This case represents statements to be executed when an
13007 exception occurs. Those statements are implicitly followed
13008 by a RESX statement to resume execution after the exception.
13009 So in this case the TRY_CATCH never falls through. */
13010 return false;
13014 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
13015 need not be 100% accurate; simply be conservative and return true if we
13016 don't know. This is used only to avoid stupidly generating extra code.
13017 If we're wrong, we'll just delete the extra code later. */
13019 bool
13020 block_may_fallthru (const_tree block)
13022 /* This CONST_CAST is okay because expr_last returns its argument
13023 unmodified and we assign it to a const_tree. */
13024 const_tree stmt = expr_last (CONST_CAST_TREE (block));
13026 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
13028 case GOTO_EXPR:
13029 case RETURN_EXPR:
13030 /* Easy cases. If the last statement of the block implies
13031 control transfer, then we can't fall through. */
13032 return false;
13034 case SWITCH_EXPR:
13035 /* If SWITCH_LABELS is set, this is lowered, and represents a
13036 branch to a selected label and hence can not fall through.
13037 Otherwise SWITCH_BODY is set, and the switch can fall
13038 through. */
13039 return SWITCH_LABELS (stmt) == NULL_TREE;
13041 case COND_EXPR:
13042 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
13043 return true;
13044 return block_may_fallthru (COND_EXPR_ELSE (stmt));
13046 case BIND_EXPR:
13047 return block_may_fallthru (BIND_EXPR_BODY (stmt));
13049 case TRY_CATCH_EXPR:
13050 return try_catch_may_fallthru (stmt);
13052 case TRY_FINALLY_EXPR:
13053 /* The finally clause is always executed after the try clause,
13054 so if it does not fall through, then the try-finally will not
13055 fall through. Otherwise, if the try clause does not fall
13056 through, then when the finally clause falls through it will
13057 resume execution wherever the try clause was going. So the
13058 whole try-finally will only fall through if both the try
13059 clause and the finally clause fall through. */
13060 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
13061 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
13063 case MODIFY_EXPR:
13064 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
13065 stmt = TREE_OPERAND (stmt, 1);
13066 else
13067 return true;
13068 /* FALLTHRU */
13070 case CALL_EXPR:
13071 /* Functions that do not return do not fall through. */
13072 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
13074 case CLEANUP_POINT_EXPR:
13075 return block_may_fallthru (TREE_OPERAND (stmt, 0));
13077 case TARGET_EXPR:
13078 return block_may_fallthru (TREE_OPERAND (stmt, 1));
13080 case ERROR_MARK:
13081 return true;
13083 default:
13084 return lang_hooks.block_may_fallthru (stmt);
13088 /* True if we are using EH to handle cleanups. */
13089 static bool using_eh_for_cleanups_flag = false;
13091 /* This routine is called from front ends to indicate eh should be used for
13092 cleanups. */
13093 void
13094 using_eh_for_cleanups (void)
13096 using_eh_for_cleanups_flag = true;
13099 /* Query whether EH is used for cleanups. */
13100 bool
13101 using_eh_for_cleanups_p (void)
13103 return using_eh_for_cleanups_flag;
13106 /* Wrapper for tree_code_name to ensure that tree code is valid */
13107 const char *
13108 get_tree_code_name (enum tree_code code)
13110 const char *invalid = "<invalid tree code>";
13112 if (code >= MAX_TREE_CODES)
13113 return invalid;
13115 return tree_code_name[code];
13118 /* Drops the TREE_OVERFLOW flag from T. */
13120 tree
13121 drop_tree_overflow (tree t)
13123 gcc_checking_assert (TREE_OVERFLOW (t));
13125 /* For tree codes with a sharing machinery re-build the result. */
13126 if (TREE_CODE (t) == INTEGER_CST)
13127 return wide_int_to_tree (TREE_TYPE (t), t);
13129 /* Otherwise, as all tcc_constants are possibly shared, copy the node
13130 and drop the flag. */
13131 t = copy_node (t);
13132 TREE_OVERFLOW (t) = 0;
13133 return t;
13136 /* Given a memory reference expression T, return its base address.
13137 The base address of a memory reference expression is the main
13138 object being referenced. For instance, the base address for
13139 'array[i].fld[j]' is 'array'. You can think of this as stripping
13140 away the offset part from a memory address.
13142 This function calls handled_component_p to strip away all the inner
13143 parts of the memory reference until it reaches the base object. */
13145 tree
13146 get_base_address (tree t)
13148 while (handled_component_p (t))
13149 t = TREE_OPERAND (t, 0);
13151 if ((TREE_CODE (t) == MEM_REF
13152 || TREE_CODE (t) == TARGET_MEM_REF)
13153 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
13154 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
13156 /* ??? Either the alias oracle or all callers need to properly deal
13157 with WITH_SIZE_EXPRs before we can look through those. */
13158 if (TREE_CODE (t) == WITH_SIZE_EXPR)
13159 return NULL_TREE;
13161 return t;
13164 /* Return a tree of sizetype representing the size, in bytes, of the element
13165 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13167 tree
13168 array_ref_element_size (tree exp)
13170 tree aligned_size = TREE_OPERAND (exp, 3);
13171 tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)));
13172 location_t loc = EXPR_LOCATION (exp);
13174 /* If a size was specified in the ARRAY_REF, it's the size measured
13175 in alignment units of the element type. So multiply by that value. */
13176 if (aligned_size)
13178 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13179 sizetype from another type of the same width and signedness. */
13180 if (TREE_TYPE (aligned_size) != sizetype)
13181 aligned_size = fold_convert_loc (loc, sizetype, aligned_size);
13182 return size_binop_loc (loc, MULT_EXPR, aligned_size,
13183 size_int (TYPE_ALIGN_UNIT (elmt_type)));
13186 /* Otherwise, take the size from that of the element type. Substitute
13187 any PLACEHOLDER_EXPR that we have. */
13188 else
13189 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp);
13192 /* Return a tree representing the lower bound of the array mentioned in
13193 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13195 tree
13196 array_ref_low_bound (tree exp)
13198 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13200 /* If a lower bound is specified in EXP, use it. */
13201 if (TREE_OPERAND (exp, 2))
13202 return TREE_OPERAND (exp, 2);
13204 /* Otherwise, if there is a domain type and it has a lower bound, use it,
13205 substituting for a PLACEHOLDER_EXPR as needed. */
13206 if (domain_type && TYPE_MIN_VALUE (domain_type))
13207 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp);
13209 /* Otherwise, return a zero of the appropriate type. */
13210 return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0);
13213 /* Return a tree representing the upper bound of the array mentioned in
13214 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
13216 tree
13217 array_ref_up_bound (tree exp)
13219 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0)));
13221 /* If there is a domain type and it has an upper bound, use it, substituting
13222 for a PLACEHOLDER_EXPR as needed. */
13223 if (domain_type && TYPE_MAX_VALUE (domain_type))
13224 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp);
13226 /* Otherwise fail. */
13227 return NULL_TREE;
13230 /* Returns true if REF is an array reference to an array at the end of
13231 a structure. If this is the case, the array may be allocated larger
13232 than its upper bound implies. When ALLOW_COMPREF is true considers
13233 REF when it's a COMPONENT_REF in addition ARRAY_REF and
13234 ARRAY_RANGE_REF. */
13236 bool
13237 array_at_struct_end_p (tree ref, bool allow_compref)
13239 if (TREE_CODE (ref) != ARRAY_REF
13240 && TREE_CODE (ref) != ARRAY_RANGE_REF
13241 && (!allow_compref || TREE_CODE (ref) != COMPONENT_REF))
13242 return false;
13244 while (handled_component_p (ref))
13246 /* If the reference chain contains a component reference to a
13247 non-union type and there follows another field the reference
13248 is not at the end of a structure. */
13249 if (TREE_CODE (ref) == COMPONENT_REF
13250 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE)
13252 tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1));
13253 while (nextf && TREE_CODE (nextf) != FIELD_DECL)
13254 nextf = DECL_CHAIN (nextf);
13255 if (nextf)
13256 return false;
13259 ref = TREE_OPERAND (ref, 0);
13262 tree size = NULL;
13264 if (TREE_CODE (ref) == MEM_REF
13265 && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR)
13267 size = TYPE_SIZE (TREE_TYPE (ref));
13268 ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0);
13271 /* If the reference is based on a declared entity, the size of the array
13272 is constrained by its given domain. (Do not trust commons PR/69368). */
13273 if (DECL_P (ref)
13274 /* Be sure the size of MEM_REF target match. For example:
13276 char buf[10];
13277 struct foo *str = (struct foo *)&buf;
13279 str->trailin_array[2] = 1;
13281 is valid because BUF allocate enough space. */
13283 && (!size || (DECL_SIZE (ref) != NULL
13284 && operand_equal_p (DECL_SIZE (ref), size, 0)))
13285 && !(flag_unconstrained_commons
13286 && VAR_P (ref) && DECL_COMMON (ref)))
13287 return false;
13289 return true;
13292 /* Return a tree representing the offset, in bytes, of the field referenced
13293 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */
13295 tree
13296 component_ref_field_offset (tree exp)
13298 tree aligned_offset = TREE_OPERAND (exp, 2);
13299 tree field = TREE_OPERAND (exp, 1);
13300 location_t loc = EXPR_LOCATION (exp);
13302 /* If an offset was specified in the COMPONENT_REF, it's the offset measured
13303 in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. So multiply by that
13304 value. */
13305 if (aligned_offset)
13307 /* ??? tree_ssa_useless_type_conversion will eliminate casts to
13308 sizetype from another type of the same width and signedness. */
13309 if (TREE_TYPE (aligned_offset) != sizetype)
13310 aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset);
13311 return size_binop_loc (loc, MULT_EXPR, aligned_offset,
13312 size_int (DECL_OFFSET_ALIGN (field)
13313 / BITS_PER_UNIT));
13316 /* Otherwise, take the offset from that of the field. Substitute
13317 any PLACEHOLDER_EXPR that we have. */
13318 else
13319 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp);
13322 /* Return the machine mode of T. For vectors, returns the mode of the
13323 inner type. The main use case is to feed the result to HONOR_NANS,
13324 avoiding the BLKmode that a direct TYPE_MODE (T) might return. */
13326 machine_mode
13327 element_mode (const_tree t)
13329 if (!TYPE_P (t))
13330 t = TREE_TYPE (t);
13331 if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
13332 t = TREE_TYPE (t);
13333 return TYPE_MODE (t);
13337 /* Veirfy that basic properties of T match TV and thus T can be a variant of
13338 TV. TV should be the more specified variant (i.e. the main variant). */
13340 static bool
13341 verify_type_variant (const_tree t, tree tv)
13343 /* Type variant can differ by:
13345 - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT,
13346 ENCODE_QUAL_ADDR_SPACE.
13347 - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P
13348 in this case some values may not be set in the variant types
13349 (see TYPE_COMPLETE_P checks).
13350 - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type
13351 - by TYPE_NAME and attributes (i.e. when variant originate by typedef)
13352 - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants)
13353 - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN
13354 - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P
13355 this is necessary to make it possible to merge types form different TUs
13356 - arrays, pointers and references may have TREE_TYPE that is a variant
13357 of TREE_TYPE of their main variants.
13358 - aggregates may have new TYPE_FIELDS list that list variants of
13359 the main variant TYPE_FIELDS.
13360 - vector types may differ by TYPE_VECTOR_OPAQUE
13361 - TYPE_METHODS is always NULL for variant types and maintained for
13362 main variant only.
13365 /* Convenience macro for matching individual fields. */
13366 #define verify_variant_match(flag) \
13367 do { \
13368 if (flag (tv) != flag (t)) \
13370 error ("type variant differs by " #flag "."); \
13371 debug_tree (tv); \
13372 return false; \
13374 } while (false)
13376 /* tree_base checks. */
13378 verify_variant_match (TREE_CODE);
13379 /* FIXME: Ada builds non-artificial variants of artificial types. */
13380 if (TYPE_ARTIFICIAL (tv) && 0)
13381 verify_variant_match (TYPE_ARTIFICIAL);
13382 if (POINTER_TYPE_P (tv))
13383 verify_variant_match (TYPE_REF_CAN_ALIAS_ALL);
13384 /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build. */
13385 verify_variant_match (TYPE_UNSIGNED);
13386 verify_variant_match (TYPE_PACKED);
13387 if (TREE_CODE (t) == REFERENCE_TYPE)
13388 verify_variant_match (TYPE_REF_IS_RVALUE);
13389 if (AGGREGATE_TYPE_P (t))
13390 verify_variant_match (TYPE_REVERSE_STORAGE_ORDER);
13391 else
13392 verify_variant_match (TYPE_SATURATING);
13393 /* FIXME: This check trigger during libstdc++ build. */
13394 if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0)
13395 verify_variant_match (TYPE_FINAL_P);
13397 /* tree_type_common checks. */
13399 if (COMPLETE_TYPE_P (t))
13401 verify_variant_match (TYPE_MODE);
13402 if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR
13403 && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR)
13404 verify_variant_match (TYPE_SIZE);
13405 if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR
13406 && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR
13407 && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv))
13409 gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t),
13410 TYPE_SIZE_UNIT (tv), 0));
13411 error ("type variant has different TYPE_SIZE_UNIT");
13412 debug_tree (tv);
13413 error ("type variant's TYPE_SIZE_UNIT");
13414 debug_tree (TYPE_SIZE_UNIT (tv));
13415 error ("type's TYPE_SIZE_UNIT");
13416 debug_tree (TYPE_SIZE_UNIT (t));
13417 return false;
13420 verify_variant_match (TYPE_PRECISION);
13421 verify_variant_match (TYPE_NEEDS_CONSTRUCTING);
13422 if (RECORD_OR_UNION_TYPE_P (t))
13423 verify_variant_match (TYPE_TRANSPARENT_AGGR);
13424 else if (TREE_CODE (t) == ARRAY_TYPE)
13425 verify_variant_match (TYPE_NONALIASED_COMPONENT);
13426 /* During LTO we merge variant lists from diferent translation units
13427 that may differ BY TYPE_CONTEXT that in turn may point
13428 to TRANSLATION_UNIT_DECL.
13429 Ada also builds variants of types with different TYPE_CONTEXT. */
13430 if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0)
13431 verify_variant_match (TYPE_CONTEXT);
13432 verify_variant_match (TYPE_STRING_FLAG);
13433 if (TYPE_ALIAS_SET_KNOWN_P (t))
13435 error ("type variant with TYPE_ALIAS_SET_KNOWN_P");
13436 debug_tree (tv);
13437 return false;
13440 /* tree_type_non_common checks. */
13442 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13443 and dangle the pointer from time to time. */
13444 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv)
13445 && (in_lto_p || !TYPE_VFIELD (tv)
13446 || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST))
13448 error ("type variant has different TYPE_VFIELD");
13449 debug_tree (tv);
13450 return false;
13452 if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t))
13453 || TREE_CODE (t) == INTEGER_TYPE
13454 || TREE_CODE (t) == BOOLEAN_TYPE
13455 || TREE_CODE (t) == REAL_TYPE
13456 || TREE_CODE (t) == FIXED_POINT_TYPE)
13458 verify_variant_match (TYPE_MAX_VALUE);
13459 verify_variant_match (TYPE_MIN_VALUE);
13461 if (TREE_CODE (t) == METHOD_TYPE)
13462 verify_variant_match (TYPE_METHOD_BASETYPE);
13463 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_METHODS (t))
13465 error ("type variant has TYPE_METHODS");
13466 debug_tree (tv);
13467 return false;
13469 if (TREE_CODE (t) == OFFSET_TYPE)
13470 verify_variant_match (TYPE_OFFSET_BASETYPE);
13471 if (TREE_CODE (t) == ARRAY_TYPE)
13472 verify_variant_match (TYPE_ARRAY_MAX_SIZE);
13473 /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types
13474 or even type's main variant. This is needed to make bootstrap pass
13475 and the bug seems new in GCC 5.
13476 C++ FE should be updated to make this consistent and we should check
13477 that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there
13478 is a match with main variant.
13480 Also disable the check for Java for now because of parser hack that builds
13481 first an dummy BINFO and then sometimes replace it by real BINFO in some
13482 of the copies. */
13483 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv)
13484 && TYPE_BINFO (t) != TYPE_BINFO (tv)
13485 /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types.
13486 Since there is no cheap way to tell C++/Java type w/o LTO, do checking
13487 at LTO time only. */
13488 && (in_lto_p && odr_type_p (t)))
13490 error ("type variant has different TYPE_BINFO");
13491 debug_tree (tv);
13492 error ("type variant's TYPE_BINFO");
13493 debug_tree (TYPE_BINFO (tv));
13494 error ("type's TYPE_BINFO");
13495 debug_tree (TYPE_BINFO (t));
13496 return false;
13499 /* Check various uses of TYPE_VALUES_RAW. */
13500 if (TREE_CODE (t) == ENUMERAL_TYPE)
13501 verify_variant_match (TYPE_VALUES);
13502 else if (TREE_CODE (t) == ARRAY_TYPE)
13503 verify_variant_match (TYPE_DOMAIN);
13504 /* Permit incomplete variants of complete type. While FEs may complete
13505 all variants, this does not happen for C++ templates in all cases. */
13506 else if (RECORD_OR_UNION_TYPE_P (t)
13507 && COMPLETE_TYPE_P (t)
13508 && TYPE_FIELDS (t) != TYPE_FIELDS (tv))
13510 tree f1, f2;
13512 /* Fortran builds qualified variants as new records with items of
13513 qualified type. Verify that they looks same. */
13514 for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv);
13515 f1 && f2;
13516 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13517 if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL
13518 || (TYPE_MAIN_VARIANT (TREE_TYPE (f1))
13519 != TYPE_MAIN_VARIANT (TREE_TYPE (f2))
13520 /* FIXME: gfc_nonrestricted_type builds all types as variants
13521 with exception of pointer types. It deeply copies the type
13522 which means that we may end up with a variant type
13523 referring non-variant pointer. We may change it to
13524 produce types as variants, too, like
13525 objc_get_protocol_qualified_type does. */
13526 && !POINTER_TYPE_P (TREE_TYPE (f1)))
13527 || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2)
13528 || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2))
13529 break;
13530 if (f1 || f2)
13532 error ("type variant has different TYPE_FIELDS");
13533 debug_tree (tv);
13534 error ("first mismatch is field");
13535 debug_tree (f1);
13536 error ("and field");
13537 debug_tree (f2);
13538 return false;
13541 else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE))
13542 verify_variant_match (TYPE_ARG_TYPES);
13543 /* For C++ the qualified variant of array type is really an array type
13544 of qualified TREE_TYPE.
13545 objc builds variants of pointer where pointer to type is a variant, too
13546 in objc_get_protocol_qualified_type. */
13547 if (TREE_TYPE (t) != TREE_TYPE (tv)
13548 && ((TREE_CODE (t) != ARRAY_TYPE
13549 && !POINTER_TYPE_P (t))
13550 || TYPE_MAIN_VARIANT (TREE_TYPE (t))
13551 != TYPE_MAIN_VARIANT (TREE_TYPE (tv))))
13553 error ("type variant has different TREE_TYPE");
13554 debug_tree (tv);
13555 error ("type variant's TREE_TYPE");
13556 debug_tree (TREE_TYPE (tv));
13557 error ("type's TREE_TYPE");
13558 debug_tree (TREE_TYPE (t));
13559 return false;
13561 if (type_with_alias_set_p (t)
13562 && !gimple_canonical_types_compatible_p (t, tv, false))
13564 error ("type is not compatible with its variant");
13565 debug_tree (tv);
13566 error ("type variant's TREE_TYPE");
13567 debug_tree (TREE_TYPE (tv));
13568 error ("type's TREE_TYPE");
13569 debug_tree (TREE_TYPE (t));
13570 return false;
13572 return true;
13573 #undef verify_variant_match
13577 /* The TYPE_CANONICAL merging machinery. It should closely resemble
13578 the middle-end types_compatible_p function. It needs to avoid
13579 claiming types are different for types that should be treated
13580 the same with respect to TBAA. Canonical types are also used
13581 for IL consistency checks via the useless_type_conversion_p
13582 predicate which does not handle all type kinds itself but falls
13583 back to pointer-comparison of TYPE_CANONICAL for aggregates
13584 for example. */
13586 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical
13587 type calculation because we need to allow inter-operability between signed
13588 and unsigned variants. */
13590 bool
13591 type_with_interoperable_signedness (const_tree type)
13593 /* Fortran standard require C_SIGNED_CHAR to be interoperable with both
13594 signed char and unsigned char. Similarly fortran FE builds
13595 C_SIZE_T as signed type, while C defines it unsigned. */
13597 return tree_code_for_canonical_type_merging (TREE_CODE (type))
13598 == INTEGER_TYPE
13599 && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node)
13600 || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node));
13603 /* Return true iff T1 and T2 are structurally identical for what
13604 TBAA is concerned.
13605 This function is used both by lto.c canonical type merging and by the
13606 verifier. If TRUST_TYPE_CANONICAL we do not look into structure of types
13607 that have TYPE_CANONICAL defined and assume them equivalent. This is useful
13608 only for LTO because only in these cases TYPE_CANONICAL equivalence
13609 correspond to one defined by gimple_canonical_types_compatible_p. */
13611 bool
13612 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
13613 bool trust_type_canonical)
13615 /* Type variants should be same as the main variant. When not doing sanity
13616 checking to verify this fact, go to main variants and save some work. */
13617 if (trust_type_canonical)
13619 t1 = TYPE_MAIN_VARIANT (t1);
13620 t2 = TYPE_MAIN_VARIANT (t2);
13623 /* Check first for the obvious case of pointer identity. */
13624 if (t1 == t2)
13625 return true;
13627 /* Check that we have two types to compare. */
13628 if (t1 == NULL_TREE || t2 == NULL_TREE)
13629 return false;
13631 /* We consider complete types always compatible with incomplete type.
13632 This does not make sense for canonical type calculation and thus we
13633 need to ensure that we are never called on it.
13635 FIXME: For more correctness the function probably should have three modes
13636 1) mode assuming that types are complete mathcing their structure
13637 2) mode allowing incomplete types but producing equivalence classes
13638 and thus ignoring all info from complete types
13639 3) mode allowing incomplete types to match complete but checking
13640 compatibility between complete types.
13642 1 and 2 can be used for canonical type calculation. 3 is the real
13643 definition of type compatibility that can be used i.e. for warnings during
13644 declaration merging. */
13646 gcc_assert (!trust_type_canonical
13647 || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2)));
13648 /* If the types have been previously registered and found equal
13649 they still are. */
13651 if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2)
13652 && trust_type_canonical)
13654 /* Do not use TYPE_CANONICAL of pointer types. For LTO streamed types
13655 they are always NULL, but they are set to non-NULL for types
13656 constructed by build_pointer_type and variants. In this case the
13657 TYPE_CANONICAL is more fine grained than the equivalnce we test (where
13658 all pointers are considered equal. Be sure to not return false
13659 negatives. */
13660 gcc_checking_assert (canonical_type_used_p (t1)
13661 && canonical_type_used_p (t2));
13662 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2);
13665 /* Can't be the same type if the types don't have the same code. */
13666 enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1));
13667 if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2)))
13668 return false;
13670 /* Qualifiers do not matter for canonical type comparison purposes. */
13672 /* Void types and nullptr types are always the same. */
13673 if (TREE_CODE (t1) == VOID_TYPE
13674 || TREE_CODE (t1) == NULLPTR_TYPE)
13675 return true;
13677 /* Can't be the same type if they have different mode. */
13678 if (TYPE_MODE (t1) != TYPE_MODE (t2))
13679 return false;
13681 /* Non-aggregate types can be handled cheaply. */
13682 if (INTEGRAL_TYPE_P (t1)
13683 || SCALAR_FLOAT_TYPE_P (t1)
13684 || FIXED_POINT_TYPE_P (t1)
13685 || TREE_CODE (t1) == VECTOR_TYPE
13686 || TREE_CODE (t1) == COMPLEX_TYPE
13687 || TREE_CODE (t1) == OFFSET_TYPE
13688 || POINTER_TYPE_P (t1))
13690 /* Can't be the same type if they have different recision. */
13691 if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2))
13692 return false;
13694 /* In some cases the signed and unsigned types are required to be
13695 inter-operable. */
13696 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)
13697 && !type_with_interoperable_signedness (t1))
13698 return false;
13700 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be
13701 interoperable with "signed char". Unless all frontends are revisited
13702 to agree on these types, we must ignore the flag completely. */
13704 /* Fortran standard define C_PTR type that is compatible with every
13705 C pointer. For this reason we need to glob all pointers into one.
13706 Still pointers in different address spaces are not compatible. */
13707 if (POINTER_TYPE_P (t1))
13709 if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
13710 != TYPE_ADDR_SPACE (TREE_TYPE (t2)))
13711 return false;
13714 /* Tail-recurse to components. */
13715 if (TREE_CODE (t1) == VECTOR_TYPE
13716 || TREE_CODE (t1) == COMPLEX_TYPE)
13717 return gimple_canonical_types_compatible_p (TREE_TYPE (t1),
13718 TREE_TYPE (t2),
13719 trust_type_canonical);
13721 return true;
13724 /* Do type-specific comparisons. */
13725 switch (TREE_CODE (t1))
13727 case ARRAY_TYPE:
13728 /* Array types are the same if the element types are the same and
13729 the number of elements are the same. */
13730 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13731 trust_type_canonical)
13732 || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)
13733 || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)
13734 || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2))
13735 return false;
13736 else
13738 tree i1 = TYPE_DOMAIN (t1);
13739 tree i2 = TYPE_DOMAIN (t2);
13741 /* For an incomplete external array, the type domain can be
13742 NULL_TREE. Check this condition also. */
13743 if (i1 == NULL_TREE && i2 == NULL_TREE)
13744 return true;
13745 else if (i1 == NULL_TREE || i2 == NULL_TREE)
13746 return false;
13747 else
13749 tree min1 = TYPE_MIN_VALUE (i1);
13750 tree min2 = TYPE_MIN_VALUE (i2);
13751 tree max1 = TYPE_MAX_VALUE (i1);
13752 tree max2 = TYPE_MAX_VALUE (i2);
13754 /* The minimum/maximum values have to be the same. */
13755 if ((min1 == min2
13756 || (min1 && min2
13757 && ((TREE_CODE (min1) == PLACEHOLDER_EXPR
13758 && TREE_CODE (min2) == PLACEHOLDER_EXPR)
13759 || operand_equal_p (min1, min2, 0))))
13760 && (max1 == max2
13761 || (max1 && max2
13762 && ((TREE_CODE (max1) == PLACEHOLDER_EXPR
13763 && TREE_CODE (max2) == PLACEHOLDER_EXPR)
13764 || operand_equal_p (max1, max2, 0)))))
13765 return true;
13766 else
13767 return false;
13771 case METHOD_TYPE:
13772 case FUNCTION_TYPE:
13773 /* Function types are the same if the return type and arguments types
13774 are the same. */
13775 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2),
13776 trust_type_canonical))
13777 return false;
13779 if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2))
13780 return true;
13781 else
13783 tree parms1, parms2;
13785 for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2);
13786 parms1 && parms2;
13787 parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2))
13789 if (!gimple_canonical_types_compatible_p
13790 (TREE_VALUE (parms1), TREE_VALUE (parms2),
13791 trust_type_canonical))
13792 return false;
13795 if (parms1 || parms2)
13796 return false;
13798 return true;
13801 case RECORD_TYPE:
13802 case UNION_TYPE:
13803 case QUAL_UNION_TYPE:
13805 tree f1, f2;
13807 /* Don't try to compare variants of an incomplete type, before
13808 TYPE_FIELDS has been copied around. */
13809 if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2))
13810 return true;
13813 if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2))
13814 return false;
13816 /* For aggregate types, all the fields must be the same. */
13817 for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2);
13818 f1 || f2;
13819 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
13821 /* Skip non-fields and zero-sized fields. */
13822 while (f1 && (TREE_CODE (f1) != FIELD_DECL
13823 || (DECL_SIZE (f1)
13824 && integer_zerop (DECL_SIZE (f1)))))
13825 f1 = TREE_CHAIN (f1);
13826 while (f2 && (TREE_CODE (f2) != FIELD_DECL
13827 || (DECL_SIZE (f2)
13828 && integer_zerop (DECL_SIZE (f2)))))
13829 f2 = TREE_CHAIN (f2);
13830 if (!f1 || !f2)
13831 break;
13832 /* The fields must have the same name, offset and type. */
13833 if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
13834 || !gimple_compare_field_offset (f1, f2)
13835 || !gimple_canonical_types_compatible_p
13836 (TREE_TYPE (f1), TREE_TYPE (f2),
13837 trust_type_canonical))
13838 return false;
13841 /* If one aggregate has more fields than the other, they
13842 are not the same. */
13843 if (f1 || f2)
13844 return false;
13846 return true;
13849 default:
13850 /* Consider all types with language specific trees in them mutually
13851 compatible. This is executed only from verify_type and false
13852 positives can be tolerated. */
13853 gcc_assert (!in_lto_p);
13854 return true;
13858 /* Verify type T. */
13860 void
13861 verify_type (const_tree t)
13863 bool error_found = false;
13864 tree mv = TYPE_MAIN_VARIANT (t);
13865 if (!mv)
13867 error ("Main variant is not defined");
13868 error_found = true;
13870 else if (mv != TYPE_MAIN_VARIANT (mv))
13872 error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT");
13873 debug_tree (mv);
13874 error_found = true;
13876 else if (t != mv && !verify_type_variant (t, mv))
13877 error_found = true;
13879 tree ct = TYPE_CANONICAL (t);
13880 if (!ct)
13882 else if (TYPE_CANONICAL (t) != ct)
13884 error ("TYPE_CANONICAL has different TYPE_CANONICAL");
13885 debug_tree (ct);
13886 error_found = true;
13888 /* Method and function types can not be used to address memory and thus
13889 TYPE_CANONICAL really matters only for determining useless conversions.
13891 FIXME: C++ FE produce declarations of builtin functions that are not
13892 compatible with main variants. */
13893 else if (TREE_CODE (t) == FUNCTION_TYPE)
13895 else if (t != ct
13896 /* FIXME: gimple_canonical_types_compatible_p can not compare types
13897 with variably sized arrays because their sizes possibly
13898 gimplified to different variables. */
13899 && !variably_modified_type_p (ct, NULL)
13900 && !gimple_canonical_types_compatible_p (t, ct, false))
13902 error ("TYPE_CANONICAL is not compatible");
13903 debug_tree (ct);
13904 error_found = true;
13907 if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t)
13908 && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t)))
13910 error ("TYPE_MODE of TYPE_CANONICAL is not compatible");
13911 debug_tree (ct);
13912 error_found = true;
13914 /* FIXME: this is violated by the C++ FE as discussed in PR70029, when
13915 FUNCTION_*_QUALIFIED flags are set. */
13916 if (0 && TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct)
13918 error ("TYPE_CANONICAL of main variant is not main variant");
13919 debug_tree (ct);
13920 debug_tree (TYPE_MAIN_VARIANT (ct));
13921 error_found = true;
13925 /* Check various uses of TYPE_MINVAL. */
13926 if (RECORD_OR_UNION_TYPE_P (t))
13928 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS
13929 and danagle the pointer from time to time. */
13930 if (TYPE_VFIELD (t)
13931 && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL
13932 && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST)
13934 error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST");
13935 debug_tree (TYPE_VFIELD (t));
13936 error_found = true;
13939 else if (TREE_CODE (t) == POINTER_TYPE)
13941 if (TYPE_NEXT_PTR_TO (t)
13942 && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE)
13944 error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE");
13945 debug_tree (TYPE_NEXT_PTR_TO (t));
13946 error_found = true;
13949 else if (TREE_CODE (t) == REFERENCE_TYPE)
13951 if (TYPE_NEXT_REF_TO (t)
13952 && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE)
13954 error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE");
13955 debug_tree (TYPE_NEXT_REF_TO (t));
13956 error_found = true;
13959 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
13960 || TREE_CODE (t) == FIXED_POINT_TYPE)
13962 /* FIXME: The following check should pass:
13963 useless_type_conversion_p (const_cast <tree> (t),
13964 TREE_TYPE (TYPE_MIN_VALUE (t))
13965 but does not for C sizetypes in LTO. */
13967 /* Java uses TYPE_MINVAL for TYPE_ARGUMENT_SIGNATURE. */
13968 else if (TYPE_MINVAL (t)
13969 && ((TREE_CODE (t) != METHOD_TYPE && TREE_CODE (t) != FUNCTION_TYPE)
13970 || in_lto_p))
13972 error ("TYPE_MINVAL non-NULL");
13973 debug_tree (TYPE_MINVAL (t));
13974 error_found = true;
13977 /* Check various uses of TYPE_MAXVAL. */
13978 if (RECORD_OR_UNION_TYPE_P (t))
13980 if (TYPE_METHODS (t) && TREE_CODE (TYPE_METHODS (t)) != FUNCTION_DECL
13981 && TREE_CODE (TYPE_METHODS (t)) != TEMPLATE_DECL
13982 && TYPE_METHODS (t) != error_mark_node)
13984 error ("TYPE_METHODS is not FUNCTION_DECL, TEMPLATE_DECL nor error_mark_node");
13985 debug_tree (TYPE_METHODS (t));
13986 error_found = true;
13989 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
13991 if (TYPE_METHOD_BASETYPE (t)
13992 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE
13993 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE)
13995 error ("TYPE_METHOD_BASETYPE is not record nor union");
13996 debug_tree (TYPE_METHOD_BASETYPE (t));
13997 error_found = true;
14000 else if (TREE_CODE (t) == OFFSET_TYPE)
14002 if (TYPE_OFFSET_BASETYPE (t)
14003 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE
14004 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE)
14006 error ("TYPE_OFFSET_BASETYPE is not record nor union");
14007 debug_tree (TYPE_OFFSET_BASETYPE (t));
14008 error_found = true;
14011 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE
14012 || TREE_CODE (t) == FIXED_POINT_TYPE)
14014 /* FIXME: The following check should pass:
14015 useless_type_conversion_p (const_cast <tree> (t),
14016 TREE_TYPE (TYPE_MAX_VALUE (t))
14017 but does not for C sizetypes in LTO. */
14019 else if (TREE_CODE (t) == ARRAY_TYPE)
14021 if (TYPE_ARRAY_MAX_SIZE (t)
14022 && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST)
14024 error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST");
14025 debug_tree (TYPE_ARRAY_MAX_SIZE (t));
14026 error_found = true;
14029 else if (TYPE_MAXVAL (t))
14031 error ("TYPE_MAXVAL non-NULL");
14032 debug_tree (TYPE_MAXVAL (t));
14033 error_found = true;
14036 /* Check various uses of TYPE_BINFO. */
14037 if (RECORD_OR_UNION_TYPE_P (t))
14039 if (!TYPE_BINFO (t))
14041 else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO)
14043 error ("TYPE_BINFO is not TREE_BINFO");
14044 debug_tree (TYPE_BINFO (t));
14045 error_found = true;
14047 /* FIXME: Java builds invalid empty binfos that do not have
14048 TREE_TYPE set. */
14049 else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t) && 0)
14051 error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT");
14052 debug_tree (TREE_TYPE (TYPE_BINFO (t)));
14053 error_found = true;
14056 else if (TYPE_LANG_SLOT_1 (t) && in_lto_p)
14058 error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL");
14059 debug_tree (TYPE_LANG_SLOT_1 (t));
14060 error_found = true;
14063 /* Check various uses of TYPE_VALUES_RAW. */
14064 if (TREE_CODE (t) == ENUMERAL_TYPE)
14065 for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l))
14067 tree value = TREE_VALUE (l);
14068 tree name = TREE_PURPOSE (l);
14070 /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses
14071 CONST_DECL of ENUMERAL TYPE. */
14072 if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL)
14074 error ("Enum value is not CONST_DECL or INTEGER_CST");
14075 debug_tree (value);
14076 debug_tree (name);
14077 error_found = true;
14079 if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE
14080 && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value)))
14082 error ("Enum value type is not INTEGER_TYPE nor convertible to the enum");
14083 debug_tree (value);
14084 debug_tree (name);
14085 error_found = true;
14087 if (TREE_CODE (name) != IDENTIFIER_NODE)
14089 error ("Enum value name is not IDENTIFIER_NODE");
14090 debug_tree (value);
14091 debug_tree (name);
14092 error_found = true;
14095 else if (TREE_CODE (t) == ARRAY_TYPE)
14097 if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE)
14099 error ("Array TYPE_DOMAIN is not integer type");
14100 debug_tree (TYPE_DOMAIN (t));
14101 error_found = true;
14104 else if (RECORD_OR_UNION_TYPE_P (t))
14106 if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p)
14108 error ("TYPE_FIELDS defined in incomplete type");
14109 error_found = true;
14111 for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld))
14113 /* TODO: verify properties of decls. */
14114 if (TREE_CODE (fld) == FIELD_DECL)
14116 else if (TREE_CODE (fld) == TYPE_DECL)
14118 else if (TREE_CODE (fld) == CONST_DECL)
14120 else if (VAR_P (fld))
14122 else if (TREE_CODE (fld) == TEMPLATE_DECL)
14124 else if (TREE_CODE (fld) == USING_DECL)
14126 else
14128 error ("Wrong tree in TYPE_FIELDS list");
14129 debug_tree (fld);
14130 error_found = true;
14134 else if (TREE_CODE (t) == INTEGER_TYPE
14135 || TREE_CODE (t) == BOOLEAN_TYPE
14136 || TREE_CODE (t) == OFFSET_TYPE
14137 || TREE_CODE (t) == REFERENCE_TYPE
14138 || TREE_CODE (t) == NULLPTR_TYPE
14139 || TREE_CODE (t) == POINTER_TYPE)
14141 if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL))
14143 error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p",
14144 TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t));
14145 error_found = true;
14147 else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC)
14149 error ("TYPE_CACHED_VALUES is not TREE_VEC");
14150 debug_tree (TYPE_CACHED_VALUES (t));
14151 error_found = true;
14153 /* Verify just enough of cache to ensure that no one copied it to new type.
14154 All copying should go by copy_node that should clear it. */
14155 else if (TYPE_CACHED_VALUES_P (t))
14157 int i;
14158 for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++)
14159 if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)
14160 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t)
14162 error ("wrong TYPE_CACHED_VALUES entry");
14163 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i));
14164 error_found = true;
14165 break;
14169 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
14170 for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l))
14172 /* C++ FE uses TREE_PURPOSE to store initial values. */
14173 if (TREE_PURPOSE (l) && in_lto_p)
14175 error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list");
14176 debug_tree (l);
14177 error_found = true;
14179 if (!TYPE_P (TREE_VALUE (l)))
14181 error ("Wrong entry in TYPE_ARG_TYPES list");
14182 debug_tree (l);
14183 error_found = true;
14186 else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t))
14188 error ("TYPE_VALUES_RAW field is non-NULL");
14189 debug_tree (TYPE_VALUES_RAW (t));
14190 error_found = true;
14192 if (TREE_CODE (t) != INTEGER_TYPE
14193 && TREE_CODE (t) != BOOLEAN_TYPE
14194 && TREE_CODE (t) != OFFSET_TYPE
14195 && TREE_CODE (t) != REFERENCE_TYPE
14196 && TREE_CODE (t) != NULLPTR_TYPE
14197 && TREE_CODE (t) != POINTER_TYPE
14198 && TYPE_CACHED_VALUES_P (t))
14200 error ("TYPE_CACHED_VALUES_P is set while it should not");
14201 error_found = true;
14203 if (TYPE_STRING_FLAG (t)
14204 && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE)
14206 error ("TYPE_STRING_FLAG is set on wrong type code");
14207 error_found = true;
14209 else if (TYPE_STRING_FLAG (t))
14211 const_tree b = t;
14212 if (TREE_CODE (b) == ARRAY_TYPE)
14213 b = TREE_TYPE (t);
14214 /* Java builds arrays with TYPE_STRING_FLAG of promoted_char_type
14215 that is 32bits. */
14216 if (TREE_CODE (b) != INTEGER_TYPE)
14218 error ("TYPE_STRING_FLAG is set on type that does not look like "
14219 "char nor array of chars");
14220 error_found = true;
14224 /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always
14225 TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns
14226 of a type. */
14227 if (TREE_CODE (t) == METHOD_TYPE
14228 && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t))
14230 error ("TYPE_METHOD_BASETYPE is not main variant");
14231 error_found = true;
14234 if (error_found)
14236 debug_tree (const_cast <tree> (t));
14237 internal_error ("verify_type failed");
14242 /* Return 1 if ARG interpreted as signed in its precision is known to be
14243 always positive or 2 if ARG is known to be always negative, or 3 if
14244 ARG may be positive or negative. */
14247 get_range_pos_neg (tree arg)
14249 if (arg == error_mark_node)
14250 return 3;
14252 int prec = TYPE_PRECISION (TREE_TYPE (arg));
14253 int cnt = 0;
14254 if (TREE_CODE (arg) == INTEGER_CST)
14256 wide_int w = wi::sext (arg, prec);
14257 if (wi::neg_p (w))
14258 return 2;
14259 else
14260 return 1;
14262 while (CONVERT_EXPR_P (arg)
14263 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0)))
14264 && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec)
14266 arg = TREE_OPERAND (arg, 0);
14267 /* Narrower value zero extended into wider type
14268 will always result in positive values. */
14269 if (TYPE_UNSIGNED (TREE_TYPE (arg))
14270 && TYPE_PRECISION (TREE_TYPE (arg)) < prec)
14271 return 1;
14272 prec = TYPE_PRECISION (TREE_TYPE (arg));
14273 if (++cnt > 30)
14274 return 3;
14277 if (TREE_CODE (arg) != SSA_NAME)
14278 return 3;
14279 wide_int arg_min, arg_max;
14280 while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE)
14282 gimple *g = SSA_NAME_DEF_STMT (arg);
14283 if (is_gimple_assign (g)
14284 && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g)))
14286 tree t = gimple_assign_rhs1 (g);
14287 if (INTEGRAL_TYPE_P (TREE_TYPE (t))
14288 && TYPE_PRECISION (TREE_TYPE (t)) <= prec)
14290 if (TYPE_UNSIGNED (TREE_TYPE (t))
14291 && TYPE_PRECISION (TREE_TYPE (t)) < prec)
14292 return 1;
14293 prec = TYPE_PRECISION (TREE_TYPE (t));
14294 arg = t;
14295 if (++cnt > 30)
14296 return 3;
14297 continue;
14300 return 3;
14302 if (TYPE_UNSIGNED (TREE_TYPE (arg)))
14304 /* For unsigned values, the "positive" range comes
14305 below the "negative" range. */
14306 if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14307 return 1;
14308 if (wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14309 return 2;
14311 else
14313 if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED))
14314 return 1;
14315 if (wi::neg_p (wi::sext (arg_max, prec), SIGNED))
14316 return 2;
14318 return 3;
14324 /* Return true if ARG is marked with the nonnull attribute in the
14325 current function signature. */
14327 bool
14328 nonnull_arg_p (const_tree arg)
14330 tree t, attrs, fntype;
14331 unsigned HOST_WIDE_INT arg_num;
14333 gcc_assert (TREE_CODE (arg) == PARM_DECL
14334 && (POINTER_TYPE_P (TREE_TYPE (arg))
14335 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE));
14337 /* The static chain decl is always non null. */
14338 if (arg == cfun->static_chain_decl)
14339 return true;
14341 /* THIS argument of method is always non-NULL. */
14342 if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE
14343 && arg == DECL_ARGUMENTS (cfun->decl)
14344 && flag_delete_null_pointer_checks)
14345 return true;
14347 /* Values passed by reference are always non-NULL. */
14348 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
14349 && flag_delete_null_pointer_checks)
14350 return true;
14352 fntype = TREE_TYPE (cfun->decl);
14353 for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs))
14355 attrs = lookup_attribute ("nonnull", attrs);
14357 /* If "nonnull" wasn't specified, we know nothing about the argument. */
14358 if (attrs == NULL_TREE)
14359 return false;
14361 /* If "nonnull" applies to all the arguments, then ARG is non-null. */
14362 if (TREE_VALUE (attrs) == NULL_TREE)
14363 return true;
14365 /* Get the position number for ARG in the function signature. */
14366 for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl);
14368 t = DECL_CHAIN (t), arg_num++)
14370 if (t == arg)
14371 break;
14374 gcc_assert (t == arg);
14376 /* Now see if ARG_NUM is mentioned in the nonnull list. */
14377 for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
14379 if (compare_tree_int (TREE_VALUE (t), arg_num) == 0)
14380 return true;
14384 return false;
14387 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range
14388 information. */
14390 location_t
14391 set_block (location_t loc, tree block)
14393 location_t pure_loc = get_pure_location (loc);
14394 source_range src_range = get_range_from_loc (line_table, loc);
14395 return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block);
14398 location_t
14399 set_source_range (tree expr, location_t start, location_t finish)
14401 source_range src_range;
14402 src_range.m_start = start;
14403 src_range.m_finish = finish;
14404 return set_source_range (expr, src_range);
14407 location_t
14408 set_source_range (tree expr, source_range src_range)
14410 if (!EXPR_P (expr))
14411 return UNKNOWN_LOCATION;
14413 location_t pure_loc = get_pure_location (EXPR_LOCATION (expr));
14414 location_t adhoc = COMBINE_LOCATION_DATA (line_table,
14415 pure_loc,
14416 src_range,
14417 NULL);
14418 SET_EXPR_LOCATION (expr, adhoc);
14419 return adhoc;
14422 /* Return the name of combined function FN, for debugging purposes. */
14424 const char *
14425 combined_fn_name (combined_fn fn)
14427 if (builtin_fn_p (fn))
14429 tree fndecl = builtin_decl_explicit (as_builtin_fn (fn));
14430 return IDENTIFIER_POINTER (DECL_NAME (fndecl));
14432 else
14433 return internal_fn_name (as_internal_fn (fn));
14436 /* Return a bitmap with a bit set corresponding to each argument in
14437 a function call type FNTYPE declared with attribute nonnull,
14438 or null if none of the function's argument are nonnull. The caller
14439 must free the bitmap. */
14441 bitmap
14442 get_nonnull_args (const_tree fntype)
14444 if (fntype == NULL_TREE)
14445 return NULL;
14447 tree attrs = TYPE_ATTRIBUTES (fntype);
14448 if (!attrs)
14449 return NULL;
14451 bitmap argmap = NULL;
14453 /* A function declaration can specify multiple attribute nonnull,
14454 each with zero or more arguments. The loop below creates a bitmap
14455 representing a union of all the arguments. An empty (but non-null)
14456 bitmap means that all arguments have been declaraed nonnull. */
14457 for ( ; attrs; attrs = TREE_CHAIN (attrs))
14459 attrs = lookup_attribute ("nonnull", attrs);
14460 if (!attrs)
14461 break;
14463 if (!argmap)
14464 argmap = BITMAP_ALLOC (NULL);
14466 if (!TREE_VALUE (attrs))
14468 /* Clear the bitmap in case a previous attribute nonnull
14469 set it and this one overrides it for all arguments. */
14470 bitmap_clear (argmap);
14471 return argmap;
14474 /* Iterate over the indices of the format arguments declared nonnull
14475 and set a bit for each. */
14476 for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx))
14478 unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1;
14479 bitmap_set_bit (argmap, val);
14483 return argmap;
14486 #if CHECKING_P
14488 namespace selftest {
14490 /* Selftests for tree. */
14492 /* Verify that integer constants are sane. */
14494 static void
14495 test_integer_constants ()
14497 ASSERT_TRUE (integer_type_node != NULL);
14498 ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL);
14500 tree type = integer_type_node;
14502 tree zero = build_zero_cst (type);
14503 ASSERT_EQ (INTEGER_CST, TREE_CODE (zero));
14504 ASSERT_EQ (type, TREE_TYPE (zero));
14506 tree one = build_int_cst (type, 1);
14507 ASSERT_EQ (INTEGER_CST, TREE_CODE (one));
14508 ASSERT_EQ (type, TREE_TYPE (zero));
14511 /* Verify identifiers. */
14513 static void
14514 test_identifiers ()
14516 tree identifier = get_identifier ("foo");
14517 ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier));
14518 ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier));
14521 /* Verify LABEL_DECL. */
14523 static void
14524 test_labels ()
14526 tree identifier = get_identifier ("err");
14527 tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL,
14528 identifier, void_type_node);
14529 ASSERT_EQ (-1, LABEL_DECL_UID (label_decl));
14530 ASSERT_FALSE (FORCED_LABEL (label_decl));
14533 /* Run all of the selftests within this file. */
14535 void
14536 tree_c_tests ()
14538 test_integer_constants ();
14539 test_identifiers ();
14540 test_labels ();
14543 } // namespace selftest
14545 #endif /* CHECKING_P */
14547 #include "gt-tree.h"