* c/c-typeck.c (build_binary_op): Check for invalid comparison
[official-gcc.git] / gcc / tree.c
blob8d14bebf995731baab1e3ce987dfe4ae2f3d3c59
1 /* Language-independent node constructors for parse phase of GNU compiler.
2 Copyright (C) 1987-2014 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 "tree.h"
36 #include "tree-upc.h"
37 #include "stor-layout.h"
38 #include "calls.h"
39 #include "attribs.h"
40 #include "varasm.h"
41 #include "tm_p.h"
42 #include "function.h"
43 #include "obstack.h"
44 #include "toplev.h" /* get_random_seed */
45 #include "hashtab.h"
46 #include "filenames.h"
47 #include "output.h"
48 #include "target.h"
49 #include "common/common-target.h"
50 #include "langhooks.h"
51 #include "tree-inline.h"
52 #include "tree-iterator.h"
53 #include "basic-block.h"
54 #include "bitmap.h"
55 #include "pointer-set.h"
56 #include "tree-ssa-alias.h"
57 #include "internal-fn.h"
58 #include "gimple-expr.h"
59 #include "is-a.h"
60 #include "gimple.h"
61 #include "gimple-iterator.h"
62 #include "gimplify.h"
63 #include "gimple-ssa.h"
64 #include "cgraph.h"
65 #include "tree-phinodes.h"
66 #include "stringpool.h"
67 #include "tree-ssanames.h"
68 #include "expr.h"
69 #include "tree-dfa.h"
70 #include "params.h"
71 #include "tree-pass.h"
72 #include "langhooks-def.h"
73 #include "diagnostic.h"
74 #include "tree-diagnostic.h"
75 #include "tree-pretty-print.h"
76 #include "except.h"
77 #include "debug.h"
78 #include "intl.h"
80 /* Tree code classes. */
82 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
83 #define END_OF_BASE_TREE_CODES tcc_exceptional,
85 const enum tree_code_class tree_code_type[] = {
86 #include "all-tree.def"
89 #undef DEFTREECODE
90 #undef END_OF_BASE_TREE_CODES
92 /* Table indexed by tree code giving number of expression
93 operands beyond the fixed part of the node structure.
94 Not used for types or decls. */
96 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
97 #define END_OF_BASE_TREE_CODES 0,
99 const unsigned char tree_code_length[] = {
100 #include "all-tree.def"
103 #undef DEFTREECODE
104 #undef END_OF_BASE_TREE_CODES
106 /* Names of tree components.
107 Used for printing out the tree and error messages. */
108 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
109 #define END_OF_BASE_TREE_CODES "@dummy",
111 static const char *const tree_code_name[] = {
112 #include "all-tree.def"
115 #undef DEFTREECODE
116 #undef END_OF_BASE_TREE_CODES
118 /* Each tree code class has an associated string representation.
119 These must correspond to the tree_code_class entries. */
121 const char *const tree_code_class_strings[] =
123 "exceptional",
124 "constant",
125 "type",
126 "declaration",
127 "reference",
128 "comparison",
129 "unary",
130 "binary",
131 "statement",
132 "vl_exp",
133 "expression"
136 /* obstack.[ch] explicitly declined to prototype this. */
137 extern int _obstack_allocated_p (struct obstack *h, void *obj);
139 /* Statistics-gathering stuff. */
141 static int tree_code_counts[MAX_TREE_CODES];
142 int tree_node_counts[(int) all_kinds];
143 int tree_node_sizes[(int) all_kinds];
145 /* Keep in sync with tree.h:enum tree_node_kind. */
146 static const char * const tree_node_kind_names[] = {
147 "decls",
148 "types",
149 "blocks",
150 "stmts",
151 "refs",
152 "exprs",
153 "constants",
154 "identifiers",
155 "vecs",
156 "binfos",
157 "ssa names",
158 "constructors",
159 "random kinds",
160 "lang_decl kinds",
161 "lang_type kinds",
162 "omp clauses",
165 /* Unique id for next decl created. */
166 static GTY(()) int next_decl_uid;
167 /* Unique id for next type created. */
168 static GTY(()) int next_type_uid = 1;
169 /* Unique id for next debug decl created. Use negative numbers,
170 to catch erroneous uses. */
171 static GTY(()) int next_debug_decl_uid;
173 /* Since we cannot rehash a type after it is in the table, we have to
174 keep the hash code. */
176 struct GTY(()) type_hash {
177 unsigned long hash;
178 tree type;
181 /* Initial size of the hash table (rounded to next prime). */
182 #define TYPE_HASH_INITIAL_SIZE 1000
184 /* Now here is the hash table. When recording a type, it is added to
185 the slot whose index is the hash code. Note that the hash table is
186 used for several kinds of types (function types, array types and
187 array index range types, for now). While all these live in the
188 same table, they are completely independent, and the hash code is
189 computed differently for each of these. */
191 static GTY ((if_marked ("type_hash_marked_p"), param_is (struct type_hash)))
192 htab_t type_hash_table;
195 /* Hash table and temporary node for larger integer const values. */
196 static GTY (()) tree int_cst_node;
197 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
198 htab_t int_cst_hash_table;
200 /* Hash table for optimization flags and target option flags. Use the same
201 hash table for both sets of options. Nodes for building the current
202 optimization and target option nodes. The assumption is most of the time
203 the options created will already be in the hash table, so we avoid
204 allocating and freeing up a node repeatably. */
205 static GTY (()) tree cl_optimization_node;
206 static GTY (()) tree cl_target_option_node;
207 static GTY ((if_marked ("ggc_marked_p"), param_is (union tree_node)))
208 htab_t cl_option_hash_table;
210 /* General tree->tree mapping structure for use in hash tables. */
213 static GTY ((if_marked ("tree_decl_map_marked_p"), param_is (struct tree_decl_map)))
214 htab_t debug_expr_for_decl;
216 static GTY ((if_marked ("tree_decl_map_marked_p"), param_is (struct tree_decl_map)))
217 htab_t value_expr_for_decl;
219 static GTY ((if_marked ("tree_vec_map_marked_p"), param_is (struct tree_vec_map)))
220 htab_t debug_args_for_decl;
222 static GTY ((if_marked ("tree_priority_map_marked_p"),
223 param_is (struct tree_priority_map)))
224 htab_t init_priority_for_decl;
226 static void set_type_quals (tree, int, tree);
227 static int type_hash_eq (const void *, const void *);
228 static hashval_t type_hash_hash (const void *);
229 static hashval_t int_cst_hash_hash (const void *);
230 static int int_cst_hash_eq (const void *, const void *);
231 static hashval_t cl_option_hash_hash (const void *);
232 static int cl_option_hash_eq (const void *, const void *);
233 static void print_type_hash_statistics (void);
234 static void print_debug_expr_statistics (void);
235 static void print_value_expr_statistics (void);
236 static int type_hash_marked_p (const void *);
237 static unsigned int type_hash_list (const_tree, hashval_t);
238 static unsigned int attribute_hash_list (const_tree, hashval_t);
239 static bool decls_same_for_odr (tree decl1, tree decl2);
241 tree global_trees[TI_MAX];
242 tree integer_types[itk_none];
244 unsigned char tree_contains_struct[MAX_TREE_CODES][64];
246 /* Number of operands for each OpenMP clause. */
247 unsigned const char omp_clause_num_ops[] =
249 0, /* OMP_CLAUSE_ERROR */
250 1, /* OMP_CLAUSE_PRIVATE */
251 1, /* OMP_CLAUSE_SHARED */
252 1, /* OMP_CLAUSE_FIRSTPRIVATE */
253 2, /* OMP_CLAUSE_LASTPRIVATE */
254 4, /* OMP_CLAUSE_REDUCTION */
255 1, /* OMP_CLAUSE_COPYIN */
256 1, /* OMP_CLAUSE_COPYPRIVATE */
257 2, /* OMP_CLAUSE_LINEAR */
258 2, /* OMP_CLAUSE_ALIGNED */
259 1, /* OMP_CLAUSE_DEPEND */
260 1, /* OMP_CLAUSE_UNIFORM */
261 2, /* OMP_CLAUSE_FROM */
262 2, /* OMP_CLAUSE_TO */
263 2, /* OMP_CLAUSE_MAP */
264 1, /* OMP_CLAUSE__LOOPTEMP_ */
265 1, /* OMP_CLAUSE_IF */
266 1, /* OMP_CLAUSE_NUM_THREADS */
267 1, /* OMP_CLAUSE_SCHEDULE */
268 0, /* OMP_CLAUSE_NOWAIT */
269 0, /* OMP_CLAUSE_ORDERED */
270 0, /* OMP_CLAUSE_DEFAULT */
271 3, /* OMP_CLAUSE_COLLAPSE */
272 0, /* OMP_CLAUSE_UNTIED */
273 1, /* OMP_CLAUSE_FINAL */
274 0, /* OMP_CLAUSE_MERGEABLE */
275 1, /* OMP_CLAUSE_DEVICE */
276 1, /* OMP_CLAUSE_DIST_SCHEDULE */
277 0, /* OMP_CLAUSE_INBRANCH */
278 0, /* OMP_CLAUSE_NOTINBRANCH */
279 1, /* OMP_CLAUSE_NUM_TEAMS */
280 1, /* OMP_CLAUSE_THREAD_LIMIT */
281 0, /* OMP_CLAUSE_PROC_BIND */
282 1, /* OMP_CLAUSE_SAFELEN */
283 1, /* OMP_CLAUSE_SIMDLEN */
284 0, /* OMP_CLAUSE_FOR */
285 0, /* OMP_CLAUSE_PARALLEL */
286 0, /* OMP_CLAUSE_SECTIONS */
287 0, /* OMP_CLAUSE_TASKGROUP */
288 1, /* OMP_CLAUSE__SIMDUID_ */
291 const char * const omp_clause_code_name[] =
293 "error_clause",
294 "private",
295 "shared",
296 "firstprivate",
297 "lastprivate",
298 "reduction",
299 "copyin",
300 "copyprivate",
301 "linear",
302 "aligned",
303 "depend",
304 "uniform",
305 "from",
306 "to",
307 "map",
308 "_looptemp_",
309 "if",
310 "num_threads",
311 "schedule",
312 "nowait",
313 "ordered",
314 "default",
315 "collapse",
316 "untied",
317 "final",
318 "mergeable",
319 "device",
320 "dist_schedule",
321 "inbranch",
322 "notinbranch",
323 "num_teams",
324 "thread_limit",
325 "proc_bind",
326 "safelen",
327 "simdlen",
328 "for",
329 "parallel",
330 "sections",
331 "taskgroup",
332 "_simduid_"
336 /* Return the tree node structure used by tree code CODE. */
338 static inline enum tree_node_structure_enum
339 tree_node_structure_for_code (enum tree_code code)
341 switch (TREE_CODE_CLASS (code))
343 case tcc_declaration:
345 switch (code)
347 case FIELD_DECL:
348 return TS_FIELD_DECL;
349 case PARM_DECL:
350 return TS_PARM_DECL;
351 case VAR_DECL:
352 return TS_VAR_DECL;
353 case LABEL_DECL:
354 return TS_LABEL_DECL;
355 case RESULT_DECL:
356 return TS_RESULT_DECL;
357 case DEBUG_EXPR_DECL:
358 return TS_DECL_WRTL;
359 case CONST_DECL:
360 return TS_CONST_DECL;
361 case TYPE_DECL:
362 return TS_TYPE_DECL;
363 case FUNCTION_DECL:
364 return TS_FUNCTION_DECL;
365 case TRANSLATION_UNIT_DECL:
366 return TS_TRANSLATION_UNIT_DECL;
367 default:
368 return TS_DECL_NON_COMMON;
371 case tcc_type:
372 return TS_TYPE_NON_COMMON;
373 case tcc_reference:
374 case tcc_comparison:
375 case tcc_unary:
376 case tcc_binary:
377 case tcc_expression:
378 case tcc_statement:
379 case tcc_vl_exp:
380 return TS_EXP;
381 default: /* tcc_constant and tcc_exceptional */
382 break;
384 switch (code)
386 /* tcc_constant cases. */
387 case INTEGER_CST: return TS_INT_CST;
388 case REAL_CST: return TS_REAL_CST;
389 case FIXED_CST: return TS_FIXED_CST;
390 case COMPLEX_CST: return TS_COMPLEX;
391 case VECTOR_CST: return TS_VECTOR;
392 case STRING_CST: return TS_STRING;
393 /* tcc_exceptional cases. */
394 case ERROR_MARK: return TS_COMMON;
395 case IDENTIFIER_NODE: return TS_IDENTIFIER;
396 case TREE_LIST: return TS_LIST;
397 case TREE_VEC: return TS_VEC;
398 case SSA_NAME: return TS_SSA_NAME;
399 case PLACEHOLDER_EXPR: return TS_COMMON;
400 case STATEMENT_LIST: return TS_STATEMENT_LIST;
401 case BLOCK: return TS_BLOCK;
402 case CONSTRUCTOR: return TS_CONSTRUCTOR;
403 case TREE_BINFO: return TS_BINFO;
404 case OMP_CLAUSE: return TS_OMP_CLAUSE;
405 case OPTIMIZATION_NODE: return TS_OPTIMIZATION;
406 case TARGET_OPTION_NODE: return TS_TARGET_OPTION;
408 default:
409 gcc_unreachable ();
414 /* Initialize tree_contains_struct to describe the hierarchy of tree
415 nodes. */
417 static void
418 initialize_tree_contains_struct (void)
420 unsigned i;
422 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++)
424 enum tree_code code;
425 enum tree_node_structure_enum ts_code;
427 code = (enum tree_code) i;
428 ts_code = tree_node_structure_for_code (code);
430 /* Mark the TS structure itself. */
431 tree_contains_struct[code][ts_code] = 1;
433 /* Mark all the structures that TS is derived from. */
434 switch (ts_code)
436 case TS_TYPED:
437 case TS_BLOCK:
438 MARK_TS_BASE (code);
439 break;
441 case TS_COMMON:
442 case TS_INT_CST:
443 case TS_REAL_CST:
444 case TS_FIXED_CST:
445 case TS_VECTOR:
446 case TS_STRING:
447 case TS_COMPLEX:
448 case TS_SSA_NAME:
449 case TS_CONSTRUCTOR:
450 case TS_EXP:
451 case TS_STATEMENT_LIST:
452 MARK_TS_TYPED (code);
453 break;
455 case TS_IDENTIFIER:
456 case TS_DECL_MINIMAL:
457 case TS_TYPE_COMMON:
458 case TS_LIST:
459 case TS_VEC:
460 case TS_BINFO:
461 case TS_OMP_CLAUSE:
462 case TS_OPTIMIZATION:
463 case TS_TARGET_OPTION:
464 MARK_TS_COMMON (code);
465 break;
467 case TS_TYPE_WITH_LANG_SPECIFIC:
468 MARK_TS_TYPE_COMMON (code);
469 break;
471 case TS_TYPE_NON_COMMON:
472 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code);
473 break;
475 case TS_DECL_COMMON:
476 MARK_TS_DECL_MINIMAL (code);
477 break;
479 case TS_DECL_WRTL:
480 case TS_CONST_DECL:
481 MARK_TS_DECL_COMMON (code);
482 break;
484 case TS_DECL_NON_COMMON:
485 MARK_TS_DECL_WITH_VIS (code);
486 break;
488 case TS_DECL_WITH_VIS:
489 case TS_PARM_DECL:
490 case TS_LABEL_DECL:
491 case TS_RESULT_DECL:
492 MARK_TS_DECL_WRTL (code);
493 break;
495 case TS_FIELD_DECL:
496 MARK_TS_DECL_COMMON (code);
497 break;
499 case TS_VAR_DECL:
500 MARK_TS_DECL_WITH_VIS (code);
501 break;
503 case TS_TYPE_DECL:
504 case TS_FUNCTION_DECL:
505 MARK_TS_DECL_NON_COMMON (code);
506 break;
508 case TS_TRANSLATION_UNIT_DECL:
509 MARK_TS_DECL_COMMON (code);
510 break;
512 default:
513 gcc_unreachable ();
517 /* Basic consistency checks for attributes used in fold. */
518 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]);
519 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]);
520 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]);
521 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]);
522 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]);
523 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]);
524 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]);
525 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]);
526 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]);
527 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]);
528 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]);
529 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]);
530 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]);
531 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]);
532 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]);
533 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]);
534 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]);
535 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]);
536 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]);
537 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]);
538 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]);
539 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]);
540 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]);
541 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]);
542 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]);
543 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]);
544 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]);
545 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]);
546 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]);
547 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]);
548 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]);
549 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]);
550 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]);
551 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]);
552 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]);
553 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]);
554 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]);
555 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]);
556 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]);
557 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]);
561 /* Init tree.c. */
563 void
564 init_ttree (void)
566 /* Initialize the hash table of types. */
567 type_hash_table = htab_create_ggc (TYPE_HASH_INITIAL_SIZE, type_hash_hash,
568 type_hash_eq, 0);
570 /* Initialize hash table used to manage UPC blocking factors. */
571 upc_block_factor_lookup_init ();
573 debug_expr_for_decl = htab_create_ggc (512, tree_decl_map_hash,
574 tree_decl_map_eq, 0);
576 value_expr_for_decl = htab_create_ggc (512, tree_decl_map_hash,
577 tree_decl_map_eq, 0);
578 init_priority_for_decl = htab_create_ggc (512, tree_priority_map_hash,
579 tree_priority_map_eq, 0);
581 int_cst_hash_table = htab_create_ggc (1024, int_cst_hash_hash,
582 int_cst_hash_eq, NULL);
584 int_cst_node = make_node (INTEGER_CST);
586 cl_option_hash_table = htab_create_ggc (64, cl_option_hash_hash,
587 cl_option_hash_eq, NULL);
589 cl_optimization_node = make_node (OPTIMIZATION_NODE);
590 cl_target_option_node = make_node (TARGET_OPTION_NODE);
592 /* Initialize the tree_contains_struct array. */
593 initialize_tree_contains_struct ();
594 lang_hooks.init_ts ();
598 /* The name of the object as the assembler will see it (but before any
599 translations made by ASM_OUTPUT_LABELREF). Often this is the same
600 as DECL_NAME. It is an IDENTIFIER_NODE. */
601 tree
602 decl_assembler_name (tree decl)
604 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
605 lang_hooks.set_decl_assembler_name (decl);
606 return DECL_WITH_VIS_CHECK (decl)->decl_with_vis.assembler_name;
609 /* Compute the number of bytes occupied by a tree with code CODE.
610 This function cannot be used for nodes that have variable sizes,
611 including TREE_VEC, STRING_CST, and CALL_EXPR. */
612 size_t
613 tree_code_size (enum tree_code code)
615 switch (TREE_CODE_CLASS (code))
617 case tcc_declaration: /* A decl node */
619 switch (code)
621 case FIELD_DECL:
622 return sizeof (struct tree_field_decl);
623 case PARM_DECL:
624 return sizeof (struct tree_parm_decl);
625 case VAR_DECL:
626 return sizeof (struct tree_var_decl);
627 case LABEL_DECL:
628 return sizeof (struct tree_label_decl);
629 case RESULT_DECL:
630 return sizeof (struct tree_result_decl);
631 case CONST_DECL:
632 return sizeof (struct tree_const_decl);
633 case TYPE_DECL:
634 return sizeof (struct tree_type_decl);
635 case FUNCTION_DECL:
636 return sizeof (struct tree_function_decl);
637 case DEBUG_EXPR_DECL:
638 return sizeof (struct tree_decl_with_rtl);
639 default:
640 return sizeof (struct tree_decl_non_common);
644 case tcc_type: /* a type node */
645 return sizeof (struct tree_type_non_common);
647 case tcc_reference: /* a reference */
648 case tcc_expression: /* an expression */
649 case tcc_statement: /* an expression with side effects */
650 case tcc_comparison: /* a comparison expression */
651 case tcc_unary: /* a unary arithmetic expression */
652 case tcc_binary: /* a binary arithmetic expression */
653 return (sizeof (struct tree_exp)
654 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree));
656 case tcc_constant: /* a constant */
657 switch (code)
659 case INTEGER_CST: return sizeof (struct tree_int_cst);
660 case REAL_CST: return sizeof (struct tree_real_cst);
661 case FIXED_CST: return sizeof (struct tree_fixed_cst);
662 case COMPLEX_CST: return sizeof (struct tree_complex);
663 case VECTOR_CST: return sizeof (struct tree_vector);
664 case STRING_CST: gcc_unreachable ();
665 default:
666 return lang_hooks.tree_size (code);
669 case tcc_exceptional: /* something random, like an identifier. */
670 switch (code)
672 case IDENTIFIER_NODE: return lang_hooks.identifier_size;
673 case TREE_LIST: return sizeof (struct tree_list);
675 case ERROR_MARK:
676 case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
678 case TREE_VEC:
679 case OMP_CLAUSE: gcc_unreachable ();
681 case SSA_NAME: return sizeof (struct tree_ssa_name);
683 case STATEMENT_LIST: return sizeof (struct tree_statement_list);
684 case BLOCK: return sizeof (struct tree_block);
685 case CONSTRUCTOR: return sizeof (struct tree_constructor);
686 case OPTIMIZATION_NODE: return sizeof (struct tree_optimization_option);
687 case TARGET_OPTION_NODE: return sizeof (struct tree_target_option);
689 default:
690 return lang_hooks.tree_size (code);
693 default:
694 gcc_unreachable ();
698 /* Compute the number of bytes occupied by NODE. This routine only
699 looks at TREE_CODE, except for those nodes that have variable sizes. */
700 size_t
701 tree_size (const_tree node)
703 const enum tree_code code = TREE_CODE (node);
704 switch (code)
706 case TREE_BINFO:
707 return (offsetof (struct tree_binfo, base_binfos)
708 + vec<tree, va_gc>
709 ::embedded_size (BINFO_N_BASE_BINFOS (node)));
711 case TREE_VEC:
712 return (sizeof (struct tree_vec)
713 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree));
715 case VECTOR_CST:
716 return (sizeof (struct tree_vector)
717 + (TYPE_VECTOR_SUBPARTS (TREE_TYPE (node)) - 1) * sizeof (tree));
719 case STRING_CST:
720 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1;
722 case OMP_CLAUSE:
723 return (sizeof (struct tree_omp_clause)
724 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1)
725 * sizeof (tree));
727 default:
728 if (TREE_CODE_CLASS (code) == tcc_vl_exp)
729 return (sizeof (struct tree_exp)
730 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree));
731 else
732 return tree_code_size (code);
736 /* Record interesting allocation statistics for a tree node with CODE
737 and LENGTH. */
739 static void
740 record_node_allocation_statistics (enum tree_code code ATTRIBUTE_UNUSED,
741 size_t length ATTRIBUTE_UNUSED)
743 enum tree_code_class type = TREE_CODE_CLASS (code);
744 tree_node_kind kind;
746 if (!GATHER_STATISTICS)
747 return;
749 switch (type)
751 case tcc_declaration: /* A decl node */
752 kind = d_kind;
753 break;
755 case tcc_type: /* a type node */
756 kind = t_kind;
757 break;
759 case tcc_statement: /* an expression with side effects */
760 kind = s_kind;
761 break;
763 case tcc_reference: /* a reference */
764 kind = r_kind;
765 break;
767 case tcc_expression: /* an expression */
768 case tcc_comparison: /* a comparison expression */
769 case tcc_unary: /* a unary arithmetic expression */
770 case tcc_binary: /* a binary arithmetic expression */
771 kind = e_kind;
772 break;
774 case tcc_constant: /* a constant */
775 kind = c_kind;
776 break;
778 case tcc_exceptional: /* something random, like an identifier. */
779 switch (code)
781 case IDENTIFIER_NODE:
782 kind = id_kind;
783 break;
785 case TREE_VEC:
786 kind = vec_kind;
787 break;
789 case TREE_BINFO:
790 kind = binfo_kind;
791 break;
793 case SSA_NAME:
794 kind = ssa_name_kind;
795 break;
797 case BLOCK:
798 kind = b_kind;
799 break;
801 case CONSTRUCTOR:
802 kind = constr_kind;
803 break;
805 case OMP_CLAUSE:
806 kind = omp_clause_kind;
807 break;
809 default:
810 kind = x_kind;
811 break;
813 break;
815 case tcc_vl_exp:
816 kind = e_kind;
817 break;
819 default:
820 gcc_unreachable ();
823 tree_code_counts[(int) code]++;
824 tree_node_counts[(int) kind]++;
825 tree_node_sizes[(int) kind] += length;
828 /* Allocate and return a new UID from the DECL_UID namespace. */
831 allocate_decl_uid (void)
833 return next_decl_uid++;
836 /* Return a newly allocated node of code CODE. For decl and type
837 nodes, some other fields are initialized. The rest of the node is
838 initialized to zero. This function cannot be used for TREE_VEC or
839 OMP_CLAUSE nodes, which is enforced by asserts in tree_code_size.
841 Achoo! I got a code in the node. */
843 tree
844 make_node_stat (enum tree_code code MEM_STAT_DECL)
846 tree t;
847 enum tree_code_class type = TREE_CODE_CLASS (code);
848 size_t length = tree_code_size (code);
850 record_node_allocation_statistics (code, length);
852 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
853 TREE_SET_CODE (t, code);
855 switch (type)
857 case tcc_statement:
858 TREE_SIDE_EFFECTS (t) = 1;
859 break;
861 case tcc_declaration:
862 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
864 if (code == FUNCTION_DECL)
866 DECL_ALIGN (t) = FUNCTION_BOUNDARY;
867 DECL_MODE (t) = FUNCTION_MODE;
869 else
870 DECL_ALIGN (t) = 1;
872 DECL_SOURCE_LOCATION (t) = input_location;
873 if (TREE_CODE (t) == DEBUG_EXPR_DECL)
874 DECL_UID (t) = --next_debug_decl_uid;
875 else
877 DECL_UID (t) = allocate_decl_uid ();
878 SET_DECL_PT_UID (t, -1);
880 if (TREE_CODE (t) == LABEL_DECL)
881 LABEL_DECL_UID (t) = -1;
883 break;
885 case tcc_type:
886 TYPE_UID (t) = next_type_uid++;
887 TYPE_ALIGN (t) = BITS_PER_UNIT;
888 TYPE_USER_ALIGN (t) = 0;
889 TYPE_MAIN_VARIANT (t) = t;
890 TYPE_CANONICAL (t) = t;
892 /* Default to no attributes for type, but let target change that. */
893 TYPE_ATTRIBUTES (t) = NULL_TREE;
894 targetm.set_default_type_attributes (t);
896 /* We have not yet computed the alias set for this type. */
897 TYPE_ALIAS_SET (t) = -1;
898 break;
900 case tcc_constant:
901 TREE_CONSTANT (t) = 1;
902 break;
904 case tcc_expression:
905 switch (code)
907 case INIT_EXPR:
908 case MODIFY_EXPR:
909 case VA_ARG_EXPR:
910 case PREDECREMENT_EXPR:
911 case PREINCREMENT_EXPR:
912 case POSTDECREMENT_EXPR:
913 case POSTINCREMENT_EXPR:
914 /* All of these have side-effects, no matter what their
915 operands are. */
916 TREE_SIDE_EFFECTS (t) = 1;
917 break;
919 default:
920 break;
922 break;
924 default:
925 /* Other classes need no special treatment. */
926 break;
929 return t;
932 /* Return a new node with the same contents as NODE except that its
933 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
935 tree
936 copy_node_stat (tree node MEM_STAT_DECL)
938 tree t;
939 enum tree_code code = TREE_CODE (node);
940 size_t length;
942 gcc_assert (code != STATEMENT_LIST);
944 length = tree_size (node);
945 record_node_allocation_statistics (code, length);
946 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
947 memcpy (t, node, length);
949 if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
950 TREE_CHAIN (t) = 0;
951 TREE_ASM_WRITTEN (t) = 0;
952 TREE_VISITED (t) = 0;
954 if (TREE_CODE_CLASS (code) == tcc_declaration)
956 if (code == DEBUG_EXPR_DECL)
957 DECL_UID (t) = --next_debug_decl_uid;
958 else
960 DECL_UID (t) = allocate_decl_uid ();
961 if (DECL_PT_UID_SET_P (node))
962 SET_DECL_PT_UID (t, DECL_PT_UID (node));
964 if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL)
965 && DECL_HAS_VALUE_EXPR_P (node))
967 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node));
968 DECL_HAS_VALUE_EXPR_P (t) = 1;
970 /* DECL_DEBUG_EXPR is copied explicitely by callers. */
971 if (TREE_CODE (node) == VAR_DECL)
972 DECL_HAS_DEBUG_EXPR_P (t) = 0;
973 if (TREE_CODE (node) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (node))
975 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node));
976 DECL_HAS_INIT_PRIORITY_P (t) = 1;
978 if (TREE_CODE (node) == FUNCTION_DECL)
979 DECL_STRUCT_FUNCTION (t) = NULL;
981 else if (TREE_CODE_CLASS (code) == tcc_type)
983 TYPE_UID (t) = next_type_uid++;
984 /* The following is so that the debug code for
985 the copy is different from the original type.
986 The two statements usually duplicate each other
987 (because they clear fields of the same union),
988 but the optimizer should catch that. */
989 TYPE_SYMTAB_POINTER (t) = 0;
990 TYPE_SYMTAB_ADDRESS (t) = 0;
992 /* Do not copy the values cache. */
993 if (TYPE_CACHED_VALUES_P (t))
995 TYPE_CACHED_VALUES_P (t) = 0;
996 TYPE_CACHED_VALUES (t) = NULL_TREE;
999 if (TYPE_HAS_UPC_BLOCK_FACTOR (node))
1000 SET_TYPE_UPC_BLOCK_FACTOR (t, TYPE_UPC_BLOCK_FACTOR (node));
1003 return t;
1006 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field.
1007 For example, this can copy a list made of TREE_LIST nodes. */
1009 tree
1010 copy_list (tree list)
1012 tree head;
1013 tree prev, next;
1015 if (list == 0)
1016 return 0;
1018 head = prev = copy_node (list);
1019 next = TREE_CHAIN (list);
1020 while (next)
1022 TREE_CHAIN (prev) = copy_node (next);
1023 prev = TREE_CHAIN (prev);
1024 next = TREE_CHAIN (next);
1026 return head;
1030 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1032 tree
1033 build_int_cst (tree type, HOST_WIDE_INT low)
1035 /* Support legacy code. */
1036 if (!type)
1037 type = integer_type_node;
1039 return double_int_to_tree (type, double_int::from_shwi (low));
1042 /* Create an INT_CST node with a LOW value sign extended to TYPE. */
1044 tree
1045 build_int_cst_type (tree type, HOST_WIDE_INT low)
1047 gcc_assert (type);
1049 return double_int_to_tree (type, double_int::from_shwi (low));
1052 /* Constructs tree in type TYPE from with value given by CST. Signedness
1053 of CST is assumed to be the same as the signedness of TYPE. */
1055 tree
1056 double_int_to_tree (tree type, double_int cst)
1058 bool sign_extended_type = !TYPE_UNSIGNED (type);
1060 cst = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1062 return build_int_cst_wide (type, cst.low, cst.high);
1065 /* Returns true if CST fits into range of TYPE. Signedness of CST is assumed
1066 to be the same as the signedness of TYPE. */
1068 bool
1069 double_int_fits_to_tree_p (const_tree type, double_int cst)
1071 bool sign_extended_type = !TYPE_UNSIGNED (type);
1073 double_int ext
1074 = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1076 return cst == ext;
1079 /* We force the double_int CST to the range of the type TYPE by sign or
1080 zero extending it. OVERFLOWABLE indicates if we are interested in
1081 overflow of the value, when >0 we are only interested in signed
1082 overflow, for <0 we are interested in any overflow. OVERFLOWED
1083 indicates whether overflow has already occurred. CONST_OVERFLOWED
1084 indicates whether constant overflow has already occurred. We force
1085 T's value to be within range of T's type (by setting to 0 or 1 all
1086 the bits outside the type's range). We set TREE_OVERFLOWED if,
1087 OVERFLOWED is nonzero,
1088 or OVERFLOWABLE is >0 and signed overflow occurs
1089 or OVERFLOWABLE is <0 and any overflow occurs
1090 We return a new tree node for the extended double_int. The node
1091 is shared if no overflow flags are set. */
1094 tree
1095 force_fit_type_double (tree type, double_int cst, int overflowable,
1096 bool overflowed)
1098 bool sign_extended_type = !TYPE_UNSIGNED (type);
1100 /* If we need to set overflow flags, return a new unshared node. */
1101 if (overflowed || !double_int_fits_to_tree_p (type, cst))
1103 if (overflowed
1104 || overflowable < 0
1105 || (overflowable > 0 && sign_extended_type))
1107 tree t = make_node (INTEGER_CST);
1108 TREE_INT_CST (t)
1109 = cst.ext (TYPE_PRECISION (type), !sign_extended_type);
1110 TREE_TYPE (t) = type;
1111 TREE_OVERFLOW (t) = 1;
1112 return t;
1116 /* Else build a shared node. */
1117 return double_int_to_tree (type, cst);
1120 /* These are the hash table functions for the hash table of INTEGER_CST
1121 nodes of a sizetype. */
1123 /* Return the hash code code X, an INTEGER_CST. */
1125 static hashval_t
1126 int_cst_hash_hash (const void *x)
1128 const_tree const t = (const_tree) x;
1130 return (TREE_INT_CST_HIGH (t) ^ TREE_INT_CST_LOW (t)
1131 ^ htab_hash_pointer (TREE_TYPE (t)));
1134 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node)
1135 is the same as that given by *Y, which is the same. */
1137 static int
1138 int_cst_hash_eq (const void *x, const void *y)
1140 const_tree const xt = (const_tree) x;
1141 const_tree const yt = (const_tree) y;
1143 return (TREE_TYPE (xt) == TREE_TYPE (yt)
1144 && TREE_INT_CST_HIGH (xt) == TREE_INT_CST_HIGH (yt)
1145 && TREE_INT_CST_LOW (xt) == TREE_INT_CST_LOW (yt));
1148 /* Create an INT_CST node of TYPE and value HI:LOW.
1149 The returned node is always shared. For small integers we use a
1150 per-type vector cache, for larger ones we use a single hash table. */
1152 tree
1153 build_int_cst_wide (tree type, unsigned HOST_WIDE_INT low, HOST_WIDE_INT hi)
1155 tree t;
1156 int ix = -1;
1157 int limit = 0;
1159 gcc_assert (type);
1161 switch (TREE_CODE (type))
1163 case NULLPTR_TYPE:
1164 gcc_assert (hi == 0 && low == 0);
1165 /* Fallthru. */
1167 case POINTER_TYPE:
1168 case REFERENCE_TYPE:
1169 /* Cache NULL pointer. */
1170 if (!hi && !low)
1172 limit = 1;
1173 ix = 0;
1175 break;
1177 case BOOLEAN_TYPE:
1178 /* Cache false or true. */
1179 limit = 2;
1180 if (!hi && low < 2)
1181 ix = low;
1182 break;
1184 case INTEGER_TYPE:
1185 case OFFSET_TYPE:
1186 if (TYPE_UNSIGNED (type))
1188 /* Cache 0..N */
1189 limit = INTEGER_SHARE_LIMIT;
1190 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1191 ix = low;
1193 else
1195 /* Cache -1..N */
1196 limit = INTEGER_SHARE_LIMIT + 1;
1197 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1198 ix = low + 1;
1199 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1200 ix = 0;
1202 break;
1204 case ENUMERAL_TYPE:
1205 break;
1207 default:
1208 gcc_unreachable ();
1211 if (ix >= 0)
1213 /* Look for it in the type's vector of small shared ints. */
1214 if (!TYPE_CACHED_VALUES_P (type))
1216 TYPE_CACHED_VALUES_P (type) = 1;
1217 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1220 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix);
1221 if (t)
1223 /* Make sure no one is clobbering the shared constant. */
1224 gcc_assert (TREE_TYPE (t) == type);
1225 gcc_assert (TREE_INT_CST_LOW (t) == low);
1226 gcc_assert (TREE_INT_CST_HIGH (t) == hi);
1228 else
1230 /* Create a new shared int. */
1231 t = make_node (INTEGER_CST);
1233 TREE_INT_CST_LOW (t) = low;
1234 TREE_INT_CST_HIGH (t) = hi;
1235 TREE_TYPE (t) = type;
1237 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1240 else
1242 /* Use the cache of larger shared ints. */
1243 void **slot;
1245 TREE_INT_CST_LOW (int_cst_node) = low;
1246 TREE_INT_CST_HIGH (int_cst_node) = hi;
1247 TREE_TYPE (int_cst_node) = type;
1249 slot = htab_find_slot (int_cst_hash_table, int_cst_node, INSERT);
1250 t = (tree) *slot;
1251 if (!t)
1253 /* Insert this one into the hash table. */
1254 t = int_cst_node;
1255 *slot = t;
1256 /* Make a new node for next time round. */
1257 int_cst_node = make_node (INTEGER_CST);
1261 return t;
1264 void
1265 cache_integer_cst (tree t)
1267 tree type = TREE_TYPE (t);
1268 HOST_WIDE_INT hi = TREE_INT_CST_HIGH (t);
1269 unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (t);
1270 int ix = -1;
1271 int limit = 0;
1273 gcc_assert (!TREE_OVERFLOW (t));
1275 switch (TREE_CODE (type))
1277 case NULLPTR_TYPE:
1278 gcc_assert (hi == 0 && low == 0);
1279 /* Fallthru. */
1281 case POINTER_TYPE:
1282 case REFERENCE_TYPE:
1283 /* Cache NULL pointer. */
1284 if (!hi && !low)
1286 limit = 1;
1287 ix = 0;
1289 break;
1291 case BOOLEAN_TYPE:
1292 /* Cache false or true. */
1293 limit = 2;
1294 if (!hi && low < 2)
1295 ix = low;
1296 break;
1298 case INTEGER_TYPE:
1299 case OFFSET_TYPE:
1300 if (TYPE_UNSIGNED (type))
1302 /* Cache 0..N */
1303 limit = INTEGER_SHARE_LIMIT;
1304 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1305 ix = low;
1307 else
1309 /* Cache -1..N */
1310 limit = INTEGER_SHARE_LIMIT + 1;
1311 if (!hi && low < (unsigned HOST_WIDE_INT)INTEGER_SHARE_LIMIT)
1312 ix = low + 1;
1313 else if (hi == -1 && low == -(unsigned HOST_WIDE_INT)1)
1314 ix = 0;
1316 break;
1318 case ENUMERAL_TYPE:
1319 break;
1321 default:
1322 gcc_unreachable ();
1325 if (ix >= 0)
1327 /* Look for it in the type's vector of small shared ints. */
1328 if (!TYPE_CACHED_VALUES_P (type))
1330 TYPE_CACHED_VALUES_P (type) = 1;
1331 TYPE_CACHED_VALUES (type) = make_tree_vec (limit);
1334 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE);
1335 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t;
1337 else
1339 /* Use the cache of larger shared ints. */
1340 void **slot;
1342 slot = htab_find_slot (int_cst_hash_table, t, INSERT);
1343 /* If there is already an entry for the number verify it's the
1344 same. */
1345 if (*slot)
1347 gcc_assert (TREE_INT_CST_LOW ((tree)*slot) == low
1348 && TREE_INT_CST_HIGH ((tree)*slot) == hi);
1349 return;
1351 /* Otherwise insert this one into the hash table. */
1352 *slot = t;
1357 /* Builds an integer constant in TYPE such that lowest BITS bits are ones
1358 and the rest are zeros. */
1360 tree
1361 build_low_bits_mask (tree type, unsigned bits)
1363 double_int mask;
1365 gcc_assert (bits <= TYPE_PRECISION (type));
1367 if (bits == TYPE_PRECISION (type)
1368 && !TYPE_UNSIGNED (type))
1369 /* Sign extended all-ones mask. */
1370 mask = double_int_minus_one;
1371 else
1372 mask = double_int::mask (bits);
1374 return build_int_cst_wide (type, mask.low, mask.high);
1377 /* Checks that X is integer constant that can be expressed in (unsigned)
1378 HOST_WIDE_INT without loss of precision. */
1380 bool
1381 cst_and_fits_in_hwi (const_tree x)
1383 if (TREE_CODE (x) != INTEGER_CST)
1384 return false;
1386 if (TYPE_PRECISION (TREE_TYPE (x)) > HOST_BITS_PER_WIDE_INT)
1387 return false;
1389 return (TREE_INT_CST_HIGH (x) == 0
1390 || TREE_INT_CST_HIGH (x) == -1);
1393 /* Build a newly constructed TREE_VEC node of length LEN. */
1395 tree
1396 make_vector_stat (unsigned len MEM_STAT_DECL)
1398 tree t;
1399 unsigned length = (len - 1) * sizeof (tree) + sizeof (struct tree_vector);
1401 record_node_allocation_statistics (VECTOR_CST, length);
1403 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1405 TREE_SET_CODE (t, VECTOR_CST);
1406 TREE_CONSTANT (t) = 1;
1408 return t;
1411 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1412 are in a list pointed to by VALS. */
1414 tree
1415 build_vector_stat (tree type, tree *vals MEM_STAT_DECL)
1417 int over = 0;
1418 unsigned cnt = 0;
1419 tree v = make_vector (TYPE_VECTOR_SUBPARTS (type));
1420 TREE_TYPE (v) = type;
1422 /* Iterate through elements and check for overflow. */
1423 for (cnt = 0; cnt < TYPE_VECTOR_SUBPARTS (type); ++cnt)
1425 tree value = vals[cnt];
1427 VECTOR_CST_ELT (v, cnt) = value;
1429 /* Don't crash if we get an address constant. */
1430 if (!CONSTANT_CLASS_P (value))
1431 continue;
1433 over |= TREE_OVERFLOW (value);
1436 TREE_OVERFLOW (v) = over;
1437 return v;
1440 /* Return a new VECTOR_CST node whose type is TYPE and whose values
1441 are extracted from V, a vector of CONSTRUCTOR_ELT. */
1443 tree
1444 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v)
1446 tree *vec = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (type));
1447 unsigned HOST_WIDE_INT idx;
1448 tree value;
1450 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value)
1451 vec[idx] = value;
1452 for (; idx < TYPE_VECTOR_SUBPARTS (type); ++idx)
1453 vec[idx] = build_zero_cst (TREE_TYPE (type));
1455 return build_vector (type, vec);
1458 /* Build a vector of type VECTYPE where all the elements are SCs. */
1459 tree
1460 build_vector_from_val (tree vectype, tree sc)
1462 int i, nunits = TYPE_VECTOR_SUBPARTS (vectype);
1464 if (sc == error_mark_node)
1465 return sc;
1467 /* Verify that the vector type is suitable for SC. Note that there
1468 is some inconsistency in the type-system with respect to restrict
1469 qualifications of pointers. Vector types always have a main-variant
1470 element type and the qualification is applied to the vector-type.
1471 So TREE_TYPE (vector-type) does not return a properly qualified
1472 vector element-type. */
1473 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)),
1474 TREE_TYPE (vectype)));
1476 if (CONSTANT_CLASS_P (sc))
1478 tree *v = XALLOCAVEC (tree, nunits);
1479 for (i = 0; i < nunits; ++i)
1480 v[i] = sc;
1481 return build_vector (vectype, v);
1483 else
1485 vec<constructor_elt, va_gc> *v;
1486 vec_alloc (v, nunits);
1487 for (i = 0; i < nunits; ++i)
1488 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc);
1489 return build_constructor (vectype, v);
1493 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1494 are in the vec pointed to by VALS. */
1495 tree
1496 build_constructor (tree type, vec<constructor_elt, va_gc> *vals)
1498 tree c = make_node (CONSTRUCTOR);
1499 unsigned int i;
1500 constructor_elt *elt;
1501 bool constant_p = true;
1502 bool side_effects_p = false;
1504 TREE_TYPE (c) = type;
1505 CONSTRUCTOR_ELTS (c) = vals;
1507 FOR_EACH_VEC_SAFE_ELT (vals, i, elt)
1509 /* Mostly ctors will have elts that don't have side-effects, so
1510 the usual case is to scan all the elements. Hence a single
1511 loop for both const and side effects, rather than one loop
1512 each (with early outs). */
1513 if (!TREE_CONSTANT (elt->value))
1514 constant_p = false;
1515 if (TREE_SIDE_EFFECTS (elt->value))
1516 side_effects_p = true;
1519 TREE_SIDE_EFFECTS (c) = side_effects_p;
1520 TREE_CONSTANT (c) = constant_p;
1522 return c;
1525 /* Build a CONSTRUCTOR node made of a single initializer, with the specified
1526 INDEX and VALUE. */
1527 tree
1528 build_constructor_single (tree type, tree index, tree value)
1530 vec<constructor_elt, va_gc> *v;
1531 constructor_elt elt = {index, value};
1533 vec_alloc (v, 1);
1534 v->quick_push (elt);
1536 return build_constructor (type, v);
1540 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values
1541 are in a list pointed to by VALS. */
1542 tree
1543 build_constructor_from_list (tree type, tree vals)
1545 tree t;
1546 vec<constructor_elt, va_gc> *v = NULL;
1548 if (vals)
1550 vec_alloc (v, list_length (vals));
1551 for (t = vals; t; t = TREE_CHAIN (t))
1552 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t));
1555 return build_constructor (type, v);
1558 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number
1559 of elements, provided as index/value pairs. */
1561 tree
1562 build_constructor_va (tree type, int nelts, ...)
1564 vec<constructor_elt, va_gc> *v = NULL;
1565 va_list p;
1567 va_start (p, nelts);
1568 vec_alloc (v, nelts);
1569 while (nelts--)
1571 tree index = va_arg (p, tree);
1572 tree value = va_arg (p, tree);
1573 CONSTRUCTOR_APPEND_ELT (v, index, value);
1575 va_end (p);
1576 return build_constructor (type, v);
1579 /* Return a new FIXED_CST node whose type is TYPE and value is F. */
1581 tree
1582 build_fixed (tree type, FIXED_VALUE_TYPE f)
1584 tree v;
1585 FIXED_VALUE_TYPE *fp;
1587 v = make_node (FIXED_CST);
1588 fp = ggc_alloc_fixed_value ();
1589 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE));
1591 TREE_TYPE (v) = type;
1592 TREE_FIXED_CST_PTR (v) = fp;
1593 return v;
1596 /* Return a new REAL_CST node whose type is TYPE and value is D. */
1598 tree
1599 build_real (tree type, REAL_VALUE_TYPE d)
1601 tree v;
1602 REAL_VALUE_TYPE *dp;
1603 int overflow = 0;
1605 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE.
1606 Consider doing it via real_convert now. */
1608 v = make_node (REAL_CST);
1609 dp = ggc_alloc_real_value ();
1610 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE));
1612 TREE_TYPE (v) = type;
1613 TREE_REAL_CST_PTR (v) = dp;
1614 TREE_OVERFLOW (v) = overflow;
1615 return v;
1618 /* Return a new REAL_CST node whose type is TYPE
1619 and whose value is the integer value of the INTEGER_CST node I. */
1621 REAL_VALUE_TYPE
1622 real_value_from_int_cst (const_tree type, const_tree i)
1624 REAL_VALUE_TYPE d;
1626 /* Clear all bits of the real value type so that we can later do
1627 bitwise comparisons to see if two values are the same. */
1628 memset (&d, 0, sizeof d);
1630 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode,
1631 TREE_INT_CST_LOW (i), TREE_INT_CST_HIGH (i),
1632 TYPE_UNSIGNED (TREE_TYPE (i)));
1633 return d;
1636 /* Given a tree representing an integer constant I, return a tree
1637 representing the same value as a floating-point constant of type TYPE. */
1639 tree
1640 build_real_from_int_cst (tree type, const_tree i)
1642 tree v;
1643 int overflow = TREE_OVERFLOW (i);
1645 v = build_real (type, real_value_from_int_cst (type, i));
1647 TREE_OVERFLOW (v) |= overflow;
1648 return v;
1651 /* Return a newly constructed STRING_CST node whose value is
1652 the LEN characters at STR.
1653 Note that for a C string literal, LEN should include the trailing NUL.
1654 The TREE_TYPE is not initialized. */
1656 tree
1657 build_string (int len, const char *str)
1659 tree s;
1660 size_t length;
1662 /* Do not waste bytes provided by padding of struct tree_string. */
1663 length = len + offsetof (struct tree_string, str) + 1;
1665 record_node_allocation_statistics (STRING_CST, length);
1667 s = ggc_alloc_tree_node (length);
1669 memset (s, 0, sizeof (struct tree_typed));
1670 TREE_SET_CODE (s, STRING_CST);
1671 TREE_CONSTANT (s) = 1;
1672 TREE_STRING_LENGTH (s) = len;
1673 memcpy (s->string.str, str, len);
1674 s->string.str[len] = '\0';
1676 return s;
1679 /* Return a newly constructed COMPLEX_CST node whose value is
1680 specified by the real and imaginary parts REAL and IMAG.
1681 Both REAL and IMAG should be constant nodes. TYPE, if specified,
1682 will be the type of the COMPLEX_CST; otherwise a new type will be made. */
1684 tree
1685 build_complex (tree type, tree real, tree imag)
1687 tree t = make_node (COMPLEX_CST);
1689 TREE_REALPART (t) = real;
1690 TREE_IMAGPART (t) = imag;
1691 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
1692 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
1693 return t;
1696 /* Return a constant of arithmetic type TYPE which is the
1697 multiplicative identity of the set TYPE. */
1699 tree
1700 build_one_cst (tree type)
1702 switch (TREE_CODE (type))
1704 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1705 case POINTER_TYPE: case REFERENCE_TYPE:
1706 case OFFSET_TYPE:
1707 return build_int_cst (type, 1);
1709 case REAL_TYPE:
1710 return build_real (type, dconst1);
1712 case FIXED_POINT_TYPE:
1713 /* We can only generate 1 for accum types. */
1714 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1715 return build_fixed (type, FCONST1 (TYPE_MODE (type)));
1717 case VECTOR_TYPE:
1719 tree scalar = build_one_cst (TREE_TYPE (type));
1721 return build_vector_from_val (type, scalar);
1724 case COMPLEX_TYPE:
1725 return build_complex (type,
1726 build_one_cst (TREE_TYPE (type)),
1727 build_zero_cst (TREE_TYPE (type)));
1729 default:
1730 gcc_unreachable ();
1734 /* Return an integer of type TYPE containing all 1's in as much precision as
1735 it contains, or a complex or vector whose subparts are such integers. */
1737 tree
1738 build_all_ones_cst (tree type)
1740 if (TREE_CODE (type) == COMPLEX_TYPE)
1742 tree scalar = build_all_ones_cst (TREE_TYPE (type));
1743 return build_complex (type, scalar, scalar);
1745 else
1746 return build_minus_one_cst (type);
1749 /* Return a constant of arithmetic type TYPE which is the
1750 opposite of the multiplicative identity of the set TYPE. */
1752 tree
1753 build_minus_one_cst (tree type)
1755 switch (TREE_CODE (type))
1757 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1758 case POINTER_TYPE: case REFERENCE_TYPE:
1759 case OFFSET_TYPE:
1760 return build_int_cst (type, -1);
1762 case REAL_TYPE:
1763 return build_real (type, dconstm1);
1765 case FIXED_POINT_TYPE:
1766 /* We can only generate 1 for accum types. */
1767 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type)));
1768 return build_fixed (type, fixed_from_double_int (double_int_minus_one,
1769 TYPE_MODE (type)));
1771 case VECTOR_TYPE:
1773 tree scalar = build_minus_one_cst (TREE_TYPE (type));
1775 return build_vector_from_val (type, scalar);
1778 case COMPLEX_TYPE:
1779 return build_complex (type,
1780 build_minus_one_cst (TREE_TYPE (type)),
1781 build_zero_cst (TREE_TYPE (type)));
1783 default:
1784 gcc_unreachable ();
1788 /* Build 0 constant of type TYPE. This is used by constructor folding
1789 and thus the constant should be represented in memory by
1790 zero(es). */
1792 tree
1793 build_zero_cst (tree type)
1795 switch (TREE_CODE (type))
1797 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE:
1798 case POINTER_TYPE: case REFERENCE_TYPE:
1799 case OFFSET_TYPE: case NULLPTR_TYPE:
1800 return build_int_cst (type, 0);
1802 case REAL_TYPE:
1803 return build_real (type, dconst0);
1805 case FIXED_POINT_TYPE:
1806 return build_fixed (type, FCONST0 (TYPE_MODE (type)));
1808 case VECTOR_TYPE:
1810 tree scalar = build_zero_cst (TREE_TYPE (type));
1812 return build_vector_from_val (type, scalar);
1815 case COMPLEX_TYPE:
1817 tree zero = build_zero_cst (TREE_TYPE (type));
1819 return build_complex (type, zero, zero);
1822 default:
1823 if (!AGGREGATE_TYPE_P (type))
1824 return fold_convert (type, integer_zero_node);
1825 return build_constructor (type, NULL);
1830 /* Build a BINFO with LEN language slots. */
1832 tree
1833 make_tree_binfo_stat (unsigned base_binfos MEM_STAT_DECL)
1835 tree t;
1836 size_t length = (offsetof (struct tree_binfo, base_binfos)
1837 + vec<tree, va_gc>::embedded_size (base_binfos));
1839 record_node_allocation_statistics (TREE_BINFO, length);
1841 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
1843 memset (t, 0, offsetof (struct tree_binfo, base_binfos));
1845 TREE_SET_CODE (t, TREE_BINFO);
1847 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos);
1849 return t;
1852 /* Create a CASE_LABEL_EXPR tree node and return it. */
1854 tree
1855 build_case_label (tree low_value, tree high_value, tree label_decl)
1857 tree t = make_node (CASE_LABEL_EXPR);
1859 TREE_TYPE (t) = void_type_node;
1860 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl));
1862 CASE_LOW (t) = low_value;
1863 CASE_HIGH (t) = high_value;
1864 CASE_LABEL (t) = label_decl;
1865 CASE_CHAIN (t) = NULL_TREE;
1867 return t;
1870 /* Build a newly constructed TREE_VEC node of length LEN. */
1872 tree
1873 make_tree_vec_stat (int len MEM_STAT_DECL)
1875 tree t;
1876 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1878 record_node_allocation_statistics (TREE_VEC, length);
1880 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
1882 TREE_SET_CODE (t, TREE_VEC);
1883 TREE_VEC_LENGTH (t) = len;
1885 return t;
1888 /* Grow a TREE_VEC node to new length LEN. */
1890 tree
1891 grow_tree_vec_stat (tree v, int len MEM_STAT_DECL)
1893 gcc_assert (TREE_CODE (v) == TREE_VEC);
1895 int oldlen = TREE_VEC_LENGTH (v);
1896 gcc_assert (len > oldlen);
1898 int oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec);
1899 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec);
1901 record_node_allocation_statistics (TREE_VEC, length - oldlength);
1903 v = (tree) ggc_realloc_stat (v, length PASS_MEM_STAT);
1905 TREE_VEC_LENGTH (v) = len;
1907 return v;
1910 /* Return 1 if EXPR is the integer constant zero or a complex constant
1911 of zero. */
1914 integer_zerop (const_tree expr)
1916 STRIP_NOPS (expr);
1918 switch (TREE_CODE (expr))
1920 case INTEGER_CST:
1921 return (TREE_INT_CST_LOW (expr) == 0
1922 && TREE_INT_CST_HIGH (expr) == 0);
1923 case COMPLEX_CST:
1924 return (integer_zerop (TREE_REALPART (expr))
1925 && integer_zerop (TREE_IMAGPART (expr)));
1926 case VECTOR_CST:
1928 unsigned i;
1929 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
1930 if (!integer_zerop (VECTOR_CST_ELT (expr, i)))
1931 return false;
1932 return true;
1934 default:
1935 return false;
1939 /* Return 1 if EXPR is the integer constant one or the corresponding
1940 complex constant. */
1943 integer_onep (const_tree expr)
1945 STRIP_NOPS (expr);
1947 switch (TREE_CODE (expr))
1949 case INTEGER_CST:
1950 return (TREE_INT_CST_LOW (expr) == 1
1951 && TREE_INT_CST_HIGH (expr) == 0);
1952 case COMPLEX_CST:
1953 return (integer_onep (TREE_REALPART (expr))
1954 && integer_zerop (TREE_IMAGPART (expr)));
1955 case VECTOR_CST:
1957 unsigned i;
1958 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
1959 if (!integer_onep (VECTOR_CST_ELT (expr, i)))
1960 return false;
1961 return true;
1963 default:
1964 return false;
1968 /* Return 1 if EXPR is an integer containing all 1's in as much precision as
1969 it contains, or a complex or vector whose subparts are such integers. */
1972 integer_all_onesp (const_tree expr)
1974 int prec;
1975 int uns;
1977 STRIP_NOPS (expr);
1979 if (TREE_CODE (expr) == COMPLEX_CST
1980 && integer_all_onesp (TREE_REALPART (expr))
1981 && integer_all_onesp (TREE_IMAGPART (expr)))
1982 return 1;
1984 else if (TREE_CODE (expr) == VECTOR_CST)
1986 unsigned i;
1987 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
1988 if (!integer_all_onesp (VECTOR_CST_ELT (expr, i)))
1989 return 0;
1990 return 1;
1993 else if (TREE_CODE (expr) != INTEGER_CST)
1994 return 0;
1996 uns = TYPE_UNSIGNED (TREE_TYPE (expr));
1997 if (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
1998 && TREE_INT_CST_HIGH (expr) == -1)
1999 return 1;
2000 if (!uns)
2001 return 0;
2003 prec = TYPE_PRECISION (TREE_TYPE (expr));
2004 if (prec >= HOST_BITS_PER_WIDE_INT)
2006 HOST_WIDE_INT high_value;
2007 int shift_amount;
2009 shift_amount = prec - HOST_BITS_PER_WIDE_INT;
2011 /* Can not handle precisions greater than twice the host int size. */
2012 gcc_assert (shift_amount <= HOST_BITS_PER_WIDE_INT);
2013 if (shift_amount == HOST_BITS_PER_WIDE_INT)
2014 /* Shifting by the host word size is undefined according to the ANSI
2015 standard, so we must handle this as a special case. */
2016 high_value = -1;
2017 else
2018 high_value = ((HOST_WIDE_INT) 1 << shift_amount) - 1;
2020 return (TREE_INT_CST_LOW (expr) == ~(unsigned HOST_WIDE_INT) 0
2021 && TREE_INT_CST_HIGH (expr) == high_value);
2023 else
2024 return TREE_INT_CST_LOW (expr) == ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
2027 /* Return 1 if EXPR is the integer constant minus one. */
2030 integer_minus_onep (const_tree expr)
2032 STRIP_NOPS (expr);
2034 if (TREE_CODE (expr) == COMPLEX_CST)
2035 return (integer_all_onesp (TREE_REALPART (expr))
2036 && integer_zerop (TREE_IMAGPART (expr)));
2037 else
2038 return integer_all_onesp (expr);
2041 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only
2042 one bit on). */
2045 integer_pow2p (const_tree expr)
2047 int prec;
2048 unsigned HOST_WIDE_INT high, low;
2050 STRIP_NOPS (expr);
2052 if (TREE_CODE (expr) == COMPLEX_CST
2053 && integer_pow2p (TREE_REALPART (expr))
2054 && integer_zerop (TREE_IMAGPART (expr)))
2055 return 1;
2057 if (TREE_CODE (expr) != INTEGER_CST)
2058 return 0;
2060 prec = TYPE_PRECISION (TREE_TYPE (expr));
2061 high = TREE_INT_CST_HIGH (expr);
2062 low = TREE_INT_CST_LOW (expr);
2064 /* First clear all bits that are beyond the type's precision in case
2065 we've been sign extended. */
2067 if (prec == HOST_BITS_PER_DOUBLE_INT)
2069 else if (prec > HOST_BITS_PER_WIDE_INT)
2070 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2071 else
2073 high = 0;
2074 if (prec < HOST_BITS_PER_WIDE_INT)
2075 low &= ~(HOST_WIDE_INT_M1U << prec);
2078 if (high == 0 && low == 0)
2079 return 0;
2081 return ((high == 0 && (low & (low - 1)) == 0)
2082 || (low == 0 && (high & (high - 1)) == 0));
2085 /* Return 1 if EXPR is an integer constant other than zero or a
2086 complex constant other than zero. */
2089 integer_nonzerop (const_tree expr)
2091 STRIP_NOPS (expr);
2093 return ((TREE_CODE (expr) == INTEGER_CST
2094 && (TREE_INT_CST_LOW (expr) != 0
2095 || TREE_INT_CST_HIGH (expr) != 0))
2096 || (TREE_CODE (expr) == COMPLEX_CST
2097 && (integer_nonzerop (TREE_REALPART (expr))
2098 || integer_nonzerop (TREE_IMAGPART (expr)))));
2101 /* Return 1 if EXPR is the fixed-point constant zero. */
2104 fixed_zerop (const_tree expr)
2106 return (TREE_CODE (expr) == FIXED_CST
2107 && TREE_FIXED_CST (expr).data.is_zero ());
2110 /* Return the power of two represented by a tree node known to be a
2111 power of two. */
2114 tree_log2 (const_tree expr)
2116 int prec;
2117 HOST_WIDE_INT high, low;
2119 STRIP_NOPS (expr);
2121 if (TREE_CODE (expr) == COMPLEX_CST)
2122 return tree_log2 (TREE_REALPART (expr));
2124 prec = TYPE_PRECISION (TREE_TYPE (expr));
2125 high = TREE_INT_CST_HIGH (expr);
2126 low = TREE_INT_CST_LOW (expr);
2128 /* First clear all bits that are beyond the type's precision in case
2129 we've been sign extended. */
2131 if (prec == HOST_BITS_PER_DOUBLE_INT)
2133 else if (prec > HOST_BITS_PER_WIDE_INT)
2134 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2135 else
2137 high = 0;
2138 if (prec < HOST_BITS_PER_WIDE_INT)
2139 low &= ~(HOST_WIDE_INT_M1U << prec);
2142 return (high != 0 ? HOST_BITS_PER_WIDE_INT + exact_log2 (high)
2143 : exact_log2 (low));
2146 /* Similar, but return the largest integer Y such that 2 ** Y is less
2147 than or equal to EXPR. */
2150 tree_floor_log2 (const_tree expr)
2152 int prec;
2153 HOST_WIDE_INT high, low;
2155 STRIP_NOPS (expr);
2157 if (TREE_CODE (expr) == COMPLEX_CST)
2158 return tree_log2 (TREE_REALPART (expr));
2160 prec = TYPE_PRECISION (TREE_TYPE (expr));
2161 high = TREE_INT_CST_HIGH (expr);
2162 low = TREE_INT_CST_LOW (expr);
2164 /* First clear all bits that are beyond the type's precision in case
2165 we've been sign extended. Ignore if type's precision hasn't been set
2166 since what we are doing is setting it. */
2168 if (prec == HOST_BITS_PER_DOUBLE_INT || prec == 0)
2170 else if (prec > HOST_BITS_PER_WIDE_INT)
2171 high &= ~(HOST_WIDE_INT_M1U << (prec - HOST_BITS_PER_WIDE_INT));
2172 else
2174 high = 0;
2175 if (prec < HOST_BITS_PER_WIDE_INT)
2176 low &= ~(HOST_WIDE_INT_M1U << prec);
2179 return (high != 0 ? HOST_BITS_PER_WIDE_INT + floor_log2 (high)
2180 : floor_log2 (low));
2183 /* Return number of known trailing zero bits in EXPR, or, if the value of
2184 EXPR is known to be zero, the precision of it's type. */
2186 unsigned int
2187 tree_ctz (const_tree expr)
2189 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr))
2190 && !POINTER_TYPE_P (TREE_TYPE (expr)))
2191 return 0;
2193 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr));
2194 switch (TREE_CODE (expr))
2196 case INTEGER_CST:
2197 ret1 = tree_to_double_int (expr).trailing_zeros ();
2198 return MIN (ret1, prec);
2199 case SSA_NAME:
2200 ret1 = get_nonzero_bits (expr).trailing_zeros ();
2201 return MIN (ret1, prec);
2202 case PLUS_EXPR:
2203 case MINUS_EXPR:
2204 case BIT_IOR_EXPR:
2205 case BIT_XOR_EXPR:
2206 case MIN_EXPR:
2207 case MAX_EXPR:
2208 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2209 if (ret1 == 0)
2210 return ret1;
2211 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2212 return MIN (ret1, ret2);
2213 case POINTER_PLUS_EXPR:
2214 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2215 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2216 /* Second operand is sizetype, which could be in theory
2217 wider than pointer's precision. Make sure we never
2218 return more than prec. */
2219 ret2 = MIN (ret2, prec);
2220 return MIN (ret1, ret2);
2221 case BIT_AND_EXPR:
2222 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2223 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2224 return MAX (ret1, ret2);
2225 case MULT_EXPR:
2226 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2227 ret2 = tree_ctz (TREE_OPERAND (expr, 1));
2228 return MIN (ret1 + ret2, prec);
2229 case LSHIFT_EXPR:
2230 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2231 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2232 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2234 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2235 return MIN (ret1 + ret2, prec);
2237 return ret1;
2238 case RSHIFT_EXPR:
2239 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1))
2240 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec))
2242 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2243 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1));
2244 if (ret1 > ret2)
2245 return ret1 - ret2;
2247 return 0;
2248 case TRUNC_DIV_EXPR:
2249 case CEIL_DIV_EXPR:
2250 case FLOOR_DIV_EXPR:
2251 case ROUND_DIV_EXPR:
2252 case EXACT_DIV_EXPR:
2253 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST
2254 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1)
2256 int l = tree_log2 (TREE_OPERAND (expr, 1));
2257 if (l >= 0)
2259 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2260 ret2 = l;
2261 if (ret1 > ret2)
2262 return ret1 - ret2;
2265 return 0;
2266 CASE_CONVERT:
2267 ret1 = tree_ctz (TREE_OPERAND (expr, 0));
2268 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
2269 ret1 = prec;
2270 return MIN (ret1, prec);
2271 case SAVE_EXPR:
2272 return tree_ctz (TREE_OPERAND (expr, 0));
2273 case COND_EXPR:
2274 ret1 = tree_ctz (TREE_OPERAND (expr, 1));
2275 if (ret1 == 0)
2276 return 0;
2277 ret2 = tree_ctz (TREE_OPERAND (expr, 2));
2278 return MIN (ret1, ret2);
2279 case COMPOUND_EXPR:
2280 return tree_ctz (TREE_OPERAND (expr, 1));
2281 case ADDR_EXPR:
2282 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr));
2283 if (ret1 > BITS_PER_UNIT)
2285 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT);
2286 return MIN (ret1, prec);
2288 return 0;
2289 default:
2290 return 0;
2294 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for
2295 decimal float constants, so don't return 1 for them. */
2298 real_zerop (const_tree expr)
2300 STRIP_NOPS (expr);
2302 switch (TREE_CODE (expr))
2304 case REAL_CST:
2305 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst0)
2306 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2307 case COMPLEX_CST:
2308 return real_zerop (TREE_REALPART (expr))
2309 && real_zerop (TREE_IMAGPART (expr));
2310 case VECTOR_CST:
2312 unsigned i;
2313 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2314 if (!real_zerop (VECTOR_CST_ELT (expr, i)))
2315 return false;
2316 return true;
2318 default:
2319 return false;
2323 /* Return 1 if EXPR is the real constant one in real or complex form.
2324 Trailing zeroes matter for decimal float constants, so don't return
2325 1 for them. */
2328 real_onep (const_tree expr)
2330 STRIP_NOPS (expr);
2332 switch (TREE_CODE (expr))
2334 case REAL_CST:
2335 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconst1)
2336 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2337 case COMPLEX_CST:
2338 return real_onep (TREE_REALPART (expr))
2339 && real_zerop (TREE_IMAGPART (expr));
2340 case VECTOR_CST:
2342 unsigned i;
2343 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2344 if (!real_onep (VECTOR_CST_ELT (expr, i)))
2345 return false;
2346 return true;
2348 default:
2349 return false;
2353 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes
2354 matter for decimal float constants, so don't return 1 for them. */
2357 real_minus_onep (const_tree expr)
2359 STRIP_NOPS (expr);
2361 switch (TREE_CODE (expr))
2363 case REAL_CST:
2364 return REAL_VALUES_EQUAL (TREE_REAL_CST (expr), dconstm1)
2365 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr))));
2366 case COMPLEX_CST:
2367 return real_minus_onep (TREE_REALPART (expr))
2368 && real_zerop (TREE_IMAGPART (expr));
2369 case VECTOR_CST:
2371 unsigned i;
2372 for (i = 0; i < VECTOR_CST_NELTS (expr); ++i)
2373 if (!real_minus_onep (VECTOR_CST_ELT (expr, i)))
2374 return false;
2375 return true;
2377 default:
2378 return false;
2382 /* Nonzero if EXP is a constant or a cast of a constant. */
2385 really_constant_p (const_tree exp)
2387 /* This is not quite the same as STRIP_NOPS. It does more. */
2388 while (CONVERT_EXPR_P (exp)
2389 || TREE_CODE (exp) == NON_LVALUE_EXPR)
2390 exp = TREE_OPERAND (exp, 0);
2391 return TREE_CONSTANT (exp);
2394 /* Return first list element whose TREE_VALUE is ELEM.
2395 Return 0 if ELEM is not in LIST. */
2397 tree
2398 value_member (tree elem, tree list)
2400 while (list)
2402 if (elem == TREE_VALUE (list))
2403 return list;
2404 list = TREE_CHAIN (list);
2406 return NULL_TREE;
2409 /* Return first list element whose TREE_PURPOSE is ELEM.
2410 Return 0 if ELEM is not in LIST. */
2412 tree
2413 purpose_member (const_tree elem, tree list)
2415 while (list)
2417 if (elem == TREE_PURPOSE (list))
2418 return list;
2419 list = TREE_CHAIN (list);
2421 return NULL_TREE;
2424 /* Return true if ELEM is in V. */
2426 bool
2427 vec_member (const_tree elem, vec<tree, va_gc> *v)
2429 unsigned ix;
2430 tree t;
2431 FOR_EACH_VEC_SAFE_ELT (v, ix, t)
2432 if (elem == t)
2433 return true;
2434 return false;
2437 /* Returns element number IDX (zero-origin) of chain CHAIN, or
2438 NULL_TREE. */
2440 tree
2441 chain_index (int idx, tree chain)
2443 for (; chain && idx > 0; --idx)
2444 chain = TREE_CHAIN (chain);
2445 return chain;
2448 /* Return nonzero if ELEM is part of the chain CHAIN. */
2451 chain_member (const_tree elem, const_tree chain)
2453 while (chain)
2455 if (elem == chain)
2456 return 1;
2457 chain = DECL_CHAIN (chain);
2460 return 0;
2463 /* Return the length of a chain of nodes chained through TREE_CHAIN.
2464 We expect a null pointer to mark the end of the chain.
2465 This is the Lisp primitive `length'. */
2468 list_length (const_tree t)
2470 const_tree p = t;
2471 #ifdef ENABLE_TREE_CHECKING
2472 const_tree q = t;
2473 #endif
2474 int len = 0;
2476 while (p)
2478 p = TREE_CHAIN (p);
2479 #ifdef ENABLE_TREE_CHECKING
2480 if (len % 2)
2481 q = TREE_CHAIN (q);
2482 gcc_assert (p != q);
2483 #endif
2484 len++;
2487 return len;
2490 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or
2491 UNION_TYPE TYPE, or NULL_TREE if none. */
2493 tree
2494 first_field (const_tree type)
2496 tree t = TYPE_FIELDS (type);
2497 while (t && TREE_CODE (t) != FIELD_DECL)
2498 t = TREE_CHAIN (t);
2499 return t;
2502 /* Concatenate two chains of nodes (chained through TREE_CHAIN)
2503 by modifying the last node in chain 1 to point to chain 2.
2504 This is the Lisp primitive `nconc'. */
2506 tree
2507 chainon (tree op1, tree op2)
2509 tree t1;
2511 if (!op1)
2512 return op2;
2513 if (!op2)
2514 return op1;
2516 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1))
2517 continue;
2518 TREE_CHAIN (t1) = op2;
2520 #ifdef ENABLE_TREE_CHECKING
2522 tree t2;
2523 for (t2 = op2; t2; t2 = TREE_CHAIN (t2))
2524 gcc_assert (t2 != t1);
2526 #endif
2528 return op1;
2531 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */
2533 tree
2534 tree_last (tree chain)
2536 tree next;
2537 if (chain)
2538 while ((next = TREE_CHAIN (chain)))
2539 chain = next;
2540 return chain;
2543 /* Reverse the order of elements in the chain T,
2544 and return the new head of the chain (old last element). */
2546 tree
2547 nreverse (tree t)
2549 tree prev = 0, decl, next;
2550 for (decl = t; decl; decl = next)
2552 /* We shouldn't be using this function to reverse BLOCK chains; we
2553 have blocks_nreverse for that. */
2554 gcc_checking_assert (TREE_CODE (decl) != BLOCK);
2555 next = TREE_CHAIN (decl);
2556 TREE_CHAIN (decl) = prev;
2557 prev = decl;
2559 return prev;
2562 /* Return a newly created TREE_LIST node whose
2563 purpose and value fields are PARM and VALUE. */
2565 tree
2566 build_tree_list_stat (tree parm, tree value MEM_STAT_DECL)
2568 tree t = make_node_stat (TREE_LIST PASS_MEM_STAT);
2569 TREE_PURPOSE (t) = parm;
2570 TREE_VALUE (t) = value;
2571 return t;
2574 /* Build a chain of TREE_LIST nodes from a vector. */
2576 tree
2577 build_tree_list_vec_stat (const vec<tree, va_gc> *vec MEM_STAT_DECL)
2579 tree ret = NULL_TREE;
2580 tree *pp = &ret;
2581 unsigned int i;
2582 tree t;
2583 FOR_EACH_VEC_SAFE_ELT (vec, i, t)
2585 *pp = build_tree_list_stat (NULL, t PASS_MEM_STAT);
2586 pp = &TREE_CHAIN (*pp);
2588 return ret;
2591 /* Return a newly created TREE_LIST node whose
2592 purpose and value fields are PURPOSE and VALUE
2593 and whose TREE_CHAIN is CHAIN. */
2595 tree
2596 tree_cons_stat (tree purpose, tree value, tree chain MEM_STAT_DECL)
2598 tree node;
2600 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT);
2601 memset (node, 0, sizeof (struct tree_common));
2603 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list));
2605 TREE_SET_CODE (node, TREE_LIST);
2606 TREE_CHAIN (node) = chain;
2607 TREE_PURPOSE (node) = purpose;
2608 TREE_VALUE (node) = value;
2609 return node;
2612 /* Return the values of the elements of a CONSTRUCTOR as a vector of
2613 trees. */
2615 vec<tree, va_gc> *
2616 ctor_to_vec (tree ctor)
2618 vec<tree, va_gc> *vec;
2619 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor));
2620 unsigned int ix;
2621 tree val;
2623 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val)
2624 vec->quick_push (val);
2626 return vec;
2629 /* Return the size nominally occupied by an object of type TYPE
2630 when it resides in memory. The value is measured in units of bytes,
2631 and its data type is that normally used for type sizes
2632 (which is the first type created by make_signed_type or
2633 make_unsigned_type). */
2635 tree
2636 size_in_bytes (const_tree type)
2638 tree t;
2640 if (type == error_mark_node)
2641 return integer_zero_node;
2643 type = TYPE_MAIN_VARIANT (type);
2644 t = TYPE_SIZE_UNIT (type);
2646 if (t == 0)
2648 lang_hooks.types.incomplete_type_error (NULL_TREE, type);
2649 return size_zero_node;
2652 return t;
2655 /* Returns a tree for the size of EXP in bytes. */
2657 tree
2658 tree_expr_size (const_tree exp)
2660 if (DECL_P (exp)
2661 && DECL_SIZE_UNIT (exp) != 0)
2662 return DECL_SIZE_UNIT (exp);
2663 else
2664 return size_in_bytes (TREE_TYPE (exp));
2667 /* Return the size of TYPE (in bytes) as a wide integer
2668 or return -1 if the size can vary or is larger than an integer. */
2670 HOST_WIDE_INT
2671 int_size_in_bytes (const_tree type)
2673 tree t;
2675 if (type == error_mark_node)
2676 return 0;
2678 type = TYPE_MAIN_VARIANT (type);
2679 t = TYPE_SIZE_UNIT (type);
2680 if (t == 0
2681 || TREE_CODE (t) != INTEGER_CST
2682 || TREE_INT_CST_HIGH (t) != 0
2683 /* If the result would appear negative, it's too big to represent. */
2684 || (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
2685 return -1;
2687 return TREE_INT_CST_LOW (t);
2690 /* Return the maximum size of TYPE (in bytes) as a wide integer
2691 or return -1 if the size can vary or is larger than an integer. */
2693 HOST_WIDE_INT
2694 max_int_size_in_bytes (const_tree type)
2696 HOST_WIDE_INT size = -1;
2697 tree size_tree;
2699 /* If this is an array type, check for a possible MAX_SIZE attached. */
2701 if (TREE_CODE (type) == ARRAY_TYPE)
2703 size_tree = TYPE_ARRAY_MAX_SIZE (type);
2705 if (size_tree && tree_fits_uhwi_p (size_tree))
2706 size = tree_to_uhwi (size_tree);
2709 /* If we still haven't been able to get a size, see if the language
2710 can compute a maximum size. */
2712 if (size == -1)
2714 size_tree = lang_hooks.types.max_size (type);
2716 if (size_tree && tree_fits_uhwi_p (size_tree))
2717 size = tree_to_uhwi (size_tree);
2720 return size;
2723 /* Return the bit position of FIELD, in bits from the start of the record.
2724 This is a tree of type bitsizetype. */
2726 tree
2727 bit_position (const_tree field)
2729 return bit_from_pos (DECL_FIELD_OFFSET (field),
2730 DECL_FIELD_BIT_OFFSET (field));
2733 /* Likewise, but return as an integer. It must be representable in
2734 that way (since it could be a signed value, we don't have the
2735 option of returning -1 like int_size_in_byte can. */
2737 HOST_WIDE_INT
2738 int_bit_position (const_tree field)
2740 return tree_to_shwi (bit_position (field));
2743 /* Return the byte position of FIELD, in bytes from the start of the record.
2744 This is a tree of type sizetype. */
2746 tree
2747 byte_position (const_tree field)
2749 return byte_from_pos (DECL_FIELD_OFFSET (field),
2750 DECL_FIELD_BIT_OFFSET (field));
2753 /* Likewise, but return as an integer. It must be representable in
2754 that way (since it could be a signed value, we don't have the
2755 option of returning -1 like int_size_in_byte can. */
2757 HOST_WIDE_INT
2758 int_byte_position (const_tree field)
2760 return tree_to_shwi (byte_position (field));
2763 /* Return the strictest alignment, in bits, that T is known to have. */
2765 unsigned int
2766 expr_align (const_tree t)
2768 unsigned int align0, align1;
2770 switch (TREE_CODE (t))
2772 CASE_CONVERT: case NON_LVALUE_EXPR:
2773 /* If we have conversions, we know that the alignment of the
2774 object must meet each of the alignments of the types. */
2775 align0 = expr_align (TREE_OPERAND (t, 0));
2776 align1 = TYPE_ALIGN (TREE_TYPE (t));
2777 return MAX (align0, align1);
2779 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR:
2780 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR:
2781 case CLEANUP_POINT_EXPR:
2782 /* These don't change the alignment of an object. */
2783 return expr_align (TREE_OPERAND (t, 0));
2785 case COND_EXPR:
2786 /* The best we can do is say that the alignment is the least aligned
2787 of the two arms. */
2788 align0 = expr_align (TREE_OPERAND (t, 1));
2789 align1 = expr_align (TREE_OPERAND (t, 2));
2790 return MIN (align0, align1);
2792 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set
2793 meaningfully, it's always 1. */
2794 case LABEL_DECL: case CONST_DECL:
2795 case VAR_DECL: case PARM_DECL: case RESULT_DECL:
2796 case FUNCTION_DECL:
2797 gcc_assert (DECL_ALIGN (t) != 0);
2798 return DECL_ALIGN (t);
2800 default:
2801 break;
2804 /* Otherwise take the alignment from that of the type. */
2805 return TYPE_ALIGN (TREE_TYPE (t));
2808 /* Return, as a tree node, the number of elements for TYPE (which is an
2809 ARRAY_TYPE) minus one. This counts only elements of the top array. */
2811 tree
2812 array_type_nelts (const_tree type)
2814 tree index_type, min, max;
2816 /* If they did it with unspecified bounds, then we should have already
2817 given an error about it before we got here. */
2818 if (! TYPE_DOMAIN (type))
2819 return error_mark_node;
2821 index_type = TYPE_DOMAIN (type);
2822 min = TYPE_MIN_VALUE (index_type);
2823 max = TYPE_MAX_VALUE (index_type);
2825 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
2826 if (!max)
2827 return error_mark_node;
2829 return (integer_zerop (min)
2830 ? max
2831 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
2834 /* If arg is static -- a reference to an object in static storage -- then
2835 return the object. This is not the same as the C meaning of `static'.
2836 If arg isn't static, return NULL. */
2838 tree
2839 staticp (tree arg)
2841 switch (TREE_CODE (arg))
2843 case FUNCTION_DECL:
2844 /* Nested functions are static, even though taking their address will
2845 involve a trampoline as we unnest the nested function and create
2846 the trampoline on the tree level. */
2847 return arg;
2849 case VAR_DECL:
2850 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2851 && ! DECL_THREAD_LOCAL_P (arg)
2852 && ! DECL_DLLIMPORT_P (arg)
2853 ? arg : NULL);
2855 case CONST_DECL:
2856 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg))
2857 ? arg : NULL);
2859 case CONSTRUCTOR:
2860 return TREE_STATIC (arg) ? arg : NULL;
2862 case LABEL_DECL:
2863 case STRING_CST:
2864 return arg;
2866 case COMPONENT_REF:
2867 /* If the thing being referenced is not a field, then it is
2868 something language specific. */
2869 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL);
2871 /* If we are referencing a bitfield, we can't evaluate an
2872 ADDR_EXPR at compile time and so it isn't a constant. */
2873 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1)))
2874 return NULL;
2876 return staticp (TREE_OPERAND (arg, 0));
2878 case BIT_FIELD_REF:
2879 return NULL;
2881 case INDIRECT_REF:
2882 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL;
2884 case ARRAY_REF:
2885 case ARRAY_RANGE_REF:
2886 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST
2887 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST)
2888 return staticp (TREE_OPERAND (arg, 0));
2889 else
2890 return NULL;
2892 case COMPOUND_LITERAL_EXPR:
2893 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
2895 default:
2896 return NULL;
2903 /* Return whether OP is a DECL whose address is function-invariant. */
2905 bool
2906 decl_address_invariant_p (const_tree op)
2908 /* The conditions below are slightly less strict than the one in
2909 staticp. */
2911 switch (TREE_CODE (op))
2913 case PARM_DECL:
2914 case RESULT_DECL:
2915 case LABEL_DECL:
2916 case FUNCTION_DECL:
2917 return true;
2919 case VAR_DECL:
2920 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2921 || DECL_THREAD_LOCAL_P (op)
2922 || DECL_CONTEXT (op) == current_function_decl
2923 || decl_function_context (op) == current_function_decl)
2924 return true;
2925 break;
2927 case CONST_DECL:
2928 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))
2929 || decl_function_context (op) == current_function_decl)
2930 return true;
2931 break;
2933 default:
2934 break;
2937 return false;
2940 /* Return whether OP is a DECL whose address is interprocedural-invariant. */
2942 bool
2943 decl_address_ip_invariant_p (const_tree op)
2945 /* The conditions below are slightly less strict than the one in
2946 staticp. */
2948 switch (TREE_CODE (op))
2950 case LABEL_DECL:
2951 case FUNCTION_DECL:
2952 case STRING_CST:
2953 return true;
2955 case VAR_DECL:
2956 if (((TREE_STATIC (op) || DECL_EXTERNAL (op))
2957 && !DECL_DLLIMPORT_P (op))
2958 || DECL_THREAD_LOCAL_P (op))
2959 return true;
2960 break;
2962 case CONST_DECL:
2963 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)))
2964 return true;
2965 break;
2967 default:
2968 break;
2971 return false;
2975 /* Return true if T is function-invariant (internal function, does
2976 not handle arithmetic; that's handled in skip_simple_arithmetic and
2977 tree_invariant_p). */
2979 static bool tree_invariant_p (tree t);
2981 static bool
2982 tree_invariant_p_1 (tree t)
2984 tree op;
2986 if (TREE_CONSTANT (t)
2987 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t)))
2988 return true;
2990 switch (TREE_CODE (t))
2992 case SAVE_EXPR:
2993 return true;
2995 case ADDR_EXPR:
2996 op = TREE_OPERAND (t, 0);
2997 while (handled_component_p (op))
2999 switch (TREE_CODE (op))
3001 case ARRAY_REF:
3002 case ARRAY_RANGE_REF:
3003 if (!tree_invariant_p (TREE_OPERAND (op, 1))
3004 || TREE_OPERAND (op, 2) != NULL_TREE
3005 || TREE_OPERAND (op, 3) != NULL_TREE)
3006 return false;
3007 break;
3009 case COMPONENT_REF:
3010 if (TREE_OPERAND (op, 2) != NULL_TREE)
3011 return false;
3012 break;
3014 default:;
3016 op = TREE_OPERAND (op, 0);
3019 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op);
3021 default:
3022 break;
3025 return false;
3028 /* Return true if T is function-invariant. */
3030 static bool
3031 tree_invariant_p (tree t)
3033 tree inner = skip_simple_arithmetic (t);
3034 return tree_invariant_p_1 (inner);
3037 /* Wrap a SAVE_EXPR around EXPR, if appropriate.
3038 Do this to any expression which may be used in more than one place,
3039 but must be evaluated only once.
3041 Normally, expand_expr would reevaluate the expression each time.
3042 Calling save_expr produces something that is evaluated and recorded
3043 the first time expand_expr is called on it. Subsequent calls to
3044 expand_expr just reuse the recorded value.
3046 The call to expand_expr that generates code that actually computes
3047 the value is the first call *at compile time*. Subsequent calls
3048 *at compile time* generate code to use the saved value.
3049 This produces correct result provided that *at run time* control
3050 always flows through the insns made by the first expand_expr
3051 before reaching the other places where the save_expr was evaluated.
3052 You, the caller of save_expr, must make sure this is so.
3054 Constants, and certain read-only nodes, are returned with no
3055 SAVE_EXPR because that is safe. Expressions containing placeholders
3056 are not touched; see tree.def for an explanation of what these
3057 are used for. */
3059 tree
3060 save_expr (tree expr)
3062 tree t = fold (expr);
3063 tree inner;
3065 /* If the tree evaluates to a constant, then we don't want to hide that
3066 fact (i.e. this allows further folding, and direct checks for constants).
3067 However, a read-only object that has side effects cannot be bypassed.
3068 Since it is no problem to reevaluate literals, we just return the
3069 literal node. */
3070 inner = skip_simple_arithmetic (t);
3071 if (TREE_CODE (inner) == ERROR_MARK)
3072 return inner;
3074 if (tree_invariant_p_1 (inner))
3075 return t;
3077 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since
3078 it means that the size or offset of some field of an object depends on
3079 the value within another field.
3081 Note that it must not be the case that T contains both a PLACEHOLDER_EXPR
3082 and some variable since it would then need to be both evaluated once and
3083 evaluated more than once. Front-ends must assure this case cannot
3084 happen by surrounding any such subexpressions in their own SAVE_EXPR
3085 and forcing evaluation at the proper time. */
3086 if (contains_placeholder_p (inner))
3087 return t;
3089 t = build1 (SAVE_EXPR, TREE_TYPE (expr), t);
3090 SET_EXPR_LOCATION (t, EXPR_LOCATION (expr));
3092 /* This expression might be placed ahead of a jump to ensure that the
3093 value was computed on both sides of the jump. So make sure it isn't
3094 eliminated as dead. */
3095 TREE_SIDE_EFFECTS (t) = 1;
3096 return t;
3099 /* Look inside EXPR into any simple arithmetic operations. Return the
3100 outermost non-arithmetic or non-invariant node. */
3102 tree
3103 skip_simple_arithmetic (tree expr)
3105 /* We don't care about whether this can be used as an lvalue in this
3106 context. */
3107 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3108 expr = TREE_OPERAND (expr, 0);
3110 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and
3111 a constant, it will be more efficient to not make another SAVE_EXPR since
3112 it will allow better simplification and GCSE will be able to merge the
3113 computations if they actually occur. */
3114 while (true)
3116 if (UNARY_CLASS_P (expr))
3117 expr = TREE_OPERAND (expr, 0);
3118 else if (BINARY_CLASS_P (expr))
3120 if (tree_invariant_p (TREE_OPERAND (expr, 1)))
3121 expr = TREE_OPERAND (expr, 0);
3122 else if (tree_invariant_p (TREE_OPERAND (expr, 0)))
3123 expr = TREE_OPERAND (expr, 1);
3124 else
3125 break;
3127 else
3128 break;
3131 return expr;
3134 /* Look inside EXPR into simple arithmetic operations involving constants.
3135 Return the outermost non-arithmetic or non-constant node. */
3137 tree
3138 skip_simple_constant_arithmetic (tree expr)
3140 while (TREE_CODE (expr) == NON_LVALUE_EXPR)
3141 expr = TREE_OPERAND (expr, 0);
3143 while (true)
3145 if (UNARY_CLASS_P (expr))
3146 expr = TREE_OPERAND (expr, 0);
3147 else if (BINARY_CLASS_P (expr))
3149 if (TREE_CONSTANT (TREE_OPERAND (expr, 1)))
3150 expr = TREE_OPERAND (expr, 0);
3151 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0)))
3152 expr = TREE_OPERAND (expr, 1);
3153 else
3154 break;
3156 else
3157 break;
3160 return expr;
3163 /* Return which tree structure is used by T. */
3165 enum tree_node_structure_enum
3166 tree_node_structure (const_tree t)
3168 const enum tree_code code = TREE_CODE (t);
3169 return tree_node_structure_for_code (code);
3172 /* Set various status flags when building a CALL_EXPR object T. */
3174 static void
3175 process_call_operands (tree t)
3177 bool side_effects = TREE_SIDE_EFFECTS (t);
3178 bool read_only = false;
3179 int i = call_expr_flags (t);
3181 /* Calls have side-effects, except those to const or pure functions. */
3182 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE)))
3183 side_effects = true;
3184 /* Propagate TREE_READONLY of arguments for const functions. */
3185 if (i & ECF_CONST)
3186 read_only = true;
3188 if (!side_effects || read_only)
3189 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++)
3191 tree op = TREE_OPERAND (t, i);
3192 if (op && TREE_SIDE_EFFECTS (op))
3193 side_effects = true;
3194 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op))
3195 read_only = false;
3198 TREE_SIDE_EFFECTS (t) = side_effects;
3199 TREE_READONLY (t) = read_only;
3202 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
3203 size or offset that depends on a field within a record. */
3205 bool
3206 contains_placeholder_p (const_tree exp)
3208 enum tree_code code;
3210 if (!exp)
3211 return 0;
3213 code = TREE_CODE (exp);
3214 if (code == PLACEHOLDER_EXPR)
3215 return 1;
3217 switch (TREE_CODE_CLASS (code))
3219 case tcc_reference:
3220 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit
3221 position computations since they will be converted into a
3222 WITH_RECORD_EXPR involving the reference, which will assume
3223 here will be valid. */
3224 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3226 case tcc_exceptional:
3227 if (code == TREE_LIST)
3228 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp))
3229 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp)));
3230 break;
3232 case tcc_unary:
3233 case tcc_binary:
3234 case tcc_comparison:
3235 case tcc_expression:
3236 switch (code)
3238 case COMPOUND_EXPR:
3239 /* Ignoring the first operand isn't quite right, but works best. */
3240 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1));
3242 case COND_EXPR:
3243 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3244 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))
3245 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2)));
3247 case SAVE_EXPR:
3248 /* The save_expr function never wraps anything containing
3249 a PLACEHOLDER_EXPR. */
3250 return 0;
3252 default:
3253 break;
3256 switch (TREE_CODE_LENGTH (code))
3258 case 1:
3259 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0));
3260 case 2:
3261 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0))
3262 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)));
3263 default:
3264 return 0;
3267 case tcc_vl_exp:
3268 switch (code)
3270 case CALL_EXPR:
3272 const_tree arg;
3273 const_call_expr_arg_iterator iter;
3274 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp)
3275 if (CONTAINS_PLACEHOLDER_P (arg))
3276 return 1;
3277 return 0;
3279 default:
3280 return 0;
3283 default:
3284 return 0;
3286 return 0;
3289 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
3290 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
3291 field positions. */
3293 static bool
3294 type_contains_placeholder_1 (const_tree type)
3296 /* If the size contains a placeholder or the parent type (component type in
3297 the case of arrays) type involves a placeholder, this type does. */
3298 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))
3299 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type))
3300 || (!POINTER_TYPE_P (type)
3301 && TREE_TYPE (type)
3302 && type_contains_placeholder_p (TREE_TYPE (type))))
3303 return true;
3305 /* Now do type-specific checks. Note that the last part of the check above
3306 greatly limits what we have to do below. */
3307 switch (TREE_CODE (type))
3309 case VOID_TYPE:
3310 case COMPLEX_TYPE:
3311 case ENUMERAL_TYPE:
3312 case BOOLEAN_TYPE:
3313 case POINTER_TYPE:
3314 case OFFSET_TYPE:
3315 case REFERENCE_TYPE:
3316 case METHOD_TYPE:
3317 case FUNCTION_TYPE:
3318 case VECTOR_TYPE:
3319 case NULLPTR_TYPE:
3320 return false;
3322 case INTEGER_TYPE:
3323 case REAL_TYPE:
3324 case FIXED_POINT_TYPE:
3325 /* Here we just check the bounds. */
3326 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type))
3327 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type)));
3329 case ARRAY_TYPE:
3330 /* We have already checked the component type above, so just check the
3331 domain type. */
3332 return type_contains_placeholder_p (TYPE_DOMAIN (type));
3334 case RECORD_TYPE:
3335 case UNION_TYPE:
3336 case QUAL_UNION_TYPE:
3338 tree field;
3340 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
3341 if (TREE_CODE (field) == FIELD_DECL
3342 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field))
3343 || (TREE_CODE (type) == QUAL_UNION_TYPE
3344 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field)))
3345 || type_contains_placeholder_p (TREE_TYPE (field))))
3346 return true;
3348 return false;
3351 default:
3352 gcc_unreachable ();
3356 /* Wrapper around above function used to cache its result. */
3358 bool
3359 type_contains_placeholder_p (tree type)
3361 bool result;
3363 /* If the contains_placeholder_bits field has been initialized,
3364 then we know the answer. */
3365 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0)
3366 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1;
3368 /* Indicate that we've seen this type node, and the answer is false.
3369 This is what we want to return if we run into recursion via fields. */
3370 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1;
3372 /* Compute the real value. */
3373 result = type_contains_placeholder_1 (type);
3375 /* Store the real value. */
3376 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1;
3378 return result;
3381 /* Push tree EXP onto vector QUEUE if it is not already present. */
3383 static void
3384 push_without_duplicates (tree exp, vec<tree> *queue)
3386 unsigned int i;
3387 tree iter;
3389 FOR_EACH_VEC_ELT (*queue, i, iter)
3390 if (simple_cst_equal (iter, exp) == 1)
3391 break;
3393 if (!iter)
3394 queue->safe_push (exp);
3397 /* Given a tree EXP, find all occurrences of references to fields
3398 in a PLACEHOLDER_EXPR and place them in vector REFS without
3399 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that
3400 we assume here that EXP contains only arithmetic expressions
3401 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
3402 argument list. */
3404 void
3405 find_placeholder_in_expr (tree exp, vec<tree> *refs)
3407 enum tree_code code = TREE_CODE (exp);
3408 tree inner;
3409 int i;
3411 /* We handle TREE_LIST and COMPONENT_REF separately. */
3412 if (code == TREE_LIST)
3414 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs);
3415 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs);
3417 else if (code == COMPONENT_REF)
3419 for (inner = TREE_OPERAND (exp, 0);
3420 REFERENCE_CLASS_P (inner);
3421 inner = TREE_OPERAND (inner, 0))
3424 if (TREE_CODE (inner) == PLACEHOLDER_EXPR)
3425 push_without_duplicates (exp, refs);
3426 else
3427 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs);
3429 else
3430 switch (TREE_CODE_CLASS (code))
3432 case tcc_constant:
3433 break;
3435 case tcc_declaration:
3436 /* Variables allocated to static storage can stay. */
3437 if (!TREE_STATIC (exp))
3438 push_without_duplicates (exp, refs);
3439 break;
3441 case tcc_expression:
3442 /* This is the pattern built in ada/make_aligning_type. */
3443 if (code == ADDR_EXPR
3444 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR)
3446 push_without_duplicates (exp, refs);
3447 break;
3450 /* Fall through... */
3452 case tcc_exceptional:
3453 case tcc_unary:
3454 case tcc_binary:
3455 case tcc_comparison:
3456 case tcc_reference:
3457 for (i = 0; i < TREE_CODE_LENGTH (code); i++)
3458 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3459 break;
3461 case tcc_vl_exp:
3462 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3463 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs);
3464 break;
3466 default:
3467 gcc_unreachable ();
3471 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
3472 return a tree with all occurrences of references to F in a
3473 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and
3474 CONST_DECLs. Note that we assume here that EXP contains only
3475 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
3476 occurring only in their argument list. */
3478 tree
3479 substitute_in_expr (tree exp, tree f, tree r)
3481 enum tree_code code = TREE_CODE (exp);
3482 tree op0, op1, op2, op3;
3483 tree new_tree;
3485 /* We handle TREE_LIST and COMPONENT_REF separately. */
3486 if (code == TREE_LIST)
3488 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r);
3489 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r);
3490 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3491 return exp;
3493 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3495 else if (code == COMPONENT_REF)
3497 tree inner;
3499 /* If this expression is getting a value from a PLACEHOLDER_EXPR
3500 and it is the right field, replace it with R. */
3501 for (inner = TREE_OPERAND (exp, 0);
3502 REFERENCE_CLASS_P (inner);
3503 inner = TREE_OPERAND (inner, 0))
3506 /* The field. */
3507 op1 = TREE_OPERAND (exp, 1);
3509 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f)
3510 return r;
3512 /* If this expression hasn't been completed let, leave it alone. */
3513 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner))
3514 return exp;
3516 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3517 if (op0 == TREE_OPERAND (exp, 0))
3518 return exp;
3520 new_tree
3521 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE);
3523 else
3524 switch (TREE_CODE_CLASS (code))
3526 case tcc_constant:
3527 return exp;
3529 case tcc_declaration:
3530 if (exp == f)
3531 return r;
3532 else
3533 return exp;
3535 case tcc_expression:
3536 if (exp == f)
3537 return r;
3539 /* Fall through... */
3541 case tcc_exceptional:
3542 case tcc_unary:
3543 case tcc_binary:
3544 case tcc_comparison:
3545 case tcc_reference:
3546 switch (TREE_CODE_LENGTH (code))
3548 case 0:
3549 return exp;
3551 case 1:
3552 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3553 if (op0 == TREE_OPERAND (exp, 0))
3554 return exp;
3556 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3557 break;
3559 case 2:
3560 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3561 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3563 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3564 return exp;
3566 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3567 break;
3569 case 3:
3570 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3571 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3572 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3574 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3575 && op2 == TREE_OPERAND (exp, 2))
3576 return exp;
3578 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3579 break;
3581 case 4:
3582 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r);
3583 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r);
3584 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r);
3585 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r);
3587 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3588 && op2 == TREE_OPERAND (exp, 2)
3589 && op3 == TREE_OPERAND (exp, 3))
3590 return exp;
3592 new_tree
3593 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3594 break;
3596 default:
3597 gcc_unreachable ();
3599 break;
3601 case tcc_vl_exp:
3603 int i;
3605 new_tree = NULL_TREE;
3607 /* If we are trying to replace F with a constant, inline back
3608 functions which do nothing else than computing a value from
3609 the arguments they are passed. This makes it possible to
3610 fold partially or entirely the replacement expression. */
3611 if (CONSTANT_CLASS_P (r) && code == CALL_EXPR)
3613 tree t = maybe_inline_call_in_expr (exp);
3614 if (t)
3615 return SUBSTITUTE_IN_EXPR (t, f, r);
3618 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3620 tree op = TREE_OPERAND (exp, i);
3621 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r);
3622 if (new_op != op)
3624 if (!new_tree)
3625 new_tree = copy_node (exp);
3626 TREE_OPERAND (new_tree, i) = new_op;
3630 if (new_tree)
3632 new_tree = fold (new_tree);
3633 if (TREE_CODE (new_tree) == CALL_EXPR)
3634 process_call_operands (new_tree);
3636 else
3637 return exp;
3639 break;
3641 default:
3642 gcc_unreachable ();
3645 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3647 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3648 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3650 return new_tree;
3653 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
3654 for it within OBJ, a tree that is an object or a chain of references. */
3656 tree
3657 substitute_placeholder_in_expr (tree exp, tree obj)
3659 enum tree_code code = TREE_CODE (exp);
3660 tree op0, op1, op2, op3;
3661 tree new_tree;
3663 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type
3664 in the chain of OBJ. */
3665 if (code == PLACEHOLDER_EXPR)
3667 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp));
3668 tree elt;
3670 for (elt = obj; elt != 0;
3671 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3672 || TREE_CODE (elt) == COND_EXPR)
3673 ? TREE_OPERAND (elt, 1)
3674 : (REFERENCE_CLASS_P (elt)
3675 || UNARY_CLASS_P (elt)
3676 || BINARY_CLASS_P (elt)
3677 || VL_EXP_CLASS_P (elt)
3678 || EXPRESSION_CLASS_P (elt))
3679 ? TREE_OPERAND (elt, 0) : 0))
3680 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type)
3681 return elt;
3683 for (elt = obj; elt != 0;
3684 elt = ((TREE_CODE (elt) == COMPOUND_EXPR
3685 || TREE_CODE (elt) == COND_EXPR)
3686 ? TREE_OPERAND (elt, 1)
3687 : (REFERENCE_CLASS_P (elt)
3688 || UNARY_CLASS_P (elt)
3689 || BINARY_CLASS_P (elt)
3690 || VL_EXP_CLASS_P (elt)
3691 || EXPRESSION_CLASS_P (elt))
3692 ? TREE_OPERAND (elt, 0) : 0))
3693 if (POINTER_TYPE_P (TREE_TYPE (elt))
3694 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt)))
3695 == need_type))
3696 return fold_build1 (INDIRECT_REF, need_type, elt);
3698 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it
3699 survives until RTL generation, there will be an error. */
3700 return exp;
3703 /* TREE_LIST is special because we need to look at TREE_VALUE
3704 and TREE_CHAIN, not TREE_OPERANDS. */
3705 else if (code == TREE_LIST)
3707 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj);
3708 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj);
3709 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp))
3710 return exp;
3712 return tree_cons (TREE_PURPOSE (exp), op1, op0);
3714 else
3715 switch (TREE_CODE_CLASS (code))
3717 case tcc_constant:
3718 case tcc_declaration:
3719 return exp;
3721 case tcc_exceptional:
3722 case tcc_unary:
3723 case tcc_binary:
3724 case tcc_comparison:
3725 case tcc_expression:
3726 case tcc_reference:
3727 case tcc_statement:
3728 switch (TREE_CODE_LENGTH (code))
3730 case 0:
3731 return exp;
3733 case 1:
3734 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3735 if (op0 == TREE_OPERAND (exp, 0))
3736 return exp;
3738 new_tree = fold_build1 (code, TREE_TYPE (exp), op0);
3739 break;
3741 case 2:
3742 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3743 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3745 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
3746 return exp;
3748 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1);
3749 break;
3751 case 3:
3752 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3753 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3754 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3756 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3757 && op2 == TREE_OPERAND (exp, 2))
3758 return exp;
3760 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2);
3761 break;
3763 case 4:
3764 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj);
3765 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj);
3766 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj);
3767 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj);
3769 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
3770 && op2 == TREE_OPERAND (exp, 2)
3771 && op3 == TREE_OPERAND (exp, 3))
3772 return exp;
3774 new_tree
3775 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3));
3776 break;
3778 default:
3779 gcc_unreachable ();
3781 break;
3783 case tcc_vl_exp:
3785 int i;
3787 new_tree = NULL_TREE;
3789 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++)
3791 tree op = TREE_OPERAND (exp, i);
3792 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj);
3793 if (new_op != op)
3795 if (!new_tree)
3796 new_tree = copy_node (exp);
3797 TREE_OPERAND (new_tree, i) = new_op;
3801 if (new_tree)
3803 new_tree = fold (new_tree);
3804 if (TREE_CODE (new_tree) == CALL_EXPR)
3805 process_call_operands (new_tree);
3807 else
3808 return exp;
3810 break;
3812 default:
3813 gcc_unreachable ();
3816 TREE_READONLY (new_tree) |= TREE_READONLY (exp);
3818 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF)
3819 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp);
3821 return new_tree;
3825 /* Subroutine of stabilize_reference; this is called for subtrees of
3826 references. Any expression with side-effects must be put in a SAVE_EXPR
3827 to ensure that it is only evaluated once.
3829 We don't put SAVE_EXPR nodes around everything, because assigning very
3830 simple expressions to temporaries causes us to miss good opportunities
3831 for optimizations. Among other things, the opportunity to fold in the
3832 addition of a constant into an addressing mode often gets lost, e.g.
3833 "y[i+1] += x;". In general, we take the approach that we should not make
3834 an assignment unless we are forced into it - i.e., that any non-side effect
3835 operator should be allowed, and that cse should take care of coalescing
3836 multiple utterances of the same expression should that prove fruitful. */
3838 static tree
3839 stabilize_reference_1 (tree e)
3841 tree result;
3842 enum tree_code code = TREE_CODE (e);
3844 /* We cannot ignore const expressions because it might be a reference
3845 to a const array but whose index contains side-effects. But we can
3846 ignore things that are actual constant or that already have been
3847 handled by this function. */
3849 if (tree_invariant_p (e))
3850 return e;
3852 switch (TREE_CODE_CLASS (code))
3854 case tcc_exceptional:
3855 case tcc_type:
3856 case tcc_declaration:
3857 case tcc_comparison:
3858 case tcc_statement:
3859 case tcc_expression:
3860 case tcc_reference:
3861 case tcc_vl_exp:
3862 /* If the expression has side-effects, then encase it in a SAVE_EXPR
3863 so that it will only be evaluated once. */
3864 /* The reference (r) and comparison (<) classes could be handled as
3865 below, but it is generally faster to only evaluate them once. */
3866 if (TREE_SIDE_EFFECTS (e))
3867 return save_expr (e);
3868 return e;
3870 case tcc_constant:
3871 /* Constants need no processing. In fact, we should never reach
3872 here. */
3873 return e;
3875 case tcc_binary:
3876 /* Division is slow and tends to be compiled with jumps,
3877 especially the division by powers of 2 that is often
3878 found inside of an array reference. So do it just once. */
3879 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR
3880 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR
3881 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR
3882 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR)
3883 return save_expr (e);
3884 /* Recursively stabilize each operand. */
3885 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)),
3886 stabilize_reference_1 (TREE_OPERAND (e, 1)));
3887 break;
3889 case tcc_unary:
3890 /* Recursively stabilize each operand. */
3891 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)));
3892 break;
3894 default:
3895 gcc_unreachable ();
3898 TREE_TYPE (result) = TREE_TYPE (e);
3899 TREE_READONLY (result) = TREE_READONLY (e);
3900 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e);
3901 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e);
3902 TREE_SHARED (result) = TREE_SHARED (e);
3903 TREE_STRICT (result) = TREE_STRICT (e);
3904 TREE_RELAXED (result) = TREE_RELAXED (e);
3906 return result;
3909 /* Stabilize a reference so that we can use it any number of times
3910 without causing its operands to be evaluated more than once.
3911 Returns the stabilized reference. This works by means of save_expr,
3912 so see the caveats in the comments about save_expr.
3914 Also allows conversion expressions whose operands are references.
3915 Any other kind of expression is returned unchanged. */
3917 tree
3918 stabilize_reference (tree ref)
3920 tree result;
3921 enum tree_code code = TREE_CODE (ref);
3923 switch (code)
3925 case VAR_DECL:
3926 case PARM_DECL:
3927 case RESULT_DECL:
3928 /* No action is needed in this case. */
3929 return ref;
3931 CASE_CONVERT:
3932 case FLOAT_EXPR:
3933 case FIX_TRUNC_EXPR:
3934 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0)));
3935 break;
3937 case INDIRECT_REF:
3938 result = build_nt (INDIRECT_REF,
3939 stabilize_reference_1 (TREE_OPERAND (ref, 0)));
3940 break;
3942 case COMPONENT_REF:
3943 result = build_nt (COMPONENT_REF,
3944 stabilize_reference (TREE_OPERAND (ref, 0)),
3945 TREE_OPERAND (ref, 1), NULL_TREE);
3946 break;
3948 case BIT_FIELD_REF:
3949 result = build_nt (BIT_FIELD_REF,
3950 stabilize_reference (TREE_OPERAND (ref, 0)),
3951 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2));
3952 break;
3954 case ARRAY_REF:
3955 result = build_nt (ARRAY_REF,
3956 stabilize_reference (TREE_OPERAND (ref, 0)),
3957 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3958 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3959 break;
3961 case ARRAY_RANGE_REF:
3962 result = build_nt (ARRAY_RANGE_REF,
3963 stabilize_reference (TREE_OPERAND (ref, 0)),
3964 stabilize_reference_1 (TREE_OPERAND (ref, 1)),
3965 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3));
3966 break;
3968 case COMPOUND_EXPR:
3969 /* We cannot wrap the first expression in a SAVE_EXPR, as then
3970 it wouldn't be ignored. This matters when dealing with
3971 volatiles. */
3972 return stabilize_reference_1 (ref);
3974 /* If arg isn't a kind of lvalue we recognize, make no change.
3975 Caller should recognize the error for an invalid lvalue. */
3976 default:
3977 return ref;
3979 case ERROR_MARK:
3980 return error_mark_node;
3983 TREE_TYPE (result) = TREE_TYPE (ref);
3984 TREE_READONLY (result) = TREE_READONLY (ref);
3985 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
3986 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
3987 TREE_SHARED (result) = TREE_SHARED (ref);
3988 TREE_STRICT (result) = TREE_STRICT (ref);
3989 TREE_RELAXED (result) = TREE_RELAXED (ref);
3991 return result;
3995 /* Low-level constructors for expressions. */
3997 /* A helper function for build1 and constant folders. Set TREE_CONSTANT,
3998 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */
4000 void
4001 recompute_tree_invariant_for_addr_expr (tree t)
4003 tree node;
4004 bool tc = true, se = false;
4006 /* We started out assuming this address is both invariant and constant, but
4007 does not have side effects. Now go down any handled components and see if
4008 any of them involve offsets that are either non-constant or non-invariant.
4009 Also check for side-effects.
4011 ??? Note that this code makes no attempt to deal with the case where
4012 taking the address of something causes a copy due to misalignment. */
4014 #define UPDATE_FLAGS(NODE) \
4015 do { tree _node = (NODE); \
4016 if (_node && !TREE_CONSTANT (_node)) tc = false; \
4017 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0)
4019 for (node = TREE_OPERAND (t, 0); handled_component_p (node);
4020 node = TREE_OPERAND (node, 0))
4022 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus
4023 array reference (probably made temporarily by the G++ front end),
4024 so ignore all the operands. */
4025 if ((TREE_CODE (node) == ARRAY_REF
4026 || TREE_CODE (node) == ARRAY_RANGE_REF)
4027 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE)
4029 UPDATE_FLAGS (TREE_OPERAND (node, 1));
4030 if (TREE_OPERAND (node, 2))
4031 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4032 if (TREE_OPERAND (node, 3))
4033 UPDATE_FLAGS (TREE_OPERAND (node, 3));
4035 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a
4036 FIELD_DECL, apparently. The G++ front end can put something else
4037 there, at least temporarily. */
4038 else if (TREE_CODE (node) == COMPONENT_REF
4039 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL)
4041 if (TREE_OPERAND (node, 2))
4042 UPDATE_FLAGS (TREE_OPERAND (node, 2));
4046 node = lang_hooks.expr_to_decl (node, &tc, &se);
4048 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
4049 the address, since &(*a)->b is a form of addition. If it's a constant, the
4050 address is constant too. If it's a decl, its address is constant if the
4051 decl is static. Everything else is not constant and, furthermore,
4052 taking the address of a volatile variable is not volatile. */
4053 if (TREE_CODE (node) == INDIRECT_REF
4054 || TREE_CODE (node) == MEM_REF)
4055 UPDATE_FLAGS (TREE_OPERAND (node, 0));
4056 else if (CONSTANT_CLASS_P (node))
4058 else if (DECL_P (node))
4059 tc &= (staticp (node) != NULL_TREE);
4060 else
4062 tc = false;
4063 se |= TREE_SIDE_EFFECTS (node);
4067 TREE_CONSTANT (t) = tc;
4068 TREE_SIDE_EFFECTS (t) = se;
4069 #undef UPDATE_FLAGS
4072 /* Build an expression of code CODE, data type TYPE, and operands as
4073 specified. Expressions and reference nodes can be created this way.
4074 Constants, decls, types and misc nodes cannot be.
4076 We define 5 non-variadic functions, from 0 to 4 arguments. This is
4077 enough for all extant tree codes. */
4079 tree
4080 build0_stat (enum tree_code code, tree tt MEM_STAT_DECL)
4082 tree t;
4084 gcc_assert (TREE_CODE_LENGTH (code) == 0);
4086 t = make_node_stat (code PASS_MEM_STAT);
4087 TREE_TYPE (t) = tt;
4089 return t;
4092 tree
4093 build1_stat (enum tree_code code, tree type, tree node MEM_STAT_DECL)
4095 int length = sizeof (struct tree_exp);
4096 tree t;
4098 record_node_allocation_statistics (code, length);
4100 gcc_assert (TREE_CODE_LENGTH (code) == 1);
4102 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT);
4104 memset (t, 0, sizeof (struct tree_common));
4106 TREE_SET_CODE (t, code);
4108 TREE_TYPE (t) = type;
4109 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION);
4110 TREE_OPERAND (t, 0) = node;
4111 if (node && !TYPE_P (node))
4113 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node);
4114 TREE_READONLY (t) = TREE_READONLY (node);
4117 if (TREE_CODE_CLASS (code) == tcc_statement)
4118 TREE_SIDE_EFFECTS (t) = 1;
4119 else switch (code)
4121 case VA_ARG_EXPR:
4122 /* All of these have side-effects, no matter what their
4123 operands are. */
4124 TREE_SIDE_EFFECTS (t) = 1;
4125 TREE_READONLY (t) = 0;
4126 break;
4128 case INDIRECT_REF:
4129 /* Whether a dereference is readonly has nothing to do with whether
4130 its operand is readonly. */
4131 TREE_READONLY (t) = 0;
4132 TREE_SHARED (t) = upc_shared_type_p (type);
4133 break;
4135 case ADDR_EXPR:
4136 if (node)
4137 recompute_tree_invariant_for_addr_expr (t);
4138 break;
4140 default:
4141 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR)
4142 && node && !TYPE_P (node)
4143 && TREE_CONSTANT (node))
4144 TREE_CONSTANT (t) = 1;
4145 if (TREE_CODE_CLASS (code) == tcc_reference
4146 && node && TREE_THIS_VOLATILE (node))
4147 TREE_THIS_VOLATILE (t) = 1;
4148 /* Drop the UPC "shared" type qualifier for
4149 expressions involving UPC shared objects. */
4150 if (TREE_CODE_CLASS (code) == tcc_unary
4151 && node && !TYPE_P (node)
4152 && upc_shared_type_p (type))
4153 TREE_TYPE (t) = build_upc_unshared_type (type);
4154 break;
4157 return t;
4160 #define PROCESS_ARG(N) \
4161 do { \
4162 TREE_OPERAND (t, N) = arg##N; \
4163 if (arg##N &&!TYPE_P (arg##N)) \
4165 if (TREE_SIDE_EFFECTS (arg##N)) \
4166 side_effects = 1; \
4167 if (!TREE_READONLY (arg##N) \
4168 && !CONSTANT_CLASS_P (arg##N)) \
4169 (void) (read_only = 0); \
4170 if (!TREE_CONSTANT (arg##N)) \
4171 (void) (constant = 0); \
4173 } while (0)
4175 tree
4176 build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL)
4178 bool constant, read_only, side_effects;
4179 tree t;
4181 gcc_assert (TREE_CODE_LENGTH (code) == 2);
4183 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
4184 && arg0 && arg1 && tt && POINTER_TYPE_P (tt)
4185 /* When sizetype precision doesn't match that of pointers
4186 we need to be able to build explicit extensions or truncations
4187 of the offset argument. */
4188 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt))
4189 gcc_assert (TREE_CODE (arg0) == INTEGER_CST
4190 && TREE_CODE (arg1) == INTEGER_CST);
4192 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt)
4193 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
4194 && ptrofftype_p (TREE_TYPE (arg1)));
4196 t = make_node_stat (code PASS_MEM_STAT);
4198 /* Remove UPC shared type qualifiers from the result type. */
4199 if (upc_shared_type_p (tt))
4200 tt = build_upc_unshared_type (tt);
4201 TREE_TYPE (t) = tt;
4203 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the
4204 result based on those same flags for the arguments. But if the
4205 arguments aren't really even `tree' expressions, we shouldn't be trying
4206 to do this. */
4208 /* Expressions without side effects may be constant if their
4209 arguments are as well. */
4210 constant = (TREE_CODE_CLASS (code) == tcc_comparison
4211 || TREE_CODE_CLASS (code) == tcc_binary);
4212 read_only = 1;
4213 side_effects = TREE_SIDE_EFFECTS (t);
4215 PROCESS_ARG (0);
4216 PROCESS_ARG (1);
4218 TREE_READONLY (t) = read_only;
4219 TREE_CONSTANT (t) = constant;
4220 TREE_SIDE_EFFECTS (t) = side_effects;
4221 TREE_THIS_VOLATILE (t)
4222 = (TREE_CODE_CLASS (code) == tcc_reference
4223 && arg0 && TREE_THIS_VOLATILE (arg0));
4225 return t;
4229 tree
4230 build3_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4231 tree arg2 MEM_STAT_DECL)
4233 bool constant, read_only, side_effects;
4234 tree t;
4236 gcc_assert (TREE_CODE_LENGTH (code) == 3);
4237 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4239 t = make_node_stat (code PASS_MEM_STAT);
4240 TREE_TYPE (t) = tt;
4242 read_only = 1;
4244 /* As a special exception, if COND_EXPR has NULL branches, we
4245 assume that it is a gimple statement and always consider
4246 it to have side effects. */
4247 if (code == COND_EXPR
4248 && tt == void_type_node
4249 && arg1 == NULL_TREE
4250 && arg2 == NULL_TREE)
4251 side_effects = true;
4252 else
4253 side_effects = TREE_SIDE_EFFECTS (t);
4255 PROCESS_ARG (0);
4256 PROCESS_ARG (1);
4257 PROCESS_ARG (2);
4259 if (code == COND_EXPR)
4260 TREE_READONLY (t) = read_only;
4262 TREE_SIDE_EFFECTS (t) = side_effects;
4263 TREE_THIS_VOLATILE (t)
4264 = (TREE_CODE_CLASS (code) == tcc_reference
4265 && arg0 && TREE_THIS_VOLATILE (arg0));
4266 TREE_SHARED (t)
4267 = (TREE_CODE_CLASS (code) == tcc_reference
4268 && arg0 && TREE_SHARED (arg0));
4269 if (TREE_SHARED (t))
4271 TREE_STRICT (t) = TREE_STRICT (arg0);
4272 TREE_RELAXED (t) = TREE_RELAXED (arg0);
4275 return t;
4278 tree
4279 build4_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4280 tree arg2, tree arg3 MEM_STAT_DECL)
4282 bool constant, read_only, side_effects;
4283 tree t;
4285 gcc_assert (TREE_CODE_LENGTH (code) == 4);
4287 t = make_node_stat (code PASS_MEM_STAT);
4288 TREE_TYPE (t) = tt;
4290 side_effects = TREE_SIDE_EFFECTS (t);
4292 PROCESS_ARG (0);
4293 PROCESS_ARG (1);
4294 PROCESS_ARG (2);
4295 PROCESS_ARG (3);
4297 TREE_SIDE_EFFECTS (t) = side_effects;
4298 TREE_THIS_VOLATILE (t)
4299 = (TREE_CODE_CLASS (code) == tcc_reference
4300 && arg0 && TREE_THIS_VOLATILE (arg0));
4302 return t;
4305 tree
4306 build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1,
4307 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL)
4309 bool constant, read_only, side_effects;
4310 tree t;
4312 gcc_assert (TREE_CODE_LENGTH (code) == 5);
4314 t = make_node_stat (code PASS_MEM_STAT);
4315 TREE_TYPE (t) = tt;
4317 side_effects = TREE_SIDE_EFFECTS (t);
4319 PROCESS_ARG (0);
4320 PROCESS_ARG (1);
4321 PROCESS_ARG (2);
4322 PROCESS_ARG (3);
4323 PROCESS_ARG (4);
4325 TREE_SIDE_EFFECTS (t) = side_effects;
4326 TREE_THIS_VOLATILE (t)
4327 = (TREE_CODE_CLASS (code) == tcc_reference
4328 && arg0 && TREE_THIS_VOLATILE (arg0));
4330 return t;
4333 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF
4334 on the pointer PTR. */
4336 tree
4337 build_simple_mem_ref_loc (location_t loc, tree ptr)
4339 HOST_WIDE_INT offset = 0;
4340 tree ptype = TREE_TYPE (ptr);
4341 tree tem;
4342 /* For convenience allow addresses that collapse to a simple base
4343 and offset. */
4344 if (TREE_CODE (ptr) == ADDR_EXPR
4345 && (handled_component_p (TREE_OPERAND (ptr, 0))
4346 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF))
4348 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset);
4349 gcc_assert (ptr);
4350 ptr = build_fold_addr_expr (ptr);
4351 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr));
4353 tem = build2 (MEM_REF, TREE_TYPE (ptype),
4354 ptr, build_int_cst (ptype, offset));
4355 SET_EXPR_LOCATION (tem, loc);
4356 return tem;
4359 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */
4361 double_int
4362 mem_ref_offset (const_tree t)
4364 tree toff = TREE_OPERAND (t, 1);
4365 return tree_to_double_int (toff).sext (TYPE_PRECISION (TREE_TYPE (toff)));
4368 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE
4369 offsetted by OFFSET units. */
4371 tree
4372 build_invariant_address (tree type, tree base, HOST_WIDE_INT offset)
4374 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type),
4375 build_fold_addr_expr (base),
4376 build_int_cst (ptr_type_node, offset));
4377 tree addr = build1 (ADDR_EXPR, type, ref);
4378 recompute_tree_invariant_for_addr_expr (addr);
4379 return addr;
4382 /* Similar except don't specify the TREE_TYPE
4383 and leave the TREE_SIDE_EFFECTS as 0.
4384 It is permissible for arguments to be null,
4385 or even garbage if their values do not matter. */
4387 tree
4388 build_nt (enum tree_code code, ...)
4390 tree t;
4391 int length;
4392 int i;
4393 va_list p;
4395 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
4397 va_start (p, code);
4399 t = make_node (code);
4400 length = TREE_CODE_LENGTH (code);
4402 for (i = 0; i < length; i++)
4403 TREE_OPERAND (t, i) = va_arg (p, tree);
4405 va_end (p);
4406 return t;
4409 /* Similar to build_nt, but for creating a CALL_EXPR object with a
4410 tree vec. */
4412 tree
4413 build_nt_call_vec (tree fn, vec<tree, va_gc> *args)
4415 tree ret, t;
4416 unsigned int ix;
4418 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
4419 CALL_EXPR_FN (ret) = fn;
4420 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
4421 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
4422 CALL_EXPR_ARG (ret, ix) = t;
4423 return ret;
4426 /* Create a DECL_... node of code CODE, name NAME and data type TYPE.
4427 We do NOT enter this node in any sort of symbol table.
4429 LOC is the location of the decl.
4431 layout_decl is used to set up the decl's storage layout.
4432 Other slots are initialized to 0 or null pointers. */
4434 tree
4435 build_decl_stat (location_t loc, enum tree_code code, tree name,
4436 tree type MEM_STAT_DECL)
4438 tree t;
4440 t = make_node_stat (code PASS_MEM_STAT);
4441 DECL_SOURCE_LOCATION (t) = loc;
4443 /* if (type == error_mark_node)
4444 type = integer_type_node; */
4445 /* That is not done, deliberately, so that having error_mark_node
4446 as the type can suppress useless errors in the use of this variable. */
4448 DECL_NAME (t) = name;
4449 TREE_TYPE (t) = type;
4451 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL)
4452 layout_decl (t, 0);
4454 return t;
4457 /* Builds and returns function declaration with NAME and TYPE. */
4459 tree
4460 build_fn_decl (const char *name, tree type)
4462 tree id = get_identifier (name);
4463 tree decl = build_decl (input_location, FUNCTION_DECL, id, type);
4465 DECL_EXTERNAL (decl) = 1;
4466 TREE_PUBLIC (decl) = 1;
4467 DECL_ARTIFICIAL (decl) = 1;
4468 TREE_NOTHROW (decl) = 1;
4470 return decl;
4473 vec<tree, va_gc> *all_translation_units;
4475 /* Builds a new translation-unit decl with name NAME, queues it in the
4476 global list of translation-unit decls and returns it. */
4478 tree
4479 build_translation_unit_decl (tree name)
4481 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL,
4482 name, NULL_TREE);
4483 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name;
4484 vec_safe_push (all_translation_units, tu);
4485 return tu;
4489 /* BLOCK nodes are used to represent the structure of binding contours
4490 and declarations, once those contours have been exited and their contents
4491 compiled. This information is used for outputting debugging info. */
4493 tree
4494 build_block (tree vars, tree subblocks, tree supercontext, tree chain)
4496 tree block = make_node (BLOCK);
4498 BLOCK_VARS (block) = vars;
4499 BLOCK_SUBBLOCKS (block) = subblocks;
4500 BLOCK_SUPERCONTEXT (block) = supercontext;
4501 BLOCK_CHAIN (block) = chain;
4502 return block;
4506 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location.
4508 LOC is the location to use in tree T. */
4510 void
4511 protected_set_expr_location (tree t, location_t loc)
4513 if (t && CAN_HAVE_LOCATION_P (t))
4514 SET_EXPR_LOCATION (t, loc);
4517 /* Return a declaration like DDECL except that its DECL_ATTRIBUTES
4518 is ATTRIBUTE. */
4520 tree
4521 build_decl_attribute_variant (tree ddecl, tree attribute)
4523 DECL_ATTRIBUTES (ddecl) = attribute;
4524 return ddecl;
4527 /* Borrowed from hashtab.c iterative_hash implementation. */
4528 #define mix(a,b,c) \
4530 a -= b; a -= c; a ^= (c>>13); \
4531 b -= c; b -= a; b ^= (a<< 8); \
4532 c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
4533 a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
4534 b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
4535 c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
4536 a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
4537 b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
4538 c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
4542 /* Produce good hash value combining VAL and VAL2. */
4543 hashval_t
4544 iterative_hash_hashval_t (hashval_t val, hashval_t val2)
4546 /* the golden ratio; an arbitrary value. */
4547 hashval_t a = 0x9e3779b9;
4549 mix (a, val, val2);
4550 return val2;
4553 /* Produce good hash value combining VAL and VAL2. */
4554 hashval_t
4555 iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
4557 if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
4558 return iterative_hash_hashval_t (val, val2);
4559 else
4561 hashval_t a = (hashval_t) val;
4562 /* Avoid warnings about shifting of more than the width of the type on
4563 hosts that won't execute this path. */
4564 int zero = 0;
4565 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
4566 mix (a, b, val2);
4567 if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
4569 hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
4570 hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
4571 mix (a, b, val2);
4573 return val2;
4577 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4578 is ATTRIBUTE and its qualifiers are QUALS.
4580 Record such modified types already made so we don't make duplicates. */
4582 tree
4583 build_type_attribute_qual_variant (tree ttype, tree attribute, int quals)
4585 if (! attribute_list_equal (TYPE_ATTRIBUTES (ttype), attribute))
4587 hashval_t hashcode = 0;
4588 tree ntype;
4589 enum tree_code code = TREE_CODE (ttype);
4591 /* Building a distinct copy of a tagged type is inappropriate; it
4592 causes breakage in code that expects there to be a one-to-one
4593 relationship between a struct and its fields.
4594 build_duplicate_type is another solution (as used in
4595 handle_transparent_union_attribute), but that doesn't play well
4596 with the stronger C++ type identity model. */
4597 if (TREE_CODE (ttype) == RECORD_TYPE
4598 || TREE_CODE (ttype) == UNION_TYPE
4599 || TREE_CODE (ttype) == QUAL_UNION_TYPE
4600 || TREE_CODE (ttype) == ENUMERAL_TYPE)
4602 warning (OPT_Wattributes,
4603 "ignoring attributes applied to %qT after definition",
4604 TYPE_MAIN_VARIANT (ttype));
4605 return build_qualified_type (ttype, quals);
4608 ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED);
4609 ntype = build_distinct_type_copy (ttype);
4611 TYPE_ATTRIBUTES (ntype) = attribute;
4613 hashcode = iterative_hash_object (code, hashcode);
4614 if (TREE_TYPE (ntype))
4615 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (ntype)),
4616 hashcode);
4617 hashcode = attribute_hash_list (attribute, hashcode);
4619 switch (TREE_CODE (ntype))
4621 case FUNCTION_TYPE:
4622 hashcode = type_hash_list (TYPE_ARG_TYPES (ntype), hashcode);
4623 break;
4624 case ARRAY_TYPE:
4625 if (TYPE_DOMAIN (ntype))
4626 hashcode = iterative_hash_object (TYPE_HASH (TYPE_DOMAIN (ntype)),
4627 hashcode);
4628 break;
4629 case INTEGER_TYPE:
4630 hashcode = iterative_hash_object
4631 (TREE_INT_CST_LOW (TYPE_MAX_VALUE (ntype)), hashcode);
4632 hashcode = iterative_hash_object
4633 (TREE_INT_CST_HIGH (TYPE_MAX_VALUE (ntype)), hashcode);
4634 break;
4635 case REAL_TYPE:
4636 case FIXED_POINT_TYPE:
4638 unsigned int precision = TYPE_PRECISION (ntype);
4639 hashcode = iterative_hash_object (precision, hashcode);
4641 break;
4642 default:
4643 break;
4646 ntype = type_hash_canon (hashcode, ntype);
4648 /* If the target-dependent attributes make NTYPE different from
4649 its canonical type, we will need to use structural equality
4650 checks for this type. */
4651 if (TYPE_STRUCTURAL_EQUALITY_P (ttype)
4652 || !comp_type_attributes (ntype, ttype))
4653 SET_TYPE_STRUCTURAL_EQUALITY (ntype);
4654 else if (TYPE_CANONICAL (ntype) == ntype)
4655 TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype);
4657 ttype = build_qualified_type (ntype, quals);
4659 else if (TYPE_QUALS (ttype) != quals)
4660 ttype = build_qualified_type (ttype, quals);
4662 return ttype;
4665 /* Check if "omp declare simd" attribute arguments, CLAUSES1 and CLAUSES2, are
4666 the same. */
4668 static bool
4669 omp_declare_simd_clauses_equal (tree clauses1, tree clauses2)
4671 tree cl1, cl2;
4672 for (cl1 = clauses1, cl2 = clauses2;
4673 cl1 && cl2;
4674 cl1 = OMP_CLAUSE_CHAIN (cl1), cl2 = OMP_CLAUSE_CHAIN (cl2))
4676 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_CODE (cl2))
4677 return false;
4678 if (OMP_CLAUSE_CODE (cl1) != OMP_CLAUSE_SIMDLEN)
4680 if (simple_cst_equal (OMP_CLAUSE_DECL (cl1),
4681 OMP_CLAUSE_DECL (cl2)) != 1)
4682 return false;
4684 switch (OMP_CLAUSE_CODE (cl1))
4686 case OMP_CLAUSE_ALIGNED:
4687 if (simple_cst_equal (OMP_CLAUSE_ALIGNED_ALIGNMENT (cl1),
4688 OMP_CLAUSE_ALIGNED_ALIGNMENT (cl2)) != 1)
4689 return false;
4690 break;
4691 case OMP_CLAUSE_LINEAR:
4692 if (simple_cst_equal (OMP_CLAUSE_LINEAR_STEP (cl1),
4693 OMP_CLAUSE_LINEAR_STEP (cl2)) != 1)
4694 return false;
4695 break;
4696 case OMP_CLAUSE_SIMDLEN:
4697 if (simple_cst_equal (OMP_CLAUSE_SIMDLEN_EXPR (cl1),
4698 OMP_CLAUSE_SIMDLEN_EXPR (cl2)) != 1)
4699 return false;
4700 default:
4701 break;
4704 return true;
4707 /* Compare two constructor-element-type constants. Return 1 if the lists
4708 are known to be equal; otherwise return 0. */
4710 static bool
4711 simple_cst_list_equal (const_tree l1, const_tree l2)
4713 while (l1 != NULL_TREE && l2 != NULL_TREE)
4715 if (simple_cst_equal (TREE_VALUE (l1), TREE_VALUE (l2)) != 1)
4716 return false;
4718 l1 = TREE_CHAIN (l1);
4719 l2 = TREE_CHAIN (l2);
4722 return l1 == l2;
4725 /* Compare two attributes for their value identity. Return true if the
4726 attribute values are known to be equal; otherwise return false.
4729 static bool
4730 attribute_value_equal (const_tree attr1, const_tree attr2)
4732 if (TREE_VALUE (attr1) == TREE_VALUE (attr2))
4733 return true;
4735 if (TREE_VALUE (attr1) != NULL_TREE
4736 && TREE_CODE (TREE_VALUE (attr1)) == TREE_LIST
4737 && TREE_VALUE (attr2) != NULL
4738 && TREE_CODE (TREE_VALUE (attr2)) == TREE_LIST)
4739 return (simple_cst_list_equal (TREE_VALUE (attr1),
4740 TREE_VALUE (attr2)) == 1);
4742 if ((flag_openmp || flag_openmp_simd)
4743 && TREE_VALUE (attr1) && TREE_VALUE (attr2)
4744 && TREE_CODE (TREE_VALUE (attr1)) == OMP_CLAUSE
4745 && TREE_CODE (TREE_VALUE (attr2)) == OMP_CLAUSE)
4746 return omp_declare_simd_clauses_equal (TREE_VALUE (attr1),
4747 TREE_VALUE (attr2));
4749 return (simple_cst_equal (TREE_VALUE (attr1), TREE_VALUE (attr2)) == 1);
4752 /* Return 0 if the attributes for two types are incompatible, 1 if they
4753 are compatible, and 2 if they are nearly compatible (which causes a
4754 warning to be generated). */
4756 comp_type_attributes (const_tree type1, const_tree type2)
4758 const_tree a1 = TYPE_ATTRIBUTES (type1);
4759 const_tree a2 = TYPE_ATTRIBUTES (type2);
4760 const_tree a;
4762 if (a1 == a2)
4763 return 1;
4764 for (a = a1; a != NULL_TREE; a = TREE_CHAIN (a))
4766 const struct attribute_spec *as;
4767 const_tree attr;
4769 as = lookup_attribute_spec (get_attribute_name (a));
4770 if (!as || as->affects_type_identity == false)
4771 continue;
4773 attr = lookup_attribute (as->name, CONST_CAST_TREE (a2));
4774 if (!attr || !attribute_value_equal (a, attr))
4775 break;
4777 if (!a)
4779 for (a = a2; a != NULL_TREE; a = TREE_CHAIN (a))
4781 const struct attribute_spec *as;
4783 as = lookup_attribute_spec (get_attribute_name (a));
4784 if (!as || as->affects_type_identity == false)
4785 continue;
4787 if (!lookup_attribute (as->name, CONST_CAST_TREE (a1)))
4788 break;
4789 /* We don't need to compare trees again, as we did this
4790 already in first loop. */
4792 /* All types - affecting identity - are equal, so
4793 there is no need to call target hook for comparison. */
4794 if (!a)
4795 return 1;
4797 /* As some type combinations - like default calling-convention - might
4798 be compatible, we have to call the target hook to get the final result. */
4799 return targetm.comp_type_attributes (type1, type2);
4802 /* Return a type like TTYPE except that its TYPE_ATTRIBUTE
4803 is ATTRIBUTE.
4805 Record such modified types already made so we don't make duplicates. */
4807 tree
4808 build_type_attribute_variant (tree ttype, tree attribute)
4810 return build_type_attribute_qual_variant (ttype, attribute,
4811 TYPE_QUALS (ttype));
4815 /* Reset the expression *EXPR_P, a size or position.
4817 ??? We could reset all non-constant sizes or positions. But it's cheap
4818 enough to not do so and refrain from adding workarounds to dwarf2out.c.
4820 We need to reset self-referential sizes or positions because they cannot
4821 be gimplified and thus can contain a CALL_EXPR after the gimplification
4822 is finished, which will run afoul of LTO streaming. And they need to be
4823 reset to something essentially dummy but not constant, so as to preserve
4824 the properties of the object they are attached to. */
4826 static inline void
4827 free_lang_data_in_one_sizepos (tree *expr_p)
4829 tree expr = *expr_p;
4830 if (CONTAINS_PLACEHOLDER_P (expr))
4831 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr));
4835 /* Reset all the fields in a binfo node BINFO. We only keep
4836 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */
4838 static void
4839 free_lang_data_in_binfo (tree binfo)
4841 unsigned i;
4842 tree t;
4844 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
4846 BINFO_VIRTUALS (binfo) = NULL_TREE;
4847 BINFO_BASE_ACCESSES (binfo) = NULL;
4848 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
4849 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
4851 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t)
4852 free_lang_data_in_binfo (t);
4856 /* Reset all language specific information still present in TYPE. */
4858 static void
4859 free_lang_data_in_type (tree type)
4861 gcc_assert (TYPE_P (type));
4863 /* Give the FE a chance to remove its own data first. */
4864 lang_hooks.free_lang_data (type);
4866 TREE_LANG_FLAG_0 (type) = 0;
4867 TREE_LANG_FLAG_1 (type) = 0;
4868 TREE_LANG_FLAG_2 (type) = 0;
4869 TREE_LANG_FLAG_3 (type) = 0;
4870 TREE_LANG_FLAG_4 (type) = 0;
4871 TREE_LANG_FLAG_5 (type) = 0;
4872 TREE_LANG_FLAG_6 (type) = 0;
4874 if (TREE_CODE (type) == FUNCTION_TYPE)
4876 /* Remove the const and volatile qualifiers from arguments. The
4877 C++ front end removes them, but the C front end does not,
4878 leading to false ODR violation errors when merging two
4879 instances of the same function signature compiled by
4880 different front ends. */
4881 tree p;
4883 for (p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p))
4885 tree arg_type = TREE_VALUE (p);
4887 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type))
4889 int quals = TYPE_QUALS (arg_type)
4890 & ~TYPE_QUAL_CONST
4891 & ~TYPE_QUAL_VOLATILE;
4892 TREE_VALUE (p) = build_qualified_type (arg_type, quals);
4893 free_lang_data_in_type (TREE_VALUE (p));
4898 /* Remove members that are not actually FIELD_DECLs from the field
4899 list of an aggregate. These occur in C++. */
4900 if (RECORD_OR_UNION_TYPE_P (type))
4902 tree prev, member;
4904 /* Note that TYPE_FIELDS can be shared across distinct
4905 TREE_TYPEs. Therefore, if the first field of TYPE_FIELDS is
4906 to be removed, we cannot set its TREE_CHAIN to NULL.
4907 Otherwise, we would not be able to find all the other fields
4908 in the other instances of this TREE_TYPE.
4910 This was causing an ICE in testsuite/g++.dg/lto/20080915.C. */
4911 prev = NULL_TREE;
4912 member = TYPE_FIELDS (type);
4913 while (member)
4915 if (TREE_CODE (member) == FIELD_DECL
4916 || TREE_CODE (member) == TYPE_DECL)
4918 if (prev)
4919 TREE_CHAIN (prev) = member;
4920 else
4921 TYPE_FIELDS (type) = member;
4922 prev = member;
4925 member = TREE_CHAIN (member);
4928 if (prev)
4929 TREE_CHAIN (prev) = NULL_TREE;
4930 else
4931 TYPE_FIELDS (type) = NULL_TREE;
4933 TYPE_METHODS (type) = NULL_TREE;
4934 if (TYPE_BINFO (type))
4935 free_lang_data_in_binfo (TYPE_BINFO (type));
4937 else
4939 /* For non-aggregate types, clear out the language slot (which
4940 overloads TYPE_BINFO). */
4941 TYPE_LANG_SLOT_1 (type) = NULL_TREE;
4943 if (INTEGRAL_TYPE_P (type)
4944 || SCALAR_FLOAT_TYPE_P (type)
4945 || FIXED_POINT_TYPE_P (type))
4947 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type));
4948 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type));
4952 free_lang_data_in_one_sizepos (&TYPE_SIZE (type));
4953 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type));
4955 if (TYPE_CONTEXT (type)
4956 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK)
4958 tree ctx = TYPE_CONTEXT (type);
4961 ctx = BLOCK_SUPERCONTEXT (ctx);
4963 while (ctx && TREE_CODE (ctx) == BLOCK);
4964 TYPE_CONTEXT (type) = ctx;
4969 /* Return true if DECL may need an assembler name to be set. */
4971 static inline bool
4972 need_assembler_name_p (tree decl)
4974 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */
4975 if (TREE_CODE (decl) != FUNCTION_DECL
4976 && TREE_CODE (decl) != VAR_DECL)
4977 return false;
4979 /* If DECL already has its assembler name set, it does not need a
4980 new one. */
4981 if (!HAS_DECL_ASSEMBLER_NAME_P (decl)
4982 || DECL_ASSEMBLER_NAME_SET_P (decl))
4983 return false;
4985 /* Abstract decls do not need an assembler name. */
4986 if (DECL_ABSTRACT (decl))
4987 return false;
4989 /* For VAR_DECLs, only static, public and external symbols need an
4990 assembler name. */
4991 if (TREE_CODE (decl) == VAR_DECL
4992 && !TREE_STATIC (decl)
4993 && !TREE_PUBLIC (decl)
4994 && !DECL_EXTERNAL (decl))
4995 return false;
4997 if (TREE_CODE (decl) == FUNCTION_DECL)
4999 /* Do not set assembler name on builtins. Allow RTL expansion to
5000 decide whether to expand inline or via a regular call. */
5001 if (DECL_BUILT_IN (decl)
5002 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND)
5003 return false;
5005 /* Functions represented in the callgraph need an assembler name. */
5006 if (cgraph_get_node (decl) != NULL)
5007 return true;
5009 /* Unused and not public functions don't need an assembler name. */
5010 if (!TREE_USED (decl) && !TREE_PUBLIC (decl))
5011 return false;
5014 return true;
5018 /* Reset all language specific information still present in symbol
5019 DECL. */
5021 static void
5022 free_lang_data_in_decl (tree decl)
5024 gcc_assert (DECL_P (decl));
5026 /* Give the FE a chance to remove its own data first. */
5027 lang_hooks.free_lang_data (decl);
5029 TREE_LANG_FLAG_0 (decl) = 0;
5030 TREE_LANG_FLAG_1 (decl) = 0;
5031 TREE_LANG_FLAG_2 (decl) = 0;
5032 TREE_LANG_FLAG_3 (decl) = 0;
5033 TREE_LANG_FLAG_4 (decl) = 0;
5034 TREE_LANG_FLAG_5 (decl) = 0;
5035 TREE_LANG_FLAG_6 (decl) = 0;
5037 free_lang_data_in_one_sizepos (&DECL_SIZE (decl));
5038 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl));
5039 if (TREE_CODE (decl) == FIELD_DECL)
5041 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl));
5042 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE)
5043 DECL_QUALIFIER (decl) = NULL_TREE;
5046 if (TREE_CODE (decl) == FUNCTION_DECL)
5048 struct cgraph_node *node;
5049 if (!(node = cgraph_get_node (decl))
5050 || (!node->definition && !node->clones))
5052 if (node)
5053 cgraph_release_function_body (node);
5054 else
5056 release_function_body (decl);
5057 DECL_ARGUMENTS (decl) = NULL;
5058 DECL_RESULT (decl) = NULL;
5059 DECL_INITIAL (decl) = error_mark_node;
5062 if (gimple_has_body_p (decl))
5064 tree t;
5066 /* If DECL has a gimple body, then the context for its
5067 arguments must be DECL. Otherwise, it doesn't really
5068 matter, as we will not be emitting any code for DECL. In
5069 general, there may be other instances of DECL created by
5070 the front end and since PARM_DECLs are generally shared,
5071 their DECL_CONTEXT changes as the replicas of DECL are
5072 created. The only time where DECL_CONTEXT is important
5073 is for the FUNCTION_DECLs that have a gimple body (since
5074 the PARM_DECL will be used in the function's body). */
5075 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t))
5076 DECL_CONTEXT (t) = decl;
5079 /* DECL_SAVED_TREE holds the GENERIC representation for DECL.
5080 At this point, it is not needed anymore. */
5081 DECL_SAVED_TREE (decl) = NULL_TREE;
5083 /* Clear the abstract origin if it refers to a method. Otherwise
5084 dwarf2out.c will ICE as we clear TYPE_METHODS and thus the
5085 origin will not be output correctly. */
5086 if (DECL_ABSTRACT_ORIGIN (decl)
5087 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))
5088 && RECORD_OR_UNION_TYPE_P
5089 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl))))
5090 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE;
5092 /* Sometimes the C++ frontend doesn't manage to transform a temporary
5093 DECL_VINDEX referring to itself into a vtable slot number as it
5094 should. Happens with functions that are copied and then forgotten
5095 about. Just clear it, it won't matter anymore. */
5096 if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl)))
5097 DECL_VINDEX (decl) = NULL_TREE;
5099 else if (TREE_CODE (decl) == VAR_DECL)
5101 if ((DECL_EXTERNAL (decl)
5102 && (!TREE_STATIC (decl) || !TREE_READONLY (decl)))
5103 || (decl_function_context (decl) && !TREE_STATIC (decl)))
5104 DECL_INITIAL (decl) = NULL_TREE;
5106 else if (TREE_CODE (decl) == TYPE_DECL
5107 || TREE_CODE (decl) == FIELD_DECL)
5108 DECL_INITIAL (decl) = NULL_TREE;
5109 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL
5110 && DECL_INITIAL (decl)
5111 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK)
5113 /* Strip builtins from the translation-unit BLOCK. We still have targets
5114 without builtin_decl_explicit support and also builtins are shared
5115 nodes and thus we can't use TREE_CHAIN in multiple lists. */
5116 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl));
5117 while (*nextp)
5119 tree var = *nextp;
5120 if (TREE_CODE (var) == FUNCTION_DECL
5121 && DECL_BUILT_IN (var))
5122 *nextp = TREE_CHAIN (var);
5123 else
5124 nextp = &TREE_CHAIN (var);
5130 /* Data used when collecting DECLs and TYPEs for language data removal. */
5132 struct free_lang_data_d
5134 /* Worklist to avoid excessive recursion. */
5135 vec<tree> worklist;
5137 /* Set of traversed objects. Used to avoid duplicate visits. */
5138 struct pointer_set_t *pset;
5140 /* Array of symbols to process with free_lang_data_in_decl. */
5141 vec<tree> decls;
5143 /* Array of types to process with free_lang_data_in_type. */
5144 vec<tree> types;
5148 /* Save all language fields needed to generate proper debug information
5149 for DECL. This saves most fields cleared out by free_lang_data_in_decl. */
5151 static void
5152 save_debug_info_for_decl (tree t)
5154 /*struct saved_debug_info_d *sdi;*/
5156 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && DECL_P (t));
5158 /* FIXME. Partial implementation for saving debug info removed. */
5162 /* Save all language fields needed to generate proper debug information
5163 for TYPE. This saves most fields cleared out by free_lang_data_in_type. */
5165 static void
5166 save_debug_info_for_type (tree t)
5168 /*struct saved_debug_info_d *sdi;*/
5170 gcc_assert (debug_info_level > DINFO_LEVEL_TERSE && t && TYPE_P (t));
5172 /* FIXME. Partial implementation for saving debug info removed. */
5176 /* Add type or decl T to one of the list of tree nodes that need their
5177 language data removed. The lists are held inside FLD. */
5179 static void
5180 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld)
5182 if (DECL_P (t))
5184 fld->decls.safe_push (t);
5185 if (debug_info_level > DINFO_LEVEL_TERSE)
5186 save_debug_info_for_decl (t);
5188 else if (TYPE_P (t))
5190 fld->types.safe_push (t);
5191 if (debug_info_level > DINFO_LEVEL_TERSE)
5192 save_debug_info_for_type (t);
5194 else
5195 gcc_unreachable ();
5198 /* Push tree node T into FLD->WORKLIST. */
5200 static inline void
5201 fld_worklist_push (tree t, struct free_lang_data_d *fld)
5203 if (t && !is_lang_specific (t) && !pointer_set_contains (fld->pset, t))
5204 fld->worklist.safe_push ((t));
5208 /* Operand callback helper for free_lang_data_in_node. *TP is the
5209 subtree operand being considered. */
5211 static tree
5212 find_decls_types_r (tree *tp, int *ws, void *data)
5214 tree t = *tp;
5215 struct free_lang_data_d *fld = (struct free_lang_data_d *) data;
5217 if (TREE_CODE (t) == TREE_LIST)
5218 return NULL_TREE;
5220 /* Language specific nodes will be removed, so there is no need
5221 to gather anything under them. */
5222 if (is_lang_specific (t))
5224 *ws = 0;
5225 return NULL_TREE;
5228 if (DECL_P (t))
5230 /* Note that walk_tree does not traverse every possible field in
5231 decls, so we have to do our own traversals here. */
5232 add_tree_to_fld_list (t, fld);
5234 fld_worklist_push (DECL_NAME (t), fld);
5235 fld_worklist_push (DECL_CONTEXT (t), fld);
5236 fld_worklist_push (DECL_SIZE (t), fld);
5237 fld_worklist_push (DECL_SIZE_UNIT (t), fld);
5239 /* We are going to remove everything under DECL_INITIAL for
5240 TYPE_DECLs. No point walking them. */
5241 if (TREE_CODE (t) != TYPE_DECL)
5242 fld_worklist_push (DECL_INITIAL (t), fld);
5244 fld_worklist_push (DECL_ATTRIBUTES (t), fld);
5245 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
5247 if (TREE_CODE (t) == FUNCTION_DECL)
5249 fld_worklist_push (DECL_ARGUMENTS (t), fld);
5250 fld_worklist_push (DECL_RESULT (t), fld);
5252 else if (TREE_CODE (t) == TYPE_DECL)
5254 fld_worklist_push (DECL_ARGUMENT_FLD (t), fld);
5255 fld_worklist_push (DECL_VINDEX (t), fld);
5256 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld);
5258 else if (TREE_CODE (t) == FIELD_DECL)
5260 fld_worklist_push (DECL_FIELD_OFFSET (t), fld);
5261 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld);
5262 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld);
5263 fld_worklist_push (DECL_FCONTEXT (t), fld);
5265 else if (TREE_CODE (t) == VAR_DECL)
5267 fld_worklist_push (DECL_SECTION_NAME (t), fld);
5268 fld_worklist_push (DECL_COMDAT_GROUP (t), fld);
5271 if ((TREE_CODE (t) == VAR_DECL || TREE_CODE (t) == PARM_DECL)
5272 && DECL_HAS_VALUE_EXPR_P (t))
5273 fld_worklist_push (DECL_VALUE_EXPR (t), fld);
5275 if (TREE_CODE (t) != FIELD_DECL
5276 && TREE_CODE (t) != TYPE_DECL)
5277 fld_worklist_push (TREE_CHAIN (t), fld);
5278 *ws = 0;
5280 else if (TYPE_P (t))
5282 /* Note that walk_tree does not traverse every possible field in
5283 types, so we have to do our own traversals here. */
5284 add_tree_to_fld_list (t, fld);
5286 if (!RECORD_OR_UNION_TYPE_P (t))
5287 fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
5288 fld_worklist_push (TYPE_SIZE (t), fld);
5289 fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
5290 fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
5291 fld_worklist_push (TYPE_POINTER_TO (t), fld);
5292 fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
5293 fld_worklist_push (TYPE_NAME (t), fld);
5294 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream
5295 them and thus do not and want not to reach unused pointer types
5296 this way. */
5297 if (!POINTER_TYPE_P (t))
5298 fld_worklist_push (TYPE_MINVAL (t), fld);
5299 if (!RECORD_OR_UNION_TYPE_P (t))
5300 fld_worklist_push (TYPE_MAXVAL (t), fld);
5301 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld);
5302 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus
5303 do not and want not to reach unused variants this way. */
5304 if (TYPE_CONTEXT (t))
5306 tree ctx = TYPE_CONTEXT (t);
5307 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one.
5308 So push that instead. */
5309 while (ctx && TREE_CODE (ctx) == BLOCK)
5310 ctx = BLOCK_SUPERCONTEXT (ctx);
5311 fld_worklist_push (ctx, fld);
5313 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not
5314 and want not to reach unused types this way. */
5316 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t))
5318 unsigned i;
5319 tree tem;
5320 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem)
5321 fld_worklist_push (TREE_TYPE (tem), fld);
5322 tem = BINFO_VIRTUALS (TYPE_BINFO (t));
5323 if (tem
5324 /* The Java FE overloads BINFO_VIRTUALS for its own purpose. */
5325 && TREE_CODE (tem) == TREE_LIST)
5328 fld_worklist_push (TREE_VALUE (tem), fld);
5329 tem = TREE_CHAIN (tem);
5331 while (tem);
5333 if (RECORD_OR_UNION_TYPE_P (t))
5335 tree tem;
5336 /* Push all TYPE_FIELDS - there can be interleaving interesting
5337 and non-interesting things. */
5338 tem = TYPE_FIELDS (t);
5339 while (tem)
5341 if (TREE_CODE (tem) == FIELD_DECL
5342 || TREE_CODE (tem) == TYPE_DECL)
5343 fld_worklist_push (tem, fld);
5344 tem = TREE_CHAIN (tem);
5348 fld_worklist_push (TYPE_STUB_DECL (t), fld);
5349 *ws = 0;
5351 else if (TREE_CODE (t) == BLOCK)
5353 tree tem;
5354 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem))
5355 fld_worklist_push (tem, fld);
5356 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem))
5357 fld_worklist_push (tem, fld);
5358 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld);
5361 if (TREE_CODE (t) != IDENTIFIER_NODE
5362 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED))
5363 fld_worklist_push (TREE_TYPE (t), fld);
5365 return NULL_TREE;
5369 /* Find decls and types in T. */
5371 static void
5372 find_decls_types (tree t, struct free_lang_data_d *fld)
5374 while (1)
5376 if (!pointer_set_contains (fld->pset, t))
5377 walk_tree (&t, find_decls_types_r, fld, fld->pset);
5378 if (fld->worklist.is_empty ())
5379 break;
5380 t = fld->worklist.pop ();
5384 /* Translate all the types in LIST with the corresponding runtime
5385 types. */
5387 static tree
5388 get_eh_types_for_runtime (tree list)
5390 tree head, prev;
5392 if (list == NULL_TREE)
5393 return NULL_TREE;
5395 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5396 prev = head;
5397 list = TREE_CHAIN (list);
5398 while (list)
5400 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list)));
5401 TREE_CHAIN (prev) = n;
5402 prev = TREE_CHAIN (prev);
5403 list = TREE_CHAIN (list);
5406 return head;
5410 /* Find decls and types referenced in EH region R and store them in
5411 FLD->DECLS and FLD->TYPES. */
5413 static void
5414 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld)
5416 switch (r->type)
5418 case ERT_CLEANUP:
5419 break;
5421 case ERT_TRY:
5423 eh_catch c;
5425 /* The types referenced in each catch must first be changed to the
5426 EH types used at runtime. This removes references to FE types
5427 in the region. */
5428 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch)
5430 c->type_list = get_eh_types_for_runtime (c->type_list);
5431 walk_tree (&c->type_list, find_decls_types_r, fld, fld->pset);
5434 break;
5436 case ERT_ALLOWED_EXCEPTIONS:
5437 r->u.allowed.type_list
5438 = get_eh_types_for_runtime (r->u.allowed.type_list);
5439 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, fld->pset);
5440 break;
5442 case ERT_MUST_NOT_THROW:
5443 walk_tree (&r->u.must_not_throw.failure_decl,
5444 find_decls_types_r, fld, fld->pset);
5445 break;
5450 /* Find decls and types referenced in cgraph node N and store them in
5451 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5452 look for *every* kind of DECL and TYPE node reachable from N,
5453 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5454 NAMESPACE_DECLs, etc). */
5456 static void
5457 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld)
5459 basic_block bb;
5460 struct function *fn;
5461 unsigned ix;
5462 tree t;
5464 find_decls_types (n->decl, fld);
5466 if (!gimple_has_body_p (n->decl))
5467 return;
5469 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL);
5471 fn = DECL_STRUCT_FUNCTION (n->decl);
5473 /* Traverse locals. */
5474 FOR_EACH_LOCAL_DECL (fn, ix, t)
5475 find_decls_types (t, fld);
5477 /* Traverse EH regions in FN. */
5479 eh_region r;
5480 FOR_ALL_EH_REGION_FN (r, fn)
5481 find_decls_types_in_eh_region (r, fld);
5484 /* Traverse every statement in FN. */
5485 FOR_EACH_BB_FN (bb, fn)
5487 gimple_stmt_iterator si;
5488 unsigned i;
5490 for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
5492 gimple phi = gsi_stmt (si);
5494 for (i = 0; i < gimple_phi_num_args (phi); i++)
5496 tree *arg_p = gimple_phi_arg_def_ptr (phi, i);
5497 find_decls_types (*arg_p, fld);
5501 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
5503 gimple stmt = gsi_stmt (si);
5505 if (is_gimple_call (stmt))
5506 find_decls_types (gimple_call_fntype (stmt), fld);
5508 for (i = 0; i < gimple_num_ops (stmt); i++)
5510 tree arg = gimple_op (stmt, i);
5511 find_decls_types (arg, fld);
5518 /* Find decls and types referenced in varpool node N and store them in
5519 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will
5520 look for *every* kind of DECL and TYPE node reachable from N,
5521 including those embedded inside types and decls (i.e,, TYPE_DECLs,
5522 NAMESPACE_DECLs, etc). */
5524 static void
5525 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld)
5527 find_decls_types (v->decl, fld);
5530 /* If T needs an assembler name, have one created for it. */
5532 void
5533 assign_assembler_name_if_neeeded (tree t)
5535 if (need_assembler_name_p (t))
5537 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit
5538 diagnostics that use input_location to show locus
5539 information. The problem here is that, at this point,
5540 input_location is generally anchored to the end of the file
5541 (since the parser is long gone), so we don't have a good
5542 position to pin it to.
5544 To alleviate this problem, this uses the location of T's
5545 declaration. Examples of this are
5546 testsuite/g++.dg/template/cond2.C and
5547 testsuite/g++.dg/template/pr35240.C. */
5548 location_t saved_location = input_location;
5549 input_location = DECL_SOURCE_LOCATION (t);
5551 decl_assembler_name (t);
5553 input_location = saved_location;
5558 /* Free language specific information for every operand and expression
5559 in every node of the call graph. This process operates in three stages:
5561 1- Every callgraph node and varpool node is traversed looking for
5562 decls and types embedded in them. This is a more exhaustive
5563 search than that done by find_referenced_vars, because it will
5564 also collect individual fields, decls embedded in types, etc.
5566 2- All the decls found are sent to free_lang_data_in_decl.
5568 3- All the types found are sent to free_lang_data_in_type.
5570 The ordering between decls and types is important because
5571 free_lang_data_in_decl sets assembler names, which includes
5572 mangling. So types cannot be freed up until assembler names have
5573 been set up. */
5575 static void
5576 free_lang_data_in_cgraph (void)
5578 struct cgraph_node *n;
5579 varpool_node *v;
5580 struct free_lang_data_d fld;
5581 tree t;
5582 unsigned i;
5583 alias_pair *p;
5585 /* Initialize sets and arrays to store referenced decls and types. */
5586 fld.pset = pointer_set_create ();
5587 fld.worklist.create (0);
5588 fld.decls.create (100);
5589 fld.types.create (100);
5591 /* Find decls and types in the body of every function in the callgraph. */
5592 FOR_EACH_FUNCTION (n)
5593 find_decls_types_in_node (n, &fld);
5595 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p)
5596 find_decls_types (p->decl, &fld);
5598 /* Find decls and types in every varpool symbol. */
5599 FOR_EACH_VARIABLE (v)
5600 find_decls_types_in_var (v, &fld);
5602 /* Set the assembler name on every decl found. We need to do this
5603 now because free_lang_data_in_decl will invalidate data needed
5604 for mangling. This breaks mangling on interdependent decls. */
5605 FOR_EACH_VEC_ELT (fld.decls, i, t)
5606 assign_assembler_name_if_neeeded (t);
5608 /* Traverse every decl found freeing its language data. */
5609 FOR_EACH_VEC_ELT (fld.decls, i, t)
5610 free_lang_data_in_decl (t);
5612 /* Traverse every type found freeing its language data. */
5613 FOR_EACH_VEC_ELT (fld.types, i, t)
5614 free_lang_data_in_type (t);
5616 pointer_set_destroy (fld.pset);
5617 fld.worklist.release ();
5618 fld.decls.release ();
5619 fld.types.release ();
5623 /* Free resources that are used by FE but are not needed once they are done. */
5625 static unsigned
5626 free_lang_data (void)
5628 unsigned i;
5630 /* If we are the LTO frontend we have freed lang-specific data already. */
5631 if (in_lto_p
5632 || !flag_generate_lto)
5633 return 0;
5635 /* Allocate and assign alias sets to the standard integer types
5636 while the slots are still in the way the frontends generated them. */
5637 for (i = 0; i < itk_none; ++i)
5638 if (integer_types[i])
5639 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]);
5641 /* Traverse the IL resetting language specific information for
5642 operands, expressions, etc. */
5643 free_lang_data_in_cgraph ();
5645 /* Create gimple variants for common types. */
5646 ptrdiff_type_node = integer_type_node;
5647 fileptr_type_node = ptr_type_node;
5649 /* Reset some langhooks. Do not reset types_compatible_p, it may
5650 still be used indirectly via the get_alias_set langhook. */
5651 lang_hooks.dwarf_name = lhd_dwarf_name;
5652 lang_hooks.decl_printable_name = gimple_decl_printable_name;
5653 /* We do not want the default decl_assembler_name implementation,
5654 rather if we have fixed everything we want a wrapper around it
5655 asserting that all non-local symbols already got their assembler
5656 name and only produce assembler names for local symbols. Or rather
5657 make sure we never call decl_assembler_name on local symbols and
5658 devise a separate, middle-end private scheme for it. */
5660 /* Reset diagnostic machinery. */
5661 tree_diagnostics_defaults (global_dc);
5663 return 0;
5667 namespace {
5669 const pass_data pass_data_ipa_free_lang_data =
5671 SIMPLE_IPA_PASS, /* type */
5672 "*free_lang_data", /* name */
5673 OPTGROUP_NONE, /* optinfo_flags */
5674 false, /* has_gate */
5675 true, /* has_execute */
5676 TV_IPA_FREE_LANG_DATA, /* tv_id */
5677 0, /* properties_required */
5678 0, /* properties_provided */
5679 0, /* properties_destroyed */
5680 0, /* todo_flags_start */
5681 0, /* todo_flags_finish */
5684 class pass_ipa_free_lang_data : public simple_ipa_opt_pass
5686 public:
5687 pass_ipa_free_lang_data (gcc::context *ctxt)
5688 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt)
5691 /* opt_pass methods: */
5692 unsigned int execute () { return free_lang_data (); }
5694 }; // class pass_ipa_free_lang_data
5696 } // anon namespace
5698 simple_ipa_opt_pass *
5699 make_pass_ipa_free_lang_data (gcc::context *ctxt)
5701 return new pass_ipa_free_lang_data (ctxt);
5704 /* The backbone of is_attribute_p(). ATTR_LEN is the string length of
5705 ATTR_NAME. Also used internally by remove_attribute(). */
5706 bool
5707 private_is_attribute_p (const char *attr_name, size_t attr_len, const_tree ident)
5709 size_t ident_len = IDENTIFIER_LENGTH (ident);
5711 if (ident_len == attr_len)
5713 if (strcmp (attr_name, IDENTIFIER_POINTER (ident)) == 0)
5714 return true;
5716 else if (ident_len == attr_len + 4)
5718 /* There is the possibility that ATTR is 'text' and IDENT is
5719 '__text__'. */
5720 const char *p = IDENTIFIER_POINTER (ident);
5721 if (p[0] == '_' && p[1] == '_'
5722 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5723 && strncmp (attr_name, p + 2, attr_len) == 0)
5724 return true;
5727 return false;
5730 /* The backbone of lookup_attribute(). ATTR_LEN is the string length
5731 of ATTR_NAME, and LIST is not NULL_TREE. */
5732 tree
5733 private_lookup_attribute (const char *attr_name, size_t attr_len, tree list)
5735 while (list)
5737 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5739 if (ident_len == attr_len)
5741 if (!strcmp (attr_name,
5742 IDENTIFIER_POINTER (get_attribute_name (list))))
5743 break;
5745 /* TODO: If we made sure that attributes were stored in the
5746 canonical form without '__...__' (ie, as in 'text' as opposed
5747 to '__text__') then we could avoid the following case. */
5748 else if (ident_len == attr_len + 4)
5750 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5751 if (p[0] == '_' && p[1] == '_'
5752 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5753 && strncmp (attr_name, p + 2, attr_len) == 0)
5754 break;
5756 list = TREE_CHAIN (list);
5759 return list;
5762 /* A variant of lookup_attribute() that can be used with an identifier
5763 as the first argument, and where the identifier can be either
5764 'text' or '__text__'.
5766 Given an attribute ATTR_IDENTIFIER, and a list of attributes LIST,
5767 return a pointer to the attribute's list element if the attribute
5768 is part of the list, or NULL_TREE if not found. If the attribute
5769 appears more than once, this only returns the first occurrence; the
5770 TREE_CHAIN of the return value should be passed back in if further
5771 occurrences are wanted. ATTR_IDENTIFIER must be an identifier but
5772 can be in the form 'text' or '__text__'. */
5773 static tree
5774 lookup_ident_attribute (tree attr_identifier, tree list)
5776 gcc_checking_assert (TREE_CODE (attr_identifier) == IDENTIFIER_NODE);
5778 while (list)
5780 gcc_checking_assert (TREE_CODE (get_attribute_name (list))
5781 == IDENTIFIER_NODE);
5783 /* Identifiers can be compared directly for equality. */
5784 if (attr_identifier == get_attribute_name (list))
5785 break;
5787 /* If they are not equal, they may still be one in the form
5788 'text' while the other one is in the form '__text__'. TODO:
5789 If we were storing attributes in normalized 'text' form, then
5790 this could all go away and we could take full advantage of
5791 the fact that we're comparing identifiers. :-) */
5793 size_t attr_len = IDENTIFIER_LENGTH (attr_identifier);
5794 size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
5796 if (ident_len == attr_len + 4)
5798 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5799 const char *q = IDENTIFIER_POINTER (attr_identifier);
5800 if (p[0] == '_' && p[1] == '_'
5801 && p[ident_len - 2] == '_' && p[ident_len - 1] == '_'
5802 && strncmp (q, p + 2, attr_len) == 0)
5803 break;
5805 else if (ident_len + 4 == attr_len)
5807 const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
5808 const char *q = IDENTIFIER_POINTER (attr_identifier);
5809 if (q[0] == '_' && q[1] == '_'
5810 && q[attr_len - 2] == '_' && q[attr_len - 1] == '_'
5811 && strncmp (q + 2, p, ident_len) == 0)
5812 break;
5815 list = TREE_CHAIN (list);
5818 return list;
5821 /* Remove any instances of attribute ATTR_NAME in LIST and return the
5822 modified list. */
5824 tree
5825 remove_attribute (const char *attr_name, tree list)
5827 tree *p;
5828 size_t attr_len = strlen (attr_name);
5830 gcc_checking_assert (attr_name[0] != '_');
5832 for (p = &list; *p; )
5834 tree l = *p;
5835 /* TODO: If we were storing attributes in normalized form, here
5836 we could use a simple strcmp(). */
5837 if (private_is_attribute_p (attr_name, attr_len, get_attribute_name (l)))
5838 *p = TREE_CHAIN (l);
5839 else
5840 p = &TREE_CHAIN (l);
5843 return list;
5846 /* Return an attribute list that is the union of a1 and a2. */
5848 tree
5849 merge_attributes (tree a1, tree a2)
5851 tree attributes;
5853 /* Either one unset? Take the set one. */
5855 if ((attributes = a1) == 0)
5856 attributes = a2;
5858 /* One that completely contains the other? Take it. */
5860 else if (a2 != 0 && ! attribute_list_contained (a1, a2))
5862 if (attribute_list_contained (a2, a1))
5863 attributes = a2;
5864 else
5866 /* Pick the longest list, and hang on the other list. */
5868 if (list_length (a1) < list_length (a2))
5869 attributes = a2, a2 = a1;
5871 for (; a2 != 0; a2 = TREE_CHAIN (a2))
5873 tree a;
5874 for (a = lookup_ident_attribute (get_attribute_name (a2),
5875 attributes);
5876 a != NULL_TREE && !attribute_value_equal (a, a2);
5877 a = lookup_ident_attribute (get_attribute_name (a2),
5878 TREE_CHAIN (a)))
5880 if (a == NULL_TREE)
5882 a1 = copy_node (a2);
5883 TREE_CHAIN (a1) = attributes;
5884 attributes = a1;
5889 return attributes;
5892 /* Given types T1 and T2, merge their attributes and return
5893 the result. */
5895 tree
5896 merge_type_attributes (tree t1, tree t2)
5898 return merge_attributes (TYPE_ATTRIBUTES (t1),
5899 TYPE_ATTRIBUTES (t2));
5902 /* Given decls OLDDECL and NEWDECL, merge their attributes and return
5903 the result. */
5905 tree
5906 merge_decl_attributes (tree olddecl, tree newdecl)
5908 return merge_attributes (DECL_ATTRIBUTES (olddecl),
5909 DECL_ATTRIBUTES (newdecl));
5912 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES
5914 /* Specialization of merge_decl_attributes for various Windows targets.
5916 This handles the following situation:
5918 __declspec (dllimport) int foo;
5919 int foo;
5921 The second instance of `foo' nullifies the dllimport. */
5923 tree
5924 merge_dllimport_decl_attributes (tree old, tree new_tree)
5926 tree a;
5927 int delete_dllimport_p = 1;
5929 /* What we need to do here is remove from `old' dllimport if it doesn't
5930 appear in `new'. dllimport behaves like extern: if a declaration is
5931 marked dllimport and a definition appears later, then the object
5932 is not dllimport'd. We also remove a `new' dllimport if the old list
5933 contains dllexport: dllexport always overrides dllimport, regardless
5934 of the order of declaration. */
5935 if (!VAR_OR_FUNCTION_DECL_P (new_tree))
5936 delete_dllimport_p = 0;
5937 else if (DECL_DLLIMPORT_P (new_tree)
5938 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (old)))
5940 DECL_DLLIMPORT_P (new_tree) = 0;
5941 warning (OPT_Wattributes, "%q+D already declared with dllexport attribute: "
5942 "dllimport ignored", new_tree);
5944 else if (DECL_DLLIMPORT_P (old) && !DECL_DLLIMPORT_P (new_tree))
5946 /* Warn about overriding a symbol that has already been used, e.g.:
5947 extern int __attribute__ ((dllimport)) foo;
5948 int* bar () {return &foo;}
5949 int foo;
5951 if (TREE_USED (old))
5953 warning (0, "%q+D redeclared without dllimport attribute "
5954 "after being referenced with dll linkage", new_tree);
5955 /* If we have used a variable's address with dllimport linkage,
5956 keep the old DECL_DLLIMPORT_P flag: the ADDR_EXPR using the
5957 decl may already have had TREE_CONSTANT computed.
5958 We still remove the attribute so that assembler code refers
5959 to '&foo rather than '_imp__foo'. */
5960 if (TREE_CODE (old) == VAR_DECL && TREE_ADDRESSABLE (old))
5961 DECL_DLLIMPORT_P (new_tree) = 1;
5964 /* Let an inline definition silently override the external reference,
5965 but otherwise warn about attribute inconsistency. */
5966 else if (TREE_CODE (new_tree) == VAR_DECL
5967 || !DECL_DECLARED_INLINE_P (new_tree))
5968 warning (OPT_Wattributes, "%q+D redeclared without dllimport attribute: "
5969 "previous dllimport ignored", new_tree);
5971 else
5972 delete_dllimport_p = 0;
5974 a = merge_attributes (DECL_ATTRIBUTES (old), DECL_ATTRIBUTES (new_tree));
5976 if (delete_dllimport_p)
5977 a = remove_attribute ("dllimport", a);
5979 return a;
5982 /* Handle a "dllimport" or "dllexport" attribute; arguments as in
5983 struct attribute_spec.handler. */
5985 tree
5986 handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
5987 bool *no_add_attrs)
5989 tree node = *pnode;
5990 bool is_dllimport;
5992 /* These attributes may apply to structure and union types being created,
5993 but otherwise should pass to the declaration involved. */
5994 if (!DECL_P (node))
5996 if (flags & ((int) ATTR_FLAG_DECL_NEXT | (int) ATTR_FLAG_FUNCTION_NEXT
5997 | (int) ATTR_FLAG_ARRAY_NEXT))
5999 *no_add_attrs = true;
6000 return tree_cons (name, args, NULL_TREE);
6002 if (TREE_CODE (node) == RECORD_TYPE
6003 || TREE_CODE (node) == UNION_TYPE)
6005 node = TYPE_NAME (node);
6006 if (!node)
6007 return NULL_TREE;
6009 else
6011 warning (OPT_Wattributes, "%qE attribute ignored",
6012 name);
6013 *no_add_attrs = true;
6014 return NULL_TREE;
6018 if (TREE_CODE (node) != FUNCTION_DECL
6019 && TREE_CODE (node) != VAR_DECL
6020 && TREE_CODE (node) != TYPE_DECL)
6022 *no_add_attrs = true;
6023 warning (OPT_Wattributes, "%qE attribute ignored",
6024 name);
6025 return NULL_TREE;
6028 if (TREE_CODE (node) == TYPE_DECL
6029 && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
6030 && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
6032 *no_add_attrs = true;
6033 warning (OPT_Wattributes, "%qE attribute ignored",
6034 name);
6035 return NULL_TREE;
6038 is_dllimport = is_attribute_p ("dllimport", name);
6040 /* Report error on dllimport ambiguities seen now before they cause
6041 any damage. */
6042 if (is_dllimport)
6044 /* Honor any target-specific overrides. */
6045 if (!targetm.valid_dllimport_attribute_p (node))
6046 *no_add_attrs = true;
6048 else if (TREE_CODE (node) == FUNCTION_DECL
6049 && DECL_DECLARED_INLINE_P (node))
6051 warning (OPT_Wattributes, "inline function %q+D declared as "
6052 " dllimport: attribute ignored", node);
6053 *no_add_attrs = true;
6055 /* Like MS, treat definition of dllimported variables and
6056 non-inlined functions on declaration as syntax errors. */
6057 else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INITIAL (node))
6059 error ("function %q+D definition is marked dllimport", node);
6060 *no_add_attrs = true;
6063 else if (TREE_CODE (node) == VAR_DECL)
6065 if (DECL_INITIAL (node))
6067 error ("variable %q+D definition is marked dllimport",
6068 node);
6069 *no_add_attrs = true;
6072 /* `extern' needn't be specified with dllimport.
6073 Specify `extern' now and hope for the best. Sigh. */
6074 DECL_EXTERNAL (node) = 1;
6075 /* Also, implicitly give dllimport'd variables declared within
6076 a function global scope, unless declared static. */
6077 if (current_function_decl != NULL_TREE && !TREE_STATIC (node))
6078 TREE_PUBLIC (node) = 1;
6081 if (*no_add_attrs == false)
6082 DECL_DLLIMPORT_P (node) = 1;
6084 else if (TREE_CODE (node) == FUNCTION_DECL
6085 && DECL_DECLARED_INLINE_P (node)
6086 && flag_keep_inline_dllexport)
6087 /* An exported function, even if inline, must be emitted. */
6088 DECL_EXTERNAL (node) = 0;
6090 /* Report error if symbol is not accessible at global scope. */
6091 if (!TREE_PUBLIC (node)
6092 && (TREE_CODE (node) == VAR_DECL
6093 || TREE_CODE (node) == FUNCTION_DECL))
6095 error ("external linkage required for symbol %q+D because of "
6096 "%qE attribute", node, name);
6097 *no_add_attrs = true;
6100 /* A dllexport'd entity must have default visibility so that other
6101 program units (shared libraries or the main executable) can see
6102 it. A dllimport'd entity must have default visibility so that
6103 the linker knows that undefined references within this program
6104 unit can be resolved by the dynamic linker. */
6105 if (!*no_add_attrs)
6107 if (DECL_VISIBILITY_SPECIFIED (node)
6108 && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT)
6109 error ("%qE implies default visibility, but %qD has already "
6110 "been declared with a different visibility",
6111 name, node);
6112 DECL_VISIBILITY (node) = VISIBILITY_DEFAULT;
6113 DECL_VISIBILITY_SPECIFIED (node) = 1;
6116 return NULL_TREE;
6119 #endif /* TARGET_DLLIMPORT_DECL_ATTRIBUTES */
6121 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask
6122 of the various TYPE_QUAL values. Also, set the UPC layout qualifier,
6123 which is either null or a reference to an integral constant. */
6125 static void
6126 set_type_quals (tree type, int type_quals, tree layout_qualifier)
6128 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0;
6129 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
6130 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
6131 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0;
6132 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals);
6133 TYPE_UPC_SHARED (type) = (type_quals & TYPE_QUAL_UPC_SHARED) != 0;
6134 TYPE_UPC_STRICT (type) = (type_quals & TYPE_QUAL_UPC_STRICT) != 0;
6135 TYPE_UPC_RELAXED (type) = (type_quals & TYPE_QUAL_UPC_RELAXED) != 0;
6136 if (TYPE_UPC_SHARED (type))
6137 SET_TYPE_UPC_BLOCK_FACTOR (type, layout_qualifier);
6140 /* Returns true iff CAND is equivalent to BASE with
6141 TYPE_QUALS and LAYOUT_QUALIFIER. */
6143 bool
6144 check_qualified_type (const_tree cand, const_tree base,
6145 int type_quals, tree layout_qualifier)
6147 return (TYPE_QUALS (cand) == type_quals
6148 && TYPE_UPC_BLOCK_FACTOR (cand) == layout_qualifier
6149 && TYPE_NAME (cand) == TYPE_NAME (base)
6150 /* Apparently this is needed for Objective-C. */
6151 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6152 /* Check alignment. */
6153 && TYPE_ALIGN (cand) == TYPE_ALIGN (base)
6154 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6155 TYPE_ATTRIBUTES (base)));
6158 /* Returns true iff CAND is equivalent to BASE with ALIGN. */
6160 static bool
6161 check_aligned_type (const_tree cand, const_tree base, unsigned int align)
6163 return (TYPE_QUALS (cand) == TYPE_QUALS (base)
6164 && TYPE_UPC_BLOCK_FACTOR (cand) == TYPE_UPC_BLOCK_FACTOR (base)
6165 && TYPE_NAME (cand) == TYPE_NAME (base)
6166 /* Apparently this is needed for Objective-C. */
6167 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base)
6168 /* Check alignment. */
6169 && TYPE_ALIGN (cand) == align
6170 && attribute_list_equal (TYPE_ATTRIBUTES (cand),
6171 TYPE_ATTRIBUTES (base)));
6174 /* This function checks to see if TYPE matches the size one of the built-in
6175 atomic types, and returns that core atomic type. */
6177 static tree
6178 find_atomic_core_type (tree type)
6180 tree base_atomic_type;
6182 /* Only handle complete types. */
6183 if (TYPE_SIZE (type) == NULL_TREE)
6184 return NULL_TREE;
6186 HOST_WIDE_INT type_size = tree_to_uhwi (TYPE_SIZE (type));
6187 switch (type_size)
6189 case 8:
6190 base_atomic_type = atomicQI_type_node;
6191 break;
6193 case 16:
6194 base_atomic_type = atomicHI_type_node;
6195 break;
6197 case 32:
6198 base_atomic_type = atomicSI_type_node;
6199 break;
6201 case 64:
6202 base_atomic_type = atomicDI_type_node;
6203 break;
6205 case 128:
6206 base_atomic_type = atomicTI_type_node;
6207 break;
6209 default:
6210 base_atomic_type = NULL_TREE;
6213 return base_atomic_type;
6216 /* Return a version of the TYPE, qualified as indicated by the
6217 TYPE_QUALS, if one exists. If no qualified version exists yet,
6218 return NULL_TREE. */
6220 tree
6221 get_qualified_type_1 (tree type, int type_quals, tree layout_qualifier)
6223 tree t;
6225 if (TYPE_QUALS (type) == type_quals)
6226 return type;
6228 /* Search the chain of variants to see if there is already one there just
6229 like the one we need to have. If so, use that existing one. We must
6230 preserve the TYPE_NAME, since there is code that depends on this. */
6231 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6232 if (check_qualified_type (t, type, type_quals, layout_qualifier))
6233 return t;
6235 return NULL_TREE;
6238 /* Like get_qualified_type_1, but creates the type if it does not
6239 exist. This function never returns NULL_TREE. */
6241 tree
6242 build_qualified_type_1 (tree type, int type_quals, tree layout_qualifier)
6244 tree t;
6246 /* See if we already have the appropriate qualified variant. */
6247 t = get_qualified_type_1 (type, type_quals, layout_qualifier);
6249 /* If not, build it. */
6250 if (!t)
6252 t = build_variant_type_copy (type);
6253 set_type_quals (t, type_quals, layout_qualifier);
6255 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC))
6257 /* See if this object can map to a basic atomic type. */
6258 tree atomic_type = find_atomic_core_type (type);
6259 if (atomic_type)
6261 /* Ensure the alignment of this type is compatible with
6262 the required alignment of the atomic type. */
6263 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t))
6264 TYPE_ALIGN (t) = TYPE_ALIGN (atomic_type);
6268 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6269 /* Propagate structural equality. */
6270 SET_TYPE_STRUCTURAL_EQUALITY (t);
6271 else if (TYPE_CANONICAL (type) != type)
6272 /* Build the underlying canonical type, since it is different
6273 from TYPE. */
6274 TYPE_CANONICAL (t) = build_qualified_type (TYPE_CANONICAL (type),
6275 type_quals);
6276 else
6277 /* T is its own canonical type. */
6278 TYPE_CANONICAL (t) = t;
6282 return t;
6285 /* Create a variant of type T with alignment ALIGN. */
6287 tree
6288 build_aligned_type (tree type, unsigned int align)
6290 tree t;
6292 if (TYPE_PACKED (type)
6293 || TYPE_ALIGN (type) == align)
6294 return type;
6296 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
6297 if (check_aligned_type (t, type, align))
6298 return t;
6300 t = build_variant_type_copy (type);
6301 TYPE_ALIGN (t) = align;
6303 return t;
6306 /* Create a new distinct copy of TYPE. The new type is made its own
6307 MAIN_VARIANT. If TYPE requires structural equality checks, the
6308 resulting type requires structural equality checks; otherwise, its
6309 TYPE_CANONICAL points to itself. */
6311 tree
6312 build_distinct_type_copy (tree type)
6314 tree t = copy_node (type);
6316 TYPE_POINTER_TO (t) = 0;
6317 TYPE_REFERENCE_TO (t) = 0;
6319 /* Set the canonical type either to a new equivalence class, or
6320 propagate the need for structural equality checks. */
6321 if (TYPE_STRUCTURAL_EQUALITY_P (type))
6322 SET_TYPE_STRUCTURAL_EQUALITY (t);
6323 else
6324 TYPE_CANONICAL (t) = t;
6326 /* Make it its own variant. */
6327 TYPE_MAIN_VARIANT (t) = t;
6328 TYPE_NEXT_VARIANT (t) = 0;
6330 /* Note that it is now possible for TYPE_MIN_VALUE to be a value
6331 whose TREE_TYPE is not t. This can also happen in the Ada
6332 frontend when using subtypes. */
6334 return t;
6337 /* Create a new variant of TYPE, equivalent but distinct. This is so
6338 the caller can modify it. TYPE_CANONICAL for the return type will
6339 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types
6340 are considered equal by the language itself (or that both types
6341 require structural equality checks). */
6343 tree
6344 build_variant_type_copy (tree type)
6346 tree t, m = TYPE_MAIN_VARIANT (type);
6348 t = build_distinct_type_copy (type);
6350 /* Since we're building a variant, assume that it is a non-semantic
6351 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */
6352 TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
6354 /* Add the new type to the chain of variants of TYPE. */
6355 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
6356 TYPE_NEXT_VARIANT (m) = t;
6357 TYPE_MAIN_VARIANT (t) = m;
6359 return t;
6362 /* Return true if the from tree in both tree maps are equal. */
6365 tree_map_base_eq (const void *va, const void *vb)
6367 const struct tree_map_base *const a = (const struct tree_map_base *) va,
6368 *const b = (const struct tree_map_base *) vb;
6369 return (a->from == b->from);
6372 /* Hash a from tree in a tree_base_map. */
6374 unsigned int
6375 tree_map_base_hash (const void *item)
6377 return htab_hash_pointer (((const struct tree_map_base *)item)->from);
6380 /* Return true if this tree map structure is marked for garbage collection
6381 purposes. We simply return true if the from tree is marked, so that this
6382 structure goes away when the from tree goes away. */
6385 tree_map_base_marked_p (const void *p)
6387 return ggc_marked_p (((const struct tree_map_base *) p)->from);
6390 /* Hash a from tree in a tree_map. */
6392 unsigned int
6393 tree_map_hash (const void *item)
6395 return (((const struct tree_map *) item)->hash);
6398 /* Hash a from tree in a tree_decl_map. */
6400 unsigned int
6401 tree_decl_map_hash (const void *item)
6403 return DECL_UID (((const struct tree_decl_map *) item)->base.from);
6406 /* Return the initialization priority for DECL. */
6408 priority_type
6409 decl_init_priority_lookup (tree decl)
6411 struct tree_priority_map *h;
6412 struct tree_map_base in;
6414 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6415 in.from = decl;
6416 h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
6417 return h ? h->init : DEFAULT_INIT_PRIORITY;
6420 /* Return the finalization priority for DECL. */
6422 priority_type
6423 decl_fini_priority_lookup (tree decl)
6425 struct tree_priority_map *h;
6426 struct tree_map_base in;
6428 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
6429 in.from = decl;
6430 h = (struct tree_priority_map *) htab_find (init_priority_for_decl, &in);
6431 return h ? h->fini : DEFAULT_INIT_PRIORITY;
6434 /* Return the initialization and finalization priority information for
6435 DECL. If there is no previous priority information, a freshly
6436 allocated structure is returned. */
6438 static struct tree_priority_map *
6439 decl_priority_info (tree decl)
6441 struct tree_priority_map in;
6442 struct tree_priority_map *h;
6443 void **loc;
6445 in.base.from = decl;
6446 loc = htab_find_slot (init_priority_for_decl, &in, INSERT);
6447 h = (struct tree_priority_map *) *loc;
6448 if (!h)
6450 h = ggc_alloc_cleared_tree_priority_map ();
6451 *loc = h;
6452 h->base.from = decl;
6453 h->init = DEFAULT_INIT_PRIORITY;
6454 h->fini = DEFAULT_INIT_PRIORITY;
6457 return h;
6460 /* Set the initialization priority for DECL to PRIORITY. */
6462 void
6463 decl_init_priority_insert (tree decl, priority_type priority)
6465 struct tree_priority_map *h;
6467 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
6468 if (priority == DEFAULT_INIT_PRIORITY)
6469 return;
6470 h = decl_priority_info (decl);
6471 h->init = priority;
6474 /* Set the finalization priority for DECL to PRIORITY. */
6476 void
6477 decl_fini_priority_insert (tree decl, priority_type priority)
6479 struct tree_priority_map *h;
6481 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
6482 if (priority == DEFAULT_INIT_PRIORITY)
6483 return;
6484 h = decl_priority_info (decl);
6485 h->fini = priority;
6488 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */
6490 static void
6491 print_debug_expr_statistics (void)
6493 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n",
6494 (long) htab_size (debug_expr_for_decl),
6495 (long) htab_elements (debug_expr_for_decl),
6496 htab_collisions (debug_expr_for_decl));
6499 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */
6501 static void
6502 print_value_expr_statistics (void)
6504 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n",
6505 (long) htab_size (value_expr_for_decl),
6506 (long) htab_elements (value_expr_for_decl),
6507 htab_collisions (value_expr_for_decl));
6510 /* Lookup a debug expression for FROM, and return it if we find one. */
6512 tree
6513 decl_debug_expr_lookup (tree from)
6515 struct tree_decl_map *h, in;
6516 in.base.from = from;
6518 h = (struct tree_decl_map *)
6519 htab_find_with_hash (debug_expr_for_decl, &in, DECL_UID (from));
6520 if (h)
6521 return h->to;
6522 return NULL_TREE;
6525 /* Insert a mapping FROM->TO in the debug expression hashtable. */
6527 void
6528 decl_debug_expr_insert (tree from, tree to)
6530 struct tree_decl_map *h;
6531 void **loc;
6533 h = ggc_alloc_tree_decl_map ();
6534 h->base.from = from;
6535 h->to = to;
6536 loc = htab_find_slot_with_hash (debug_expr_for_decl, h, DECL_UID (from),
6537 INSERT);
6538 *(struct tree_decl_map **) loc = h;
6541 /* Lookup a value expression for FROM, and return it if we find one. */
6543 tree
6544 decl_value_expr_lookup (tree from)
6546 struct tree_decl_map *h, in;
6547 in.base.from = from;
6549 h = (struct tree_decl_map *)
6550 htab_find_with_hash (value_expr_for_decl, &in, DECL_UID (from));
6551 if (h)
6552 return h->to;
6553 return NULL_TREE;
6556 /* Insert a mapping FROM->TO in the value expression hashtable. */
6558 void
6559 decl_value_expr_insert (tree from, tree to)
6561 struct tree_decl_map *h;
6562 void **loc;
6564 h = ggc_alloc_tree_decl_map ();
6565 h->base.from = from;
6566 h->to = to;
6567 loc = htab_find_slot_with_hash (value_expr_for_decl, h, DECL_UID (from),
6568 INSERT);
6569 *(struct tree_decl_map **) loc = h;
6572 /* Lookup a vector of debug arguments for FROM, and return it if we
6573 find one. */
6575 vec<tree, va_gc> **
6576 decl_debug_args_lookup (tree from)
6578 struct tree_vec_map *h, in;
6580 if (!DECL_HAS_DEBUG_ARGS_P (from))
6581 return NULL;
6582 gcc_checking_assert (debug_args_for_decl != NULL);
6583 in.base.from = from;
6584 h = (struct tree_vec_map *)
6585 htab_find_with_hash (debug_args_for_decl, &in, DECL_UID (from));
6586 if (h)
6587 return &h->to;
6588 return NULL;
6591 /* Insert a mapping FROM->empty vector of debug arguments in the value
6592 expression hashtable. */
6594 vec<tree, va_gc> **
6595 decl_debug_args_insert (tree from)
6597 struct tree_vec_map *h;
6598 void **loc;
6600 if (DECL_HAS_DEBUG_ARGS_P (from))
6601 return decl_debug_args_lookup (from);
6602 if (debug_args_for_decl == NULL)
6603 debug_args_for_decl = htab_create_ggc (64, tree_vec_map_hash,
6604 tree_vec_map_eq, 0);
6605 h = ggc_alloc_tree_vec_map ();
6606 h->base.from = from;
6607 h->to = NULL;
6608 loc = htab_find_slot_with_hash (debug_args_for_decl, h, DECL_UID (from),
6609 INSERT);
6610 *(struct tree_vec_map **) loc = h;
6611 DECL_HAS_DEBUG_ARGS_P (from) = 1;
6612 return &h->to;
6615 /* Hashing of types so that we don't make duplicates.
6616 The entry point is `type_hash_canon'. */
6618 /* Compute a hash code for a list of types (chain of TREE_LIST nodes
6619 with types in the TREE_VALUE slots), by adding the hash codes
6620 of the individual types. */
6622 static unsigned int
6623 type_hash_list (const_tree list, hashval_t hashcode)
6625 const_tree tail;
6627 for (tail = list; tail; tail = TREE_CHAIN (tail))
6628 if (TREE_VALUE (tail) != error_mark_node)
6629 hashcode = iterative_hash_object (TYPE_HASH (TREE_VALUE (tail)),
6630 hashcode);
6632 return hashcode;
6635 /* These are the Hashtable callback functions. */
6637 /* Returns true iff the types are equivalent. */
6639 static int
6640 type_hash_eq (const void *va, const void *vb)
6642 const struct type_hash *const a = (const struct type_hash *) va,
6643 *const b = (const struct type_hash *) vb;
6645 /* First test the things that are the same for all types. */
6646 if (a->hash != b->hash
6647 || TREE_CODE (a->type) != TREE_CODE (b->type)
6648 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
6649 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
6650 TYPE_ATTRIBUTES (b->type))
6651 || (TREE_CODE (a->type) != COMPLEX_TYPE
6652 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
6653 return 0;
6655 /* Be careful about comparing arrays before and after the element type
6656 has been completed; don't compare TYPE_ALIGN unless both types are
6657 complete. */
6658 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
6659 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
6660 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
6661 return 0;
6663 switch (TREE_CODE (a->type))
6665 case VOID_TYPE:
6666 case COMPLEX_TYPE:
6667 case POINTER_TYPE:
6668 case REFERENCE_TYPE:
6669 case NULLPTR_TYPE:
6670 return 1;
6672 case VECTOR_TYPE:
6673 return TYPE_VECTOR_SUBPARTS (a->type) == TYPE_VECTOR_SUBPARTS (b->type);
6675 case ENUMERAL_TYPE:
6676 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type)
6677 && !(TYPE_VALUES (a->type)
6678 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST
6679 && TYPE_VALUES (b->type)
6680 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST
6681 && type_list_equal (TYPE_VALUES (a->type),
6682 TYPE_VALUES (b->type))))
6683 return 0;
6685 /* ... fall through ... */
6687 case INTEGER_TYPE:
6688 case REAL_TYPE:
6689 case BOOLEAN_TYPE:
6690 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type)
6691 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type),
6692 TYPE_MAX_VALUE (b->type)))
6693 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type)
6694 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type),
6695 TYPE_MIN_VALUE (b->type))));
6697 case FIXED_POINT_TYPE:
6698 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type);
6700 case OFFSET_TYPE:
6701 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
6703 case METHOD_TYPE:
6704 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
6705 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6706 || (TYPE_ARG_TYPES (a->type)
6707 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6708 && TYPE_ARG_TYPES (b->type)
6709 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6710 && type_list_equal (TYPE_ARG_TYPES (a->type),
6711 TYPE_ARG_TYPES (b->type)))))
6712 break;
6713 return 0;
6714 case ARRAY_TYPE:
6715 return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);
6717 case RECORD_TYPE:
6718 case UNION_TYPE:
6719 case QUAL_UNION_TYPE:
6720 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type)
6721 || (TYPE_FIELDS (a->type)
6722 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST
6723 && TYPE_FIELDS (b->type)
6724 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST
6725 && type_list_equal (TYPE_FIELDS (a->type),
6726 TYPE_FIELDS (b->type))));
6728 case FUNCTION_TYPE:
6729 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
6730 || (TYPE_ARG_TYPES (a->type)
6731 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
6732 && TYPE_ARG_TYPES (b->type)
6733 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
6734 && type_list_equal (TYPE_ARG_TYPES (a->type),
6735 TYPE_ARG_TYPES (b->type))))
6736 break;
6737 return 0;
6739 default:
6740 return 0;
6743 if (lang_hooks.types.type_hash_eq != NULL)
6744 return lang_hooks.types.type_hash_eq (a->type, b->type);
6746 return 1;
6749 /* Return the cached hash value. */
6751 static hashval_t
6752 type_hash_hash (const void *item)
6754 return ((const struct type_hash *) item)->hash;
6757 /* Look in the type hash table for a type isomorphic to TYPE.
6758 If one is found, return it. Otherwise return 0. */
6760 static tree
6761 type_hash_lookup (hashval_t hashcode, tree type)
6763 struct type_hash *h, in;
6765 /* The TYPE_ALIGN field of a type is set by layout_type(), so we
6766 must call that routine before comparing TYPE_ALIGNs. */
6767 layout_type (type);
6769 in.hash = hashcode;
6770 in.type = type;
6772 h = (struct type_hash *) htab_find_with_hash (type_hash_table, &in,
6773 hashcode);
6774 if (h)
6775 return h->type;
6776 return NULL_TREE;
6779 /* Add an entry to the type-hash-table
6780 for a type TYPE whose hash code is HASHCODE. */
6782 static void
6783 type_hash_add (hashval_t hashcode, tree type)
6785 struct type_hash *h;
6786 void **loc;
6788 h = ggc_alloc_type_hash ();
6789 h->hash = hashcode;
6790 h->type = type;
6791 loc = htab_find_slot_with_hash (type_hash_table, h, hashcode, INSERT);
6792 *loc = (void *)h;
6795 /* Given TYPE, and HASHCODE its hash code, return the canonical
6796 object for an identical type if one already exists.
6797 Otherwise, return TYPE, and record it as the canonical object.
6799 To use this function, first create a type of the sort you want.
6800 Then compute its hash code from the fields of the type that
6801 make it different from other similar types.
6802 Then call this function and use the value. */
6804 tree
6805 type_hash_canon (unsigned int hashcode, tree type)
6807 tree t1;
6809 /* The hash table only contains main variants, so ensure that's what we're
6810 being passed. */
6811 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
6813 /* See if the type is in the hash table already. If so, return it.
6814 Otherwise, add the type. */
6815 t1 = type_hash_lookup (hashcode, type);
6816 if (t1 != 0)
6818 if (GATHER_STATISTICS)
6820 tree_code_counts[(int) TREE_CODE (type)]--;
6821 tree_node_counts[(int) t_kind]--;
6822 tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type_non_common);
6824 return t1;
6826 else
6828 type_hash_add (hashcode, type);
6829 return type;
6833 /* See if the data pointed to by the type hash table is marked. We consider
6834 it marked if the type is marked or if a debug type number or symbol
6835 table entry has been made for the type. */
6837 static int
6838 type_hash_marked_p (const void *p)
6840 const_tree const type = ((const struct type_hash *) p)->type;
6842 return ggc_marked_p (type);
6845 static void
6846 print_type_hash_statistics (void)
6848 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n",
6849 (long) htab_size (type_hash_table),
6850 (long) htab_elements (type_hash_table),
6851 htab_collisions (type_hash_table));
6854 /* Compute a hash code for a list of attributes (chain of TREE_LIST nodes
6855 with names in the TREE_PURPOSE slots and args in the TREE_VALUE slots),
6856 by adding the hash codes of the individual attributes. */
6858 static unsigned int
6859 attribute_hash_list (const_tree list, hashval_t hashcode)
6861 const_tree tail;
6863 for (tail = list; tail; tail = TREE_CHAIN (tail))
6864 /* ??? Do we want to add in TREE_VALUE too? */
6865 hashcode = iterative_hash_object
6866 (IDENTIFIER_HASH_VALUE (get_attribute_name (tail)), hashcode);
6867 return hashcode;
6870 /* Given two lists of attributes, return true if list l2 is
6871 equivalent to l1. */
6874 attribute_list_equal (const_tree l1, const_tree l2)
6876 if (l1 == l2)
6877 return 1;
6879 return attribute_list_contained (l1, l2)
6880 && attribute_list_contained (l2, l1);
6883 /* Given two lists of attributes, return true if list L2 is
6884 completely contained within L1. */
6885 /* ??? This would be faster if attribute names were stored in a canonicalized
6886 form. Otherwise, if L1 uses `foo' and L2 uses `__foo__', the long method
6887 must be used to show these elements are equivalent (which they are). */
6888 /* ??? It's not clear that attributes with arguments will always be handled
6889 correctly. */
6892 attribute_list_contained (const_tree l1, const_tree l2)
6894 const_tree t1, t2;
6896 /* First check the obvious, maybe the lists are identical. */
6897 if (l1 == l2)
6898 return 1;
6900 /* Maybe the lists are similar. */
6901 for (t1 = l1, t2 = l2;
6902 t1 != 0 && t2 != 0
6903 && get_attribute_name (t1) == get_attribute_name (t2)
6904 && TREE_VALUE (t1) == TREE_VALUE (t2);
6905 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6908 /* Maybe the lists are equal. */
6909 if (t1 == 0 && t2 == 0)
6910 return 1;
6912 for (; t2 != 0; t2 = TREE_CHAIN (t2))
6914 const_tree attr;
6915 /* This CONST_CAST is okay because lookup_attribute does not
6916 modify its argument and the return value is assigned to a
6917 const_tree. */
6918 for (attr = lookup_ident_attribute (get_attribute_name (t2),
6919 CONST_CAST_TREE (l1));
6920 attr != NULL_TREE && !attribute_value_equal (t2, attr);
6921 attr = lookup_ident_attribute (get_attribute_name (t2),
6922 TREE_CHAIN (attr)))
6925 if (attr == NULL_TREE)
6926 return 0;
6929 return 1;
6932 /* Given two lists of types
6933 (chains of TREE_LIST nodes with types in the TREE_VALUE slots)
6934 return 1 if the lists contain the same types in the same order.
6935 Also, the TREE_PURPOSEs must match. */
6938 type_list_equal (const_tree l1, const_tree l2)
6940 const_tree t1, t2;
6942 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
6943 if (TREE_VALUE (t1) != TREE_VALUE (t2)
6944 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2)
6945 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2))
6946 && (TREE_TYPE (TREE_PURPOSE (t1))
6947 == TREE_TYPE (TREE_PURPOSE (t2))))))
6948 return 0;
6950 return t1 == t2;
6953 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE
6954 given by TYPE. If the argument list accepts variable arguments,
6955 then this function counts only the ordinary arguments. */
6958 type_num_arguments (const_tree type)
6960 int i = 0;
6961 tree t;
6963 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t))
6964 /* If the function does not take a variable number of arguments,
6965 the last element in the list will have type `void'. */
6966 if (VOID_TYPE_P (TREE_VALUE (t)))
6967 break;
6968 else
6969 ++i;
6971 return i;
6974 /* Nonzero if integer constants T1 and T2
6975 represent the same constant value. */
6978 tree_int_cst_equal (const_tree t1, const_tree t2)
6980 if (t1 == t2)
6981 return 1;
6983 if (t1 == 0 || t2 == 0)
6984 return 0;
6986 if (TREE_CODE (t1) == INTEGER_CST
6987 && TREE_CODE (t2) == INTEGER_CST
6988 && TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
6989 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2))
6990 return 1;
6992 return 0;
6995 /* Nonzero if integer constants T1 and T2 represent values that satisfy <.
6996 The precise way of comparison depends on their data type. */
6999 tree_int_cst_lt (const_tree t1, const_tree t2)
7001 if (t1 == t2)
7002 return 0;
7004 if (TYPE_UNSIGNED (TREE_TYPE (t1)) != TYPE_UNSIGNED (TREE_TYPE (t2)))
7006 int t1_sgn = tree_int_cst_sgn (t1);
7007 int t2_sgn = tree_int_cst_sgn (t2);
7009 if (t1_sgn < t2_sgn)
7010 return 1;
7011 else if (t1_sgn > t2_sgn)
7012 return 0;
7013 /* Otherwise, both are non-negative, so we compare them as
7014 unsigned just in case one of them would overflow a signed
7015 type. */
7017 else if (!TYPE_UNSIGNED (TREE_TYPE (t1)))
7018 return INT_CST_LT (t1, t2);
7020 return INT_CST_LT_UNSIGNED (t1, t2);
7023 /* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2. */
7026 tree_int_cst_compare (const_tree t1, const_tree t2)
7028 if (tree_int_cst_lt (t1, t2))
7029 return -1;
7030 else if (tree_int_cst_lt (t2, t1))
7031 return 1;
7032 else
7033 return 0;
7036 /* Return true if T is an INTEGER_CST whose numerical value (extended
7037 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */
7039 bool
7040 tree_fits_shwi_p (const_tree t)
7042 return (t != NULL_TREE
7043 && TREE_CODE (t) == INTEGER_CST
7044 && ((TREE_INT_CST_HIGH (t) == 0
7045 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) >= 0)
7046 || (TREE_INT_CST_HIGH (t) == -1
7047 && (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0
7048 && !TYPE_UNSIGNED (TREE_TYPE (t)))));
7051 /* Return true if T is an INTEGER_CST whose numerical value (extended
7052 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */
7054 bool
7055 tree_fits_uhwi_p (const_tree t)
7057 return (t != NULL_TREE
7058 && TREE_CODE (t) == INTEGER_CST
7059 && TREE_INT_CST_HIGH (t) == 0);
7062 /* T is an INTEGER_CST whose numerical value (extended according to
7063 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that
7064 HOST_WIDE_INT. */
7066 HOST_WIDE_INT
7067 tree_to_shwi (const_tree t)
7069 gcc_assert (tree_fits_shwi_p (t));
7070 return TREE_INT_CST_LOW (t);
7073 /* T is an INTEGER_CST whose numerical value (extended according to
7074 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that
7075 HOST_WIDE_INT. */
7077 unsigned HOST_WIDE_INT
7078 tree_to_uhwi (const_tree t)
7080 gcc_assert (tree_fits_uhwi_p (t));
7081 return TREE_INT_CST_LOW (t);
7084 /* Return the most significant (sign) bit of T. */
7087 tree_int_cst_sign_bit (const_tree t)
7089 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1;
7090 unsigned HOST_WIDE_INT w;
7092 if (bitno < HOST_BITS_PER_WIDE_INT)
7093 w = TREE_INT_CST_LOW (t);
7094 else
7096 w = TREE_INT_CST_HIGH (t);
7097 bitno -= HOST_BITS_PER_WIDE_INT;
7100 return (w >> bitno) & 1;
7103 /* Return an indication of the sign of the integer constant T.
7104 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0.
7105 Note that -1 will never be returned if T's type is unsigned. */
7108 tree_int_cst_sgn (const_tree t)
7110 if (TREE_INT_CST_LOW (t) == 0 && TREE_INT_CST_HIGH (t) == 0)
7111 return 0;
7112 else if (TYPE_UNSIGNED (TREE_TYPE (t)))
7113 return 1;
7114 else if (TREE_INT_CST_HIGH (t) < 0)
7115 return -1;
7116 else
7117 return 1;
7120 /* Return the minimum number of bits needed to represent VALUE in a
7121 signed or unsigned type, UNSIGNEDP says which. */
7123 unsigned int
7124 tree_int_cst_min_precision (tree value, bool unsignedp)
7126 /* If the value is negative, compute its negative minus 1. The latter
7127 adjustment is because the absolute value of the largest negative value
7128 is one larger than the largest positive value. This is equivalent to
7129 a bit-wise negation, so use that operation instead. */
7131 if (tree_int_cst_sgn (value) < 0)
7132 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value);
7134 /* Return the number of bits needed, taking into account the fact
7135 that we need one more bit for a signed than unsigned type.
7136 If value is 0 or -1, the minimum precision is 1 no matter
7137 whether unsignedp is true or false. */
7139 if (integer_zerop (value))
7140 return 1;
7141 else
7142 return tree_floor_log2 (value) + 1 + !unsignedp;
7145 /* Return truthvalue of whether T1 is the same tree structure as T2.
7146 Return 1 if they are the same.
7147 Return 0 if they are understandably different.
7148 Return -1 if either contains tree structure not understood by
7149 this function. */
7152 simple_cst_equal (const_tree t1, const_tree t2)
7154 enum tree_code code1, code2;
7155 int cmp;
7156 int i;
7158 if (t1 == t2)
7159 return 1;
7160 if (t1 == 0 || t2 == 0)
7161 return 0;
7163 code1 = TREE_CODE (t1);
7164 code2 = TREE_CODE (t2);
7166 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR)
7168 if (CONVERT_EXPR_CODE_P (code2)
7169 || code2 == NON_LVALUE_EXPR)
7170 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7171 else
7172 return simple_cst_equal (TREE_OPERAND (t1, 0), t2);
7175 else if (CONVERT_EXPR_CODE_P (code2)
7176 || code2 == NON_LVALUE_EXPR)
7177 return simple_cst_equal (t1, TREE_OPERAND (t2, 0));
7179 if (code1 != code2)
7180 return 0;
7182 switch (code1)
7184 case INTEGER_CST:
7185 return (TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
7186 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2));
7188 case REAL_CST:
7189 return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
7191 case FIXED_CST:
7192 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2));
7194 case STRING_CST:
7195 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
7196 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
7197 TREE_STRING_LENGTH (t1)));
7199 case CONSTRUCTOR:
7201 unsigned HOST_WIDE_INT idx;
7202 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1);
7203 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2);
7205 if (vec_safe_length (v1) != vec_safe_length (v2))
7206 return false;
7208 for (idx = 0; idx < vec_safe_length (v1); ++idx)
7209 /* ??? Should we handle also fields here? */
7210 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value))
7211 return false;
7212 return true;
7215 case SAVE_EXPR:
7216 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7218 case CALL_EXPR:
7219 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2));
7220 if (cmp <= 0)
7221 return cmp;
7222 if (call_expr_nargs (t1) != call_expr_nargs (t2))
7223 return 0;
7225 const_tree arg1, arg2;
7226 const_call_expr_arg_iterator iter1, iter2;
7227 for (arg1 = first_const_call_expr_arg (t1, &iter1),
7228 arg2 = first_const_call_expr_arg (t2, &iter2);
7229 arg1 && arg2;
7230 arg1 = next_const_call_expr_arg (&iter1),
7231 arg2 = next_const_call_expr_arg (&iter2))
7233 cmp = simple_cst_equal (arg1, arg2);
7234 if (cmp <= 0)
7235 return cmp;
7237 return arg1 == arg2;
7240 case TARGET_EXPR:
7241 /* Special case: if either target is an unallocated VAR_DECL,
7242 it means that it's going to be unified with whatever the
7243 TARGET_EXPR is really supposed to initialize, so treat it
7244 as being equivalent to anything. */
7245 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL
7246 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE
7247 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0)))
7248 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL
7249 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE
7250 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0))))
7251 cmp = 1;
7252 else
7253 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7255 if (cmp <= 0)
7256 return cmp;
7258 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
7260 case WITH_CLEANUP_EXPR:
7261 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7262 if (cmp <= 0)
7263 return cmp;
7265 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
7267 case COMPONENT_REF:
7268 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1))
7269 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
7271 return 0;
7273 case VAR_DECL:
7274 case PARM_DECL:
7275 case CONST_DECL:
7276 case FUNCTION_DECL:
7277 return 0;
7279 default:
7280 break;
7283 /* This general rule works for most tree codes. All exceptions should be
7284 handled above. If this is a language-specific tree code, we can't
7285 trust what might be in the operand, so say we don't know
7286 the situation. */
7287 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE)
7288 return -1;
7290 switch (TREE_CODE_CLASS (code1))
7292 case tcc_unary:
7293 case tcc_binary:
7294 case tcc_comparison:
7295 case tcc_expression:
7296 case tcc_reference:
7297 case tcc_statement:
7298 cmp = 1;
7299 for (i = 0; i < TREE_CODE_LENGTH (code1); i++)
7301 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i));
7302 if (cmp <= 0)
7303 return cmp;
7306 return cmp;
7308 default:
7309 return -1;
7313 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value.
7314 Return -1, 0, or 1 if the value of T is less than, equal to, or greater
7315 than U, respectively. */
7318 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u)
7320 if (tree_int_cst_sgn (t) < 0)
7321 return -1;
7322 else if (TREE_INT_CST_HIGH (t) != 0)
7323 return 1;
7324 else if (TREE_INT_CST_LOW (t) == u)
7325 return 0;
7326 else if (TREE_INT_CST_LOW (t) < u)
7327 return -1;
7328 else
7329 return 1;
7332 /* Return true if SIZE represents a constant size that is in bounds of
7333 what the middle-end and the backend accepts (covering not more than
7334 half of the address-space). */
7336 bool
7337 valid_constant_size_p (const_tree size)
7339 if (! tree_fits_uhwi_p (size)
7340 || TREE_OVERFLOW (size)
7341 || tree_int_cst_sign_bit (size) != 0)
7342 return false;
7343 return true;
7346 /* Return the precision of the type, or for a complex or vector type the
7347 precision of the type of its elements. */
7349 unsigned int
7350 element_precision (const_tree type)
7352 enum tree_code code = TREE_CODE (type);
7353 if (code == COMPLEX_TYPE || code == VECTOR_TYPE)
7354 type = TREE_TYPE (type);
7356 return TYPE_PRECISION (type);
7359 /* Return true if CODE represents an associative tree code. Otherwise
7360 return false. */
7361 bool
7362 associative_tree_code (enum tree_code code)
7364 switch (code)
7366 case BIT_IOR_EXPR:
7367 case BIT_AND_EXPR:
7368 case BIT_XOR_EXPR:
7369 case PLUS_EXPR:
7370 case MULT_EXPR:
7371 case MIN_EXPR:
7372 case MAX_EXPR:
7373 return true;
7375 default:
7376 break;
7378 return false;
7381 /* Return true if CODE represents a commutative tree code. Otherwise
7382 return false. */
7383 bool
7384 commutative_tree_code (enum tree_code code)
7386 switch (code)
7388 case PLUS_EXPR:
7389 case MULT_EXPR:
7390 case MULT_HIGHPART_EXPR:
7391 case MIN_EXPR:
7392 case MAX_EXPR:
7393 case BIT_IOR_EXPR:
7394 case BIT_XOR_EXPR:
7395 case BIT_AND_EXPR:
7396 case NE_EXPR:
7397 case EQ_EXPR:
7398 case UNORDERED_EXPR:
7399 case ORDERED_EXPR:
7400 case UNEQ_EXPR:
7401 case LTGT_EXPR:
7402 case TRUTH_AND_EXPR:
7403 case TRUTH_XOR_EXPR:
7404 case TRUTH_OR_EXPR:
7405 case WIDEN_MULT_EXPR:
7406 case VEC_WIDEN_MULT_HI_EXPR:
7407 case VEC_WIDEN_MULT_LO_EXPR:
7408 case VEC_WIDEN_MULT_EVEN_EXPR:
7409 case VEC_WIDEN_MULT_ODD_EXPR:
7410 return true;
7412 default:
7413 break;
7415 return false;
7418 /* Return true if CODE represents a ternary tree code for which the
7419 first two operands are commutative. Otherwise return false. */
7420 bool
7421 commutative_ternary_tree_code (enum tree_code code)
7423 switch (code)
7425 case WIDEN_MULT_PLUS_EXPR:
7426 case WIDEN_MULT_MINUS_EXPR:
7427 return true;
7429 default:
7430 break;
7432 return false;
7435 /* Generate a hash value for an expression. This can be used iteratively
7436 by passing a previous result as the VAL argument.
7438 This function is intended to produce the same hash for expressions which
7439 would compare equal using operand_equal_p. */
7441 hashval_t
7442 iterative_hash_expr (const_tree t, hashval_t val)
7444 int i;
7445 enum tree_code code;
7446 char tclass;
7448 if (t == NULL_TREE)
7449 return iterative_hash_hashval_t (0, val);
7451 code = TREE_CODE (t);
7453 switch (code)
7455 /* Alas, constants aren't shared, so we can't rely on pointer
7456 identity. */
7457 case INTEGER_CST:
7458 val = iterative_hash_host_wide_int (TREE_INT_CST_LOW (t), val);
7459 return iterative_hash_host_wide_int (TREE_INT_CST_HIGH (t), val);
7460 case REAL_CST:
7462 unsigned int val2 = real_hash (TREE_REAL_CST_PTR (t));
7464 return iterative_hash_hashval_t (val2, val);
7466 case FIXED_CST:
7468 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t));
7470 return iterative_hash_hashval_t (val2, val);
7472 case STRING_CST:
7473 return iterative_hash (TREE_STRING_POINTER (t),
7474 TREE_STRING_LENGTH (t), val);
7475 case COMPLEX_CST:
7476 val = iterative_hash_expr (TREE_REALPART (t), val);
7477 return iterative_hash_expr (TREE_IMAGPART (t), val);
7478 case VECTOR_CST:
7480 unsigned i;
7481 for (i = 0; i < VECTOR_CST_NELTS (t); ++i)
7482 val = iterative_hash_expr (VECTOR_CST_ELT (t, i), val);
7483 return val;
7485 case SSA_NAME:
7486 /* We can just compare by pointer. */
7487 return iterative_hash_host_wide_int (SSA_NAME_VERSION (t), val);
7488 case PLACEHOLDER_EXPR:
7489 /* The node itself doesn't matter. */
7490 return val;
7491 case TREE_LIST:
7492 /* A list of expressions, for a CALL_EXPR or as the elements of a
7493 VECTOR_CST. */
7494 for (; t; t = TREE_CHAIN (t))
7495 val = iterative_hash_expr (TREE_VALUE (t), val);
7496 return val;
7497 case CONSTRUCTOR:
7499 unsigned HOST_WIDE_INT idx;
7500 tree field, value;
7501 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value)
7503 val = iterative_hash_expr (field, val);
7504 val = iterative_hash_expr (value, val);
7506 return val;
7508 case FUNCTION_DECL:
7509 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form.
7510 Otherwise nodes that compare equal according to operand_equal_p might
7511 get different hash codes. However, don't do this for machine specific
7512 or front end builtins, since the function code is overloaded in those
7513 cases. */
7514 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL
7515 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t)))
7517 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t));
7518 code = TREE_CODE (t);
7520 /* FALL THROUGH */
7521 default:
7522 tclass = TREE_CODE_CLASS (code);
7524 if (tclass == tcc_declaration)
7526 /* DECL's have a unique ID */
7527 val = iterative_hash_host_wide_int (DECL_UID (t), val);
7529 else
7531 gcc_assert (IS_EXPR_CODE_CLASS (tclass));
7533 val = iterative_hash_object (code, val);
7535 /* Don't hash the type, that can lead to having nodes which
7536 compare equal according to operand_equal_p, but which
7537 have different hash codes. */
7538 if (CONVERT_EXPR_CODE_P (code)
7539 || code == NON_LVALUE_EXPR)
7541 /* Make sure to include signness in the hash computation. */
7542 val += TYPE_UNSIGNED (TREE_TYPE (t));
7543 val = iterative_hash_expr (TREE_OPERAND (t, 0), val);
7546 else if (commutative_tree_code (code))
7548 /* It's a commutative expression. We want to hash it the same
7549 however it appears. We do this by first hashing both operands
7550 and then rehashing based on the order of their independent
7551 hashes. */
7552 hashval_t one = iterative_hash_expr (TREE_OPERAND (t, 0), 0);
7553 hashval_t two = iterative_hash_expr (TREE_OPERAND (t, 1), 0);
7554 hashval_t t;
7556 if (one > two)
7557 t = one, one = two, two = t;
7559 val = iterative_hash_hashval_t (one, val);
7560 val = iterative_hash_hashval_t (two, val);
7562 else
7563 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
7564 val = iterative_hash_expr (TREE_OPERAND (t, i), val);
7566 return val;
7570 /* Constructors for pointer, array and function types.
7571 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are
7572 constructed by language-dependent code, not here.) */
7574 /* Construct, lay out and return the type of pointers to TO_TYPE with
7575 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can
7576 reference all of memory. If such a type has already been
7577 constructed, reuse it. */
7579 tree
7580 build_pointer_type_for_mode (tree to_type, enum machine_mode mode,
7581 bool can_alias_all)
7583 tree t;
7585 if (to_type == error_mark_node)
7586 return error_mark_node;
7588 /* If the pointed-to type has the may_alias attribute set, force
7589 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7590 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7591 can_alias_all = true;
7593 /* In some cases, languages will have things that aren't a POINTER_TYPE
7594 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO.
7595 In that case, return that type without regard to the rest of our
7596 operands.
7598 ??? This is a kludge, but consistent with the way this function has
7599 always operated and there doesn't seem to be a good way to avoid this
7600 at the moment. */
7601 if (TYPE_POINTER_TO (to_type) != 0
7602 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE)
7603 return TYPE_POINTER_TO (to_type);
7605 /* First, if we already have a type for pointers to TO_TYPE and it's
7606 the proper mode, use it. */
7607 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t))
7608 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7609 return t;
7611 t = make_node (POINTER_TYPE);
7613 TREE_TYPE (t) = to_type;
7614 SET_TYPE_MODE (t, mode);
7615 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7616 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type);
7617 TYPE_POINTER_TO (to_type) = t;
7619 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7620 SET_TYPE_STRUCTURAL_EQUALITY (t);
7621 else if (TYPE_CANONICAL (to_type) != to_type)
7622 TYPE_CANONICAL (t)
7623 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
7624 mode, can_alias_all);
7626 /* Lay out the type. This function has many callers that are concerned
7627 with expression-construction, and this simplifies them all. */
7628 layout_type (t);
7630 return t;
7633 /* By default build pointers in ptr_mode. */
7635 tree
7636 build_pointer_type (tree to_type)
7638 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7639 : TYPE_ADDR_SPACE (to_type);
7640 enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7641 if (upc_shared_type_p (to_type))
7643 tree upc_pts_type;
7644 pointer_mode = TYPE_MODE (upc_pts_rep_type_node);
7645 upc_pts_type = build_pointer_type_for_mode (to_type, pointer_mode,
7646 false);
7647 TYPE_USER_ALIGN (upc_pts_type) = TYPE_USER_ALIGN (upc_pts_rep_type_node);
7648 TYPE_ALIGN (upc_pts_type) = TYPE_ALIGN (upc_pts_rep_type_node);
7649 return upc_pts_type;
7651 return build_pointer_type_for_mode (to_type, pointer_mode, false);
7654 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */
7656 tree
7657 build_reference_type_for_mode (tree to_type, enum machine_mode mode,
7658 bool can_alias_all)
7660 tree t;
7662 if (to_type == error_mark_node)
7663 return error_mark_node;
7665 /* If the pointed-to type has the may_alias attribute set, force
7666 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */
7667 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type)))
7668 can_alias_all = true;
7670 /* In some cases, languages will have things that aren't a REFERENCE_TYPE
7671 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO.
7672 In that case, return that type without regard to the rest of our
7673 operands.
7675 ??? This is a kludge, but consistent with the way this function has
7676 always operated and there doesn't seem to be a good way to avoid this
7677 at the moment. */
7678 if (TYPE_REFERENCE_TO (to_type) != 0
7679 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE)
7680 return TYPE_REFERENCE_TO (to_type);
7682 /* First, if we already have a type for pointers to TO_TYPE and it's
7683 the proper mode, use it. */
7684 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t))
7685 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all)
7686 return t;
7688 t = make_node (REFERENCE_TYPE);
7690 TREE_TYPE (t) = to_type;
7691 SET_TYPE_MODE (t, mode);
7692 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all;
7693 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type);
7694 TYPE_REFERENCE_TO (to_type) = t;
7696 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
7697 SET_TYPE_STRUCTURAL_EQUALITY (t);
7698 else if (TYPE_CANONICAL (to_type) != to_type)
7699 TYPE_CANONICAL (t)
7700 = build_reference_type_for_mode (TYPE_CANONICAL (to_type),
7701 mode, can_alias_all);
7703 layout_type (t);
7705 return t;
7709 /* Build the node for the type of references-to-TO_TYPE by default
7710 in ptr_mode. */
7712 tree
7713 build_reference_type (tree to_type)
7715 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC
7716 : TYPE_ADDR_SPACE (to_type);
7717 enum machine_mode pointer_mode = targetm.addr_space.pointer_mode (as);
7718 return build_reference_type_for_mode (to_type, pointer_mode, false);
7721 #define MAX_INT_CACHED_PREC \
7722 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64)
7723 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2];
7725 /* Builds a signed or unsigned integer type of precision PRECISION.
7726 Used for C bitfields whose precision does not match that of
7727 built-in target types. */
7728 tree
7729 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision,
7730 int unsignedp)
7732 tree itype, ret;
7734 if (unsignedp)
7735 unsignedp = MAX_INT_CACHED_PREC + 1;
7737 if (precision <= MAX_INT_CACHED_PREC)
7739 itype = nonstandard_integer_type_cache[precision + unsignedp];
7740 if (itype)
7741 return itype;
7744 itype = make_node (INTEGER_TYPE);
7745 TYPE_PRECISION (itype) = precision;
7747 if (unsignedp)
7748 fixup_unsigned_type (itype);
7749 else
7750 fixup_signed_type (itype);
7752 ret = itype;
7753 if (tree_fits_uhwi_p (TYPE_MAX_VALUE (itype)))
7754 ret = type_hash_canon (tree_to_uhwi (TYPE_MAX_VALUE (itype)), itype);
7755 if (precision <= MAX_INT_CACHED_PREC)
7756 nonstandard_integer_type_cache[precision + unsignedp] = ret;
7758 return ret;
7761 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE
7762 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED
7763 is true, reuse such a type that has already been constructed. */
7765 static tree
7766 build_range_type_1 (tree type, tree lowval, tree highval, bool shared)
7768 tree itype = make_node (INTEGER_TYPE);
7769 hashval_t hashcode = 0;
7771 TREE_TYPE (itype) = type;
7773 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval);
7774 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL;
7776 TYPE_PRECISION (itype) = TYPE_PRECISION (type);
7777 SET_TYPE_MODE (itype, TYPE_MODE (type));
7778 TYPE_SIZE (itype) = TYPE_SIZE (type);
7779 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type);
7780 TYPE_ALIGN (itype) = TYPE_ALIGN (type);
7781 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type);
7783 if (!shared)
7784 return itype;
7786 if ((TYPE_MIN_VALUE (itype)
7787 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST)
7788 || (TYPE_MAX_VALUE (itype)
7789 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST))
7791 /* Since we cannot reliably merge this type, we need to compare it using
7792 structural equality checks. */
7793 SET_TYPE_STRUCTURAL_EQUALITY (itype);
7794 return itype;
7797 hashcode = iterative_hash_expr (TYPE_MIN_VALUE (itype), hashcode);
7798 hashcode = iterative_hash_expr (TYPE_MAX_VALUE (itype), hashcode);
7799 hashcode = iterative_hash_hashval_t (TYPE_HASH (type), hashcode);
7800 itype = type_hash_canon (hashcode, itype);
7802 return itype;
7805 /* Wrapper around build_range_type_1 with SHARED set to true. */
7807 tree
7808 build_range_type (tree type, tree lowval, tree highval)
7810 return build_range_type_1 (type, lowval, highval, true);
7813 /* Wrapper around build_range_type_1 with SHARED set to false. */
7815 tree
7816 build_nonshared_range_type (tree type, tree lowval, tree highval)
7818 return build_range_type_1 (type, lowval, highval, false);
7821 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE.
7822 MAXVAL should be the maximum value in the domain
7823 (one less than the length of the array).
7825 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT.
7826 We don't enforce this limit, that is up to caller (e.g. language front end).
7827 The limit exists because the result is a signed type and we don't handle
7828 sizes that use more than one HOST_WIDE_INT. */
7830 tree
7831 build_index_type (tree maxval)
7833 return build_range_type (sizetype, size_zero_node, maxval);
7836 /* Return true if the debug information for TYPE, a subtype, should be emitted
7837 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the
7838 high bound, respectively. Sometimes doing so unnecessarily obfuscates the
7839 debug info and doesn't reflect the source code. */
7841 bool
7842 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval)
7844 tree base_type = TREE_TYPE (type), low, high;
7846 /* Subrange types have a base type which is an integral type. */
7847 if (!INTEGRAL_TYPE_P (base_type))
7848 return false;
7850 /* Get the real bounds of the subtype. */
7851 if (lang_hooks.types.get_subrange_bounds)
7852 lang_hooks.types.get_subrange_bounds (type, &low, &high);
7853 else
7855 low = TYPE_MIN_VALUE (type);
7856 high = TYPE_MAX_VALUE (type);
7859 /* If the type and its base type have the same representation and the same
7860 name, then the type is not a subrange but a copy of the base type. */
7861 if ((TREE_CODE (base_type) == INTEGER_TYPE
7862 || TREE_CODE (base_type) == BOOLEAN_TYPE)
7863 && int_size_in_bytes (type) == int_size_in_bytes (base_type)
7864 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type))
7865 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type)))
7867 tree type_name = TYPE_NAME (type);
7868 tree base_type_name = TYPE_NAME (base_type);
7870 if (type_name && TREE_CODE (type_name) == TYPE_DECL)
7871 type_name = DECL_NAME (type_name);
7873 if (base_type_name && TREE_CODE (base_type_name) == TYPE_DECL)
7874 base_type_name = DECL_NAME (base_type_name);
7876 if (type_name == base_type_name)
7877 return false;
7880 if (lowval)
7881 *lowval = low;
7882 if (highval)
7883 *highval = high;
7884 return true;
7887 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE
7888 and number of elements specified by the range of values of INDEX_TYPE.
7889 If SHARED is true, reuse such a type that has already been constructed. */
7891 static tree
7892 build_array_type_1 (tree elt_type, tree index_type, bool shared)
7894 tree t;
7896 if (TREE_CODE (elt_type) == FUNCTION_TYPE)
7898 error ("arrays of functions are not meaningful");
7899 elt_type = integer_type_node;
7902 t = make_node (ARRAY_TYPE);
7903 TREE_TYPE (t) = elt_type;
7904 TYPE_DOMAIN (t) = index_type;
7905 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type);
7906 layout_type (t);
7908 /* If the element type is incomplete at this point we get marked for
7909 structural equality. Do not record these types in the canonical
7910 type hashtable. */
7911 if (TYPE_STRUCTURAL_EQUALITY_P (t))
7912 return t;
7914 if (shared)
7916 hashval_t hashcode = iterative_hash_object (TYPE_HASH (elt_type), 0);
7917 if (index_type)
7918 hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
7919 t = type_hash_canon (hashcode, t);
7922 if (TYPE_CANONICAL (t) == t)
7924 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
7925 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
7926 SET_TYPE_STRUCTURAL_EQUALITY (t);
7927 else if (TYPE_CANONICAL (elt_type) != elt_type
7928 || (index_type && TYPE_CANONICAL (index_type) != index_type))
7929 TYPE_CANONICAL (t)
7930 = build_array_type_1 (TYPE_CANONICAL (elt_type),
7931 index_type
7932 ? TYPE_CANONICAL (index_type) : NULL_TREE,
7933 shared);
7936 return t;
7939 /* Wrapper around build_array_type_1 with SHARED set to true. */
7941 tree
7942 build_array_type (tree elt_type, tree index_type)
7944 return build_array_type_1 (elt_type, index_type, true);
7947 /* Wrapper around build_array_type_1 with SHARED set to false. */
7949 tree
7950 build_nonshared_array_type (tree elt_type, tree index_type)
7952 return build_array_type_1 (elt_type, index_type, false);
7955 /* Return a representation of ELT_TYPE[NELTS], using indices of type
7956 sizetype. */
7958 tree
7959 build_array_type_nelts (tree elt_type, unsigned HOST_WIDE_INT nelts)
7961 return build_array_type (elt_type, build_index_type (size_int (nelts - 1)));
7964 /* Recursively examines the array elements of TYPE, until a non-array
7965 element type is found. */
7967 tree
7968 strip_array_types (tree type)
7970 while (TREE_CODE (type) == ARRAY_TYPE)
7971 type = TREE_TYPE (type);
7973 return type;
7976 /* Computes the canonical argument types from the argument type list
7977 ARGTYPES.
7979 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true
7980 on entry to this function, or if any of the ARGTYPES are
7981 structural.
7983 Upon return, *ANY_NONCANONICAL_P will be true iff either it was
7984 true on entry to this function, or if any of the ARGTYPES are
7985 non-canonical.
7987 Returns a canonical argument list, which may be ARGTYPES when the
7988 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is
7989 true) or would not differ from ARGTYPES. */
7991 static tree
7992 maybe_canonicalize_argtypes (tree argtypes,
7993 bool *any_structural_p,
7994 bool *any_noncanonical_p)
7996 tree arg;
7997 bool any_noncanonical_argtypes_p = false;
7999 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg))
8001 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node)
8002 /* Fail gracefully by stating that the type is structural. */
8003 *any_structural_p = true;
8004 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg)))
8005 *any_structural_p = true;
8006 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg)
8007 || TREE_PURPOSE (arg))
8008 /* If the argument has a default argument, we consider it
8009 non-canonical even though the type itself is canonical.
8010 That way, different variants of function and method types
8011 with default arguments will all point to the variant with
8012 no defaults as their canonical type. */
8013 any_noncanonical_argtypes_p = true;
8016 if (*any_structural_p)
8017 return argtypes;
8019 if (any_noncanonical_argtypes_p)
8021 /* Build the canonical list of argument types. */
8022 tree canon_argtypes = NULL_TREE;
8023 bool is_void = false;
8025 for (arg = argtypes; arg; arg = TREE_CHAIN (arg))
8027 if (arg == void_list_node)
8028 is_void = true;
8029 else
8030 canon_argtypes = tree_cons (NULL_TREE,
8031 TYPE_CANONICAL (TREE_VALUE (arg)),
8032 canon_argtypes);
8035 canon_argtypes = nreverse (canon_argtypes);
8036 if (is_void)
8037 canon_argtypes = chainon (canon_argtypes, void_list_node);
8039 /* There is a non-canonical type. */
8040 *any_noncanonical_p = true;
8041 return canon_argtypes;
8044 /* The canonical argument types are the same as ARGTYPES. */
8045 return argtypes;
8048 /* Construct, lay out and return
8049 the type of functions returning type VALUE_TYPE
8050 given arguments of types ARG_TYPES.
8051 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs
8052 are data type nodes for the arguments of the function.
8053 If such a type has already been constructed, reuse it. */
8055 tree
8056 build_function_type (tree value_type, tree arg_types)
8058 tree t;
8059 hashval_t hashcode = 0;
8060 bool any_structural_p, any_noncanonical_p;
8061 tree canon_argtypes;
8063 if (TREE_CODE (value_type) == FUNCTION_TYPE)
8065 error ("function return type cannot be function");
8066 value_type = integer_type_node;
8069 /* Make a node of the sort we want. */
8070 t = make_node (FUNCTION_TYPE);
8071 TREE_TYPE (t) = value_type;
8072 TYPE_ARG_TYPES (t) = arg_types;
8074 /* If we already have such a type, use the old one. */
8075 hashcode = iterative_hash_object (TYPE_HASH (value_type), hashcode);
8076 hashcode = type_hash_list (arg_types, hashcode);
8077 t = type_hash_canon (hashcode, t);
8079 /* Set up the canonical type. */
8080 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type);
8081 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type;
8082 canon_argtypes = maybe_canonicalize_argtypes (arg_types,
8083 &any_structural_p,
8084 &any_noncanonical_p);
8085 if (any_structural_p)
8086 SET_TYPE_STRUCTURAL_EQUALITY (t);
8087 else if (any_noncanonical_p)
8088 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type),
8089 canon_argtypes);
8091 if (!COMPLETE_TYPE_P (t))
8092 layout_type (t);
8093 return t;
8096 /* Build a function type. The RETURN_TYPE is the type returned by the
8097 function. If VAARGS is set, no void_type_node is appended to the
8098 the list. ARGP must be always be terminated be a NULL_TREE. */
8100 static tree
8101 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
8103 tree t, args, last;
8105 t = va_arg (argp, tree);
8106 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree))
8107 args = tree_cons (NULL_TREE, t, args);
8109 if (vaargs)
8111 last = args;
8112 if (args != NULL_TREE)
8113 args = nreverse (args);
8114 gcc_assert (last != void_list_node);
8116 else if (args == NULL_TREE)
8117 args = void_list_node;
8118 else
8120 last = args;
8121 args = nreverse (args);
8122 TREE_CHAIN (last) = void_list_node;
8124 args = build_function_type (return_type, args);
8126 return args;
8129 /* Build a function type. The RETURN_TYPE is the type returned by the
8130 function. If additional arguments are provided, they are
8131 additional argument types. The list of argument types must always
8132 be terminated by NULL_TREE. */
8134 tree
8135 build_function_type_list (tree return_type, ...)
8137 tree args;
8138 va_list p;
8140 va_start (p, return_type);
8141 args = build_function_type_list_1 (false, return_type, p);
8142 va_end (p);
8143 return args;
8146 /* Build a variable argument function type. The RETURN_TYPE is the
8147 type returned by the function. If additional arguments are provided,
8148 they are additional argument types. The list of argument types must
8149 always be terminated by NULL_TREE. */
8151 tree
8152 build_varargs_function_type_list (tree return_type, ...)
8154 tree args;
8155 va_list p;
8157 va_start (p, return_type);
8158 args = build_function_type_list_1 (true, return_type, p);
8159 va_end (p);
8161 return args;
8164 /* Build a function type. RETURN_TYPE is the type returned by the
8165 function; VAARGS indicates whether the function takes varargs. The
8166 function takes N named arguments, the types of which are provided in
8167 ARG_TYPES. */
8169 static tree
8170 build_function_type_array_1 (bool vaargs, tree return_type, int n,
8171 tree *arg_types)
8173 int i;
8174 tree t = vaargs ? NULL_TREE : void_list_node;
8176 for (i = n - 1; i >= 0; i--)
8177 t = tree_cons (NULL_TREE, arg_types[i], t);
8179 return build_function_type (return_type, t);
8182 /* Build a function type. RETURN_TYPE is the type returned by the
8183 function. The function takes N named arguments, the types of which
8184 are provided in ARG_TYPES. */
8186 tree
8187 build_function_type_array (tree return_type, int n, tree *arg_types)
8189 return build_function_type_array_1 (false, return_type, n, arg_types);
8192 /* Build a variable argument function type. RETURN_TYPE is the type
8193 returned by the function. The function takes N named arguments, the
8194 types of which are provided in ARG_TYPES. */
8196 tree
8197 build_varargs_function_type_array (tree return_type, int n, tree *arg_types)
8199 return build_function_type_array_1 (true, return_type, n, arg_types);
8202 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE)
8203 and ARGTYPES (a TREE_LIST) are the return type and arguments types
8204 for the method. An implicit additional parameter (of type
8205 pointer-to-BASETYPE) is added to the ARGTYPES. */
8207 tree
8208 build_method_type_directly (tree basetype,
8209 tree rettype,
8210 tree argtypes)
8212 tree t;
8213 tree ptype;
8214 int hashcode = 0;
8215 bool any_structural_p, any_noncanonical_p;
8216 tree canon_argtypes;
8218 /* Make a node of the sort we want. */
8219 t = make_node (METHOD_TYPE);
8221 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8222 TREE_TYPE (t) = rettype;
8223 ptype = build_pointer_type (basetype);
8225 /* The actual arglist for this function includes a "hidden" argument
8226 which is "this". Put it into the list of argument types. */
8227 argtypes = tree_cons (NULL_TREE, ptype, argtypes);
8228 TYPE_ARG_TYPES (t) = argtypes;
8230 /* If we already have such a type, use the old one. */
8231 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
8232 hashcode = iterative_hash_object (TYPE_HASH (rettype), hashcode);
8233 hashcode = type_hash_list (argtypes, hashcode);
8234 t = type_hash_canon (hashcode, t);
8236 /* Set up the canonical type. */
8237 any_structural_p
8238 = (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8239 || TYPE_STRUCTURAL_EQUALITY_P (rettype));
8240 any_noncanonical_p
8241 = (TYPE_CANONICAL (basetype) != basetype
8242 || TYPE_CANONICAL (rettype) != rettype);
8243 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes),
8244 &any_structural_p,
8245 &any_noncanonical_p);
8246 if (any_structural_p)
8247 SET_TYPE_STRUCTURAL_EQUALITY (t);
8248 else if (any_noncanonical_p)
8249 TYPE_CANONICAL (t)
8250 = build_method_type_directly (TYPE_CANONICAL (basetype),
8251 TYPE_CANONICAL (rettype),
8252 canon_argtypes);
8253 if (!COMPLETE_TYPE_P (t))
8254 layout_type (t);
8256 return t;
8259 /* Construct, lay out and return the type of methods belonging to class
8260 BASETYPE and whose arguments and values are described by TYPE.
8261 If that type exists already, reuse it.
8262 TYPE must be a FUNCTION_TYPE node. */
8264 tree
8265 build_method_type (tree basetype, tree type)
8267 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
8269 return build_method_type_directly (basetype,
8270 TREE_TYPE (type),
8271 TYPE_ARG_TYPES (type));
8274 /* Construct, lay out and return the type of offsets to a value
8275 of type TYPE, within an object of type BASETYPE.
8276 If a suitable offset type exists already, reuse it. */
8278 tree
8279 build_offset_type (tree basetype, tree type)
8281 tree t;
8282 hashval_t hashcode = 0;
8284 /* Make a node of the sort we want. */
8285 t = make_node (OFFSET_TYPE);
8287 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype);
8288 TREE_TYPE (t) = type;
8290 /* If we already have such a type, use the old one. */
8291 hashcode = iterative_hash_object (TYPE_HASH (basetype), hashcode);
8292 hashcode = iterative_hash_object (TYPE_HASH (type), hashcode);
8293 t = type_hash_canon (hashcode, t);
8295 if (!COMPLETE_TYPE_P (t))
8296 layout_type (t);
8298 if (TYPE_CANONICAL (t) == t)
8300 if (TYPE_STRUCTURAL_EQUALITY_P (basetype)
8301 || TYPE_STRUCTURAL_EQUALITY_P (type))
8302 SET_TYPE_STRUCTURAL_EQUALITY (t);
8303 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype
8304 || TYPE_CANONICAL (type) != type)
8305 TYPE_CANONICAL (t)
8306 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)),
8307 TYPE_CANONICAL (type));
8310 return t;
8313 /* Create a complex type whose components are COMPONENT_TYPE. */
8315 tree
8316 build_complex_type (tree component_type)
8318 tree t;
8319 hashval_t hashcode;
8321 gcc_assert (INTEGRAL_TYPE_P (component_type)
8322 || SCALAR_FLOAT_TYPE_P (component_type)
8323 || FIXED_POINT_TYPE_P (component_type));
8325 /* Make a node of the sort we want. */
8326 t = make_node (COMPLEX_TYPE);
8328 TREE_TYPE (t) = TYPE_MAIN_VARIANT (component_type);
8330 /* If we already have such a type, use the old one. */
8331 hashcode = iterative_hash_object (TYPE_HASH (component_type), 0);
8332 t = type_hash_canon (hashcode, t);
8334 if (!COMPLETE_TYPE_P (t))
8335 layout_type (t);
8337 if (TYPE_CANONICAL (t) == t)
8339 if (TYPE_STRUCTURAL_EQUALITY_P (component_type))
8340 SET_TYPE_STRUCTURAL_EQUALITY (t);
8341 else if (TYPE_CANONICAL (component_type) != component_type)
8342 TYPE_CANONICAL (t)
8343 = build_complex_type (TYPE_CANONICAL (component_type));
8346 /* We need to create a name, since complex is a fundamental type. */
8347 if (! TYPE_NAME (t))
8349 const char *name;
8350 if (component_type == char_type_node)
8351 name = "complex char";
8352 else if (component_type == signed_char_type_node)
8353 name = "complex signed char";
8354 else if (component_type == unsigned_char_type_node)
8355 name = "complex unsigned char";
8356 else if (component_type == short_integer_type_node)
8357 name = "complex short int";
8358 else if (component_type == short_unsigned_type_node)
8359 name = "complex short unsigned int";
8360 else if (component_type == integer_type_node)
8361 name = "complex int";
8362 else if (component_type == unsigned_type_node)
8363 name = "complex unsigned int";
8364 else if (component_type == long_integer_type_node)
8365 name = "complex long int";
8366 else if (component_type == long_unsigned_type_node)
8367 name = "complex long unsigned int";
8368 else if (component_type == long_long_integer_type_node)
8369 name = "complex long long int";
8370 else if (component_type == long_long_unsigned_type_node)
8371 name = "complex long long unsigned int";
8372 else
8373 name = 0;
8375 if (name != 0)
8376 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
8377 get_identifier (name), t);
8380 return build_qualified_type (t, TYPE_QUALS (component_type));
8383 /* If TYPE is a real or complex floating-point type and the target
8384 does not directly support arithmetic on TYPE then return the wider
8385 type to be used for arithmetic on TYPE. Otherwise, return
8386 NULL_TREE. */
8388 tree
8389 excess_precision_type (tree type)
8391 if (flag_excess_precision != EXCESS_PRECISION_FAST)
8393 int flt_eval_method = TARGET_FLT_EVAL_METHOD;
8394 switch (TREE_CODE (type))
8396 case REAL_TYPE:
8397 switch (flt_eval_method)
8399 case 1:
8400 if (TYPE_MODE (type) == TYPE_MODE (float_type_node))
8401 return double_type_node;
8402 break;
8403 case 2:
8404 if (TYPE_MODE (type) == TYPE_MODE (float_type_node)
8405 || TYPE_MODE (type) == TYPE_MODE (double_type_node))
8406 return long_double_type_node;
8407 break;
8408 default:
8409 gcc_unreachable ();
8411 break;
8412 case COMPLEX_TYPE:
8413 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE)
8414 return NULL_TREE;
8415 switch (flt_eval_method)
8417 case 1:
8418 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node))
8419 return complex_double_type_node;
8420 break;
8421 case 2:
8422 if (TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (float_type_node)
8423 || (TYPE_MODE (TREE_TYPE (type))
8424 == TYPE_MODE (double_type_node)))
8425 return complex_long_double_type_node;
8426 break;
8427 default:
8428 gcc_unreachable ();
8430 break;
8431 default:
8432 break;
8435 return NULL_TREE;
8438 /* Return OP, stripped of any conversions to wider types as much as is safe.
8439 Converting the value back to OP's type makes a value equivalent to OP.
8441 If FOR_TYPE is nonzero, we return a value which, if converted to
8442 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE.
8444 OP must have integer, real or enumeral type. Pointers are not allowed!
8446 There are some cases where the obvious value we could return
8447 would regenerate to OP if converted to OP's type,
8448 but would not extend like OP to wider types.
8449 If FOR_TYPE indicates such extension is contemplated, we eschew such values.
8450 For example, if OP is (unsigned short)(signed char)-1,
8451 we avoid returning (signed char)-1 if FOR_TYPE is int,
8452 even though extending that to an unsigned short would regenerate OP,
8453 since the result of extending (signed char)-1 to (int)
8454 is different from (int) OP. */
8456 tree
8457 get_unwidened (tree op, tree for_type)
8459 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */
8460 tree type = TREE_TYPE (op);
8461 unsigned final_prec
8462 = TYPE_PRECISION (for_type != 0 ? for_type : type);
8463 int uns
8464 = (for_type != 0 && for_type != type
8465 && final_prec > TYPE_PRECISION (type)
8466 && TYPE_UNSIGNED (type));
8467 tree win = op;
8469 while (CONVERT_EXPR_P (op))
8471 int bitschange;
8473 /* TYPE_PRECISION on vector types has different meaning
8474 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions,
8475 so avoid them here. */
8476 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE)
8477 break;
8479 bitschange = TYPE_PRECISION (TREE_TYPE (op))
8480 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)));
8482 /* Truncations are many-one so cannot be removed.
8483 Unless we are later going to truncate down even farther. */
8484 if (bitschange < 0
8485 && final_prec > TYPE_PRECISION (TREE_TYPE (op)))
8486 break;
8488 /* See what's inside this conversion. If we decide to strip it,
8489 we will set WIN. */
8490 op = TREE_OPERAND (op, 0);
8492 /* If we have not stripped any zero-extensions (uns is 0),
8493 we can strip any kind of extension.
8494 If we have previously stripped a zero-extension,
8495 only zero-extensions can safely be stripped.
8496 Any extension can be stripped if the bits it would produce
8497 are all going to be discarded later by truncating to FOR_TYPE. */
8499 if (bitschange > 0)
8501 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op)))
8502 win = op;
8503 /* TYPE_UNSIGNED says whether this is a zero-extension.
8504 Let's avoid computing it if it does not affect WIN
8505 and if UNS will not be needed again. */
8506 if ((uns
8507 || CONVERT_EXPR_P (op))
8508 && TYPE_UNSIGNED (TREE_TYPE (op)))
8510 uns = 1;
8511 win = op;
8516 /* If we finally reach a constant see if it fits in for_type and
8517 in that case convert it. */
8518 if (for_type
8519 && TREE_CODE (win) == INTEGER_CST
8520 && TREE_TYPE (win) != for_type
8521 && int_fits_type_p (win, for_type))
8522 win = fold_convert (for_type, win);
8524 return win;
8527 /* Return OP or a simpler expression for a narrower value
8528 which can be sign-extended or zero-extended to give back OP.
8529 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
8530 or 0 if the value should be sign-extended. */
8532 tree
8533 get_narrower (tree op, int *unsignedp_ptr)
8535 int uns = 0;
8536 int first = 1;
8537 tree win = op;
8538 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op));
8540 while (TREE_CODE (op) == NOP_EXPR)
8542 int bitschange
8543 = (TYPE_PRECISION (TREE_TYPE (op))
8544 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))));
8546 /* Truncations are many-one so cannot be removed. */
8547 if (bitschange < 0)
8548 break;
8550 /* See what's inside this conversion. If we decide to strip it,
8551 we will set WIN. */
8553 if (bitschange > 0)
8555 op = TREE_OPERAND (op, 0);
8556 /* An extension: the outermost one can be stripped,
8557 but remember whether it is zero or sign extension. */
8558 if (first)
8559 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8560 /* Otherwise, if a sign extension has been stripped,
8561 only sign extensions can now be stripped;
8562 if a zero extension has been stripped, only zero-extensions. */
8563 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op)))
8564 break;
8565 first = 0;
8567 else /* bitschange == 0 */
8569 /* A change in nominal type can always be stripped, but we must
8570 preserve the unsignedness. */
8571 if (first)
8572 uns = TYPE_UNSIGNED (TREE_TYPE (op));
8573 first = 0;
8574 op = TREE_OPERAND (op, 0);
8575 /* Keep trying to narrow, but don't assign op to win if it
8576 would turn an integral type into something else. */
8577 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p)
8578 continue;
8581 win = op;
8584 if (TREE_CODE (op) == COMPONENT_REF
8585 /* Since type_for_size always gives an integer type. */
8586 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE
8587 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE
8588 /* Ensure field is laid out already. */
8589 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0
8590 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1))))
8592 unsigned HOST_WIDE_INT innerprec
8593 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1)));
8594 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1))
8595 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1))));
8596 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp);
8598 /* We can get this structure field in a narrower type that fits it,
8599 but the resulting extension to its nominal type (a fullword type)
8600 must satisfy the same conditions as for other extensions.
8602 Do this only for fields that are aligned (not bit-fields),
8603 because when bit-field insns will be used there is no
8604 advantage in doing this. */
8606 if (innerprec < TYPE_PRECISION (TREE_TYPE (op))
8607 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1))
8608 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1)))
8609 && type != 0)
8611 if (first)
8612 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1));
8613 win = fold_convert (type, op);
8617 *unsignedp_ptr = uns;
8618 return win;
8621 /* Returns true if integer constant C has a value that is permissible
8622 for type TYPE (an INTEGER_TYPE). */
8624 bool
8625 int_fits_type_p (const_tree c, const_tree type)
8627 tree type_low_bound, type_high_bound;
8628 bool ok_for_low_bound, ok_for_high_bound, unsc;
8629 double_int dc, dd;
8631 dc = tree_to_double_int (c);
8632 unsc = TYPE_UNSIGNED (TREE_TYPE (c));
8634 retry:
8635 type_low_bound = TYPE_MIN_VALUE (type);
8636 type_high_bound = TYPE_MAX_VALUE (type);
8638 /* If at least one bound of the type is a constant integer, we can check
8639 ourselves and maybe make a decision. If no such decision is possible, but
8640 this type is a subtype, try checking against that. Otherwise, use
8641 double_int_fits_to_tree_p, which checks against the precision.
8643 Compute the status for each possibly constant bound, and return if we see
8644 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1
8645 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1
8646 for "constant known to fit". */
8648 /* Check if c >= type_low_bound. */
8649 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST)
8651 dd = tree_to_double_int (type_low_bound);
8652 if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_low_bound)))
8654 int c_neg = (!unsc && dc.is_negative ());
8655 int t_neg = (unsc && dd.is_negative ());
8657 if (c_neg && !t_neg)
8658 return false;
8659 if ((c_neg || !t_neg) && dc.ult (dd))
8660 return false;
8662 else if (dc.cmp (dd, unsc) < 0)
8663 return false;
8664 ok_for_low_bound = true;
8666 else
8667 ok_for_low_bound = false;
8669 /* Check if c <= type_high_bound. */
8670 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST)
8672 dd = tree_to_double_int (type_high_bound);
8673 if (unsc != TYPE_UNSIGNED (TREE_TYPE (type_high_bound)))
8675 int c_neg = (!unsc && dc.is_negative ());
8676 int t_neg = (unsc && dd.is_negative ());
8678 if (t_neg && !c_neg)
8679 return false;
8680 if ((t_neg || !c_neg) && dc.ugt (dd))
8681 return false;
8683 else if (dc.cmp (dd, unsc) > 0)
8684 return false;
8685 ok_for_high_bound = true;
8687 else
8688 ok_for_high_bound = false;
8690 /* If the constant fits both bounds, the result is known. */
8691 if (ok_for_low_bound && ok_for_high_bound)
8692 return true;
8694 /* Perform some generic filtering which may allow making a decision
8695 even if the bounds are not constant. First, negative integers
8696 never fit in unsigned types, */
8697 if (TYPE_UNSIGNED (type) && !unsc && dc.is_negative ())
8698 return false;
8700 /* Second, narrower types always fit in wider ones. */
8701 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c)))
8702 return true;
8704 /* Third, unsigned integers with top bit set never fit signed types. */
8705 if (! TYPE_UNSIGNED (type) && unsc)
8707 int prec = GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (c))) - 1;
8708 if (prec < HOST_BITS_PER_WIDE_INT)
8710 if (((((unsigned HOST_WIDE_INT) 1) << prec) & dc.low) != 0)
8711 return false;
8713 else if (((((unsigned HOST_WIDE_INT) 1)
8714 << (prec - HOST_BITS_PER_WIDE_INT)) & dc.high) != 0)
8715 return false;
8718 /* If we haven't been able to decide at this point, there nothing more we
8719 can check ourselves here. Look at the base type if we have one and it
8720 has the same precision. */
8721 if (TREE_CODE (type) == INTEGER_TYPE
8722 && TREE_TYPE (type) != 0
8723 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type)))
8725 type = TREE_TYPE (type);
8726 goto retry;
8729 /* Or to double_int_fits_to_tree_p, if nothing else. */
8730 return double_int_fits_to_tree_p (type, dc);
8733 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant
8734 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be
8735 represented (assuming two's-complement arithmetic) within the bit
8736 precision of the type are returned instead. */
8738 void
8739 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max)
8741 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type)
8742 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
8743 mpz_set_double_int (min, tree_to_double_int (TYPE_MIN_VALUE (type)),
8744 TYPE_UNSIGNED (type));
8745 else
8747 if (TYPE_UNSIGNED (type))
8748 mpz_set_ui (min, 0);
8749 else
8751 double_int mn;
8752 mn = double_int::mask (TYPE_PRECISION (type) - 1);
8753 mn = (mn + double_int_one).sext (TYPE_PRECISION (type));
8754 mpz_set_double_int (min, mn, false);
8758 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type)
8759 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST)
8760 mpz_set_double_int (max, tree_to_double_int (TYPE_MAX_VALUE (type)),
8761 TYPE_UNSIGNED (type));
8762 else
8764 if (TYPE_UNSIGNED (type))
8765 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type)),
8766 true);
8767 else
8768 mpz_set_double_int (max, double_int::mask (TYPE_PRECISION (type) - 1),
8769 true);
8773 /* Return true if VAR is an automatic variable defined in function FN. */
8775 bool
8776 auto_var_in_fn_p (const_tree var, const_tree fn)
8778 return (DECL_P (var) && DECL_CONTEXT (var) == fn
8779 && ((((TREE_CODE (var) == VAR_DECL && ! DECL_EXTERNAL (var))
8780 || TREE_CODE (var) == PARM_DECL)
8781 && ! TREE_STATIC (var))
8782 || TREE_CODE (var) == LABEL_DECL
8783 || TREE_CODE (var) == RESULT_DECL));
8786 /* Subprogram of following function. Called by walk_tree.
8788 Return *TP if it is an automatic variable or parameter of the
8789 function passed in as DATA. */
8791 static tree
8792 find_var_from_fn (tree *tp, int *walk_subtrees, void *data)
8794 tree fn = (tree) data;
8796 if (TYPE_P (*tp))
8797 *walk_subtrees = 0;
8799 else if (DECL_P (*tp)
8800 && auto_var_in_fn_p (*tp, fn))
8801 return *tp;
8803 return NULL_TREE;
8806 /* Returns true if T is, contains, or refers to a type with variable
8807 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the
8808 arguments, but not the return type. If FN is nonzero, only return
8809 true if a modifier of the type or position of FN is a variable or
8810 parameter inside FN.
8812 This concept is more general than that of C99 'variably modified types':
8813 in C99, a struct type is never variably modified because a VLA may not
8814 appear as a structure member. However, in GNU C code like:
8816 struct S { int i[f()]; };
8818 is valid, and other languages may define similar constructs. */
8820 bool
8821 variably_modified_type_p (tree type, tree fn)
8823 tree t;
8825 /* Test if T is either variable (if FN is zero) or an expression containing
8826 a variable in FN. If TYPE isn't gimplified, return true also if
8827 gimplify_one_sizepos would gimplify the expression into a local
8828 variable. */
8829 #define RETURN_TRUE_IF_VAR(T) \
8830 do { tree _t = (T); \
8831 if (_t != NULL_TREE \
8832 && _t != error_mark_node \
8833 && TREE_CODE (_t) != INTEGER_CST \
8834 && TREE_CODE (_t) != PLACEHOLDER_EXPR \
8835 && (!fn \
8836 || (!TYPE_SIZES_GIMPLIFIED (type) \
8837 && !is_gimple_sizepos (_t)) \
8838 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \
8839 return true; } while (0)
8841 if (type == error_mark_node)
8842 return false;
8844 /* If TYPE itself has variable size, it is variably modified. */
8845 RETURN_TRUE_IF_VAR (TYPE_SIZE (type));
8846 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type));
8848 switch (TREE_CODE (type))
8850 case POINTER_TYPE:
8851 case REFERENCE_TYPE:
8852 case VECTOR_TYPE:
8853 if (variably_modified_type_p (TREE_TYPE (type), fn))
8854 return true;
8855 break;
8857 case FUNCTION_TYPE:
8858 case METHOD_TYPE:
8859 /* If TYPE is a function type, it is variably modified if the
8860 return type is variably modified. */
8861 if (variably_modified_type_p (TREE_TYPE (type), fn))
8862 return true;
8863 break;
8865 case INTEGER_TYPE:
8866 case REAL_TYPE:
8867 case FIXED_POINT_TYPE:
8868 case ENUMERAL_TYPE:
8869 case BOOLEAN_TYPE:
8870 /* Scalar types are variably modified if their end points
8871 aren't constant. */
8872 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type));
8873 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type));
8874 break;
8876 case RECORD_TYPE:
8877 case UNION_TYPE:
8878 case QUAL_UNION_TYPE:
8879 /* We can't see if any of the fields are variably-modified by the
8880 definition we normally use, since that would produce infinite
8881 recursion via pointers. */
8882 /* This is variably modified if some field's type is. */
8883 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
8884 if (TREE_CODE (t) == FIELD_DECL)
8886 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t));
8887 RETURN_TRUE_IF_VAR (DECL_SIZE (t));
8888 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t));
8890 if (TREE_CODE (type) == QUAL_UNION_TYPE)
8891 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t));
8893 break;
8895 case ARRAY_TYPE:
8896 /* Do not call ourselves to avoid infinite recursion. This is
8897 variably modified if the element type is. */
8898 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type)));
8899 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type)));
8900 break;
8902 default:
8903 break;
8906 /* The current language may have other cases to check, but in general,
8907 all other types are not variably modified. */
8908 return lang_hooks.tree_inlining.var_mod_type_p (type, fn);
8910 #undef RETURN_TRUE_IF_VAR
8913 /* Given a DECL or TYPE, return the scope in which it was declared, or
8914 NULL_TREE if there is no containing scope. */
8916 tree
8917 get_containing_scope (const_tree t)
8919 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t));
8922 /* Return the innermost context enclosing DECL that is
8923 a FUNCTION_DECL, or zero if none. */
8925 tree
8926 decl_function_context (const_tree decl)
8928 tree context;
8930 if (TREE_CODE (decl) == ERROR_MARK)
8931 return 0;
8933 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable
8934 where we look up the function at runtime. Such functions always take
8935 a first argument of type 'pointer to real context'.
8937 C++ should really be fixed to use DECL_CONTEXT for the real context,
8938 and use something else for the "virtual context". */
8939 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl))
8940 context
8941 = TYPE_MAIN_VARIANT
8942 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
8943 else
8944 context = DECL_CONTEXT (decl);
8946 while (context && TREE_CODE (context) != FUNCTION_DECL)
8948 if (TREE_CODE (context) == BLOCK)
8949 context = BLOCK_SUPERCONTEXT (context);
8950 else
8951 context = get_containing_scope (context);
8954 return context;
8957 /* Return the innermost context enclosing DECL that is
8958 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none.
8959 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */
8961 tree
8962 decl_type_context (const_tree decl)
8964 tree context = DECL_CONTEXT (decl);
8966 while (context)
8967 switch (TREE_CODE (context))
8969 case NAMESPACE_DECL:
8970 case TRANSLATION_UNIT_DECL:
8971 return NULL_TREE;
8973 case RECORD_TYPE:
8974 case UNION_TYPE:
8975 case QUAL_UNION_TYPE:
8976 return context;
8978 case TYPE_DECL:
8979 case FUNCTION_DECL:
8980 context = DECL_CONTEXT (context);
8981 break;
8983 case BLOCK:
8984 context = BLOCK_SUPERCONTEXT (context);
8985 break;
8987 default:
8988 gcc_unreachable ();
8991 return NULL_TREE;
8994 /* CALL is a CALL_EXPR. Return the declaration for the function
8995 called, or NULL_TREE if the called function cannot be
8996 determined. */
8998 tree
8999 get_callee_fndecl (const_tree call)
9001 tree addr;
9003 if (call == error_mark_node)
9004 return error_mark_node;
9006 /* It's invalid to call this function with anything but a
9007 CALL_EXPR. */
9008 gcc_assert (TREE_CODE (call) == CALL_EXPR);
9010 /* The first operand to the CALL is the address of the function
9011 called. */
9012 addr = CALL_EXPR_FN (call);
9014 STRIP_NOPS (addr);
9016 /* If this is a readonly function pointer, extract its initial value. */
9017 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL
9018 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr)
9019 && DECL_INITIAL (addr))
9020 addr = DECL_INITIAL (addr);
9022 /* If the address is just `&f' for some function `f', then we know
9023 that `f' is being called. */
9024 if (TREE_CODE (addr) == ADDR_EXPR
9025 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
9026 return TREE_OPERAND (addr, 0);
9028 /* We couldn't figure out what was being called. */
9029 return NULL_TREE;
9032 /* Print debugging information about tree nodes generated during the compile,
9033 and any language-specific information. */
9035 void
9036 dump_tree_statistics (void)
9038 if (GATHER_STATISTICS)
9040 int i;
9041 int total_nodes, total_bytes;
9042 fprintf (stderr, "Kind Nodes Bytes\n");
9043 fprintf (stderr, "---------------------------------------\n");
9044 total_nodes = total_bytes = 0;
9045 for (i = 0; i < (int) all_kinds; i++)
9047 fprintf (stderr, "%-20s %7d %10d\n", tree_node_kind_names[i],
9048 tree_node_counts[i], tree_node_sizes[i]);
9049 total_nodes += tree_node_counts[i];
9050 total_bytes += tree_node_sizes[i];
9052 fprintf (stderr, "---------------------------------------\n");
9053 fprintf (stderr, "%-20s %7d %10d\n", "Total", total_nodes, total_bytes);
9054 fprintf (stderr, "---------------------------------------\n");
9055 fprintf (stderr, "Code Nodes\n");
9056 fprintf (stderr, "----------------------------\n");
9057 for (i = 0; i < (int) MAX_TREE_CODES; i++)
9058 fprintf (stderr, "%-20s %7d\n", get_tree_code_name ((enum tree_code) i),
9059 tree_code_counts[i]);
9060 fprintf (stderr, "----------------------------\n");
9061 ssanames_print_statistics ();
9062 phinodes_print_statistics ();
9064 else
9065 fprintf (stderr, "(No per-node statistics)\n");
9067 print_type_hash_statistics ();
9068 print_debug_expr_statistics ();
9069 print_value_expr_statistics ();
9070 lang_hooks.print_statistics ();
9073 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s"
9075 /* Generate a crc32 of a byte. */
9077 static unsigned
9078 crc32_unsigned_bits (unsigned chksum, unsigned value, unsigned bits)
9080 unsigned ix;
9082 for (ix = bits; ix--; value <<= 1)
9084 unsigned feedback;
9086 feedback = (value ^ chksum) & 0x80000000 ? 0x04c11db7 : 0;
9087 chksum <<= 1;
9088 chksum ^= feedback;
9090 return chksum;
9093 /* Generate a crc32 of a 32-bit unsigned. */
9095 unsigned
9096 crc32_unsigned (unsigned chksum, unsigned value)
9098 return crc32_unsigned_bits (chksum, value, 32);
9101 /* Generate a crc32 of a byte. */
9103 unsigned
9104 crc32_byte (unsigned chksum, char byte)
9106 return crc32_unsigned_bits (chksum, (unsigned) byte << 24, 8);
9109 /* Generate a crc32 of a string. */
9111 unsigned
9112 crc32_string (unsigned chksum, const char *string)
9116 chksum = crc32_byte (chksum, *string);
9118 while (*string++);
9119 return chksum;
9122 /* P is a string that will be used in a symbol. Mask out any characters
9123 that are not valid in that context. */
9125 void
9126 clean_symbol_name (char *p)
9128 for (; *p; p++)
9129 if (! (ISALNUM (*p)
9130 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */
9131 || *p == '$'
9132 #endif
9133 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */
9134 || *p == '.'
9135 #endif
9137 *p = '_';
9140 /* Generate a name for a special-purpose function.
9141 The generated name may need to be unique across the whole link.
9142 Changes to this function may also require corresponding changes to
9143 xstrdup_mask_random.
9144 TYPE is some string to identify the purpose of this function to the
9145 linker or collect2; it must start with an uppercase letter,
9146 one of:
9147 I - for constructors
9148 D - for destructors
9149 N - for C++ anonymous namespaces
9150 F - for DWARF unwind frame information. */
9152 tree
9153 get_file_function_name (const char *type)
9155 char *buf;
9156 const char *p;
9157 char *q;
9159 /* If we already have a name we know to be unique, just use that. */
9160 if (first_global_object_name)
9161 p = q = ASTRDUP (first_global_object_name);
9162 /* If the target is handling the constructors/destructors, they
9163 will be local to this file and the name is only necessary for
9164 debugging purposes.
9165 We also assign sub_I and sub_D sufixes to constructors called from
9166 the global static constructors. These are always local. */
9167 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
9168 || (strncmp (type, "sub_", 4) == 0
9169 && (type[4] == 'I' || type[4] == 'D')))
9171 const char *file = main_input_filename;
9172 if (! file)
9173 file = LOCATION_FILE (input_location);
9174 /* Just use the file's basename, because the full pathname
9175 might be quite long. */
9176 p = q = ASTRDUP (lbasename (file));
9178 else
9180 /* Otherwise, the name must be unique across the entire link.
9181 We don't have anything that we know to be unique to this translation
9182 unit, so use what we do have and throw in some randomness. */
9183 unsigned len;
9184 const char *name = weak_global_object_name;
9185 const char *file = main_input_filename;
9187 if (! name)
9188 name = "";
9189 if (! file)
9190 file = LOCATION_FILE (input_location);
9192 len = strlen (file);
9193 q = (char *) alloca (9 + 17 + len + 1);
9194 memcpy (q, file, len + 1);
9196 snprintf (q + len, 9 + 17 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX,
9197 crc32_string (0, name), get_random_seed (false));
9199 p = q;
9202 clean_symbol_name (q);
9203 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p)
9204 + strlen (type));
9206 /* Set up the name of the file-level functions we may need.
9207 Use a global object (which is already required to be unique over
9208 the program) rather than the file name (which imposes extra
9209 constraints). */
9210 sprintf (buf, FILE_FUNCTION_FORMAT, type, p);
9212 return get_identifier (buf);
9215 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
9217 /* Complain that the tree code of NODE does not match the expected 0
9218 terminated list of trailing codes. The trailing code list can be
9219 empty, for a more vague error message. FILE, LINE, and FUNCTION
9220 are of the caller. */
9222 void
9223 tree_check_failed (const_tree node, const char *file,
9224 int line, const char *function, ...)
9226 va_list args;
9227 const char *buffer;
9228 unsigned length = 0;
9229 enum tree_code code;
9231 va_start (args, function);
9232 while ((code = (enum tree_code) va_arg (args, int)))
9233 length += 4 + strlen (get_tree_code_name (code));
9234 va_end (args);
9235 if (length)
9237 char *tmp;
9238 va_start (args, function);
9239 length += strlen ("expected ");
9240 buffer = tmp = (char *) alloca (length);
9241 length = 0;
9242 while ((code = (enum tree_code) va_arg (args, int)))
9244 const char *prefix = length ? " or " : "expected ";
9246 strcpy (tmp + length, prefix);
9247 length += strlen (prefix);
9248 strcpy (tmp + length, get_tree_code_name (code));
9249 length += strlen (get_tree_code_name (code));
9251 va_end (args);
9253 else
9254 buffer = "unexpected node";
9256 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9257 buffer, get_tree_code_name (TREE_CODE (node)),
9258 function, trim_filename (file), line);
9261 /* Complain that the tree code of NODE does match the expected 0
9262 terminated list of trailing codes. FILE, LINE, and FUNCTION are of
9263 the caller. */
9265 void
9266 tree_not_check_failed (const_tree node, const char *file,
9267 int line, const char *function, ...)
9269 va_list args;
9270 char *buffer;
9271 unsigned length = 0;
9272 enum tree_code code;
9274 va_start (args, function);
9275 while ((code = (enum tree_code) va_arg (args, int)))
9276 length += 4 + strlen (get_tree_code_name (code));
9277 va_end (args);
9278 va_start (args, function);
9279 buffer = (char *) alloca (length);
9280 length = 0;
9281 while ((code = (enum tree_code) va_arg (args, int)))
9283 if (length)
9285 strcpy (buffer + length, " or ");
9286 length += 4;
9288 strcpy (buffer + length, get_tree_code_name (code));
9289 length += strlen (get_tree_code_name (code));
9291 va_end (args);
9293 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d",
9294 buffer, get_tree_code_name (TREE_CODE (node)),
9295 function, trim_filename (file), line);
9298 /* Similar to tree_check_failed, except that we check for a class of tree
9299 code, given in CL. */
9301 void
9302 tree_class_check_failed (const_tree node, const enum tree_code_class cl,
9303 const char *file, int line, const char *function)
9305 internal_error
9306 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d",
9307 TREE_CODE_CLASS_STRING (cl),
9308 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9309 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9312 /* Similar to tree_check_failed, except that instead of specifying a
9313 dozen codes, use the knowledge that they're all sequential. */
9315 void
9316 tree_range_check_failed (const_tree node, const char *file, int line,
9317 const char *function, enum tree_code c1,
9318 enum tree_code c2)
9320 char *buffer;
9321 unsigned length = 0;
9322 unsigned int c;
9324 for (c = c1; c <= c2; ++c)
9325 length += 4 + strlen (get_tree_code_name ((enum tree_code) c));
9327 length += strlen ("expected ");
9328 buffer = (char *) alloca (length);
9329 length = 0;
9331 for (c = c1; c <= c2; ++c)
9333 const char *prefix = length ? " or " : "expected ";
9335 strcpy (buffer + length, prefix);
9336 length += strlen (prefix);
9337 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c));
9338 length += strlen (get_tree_code_name ((enum tree_code) c));
9341 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9342 buffer, get_tree_code_name (TREE_CODE (node)),
9343 function, trim_filename (file), line);
9347 /* Similar to tree_check_failed, except that we check that a tree does
9348 not have the specified code, given in CL. */
9350 void
9351 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl,
9352 const char *file, int line, const char *function)
9354 internal_error
9355 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d",
9356 TREE_CODE_CLASS_STRING (cl),
9357 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))),
9358 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9362 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */
9364 void
9365 omp_clause_check_failed (const_tree node, const char *file, int line,
9366 const char *function, enum omp_clause_code code)
9368 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d",
9369 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)),
9370 function, trim_filename (file), line);
9374 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */
9376 void
9377 omp_clause_range_check_failed (const_tree node, const char *file, int line,
9378 const char *function, enum omp_clause_code c1,
9379 enum omp_clause_code c2)
9381 char *buffer;
9382 unsigned length = 0;
9383 unsigned int c;
9385 for (c = c1; c <= c2; ++c)
9386 length += 4 + strlen (omp_clause_code_name[c]);
9388 length += strlen ("expected ");
9389 buffer = (char *) alloca (length);
9390 length = 0;
9392 for (c = c1; c <= c2; ++c)
9394 const char *prefix = length ? " or " : "expected ";
9396 strcpy (buffer + length, prefix);
9397 length += strlen (prefix);
9398 strcpy (buffer + length, omp_clause_code_name[c]);
9399 length += strlen (omp_clause_code_name[c]);
9402 internal_error ("tree check: %s, have %s in %s, at %s:%d",
9403 buffer, omp_clause_code_name[TREE_CODE (node)],
9404 function, trim_filename (file), line);
9408 #undef DEFTREESTRUCT
9409 #define DEFTREESTRUCT(VAL, NAME) NAME,
9411 static const char *ts_enum_names[] = {
9412 #include "treestruct.def"
9414 #undef DEFTREESTRUCT
9416 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)])
9418 /* Similar to tree_class_check_failed, except that we check for
9419 whether CODE contains the tree structure identified by EN. */
9421 void
9422 tree_contains_struct_check_failed (const_tree node,
9423 const enum tree_node_structure_enum en,
9424 const char *file, int line,
9425 const char *function)
9427 internal_error
9428 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d",
9429 TS_ENUM_NAME (en),
9430 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line);
9434 /* Similar to above, except that the check is for the bounds of a TREE_VEC's
9435 (dynamically sized) vector. */
9437 void
9438 tree_vec_elt_check_failed (int idx, int len, const char *file, int line,
9439 const char *function)
9441 internal_error
9442 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d",
9443 idx + 1, len, function, trim_filename (file), line);
9446 /* Similar to above, except that the check is for the bounds of the operand
9447 vector of an expression node EXP. */
9449 void
9450 tree_operand_check_failed (int idx, const_tree exp, const char *file,
9451 int line, const char *function)
9453 enum tree_code code = TREE_CODE (exp);
9454 internal_error
9455 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d",
9456 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp),
9457 function, trim_filename (file), line);
9460 /* Similar to above, except that the check is for the number of
9461 operands of an OMP_CLAUSE node. */
9463 void
9464 omp_clause_operand_check_failed (int idx, const_tree t, const char *file,
9465 int line, const char *function)
9467 internal_error
9468 ("tree check: accessed operand %d of omp_clause %s with %d operands "
9469 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)],
9470 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function,
9471 trim_filename (file), line);
9473 #endif /* ENABLE_TREE_CHECKING */
9475 /* Create a new vector type node holding SUBPARTS units of type INNERTYPE,
9476 and mapped to the machine mode MODE. Initialize its fields and build
9477 the information necessary for debugging output. */
9479 static tree
9480 make_vector_type (tree innertype, int nunits, enum machine_mode mode)
9482 tree t;
9483 hashval_t hashcode = 0;
9485 t = make_node (VECTOR_TYPE);
9486 TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype);
9487 SET_TYPE_VECTOR_SUBPARTS (t, nunits);
9488 SET_TYPE_MODE (t, mode);
9490 if (TYPE_STRUCTURAL_EQUALITY_P (innertype))
9491 SET_TYPE_STRUCTURAL_EQUALITY (t);
9492 else if (TYPE_CANONICAL (innertype) != innertype
9493 || mode != VOIDmode)
9494 TYPE_CANONICAL (t)
9495 = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode);
9497 layout_type (t);
9499 hashcode = iterative_hash_host_wide_int (VECTOR_TYPE, hashcode);
9500 hashcode = iterative_hash_host_wide_int (nunits, hashcode);
9501 hashcode = iterative_hash_host_wide_int (mode, hashcode);
9502 hashcode = iterative_hash_object (TYPE_HASH (TREE_TYPE (t)), hashcode);
9503 t = type_hash_canon (hashcode, t);
9505 /* We have built a main variant, based on the main variant of the
9506 inner type. Use it to build the variant we return. */
9507 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype))
9508 && TREE_TYPE (t) != innertype)
9509 return build_type_attribute_qual_variant (t,
9510 TYPE_ATTRIBUTES (innertype),
9511 TYPE_QUALS (innertype));
9513 return t;
9516 static tree
9517 make_or_reuse_type (unsigned size, int unsignedp)
9519 if (size == INT_TYPE_SIZE)
9520 return unsignedp ? unsigned_type_node : integer_type_node;
9521 if (size == CHAR_TYPE_SIZE)
9522 return unsignedp ? unsigned_char_type_node : signed_char_type_node;
9523 if (size == SHORT_TYPE_SIZE)
9524 return unsignedp ? short_unsigned_type_node : short_integer_type_node;
9525 if (size == LONG_TYPE_SIZE)
9526 return unsignedp ? long_unsigned_type_node : long_integer_type_node;
9527 if (size == LONG_LONG_TYPE_SIZE)
9528 return (unsignedp ? long_long_unsigned_type_node
9529 : long_long_integer_type_node);
9530 if (size == 128 && int128_integer_type_node)
9531 return (unsignedp ? int128_unsigned_type_node
9532 : int128_integer_type_node);
9534 if (unsignedp)
9535 return make_unsigned_type (size);
9536 else
9537 return make_signed_type (size);
9540 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */
9542 static tree
9543 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp)
9545 if (satp)
9547 if (size == SHORT_FRACT_TYPE_SIZE)
9548 return unsignedp ? sat_unsigned_short_fract_type_node
9549 : sat_short_fract_type_node;
9550 if (size == FRACT_TYPE_SIZE)
9551 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node;
9552 if (size == LONG_FRACT_TYPE_SIZE)
9553 return unsignedp ? sat_unsigned_long_fract_type_node
9554 : sat_long_fract_type_node;
9555 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9556 return unsignedp ? sat_unsigned_long_long_fract_type_node
9557 : sat_long_long_fract_type_node;
9559 else
9561 if (size == SHORT_FRACT_TYPE_SIZE)
9562 return unsignedp ? unsigned_short_fract_type_node
9563 : short_fract_type_node;
9564 if (size == FRACT_TYPE_SIZE)
9565 return unsignedp ? unsigned_fract_type_node : fract_type_node;
9566 if (size == LONG_FRACT_TYPE_SIZE)
9567 return unsignedp ? unsigned_long_fract_type_node
9568 : long_fract_type_node;
9569 if (size == LONG_LONG_FRACT_TYPE_SIZE)
9570 return unsignedp ? unsigned_long_long_fract_type_node
9571 : long_long_fract_type_node;
9574 return make_fract_type (size, unsignedp, satp);
9577 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */
9579 static tree
9580 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp)
9582 if (satp)
9584 if (size == SHORT_ACCUM_TYPE_SIZE)
9585 return unsignedp ? sat_unsigned_short_accum_type_node
9586 : sat_short_accum_type_node;
9587 if (size == ACCUM_TYPE_SIZE)
9588 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node;
9589 if (size == LONG_ACCUM_TYPE_SIZE)
9590 return unsignedp ? sat_unsigned_long_accum_type_node
9591 : sat_long_accum_type_node;
9592 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9593 return unsignedp ? sat_unsigned_long_long_accum_type_node
9594 : sat_long_long_accum_type_node;
9596 else
9598 if (size == SHORT_ACCUM_TYPE_SIZE)
9599 return unsignedp ? unsigned_short_accum_type_node
9600 : short_accum_type_node;
9601 if (size == ACCUM_TYPE_SIZE)
9602 return unsignedp ? unsigned_accum_type_node : accum_type_node;
9603 if (size == LONG_ACCUM_TYPE_SIZE)
9604 return unsignedp ? unsigned_long_accum_type_node
9605 : long_accum_type_node;
9606 if (size == LONG_LONG_ACCUM_TYPE_SIZE)
9607 return unsignedp ? unsigned_long_long_accum_type_node
9608 : long_long_accum_type_node;
9611 return make_accum_type (size, unsignedp, satp);
9615 /* Create an atomic variant node for TYPE. This routine is called
9616 during initialization of data types to create the 5 basic atomic
9617 types. The generic build_variant_type function requires these to
9618 already be set up in order to function properly, so cannot be
9619 called from there. If ALIGN is non-zero, then ensure alignment is
9620 overridden to this value. */
9622 static tree
9623 build_atomic_base (tree type, unsigned int align)
9625 tree t;
9627 /* Make sure its not already registered. */
9628 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC)))
9629 return t;
9631 t = build_variant_type_copy (type);
9632 set_type_quals (t, TYPE_QUAL_ATOMIC, NULL_TREE);
9634 if (align)
9635 TYPE_ALIGN (t) = align;
9637 return t;
9640 /* Create nodes for all integer types (and error_mark_node) using the sizes
9641 of C datatypes. SIGNED_CHAR specifies whether char is signed,
9642 SHORT_DOUBLE specifies whether double should be of the same precision
9643 as float. */
9645 void
9646 build_common_tree_nodes (bool signed_char, bool short_double)
9648 error_mark_node = make_node (ERROR_MARK);
9649 TREE_TYPE (error_mark_node) = error_mark_node;
9651 initialize_sizetypes ();
9653 /* Define both `signed char' and `unsigned char'. */
9654 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
9655 TYPE_STRING_FLAG (signed_char_type_node) = 1;
9656 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
9657 TYPE_STRING_FLAG (unsigned_char_type_node) = 1;
9659 /* Define `char', which is like either `signed char' or `unsigned char'
9660 but not the same as either. */
9661 char_type_node
9662 = (signed_char
9663 ? make_signed_type (CHAR_TYPE_SIZE)
9664 : make_unsigned_type (CHAR_TYPE_SIZE));
9665 TYPE_STRING_FLAG (char_type_node) = 1;
9667 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
9668 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
9669 integer_type_node = make_signed_type (INT_TYPE_SIZE);
9670 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
9671 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
9672 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
9673 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
9674 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
9675 #if HOST_BITS_PER_WIDE_INT >= 64
9676 /* TODO: This isn't correct, but as logic depends at the moment on
9677 host's instead of target's wide-integer.
9678 If there is a target not supporting TImode, but has an 128-bit
9679 integer-scalar register, this target check needs to be adjusted. */
9680 if (targetm.scalar_mode_supported_p (TImode))
9682 int128_integer_type_node = make_signed_type (128);
9683 int128_unsigned_type_node = make_unsigned_type (128);
9685 #endif
9687 /* Define a boolean type. This type only represents boolean values but
9688 may be larger than char depending on the value of BOOL_TYPE_SIZE.
9689 Front ends which want to override this size (i.e. Java) can redefine
9690 boolean_type_node before calling build_common_tree_nodes_2. */
9691 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
9692 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
9693 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
9694 TYPE_PRECISION (boolean_type_node) = 1;
9696 /* Define what type to use for size_t. */
9697 if (strcmp (SIZE_TYPE, "unsigned int") == 0)
9698 size_type_node = unsigned_type_node;
9699 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0)
9700 size_type_node = long_unsigned_type_node;
9701 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0)
9702 size_type_node = long_long_unsigned_type_node;
9703 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0)
9704 size_type_node = short_unsigned_type_node;
9705 else
9706 gcc_unreachable ();
9708 /* Fill in the rest of the sized types. Reuse existing type nodes
9709 when possible. */
9710 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);
9711 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0);
9712 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0);
9713 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0);
9714 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0);
9716 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1);
9717 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1);
9718 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1);
9719 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1);
9720 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1);
9722 /* Don't call build_qualified type for atomics. That routine does
9723 special processing for atomics, and until they are initialized
9724 it's better not to make that call.
9726 Check to see if there is a target override for atomic types. */
9728 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node,
9729 targetm.atomic_align_for_mode (QImode));
9730 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node,
9731 targetm.atomic_align_for_mode (HImode));
9732 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node,
9733 targetm.atomic_align_for_mode (SImode));
9734 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node,
9735 targetm.atomic_align_for_mode (DImode));
9736 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node,
9737 targetm.atomic_align_for_mode (TImode));
9739 access_public_node = get_identifier ("public");
9740 access_protected_node = get_identifier ("protected");
9741 access_private_node = get_identifier ("private");
9743 /* Define these next since types below may used them. */
9744 integer_zero_node = build_int_cst (integer_type_node, 0);
9745 integer_one_node = build_int_cst (integer_type_node, 1);
9746 integer_three_node = build_int_cst (integer_type_node, 3);
9747 integer_minus_one_node = build_int_cst (integer_type_node, -1);
9749 size_zero_node = size_int (0);
9750 size_one_node = size_int (1);
9751 bitsize_zero_node = bitsize_int (0);
9752 bitsize_one_node = bitsize_int (1);
9753 bitsize_unit_node = bitsize_int (BITS_PER_UNIT);
9755 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node);
9756 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node);
9758 void_type_node = make_node (VOID_TYPE);
9759 layout_type (void_type_node);
9761 /* We are not going to have real types in C with less than byte alignment,
9762 so we might as well not have any types that claim to have it. */
9763 TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
9764 TYPE_USER_ALIGN (void_type_node) = 0;
9766 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0);
9767 layout_type (TREE_TYPE (null_pointer_node));
9769 ptr_type_node = build_pointer_type (void_type_node);
9770 const_ptr_type_node
9771 = build_pointer_type (build_type_variant (void_type_node, 1, 0));
9772 fileptr_type_node = ptr_type_node;
9774 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
9776 float_type_node = make_node (REAL_TYPE);
9777 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
9778 layout_type (float_type_node);
9780 double_type_node = make_node (REAL_TYPE);
9781 if (short_double)
9782 TYPE_PRECISION (double_type_node) = FLOAT_TYPE_SIZE;
9783 else
9784 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
9785 layout_type (double_type_node);
9787 long_double_type_node = make_node (REAL_TYPE);
9788 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
9789 layout_type (long_double_type_node);
9791 float_ptr_type_node = build_pointer_type (float_type_node);
9792 double_ptr_type_node = build_pointer_type (double_type_node);
9793 long_double_ptr_type_node = build_pointer_type (long_double_type_node);
9794 integer_ptr_type_node = build_pointer_type (integer_type_node);
9796 /* Fixed size integer types. */
9797 uint16_type_node = build_nonstandard_integer_type (16, true);
9798 uint32_type_node = build_nonstandard_integer_type (32, true);
9799 uint64_type_node = build_nonstandard_integer_type (64, true);
9801 /* Decimal float types. */
9802 dfloat32_type_node = make_node (REAL_TYPE);
9803 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE;
9804 layout_type (dfloat32_type_node);
9805 SET_TYPE_MODE (dfloat32_type_node, SDmode);
9806 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node);
9808 dfloat64_type_node = make_node (REAL_TYPE);
9809 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE;
9810 layout_type (dfloat64_type_node);
9811 SET_TYPE_MODE (dfloat64_type_node, DDmode);
9812 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node);
9814 dfloat128_type_node = make_node (REAL_TYPE);
9815 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE;
9816 layout_type (dfloat128_type_node);
9817 SET_TYPE_MODE (dfloat128_type_node, TDmode);
9818 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
9820 complex_integer_type_node = build_complex_type (integer_type_node);
9821 complex_float_type_node = build_complex_type (float_type_node);
9822 complex_double_type_node = build_complex_type (double_type_node);
9823 complex_long_double_type_node = build_complex_type (long_double_type_node);
9825 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
9826 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
9827 sat_ ## KIND ## _type_node = \
9828 make_sat_signed_ ## KIND ## _type (SIZE); \
9829 sat_unsigned_ ## KIND ## _type_node = \
9830 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9831 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9832 unsigned_ ## KIND ## _type_node = \
9833 make_unsigned_ ## KIND ## _type (SIZE);
9835 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \
9836 sat_ ## WIDTH ## KIND ## _type_node = \
9837 make_sat_signed_ ## KIND ## _type (SIZE); \
9838 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \
9839 make_sat_unsigned_ ## KIND ## _type (SIZE); \
9840 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \
9841 unsigned_ ## WIDTH ## KIND ## _type_node = \
9842 make_unsigned_ ## KIND ## _type (SIZE);
9844 /* Make fixed-point type nodes based on four different widths. */
9845 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \
9846 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \
9847 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \
9848 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \
9849 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE)
9851 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */
9852 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \
9853 NAME ## _type_node = \
9854 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \
9855 u ## NAME ## _type_node = \
9856 make_or_reuse_unsigned_ ## KIND ## _type \
9857 (GET_MODE_BITSIZE (U ## MODE ## mode)); \
9858 sat_ ## NAME ## _type_node = \
9859 make_or_reuse_sat_signed_ ## KIND ## _type \
9860 (GET_MODE_BITSIZE (MODE ## mode)); \
9861 sat_u ## NAME ## _type_node = \
9862 make_or_reuse_sat_unsigned_ ## KIND ## _type \
9863 (GET_MODE_BITSIZE (U ## MODE ## mode));
9865 /* Fixed-point type and mode nodes. */
9866 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT)
9867 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM)
9868 MAKE_FIXED_MODE_NODE (fract, qq, QQ)
9869 MAKE_FIXED_MODE_NODE (fract, hq, HQ)
9870 MAKE_FIXED_MODE_NODE (fract, sq, SQ)
9871 MAKE_FIXED_MODE_NODE (fract, dq, DQ)
9872 MAKE_FIXED_MODE_NODE (fract, tq, TQ)
9873 MAKE_FIXED_MODE_NODE (accum, ha, HA)
9874 MAKE_FIXED_MODE_NODE (accum, sa, SA)
9875 MAKE_FIXED_MODE_NODE (accum, da, DA)
9876 MAKE_FIXED_MODE_NODE (accum, ta, TA)
9879 tree t = targetm.build_builtin_va_list ();
9881 /* Many back-ends define record types without setting TYPE_NAME.
9882 If we copied the record type here, we'd keep the original
9883 record type without a name. This breaks name mangling. So,
9884 don't copy record types and let c_common_nodes_and_builtins()
9885 declare the type to be __builtin_va_list. */
9886 if (TREE_CODE (t) != RECORD_TYPE)
9887 t = build_variant_type_copy (t);
9889 va_list_type_node = t;
9893 /* Modify DECL for given flags.
9894 TM_PURE attribute is set only on types, so the function will modify
9895 DECL's type when ECF_TM_PURE is used. */
9897 void
9898 set_call_expr_flags (tree decl, int flags)
9900 if (flags & ECF_NOTHROW)
9901 TREE_NOTHROW (decl) = 1;
9902 if (flags & ECF_CONST)
9903 TREE_READONLY (decl) = 1;
9904 if (flags & ECF_PURE)
9905 DECL_PURE_P (decl) = 1;
9906 if (flags & ECF_LOOPING_CONST_OR_PURE)
9907 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1;
9908 if (flags & ECF_NOVOPS)
9909 DECL_IS_NOVOPS (decl) = 1;
9910 if (flags & ECF_NORETURN)
9911 TREE_THIS_VOLATILE (decl) = 1;
9912 if (flags & ECF_MALLOC)
9913 DECL_IS_MALLOC (decl) = 1;
9914 if (flags & ECF_RETURNS_TWICE)
9915 DECL_IS_RETURNS_TWICE (decl) = 1;
9916 if (flags & ECF_LEAF)
9917 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
9918 NULL, DECL_ATTRIBUTES (decl));
9919 if ((flags & ECF_TM_PURE) && flag_tm)
9920 apply_tm_attr (decl, get_identifier ("transaction_pure"));
9921 /* Looping const or pure is implied by noreturn.
9922 There is currently no way to declare looping const or looping pure alone. */
9923 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)
9924 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE))));
9928 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */
9930 static void
9931 local_define_builtin (const char *name, tree type, enum built_in_function code,
9932 const char *library_name, int ecf_flags)
9934 tree decl;
9936 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL,
9937 library_name, NULL_TREE);
9938 set_call_expr_flags (decl, ecf_flags);
9940 set_builtin_decl (code, decl, true);
9943 /* Call this function after instantiating all builtins that the language
9944 front end cares about. This will build the rest of the builtins that
9945 are relied upon by the tree optimizers and the middle-end. */
9947 void
9948 build_common_builtin_nodes (void)
9950 tree tmp, ftype;
9951 int ecf_flags;
9953 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE))
9955 ftype = build_function_type (void_type_node, void_list_node);
9956 local_define_builtin ("__builtin_unreachable", ftype, BUILT_IN_UNREACHABLE,
9957 "__builtin_unreachable",
9958 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN
9959 | ECF_CONST | ECF_LEAF);
9962 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
9963 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9965 ftype = build_function_type_list (ptr_type_node,
9966 ptr_type_node, const_ptr_type_node,
9967 size_type_node, NULL_TREE);
9969 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY))
9970 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
9971 "memcpy", ECF_NOTHROW | ECF_LEAF);
9972 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
9973 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE,
9974 "memmove", ECF_NOTHROW | ECF_LEAF);
9977 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP))
9979 ftype = build_function_type_list (integer_type_node, const_ptr_type_node,
9980 const_ptr_type_node, size_type_node,
9981 NULL_TREE);
9982 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP,
9983 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
9986 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET))
9988 ftype = build_function_type_list (ptr_type_node,
9989 ptr_type_node, integer_type_node,
9990 size_type_node, NULL_TREE);
9991 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET,
9992 "memset", ECF_NOTHROW | ECF_LEAF);
9995 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA))
9997 ftype = build_function_type_list (ptr_type_node,
9998 size_type_node, NULL_TREE);
9999 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA,
10000 "alloca", ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10003 ftype = build_function_type_list (ptr_type_node, size_type_node,
10004 size_type_node, NULL_TREE);
10005 local_define_builtin ("__builtin_alloca_with_align", ftype,
10006 BUILT_IN_ALLOCA_WITH_ALIGN, "alloca",
10007 ECF_MALLOC | ECF_NOTHROW | ECF_LEAF);
10009 /* If we're checking the stack, `alloca' can throw. */
10010 if (flag_stack_check)
10012 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA)) = 0;
10013 TREE_NOTHROW (builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN)) = 0;
10016 ftype = build_function_type_list (void_type_node,
10017 ptr_type_node, ptr_type_node,
10018 ptr_type_node, NULL_TREE);
10019 local_define_builtin ("__builtin_init_trampoline", ftype,
10020 BUILT_IN_INIT_TRAMPOLINE,
10021 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF);
10022 local_define_builtin ("__builtin_init_heap_trampoline", ftype,
10023 BUILT_IN_INIT_HEAP_TRAMPOLINE,
10024 "__builtin_init_heap_trampoline",
10025 ECF_NOTHROW | ECF_LEAF);
10027 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE);
10028 local_define_builtin ("__builtin_adjust_trampoline", ftype,
10029 BUILT_IN_ADJUST_TRAMPOLINE,
10030 "__builtin_adjust_trampoline",
10031 ECF_CONST | ECF_NOTHROW);
10033 ftype = build_function_type_list (void_type_node,
10034 ptr_type_node, ptr_type_node, NULL_TREE);
10035 local_define_builtin ("__builtin_nonlocal_goto", ftype,
10036 BUILT_IN_NONLOCAL_GOTO,
10037 "__builtin_nonlocal_goto",
10038 ECF_NORETURN | ECF_NOTHROW);
10040 ftype = build_function_type_list (void_type_node,
10041 ptr_type_node, ptr_type_node, NULL_TREE);
10042 local_define_builtin ("__builtin_setjmp_setup", ftype,
10043 BUILT_IN_SETJMP_SETUP,
10044 "__builtin_setjmp_setup", ECF_NOTHROW);
10046 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10047 local_define_builtin ("__builtin_setjmp_receiver", ftype,
10048 BUILT_IN_SETJMP_RECEIVER,
10049 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF);
10051 ftype = build_function_type_list (ptr_type_node, NULL_TREE);
10052 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
10053 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF);
10055 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10056 local_define_builtin ("__builtin_stack_restore", ftype,
10057 BUILT_IN_STACK_RESTORE,
10058 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF);
10060 /* If there's a possibility that we might use the ARM EABI, build the
10061 alternate __cxa_end_cleanup node used to resume from C++ and Java. */
10062 if (targetm.arm_eabi_unwinder)
10064 ftype = build_function_type_list (void_type_node, NULL_TREE);
10065 local_define_builtin ("__builtin_cxa_end_cleanup", ftype,
10066 BUILT_IN_CXA_END_CLEANUP,
10067 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF);
10070 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
10071 local_define_builtin ("__builtin_unwind_resume", ftype,
10072 BUILT_IN_UNWIND_RESUME,
10073 ((targetm_common.except_unwind_info (&global_options)
10074 == UI_SJLJ)
10075 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
10076 ECF_NORETURN);
10078 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE)
10080 ftype = build_function_type_list (ptr_type_node, integer_type_node,
10081 NULL_TREE);
10082 local_define_builtin ("__builtin_return_address", ftype,
10083 BUILT_IN_RETURN_ADDRESS,
10084 "__builtin_return_address",
10085 ECF_NOTHROW);
10088 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)
10089 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10091 ftype = build_function_type_list (void_type_node, ptr_type_node,
10092 ptr_type_node, NULL_TREE);
10093 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER))
10094 local_define_builtin ("__cyg_profile_func_enter", ftype,
10095 BUILT_IN_PROFILE_FUNC_ENTER,
10096 "__cyg_profile_func_enter", 0);
10097 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT))
10098 local_define_builtin ("__cyg_profile_func_exit", ftype,
10099 BUILT_IN_PROFILE_FUNC_EXIT,
10100 "__cyg_profile_func_exit", 0);
10103 /* The exception object and filter values from the runtime. The argument
10104 must be zero before exception lowering, i.e. from the front end. After
10105 exception lowering, it will be the region number for the exception
10106 landing pad. These functions are PURE instead of CONST to prevent
10107 them from being hoisted past the exception edge that will initialize
10108 its value in the landing pad. */
10109 ftype = build_function_type_list (ptr_type_node,
10110 integer_type_node, NULL_TREE);
10111 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
10112 /* Only use TM_PURE if we we have TM language support. */
10113 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
10114 ecf_flags |= ECF_TM_PURE;
10115 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
10116 "__builtin_eh_pointer", ecf_flags);
10118 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
10119 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
10120 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER,
10121 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF);
10123 ftype = build_function_type_list (void_type_node,
10124 integer_type_node, integer_type_node,
10125 NULL_TREE);
10126 local_define_builtin ("__builtin_eh_copy_values", ftype,
10127 BUILT_IN_EH_COPY_VALUES,
10128 "__builtin_eh_copy_values", ECF_NOTHROW);
10130 /* Complex multiplication and division. These are handled as builtins
10131 rather than optabs because emit_library_call_value doesn't support
10132 complex. Further, we can do slightly better with folding these
10133 beasties if the real and complex parts of the arguments are separate. */
10135 int mode;
10137 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode)
10139 char mode_name_buf[4], *q;
10140 const char *p;
10141 enum built_in_function mcode, dcode;
10142 tree type, inner_type;
10143 const char *prefix = "__";
10145 if (targetm.libfunc_gnu_prefix)
10146 prefix = "__gnu_";
10148 type = lang_hooks.types.type_for_mode ((enum machine_mode) mode, 0);
10149 if (type == NULL)
10150 continue;
10151 inner_type = TREE_TYPE (type);
10153 ftype = build_function_type_list (type, inner_type, inner_type,
10154 inner_type, inner_type, NULL_TREE);
10156 mcode = ((enum built_in_function)
10157 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10158 dcode = ((enum built_in_function)
10159 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT));
10161 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++)
10162 *q = TOLOWER (*p);
10163 *q = '\0';
10165 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
10166 NULL);
10167 local_define_builtin (built_in_names[mcode], ftype, mcode,
10168 built_in_names[mcode],
10169 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10171 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
10172 NULL);
10173 local_define_builtin (built_in_names[dcode], ftype, dcode,
10174 built_in_names[dcode],
10175 ECF_CONST | ECF_NOTHROW | ECF_LEAF);
10180 /* HACK. GROSS. This is absolutely disgusting. I wish there was a
10181 better way.
10183 If we requested a pointer to a vector, build up the pointers that
10184 we stripped off while looking for the inner type. Similarly for
10185 return values from functions.
10187 The argument TYPE is the top of the chain, and BOTTOM is the
10188 new type which we will point to. */
10190 tree
10191 reconstruct_complex_type (tree type, tree bottom)
10193 tree inner, outer;
10195 if (TREE_CODE (type) == POINTER_TYPE)
10197 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10198 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
10199 TYPE_REF_CAN_ALIAS_ALL (type));
10201 else if (TREE_CODE (type) == REFERENCE_TYPE)
10203 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10204 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
10205 TYPE_REF_CAN_ALIAS_ALL (type));
10207 else if (TREE_CODE (type) == ARRAY_TYPE)
10209 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10210 outer = build_array_type (inner, TYPE_DOMAIN (type));
10212 else if (TREE_CODE (type) == FUNCTION_TYPE)
10214 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10215 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
10217 else if (TREE_CODE (type) == METHOD_TYPE)
10219 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10220 /* The build_method_type_directly() routine prepends 'this' to argument list,
10221 so we must compensate by getting rid of it. */
10222 outer
10223 = build_method_type_directly
10224 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
10225 inner,
10226 TREE_CHAIN (TYPE_ARG_TYPES (type)));
10228 else if (TREE_CODE (type) == OFFSET_TYPE)
10230 inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
10231 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
10233 else
10234 return bottom;
10236 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type),
10237 TYPE_QUALS (type));
10240 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and
10241 the inner type. */
10242 tree
10243 build_vector_type_for_mode (tree innertype, enum machine_mode mode)
10245 int nunits;
10247 switch (GET_MODE_CLASS (mode))
10249 case MODE_VECTOR_INT:
10250 case MODE_VECTOR_FLOAT:
10251 case MODE_VECTOR_FRACT:
10252 case MODE_VECTOR_UFRACT:
10253 case MODE_VECTOR_ACCUM:
10254 case MODE_VECTOR_UACCUM:
10255 nunits = GET_MODE_NUNITS (mode);
10256 break;
10258 case MODE_INT:
10259 /* Check that there are no leftover bits. */
10260 gcc_assert (GET_MODE_BITSIZE (mode)
10261 % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0);
10263 nunits = GET_MODE_BITSIZE (mode)
10264 / TREE_INT_CST_LOW (TYPE_SIZE (innertype));
10265 break;
10267 default:
10268 gcc_unreachable ();
10271 return make_vector_type (innertype, nunits, mode);
10274 /* Similarly, but takes the inner type and number of units, which must be
10275 a power of two. */
10277 tree
10278 build_vector_type (tree innertype, int nunits)
10280 return make_vector_type (innertype, nunits, VOIDmode);
10283 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
10285 tree
10286 build_opaque_vector_type (tree innertype, int nunits)
10288 tree t = make_vector_type (innertype, nunits, VOIDmode);
10289 tree cand;
10290 /* We always build the non-opaque variant before the opaque one,
10291 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
10292 cand = TYPE_NEXT_VARIANT (t);
10293 if (cand
10294 && TYPE_VECTOR_OPAQUE (cand)
10295 && check_qualified_type (cand, t, TYPE_QUALS (t), NULL_TREE))
10296 return cand;
10297 /* Othewise build a variant type and make sure to queue it after
10298 the non-opaque type. */
10299 cand = build_distinct_type_copy (t);
10300 TYPE_VECTOR_OPAQUE (cand) = true;
10301 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
10302 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
10303 TYPE_NEXT_VARIANT (t) = cand;
10304 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
10305 return cand;
10309 /* Given an initializer INIT, return TRUE if INIT is zero or some
10310 aggregate of zeros. Otherwise return FALSE. */
10311 bool
10312 initializer_zerop (const_tree init)
10314 tree elt;
10316 STRIP_NOPS (init);
10318 switch (TREE_CODE (init))
10320 case INTEGER_CST:
10321 return integer_zerop (init);
10323 case REAL_CST:
10324 /* ??? Note that this is not correct for C4X float formats. There,
10325 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most
10326 negative exponent. */
10327 return real_zerop (init)
10328 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init));
10330 case FIXED_CST:
10331 return fixed_zerop (init);
10333 case COMPLEX_CST:
10334 return integer_zerop (init)
10335 || (real_zerop (init)
10336 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init)))
10337 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init))));
10339 case VECTOR_CST:
10341 unsigned i;
10342 for (i = 0; i < VECTOR_CST_NELTS (init); ++i)
10343 if (!initializer_zerop (VECTOR_CST_ELT (init, i)))
10344 return false;
10345 return true;
10348 case CONSTRUCTOR:
10350 unsigned HOST_WIDE_INT idx;
10352 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
10353 if (!initializer_zerop (elt))
10354 return false;
10355 return true;
10358 case STRING_CST:
10360 int i;
10362 /* We need to loop through all elements to handle cases like
10363 "\0" and "\0foobar". */
10364 for (i = 0; i < TREE_STRING_LENGTH (init); ++i)
10365 if (TREE_STRING_POINTER (init)[i] != '\0')
10366 return false;
10368 return true;
10371 default:
10372 return false;
10376 /* Check if vector VEC consists of all the equal elements and
10377 that the number of elements corresponds to the type of VEC.
10378 The function returns first element of the vector
10379 or NULL_TREE if the vector is not uniform. */
10380 tree
10381 uniform_vector_p (const_tree vec)
10383 tree first, t;
10384 unsigned i;
10386 if (vec == NULL_TREE)
10387 return NULL_TREE;
10389 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec)));
10391 if (TREE_CODE (vec) == VECTOR_CST)
10393 first = VECTOR_CST_ELT (vec, 0);
10394 for (i = 1; i < VECTOR_CST_NELTS (vec); ++i)
10395 if (!operand_equal_p (first, VECTOR_CST_ELT (vec, i), 0))
10396 return NULL_TREE;
10398 return first;
10401 else if (TREE_CODE (vec) == CONSTRUCTOR)
10403 first = error_mark_node;
10405 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t)
10407 if (i == 0)
10409 first = t;
10410 continue;
10412 if (!operand_equal_p (first, t, 0))
10413 return NULL_TREE;
10415 if (i != TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)))
10416 return NULL_TREE;
10418 return first;
10421 return NULL_TREE;
10424 /* Build an empty statement at location LOC. */
10426 tree
10427 build_empty_stmt (location_t loc)
10429 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node);
10430 SET_EXPR_LOCATION (t, loc);
10431 return t;
10435 /* Build an OpenMP clause with code CODE. LOC is the location of the
10436 clause. */
10438 tree
10439 build_omp_clause (location_t loc, enum omp_clause_code code)
10441 tree t;
10442 int size, length;
10444 length = omp_clause_num_ops[code];
10445 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree));
10447 record_node_allocation_statistics (OMP_CLAUSE, size);
10449 t = ggc_alloc_tree_node (size);
10450 memset (t, 0, size);
10451 TREE_SET_CODE (t, OMP_CLAUSE);
10452 OMP_CLAUSE_SET_CODE (t, code);
10453 OMP_CLAUSE_LOCATION (t) = loc;
10455 return t;
10458 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN
10459 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1.
10460 Except for the CODE and operand count field, other storage for the
10461 object is initialized to zeros. */
10463 tree
10464 build_vl_exp_stat (enum tree_code code, int len MEM_STAT_DECL)
10466 tree t;
10467 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp);
10469 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp);
10470 gcc_assert (len >= 1);
10472 record_node_allocation_statistics (code, length);
10474 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT);
10476 TREE_SET_CODE (t, code);
10478 /* Can't use TREE_OPERAND to store the length because if checking is
10479 enabled, it will try to check the length before we store it. :-P */
10480 t->exp.operands[0] = build_int_cst (sizetype, len);
10482 return t;
10485 /* Helper function for build_call_* functions; build a CALL_EXPR with
10486 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of
10487 the argument slots. */
10489 static tree
10490 build_call_1 (tree return_type, tree fn, int nargs)
10492 tree t;
10494 t = build_vl_exp (CALL_EXPR, nargs + 3);
10495 TREE_TYPE (t) = return_type;
10496 CALL_EXPR_FN (t) = fn;
10497 CALL_EXPR_STATIC_CHAIN (t) = NULL;
10499 return t;
10502 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10503 FN and a null static chain slot. NARGS is the number of call arguments
10504 which are specified as "..." arguments. */
10506 tree
10507 build_call_nary (tree return_type, tree fn, int nargs, ...)
10509 tree ret;
10510 va_list args;
10511 va_start (args, nargs);
10512 ret = build_call_valist (return_type, fn, nargs, args);
10513 va_end (args);
10514 return ret;
10517 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10518 FN and a null static chain slot. NARGS is the number of call arguments
10519 which are specified as a va_list ARGS. */
10521 tree
10522 build_call_valist (tree return_type, tree fn, int nargs, va_list args)
10524 tree t;
10525 int i;
10527 t = build_call_1 (return_type, fn, nargs);
10528 for (i = 0; i < nargs; i++)
10529 CALL_EXPR_ARG (t, i) = va_arg (args, tree);
10530 process_call_operands (t);
10531 return t;
10534 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
10535 FN and a null static chain slot. NARGS is the number of call arguments
10536 which are specified as a tree array ARGS. */
10538 tree
10539 build_call_array_loc (location_t loc, tree return_type, tree fn,
10540 int nargs, const tree *args)
10542 tree t;
10543 int i;
10545 t = build_call_1 (return_type, fn, nargs);
10546 for (i = 0; i < nargs; i++)
10547 CALL_EXPR_ARG (t, i) = args[i];
10548 process_call_operands (t);
10549 SET_EXPR_LOCATION (t, loc);
10550 return t;
10553 /* Like build_call_array, but takes a vec. */
10555 tree
10556 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args)
10558 tree ret, t;
10559 unsigned int ix;
10561 ret = build_call_1 (return_type, fn, vec_safe_length (args));
10562 FOR_EACH_VEC_SAFE_ELT (args, ix, t)
10563 CALL_EXPR_ARG (ret, ix) = t;
10564 process_call_operands (ret);
10565 return ret;
10568 /* Return true if T (assumed to be a DECL) must be assigned a memory
10569 location. */
10571 bool
10572 needs_to_live_in_memory (const_tree t)
10574 return (TREE_ADDRESSABLE (t)
10575 || is_global_var (t)
10576 || (TREE_CODE (t) == RESULT_DECL
10577 && !DECL_BY_REFERENCE (t)
10578 && aggregate_value_p (t, current_function_decl)));
10581 /* Return value of a constant X and sign-extend it. */
10583 HOST_WIDE_INT
10584 int_cst_value (const_tree x)
10586 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10587 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x);
10589 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10590 gcc_assert (TREE_INT_CST_HIGH (x) == 0
10591 || TREE_INT_CST_HIGH (x) == -1);
10593 if (bits < HOST_BITS_PER_WIDE_INT)
10595 bool negative = ((val >> (bits - 1)) & 1) != 0;
10596 if (negative)
10597 val |= (~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1;
10598 else
10599 val &= ~((~(unsigned HOST_WIDE_INT) 0) << (bits - 1) << 1);
10602 return val;
10605 /* Return value of a constant X and sign-extend it. */
10607 HOST_WIDEST_INT
10608 widest_int_cst_value (const_tree x)
10610 unsigned bits = TYPE_PRECISION (TREE_TYPE (x));
10611 unsigned HOST_WIDEST_INT val = TREE_INT_CST_LOW (x);
10613 #if HOST_BITS_PER_WIDEST_INT > HOST_BITS_PER_WIDE_INT
10614 gcc_assert (HOST_BITS_PER_WIDEST_INT >= HOST_BITS_PER_DOUBLE_INT);
10615 val |= (((unsigned HOST_WIDEST_INT) TREE_INT_CST_HIGH (x))
10616 << HOST_BITS_PER_WIDE_INT);
10617 #else
10618 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */
10619 gcc_assert (TREE_INT_CST_HIGH (x) == 0
10620 || TREE_INT_CST_HIGH (x) == -1);
10621 #endif
10623 if (bits < HOST_BITS_PER_WIDEST_INT)
10625 bool negative = ((val >> (bits - 1)) & 1) != 0;
10626 if (negative)
10627 val |= (~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1;
10628 else
10629 val &= ~((~(unsigned HOST_WIDEST_INT) 0) << (bits - 1) << 1);
10632 return val;
10635 /* If TYPE is an integral or pointer type, return an integer type with
10636 the same precision which is unsigned iff UNSIGNEDP is true, or itself
10637 if TYPE is already an integer type of signedness UNSIGNEDP. */
10639 tree
10640 signed_or_unsigned_type_for (int unsignedp, tree type)
10642 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp)
10643 return type;
10645 if (TREE_CODE (type) == VECTOR_TYPE)
10647 tree inner = TREE_TYPE (type);
10648 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner);
10649 if (!inner2)
10650 return NULL_TREE;
10651 if (inner == inner2)
10652 return type;
10653 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type));
10656 if (!INTEGRAL_TYPE_P (type)
10657 && !POINTER_TYPE_P (type)
10658 && TREE_CODE (type) != OFFSET_TYPE)
10659 return NULL_TREE;
10661 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp);
10664 /* If TYPE is an integral or pointer type, return an integer type with
10665 the same precision which is unsigned, or itself if TYPE is already an
10666 unsigned integer type. */
10668 tree
10669 unsigned_type_for (tree type)
10671 return signed_or_unsigned_type_for (1, type);
10674 /* If TYPE is an integral or pointer type, return an integer type with
10675 the same precision which is signed, or itself if TYPE is already a
10676 signed integer type. */
10678 tree
10679 signed_type_for (tree type)
10681 return signed_or_unsigned_type_for (0, type);
10684 /* If TYPE is a vector type, return a signed integer vector type with the
10685 same width and number of subparts. Otherwise return boolean_type_node. */
10687 tree
10688 truth_type_for (tree type)
10690 if (TREE_CODE (type) == VECTOR_TYPE)
10692 tree elem = lang_hooks.types.type_for_size
10693 (GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (type))), 0);
10694 return build_opaque_vector_type (elem, TYPE_VECTOR_SUBPARTS (type));
10696 else
10697 return boolean_type_node;
10700 /* Returns the largest value obtainable by casting something in INNER type to
10701 OUTER type. */
10703 tree
10704 upper_bound_in_type (tree outer, tree inner)
10706 double_int high;
10707 unsigned int det = 0;
10708 unsigned oprec = TYPE_PRECISION (outer);
10709 unsigned iprec = TYPE_PRECISION (inner);
10710 unsigned prec;
10712 /* Compute a unique number for every combination. */
10713 det |= (oprec > iprec) ? 4 : 0;
10714 det |= TYPE_UNSIGNED (outer) ? 2 : 0;
10715 det |= TYPE_UNSIGNED (inner) ? 1 : 0;
10717 /* Determine the exponent to use. */
10718 switch (det)
10720 case 0:
10721 case 1:
10722 /* oprec <= iprec, outer: signed, inner: don't care. */
10723 prec = oprec - 1;
10724 break;
10725 case 2:
10726 case 3:
10727 /* oprec <= iprec, outer: unsigned, inner: don't care. */
10728 prec = oprec;
10729 break;
10730 case 4:
10731 /* oprec > iprec, outer: signed, inner: signed. */
10732 prec = iprec - 1;
10733 break;
10734 case 5:
10735 /* oprec > iprec, outer: signed, inner: unsigned. */
10736 prec = iprec;
10737 break;
10738 case 6:
10739 /* oprec > iprec, outer: unsigned, inner: signed. */
10740 prec = oprec;
10741 break;
10742 case 7:
10743 /* oprec > iprec, outer: unsigned, inner: unsigned. */
10744 prec = iprec;
10745 break;
10746 default:
10747 gcc_unreachable ();
10750 /* Compute 2^^prec - 1. */
10751 if (prec <= HOST_BITS_PER_WIDE_INT)
10753 high.high = 0;
10754 high.low = ((~(unsigned HOST_WIDE_INT) 0)
10755 >> (HOST_BITS_PER_WIDE_INT - prec));
10757 else
10759 high.high = ((~(unsigned HOST_WIDE_INT) 0)
10760 >> (HOST_BITS_PER_DOUBLE_INT - prec));
10761 high.low = ~(unsigned HOST_WIDE_INT) 0;
10764 return double_int_to_tree (outer, high);
10767 /* Returns the smallest value obtainable by casting something in INNER type to
10768 OUTER type. */
10770 tree
10771 lower_bound_in_type (tree outer, tree inner)
10773 double_int low;
10774 unsigned oprec = TYPE_PRECISION (outer);
10775 unsigned iprec = TYPE_PRECISION (inner);
10777 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type
10778 and obtain 0. */
10779 if (TYPE_UNSIGNED (outer)
10780 /* If we are widening something of an unsigned type, OUTER type
10781 contains all values of INNER type. In particular, both INNER
10782 and OUTER types have zero in common. */
10783 || (oprec > iprec && TYPE_UNSIGNED (inner)))
10784 low.low = low.high = 0;
10785 else
10787 /* If we are widening a signed type to another signed type, we
10788 want to obtain -2^^(iprec-1). If we are keeping the
10789 precision or narrowing to a signed type, we want to obtain
10790 -2^(oprec-1). */
10791 unsigned prec = oprec > iprec ? iprec : oprec;
10793 if (prec <= HOST_BITS_PER_WIDE_INT)
10795 low.high = ~(unsigned HOST_WIDE_INT) 0;
10796 low.low = (~(unsigned HOST_WIDE_INT) 0) << (prec - 1);
10798 else
10800 low.high = ((~(unsigned HOST_WIDE_INT) 0)
10801 << (prec - HOST_BITS_PER_WIDE_INT - 1));
10802 low.low = 0;
10806 return double_int_to_tree (outer, low);
10809 /* Return nonzero if two operands that are suitable for PHI nodes are
10810 necessarily equal. Specifically, both ARG0 and ARG1 must be either
10811 SSA_NAME or invariant. Note that this is strictly an optimization.
10812 That is, callers of this function can directly call operand_equal_p
10813 and get the same result, only slower. */
10816 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1)
10818 if (arg0 == arg1)
10819 return 1;
10820 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME)
10821 return 0;
10822 return operand_equal_p (arg0, arg1, 0);
10825 /* Returns number of zeros at the end of binary representation of X.
10827 ??? Use ffs if available? */
10829 tree
10830 num_ending_zeros (const_tree x)
10832 unsigned HOST_WIDE_INT fr, nfr;
10833 unsigned num, abits;
10834 tree type = TREE_TYPE (x);
10836 if (TREE_INT_CST_LOW (x) == 0)
10838 num = HOST_BITS_PER_WIDE_INT;
10839 fr = TREE_INT_CST_HIGH (x);
10841 else
10843 num = 0;
10844 fr = TREE_INT_CST_LOW (x);
10847 for (abits = HOST_BITS_PER_WIDE_INT / 2; abits; abits /= 2)
10849 nfr = fr >> abits;
10850 if (nfr << abits == fr)
10852 num += abits;
10853 fr = nfr;
10857 if (num > TYPE_PRECISION (type))
10858 num = TYPE_PRECISION (type);
10860 return build_int_cst_type (type, num);
10864 #define WALK_SUBTREE(NODE) \
10865 do \
10867 result = walk_tree_1 (&(NODE), func, data, pset, lh); \
10868 if (result) \
10869 return result; \
10871 while (0)
10873 /* This is a subroutine of walk_tree that walks field of TYPE that are to
10874 be walked whenever a type is seen in the tree. Rest of operands and return
10875 value are as for walk_tree. */
10877 static tree
10878 walk_type_fields (tree type, walk_tree_fn func, void *data,
10879 struct pointer_set_t *pset, walk_tree_lh lh)
10881 tree result = NULL_TREE;
10883 switch (TREE_CODE (type))
10885 case POINTER_TYPE:
10886 case REFERENCE_TYPE:
10887 case VECTOR_TYPE:
10888 /* We have to worry about mutually recursive pointers. These can't
10889 be written in C. They can in Ada. It's pathological, but
10890 there's an ACATS test (c38102a) that checks it. Deal with this
10891 by checking if we're pointing to another pointer, that one
10892 points to another pointer, that one does too, and we have no htab.
10893 If so, get a hash table. We check three levels deep to avoid
10894 the cost of the hash table if we don't need one. */
10895 if (POINTER_TYPE_P (TREE_TYPE (type))
10896 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type)))
10897 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type))))
10898 && !pset)
10900 result = walk_tree_without_duplicates (&TREE_TYPE (type),
10901 func, data);
10902 if (result)
10903 return result;
10905 break;
10908 /* ... fall through ... */
10910 case COMPLEX_TYPE:
10911 WALK_SUBTREE (TREE_TYPE (type));
10912 break;
10914 case METHOD_TYPE:
10915 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type));
10917 /* Fall through. */
10919 case FUNCTION_TYPE:
10920 WALK_SUBTREE (TREE_TYPE (type));
10922 tree arg;
10924 /* We never want to walk into default arguments. */
10925 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg))
10926 WALK_SUBTREE (TREE_VALUE (arg));
10928 break;
10930 case ARRAY_TYPE:
10931 /* Don't follow this nodes's type if a pointer for fear that
10932 we'll have infinite recursion. If we have a PSET, then we
10933 need not fear. */
10934 if (pset
10935 || (!POINTER_TYPE_P (TREE_TYPE (type))
10936 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE))
10937 WALK_SUBTREE (TREE_TYPE (type));
10938 WALK_SUBTREE (TYPE_DOMAIN (type));
10939 break;
10941 case OFFSET_TYPE:
10942 WALK_SUBTREE (TREE_TYPE (type));
10943 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type));
10944 break;
10946 default:
10947 break;
10950 return NULL_TREE;
10953 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is
10954 called with the DATA and the address of each sub-tree. If FUNC returns a
10955 non-NULL value, the traversal is stopped, and the value returned by FUNC
10956 is returned. If PSET is non-NULL it is used to record the nodes visited,
10957 and to avoid visiting a node more than once. */
10959 tree
10960 walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
10961 struct pointer_set_t *pset, walk_tree_lh lh)
10963 enum tree_code code;
10964 int walk_subtrees;
10965 tree result;
10967 #define WALK_SUBTREE_TAIL(NODE) \
10968 do \
10970 tp = & (NODE); \
10971 goto tail_recurse; \
10973 while (0)
10975 tail_recurse:
10976 /* Skip empty subtrees. */
10977 if (!*tp)
10978 return NULL_TREE;
10980 /* Don't walk the same tree twice, if the user has requested
10981 that we avoid doing so. */
10982 if (pset && pointer_set_insert (pset, *tp))
10983 return NULL_TREE;
10985 /* Call the function. */
10986 walk_subtrees = 1;
10987 result = (*func) (tp, &walk_subtrees, data);
10989 /* If we found something, return it. */
10990 if (result)
10991 return result;
10993 code = TREE_CODE (*tp);
10995 /* Even if we didn't, FUNC may have decided that there was nothing
10996 interesting below this point in the tree. */
10997 if (!walk_subtrees)
10999 /* But we still need to check our siblings. */
11000 if (code == TREE_LIST)
11001 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11002 else if (code == OMP_CLAUSE)
11003 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11004 else
11005 return NULL_TREE;
11008 if (lh)
11010 result = (*lh) (tp, &walk_subtrees, func, data, pset);
11011 if (result || !walk_subtrees)
11012 return result;
11015 switch (code)
11017 case ERROR_MARK:
11018 case IDENTIFIER_NODE:
11019 case INTEGER_CST:
11020 case REAL_CST:
11021 case FIXED_CST:
11022 case VECTOR_CST:
11023 case STRING_CST:
11024 case BLOCK:
11025 case PLACEHOLDER_EXPR:
11026 case SSA_NAME:
11027 case FIELD_DECL:
11028 case RESULT_DECL:
11029 /* None of these have subtrees other than those already walked
11030 above. */
11031 break;
11033 case TREE_LIST:
11034 WALK_SUBTREE (TREE_VALUE (*tp));
11035 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp));
11036 break;
11038 case TREE_VEC:
11040 int len = TREE_VEC_LENGTH (*tp);
11042 if (len == 0)
11043 break;
11045 /* Walk all elements but the first. */
11046 while (--len)
11047 WALK_SUBTREE (TREE_VEC_ELT (*tp, len));
11049 /* Now walk the first one as a tail call. */
11050 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0));
11053 case COMPLEX_CST:
11054 WALK_SUBTREE (TREE_REALPART (*tp));
11055 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp));
11057 case CONSTRUCTOR:
11059 unsigned HOST_WIDE_INT idx;
11060 constructor_elt *ce;
11062 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce);
11063 idx++)
11064 WALK_SUBTREE (ce->value);
11066 break;
11068 case SAVE_EXPR:
11069 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0));
11071 case BIND_EXPR:
11073 tree decl;
11074 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
11076 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk
11077 into declarations that are just mentioned, rather than
11078 declared; they don't really belong to this part of the tree.
11079 And, we can see cycles: the initializer for a declaration
11080 can refer to the declaration itself. */
11081 WALK_SUBTREE (DECL_INITIAL (decl));
11082 WALK_SUBTREE (DECL_SIZE (decl));
11083 WALK_SUBTREE (DECL_SIZE_UNIT (decl));
11085 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp));
11088 case STATEMENT_LIST:
11090 tree_stmt_iterator i;
11091 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i))
11092 WALK_SUBTREE (*tsi_stmt_ptr (i));
11094 break;
11096 case OMP_CLAUSE:
11097 switch (OMP_CLAUSE_CODE (*tp))
11099 case OMP_CLAUSE_PRIVATE:
11100 case OMP_CLAUSE_SHARED:
11101 case OMP_CLAUSE_FIRSTPRIVATE:
11102 case OMP_CLAUSE_COPYIN:
11103 case OMP_CLAUSE_COPYPRIVATE:
11104 case OMP_CLAUSE_FINAL:
11105 case OMP_CLAUSE_IF:
11106 case OMP_CLAUSE_NUM_THREADS:
11107 case OMP_CLAUSE_SCHEDULE:
11108 case OMP_CLAUSE_UNIFORM:
11109 case OMP_CLAUSE_DEPEND:
11110 case OMP_CLAUSE_NUM_TEAMS:
11111 case OMP_CLAUSE_THREAD_LIMIT:
11112 case OMP_CLAUSE_DEVICE:
11113 case OMP_CLAUSE_DIST_SCHEDULE:
11114 case OMP_CLAUSE_SAFELEN:
11115 case OMP_CLAUSE_SIMDLEN:
11116 case OMP_CLAUSE__LOOPTEMP_:
11117 case OMP_CLAUSE__SIMDUID_:
11118 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0));
11119 /* FALLTHRU */
11121 case OMP_CLAUSE_NOWAIT:
11122 case OMP_CLAUSE_ORDERED:
11123 case OMP_CLAUSE_DEFAULT:
11124 case OMP_CLAUSE_UNTIED:
11125 case OMP_CLAUSE_MERGEABLE:
11126 case OMP_CLAUSE_PROC_BIND:
11127 case OMP_CLAUSE_INBRANCH:
11128 case OMP_CLAUSE_NOTINBRANCH:
11129 case OMP_CLAUSE_FOR:
11130 case OMP_CLAUSE_PARALLEL:
11131 case OMP_CLAUSE_SECTIONS:
11132 case OMP_CLAUSE_TASKGROUP:
11133 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11135 case OMP_CLAUSE_LASTPRIVATE:
11136 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11137 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp));
11138 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11140 case OMP_CLAUSE_COLLAPSE:
11142 int i;
11143 for (i = 0; i < 3; i++)
11144 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11145 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11148 case OMP_CLAUSE_ALIGNED:
11149 case OMP_CLAUSE_LINEAR:
11150 case OMP_CLAUSE_FROM:
11151 case OMP_CLAUSE_TO:
11152 case OMP_CLAUSE_MAP:
11153 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
11154 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1));
11155 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11157 case OMP_CLAUSE_REDUCTION:
11159 int i;
11160 for (i = 0; i < 4; i++)
11161 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i));
11162 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
11165 default:
11166 gcc_unreachable ();
11168 break;
11170 case TARGET_EXPR:
11172 int i, len;
11174 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same.
11175 But, we only want to walk once. */
11176 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3;
11177 for (i = 0; i < len; ++i)
11178 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11179 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len));
11182 case DECL_EXPR:
11183 /* If this is a TYPE_DECL, walk into the fields of the type that it's
11184 defining. We only want to walk into these fields of a type in this
11185 case and not in the general case of a mere reference to the type.
11187 The criterion is as follows: if the field can be an expression, it
11188 must be walked only here. This should be in keeping with the fields
11189 that are directly gimplified in gimplify_type_sizes in order for the
11190 mark/copy-if-shared/unmark machinery of the gimplifier to work with
11191 variable-sized types.
11193 Note that DECLs get walked as part of processing the BIND_EXPR. */
11194 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL)
11196 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp));
11197 if (TREE_CODE (*type_p) == ERROR_MARK)
11198 return NULL_TREE;
11200 /* Call the function for the type. See if it returns anything or
11201 doesn't want us to continue. If we are to continue, walk both
11202 the normal fields and those for the declaration case. */
11203 result = (*func) (type_p, &walk_subtrees, data);
11204 if (result || !walk_subtrees)
11205 return result;
11207 /* But do not walk a pointed-to type since it may itself need to
11208 be walked in the declaration case if it isn't anonymous. */
11209 if (!POINTER_TYPE_P (*type_p))
11211 result = walk_type_fields (*type_p, func, data, pset, lh);
11212 if (result)
11213 return result;
11216 /* If this is a record type, also walk the fields. */
11217 if (RECORD_OR_UNION_TYPE_P (*type_p))
11219 tree field;
11221 for (field = TYPE_FIELDS (*type_p); field;
11222 field = DECL_CHAIN (field))
11224 /* We'd like to look at the type of the field, but we can
11225 easily get infinite recursion. So assume it's pointed
11226 to elsewhere in the tree. Also, ignore things that
11227 aren't fields. */
11228 if (TREE_CODE (field) != FIELD_DECL)
11229 continue;
11231 WALK_SUBTREE (DECL_FIELD_OFFSET (field));
11232 WALK_SUBTREE (DECL_SIZE (field));
11233 WALK_SUBTREE (DECL_SIZE_UNIT (field));
11234 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE)
11235 WALK_SUBTREE (DECL_QUALIFIER (field));
11239 /* Same for scalar types. */
11240 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE
11241 || TREE_CODE (*type_p) == ENUMERAL_TYPE
11242 || TREE_CODE (*type_p) == INTEGER_TYPE
11243 || TREE_CODE (*type_p) == FIXED_POINT_TYPE
11244 || TREE_CODE (*type_p) == REAL_TYPE)
11246 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p));
11247 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p));
11250 WALK_SUBTREE (TYPE_SIZE (*type_p));
11251 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p));
11253 /* FALLTHRU */
11255 default:
11256 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code)))
11258 int i, len;
11260 /* Walk over all the sub-trees of this operand. */
11261 len = TREE_OPERAND_LENGTH (*tp);
11263 /* Go through the subtrees. We need to do this in forward order so
11264 that the scope of a FOR_EXPR is handled properly. */
11265 if (len)
11267 for (i = 0; i < len - 1; ++i)
11268 WALK_SUBTREE (TREE_OPERAND (*tp, i));
11269 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1));
11272 /* If this is a type, walk the needed fields in the type. */
11273 else if (TYPE_P (*tp))
11274 return walk_type_fields (*tp, func, data, pset, lh);
11275 break;
11278 /* We didn't find what we were looking for. */
11279 return NULL_TREE;
11281 #undef WALK_SUBTREE_TAIL
11283 #undef WALK_SUBTREE
11285 /* Like walk_tree, but does not walk duplicate nodes more than once. */
11287 tree
11288 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data,
11289 walk_tree_lh lh)
11291 tree result;
11292 struct pointer_set_t *pset;
11294 pset = pointer_set_create ();
11295 result = walk_tree_1 (tp, func, data, pset, lh);
11296 pointer_set_destroy (pset);
11297 return result;
11301 tree
11302 tree_block (tree t)
11304 char const c = TREE_CODE_CLASS (TREE_CODE (t));
11306 if (IS_EXPR_CODE_CLASS (c))
11307 return LOCATION_BLOCK (t->exp.locus);
11308 gcc_unreachable ();
11309 return NULL;
11312 void
11313 tree_set_block (tree t, tree b)
11315 char const c = TREE_CODE_CLASS (TREE_CODE (t));
11317 if (IS_EXPR_CODE_CLASS (c))
11319 if (b)
11320 t->exp.locus = COMBINE_LOCATION_DATA (line_table, t->exp.locus, b);
11321 else
11322 t->exp.locus = LOCATION_LOCUS (t->exp.locus);
11324 else
11325 gcc_unreachable ();
11328 /* Create a nameless artificial label and put it in the current
11329 function context. The label has a location of LOC. Returns the
11330 newly created label. */
11332 tree
11333 create_artificial_label (location_t loc)
11335 tree lab = build_decl (loc,
11336 LABEL_DECL, NULL_TREE, void_type_node);
11338 DECL_ARTIFICIAL (lab) = 1;
11339 DECL_IGNORED_P (lab) = 1;
11340 DECL_CONTEXT (lab) = current_function_decl;
11341 return lab;
11344 /* Given a tree, try to return a useful variable name that we can use
11345 to prefix a temporary that is being assigned the value of the tree.
11346 I.E. given <temp> = &A, return A. */
11348 const char *
11349 get_name (tree t)
11351 tree stripped_decl;
11353 stripped_decl = t;
11354 STRIP_NOPS (stripped_decl);
11355 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl))
11356 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl));
11357 else if (TREE_CODE (stripped_decl) == SSA_NAME)
11359 tree name = SSA_NAME_IDENTIFIER (stripped_decl);
11360 if (!name)
11361 return NULL;
11362 return IDENTIFIER_POINTER (name);
11364 else
11366 switch (TREE_CODE (stripped_decl))
11368 case ADDR_EXPR:
11369 return get_name (TREE_OPERAND (stripped_decl, 0));
11370 default:
11371 return NULL;
11376 /* Return true if TYPE has a variable argument list. */
11378 bool
11379 stdarg_p (const_tree fntype)
11381 function_args_iterator args_iter;
11382 tree n = NULL_TREE, t;
11384 if (!fntype)
11385 return false;
11387 FOREACH_FUNCTION_ARGS (fntype, t, args_iter)
11389 n = t;
11392 return n != NULL_TREE && n != void_type_node;
11395 /* Return true if TYPE has a prototype. */
11397 bool
11398 prototype_p (tree fntype)
11400 tree t;
11402 gcc_assert (fntype != NULL_TREE);
11404 t = TYPE_ARG_TYPES (fntype);
11405 return (t != NULL_TREE);
11408 /* If BLOCK is inlined from an __attribute__((__artificial__))
11409 routine, return pointer to location from where it has been
11410 called. */
11411 location_t *
11412 block_nonartificial_location (tree block)
11414 location_t *ret = NULL;
11416 while (block && TREE_CODE (block) == BLOCK
11417 && BLOCK_ABSTRACT_ORIGIN (block))
11419 tree ao = BLOCK_ABSTRACT_ORIGIN (block);
11421 while (TREE_CODE (ao) == BLOCK
11422 && BLOCK_ABSTRACT_ORIGIN (ao)
11423 && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
11424 ao = BLOCK_ABSTRACT_ORIGIN (ao);
11426 if (TREE_CODE (ao) == FUNCTION_DECL)
11428 /* If AO is an artificial inline, point RET to the
11429 call site locus at which it has been inlined and continue
11430 the loop, in case AO's caller is also an artificial
11431 inline. */
11432 if (DECL_DECLARED_INLINE_P (ao)
11433 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
11434 ret = &BLOCK_SOURCE_LOCATION (block);
11435 else
11436 break;
11438 else if (TREE_CODE (ao) != BLOCK)
11439 break;
11441 block = BLOCK_SUPERCONTEXT (block);
11443 return ret;
11447 /* If EXP is inlined from an __attribute__((__artificial__))
11448 function, return the location of the original call expression. */
11450 location_t
11451 tree_nonartificial_location (tree exp)
11453 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
11455 if (loc)
11456 return *loc;
11457 else
11458 return EXPR_LOCATION (exp);
11462 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq
11463 nodes. */
11465 /* Return the hash code code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */
11467 static hashval_t
11468 cl_option_hash_hash (const void *x)
11470 const_tree const t = (const_tree) x;
11471 const char *p;
11472 size_t i;
11473 size_t len = 0;
11474 hashval_t hash = 0;
11476 if (TREE_CODE (t) == OPTIMIZATION_NODE)
11478 p = (const char *)TREE_OPTIMIZATION (t);
11479 len = sizeof (struct cl_optimization);
11482 else if (TREE_CODE (t) == TARGET_OPTION_NODE)
11484 p = (const char *)TREE_TARGET_OPTION (t);
11485 len = sizeof (struct cl_target_option);
11488 else
11489 gcc_unreachable ();
11491 /* assume most opt flags are just 0/1, some are 2-3, and a few might be
11492 something else. */
11493 for (i = 0; i < len; i++)
11494 if (p[i])
11495 hash = (hash << 4) ^ ((i << 2) | p[i]);
11497 return hash;
11500 /* Return nonzero if the value represented by *X (an OPTIMIZATION or
11501 TARGET_OPTION tree node) is the same as that given by *Y, which is the
11502 same. */
11504 static int
11505 cl_option_hash_eq (const void *x, const void *y)
11507 const_tree const xt = (const_tree) x;
11508 const_tree const yt = (const_tree) y;
11509 const char *xp;
11510 const char *yp;
11511 size_t len;
11513 if (TREE_CODE (xt) != TREE_CODE (yt))
11514 return 0;
11516 if (TREE_CODE (xt) == OPTIMIZATION_NODE)
11518 xp = (const char *)TREE_OPTIMIZATION (xt);
11519 yp = (const char *)TREE_OPTIMIZATION (yt);
11520 len = sizeof (struct cl_optimization);
11523 else if (TREE_CODE (xt) == TARGET_OPTION_NODE)
11525 xp = (const char *)TREE_TARGET_OPTION (xt);
11526 yp = (const char *)TREE_TARGET_OPTION (yt);
11527 len = sizeof (struct cl_target_option);
11530 else
11531 gcc_unreachable ();
11533 return (memcmp (xp, yp, len) == 0);
11536 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */
11538 tree
11539 build_optimization_node (struct gcc_options *opts)
11541 tree t;
11542 void **slot;
11544 /* Use the cache of optimization nodes. */
11546 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node),
11547 opts);
11549 slot = htab_find_slot (cl_option_hash_table, cl_optimization_node, INSERT);
11550 t = (tree) *slot;
11551 if (!t)
11553 /* Insert this one into the hash table. */
11554 t = cl_optimization_node;
11555 *slot = t;
11557 /* Make a new node for next time round. */
11558 cl_optimization_node = make_node (OPTIMIZATION_NODE);
11561 return t;
11564 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */
11566 tree
11567 build_target_option_node (struct gcc_options *opts)
11569 tree t;
11570 void **slot;
11572 /* Use the cache of optimization nodes. */
11574 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node),
11575 opts);
11577 slot = htab_find_slot (cl_option_hash_table, cl_target_option_node, INSERT);
11578 t = (tree) *slot;
11579 if (!t)
11581 /* Insert this one into the hash table. */
11582 t = cl_target_option_node;
11583 *slot = t;
11585 /* Make a new node for next time round. */
11586 cl_target_option_node = make_node (TARGET_OPTION_NODE);
11589 return t;
11592 /* Reset TREE_TARGET_GLOBALS cache for TARGET_OPTION_NODE.
11593 Called through htab_traverse. */
11595 static int
11596 prepare_target_option_node_for_pch (void **slot, void *)
11598 tree node = (tree) *slot;
11599 if (TREE_CODE (node) == TARGET_OPTION_NODE)
11600 TREE_TARGET_GLOBALS (node) = NULL;
11601 return 1;
11604 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees,
11605 so that they aren't saved during PCH writing. */
11607 void
11608 prepare_target_option_nodes_for_pch (void)
11610 htab_traverse (cl_option_hash_table, prepare_target_option_node_for_pch,
11611 NULL);
11614 /* Determine the "ultimate origin" of a block. The block may be an inlined
11615 instance of an inlined instance of a block which is local to an inline
11616 function, so we have to trace all of the way back through the origin chain
11617 to find out what sort of node actually served as the original seed for the
11618 given block. */
11620 tree
11621 block_ultimate_origin (const_tree block)
11623 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
11625 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
11626 nodes in the function to point to themselves; ignore that if
11627 we're trying to output the abstract instance of this function. */
11628 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
11629 return NULL_TREE;
11631 if (immediate_origin == NULL_TREE)
11632 return NULL_TREE;
11633 else
11635 tree ret_val;
11636 tree lookahead = immediate_origin;
11640 ret_val = lookahead;
11641 lookahead = (TREE_CODE (ret_val) == BLOCK
11642 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
11644 while (lookahead != NULL && lookahead != ret_val);
11646 /* The block's abstract origin chain may not be the *ultimate* origin of
11647 the block. It could lead to a DECL that has an abstract origin set.
11648 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
11649 will give us if it has one). Note that DECL's abstract origins are
11650 supposed to be the most distant ancestor (or so decl_ultimate_origin
11651 claims), so we don't need to loop following the DECL origins. */
11652 if (DECL_P (ret_val))
11653 return DECL_ORIGIN (ret_val);
11655 return ret_val;
11659 /* Return true iff conversion in EXP generates no instruction. Mark
11660 it inline so that we fully inline into the stripping functions even
11661 though we have two uses of this function. */
11663 static inline bool
11664 tree_nop_conversion (const_tree exp)
11666 tree outer_type, inner_type;
11667 int outer_is_pts_p, inner_is_pts_p;
11669 if (!CONVERT_EXPR_P (exp)
11670 && TREE_CODE (exp) != NON_LVALUE_EXPR)
11671 return false;
11672 if (TREE_OPERAND (exp, 0) == error_mark_node)
11673 return false;
11675 outer_type = TREE_TYPE (exp);
11676 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11678 if (!inner_type)
11679 return false;
11681 outer_is_pts_p = (POINTER_TYPE_P (outer_type)
11682 && upc_shared_type_p (TREE_TYPE (outer_type)));
11683 inner_is_pts_p = (POINTER_TYPE_P (inner_type)
11684 && upc_shared_type_p (TREE_TYPE (inner_type)));
11686 /* UPC pointer-to-shared types have special
11687 equivalence rules that must be checked. */
11688 if (outer_is_pts_p && inner_is_pts_p
11689 && lang_hooks.types_compatible_p)
11690 return lang_hooks.types_compatible_p (outer_type, inner_type);
11692 /* UPC pointer-to-shared types are not interchangeable
11693 with integral types. */
11694 if (outer_is_pts_p || inner_is_pts_p)
11695 return false;
11697 /* Use precision rather then machine mode when we can, which gives
11698 the correct answer even for submode (bit-field) types. */
11699 if ((INTEGRAL_TYPE_P (outer_type)
11700 || POINTER_TYPE_P (outer_type)
11701 || TREE_CODE (outer_type) == OFFSET_TYPE)
11702 && (INTEGRAL_TYPE_P (inner_type)
11703 || POINTER_TYPE_P (inner_type)
11704 || TREE_CODE (inner_type) == OFFSET_TYPE))
11705 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type);
11707 /* Otherwise fall back on comparing machine modes (e.g. for
11708 aggregate types, floats). */
11709 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type);
11712 /* Return true iff conversion in EXP generates no instruction. Don't
11713 consider conversions changing the signedness. */
11715 static bool
11716 tree_sign_nop_conversion (const_tree exp)
11718 tree outer_type, inner_type;
11720 if (!tree_nop_conversion (exp))
11721 return false;
11723 outer_type = TREE_TYPE (exp);
11724 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
11726 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type)
11727 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type));
11730 /* Strip conversions from EXP according to tree_nop_conversion and
11731 return the resulting expression. */
11733 tree
11734 tree_strip_nop_conversions (tree exp)
11736 while (tree_nop_conversion (exp))
11737 exp = TREE_OPERAND (exp, 0);
11738 return exp;
11741 /* Strip conversions from EXP according to tree_sign_nop_conversion
11742 and return the resulting expression. */
11744 tree
11745 tree_strip_sign_nop_conversions (tree exp)
11747 while (tree_sign_nop_conversion (exp))
11748 exp = TREE_OPERAND (exp, 0);
11749 return exp;
11752 /* Avoid any floating point extensions from EXP. */
11753 tree
11754 strip_float_extensions (tree exp)
11756 tree sub, expt, subt;
11758 /* For floating point constant look up the narrowest type that can hold
11759 it properly and handle it like (type)(narrowest_type)constant.
11760 This way we can optimize for instance a=a*2.0 where "a" is float
11761 but 2.0 is double constant. */
11762 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp)))
11764 REAL_VALUE_TYPE orig;
11765 tree type = NULL;
11767 orig = TREE_REAL_CST (exp);
11768 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node)
11769 && exact_real_truncate (TYPE_MODE (float_type_node), &orig))
11770 type = float_type_node;
11771 else if (TYPE_PRECISION (TREE_TYPE (exp))
11772 > TYPE_PRECISION (double_type_node)
11773 && exact_real_truncate (TYPE_MODE (double_type_node), &orig))
11774 type = double_type_node;
11775 if (type)
11776 return build_real (type, real_value_truncate (TYPE_MODE (type), orig));
11779 if (!CONVERT_EXPR_P (exp))
11780 return exp;
11782 sub = TREE_OPERAND (exp, 0);
11783 subt = TREE_TYPE (sub);
11784 expt = TREE_TYPE (exp);
11786 if (!FLOAT_TYPE_P (subt))
11787 return exp;
11789 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt))
11790 return exp;
11792 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt))
11793 return exp;
11795 return strip_float_extensions (sub);
11798 /* Strip out all handled components that produce invariant
11799 offsets. */
11801 const_tree
11802 strip_invariant_refs (const_tree op)
11804 while (handled_component_p (op))
11806 switch (TREE_CODE (op))
11808 case ARRAY_REF:
11809 case ARRAY_RANGE_REF:
11810 if (!is_gimple_constant (TREE_OPERAND (op, 1))
11811 || TREE_OPERAND (op, 2) != NULL_TREE
11812 || TREE_OPERAND (op, 3) != NULL_TREE)
11813 return NULL;
11814 break;
11816 case COMPONENT_REF:
11817 if (TREE_OPERAND (op, 2) != NULL_TREE)
11818 return NULL;
11819 break;
11821 default:;
11823 op = TREE_OPERAND (op, 0);
11826 return op;
11829 static GTY(()) tree gcc_eh_personality_decl;
11831 /* Return the GCC personality function decl. */
11833 tree
11834 lhd_gcc_personality (void)
11836 if (!gcc_eh_personality_decl)
11837 gcc_eh_personality_decl = build_personality_function ("gcc");
11838 return gcc_eh_personality_decl;
11841 /* For languages with One Definition Rule, work out if
11842 trees are actually the same even if the tree representation
11843 differs. This handles only decls appearing in TYPE_NAME
11844 and TYPE_CONTEXT. That is NAMESPACE_DECL, TYPE_DECL,
11845 RECORD_TYPE and IDENTIFIER_NODE. */
11847 static bool
11848 same_for_odr (tree t1, tree t2)
11850 if (t1 == t2)
11851 return true;
11852 if (!t1 || !t2)
11853 return false;
11854 /* C and C++ FEs differ by using IDENTIFIER_NODE and TYPE_DECL. */
11855 if (TREE_CODE (t1) == IDENTIFIER_NODE
11856 && TREE_CODE (t2) == TYPE_DECL
11857 && DECL_FILE_SCOPE_P (t1))
11859 t2 = DECL_NAME (t2);
11860 gcc_assert (TREE_CODE (t2) == IDENTIFIER_NODE);
11862 if (TREE_CODE (t2) == IDENTIFIER_NODE
11863 && TREE_CODE (t1) == TYPE_DECL
11864 && DECL_FILE_SCOPE_P (t2))
11866 t1 = DECL_NAME (t1);
11867 gcc_assert (TREE_CODE (t1) == IDENTIFIER_NODE);
11869 if (TREE_CODE (t1) != TREE_CODE (t2))
11870 return false;
11871 if (TYPE_P (t1))
11872 return types_same_for_odr (t1, t2);
11873 if (DECL_P (t1))
11874 return decls_same_for_odr (t1, t2);
11875 return false;
11878 /* For languages with One Definition Rule, work out if
11879 decls are actually the same even if the tree representation
11880 differs. This handles only decls appearing in TYPE_NAME
11881 and TYPE_CONTEXT. That is NAMESPACE_DECL, TYPE_DECL,
11882 RECORD_TYPE and IDENTIFIER_NODE. */
11884 static bool
11885 decls_same_for_odr (tree decl1, tree decl2)
11887 if (decl1 && TREE_CODE (decl1) == TYPE_DECL
11888 && DECL_ORIGINAL_TYPE (decl1))
11889 decl1 = DECL_ORIGINAL_TYPE (decl1);
11890 if (decl2 && TREE_CODE (decl2) == TYPE_DECL
11891 && DECL_ORIGINAL_TYPE (decl2))
11892 decl2 = DECL_ORIGINAL_TYPE (decl2);
11893 if (decl1 == decl2)
11894 return true;
11895 if (!decl1 || !decl2)
11896 return false;
11897 gcc_checking_assert (DECL_P (decl1) && DECL_P (decl2));
11898 if (TREE_CODE (decl1) != TREE_CODE (decl2))
11899 return false;
11900 if (TREE_CODE (decl1) == TRANSLATION_UNIT_DECL)
11901 return true;
11902 if (TREE_CODE (decl1) != NAMESPACE_DECL
11903 && TREE_CODE (decl1) != TYPE_DECL)
11904 return false;
11905 if (!DECL_NAME (decl1))
11906 return false;
11907 gcc_checking_assert (TREE_CODE (DECL_NAME (decl1)) == IDENTIFIER_NODE);
11908 gcc_checking_assert (!DECL_NAME (decl2)
11909 || TREE_CODE (DECL_NAME (decl2)) == IDENTIFIER_NODE);
11910 if (DECL_NAME (decl1) != DECL_NAME (decl2))
11911 return false;
11912 return same_for_odr (DECL_CONTEXT (decl1),
11913 DECL_CONTEXT (decl2));
11916 /* For languages with One Definition Rule, work out if
11917 types are same even if the tree representation differs.
11918 This is non-trivial for LTO where minnor differences in
11919 the type representation may have prevented type merging
11920 to merge two copies of otherwise equivalent type. */
11922 bool
11923 types_same_for_odr (tree type1, tree type2)
11925 gcc_checking_assert (TYPE_P (type1) && TYPE_P (type2));
11926 type1 = TYPE_MAIN_VARIANT (type1);
11927 type2 = TYPE_MAIN_VARIANT (type2);
11928 if (type1 == type2)
11929 return true;
11931 #ifndef ENABLE_CHECKING
11932 if (!in_lto_p)
11933 return false;
11934 #endif
11936 /* Check for anonymous namespaces. Those have !TREE_PUBLIC
11937 on the corresponding TYPE_STUB_DECL. */
11938 if (type_in_anonymous_namespace_p (type1)
11939 || type_in_anonymous_namespace_p (type2))
11940 return false;
11941 /* When assembler name of virtual table is available, it is
11942 easy to compare types for equivalence. */
11943 if (TYPE_BINFO (type1) && TYPE_BINFO (type2)
11944 && BINFO_VTABLE (TYPE_BINFO (type1))
11945 && BINFO_VTABLE (TYPE_BINFO (type2)))
11947 tree v1 = BINFO_VTABLE (TYPE_BINFO (type1));
11948 tree v2 = BINFO_VTABLE (TYPE_BINFO (type2));
11950 if (TREE_CODE (v1) == POINTER_PLUS_EXPR)
11952 if (TREE_CODE (v2) != POINTER_PLUS_EXPR
11953 || !operand_equal_p (TREE_OPERAND (v1, 1),
11954 TREE_OPERAND (v2, 1), 0))
11955 return false;
11956 v1 = TREE_OPERAND (TREE_OPERAND (v1, 0), 0);
11957 v2 = TREE_OPERAND (TREE_OPERAND (v2, 0), 0);
11959 v1 = DECL_ASSEMBLER_NAME (v1);
11960 v2 = DECL_ASSEMBLER_NAME (v2);
11961 return (v1 == v2);
11964 /* FIXME: the code comparing type names consider all instantiations of the
11965 same template to have same name. This is because we have no access
11966 to template parameters. For types with no virtual method tables
11967 we thus can return false positives. At the moment we do not need
11968 to compare types in other scenarios than devirtualization. */
11970 /* If types are not structuraly same, do not bother to contnue.
11971 Match in the remainder of code would mean ODR violation. */
11972 if (!types_compatible_p (type1, type2))
11973 return false;
11974 if (!TYPE_NAME (type1))
11975 return false;
11976 if (!decls_same_for_odr (TYPE_NAME (type1), TYPE_NAME (type2)))
11977 return false;
11978 if (!same_for_odr (TYPE_CONTEXT (type1), TYPE_CONTEXT (type2)))
11979 return false;
11980 /* When not in LTO the MAIN_VARIANT check should be the same. */
11981 gcc_assert (in_lto_p);
11983 return true;
11986 /* TARGET is a call target of GIMPLE call statement
11987 (obtained by gimple_call_fn). Return true if it is
11988 OBJ_TYPE_REF representing an virtual call of C++ method.
11989 (As opposed to OBJ_TYPE_REF representing objc calls
11990 through a cast where middle-end devirtualization machinery
11991 can't apply.) */
11993 bool
11994 virtual_method_call_p (tree target)
11996 if (TREE_CODE (target) != OBJ_TYPE_REF)
11997 return false;
11998 target = TREE_TYPE (target);
11999 gcc_checking_assert (TREE_CODE (target) == POINTER_TYPE);
12000 target = TREE_TYPE (target);
12001 if (TREE_CODE (target) == FUNCTION_TYPE)
12002 return false;
12003 gcc_checking_assert (TREE_CODE (target) == METHOD_TYPE);
12004 return true;
12007 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */
12009 tree
12010 obj_type_ref_class (tree ref)
12012 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF);
12013 ref = TREE_TYPE (ref);
12014 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12015 ref = TREE_TYPE (ref);
12016 /* We look for type THIS points to. ObjC also builds
12017 OBJ_TYPE_REF with non-method calls, Their first parameter
12018 ID however also corresponds to class type. */
12019 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE
12020 || TREE_CODE (ref) == FUNCTION_TYPE);
12021 ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
12022 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
12023 return TREE_TYPE (ref);
12026 /* Return true if T is in anonymous namespace. */
12028 bool
12029 type_in_anonymous_namespace_p (tree t)
12031 return (TYPE_STUB_DECL (t) && !TREE_PUBLIC (TYPE_STUB_DECL (t)));
12034 /* Try to find a base info of BINFO that would have its field decl at offset
12035 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be
12036 found, return, otherwise return NULL_TREE. */
12038 tree
12039 get_binfo_at_offset (tree binfo, HOST_WIDE_INT offset, tree expected_type)
12041 tree type = BINFO_TYPE (binfo);
12043 while (true)
12045 HOST_WIDE_INT pos, size;
12046 tree fld;
12047 int i;
12049 if (types_same_for_odr (type, expected_type))
12050 return binfo;
12051 if (offset < 0)
12052 return NULL_TREE;
12054 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld))
12056 if (TREE_CODE (fld) != FIELD_DECL)
12057 continue;
12059 pos = int_bit_position (fld);
12060 size = tree_to_uhwi (DECL_SIZE (fld));
12061 if (pos <= offset && (pos + size) > offset)
12062 break;
12064 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE)
12065 return NULL_TREE;
12067 if (!DECL_ARTIFICIAL (fld))
12069 binfo = TYPE_BINFO (TREE_TYPE (fld));
12070 if (!binfo)
12071 return NULL_TREE;
12073 /* Offset 0 indicates the primary base, whose vtable contents are
12074 represented in the binfo for the derived class. */
12075 else if (offset != 0)
12077 tree base_binfo, binfo2 = binfo;
12079 /* Find BINFO corresponding to FLD. This is bit harder
12080 by a fact that in virtual inheritance we may need to walk down
12081 the non-virtual inheritance chain. */
12082 while (true)
12084 tree containing_binfo = NULL, found_binfo = NULL;
12085 for (i = 0; BINFO_BASE_ITERATE (binfo2, i, base_binfo); i++)
12086 if (types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld)))
12088 found_binfo = base_binfo;
12089 break;
12091 else
12092 if ((tree_to_shwi (BINFO_OFFSET (base_binfo))
12093 - tree_to_shwi (BINFO_OFFSET (binfo)))
12094 * BITS_PER_UNIT < pos
12095 /* Rule out types with no virtual methods or we can get confused
12096 here by zero sized bases. */
12097 && BINFO_VTABLE (TYPE_BINFO (BINFO_TYPE (base_binfo)))
12098 && (!containing_binfo
12099 || (tree_to_shwi (BINFO_OFFSET (containing_binfo))
12100 < tree_to_shwi (BINFO_OFFSET (base_binfo)))))
12101 containing_binfo = base_binfo;
12102 if (found_binfo)
12104 binfo = found_binfo;
12105 break;
12107 if (!containing_binfo)
12108 return NULL_TREE;
12109 binfo2 = containing_binfo;
12113 type = TREE_TYPE (fld);
12114 offset -= pos;
12118 /* Returns true if X is a typedef decl. */
12120 bool
12121 is_typedef_decl (tree x)
12123 return (x && TREE_CODE (x) == TYPE_DECL
12124 && DECL_ORIGINAL_TYPE (x) != NULL_TREE);
12127 /* Returns true iff TYPE is a type variant created for a typedef. */
12129 bool
12130 typedef_variant_p (tree type)
12132 return is_typedef_decl (TYPE_NAME (type));
12135 /* Warn about a use of an identifier which was marked deprecated. */
12136 void
12137 warn_deprecated_use (tree node, tree attr)
12139 const char *msg;
12141 if (node == 0 || !warn_deprecated_decl)
12142 return;
12144 if (!attr)
12146 if (DECL_P (node))
12147 attr = DECL_ATTRIBUTES (node);
12148 else if (TYPE_P (node))
12150 tree decl = TYPE_STUB_DECL (node);
12151 if (decl)
12152 attr = lookup_attribute ("deprecated",
12153 TYPE_ATTRIBUTES (TREE_TYPE (decl)));
12157 if (attr)
12158 attr = lookup_attribute ("deprecated", attr);
12160 if (attr)
12161 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)));
12162 else
12163 msg = NULL;
12165 if (DECL_P (node))
12167 expanded_location xloc = expand_location (DECL_SOURCE_LOCATION (node));
12168 if (msg)
12169 warning (OPT_Wdeprecated_declarations,
12170 "%qD is deprecated (declared at %r%s:%d%R): %s",
12171 node, "locus", xloc.file, xloc.line, msg);
12172 else
12173 warning (OPT_Wdeprecated_declarations,
12174 "%qD is deprecated (declared at %r%s:%d%R)",
12175 node, "locus", xloc.file, xloc.line);
12177 else if (TYPE_P (node))
12179 tree what = NULL_TREE;
12180 tree decl = TYPE_STUB_DECL (node);
12182 if (TYPE_NAME (node))
12184 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE)
12185 what = TYPE_NAME (node);
12186 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
12187 && DECL_NAME (TYPE_NAME (node)))
12188 what = DECL_NAME (TYPE_NAME (node));
12191 if (decl)
12193 expanded_location xloc
12194 = expand_location (DECL_SOURCE_LOCATION (decl));
12195 if (what)
12197 if (msg)
12198 warning (OPT_Wdeprecated_declarations,
12199 "%qE is deprecated (declared at %r%s:%d%R): %s",
12200 what, "locus", xloc.file, xloc.line, msg);
12201 else
12202 warning (OPT_Wdeprecated_declarations,
12203 "%qE is deprecated (declared at %r%s:%d%R)",
12204 what, "locus", xloc.file, xloc.line);
12206 else
12208 if (msg)
12209 warning (OPT_Wdeprecated_declarations,
12210 "type is deprecated (declared at %r%s:%d%R): %s",
12211 "locus", xloc.file, xloc.line, msg);
12212 else
12213 warning (OPT_Wdeprecated_declarations,
12214 "type is deprecated (declared at %r%s:%d%R)",
12215 "locus", xloc.file, xloc.line);
12218 else
12220 if (what)
12222 if (msg)
12223 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s",
12224 what, msg);
12225 else
12226 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what);
12228 else
12230 if (msg)
12231 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s",
12232 msg);
12233 else
12234 warning (OPT_Wdeprecated_declarations, "type is deprecated");
12240 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration
12241 somewhere in it. */
12243 bool
12244 contains_bitfld_component_ref_p (const_tree ref)
12246 while (handled_component_p (ref))
12248 if (TREE_CODE (ref) == COMPONENT_REF
12249 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1)))
12250 return true;
12251 ref = TREE_OPERAND (ref, 0);
12254 return false;
12257 /* Try to determine whether a TRY_CATCH expression can fall through.
12258 This is a subroutine of block_may_fallthru. */
12260 static bool
12261 try_catch_may_fallthru (const_tree stmt)
12263 tree_stmt_iterator i;
12265 /* If the TRY block can fall through, the whole TRY_CATCH can
12266 fall through. */
12267 if (block_may_fallthru (TREE_OPERAND (stmt, 0)))
12268 return true;
12270 i = tsi_start (TREE_OPERAND (stmt, 1));
12271 switch (TREE_CODE (tsi_stmt (i)))
12273 case CATCH_EXPR:
12274 /* We expect to see a sequence of CATCH_EXPR trees, each with a
12275 catch expression and a body. The whole TRY_CATCH may fall
12276 through iff any of the catch bodies falls through. */
12277 for (; !tsi_end_p (i); tsi_next (&i))
12279 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i))))
12280 return true;
12282 return false;
12284 case EH_FILTER_EXPR:
12285 /* The exception filter expression only matters if there is an
12286 exception. If the exception does not match EH_FILTER_TYPES,
12287 we will execute EH_FILTER_FAILURE, and we will fall through
12288 if that falls through. If the exception does match
12289 EH_FILTER_TYPES, the stack unwinder will continue up the
12290 stack, so we will not fall through. We don't know whether we
12291 will throw an exception which matches EH_FILTER_TYPES or not,
12292 so we just ignore EH_FILTER_TYPES and assume that we might
12293 throw an exception which doesn't match. */
12294 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i)));
12296 default:
12297 /* This case represents statements to be executed when an
12298 exception occurs. Those statements are implicitly followed
12299 by a RESX statement to resume execution after the exception.
12300 So in this case the TRY_CATCH never falls through. */
12301 return false;
12305 /* Try to determine if we can fall out of the bottom of BLOCK. This guess
12306 need not be 100% accurate; simply be conservative and return true if we
12307 don't know. This is used only to avoid stupidly generating extra code.
12308 If we're wrong, we'll just delete the extra code later. */
12310 bool
12311 block_may_fallthru (const_tree block)
12313 /* This CONST_CAST is okay because expr_last returns its argument
12314 unmodified and we assign it to a const_tree. */
12315 const_tree stmt = expr_last (CONST_CAST_TREE (block));
12317 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK)
12319 case GOTO_EXPR:
12320 case RETURN_EXPR:
12321 /* Easy cases. If the last statement of the block implies
12322 control transfer, then we can't fall through. */
12323 return false;
12325 case SWITCH_EXPR:
12326 /* If SWITCH_LABELS is set, this is lowered, and represents a
12327 branch to a selected label and hence can not fall through.
12328 Otherwise SWITCH_BODY is set, and the switch can fall
12329 through. */
12330 return SWITCH_LABELS (stmt) == NULL_TREE;
12332 case COND_EXPR:
12333 if (block_may_fallthru (COND_EXPR_THEN (stmt)))
12334 return true;
12335 return block_may_fallthru (COND_EXPR_ELSE (stmt));
12337 case BIND_EXPR:
12338 return block_may_fallthru (BIND_EXPR_BODY (stmt));
12340 case TRY_CATCH_EXPR:
12341 return try_catch_may_fallthru (stmt);
12343 case TRY_FINALLY_EXPR:
12344 /* The finally clause is always executed after the try clause,
12345 so if it does not fall through, then the try-finally will not
12346 fall through. Otherwise, if the try clause does not fall
12347 through, then when the finally clause falls through it will
12348 resume execution wherever the try clause was going. So the
12349 whole try-finally will only fall through if both the try
12350 clause and the finally clause fall through. */
12351 return (block_may_fallthru (TREE_OPERAND (stmt, 0))
12352 && block_may_fallthru (TREE_OPERAND (stmt, 1)));
12354 case MODIFY_EXPR:
12355 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR)
12356 stmt = TREE_OPERAND (stmt, 1);
12357 else
12358 return true;
12359 /* FALLTHRU */
12361 case CALL_EXPR:
12362 /* Functions that do not return do not fall through. */
12363 return (call_expr_flags (stmt) & ECF_NORETURN) == 0;
12365 case CLEANUP_POINT_EXPR:
12366 return block_may_fallthru (TREE_OPERAND (stmt, 0));
12368 case TARGET_EXPR:
12369 return block_may_fallthru (TREE_OPERAND (stmt, 1));
12371 case ERROR_MARK:
12372 return true;
12374 default:
12375 return lang_hooks.block_may_fallthru (stmt);
12379 /* Garbage collection support for tree_type_common. */
12381 extern void gt_ggc_mx (tree&);
12382 extern void gt_ggc_mx_die_struct (void *);
12384 void gt_ggc_mx (tree_type_common *tt)
12386 tree t = (tree) tt;
12387 tree block_factor = TYPE_UPC_BLOCK_FACTOR (t);
12389 gt_ggc_mx (tt->common.typed.type);
12390 gt_ggc_mx (tt->common.chain);
12391 gt_ggc_mx (tt->size);
12392 gt_ggc_mx (tt->size_unit);
12393 gt_ggc_mx (tt->attributes);
12394 gt_ggc_mx (tt->pointer_to);
12395 gt_ggc_mx (tt->reference_to);
12396 switch (debug_hooks->tree_type_symtab_field)
12398 case TYPE_SYMTAB_IS_ADDRESS:
12399 break;
12400 case TYPE_SYMTAB_IS_POINTER:
12401 gt_ggc_m_S (tt->symtab.pointer);
12402 break;
12403 case TYPE_SYMTAB_IS_DIE:
12404 gt_ggc_mx_die_struct (tt->symtab.die);
12405 break;
12406 default:
12407 break;
12409 gt_ggc_mx (tt->name);
12410 gt_ggc_mx (tt->next_variant);
12411 gt_ggc_mx (tt->main_variant);
12412 gt_ggc_mx (tt->context);
12413 gt_ggc_mx (tt->canonical);
12415 if (TYPE_HAS_UPC_BLOCK_FACTOR_X (t))
12416 gt_ggc_mx (block_factor);
12419 /* PCH support for tree_type_common. */
12421 extern void gt_pch_nx (tree&);
12422 extern void gt_ggc_nx_die_struct (void *);
12424 void gt_pch_nx (tree_type_common *tt)
12426 tree t = (tree) tt;
12427 tree block_factor = TYPE_UPC_BLOCK_FACTOR (t);
12429 gt_pch_nx (tt->common.typed.type);
12430 gt_pch_nx (tt->common.chain);
12431 gt_pch_nx (tt->size);
12432 gt_pch_nx (tt->size_unit);
12433 gt_pch_nx (tt->attributes);
12434 gt_pch_nx (tt->pointer_to);
12435 gt_pch_nx (tt->reference_to);
12436 switch (debug_hooks->tree_type_symtab_field)
12438 case TYPE_SYMTAB_IS_ADDRESS:
12439 break;
12440 case TYPE_SYMTAB_IS_POINTER:
12441 gt_pch_n_S (tt->symtab.pointer);
12442 break;
12443 case TYPE_SYMTAB_IS_DIE:
12444 gt_pch_nx_die_struct (tt->symtab.die);
12445 break;
12446 default:
12447 break;
12449 gt_pch_nx (tt->name);
12450 gt_pch_nx (tt->next_variant);
12451 gt_pch_nx (tt->main_variant);
12452 gt_pch_nx (tt->context);
12453 gt_pch_nx (tt->canonical);
12455 if (TYPE_HAS_UPC_BLOCK_FACTOR_X (t))
12456 gt_pch_nx (block_factor);
12459 void gt_pch_nx (tree_type_common *tt, gt_pointer_operator op, void *cookie)
12461 tree t = (tree) tt;
12462 tree block_factor = TYPE_UPC_BLOCK_FACTOR (t);
12464 op (&(tt->common.typed.type), cookie);
12465 op (&(tt->common.chain), cookie);
12466 op (&(tt->size), cookie);
12467 op (&(tt->size_unit), cookie);
12468 op (&(tt->attributes), cookie);
12469 op (&(tt->pointer_to), cookie);
12470 op (&(tt->reference_to), cookie);
12471 switch (debug_hooks->tree_type_symtab_field)
12473 case TYPE_SYMTAB_IS_ADDRESS:
12474 break;
12475 case TYPE_SYMTAB_IS_POINTER:
12476 op (&(tt->symtab.pointer), cookie);
12477 break;
12478 case TYPE_SYMTAB_IS_DIE:
12479 op (&(tt->symtab.die), cookie);
12480 break;
12481 default:
12482 break;
12484 op (&(tt->name), cookie);
12485 op (&(tt->next_variant), cookie);
12486 op (&(tt->main_variant), cookie);
12487 op (&(tt->context), cookie);
12488 op (&(tt->canonical), cookie);
12490 if (TYPE_HAS_UPC_BLOCK_FACTOR_X (t))
12491 op (&(block_factor), cookie);
12494 /* True if we are using EH to handle cleanups. */
12495 static bool using_eh_for_cleanups_flag = false;
12497 /* This routine is called from front ends to indicate eh should be used for
12498 cleanups. */
12499 void
12500 using_eh_for_cleanups (void)
12502 using_eh_for_cleanups_flag = true;
12505 /* Query whether EH is used for cleanups. */
12506 bool
12507 using_eh_for_cleanups_p (void)
12509 return using_eh_for_cleanups_flag;
12512 /* Wrapper for tree_code_name to ensure that tree code is valid */
12513 const char *
12514 get_tree_code_name (enum tree_code code)
12516 const char *invalid = "<invalid tree code>";
12518 if (code >= MAX_TREE_CODES)
12519 return invalid;
12521 return tree_code_name[code];
12524 /* Drops the TREE_OVERFLOW flag from T. */
12526 tree
12527 drop_tree_overflow (tree t)
12529 gcc_checking_assert (TREE_OVERFLOW (t));
12531 /* For tree codes with a sharing machinery re-build the result. */
12532 if (TREE_CODE (t) == INTEGER_CST)
12533 return build_int_cst_wide (TREE_TYPE (t),
12534 TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t));
12536 /* Otherwise, as all tcc_constants are possibly shared, copy the node
12537 and drop the flag. */
12538 t = copy_node (t);
12539 TREE_OVERFLOW (t) = 0;
12540 return t;
12543 /* Given a memory reference expression T, return its base address.
12544 The base address of a memory reference expression is the main
12545 object being referenced. For instance, the base address for
12546 'array[i].fld[j]' is 'array'. You can think of this as stripping
12547 away the offset part from a memory address.
12549 This function calls handled_component_p to strip away all the inner
12550 parts of the memory reference until it reaches the base object. */
12552 tree
12553 get_base_address (tree t)
12555 while (handled_component_p (t))
12556 t = TREE_OPERAND (t, 0);
12558 if ((TREE_CODE (t) == MEM_REF
12559 || TREE_CODE (t) == TARGET_MEM_REF)
12560 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR)
12561 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0);
12563 /* ??? Either the alias oracle or all callers need to properly deal
12564 with WITH_SIZE_EXPRs before we can look through those. */
12565 if (TREE_CODE (t) == WITH_SIZE_EXPR)
12566 return NULL_TREE;
12568 return t;
12571 #include "gt-tree.h"