libgomp: Use pthread mutexes in the nvptx plugin.
[official-gcc.git] / gcc / tree.c
blob5eb330faf112006bb47162b86c6f2d814423c639
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2015 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 occasionally
28 calls language-dependent routines defined (for C) in typecheck.c. */
30 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "tm.h"
34 #include "flags.h"
35 #include "hash-set.h"
36 #include "machmode.h"
37 #include "vec.h"
38 #include "double-int.h"
39 #include "input.h"
40 #include "alias.h"
41 #include "symtab.h"
42 #include "wide-int.h"
43 #include "inchash.h"
44 #include "tree.h"
45 #include "fold-const.h"
46 #include "stor-layout.h"
47 #include "calls.h"
48 #include "attribs.h"
49 #include "varasm.h"
50 #include "tm_p.h"
51 #include "hashtab.h"
52 #include "hard-reg-set.h"
53 #include "input.h"
54 #include "function.h"
55 #include "obstack.h"
56 #include "toplev.h" /* get_random_seed */
57 #include "inchash.h"
58 #include "filenames.h"
59 #include "output.h"
60 #include "target.h"
61 #include "common/common-target.h"
62 #include "langhooks.h"
63 #include "tree-inline.h"
64 #include "tree-iterator.h"
65 #include "predict.h"
66 #include "dominance.h"
67 #include "cfg.h"
68 #include "basic-block.h"
69 #include "bitmap.h"
70 #include "tree-ssa-alias.h"
71 #include "internal-fn.h"
72 #include "gimple-expr.h"
73 #include "is-a.h"
74 #include "gimple.h"
75 #include "gimple-iterator.h"
76 #include "gimplify.h"
77 #include "gimple-ssa.h"
78 #include "hash-map.h"
79 #include "plugin-api.h"
80 #include "ipa-ref.h"
81 #include "cgraph.h"
82 #include "tree-phinodes.h"
83 #include "stringpool.h"
84 #include "tree-ssanames.h"
85 #include "expr.h"
86 #include "tree-dfa.h"
87 #include "params.h"
88 #include "tree-pass.h"
89 #include "langhooks-def.h"
90 #include "diagnostic.h"
91 #include "tree-diagnostic.h"
92 #include "tree-pretty-print.h"
93 #include "except.h"
94 #include "debug.h"
95 #include "intl.h"
96 #include "wide-int.h"
97 #include "builtins.h"
99 /* Tree code classes. */
101 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
102 #define END_OF_BASE_TREE_CODES tcc_exceptional,
104 const enum tree_code_class tree_code_type[] = {
105 #include "all-tree.def"
108 #undef DEFTREECODE
109 #undef END_OF_BASE_TREE_CODES
111 /* Table indexed by tree code giving number of expression
112 operands beyond the fixed part of the node structure.
113 Not used for types or decls. */
115 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
116 #define END_OF_BASE_TREE_CODES 0,
118 const unsigned char tree_code_length[] = {
119 #include "all-tree.def"
122 #undef DEFTREECODE
123 #undef END_OF_BASE_TREE_CODES
125 /* Names of tree components.
126 Used for printing out the tree and error messages. */
127 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
128 #define END_OF_BASE_TREE_CODES "@dummy",
130 static const char *const tree_code_name[] = {
131 #include "all-tree.def"
134 #undef DEFTREECODE
135 #undef END_OF_BASE_TREE_CODES
137 /* Each tree code class has an associated string representation.
138 These must correspond to the tree_code_class entries. */
140 const char *const tree_code_class_strings[] =
142 "exceptional",
143 "constant",
144 "type",
145 "declaration",
146 "reference",
147 "comparison",
148 "unary",
149 "binary",
150 "statement",
151 "vl_exp",
152 "expression"
155 /* obstack.[ch] explicitly declined to prototype this. */
156 extern int _obstack_allocated_p (struct obstack *h, void *obj);
158 /* Statistics-gathering stuff. */
160 static int tree_code_counts[MAX_TREE_CODES];
161 int tree_node_counts[(int) all_kinds];
162 int tree_node_sizes[(int) all_kinds];
164 /* Keep in sync with tree.h:enum tree_node_kind. */
165 static const char * const tree_node_kind_names[] = {
166 "decls",
167 "types",
168 "blocks",
169 "stmts",
170 "refs",
171 "exprs",
172 "constants",
173 "identifiers",
174 "vecs",
175 "binfos",
176 "ssa names",
177 "constructors",
178 "random kinds",
179 "lang_decl kinds",
180 "lang_type kinds",
181 "omp clauses",
184 /* Unique id for next decl created. */
185 static GTY(()) int next_decl_uid;
186 /* Unique id for next type created. */
187 static GTY(()) int next_type_uid = 1;
188 /* Unique id for next debug decl created. Use negative numbers,
189 to catch erroneous uses. */
190 static GTY(()) int next_debug_decl_uid;
192 /* Since we cannot rehash a type after it is in the table, we have to
193 keep the hash code. */
195 struct GTY((for_user)) type_hash {
196 unsigned long hash;
197 tree type;
200 /* Initial size of the hash table (rounded to next prime). */
201 #define TYPE_HASH_INITIAL_SIZE 1000
203 struct type_cache_hasher : ggc_cache_hasher<type_hash *>
205 static hashval_t hash (type_hash *t) { return t->hash; }
206 static bool equal (type_hash *a, type_hash *b);
208 static void
209 handle_cache_entry (type_hash *&t)
211 extern void gt_ggc_mx (type_hash *&);
212 if (t == HTAB_DELETED_ENTRY || t == HTAB_EMPTY_ENTRY)
213 return;
214 else if (ggc_marked_p (t->type))
215 gt_ggc_mx (t);
216 else
217 t = static_cast<type_hash *> (HTAB_DELETED_ENTRY);
221 /* Now here is the hash table. When recording a type, it is added to
222 the slot whose index is the hash code. Note that the hash table is
223 used for several kinds of types (function types, array types and
224 array index range types, for now). While all these live in the
225 same table, they are completely independent, and the hash code is
226 computed differently for each of these. */
228 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table;
230 /* Hash table and temporary node for larger integer const values. */
231 static GTY (()) tree int_cst_node;
233 struct int_cst_hasher : ggc_cache_hasher<tree>
235 static hashval_t hash (tree t);
236 static bool equal (tree x, tree y);
239 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table;
241 /* Hash table for optimization flags and target option flags. Use the same
242 hash table for both sets of options. Nodes for building the current
243 optimization and target option nodes. The assumption is most of the time
244 the options created will already be in the hash table, so we avoid
245 allocating and freeing up a node repeatably. */
246 static GTY (()) tree cl_optimization_node;
247 static GTY (()) tree cl_target_option_node;
249 struct cl_option_hasher : ggc_cache_hasher<tree>
251 static hashval_t hash (tree t);
252 static bool equal (tree x, tree y);
255 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table;
257 /* General tree->tree mapping structure for use in hash tables. */
260 static GTY ((cache))
261 hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl;
263 static GTY ((cache))
264 hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl;
266 struct tree_vec_map_cache_hasher : ggc_cache_hasher<tree_vec_map *>
268 static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); }
270 static bool
271 equal (tree_vec_map *a, tree_vec_map *b)
273 return a->base.from == b->base.from;
276 static void
277 handle_cache_entry (tree_vec_map *&m)
279 extern void gt_ggc_mx (tree_vec_map *&);
280 if (m == HTAB_EMPTY_ENTRY || m == HTAB_DELETED_ENTRY)
281 return;
282 else if (ggc_marked_p (m->base.from))
283 gt_ggc_mx (m);
284 else
285 m = static_cast<tree_vec_map *> (HTAB_DELETED_ENTRY);
289 static GTY ((cache))
290 hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl;
292 static void set_type_quals (tree, int);
293 static void print_type_hash_statistics (void);
294 static void print_debug_expr_statistics (void);
295 static void print_value_expr_statistics (void);
296 static void type_hash_list (const_tree, inchash::hash &);
297 static void attribute_hash_list (const_tree, inchash::hash &);
299 tree global_trees[TI_MAX];
300 tree integer_types[itk_none];
302 bool int_n_enabled_p[NUM_INT_N_ENTS];
303 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS];
305 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
307 /* Number of operands for each OpenMP clause. */
308 unsigned const char omp_clause_num_ops[] =
310 0, /* OMP_CLAUSE_ERROR */
311 1, /* OMP_CLAUSE_PRIVATE */
312 1, /* OMP_CLAUSE_SHARED */
313 1, /* OMP_CLAUSE_FIRSTPRIVATE */
314 2, /* OMP_CLAUSE_LASTPRIVATE */
315 4, /* OMP_CLAUSE_REDUCTION */
316 1, /* OMP_CLAUSE_COPYIN */
317 1, /* OMP_CLAUSE_COPYPRIVATE */
318 3, /* OMP_CLAUSE_LINEAR */
319 2, /* OMP_CLAUSE_ALIGNED */
320 1, /* OMP_CLAUSE_DEPEND */
321 1, /* OMP_CLAUSE_UNIFORM */
322 2, /* OMP_CLAUSE_FROM */
323 2, /* OMP_CLAUSE_TO */
324 2, /* OMP_CLAUSE_MAP */
325 2, /* OMP_CLAUSE__CACHE_ */
326 1, /* OMP_CLAUSE_DEVICE_RESIDENT */
327 1, /* OMP_CLAUSE_USE_DEVICE */
328 2, /* OMP_CLAUSE_GANG */
329 1, /* OMP_CLAUSE_ASYNC */
330 1, /* OMP_CLAUSE_WAIT */
331 0, /* OMP_CLAUSE_AUTO */
332 0, /* OMP_CLAUSE_SEQ */
333 1, /* OMP_CLAUSE__LOOPTEMP_ */
334 1, /* OMP_CLAUSE_IF */
335 1, /* OMP_CLAUSE_NUM_THREADS */
336 1, /* OMP_CLAUSE_SCHEDULE */
337 0, /* OMP_CLAUSE_NOWAIT */
338 0, /* OMP_CLAUSE_ORDERED */
339 0, /* OMP_CLAUSE_DEFAULT */
340 3, /* OMP_CLAUSE_COLLAPSE */
341 0, /* OMP_CLAUSE_UNTIED */
342 1, /* OMP_CLAUSE_FINAL */
343 0, /* OMP_CLAUSE_MERGEABLE */
344 1, /* OMP_CLAUSE_DEVICE */
345 1, /* OMP_CLAUSE_DIST_SCHEDULE */
346 0, /* OMP_CLAUSE_INBRANCH */
347 0, /* OMP_CLAUSE_NOTINBRANCH */
348 1, /* OMP_CLAUSE_NUM_TEAMS */
349 1, /* OMP_CLAUSE_THREAD_LIMIT */
350 0, /* OMP_CLAUSE_PROC_BIND */
351 1, /* OMP_CLAUSE_SAFELEN */
352 1, /* OMP_CLAUSE_SIMDLEN */
353 0, /* OMP_CLAUSE_FOR */
354 0, /* OMP_CLAUSE_PARALLEL */
355 0, /* OMP_CLAUSE_SECTIONS */
356 0, /* OMP_CLAUSE_TASKGROUP */
357 1, /* OMP_CLAUSE__SIMDUID_ */
358 1, /* OMP_CLAUSE__CILK_FOR_COUNT_ */
359 0, /* OMP_CLAUSE_INDEPENDENT */
360 1, /* OMP_CLAUSE_WORKER */
361 1, /* OMP_CLAUSE_VECTOR */
362 1, /* OMP_CLAUSE_NUM_GANGS */
363 1, /* OMP_CLAUSE_NUM_WORKERS */
364 1, /* OMP_CLAUSE_VECTOR_LENGTH */
367 const char * const omp_clause_code_name[] =
369 "error_clause",
370 "private",
371 "shared",
372 "firstprivate",
373 "lastprivate",
374 "reduction",
375 "copyin",
376 "copyprivate",
377 "linear",
378 "aligned",
379 "depend",
380 "uniform",
381 "from",
382 "to",
383 "map",
384 "_cache_",
385 "device_resident",
386 "use_device",
387 "gang",
388 "async",
389 "wait",
390 "auto",
391 "seq",
392 "_looptemp_",
393 "if",
394 "num_threads",
395 "schedule",
396 "nowait",
397 "ordered",
398 "default",
399 "collapse",
400 "untied",
401 "final",
402 "mergeable",
403 "device",
404 "dist_schedule",
405 "inbranch",
406 "notinbranch",
407 "num_teams",
408 "thread_limit",
409 "proc_bind",
410 "safelen",
411 "simdlen",
412 "for",
413 "parallel",
414 "sections",
415 "taskgroup",
416 "_simduid_",
417 "_Cilk_for_count_",
418 "independent",
419 "worker",
420 "vector",
421 "num_gangs",
422 "num_workers",
423 "vector_length"
427 /* Return the tree node structure used by tree code CODE. */
429 static inline enum tree_node_structure_enum
430 tree_node_structure_for_code (enum tree_code code)
432 switch (TREE_CODE_CLASS (code))
434 case tcc_declaration:
436 switch (code)
438 case FIELD_DECL:
439 return TS_FIELD_DECL;
440 case PARM_DECL:
441 return TS_PARM_DECL;
442 case VAR_DECL:
443 return TS_VAR_DECL;
444 case LABEL_DECL:
445 return TS_LABEL_DECL;
446 case RESULT_DECL:
447 return TS_RESULT_DECL;
448 case DEBUG_EXPR_DECL:
449 return TS_DECL_WRTL;
450 case CONST_DECL:
451 return TS_CONST_DECL;
452 case TYPE_DECL:
453 return TS_TYPE_DECL;
454 case FUNCTION_DECL:
455 return TS_FUNCTION_DECL;
456 case TRANSLATION_UNIT_DECL:
457 return TS_TRANSLATION_UNIT_DECL;
458 default:
459 return TS_DECL_NON_COMMON;
462 case tcc_type:
463 return TS_TYPE_NON_COMMON;
464 case tcc_reference:
465 case tcc_comparison:
466 case tcc_unary:
467 case tcc_binary:
468 case tcc_expression:
469 case tcc_statement:
470 case tcc_vl_exp:
471 return TS_EXP;
472 default: /* tcc_constant and tcc_exceptional */
473 break;
475 switch (code)
477 /* tcc_constant cases. */
478 case VOID_CST: return TS_TYPED;
479 case INTEGER_CST: return TS_INT_CST;
480 case REAL_CST: return TS_REAL_CST;
481 case FIXED_CST: return TS_FIXED_CST;
482 case COMPLEX_CST: return TS_COMPLEX;
483 case VECTOR_CST: return TS_VECTOR;
484 case STRING_CST: return TS_STRING;
485 /* tcc_exceptional cases. */
486 case ERROR_MARK: return TS_COMMON;
487 case IDENTIFIER_NODE: return TS_IDENTIFIER;
488 case TREE_LIST: return TS_LIST;
489 case TREE_VEC: return TS_VEC;
490 case SSA_NAME: return TS_SSA_NAME;
491 case PLACEHOLDER_EXPR: return TS_COMMON;
492 case STATEMENT_LIST: return TS_STATEMENT_LIST;
493 case BLOCK: return TS_BLOCK;
494 case CONSTRUCTOR: return TS_CONSTRUCTOR;
495 case TREE_BINFO: return TS_BINFO;
496 case OMP_CLAUSE: return TS_OMP_CLAUSE;
497 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
498 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
500 default:
501 gcc_unreachable ();
506 /* Initialize tree_contains_struct to describe the hierarchy of tree
507 nodes. */
509 static void
510 initialize_tree_contains_struct (void)
512 unsigned i;
514 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
516 enum tree_code code;
517 enum tree_node_structure_enum ts_code;
519 code = (enum tree_code) i;
520 ts_code = tree_node_structure_for_code (code);
522 /* Mark the TS structure itself. */
523 tree_contains_struct[code][ts_code] = 1;
525 /* Mark all the structures that TS is derived from. */
526 switch (ts_code)
528 case TS_TYPED:
529 case TS_BLOCK:
530 MARK_TS_BASE (code);
531 break;
533 case TS_COMMON:
534 case TS_INT_CST:
535 case TS_REAL_CST:
536 case TS_FIXED_CST:
537 case TS_VECTOR:
538 case TS_STRING:
539 case TS_COMPLEX:
540 case TS_SSA_NAME:
541 case TS_CONSTRUCTOR:
542 case TS_EXP:
543 case TS_STATEMENT_LIST:
544 MARK_TS_TYPED (code);
545 break;
547 case TS_IDENTIFIER:
548 case TS_DECL_MINIMAL:
549 case TS_TYPE_COMMON:
550 case TS_LIST:
551 case TS_VEC:
552 case TS_BINFO:
553 case TS_OMP_CLAUSE:
554 case TS_OPTIMIZATION:
555 case TS_TARGET_OPTION:
556 MARK_TS_COMMON (code);
557 break;
559 case TS_TYPE_WITH_LANG_SPECIFIC:
560 MARK_TS_TYPE_COMMON (code);
561 break;
563 case TS_TYPE_NON_COMMON:
564 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
565 break;
567 case TS_DECL_COMMON:
568 MARK_TS_DECL_MINIMAL (code);
569 break;
571 case TS_DECL_WRTL:
572 case TS_CONST_DECL:
573 MARK_TS_DECL_COMMON (code);
574 break;
576 case TS_DECL_NON_COMMON:
577 MARK_TS_DECL_WITH_VIS (code);
578 break;
580 case TS_DECL_WITH_VIS:
581 case TS_PARM_DECL:
582 case TS_LABEL_DECL:
583 case TS_RESULT_DECL:
584 MARK_TS_DECL_WRTL (code);
585 break;
587 case TS_FIELD_DECL:
588 MARK_TS_DECL_COMMON (code);
589 break;
591 case TS_VAR_DECL:
592 MARK_TS_DECL_WITH_VIS (code);
593 break;
595 case TS_TYPE_DECL:
596 case TS_FUNCTION_DECL:
597 MARK_TS_DECL_NON_COMMON (code);
598 break;
600 case TS_TRANSLATION_UNIT_DECL:
601 MARK_TS_DECL_COMMON (code);
602 break;
604 default:
605 gcc_unreachable ();
609 /* Basic consistency checks for attributes used in fold. */
610 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
611 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
612 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
613 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
614 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
615 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
616 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
617 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
618 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
619 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
620 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
621 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
622 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
623 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
624 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
625 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
626 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
627 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
628 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
629 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
630 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
631 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
632 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
633 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
634 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
635 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
636 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
637 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
638 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
639 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
640 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
641 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
642 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
643 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
644 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
645 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
646 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
647 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
648 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
649 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
653 /* Init tree.c. */
655 void
656 init_ttree (void)
658 /* Initialize the hash table of types. */
659 type_hash_table
660 = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE);
662 debug_expr_for_decl
663 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
665 value_expr_for_decl
666 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
668 int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024);
670 int_cst_node = make_int_cst (1, 1);
672 cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64);
674 cl_optimization_node = make_node (OPTIMIZATION_NODE);
675 cl_target_option_node = make_node (TARGET_OPTION_NODE);
677 /* Initialize the tree_contains_struct array. */
678 initialize_tree_contains_struct ();
679 lang_hooks.init_ts ();
683 /* The name of the object as the assembler will see it (but before any
684 translations made by ASM_OUTPUT_LABELREF). Often this is the same
685 as DECL_NAME. It is an IDENTIFIER_NODE. */
686 tree
687 decl_assembler_name (tree decl)
689 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
690 lang_hooks.set_decl_assembler_name (decl);
691 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
694 /* When the target supports COMDAT groups, this indicates which group the
695 DECL is associated with. This can be either an IDENTIFIER_NODE or a
696 decl, in which case its DECL_ASSEMBLER_NAME identifies the group. */
697 tree
698 decl_comdat_group (const_tree node)
700 struct symtab_node *snode = symtab_node::get (node);
701 if (!snode)
702 return NULL;
703 return snode->get_comdat_group ();
706 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE. */
707 tree
708 decl_comdat_group_id (const_tree node)
710 struct symtab_node *snode = symtab_node::get (node);
711 if (!snode)
712 return NULL;
713 return snode->get_comdat_group_id ();
716 /* When the target supports named section, return its name as IDENTIFIER_NODE
717 or NULL if it is in no section. */
718 const char *
719 decl_section_name (const_tree node)
721 struct symtab_node *snode = symtab_node::get (node);
722 if (!snode)
723 return NULL;
724 return snode->get_section ();
727 /* Set section section name of NODE to VALUE (that is expected to
728 be identifier node) */
729 void
730 set_decl_section_name (tree node, const char *value)
732 struct symtab_node *snode;
734 if (value == NULL)
736 snode = symtab_node::get (node);
737 if (!snode)
738 return;
740 else if (TREE_CODE (node) == VAR_DECL)
741 snode = varpool_node::get_create (node);
742 else
743 snode = cgraph_node::get_create (node);
744 snode->set_section (value);
747 /* Return TLS model of a variable NODE. */
748 enum tls_model
749 decl_tls_model (const_tree node)
751 struct varpool_node *snode = varpool_node::get (node);
752 if (!snode)
753 return TLS_MODEL_NONE;
754 return snode->tls_model;
757 /* Set TLS model of variable NODE to MODEL. */
758 void
759 set_decl_tls_model (tree node, enum tls_model model)
761 struct varpool_node *vnode;
763 if (model == TLS_MODEL_NONE)
765 vnode = varpool_node::get (node);
766 if (!vnode)
767 return;
769 else
770 vnode = varpool_node::get_create (node);
771 vnode->tls_model = model;
774 /* Compute the number of bytes occupied by a tree with code CODE.
775 This function cannot be used for nodes that have variable sizes,
776 including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR. */
777 size_t
778 tree_code_size (enum tree_code code)
780 switch (TREE_CODE_CLASS (code))
782 case tcc_declaration: /* A decl node */
784 switch (code)
786 case FIELD_DECL:
787 return sizeof (struct tree_field_decl);
788 case PARM_DECL:
789 return sizeof (struct tree_parm_decl);
790 case VAR_DECL:
791 return sizeof (struct tree_var_decl);
792 case LABEL_DECL:
793 return sizeof (struct tree_label_decl);
794 case RESULT_DECL:
795 return sizeof (struct tree_result_decl);
796 case CONST_DECL:
797 return sizeof (struct tree_const_decl);
798 case TYPE_DECL:
799 return sizeof (struct tree_type_decl);
800 case FUNCTION_DECL:
801 return sizeof (struct tree_function_decl);
802 case DEBUG_EXPR_DECL:
803 return sizeof (struct tree_decl_with_rtl);
804 case TRANSLATION_UNIT_DECL:
805 return sizeof (struct tree_translation_unit_decl);
806 case NAMESPACE_DECL:
807 case IMPORTED_DECL:
808 case NAMELIST_DECL:
809 return sizeof (struct tree_decl_non_common);
810 default:
811 return lang_hooks.tree_size (code);
815 case tcc_type: /* a type node */
816 return sizeof (struct tree_type_non_common);
818 case tcc_reference: /* a reference */
819 case tcc_expression: /* an expression */
820 case tcc_statement: /* an expression with side effects */
821 case tcc_comparison: /* a comparison expression */
822 case tcc_unary: /* a unary arithmetic expression */
823 case tcc_binary: /* a binary arithmetic expression */
824 return (sizeof (struct tree_exp)
825 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
827 case tcc_constant: /* a constant */
828 switch (code)
830 case VOID_CST: return sizeof (struct tree_typed);
831 case INTEGER_CST: gcc_unreachable ();
832 case REAL_CST: return sizeof (struct tree_real_cst);
833 case FIXED_CST: return sizeof (struct tree_fixed_cst);
834 case COMPLEX_CST: return sizeof (struct tree_complex);
835 case VECTOR_CST: return sizeof (struct tree_vector);
836 case STRING_CST: gcc_unreachable ();
837 default:
838 return lang_hooks.tree_size (code);
841 case tcc_exceptional: /* something random, like an identifier. */
842 switch (code)
844 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
845 case TREE_LIST: return sizeof (struct tree_list);
847 case ERROR_MARK:
848 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
850 case TREE_VEC:
851 case OMP_CLAUSE: gcc_unreachable ();
853 case SSA_NAME: return sizeof (struct tree_ssa_name);
855 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
856 case BLOCK: return sizeof (struct tree_block);
857 case CONSTRUCTOR: return sizeof (struct tree_constructor);
858 case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
859 case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
861 default:
862 return lang_hooks.tree_size (code);
865 default:
866 gcc_unreachable ();
870 /* Compute the number of bytes occupied by NODE. This routine only
871 looks at TREE_CODE, except for those nodes that have variable sizes. */
872 size_t
873 tree_size (const_tree node)
875 const enum tree_code code = TREE_CODE (node);
876 switch (code)
878 case INTEGER_CST:
879 return (sizeof (struct tree_int_cst)
880 + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT));
882 case TREE_BINFO:
883 return (offsetof (struct tree_binfo, base_binfos)
884 + vec<tree, va_gc>
885 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
887 case TREE_VEC:
888 return (sizeof (struct tree_vec)
889 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
891 case VECTOR_CST:
892 return (sizeof (struct tree_vector)
893 + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
895 case STRING_CST:
896 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
898 case OMP_CLAUSE:
899 return (sizeof (struct tree_omp_clause)
900 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
901 * sizeof (tree));
903 default:
904 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
905 return (sizeof (struct tree_exp)
906 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
907 else
908 return tree_code_size (code);
912 /* Record interesting allocation statistics for a tree node with CODE
913 and LENGTH. */
915 static void
916 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
917 size_t length ATTRIBUTE_UNUSED)
919 enum tree_code_class type = TREE_CODE_CLASS (code);
920 tree_node_kind kind;
922 if (!GATHER_STATISTICS)
923 return;
925 switch (type)
927 case tcc_declaration: /* A decl node */
928 kind = d_kind;
929 break;
931 case tcc_type: /* a type node */
932 kind = t_kind;
933 break;
935 case tcc_statement: /* an expression with side effects */
936 kind = s_kind;
937 break;
939 case tcc_reference: /* a reference */
940 kind = r_kind;
941 break;
943 case tcc_expression: /* an expression */
944 case tcc_comparison: /* a comparison expression */
945 case tcc_unary: /* a unary arithmetic expression */
946 case tcc_binary: /* a binary arithmetic expression */
947 kind = e_kind;
948 break;
950 case tcc_constant: /* a constant */
951 kind = c_kind;
952 break;
954 case tcc_exceptional: /* something random, like an identifier. */
955 switch (code)
957 case IDENTIFIER_NODE:
958 kind = id_kind;
959 break;
961 case TREE_VEC:
962 kind = vec_kind;
963 break;
965 case TREE_BINFO:
966 kind = binfo_kind;
967 break;
969 case SSA_NAME:
970 kind = ssa_name_kind;
971 break;
973 case BLOCK:
974 kind = b_kind;
975 break;
977 case CONSTRUCTOR:
978 kind = constr_kind;
979 break;
981 case OMP_CLAUSE:
982 kind = omp_clause_kind;
983 break;
985 default:
986 kind = x_kind;
987 break;
989 break;
991 case tcc_vl_exp:
992 kind = e_kind;
993 break;
995 default:
996 gcc_unreachable ();
999 tree_code_counts[(int) code]++;
1000 tree_node_counts[(int) kind]++;
1001 tree_node_sizes[(int) kind] += length;
1004 /* Allocate and return a new UID from the DECL_UID namespace. */
1007 allocate_decl_uid (void)
1009 return next_decl_uid++;
1012 /* Return a newly allocated node of code CODE. For decl and type
1013 nodes, some other fields are initialized. The rest of the node is
1014 initialized to zero. This function cannot be used for TREE_VEC,
1015 INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in
1016 tree_code_size.
1018 Achoo! I got a code in the node. */
1020 tree
1021 make_node_stat (enum tree_code code MEM_STAT_DECL)
1023 tree t;
1024 enum tree_code_class type = TREE_CODE_CLASS (code);
1025 size_t length = tree_code_size (code);
1027 record_node_allocation_statistics (code, length);
1029 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1030 TREE_SET_CODE (t, code);
1032 switch (type)
1034 case tcc_statement:
1035 TREE_SIDE_EFFECTS (t) = 1;
1036 break;
1038 case tcc_declaration:
1039 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
1041 if (code == FUNCTION_DECL)
1043 DECL_ALIGN (t) = FUNCTION_BOUNDARY;
1044 DECL_MODE (t) = FUNCTION_MODE;
1046 else
1047 DECL_ALIGN (t) = 1;
1049 DECL_SOURCE_LOCATION (t) = input_location;
1050 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
1051 DECL_UID (t) = --next_debug_decl_uid;
1052 else
1054 DECL_UID (t) = allocate_decl_uid ();
1055 SET_DECL_PT_UID (t, -1);
1057 if (TREE_CODE (t) == LABEL_DECL)
1058 LABEL_DECL_UID (t) = -1;
1060 break;
1062 case tcc_type:
1063 TYPE_UID (t) = next_type_uid++;
1064 TYPE_ALIGN (t) = BITS_PER_UNIT;
1065 TYPE_USER_ALIGN (t) = 0;
1066 TYPE_MAIN_VARIANT (t) = t;
1067 TYPE_CANONICAL (t) = t;
1069 /* Default to no attributes for type, but let target change that. */
1070 TYPE_ATTRIBUTES (t) = NULL_TREE;
1071 targetm.set_default_type_attributes (t);
1073 /* We have not yet computed the alias set for this type. */
1074 TYPE_ALIAS_SET (t) = -1;
1075 break;
1077 case tcc_constant:
1078 TREE_CONSTANT (t) = 1;
1079 break;
1081 case tcc_expression:
1082 switch (code)
1084 case INIT_EXPR:
1085 case MODIFY_EXPR:
1086 case VA_ARG_EXPR:
1087 case PREDECREMENT_EXPR:
1088 case PREINCREMENT_EXPR:
1089 case POSTDECREMENT_EXPR:
1090 case POSTINCREMENT_EXPR:
1091 /* All of these have side-effects, no matter what their
1092 operands are. */
1093 TREE_SIDE_EFFECTS (t) = 1;
1094 break;
1096 default:
1097 break;
1099 break;
1101 default:
1102 /* Other classes need no special treatment. */
1103 break;
1106 return t;
1109 /* Return a new node with the same contents as NODE except that its
1110 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
1112 tree
1113 copy_node_stat (tree node MEM_STAT_DECL)
1115 tree t;
1116 enum tree_code code = TREE_CODE (node);
1117 size_t length;
1119 gcc_assert (code != STATEMENT_LIST);
1121 length = tree_size (node);
1122 record_node_allocation_statistics (code, length);
1123 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1124 memcpy (t, node, length);
1126 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
1127 TREE_CHAIN (t) = 0;
1128 TREE_ASM_WRITTEN (t) = 0;
1129 TREE_VISITED (t) = 0;
1131 if (TREE_CODE_CLASS (code) == tcc_declaration)
1133 if (code == DEBUG_EXPR_DECL)
1134 DECL_UID (t) = --next_debug_decl_uid;
1135 else
1137 DECL_UID (t) = allocate_decl_uid ();
1138 if (DECL_PT_UID_SET_P (node))
1139 SET_DECL_PT_UID (t, DECL_PT_UID (node));
1141 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
1142 && DECL_HAS_VALUE_EXPR_P (node))
1144 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
1145 DECL_HAS_VALUE_EXPR_P (t) = 1;
1147 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
1148 if (TREE_CODE (node) == VAR_DECL)
1150 DECL_HAS_DEBUG_EXPR_P (t) = 0;
1151 t->decl_with_vis.symtab_node = NULL;
1153 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
1155 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
1156 DECL_HAS_INIT_PRIORITY_P (t) = 1;
1158 if (TREE_CODE (node) == FUNCTION_DECL)
1160 DECL_STRUCT_FUNCTION (t) = NULL;
1161 t->decl_with_vis.symtab_node = NULL;
1164 else if (TREE_CODE_CLASS (code) == tcc_type)
1166 TYPE_UID (t) = next_type_uid++;
1167 /* The following is so that the debug code for
1168 the copy is different from the original type.
1169 The two statements usually duplicate each other
1170 (because they clear fields of the same union),
1171 but the optimizer should catch that. */
1172 TYPE_SYMTAB_POINTER (t) = 0;
1173 TYPE_SYMTAB_ADDRESS (t) = 0;
1175 /* Do not copy the values cache. */
1176 if (TYPE_CACHED_VALUES_P (t))
1178 TYPE_CACHED_VALUES_P (t) = 0;
1179 TYPE_CACHED_VALUES (t) = NULL_TREE;
1183 return t;
1186 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1187 For example, this can copy a list made of TREE_LIST nodes. */
1189 tree
1190 copy_list (tree list)
1192 tree head;
1193 tree prev, next;
1195 if (list == 0)
1196 return 0;
1198 head = prev = copy_node (list);
1199 next = TREE_CHAIN (list);
1200 while (next)
1202 TREE_CHAIN (prev) = copy_node (next);
1203 prev = TREE_CHAIN (prev);
1204 next = TREE_CHAIN (next);
1206 return head;
1210 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an
1211 INTEGER_CST with value CST and type TYPE. */
1213 static unsigned int
1214 get_int_cst_ext_nunits (tree type, const wide_int &cst)
1216 gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type));
1217 /* We need an extra zero HWI if CST is an unsigned integer with its
1218 upper bit set, and if CST occupies a whole number of HWIs. */
1219 if (TYPE_UNSIGNED (type)
1220 && wi::neg_p (cst)
1221 && (cst.get_precision () % HOST_BITS_PER_WIDE_INT) == 0)
1222 return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1;
1223 return cst.get_len ();
1226 /* Return a new INTEGER_CST with value CST and type TYPE. */
1228 static tree
1229 build_new_int_cst (tree type, const wide_int &cst)
1231 unsigned int len = cst.get_len ();
1232 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1233 tree nt = make_int_cst (len, ext_len);
1235 if (len < ext_len)
1237 --ext_len;
1238 TREE_INT_CST_ELT (nt, ext_len) = 0;
1239 for (unsigned int i = len; i < ext_len; ++i)
1240 TREE_INT_CST_ELT (nt, i) = -1;
1242 else if (TYPE_UNSIGNED (type)
1243 && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT)
1245 len--;
1246 TREE_INT_CST_ELT (nt, len)
1247 = zext_hwi (cst.elt (len),
1248 cst.get_precision () % HOST_BITS_PER_WIDE_INT);
1251 for (unsigned int i = 0; i < len; i++)
1252 TREE_INT_CST_ELT (nt, i) = cst.elt (i);
1253 TREE_TYPE (nt) = type;
1254 return nt;
1257 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1259 tree
1260 build_int_cst (tree type, HOST_WIDE_INT low)
1262 /* Support legacy code. */
1263 if (!type)
1264 type = integer_type_node;
1266 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1269 tree
1270 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst)
1272 return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type)));
1275 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1277 tree
1278 build_int_cst_type (tree type, HOST_WIDE_INT low)
1280 gcc_assert (type);
1281 return wide_int_to_tree (type, wi::shwi (low, TYPE_PRECISION (type)));
1284 /* Constructs tree in type TYPE from with value given by CST. Signedness
1285 of CST is assumed to be the same as the signedness of TYPE. */
1287 tree
1288 double_int_to_tree (tree type, double_int cst)
1290 return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type)));
1293 /* We force the wide_int CST to the range of the type TYPE by sign or
1294 zero extending it. OVERFLOWABLE indicates if we are interested in
1295 overflow of the value, when >0 we are only interested in signed
1296 overflow, for <0 we are interested in any overflow. OVERFLOWED
1297 indicates whether overflow has already occurred. CONST_OVERFLOWED
1298 indicates whether constant overflow has already occurred. We force
1299 T's value to be within range of T's type (by setting to 0 or 1 all
1300 the bits outside the type's range). We set TREE_OVERFLOWED if,
1301 OVERFLOWED is nonzero,
1302 or OVERFLOWABLE is >0 and signed overflow occurs
1303 or OVERFLOWABLE is <0 and any overflow occurs
1304 We return a new tree node for the extended wide_int. The node
1305 is shared if no overflow flags are set. */
1308 tree
1309 force_fit_type (tree type, const wide_int_ref &cst,
1310 int overflowable, bool overflowed)
1312 signop sign = TYPE_SIGN (type);
1314 /* If we need to set overflow flags, return a new unshared node. */
1315 if (overflowed || !wi::fits_to_tree_p (cst, type))
1317 if (overflowed
1318 || overflowable < 0
1319 || (overflowable > 0 && sign == SIGNED))
1321 wide_int tmp = wide_int::from (cst, TYPE_PRECISION (type), sign);
1322 tree t = build_new_int_cst (type, tmp);
1323 TREE_OVERFLOW (t) = 1;
1324 return t;
1328 /* Else build a shared node. */
1329 return wide_int_to_tree (type, cst);
1332 /* These are the hash table functions for the hash table of INTEGER_CST
1333 nodes of a sizetype. */
1335 /* Return the hash code code X, an INTEGER_CST. */
1337 hashval_t
1338 int_cst_hasher::hash (tree x)
1340 const_tree const t = x;
1341 hashval_t code = TYPE_UID (TREE_TYPE (t));
1342 int i;
1344 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
1345 code ^= TREE_INT_CST_ELT (t, i);
1347 return code;
1350 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1351 is the same as that given by *Y, which is the same. */
1353 bool
1354 int_cst_hasher::equal (tree x, tree y)
1356 const_tree const xt = x;
1357 const_tree const yt = y;
1359 if (TREE_TYPE (xt) != TREE_TYPE (yt)
1360 || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt)
1361 || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt))
1362 return false;
1364 for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++)
1365 if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i))
1366 return false;
1368 return true;
1371 /* Create an INT_CST node of TYPE and value CST.
1372 The returned node is always shared. For small integers we use a
1373 per-type vector cache, for larger ones we use a single hash table.
1374 The value is extended from its precision according to the sign of
1375 the type to be a multiple of HOST_BITS_PER_WIDE_INT. This defines
1376 the upper bits and ensures that hashing and value equality based
1377 upon the underlying HOST_WIDE_INTs works without masking. */
1379 tree
1380 wide_int_to_tree (tree type, const wide_int_ref &pcst)
1382 tree t;
1383 int ix = -1;
1384 int limit = 0;
1386 gcc_assert (type);
1387 unsigned int prec = TYPE_PRECISION (type);
1388 signop sgn = TYPE_SIGN (type);
1390 /* Verify that everything is canonical. */
1391 int l = pcst.get_len ();
1392 if (l > 1)
1394 if (pcst.elt (l - 1) == 0)
1395 gcc_checking_assert (pcst.elt (l - 2) < 0);
1396 if (pcst.elt (l - 1) == (HOST_WIDE_INT) -1)
1397 gcc_checking_assert (pcst.elt (l - 2) >= 0);
1400 wide_int cst = wide_int::from (pcst, prec, sgn);
1401 unsigned int ext_len = get_int_cst_ext_nunits (type, cst);
1403 if (ext_len == 1)
1405 /* We just need to store a single HOST_WIDE_INT. */
1406 HOST_WIDE_INT hwi;
1407 if (TYPE_UNSIGNED (type))
1408 hwi = cst.to_uhwi ();
1409 else
1410 hwi = cst.to_shwi ();
1412 switch (TREE_CODE (type))
1414 case NULLPTR_TYPE:
1415 gcc_assert (hwi == 0);
1416 /* Fallthru. */
1418 case POINTER_TYPE:
1419 case REFERENCE_TYPE:
1420 case POINTER_BOUNDS_TYPE:
1421 /* Cache NULL pointer and zero bounds. */
1422 if (hwi == 0)
1424 limit = 1;
1425 ix = 0;
1427 break;
1429 case BOOLEAN_TYPE:
1430 /* Cache false or true. */
1431 limit = 2;
1432 if (hwi < 2)
1433 ix = hwi;
1434 break;
1436 case INTEGER_TYPE:
1437 case OFFSET_TYPE:
1438 if (TYPE_SIGN (type) == UNSIGNED)
1440 /* Cache [0, N). */
1441 limit = INTEGER_SHARE_LIMIT;
1442 if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1))
1443 ix = hwi;
1445 else
1447 /* Cache [-1, N). */
1448 limit = INTEGER_SHARE_LIMIT + 1;
1449 if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1))
1450 ix = hwi + 1;
1452 break;
1454 case ENUMERAL_TYPE:
1455 break;
1457 default:
1458 gcc_unreachable ();
1461 if (ix >= 0)
1463 /* Look for it in the type's vector of small shared ints. */
1464 if (!TYPE_CACHED_VALUES_P (type))
1466 TYPE_CACHED_VALUES_P (type) = 1;
1467 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1470 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1471 if (t)
1472 /* Make sure no one is clobbering the shared constant. */
1473 gcc_checking_assert (TREE_TYPE (t) == type
1474 && TREE_INT_CST_NUNITS (t) == 1
1475 && TREE_INT_CST_OFFSET_NUNITS (t) == 1
1476 && TREE_INT_CST_EXT_NUNITS (t) == 1
1477 && TREE_INT_CST_ELT (t, 0) == hwi);
1478 else
1480 /* Create a new shared int. */
1481 t = build_new_int_cst (type, cst);
1482 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1485 else
1487 /* Use the cache of larger shared ints, using int_cst_node as
1488 a temporary. */
1490 TREE_INT_CST_ELT (int_cst_node, 0) = hwi;
1491 TREE_TYPE (int_cst_node) = type;
1493 tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT);
1494 t = *slot;
1495 if (!t)
1497 /* Insert this one into the hash table. */
1498 t = int_cst_node;
1499 *slot = t;
1500 /* Make a new node for next time round. */
1501 int_cst_node = make_int_cst (1, 1);
1505 else
1507 /* The value either hashes properly or we drop it on the floor
1508 for the gc to take care of. There will not be enough of them
1509 to worry about. */
1511 tree nt = build_new_int_cst (type, cst);
1512 tree *slot = int_cst_hash_table->find_slot (nt, INSERT);
1513 t = *slot;
1514 if (!t)
1516 /* Insert this one into the hash table. */
1517 t = nt;
1518 *slot = t;
1522 return t;
1525 void
1526 cache_integer_cst (tree t)
1528 tree type = TREE_TYPE (t);
1529 int ix = -1;
1530 int limit = 0;
1531 int prec = TYPE_PRECISION (type);
1533 gcc_assert (!TREE_OVERFLOW (t));
1535 switch (TREE_CODE (type))
1537 case NULLPTR_TYPE:
1538 gcc_assert (integer_zerop (t));
1539 /* Fallthru. */
1541 case POINTER_TYPE:
1542 case REFERENCE_TYPE:
1543 /* Cache NULL pointer. */
1544 if (integer_zerop (t))
1546 limit = 1;
1547 ix = 0;
1549 break;
1551 case BOOLEAN_TYPE:
1552 /* Cache false or true. */
1553 limit = 2;
1554 if (wi::ltu_p (t, 2))
1555 ix = TREE_INT_CST_ELT (t, 0);
1556 break;
1558 case INTEGER_TYPE:
1559 case OFFSET_TYPE:
1560 if (TYPE_UNSIGNED (type))
1562 /* Cache 0..N */
1563 limit = INTEGER_SHARE_LIMIT;
1565 /* This is a little hokie, but if the prec is smaller than
1566 what is necessary to hold INTEGER_SHARE_LIMIT, then the
1567 obvious test will not get the correct answer. */
1568 if (prec < HOST_BITS_PER_WIDE_INT)
1570 if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT)
1571 ix = tree_to_uhwi (t);
1573 else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1574 ix = tree_to_uhwi (t);
1576 else
1578 /* Cache -1..N */
1579 limit = INTEGER_SHARE_LIMIT + 1;
1581 if (integer_minus_onep (t))
1582 ix = 0;
1583 else if (!wi::neg_p (t))
1585 if (prec < HOST_BITS_PER_WIDE_INT)
1587 if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT)
1588 ix = tree_to_shwi (t) + 1;
1590 else if (wi::ltu_p (t, INTEGER_SHARE_LIMIT))
1591 ix = tree_to_shwi (t) + 1;
1594 break;
1596 case ENUMERAL_TYPE:
1597 break;
1599 default:
1600 gcc_unreachable ();
1603 if (ix >= 0)
1605 /* Look for it in the type's vector of small shared ints. */
1606 if (!TYPE_CACHED_VALUES_P (type))
1608 TYPE_CACHED_VALUES_P (type) = 1;
1609 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1612 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1613 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1615 else
1617 /* Use the cache of larger shared ints. */
1618 tree *slot = int_cst_hash_table->find_slot (t, INSERT);
1619 /* If there is already an entry for the number verify it's the
1620 same. */
1621 if (*slot)
1622 gcc_assert (wi::eq_p (tree (*slot), t));
1623 else
1624 /* Otherwise insert this one into the hash table. */
1625 *slot = t;
1630 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1631 and the rest are zeros. */
1633 tree
1634 build_low_bits_mask (tree type, unsigned bits)
1636 gcc_assert (bits <= TYPE_PRECISION (type));
1638 return wide_int_to_tree (type, wi::mask (bits, false,
1639 TYPE_PRECISION (type)));
1642 /* Checks that X is integer constant that can be expressed in (unsigned)
1643 HOST_WIDE_INT without loss of precision. */
1645 bool
1646 cst_and_fits_in_hwi (const_tree x)
1648 if (TREE_CODE (x) != INTEGER_CST)
1649 return false;
1651 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1652 return false;
1654 return TREE_INT_CST_NUNITS (x) == 1;
1657 /* Build a newly constructed TREE_VEC node of length LEN. */
1659 tree
1660 make_vector_stat (unsigned len MEM_STAT_DECL)
1662 tree t;
1663 unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1665 record_node_allocation_statistics (VECTOR_CST, length);
1667 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1669 TREE_SET_CODE (t, VECTOR_CST);
1670 TREE_CONSTANT (t) = 1;
1672 return t;
1675 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1676 are in a list pointed to by VALS. */
1678 tree
1679 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1681 int over = 0;
1682 unsigned cnt = 0;
1683 tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1684 TREE_TYPE (v) = type;
1686 /* Iterate through elements and check for overflow. */
1687 for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1689 tree value = vals[cnt];
1691 VECTOR_CST_ELT (v, cnt) = value;
1693 /* Don't crash if we get an address constant. */
1694 if (!CONSTANT_CLASS_P (value))
1695 continue;
1697 over |= TREE_OVERFLOW (value);
1700 TREE_OVERFLOW (v) = over;
1701 return v;
1704 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1705 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1707 tree
1708 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1710 tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1711 unsigned HOST_WIDE_INT idx;
1712 tree value;
1714 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1715 vec[idx] = value;
1716 for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
1717 vec[idx] = build_zero_cst (TREE_TYPE (type));
1719 return build_vector (type, vec);
1722 /* Build a vector of type VECTYPE where all the elements are SCs. */
1723 tree
1724 build_vector_from_val (tree vectype, tree sc)
1726 int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1728 if (sc == error_mark_node)
1729 return sc;
1731 /* Verify that the vector type is suitable for SC. Note that there
1732 is some inconsistency in the type-system with respect to restrict
1733 qualifications of pointers. Vector types always have a main-variant
1734 element type and the qualification is applied to the vector-type.
1735 So TREE_TYPE (vector-type) does not return a properly qualified
1736 vector element-type. */
1737 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1738 TREE_TYPE (vectype)));
1740 if (CONSTANT_CLASS_P (sc))
1742 tree *v = XALLOCAVEC (tree, nunits);
1743 for (i = 0; i < nunits; ++i)
1744 v[i] = sc;
1745 return build_vector (vectype, v);
1747 else
1749 vec<constructor_elt, va_gc> *v;
1750 vec_alloc (v, nunits);
1751 for (i = 0; i < nunits; ++i)
1752 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1753 return build_constructor (vectype, v);
1757 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1758 are in the vec pointed to by VALS. */
1759 tree
1760 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1762 tree c = make_node (CONSTRUCTOR);
1763 unsigned int i;
1764 constructor_elt *elt;
1765 bool constant_p = true;
1766 bool side_effects_p = false;
1768 TREE_TYPE (c) = type;
1769 CONSTRUCTOR_ELTS (c) = vals;
1771 FOR_EACH_VEC_SAFE_ELT (vals, i, elt)
1773 /* Mostly ctors will have elts that don't have side-effects, so
1774 the usual case is to scan all the elements. Hence a single
1775 loop for both const and side effects, rather than one loop
1776 each (with early outs). */
1777 if (!TREE_CONSTANT (elt->value))
1778 constant_p = false;
1779 if (TREE_SIDE_EFFECTS (elt->value))
1780 side_effects_p = true;
1783 TREE_SIDE_EFFECTS (c) = side_effects_p;
1784 TREE_CONSTANT (c) = constant_p;
1786 return c;
1789 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1790 INDEX and VALUE. */
1791 tree
1792 build_constructor_single (tree type, tree index, tree value)
1794 vec<constructor_elt, va_gc> *v;
1795 constructor_elt elt = {index, value};
1797 vec_alloc (v, 1);
1798 v->quick_push (elt);
1800 return build_constructor (type, v);
1804 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1805 are in a list pointed to by VALS. */
1806 tree
1807 build_constructor_from_list (tree type, tree vals)
1809 tree t;
1810 vec<constructor_elt, va_gc> *v = NULL;
1812 if (vals)
1814 vec_alloc (v, list_length (vals));
1815 for (t = vals; t; t = TREE_CHAIN (t))
1816 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1819 return build_constructor (type, v);
1822 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
1823 of elements, provided as index/value pairs. */
1825 tree
1826 build_constructor_va (tree type, int nelts, ...)
1828 vec<constructor_elt, va_gc> *v = NULL;
1829 va_list p;
1831 va_start (p, nelts);
1832 vec_alloc (v, nelts);
1833 while (nelts--)
1835 tree index = va_arg (p, tree);
1836 tree value = va_arg (p, tree);
1837 CONSTRUCTOR_APPEND_ELT (v, index, value);
1839 va_end (p);
1840 return build_constructor (type, v);
1843 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1845 tree
1846 build_fixed (tree type, FIXED_VALUE_TYPE f)
1848 tree v;
1849 FIXED_VALUE_TYPE *fp;
1851 v = make_node (FIXED_CST);
1852 fp = ggc_alloc<fixed_value> ();
1853 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1855 TREE_TYPE (v) = type;
1856 TREE_FIXED_CST_PTR (v) = fp;
1857 return v;
1860 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1862 tree
1863 build_real (tree type, REAL_VALUE_TYPE d)
1865 tree v;
1866 REAL_VALUE_TYPE *dp;
1867 int overflow = 0;
1869 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1870 Consider doing it via real_convert now. */
1872 v = make_node (REAL_CST);
1873 dp = ggc_alloc<real_value> ();
1874 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1876 TREE_TYPE (v) = type;
1877 TREE_REAL_CST_PTR (v) = dp;
1878 TREE_OVERFLOW (v) = overflow;
1879 return v;
1882 /* Return a new REAL_CST node whose type is TYPE
1883 and whose value is the integer value of the INTEGER_CST node I. */
1885 REAL_VALUE_TYPE
1886 real_value_from_int_cst (const_tree type, const_tree i)
1888 REAL_VALUE_TYPE d;
1890 /* Clear all bits of the real value type so that we can later do
1891 bitwise comparisons to see if two values are the same. */
1892 memset (&d, 0, sizeof d);
1894 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, i,
1895 TYPE_SIGN (TREE_TYPE (i)));
1896 return d;
1899 /* Given a tree representing an integer constant I, return a tree
1900 representing the same value as a floating-point constant of type TYPE. */
1902 tree
1903 build_real_from_int_cst (tree type, const_tree i)
1905 tree v;
1906 int overflow = TREE_OVERFLOW (i);
1908 v = build_real (type, real_value_from_int_cst (type, i));
1910 TREE_OVERFLOW (v) |= overflow;
1911 return v;
1914 /* Return a newly constructed STRING_CST node whose value is
1915 the LEN characters at STR.
1916 Note that for a C string literal, LEN should include the trailing NUL.
1917 The TREE_TYPE is not initialized. */
1919 tree
1920 build_string (int len, const char *str)
1922 tree s;
1923 size_t length;
1925 /* Do not waste bytes provided by padding of struct tree_string. */
1926 length = len + offsetof (struct tree_string, str) + 1;
1928 record_node_allocation_statistics (STRING_CST, length);
1930 s = (tree) ggc_internal_alloc (length);
1932 memset (s, 0, sizeof (struct tree_typed));
1933 TREE_SET_CODE (s, STRING_CST);
1934 TREE_CONSTANT (s) = 1;
1935 TREE_STRING_LENGTH (s) = len;
1936 memcpy (s->string.str, str, len);
1937 s->string.str[len] = '\0';
1939 return s;
1942 /* Return a newly constructed COMPLEX_CST node whose value is
1943 specified by the real and imaginary parts REAL and IMAG.
1944 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1945 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1947 tree
1948 build_complex (tree type, tree real, tree imag)
1950 tree t = make_node (COMPLEX_CST);
1952 TREE_REALPART (t) = real;
1953 TREE_IMAGPART (t) = imag;
1954 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1955 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1956 return t;
1959 /* Return a constant of arithmetic type TYPE which is the
1960 multiplicative identity of the set TYPE. */
1962 tree
1963 build_one_cst (tree type)
1965 switch (TREE_CODE (type))
1967 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1968 case POINTER_TYPE: case REFERENCE_TYPE:
1969 case OFFSET_TYPE:
1970 return build_int_cst (type, 1);
1972 case REAL_TYPE:
1973 return build_real (type, dconst1);
1975 case FIXED_POINT_TYPE:
1976 /* We can only generate 1 for accum types. */
1977 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1978 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
1980 case VECTOR_TYPE:
1982 tree scalar = build_one_cst (TREE_TYPE (type));
1984 return build_vector_from_val (type, scalar);
1987 case COMPLEX_TYPE:
1988 return build_complex (type,
1989 build_one_cst (TREE_TYPE (type)),
1990 build_zero_cst (TREE_TYPE (type)));
1992 default:
1993 gcc_unreachable ();
1997 /* Return an integer of type TYPE containing all 1's in as much precision as
1998 it contains, or a complex or vector whose subparts are such integers. */
2000 tree
2001 build_all_ones_cst (tree type)
2003 if (TREE_CODE (type) == COMPLEX_TYPE)
2005 tree scalar = build_all_ones_cst (TREE_TYPE (type));
2006 return build_complex (type, scalar, scalar);
2008 else
2009 return build_minus_one_cst (type);
2012 /* Return a constant of arithmetic type TYPE which is the
2013 opposite of the multiplicative identity of the set TYPE. */
2015 tree
2016 build_minus_one_cst (tree type)
2018 switch (TREE_CODE (type))
2020 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2021 case POINTER_TYPE: case REFERENCE_TYPE:
2022 case OFFSET_TYPE:
2023 return build_int_cst (type, -1);
2025 case REAL_TYPE:
2026 return build_real (type, dconstm1);
2028 case FIXED_POINT_TYPE:
2029 /* We can only generate 1 for accum types. */
2030 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
2031 return build_fixed (type, fixed_from_double_int (double_int_minus_one,
2032 TYPE_MODE (type)));
2034 case VECTOR_TYPE:
2036 tree scalar = build_minus_one_cst (TREE_TYPE (type));
2038 return build_vector_from_val (type, scalar);
2041 case COMPLEX_TYPE:
2042 return build_complex (type,
2043 build_minus_one_cst (TREE_TYPE (type)),
2044 build_zero_cst (TREE_TYPE (type)));
2046 default:
2047 gcc_unreachable ();
2051 /* Build 0 constant of type TYPE. This is used by constructor folding
2052 and thus the constant should be represented in memory by
2053 zero(es). */
2055 tree
2056 build_zero_cst (tree type)
2058 switch (TREE_CODE (type))
2060 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
2061 case POINTER_TYPE: case REFERENCE_TYPE:
2062 case OFFSET_TYPE: case NULLPTR_TYPE:
2063 return build_int_cst (type, 0);
2065 case REAL_TYPE:
2066 return build_real (type, dconst0);
2068 case FIXED_POINT_TYPE:
2069 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
2071 case VECTOR_TYPE:
2073 tree scalar = build_zero_cst (TREE_TYPE (type));
2075 return build_vector_from_val (type, scalar);
2078 case COMPLEX_TYPE:
2080 tree zero = build_zero_cst (TREE_TYPE (type));
2082 return build_complex (type, zero, zero);
2085 default:
2086 if (!AGGREGATE_TYPE_P (type))
2087 return fold_convert (type, integer_zero_node);
2088 return build_constructor (type, NULL);
2093 /* Build a BINFO with LEN language slots. */
2095 tree
2096 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
2098 tree t;
2099 size_t length = (offsetof (struct tree_binfo, base_binfos)
2100 + vec<tree, va_gc>::embedded_size (base_binfos));
2102 record_node_allocation_statistics (TREE_BINFO, length);
2104 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
2106 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
2108 TREE_SET_CODE (t, TREE_BINFO);
2110 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
2112 return t;
2115 /* Create a CASE_LABEL_EXPR tree node and return it. */
2117 tree
2118 build_case_label (tree low_value, tree high_value, tree label_decl)
2120 tree t = make_node (CASE_LABEL_EXPR);
2122 TREE_TYPE (t) = void_type_node;
2123 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
2125 CASE_LOW (t) = low_value;
2126 CASE_HIGH (t) = high_value;
2127 CASE_LABEL (t) = label_decl;
2128 CASE_CHAIN (t) = NULL_TREE;
2130 return t;
2133 /* Build a newly constructed INTEGER_CST node. LEN and EXT_LEN are the
2134 values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively.
2135 The latter determines the length of the HOST_WIDE_INT vector. */
2137 tree
2138 make_int_cst_stat (int len, int ext_len MEM_STAT_DECL)
2140 tree t;
2141 int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT)
2142 + sizeof (struct tree_int_cst));
2144 gcc_assert (len);
2145 record_node_allocation_statistics (INTEGER_CST, length);
2147 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2149 TREE_SET_CODE (t, INTEGER_CST);
2150 TREE_INT_CST_NUNITS (t) = len;
2151 TREE_INT_CST_EXT_NUNITS (t) = ext_len;
2152 /* to_offset can only be applied to trees that are offset_int-sized
2153 or smaller. EXT_LEN is correct if it fits, otherwise the constant
2154 must be exactly the precision of offset_int and so LEN is correct. */
2155 if (ext_len <= OFFSET_INT_ELTS)
2156 TREE_INT_CST_OFFSET_NUNITS (t) = ext_len;
2157 else
2158 TREE_INT_CST_OFFSET_NUNITS (t) = len;
2160 TREE_CONSTANT (t) = 1;
2162 return t;
2165 /* Build a newly constructed TREE_VEC node of length LEN. */
2167 tree
2168 make_tree_vec_stat (int len MEM_STAT_DECL)
2170 tree t;
2171 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2173 record_node_allocation_statistics (TREE_VEC, length);
2175 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
2177 TREE_SET_CODE (t, TREE_VEC);
2178 TREE_VEC_LENGTH (t) = len;
2180 return t;
2183 /* Grow a TREE_VEC node to new length LEN. */
2185 tree
2186 grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
2188 gcc_assert (TREE_CODE (v) == TREE_VEC);
2190 int oldlen = TREE_VEC_LENGTH (v);
2191 gcc_assert (len > oldlen);
2193 int oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
2194 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
2196 record_node_allocation_statistics (TREE_VEC, length - oldlength);
2198 v = (tree) ggc_realloc (v, length PASS_MEM_STAT);
2200 TREE_VEC_LENGTH (v) = len;
2202 return v;
2205 /* Return 1 if EXPR is the integer constant zero or a complex constant
2206 of zero. */
2209 integer_zerop (const_tree expr)
2211 STRIP_NOPS (expr);
2213 switch (TREE_CODE (expr))
2215 case INTEGER_CST:
2216 return wi::eq_p (expr, 0);
2217 case COMPLEX_CST:
2218 return (integer_zerop (TREE_REALPART (expr))
2219 && integer_zerop (TREE_IMAGPART (expr)));
2220 case VECTOR_CST:
2222 unsigned i;
2223 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2224 if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
2225 return false;
2226 return true;
2228 default:
2229 return false;
2233 /* Return 1 if EXPR is the integer constant one or the corresponding
2234 complex constant. */
2237 integer_onep (const_tree expr)
2239 STRIP_NOPS (expr);
2241 switch (TREE_CODE (expr))
2243 case INTEGER_CST:
2244 return wi::eq_p (wi::to_widest (expr), 1);
2245 case COMPLEX_CST:
2246 return (integer_onep (TREE_REALPART (expr))
2247 && integer_zerop (TREE_IMAGPART (expr)));
2248 case VECTOR_CST:
2250 unsigned i;
2251 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2252 if (!integer_onep (VECTOR_CST_ELT (expr, i)))
2253 return false;
2254 return true;
2256 default:
2257 return false;
2261 /* Return 1 if EXPR is the integer constant one. For complex and vector,
2262 return 1 if every piece is the integer constant one. */
2265 integer_each_onep (const_tree expr)
2267 STRIP_NOPS (expr);
2269 if (TREE_CODE (expr) == COMPLEX_CST)
2270 return (integer_onep (TREE_REALPART (expr))
2271 && integer_onep (TREE_IMAGPART (expr)));
2272 else
2273 return integer_onep (expr);
2276 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
2277 it contains, or a complex or vector whose subparts are such integers. */
2280 integer_all_onesp (const_tree expr)
2282 STRIP_NOPS (expr);
2284 if (TREE_CODE (expr) == COMPLEX_CST
2285 && integer_all_onesp (TREE_REALPART (expr))
2286 && integer_all_onesp (TREE_IMAGPART (expr)))
2287 return 1;
2289 else if (TREE_CODE (expr) == VECTOR_CST)
2291 unsigned i;
2292 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2293 if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
2294 return 0;
2295 return 1;
2298 else if (TREE_CODE (expr) != INTEGER_CST)
2299 return 0;
2301 return wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED) == expr;
2304 /* Return 1 if EXPR is the integer constant minus one. */
2307 integer_minus_onep (const_tree expr)
2309 STRIP_NOPS (expr);
2311 if (TREE_CODE (expr) == COMPLEX_CST)
2312 return (integer_all_onesp (TREE_REALPART (expr))
2313 && integer_zerop (TREE_IMAGPART (expr)));
2314 else
2315 return integer_all_onesp (expr);
2318 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2319 one bit on). */
2322 integer_pow2p (const_tree expr)
2324 STRIP_NOPS (expr);
2326 if (TREE_CODE (expr) == COMPLEX_CST
2327 && integer_pow2p (TREE_REALPART (expr))
2328 && integer_zerop (TREE_IMAGPART (expr)))
2329 return 1;
2331 if (TREE_CODE (expr) != INTEGER_CST)
2332 return 0;
2334 return wi::popcount (expr) == 1;
2337 /* Return 1 if EXPR is an integer constant other than zero or a
2338 complex constant other than zero. */
2341 integer_nonzerop (const_tree expr)
2343 STRIP_NOPS (expr);
2345 return ((TREE_CODE (expr) == INTEGER_CST
2346 && !wi::eq_p (expr, 0))
2347 || (TREE_CODE (expr) == COMPLEX_CST
2348 && (integer_nonzerop (TREE_REALPART (expr))
2349 || integer_nonzerop (TREE_IMAGPART (expr)))));
2352 /* Return 1 if EXPR is the integer constant one. For vector,
2353 return 1 if every piece is the integer constant minus one
2354 (representing the value TRUE). */
2357 integer_truep (const_tree expr)
2359 STRIP_NOPS (expr);
2361 if (TREE_CODE (expr) == VECTOR_CST)
2362 return integer_all_onesp (expr);
2363 return integer_onep (expr);
2366 /* Return 1 if EXPR is the fixed-point constant zero. */
2369 fixed_zerop (const_tree expr)
2371 return (TREE_CODE (expr) == FIXED_CST
2372 && TREE_FIXED_CST (expr).data.is_zero ());
2375 /* Return the power of two represented by a tree node known to be a
2376 power of two. */
2379 tree_log2 (const_tree expr)
2381 STRIP_NOPS (expr);
2383 if (TREE_CODE (expr) == COMPLEX_CST)
2384 return tree_log2 (TREE_REALPART (expr));
2386 return wi::exact_log2 (expr);
2389 /* Similar, but return the largest integer Y such that 2 ** Y is less
2390 than or equal to EXPR. */
2393 tree_floor_log2 (const_tree expr)
2395 STRIP_NOPS (expr);
2397 if (TREE_CODE (expr) == COMPLEX_CST)
2398 return tree_log2 (TREE_REALPART (expr));
2400 return wi::floor_log2 (expr);
2403 /* Return number of known trailing zero bits in EXPR, or, if the value of
2404 EXPR is known to be zero, the precision of it's type. */
2406 unsigned int
2407 tree_ctz (const_tree expr)
2409 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2410 && !POINTER_TYPE_P (TREE_TYPE (expr)))
2411 return 0;
2413 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2414 switch (TREE_CODE (expr))
2416 case INTEGER_CST:
2417 ret1 = wi::ctz (expr);
2418 return MIN (ret1, prec);
2419 case SSA_NAME:
2420 ret1 = wi::ctz (get_nonzero_bits (expr));
2421 return MIN (ret1, prec);
2422 case PLUS_EXPR:
2423 case MINUS_EXPR:
2424 case BIT_IOR_EXPR:
2425 case BIT_XOR_EXPR:
2426 case MIN_EXPR:
2427 case MAX_EXPR:
2428 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2429 if (ret1 == 0)
2430 return ret1;
2431 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2432 return MIN (ret1, ret2);
2433 case POINTER_PLUS_EXPR:
2434 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2435 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2436 /* Second operand is sizetype, which could be in theory
2437 wider than pointer's precision. Make sure we never
2438 return more than prec. */
2439 ret2 = MIN (ret2, prec);
2440 return MIN (ret1, ret2);
2441 case BIT_AND_EXPR:
2442 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2443 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2444 return MAX (ret1, ret2);
2445 case MULT_EXPR:
2446 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2447 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2448 return MIN (ret1 + ret2, prec);
2449 case LSHIFT_EXPR:
2450 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2451 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2452 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2454 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2455 return MIN (ret1 + ret2, prec);
2457 return ret1;
2458 case RSHIFT_EXPR:
2459 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2460 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2462 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2463 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2464 if (ret1 > ret2)
2465 return ret1 - ret2;
2467 return 0;
2468 case TRUNC_DIV_EXPR:
2469 case CEIL_DIV_EXPR:
2470 case FLOOR_DIV_EXPR:
2471 case ROUND_DIV_EXPR:
2472 case EXACT_DIV_EXPR:
2473 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2474 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2476 int l = tree_log2 (TREE_OPERAND (expr, 1));
2477 if (l >= 0)
2479 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2480 ret2 = l;
2481 if (ret1 > ret2)
2482 return ret1 - ret2;
2485 return 0;
2486 CASE_CONVERT:
2487 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2488 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2489 ret1 = prec;
2490 return MIN (ret1, prec);
2491 case SAVE_EXPR:
2492 return tree_ctz (TREE_OPERAND (expr, 0));
2493 case COND_EXPR:
2494 ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2495 if (ret1 == 0)
2496 return 0;
2497 ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2498 return MIN (ret1, ret2);
2499 case COMPOUND_EXPR:
2500 return tree_ctz (TREE_OPERAND (expr, 1));
2501 case ADDR_EXPR:
2502 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2503 if (ret1 > BITS_PER_UNIT)
2505 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2506 return MIN (ret1, prec);
2508 return 0;
2509 default:
2510 return 0;
2514 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2515 decimal float constants, so don't return 1 for them. */
2518 real_zerop (const_tree expr)
2520 STRIP_NOPS (expr);
2522 switch (TREE_CODE (expr))
2524 case REAL_CST:
2525 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)
2526 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2527 case COMPLEX_CST:
2528 return real_zerop (TREE_REALPART (expr))
2529 && real_zerop (TREE_IMAGPART (expr));
2530 case VECTOR_CST:
2532 unsigned i;
2533 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2534 if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2535 return false;
2536 return true;
2538 default:
2539 return false;
2543 /* Return 1 if EXPR is the real constant one in real or complex form.
2544 Trailing zeroes matter for decimal float constants, so don't return
2545 1 for them. */
2548 real_onep (const_tree expr)
2550 STRIP_NOPS (expr);
2552 switch (TREE_CODE (expr))
2554 case REAL_CST:
2555 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)
2556 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2557 case COMPLEX_CST:
2558 return real_onep (TREE_REALPART (expr))
2559 && real_zerop (TREE_IMAGPART (expr));
2560 case VECTOR_CST:
2562 unsigned i;
2563 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2564 if (!real_onep (VECTOR_CST_ELT (expr, i)))
2565 return false;
2566 return true;
2568 default:
2569 return false;
2573 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2574 matter for decimal float constants, so don't return 1 for them. */
2577 real_minus_onep (const_tree expr)
2579 STRIP_NOPS (expr);
2581 switch (TREE_CODE (expr))
2583 case REAL_CST:
2584 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1)
2585 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2586 case COMPLEX_CST:
2587 return real_minus_onep (TREE_REALPART (expr))
2588 && real_zerop (TREE_IMAGPART (expr));
2589 case VECTOR_CST:
2591 unsigned i;
2592 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2593 if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2594 return false;
2595 return true;
2597 default:
2598 return false;
2602 /* Nonzero if EXP is a constant or a cast of a constant. */
2605 really_constant_p (const_tree exp)
2607 /* This is not quite the same as STRIP_NOPS. It does more. */
2608 while (CONVERT_EXPR_P (exp)
2609 || TREE_CODE (exp) == NON_LVALUE_EXPR)
2610 exp = TREE_OPERAND (exp, 0);
2611 return TREE_CONSTANT (exp);
2614 /* Return first list element whose TREE_VALUE is ELEM.
2615 Return 0 if ELEM is not in LIST. */
2617 tree
2618 value_member (tree elem, tree list)
2620 while (list)
2622 if (elem == TREE_VALUE (list))
2623 return list;
2624 list = TREE_CHAIN (list);
2626 return NULL_TREE;
2629 /* Return first list element whose TREE_PURPOSE is ELEM.
2630 Return 0 if ELEM is not in LIST. */
2632 tree
2633 purpose_member (const_tree elem, tree list)
2635 while (list)
2637 if (elem == TREE_PURPOSE (list))
2638 return list;
2639 list = TREE_CHAIN (list);
2641 return NULL_TREE;
2644 /* Return true if ELEM is in V. */
2646 bool
2647 vec_member (const_tree elem, vec<tree, va_gc> *v)
2649 unsigned ix;
2650 tree t;
2651 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2652 if (elem == t)
2653 return true;
2654 return false;
2657 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2658 NULL_TREE. */
2660 tree
2661 chain_index (int idx, tree chain)
2663 for (; chain && idx > 0; --idx)
2664 chain = TREE_CHAIN (chain);
2665 return chain;
2668 /* Return nonzero if ELEM is part of the chain CHAIN. */
2671 chain_member (const_tree elem, const_tree chain)
2673 while (chain)
2675 if (elem == chain)
2676 return 1;
2677 chain = DECL_CHAIN (chain);
2680 return 0;
2683 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2684 We expect a null pointer to mark the end of the chain.
2685 This is the Lisp primitive `length'. */
2688 list_length (const_tree t)
2690 const_tree p = t;
2691 #ifdef ENABLE_TREE_CHECKING
2692 const_tree q = t;
2693 #endif
2694 int len = 0;
2696 while (p)
2698 p = TREE_CHAIN (p);
2699 #ifdef ENABLE_TREE_CHECKING
2700 if (len % 2)
2701 q = TREE_CHAIN (q);
2702 gcc_assert (p != q);
2703 #endif
2704 len++;
2707 return len;
2710 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2711 UNION_TYPE TYPE, or NULL_TREE if none. */
2713 tree
2714 first_field (const_tree type)
2716 tree t = TYPE_FIELDS (type);
2717 while (t && TREE_CODE (t) != FIELD_DECL)
2718 t = TREE_CHAIN (t);
2719 return t;
2722 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2723 by modifying the last node in chain 1 to point to chain 2.
2724 This is the Lisp primitive `nconc'. */
2726 tree
2727 chainon (tree op1, tree op2)
2729 tree t1;
2731 if (!op1)
2732 return op2;
2733 if (!op2)
2734 return op1;
2736 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2737 continue;
2738 TREE_CHAIN (t1) = op2;
2740 #ifdef ENABLE_TREE_CHECKING
2742 tree t2;
2743 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2744 gcc_assert (t2 != t1);
2746 #endif
2748 return op1;
2751 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2753 tree
2754 tree_last (tree chain)
2756 tree next;
2757 if (chain)
2758 while ((next = TREE_CHAIN (chain)))
2759 chain = next;
2760 return chain;
2763 /* Reverse the order of elements in the chain T,
2764 and return the new head of the chain (old last element). */
2766 tree
2767 nreverse (tree t)
2769 tree prev = 0, decl, next;
2770 for (decl = t; decl; decl = next)
2772 /* We shouldn't be using this function to reverse BLOCK chains; we
2773 have blocks_nreverse for that. */
2774 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2775 next = TREE_CHAIN (decl);
2776 TREE_CHAIN (decl) = prev;
2777 prev = decl;
2779 return prev;
2782 /* Return a newly created TREE_LIST node whose
2783 purpose and value fields are PARM and VALUE. */
2785 tree
2786 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2788 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2789 TREE_PURPOSE (t) = parm;
2790 TREE_VALUE (t) = value;
2791 return t;
2794 /* Build a chain of TREE_LIST nodes from a vector. */
2796 tree
2797 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2799 tree ret = NULL_TREE;
2800 tree *pp = &ret;
2801 unsigned int i;
2802 tree t;
2803 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2805 *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2806 pp = &TREE_CHAIN (*pp);
2808 return ret;
2811 /* Return a newly created TREE_LIST node whose
2812 purpose and value fields are PURPOSE and VALUE
2813 and whose TREE_CHAIN is CHAIN. */
2815 tree
2816 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2818 tree node;
2820 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2821 memset (node, 0, sizeof (struct tree_common));
2823 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2825 TREE_SET_CODE (node, TREE_LIST);
2826 TREE_CHAIN (node) = chain;
2827 TREE_PURPOSE (node) = purpose;
2828 TREE_VALUE (node) = value;
2829 return node;
2832 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2833 trees. */
2835 vec<tree, va_gc> *
2836 ctor_to_vec (tree ctor)
2838 vec<tree, va_gc> *vec;
2839 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2840 unsigned int ix;
2841 tree val;
2843 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2844 vec->quick_push (val);
2846 return vec;
2849 /* Return the size nominally occupied by an object of type TYPE
2850 when it resides in memory. The value is measured in units of bytes,
2851 and its data type is that normally used for type sizes
2852 (which is the first type created by make_signed_type or
2853 make_unsigned_type). */
2855 tree
2856 size_in_bytes (const_tree type)
2858 tree t;
2860 if (type == error_mark_node)
2861 return integer_zero_node;
2863 type = TYPE_MAIN_VARIANT (type);
2864 t = TYPE_SIZE_UNIT (type);
2866 if (t == 0)
2868 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2869 return size_zero_node;
2872 return t;
2875 /* Return the size of TYPE (in bytes) as a wide integer
2876 or return -1 if the size can vary or is larger than an integer. */
2878 HOST_WIDE_INT
2879 int_size_in_bytes (const_tree type)
2881 tree t;
2883 if (type == error_mark_node)
2884 return 0;
2886 type = TYPE_MAIN_VARIANT (type);
2887 t = TYPE_SIZE_UNIT (type);
2889 if (t && tree_fits_uhwi_p (t))
2890 return TREE_INT_CST_LOW (t);
2891 else
2892 return -1;
2895 /* Return the maximum size of TYPE (in bytes) as a wide integer
2896 or return -1 if the size can vary or is larger than an integer. */
2898 HOST_WIDE_INT
2899 max_int_size_in_bytes (const_tree type)
2901 HOST_WIDE_INT size = -1;
2902 tree size_tree;
2904 /* If this is an array type, check for a possible MAX_SIZE attached. */
2906 if (TREE_CODE (type) == ARRAY_TYPE)
2908 size_tree = TYPE_ARRAY_MAX_SIZE (type);
2910 if (size_tree && tree_fits_uhwi_p (size_tree))
2911 size = tree_to_uhwi (size_tree);
2914 /* If we still haven't been able to get a size, see if the language
2915 can compute a maximum size. */
2917 if (size == -1)
2919 size_tree = lang_hooks.types.max_size (type);
2921 if (size_tree && tree_fits_uhwi_p (size_tree))
2922 size = tree_to_uhwi (size_tree);
2925 return size;
2928 /* Return the bit position of FIELD, in bits from the start of the record.
2929 This is a tree of type bitsizetype. */
2931 tree
2932 bit_position (const_tree field)
2934 return bit_from_pos (DECL_FIELD_OFFSET (field),
2935 DECL_FIELD_BIT_OFFSET (field));
2938 /* Return the byte position of FIELD, in bytes from the start of the record.
2939 This is a tree of type sizetype. */
2941 tree
2942 byte_position (const_tree field)
2944 return byte_from_pos (DECL_FIELD_OFFSET (field),
2945 DECL_FIELD_BIT_OFFSET (field));
2948 /* Likewise, but return as an integer. It must be representable in
2949 that way (since it could be a signed value, we don't have the
2950 option of returning -1 like int_size_in_byte can. */
2952 HOST_WIDE_INT
2953 int_byte_position (const_tree field)
2955 return tree_to_shwi (byte_position (field));
2958 /* Return the strictest alignment, in bits, that T is known to have. */
2960 unsigned int
2961 expr_align (const_tree t)
2963 unsigned int align0, align1;
2965 switch (TREE_CODE (t))
2967 CASE_CONVERT: case NON_LVALUE_EXPR:
2968 /* If we have conversions, we know that the alignment of the
2969 object must meet each of the alignments of the types. */
2970 align0 = expr_align (TREE_OPERAND (t, 0));
2971 align1 = TYPE_ALIGN (TREE_TYPE (t));
2972 return MAX (align0, align1);
2974 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
2975 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
2976 case CLEANUP_POINT_EXPR:
2977 /* These don't change the alignment of an object. */
2978 return expr_align (TREE_OPERAND (t, 0));
2980 case COND_EXPR:
2981 /* The best we can do is say that the alignment is the least aligned
2982 of the two arms. */
2983 align0 = expr_align (TREE_OPERAND (t, 1));
2984 align1 = expr_align (TREE_OPERAND (t, 2));
2985 return MIN (align0, align1);
2987 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
2988 meaningfully, it's always 1. */
2989 case LABEL_DECL: case CONST_DECL:
2990 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
2991 case FUNCTION_DECL:
2992 gcc_assert (DECL_ALIGN (t) != 0);
2993 return DECL_ALIGN (t);
2995 default:
2996 break;
2999 /* Otherwise take the alignment from that of the type. */
3000 return TYPE_ALIGN (TREE_TYPE (t));
3003 /* Return, as a tree node, the number of elements for TYPE (which is an
3004 ARRAY_TYPE) minus one. This counts only elements of the top array. */
3006 tree
3007 array_type_nelts (const_tree type)
3009 tree index_type, min, max;
3011 /* If they did it with unspecified bounds, then we should have already
3012 given an error about it before we got here. */
3013 if (! TYPE_DOMAIN (type))
3014 return error_mark_node;
3016 index_type = TYPE_DOMAIN (type);
3017 min = TYPE_MIN_VALUE (index_type);
3018 max = TYPE_MAX_VALUE (index_type);
3020 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
3021 if (!max)
3022 return error_mark_node;
3024 return (integer_zerop (min)
3025 ? max
3026 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
3029 /* If arg is static -- a reference to an object in static storage -- then
3030 return the object. This is not the same as the C meaning of `static'.
3031 If arg isn't static, return NULL. */
3033 tree
3034 staticp (tree arg)
3036 switch (TREE_CODE (arg))
3038 case FUNCTION_DECL:
3039 /* Nested functions are static, even though taking their address will
3040 involve a trampoline as we unnest the nested function and create
3041 the trampoline on the tree level. */
3042 return arg;
3044 case VAR_DECL:
3045 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3046 && ! DECL_THREAD_LOCAL_P (arg)
3047 && ! DECL_DLLIMPORT_P (arg)
3048 ? arg : NULL);
3050 case CONST_DECL:
3051 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
3052 ? arg : NULL);
3054 case CONSTRUCTOR:
3055 return TREE_STATIC (arg) ? arg : NULL;
3057 case LABEL_DECL:
3058 case STRING_CST:
3059 return arg;
3061 case COMPONENT_REF:
3062 /* If the thing being referenced is not a field, then it is
3063 something language specific. */
3064 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
3066 /* If we are referencing a bitfield, we can't evaluate an
3067 ADDR_EXPR at compile time and so it isn't a constant. */
3068 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
3069 return NULL;
3071 return staticp (TREE_OPERAND (arg, 0));
3073 case BIT_FIELD_REF:
3074 return NULL;
3076 case INDIRECT_REF:
3077 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
3079 case ARRAY_REF:
3080 case ARRAY_RANGE_REF:
3081 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
3082 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
3083 return staticp (TREE_OPERAND (arg, 0));
3084 else
3085 return NULL;
3087 case COMPOUND_LITERAL_EXPR:
3088 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
3090 default:
3091 return NULL;
3098 /* Return whether OP is a DECL whose address is function-invariant. */
3100 bool
3101 decl_address_invariant_p (const_tree op)
3103 /* The conditions below are slightly less strict than the one in
3104 staticp. */
3106 switch (TREE_CODE (op))
3108 case PARM_DECL:
3109 case RESULT_DECL:
3110 case LABEL_DECL:
3111 case FUNCTION_DECL:
3112 return true;
3114 case VAR_DECL:
3115 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3116 || DECL_THREAD_LOCAL_P (op)
3117 || DECL_CONTEXT (op) == current_function_decl
3118 || decl_function_context (op) == current_function_decl)
3119 return true;
3120 break;
3122 case CONST_DECL:
3123 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
3124 || decl_function_context (op) == current_function_decl)
3125 return true;
3126 break;
3128 default:
3129 break;
3132 return false;
3135 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
3137 bool
3138 decl_address_ip_invariant_p (const_tree op)
3140 /* The conditions below are slightly less strict than the one in
3141 staticp. */
3143 switch (TREE_CODE (op))
3145 case LABEL_DECL:
3146 case FUNCTION_DECL:
3147 case STRING_CST:
3148 return true;
3150 case VAR_DECL:
3151 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
3152 && !DECL_DLLIMPORT_P (op))
3153 || DECL_THREAD_LOCAL_P (op))
3154 return true;
3155 break;
3157 case CONST_DECL:
3158 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
3159 return true;
3160 break;
3162 default:
3163 break;
3166 return false;
3170 /* Return true if T is function-invariant (internal function, does
3171 not handle arithmetic; that's handled in skip_simple_arithmetic and
3172 tree_invariant_p). */
3174 static bool tree_invariant_p (tree t);
3176 static bool
3177 tree_invariant_p_1 (tree t)
3179 tree op;
3181 if (TREE_CONSTANT (t)
3182 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
3183 return true;
3185 switch (TREE_CODE (t))
3187 case SAVE_EXPR:
3188 return true;
3190 case ADDR_EXPR:
3191 op = TREE_OPERAND (t, 0);
3192 while (handled_component_p (op))
3194 switch (TREE_CODE (op))
3196 case ARRAY_REF:
3197 case ARRAY_RANGE_REF:
3198 if (!tree_invariant_p (TREE_OPERAND (op, 1))
3199 || TREE_OPERAND (op, 2) != NULL_TREE
3200 || TREE_OPERAND (op, 3) != NULL_TREE)
3201 return false;
3202 break;
3204 case COMPONENT_REF:
3205 if (TREE_OPERAND (op, 2) != NULL_TREE)
3206 return false;
3207 break;
3209 default:;
3211 op = TREE_OPERAND (op, 0);
3214 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3216 default:
3217 break;
3220 return false;
3223 /* Return true if T is function-invariant. */
3225 static bool
3226 tree_invariant_p (tree t)
3228 tree inner = skip_simple_arithmetic (t);
3229 return tree_invariant_p_1 (inner);
3232 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3233 Do this to any expression which may be used in more than one place,
3234 but must be evaluated only once.
3236 Normally, expand_expr would reevaluate the expression each time.
3237 Calling save_expr produces something that is evaluated and recorded
3238 the first time expand_expr is called on it. Subsequent calls to
3239 expand_expr just reuse the recorded value.
3241 The call to expand_expr that generates code that actually computes
3242 the value is the first call *at compile time*. Subsequent calls
3243 *at compile time* generate code to use the saved value.
3244 This produces correct result provided that *at run time* control
3245 always flows through the insns made by the first expand_expr
3246 before reaching the other places where the save_expr was evaluated.
3247 You, the caller of save_expr, must make sure this is so.
3249 Constants, and certain read-only nodes, are returned with no
3250 SAVE_EXPR because that is safe. Expressions containing placeholders
3251 are not touched; see tree.def for an explanation of what these
3252 are used for. */
3254 tree
3255 save_expr (tree expr)
3257 tree t = fold (expr);
3258 tree inner;
3260 /* If the tree evaluates to a constant, then we don't want to hide that
3261 fact (i.e. this allows further folding, and direct checks for constants).
3262 However, a read-only object that has side effects cannot be bypassed.
3263 Since it is no problem to reevaluate literals, we just return the
3264 literal node. */
3265 inner = skip_simple_arithmetic (t);
3266 if (TREE_CODE (inner) == ERROR_MARK)
3267 return inner;
3269 if (tree_invariant_p_1 (inner))
3270 return t;
3272 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3273 it means that the size or offset of some field of an object depends on
3274 the value within another field.
3276 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3277 and some variable since it would then need to be both evaluated once and
3278 evaluated more than once. Front-ends must assure this case cannot
3279 happen by surrounding any such subexpressions in their own SAVE_EXPR
3280 and forcing evaluation at the proper time. */
3281 if (contains_placeholder_p (inner))
3282 return t;
3284 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3285 SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3287 /* This expression might be placed ahead of a jump to ensure that the
3288 value was computed on both sides of the jump. So make sure it isn't
3289 eliminated as dead. */
3290 TREE_SIDE_EFFECTS (t) = 1;
3291 return t;
3294 /* Look inside EXPR into any simple arithmetic operations. Return the
3295 outermost non-arithmetic or non-invariant node. */
3297 tree
3298 skip_simple_arithmetic (tree expr)
3300 /* We don't care about whether this can be used as an lvalue in this
3301 context. */
3302 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3303 expr = TREE_OPERAND (expr, 0);
3305 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3306 a constant, it will be more efficient to not make another SAVE_EXPR since
3307 it will allow better simplification and GCSE will be able to merge the
3308 computations if they actually occur. */
3309 while (true)
3311 if (UNARY_CLASS_P (expr))
3312 expr = TREE_OPERAND (expr, 0);
3313 else if (BINARY_CLASS_P (expr))
3315 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3316 expr = TREE_OPERAND (expr, 0);
3317 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3318 expr = TREE_OPERAND (expr, 1);
3319 else
3320 break;
3322 else
3323 break;
3326 return expr;
3329 /* Look inside EXPR into simple arithmetic operations involving constants.
3330 Return the outermost non-arithmetic or non-constant node. */
3332 tree
3333 skip_simple_constant_arithmetic (tree expr)
3335 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3336 expr = TREE_OPERAND (expr, 0);
3338 while (true)
3340 if (UNARY_CLASS_P (expr))
3341 expr = TREE_OPERAND (expr, 0);
3342 else if (BINARY_CLASS_P (expr))
3344 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3345 expr = TREE_OPERAND (expr, 0);
3346 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3347 expr = TREE_OPERAND (expr, 1);
3348 else
3349 break;
3351 else
3352 break;
3355 return expr;
3358 /* Return which tree structure is used by T. */
3360 enum tree_node_structure_enum
3361 tree_node_structure (const_tree t)
3363 const enum tree_code code = TREE_CODE (t);
3364 return tree_node_structure_for_code (code);
3367 /* Set various status flags when building a CALL_EXPR object T. */
3369 static void
3370 process_call_operands (tree t)
3372 bool side_effects = TREE_SIDE_EFFECTS (t);
3373 bool read_only = false;
3374 int i = call_expr_flags (t);
3376 /* Calls have side-effects, except those to const or pure functions. */
3377 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3378 side_effects = true;
3379 /* Propagate TREE_READONLY of arguments for const functions. */
3380 if (i & ECF_CONST)
3381 read_only = true;
3383 if (!side_effects || read_only)
3384 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3386 tree op = TREE_OPERAND (t, i);
3387 if (op && TREE_SIDE_EFFECTS (op))
3388 side_effects = true;
3389 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3390 read_only = false;
3393 TREE_SIDE_EFFECTS (t) = side_effects;
3394 TREE_READONLY (t) = read_only;
3397 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3398 size or offset that depends on a field within a record. */
3400 bool
3401 contains_placeholder_p (const_tree exp)
3403 enum tree_code code;
3405 if (!exp)
3406 return 0;
3408 code = TREE_CODE (exp);
3409 if (code == PLACEHOLDER_EXPR)
3410 return 1;
3412 switch (TREE_CODE_CLASS (code))
3414 case tcc_reference:
3415 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3416 position computations since they will be converted into a
3417 WITH_RECORD_EXPR involving the reference, which will assume
3418 here will be valid. */
3419 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3421 case tcc_exceptional:
3422 if (code == TREE_LIST)
3423 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3424 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3425 break;
3427 case tcc_unary:
3428 case tcc_binary:
3429 case tcc_comparison:
3430 case tcc_expression:
3431 switch (code)
3433 case COMPOUND_EXPR:
3434 /* Ignoring the first operand isn't quite right, but works best. */
3435 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3437 case COND_EXPR:
3438 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3439 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3440 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3442 case SAVE_EXPR:
3443 /* The save_expr function never wraps anything containing
3444 a PLACEHOLDER_EXPR. */
3445 return 0;
3447 default:
3448 break;
3451 switch (TREE_CODE_LENGTH (code))
3453 case 1:
3454 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3455 case 2:
3456 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3457 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3458 default:
3459 return 0;
3462 case tcc_vl_exp:
3463 switch (code)
3465 case CALL_EXPR:
3467 const_tree arg;
3468 const_call_expr_arg_iterator iter;
3469 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3470 if (CONTAINS_PLACEHOLDER_P (arg))
3471 return 1;
3472 return 0;
3474 default:
3475 return 0;
3478 default:
3479 return 0;
3481 return 0;
3484 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3485 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3486 field positions. */
3488 static bool
3489 type_contains_placeholder_1 (const_tree type)
3491 /* If the size contains a placeholder or the parent type (component type in
3492 the case of arrays) type involves a placeholder, this type does. */
3493 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3494 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3495 || (!POINTER_TYPE_P (type)
3496 && TREE_TYPE (type)
3497 && type_contains_placeholder_p (TREE_TYPE (type))))
3498 return true;
3500 /* Now do type-specific checks. Note that the last part of the check above
3501 greatly limits what we have to do below. */
3502 switch (TREE_CODE (type))
3504 case VOID_TYPE:
3505 case POINTER_BOUNDS_TYPE:
3506 case COMPLEX_TYPE:
3507 case ENUMERAL_TYPE:
3508 case BOOLEAN_TYPE:
3509 case POINTER_TYPE:
3510 case OFFSET_TYPE:
3511 case REFERENCE_TYPE:
3512 case METHOD_TYPE:
3513 case FUNCTION_TYPE:
3514 case VECTOR_TYPE:
3515 case NULLPTR_TYPE:
3516 return false;
3518 case INTEGER_TYPE:
3519 case REAL_TYPE:
3520 case FIXED_POINT_TYPE:
3521 /* Here we just check the bounds. */
3522 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3523 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3525 case ARRAY_TYPE:
3526 /* We have already checked the component type above, so just check the
3527 domain type. */
3528 return type_contains_placeholder_p (TYPE_DOMAIN (type));
3530 case RECORD_TYPE:
3531 case UNION_TYPE:
3532 case QUAL_UNION_TYPE:
3534 tree field;
3536 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3537 if (TREE_CODE (field) == FIELD_DECL
3538 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3539 || (TREE_CODE (type) == QUAL_UNION_TYPE
3540 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3541 || type_contains_placeholder_p (TREE_TYPE (field))))
3542 return true;
3544 return false;
3547 default:
3548 gcc_unreachable ();
3552 /* Wrapper around above function used to cache its result. */
3554 bool
3555 type_contains_placeholder_p (tree type)
3557 bool result;
3559 /* If the contains_placeholder_bits field has been initialized,
3560 then we know the answer. */
3561 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3562 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3564 /* Indicate that we've seen this type node, and the answer is false.
3565 This is what we want to return if we run into recursion via fields. */
3566 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3568 /* Compute the real value. */
3569 result = type_contains_placeholder_1 (type);
3571 /* Store the real value. */
3572 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3574 return result;
3577 /* Push tree EXP onto vector QUEUE if it is not already present. */
3579 static void
3580 push_without_duplicates (tree exp, vec<tree> *queue)
3582 unsigned int i;
3583 tree iter;
3585 FOR_EACH_VEC_ELT (*queue, i, iter)
3586 if (simple_cst_equal (iter, exp) == 1)
3587 break;
3589 if (!iter)
3590 queue->safe_push (exp);
3593 /* Given a tree EXP, find all occurrences of references to fields
3594 in a PLACEHOLDER_EXPR and place them in vector REFS without
3595 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
3596 we assume here that EXP contains only arithmetic expressions
3597 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3598 argument list. */
3600 void
3601 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3603 enum tree_code code = TREE_CODE (exp);
3604 tree inner;
3605 int i;
3607 /* We handle TREE_LIST and COMPONENT_REF separately. */
3608 if (code == TREE_LIST)
3610 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3611 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3613 else if (code == COMPONENT_REF)
3615 for (inner = TREE_OPERAND (exp, 0);
3616 REFERENCE_CLASS_P (inner);
3617 inner = TREE_OPERAND (inner, 0))
3620 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3621 push_without_duplicates (exp, refs);
3622 else
3623 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3625 else
3626 switch (TREE_CODE_CLASS (code))
3628 case tcc_constant:
3629 break;
3631 case tcc_declaration:
3632 /* Variables allocated to static storage can stay. */
3633 if (!TREE_STATIC (exp))
3634 push_without_duplicates (exp, refs);
3635 break;
3637 case tcc_expression:
3638 /* This is the pattern built in ada/make_aligning_type. */
3639 if (code == ADDR_EXPR
3640 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3642 push_without_duplicates (exp, refs);
3643 break;
3646 /* Fall through... */
3648 case tcc_exceptional:
3649 case tcc_unary:
3650 case tcc_binary:
3651 case tcc_comparison:
3652 case tcc_reference:
3653 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3654 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3655 break;
3657 case tcc_vl_exp:
3658 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3659 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3660 break;
3662 default:
3663 gcc_unreachable ();
3667 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3668 return a tree with all occurrences of references to F in a
3669 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
3670 CONST_DECLs. Note that we assume here that EXP contains only
3671 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3672 occurring only in their argument list. */
3674 tree
3675 substitute_in_expr (tree exp, tree f, tree r)
3677 enum tree_code code = TREE_CODE (exp);
3678 tree op0, op1, op2, op3;
3679 tree new_tree;
3681 /* We handle TREE_LIST and COMPONENT_REF separately. */
3682 if (code == TREE_LIST)
3684 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3685 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3686 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3687 return exp;
3689 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3691 else if (code == COMPONENT_REF)
3693 tree inner;
3695 /* If this expression is getting a value from a PLACEHOLDER_EXPR
3696 and it is the right field, replace it with R. */
3697 for (inner = TREE_OPERAND (exp, 0);
3698 REFERENCE_CLASS_P (inner);
3699 inner = TREE_OPERAND (inner, 0))
3702 /* The field. */
3703 op1 = TREE_OPERAND (exp, 1);
3705 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3706 return r;
3708 /* If this expression hasn't been completed let, leave it alone. */
3709 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3710 return exp;
3712 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3713 if (op0 == TREE_OPERAND (exp, 0))
3714 return exp;
3716 new_tree
3717 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3719 else
3720 switch (TREE_CODE_CLASS (code))
3722 case tcc_constant:
3723 return exp;
3725 case tcc_declaration:
3726 if (exp == f)
3727 return r;
3728 else
3729 return exp;
3731 case tcc_expression:
3732 if (exp == f)
3733 return r;
3735 /* Fall through... */
3737 case tcc_exceptional:
3738 case tcc_unary:
3739 case tcc_binary:
3740 case tcc_comparison:
3741 case tcc_reference:
3742 switch (TREE_CODE_LENGTH (code))
3744 case 0:
3745 return exp;
3747 case 1:
3748 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3749 if (op0 == TREE_OPERAND (exp, 0))
3750 return exp;
3752 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3753 break;
3755 case 2:
3756 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3757 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3759 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3760 return exp;
3762 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3763 break;
3765 case 3:
3766 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3767 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3768 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3770 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3771 && op2 == TREE_OPERAND (exp, 2))
3772 return exp;
3774 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3775 break;
3777 case 4:
3778 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3779 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3780 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3781 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3783 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3784 && op2 == TREE_OPERAND (exp, 2)
3785 && op3 == TREE_OPERAND (exp, 3))
3786 return exp;
3788 new_tree
3789 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3790 break;
3792 default:
3793 gcc_unreachable ();
3795 break;
3797 case tcc_vl_exp:
3799 int i;
3801 new_tree = NULL_TREE;
3803 /* If we are trying to replace F with a constant, inline back
3804 functions which do nothing else than computing a value from
3805 the arguments they are passed. This makes it possible to
3806 fold partially or entirely the replacement expression. */
3807 if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3809 tree t = maybe_inline_call_in_expr (exp);
3810 if (t)
3811 return SUBSTITUTE_IN_EXPR (t, f, r);
3814 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3816 tree op = TREE_OPERAND (exp, i);
3817 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3818 if (new_op != op)
3820 if (!new_tree)
3821 new_tree = copy_node (exp);
3822 TREE_OPERAND (new_tree, i) = new_op;
3826 if (new_tree)
3828 new_tree = fold (new_tree);
3829 if (TREE_CODE (new_tree) == CALL_EXPR)
3830 process_call_operands (new_tree);
3832 else
3833 return exp;
3835 break;
3837 default:
3838 gcc_unreachable ();
3841 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3843 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3844 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3846 return new_tree;
3849 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3850 for it within OBJ, a tree that is an object or a chain of references. */
3852 tree
3853 substitute_placeholder_in_expr (tree exp, tree obj)
3855 enum tree_code code = TREE_CODE (exp);
3856 tree op0, op1, op2, op3;
3857 tree new_tree;
3859 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3860 in the chain of OBJ. */
3861 if (code == PLACEHOLDER_EXPR)
3863 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3864 tree elt;
3866 for (elt = obj; elt != 0;
3867 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3868 || TREE_CODE (elt) == COND_EXPR)
3869 ? TREE_OPERAND (elt, 1)
3870 : (REFERENCE_CLASS_P (elt)
3871 || UNARY_CLASS_P (elt)
3872 || BINARY_CLASS_P (elt)
3873 || VL_EXP_CLASS_P (elt)
3874 || EXPRESSION_CLASS_P (elt))
3875 ? TREE_OPERAND (elt, 0) : 0))
3876 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3877 return elt;
3879 for (elt = obj; elt != 0;
3880 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3881 || TREE_CODE (elt) == COND_EXPR)
3882 ? TREE_OPERAND (elt, 1)
3883 : (REFERENCE_CLASS_P (elt)
3884 || UNARY_CLASS_P (elt)
3885 || BINARY_CLASS_P (elt)
3886 || VL_EXP_CLASS_P (elt)
3887 || EXPRESSION_CLASS_P (elt))
3888 ? TREE_OPERAND (elt, 0) : 0))
3889 if (POINTER_TYPE_P (TREE_TYPE (elt))
3890 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3891 == need_type))
3892 return fold_build1 (INDIRECT_REF, need_type, elt);
3894 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
3895 survives until RTL generation, there will be an error. */
3896 return exp;
3899 /* TREE_LIST is special because we need to look at TREE_VALUE
3900 and TREE_CHAIN, not TREE_OPERANDS. */
3901 else if (code == TREE_LIST)
3903 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3904 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3905 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3906 return exp;
3908 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3910 else
3911 switch (TREE_CODE_CLASS (code))
3913 case tcc_constant:
3914 case tcc_declaration:
3915 return exp;
3917 case tcc_exceptional:
3918 case tcc_unary:
3919 case tcc_binary:
3920 case tcc_comparison:
3921 case tcc_expression:
3922 case tcc_reference:
3923 case tcc_statement:
3924 switch (TREE_CODE_LENGTH (code))
3926 case 0:
3927 return exp;
3929 case 1:
3930 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3931 if (op0 == TREE_OPERAND (exp, 0))
3932 return exp;
3934 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3935 break;
3937 case 2:
3938 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3939 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3941 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3942 return exp;
3944 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3945 break;
3947 case 3:
3948 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3949 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3950 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3952 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3953 && op2 == TREE_OPERAND (exp, 2))
3954 return exp;
3956 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3957 break;
3959 case 4:
3960 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3961 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3962 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3963 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
3965 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3966 && op2 == TREE_OPERAND (exp, 2)
3967 && op3 == TREE_OPERAND (exp, 3))
3968 return exp;
3970 new_tree
3971 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3972 break;
3974 default:
3975 gcc_unreachable ();
3977 break;
3979 case tcc_vl_exp:
3981 int i;
3983 new_tree = NULL_TREE;
3985 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3987 tree op = TREE_OPERAND (exp, i);
3988 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
3989 if (new_op != op)
3991 if (!new_tree)
3992 new_tree = copy_node (exp);
3993 TREE_OPERAND (new_tree, i) = new_op;
3997 if (new_tree)
3999 new_tree = fold (new_tree);
4000 if (TREE_CODE (new_tree) == CALL_EXPR)
4001 process_call_operands (new_tree);
4003 else
4004 return exp;
4006 break;
4008 default:
4009 gcc_unreachable ();
4012 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
4014 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
4015 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
4017 return new_tree;
4021 /* Subroutine of stabilize_reference; this is called for subtrees of
4022 references. Any expression with side-effects must be put in a SAVE_EXPR
4023 to ensure that it is only evaluated once.
4025 We don't put SAVE_EXPR nodes around everything, because assigning very
4026 simple expressions to temporaries causes us to miss good opportunities
4027 for optimizations. Among other things, the opportunity to fold in the
4028 addition of a constant into an addressing mode often gets lost, e.g.
4029 "y[i+1] += x;". In general, we take the approach that we should not make
4030 an assignment unless we are forced into it - i.e., that any non-side effect
4031 operator should be allowed, and that cse should take care of coalescing
4032 multiple utterances of the same expression should that prove fruitful. */
4034 static tree
4035 stabilize_reference_1 (tree e)
4037 tree result;
4038 enum tree_code code = TREE_CODE (e);
4040 /* We cannot ignore const expressions because it might be a reference
4041 to a const array but whose index contains side-effects. But we can
4042 ignore things that are actual constant or that already have been
4043 handled by this function. */
4045 if (tree_invariant_p (e))
4046 return e;
4048 switch (TREE_CODE_CLASS (code))
4050 case tcc_exceptional:
4051 case tcc_type:
4052 case tcc_declaration:
4053 case tcc_comparison:
4054 case tcc_statement:
4055 case tcc_expression:
4056 case tcc_reference:
4057 case tcc_vl_exp:
4058 /* If the expression has side-effects, then encase it in a SAVE_EXPR
4059 so that it will only be evaluated once. */
4060 /* The reference (r) and comparison (<) classes could be handled as
4061 below, but it is generally faster to only evaluate them once. */
4062 if (TREE_SIDE_EFFECTS (e))
4063 return save_expr (e);
4064 return e;
4066 case tcc_constant:
4067 /* Constants need no processing. In fact, we should never reach
4068 here. */
4069 return e;
4071 case tcc_binary:
4072 /* Division is slow and tends to be compiled with jumps,
4073 especially the division by powers of 2 that is often
4074 found inside of an array reference. So do it just once. */
4075 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
4076 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
4077 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
4078 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
4079 return save_expr (e);
4080 /* Recursively stabilize each operand. */
4081 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
4082 stabilize_reference_1 (TREE_OPERAND (e, 1)));
4083 break;
4085 case tcc_unary:
4086 /* Recursively stabilize each operand. */
4087 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
4088 break;
4090 default:
4091 gcc_unreachable ();
4094 TREE_TYPE (result) = TREE_TYPE (e);
4095 TREE_READONLY (result) = TREE_READONLY (e);
4096 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
4097 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
4099 return result;
4102 /* Stabilize a reference so that we can use it any number of times
4103 without causing its operands to be evaluated more than once.
4104 Returns the stabilized reference. This works by means of save_expr,
4105 so see the caveats in the comments about save_expr.
4107 Also allows conversion expressions whose operands are references.
4108 Any other kind of expression is returned unchanged. */
4110 tree
4111 stabilize_reference (tree ref)
4113 tree result;
4114 enum tree_code code = TREE_CODE (ref);
4116 switch (code)
4118 case VAR_DECL:
4119 case PARM_DECL:
4120 case RESULT_DECL:
4121 /* No action is needed in this case. */
4122 return ref;
4124 CASE_CONVERT:
4125 case FLOAT_EXPR:
4126 case FIX_TRUNC_EXPR:
4127 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
4128 break;
4130 case INDIRECT_REF:
4131 result = build_nt (INDIRECT_REF,
4132 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
4133 break;
4135 case COMPONENT_REF:
4136 result = build_nt (COMPONENT_REF,
4137 stabilize_reference (TREE_OPERAND (ref, 0)),
4138 TREE_OPERAND (ref, 1), NULL_TREE);
4139 break;
4141 case BIT_FIELD_REF:
4142 result = build_nt (BIT_FIELD_REF,
4143 stabilize_reference (TREE_OPERAND (ref, 0)),
4144 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
4145 break;
4147 case ARRAY_REF:
4148 result = build_nt (ARRAY_REF,
4149 stabilize_reference (TREE_OPERAND (ref, 0)),
4150 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4151 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4152 break;
4154 case ARRAY_RANGE_REF:
4155 result = build_nt (ARRAY_RANGE_REF,
4156 stabilize_reference (TREE_OPERAND (ref, 0)),
4157 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
4158 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
4159 break;
4161 case COMPOUND_EXPR:
4162 /* We cannot wrap the first expression in a SAVE_EXPR, as then
4163 it wouldn't be ignored. This matters when dealing with
4164 volatiles. */
4165 return stabilize_reference_1 (ref);
4167 /* If arg isn't a kind of lvalue we recognize, make no change.
4168 Caller should recognize the error for an invalid lvalue. */
4169 default:
4170 return ref;
4172 case ERROR_MARK:
4173 return error_mark_node;
4176 TREE_TYPE (result) = TREE_TYPE (ref);
4177 TREE_READONLY (result) = TREE_READONLY (ref);
4178 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
4179 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
4181 return result;
4184 /* Low-level constructors for expressions. */
4186 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
4187 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
4189 void
4190 recompute_tree_invariant_for_addr_expr (tree t)
4192 tree node;
4193 bool tc = true, se = false;
4195 /* We started out assuming this address is both invariant and constant, but
4196 does not have side effects. Now go down any handled components and see if
4197 any of them involve offsets that are either non-constant or non-invariant.
4198 Also check for side-effects.
4200 ??? Note that this code makes no attempt to deal with the case where
4201 taking the address of something causes a copy due to misalignment. */
4203 #define UPDATE_FLAGS(NODE) \
4204 do { tree _node = (NODE); \
4205 if (_node && !TREE_CONSTANT (_node)) tc = false; \
4206 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4208 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4209 node = TREE_OPERAND (node, 0))
4211 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4212 array reference (probably made temporarily by the G++ front end),
4213 so ignore all the operands. */
4214 if ((TREE_CODE (node) == ARRAY_REF
4215 || TREE_CODE (node) == ARRAY_RANGE_REF)
4216 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4218 UPDATE_FLAGS (TREE_OPERAND (node, 1));
4219 if (TREE_OPERAND (node, 2))
4220 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4221 if (TREE_OPERAND (node, 3))
4222 UPDATE_FLAGS (TREE_OPERAND (node, 3));
4224 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4225 FIELD_DECL, apparently. The G++ front end can put something else
4226 there, at least temporarily. */
4227 else if (TREE_CODE (node) == COMPONENT_REF
4228 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4230 if (TREE_OPERAND (node, 2))
4231 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4235 node = lang_hooks.expr_to_decl (node, &tc, &se);
4237 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4238 the address, since &(*a)->b is a form of addition. If it's a constant, the
4239 address is constant too. If it's a decl, its address is constant if the
4240 decl is static. Everything else is not constant and, furthermore,
4241 taking the address of a volatile variable is not volatile. */
4242 if (TREE_CODE (node) == INDIRECT_REF
4243 || TREE_CODE (node) == MEM_REF)
4244 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4245 else if (CONSTANT_CLASS_P (node))
4247 else if (DECL_P (node))
4248 tc &= (staticp (node) != NULL_TREE);
4249 else
4251 tc = false;
4252 se |= TREE_SIDE_EFFECTS (node);
4256 TREE_CONSTANT (t) = tc;
4257 TREE_SIDE_EFFECTS (t) = se;
4258 #undef UPDATE_FLAGS
4261 /* Build an expression of code CODE, data type TYPE, and operands as
4262 specified. Expressions and reference nodes can be created this way.
4263 Constants, decls, types and misc nodes cannot be.
4265 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4266 enough for all extant tree codes. */
4268 tree
4269 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4271 tree t;
4273 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4275 t = make_node_stat (code PASS_MEM_STAT);
4276 TREE_TYPE (t) = tt;
4278 return t;
4281 tree
4282 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4284 int length = sizeof (struct tree_exp);
4285 tree t;
4287 record_node_allocation_statistics (code, length);
4289 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4291 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4293 memset (t, 0, sizeof (struct tree_common));
4295 TREE_SET_CODE (t, code);
4297 TREE_TYPE (t) = type;
4298 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4299 TREE_OPERAND (t, 0) = node;
4300 if (node && !TYPE_P (node))
4302 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4303 TREE_READONLY (t) = TREE_READONLY (node);
4306 if (TREE_CODE_CLASS (code) == tcc_statement)
4307 TREE_SIDE_EFFECTS (t) = 1;
4308 else switch (code)
4310 case VA_ARG_EXPR:
4311 /* All of these have side-effects, no matter what their
4312 operands are. */
4313 TREE_SIDE_EFFECTS (t) = 1;
4314 TREE_READONLY (t) = 0;
4315 break;
4317 case INDIRECT_REF:
4318 /* Whether a dereference is readonly has nothing to do with whether
4319 its operand is readonly. */
4320 TREE_READONLY (t) = 0;
4321 break;
4323 case ADDR_EXPR:
4324 if (node)
4325 recompute_tree_invariant_for_addr_expr (t);
4326 break;
4328 default:
4329 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4330 && node && !TYPE_P (node)
4331 && TREE_CONSTANT (node))
4332 TREE_CONSTANT (t) = 1;
4333 if (TREE_CODE_CLASS (code) == tcc_reference
4334 && node && TREE_THIS_VOLATILE (node))
4335 TREE_THIS_VOLATILE (t) = 1;
4336 break;
4339 return t;
4342 #define PROCESS_ARG(N) \
4343 do { \
4344 TREE_OPERAND (t, N) = arg##N; \
4345 if (arg##N &&!TYPE_P (arg##N)) \
4347 if (TREE_SIDE_EFFECTS (arg##N)) \
4348 side_effects = 1; \
4349 if (!TREE_READONLY (arg##N) \
4350 && !CONSTANT_CLASS_P (arg##N)) \
4351 (void) (read_only = 0); \
4352 if (!TREE_CONSTANT (arg##N)) \
4353 (void) (constant = 0); \
4355 } while (0)
4357 tree
4358 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4360 bool constant, read_only, side_effects;
4361 tree t;
4363 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4365 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4366 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4367 /* When sizetype precision doesn't match that of pointers
4368 we need to be able to build explicit extensions or truncations
4369 of the offset argument. */
4370 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4371 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4372 && TREE_CODE (arg1) == INTEGER_CST);
4374 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4375 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4376 && ptrofftype_p (TREE_TYPE (arg1)));
4378 t = make_node_stat (code PASS_MEM_STAT);
4379 TREE_TYPE (t) = tt;
4381 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4382 result based on those same flags for the arguments. But if the
4383 arguments aren't really even `tree' expressions, we shouldn't be trying
4384 to do this. */
4386 /* Expressions without side effects may be constant if their
4387 arguments are as well. */
4388 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4389 || TREE_CODE_CLASS (code) == tcc_binary);
4390 read_only = 1;
4391 side_effects = TREE_SIDE_EFFECTS (t);
4393 PROCESS_ARG (0);
4394 PROCESS_ARG (1);
4396 TREE_SIDE_EFFECTS (t) = side_effects;
4397 if (code == MEM_REF)
4399 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4401 tree o = TREE_OPERAND (arg0, 0);
4402 TREE_READONLY (t) = TREE_READONLY (o);
4403 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4406 else
4408 TREE_READONLY (t) = read_only;
4409 TREE_CONSTANT (t) = constant;
4410 TREE_THIS_VOLATILE (t)
4411 = (TREE_CODE_CLASS (code) == tcc_reference
4412 && arg0 && TREE_THIS_VOLATILE (arg0));
4415 return t;
4419 tree
4420 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4421 tree arg2 MEM_STAT_DECL)
4423 bool constant, read_only, side_effects;
4424 tree t;
4426 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4427 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4429 t = make_node_stat (code PASS_MEM_STAT);
4430 TREE_TYPE (t) = tt;
4432 read_only = 1;
4434 /* As a special exception, if COND_EXPR has NULL branches, we
4435 assume that it is a gimple statement and always consider
4436 it to have side effects. */
4437 if (code == COND_EXPR
4438 && tt == void_type_node
4439 && arg1 == NULL_TREE
4440 && arg2 == NULL_TREE)
4441 side_effects = true;
4442 else
4443 side_effects = TREE_SIDE_EFFECTS (t);
4445 PROCESS_ARG (0);
4446 PROCESS_ARG (1);
4447 PROCESS_ARG (2);
4449 if (code == COND_EXPR)
4450 TREE_READONLY (t) = read_only;
4452 TREE_SIDE_EFFECTS (t) = side_effects;
4453 TREE_THIS_VOLATILE (t)
4454 = (TREE_CODE_CLASS (code) == tcc_reference
4455 && arg0 && TREE_THIS_VOLATILE (arg0));
4457 return t;
4460 tree
4461 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4462 tree arg2, tree arg3 MEM_STAT_DECL)
4464 bool constant, read_only, side_effects;
4465 tree t;
4467 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4469 t = make_node_stat (code PASS_MEM_STAT);
4470 TREE_TYPE (t) = tt;
4472 side_effects = TREE_SIDE_EFFECTS (t);
4474 PROCESS_ARG (0);
4475 PROCESS_ARG (1);
4476 PROCESS_ARG (2);
4477 PROCESS_ARG (3);
4479 TREE_SIDE_EFFECTS (t) = side_effects;
4480 TREE_THIS_VOLATILE (t)
4481 = (TREE_CODE_CLASS (code) == tcc_reference
4482 && arg0 && TREE_THIS_VOLATILE (arg0));
4484 return t;
4487 tree
4488 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4489 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4491 bool constant, read_only, side_effects;
4492 tree t;
4494 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4496 t = make_node_stat (code PASS_MEM_STAT);
4497 TREE_TYPE (t) = tt;
4499 side_effects = TREE_SIDE_EFFECTS (t);
4501 PROCESS_ARG (0);
4502 PROCESS_ARG (1);
4503 PROCESS_ARG (2);
4504 PROCESS_ARG (3);
4505 PROCESS_ARG (4);
4507 TREE_SIDE_EFFECTS (t) = side_effects;
4508 if (code == TARGET_MEM_REF)
4510 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR)
4512 tree o = TREE_OPERAND (arg0, 0);
4513 TREE_READONLY (t) = TREE_READONLY (o);
4514 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o);
4517 else
4518 TREE_THIS_VOLATILE (t)
4519 = (TREE_CODE_CLASS (code) == tcc_reference
4520 && arg0 && TREE_THIS_VOLATILE (arg0));
4522 return t;
4525 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4526 on the pointer PTR. */
4528 tree
4529 build_simple_mem_ref_loc (location_t loc, tree ptr)
4531 HOST_WIDE_INT offset = 0;
4532 tree ptype = TREE_TYPE (ptr);
4533 tree tem;
4534 /* For convenience allow addresses that collapse to a simple base
4535 and offset. */
4536 if (TREE_CODE (ptr) == ADDR_EXPR
4537 && (handled_component_p (TREE_OPERAND (ptr, 0))
4538 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4540 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4541 gcc_assert (ptr);
4542 ptr = build_fold_addr_expr (ptr);
4543 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4545 tem = build2 (MEM_REF, TREE_TYPE (ptype),
4546 ptr, build_int_cst (ptype, offset));
4547 SET_EXPR_LOCATION (tem, loc);
4548 return tem;
4551 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
4553 offset_int
4554 mem_ref_offset (const_tree t)
4556 return offset_int::from (TREE_OPERAND (t, 1), SIGNED);
4559 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4560 offsetted by OFFSET units. */
4562 tree
4563 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4565 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4566 build_fold_addr_expr (base),
4567 build_int_cst (ptr_type_node, offset));
4568 tree addr = build1 (ADDR_EXPR, type, ref);
4569 recompute_tree_invariant_for_addr_expr (addr);
4570 return addr;
4573 /* Similar except don't specify the TREE_TYPE
4574 and leave the TREE_SIDE_EFFECTS as 0.
4575 It is permissible for arguments to be null,
4576 or even garbage if their values do not matter. */
4578 tree
4579 build_nt (enum tree_code code, ...)
4581 tree t;
4582 int length;
4583 int i;
4584 va_list p;
4586 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4588 va_start (p, code);
4590 t = make_node (code);
4591 length = TREE_CODE_LENGTH (code);
4593 for (i = 0; i < length; i++)
4594 TREE_OPERAND (t, i) = va_arg (p, tree);
4596 va_end (p);
4597 return t;
4600 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4601 tree vec. */
4603 tree
4604 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4606 tree ret, t;
4607 unsigned int ix;
4609 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4610 CALL_EXPR_FN (ret) = fn;
4611 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4612 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4613 CALL_EXPR_ARG (ret, ix) = t;
4614 return ret;
4617 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4618 We do NOT enter this node in any sort of symbol table.
4620 LOC is the location of the decl.
4622 layout_decl is used to set up the decl's storage layout.
4623 Other slots are initialized to 0 or null pointers. */
4625 tree
4626 build_decl_stat (location_t loc, enum tree_code code, tree name,
4627 tree type MEM_STAT_DECL)
4629 tree t;
4631 t = make_node_stat (code PASS_MEM_STAT);
4632 DECL_SOURCE_LOCATION (t) = loc;
4634 /* if (type == error_mark_node)
4635 type = integer_type_node; */
4636 /* That is not done, deliberately, so that having error_mark_node
4637 as the type can suppress useless errors in the use of this variable. */
4639 DECL_NAME (t) = name;
4640 TREE_TYPE (t) = type;
4642 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4643 layout_decl (t, 0);
4645 return t;
4648 /* Builds and returns function declaration with NAME and TYPE. */
4650 tree
4651 build_fn_decl (const char *name, tree type)
4653 tree id = get_identifier (name);
4654 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4656 DECL_EXTERNAL (decl) = 1;
4657 TREE_PUBLIC (decl) = 1;
4658 DECL_ARTIFICIAL (decl) = 1;
4659 TREE_NOTHROW (decl) = 1;
4661 return decl;
4664 vec<tree, va_gc> *all_translation_units;
4666 /* Builds a new translation-unit decl with name NAME, queues it in the
4667 global list of translation-unit decls and returns it. */
4669 tree
4670 build_translation_unit_decl (tree name)
4672 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4673 name, NULL_TREE);
4674 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4675 vec_safe_push (all_translation_units, tu);
4676 return tu;
4680 /* BLOCK nodes are used to represent the structure of binding contours
4681 and declarations, once those contours have been exited and their contents
4682 compiled. This information is used for outputting debugging info. */
4684 tree
4685 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4687 tree block = make_node (BLOCK);
4689 BLOCK_VARS (block) = vars;
4690 BLOCK_SUBBLOCKS (block) = subblocks;
4691 BLOCK_SUPERCONTEXT (block) = supercontext;
4692 BLOCK_CHAIN (block) = chain;
4693 return block;
4697 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4699 LOC is the location to use in tree T. */
4701 void
4702 protected_set_expr_location (tree t, location_t loc)
4704 if (CAN_HAVE_LOCATION_P (t))
4705 SET_EXPR_LOCATION (t, loc);
4708 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4709 is ATTRIBUTE. */
4711 tree
4712 build_decl_attribute_variant (tree ddecl, tree attribute)
4714 DECL_ATTRIBUTES (ddecl) = attribute;
4715 return ddecl;
4718 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4719 is ATTRIBUTE and its qualifiers are QUALS.
4721 Record such modified types already made so we don't make duplicates. */
4723 tree
4724 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4726 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4728 inchash::hash hstate;
4729 tree ntype;
4730 int i;
4731 tree t;
4732 enum tree_code code = TREE_CODE (ttype);
4734 /* Building a distinct copy of a tagged type is inappropriate; it
4735 causes breakage in code that expects there to be a one-to-one
4736 relationship between a struct and its fields.
4737 build_duplicate_type is another solution (as used in
4738 handle_transparent_union_attribute), but that doesn't play well
4739 with the stronger C++ type identity model. */
4740 if (TREE_CODE (ttype) == RECORD_TYPE
4741 || TREE_CODE (ttype) == UNION_TYPE
4742 || TREE_CODE (ttype) == QUAL_UNION_TYPE
4743 || TREE_CODE (ttype) == ENUMERAL_TYPE)
4745 warning (OPT_Wattributes,
4746 "ignoring attributes applied to %qT after definition",
4747 TYPE_MAIN_VARIANT (ttype));
4748 return build_qualified_type (ttype, quals);
4751 ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4752 ntype = build_distinct_type_copy (ttype);
4754 TYPE_ATTRIBUTES (ntype) = attribute;
4756 hstate.add_int (code);
4757 if (TREE_TYPE (ntype))
4758 hstate.add_object (TYPE_HASH (TREE_TYPE (ntype)));
4759 attribute_hash_list (attribute, hstate);
4761 switch (TREE_CODE (ntype))
4763 case FUNCTION_TYPE:
4764 type_hash_list (TYPE_ARG_TYPES (ntype), hstate);
4765 break;
4766 case ARRAY_TYPE:
4767 if (TYPE_DOMAIN (ntype))
4768 hstate.add_object (TYPE_HASH (TYPE_DOMAIN (ntype)));
4769 break;
4770 case INTEGER_TYPE:
4771 t = TYPE_MAX_VALUE (ntype);
4772 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
4773 hstate.add_object (TREE_INT_CST_ELT (t, i));
4774 break;
4775 case REAL_TYPE:
4776 case FIXED_POINT_TYPE:
4778 unsigned int precision = TYPE_PRECISION (ntype);
4779 hstate.add_object (precision);
4781 break;
4782 default:
4783 break;
4786 ntype = type_hash_canon (hstate.end(), ntype);
4788 /* If the target-dependent attributes make NTYPE different from
4789 its canonical type, we will need to use structural equality
4790 checks for this type. */
4791 if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4792 || !comp_type_attributes (ntype, ttype))
4793 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4794 else if (TYPE_CANONICAL (ntype) == ntype)
4795 TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4797 ttype = build_qualified_type (ntype, quals);
4799 else if (TYPE_QUALS (ttype) != quals)
4800 ttype = build_qualified_type (ttype, quals);
4802 return ttype;
4805 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4806 the same. */
4808 static bool
4809 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4811 tree cl1, cl2;
4812 for (cl1 = clauses1, cl2 = clauses2;
4813 cl1 && cl2;
4814 cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4816 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4817 return false;
4818 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4820 if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4821 OMP_CLAUSE_DECL (cl2)) != 1)
4822 return false;
4824 switch (OMP_CLAUSE_CODE (cl1))
4826 case OMP_CLAUSE_ALIGNED:
4827 if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4828 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4829 return false;
4830 break;
4831 case OMP_CLAUSE_LINEAR:
4832 if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4833 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4834 return false;
4835 break;
4836 case OMP_CLAUSE_SIMDLEN:
4837 if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4838 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4839 return false;
4840 default:
4841 break;
4844 return true;
4847 /* Compare two constructor-element-type constants. Return 1 if the lists
4848 are known to be equal; otherwise return 0. */
4850 static bool
4851 simple_cst_list_equal (const_tree l1, const_tree l2)
4853 while (l1 != NULL_TREE && l2 != NULL_TREE)
4855 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4856 return false;
4858 l1 = TREE_CHAIN (l1);
4859 l2 = TREE_CHAIN (l2);
4862 return l1 == l2;
4865 /* Compare two attributes for their value identity. Return true if the
4866 attribute values are known to be equal; otherwise return false.
4869 static bool
4870 attribute_value_equal (const_tree attr1, const_tree attr2)
4872 if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
4873 return true;
4875 if (TREE_VALUE (attr1) != NULL_TREE
4876 && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
4877 && TREE_VALUE (attr2) != NULL
4878 && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
4879 return (simple_cst_list_equal (TREE_VALUE (attr1),
4880 TREE_VALUE (attr2)) == 1);
4882 if ((flag_openmp || flag_openmp_simd)
4883 && TREE_VALUE (attr1) && TREE_VALUE (attr2)
4884 && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
4885 && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
4886 return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
4887 TREE_VALUE (attr2));
4889 return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
4892 /* Return 0 if the attributes for two types are incompatible, 1 if they
4893 are compatible, and 2 if they are nearly compatible (which causes a
4894 warning to be generated). */
4896 comp_type_attributes (const_tree type1, const_tree type2)
4898 const_tree a1 = TYPE_ATTRIBUTES (type1);
4899 const_tree a2 = TYPE_ATTRIBUTES (type2);
4900 const_tree a;
4902 if (a1 == a2)
4903 return 1;
4904 for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
4906 const struct attribute_spec *as;
4907 const_tree attr;
4909 as = lookup_attribute_spec (get_attribute_name (a));
4910 if (!as || as->affects_type_identity == false)
4911 continue;
4913 attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
4914 if (!attr || !attribute_value_equal (a, attr))
4915 break;
4917 if (!a)
4919 for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
4921 const struct attribute_spec *as;
4923 as = lookup_attribute_spec (get_attribute_name (a));
4924 if (!as || as->affects_type_identity == false)
4925 continue;
4927 if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
4928 break;
4929 /* We don't need to compare trees again, as we did this
4930 already in first loop. */
4932 /* All types - affecting identity - are equal, so
4933 there is no need to call target hook for comparison. */
4934 if (!a)
4935 return 1;
4937 /* As some type combinations - like default calling-convention - might
4938 be compatible, we have to call the target hook to get the final result. */
4939 return targetm.comp_type_attributes (type1, type2);
4942 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4943 is ATTRIBUTE.
4945 Record such modified types already made so we don't make duplicates. */
4947 tree
4948 build_type_attribute_variant (tree ttype, tree attribute)
4950 return build_type_attribute_qual_variant (ttype, attribute,
4951 TYPE_QUALS (ttype));
4955 /* Reset the expression *EXPR_P, a size or position.
4957 ??? We could reset all non-constant sizes or positions. But it's cheap
4958 enough to not do so and refrain from adding workarounds to dwarf2out.c.
4960 We need to reset self-referential sizes or positions because they cannot
4961 be gimplified and thus can contain a CALL_EXPR after the gimplification
4962 is finished, which will run afoul of LTO streaming. And they need to be
4963 reset to something essentially dummy but not constant, so as to preserve
4964 the properties of the object they are attached to. */
4966 static inline void
4967 free_lang_data_in_one_sizepos (tree *expr_p)
4969 tree expr = *expr_p;
4970 if (CONTAINS_PLACEHOLDER_P (expr))
4971 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
4975 /* Reset all the fields in a binfo node BINFO. We only keep
4976 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
4978 static void
4979 free_lang_data_in_binfo (tree binfo)
4981 unsigned i;
4982 tree t;
4984 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
4986 BINFO_VIRTUALS (binfo) = NULL_TREE;
4987 BINFO_BASE_ACCESSES (binfo) = NULL;
4988 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
4989 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
4991 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
4992 free_lang_data_in_binfo (t);
4996 /* Reset all language specific information still present in TYPE. */
4998 static void
4999 free_lang_data_in_type (tree type)
5001 gcc_assert (TYPE_P (type));
5003 /* Give the FE a chance to remove its own data first. */
5004 lang_hooks.free_lang_data (type);
5006 TREE_LANG_FLAG_0 (type) = 0;
5007 TREE_LANG_FLAG_1 (type) = 0;
5008 TREE_LANG_FLAG_2 (type) = 0;
5009 TREE_LANG_FLAG_3 (type) = 0;
5010 TREE_LANG_FLAG_4 (type) = 0;
5011 TREE_LANG_FLAG_5 (type) = 0;
5012 TREE_LANG_FLAG_6 (type) = 0;
5014 if (TREE_CODE (type) == FUNCTION_TYPE)
5016 /* Remove the const and volatile qualifiers from arguments. The
5017 C++ front end removes them, but the C front end does not,
5018 leading to false ODR violation errors when merging two
5019 instances of the same function signature compiled by
5020 different front ends. */
5021 tree p;
5023 for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
5025 tree arg_type = TREE_VALUE (p);
5027 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
5029 int quals = TYPE_QUALS (arg_type)
5030 & ~TYPE_QUAL_CONST
5031 & ~TYPE_QUAL_VOLATILE;
5032 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
5033 free_lang_data_in_type (TREE_VALUE (p));
5038 /* Remove members that are not actually FIELD_DECLs from the field
5039 list of an aggregate. These occur in C++. */
5040 if (RECORD_OR_UNION_TYPE_P (type))
5042 tree prev, member;
5044 /* Note that TYPE_FIELDS can be shared across distinct
5045 TREE_TYPEs. Therefore, if the first field of TYPE_FIELDS is
5046 to be removed, we cannot set its TREE_CHAIN to NULL.
5047 Otherwise, we would not be able to find all the other fields
5048 in the other instances of this TREE_TYPE.
5050 This was causing an ICE in testsuite/g++.dg/lto/20080915.C. */
5051 prev = NULL_TREE;
5052 member = TYPE_FIELDS (type);
5053 while (member)
5055 if (TREE_CODE (member) == FIELD_DECL
5056 || TREE_CODE (member) == TYPE_DECL)
5058 if (prev)
5059 TREE_CHAIN (prev) = member;
5060 else
5061 TYPE_FIELDS (type) = member;
5062 prev = member;
5065 member = TREE_CHAIN (member);
5068 if (prev)
5069 TREE_CHAIN (prev) = NULL_TREE;
5070 else
5071 TYPE_FIELDS (type) = NULL_TREE;
5073 TYPE_METHODS (type) = NULL_TREE;
5074 if (TYPE_BINFO (type))
5076 free_lang_data_in_binfo (TYPE_BINFO (type));
5077 if ((!BINFO_VTABLE (TYPE_BINFO (type))
5078 || !flag_devirtualize)
5079 && (!BINFO_N_BASE_BINFOS (TYPE_BINFO (type))
5080 || debug_info_level != DINFO_LEVEL_NONE))
5081 TYPE_BINFO (type) = NULL;
5084 else
5086 /* For non-aggregate types, clear out the language slot (which
5087 overloads TYPE_BINFO). */
5088 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
5090 if (INTEGRAL_TYPE_P (type)
5091 || SCALAR_FLOAT_TYPE_P (type)
5092 || FIXED_POINT_TYPE_P (type))
5094 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
5095 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
5099 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
5100 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
5102 if (TYPE_CONTEXT (type)
5103 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
5105 tree ctx = TYPE_CONTEXT (type);
5108 ctx = BLOCK_SUPERCONTEXT (ctx);
5110 while (ctx && TREE_CODE (ctx) == BLOCK);
5111 TYPE_CONTEXT (type) = ctx;
5116 /* Return true if DECL may need an assembler name to be set. */
5118 static inline bool
5119 need_assembler_name_p (tree decl)
5121 /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition Rule
5122 merging. */
5123 if (flag_lto_odr_type_mering
5124 && TREE_CODE (decl) == TYPE_DECL
5125 && DECL_NAME (decl)
5126 && decl == TYPE_NAME (TREE_TYPE (decl))
5127 && !is_lang_specific (TREE_TYPE (decl))
5128 && AGGREGATE_TYPE_P (TREE_TYPE (decl))
5129 && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE)
5130 && !type_in_anonymous_namespace_p (TREE_TYPE (decl)))
5131 return !DECL_ASSEMBLER_NAME_SET_P (decl);
5132 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
5133 if (TREE_CODE (decl) != FUNCTION_DECL
5134 && TREE_CODE (decl) != VAR_DECL)
5135 return false;
5137 /* If DECL already has its assembler name set, it does not need a
5138 new one. */
5139 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
5140 || DECL_ASSEMBLER_NAME_SET_P (decl))
5141 return false;
5143 /* Abstract decls do not need an assembler name. */
5144 if (DECL_ABSTRACT_P (decl))
5145 return false;
5147 /* For VAR_DECLs, only static, public and external symbols need an
5148 assembler name. */
5149 if (TREE_CODE (decl) == VAR_DECL
5150 && !TREE_STATIC (decl)
5151 && !TREE_PUBLIC (decl)
5152 && !DECL_EXTERNAL (decl))
5153 return false;
5155 if (TREE_CODE (decl) == FUNCTION_DECL)
5157 /* Do not set assembler name on builtins. Allow RTL expansion to
5158 decide whether to expand inline or via a regular call. */
5159 if (DECL_BUILT_IN (decl)
5160 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5161 return false;
5163 /* Functions represented in the callgraph need an assembler name. */
5164 if (cgraph_node::get (decl) != NULL)
5165 return true;
5167 /* Unused and not public functions don't need an assembler name. */
5168 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5169 return false;
5172 return true;
5176 /* Reset all language specific information still present in symbol
5177 DECL. */
5179 static void
5180 free_lang_data_in_decl (tree decl)
5182 gcc_assert (DECL_P (decl));
5184 /* Give the FE a chance to remove its own data first. */
5185 lang_hooks.free_lang_data (decl);
5187 TREE_LANG_FLAG_0 (decl) = 0;
5188 TREE_LANG_FLAG_1 (decl) = 0;
5189 TREE_LANG_FLAG_2 (decl) = 0;
5190 TREE_LANG_FLAG_3 (decl) = 0;
5191 TREE_LANG_FLAG_4 (decl) = 0;
5192 TREE_LANG_FLAG_5 (decl) = 0;
5193 TREE_LANG_FLAG_6 (decl) = 0;
5195 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5196 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5197 if (TREE_CODE (decl) == FIELD_DECL)
5199 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5200 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5201 DECL_QUALIFIER (decl) = NULL_TREE;
5204 if (TREE_CODE (decl) == FUNCTION_DECL)
5206 struct cgraph_node *node;
5207 if (!(node = cgraph_node::get (decl))
5208 || (!node->definition && !node->clones))
5210 if (node)
5211 node->release_body ();
5212 else
5214 release_function_body (decl);
5215 DECL_ARGUMENTS (decl) = NULL;
5216 DECL_RESULT (decl) = NULL;
5217 DECL_INITIAL (decl) = error_mark_node;
5220 if (gimple_has_body_p (decl))
5222 tree t;
5224 /* If DECL has a gimple body, then the context for its
5225 arguments must be DECL. Otherwise, it doesn't really
5226 matter, as we will not be emitting any code for DECL. In
5227 general, there may be other instances of DECL created by
5228 the front end and since PARM_DECLs are generally shared,
5229 their DECL_CONTEXT changes as the replicas of DECL are
5230 created. The only time where DECL_CONTEXT is important
5231 is for the FUNCTION_DECLs that have a gimple body (since
5232 the PARM_DECL will be used in the function's body). */
5233 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5234 DECL_CONTEXT (t) = decl;
5235 if (!DECL_FUNCTION_SPECIFIC_TARGET (decl))
5236 DECL_FUNCTION_SPECIFIC_TARGET (decl)
5237 = target_option_default_node;
5238 if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl))
5239 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
5240 = optimization_default_node;
5243 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5244 At this point, it is not needed anymore. */
5245 DECL_SAVED_TREE (decl) = NULL_TREE;
5247 /* Clear the abstract origin if it refers to a method. Otherwise
5248 dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5249 origin will not be output correctly. */
5250 if (DECL_ABSTRACT_ORIGIN (decl)
5251 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5252 && RECORD_OR_UNION_TYPE_P
5253 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5254 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5256 /* Sometimes the C++ frontend doesn't manage to transform a temporary
5257 DECL_VINDEX referring to itself into a vtable slot number as it
5258 should. Happens with functions that are copied and then forgotten
5259 about. Just clear it, it won't matter anymore. */
5260 if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5261 DECL_VINDEX (decl) = NULL_TREE;
5263 else if (TREE_CODE (decl) == VAR_DECL)
5265 if ((DECL_EXTERNAL (decl)
5266 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5267 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5268 DECL_INITIAL (decl) = NULL_TREE;
5270 else if (TREE_CODE (decl) == TYPE_DECL
5271 || TREE_CODE (decl) == FIELD_DECL)
5272 DECL_INITIAL (decl) = NULL_TREE;
5273 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5274 && DECL_INITIAL (decl)
5275 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5277 /* Strip builtins from the translation-unit BLOCK. We still have targets
5278 without builtin_decl_explicit support and also builtins are shared
5279 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5280 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5281 while (*nextp)
5283 tree var = *nextp;
5284 if (TREE_CODE (var) == FUNCTION_DECL
5285 && DECL_BUILT_IN (var))
5286 *nextp = TREE_CHAIN (var);
5287 else
5288 nextp = &TREE_CHAIN (var);
5294 /* Data used when collecting DECLs and TYPEs for language data removal. */
5296 struct free_lang_data_d
5298 /* Worklist to avoid excessive recursion. */
5299 vec<tree> worklist;
5301 /* Set of traversed objects. Used to avoid duplicate visits. */
5302 hash_set<tree> *pset;
5304 /* Array of symbols to process with free_lang_data_in_decl. */
5305 vec<tree> decls;
5307 /* Array of types to process with free_lang_data_in_type. */
5308 vec<tree> types;
5312 /* Save all language fields needed to generate proper debug information
5313 for DECL. This saves most fields cleared out by free_lang_data_in_decl. */
5315 static void
5316 save_debug_info_for_decl (tree t)
5318 /*struct saved_debug_info_d *sdi;*/
5320 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5322 /* FIXME. Partial implementation for saving debug info removed. */
5326 /* Save all language fields needed to generate proper debug information
5327 for TYPE. This saves most fields cleared out by free_lang_data_in_type. */
5329 static void
5330 save_debug_info_for_type (tree t)
5332 /*struct saved_debug_info_d *sdi;*/
5334 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5336 /* FIXME. Partial implementation for saving debug info removed. */
5340 /* Add type or decl T to one of the list of tree nodes that need their
5341 language data removed. The lists are held inside FLD. */
5343 static void
5344 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5346 if (DECL_P (t))
5348 fld->decls.safe_push (t);
5349 if (debug_info_level > DINFO_LEVEL_TERSE)
5350 save_debug_info_for_decl (t);
5352 else if (TYPE_P (t))
5354 fld->types.safe_push (t);
5355 if (debug_info_level > DINFO_LEVEL_TERSE)
5356 save_debug_info_for_type (t);
5358 else
5359 gcc_unreachable ();
5362 /* Push tree node T into FLD->WORKLIST. */
5364 static inline void
5365 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5367 if (t && !is_lang_specific (t) && !fld->pset->contains (t))
5368 fld->worklist.safe_push ((t));
5372 /* Operand callback helper for free_lang_data_in_node. *TP is the
5373 subtree operand being considered. */
5375 static tree
5376 find_decls_types_r (tree *tp, int *ws, void *data)
5378 tree t = *tp;
5379 struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5381 if (TREE_CODE (t) == TREE_LIST)
5382 return NULL_TREE;
5384 /* Language specific nodes will be removed, so there is no need
5385 to gather anything under them. */
5386 if (is_lang_specific (t))
5388 *ws = 0;
5389 return NULL_TREE;
5392 if (DECL_P (t))
5394 /* Note that walk_tree does not traverse every possible field in
5395 decls, so we have to do our own traversals here. */
5396 add_tree_to_fld_list (t, fld);
5398 fld_worklist_push (DECL_NAME (t), fld);
5399 fld_worklist_push (DECL_CONTEXT (t), fld);
5400 fld_worklist_push (DECL_SIZE (t), fld);
5401 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5403 /* We are going to remove everything under DECL_INITIAL for
5404 TYPE_DECLs. No point walking them. */
5405 if (TREE_CODE (t) != TYPE_DECL)
5406 fld_worklist_push (DECL_INITIAL (t), fld);
5408 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5409 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5411 if (TREE_CODE (t) == FUNCTION_DECL)
5413 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5414 fld_worklist_push (DECL_RESULT (t), fld);
5416 else if (TREE_CODE (t) == TYPE_DECL)
5418 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5420 else if (TREE_CODE (t) == FIELD_DECL)
5422 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5423 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5424 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5425 fld_worklist_push (DECL_FCONTEXT (t), fld);
5428 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == PARM_DECL)
5429 && DECL_HAS_VALUE_EXPR_P (t))
5430 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5432 if (TREE_CODE (t) != FIELD_DECL
5433 && TREE_CODE (t) != TYPE_DECL)
5434 fld_worklist_push (TREE_CHAIN (t), fld);
5435 *ws = 0;
5437 else if (TYPE_P (t))
5439 /* Note that walk_tree does not traverse every possible field in
5440 types, so we have to do our own traversals here. */
5441 add_tree_to_fld_list (t, fld);
5443 if (!RECORD_OR_UNION_TYPE_P (t))
5444 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5445 fld_worklist_push (TYPE_SIZE (t), fld);
5446 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5447 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5448 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5449 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5450 fld_worklist_push (TYPE_NAME (t), fld);
5451 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
5452 them and thus do not and want not to reach unused pointer types
5453 this way. */
5454 if (!POINTER_TYPE_P (t))
5455 fld_worklist_push (TYPE_MINVAL (t), fld);
5456 if (!RECORD_OR_UNION_TYPE_P (t))
5457 fld_worklist_push (TYPE_MAXVAL (t), fld);
5458 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5459 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5460 do not and want not to reach unused variants this way. */
5461 if (TYPE_CONTEXT (t))
5463 tree ctx = TYPE_CONTEXT (t);
5464 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5465 So push that instead. */
5466 while (ctx && TREE_CODE (ctx) == BLOCK)
5467 ctx = BLOCK_SUPERCONTEXT (ctx);
5468 fld_worklist_push (ctx, fld);
5470 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not
5471 and want not to reach unused types this way. */
5473 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5475 unsigned i;
5476 tree tem;
5477 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5478 fld_worklist_push (TREE_TYPE (tem), fld);
5479 tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5480 if (tem
5481 /* The Java FE overloads BINFO_VIRTUALS for its own purpose. */
5482 && TREE_CODE (tem) == TREE_LIST)
5485 fld_worklist_push (TREE_VALUE (tem), fld);
5486 tem = TREE_CHAIN (tem);
5488 while (tem);
5490 if (RECORD_OR_UNION_TYPE_P (t))
5492 tree tem;
5493 /* Push all TYPE_FIELDS - there can be interleaving interesting
5494 and non-interesting things. */
5495 tem = TYPE_FIELDS (t);
5496 while (tem)
5498 if (TREE_CODE (tem) == FIELD_DECL
5499 || TREE_CODE (tem) == TYPE_DECL)
5500 fld_worklist_push (tem, fld);
5501 tem = TREE_CHAIN (tem);
5505 fld_worklist_push (TYPE_STUB_DECL (t), fld);
5506 *ws = 0;
5508 else if (TREE_CODE (t) == BLOCK)
5510 tree tem;
5511 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5512 fld_worklist_push (tem, fld);
5513 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5514 fld_worklist_push (tem, fld);
5515 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5518 if (TREE_CODE (t) != IDENTIFIER_NODE
5519 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5520 fld_worklist_push (TREE_TYPE (t), fld);
5522 return NULL_TREE;
5526 /* Find decls and types in T. */
5528 static void
5529 find_decls_types (tree t, struct free_lang_data_d *fld)
5531 while (1)
5533 if (!fld->pset->contains (t))
5534 walk_tree (&t, find_decls_types_r, fld, fld->pset);
5535 if (fld->worklist.is_empty ())
5536 break;
5537 t = fld->worklist.pop ();
5541 /* Translate all the types in LIST with the corresponding runtime
5542 types. */
5544 static tree
5545 get_eh_types_for_runtime (tree list)
5547 tree head, prev;
5549 if (list == NULL_TREE)
5550 return NULL_TREE;
5552 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5553 prev = head;
5554 list = TREE_CHAIN (list);
5555 while (list)
5557 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5558 TREE_CHAIN (prev) = n;
5559 prev = TREE_CHAIN (prev);
5560 list = TREE_CHAIN (list);
5563 return head;
5567 /* Find decls and types referenced in EH region R and store them in
5568 FLD->DECLS and FLD->TYPES. */
5570 static void
5571 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5573 switch (r->type)
5575 case ERT_CLEANUP:
5576 break;
5578 case ERT_TRY:
5580 eh_catch c;
5582 /* The types referenced in each catch must first be changed to the
5583 EH types used at runtime. This removes references to FE types
5584 in the region. */
5585 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5587 c->type_list = get_eh_types_for_runtime (c->type_list);
5588 walk_tree (&c->type_list, find_decls_types_r, fld, fld->pset);
5591 break;
5593 case ERT_ALLOWED_EXCEPTIONS:
5594 r->u.allowed.type_list
5595 = get_eh_types_for_runtime (r->u.allowed.type_list);
5596 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, fld->pset);
5597 break;
5599 case ERT_MUST_NOT_THROW:
5600 walk_tree (&r->u.must_not_throw.failure_decl,
5601 find_decls_types_r, fld, fld->pset);
5602 break;
5607 /* Find decls and types referenced in cgraph node N and store them in
5608 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5609 look for *every* kind of DECL and TYPE node reachable from N,
5610 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5611 NAMESPACE_DECLs, etc). */
5613 static void
5614 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5616 basic_block bb;
5617 struct function *fn;
5618 unsigned ix;
5619 tree t;
5621 find_decls_types (n->decl, fld);
5623 if (!gimple_has_body_p (n->decl))
5624 return;
5626 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5628 fn = DECL_STRUCT_FUNCTION (n->decl);
5630 /* Traverse locals. */
5631 FOR_EACH_LOCAL_DECL (fn, ix, t)
5632 find_decls_types (t, fld);
5634 /* Traverse EH regions in FN. */
5636 eh_region r;
5637 FOR_ALL_EH_REGION_FN (r, fn)
5638 find_decls_types_in_eh_region (r, fld);
5641 /* Traverse every statement in FN. */
5642 FOR_EACH_BB_FN (bb, fn)
5644 gphi_iterator psi;
5645 gimple_stmt_iterator si;
5646 unsigned i;
5648 for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi))
5650 gphi *phi = psi.phi ();
5652 for (i = 0; i < gimple_phi_num_args (phi); i++)
5654 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5655 find_decls_types (*arg_p, fld);
5659 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5661 gimple stmt = gsi_stmt (si);
5663 if (is_gimple_call (stmt))
5664 find_decls_types (gimple_call_fntype (stmt), fld);
5666 for (i = 0; i < gimple_num_ops (stmt); i++)
5668 tree arg = gimple_op (stmt, i);
5669 find_decls_types (arg, fld);
5676 /* Find decls and types referenced in varpool node N and store them in
5677 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5678 look for *every* kind of DECL and TYPE node reachable from N,
5679 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5680 NAMESPACE_DECLs, etc). */
5682 static void
5683 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5685 find_decls_types (v->decl, fld);
5688 /* If T needs an assembler name, have one created for it. */
5690 void
5691 assign_assembler_name_if_neeeded (tree t)
5693 if (need_assembler_name_p (t))
5695 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5696 diagnostics that use input_location to show locus
5697 information. The problem here is that, at this point,
5698 input_location is generally anchored to the end of the file
5699 (since the parser is long gone), so we don't have a good
5700 position to pin it to.
5702 To alleviate this problem, this uses the location of T's
5703 declaration. Examples of this are
5704 testsuite/g++.dg/template/cond2.C and
5705 testsuite/g++.dg/template/pr35240.C. */
5706 location_t saved_location = input_location;
5707 input_location = DECL_SOURCE_LOCATION (t);
5709 decl_assembler_name (t);
5711 input_location = saved_location;
5716 /* Free language specific information for every operand and expression
5717 in every node of the call graph. This process operates in three stages:
5719 1- Every callgraph node and varpool node is traversed looking for
5720 decls and types embedded in them. This is a more exhaustive
5721 search than that done by find_referenced_vars, because it will
5722 also collect individual fields, decls embedded in types, etc.
5724 2- All the decls found are sent to free_lang_data_in_decl.
5726 3- All the types found are sent to free_lang_data_in_type.
5728 The ordering between decls and types is important because
5729 free_lang_data_in_decl sets assembler names, which includes
5730 mangling. So types cannot be freed up until assembler names have
5731 been set up. */
5733 static void
5734 free_lang_data_in_cgraph (void)
5736 struct cgraph_node *n;
5737 varpool_node *v;
5738 struct free_lang_data_d fld;
5739 tree t;
5740 unsigned i;
5741 alias_pair *p;
5743 /* Initialize sets and arrays to store referenced decls and types. */
5744 fld.pset = new hash_set<tree>;
5745 fld.worklist.create (0);
5746 fld.decls.create (100);
5747 fld.types.create (100);
5749 /* Find decls and types in the body of every function in the callgraph. */
5750 FOR_EACH_FUNCTION (n)
5751 find_decls_types_in_node (n, &fld);
5753 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5754 find_decls_types (p->decl, &fld);
5756 /* Find decls and types in every varpool symbol. */
5757 FOR_EACH_VARIABLE (v)
5758 find_decls_types_in_var (v, &fld);
5760 /* Set the assembler name on every decl found. We need to do this
5761 now because free_lang_data_in_decl will invalidate data needed
5762 for mangling. This breaks mangling on interdependent decls. */
5763 FOR_EACH_VEC_ELT (fld.decls, i, t)
5764 assign_assembler_name_if_neeeded (t);
5766 /* Traverse every decl found freeing its language data. */
5767 FOR_EACH_VEC_ELT (fld.decls, i, t)
5768 free_lang_data_in_decl (t);
5770 /* Traverse every type found freeing its language data. */
5771 FOR_EACH_VEC_ELT (fld.types, i, t)
5772 free_lang_data_in_type (t);
5774 delete fld.pset;
5775 fld.worklist.release ();
5776 fld.decls.release ();
5777 fld.types.release ();
5781 /* Free resources that are used by FE but are not needed once they are done. */
5783 static unsigned
5784 free_lang_data (void)
5786 unsigned i;
5788 /* If we are the LTO frontend we have freed lang-specific data already. */
5789 if (in_lto_p
5790 || (!flag_generate_lto && !flag_generate_offload))
5791 return 0;
5793 /* Allocate and assign alias sets to the standard integer types
5794 while the slots are still in the way the frontends generated them. */
5795 for (i = 0; i < itk_none; ++i)
5796 if (integer_types[i])
5797 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5799 /* Traverse the IL resetting language specific information for
5800 operands, expressions, etc. */
5801 free_lang_data_in_cgraph ();
5803 /* Create gimple variants for common types. */
5804 ptrdiff_type_node = integer_type_node;
5805 fileptr_type_node = ptr_type_node;
5807 /* Reset some langhooks. Do not reset types_compatible_p, it may
5808 still be used indirectly via the get_alias_set langhook. */
5809 lang_hooks.dwarf_name = lhd_dwarf_name;
5810 lang_hooks.decl_printable_name = gimple_decl_printable_name;
5811 /* We do not want the default decl_assembler_name implementation,
5812 rather if we have fixed everything we want a wrapper around it
5813 asserting that all non-local symbols already got their assembler
5814 name and only produce assembler names for local symbols. Or rather
5815 make sure we never call decl_assembler_name on local symbols and
5816 devise a separate, middle-end private scheme for it. */
5818 /* Reset diagnostic machinery. */
5819 tree_diagnostics_defaults (global_dc);
5821 return 0;
5825 namespace {
5827 const pass_data pass_data_ipa_free_lang_data =
5829 SIMPLE_IPA_PASS, /* type */
5830 "*free_lang_data", /* name */
5831 OPTGROUP_NONE, /* optinfo_flags */
5832 TV_IPA_FREE_LANG_DATA, /* tv_id */
5833 0, /* properties_required */
5834 0, /* properties_provided */
5835 0, /* properties_destroyed */
5836 0, /* todo_flags_start */
5837 0, /* todo_flags_finish */
5840 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
5842 public:
5843 pass_ipa_free_lang_data (gcc::context *ctxt)
5844 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
5847 /* opt_pass methods: */
5848 virtual unsigned int execute (function *) { return free_lang_data (); }
5850 }; // class pass_ipa_free_lang_data
5852 } // anon namespace
5854 simple_ipa_opt_pass *
5855 make_pass_ipa_free_lang_data (gcc::context *ctxt)
5857 return new pass_ipa_free_lang_data (ctxt);
5860 /* The backbone of is_attribute_p(). ATTR_LEN is the string length of
5861 ATTR_NAME. Also used internally by remove_attribute(). */
5862 bool
5863 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
5865 size_t ident_len = IDENTIFIER_LENGTH (ident);
5867 if (ident_len == attr_len)
5869 if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
5870 return true;
5872 else if (ident_len == attr_len + 4)
5874 /* There is the possibility that ATTR is 'text' and IDENT is
5875 '__text__'. */
5876 const char *p = IDENTIFIER_POINTER (ident);
5877 if (p[0] == '_' && p[1] == '_'
5878 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5879 && strncmp (attr_name, p + 2, attr_len) == 0)
5880 return true;
5883 return false;
5886 /* The backbone of lookup_attribute(). ATTR_LEN is the string length
5887 of ATTR_NAME, and LIST is not NULL_TREE. */
5888 tree
5889 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
5891 while (list)
5893 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5895 if (ident_len == attr_len)
5897 if (!strcmp (attr_name,
5898 IDENTIFIER_POINTER (get_attribute_name (list))))
5899 break;
5901 /* TODO: If we made sure that attributes were stored in the
5902 canonical form without '__...__' (ie, as in 'text' as opposed
5903 to '__text__') then we could avoid the following case. */
5904 else if (ident_len == attr_len + 4)
5906 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5907 if (p[0] == '_' && p[1] == '_'
5908 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5909 && strncmp (attr_name, p + 2, attr_len) == 0)
5910 break;
5912 list = TREE_CHAIN (list);
5915 return list;
5918 /* Given an attribute name ATTR_NAME and a list of attributes LIST,
5919 return a pointer to the attribute's list first element if the attribute
5920 starts with ATTR_NAME. ATTR_NAME must be in the form 'text' (not
5921 '__text__'). */
5923 tree
5924 private_lookup_attribute_by_prefix (const char *attr_name, size_t attr_len,
5925 tree list)
5927 while (list)
5929 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5931 if (attr_len > ident_len)
5933 list = TREE_CHAIN (list);
5934 continue;
5937 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5939 if (strncmp (attr_name, p, attr_len) == 0)
5940 break;
5942 /* TODO: If we made sure that attributes were stored in the
5943 canonical form without '__...__' (ie, as in 'text' as opposed
5944 to '__text__') then we could avoid the following case. */
5945 if (p[0] == '_' && p[1] == '_' &&
5946 strncmp (attr_name, p + 2, attr_len) == 0)
5947 break;
5949 list = TREE_CHAIN (list);
5952 return list;
5956 /* A variant of lookup_attribute() that can be used with an identifier
5957 as the first argument, and where the identifier can be either
5958 'text' or '__text__'.
5960 Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
5961 return a pointer to the attribute's list element if the attribute
5962 is part of the list, or NULL_TREE if not found. If the attribute
5963 appears more than once, this only returns the first occurrence; the
5964 TREE_CHAIN of the return value should be passed back in if further
5965 occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
5966 can be in the form 'text' or '__text__'. */
5967 static tree
5968 lookup_ident_attribute (tree attr_identifier, tree list)
5970 gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
5972 while (list)
5974 gcc_checking_assert (TREE_CODE (get_attribute_name (list))
5975 == IDENTIFIER_NODE);
5977 /* Identifiers can be compared directly for equality. */
5978 if (attr_identifier == get_attribute_name (list))
5979 break;
5981 /* If they are not equal, they may still be one in the form
5982 'text' while the other one is in the form '__text__'. TODO:
5983 If we were storing attributes in normalized 'text' form, then
5984 this could all go away and we could take full advantage of
5985 the fact that we're comparing identifiers. :-) */
5987 size_t attr_len = IDENTIFIER_LENGTH (attr_identifier);
5988 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5990 if (ident_len == attr_len + 4)
5992 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5993 const char *q = IDENTIFIER_POINTER (attr_identifier);
5994 if (p[0] == '_' && p[1] == '_'
5995 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5996 && strncmp (q, p + 2, attr_len) == 0)
5997 break;
5999 else if (ident_len + 4 == attr_len)
6001 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
6002 const char *q = IDENTIFIER_POINTER (attr_identifier);
6003 if (q[0] == '_' && q[1] == '_'
6004 && q[attr_len - 2] == '_' && q[attr_len - 1] == '_'
6005 && strncmp (q + 2, p, ident_len) == 0)
6006 break;
6009 list = TREE_CHAIN (list);
6012 return list;
6015 /* Remove any instances of attribute ATTR_NAME in LIST and return the
6016 modified list. */
6018 tree
6019 remove_attribute (const char *attr_name, tree list)
6021 tree *p;
6022 size_t attr_len = strlen (attr_name);
6024 gcc_checking_assert (attr_name[0] != '_');
6026 for (p = &list; *p; )
6028 tree l = *p;
6029 /* TODO: If we were storing attributes in normalized form, here
6030 we could use a simple strcmp(). */
6031 if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
6032 *p = TREE_CHAIN (l);
6033 else
6034 p = &TREE_CHAIN (l);
6037 return list;
6040 /* Return an attribute list that is the union of a1 and a2. */
6042 tree
6043 merge_attributes (tree a1, tree a2)
6045 tree attributes;
6047 /* Either one unset? Take the set one. */
6049 if ((attributes = a1) == 0)
6050 attributes = a2;
6052 /* One that completely contains the other? Take it. */
6054 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
6056 if (attribute_list_contained (a2, a1))
6057 attributes = a2;
6058 else
6060 /* Pick the longest list, and hang on the other list. */
6062 if (list_length (a1) < list_length (a2))
6063 attributes = a2, a2 = a1;
6065 for (; a2 != 0; a2 = TREE_CHAIN (a2))
6067 tree a;
6068 for (a = lookup_ident_attribute (get_attribute_name (a2),
6069 attributes);
6070 a != NULL_TREE && !attribute_value_equal (a, a2);
6071 a = lookup_ident_attribute (get_attribute_name (a2),
6072 TREE_CHAIN (a)))
6074 if (a == NULL_TREE)
6076 a1 = copy_node (a2);
6077 TREE_CHAIN (a1) = attributes;
6078 attributes = a1;
6083 return attributes;
6086 /* Given types T1 and T2, merge their attributes and return
6087 the result. */
6089 tree
6090 merge_type_attributes (tree t1, tree t2)
6092 return merge_attributes (TYPE_ATTRIBUTES (t1),
6093 TYPE_ATTRIBUTES (t2));
6096 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
6097 the result. */
6099 tree
6100 merge_decl_attributes (tree olddecl, tree newdecl)
6102 return merge_attributes (DECL_ATTRIBUTES (olddecl),
6103 DECL_ATTRIBUTES (newdecl));
6106 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
6108 /* Specialization of merge_decl_attributes for various Windows targets.
6110 This handles the following situation:
6112 __declspec (dllimport) int foo;
6113 int foo;
6115 The second instance of `foo' nullifies the dllimport. */
6117 tree
6118 merge_dllimport_decl_attributes (tree old, tree new_tree)
6120 tree a;
6121 int delete_dllimport_p = 1;
6123 /* What we need to do here is remove from `old' dllimport if it doesn't
6124 appear in `new'. dllimport behaves like extern: if a declaration is
6125 marked dllimport and a definition appears later, then the object
6126 is not dllimport'd. We also remove a `new' dllimport if the old list
6127 contains dllexport: dllexport always overrides dllimport, regardless
6128 of the order of declaration. */
6129 if (!VAR_OR_FUNCTION_DECL_P (new_tree))
6130 delete_dllimport_p = 0;
6131 else if (DECL_DLLIMPORT_P (new_tree)
6132 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
6134 DECL_DLLIMPORT_P (new_tree) = 0;
6135 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
6136 "dllimport ignored", new_tree);
6138 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
6140 /* Warn about overriding a symbol that has already been used, e.g.:
6141 extern int __attribute__ ((dllimport)) foo;
6142 int* bar () {return &foo;}
6143 int foo;
6145 if (TREE_USED (old))
6147 warning (0, "%q+D redeclared without dllimport attribute "
6148 "after being referenced with dll linkage", new_tree);
6149 /* If we have used a variable's address with dllimport linkage,
6150 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
6151 decl may already have had TREE_CONSTANT computed.
6152 We still remove the attribute so that assembler code refers
6153 to '&foo rather than '_imp__foo'. */
6154 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
6155 DECL_DLLIMPORT_P (new_tree) = 1;
6158 /* Let an inline definition silently override the external reference,
6159 but otherwise warn about attribute inconsistency. */
6160 else if (TREE_CODE (new_tree) == VAR_DECL
6161 || !DECL_DECLARED_INLINE_P (new_tree))
6162 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
6163 "previous dllimport ignored", new_tree);
6165 else
6166 delete_dllimport_p = 0;
6168 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
6170 if (delete_dllimport_p)
6171 a = remove_attribute ("dllimport", a);
6173 return a;
6176 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
6177 struct attribute_spec.handler. */
6179 tree
6180 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
6181 bool *no_add_attrs)
6183 tree node = *pnode;
6184 bool is_dllimport;
6186 /* These attributes may apply to structure and union types being created,
6187 but otherwise should pass to the declaration involved. */
6188 if (!DECL_P (node))
6190 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
6191 | (int) ATTR_FLAG_ARRAY_NEXT))
6193 *no_add_attrs = true;
6194 return tree_cons (name, args, NULL_TREE);
6196 if (TREE_CODE (node) == RECORD_TYPE
6197 || TREE_CODE (node) == UNION_TYPE)
6199 node = TYPE_NAME (node);
6200 if (!node)
6201 return NULL_TREE;
6203 else
6205 warning (OPT_Wattributes, "%qE attribute ignored",
6206 name);
6207 *no_add_attrs = true;
6208 return NULL_TREE;
6212 if (TREE_CODE (node) != FUNCTION_DECL
6213 && TREE_CODE (node) != VAR_DECL
6214 && TREE_CODE (node) != TYPE_DECL)
6216 *no_add_attrs = true;
6217 warning (OPT_Wattributes, "%qE attribute ignored",
6218 name);
6219 return NULL_TREE;
6222 if (TREE_CODE (node) == TYPE_DECL
6223 && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
6224 && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
6226 *no_add_attrs = true;
6227 warning (OPT_Wattributes, "%qE attribute ignored",
6228 name);
6229 return NULL_TREE;
6232 is_dllimport = is_attribute_p ("dllimport", name);
6234 /* Report error on dllimport ambiguities seen now before they cause
6235 any damage. */
6236 if (is_dllimport)
6238 /* Honor any target-specific overrides. */
6239 if (!targetm.valid_dllimport_attribute_p (node))
6240 *no_add_attrs = true;
6242 else if (TREE_CODE (node) == FUNCTION_DECL
6243 && DECL_DECLARED_INLINE_P (node))
6245 warning (OPT_Wattributes, "inline function %q+D declared as "
6246 " dllimport: attribute ignored", node);
6247 *no_add_attrs = true;
6249 /* Like MS, treat definition of dllimported variables and
6250 non-inlined functions on declaration as syntax errors. */
6251 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6253 error ("function %q+D definition is marked dllimport", node);
6254 *no_add_attrs = true;
6257 else if (TREE_CODE (node) == VAR_DECL)
6259 if (DECL_INITIAL (node))
6261 error ("variable %q+D definition is marked dllimport",
6262 node);
6263 *no_add_attrs = true;
6266 /* `extern' needn't be specified with dllimport.
6267 Specify `extern' now and hope for the best. Sigh. */
6268 DECL_EXTERNAL (node) = 1;
6269 /* Also, implicitly give dllimport'd variables declared within
6270 a function global scope, unless declared static. */
6271 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6272 TREE_PUBLIC (node) = 1;
6275 if (*no_add_attrs == false)
6276 DECL_DLLIMPORT_P (node) = 1;
6278 else if (TREE_CODE (node) == FUNCTION_DECL
6279 && DECL_DECLARED_INLINE_P (node)
6280 && flag_keep_inline_dllexport)
6281 /* An exported function, even if inline, must be emitted. */
6282 DECL_EXTERNAL (node) = 0;
6284 /* Report error if symbol is not accessible at global scope. */
6285 if (!TREE_PUBLIC (node)
6286 && (TREE_CODE (node) == VAR_DECL
6287 || TREE_CODE (node) == FUNCTION_DECL))
6289 error ("external linkage required for symbol %q+D because of "
6290 "%qE attribute", node, name);
6291 *no_add_attrs = true;
6294 /* A dllexport'd entity must have default visibility so that other
6295 program units (shared libraries or the main executable) can see
6296 it. A dllimport'd entity must have default visibility so that
6297 the linker knows that undefined references within this program
6298 unit can be resolved by the dynamic linker. */
6299 if (!*no_add_attrs)
6301 if (DECL_VISIBILITY_SPECIFIED (node)
6302 && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6303 error ("%qE implies default visibility, but %qD has already "
6304 "been declared with a different visibility",
6305 name, node);
6306 DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6307 DECL_VISIBILITY_SPECIFIED (node) = 1;
6310 return NULL_TREE;
6313 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
6315 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6316 of the various TYPE_QUAL values. */
6318 static void
6319 set_type_quals (tree type, int type_quals)
6321 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6322 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6323 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6324 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6325 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6328 /* Returns true iff unqualified CAND and BASE are equivalent. */
6330 bool
6331 check_base_type (const_tree cand, const_tree base)
6333 return (TYPE_NAME (cand) == TYPE_NAME (base)
6334 /* Apparently this is needed for Objective-C. */
6335 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6336 /* Check alignment. */
6337 && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6338 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6339 TYPE_ATTRIBUTES (base)));
6342 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */
6344 bool
6345 check_qualified_type (const_tree cand, const_tree base, int type_quals)
6347 return (TYPE_QUALS (cand) == type_quals
6348 && check_base_type (cand, base));
6351 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
6353 static bool
6354 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6356 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6357 && TYPE_NAME (cand) == TYPE_NAME (base)
6358 /* Apparently this is needed for Objective-C. */
6359 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6360 /* Check alignment. */
6361 && TYPE_ALIGN (cand) == align
6362 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6363 TYPE_ATTRIBUTES (base)));
6366 /* This function checks to see if TYPE matches the size one of the built-in
6367 atomic types, and returns that core atomic type. */
6369 static tree
6370 find_atomic_core_type (tree type)
6372 tree base_atomic_type;
6374 /* Only handle complete types. */
6375 if (TYPE_SIZE (type) == NULL_TREE)
6376 return NULL_TREE;
6378 HOST_WIDE_INT type_size = tree_to_uhwi (TYPE_SIZE (type));
6379 switch (type_size)
6381 case 8:
6382 base_atomic_type = atomicQI_type_node;
6383 break;
6385 case 16:
6386 base_atomic_type = atomicHI_type_node;
6387 break;
6389 case 32:
6390 base_atomic_type = atomicSI_type_node;
6391 break;
6393 case 64:
6394 base_atomic_type = atomicDI_type_node;
6395 break;
6397 case 128:
6398 base_atomic_type = atomicTI_type_node;
6399 break;
6401 default:
6402 base_atomic_type = NULL_TREE;
6405 return base_atomic_type;
6408 /* Return a version of the TYPE, qualified as indicated by the
6409 TYPE_QUALS, if one exists. If no qualified version exists yet,
6410 return NULL_TREE. */
6412 tree
6413 get_qualified_type (tree type, int type_quals)
6415 tree t;
6417 if (TYPE_QUALS (type) == type_quals)
6418 return type;
6420 /* Search the chain of variants to see if there is already one there just
6421 like the one we need to have. If so, use that existing one. We must
6422 preserve the TYPE_NAME, since there is code that depends on this. */
6423 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6424 if (check_qualified_type (t, type, type_quals))
6425 return t;
6427 return NULL_TREE;
6430 /* Like get_qualified_type, but creates the type if it does not
6431 exist. This function never returns NULL_TREE. */
6433 tree
6434 build_qualified_type (tree type, int type_quals)
6436 tree t;
6438 /* See if we already have the appropriate qualified variant. */
6439 t = get_qualified_type (type, type_quals);
6441 /* If not, build it. */
6442 if (!t)
6444 t = build_variant_type_copy (type);
6445 set_type_quals (t, type_quals);
6447 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6449 /* See if this object can map to a basic atomic type. */
6450 tree atomic_type = find_atomic_core_type (type);
6451 if (atomic_type)
6453 /* Ensure the alignment of this type is compatible with
6454 the required alignment of the atomic type. */
6455 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6456 TYPE_ALIGN (t) = TYPE_ALIGN (atomic_type);
6460 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6461 /* Propagate structural equality. */
6462 SET_TYPE_STRUCTURAL_EQUALITY (t);
6463 else if (TYPE_CANONICAL (type) != type)
6464 /* Build the underlying canonical type, since it is different
6465 from TYPE. */
6467 tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals);
6468 TYPE_CANONICAL (t) = TYPE_CANONICAL (c);
6470 else
6471 /* T is its own canonical type. */
6472 TYPE_CANONICAL (t) = t;
6476 return t;
6479 /* Create a variant of type T with alignment ALIGN. */
6481 tree
6482 build_aligned_type (tree type, unsigned int align)
6484 tree t;
6486 if (TYPE_PACKED (type)
6487 || TYPE_ALIGN (type) == align)
6488 return type;
6490 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6491 if (check_aligned_type (t, type, align))
6492 return t;
6494 t = build_variant_type_copy (type);
6495 TYPE_ALIGN (t) = align;
6497 return t;
6500 /* Create a new distinct copy of TYPE. The new type is made its own
6501 MAIN_VARIANT. If TYPE requires structural equality checks, the
6502 resulting type requires structural equality checks; otherwise, its
6503 TYPE_CANONICAL points to itself. */
6505 tree
6506 build_distinct_type_copy (tree type)
6508 tree t = copy_node (type);
6510 TYPE_POINTER_TO (t) = 0;
6511 TYPE_REFERENCE_TO (t) = 0;
6513 /* Set the canonical type either to a new equivalence class, or
6514 propagate the need for structural equality checks. */
6515 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6516 SET_TYPE_STRUCTURAL_EQUALITY (t);
6517 else
6518 TYPE_CANONICAL (t) = t;
6520 /* Make it its own variant. */
6521 TYPE_MAIN_VARIANT (t) = t;
6522 TYPE_NEXT_VARIANT (t) = 0;
6524 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6525 whose TREE_TYPE is not t. This can also happen in the Ada
6526 frontend when using subtypes. */
6528 return t;
6531 /* Create a new variant of TYPE, equivalent but distinct. This is so
6532 the caller can modify it. TYPE_CANONICAL for the return type will
6533 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6534 are considered equal by the language itself (or that both types
6535 require structural equality checks). */
6537 tree
6538 build_variant_type_copy (tree type)
6540 tree t, m = TYPE_MAIN_VARIANT (type);
6542 t = build_distinct_type_copy (type);
6544 /* Since we're building a variant, assume that it is a non-semantic
6545 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6546 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6548 /* Add the new type to the chain of variants of TYPE. */
6549 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6550 TYPE_NEXT_VARIANT (m) = t;
6551 TYPE_MAIN_VARIANT (t) = m;
6553 return t;
6556 /* Return true if the from tree in both tree maps are equal. */
6559 tree_map_base_eq (const void *va, const void *vb)
6561 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6562 *const b = (const struct tree_map_base *) vb;
6563 return (a->from == b->from);
6566 /* Hash a from tree in a tree_base_map. */
6568 unsigned int
6569 tree_map_base_hash (const void *item)
6571 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6574 /* Return true if this tree map structure is marked for garbage collection
6575 purposes. We simply return true if the from tree is marked, so that this
6576 structure goes away when the from tree goes away. */
6579 tree_map_base_marked_p (const void *p)
6581 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6584 /* Hash a from tree in a tree_map. */
6586 unsigned int
6587 tree_map_hash (const void *item)
6589 return (((const struct tree_map *) item)->hash);
6592 /* Hash a from tree in a tree_decl_map. */
6594 unsigned int
6595 tree_decl_map_hash (const void *item)
6597 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6600 /* Return the initialization priority for DECL. */
6602 priority_type
6603 decl_init_priority_lookup (tree decl)
6605 symtab_node *snode = symtab_node::get (decl);
6607 if (!snode)
6608 return DEFAULT_INIT_PRIORITY;
6609 return
6610 snode->get_init_priority ();
6613 /* Return the finalization priority for DECL. */
6615 priority_type
6616 decl_fini_priority_lookup (tree decl)
6618 cgraph_node *node = cgraph_node::get (decl);
6620 if (!node)
6621 return DEFAULT_INIT_PRIORITY;
6622 return
6623 node->get_fini_priority ();
6626 /* Set the initialization priority for DECL to PRIORITY. */
6628 void
6629 decl_init_priority_insert (tree decl, priority_type priority)
6631 struct symtab_node *snode;
6633 if (priority == DEFAULT_INIT_PRIORITY)
6635 snode = symtab_node::get (decl);
6636 if (!snode)
6637 return;
6639 else if (TREE_CODE (decl) == VAR_DECL)
6640 snode = varpool_node::get_create (decl);
6641 else
6642 snode = cgraph_node::get_create (decl);
6643 snode->set_init_priority (priority);
6646 /* Set the finalization priority for DECL to PRIORITY. */
6648 void
6649 decl_fini_priority_insert (tree decl, priority_type priority)
6651 struct cgraph_node *node;
6653 if (priority == DEFAULT_INIT_PRIORITY)
6655 node = cgraph_node::get (decl);
6656 if (!node)
6657 return;
6659 else
6660 node = cgraph_node::get_create (decl);
6661 node->set_fini_priority (priority);
6664 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6666 static void
6667 print_debug_expr_statistics (void)
6669 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6670 (long) debug_expr_for_decl->size (),
6671 (long) debug_expr_for_decl->elements (),
6672 debug_expr_for_decl->collisions ());
6675 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6677 static void
6678 print_value_expr_statistics (void)
6680 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6681 (long) value_expr_for_decl->size (),
6682 (long) value_expr_for_decl->elements (),
6683 value_expr_for_decl->collisions ());
6686 /* Lookup a debug expression for FROM, and return it if we find one. */
6688 tree
6689 decl_debug_expr_lookup (tree from)
6691 struct tree_decl_map *h, in;
6692 in.base.from = from;
6694 h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6695 if (h)
6696 return h->to;
6697 return NULL_TREE;
6700 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6702 void
6703 decl_debug_expr_insert (tree from, tree to)
6705 struct tree_decl_map *h;
6707 h = ggc_alloc<tree_decl_map> ();
6708 h->base.from = from;
6709 h->to = to;
6710 *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6713 /* Lookup a value expression for FROM, and return it if we find one. */
6715 tree
6716 decl_value_expr_lookup (tree from)
6718 struct tree_decl_map *h, in;
6719 in.base.from = from;
6721 h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from));
6722 if (h)
6723 return h->to;
6724 return NULL_TREE;
6727 /* Insert a mapping FROM->TO in the value expression hashtable. */
6729 void
6730 decl_value_expr_insert (tree from, tree to)
6732 struct tree_decl_map *h;
6734 h = ggc_alloc<tree_decl_map> ();
6735 h->base.from = from;
6736 h->to = to;
6737 *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
6740 /* Lookup a vector of debug arguments for FROM, and return it if we
6741 find one. */
6743 vec<tree, va_gc> **
6744 decl_debug_args_lookup (tree from)
6746 struct tree_vec_map *h, in;
6748 if (!DECL_HAS_DEBUG_ARGS_P (from))
6749 return NULL;
6750 gcc_checking_assert (debug_args_for_decl != NULL);
6751 in.base.from = from;
6752 h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from));
6753 if (h)
6754 return &h->to;
6755 return NULL;
6758 /* Insert a mapping FROM->empty vector of debug arguments in the value
6759 expression hashtable. */
6761 vec<tree, va_gc> **
6762 decl_debug_args_insert (tree from)
6764 struct tree_vec_map *h;
6765 tree_vec_map **loc;
6767 if (DECL_HAS_DEBUG_ARGS_P (from))
6768 return decl_debug_args_lookup (from);
6769 if (debug_args_for_decl == NULL)
6770 debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64);
6771 h = ggc_alloc<tree_vec_map> ();
6772 h->base.from = from;
6773 h->to = NULL;
6774 loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT);
6775 *loc = h;
6776 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6777 return &h->to;
6780 /* Hashing of types so that we don't make duplicates.
6781 The entry point is `type_hash_canon'. */
6783 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
6784 with types in the TREE_VALUE slots), by adding the hash codes
6785 of the individual types. */
6787 static void
6788 type_hash_list (const_tree list, inchash::hash &hstate)
6790 const_tree tail;
6792 for (tail = list; tail; tail = TREE_CHAIN (tail))
6793 if (TREE_VALUE (tail) != error_mark_node)
6794 hstate.add_object (TYPE_HASH (TREE_VALUE (tail)));
6797 /* These are the Hashtable callback functions. */
6799 /* Returns true iff the types are equivalent. */
6801 bool
6802 type_cache_hasher::equal (type_hash *a, type_hash *b)
6804 /* First test the things that are the same for all types. */
6805 if (a->hash != b->hash
6806 || TREE_CODE (a->type) != TREE_CODE (b->type)
6807 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
6808 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
6809 TYPE_ATTRIBUTES (b->type))
6810 || (TREE_CODE (a->type) != COMPLEX_TYPE
6811 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
6812 return 0;
6814 /* Be careful about comparing arrays before and after the element type
6815 has been completed; don't compare TYPE_ALIGN unless both types are
6816 complete. */
6817 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
6818 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
6819 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
6820 return 0;
6822 switch (TREE_CODE (a->type))
6824 case VOID_TYPE:
6825 case COMPLEX_TYPE:
6826 case POINTER_TYPE:
6827 case REFERENCE_TYPE:
6828 case NULLPTR_TYPE:
6829 return 1;
6831 case VECTOR_TYPE:
6832 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
6834 case ENUMERAL_TYPE:
6835 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
6836 && !(TYPE_VALUES (a->type)
6837 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
6838 && TYPE_VALUES (b->type)
6839 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
6840 && type_list_equal (TYPE_VALUES (a->type),
6841 TYPE_VALUES (b->type))))
6842 return 0;
6844 /* ... fall through ... */
6846 case INTEGER_TYPE:
6847 case REAL_TYPE:
6848 case BOOLEAN_TYPE:
6849 if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type))
6850 return false;
6851 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
6852 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
6853 TYPE_MAX_VALUE (b->type)))
6854 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
6855 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
6856 TYPE_MIN_VALUE (b->type))));
6858 case FIXED_POINT_TYPE:
6859 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
6861 case OFFSET_TYPE:
6862 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
6864 case METHOD_TYPE:
6865 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
6866 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6867 || (TYPE_ARG_TYPES (a->type)
6868 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6869 && TYPE_ARG_TYPES (b->type)
6870 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6871 && type_list_equal (TYPE_ARG_TYPES (a->type),
6872 TYPE_ARG_TYPES (b->type)))))
6873 break;
6874 return 0;
6875 case ARRAY_TYPE:
6876 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
6878 case RECORD_TYPE:
6879 case UNION_TYPE:
6880 case QUAL_UNION_TYPE:
6881 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
6882 || (TYPE_FIELDS (a->type)
6883 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
6884 && TYPE_FIELDS (b->type)
6885 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
6886 && type_list_equal (TYPE_FIELDS (a->type),
6887 TYPE_FIELDS (b->type))));
6889 case FUNCTION_TYPE:
6890 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6891 || (TYPE_ARG_TYPES (a->type)
6892 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6893 && TYPE_ARG_TYPES (b->type)
6894 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6895 && type_list_equal (TYPE_ARG_TYPES (a->type),
6896 TYPE_ARG_TYPES (b->type))))
6897 break;
6898 return 0;
6900 default:
6901 return 0;
6904 if (lang_hooks.types.type_hash_eq != NULL)
6905 return lang_hooks.types.type_hash_eq (a->type, b->type);
6907 return 1;
6910 /* Given TYPE, and HASHCODE its hash code, return the canonical
6911 object for an identical type if one already exists.
6912 Otherwise, return TYPE, and record it as the canonical object.
6914 To use this function, first create a type of the sort you want.
6915 Then compute its hash code from the fields of the type that
6916 make it different from other similar types.
6917 Then call this function and use the value. */
6919 tree
6920 type_hash_canon (unsigned int hashcode, tree type)
6922 type_hash in;
6923 type_hash **loc;
6925 /* The hash table only contains main variants, so ensure that's what we're
6926 being passed. */
6927 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
6929 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
6930 must call that routine before comparing TYPE_ALIGNs. */
6931 layout_type (type);
6933 in.hash = hashcode;
6934 in.type = type;
6936 loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT);
6937 if (*loc)
6939 tree t1 = ((type_hash *) *loc)->type;
6940 gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
6941 if (GATHER_STATISTICS)
6943 tree_code_counts[(int) TREE_CODE (type)]--;
6944 tree_node_counts[(int) t_kind]--;
6945 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type_non_common);
6947 return t1;
6949 else
6951 struct type_hash *h;
6953 h = ggc_alloc<type_hash> ();
6954 h->hash = hashcode;
6955 h->type = type;
6956 *loc = h;
6958 return type;
6962 static void
6963 print_type_hash_statistics (void)
6965 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
6966 (long) type_hash_table->size (),
6967 (long) type_hash_table->elements (),
6968 type_hash_table->collisions ());
6971 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
6972 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
6973 by adding the hash codes of the individual attributes. */
6975 static void
6976 attribute_hash_list (const_tree list, inchash::hash &hstate)
6978 const_tree tail;
6980 for (tail = list; tail; tail = TREE_CHAIN (tail))
6981 /* ??? Do we want to add in TREE_VALUE too? */
6982 hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (tail)));
6985 /* Given two lists of attributes, return true if list l2 is
6986 equivalent to l1. */
6989 attribute_list_equal (const_tree l1, const_tree l2)
6991 if (l1 == l2)
6992 return 1;
6994 return attribute_list_contained (l1, l2)
6995 && attribute_list_contained (l2, l1);
6998 /* Given two lists of attributes, return true if list L2 is
6999 completely contained within L1. */
7000 /* ??? This would be faster if attribute names were stored in a canonicalized
7001 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
7002 must be used to show these elements are equivalent (which they are). */
7003 /* ??? It's not clear that attributes with arguments will always be handled
7004 correctly. */
7007 attribute_list_contained (const_tree l1, const_tree l2)
7009 const_tree t1, t2;
7011 /* First check the obvious, maybe the lists are identical. */
7012 if (l1 == l2)
7013 return 1;
7015 /* Maybe the lists are similar. */
7016 for (t1 = l1, t2 = l2;
7017 t1 != 0 && t2 != 0
7018 && get_attribute_name (t1) == get_attribute_name (t2)
7019 && TREE_VALUE (t1) == TREE_VALUE (t2);
7020 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7023 /* Maybe the lists are equal. */
7024 if (t1 == 0 && t2 == 0)
7025 return 1;
7027 for (; t2 != 0; t2 = TREE_CHAIN (t2))
7029 const_tree attr;
7030 /* This CONST_CAST is okay because lookup_attribute does not
7031 modify its argument and the return value is assigned to a
7032 const_tree. */
7033 for (attr = lookup_ident_attribute (get_attribute_name (t2),
7034 CONST_CAST_TREE (l1));
7035 attr != NULL_TREE && !attribute_value_equal (t2, attr);
7036 attr = lookup_ident_attribute (get_attribute_name (t2),
7037 TREE_CHAIN (attr)))
7040 if (attr == NULL_TREE)
7041 return 0;
7044 return 1;
7047 /* Given two lists of types
7048 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
7049 return 1 if the lists contain the same types in the same order.
7050 Also, the TREE_PURPOSEs must match. */
7053 type_list_equal (const_tree l1, const_tree l2)
7055 const_tree t1, t2;
7057 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
7058 if (TREE_VALUE (t1) != TREE_VALUE (t2)
7059 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
7060 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
7061 && (TREE_TYPE (TREE_PURPOSE (t1))
7062 == TREE_TYPE (TREE_PURPOSE (t2))))))
7063 return 0;
7065 return t1 == t2;
7068 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
7069 given by TYPE. If the argument list accepts variable arguments,
7070 then this function counts only the ordinary arguments. */
7073 type_num_arguments (const_tree type)
7075 int i = 0;
7076 tree t;
7078 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
7079 /* If the function does not take a variable number of arguments,
7080 the last element in the list will have type `void'. */
7081 if (VOID_TYPE_P (TREE_VALUE (t)))
7082 break;
7083 else
7084 ++i;
7086 return i;
7089 /* Nonzero if integer constants T1 and T2
7090 represent the same constant value. */
7093 tree_int_cst_equal (const_tree t1, const_tree t2)
7095 if (t1 == t2)
7096 return 1;
7098 if (t1 == 0 || t2 == 0)
7099 return 0;
7101 if (TREE_CODE (t1) == INTEGER_CST
7102 && TREE_CODE (t2) == INTEGER_CST
7103 && wi::to_widest (t1) == wi::to_widest (t2))
7104 return 1;
7106 return 0;
7109 /* Return true if T is an INTEGER_CST whose numerical value (extended
7110 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */
7112 bool
7113 tree_fits_shwi_p (const_tree t)
7115 return (t != NULL_TREE
7116 && TREE_CODE (t) == INTEGER_CST
7117 && wi::fits_shwi_p (wi::to_widest (t)));
7120 /* Return true if T is an INTEGER_CST whose numerical value (extended
7121 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */
7123 bool
7124 tree_fits_uhwi_p (const_tree t)
7126 return (t != NULL_TREE
7127 && TREE_CODE (t) == INTEGER_CST
7128 && wi::fits_uhwi_p (wi::to_widest (t)));
7131 /* T is an INTEGER_CST whose numerical value (extended according to
7132 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that
7133 HOST_WIDE_INT. */
7135 HOST_WIDE_INT
7136 tree_to_shwi (const_tree t)
7138 gcc_assert (tree_fits_shwi_p (t));
7139 return TREE_INT_CST_LOW (t);
7142 /* T is an INTEGER_CST whose numerical value (extended according to
7143 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that
7144 HOST_WIDE_INT. */
7146 unsigned HOST_WIDE_INT
7147 tree_to_uhwi (const_tree t)
7149 gcc_assert (tree_fits_uhwi_p (t));
7150 return TREE_INT_CST_LOW (t);
7153 /* Return the most significant (sign) bit of T. */
7156 tree_int_cst_sign_bit (const_tree t)
7158 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7160 return wi::extract_uhwi (t, bitno, 1);
7163 /* Return an indication of the sign of the integer constant T.
7164 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7165 Note that -1 will never be returned if T's type is unsigned. */
7168 tree_int_cst_sgn (const_tree t)
7170 if (wi::eq_p (t, 0))
7171 return 0;
7172 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7173 return 1;
7174 else if (wi::neg_p (t))
7175 return -1;
7176 else
7177 return 1;
7180 /* Return the minimum number of bits needed to represent VALUE in a
7181 signed or unsigned type, UNSIGNEDP says which. */
7183 unsigned int
7184 tree_int_cst_min_precision (tree value, signop sgn)
7186 /* If the value is negative, compute its negative minus 1. The latter
7187 adjustment is because the absolute value of the largest negative value
7188 is one larger than the largest positive value. This is equivalent to
7189 a bit-wise negation, so use that operation instead. */
7191 if (tree_int_cst_sgn (value) < 0)
7192 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7194 /* Return the number of bits needed, taking into account the fact
7195 that we need one more bit for a signed than unsigned type.
7196 If value is 0 or -1, the minimum precision is 1 no matter
7197 whether unsignedp is true or false. */
7199 if (integer_zerop (value))
7200 return 1;
7201 else
7202 return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ;
7205 /* Return truthvalue of whether T1 is the same tree structure as T2.
7206 Return 1 if they are the same.
7207 Return 0 if they are understandably different.
7208 Return -1 if either contains tree structure not understood by
7209 this function. */
7212 simple_cst_equal (const_tree t1, const_tree t2)
7214 enum tree_code code1, code2;
7215 int cmp;
7216 int i;
7218 if (t1 == t2)
7219 return 1;
7220 if (t1 == 0 || t2 == 0)
7221 return 0;
7223 code1 = TREE_CODE (t1);
7224 code2 = TREE_CODE (t2);
7226 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7228 if (CONVERT_EXPR_CODE_P (code2)
7229 || code2 == NON_LVALUE_EXPR)
7230 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7231 else
7232 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7235 else if (CONVERT_EXPR_CODE_P (code2)
7236 || code2 == NON_LVALUE_EXPR)
7237 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7239 if (code1 != code2)
7240 return 0;
7242 switch (code1)
7244 case INTEGER_CST:
7245 return wi::to_widest (t1) == wi::to_widest (t2);
7247 case REAL_CST:
7248 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
7250 case FIXED_CST:
7251 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7253 case STRING_CST:
7254 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7255 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7256 TREE_STRING_LENGTH (t1)));
7258 case CONSTRUCTOR:
7260 unsigned HOST_WIDE_INT idx;
7261 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7262 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7264 if (vec_safe_length (v1) != vec_safe_length (v2))
7265 return false;
7267 for (idx = 0; idx < vec_safe_length (v1); ++idx)
7268 /* ??? Should we handle also fields here? */
7269 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7270 return false;
7271 return true;
7274 case SAVE_EXPR:
7275 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7277 case CALL_EXPR:
7278 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7279 if (cmp <= 0)
7280 return cmp;
7281 if (call_expr_nargs (t1) != call_expr_nargs (t2))
7282 return 0;
7284 const_tree arg1, arg2;
7285 const_call_expr_arg_iterator iter1, iter2;
7286 for (arg1 = first_const_call_expr_arg (t1, &iter1),
7287 arg2 = first_const_call_expr_arg (t2, &iter2);
7288 arg1 && arg2;
7289 arg1 = next_const_call_expr_arg (&iter1),
7290 arg2 = next_const_call_expr_arg (&iter2))
7292 cmp = simple_cst_equal (arg1, arg2);
7293 if (cmp <= 0)
7294 return cmp;
7296 return arg1 == arg2;
7299 case TARGET_EXPR:
7300 /* Special case: if either target is an unallocated VAR_DECL,
7301 it means that it's going to be unified with whatever the
7302 TARGET_EXPR is really supposed to initialize, so treat it
7303 as being equivalent to anything. */
7304 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7305 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7306 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7307 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7308 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7309 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7310 cmp = 1;
7311 else
7312 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7314 if (cmp <= 0)
7315 return cmp;
7317 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7319 case WITH_CLEANUP_EXPR:
7320 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7321 if (cmp <= 0)
7322 return cmp;
7324 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7326 case COMPONENT_REF:
7327 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7328 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7330 return 0;
7332 case VAR_DECL:
7333 case PARM_DECL:
7334 case CONST_DECL:
7335 case FUNCTION_DECL:
7336 return 0;
7338 default:
7339 break;
7342 /* This general rule works for most tree codes. All exceptions should be
7343 handled above. If this is a language-specific tree code, we can't
7344 trust what might be in the operand, so say we don't know
7345 the situation. */
7346 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7347 return -1;
7349 switch (TREE_CODE_CLASS (code1))
7351 case tcc_unary:
7352 case tcc_binary:
7353 case tcc_comparison:
7354 case tcc_expression:
7355 case tcc_reference:
7356 case tcc_statement:
7357 cmp = 1;
7358 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7360 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7361 if (cmp <= 0)
7362 return cmp;
7365 return cmp;
7367 default:
7368 return -1;
7372 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7373 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7374 than U, respectively. */
7377 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7379 if (tree_int_cst_sgn (t) < 0)
7380 return -1;
7381 else if (!tree_fits_uhwi_p (t))
7382 return 1;
7383 else if (TREE_INT_CST_LOW (t) == u)
7384 return 0;
7385 else if (TREE_INT_CST_LOW (t) < u)
7386 return -1;
7387 else
7388 return 1;
7391 /* Return true if SIZE represents a constant size that is in bounds of
7392 what the middle-end and the backend accepts (covering not more than
7393 half of the address-space). */
7395 bool
7396 valid_constant_size_p (const_tree size)
7398 if (! tree_fits_uhwi_p (size)
7399 || TREE_OVERFLOW (size)
7400 || tree_int_cst_sign_bit (size) != 0)
7401 return false;
7402 return true;
7405 /* Return the precision of the type, or for a complex or vector type the
7406 precision of the type of its elements. */
7408 unsigned int
7409 element_precision (const_tree type)
7411 enum tree_code code = TREE_CODE (type);
7412 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7413 type = TREE_TYPE (type);
7415 return TYPE_PRECISION (type);
7418 /* Return true if CODE represents an associative tree code. Otherwise
7419 return false. */
7420 bool
7421 associative_tree_code (enum tree_code code)
7423 switch (code)
7425 case BIT_IOR_EXPR:
7426 case BIT_AND_EXPR:
7427 case BIT_XOR_EXPR:
7428 case PLUS_EXPR:
7429 case MULT_EXPR:
7430 case MIN_EXPR:
7431 case MAX_EXPR:
7432 return true;
7434 default:
7435 break;
7437 return false;
7440 /* Return true if CODE represents a commutative tree code. Otherwise
7441 return false. */
7442 bool
7443 commutative_tree_code (enum tree_code code)
7445 switch (code)
7447 case PLUS_EXPR:
7448 case MULT_EXPR:
7449 case MULT_HIGHPART_EXPR:
7450 case MIN_EXPR:
7451 case MAX_EXPR:
7452 case BIT_IOR_EXPR:
7453 case BIT_XOR_EXPR:
7454 case BIT_AND_EXPR:
7455 case NE_EXPR:
7456 case EQ_EXPR:
7457 case UNORDERED_EXPR:
7458 case ORDERED_EXPR:
7459 case UNEQ_EXPR:
7460 case LTGT_EXPR:
7461 case TRUTH_AND_EXPR:
7462 case TRUTH_XOR_EXPR:
7463 case TRUTH_OR_EXPR:
7464 case WIDEN_MULT_EXPR:
7465 case VEC_WIDEN_MULT_HI_EXPR:
7466 case VEC_WIDEN_MULT_LO_EXPR:
7467 case VEC_WIDEN_MULT_EVEN_EXPR:
7468 case VEC_WIDEN_MULT_ODD_EXPR:
7469 return true;
7471 default:
7472 break;
7474 return false;
7477 /* Return true if CODE represents a ternary tree code for which the
7478 first two operands are commutative. Otherwise return false. */
7479 bool
7480 commutative_ternary_tree_code (enum tree_code code)
7482 switch (code)
7484 case WIDEN_MULT_PLUS_EXPR:
7485 case WIDEN_MULT_MINUS_EXPR:
7486 case DOT_PROD_EXPR:
7487 case FMA_EXPR:
7488 return true;
7490 default:
7491 break;
7493 return false;
7496 namespace inchash
7499 /* Generate a hash value for an expression. This can be used iteratively
7500 by passing a previous result as the HSTATE argument.
7502 This function is intended to produce the same hash for expressions which
7503 would compare equal using operand_equal_p. */
7504 void
7505 add_expr (const_tree t, inchash::hash &hstate)
7507 int i;
7508 enum tree_code code;
7509 enum tree_code_class tclass;
7511 if (t == NULL_TREE)
7513 hstate.merge_hash (0);
7514 return;
7517 code = TREE_CODE (t);
7519 switch (code)
7521 /* Alas, constants aren't shared, so we can't rely on pointer
7522 identity. */
7523 case VOID_CST:
7524 hstate.merge_hash (0);
7525 return;
7526 case INTEGER_CST:
7527 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++)
7528 hstate.add_wide_int (TREE_INT_CST_ELT (t, i));
7529 return;
7530 case REAL_CST:
7532 unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
7533 hstate.merge_hash (val2);
7534 return;
7536 case FIXED_CST:
7538 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7539 hstate.merge_hash (val2);
7540 return;
7542 case STRING_CST:
7543 hstate.add ((const void *) TREE_STRING_POINTER (t), TREE_STRING_LENGTH (t));
7544 return;
7545 case COMPLEX_CST:
7546 inchash::add_expr (TREE_REALPART (t), hstate);
7547 inchash::add_expr (TREE_IMAGPART (t), hstate);
7548 return;
7549 case VECTOR_CST:
7551 unsigned i;
7552 for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7553 inchash::add_expr (VECTOR_CST_ELT (t, i), hstate);
7554 return;
7556 case SSA_NAME:
7557 /* We can just compare by pointer. */
7558 hstate.add_wide_int (SSA_NAME_VERSION (t));
7559 return;
7560 case PLACEHOLDER_EXPR:
7561 /* The node itself doesn't matter. */
7562 return;
7563 case TREE_LIST:
7564 /* A list of expressions, for a CALL_EXPR or as the elements of a
7565 VECTOR_CST. */
7566 for (; t; t = TREE_CHAIN (t))
7567 inchash::add_expr (TREE_VALUE (t), hstate);
7568 return;
7569 case CONSTRUCTOR:
7571 unsigned HOST_WIDE_INT idx;
7572 tree field, value;
7573 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7575 inchash::add_expr (field, hstate);
7576 inchash::add_expr (value, hstate);
7578 return;
7580 case FUNCTION_DECL:
7581 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7582 Otherwise nodes that compare equal according to operand_equal_p might
7583 get different hash codes. However, don't do this for machine specific
7584 or front end builtins, since the function code is overloaded in those
7585 cases. */
7586 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7587 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7589 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7590 code = TREE_CODE (t);
7592 /* FALL THROUGH */
7593 default:
7594 tclass = TREE_CODE_CLASS (code);
7596 if (tclass == tcc_declaration)
7598 /* DECL's have a unique ID */
7599 hstate.add_wide_int (DECL_UID (t));
7601 else
7603 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
7605 hstate.add_object (code);
7607 /* Don't hash the type, that can lead to having nodes which
7608 compare equal according to operand_equal_p, but which
7609 have different hash codes. */
7610 if (CONVERT_EXPR_CODE_P (code)
7611 || code == NON_LVALUE_EXPR)
7613 /* Make sure to include signness in the hash computation. */
7614 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t)));
7615 inchash::add_expr (TREE_OPERAND (t, 0), hstate);
7618 else if (commutative_tree_code (code))
7620 /* It's a commutative expression. We want to hash it the same
7621 however it appears. We do this by first hashing both operands
7622 and then rehashing based on the order of their independent
7623 hashes. */
7624 inchash::hash one, two;
7625 inchash::add_expr (TREE_OPERAND (t, 0), one);
7626 inchash::add_expr (TREE_OPERAND (t, 1), two);
7627 hstate.add_commutative (one, two);
7629 else
7630 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
7631 inchash::add_expr (TREE_OPERAND (t, i), hstate);
7633 return;
7639 /* Constructors for pointer, array and function types.
7640 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7641 constructed by language-dependent code, not here.) */
7643 /* Construct, lay out and return the type of pointers to TO_TYPE with
7644 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
7645 reference all of memory. If such a type has already been
7646 constructed, reuse it. */
7648 tree
7649 build_pointer_type_for_mode (tree to_type, machine_mode mode,
7650 bool can_alias_all)
7652 tree t;
7654 if (to_type == error_mark_node)
7655 return error_mark_node;
7657 /* If the pointed-to type has the may_alias attribute set, force
7658 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7659 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7660 can_alias_all = true;
7662 /* In some cases, languages will have things that aren't a POINTER_TYPE
7663 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7664 In that case, return that type without regard to the rest of our
7665 operands.
7667 ??? This is a kludge, but consistent with the way this function has
7668 always operated and there doesn't seem to be a good way to avoid this
7669 at the moment. */
7670 if (TYPE_POINTER_TO (to_type) != 0
7671 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7672 return TYPE_POINTER_TO (to_type);
7674 /* First, if we already have a type for pointers to TO_TYPE and it's
7675 the proper mode, use it. */
7676 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7677 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7678 return t;
7680 t = make_node (POINTER_TYPE);
7682 TREE_TYPE (t) = to_type;
7683 SET_TYPE_MODE (t, mode);
7684 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7685 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7686 TYPE_POINTER_TO (to_type) = t;
7688 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7689 SET_TYPE_STRUCTURAL_EQUALITY (t);
7690 else if (TYPE_CANONICAL (to_type) != to_type)
7691 TYPE_CANONICAL (t)
7692 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7693 mode, can_alias_all);
7695 /* Lay out the type. This function has many callers that are concerned
7696 with expression-construction, and this simplifies them all. */
7697 layout_type (t);
7699 return t;
7702 /* By default build pointers in ptr_mode. */
7704 tree
7705 build_pointer_type (tree to_type)
7707 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7708 : TYPE_ADDR_SPACE (to_type);
7709 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7710 return build_pointer_type_for_mode (to_type, pointer_mode, false);
7713 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
7715 tree
7716 build_reference_type_for_mode (tree to_type, machine_mode mode,
7717 bool can_alias_all)
7719 tree t;
7721 if (to_type == error_mark_node)
7722 return error_mark_node;
7724 /* If the pointed-to type has the may_alias attribute set, force
7725 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7726 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7727 can_alias_all = true;
7729 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7730 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7731 In that case, return that type without regard to the rest of our
7732 operands.
7734 ??? This is a kludge, but consistent with the way this function has
7735 always operated and there doesn't seem to be a good way to avoid this
7736 at the moment. */
7737 if (TYPE_REFERENCE_TO (to_type) != 0
7738 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
7739 return TYPE_REFERENCE_TO (to_type);
7741 /* First, if we already have a type for pointers to TO_TYPE and it's
7742 the proper mode, use it. */
7743 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
7744 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7745 return t;
7747 t = make_node (REFERENCE_TYPE);
7749 TREE_TYPE (t) = to_type;
7750 SET_TYPE_MODE (t, mode);
7751 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7752 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
7753 TYPE_REFERENCE_TO (to_type) = t;
7755 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7756 SET_TYPE_STRUCTURAL_EQUALITY (t);
7757 else if (TYPE_CANONICAL (to_type) != to_type)
7758 TYPE_CANONICAL (t)
7759 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
7760 mode, can_alias_all);
7762 layout_type (t);
7764 return t;
7768 /* Build the node for the type of references-to-TO_TYPE by default
7769 in ptr_mode. */
7771 tree
7772 build_reference_type (tree to_type)
7774 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7775 : TYPE_ADDR_SPACE (to_type);
7776 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7777 return build_reference_type_for_mode (to_type, pointer_mode, false);
7780 #define MAX_INT_CACHED_PREC \
7781 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
7782 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
7784 /* Builds a signed or unsigned integer type of precision PRECISION.
7785 Used for C bitfields whose precision does not match that of
7786 built-in target types. */
7787 tree
7788 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
7789 int unsignedp)
7791 tree itype, ret;
7793 if (unsignedp)
7794 unsignedp = MAX_INT_CACHED_PREC + 1;
7796 if (precision <= MAX_INT_CACHED_PREC)
7798 itype = nonstandard_integer_type_cache[precision + unsignedp];
7799 if (itype)
7800 return itype;
7803 itype = make_node (INTEGER_TYPE);
7804 TYPE_PRECISION (itype) = precision;
7806 if (unsignedp)
7807 fixup_unsigned_type (itype);
7808 else
7809 fixup_signed_type (itype);
7811 ret = itype;
7812 if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
7813 ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
7814 if (precision <= MAX_INT_CACHED_PREC)
7815 nonstandard_integer_type_cache[precision + unsignedp] = ret;
7817 return ret;
7820 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
7821 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
7822 is true, reuse such a type that has already been constructed. */
7824 static tree
7825 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
7827 tree itype = make_node (INTEGER_TYPE);
7828 inchash::hash hstate;
7830 TREE_TYPE (itype) = type;
7832 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
7833 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
7835 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
7836 SET_TYPE_MODE (itype, TYPE_MODE (type));
7837 TYPE_SIZE (itype) = TYPE_SIZE (type);
7838 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
7839 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
7840 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
7842 if (!shared)
7843 return itype;
7845 if ((TYPE_MIN_VALUE (itype)
7846 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
7847 || (TYPE_MAX_VALUE (itype)
7848 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
7850 /* Since we cannot reliably merge this type, we need to compare it using
7851 structural equality checks. */
7852 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7853 return itype;
7856 inchash::add_expr (TYPE_MIN_VALUE (itype), hstate);
7857 inchash::add_expr (TYPE_MAX_VALUE (itype), hstate);
7858 hstate.merge_hash (TYPE_HASH (type));
7859 itype = type_hash_canon (hstate.end (), itype);
7861 return itype;
7864 /* Wrapper around build_range_type_1 with SHARED set to true. */
7866 tree
7867 build_range_type (tree type, tree lowval, tree highval)
7869 return build_range_type_1 (type, lowval, highval, true);
7872 /* Wrapper around build_range_type_1 with SHARED set to false. */
7874 tree
7875 build_nonshared_range_type (tree type, tree lowval, tree highval)
7877 return build_range_type_1 (type, lowval, highval, false);
7880 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
7881 MAXVAL should be the maximum value in the domain
7882 (one less than the length of the array).
7884 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
7885 We don't enforce this limit, that is up to caller (e.g. language front end).
7886 The limit exists because the result is a signed type and we don't handle
7887 sizes that use more than one HOST_WIDE_INT. */
7889 tree
7890 build_index_type (tree maxval)
7892 return build_range_type (sizetype, size_zero_node, maxval);
7895 /* Return true if the debug information for TYPE, a subtype, should be emitted
7896 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
7897 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
7898 debug info and doesn't reflect the source code. */
7900 bool
7901 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
7903 tree base_type = TREE_TYPE (type), low, high;
7905 /* Subrange types have a base type which is an integral type. */
7906 if (!INTEGRAL_TYPE_P (base_type))
7907 return false;
7909 /* Get the real bounds of the subtype. */
7910 if (lang_hooks.types.get_subrange_bounds)
7911 lang_hooks.types.get_subrange_bounds (type, &low, &high);
7912 else
7914 low = TYPE_MIN_VALUE (type);
7915 high = TYPE_MAX_VALUE (type);
7918 /* If the type and its base type have the same representation and the same
7919 name, then the type is not a subrange but a copy of the base type. */
7920 if ((TREE_CODE (base_type) == INTEGER_TYPE
7921 || TREE_CODE (base_type) == BOOLEAN_TYPE)
7922 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
7923 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
7924 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type))
7925 && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type))
7926 return false;
7928 if (lowval)
7929 *lowval = low;
7930 if (highval)
7931 *highval = high;
7932 return true;
7935 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
7936 and number of elements specified by the range of values of INDEX_TYPE.
7937 If SHARED is true, reuse such a type that has already been constructed. */
7939 static tree
7940 build_array_type_1 (tree elt_type, tree index_type, bool shared)
7942 tree t;
7944 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
7946 error ("arrays of functions are not meaningful");
7947 elt_type = integer_type_node;
7950 t = make_node (ARRAY_TYPE);
7951 TREE_TYPE (t) = elt_type;
7952 TYPE_DOMAIN (t) = index_type;
7953 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
7954 layout_type (t);
7956 /* If the element type is incomplete at this point we get marked for
7957 structural equality. Do not record these types in the canonical
7958 type hashtable. */
7959 if (TYPE_STRUCTURAL_EQUALITY_P (t))
7960 return t;
7962 if (shared)
7964 inchash::hash hstate;
7965 hstate.add_object (TYPE_HASH (elt_type));
7966 if (index_type)
7967 hstate.add_object (TYPE_HASH (index_type));
7968 t = type_hash_canon (hstate.end (), t);
7971 if (TYPE_CANONICAL (t) == t)
7973 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
7974 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
7975 SET_TYPE_STRUCTURAL_EQUALITY (t);
7976 else if (TYPE_CANONICAL (elt_type) != elt_type
7977 || (index_type && TYPE_CANONICAL (index_type) != index_type))
7978 TYPE_CANONICAL (t)
7979 = build_array_type_1 (TYPE_CANONICAL (elt_type),
7980 index_type
7981 ? TYPE_CANONICAL (index_type) : NULL_TREE,
7982 shared);
7985 return t;
7988 /* Wrapper around build_array_type_1 with SHARED set to true. */
7990 tree
7991 build_array_type (tree elt_type, tree index_type)
7993 return build_array_type_1 (elt_type, index_type, true);
7996 /* Wrapper around build_array_type_1 with SHARED set to false. */
7998 tree
7999 build_nonshared_array_type (tree elt_type, tree index_type)
8001 return build_array_type_1 (elt_type, index_type, false);
8004 /* Return a representation of ELT_TYPE[NELTS], using indices of type
8005 sizetype. */
8007 tree
8008 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
8010 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
8013 /* Recursively examines the array elements of TYPE, until a non-array
8014 element type is found. */
8016 tree
8017 strip_array_types (tree type)
8019 while (TREE_CODE (type) == ARRAY_TYPE)
8020 type = TREE_TYPE (type);
8022 return type;
8025 /* Computes the canonical argument types from the argument type list
8026 ARGTYPES.
8028 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
8029 on entry to this function, or if any of the ARGTYPES are
8030 structural.
8032 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
8033 true on entry to this function, or if any of the ARGTYPES are
8034 non-canonical.
8036 Returns a canonical argument list, which may be ARGTYPES when the
8037 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
8038 true) or would not differ from ARGTYPES. */
8040 static tree
8041 maybe_canonicalize_argtypes (tree argtypes,
8042 bool *any_structural_p,
8043 bool *any_noncanonical_p)
8045 tree arg;
8046 bool any_noncanonical_argtypes_p = false;
8048 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8050 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8051 /* Fail gracefully by stating that the type is structural. */
8052 *any_structural_p = true;
8053 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8054 *any_structural_p = true;
8055 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8056 || TREE_PURPOSE (arg))
8057 /* If the argument has a default argument, we consider it
8058 non-canonical even though the type itself is canonical.
8059 That way, different variants of function and method types
8060 with default arguments will all point to the variant with
8061 no defaults as their canonical type. */
8062 any_noncanonical_argtypes_p = true;
8065 if (*any_structural_p)
8066 return argtypes;
8068 if (any_noncanonical_argtypes_p)
8070 /* Build the canonical list of argument types. */
8071 tree canon_argtypes = NULL_TREE;
8072 bool is_void = false;
8074 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8076 if (arg == void_list_node)
8077 is_void = true;
8078 else
8079 canon_argtypes = tree_cons (NULL_TREE,
8080 TYPE_CANONICAL (TREE_VALUE (arg)),
8081 canon_argtypes);
8084 canon_argtypes = nreverse (canon_argtypes);
8085 if (is_void)
8086 canon_argtypes = chainon (canon_argtypes, void_list_node);
8088 /* There is a non-canonical type. */
8089 *any_noncanonical_p = true;
8090 return canon_argtypes;
8093 /* The canonical argument types are the same as ARGTYPES. */
8094 return argtypes;
8097 /* Construct, lay out and return
8098 the type of functions returning type VALUE_TYPE
8099 given arguments of types ARG_TYPES.
8100 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8101 are data type nodes for the arguments of the function.
8102 If such a type has already been constructed, reuse it. */
8104 tree
8105 build_function_type (tree value_type, tree arg_types)
8107 tree t;
8108 inchash::hash hstate;
8109 bool any_structural_p, any_noncanonical_p;
8110 tree canon_argtypes;
8112 if (TREE_CODE (value_type) == FUNCTION_TYPE)
8114 error ("function return type cannot be function");
8115 value_type = integer_type_node;
8118 /* Make a node of the sort we want. */
8119 t = make_node (FUNCTION_TYPE);
8120 TREE_TYPE (t) = value_type;
8121 TYPE_ARG_TYPES (t) = arg_types;
8123 /* If we already have such a type, use the old one. */
8124 hstate.add_object (TYPE_HASH (value_type));
8125 type_hash_list (arg_types, hstate);
8126 t = type_hash_canon (hstate.end (), t);
8128 /* Set up the canonical type. */
8129 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8130 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8131 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8132 &any_structural_p,
8133 &any_noncanonical_p);
8134 if (any_structural_p)
8135 SET_TYPE_STRUCTURAL_EQUALITY (t);
8136 else if (any_noncanonical_p)
8137 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8138 canon_argtypes);
8140 if (!COMPLETE_TYPE_P (t))
8141 layout_type (t);
8142 return t;
8145 /* Build a function type. The RETURN_TYPE is the type returned by the
8146 function. If VAARGS is set, no void_type_node is appended to the
8147 the list. ARGP must be always be terminated be a NULL_TREE. */
8149 static tree
8150 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8152 tree t, args, last;
8154 t = va_arg (argp, tree);
8155 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8156 args = tree_cons (NULL_TREE, t, args);
8158 if (vaargs)
8160 last = args;
8161 if (args != NULL_TREE)
8162 args = nreverse (args);
8163 gcc_assert (last != void_list_node);
8165 else if (args == NULL_TREE)
8166 args = void_list_node;
8167 else
8169 last = args;
8170 args = nreverse (args);
8171 TREE_CHAIN (last) = void_list_node;
8173 args = build_function_type (return_type, args);
8175 return args;
8178 /* Build a function type. The RETURN_TYPE is the type returned by the
8179 function. If additional arguments are provided, they are
8180 additional argument types. The list of argument types must always
8181 be terminated by NULL_TREE. */
8183 tree
8184 build_function_type_list (tree return_type, ...)
8186 tree args;
8187 va_list p;
8189 va_start (p, return_type);
8190 args = build_function_type_list_1 (false, return_type, p);
8191 va_end (p);
8192 return args;
8195 /* Build a variable argument function type. The RETURN_TYPE is the
8196 type returned by the function. If additional arguments are provided,
8197 they are additional argument types. The list of argument types must
8198 always be terminated by NULL_TREE. */
8200 tree
8201 build_varargs_function_type_list (tree return_type, ...)
8203 tree args;
8204 va_list p;
8206 va_start (p, return_type);
8207 args = build_function_type_list_1 (true, return_type, p);
8208 va_end (p);
8210 return args;
8213 /* Build a function type. RETURN_TYPE is the type returned by the
8214 function; VAARGS indicates whether the function takes varargs. The
8215 function takes N named arguments, the types of which are provided in
8216 ARG_TYPES. */
8218 static tree
8219 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8220 tree *arg_types)
8222 int i;
8223 tree t = vaargs ? NULL_TREE : void_list_node;
8225 for (i = n - 1; i >= 0; i--)
8226 t = tree_cons (NULL_TREE, arg_types[i], t);
8228 return build_function_type (return_type, t);
8231 /* Build a function type. RETURN_TYPE is the type returned by the
8232 function. The function takes N named arguments, the types of which
8233 are provided in ARG_TYPES. */
8235 tree
8236 build_function_type_array (tree return_type, int n, tree *arg_types)
8238 return build_function_type_array_1 (false, return_type, n, arg_types);
8241 /* Build a variable argument function type. RETURN_TYPE is the type
8242 returned by the function. The function takes N named arguments, the
8243 types of which are provided in ARG_TYPES. */
8245 tree
8246 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8248 return build_function_type_array_1 (true, return_type, n, arg_types);
8251 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
8252 and ARGTYPES (a TREE_LIST) are the return type and arguments types
8253 for the method. An implicit additional parameter (of type
8254 pointer-to-BASETYPE) is added to the ARGTYPES. */
8256 tree
8257 build_method_type_directly (tree basetype,
8258 tree rettype,
8259 tree argtypes)
8261 tree t;
8262 tree ptype;
8263 inchash::hash hstate;
8264 bool any_structural_p, any_noncanonical_p;
8265 tree canon_argtypes;
8267 /* Make a node of the sort we want. */
8268 t = make_node (METHOD_TYPE);
8270 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8271 TREE_TYPE (t) = rettype;
8272 ptype = build_pointer_type (basetype);
8274 /* The actual arglist for this function includes a "hidden" argument
8275 which is "this". Put it into the list of argument types. */
8276 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8277 TYPE_ARG_TYPES (t) = argtypes;
8279 /* If we already have such a type, use the old one. */
8280 hstate.add_object (TYPE_HASH (basetype));
8281 hstate.add_object (TYPE_HASH (rettype));
8282 type_hash_list (argtypes, hstate);
8283 t = type_hash_canon (hstate.end (), t);
8285 /* Set up the canonical type. */
8286 any_structural_p
8287 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8288 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8289 any_noncanonical_p
8290 = (TYPE_CANONICAL (basetype) != basetype
8291 || TYPE_CANONICAL (rettype) != rettype);
8292 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8293 &any_structural_p,
8294 &any_noncanonical_p);
8295 if (any_structural_p)
8296 SET_TYPE_STRUCTURAL_EQUALITY (t);
8297 else if (any_noncanonical_p)
8298 TYPE_CANONICAL (t)
8299 = build_method_type_directly (TYPE_CANONICAL (basetype),
8300 TYPE_CANONICAL (rettype),
8301 canon_argtypes);
8302 if (!COMPLETE_TYPE_P (t))
8303 layout_type (t);
8305 return t;
8308 /* Construct, lay out and return the type of methods belonging to class
8309 BASETYPE and whose arguments and values are described by TYPE.
8310 If that type exists already, reuse it.
8311 TYPE must be a FUNCTION_TYPE node. */
8313 tree
8314 build_method_type (tree basetype, tree type)
8316 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8318 return build_method_type_directly (basetype,
8319 TREE_TYPE (type),
8320 TYPE_ARG_TYPES (type));
8323 /* Construct, lay out and return the type of offsets to a value
8324 of type TYPE, within an object of type BASETYPE.
8325 If a suitable offset type exists already, reuse it. */
8327 tree
8328 build_offset_type (tree basetype, tree type)
8330 tree t;
8331 inchash::hash hstate;
8333 /* Make a node of the sort we want. */
8334 t = make_node (OFFSET_TYPE);
8336 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8337 TREE_TYPE (t) = type;
8339 /* If we already have such a type, use the old one. */
8340 hstate.add_object (TYPE_HASH (basetype));
8341 hstate.add_object (TYPE_HASH (type));
8342 t = type_hash_canon (hstate.end (), t);
8344 if (!COMPLETE_TYPE_P (t))
8345 layout_type (t);
8347 if (TYPE_CANONICAL (t) == t)
8349 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8350 || TYPE_STRUCTURAL_EQUALITY_P (type))
8351 SET_TYPE_STRUCTURAL_EQUALITY (t);
8352 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8353 || TYPE_CANONICAL (type) != type)
8354 TYPE_CANONICAL (t)
8355 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8356 TYPE_CANONICAL (type));
8359 return t;
8362 /* Create a complex type whose components are COMPONENT_TYPE. */
8364 tree
8365 build_complex_type (tree component_type)
8367 tree t;
8368 inchash::hash hstate;
8370 gcc_assert (INTEGRAL_TYPE_P (component_type)
8371 || SCALAR_FLOAT_TYPE_P (component_type)
8372 || FIXED_POINT_TYPE_P (component_type));
8374 /* Make a node of the sort we want. */
8375 t = make_node (COMPLEX_TYPE);
8377 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8379 /* If we already have such a type, use the old one. */
8380 hstate.add_object (TYPE_HASH (component_type));
8381 t = type_hash_canon (hstate.end (), t);
8383 if (!COMPLETE_TYPE_P (t))
8384 layout_type (t);
8386 if (TYPE_CANONICAL (t) == t)
8388 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8389 SET_TYPE_STRUCTURAL_EQUALITY (t);
8390 else if (TYPE_CANONICAL (component_type) != component_type)
8391 TYPE_CANONICAL (t)
8392 = build_complex_type (TYPE_CANONICAL (component_type));
8395 /* We need to create a name, since complex is a fundamental type. */
8396 if (! TYPE_NAME (t))
8398 const char *name;
8399 if (component_type == char_type_node)
8400 name = "complex char";
8401 else if (component_type == signed_char_type_node)
8402 name = "complex signed char";
8403 else if (component_type == unsigned_char_type_node)
8404 name = "complex unsigned char";
8405 else if (component_type == short_integer_type_node)
8406 name = "complex short int";
8407 else if (component_type == short_unsigned_type_node)
8408 name = "complex short unsigned int";
8409 else if (component_type == integer_type_node)
8410 name = "complex int";
8411 else if (component_type == unsigned_type_node)
8412 name = "complex unsigned int";
8413 else if (component_type == long_integer_type_node)
8414 name = "complex long int";
8415 else if (component_type == long_unsigned_type_node)
8416 name = "complex long unsigned int";
8417 else if (component_type == long_long_integer_type_node)
8418 name = "complex long long int";
8419 else if (component_type == long_long_unsigned_type_node)
8420 name = "complex long long unsigned int";
8421 else
8422 name = 0;
8424 if (name != 0)
8425 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8426 get_identifier (name), t);
8429 return build_qualified_type (t, TYPE_QUALS (component_type));
8432 /* If TYPE is a real or complex floating-point type and the target
8433 does not directly support arithmetic on TYPE then return the wider
8434 type to be used for arithmetic on TYPE. Otherwise, return
8435 NULL_TREE. */
8437 tree
8438 excess_precision_type (tree type)
8440 if (flag_excess_precision != EXCESS_PRECISION_FAST)
8442 int flt_eval_method = TARGET_FLT_EVAL_METHOD;
8443 switch (TREE_CODE (type))
8445 case REAL_TYPE:
8446 switch (flt_eval_method)
8448 case 1:
8449 if (TYPE_MODE (type) == TYPE_MODE (float_type_node))
8450 return double_type_node;
8451 break;
8452 case 2:
8453 if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
8454 || TYPE_MODE (type) == TYPE_MODE (double_type_node))
8455 return long_double_type_node;
8456 break;
8457 default:
8458 gcc_unreachable ();
8460 break;
8461 case COMPLEX_TYPE:
8462 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8463 return NULL_TREE;
8464 switch (flt_eval_method)
8466 case 1:
8467 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node))
8468 return complex_double_type_node;
8469 break;
8470 case 2:
8471 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node)
8472 || (TYPE_MODE (TREE_TYPE (type))
8473 == TYPE_MODE (double_type_node)))
8474 return complex_long_double_type_node;
8475 break;
8476 default:
8477 gcc_unreachable ();
8479 break;
8480 default:
8481 break;
8484 return NULL_TREE;
8487 /* Return OP, stripped of any conversions to wider types as much as is safe.
8488 Converting the value back to OP's type makes a value equivalent to OP.
8490 If FOR_TYPE is nonzero, we return a value which, if converted to
8491 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8493 OP must have integer, real or enumeral type. Pointers are not allowed!
8495 There are some cases where the obvious value we could return
8496 would regenerate to OP if converted to OP's type,
8497 but would not extend like OP to wider types.
8498 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8499 For example, if OP is (unsigned short)(signed char)-1,
8500 we avoid returning (signed char)-1 if FOR_TYPE is int,
8501 even though extending that to an unsigned short would regenerate OP,
8502 since the result of extending (signed char)-1 to (int)
8503 is different from (int) OP. */
8505 tree
8506 get_unwidened (tree op, tree for_type)
8508 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
8509 tree type = TREE_TYPE (op);
8510 unsigned final_prec
8511 = TYPE_PRECISION (for_type != 0 ? for_type : type);
8512 int uns
8513 = (for_type != 0 && for_type != type
8514 && final_prec > TYPE_PRECISION (type)
8515 && TYPE_UNSIGNED (type));
8516 tree win = op;
8518 while (CONVERT_EXPR_P (op))
8520 int bitschange;
8522 /* TYPE_PRECISION on vector types has different meaning
8523 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8524 so avoid them here. */
8525 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8526 break;
8528 bitschange = TYPE_PRECISION (TREE_TYPE (op))
8529 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8531 /* Truncations are many-one so cannot be removed.
8532 Unless we are later going to truncate down even farther. */
8533 if (bitschange < 0
8534 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8535 break;
8537 /* See what's inside this conversion. If we decide to strip it,
8538 we will set WIN. */
8539 op = TREE_OPERAND (op, 0);
8541 /* If we have not stripped any zero-extensions (uns is 0),
8542 we can strip any kind of extension.
8543 If we have previously stripped a zero-extension,
8544 only zero-extensions can safely be stripped.
8545 Any extension can be stripped if the bits it would produce
8546 are all going to be discarded later by truncating to FOR_TYPE. */
8548 if (bitschange > 0)
8550 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8551 win = op;
8552 /* TYPE_UNSIGNED says whether this is a zero-extension.
8553 Let's avoid computing it if it does not affect WIN
8554 and if UNS will not be needed again. */
8555 if ((uns
8556 || CONVERT_EXPR_P (op))
8557 && TYPE_UNSIGNED (TREE_TYPE (op)))
8559 uns = 1;
8560 win = op;
8565 /* If we finally reach a constant see if it fits in for_type and
8566 in that case convert it. */
8567 if (for_type
8568 && TREE_CODE (win) == INTEGER_CST
8569 && TREE_TYPE (win) != for_type
8570 && int_fits_type_p (win, for_type))
8571 win = fold_convert (for_type, win);
8573 return win;
8576 /* Return OP or a simpler expression for a narrower value
8577 which can be sign-extended or zero-extended to give back OP.
8578 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8579 or 0 if the value should be sign-extended. */
8581 tree
8582 get_narrower (tree op, int *unsignedp_ptr)
8584 int uns = 0;
8585 int first = 1;
8586 tree win = op;
8587 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8589 while (TREE_CODE (op) == NOP_EXPR)
8591 int bitschange
8592 = (TYPE_PRECISION (TREE_TYPE (op))
8593 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8595 /* Truncations are many-one so cannot be removed. */
8596 if (bitschange < 0)
8597 break;
8599 /* See what's inside this conversion. If we decide to strip it,
8600 we will set WIN. */
8602 if (bitschange > 0)
8604 op = TREE_OPERAND (op, 0);
8605 /* An extension: the outermost one can be stripped,
8606 but remember whether it is zero or sign extension. */
8607 if (first)
8608 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8609 /* Otherwise, if a sign extension has been stripped,
8610 only sign extensions can now be stripped;
8611 if a zero extension has been stripped, only zero-extensions. */
8612 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8613 break;
8614 first = 0;
8616 else /* bitschange == 0 */
8618 /* A change in nominal type can always be stripped, but we must
8619 preserve the unsignedness. */
8620 if (first)
8621 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8622 first = 0;
8623 op = TREE_OPERAND (op, 0);
8624 /* Keep trying to narrow, but don't assign op to win if it
8625 would turn an integral type into something else. */
8626 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8627 continue;
8630 win = op;
8633 if (TREE_CODE (op) == COMPONENT_REF
8634 /* Since type_for_size always gives an integer type. */
8635 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8636 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8637 /* Ensure field is laid out already. */
8638 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8639 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
8641 unsigned HOST_WIDE_INT innerprec
8642 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
8643 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8644 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8645 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8647 /* We can get this structure field in a narrower type that fits it,
8648 but the resulting extension to its nominal type (a fullword type)
8649 must satisfy the same conditions as for other extensions.
8651 Do this only for fields that are aligned (not bit-fields),
8652 because when bit-field insns will be used there is no
8653 advantage in doing this. */
8655 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8656 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8657 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8658 && type != 0)
8660 if (first)
8661 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8662 win = fold_convert (type, op);
8666 *unsignedp_ptr = uns;
8667 return win;
8670 /* Returns true if integer constant C has a value that is permissible
8671 for type TYPE (an INTEGER_TYPE). */
8673 bool
8674 int_fits_type_p (const_tree c, const_tree type)
8676 tree type_low_bound, type_high_bound;
8677 bool ok_for_low_bound, ok_for_high_bound;
8678 signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
8680 retry:
8681 type_low_bound = TYPE_MIN_VALUE (type);
8682 type_high_bound = TYPE_MAX_VALUE (type);
8684 /* If at least one bound of the type is a constant integer, we can check
8685 ourselves and maybe make a decision. If no such decision is possible, but
8686 this type is a subtype, try checking against that. Otherwise, use
8687 fits_to_tree_p, which checks against the precision.
8689 Compute the status for each possibly constant bound, and return if we see
8690 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
8691 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
8692 for "constant known to fit". */
8694 /* Check if c >= type_low_bound. */
8695 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
8697 if (tree_int_cst_lt (c, type_low_bound))
8698 return false;
8699 ok_for_low_bound = true;
8701 else
8702 ok_for_low_bound = false;
8704 /* Check if c <= type_high_bound. */
8705 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
8707 if (tree_int_cst_lt (type_high_bound, c))
8708 return false;
8709 ok_for_high_bound = true;
8711 else
8712 ok_for_high_bound = false;
8714 /* If the constant fits both bounds, the result is known. */
8715 if (ok_for_low_bound && ok_for_high_bound)
8716 return true;
8718 /* Perform some generic filtering which may allow making a decision
8719 even if the bounds are not constant. First, negative integers
8720 never fit in unsigned types, */
8721 if (TYPE_UNSIGNED (type) && sgn_c == SIGNED && wi::neg_p (c))
8722 return false;
8724 /* Second, narrower types always fit in wider ones. */
8725 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
8726 return true;
8728 /* Third, unsigned integers with top bit set never fit signed types. */
8729 if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED)
8731 int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
8732 if (prec < TYPE_PRECISION (TREE_TYPE (c)))
8734 /* When a tree_cst is converted to a wide-int, the precision
8735 is taken from the type. However, if the precision of the
8736 mode underneath the type is smaller than that, it is
8737 possible that the value will not fit. The test below
8738 fails if any bit is set between the sign bit of the
8739 underlying mode and the top bit of the type. */
8740 if (wi::ne_p (wi::zext (c, prec - 1), c))
8741 return false;
8743 else if (wi::neg_p (c))
8744 return false;
8747 /* If we haven't been able to decide at this point, there nothing more we
8748 can check ourselves here. Look at the base type if we have one and it
8749 has the same precision. */
8750 if (TREE_CODE (type) == INTEGER_TYPE
8751 && TREE_TYPE (type) != 0
8752 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
8754 type = TREE_TYPE (type);
8755 goto retry;
8758 /* Or to fits_to_tree_p, if nothing else. */
8759 return wi::fits_to_tree_p (c, type);
8762 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
8763 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
8764 represented (assuming two's-complement arithmetic) within the bit
8765 precision of the type are returned instead. */
8767 void
8768 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
8770 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
8771 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
8772 wi::to_mpz (TYPE_MIN_VALUE (type), min, TYPE_SIGN (type));
8773 else
8775 if (TYPE_UNSIGNED (type))
8776 mpz_set_ui (min, 0);
8777 else
8779 wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED);
8780 wi::to_mpz (mn, min, SIGNED);
8784 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
8785 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
8786 wi::to_mpz (TYPE_MAX_VALUE (type), max, TYPE_SIGN (type));
8787 else
8789 wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
8790 wi::to_mpz (mn, max, TYPE_SIGN (type));
8794 /* Return true if VAR is an automatic variable defined in function FN. */
8796 bool
8797 auto_var_in_fn_p (const_tree var, const_tree fn)
8799 return (DECL_P (var) && DECL_CONTEXT (var) == fn
8800 && ((((TREE_CODE (var) == VAR_DECL && ! DECL_EXTERNAL (var))
8801 || TREE_CODE (var) == PARM_DECL)
8802 && ! TREE_STATIC (var))
8803 || TREE_CODE (var) == LABEL_DECL
8804 || TREE_CODE (var) == RESULT_DECL));
8807 /* Subprogram of following function. Called by walk_tree.
8809 Return *TP if it is an automatic variable or parameter of the
8810 function passed in as DATA. */
8812 static tree
8813 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
8815 tree fn = (tree) data;
8817 if (TYPE_P (*tp))
8818 *walk_subtrees = 0;
8820 else if (DECL_P (*tp)
8821 && auto_var_in_fn_p (*tp, fn))
8822 return *tp;
8824 return NULL_TREE;
8827 /* Returns true if T is, contains, or refers to a type with variable
8828 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
8829 arguments, but not the return type. If FN is nonzero, only return
8830 true if a modifier of the type or position of FN is a variable or
8831 parameter inside FN.
8833 This concept is more general than that of C99 'variably modified types':
8834 in C99, a struct type is never variably modified because a VLA may not
8835 appear as a structure member. However, in GNU C code like:
8837 struct S { int i[f()]; };
8839 is valid, and other languages may define similar constructs. */
8841 bool
8842 variably_modified_type_p (tree type, tree fn)
8844 tree t;
8846 /* Test if T is either variable (if FN is zero) or an expression containing
8847 a variable in FN. If TYPE isn't gimplified, return true also if
8848 gimplify_one_sizepos would gimplify the expression into a local
8849 variable. */
8850 #define RETURN_TRUE_IF_VAR(T) \
8851 do { tree _t = (T); \
8852 if (_t != NULL_TREE \
8853 && _t != error_mark_node \
8854 && TREE_CODE (_t) != INTEGER_CST \
8855 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
8856 && (!fn \
8857 || (!TYPE_SIZES_GIMPLIFIED (type) \
8858 && !is_gimple_sizepos (_t)) \
8859 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
8860 return true; } while (0)
8862 if (type == error_mark_node)
8863 return false;
8865 /* If TYPE itself has variable size, it is variably modified. */
8866 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
8867 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
8869 switch (TREE_CODE (type))
8871 case POINTER_TYPE:
8872 case REFERENCE_TYPE:
8873 case VECTOR_TYPE:
8874 if (variably_modified_type_p (TREE_TYPE (type), fn))
8875 return true;
8876 break;
8878 case FUNCTION_TYPE:
8879 case METHOD_TYPE:
8880 /* If TYPE is a function type, it is variably modified if the
8881 return type is variably modified. */
8882 if (variably_modified_type_p (TREE_TYPE (type), fn))
8883 return true;
8884 break;
8886 case INTEGER_TYPE:
8887 case REAL_TYPE:
8888 case FIXED_POINT_TYPE:
8889 case ENUMERAL_TYPE:
8890 case BOOLEAN_TYPE:
8891 /* Scalar types are variably modified if their end points
8892 aren't constant. */
8893 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
8894 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
8895 break;
8897 case RECORD_TYPE:
8898 case UNION_TYPE:
8899 case QUAL_UNION_TYPE:
8900 /* We can't see if any of the fields are variably-modified by the
8901 definition we normally use, since that would produce infinite
8902 recursion via pointers. */
8903 /* This is variably modified if some field's type is. */
8904 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
8905 if (TREE_CODE (t) == FIELD_DECL)
8907 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
8908 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
8909 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
8911 if (TREE_CODE (type) == QUAL_UNION_TYPE)
8912 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
8914 break;
8916 case ARRAY_TYPE:
8917 /* Do not call ourselves to avoid infinite recursion. This is
8918 variably modified if the element type is. */
8919 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
8920 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
8921 break;
8923 default:
8924 break;
8927 /* The current language may have other cases to check, but in general,
8928 all other types are not variably modified. */
8929 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
8931 #undef RETURN_TRUE_IF_VAR
8934 /* Given a DECL or TYPE, return the scope in which it was declared, or
8935 NULL_TREE if there is no containing scope. */
8937 tree
8938 get_containing_scope (const_tree t)
8940 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
8943 /* Return the innermost context enclosing DECL that is
8944 a FUNCTION_DECL, or zero if none. */
8946 tree
8947 decl_function_context (const_tree decl)
8949 tree context;
8951 if (TREE_CODE (decl) == ERROR_MARK)
8952 return 0;
8954 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
8955 where we look up the function at runtime. Such functions always take
8956 a first argument of type 'pointer to real context'.
8958 C++ should really be fixed to use DECL_CONTEXT for the real context,
8959 and use something else for the "virtual context". */
8960 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
8961 context
8962 = TYPE_MAIN_VARIANT
8963 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
8964 else
8965 context = DECL_CONTEXT (decl);
8967 while (context && TREE_CODE (context) != FUNCTION_DECL)
8969 if (TREE_CODE (context) == BLOCK)
8970 context = BLOCK_SUPERCONTEXT (context);
8971 else
8972 context = get_containing_scope (context);
8975 return context;
8978 /* Return the innermost context enclosing DECL that is
8979 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
8980 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
8982 tree
8983 decl_type_context (const_tree decl)
8985 tree context = DECL_CONTEXT (decl);
8987 while (context)
8988 switch (TREE_CODE (context))
8990 case NAMESPACE_DECL:
8991 case TRANSLATION_UNIT_DECL:
8992 return NULL_TREE;
8994 case RECORD_TYPE:
8995 case UNION_TYPE:
8996 case QUAL_UNION_TYPE:
8997 return context;
8999 case TYPE_DECL:
9000 case FUNCTION_DECL:
9001 context = DECL_CONTEXT (context);
9002 break;
9004 case BLOCK:
9005 context = BLOCK_SUPERCONTEXT (context);
9006 break;
9008 default:
9009 gcc_unreachable ();
9012 return NULL_TREE;
9015 /* CALL is a CALL_EXPR. Return the declaration for the function
9016 called, or NULL_TREE if the called function cannot be
9017 determined. */
9019 tree
9020 get_callee_fndecl (const_tree call)
9022 tree addr;
9024 if (call == error_mark_node)
9025 return error_mark_node;
9027 /* It's invalid to call this function with anything but a
9028 CALL_EXPR. */
9029 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9031 /* The first operand to the CALL is the address of the function
9032 called. */
9033 addr = CALL_EXPR_FN (call);
9035 /* If there is no function, return early. */
9036 if (addr == NULL_TREE)
9037 return NULL_TREE;
9039 STRIP_NOPS (addr);
9041 /* If this is a readonly function pointer, extract its initial value. */
9042 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9043 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9044 && DECL_INITIAL (addr))
9045 addr = DECL_INITIAL (addr);
9047 /* If the address is just `&f' for some function `f', then we know
9048 that `f' is being called. */
9049 if (TREE_CODE (addr) == ADDR_EXPR
9050 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9051 return TREE_OPERAND (addr, 0);
9053 /* We couldn't figure out what was being called. */
9054 return NULL_TREE;
9057 /* Print debugging information about tree nodes generated during the compile,
9058 and any language-specific information. */
9060 void
9061 dump_tree_statistics (void)
9063 if (GATHER_STATISTICS)
9065 int i;
9066 int total_nodes, total_bytes;
9067 fprintf (stderr, "Kind Nodes Bytes\n");
9068 fprintf (stderr, "---------------------------------------\n");
9069 total_nodes = total_bytes = 0;
9070 for (i = 0; i < (int) all_kinds; i++)
9072 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9073 tree_node_counts[i], tree_node_sizes[i]);
9074 total_nodes += tree_node_counts[i];
9075 total_bytes += tree_node_sizes[i];
9077 fprintf (stderr, "---------------------------------------\n");
9078 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9079 fprintf (stderr, "---------------------------------------\n");
9080 fprintf (stderr, "Code Nodes\n");
9081 fprintf (stderr, "----------------------------\n");
9082 for (i = 0; i < (int) MAX_TREE_CODES; i++)
9083 fprintf (stderr, "%-20s %7d\n", get_tree_code_name ((enum tree_code) i),
9084 tree_code_counts[i]);
9085 fprintf (stderr, "----------------------------\n");
9086 ssanames_print_statistics ();
9087 phinodes_print_statistics ();
9089 else
9090 fprintf (stderr, "(No per-node statistics)\n");
9092 print_type_hash_statistics ();
9093 print_debug_expr_statistics ();
9094 print_value_expr_statistics ();
9095 lang_hooks.print_statistics ();
9098 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9100 /* Generate a crc32 of a byte. */
9102 static unsigned
9103 crc32_unsigned_bits (unsigned chksum, unsigned value, unsigned bits)
9105 unsigned ix;
9107 for (ix = bits; ix--; value <<= 1)
9109 unsigned feedback;
9111 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
9112 chksum <<= 1;
9113 chksum ^= feedback;
9115 return chksum;
9118 /* Generate a crc32 of a 32-bit unsigned. */
9120 unsigned
9121 crc32_unsigned (unsigned chksum, unsigned value)
9123 return crc32_unsigned_bits (chksum, value, 32);
9126 /* Generate a crc32 of a byte. */
9128 unsigned
9129 crc32_byte (unsigned chksum, char byte)
9131 return crc32_unsigned_bits (chksum, (unsigned) byte << 24, 8);
9134 /* Generate a crc32 of a string. */
9136 unsigned
9137 crc32_string (unsigned chksum, const char *string)
9141 chksum = crc32_byte (chksum, *string);
9143 while (*string++);
9144 return chksum;
9147 /* P is a string that will be used in a symbol. Mask out any characters
9148 that are not valid in that context. */
9150 void
9151 clean_symbol_name (char *p)
9153 for (; *p; p++)
9154 if (! (ISALNUM (*p)
9155 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
9156 || *p == '$'
9157 #endif
9158 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
9159 || *p == '.'
9160 #endif
9162 *p = '_';
9165 /* Generate a name for a special-purpose function.
9166 The generated name may need to be unique across the whole link.
9167 Changes to this function may also require corresponding changes to
9168 xstrdup_mask_random.
9169 TYPE is some string to identify the purpose of this function to the
9170 linker or collect2; it must start with an uppercase letter,
9171 one of:
9172 I - for constructors
9173 D - for destructors
9174 N - for C++ anonymous namespaces
9175 F - for DWARF unwind frame information. */
9177 tree
9178 get_file_function_name (const char *type)
9180 char *buf;
9181 const char *p;
9182 char *q;
9184 /* If we already have a name we know to be unique, just use that. */
9185 if (first_global_object_name)
9186 p = q = ASTRDUP (first_global_object_name);
9187 /* If the target is handling the constructors/destructors, they
9188 will be local to this file and the name is only necessary for
9189 debugging purposes.
9190 We also assign sub_I and sub_D sufixes to constructors called from
9191 the global static constructors. These are always local. */
9192 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9193 || (strncmp (type, "sub_", 4) == 0
9194 && (type[4] == 'I' || type[4] == 'D')))
9196 const char *file = main_input_filename;
9197 if (! file)
9198 file = LOCATION_FILE (input_location);
9199 /* Just use the file's basename, because the full pathname
9200 might be quite long. */
9201 p = q = ASTRDUP (lbasename (file));
9203 else
9205 /* Otherwise, the name must be unique across the entire link.
9206 We don't have anything that we know to be unique to this translation
9207 unit, so use what we do have and throw in some randomness. */
9208 unsigned len;
9209 const char *name = weak_global_object_name;
9210 const char *file = main_input_filename;
9212 if (! name)
9213 name = "";
9214 if (! file)
9215 file = LOCATION_FILE (input_location);
9217 len = strlen (file);
9218 q = (char *) alloca (9 + 17 + len + 1);
9219 memcpy (q, file, len + 1);
9221 snprintf (q + len, 9 + 17 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9222 crc32_string (0, name), get_random_seed (false));
9224 p = q;
9227 clean_symbol_name (q);
9228 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9229 + strlen (type));
9231 /* Set up the name of the file-level functions we may need.
9232 Use a global object (which is already required to be unique over
9233 the program) rather than the file name (which imposes extra
9234 constraints). */
9235 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9237 return get_identifier (buf);
9240 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9242 /* Complain that the tree code of NODE does not match the expected 0
9243 terminated list of trailing codes. The trailing code list can be
9244 empty, for a more vague error message. FILE, LINE, and FUNCTION
9245 are of the caller. */
9247 void
9248 tree_check_failed (const_tree node, const char *file,
9249 int line, const char *function, ...)
9251 va_list args;
9252 const char *buffer;
9253 unsigned length = 0;
9254 enum tree_code code;
9256 va_start (args, function);
9257 while ((code = (enum tree_code) va_arg (args, int)))
9258 length += 4 + strlen (get_tree_code_name (code));
9259 va_end (args);
9260 if (length)
9262 char *tmp;
9263 va_start (args, function);
9264 length += strlen ("expected ");
9265 buffer = tmp = (char *) alloca (length);
9266 length = 0;
9267 while ((code = (enum tree_code) va_arg (args, int)))
9269 const char *prefix = length ? " or " : "expected ";
9271 strcpy (tmp + length, prefix);
9272 length += strlen (prefix);
9273 strcpy (tmp + length, get_tree_code_name (code));
9274 length += strlen (get_tree_code_name (code));
9276 va_end (args);
9278 else
9279 buffer = "unexpected node";
9281 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9282 buffer, get_tree_code_name (TREE_CODE (node)),
9283 function, trim_filename (file), line);
9286 /* Complain that the tree code of NODE does match the expected 0
9287 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9288 the caller. */
9290 void
9291 tree_not_check_failed (const_tree node, const char *file,
9292 int line, const char *function, ...)
9294 va_list args;
9295 char *buffer;
9296 unsigned length = 0;
9297 enum tree_code code;
9299 va_start (args, function);
9300 while ((code = (enum tree_code) va_arg (args, int)))
9301 length += 4 + strlen (get_tree_code_name (code));
9302 va_end (args);
9303 va_start (args, function);
9304 buffer = (char *) alloca (length);
9305 length = 0;
9306 while ((code = (enum tree_code) va_arg (args, int)))
9308 if (length)
9310 strcpy (buffer + length, " or ");
9311 length += 4;
9313 strcpy (buffer + length, get_tree_code_name (code));
9314 length += strlen (get_tree_code_name (code));
9316 va_end (args);
9318 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9319 buffer, get_tree_code_name (TREE_CODE (node)),
9320 function, trim_filename (file), line);
9323 /* Similar to tree_check_failed, except that we check for a class of tree
9324 code, given in CL. */
9326 void
9327 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9328 const char *file, int line, const char *function)
9330 internal_error
9331 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9332 TREE_CODE_CLASS_STRING (cl),
9333 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9334 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9337 /* Similar to tree_check_failed, except that instead of specifying a
9338 dozen codes, use the knowledge that they're all sequential. */
9340 void
9341 tree_range_check_failed (const_tree node, const char *file, int line,
9342 const char *function, enum tree_code c1,
9343 enum tree_code c2)
9345 char *buffer;
9346 unsigned length = 0;
9347 unsigned int c;
9349 for (c = c1; c <= c2; ++c)
9350 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9352 length += strlen ("expected ");
9353 buffer = (char *) alloca (length);
9354 length = 0;
9356 for (c = c1; c <= c2; ++c)
9358 const char *prefix = length ? " or " : "expected ";
9360 strcpy (buffer + length, prefix);
9361 length += strlen (prefix);
9362 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9363 length += strlen (get_tree_code_name ((enum tree_code) c));
9366 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9367 buffer, get_tree_code_name (TREE_CODE (node)),
9368 function, trim_filename (file), line);
9372 /* Similar to tree_check_failed, except that we check that a tree does
9373 not have the specified code, given in CL. */
9375 void
9376 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9377 const char *file, int line, const char *function)
9379 internal_error
9380 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9381 TREE_CODE_CLASS_STRING (cl),
9382 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9383 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9387 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9389 void
9390 omp_clause_check_failed (const_tree node, const char *file, int line,
9391 const char *function, enum omp_clause_code code)
9393 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9394 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9395 function, trim_filename (file), line);
9399 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9401 void
9402 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9403 const char *function, enum omp_clause_code c1,
9404 enum omp_clause_code c2)
9406 char *buffer;
9407 unsigned length = 0;
9408 unsigned int c;
9410 for (c = c1; c <= c2; ++c)
9411 length += 4 + strlen (omp_clause_code_name[c]);
9413 length += strlen ("expected ");
9414 buffer = (char *) alloca (length);
9415 length = 0;
9417 for (c = c1; c <= c2; ++c)
9419 const char *prefix = length ? " or " : "expected ";
9421 strcpy (buffer + length, prefix);
9422 length += strlen (prefix);
9423 strcpy (buffer + length, omp_clause_code_name[c]);
9424 length += strlen (omp_clause_code_name[c]);
9427 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9428 buffer, omp_clause_code_name[TREE_CODE (node)],
9429 function, trim_filename (file), line);
9433 #undef DEFTREESTRUCT
9434 #define DEFTREESTRUCT(VAL, NAME) NAME,
9436 static const char *ts_enum_names[] = {
9437 #include "treestruct.def"
9439 #undef DEFTREESTRUCT
9441 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9443 /* Similar to tree_class_check_failed, except that we check for
9444 whether CODE contains the tree structure identified by EN. */
9446 void
9447 tree_contains_struct_check_failed (const_tree node,
9448 const enum tree_node_structure_enum en,
9449 const char *file, int line,
9450 const char *function)
9452 internal_error
9453 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9454 TS_ENUM_NAME (en),
9455 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9459 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9460 (dynamically sized) vector. */
9462 void
9463 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line,
9464 const char *function)
9466 internal_error
9467 ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d",
9468 idx + 1, len, function, trim_filename (file), line);
9471 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9472 (dynamically sized) vector. */
9474 void
9475 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9476 const char *function)
9478 internal_error
9479 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
9480 idx + 1, len, function, trim_filename (file), line);
9483 /* Similar to above, except that the check is for the bounds of the operand
9484 vector of an expression node EXP. */
9486 void
9487 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9488 int line, const char *function)
9490 enum tree_code code = TREE_CODE (exp);
9491 internal_error
9492 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9493 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9494 function, trim_filename (file), line);
9497 /* Similar to above, except that the check is for the number of
9498 operands of an OMP_CLAUSE node. */
9500 void
9501 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9502 int line, const char *function)
9504 internal_error
9505 ("tree check: accessed operand %d of omp_clause %s with %d operands "
9506 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9507 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9508 trim_filename (file), line);
9510 #endif /* ENABLE_TREE_CHECKING */
9512 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
9513 and mapped to the machine mode MODE. Initialize its fields and build
9514 the information necessary for debugging output. */
9516 static tree
9517 make_vector_type (tree innertype, int nunits, machine_mode mode)
9519 tree t;
9520 inchash::hash hstate;
9522 t = make_node (VECTOR_TYPE);
9523 TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
9524 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9525 SET_TYPE_MODE (t, mode);
9527 if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
9528 SET_TYPE_STRUCTURAL_EQUALITY (t);
9529 else if (TYPE_CANONICAL (innertype) != innertype
9530 || mode != VOIDmode)
9531 TYPE_CANONICAL (t)
9532 = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
9534 layout_type (t);
9536 hstate.add_wide_int (VECTOR_TYPE);
9537 hstate.add_wide_int (nunits);
9538 hstate.add_wide_int (mode);
9539 hstate.add_object (TYPE_HASH (TREE_TYPE (t)));
9540 t = type_hash_canon (hstate.end (), t);
9542 /* We have built a main variant, based on the main variant of the
9543 inner type. Use it to build the variant we return. */
9544 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
9545 && TREE_TYPE (t) != innertype)
9546 return build_type_attribute_qual_variant (t,
9547 TYPE_ATTRIBUTES (innertype),
9548 TYPE_QUALS (innertype));
9550 return t;
9553 static tree
9554 make_or_reuse_type (unsigned size, int unsignedp)
9556 int i;
9558 if (size == INT_TYPE_SIZE)
9559 return unsignedp ? unsigned_type_node : integer_type_node;
9560 if (size == CHAR_TYPE_SIZE)
9561 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
9562 if (size == SHORT_TYPE_SIZE)
9563 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
9564 if (size == LONG_TYPE_SIZE)
9565 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
9566 if (size == LONG_LONG_TYPE_SIZE)
9567 return (unsignedp ? long_long_unsigned_type_node
9568 : long_long_integer_type_node);
9570 for (i = 0; i < NUM_INT_N_ENTS; i ++)
9571 if (size == int_n_data[i].bitsize
9572 && int_n_enabled_p[i])
9573 return (unsignedp ? int_n_trees[i].unsigned_type
9574 : int_n_trees[i].signed_type);
9576 if (unsignedp)
9577 return make_unsigned_type (size);
9578 else
9579 return make_signed_type (size);
9582 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
9584 static tree
9585 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
9587 if (satp)
9589 if (size == SHORT_FRACT_TYPE_SIZE)
9590 return unsignedp ? sat_unsigned_short_fract_type_node
9591 : sat_short_fract_type_node;
9592 if (size == FRACT_TYPE_SIZE)
9593 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
9594 if (size == LONG_FRACT_TYPE_SIZE)
9595 return unsignedp ? sat_unsigned_long_fract_type_node
9596 : sat_long_fract_type_node;
9597 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9598 return unsignedp ? sat_unsigned_long_long_fract_type_node
9599 : sat_long_long_fract_type_node;
9601 else
9603 if (size == SHORT_FRACT_TYPE_SIZE)
9604 return unsignedp ? unsigned_short_fract_type_node
9605 : short_fract_type_node;
9606 if (size == FRACT_TYPE_SIZE)
9607 return unsignedp ? unsigned_fract_type_node : fract_type_node;
9608 if (size == LONG_FRACT_TYPE_SIZE)
9609 return unsignedp ? unsigned_long_fract_type_node
9610 : long_fract_type_node;
9611 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9612 return unsignedp ? unsigned_long_long_fract_type_node
9613 : long_long_fract_type_node;
9616 return make_fract_type (size, unsignedp, satp);
9619 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
9621 static tree
9622 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
9624 if (satp)
9626 if (size == SHORT_ACCUM_TYPE_SIZE)
9627 return unsignedp ? sat_unsigned_short_accum_type_node
9628 : sat_short_accum_type_node;
9629 if (size == ACCUM_TYPE_SIZE)
9630 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
9631 if (size == LONG_ACCUM_TYPE_SIZE)
9632 return unsignedp ? sat_unsigned_long_accum_type_node
9633 : sat_long_accum_type_node;
9634 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9635 return unsignedp ? sat_unsigned_long_long_accum_type_node
9636 : sat_long_long_accum_type_node;
9638 else
9640 if (size == SHORT_ACCUM_TYPE_SIZE)
9641 return unsignedp ? unsigned_short_accum_type_node
9642 : short_accum_type_node;
9643 if (size == ACCUM_TYPE_SIZE)
9644 return unsignedp ? unsigned_accum_type_node : accum_type_node;
9645 if (size == LONG_ACCUM_TYPE_SIZE)
9646 return unsignedp ? unsigned_long_accum_type_node
9647 : long_accum_type_node;
9648 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9649 return unsignedp ? unsigned_long_long_accum_type_node
9650 : long_long_accum_type_node;
9653 return make_accum_type (size, unsignedp, satp);
9657 /* Create an atomic variant node for TYPE. This routine is called
9658 during initialization of data types to create the 5 basic atomic
9659 types. The generic build_variant_type function requires these to
9660 already be set up in order to function properly, so cannot be
9661 called from there. If ALIGN is non-zero, then ensure alignment is
9662 overridden to this value. */
9664 static tree
9665 build_atomic_base (tree type, unsigned int align)
9667 tree t;
9669 /* Make sure its not already registered. */
9670 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
9671 return t;
9673 t = build_variant_type_copy (type);
9674 set_type_quals (t, TYPE_QUAL_ATOMIC);
9676 if (align)
9677 TYPE_ALIGN (t) = align;
9679 return t;
9682 /* Create nodes for all integer types (and error_mark_node) using the sizes
9683 of C datatypes. SIGNED_CHAR specifies whether char is signed,
9684 SHORT_DOUBLE specifies whether double should be of the same precision
9685 as float. */
9687 void
9688 build_common_tree_nodes (bool signed_char, bool short_double)
9690 int i;
9692 error_mark_node = make_node (ERROR_MARK);
9693 TREE_TYPE (error_mark_node) = error_mark_node;
9695 initialize_sizetypes ();
9697 /* Define both `signed char' and `unsigned char'. */
9698 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
9699 TYPE_STRING_FLAG (signed_char_type_node) = 1;
9700 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
9701 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
9703 /* Define `char', which is like either `signed char' or `unsigned char'
9704 but not the same as either. */
9705 char_type_node
9706 = (signed_char
9707 ? make_signed_type (CHAR_TYPE_SIZE)
9708 : make_unsigned_type (CHAR_TYPE_SIZE));
9709 TYPE_STRING_FLAG (char_type_node) = 1;
9711 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
9712 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
9713 integer_type_node = make_signed_type (INT_TYPE_SIZE);
9714 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
9715 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
9716 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
9717 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
9718 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
9720 for (i = 0; i < NUM_INT_N_ENTS; i ++)
9722 int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize);
9723 int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize);
9724 TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize);
9725 TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize);
9727 if (int_n_data[i].bitsize > LONG_LONG_TYPE_SIZE
9728 && int_n_enabled_p[i])
9730 integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type;
9731 integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type;
9735 /* Define a boolean type. This type only represents boolean values but
9736 may be larger than char depending on the value of BOOL_TYPE_SIZE. */
9737 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
9738 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
9739 TYPE_PRECISION (boolean_type_node) = 1;
9740 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
9742 /* Define what type to use for size_t. */
9743 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
9744 size_type_node = unsigned_type_node;
9745 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
9746 size_type_node = long_unsigned_type_node;
9747 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
9748 size_type_node = long_long_unsigned_type_node;
9749 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
9750 size_type_node = short_unsigned_type_node;
9751 else
9753 int i;
9755 size_type_node = NULL_TREE;
9756 for (i = 0; i < NUM_INT_N_ENTS; i++)
9757 if (int_n_enabled_p[i])
9759 char name[50];
9760 sprintf (name, "__int%d unsigned", int_n_data[i].bitsize);
9762 if (strcmp (name, SIZE_TYPE) == 0)
9764 size_type_node = int_n_trees[i].unsigned_type;
9767 if (size_type_node == NULL_TREE)
9768 gcc_unreachable ();
9771 /* Fill in the rest of the sized types. Reuse existing type nodes
9772 when possible. */
9773 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
9774 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
9775 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
9776 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
9777 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
9779 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
9780 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
9781 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
9782 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
9783 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
9785 /* Don't call build_qualified type for atomics. That routine does
9786 special processing for atomics, and until they are initialized
9787 it's better not to make that call.
9789 Check to see if there is a target override for atomic types. */
9791 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
9792 targetm.atomic_align_for_mode (QImode));
9793 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
9794 targetm.atomic_align_for_mode (HImode));
9795 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
9796 targetm.atomic_align_for_mode (SImode));
9797 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
9798 targetm.atomic_align_for_mode (DImode));
9799 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
9800 targetm.atomic_align_for_mode (TImode));
9802 access_public_node = get_identifier ("public");
9803 access_protected_node = get_identifier ("protected");
9804 access_private_node = get_identifier ("private");
9806 /* Define these next since types below may used them. */
9807 integer_zero_node = build_int_cst (integer_type_node, 0);
9808 integer_one_node = build_int_cst (integer_type_node, 1);
9809 integer_three_node = build_int_cst (integer_type_node, 3);
9810 integer_minus_one_node = build_int_cst (integer_type_node, -1);
9812 size_zero_node = size_int (0);
9813 size_one_node = size_int (1);
9814 bitsize_zero_node = bitsize_int (0);
9815 bitsize_one_node = bitsize_int (1);
9816 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
9818 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
9819 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
9821 void_type_node = make_node (VOID_TYPE);
9822 layout_type (void_type_node);
9824 pointer_bounds_type_node = targetm.chkp_bound_type ();
9826 /* We are not going to have real types in C with less than byte alignment,
9827 so we might as well not have any types that claim to have it. */
9828 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
9829 TYPE_USER_ALIGN (void_type_node) = 0;
9831 void_node = make_node (VOID_CST);
9832 TREE_TYPE (void_node) = void_type_node;
9834 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
9835 layout_type (TREE_TYPE (null_pointer_node));
9837 ptr_type_node = build_pointer_type (void_type_node);
9838 const_ptr_type_node
9839 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
9840 fileptr_type_node = ptr_type_node;
9842 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
9844 float_type_node = make_node (REAL_TYPE);
9845 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
9846 layout_type (float_type_node);
9848 double_type_node = make_node (REAL_TYPE);
9849 if (short_double)
9850 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
9851 else
9852 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
9853 layout_type (double_type_node);
9855 long_double_type_node = make_node (REAL_TYPE);
9856 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
9857 layout_type (long_double_type_node);
9859 float_ptr_type_node = build_pointer_type (float_type_node);
9860 double_ptr_type_node = build_pointer_type (double_type_node);
9861 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
9862 integer_ptr_type_node = build_pointer_type (integer_type_node);
9864 /* Fixed size integer types. */
9865 uint16_type_node = make_or_reuse_type (16, 1);
9866 uint32_type_node = make_or_reuse_type (32, 1);
9867 uint64_type_node = make_or_reuse_type (64, 1);
9869 /* Decimal float types. */
9870 dfloat32_type_node = make_node (REAL_TYPE);
9871 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
9872 layout_type (dfloat32_type_node);
9873 SET_TYPE_MODE (dfloat32_type_node, SDmode);
9874 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
9876 dfloat64_type_node = make_node (REAL_TYPE);
9877 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
9878 layout_type (dfloat64_type_node);
9879 SET_TYPE_MODE (dfloat64_type_node, DDmode);
9880 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
9882 dfloat128_type_node = make_node (REAL_TYPE);
9883 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
9884 layout_type (dfloat128_type_node);
9885 SET_TYPE_MODE (dfloat128_type_node, TDmode);
9886 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
9888 complex_integer_type_node = build_complex_type (integer_type_node);
9889 complex_float_type_node = build_complex_type (float_type_node);
9890 complex_double_type_node = build_complex_type (double_type_node);
9891 complex_long_double_type_node = build_complex_type (long_double_type_node);
9893 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
9894 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
9895 sat_ ## KIND ## _type_node = \
9896 make_sat_signed_ ## KIND ## _type (SIZE); \
9897 sat_unsigned_ ## KIND ## _type_node = \
9898 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9899 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9900 unsigned_ ## KIND ## _type_node = \
9901 make_unsigned_ ## KIND ## _type (SIZE);
9903 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
9904 sat_ ## WIDTH ## KIND ## _type_node = \
9905 make_sat_signed_ ## KIND ## _type (SIZE); \
9906 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
9907 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9908 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9909 unsigned_ ## WIDTH ## KIND ## _type_node = \
9910 make_unsigned_ ## KIND ## _type (SIZE);
9912 /* Make fixed-point type nodes based on four different widths. */
9913 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
9914 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
9915 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
9916 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
9917 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
9919 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
9920 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
9921 NAME ## _type_node = \
9922 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
9923 u ## NAME ## _type_node = \
9924 make_or_reuse_unsigned_ ## KIND ## _type \
9925 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
9926 sat_ ## NAME ## _type_node = \
9927 make_or_reuse_sat_signed_ ## KIND ## _type \
9928 (GET_MODE_BITSIZE (MODE ## mode)); \
9929 sat_u ## NAME ## _type_node = \
9930 make_or_reuse_sat_unsigned_ ## KIND ## _type \
9931 (GET_MODE_BITSIZE (U ## MODE ## mode));
9933 /* Fixed-point type and mode nodes. */
9934 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
9935 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
9936 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
9937 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
9938 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
9939 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
9940 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
9941 MAKE_FIXED_MODE_NODE (accum, ha, HA)
9942 MAKE_FIXED_MODE_NODE (accum, sa, SA)
9943 MAKE_FIXED_MODE_NODE (accum, da, DA)
9944 MAKE_FIXED_MODE_NODE (accum, ta, TA)
9947 tree t = targetm.build_builtin_va_list ();
9949 /* Many back-ends define record types without setting TYPE_NAME.
9950 If we copied the record type here, we'd keep the original
9951 record type without a name. This breaks name mangling. So,
9952 don't copy record types and let c_common_nodes_and_builtins()
9953 declare the type to be __builtin_va_list. */
9954 if (TREE_CODE (t) != RECORD_TYPE)
9955 t = build_variant_type_copy (t);
9957 va_list_type_node = t;
9961 /* Modify DECL for given flags.
9962 TM_PURE attribute is set only on types, so the function will modify
9963 DECL's type when ECF_TM_PURE is used. */
9965 void
9966 set_call_expr_flags (tree decl, int flags)
9968 if (flags & ECF_NOTHROW)
9969 TREE_NOTHROW (decl) = 1;
9970 if (flags & ECF_CONST)
9971 TREE_READONLY (decl) = 1;
9972 if (flags & ECF_PURE)
9973 DECL_PURE_P (decl) = 1;
9974 if (flags & ECF_LOOPING_CONST_OR_PURE)
9975 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
9976 if (flags & ECF_NOVOPS)
9977 DECL_IS_NOVOPS (decl) = 1;
9978 if (flags & ECF_NORETURN)
9979 TREE_THIS_VOLATILE (decl) = 1;
9980 if (flags & ECF_MALLOC)
9981 DECL_IS_MALLOC (decl) = 1;
9982 if (flags & ECF_RETURNS_TWICE)
9983 DECL_IS_RETURNS_TWICE (decl) = 1;
9984 if (flags & ECF_LEAF)
9985 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
9986 NULL, DECL_ATTRIBUTES (decl));
9987 if ((flags & ECF_TM_PURE) && flag_tm)
9988 apply_tm_attr (decl, get_identifier ("transaction_pure"));
9989 /* Looping const or pure is implied by noreturn.
9990 There is currently no way to declare looping const or looping pure alone. */
9991 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
9992 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
9996 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
9998 static void
9999 local_define_builtin (const char *name, tree type, enum built_in_function code,
10000 const char *library_name, int ecf_flags)
10002 tree decl;
10004 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
10005 library_name, NULL_TREE);
10006 set_call_expr_flags (decl, ecf_flags);
10008 set_builtin_decl (code, decl, true);
10011 /* Call this function after instantiating all builtins that the language
10012 front end cares about. This will build the rest of the builtins
10013 and internal functions that are relied upon by the tree optimizers and
10014 the middle-end. */
10016 void
10017 build_common_builtin_nodes (void)
10019 tree tmp, ftype;
10020 int ecf_flags;
10022 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
10024 ftype = build_function_type (void_type_node, void_list_node);
10025 local_define_builtin ("__builtin_unreachable", ftype, BUILT_IN_UNREACHABLE,
10026 "__builtin_unreachable",
10027 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
10028 | ECF_CONST);
10031 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
10032 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10034 ftype = build_function_type_list (ptr_type_node,
10035 ptr_type_node, const_ptr_type_node,
10036 size_type_node, NULL_TREE);
10038 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
10039 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
10040 "memcpy", ECF_NOTHROW | ECF_LEAF);
10041 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
10042 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
10043 "memmove", ECF_NOTHROW | ECF_LEAF);
10046 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
10048 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
10049 const_ptr_type_node, size_type_node,
10050 NULL_TREE);
10051 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
10052 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10055 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
10057 ftype = build_function_type_list (ptr_type_node,
10058 ptr_type_node, integer_type_node,
10059 size_type_node, NULL_TREE);
10060 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
10061 "memset", ECF_NOTHROW | ECF_LEAF);
10064 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
10066 ftype = build_function_type_list (ptr_type_node,
10067 size_type_node, NULL_TREE);
10068 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10069 "alloca", ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10072 ftype = build_function_type_list (ptr_type_node, size_type_node,
10073 size_type_node, NULL_TREE);
10074 local_define_builtin ("__builtin_alloca_with_align", ftype,
10075 BUILT_IN_ALLOCA_WITH_ALIGN, "alloca",
10076 ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10078 /* If we're checking the stack, `alloca' can throw. */
10079 if (flag_stack_check)
10081 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA)) = 0;
10082 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN)) = 0;
10085 ftype = build_function_type_list (void_type_node,
10086 ptr_type_node, ptr_type_node,
10087 ptr_type_node, NULL_TREE);
10088 local_define_builtin ("__builtin_init_trampoline", ftype,
10089 BUILT_IN_INIT_TRAMPOLINE,
10090 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10091 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10092 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10093 "__builtin_init_heap_trampoline",
10094 ECF_NOTHROW | ECF_LEAF);
10096 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10097 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10098 BUILT_IN_ADJUST_TRAMPOLINE,
10099 "__builtin_adjust_trampoline",
10100 ECF_CONST | ECF_NOTHROW);
10102 ftype = build_function_type_list (void_type_node,
10103 ptr_type_node, ptr_type_node, NULL_TREE);
10104 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10105 BUILT_IN_NONLOCAL_GOTO,
10106 "__builtin_nonlocal_goto",
10107 ECF_NORETURN | ECF_NOTHROW);
10109 ftype = build_function_type_list (void_type_node,
10110 ptr_type_node, ptr_type_node, NULL_TREE);
10111 local_define_builtin ("__builtin_setjmp_setup", ftype,
10112 BUILT_IN_SETJMP_SETUP,
10113 "__builtin_setjmp_setup", ECF_NOTHROW);
10115 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10116 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10117 BUILT_IN_SETJMP_RECEIVER,
10118 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10120 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10121 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10122 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10124 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10125 local_define_builtin ("__builtin_stack_restore", ftype,
10126 BUILT_IN_STACK_RESTORE,
10127 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10129 /* If there's a possibility that we might use the ARM EABI, build the
10130 alternate __cxa_end_cleanup node used to resume from C++ and Java. */
10131 if (targetm.arm_eabi_unwinder)
10133 ftype = build_function_type_list (void_type_node, NULL_TREE);
10134 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10135 BUILT_IN_CXA_END_CLEANUP,
10136 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10139 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10140 local_define_builtin ("__builtin_unwind_resume", ftype,
10141 BUILT_IN_UNWIND_RESUME,
10142 ((targetm_common.except_unwind_info (&global_options)
10143 == UI_SJLJ)
10144 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10145 ECF_NORETURN);
10147 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10149 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10150 NULL_TREE);
10151 local_define_builtin ("__builtin_return_address", ftype,
10152 BUILT_IN_RETURN_ADDRESS,
10153 "__builtin_return_address",
10154 ECF_NOTHROW);
10157 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10158 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10160 ftype = build_function_type_list (void_type_node, ptr_type_node,
10161 ptr_type_node, NULL_TREE);
10162 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10163 local_define_builtin ("__cyg_profile_func_enter", ftype,
10164 BUILT_IN_PROFILE_FUNC_ENTER,
10165 "__cyg_profile_func_enter", 0);
10166 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10167 local_define_builtin ("__cyg_profile_func_exit", ftype,
10168 BUILT_IN_PROFILE_FUNC_EXIT,
10169 "__cyg_profile_func_exit", 0);
10172 /* The exception object and filter values from the runtime. The argument
10173 must be zero before exception lowering, i.e. from the front end. After
10174 exception lowering, it will be the region number for the exception
10175 landing pad. These functions are PURE instead of CONST to prevent
10176 them from being hoisted past the exception edge that will initialize
10177 its value in the landing pad. */
10178 ftype = build_function_type_list (ptr_type_node,
10179 integer_type_node, NULL_TREE);
10180 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10181 /* Only use TM_PURE if we we have TM language support. */
10182 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10183 ecf_flags |= ECF_TM_PURE;
10184 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10185 "__builtin_eh_pointer", ecf_flags);
10187 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10188 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10189 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10190 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10192 ftype = build_function_type_list (void_type_node,
10193 integer_type_node, integer_type_node,
10194 NULL_TREE);
10195 local_define_builtin ("__builtin_eh_copy_values", ftype,
10196 BUILT_IN_EH_COPY_VALUES,
10197 "__builtin_eh_copy_values", ECF_NOTHROW);
10199 /* Complex multiplication and division. These are handled as builtins
10200 rather than optabs because emit_library_call_value doesn't support
10201 complex. Further, we can do slightly better with folding these
10202 beasties if the real and complex parts of the arguments are separate. */
10204 int mode;
10206 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10208 char mode_name_buf[4], *q;
10209 const char *p;
10210 enum built_in_function mcode, dcode;
10211 tree type, inner_type;
10212 const char *prefix = "__";
10214 if (targetm.libfunc_gnu_prefix)
10215 prefix = "__gnu_";
10217 type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0);
10218 if (type == NULL)
10219 continue;
10220 inner_type = TREE_TYPE (type);
10222 ftype = build_function_type_list (type, inner_type, inner_type,
10223 inner_type, inner_type, NULL_TREE);
10225 mcode = ((enum built_in_function)
10226 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10227 dcode = ((enum built_in_function)
10228 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10230 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10231 *q = TOLOWER (*p);
10232 *q = '\0';
10234 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10235 NULL);
10236 local_define_builtin (built_in_names[mcode], ftype, mcode,
10237 built_in_names[mcode],
10238 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10240 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10241 NULL);
10242 local_define_builtin (built_in_names[dcode], ftype, dcode,
10243 built_in_names[dcode],
10244 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10248 init_internal_fns ();
10251 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10252 better way.
10254 If we requested a pointer to a vector, build up the pointers that
10255 we stripped off while looking for the inner type. Similarly for
10256 return values from functions.
10258 The argument TYPE is the top of the chain, and BOTTOM is the
10259 new type which we will point to. */
10261 tree
10262 reconstruct_complex_type (tree type, tree bottom)
10264 tree inner, outer;
10266 if (TREE_CODE (type) == POINTER_TYPE)
10268 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10269 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10270 TYPE_REF_CAN_ALIAS_ALL (type));
10272 else if (TREE_CODE (type) == REFERENCE_TYPE)
10274 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10275 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10276 TYPE_REF_CAN_ALIAS_ALL (type));
10278 else if (TREE_CODE (type) == ARRAY_TYPE)
10280 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10281 outer = build_array_type (inner, TYPE_DOMAIN (type));
10283 else if (TREE_CODE (type) == FUNCTION_TYPE)
10285 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10286 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10288 else if (TREE_CODE (type) == METHOD_TYPE)
10290 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10291 /* The build_method_type_directly() routine prepends 'this' to argument list,
10292 so we must compensate by getting rid of it. */
10293 outer
10294 = build_method_type_directly
10295 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10296 inner,
10297 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10299 else if (TREE_CODE (type) == OFFSET_TYPE)
10301 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10302 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10304 else
10305 return bottom;
10307 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10308 TYPE_QUALS (type));
10311 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10312 the inner type. */
10313 tree
10314 build_vector_type_for_mode (tree innertype, machine_mode mode)
10316 int nunits;
10318 switch (GET_MODE_CLASS (mode))
10320 case MODE_VECTOR_INT:
10321 case MODE_VECTOR_FLOAT:
10322 case MODE_VECTOR_FRACT:
10323 case MODE_VECTOR_UFRACT:
10324 case MODE_VECTOR_ACCUM:
10325 case MODE_VECTOR_UACCUM:
10326 nunits = GET_MODE_NUNITS (mode);
10327 break;
10329 case MODE_INT:
10330 /* Check that there are no leftover bits. */
10331 gcc_assert (GET_MODE_BITSIZE (mode)
10332 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10334 nunits = GET_MODE_BITSIZE (mode)
10335 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10336 break;
10338 default:
10339 gcc_unreachable ();
10342 return make_vector_type (innertype, nunits, mode);
10345 /* Similarly, but takes the inner type and number of units, which must be
10346 a power of two. */
10348 tree
10349 build_vector_type (tree innertype, int nunits)
10351 return make_vector_type (innertype, nunits, VOIDmode);
10354 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
10356 tree
10357 build_opaque_vector_type (tree innertype, int nunits)
10359 tree t = make_vector_type (innertype, nunits, VOIDmode);
10360 tree cand;
10361 /* We always build the non-opaque variant before the opaque one,
10362 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
10363 cand = TYPE_NEXT_VARIANT (t);
10364 if (cand
10365 && TYPE_VECTOR_OPAQUE (cand)
10366 && check_qualified_type (cand, t, TYPE_QUALS (t)))
10367 return cand;
10368 /* Othewise build a variant type and make sure to queue it after
10369 the non-opaque type. */
10370 cand = build_distinct_type_copy (t);
10371 TYPE_VECTOR_OPAQUE (cand) = true;
10372 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
10373 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
10374 TYPE_NEXT_VARIANT (t) = cand;
10375 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
10376 return cand;
10380 /* Given an initializer INIT, return TRUE if INIT is zero or some
10381 aggregate of zeros. Otherwise return FALSE. */
10382 bool
10383 initializer_zerop (const_tree init)
10385 tree elt;
10387 STRIP_NOPS (init);
10389 switch (TREE_CODE (init))
10391 case INTEGER_CST:
10392 return integer_zerop (init);
10394 case REAL_CST:
10395 /* ??? Note that this is not correct for C4X float formats. There,
10396 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
10397 negative exponent. */
10398 return real_zerop (init)
10399 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
10401 case FIXED_CST:
10402 return fixed_zerop (init);
10404 case COMPLEX_CST:
10405 return integer_zerop (init)
10406 || (real_zerop (init)
10407 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
10408 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
10410 case VECTOR_CST:
10412 unsigned i;
10413 for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
10414 if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
10415 return false;
10416 return true;
10419 case CONSTRUCTOR:
10421 unsigned HOST_WIDE_INT idx;
10423 if (TREE_CLOBBER_P (init))
10424 return false;
10425 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
10426 if (!initializer_zerop (elt))
10427 return false;
10428 return true;
10431 case STRING_CST:
10433 int i;
10435 /* We need to loop through all elements to handle cases like
10436 "\0" and "\0foobar". */
10437 for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
10438 if (TREE_STRING_POINTER (init)[i] != '\0')
10439 return false;
10441 return true;
10444 default:
10445 return false;
10449 /* Check if vector VEC consists of all the equal elements and
10450 that the number of elements corresponds to the type of VEC.
10451 The function returns first element of the vector
10452 or NULL_TREE if the vector is not uniform. */
10453 tree
10454 uniform_vector_p (const_tree vec)
10456 tree first, t;
10457 unsigned i;
10459 if (vec == NULL_TREE)
10460 return NULL_TREE;
10462 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
10464 if (TREE_CODE (vec) == VECTOR_CST)
10466 first = VECTOR_CST_ELT (vec, 0);
10467 for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
10468 if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
10469 return NULL_TREE;
10471 return first;
10474 else if (TREE_CODE (vec) == CONSTRUCTOR)
10476 first = error_mark_node;
10478 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
10480 if (i == 0)
10482 first = t;
10483 continue;
10485 if (!operand_equal_p (first, t, 0))
10486 return NULL_TREE;
10488 if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
10489 return NULL_TREE;
10491 return first;
10494 return NULL_TREE;
10497 /* Build an empty statement at location LOC. */
10499 tree
10500 build_empty_stmt (location_t loc)
10502 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
10503 SET_EXPR_LOCATION (t, loc);
10504 return t;
10508 /* Build an OpenMP clause with code CODE. LOC is the location of the
10509 clause. */
10511 tree
10512 build_omp_clause (location_t loc, enum omp_clause_code code)
10514 tree t;
10515 int size, length;
10517 length = omp_clause_num_ops[code];
10518 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
10520 record_node_allocation_statistics (OMP_CLAUSE, size);
10522 t = (tree) ggc_internal_alloc (size);
10523 memset (t, 0, size);
10524 TREE_SET_CODE (t, OMP_CLAUSE);
10525 OMP_CLAUSE_SET_CODE (t, code);
10526 OMP_CLAUSE_LOCATION (t) = loc;
10528 return t;
10531 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
10532 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
10533 Except for the CODE and operand count field, other storage for the
10534 object is initialized to zeros. */
10536 tree
10537 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
10539 tree t;
10540 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
10542 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
10543 gcc_assert (len >= 1);
10545 record_node_allocation_statistics (code, length);
10547 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
10549 TREE_SET_CODE (t, code);
10551 /* Can't use TREE_OPERAND to store the length because if checking is
10552 enabled, it will try to check the length before we store it. :-P */
10553 t->exp.operands[0] = build_int_cst (sizetype, len);
10555 return t;
10558 /* Helper function for build_call_* functions; build a CALL_EXPR with
10559 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
10560 the argument slots. */
10562 static tree
10563 build_call_1 (tree return_type, tree fn, int nargs)
10565 tree t;
10567 t = build_vl_exp (CALL_EXPR, nargs + 3);
10568 TREE_TYPE (t) = return_type;
10569 CALL_EXPR_FN (t) = fn;
10570 CALL_EXPR_STATIC_CHAIN (t) = NULL;
10572 return t;
10575 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10576 FN and a null static chain slot. NARGS is the number of call arguments
10577 which are specified as "..." arguments. */
10579 tree
10580 build_call_nary (tree return_type, tree fn, int nargs, ...)
10582 tree ret;
10583 va_list args;
10584 va_start (args, nargs);
10585 ret = build_call_valist (return_type, fn, nargs, args);
10586 va_end (args);
10587 return ret;
10590 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10591 FN and a null static chain slot. NARGS is the number of call arguments
10592 which are specified as a va_list ARGS. */
10594 tree
10595 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
10597 tree t;
10598 int i;
10600 t = build_call_1 (return_type, fn, nargs);
10601 for (i = 0; i < nargs; i++)
10602 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
10603 process_call_operands (t);
10604 return t;
10607 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10608 FN and a null static chain slot. NARGS is the number of call arguments
10609 which are specified as a tree array ARGS. */
10611 tree
10612 build_call_array_loc (location_t loc, tree return_type, tree fn,
10613 int nargs, const tree *args)
10615 tree t;
10616 int i;
10618 t = build_call_1 (return_type, fn, nargs);
10619 for (i = 0; i < nargs; i++)
10620 CALL_EXPR_ARG (t, i) = args[i];
10621 process_call_operands (t);
10622 SET_EXPR_LOCATION (t, loc);
10623 return t;
10626 /* Like build_call_array, but takes a vec. */
10628 tree
10629 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
10631 tree ret, t;
10632 unsigned int ix;
10634 ret = build_call_1 (return_type, fn, vec_safe_length (args));
10635 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
10636 CALL_EXPR_ARG (ret, ix) = t;
10637 process_call_operands (ret);
10638 return ret;
10641 /* Conveniently construct a function call expression. FNDECL names the
10642 function to be called and N arguments are passed in the array
10643 ARGARRAY. */
10645 tree
10646 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray)
10648 tree fntype = TREE_TYPE (fndecl);
10649 tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl);
10651 return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray);
10654 /* Conveniently construct a function call expression. FNDECL names the
10655 function to be called and the arguments are passed in the vector
10656 VEC. */
10658 tree
10659 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec)
10661 return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec),
10662 vec_safe_address (vec));
10666 /* Conveniently construct a function call expression. FNDECL names the
10667 function to be called, N is the number of arguments, and the "..."
10668 parameters are the argument expressions. */
10670 tree
10671 build_call_expr_loc (location_t loc, tree fndecl, int n, ...)
10673 va_list ap;
10674 tree *argarray = XALLOCAVEC (tree, n);
10675 int i;
10677 va_start (ap, n);
10678 for (i = 0; i < n; i++)
10679 argarray[i] = va_arg (ap, tree);
10680 va_end (ap);
10681 return build_call_expr_loc_array (loc, fndecl, n, argarray);
10684 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...). Duplicated because
10685 varargs macros aren't supported by all bootstrap compilers. */
10687 tree
10688 build_call_expr (tree fndecl, int n, ...)
10690 va_list ap;
10691 tree *argarray = XALLOCAVEC (tree, n);
10692 int i;
10694 va_start (ap, n);
10695 for (i = 0; i < n; i++)
10696 argarray[i] = va_arg (ap, tree);
10697 va_end (ap);
10698 return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray);
10701 /* Build internal call expression. This is just like CALL_EXPR, except
10702 its CALL_EXPR_FN is NULL. It will get gimplified later into ordinary
10703 internal function. */
10705 tree
10706 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn,
10707 tree type, int n, ...)
10709 va_list ap;
10710 int i;
10712 tree fn = build_call_1 (type, NULL_TREE, n);
10713 va_start (ap, n);
10714 for (i = 0; i < n; i++)
10715 CALL_EXPR_ARG (fn, i) = va_arg (ap, tree);
10716 va_end (ap);
10717 SET_EXPR_LOCATION (fn, loc);
10718 CALL_EXPR_IFN (fn) = ifn;
10719 return fn;
10722 /* Create a new constant string literal and return a char* pointer to it.
10723 The STRING_CST value is the LEN characters at STR. */
10724 tree
10725 build_string_literal (int len, const char *str)
10727 tree t, elem, index, type;
10729 t = build_string (len, str);
10730 elem = build_type_variant (char_type_node, 1, 0);
10731 index = build_index_type (size_int (len - 1));
10732 type = build_array_type (elem, index);
10733 TREE_TYPE (t) = type;
10734 TREE_CONSTANT (t) = 1;
10735 TREE_READONLY (t) = 1;
10736 TREE_STATIC (t) = 1;
10738 type = build_pointer_type (elem);
10739 t = build1 (ADDR_EXPR, type,
10740 build4 (ARRAY_REF, elem,
10741 t, integer_zero_node, NULL_TREE, NULL_TREE));
10742 return t;
10747 /* Return true if T (assumed to be a DECL) must be assigned a memory
10748 location. */
10750 bool
10751 needs_to_live_in_memory (const_tree t)
10753 return (TREE_ADDRESSABLE (t)
10754 || is_global_var (t)
10755 || (TREE_CODE (t) == RESULT_DECL
10756 && !DECL_BY_REFERENCE (t)
10757 && aggregate_value_p (t, current_function_decl)));
10760 /* Return value of a constant X and sign-extend it. */
10762 HOST_WIDE_INT
10763 int_cst_value (const_tree x)
10765 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10766 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
10768 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10769 gcc_assert (cst_and_fits_in_hwi (x));
10771 if (bits < HOST_BITS_PER_WIDE_INT)
10773 bool negative = ((val >> (bits - 1)) & 1) != 0;
10774 if (negative)
10775 val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
10776 else
10777 val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
10780 return val;
10783 /* If TYPE is an integral or pointer type, return an integer type with
10784 the same precision which is unsigned iff UNSIGNEDP is true, or itself
10785 if TYPE is already an integer type of signedness UNSIGNEDP. */
10787 tree
10788 signed_or_unsigned_type_for (int unsignedp, tree type)
10790 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
10791 return type;
10793 if (TREE_CODE (type) == VECTOR_TYPE)
10795 tree inner = TREE_TYPE (type);
10796 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
10797 if (!inner2)
10798 return NULL_TREE;
10799 if (inner == inner2)
10800 return type;
10801 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
10804 if (!INTEGRAL_TYPE_P (type)
10805 && !POINTER_TYPE_P (type)
10806 && TREE_CODE (type) != OFFSET_TYPE)
10807 return NULL_TREE;
10809 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
10812 /* If TYPE is an integral or pointer type, return an integer type with
10813 the same precision which is unsigned, or itself if TYPE is already an
10814 unsigned integer type. */
10816 tree
10817 unsigned_type_for (tree type)
10819 return signed_or_unsigned_type_for (1, type);
10822 /* If TYPE is an integral or pointer type, return an integer type with
10823 the same precision which is signed, or itself if TYPE is already a
10824 signed integer type. */
10826 tree
10827 signed_type_for (tree type)
10829 return signed_or_unsigned_type_for (0, type);
10832 /* If TYPE is a vector type, return a signed integer vector type with the
10833 same width and number of subparts. Otherwise return boolean_type_node. */
10835 tree
10836 truth_type_for (tree type)
10838 if (TREE_CODE (type) == VECTOR_TYPE)
10840 tree elem = lang_hooks.types.type_for_size
10841 (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (type))), 0);
10842 return build_opaque_vector_type (elem, TYPE_VECTOR_SUBPARTS (type));
10844 else
10845 return boolean_type_node;
10848 /* Returns the largest value obtainable by casting something in INNER type to
10849 OUTER type. */
10851 tree
10852 upper_bound_in_type (tree outer, tree inner)
10854 unsigned int det = 0;
10855 unsigned oprec = TYPE_PRECISION (outer);
10856 unsigned iprec = TYPE_PRECISION (inner);
10857 unsigned prec;
10859 /* Compute a unique number for every combination. */
10860 det |= (oprec > iprec) ? 4 : 0;
10861 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
10862 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
10864 /* Determine the exponent to use. */
10865 switch (det)
10867 case 0:
10868 case 1:
10869 /* oprec <= iprec, outer: signed, inner: don't care. */
10870 prec = oprec - 1;
10871 break;
10872 case 2:
10873 case 3:
10874 /* oprec <= iprec, outer: unsigned, inner: don't care. */
10875 prec = oprec;
10876 break;
10877 case 4:
10878 /* oprec > iprec, outer: signed, inner: signed. */
10879 prec = iprec - 1;
10880 break;
10881 case 5:
10882 /* oprec > iprec, outer: signed, inner: unsigned. */
10883 prec = iprec;
10884 break;
10885 case 6:
10886 /* oprec > iprec, outer: unsigned, inner: signed. */
10887 prec = oprec;
10888 break;
10889 case 7:
10890 /* oprec > iprec, outer: unsigned, inner: unsigned. */
10891 prec = iprec;
10892 break;
10893 default:
10894 gcc_unreachable ();
10897 return wide_int_to_tree (outer,
10898 wi::mask (prec, false, TYPE_PRECISION (outer)));
10901 /* Returns the smallest value obtainable by casting something in INNER type to
10902 OUTER type. */
10904 tree
10905 lower_bound_in_type (tree outer, tree inner)
10907 unsigned oprec = TYPE_PRECISION (outer);
10908 unsigned iprec = TYPE_PRECISION (inner);
10910 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
10911 and obtain 0. */
10912 if (TYPE_UNSIGNED (outer)
10913 /* If we are widening something of an unsigned type, OUTER type
10914 contains all values of INNER type. In particular, both INNER
10915 and OUTER types have zero in common. */
10916 || (oprec > iprec && TYPE_UNSIGNED (inner)))
10917 return build_int_cst (outer, 0);
10918 else
10920 /* If we are widening a signed type to another signed type, we
10921 want to obtain -2^^(iprec-1). If we are keeping the
10922 precision or narrowing to a signed type, we want to obtain
10923 -2^(oprec-1). */
10924 unsigned prec = oprec > iprec ? iprec : oprec;
10925 return wide_int_to_tree (outer,
10926 wi::mask (prec - 1, true,
10927 TYPE_PRECISION (outer)));
10931 /* Return nonzero if two operands that are suitable for PHI nodes are
10932 necessarily equal. Specifically, both ARG0 and ARG1 must be either
10933 SSA_NAME or invariant. Note that this is strictly an optimization.
10934 That is, callers of this function can directly call operand_equal_p
10935 and get the same result, only slower. */
10938 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
10940 if (arg0 == arg1)
10941 return 1;
10942 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
10943 return 0;
10944 return operand_equal_p (arg0, arg1, 0);
10947 /* Returns number of zeros at the end of binary representation of X. */
10949 tree
10950 num_ending_zeros (const_tree x)
10952 return build_int_cst (TREE_TYPE (x), wi::ctz (x));
10956 #define WALK_SUBTREE(NODE) \
10957 do \
10959 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
10960 if (result) \
10961 return result; \
10963 while (0)
10965 /* This is a subroutine of walk_tree that walks field of TYPE that are to
10966 be walked whenever a type is seen in the tree. Rest of operands and return
10967 value are as for walk_tree. */
10969 static tree
10970 walk_type_fields (tree type, walk_tree_fn func, void *data,
10971 hash_set<tree> *pset, walk_tree_lh lh)
10973 tree result = NULL_TREE;
10975 switch (TREE_CODE (type))
10977 case POINTER_TYPE:
10978 case REFERENCE_TYPE:
10979 case VECTOR_TYPE:
10980 /* We have to worry about mutually recursive pointers. These can't
10981 be written in C. They can in Ada. It's pathological, but
10982 there's an ACATS test (c38102a) that checks it. Deal with this
10983 by checking if we're pointing to another pointer, that one
10984 points to another pointer, that one does too, and we have no htab.
10985 If so, get a hash table. We check three levels deep to avoid
10986 the cost of the hash table if we don't need one. */
10987 if (POINTER_TYPE_P (TREE_TYPE (type))
10988 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
10989 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
10990 && !pset)
10992 result = walk_tree_without_duplicates (&TREE_TYPE (type),
10993 func, data);
10994 if (result)
10995 return result;
10997 break;
11000 /* ... fall through ... */
11002 case COMPLEX_TYPE:
11003 WALK_SUBTREE (TREE_TYPE (type));
11004 break;
11006 case METHOD_TYPE:
11007 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
11009 /* Fall through. */
11011 case FUNCTION_TYPE:
11012 WALK_SUBTREE (TREE_TYPE (type));
11014 tree arg;
11016 /* We never want to walk into default arguments. */
11017 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
11018 WALK_SUBTREE (TREE_VALUE (arg));
11020 break;
11022 case ARRAY_TYPE:
11023 /* Don't follow this nodes's type if a pointer for fear that
11024 we'll have infinite recursion. If we have a PSET, then we
11025 need not fear. */
11026 if (pset
11027 || (!POINTER_TYPE_P (TREE_TYPE (type))
11028 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
11029 WALK_SUBTREE (TREE_TYPE (type));
11030 WALK_SUBTREE (TYPE_DOMAIN (type));
11031 break;
11033 case OFFSET_TYPE:
11034 WALK_SUBTREE (TREE_TYPE (type));
11035 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
11036 break;
11038 default:
11039 break;
11042 return NULL_TREE;
11045 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
11046 called with the DATA and the address of each sub-tree. If FUNC returns a
11047 non-NULL value, the traversal is stopped, and the value returned by FUNC
11048 is returned. If PSET is non-NULL it is used to record the nodes visited,
11049 and to avoid visiting a node more than once. */
11051 tree
11052 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
11053 hash_set<tree> *pset, walk_tree_lh lh)
11055 enum tree_code code;
11056 int walk_subtrees;
11057 tree result;
11059 #define WALK_SUBTREE_TAIL(NODE) \
11060 do \
11062 tp = & (NODE); \
11063 goto tail_recurse; \
11065 while (0)
11067 tail_recurse:
11068 /* Skip empty subtrees. */
11069 if (!*tp)
11070 return NULL_TREE;
11072 /* Don't walk the same tree twice, if the user has requested
11073 that we avoid doing so. */
11074 if (pset && pset->add (*tp))
11075 return NULL_TREE;
11077 /* Call the function. */
11078 walk_subtrees = 1;
11079 result = (*func) (tp, &walk_subtrees, data);
11081 /* If we found something, return it. */
11082 if (result)
11083 return result;
11085 code = TREE_CODE (*tp);
11087 /* Even if we didn't, FUNC may have decided that there was nothing
11088 interesting below this point in the tree. */
11089 if (!walk_subtrees)
11091 /* But we still need to check our siblings. */
11092 if (code == TREE_LIST)
11093 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11094 else if (code == OMP_CLAUSE)
11095 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11096 else
11097 return NULL_TREE;
11100 if (lh)
11102 result = (*lh) (tp, &walk_subtrees, func, data, pset);
11103 if (result || !walk_subtrees)
11104 return result;
11107 switch (code)
11109 case ERROR_MARK:
11110 case IDENTIFIER_NODE:
11111 case INTEGER_CST:
11112 case REAL_CST:
11113 case FIXED_CST:
11114 case VECTOR_CST:
11115 case STRING_CST:
11116 case BLOCK:
11117 case PLACEHOLDER_EXPR:
11118 case SSA_NAME:
11119 case FIELD_DECL:
11120 case RESULT_DECL:
11121 /* None of these have subtrees other than those already walked
11122 above. */
11123 break;
11125 case TREE_LIST:
11126 WALK_SUBTREE (TREE_VALUE (*tp));
11127 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11128 break;
11130 case TREE_VEC:
11132 int len = TREE_VEC_LENGTH (*tp);
11134 if (len == 0)
11135 break;
11137 /* Walk all elements but the first. */
11138 while (--len)
11139 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11141 /* Now walk the first one as a tail call. */
11142 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11145 case COMPLEX_CST:
11146 WALK_SUBTREE (TREE_REALPART (*tp));
11147 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11149 case CONSTRUCTOR:
11151 unsigned HOST_WIDE_INT idx;
11152 constructor_elt *ce;
11154 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11155 idx++)
11156 WALK_SUBTREE (ce->value);
11158 break;
11160 case SAVE_EXPR:
11161 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11163 case BIND_EXPR:
11165 tree decl;
11166 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11168 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
11169 into declarations that are just mentioned, rather than
11170 declared; they don't really belong to this part of the tree.
11171 And, we can see cycles: the initializer for a declaration
11172 can refer to the declaration itself. */
11173 WALK_SUBTREE (DECL_INITIAL (decl));
11174 WALK_SUBTREE (DECL_SIZE (decl));
11175 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11177 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11180 case STATEMENT_LIST:
11182 tree_stmt_iterator i;
11183 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11184 WALK_SUBTREE (*tsi_stmt_ptr (i));
11186 break;
11188 case OMP_CLAUSE:
11189 switch (OMP_CLAUSE_CODE (*tp))
11191 case OMP_CLAUSE_GANG:
11192 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11193 /* FALLTHRU */
11195 case OMP_CLAUSE_DEVICE_RESIDENT:
11196 case OMP_CLAUSE_USE_DEVICE:
11197 case OMP_CLAUSE_ASYNC:
11198 case OMP_CLAUSE_WAIT:
11199 case OMP_CLAUSE_WORKER:
11200 case OMP_CLAUSE_VECTOR:
11201 case OMP_CLAUSE_NUM_GANGS:
11202 case OMP_CLAUSE_NUM_WORKERS:
11203 case OMP_CLAUSE_VECTOR_LENGTH:
11204 case OMP_CLAUSE_PRIVATE:
11205 case OMP_CLAUSE_SHARED:
11206 case OMP_CLAUSE_FIRSTPRIVATE:
11207 case OMP_CLAUSE_COPYIN:
11208 case OMP_CLAUSE_COPYPRIVATE:
11209 case OMP_CLAUSE_FINAL:
11210 case OMP_CLAUSE_IF:
11211 case OMP_CLAUSE_NUM_THREADS:
11212 case OMP_CLAUSE_SCHEDULE:
11213 case OMP_CLAUSE_UNIFORM:
11214 case OMP_CLAUSE_DEPEND:
11215 case OMP_CLAUSE_NUM_TEAMS:
11216 case OMP_CLAUSE_THREAD_LIMIT:
11217 case OMP_CLAUSE_DEVICE:
11218 case OMP_CLAUSE_DIST_SCHEDULE:
11219 case OMP_CLAUSE_SAFELEN:
11220 case OMP_CLAUSE_SIMDLEN:
11221 case OMP_CLAUSE__LOOPTEMP_:
11222 case OMP_CLAUSE__SIMDUID_:
11223 case OMP_CLAUSE__CILK_FOR_COUNT_:
11224 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11225 /* FALLTHRU */
11227 case OMP_CLAUSE_INDEPENDENT:
11228 case OMP_CLAUSE_NOWAIT:
11229 case OMP_CLAUSE_ORDERED:
11230 case OMP_CLAUSE_DEFAULT:
11231 case OMP_CLAUSE_UNTIED:
11232 case OMP_CLAUSE_MERGEABLE:
11233 case OMP_CLAUSE_PROC_BIND:
11234 case OMP_CLAUSE_INBRANCH:
11235 case OMP_CLAUSE_NOTINBRANCH:
11236 case OMP_CLAUSE_FOR:
11237 case OMP_CLAUSE_PARALLEL:
11238 case OMP_CLAUSE_SECTIONS:
11239 case OMP_CLAUSE_TASKGROUP:
11240 case OMP_CLAUSE_AUTO:
11241 case OMP_CLAUSE_SEQ:
11242 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11244 case OMP_CLAUSE_LASTPRIVATE:
11245 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11246 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
11247 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11249 case OMP_CLAUSE_COLLAPSE:
11251 int i;
11252 for (i = 0; i < 3; i++)
11253 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11254 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11257 case OMP_CLAUSE_LINEAR:
11258 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11259 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
11260 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
11261 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11263 case OMP_CLAUSE_ALIGNED:
11264 case OMP_CLAUSE_FROM:
11265 case OMP_CLAUSE_TO:
11266 case OMP_CLAUSE_MAP:
11267 case OMP_CLAUSE__CACHE_:
11268 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11269 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11270 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11272 case OMP_CLAUSE_REDUCTION:
11274 int i;
11275 for (i = 0; i < 4; i++)
11276 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11277 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11280 default:
11281 gcc_unreachable ();
11283 break;
11285 case TARGET_EXPR:
11287 int i, len;
11289 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
11290 But, we only want to walk once. */
11291 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
11292 for (i = 0; i < len; ++i)
11293 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11294 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
11297 case DECL_EXPR:
11298 /* If this is a TYPE_DECL, walk into the fields of the type that it's
11299 defining. We only want to walk into these fields of a type in this
11300 case and not in the general case of a mere reference to the type.
11302 The criterion is as follows: if the field can be an expression, it
11303 must be walked only here. This should be in keeping with the fields
11304 that are directly gimplified in gimplify_type_sizes in order for the
11305 mark/copy-if-shared/unmark machinery of the gimplifier to work with
11306 variable-sized types.
11308 Note that DECLs get walked as part of processing the BIND_EXPR. */
11309 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
11311 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
11312 if (TREE_CODE (*type_p) == ERROR_MARK)
11313 return NULL_TREE;
11315 /* Call the function for the type. See if it returns anything or
11316 doesn't want us to continue. If we are to continue, walk both
11317 the normal fields and those for the declaration case. */
11318 result = (*func) (type_p, &walk_subtrees, data);
11319 if (result || !walk_subtrees)
11320 return result;
11322 /* But do not walk a pointed-to type since it may itself need to
11323 be walked in the declaration case if it isn't anonymous. */
11324 if (!POINTER_TYPE_P (*type_p))
11326 result = walk_type_fields (*type_p, func, data, pset, lh);
11327 if (result)
11328 return result;
11331 /* If this is a record type, also walk the fields. */
11332 if (RECORD_OR_UNION_TYPE_P (*type_p))
11334 tree field;
11336 for (field = TYPE_FIELDS (*type_p); field;
11337 field = DECL_CHAIN (field))
11339 /* We'd like to look at the type of the field, but we can
11340 easily get infinite recursion. So assume it's pointed
11341 to elsewhere in the tree. Also, ignore things that
11342 aren't fields. */
11343 if (TREE_CODE (field) != FIELD_DECL)
11344 continue;
11346 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
11347 WALK_SUBTREE (DECL_SIZE (field));
11348 WALK_SUBTREE (DECL_SIZE_UNIT (field));
11349 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
11350 WALK_SUBTREE (DECL_QUALIFIER (field));
11354 /* Same for scalar types. */
11355 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
11356 || TREE_CODE (*type_p) == ENUMERAL_TYPE
11357 || TREE_CODE (*type_p) == INTEGER_TYPE
11358 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
11359 || TREE_CODE (*type_p) == REAL_TYPE)
11361 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
11362 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
11365 WALK_SUBTREE (TYPE_SIZE (*type_p));
11366 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
11368 /* FALLTHRU */
11370 default:
11371 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
11373 int i, len;
11375 /* Walk over all the sub-trees of this operand. */
11376 len = TREE_OPERAND_LENGTH (*tp);
11378 /* Go through the subtrees. We need to do this in forward order so
11379 that the scope of a FOR_EXPR is handled properly. */
11380 if (len)
11382 for (i = 0; i < len - 1; ++i)
11383 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11384 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
11387 /* If this is a type, walk the needed fields in the type. */
11388 else if (TYPE_P (*tp))
11389 return walk_type_fields (*tp, func, data, pset, lh);
11390 break;
11393 /* We didn't find what we were looking for. */
11394 return NULL_TREE;
11396 #undef WALK_SUBTREE_TAIL
11398 #undef WALK_SUBTREE
11400 /* Like walk_tree, but does not walk duplicate nodes more than once. */
11402 tree
11403 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
11404 walk_tree_lh lh)
11406 tree result;
11408 hash_set<tree> pset;
11409 result = walk_tree_1 (tp, func, data, &pset, lh);
11410 return result;
11414 tree
11415 tree_block (tree t)
11417 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11419 if (IS_EXPR_CODE_CLASS (c))
11420 return LOCATION_BLOCK (t->exp.locus);
11421 gcc_unreachable ();
11422 return NULL;
11425 void
11426 tree_set_block (tree t, tree b)
11428 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t));
11430 if (IS_EXPR_CODE_CLASS (c))
11432 if (b)
11433 t->exp.locus = COMBINE_LOCATION_DATA (line_table, t->exp.locus, b);
11434 else
11435 t->exp.locus = LOCATION_LOCUS (t->exp.locus);
11437 else
11438 gcc_unreachable ();
11441 /* Create a nameless artificial label and put it in the current
11442 function context. The label has a location of LOC. Returns the
11443 newly created label. */
11445 tree
11446 create_artificial_label (location_t loc)
11448 tree lab = build_decl (loc,
11449 LABEL_DECL, NULL_TREE, void_type_node);
11451 DECL_ARTIFICIAL (lab) = 1;
11452 DECL_IGNORED_P (lab) = 1;
11453 DECL_CONTEXT (lab) = current_function_decl;
11454 return lab;
11457 /* Given a tree, try to return a useful variable name that we can use
11458 to prefix a temporary that is being assigned the value of the tree.
11459 I.E. given <temp> = &A, return A. */
11461 const char *
11462 get_name (tree t)
11464 tree stripped_decl;
11466 stripped_decl = t;
11467 STRIP_NOPS (stripped_decl);
11468 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
11469 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
11470 else if (TREE_CODE (stripped_decl) == SSA_NAME)
11472 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
11473 if (!name)
11474 return NULL;
11475 return IDENTIFIER_POINTER (name);
11477 else
11479 switch (TREE_CODE (stripped_decl))
11481 case ADDR_EXPR:
11482 return get_name (TREE_OPERAND (stripped_decl, 0));
11483 default:
11484 return NULL;
11489 /* Return true if TYPE has a variable argument list. */
11491 bool
11492 stdarg_p (const_tree fntype)
11494 function_args_iterator args_iter;
11495 tree n = NULL_TREE, t;
11497 if (!fntype)
11498 return false;
11500 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
11502 n = t;
11505 return n != NULL_TREE && n != void_type_node;
11508 /* Return true if TYPE has a prototype. */
11510 bool
11511 prototype_p (tree fntype)
11513 tree t;
11515 gcc_assert (fntype != NULL_TREE);
11517 t = TYPE_ARG_TYPES (fntype);
11518 return (t != NULL_TREE);
11521 /* If BLOCK is inlined from an __attribute__((__artificial__))
11522 routine, return pointer to location from where it has been
11523 called. */
11524 location_t *
11525 block_nonartificial_location (tree block)
11527 location_t *ret = NULL;
11529 while (block && TREE_CODE (block) == BLOCK
11530 && BLOCK_ABSTRACT_ORIGIN (block))
11532 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
11534 while (TREE_CODE (ao) == BLOCK
11535 && BLOCK_ABSTRACT_ORIGIN (ao)
11536 && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
11537 ao = BLOCK_ABSTRACT_ORIGIN (ao);
11539 if (TREE_CODE (ao) == FUNCTION_DECL)
11541 /* If AO is an artificial inline, point RET to the
11542 call site locus at which it has been inlined and continue
11543 the loop, in case AO's caller is also an artificial
11544 inline. */
11545 if (DECL_DECLARED_INLINE_P (ao)
11546 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
11547 ret = &BLOCK_SOURCE_LOCATION (block);
11548 else
11549 break;
11551 else if (TREE_CODE (ao) != BLOCK)
11552 break;
11554 block = BLOCK_SUPERCONTEXT (block);
11556 return ret;
11560 /* If EXP is inlined from an __attribute__((__artificial__))
11561 function, return the location of the original call expression. */
11563 location_t
11564 tree_nonartificial_location (tree exp)
11566 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
11568 if (loc)
11569 return *loc;
11570 else
11571 return EXPR_LOCATION (exp);
11575 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
11576 nodes. */
11578 /* Return the hash code code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
11580 hashval_t
11581 cl_option_hasher::hash (tree x)
11583 const_tree const t = x;
11584 const char *p;
11585 size_t i;
11586 size_t len = 0;
11587 hashval_t hash = 0;
11589 if (TREE_CODE (t) == OPTIMIZATION_NODE)
11591 p = (const char *)TREE_OPTIMIZATION (t);
11592 len = sizeof (struct cl_optimization);
11595 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
11596 return cl_target_option_hash (TREE_TARGET_OPTION (t));
11598 else
11599 gcc_unreachable ();
11601 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
11602 something else. */
11603 for (i = 0; i < len; i++)
11604 if (p[i])
11605 hash = (hash << 4) ^ ((i << 2) | p[i]);
11607 return hash;
11610 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
11611 TARGET_OPTION tree node) is the same as that given by *Y, which is the
11612 same. */
11614 bool
11615 cl_option_hasher::equal (tree x, tree y)
11617 const_tree const xt = x;
11618 const_tree const yt = y;
11619 const char *xp;
11620 const char *yp;
11621 size_t len;
11623 if (TREE_CODE (xt) != TREE_CODE (yt))
11624 return 0;
11626 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
11628 xp = (const char *)TREE_OPTIMIZATION (xt);
11629 yp = (const char *)TREE_OPTIMIZATION (yt);
11630 len = sizeof (struct cl_optimization);
11633 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
11635 return cl_target_option_eq (TREE_TARGET_OPTION (xt),
11636 TREE_TARGET_OPTION (yt));
11639 else
11640 gcc_unreachable ();
11642 return (memcmp (xp, yp, len) == 0);
11645 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */
11647 tree
11648 build_optimization_node (struct gcc_options *opts)
11650 tree t;
11652 /* Use the cache of optimization nodes. */
11654 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
11655 opts);
11657 tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT);
11658 t = *slot;
11659 if (!t)
11661 /* Insert this one into the hash table. */
11662 t = cl_optimization_node;
11663 *slot = t;
11665 /* Make a new node for next time round. */
11666 cl_optimization_node = make_node (OPTIMIZATION_NODE);
11669 return t;
11672 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */
11674 tree
11675 build_target_option_node (struct gcc_options *opts)
11677 tree t;
11679 /* Use the cache of optimization nodes. */
11681 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
11682 opts);
11684 tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT);
11685 t = *slot;
11686 if (!t)
11688 /* Insert this one into the hash table. */
11689 t = cl_target_option_node;
11690 *slot = t;
11692 /* Make a new node for next time round. */
11693 cl_target_option_node = make_node (TARGET_OPTION_NODE);
11696 return t;
11699 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
11700 so that they aren't saved during PCH writing. */
11702 void
11703 prepare_target_option_nodes_for_pch (void)
11705 hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin ();
11706 for (; iter != cl_option_hash_table->end (); ++iter)
11707 if (TREE_CODE (*iter) == TARGET_OPTION_NODE)
11708 TREE_TARGET_GLOBALS (*iter) = NULL;
11711 /* Determine the "ultimate origin" of a block. The block may be an inlined
11712 instance of an inlined instance of a block which is local to an inline
11713 function, so we have to trace all of the way back through the origin chain
11714 to find out what sort of node actually served as the original seed for the
11715 given block. */
11717 tree
11718 block_ultimate_origin (const_tree block)
11720 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
11722 /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if
11723 we're trying to output the abstract instance of this function. */
11724 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
11725 return NULL_TREE;
11727 if (immediate_origin == NULL_TREE)
11728 return NULL_TREE;
11729 else
11731 tree ret_val;
11732 tree lookahead = immediate_origin;
11736 ret_val = lookahead;
11737 lookahead = (TREE_CODE (ret_val) == BLOCK
11738 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
11740 while (lookahead != NULL && lookahead != ret_val);
11742 /* The block's abstract origin chain may not be the *ultimate* origin of
11743 the block. It could lead to a DECL that has an abstract origin set.
11744 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
11745 will give us if it has one). Note that DECL's abstract origins are
11746 supposed to be the most distant ancestor (or so decl_ultimate_origin
11747 claims), so we don't need to loop following the DECL origins. */
11748 if (DECL_P (ret_val))
11749 return DECL_ORIGIN (ret_val);
11751 return ret_val;
11755 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates
11756 no instruction. */
11758 bool
11759 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type)
11761 /* Use precision rather then machine mode when we can, which gives
11762 the correct answer even for submode (bit-field) types. */
11763 if ((INTEGRAL_TYPE_P (outer_type)
11764 || POINTER_TYPE_P (outer_type)
11765 || TREE_CODE (outer_type) == OFFSET_TYPE)
11766 && (INTEGRAL_TYPE_P (inner_type)
11767 || POINTER_TYPE_P (inner_type)
11768 || TREE_CODE (inner_type) == OFFSET_TYPE))
11769 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
11771 /* Otherwise fall back on comparing machine modes (e.g. for
11772 aggregate types, floats). */
11773 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
11776 /* Return true iff conversion in EXP generates no instruction. Mark
11777 it inline so that we fully inline into the stripping functions even
11778 though we have two uses of this function. */
11780 static inline bool
11781 tree_nop_conversion (const_tree exp)
11783 tree outer_type, inner_type;
11785 if (!CONVERT_EXPR_P (exp)
11786 && TREE_CODE (exp) != NON_LVALUE_EXPR)
11787 return false;
11788 if (TREE_OPERAND (exp, 0) == error_mark_node)
11789 return false;
11791 outer_type = TREE_TYPE (exp);
11792 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11794 if (!inner_type)
11795 return false;
11797 return tree_nop_conversion_p (outer_type, inner_type);
11800 /* Return true iff conversion in EXP generates no instruction. Don't
11801 consider conversions changing the signedness. */
11803 static bool
11804 tree_sign_nop_conversion (const_tree exp)
11806 tree outer_type, inner_type;
11808 if (!tree_nop_conversion (exp))
11809 return false;
11811 outer_type = TREE_TYPE (exp);
11812 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11814 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
11815 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
11818 /* Strip conversions from EXP according to tree_nop_conversion and
11819 return the resulting expression. */
11821 tree
11822 tree_strip_nop_conversions (tree exp)
11824 while (tree_nop_conversion (exp))
11825 exp = TREE_OPERAND (exp, 0);
11826 return exp;
11829 /* Strip conversions from EXP according to tree_sign_nop_conversion
11830 and return the resulting expression. */
11832 tree
11833 tree_strip_sign_nop_conversions (tree exp)
11835 while (tree_sign_nop_conversion (exp))
11836 exp = TREE_OPERAND (exp, 0);
11837 return exp;
11840 /* Avoid any floating point extensions from EXP. */
11841 tree
11842 strip_float_extensions (tree exp)
11844 tree sub, expt, subt;
11846 /* For floating point constant look up the narrowest type that can hold
11847 it properly and handle it like (type)(narrowest_type)constant.
11848 This way we can optimize for instance a=a*2.0 where "a" is float
11849 but 2.0 is double constant. */
11850 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
11852 REAL_VALUE_TYPE orig;
11853 tree type = NULL;
11855 orig = TREE_REAL_CST (exp);
11856 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
11857 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
11858 type = float_type_node;
11859 else if (TYPE_PRECISION (TREE_TYPE (exp))
11860 > TYPE_PRECISION (double_type_node)
11861 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
11862 type = double_type_node;
11863 if (type)
11864 return build_real (type, real_value_truncate (TYPE_MODE (type), orig));
11867 if (!CONVERT_EXPR_P (exp))
11868 return exp;
11870 sub = TREE_OPERAND (exp, 0);
11871 subt = TREE_TYPE (sub);
11872 expt = TREE_TYPE (exp);
11874 if (!FLOAT_TYPE_P (subt))
11875 return exp;
11877 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
11878 return exp;
11880 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
11881 return exp;
11883 return strip_float_extensions (sub);
11886 /* Strip out all handled components that produce invariant
11887 offsets. */
11889 const_tree
11890 strip_invariant_refs (const_tree op)
11892 while (handled_component_p (op))
11894 switch (TREE_CODE (op))
11896 case ARRAY_REF:
11897 case ARRAY_RANGE_REF:
11898 if (!is_gimple_constant (TREE_OPERAND (op, 1))
11899 || TREE_OPERAND (op, 2) != NULL_TREE
11900 || TREE_OPERAND (op, 3) != NULL_TREE)
11901 return NULL;
11902 break;
11904 case COMPONENT_REF:
11905 if (TREE_OPERAND (op, 2) != NULL_TREE)
11906 return NULL;
11907 break;
11909 default:;
11911 op = TREE_OPERAND (op, 0);
11914 return op;
11917 static GTY(()) tree gcc_eh_personality_decl;
11919 /* Return the GCC personality function decl. */
11921 tree
11922 lhd_gcc_personality (void)
11924 if (!gcc_eh_personality_decl)
11925 gcc_eh_personality_decl = build_personality_function ("gcc");
11926 return gcc_eh_personality_decl;
11929 /* TARGET is a call target of GIMPLE call statement
11930 (obtained by gimple_call_fn). Return true if it is
11931 OBJ_TYPE_REF representing an virtual call of C++ method.
11932 (As opposed to OBJ_TYPE_REF representing objc calls
11933 through a cast where middle-end devirtualization machinery
11934 can't apply.) */
11936 bool
11937 virtual_method_call_p (tree target)
11939 if (TREE_CODE (target) != OBJ_TYPE_REF)
11940 return false;
11941 tree t = TREE_TYPE (target);
11942 gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE);
11943 t = TREE_TYPE (t);
11944 if (TREE_CODE (t) == FUNCTION_TYPE)
11945 return false;
11946 gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE);
11947 /* If we do not have BINFO associated, it means that type was built
11948 without devirtualization enabled. Do not consider this a virtual
11949 call. */
11950 if (!TYPE_BINFO (obj_type_ref_class (target)))
11951 return false;
11952 return true;
11955 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */
11957 tree
11958 obj_type_ref_class (tree ref)
11960 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
11961 ref = TREE_TYPE (ref);
11962 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
11963 ref = TREE_TYPE (ref);
11964 /* We look for type THIS points to. ObjC also builds
11965 OBJ_TYPE_REF with non-method calls, Their first parameter
11966 ID however also corresponds to class type. */
11967 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
11968 || TREE_CODE (ref) == FUNCTION_TYPE);
11969 ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
11970 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
11971 return TREE_TYPE (ref);
11974 /* Return true if T is in anonymous namespace. */
11976 bool
11977 type_in_anonymous_namespace_p (const_tree t)
11979 /* TREE_PUBLIC of TYPE_STUB_DECL may not be properly set for
11980 bulitin types; those have CONTEXT NULL. */
11981 if (!TYPE_CONTEXT (t))
11982 return false;
11983 return (TYPE_STUB_DECL (t) && !TREE_PUBLIC (TYPE_STUB_DECL (t)));
11986 /* Try to find a base info of BINFO that would have its field decl at offset
11987 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
11988 found, return, otherwise return NULL_TREE. */
11990 tree
11991 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
11993 tree type = BINFO_TYPE (binfo);
11995 while (true)
11997 HOST_WIDE_INT pos, size;
11998 tree fld;
11999 int i;
12001 if (types_same_for_odr (type, expected_type))
12002 return binfo;
12003 if (offset < 0)
12004 return NULL_TREE;
12006 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12008 if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld))
12009 continue;
12011 pos = int_bit_position (fld);
12012 size = tree_to_uhwi (DECL_SIZE (fld));
12013 if (pos <= offset && (pos + size) > offset)
12014 break;
12016 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12017 return NULL_TREE;
12019 /* Offset 0 indicates the primary base, whose vtable contents are
12020 represented in the binfo for the derived class. */
12021 else if (offset != 0)
12023 tree base_binfo, binfo2 = binfo;
12025 /* Find BINFO corresponding to FLD. This is bit harder
12026 by a fact that in virtual inheritance we may need to walk down
12027 the non-virtual inheritance chain. */
12028 while (true)
12030 tree containing_binfo = NULL, found_binfo = NULL;
12031 for (i = 0; BINFO_BASE_ITERATE (binfo2, i, base_binfo); i++)
12032 if (types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12034 found_binfo = base_binfo;
12035 break;
12037 else
12038 if ((tree_to_shwi (BINFO_OFFSET (base_binfo))
12039 - tree_to_shwi (BINFO_OFFSET (binfo)))
12040 * BITS_PER_UNIT < pos
12041 /* Rule out types with no virtual methods or we can get confused
12042 here by zero sized bases. */
12043 && TYPE_BINFO (BINFO_TYPE (base_binfo))
12044 && BINFO_VTABLE (TYPE_BINFO (BINFO_TYPE (base_binfo)))
12045 && (!containing_binfo
12046 || (tree_to_shwi (BINFO_OFFSET (containing_binfo))
12047 < tree_to_shwi (BINFO_OFFSET (base_binfo)))))
12048 containing_binfo = base_binfo;
12049 if (found_binfo)
12051 binfo = found_binfo;
12052 break;
12054 if (!containing_binfo)
12055 return NULL_TREE;
12056 binfo2 = containing_binfo;
12060 type = TREE_TYPE (fld);
12061 offset -= pos;
12065 /* Returns true if X is a typedef decl. */
12067 bool
12068 is_typedef_decl (tree x)
12070 return (x && TREE_CODE (x) == TYPE_DECL
12071 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12074 /* Returns true iff TYPE is a type variant created for a typedef. */
12076 bool
12077 typedef_variant_p (tree type)
12079 return is_typedef_decl (TYPE_NAME (type));
12082 /* Warn about a use of an identifier which was marked deprecated. */
12083 void
12084 warn_deprecated_use (tree node, tree attr)
12086 const char *msg;
12088 if (node == 0 || !warn_deprecated_decl)
12089 return;
12091 if (!attr)
12093 if (DECL_P (node))
12094 attr = DECL_ATTRIBUTES (node);
12095 else if (TYPE_P (node))
12097 tree decl = TYPE_STUB_DECL (node);
12098 if (decl)
12099 attr = lookup_attribute ("deprecated",
12100 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12104 if (attr)
12105 attr = lookup_attribute ("deprecated", attr);
12107 if (attr)
12108 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12109 else
12110 msg = NULL;
12112 bool w;
12113 if (DECL_P (node))
12115 if (msg)
12116 w = warning (OPT_Wdeprecated_declarations,
12117 "%qD is deprecated: %s", node, msg);
12118 else
12119 w = warning (OPT_Wdeprecated_declarations,
12120 "%qD is deprecated", node);
12121 if (w)
12122 inform (DECL_SOURCE_LOCATION (node), "declared here");
12124 else if (TYPE_P (node))
12126 tree what = NULL_TREE;
12127 tree decl = TYPE_STUB_DECL (node);
12129 if (TYPE_NAME (node))
12131 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12132 what = TYPE_NAME (node);
12133 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12134 && DECL_NAME (TYPE_NAME (node)))
12135 what = DECL_NAME (TYPE_NAME (node));
12138 if (decl)
12140 if (what)
12142 if (msg)
12143 w = warning (OPT_Wdeprecated_declarations,
12144 "%qE is deprecated: %s", what, msg);
12145 else
12146 w = warning (OPT_Wdeprecated_declarations,
12147 "%qE is deprecated", what);
12149 else
12151 if (msg)
12152 w = warning (OPT_Wdeprecated_declarations,
12153 "type is deprecated: %s", msg);
12154 else
12155 w = warning (OPT_Wdeprecated_declarations,
12156 "type is deprecated");
12158 if (w)
12159 inform (DECL_SOURCE_LOCATION (decl), "declared here");
12161 else
12163 if (what)
12165 if (msg)
12166 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12167 what, msg);
12168 else
12169 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12171 else
12173 if (msg)
12174 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12175 msg);
12176 else
12177 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12183 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12184 somewhere in it. */
12186 bool
12187 contains_bitfld_component_ref_p (const_tree ref)
12189 while (handled_component_p (ref))
12191 if (TREE_CODE (ref) == COMPONENT_REF
12192 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12193 return true;
12194 ref = TREE_OPERAND (ref, 0);
12197 return false;
12200 /* Try to determine whether a TRY_CATCH expression can fall through.
12201 This is a subroutine of block_may_fallthru. */
12203 static bool
12204 try_catch_may_fallthru (const_tree stmt)
12206 tree_stmt_iterator i;
12208 /* If the TRY block can fall through, the whole TRY_CATCH can
12209 fall through. */
12210 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12211 return true;
12213 i = tsi_start (TREE_OPERAND (stmt, 1));
12214 switch (TREE_CODE (tsi_stmt (i)))
12216 case CATCH_EXPR:
12217 /* We expect to see a sequence of CATCH_EXPR trees, each with a
12218 catch expression and a body. The whole TRY_CATCH may fall
12219 through iff any of the catch bodies falls through. */
12220 for (; !tsi_end_p (i); tsi_next (&i))
12222 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12223 return true;
12225 return false;
12227 case EH_FILTER_EXPR:
12228 /* The exception filter expression only matters if there is an
12229 exception. If the exception does not match EH_FILTER_TYPES,
12230 we will execute EH_FILTER_FAILURE, and we will fall through
12231 if that falls through. If the exception does match
12232 EH_FILTER_TYPES, the stack unwinder will continue up the
12233 stack, so we will not fall through. We don't know whether we
12234 will throw an exception which matches EH_FILTER_TYPES or not,
12235 so we just ignore EH_FILTER_TYPES and assume that we might
12236 throw an exception which doesn't match. */
12237 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12239 default:
12240 /* This case represents statements to be executed when an
12241 exception occurs. Those statements are implicitly followed
12242 by a RESX statement to resume execution after the exception.
12243 So in this case the TRY_CATCH never falls through. */
12244 return false;
12248 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
12249 need not be 100% accurate; simply be conservative and return true if we
12250 don't know. This is used only to avoid stupidly generating extra code.
12251 If we're wrong, we'll just delete the extra code later. */
12253 bool
12254 block_may_fallthru (const_tree block)
12256 /* This CONST_CAST is okay because expr_last returns its argument
12257 unmodified and we assign it to a const_tree. */
12258 const_tree stmt = expr_last (CONST_CAST_TREE (block));
12260 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
12262 case GOTO_EXPR:
12263 case RETURN_EXPR:
12264 /* Easy cases. If the last statement of the block implies
12265 control transfer, then we can't fall through. */
12266 return false;
12268 case SWITCH_EXPR:
12269 /* If SWITCH_LABELS is set, this is lowered, and represents a
12270 branch to a selected label and hence can not fall through.
12271 Otherwise SWITCH_BODY is set, and the switch can fall
12272 through. */
12273 return SWITCH_LABELS (stmt) == NULL_TREE;
12275 case COND_EXPR:
12276 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
12277 return true;
12278 return block_may_fallthru (COND_EXPR_ELSE (stmt));
12280 case BIND_EXPR:
12281 return block_may_fallthru (BIND_EXPR_BODY (stmt));
12283 case TRY_CATCH_EXPR:
12284 return try_catch_may_fallthru (stmt);
12286 case TRY_FINALLY_EXPR:
12287 /* The finally clause is always executed after the try clause,
12288 so if it does not fall through, then the try-finally will not
12289 fall through. Otherwise, if the try clause does not fall
12290 through, then when the finally clause falls through it will
12291 resume execution wherever the try clause was going. So the
12292 whole try-finally will only fall through if both the try
12293 clause and the finally clause fall through. */
12294 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
12295 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
12297 case MODIFY_EXPR:
12298 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
12299 stmt = TREE_OPERAND (stmt, 1);
12300 else
12301 return true;
12302 /* FALLTHRU */
12304 case CALL_EXPR:
12305 /* Functions that do not return do not fall through. */
12306 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
12308 case CLEANUP_POINT_EXPR:
12309 return block_may_fallthru (TREE_OPERAND (stmt, 0));
12311 case TARGET_EXPR:
12312 return block_may_fallthru (TREE_OPERAND (stmt, 1));
12314 case ERROR_MARK:
12315 return true;
12317 default:
12318 return lang_hooks.block_may_fallthru (stmt);
12322 /* True if we are using EH to handle cleanups. */
12323 static bool using_eh_for_cleanups_flag = false;
12325 /* This routine is called from front ends to indicate eh should be used for
12326 cleanups. */
12327 void
12328 using_eh_for_cleanups (void)
12330 using_eh_for_cleanups_flag = true;
12333 /* Query whether EH is used for cleanups. */
12334 bool
12335 using_eh_for_cleanups_p (void)
12337 return using_eh_for_cleanups_flag;
12340 /* Wrapper for tree_code_name to ensure that tree code is valid */
12341 const char *
12342 get_tree_code_name (enum tree_code code)
12344 const char *invalid = "<invalid tree code>";
12346 if (code >= MAX_TREE_CODES)
12347 return invalid;
12349 return tree_code_name[code];
12352 /* Drops the TREE_OVERFLOW flag from T. */
12354 tree
12355 drop_tree_overflow (tree t)
12357 gcc_checking_assert (TREE_OVERFLOW (t));
12359 /* For tree codes with a sharing machinery re-build the result. */
12360 if (TREE_CODE (t) == INTEGER_CST)
12361 return wide_int_to_tree (TREE_TYPE (t), t);
12363 /* Otherwise, as all tcc_constants are possibly shared, copy the node
12364 and drop the flag. */
12365 t = copy_node (t);
12366 TREE_OVERFLOW (t) = 0;
12367 return t;
12370 /* Given a memory reference expression T, return its base address.
12371 The base address of a memory reference expression is the main
12372 object being referenced. For instance, the base address for
12373 'array[i].fld[j]' is 'array'. You can think of this as stripping
12374 away the offset part from a memory address.
12376 This function calls handled_component_p to strip away all the inner
12377 parts of the memory reference until it reaches the base object. */
12379 tree
12380 get_base_address (tree t)
12382 while (handled_component_p (t))
12383 t = TREE_OPERAND (t, 0);
12385 if ((TREE_CODE (t) == MEM_REF
12386 || TREE_CODE (t) == TARGET_MEM_REF)
12387 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
12388 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
12390 /* ??? Either the alias oracle or all callers need to properly deal
12391 with WITH_SIZE_EXPRs before we can look through those. */
12392 if (TREE_CODE (t) == WITH_SIZE_EXPR)
12393 return NULL_TREE;
12395 return t;
12398 /* Return the machine mode of T. For vectors, returns the mode of the
12399 inner type. The main use case is to feed the result to HONOR_NANS,
12400 avoiding the BLKmode that a direct TYPE_MODE (T) might return. */
12402 machine_mode
12403 element_mode (const_tree t)
12405 if (!TYPE_P (t))
12406 t = TREE_TYPE (t);
12407 if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE)
12408 t = TREE_TYPE (t);
12409 return TYPE_MODE (t);
12412 #include "gt-tree.h"