1 /* Language-independent node constructors for parse phase of GNU compiler. 2 Copyright (C) 1987-2018 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify it under 7 the terms of the GNU General Public License as published by the Free 8 Software Foundation; either version 3, or (at your option) any later 9 version. 10 11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12 WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 /* This file contains the low level primitives for operating on tree nodes, 21 including allocation, list operations, interning of identifiers, 22 construction of data type nodes and statement nodes, 23 and construction of type conversion nodes. It also contains 24 tables index by tree code that describe how to take apart 25 nodes of that code. 26 27 It is intended to be language-independent but can occasionally 28 calls language-dependent routines. */ 29 30 #include "config.h" 31 #include "system.h" 32 #include "coretypes.h" 33 #include "backend.h" 34 #include "target.h" 35 #include "tree.h" 36 #include "gimple.h" 37 #include "tree-pass.h" 38 #include "ssa.h" 39 #include "cgraph.h" 40 #include "diagnostic.h" 41 #include "flags.h" 42 #include "alias.h" 43 #include "fold-const.h" 44 #include "stor-layout.h" 45 #include "calls.h" 46 #include "attribs.h" 47 #include "toplev.h" /* get_random_seed */ 48 #include "output.h" 49 #include "common/common-target.h" 50 #include "langhooks.h" 51 #include "tree-inline.h" 52 #include "tree-iterator.h" 53 #include "internal-fn.h" 54 #include "gimple-iterator.h" 55 #include "gimplify.h" 56 #include "tree-dfa.h" 57 #include "params.h" 58 #include "langhooks-def.h" 59 #include "tree-diagnostic.h" 60 #include "except.h" 61 #include "builtins.h" 62 #include "print-tree.h" 63 #include "ipa-utils.h" 64 #include "selftest.h" 65 #include "stringpool.h" 66 #include "attribs.h" 67 #include "rtl.h" 68 #include "regs.h" 69 #include "tree-vector-builder.h" 70 71 /* Tree code classes. */ 72 73 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, 74 #define END_OF_BASE_TREE_CODES tcc_exceptional, 75 76 const enum tree_code_class tree_code_type[] = { 77 #include "all-tree.def" 78 }; 79 80 #undef DEFTREECODE 81 #undef END_OF_BASE_TREE_CODES 82 83 /* Table indexed by tree code giving number of expression 84 operands beyond the fixed part of the node structure. 85 Not used for types or decls. */ 86 87 #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, 88 #define END_OF_BASE_TREE_CODES 0, 89 90 const unsigned char tree_code_length[] = { 91 #include "all-tree.def" 92 }; 93 94 #undef DEFTREECODE 95 #undef END_OF_BASE_TREE_CODES 96 97 /* Names of tree components. 98 Used for printing out the tree and error messages. */ 99 #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, 100 #define END_OF_BASE_TREE_CODES "@dummy", 101 102 static const char *const tree_code_name[] = { 103 #include "all-tree.def" 104 }; 105 106 #undef DEFTREECODE 107 #undef END_OF_BASE_TREE_CODES 108 109 /* Each tree code class has an associated string representation. 110 These must correspond to the tree_code_class entries. */ 111 112 const char *const tree_code_class_strings[] = 113 { 114 "exceptional", 115 "constant", 116 "type", 117 "declaration", 118 "reference", 119 "comparison", 120 "unary", 121 "binary", 122 "statement", 123 "vl_exp", 124 "expression" 125 }; 126 127 /* obstack.[ch] explicitly declined to prototype this. */ 128 extern int _obstack_allocated_p (struct obstack *h, void *obj); 129 130 /* Statistics-gathering stuff. */ 131 132 static uint64_t tree_code_counts[MAX_TREE_CODES]; 133 uint64_t tree_node_counts[(int) all_kinds]; 134 uint64_t tree_node_sizes[(int) all_kinds]; 135 136 /* Keep in sync with tree.h:enum tree_node_kind. */ 137 static const char * const tree_node_kind_names[] = { 138 "decls", 139 "types", 140 "blocks", 141 "stmts", 142 "refs", 143 "exprs", 144 "constants", 145 "identifiers", 146 "vecs", 147 "binfos", 148 "ssa names", 149 "constructors", 150 "random kinds", 151 "lang_decl kinds", 152 "lang_type kinds", 153 "omp clauses", 154 }; 155 156 /* Unique id for next decl created. */ 157 static GTY(()) int next_decl_uid; 158 /* Unique id for next type created. */ 159 static GTY(()) unsigned next_type_uid = 1; 160 /* Unique id for next debug decl created. Use negative numbers, 161 to catch erroneous uses. */ 162 static GTY(()) int next_debug_decl_uid; 163 164 /* Since we cannot rehash a type after it is in the table, we have to 165 keep the hash code. */ 166 167 struct GTY((for_user)) type_hash { 168 unsigned long hash; 169 tree type; 170 }; 171 172 /* Initial size of the hash table (rounded to next prime). */ 173 #define TYPE_HASH_INITIAL_SIZE 1000 174 175 struct type_cache_hasher : ggc_cache_ptr_hash<type_hash> 176 { 177 static hashval_t hash (type_hash *t) { return t->hash; } 178 static bool equal (type_hash *a, type_hash *b); 179 180 static int 181 keep_cache_entry (type_hash *&t) 182 { 183 return ggc_marked_p (t->type); 184 } 185 }; 186 187 /* Now here is the hash table. When recording a type, it is added to 188 the slot whose index is the hash code. Note that the hash table is 189 used for several kinds of types (function types, array types and 190 array index range types, for now). While all these live in the 191 same table, they are completely independent, and the hash code is 192 computed differently for each of these. */ 193 194 static GTY ((cache)) hash_table<type_cache_hasher> *type_hash_table; 195 196 /* Hash table and temporary node for larger integer const values. */ 197 static GTY (()) tree int_cst_node; 198 199 struct int_cst_hasher : ggc_cache_ptr_hash<tree_node> 200 { 201 static hashval_t hash (tree t); 202 static bool equal (tree x, tree y); 203 }; 204 205 static GTY ((cache)) hash_table<int_cst_hasher> *int_cst_hash_table; 206 207 /* Class and variable for making sure that there is a single POLY_INT_CST 208 for a given value. */ 209 struct poly_int_cst_hasher : ggc_cache_ptr_hash<tree_node> 210 { 211 typedef std::pair<tree, const poly_wide_int *> compare_type; 212 static hashval_t hash (tree t); 213 static bool equal (tree x, const compare_type &y); 214 }; 215 216 static GTY ((cache)) hash_table<poly_int_cst_hasher> *poly_int_cst_hash_table; 217 218 /* Hash table for optimization flags and target option flags. Use the same 219 hash table for both sets of options. Nodes for building the current 220 optimization and target option nodes. The assumption is most of the time 221 the options created will already be in the hash table, so we avoid 222 allocating and freeing up a node repeatably. */ 223 static GTY (()) tree cl_optimization_node; 224 static GTY (()) tree cl_target_option_node; 225 226 struct cl_option_hasher : ggc_cache_ptr_hash<tree_node> 227 { 228 static hashval_t hash (tree t); 229 static bool equal (tree x, tree y); 230 }; 231 232 static GTY ((cache)) hash_table<cl_option_hasher> *cl_option_hash_table; 233 234 /* General tree->tree mapping structure for use in hash tables. */ 235 236 237 static GTY ((cache)) 238 hash_table<tree_decl_map_cache_hasher> *debug_expr_for_decl; 239 240 static GTY ((cache)) 241 hash_table<tree_decl_map_cache_hasher> *value_expr_for_decl; 242 243 struct tree_vec_map_cache_hasher : ggc_cache_ptr_hash<tree_vec_map> 244 { 245 static hashval_t hash (tree_vec_map *m) { return DECL_UID (m->base.from); } 246 247 static bool 248 equal (tree_vec_map *a, tree_vec_map *b) 249 { 250 return a->base.from == b->base.from; 251 } 252 253 static int 254 keep_cache_entry (tree_vec_map *&m) 255 { 256 return ggc_marked_p (m->base.from); 257 } 258 }; 259 260 static GTY ((cache)) 261 hash_table<tree_vec_map_cache_hasher> *debug_args_for_decl; 262 263 static void set_type_quals (tree, int); 264 static void print_type_hash_statistics (void); 265 static void print_debug_expr_statistics (void); 266 static void print_value_expr_statistics (void); 267 268 tree global_trees[TI_MAX]; 269 tree integer_types[itk_none]; 270 271 bool int_n_enabled_p[NUM_INT_N_ENTS]; 272 struct int_n_trees_t int_n_trees [NUM_INT_N_ENTS]; 273 274 bool tree_contains_struct[MAX_TREE_CODES][64]; 275 276 /* Number of operands for each OpenMP clause. */ 277 unsigned const char omp_clause_num_ops[] = 278 { 279 0, /* OMP_CLAUSE_ERROR */ 280 1, /* OMP_CLAUSE_PRIVATE */ 281 1, /* OMP_CLAUSE_SHARED */ 282 1, /* OMP_CLAUSE_FIRSTPRIVATE */ 283 2, /* OMP_CLAUSE_LASTPRIVATE */ 284 5, /* OMP_CLAUSE_REDUCTION */ 285 1, /* OMP_CLAUSE_COPYIN */ 286 1, /* OMP_CLAUSE_COPYPRIVATE */ 287 3, /* OMP_CLAUSE_LINEAR */ 288 2, /* OMP_CLAUSE_ALIGNED */ 289 1, /* OMP_CLAUSE_DEPEND */ 290 1, /* OMP_CLAUSE_UNIFORM */ 291 1, /* OMP_CLAUSE_TO_DECLARE */ 292 1, /* OMP_CLAUSE_LINK */ 293 2, /* OMP_CLAUSE_FROM */ 294 2, /* OMP_CLAUSE_TO */ 295 2, /* OMP_CLAUSE_MAP */ 296 1, /* OMP_CLAUSE_USE_DEVICE_PTR */ 297 1, /* OMP_CLAUSE_IS_DEVICE_PTR */ 298 2, /* OMP_CLAUSE__CACHE_ */ 299 2, /* OMP_CLAUSE_GANG */ 300 1, /* OMP_CLAUSE_ASYNC */ 301 1, /* OMP_CLAUSE_WAIT */ 302 0, /* OMP_CLAUSE_AUTO */ 303 0, /* OMP_CLAUSE_SEQ */ 304 1, /* OMP_CLAUSE__LOOPTEMP_ */ 305 1, /* OMP_CLAUSE_IF */ 306 1, /* OMP_CLAUSE_NUM_THREADS */ 307 1, /* OMP_CLAUSE_SCHEDULE */ 308 0, /* OMP_CLAUSE_NOWAIT */ 309 1, /* OMP_CLAUSE_ORDERED */ 310 0, /* OMP_CLAUSE_DEFAULT */ 311 3, /* OMP_CLAUSE_COLLAPSE */ 312 0, /* OMP_CLAUSE_UNTIED */ 313 1, /* OMP_CLAUSE_FINAL */ 314 0, /* OMP_CLAUSE_MERGEABLE */ 315 1, /* OMP_CLAUSE_DEVICE */ 316 1, /* OMP_CLAUSE_DIST_SCHEDULE */ 317 0, /* OMP_CLAUSE_INBRANCH */ 318 0, /* OMP_CLAUSE_NOTINBRANCH */ 319 1, /* OMP_CLAUSE_NUM_TEAMS */ 320 1, /* OMP_CLAUSE_THREAD_LIMIT */ 321 0, /* OMP_CLAUSE_PROC_BIND */ 322 1, /* OMP_CLAUSE_SAFELEN */ 323 1, /* OMP_CLAUSE_SIMDLEN */ 324 0, /* OMP_CLAUSE_FOR */ 325 0, /* OMP_CLAUSE_PARALLEL */ 326 0, /* OMP_CLAUSE_SECTIONS */ 327 0, /* OMP_CLAUSE_TASKGROUP */ 328 1, /* OMP_CLAUSE_PRIORITY */ 329 1, /* OMP_CLAUSE_GRAINSIZE */ 330 1, /* OMP_CLAUSE_NUM_TASKS */ 331 0, /* OMP_CLAUSE_NOGROUP */ 332 0, /* OMP_CLAUSE_THREADS */ 333 0, /* OMP_CLAUSE_SIMD */ 334 1, /* OMP_CLAUSE_HINT */ 335 0, /* OMP_CLAUSE_DEFALTMAP */ 336 1, /* OMP_CLAUSE__SIMDUID_ */ 337 0, /* OMP_CLAUSE__SIMT_ */ 338 0, /* OMP_CLAUSE_INDEPENDENT */ 339 1, /* OMP_CLAUSE_WORKER */ 340 1, /* OMP_CLAUSE_VECTOR */ 341 1, /* OMP_CLAUSE_NUM_GANGS */ 342 1, /* OMP_CLAUSE_NUM_WORKERS */ 343 1, /* OMP_CLAUSE_VECTOR_LENGTH */ 344 3, /* OMP_CLAUSE_TILE */ 345 2, /* OMP_CLAUSE__GRIDDIM_ */ 346 }; 347 348 const char * const omp_clause_code_name[] = 349 { 350 "error_clause", 351 "private", 352 "shared", 353 "firstprivate", 354 "lastprivate", 355 "reduction", 356 "copyin", 357 "copyprivate", 358 "linear", 359 "aligned", 360 "depend", 361 "uniform", 362 "to", 363 "link", 364 "from", 365 "to", 366 "map", 367 "use_device_ptr", 368 "is_device_ptr", 369 "_cache_", 370 "gang", 371 "async", 372 "wait", 373 "auto", 374 "seq", 375 "_looptemp_", 376 "if", 377 "num_threads", 378 "schedule", 379 "nowait", 380 "ordered", 381 "default", 382 "collapse", 383 "untied", 384 "final", 385 "mergeable", 386 "device", 387 "dist_schedule", 388 "inbranch", 389 "notinbranch", 390 "num_teams", 391 "thread_limit", 392 "proc_bind", 393 "safelen", 394 "simdlen", 395 "for", 396 "parallel", 397 "sections", 398 "taskgroup", 399 "priority", 400 "grainsize", 401 "num_tasks", 402 "nogroup", 403 "threads", 404 "simd", 405 "hint", 406 "defaultmap", 407 "_simduid_", 408 "_simt_", 409 "independent", 410 "worker", 411 "vector", 412 "num_gangs", 413 "num_workers", 414 "vector_length", 415 "tile", 416 "_griddim_" 417 }; 418 419 420 /* Return the tree node structure used by tree code CODE. */ 421 422 static inline enum tree_node_structure_enum 423 tree_node_structure_for_code (enum tree_code code) 424 { 425 switch (TREE_CODE_CLASS (code)) 426 { 427 case tcc_declaration: 428 { 429 switch (code) 430 { 431 case FIELD_DECL: 432 return TS_FIELD_DECL; 433 case PARM_DECL: 434 return TS_PARM_DECL; 435 case VAR_DECL: 436 return TS_VAR_DECL; 437 case LABEL_DECL: 438 return TS_LABEL_DECL; 439 case RESULT_DECL: 440 return TS_RESULT_DECL; 441 case DEBUG_EXPR_DECL: 442 return TS_DECL_WRTL; 443 case CONST_DECL: 444 return TS_CONST_DECL; 445 case TYPE_DECL: 446 return TS_TYPE_DECL; 447 case FUNCTION_DECL: 448 return TS_FUNCTION_DECL; 449 case TRANSLATION_UNIT_DECL: 450 return TS_TRANSLATION_UNIT_DECL; 451 default: 452 return TS_DECL_NON_COMMON; 453 } 454 } 455 case tcc_type: 456 return TS_TYPE_NON_COMMON; 457 case tcc_reference: 458 case tcc_comparison: 459 case tcc_unary: 460 case tcc_binary: 461 case tcc_expression: 462 case tcc_statement: 463 case tcc_vl_exp: 464 return TS_EXP; 465 default: /* tcc_constant and tcc_exceptional */ 466 break; 467 } 468 switch (code) 469 { 470 /* tcc_constant cases. */ 471 case VOID_CST: return TS_TYPED; 472 case INTEGER_CST: return TS_INT_CST; 473 case POLY_INT_CST: return TS_POLY_INT_CST; 474 case REAL_CST: return TS_REAL_CST; 475 case FIXED_CST: return TS_FIXED_CST; 476 case COMPLEX_CST: return TS_COMPLEX; 477 case VECTOR_CST: return TS_VECTOR; 478 case STRING_CST: return TS_STRING; 479 /* tcc_exceptional cases. */ 480 case ERROR_MARK: return TS_COMMON; 481 case IDENTIFIER_NODE: return TS_IDENTIFIER; 482 case TREE_LIST: return TS_LIST; 483 case TREE_VEC: return TS_VEC; 484 case SSA_NAME: return TS_SSA_NAME; 485 case PLACEHOLDER_EXPR: return TS_COMMON; 486 case STATEMENT_LIST: return TS_STATEMENT_LIST; 487 case BLOCK: return TS_BLOCK; 488 case CONSTRUCTOR: return TS_CONSTRUCTOR; 489 case TREE_BINFO: return TS_BINFO; 490 case OMP_CLAUSE: return TS_OMP_CLAUSE; 491 case OPTIMIZATION_NODE: return TS_OPTIMIZATION; 492 case TARGET_OPTION_NODE: return TS_TARGET_OPTION; 493 494 default: 495 gcc_unreachable (); 496 } 497 } 498 499 500 /* Initialize tree_contains_struct to describe the hierarchy of tree 501 nodes. */ 502 503 static void 504 initialize_tree_contains_struct (void) 505 { 506 unsigned i; 507 508 for (i = ERROR_MARK; i < LAST_AND_UNUSED_TREE_CODE; i++) 509 { 510 enum tree_code code; 511 enum tree_node_structure_enum ts_code; 512 513 code = (enum tree_code) i; 514 ts_code = tree_node_structure_for_code (code); 515 516 /* Mark the TS structure itself. */ 517 tree_contains_struct[code][ts_code] = 1; 518 519 /* Mark all the structures that TS is derived from. */ 520 switch (ts_code) 521 { 522 case TS_TYPED: 523 case TS_BLOCK: 524 case TS_OPTIMIZATION: 525 case TS_TARGET_OPTION: 526 MARK_TS_BASE (code); 527 break; 528 529 case TS_COMMON: 530 case TS_INT_CST: 531 case TS_POLY_INT_CST: 532 case TS_REAL_CST: 533 case TS_FIXED_CST: 534 case TS_VECTOR: 535 case TS_STRING: 536 case TS_COMPLEX: 537 case TS_SSA_NAME: 538 case TS_CONSTRUCTOR: 539 case TS_EXP: 540 case TS_STATEMENT_LIST: 541 MARK_TS_TYPED (code); 542 break; 543 544 case TS_IDENTIFIER: 545 case TS_DECL_MINIMAL: 546 case TS_TYPE_COMMON: 547 case TS_LIST: 548 case TS_VEC: 549 case TS_BINFO: 550 case TS_OMP_CLAUSE: 551 MARK_TS_COMMON (code); 552 break; 553 554 case TS_TYPE_WITH_LANG_SPECIFIC: 555 MARK_TS_TYPE_COMMON (code); 556 break; 557 558 case TS_TYPE_NON_COMMON: 559 MARK_TS_TYPE_WITH_LANG_SPECIFIC (code); 560 break; 561 562 case TS_DECL_COMMON: 563 MARK_TS_DECL_MINIMAL (code); 564 break; 565 566 case TS_DECL_WRTL: 567 case TS_CONST_DECL: 568 MARK_TS_DECL_COMMON (code); 569 break; 570 571 case TS_DECL_NON_COMMON: 572 MARK_TS_DECL_WITH_VIS (code); 573 break; 574 575 case TS_DECL_WITH_VIS: 576 case TS_PARM_DECL: 577 case TS_LABEL_DECL: 578 case TS_RESULT_DECL: 579 MARK_TS_DECL_WRTL (code); 580 break; 581 582 case TS_FIELD_DECL: 583 MARK_TS_DECL_COMMON (code); 584 break; 585 586 case TS_VAR_DECL: 587 MARK_TS_DECL_WITH_VIS (code); 588 break; 589 590 case TS_TYPE_DECL: 591 case TS_FUNCTION_DECL: 592 MARK_TS_DECL_NON_COMMON (code); 593 break; 594 595 case TS_TRANSLATION_UNIT_DECL: 596 MARK_TS_DECL_COMMON (code); 597 break; 598 599 default: 600 gcc_unreachable (); 601 } 602 } 603 604 /* Basic consistency checks for attributes used in fold. */ 605 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_NON_COMMON]); 606 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_NON_COMMON]); 607 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_COMMON]); 608 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_COMMON]); 609 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_COMMON]); 610 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_COMMON]); 611 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_COMMON]); 612 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_COMMON]); 613 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_COMMON]); 614 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_COMMON]); 615 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_COMMON]); 616 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WRTL]); 617 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_WRTL]); 618 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_WRTL]); 619 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WRTL]); 620 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_WRTL]); 621 gcc_assert (tree_contains_struct[CONST_DECL][TS_DECL_MINIMAL]); 622 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_MINIMAL]); 623 gcc_assert (tree_contains_struct[PARM_DECL][TS_DECL_MINIMAL]); 624 gcc_assert (tree_contains_struct[RESULT_DECL][TS_DECL_MINIMAL]); 625 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_MINIMAL]); 626 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_MINIMAL]); 627 gcc_assert (tree_contains_struct[TRANSLATION_UNIT_DECL][TS_DECL_MINIMAL]); 628 gcc_assert (tree_contains_struct[LABEL_DECL][TS_DECL_MINIMAL]); 629 gcc_assert (tree_contains_struct[FIELD_DECL][TS_DECL_MINIMAL]); 630 gcc_assert (tree_contains_struct[VAR_DECL][TS_DECL_WITH_VIS]); 631 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_DECL_WITH_VIS]); 632 gcc_assert (tree_contains_struct[TYPE_DECL][TS_DECL_WITH_VIS]); 633 gcc_assert (tree_contains_struct[VAR_DECL][TS_VAR_DECL]); 634 gcc_assert (tree_contains_struct[FIELD_DECL][TS_FIELD_DECL]); 635 gcc_assert (tree_contains_struct[PARM_DECL][TS_PARM_DECL]); 636 gcc_assert (tree_contains_struct[LABEL_DECL][TS_LABEL_DECL]); 637 gcc_assert (tree_contains_struct[RESULT_DECL][TS_RESULT_DECL]); 638 gcc_assert (tree_contains_struct[CONST_DECL][TS_CONST_DECL]); 639 gcc_assert (tree_contains_struct[TYPE_DECL][TS_TYPE_DECL]); 640 gcc_assert (tree_contains_struct[FUNCTION_DECL][TS_FUNCTION_DECL]); 641 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_MINIMAL]); 642 gcc_assert (tree_contains_struct[IMPORTED_DECL][TS_DECL_COMMON]); 643 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_MINIMAL]); 644 gcc_assert (tree_contains_struct[NAMELIST_DECL][TS_DECL_COMMON]); 645 } 646 647 648 /* Init tree.c. */ 649 650 void 651 init_ttree (void) 652 { 653 /* Initialize the hash table of types. */ 654 type_hash_table 655 = hash_table<type_cache_hasher>::create_ggc (TYPE_HASH_INITIAL_SIZE); 656 657 debug_expr_for_decl 658 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512); 659 660 value_expr_for_decl 661 = hash_table<tree_decl_map_cache_hasher>::create_ggc (512); 662 663 int_cst_hash_table = hash_table<int_cst_hasher>::create_ggc (1024); 664 665 poly_int_cst_hash_table = hash_table<poly_int_cst_hasher>::create_ggc (64); 666 667 int_cst_node = make_int_cst (1, 1); 668 669 cl_option_hash_table = hash_table<cl_option_hasher>::create_ggc (64); 670 671 cl_optimization_node = make_node (OPTIMIZATION_NODE); 672 cl_target_option_node = make_node (TARGET_OPTION_NODE); 673 674 /* Initialize the tree_contains_struct array. */ 675 initialize_tree_contains_struct (); 676 lang_hooks.init_ts (); 677 } 678 679 680 /* The name of the object as the assembler will see it (but before any 681 translations made by ASM_OUTPUT_LABELREF). Often this is the same 682 as DECL_NAME. It is an IDENTIFIER_NODE. */ 683 tree 684 decl_assembler_name (tree decl) 685 { 686 if (!DECL_ASSEMBLER_NAME_SET_P (decl)) 687 lang_hooks.set_decl_assembler_name (decl); 688 return DECL_ASSEMBLER_NAME_RAW (decl); 689 } 690 691 /* The DECL_ASSEMBLER_NAME_RAW of DECL is being explicitly set to NAME 692 (either of which may be NULL). Inform the FE, if this changes the 693 name. */ 694 695 void 696 overwrite_decl_assembler_name (tree decl, tree name) 697 { 698 if (DECL_ASSEMBLER_NAME_RAW (decl) != name) 699 lang_hooks.overwrite_decl_assembler_name (decl, name); 700 } 701 702 /* When the target supports COMDAT groups, this indicates which group the 703 DECL is associated with. This can be either an IDENTIFIER_NODE or a 704 decl, in which case its DECL_ASSEMBLER_NAME identifies the group. */ 705 tree 706 decl_comdat_group (const_tree node) 707 { 708 struct symtab_node *snode = symtab_node::get (node); 709 if (!snode) 710 return NULL; 711 return snode->get_comdat_group (); 712 } 713 714 /* Likewise, but make sure it's been reduced to an IDENTIFIER_NODE. */ 715 tree 716 decl_comdat_group_id (const_tree node) 717 { 718 struct symtab_node *snode = symtab_node::get (node); 719 if (!snode) 720 return NULL; 721 return snode->get_comdat_group_id (); 722 } 723 724 /* When the target supports named section, return its name as IDENTIFIER_NODE 725 or NULL if it is in no section. */ 726 const char * 727 decl_section_name (const_tree node) 728 { 729 struct symtab_node *snode = symtab_node::get (node); 730 if (!snode) 731 return NULL; 732 return snode->get_section (); 733 } 734 735 /* Set section name of NODE to VALUE (that is expected to be 736 identifier node) */ 737 void 738 set_decl_section_name (tree node, const char *value) 739 { 740 struct symtab_node *snode; 741 742 if (value == NULL) 743 { 744 snode = symtab_node::get (node); 745 if (!snode) 746 return; 747 } 748 else if (VAR_P (node)) 749 snode = varpool_node::get_create (node); 750 else 751 snode = cgraph_node::get_create (node); 752 snode->set_section (value); 753 } 754 755 /* Return TLS model of a variable NODE. */ 756 enum tls_model 757 decl_tls_model (const_tree node) 758 { 759 struct varpool_node *snode = varpool_node::get (node); 760 if (!snode) 761 return TLS_MODEL_NONE; 762 return snode->tls_model; 763 } 764 765 /* Set TLS model of variable NODE to MODEL. */ 766 void 767 set_decl_tls_model (tree node, enum tls_model model) 768 { 769 struct varpool_node *vnode; 770 771 if (model == TLS_MODEL_NONE) 772 { 773 vnode = varpool_node::get (node); 774 if (!vnode) 775 return; 776 } 777 else 778 vnode = varpool_node::get_create (node); 779 vnode->tls_model = model; 780 } 781 782 /* Compute the number of bytes occupied by a tree with code CODE. 783 This function cannot be used for nodes that have variable sizes, 784 including TREE_VEC, INTEGER_CST, STRING_CST, and CALL_EXPR. */ 785 size_t 786 tree_code_size (enum tree_code code) 787 { 788 switch (TREE_CODE_CLASS (code)) 789 { 790 case tcc_declaration: /* A decl node */ 791 switch (code) 792 { 793 case FIELD_DECL: return sizeof (tree_field_decl); 794 case PARM_DECL: return sizeof (tree_parm_decl); 795 case VAR_DECL: return sizeof (tree_var_decl); 796 case LABEL_DECL: return sizeof (tree_label_decl); 797 case RESULT_DECL: return sizeof (tree_result_decl); 798 case CONST_DECL: return sizeof (tree_const_decl); 799 case TYPE_DECL: return sizeof (tree_type_decl); 800 case FUNCTION_DECL: return sizeof (tree_function_decl); 801 case DEBUG_EXPR_DECL: return sizeof (tree_decl_with_rtl); 802 case TRANSLATION_UNIT_DECL: return sizeof (tree_translation_unit_decl); 803 case NAMESPACE_DECL: 804 case IMPORTED_DECL: 805 case NAMELIST_DECL: return sizeof (tree_decl_non_common); 806 default: 807 gcc_checking_assert (code >= NUM_TREE_CODES); 808 return lang_hooks.tree_size (code); 809 } 810 811 case tcc_type: /* a type node */ 812 switch (code) 813 { 814 case OFFSET_TYPE: 815 case ENUMERAL_TYPE: 816 case BOOLEAN_TYPE: 817 case INTEGER_TYPE: 818 case REAL_TYPE: 819 case POINTER_TYPE: 820 case REFERENCE_TYPE: 821 case NULLPTR_TYPE: 822 case FIXED_POINT_TYPE: 823 case COMPLEX_TYPE: 824 case VECTOR_TYPE: 825 case ARRAY_TYPE: 826 case RECORD_TYPE: 827 case UNION_TYPE: 828 case QUAL_UNION_TYPE: 829 case VOID_TYPE: 830 case POINTER_BOUNDS_TYPE: 831 case FUNCTION_TYPE: 832 case METHOD_TYPE: 833 case LANG_TYPE: return sizeof (tree_type_non_common); 834 default: 835 gcc_checking_assert (code >= NUM_TREE_CODES); 836 return lang_hooks.tree_size (code); 837 } 838 839 case tcc_reference: /* a reference */ 840 case tcc_expression: /* an expression */ 841 case tcc_statement: /* an expression with side effects */ 842 case tcc_comparison: /* a comparison expression */ 843 case tcc_unary: /* a unary arithmetic expression */ 844 case tcc_binary: /* a binary arithmetic expression */ 845 return (sizeof (struct tree_exp) 846 + (TREE_CODE_LENGTH (code) - 1) * sizeof (tree)); 847 848 case tcc_constant: /* a constant */ 849 switch (code) 850 { 851 case VOID_CST: return sizeof (tree_typed); 852 case INTEGER_CST: gcc_unreachable (); 853 case POLY_INT_CST: return sizeof (tree_poly_int_cst); 854 case REAL_CST: return sizeof (tree_real_cst); 855 case FIXED_CST: return sizeof (tree_fixed_cst); 856 case COMPLEX_CST: return sizeof (tree_complex); 857 case VECTOR_CST: gcc_unreachable (); 858 case STRING_CST: gcc_unreachable (); 859 default: 860 gcc_checking_assert (code >= NUM_TREE_CODES); 861 return lang_hooks.tree_size (code); 862 } 863 864 case tcc_exceptional: /* something random, like an identifier. */ 865 switch (code) 866 { 867 case IDENTIFIER_NODE: return lang_hooks.identifier_size; 868 case TREE_LIST: return sizeof (tree_list); 869 870 case ERROR_MARK: 871 case PLACEHOLDER_EXPR: return sizeof (tree_common); 872 873 case TREE_VEC: gcc_unreachable (); 874 case OMP_CLAUSE: gcc_unreachable (); 875 876 case SSA_NAME: return sizeof (tree_ssa_name); 877 878 case STATEMENT_LIST: return sizeof (tree_statement_list); 879 case BLOCK: return sizeof (struct tree_block); 880 case CONSTRUCTOR: return sizeof (tree_constructor); 881 case OPTIMIZATION_NODE: return sizeof (tree_optimization_option); 882 case TARGET_OPTION_NODE: return sizeof (tree_target_option); 883 884 default: 885 gcc_checking_assert (code >= NUM_TREE_CODES); 886 return lang_hooks.tree_size (code); 887 } 888 889 default: 890 gcc_unreachable (); 891 } 892 } 893 894 /* Compute the number of bytes occupied by NODE. This routine only 895 looks at TREE_CODE, except for those nodes that have variable sizes. */ 896 size_t 897 tree_size (const_tree node) 898 { 899 const enum tree_code code = TREE_CODE (node); 900 switch (code) 901 { 902 case INTEGER_CST: 903 return (sizeof (struct tree_int_cst) 904 + (TREE_INT_CST_EXT_NUNITS (node) - 1) * sizeof (HOST_WIDE_INT)); 905 906 case TREE_BINFO: 907 return (offsetof (struct tree_binfo, base_binfos) 908 + vec<tree, va_gc> 909 ::embedded_size (BINFO_N_BASE_BINFOS (node))); 910 911 case TREE_VEC: 912 return (sizeof (struct tree_vec) 913 + (TREE_VEC_LENGTH (node) - 1) * sizeof (tree)); 914 915 case VECTOR_CST: 916 return (sizeof (struct tree_vector) 917 + (vector_cst_encoded_nelts (node) - 1) * sizeof (tree)); 918 919 case STRING_CST: 920 return TREE_STRING_LENGTH (node) + offsetof (struct tree_string, str) + 1; 921 922 case OMP_CLAUSE: 923 return (sizeof (struct tree_omp_clause) 924 + (omp_clause_num_ops[OMP_CLAUSE_CODE (node)] - 1) 925 * sizeof (tree)); 926 927 default: 928 if (TREE_CODE_CLASS (code) == tcc_vl_exp) 929 return (sizeof (struct tree_exp) 930 + (VL_EXP_OPERAND_LENGTH (node) - 1) * sizeof (tree)); 931 else 932 return tree_code_size (code); 933 } 934 } 935 936 /* Return tree node kind based on tree CODE. */ 937 938 static tree_node_kind 939 get_stats_node_kind (enum tree_code code) 940 { 941 enum tree_code_class type = TREE_CODE_CLASS (code); 942 943 switch (type) 944 { 945 case tcc_declaration: /* A decl node */ 946 return d_kind; 947 case tcc_type: /* a type node */ 948 return t_kind; 949 case tcc_statement: /* an expression with side effects */ 950 return s_kind; 951 case tcc_reference: /* a reference */ 952 return r_kind; 953 case tcc_expression: /* an expression */ 954 case tcc_comparison: /* a comparison expression */ 955 case tcc_unary: /* a unary arithmetic expression */ 956 case tcc_binary: /* a binary arithmetic expression */ 957 return e_kind; 958 case tcc_constant: /* a constant */ 959 return c_kind; 960 case tcc_exceptional: /* something random, like an identifier. */ 961 switch (code) 962 { 963 case IDENTIFIER_NODE: 964 return id_kind; 965 case TREE_VEC: 966 return vec_kind; 967 case TREE_BINFO: 968 return binfo_kind; 969 case SSA_NAME: 970 return ssa_name_kind; 971 case BLOCK: 972 return b_kind; 973 case CONSTRUCTOR: 974 return constr_kind; 975 case OMP_CLAUSE: 976 return omp_clause_kind; 977 default: 978 return x_kind; 979 } 980 break; 981 case tcc_vl_exp: 982 return e_kind; 983 default: 984 gcc_unreachable (); 985 } 986 } 987 988 /* Record interesting allocation statistics for a tree node with CODE 989 and LENGTH. */ 990 991 static void 992 record_node_allocation_statistics (enum tree_code code, size_t length) 993 { 994 if (!GATHER_STATISTICS) 995 return; 996 997 tree_node_kind kind = get_stats_node_kind (code); 998 999 tree_code_counts[(int) code]++; 1000 tree_node_counts[(int) kind]++; 1001 tree_node_sizes[(int) kind] += length; 1002 } 1003 1004 /* Allocate and return a new UID from the DECL_UID namespace. */ 1005 1006 int 1007 allocate_decl_uid (void) 1008 { 1009 return next_decl_uid++; 1010 } 1011 1012 /* Return a newly allocated node of code CODE. For decl and type 1013 nodes, some other fields are initialized. The rest of the node is 1014 initialized to zero. This function cannot be used for TREE_VEC, 1015 INTEGER_CST or OMP_CLAUSE nodes, which is enforced by asserts in 1016 tree_code_size. 1017 1018 Achoo! I got a code in the node. */ 1019 1020 tree 1021 make_node (enum tree_code code MEM_STAT_DECL) 1022 { 1023 tree t; 1024 enum tree_code_class type = TREE_CODE_CLASS (code); 1025 size_t length = tree_code_size (code); 1026 1027 record_node_allocation_statistics (code, length); 1028 1029 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 1030 TREE_SET_CODE (t, code); 1031 1032 switch (type) 1033 { 1034 case tcc_statement: 1035 if (code != DEBUG_BEGIN_STMT) 1036 TREE_SIDE_EFFECTS (t) = 1; 1037 break; 1038 1039 case tcc_declaration: 1040 if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON)) 1041 { 1042 if (code == FUNCTION_DECL) 1043 { 1044 SET_DECL_ALIGN (t, FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY)); 1045 SET_DECL_MODE (t, FUNCTION_MODE); 1046 } 1047 else 1048 SET_DECL_ALIGN (t, 1); 1049 } 1050 DECL_SOURCE_LOCATION (t) = input_location; 1051 if (TREE_CODE (t) == DEBUG_EXPR_DECL) 1052 DECL_UID (t) = --next_debug_decl_uid; 1053 else 1054 { 1055 DECL_UID (t) = allocate_decl_uid (); 1056 SET_DECL_PT_UID (t, -1); 1057 } 1058 if (TREE_CODE (t) == LABEL_DECL) 1059 LABEL_DECL_UID (t) = -1; 1060 1061 break; 1062 1063 case tcc_type: 1064 TYPE_UID (t) = next_type_uid++; 1065 SET_TYPE_ALIGN (t, BITS_PER_UNIT); 1066 TYPE_USER_ALIGN (t) = 0; 1067 TYPE_MAIN_VARIANT (t) = t; 1068 TYPE_CANONICAL (t) = t; 1069 1070 /* Default to no attributes for type, but let target change that. */ 1071 TYPE_ATTRIBUTES (t) = NULL_TREE; 1072 targetm.set_default_type_attributes (t); 1073 1074 /* We have not yet computed the alias set for this type. */ 1075 TYPE_ALIAS_SET (t) = -1; 1076 break; 1077 1078 case tcc_constant: 1079 TREE_CONSTANT (t) = 1; 1080 break; 1081 1082 case tcc_expression: 1083 switch (code) 1084 { 1085 case INIT_EXPR: 1086 case MODIFY_EXPR: 1087 case VA_ARG_EXPR: 1088 case PREDECREMENT_EXPR: 1089 case PREINCREMENT_EXPR: 1090 case POSTDECREMENT_EXPR: 1091 case POSTINCREMENT_EXPR: 1092 /* All of these have side-effects, no matter what their 1093 operands are. */ 1094 TREE_SIDE_EFFECTS (t) = 1; 1095 break; 1096 1097 default: 1098 break; 1099 } 1100 break; 1101 1102 case tcc_exceptional: 1103 switch (code) 1104 { 1105 case TARGET_OPTION_NODE: 1106 TREE_TARGET_OPTION(t) 1107 = ggc_cleared_alloc<struct cl_target_option> (); 1108 break; 1109 1110 case OPTIMIZATION_NODE: 1111 TREE_OPTIMIZATION (t) 1112 = ggc_cleared_alloc<struct cl_optimization> (); 1113 break; 1114 1115 default: 1116 break; 1117 } 1118 break; 1119 1120 default: 1121 /* Other classes need no special treatment. */ 1122 break; 1123 } 1124 1125 return t; 1126 } 1127 1128 /* Free tree node. */ 1129 1130 void 1131 free_node (tree node) 1132 { 1133 enum tree_code code = TREE_CODE (node); 1134 if (GATHER_STATISTICS) 1135 { 1136 enum tree_node_kind kind = get_stats_node_kind (code); 1137 1138 gcc_checking_assert (tree_code_counts[(int) TREE_CODE (node)] != 0); 1139 gcc_checking_assert (tree_node_counts[(int) kind] != 0); 1140 gcc_checking_assert (tree_node_sizes[(int) kind] >= tree_size (node)); 1141 1142 tree_code_counts[(int) TREE_CODE (node)]--; 1143 tree_node_counts[(int) kind]--; 1144 tree_node_sizes[(int) kind] -= tree_size (node); 1145 } 1146 if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) 1147 vec_free (CONSTRUCTOR_ELTS (node)); 1148 else if (code == BLOCK) 1149 vec_free (BLOCK_NONLOCALIZED_VARS (node)); 1150 else if (code == TREE_BINFO) 1151 vec_free (BINFO_BASE_ACCESSES (node)); 1152 ggc_free (node); 1153 } 1154 1155 /* Return a new node with the same contents as NODE except that its 1156 TREE_CHAIN, if it has one, is zero and it has a fresh uid. */ 1157 1158 tree 1159 copy_node (tree node MEM_STAT_DECL) 1160 { 1161 tree t; 1162 enum tree_code code = TREE_CODE (node); 1163 size_t length; 1164 1165 gcc_assert (code != STATEMENT_LIST); 1166 1167 length = tree_size (node); 1168 record_node_allocation_statistics (code, length); 1169 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT); 1170 memcpy (t, node, length); 1171 1172 if (CODE_CONTAINS_STRUCT (code, TS_COMMON)) 1173 TREE_CHAIN (t) = 0; 1174 TREE_ASM_WRITTEN (t) = 0; 1175 TREE_VISITED (t) = 0; 1176 1177 if (TREE_CODE_CLASS (code) == tcc_declaration) 1178 { 1179 if (code == DEBUG_EXPR_DECL) 1180 DECL_UID (t) = --next_debug_decl_uid; 1181 else 1182 { 1183 DECL_UID (t) = allocate_decl_uid (); 1184 if (DECL_PT_UID_SET_P (node)) 1185 SET_DECL_PT_UID (t, DECL_PT_UID (node)); 1186 } 1187 if ((TREE_CODE (node) == PARM_DECL || VAR_P (node)) 1188 && DECL_HAS_VALUE_EXPR_P (node)) 1189 { 1190 SET_DECL_VALUE_EXPR (t, DECL_VALUE_EXPR (node)); 1191 DECL_HAS_VALUE_EXPR_P (t) = 1; 1192 } 1193 /* DECL_DEBUG_EXPR is copied explicitely by callers. */ 1194 if (VAR_P (node)) 1195 { 1196 DECL_HAS_DEBUG_EXPR_P (t) = 0; 1197 t->decl_with_vis.symtab_node = NULL; 1198 } 1199 if (VAR_P (node) && DECL_HAS_INIT_PRIORITY_P (node)) 1200 { 1201 SET_DECL_INIT_PRIORITY (t, DECL_INIT_PRIORITY (node)); 1202 DECL_HAS_INIT_PRIORITY_P (t) = 1; 1203 } 1204 if (TREE_CODE (node) == FUNCTION_DECL) 1205 { 1206 DECL_STRUCT_FUNCTION (t) = NULL; 1207 t->decl_with_vis.symtab_node = NULL; 1208 } 1209 } 1210 else if (TREE_CODE_CLASS (code) == tcc_type) 1211 { 1212 TYPE_UID (t) = next_type_uid++; 1213 /* The following is so that the debug code for 1214 the copy is different from the original type. 1215 The two statements usually duplicate each other 1216 (because they clear fields of the same union), 1217 but the optimizer should catch that. */ 1218 TYPE_SYMTAB_ADDRESS (t) = 0; 1219 TYPE_SYMTAB_DIE (t) = 0; 1220 1221 /* Do not copy the values cache. */ 1222 if (TYPE_CACHED_VALUES_P (t)) 1223 { 1224 TYPE_CACHED_VALUES_P (t) = 0; 1225 TYPE_CACHED_VALUES (t) = NULL_TREE; 1226 } 1227 } 1228 else if (code == TARGET_OPTION_NODE) 1229 { 1230 TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>(); 1231 memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node), 1232 sizeof (struct cl_target_option)); 1233 } 1234 else if (code == OPTIMIZATION_NODE) 1235 { 1236 TREE_OPTIMIZATION (t) = ggc_alloc<struct cl_optimization>(); 1237 memcpy (TREE_OPTIMIZATION (t), TREE_OPTIMIZATION (node), 1238 sizeof (struct cl_optimization)); 1239 } 1240 1241 return t; 1242 } 1243 1244 /* Return a copy of a chain of nodes, chained through the TREE_CHAIN field. 1245 For example, this can copy a list made of TREE_LIST nodes. */ 1246 1247 tree 1248 copy_list (tree list) 1249 { 1250 tree head; 1251 tree prev, next; 1252 1253 if (list == 0) 1254 return 0; 1255 1256 head = prev = copy_node (list); 1257 next = TREE_CHAIN (list); 1258 while (next) 1259 { 1260 TREE_CHAIN (prev) = copy_node (next); 1261 prev = TREE_CHAIN (prev); 1262 next = TREE_CHAIN (next); 1263 } 1264 return head; 1265 } 1266 1267 1268 /* Return the value that TREE_INT_CST_EXT_NUNITS should have for an 1269 INTEGER_CST with value CST and type TYPE. */ 1270 1271 static unsigned int 1272 get_int_cst_ext_nunits (tree type, const wide_int &cst) 1273 { 1274 gcc_checking_assert (cst.get_precision () == TYPE_PRECISION (type)); 1275 /* We need extra HWIs if CST is an unsigned integer with its 1276 upper bit set. */ 1277 if (TYPE_UNSIGNED (type) && wi::neg_p (cst)) 1278 return cst.get_precision () / HOST_BITS_PER_WIDE_INT + 1; 1279 return cst.get_len (); 1280 } 1281 1282 /* Return a new INTEGER_CST with value CST and type TYPE. */ 1283 1284 static tree 1285 build_new_int_cst (tree type, const wide_int &cst) 1286 { 1287 unsigned int len = cst.get_len (); 1288 unsigned int ext_len = get_int_cst_ext_nunits (type, cst); 1289 tree nt = make_int_cst (len, ext_len); 1290 1291 if (len < ext_len) 1292 { 1293 --ext_len; 1294 TREE_INT_CST_ELT (nt, ext_len) 1295 = zext_hwi (-1, cst.get_precision () % HOST_BITS_PER_WIDE_INT); 1296 for (unsigned int i = len; i < ext_len; ++i) 1297 TREE_INT_CST_ELT (nt, i) = -1; 1298 } 1299 else if (TYPE_UNSIGNED (type) 1300 && cst.get_precision () < len * HOST_BITS_PER_WIDE_INT) 1301 { 1302 len--; 1303 TREE_INT_CST_ELT (nt, len) 1304 = zext_hwi (cst.elt (len), 1305 cst.get_precision () % HOST_BITS_PER_WIDE_INT); 1306 } 1307 1308 for (unsigned int i = 0; i < len; i++) 1309 TREE_INT_CST_ELT (nt, i) = cst.elt (i); 1310 TREE_TYPE (nt) = type; 1311 return nt; 1312 } 1313 1314 /* Return a new POLY_INT_CST with coefficients COEFFS and type TYPE. */ 1315 1316 static tree 1317 build_new_poly_int_cst (tree type, tree (&coeffs)[NUM_POLY_INT_COEFFS] 1318 CXX_MEM_STAT_INFO) 1319 { 1320 size_t length = sizeof (struct tree_poly_int_cst); 1321 record_node_allocation_statistics (POLY_INT_CST, length); 1322 1323 tree t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 1324 1325 TREE_SET_CODE (t, POLY_INT_CST); 1326 TREE_CONSTANT (t) = 1; 1327 TREE_TYPE (t) = type; 1328 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1329 POLY_INT_CST_COEFF (t, i) = coeffs[i]; 1330 return t; 1331 } 1332 1333 /* Create a constant tree that contains CST sign-extended to TYPE. */ 1334 1335 tree 1336 build_int_cst (tree type, poly_int64 cst) 1337 { 1338 /* Support legacy code. */ 1339 if (!type) 1340 type = integer_type_node; 1341 1342 return wide_int_to_tree (type, wi::shwi (cst, TYPE_PRECISION (type))); 1343 } 1344 1345 /* Create a constant tree that contains CST zero-extended to TYPE. */ 1346 1347 tree 1348 build_int_cstu (tree type, poly_uint64 cst) 1349 { 1350 return wide_int_to_tree (type, wi::uhwi (cst, TYPE_PRECISION (type))); 1351 } 1352 1353 /* Create a constant tree that contains CST sign-extended to TYPE. */ 1354 1355 tree 1356 build_int_cst_type (tree type, poly_int64 cst) 1357 { 1358 gcc_assert (type); 1359 return wide_int_to_tree (type, wi::shwi (cst, TYPE_PRECISION (type))); 1360 } 1361 1362 /* Constructs tree in type TYPE from with value given by CST. Signedness 1363 of CST is assumed to be the same as the signedness of TYPE. */ 1364 1365 tree 1366 double_int_to_tree (tree type, double_int cst) 1367 { 1368 return wide_int_to_tree (type, widest_int::from (cst, TYPE_SIGN (type))); 1369 } 1370 1371 /* We force the wide_int CST to the range of the type TYPE by sign or 1372 zero extending it. OVERFLOWABLE indicates if we are interested in 1373 overflow of the value, when >0 we are only interested in signed 1374 overflow, for <0 we are interested in any overflow. OVERFLOWED 1375 indicates whether overflow has already occurred. CONST_OVERFLOWED 1376 indicates whether constant overflow has already occurred. We force 1377 T's value to be within range of T's type (by setting to 0 or 1 all 1378 the bits outside the type's range). We set TREE_OVERFLOWED if, 1379 OVERFLOWED is nonzero, 1380 or OVERFLOWABLE is >0 and signed overflow occurs 1381 or OVERFLOWABLE is <0 and any overflow occurs 1382 We return a new tree node for the extended wide_int. The node 1383 is shared if no overflow flags are set. */ 1384 1385 1386 tree 1387 force_fit_type (tree type, const poly_wide_int_ref &cst, 1388 int overflowable, bool overflowed) 1389 { 1390 signop sign = TYPE_SIGN (type); 1391 1392 /* If we need to set overflow flags, return a new unshared node. */ 1393 if (overflowed || !wi::fits_to_tree_p (cst, type)) 1394 { 1395 if (overflowed 1396 || overflowable < 0 1397 || (overflowable > 0 && sign == SIGNED)) 1398 { 1399 poly_wide_int tmp = poly_wide_int::from (cst, TYPE_PRECISION (type), 1400 sign); 1401 tree t; 1402 if (tmp.is_constant ()) 1403 t = build_new_int_cst (type, tmp.coeffs[0]); 1404 else 1405 { 1406 tree coeffs[NUM_POLY_INT_COEFFS]; 1407 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1408 { 1409 coeffs[i] = build_new_int_cst (type, tmp.coeffs[i]); 1410 TREE_OVERFLOW (coeffs[i]) = 1; 1411 } 1412 t = build_new_poly_int_cst (type, coeffs); 1413 } 1414 TREE_OVERFLOW (t) = 1; 1415 return t; 1416 } 1417 } 1418 1419 /* Else build a shared node. */ 1420 return wide_int_to_tree (type, cst); 1421 } 1422 1423 /* These are the hash table functions for the hash table of INTEGER_CST 1424 nodes of a sizetype. */ 1425 1426 /* Return the hash code X, an INTEGER_CST. */ 1427 1428 hashval_t 1429 int_cst_hasher::hash (tree x) 1430 { 1431 const_tree const t = x; 1432 hashval_t code = TYPE_UID (TREE_TYPE (t)); 1433 int i; 1434 1435 for (i = 0; i < TREE_INT_CST_NUNITS (t); i++) 1436 code = iterative_hash_host_wide_int (TREE_INT_CST_ELT(t, i), code); 1437 1438 return code; 1439 } 1440 1441 /* Return nonzero if the value represented by *X (an INTEGER_CST tree node) 1442 is the same as that given by *Y, which is the same. */ 1443 1444 bool 1445 int_cst_hasher::equal (tree x, tree y) 1446 { 1447 const_tree const xt = x; 1448 const_tree const yt = y; 1449 1450 if (TREE_TYPE (xt) != TREE_TYPE (yt) 1451 || TREE_INT_CST_NUNITS (xt) != TREE_INT_CST_NUNITS (yt) 1452 || TREE_INT_CST_EXT_NUNITS (xt) != TREE_INT_CST_EXT_NUNITS (yt)) 1453 return false; 1454 1455 for (int i = 0; i < TREE_INT_CST_NUNITS (xt); i++) 1456 if (TREE_INT_CST_ELT (xt, i) != TREE_INT_CST_ELT (yt, i)) 1457 return false; 1458 1459 return true; 1460 } 1461 1462 /* Create an INT_CST node of TYPE and value CST. 1463 The returned node is always shared. For small integers we use a 1464 per-type vector cache, for larger ones we use a single hash table. 1465 The value is extended from its precision according to the sign of 1466 the type to be a multiple of HOST_BITS_PER_WIDE_INT. This defines 1467 the upper bits and ensures that hashing and value equality based 1468 upon the underlying HOST_WIDE_INTs works without masking. */ 1469 1470 static tree 1471 wide_int_to_tree_1 (tree type, const wide_int_ref &pcst) 1472 { 1473 tree t; 1474 int ix = -1; 1475 int limit = 0; 1476 1477 gcc_assert (type); 1478 unsigned int prec = TYPE_PRECISION (type); 1479 signop sgn = TYPE_SIGN (type); 1480 1481 /* Verify that everything is canonical. */ 1482 int l = pcst.get_len (); 1483 if (l > 1) 1484 { 1485 if (pcst.elt (l - 1) == 0) 1486 gcc_checking_assert (pcst.elt (l - 2) < 0); 1487 if (pcst.elt (l - 1) == HOST_WIDE_INT_M1) 1488 gcc_checking_assert (pcst.elt (l - 2) >= 0); 1489 } 1490 1491 wide_int cst = wide_int::from (pcst, prec, sgn); 1492 unsigned int ext_len = get_int_cst_ext_nunits (type, cst); 1493 1494 if (ext_len == 1) 1495 { 1496 /* We just need to store a single HOST_WIDE_INT. */ 1497 HOST_WIDE_INT hwi; 1498 if (TYPE_UNSIGNED (type)) 1499 hwi = cst.to_uhwi (); 1500 else 1501 hwi = cst.to_shwi (); 1502 1503 switch (TREE_CODE (type)) 1504 { 1505 case NULLPTR_TYPE: 1506 gcc_assert (hwi == 0); 1507 /* Fallthru. */ 1508 1509 case POINTER_TYPE: 1510 case REFERENCE_TYPE: 1511 case POINTER_BOUNDS_TYPE: 1512 /* Cache NULL pointer and zero bounds. */ 1513 if (hwi == 0) 1514 { 1515 limit = 1; 1516 ix = 0; 1517 } 1518 break; 1519 1520 case BOOLEAN_TYPE: 1521 /* Cache false or true. */ 1522 limit = 2; 1523 if (IN_RANGE (hwi, 0, 1)) 1524 ix = hwi; 1525 break; 1526 1527 case INTEGER_TYPE: 1528 case OFFSET_TYPE: 1529 if (TYPE_SIGN (type) == UNSIGNED) 1530 { 1531 /* Cache [0, N). */ 1532 limit = INTEGER_SHARE_LIMIT; 1533 if (IN_RANGE (hwi, 0, INTEGER_SHARE_LIMIT - 1)) 1534 ix = hwi; 1535 } 1536 else 1537 { 1538 /* Cache [-1, N). */ 1539 limit = INTEGER_SHARE_LIMIT + 1; 1540 if (IN_RANGE (hwi, -1, INTEGER_SHARE_LIMIT - 1)) 1541 ix = hwi + 1; 1542 } 1543 break; 1544 1545 case ENUMERAL_TYPE: 1546 break; 1547 1548 default: 1549 gcc_unreachable (); 1550 } 1551 1552 if (ix >= 0) 1553 { 1554 /* Look for it in the type's vector of small shared ints. */ 1555 if (!TYPE_CACHED_VALUES_P (type)) 1556 { 1557 TYPE_CACHED_VALUES_P (type) = 1; 1558 TYPE_CACHED_VALUES (type) = make_tree_vec (limit); 1559 } 1560 1561 t = TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix); 1562 if (t) 1563 /* Make sure no one is clobbering the shared constant. */ 1564 gcc_checking_assert (TREE_TYPE (t) == type 1565 && TREE_INT_CST_NUNITS (t) == 1 1566 && TREE_INT_CST_OFFSET_NUNITS (t) == 1 1567 && TREE_INT_CST_EXT_NUNITS (t) == 1 1568 && TREE_INT_CST_ELT (t, 0) == hwi); 1569 else 1570 { 1571 /* Create a new shared int. */ 1572 t = build_new_int_cst (type, cst); 1573 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t; 1574 } 1575 } 1576 else 1577 { 1578 /* Use the cache of larger shared ints, using int_cst_node as 1579 a temporary. */ 1580 1581 TREE_INT_CST_ELT (int_cst_node, 0) = hwi; 1582 TREE_TYPE (int_cst_node) = type; 1583 1584 tree *slot = int_cst_hash_table->find_slot (int_cst_node, INSERT); 1585 t = *slot; 1586 if (!t) 1587 { 1588 /* Insert this one into the hash table. */ 1589 t = int_cst_node; 1590 *slot = t; 1591 /* Make a new node for next time round. */ 1592 int_cst_node = make_int_cst (1, 1); 1593 } 1594 } 1595 } 1596 else 1597 { 1598 /* The value either hashes properly or we drop it on the floor 1599 for the gc to take care of. There will not be enough of them 1600 to worry about. */ 1601 1602 tree nt = build_new_int_cst (type, cst); 1603 tree *slot = int_cst_hash_table->find_slot (nt, INSERT); 1604 t = *slot; 1605 if (!t) 1606 { 1607 /* Insert this one into the hash table. */ 1608 t = nt; 1609 *slot = t; 1610 } 1611 else 1612 ggc_free (nt); 1613 } 1614 1615 return t; 1616 } 1617 1618 hashval_t 1619 poly_int_cst_hasher::hash (tree t) 1620 { 1621 inchash::hash hstate; 1622 1623 hstate.add_int (TYPE_UID (TREE_TYPE (t))); 1624 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1625 hstate.add_wide_int (wi::to_wide (POLY_INT_CST_COEFF (t, i))); 1626 1627 return hstate.end (); 1628 } 1629 1630 bool 1631 poly_int_cst_hasher::equal (tree x, const compare_type &y) 1632 { 1633 if (TREE_TYPE (x) != y.first) 1634 return false; 1635 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1636 if (wi::to_wide (POLY_INT_CST_COEFF (x, i)) != y.second->coeffs[i]) 1637 return false; 1638 return true; 1639 } 1640 1641 /* Build a POLY_INT_CST node with type TYPE and with the elements in VALUES. 1642 The elements must also have type TYPE. */ 1643 1644 tree 1645 build_poly_int_cst (tree type, const poly_wide_int_ref &values) 1646 { 1647 unsigned int prec = TYPE_PRECISION (type); 1648 gcc_assert (prec <= values.coeffs[0].get_precision ()); 1649 poly_wide_int c = poly_wide_int::from (values, prec, SIGNED); 1650 1651 inchash::hash h; 1652 h.add_int (TYPE_UID (type)); 1653 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1654 h.add_wide_int (c.coeffs[i]); 1655 poly_int_cst_hasher::compare_type comp (type, &c); 1656 tree *slot = poly_int_cst_hash_table->find_slot_with_hash (comp, h.end (), 1657 INSERT); 1658 if (*slot == NULL_TREE) 1659 { 1660 tree coeffs[NUM_POLY_INT_COEFFS]; 1661 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 1662 coeffs[i] = wide_int_to_tree_1 (type, c.coeffs[i]); 1663 *slot = build_new_poly_int_cst (type, coeffs); 1664 } 1665 return *slot; 1666 } 1667 1668 /* Create a constant tree with value VALUE in type TYPE. */ 1669 1670 tree 1671 wide_int_to_tree (tree type, const poly_wide_int_ref &value) 1672 { 1673 if (value.is_constant ()) 1674 return wide_int_to_tree_1 (type, value.coeffs[0]); 1675 return build_poly_int_cst (type, value); 1676 } 1677 1678 void 1679 cache_integer_cst (tree t) 1680 { 1681 tree type = TREE_TYPE (t); 1682 int ix = -1; 1683 int limit = 0; 1684 int prec = TYPE_PRECISION (type); 1685 1686 gcc_assert (!TREE_OVERFLOW (t)); 1687 1688 switch (TREE_CODE (type)) 1689 { 1690 case NULLPTR_TYPE: 1691 gcc_assert (integer_zerop (t)); 1692 /* Fallthru. */ 1693 1694 case POINTER_TYPE: 1695 case REFERENCE_TYPE: 1696 /* Cache NULL pointer. */ 1697 if (integer_zerop (t)) 1698 { 1699 limit = 1; 1700 ix = 0; 1701 } 1702 break; 1703 1704 case BOOLEAN_TYPE: 1705 /* Cache false or true. */ 1706 limit = 2; 1707 if (wi::ltu_p (wi::to_wide (t), 2)) 1708 ix = TREE_INT_CST_ELT (t, 0); 1709 break; 1710 1711 case INTEGER_TYPE: 1712 case OFFSET_TYPE: 1713 if (TYPE_UNSIGNED (type)) 1714 { 1715 /* Cache 0..N */ 1716 limit = INTEGER_SHARE_LIMIT; 1717 1718 /* This is a little hokie, but if the prec is smaller than 1719 what is necessary to hold INTEGER_SHARE_LIMIT, then the 1720 obvious test will not get the correct answer. */ 1721 if (prec < HOST_BITS_PER_WIDE_INT) 1722 { 1723 if (tree_to_uhwi (t) < (unsigned HOST_WIDE_INT) INTEGER_SHARE_LIMIT) 1724 ix = tree_to_uhwi (t); 1725 } 1726 else if (wi::ltu_p (wi::to_wide (t), INTEGER_SHARE_LIMIT)) 1727 ix = tree_to_uhwi (t); 1728 } 1729 else 1730 { 1731 /* Cache -1..N */ 1732 limit = INTEGER_SHARE_LIMIT + 1; 1733 1734 if (integer_minus_onep (t)) 1735 ix = 0; 1736 else if (!wi::neg_p (wi::to_wide (t))) 1737 { 1738 if (prec < HOST_BITS_PER_WIDE_INT) 1739 { 1740 if (tree_to_shwi (t) < INTEGER_SHARE_LIMIT) 1741 ix = tree_to_shwi (t) + 1; 1742 } 1743 else if (wi::ltu_p (wi::to_wide (t), INTEGER_SHARE_LIMIT)) 1744 ix = tree_to_shwi (t) + 1; 1745 } 1746 } 1747 break; 1748 1749 case ENUMERAL_TYPE: 1750 break; 1751 1752 default: 1753 gcc_unreachable (); 1754 } 1755 1756 if (ix >= 0) 1757 { 1758 /* Look for it in the type's vector of small shared ints. */ 1759 if (!TYPE_CACHED_VALUES_P (type)) 1760 { 1761 TYPE_CACHED_VALUES_P (type) = 1; 1762 TYPE_CACHED_VALUES (type) = make_tree_vec (limit); 1763 } 1764 1765 gcc_assert (TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) == NULL_TREE); 1766 TREE_VEC_ELT (TYPE_CACHED_VALUES (type), ix) = t; 1767 } 1768 else 1769 { 1770 /* Use the cache of larger shared ints. */ 1771 tree *slot = int_cst_hash_table->find_slot (t, INSERT); 1772 /* If there is already an entry for the number verify it's the 1773 same. */ 1774 if (*slot) 1775 gcc_assert (wi::to_wide (tree (*slot)) == wi::to_wide (t)); 1776 else 1777 /* Otherwise insert this one into the hash table. */ 1778 *slot = t; 1779 } 1780 } 1781 1782 1783 /* Builds an integer constant in TYPE such that lowest BITS bits are ones 1784 and the rest are zeros. */ 1785 1786 tree 1787 build_low_bits_mask (tree type, unsigned bits) 1788 { 1789 gcc_assert (bits <= TYPE_PRECISION (type)); 1790 1791 return wide_int_to_tree (type, wi::mask (bits, false, 1792 TYPE_PRECISION (type))); 1793 } 1794 1795 /* Checks that X is integer constant that can be expressed in (unsigned) 1796 HOST_WIDE_INT without loss of precision. */ 1797 1798 bool 1799 cst_and_fits_in_hwi (const_tree x) 1800 { 1801 return (TREE_CODE (x) == INTEGER_CST 1802 && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x))); 1803 } 1804 1805 /* Build a newly constructed VECTOR_CST with the given values of 1806 (VECTOR_CST_)LOG2_NPATTERNS and (VECTOR_CST_)NELTS_PER_PATTERN. */ 1807 1808 tree 1809 make_vector (unsigned log2_npatterns, 1810 unsigned int nelts_per_pattern MEM_STAT_DECL) 1811 { 1812 gcc_assert (IN_RANGE (nelts_per_pattern, 1, 3)); 1813 tree t; 1814 unsigned npatterns = 1 << log2_npatterns; 1815 unsigned encoded_nelts = npatterns * nelts_per_pattern; 1816 unsigned length = (sizeof (struct tree_vector) 1817 + (encoded_nelts - 1) * sizeof (tree)); 1818 1819 record_node_allocation_statistics (VECTOR_CST, length); 1820 1821 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 1822 1823 TREE_SET_CODE (t, VECTOR_CST); 1824 TREE_CONSTANT (t) = 1; 1825 VECTOR_CST_LOG2_NPATTERNS (t) = log2_npatterns; 1826 VECTOR_CST_NELTS_PER_PATTERN (t) = nelts_per_pattern; 1827 1828 return t; 1829 } 1830 1831 /* Return a new VECTOR_CST node whose type is TYPE and whose values 1832 are extracted from V, a vector of CONSTRUCTOR_ELT. */ 1833 1834 tree 1835 build_vector_from_ctor (tree type, vec<constructor_elt, va_gc> *v) 1836 { 1837 unsigned HOST_WIDE_INT idx, nelts; 1838 tree value; 1839 1840 /* We can't construct a VECTOR_CST for a variable number of elements. */ 1841 nelts = TYPE_VECTOR_SUBPARTS (type).to_constant (); 1842 tree_vector_builder vec (type, nelts, 1); 1843 FOR_EACH_CONSTRUCTOR_VALUE (v, idx, value) 1844 { 1845 if (TREE_CODE (value) == VECTOR_CST) 1846 { 1847 /* If NELTS is constant then this must be too. */ 1848 unsigned int sub_nelts = VECTOR_CST_NELTS (value).to_constant (); 1849 for (unsigned i = 0; i < sub_nelts; ++i) 1850 vec.quick_push (VECTOR_CST_ELT (value, i)); 1851 } 1852 else 1853 vec.quick_push (value); 1854 } 1855 while (vec.length () < nelts) 1856 vec.quick_push (build_zero_cst (TREE_TYPE (type))); 1857 1858 return vec.build (); 1859 } 1860 1861 /* Build a vector of type VECTYPE where all the elements are SCs. */ 1862 tree 1863 build_vector_from_val (tree vectype, tree sc) 1864 { 1865 unsigned HOST_WIDE_INT i, nunits; 1866 1867 if (sc == error_mark_node) 1868 return sc; 1869 1870 /* Verify that the vector type is suitable for SC. Note that there 1871 is some inconsistency in the type-system with respect to restrict 1872 qualifications of pointers. Vector types always have a main-variant 1873 element type and the qualification is applied to the vector-type. 1874 So TREE_TYPE (vector-type) does not return a properly qualified 1875 vector element-type. */ 1876 gcc_checking_assert (types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (sc)), 1877 TREE_TYPE (vectype))); 1878 1879 if (CONSTANT_CLASS_P (sc)) 1880 { 1881 tree_vector_builder v (vectype, 1, 1); 1882 v.quick_push (sc); 1883 return v.build (); 1884 } 1885 else if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant (&nunits)) 1886 return fold_build1 (VEC_DUPLICATE_EXPR, vectype, sc); 1887 else 1888 { 1889 vec<constructor_elt, va_gc> *v; 1890 vec_alloc (v, nunits); 1891 for (i = 0; i < nunits; ++i) 1892 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, sc); 1893 return build_constructor (vectype, v); 1894 } 1895 } 1896 1897 /* Build a vector series of type TYPE in which element I has the value 1898 BASE + I * STEP. The result is a constant if BASE and STEP are constant 1899 and a VEC_SERIES_EXPR otherwise. */ 1900 1901 tree 1902 build_vec_series (tree type, tree base, tree step) 1903 { 1904 if (integer_zerop (step)) 1905 return build_vector_from_val (type, base); 1906 if (TREE_CODE (base) == INTEGER_CST && TREE_CODE (step) == INTEGER_CST) 1907 { 1908 tree_vector_builder builder (type, 1, 3); 1909 tree elt1 = wide_int_to_tree (TREE_TYPE (base), 1910 wi::to_wide (base) + wi::to_wide (step)); 1911 tree elt2 = wide_int_to_tree (TREE_TYPE (base), 1912 wi::to_wide (elt1) + wi::to_wide (step)); 1913 builder.quick_push (base); 1914 builder.quick_push (elt1); 1915 builder.quick_push (elt2); 1916 return builder.build (); 1917 } 1918 return build2 (VEC_SERIES_EXPR, type, base, step); 1919 } 1920 1921 /* Return a vector with the same number of units and number of bits 1922 as VEC_TYPE, but in which the elements are a linear series of unsigned 1923 integers { BASE, BASE + STEP, BASE + STEP * 2, ... }. */ 1924 1925 tree 1926 build_index_vector (tree vec_type, poly_uint64 base, poly_uint64 step) 1927 { 1928 tree index_vec_type = vec_type; 1929 tree index_elt_type = TREE_TYPE (vec_type); 1930 poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vec_type); 1931 if (!INTEGRAL_TYPE_P (index_elt_type) || !TYPE_UNSIGNED (index_elt_type)) 1932 { 1933 index_elt_type = build_nonstandard_integer_type 1934 (GET_MODE_BITSIZE (SCALAR_TYPE_MODE (index_elt_type)), true); 1935 index_vec_type = build_vector_type (index_elt_type, nunits); 1936 } 1937 1938 tree_vector_builder v (index_vec_type, 1, 3); 1939 for (unsigned int i = 0; i < 3; ++i) 1940 v.quick_push (build_int_cstu (index_elt_type, base + i * step)); 1941 return v.build (); 1942 } 1943 1944 /* Something has messed with the elements of CONSTRUCTOR C after it was built; 1945 calculate TREE_CONSTANT and TREE_SIDE_EFFECTS. */ 1946 1947 void 1948 recompute_constructor_flags (tree c) 1949 { 1950 unsigned int i; 1951 tree val; 1952 bool constant_p = true; 1953 bool side_effects_p = false; 1954 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c); 1955 1956 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val) 1957 { 1958 /* Mostly ctors will have elts that don't have side-effects, so 1959 the usual case is to scan all the elements. Hence a single 1960 loop for both const and side effects, rather than one loop 1961 each (with early outs). */ 1962 if (!TREE_CONSTANT (val)) 1963 constant_p = false; 1964 if (TREE_SIDE_EFFECTS (val)) 1965 side_effects_p = true; 1966 } 1967 1968 TREE_SIDE_EFFECTS (c) = side_effects_p; 1969 TREE_CONSTANT (c) = constant_p; 1970 } 1971 1972 /* Make sure that TREE_CONSTANT and TREE_SIDE_EFFECTS are correct for 1973 CONSTRUCTOR C. */ 1974 1975 void 1976 verify_constructor_flags (tree c) 1977 { 1978 unsigned int i; 1979 tree val; 1980 bool constant_p = TREE_CONSTANT (c); 1981 bool side_effects_p = TREE_SIDE_EFFECTS (c); 1982 vec<constructor_elt, va_gc> *vals = CONSTRUCTOR_ELTS (c); 1983 1984 FOR_EACH_CONSTRUCTOR_VALUE (vals, i, val) 1985 { 1986 if (constant_p && !TREE_CONSTANT (val)) 1987 internal_error ("non-constant element in constant CONSTRUCTOR"); 1988 if (!side_effects_p && TREE_SIDE_EFFECTS (val)) 1989 internal_error ("side-effects element in no-side-effects CONSTRUCTOR"); 1990 } 1991 } 1992 1993 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values 1994 are in the vec pointed to by VALS. */ 1995 tree 1996 build_constructor (tree type, vec<constructor_elt, va_gc> *vals) 1997 { 1998 tree c = make_node (CONSTRUCTOR); 1999 2000 TREE_TYPE (c) = type; 2001 CONSTRUCTOR_ELTS (c) = vals; 2002 2003 recompute_constructor_flags (c); 2004 2005 return c; 2006 } 2007 2008 /* Build a CONSTRUCTOR node made of a single initializer, with the specified 2009 INDEX and VALUE. */ 2010 tree 2011 build_constructor_single (tree type, tree index, tree value) 2012 { 2013 vec<constructor_elt, va_gc> *v; 2014 constructor_elt elt = {index, value}; 2015 2016 vec_alloc (v, 1); 2017 v->quick_push (elt); 2018 2019 return build_constructor (type, v); 2020 } 2021 2022 2023 /* Return a new CONSTRUCTOR node whose type is TYPE and whose values 2024 are in a list pointed to by VALS. */ 2025 tree 2026 build_constructor_from_list (tree type, tree vals) 2027 { 2028 tree t; 2029 vec<constructor_elt, va_gc> *v = NULL; 2030 2031 if (vals) 2032 { 2033 vec_alloc (v, list_length (vals)); 2034 for (t = vals; t; t = TREE_CHAIN (t)) 2035 CONSTRUCTOR_APPEND_ELT (v, TREE_PURPOSE (t), TREE_VALUE (t)); 2036 } 2037 2038 return build_constructor (type, v); 2039 } 2040 2041 /* Return a new CONSTRUCTOR node whose type is TYPE. NELTS is the number 2042 of elements, provided as index/value pairs. */ 2043 2044 tree 2045 build_constructor_va (tree type, int nelts, ...) 2046 { 2047 vec<constructor_elt, va_gc> *v = NULL; 2048 va_list p; 2049 2050 va_start (p, nelts); 2051 vec_alloc (v, nelts); 2052 while (nelts--) 2053 { 2054 tree index = va_arg (p, tree); 2055 tree value = va_arg (p, tree); 2056 CONSTRUCTOR_APPEND_ELT (v, index, value); 2057 } 2058 va_end (p); 2059 return build_constructor (type, v); 2060 } 2061 2062 /* Return a new FIXED_CST node whose type is TYPE and value is F. */ 2063 2064 tree 2065 build_fixed (tree type, FIXED_VALUE_TYPE f) 2066 { 2067 tree v; 2068 FIXED_VALUE_TYPE *fp; 2069 2070 v = make_node (FIXED_CST); 2071 fp = ggc_alloc<fixed_value> (); 2072 memcpy (fp, &f, sizeof (FIXED_VALUE_TYPE)); 2073 2074 TREE_TYPE (v) = type; 2075 TREE_FIXED_CST_PTR (v) = fp; 2076 return v; 2077 } 2078 2079 /* Return a new REAL_CST node whose type is TYPE and value is D. */ 2080 2081 tree 2082 build_real (tree type, REAL_VALUE_TYPE d) 2083 { 2084 tree v; 2085 REAL_VALUE_TYPE *dp; 2086 int overflow = 0; 2087 2088 /* ??? Used to check for overflow here via CHECK_FLOAT_TYPE. 2089 Consider doing it via real_convert now. */ 2090 2091 v = make_node (REAL_CST); 2092 dp = ggc_alloc<real_value> (); 2093 memcpy (dp, &d, sizeof (REAL_VALUE_TYPE)); 2094 2095 TREE_TYPE (v) = type; 2096 TREE_REAL_CST_PTR (v) = dp; 2097 TREE_OVERFLOW (v) = overflow; 2098 return v; 2099 } 2100 2101 /* Like build_real, but first truncate D to the type. */ 2102 2103 tree 2104 build_real_truncate (tree type, REAL_VALUE_TYPE d) 2105 { 2106 return build_real (type, real_value_truncate (TYPE_MODE (type), d)); 2107 } 2108 2109 /* Return a new REAL_CST node whose type is TYPE 2110 and whose value is the integer value of the INTEGER_CST node I. */ 2111 2112 REAL_VALUE_TYPE 2113 real_value_from_int_cst (const_tree type, const_tree i) 2114 { 2115 REAL_VALUE_TYPE d; 2116 2117 /* Clear all bits of the real value type so that we can later do 2118 bitwise comparisons to see if two values are the same. */ 2119 memset (&d, 0, sizeof d); 2120 2121 real_from_integer (&d, type ? TYPE_MODE (type) : VOIDmode, wi::to_wide (i), 2122 TYPE_SIGN (TREE_TYPE (i))); 2123 return d; 2124 } 2125 2126 /* Given a tree representing an integer constant I, return a tree 2127 representing the same value as a floating-point constant of type TYPE. */ 2128 2129 tree 2130 build_real_from_int_cst (tree type, const_tree i) 2131 { 2132 tree v; 2133 int overflow = TREE_OVERFLOW (i); 2134 2135 v = build_real (type, real_value_from_int_cst (type, i)); 2136 2137 TREE_OVERFLOW (v) |= overflow; 2138 return v; 2139 } 2140 2141 /* Return a newly constructed STRING_CST node whose value is 2142 the LEN characters at STR. 2143 Note that for a C string literal, LEN should include the trailing NUL. 2144 The TREE_TYPE is not initialized. */ 2145 2146 tree 2147 build_string (int len, const char *str) 2148 { 2149 tree s; 2150 size_t length; 2151 2152 /* Do not waste bytes provided by padding of struct tree_string. */ 2153 length = len + offsetof (struct tree_string, str) + 1; 2154 2155 record_node_allocation_statistics (STRING_CST, length); 2156 2157 s = (tree) ggc_internal_alloc (length); 2158 2159 memset (s, 0, sizeof (struct tree_typed)); 2160 TREE_SET_CODE (s, STRING_CST); 2161 TREE_CONSTANT (s) = 1; 2162 TREE_STRING_LENGTH (s) = len; 2163 memcpy (s->string.str, str, len); 2164 s->string.str[len] = '\0'; 2165 2166 return s; 2167 } 2168 2169 /* Return a newly constructed COMPLEX_CST node whose value is 2170 specified by the real and imaginary parts REAL and IMAG. 2171 Both REAL and IMAG should be constant nodes. TYPE, if specified, 2172 will be the type of the COMPLEX_CST; otherwise a new type will be made. */ 2173 2174 tree 2175 build_complex (tree type, tree real, tree imag) 2176 { 2177 tree t = make_node (COMPLEX_CST); 2178 2179 TREE_REALPART (t) = real; 2180 TREE_IMAGPART (t) = imag; 2181 TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real)); 2182 TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag); 2183 return t; 2184 } 2185 2186 /* Build a complex (inf +- 0i), such as for the result of cproj. 2187 TYPE is the complex tree type of the result. If NEG is true, the 2188 imaginary zero is negative. */ 2189 2190 tree 2191 build_complex_inf (tree type, bool neg) 2192 { 2193 REAL_VALUE_TYPE rinf, rzero = dconst0; 2194 2195 real_inf (&rinf); 2196 rzero.sign = neg; 2197 return build_complex (type, build_real (TREE_TYPE (type), rinf), 2198 build_real (TREE_TYPE (type), rzero)); 2199 } 2200 2201 /* Return the constant 1 in type TYPE. If TYPE has several elements, each 2202 element is set to 1. In particular, this is 1 + i for complex types. */ 2203 2204 tree 2205 build_each_one_cst (tree type) 2206 { 2207 if (TREE_CODE (type) == COMPLEX_TYPE) 2208 { 2209 tree scalar = build_one_cst (TREE_TYPE (type)); 2210 return build_complex (type, scalar, scalar); 2211 } 2212 else 2213 return build_one_cst (type); 2214 } 2215 2216 /* Return a constant of arithmetic type TYPE which is the 2217 multiplicative identity of the set TYPE. */ 2218 2219 tree 2220 build_one_cst (tree type) 2221 { 2222 switch (TREE_CODE (type)) 2223 { 2224 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: 2225 case POINTER_TYPE: case REFERENCE_TYPE: 2226 case OFFSET_TYPE: 2227 return build_int_cst (type, 1); 2228 2229 case REAL_TYPE: 2230 return build_real (type, dconst1); 2231 2232 case FIXED_POINT_TYPE: 2233 /* We can only generate 1 for accum types. */ 2234 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type))); 2235 return build_fixed (type, FCONST1 (TYPE_MODE (type))); 2236 2237 case VECTOR_TYPE: 2238 { 2239 tree scalar = build_one_cst (TREE_TYPE (type)); 2240 2241 return build_vector_from_val (type, scalar); 2242 } 2243 2244 case COMPLEX_TYPE: 2245 return build_complex (type, 2246 build_one_cst (TREE_TYPE (type)), 2247 build_zero_cst (TREE_TYPE (type))); 2248 2249 default: 2250 gcc_unreachable (); 2251 } 2252 } 2253 2254 /* Return an integer of type TYPE containing all 1's in as much precision as 2255 it contains, or a complex or vector whose subparts are such integers. */ 2256 2257 tree 2258 build_all_ones_cst (tree type) 2259 { 2260 if (TREE_CODE (type) == COMPLEX_TYPE) 2261 { 2262 tree scalar = build_all_ones_cst (TREE_TYPE (type)); 2263 return build_complex (type, scalar, scalar); 2264 } 2265 else 2266 return build_minus_one_cst (type); 2267 } 2268 2269 /* Return a constant of arithmetic type TYPE which is the 2270 opposite of the multiplicative identity of the set TYPE. */ 2271 2272 tree 2273 build_minus_one_cst (tree type) 2274 { 2275 switch (TREE_CODE (type)) 2276 { 2277 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: 2278 case POINTER_TYPE: case REFERENCE_TYPE: 2279 case OFFSET_TYPE: 2280 return build_int_cst (type, -1); 2281 2282 case REAL_TYPE: 2283 return build_real (type, dconstm1); 2284 2285 case FIXED_POINT_TYPE: 2286 /* We can only generate 1 for accum types. */ 2287 gcc_assert (ALL_SCALAR_ACCUM_MODE_P (TYPE_MODE (type))); 2288 return build_fixed (type, 2289 fixed_from_double_int (double_int_minus_one, 2290 SCALAR_TYPE_MODE (type))); 2291 2292 case VECTOR_TYPE: 2293 { 2294 tree scalar = build_minus_one_cst (TREE_TYPE (type)); 2295 2296 return build_vector_from_val (type, scalar); 2297 } 2298 2299 case COMPLEX_TYPE: 2300 return build_complex (type, 2301 build_minus_one_cst (TREE_TYPE (type)), 2302 build_zero_cst (TREE_TYPE (type))); 2303 2304 default: 2305 gcc_unreachable (); 2306 } 2307 } 2308 2309 /* Build 0 constant of type TYPE. This is used by constructor folding 2310 and thus the constant should be represented in memory by 2311 zero(es). */ 2312 2313 tree 2314 build_zero_cst (tree type) 2315 { 2316 switch (TREE_CODE (type)) 2317 { 2318 case INTEGER_TYPE: case ENUMERAL_TYPE: case BOOLEAN_TYPE: 2319 case POINTER_TYPE: case REFERENCE_TYPE: 2320 case OFFSET_TYPE: case NULLPTR_TYPE: 2321 return build_int_cst (type, 0); 2322 2323 case REAL_TYPE: 2324 return build_real (type, dconst0); 2325 2326 case FIXED_POINT_TYPE: 2327 return build_fixed (type, FCONST0 (TYPE_MODE (type))); 2328 2329 case VECTOR_TYPE: 2330 { 2331 tree scalar = build_zero_cst (TREE_TYPE (type)); 2332 2333 return build_vector_from_val (type, scalar); 2334 } 2335 2336 case COMPLEX_TYPE: 2337 { 2338 tree zero = build_zero_cst (TREE_TYPE (type)); 2339 2340 return build_complex (type, zero, zero); 2341 } 2342 2343 default: 2344 if (!AGGREGATE_TYPE_P (type)) 2345 return fold_convert (type, integer_zero_node); 2346 return build_constructor (type, NULL); 2347 } 2348 } 2349 2350 2351 /* Build a BINFO with LEN language slots. */ 2352 2353 tree 2354 make_tree_binfo (unsigned base_binfos MEM_STAT_DECL) 2355 { 2356 tree t; 2357 size_t length = (offsetof (struct tree_binfo, base_binfos) 2358 + vec<tree, va_gc>::embedded_size (base_binfos)); 2359 2360 record_node_allocation_statistics (TREE_BINFO, length); 2361 2362 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT); 2363 2364 memset (t, 0, offsetof (struct tree_binfo, base_binfos)); 2365 2366 TREE_SET_CODE (t, TREE_BINFO); 2367 2368 BINFO_BASE_BINFOS (t)->embedded_init (base_binfos); 2369 2370 return t; 2371 } 2372 2373 /* Create a CASE_LABEL_EXPR tree node and return it. */ 2374 2375 tree 2376 build_case_label (tree low_value, tree high_value, tree label_decl) 2377 { 2378 tree t = make_node (CASE_LABEL_EXPR); 2379 2380 TREE_TYPE (t) = void_type_node; 2381 SET_EXPR_LOCATION (t, DECL_SOURCE_LOCATION (label_decl)); 2382 2383 CASE_LOW (t) = low_value; 2384 CASE_HIGH (t) = high_value; 2385 CASE_LABEL (t) = label_decl; 2386 CASE_CHAIN (t) = NULL_TREE; 2387 2388 return t; 2389 } 2390 2391 /* Build a newly constructed INTEGER_CST node. LEN and EXT_LEN are the 2392 values of TREE_INT_CST_NUNITS and TREE_INT_CST_EXT_NUNITS respectively. 2393 The latter determines the length of the HOST_WIDE_INT vector. */ 2394 2395 tree 2396 make_int_cst (int len, int ext_len MEM_STAT_DECL) 2397 { 2398 tree t; 2399 int length = ((ext_len - 1) * sizeof (HOST_WIDE_INT) 2400 + sizeof (struct tree_int_cst)); 2401 2402 gcc_assert (len); 2403 record_node_allocation_statistics (INTEGER_CST, length); 2404 2405 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 2406 2407 TREE_SET_CODE (t, INTEGER_CST); 2408 TREE_INT_CST_NUNITS (t) = len; 2409 TREE_INT_CST_EXT_NUNITS (t) = ext_len; 2410 /* to_offset can only be applied to trees that are offset_int-sized 2411 or smaller. EXT_LEN is correct if it fits, otherwise the constant 2412 must be exactly the precision of offset_int and so LEN is correct. */ 2413 if (ext_len <= OFFSET_INT_ELTS) 2414 TREE_INT_CST_OFFSET_NUNITS (t) = ext_len; 2415 else 2416 TREE_INT_CST_OFFSET_NUNITS (t) = len; 2417 2418 TREE_CONSTANT (t) = 1; 2419 2420 return t; 2421 } 2422 2423 /* Build a newly constructed TREE_VEC node of length LEN. */ 2424 2425 tree 2426 make_tree_vec (int len MEM_STAT_DECL) 2427 { 2428 tree t; 2429 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec); 2430 2431 record_node_allocation_statistics (TREE_VEC, length); 2432 2433 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 2434 2435 TREE_SET_CODE (t, TREE_VEC); 2436 TREE_VEC_LENGTH (t) = len; 2437 2438 return t; 2439 } 2440 2441 /* Grow a TREE_VEC node to new length LEN. */ 2442 2443 tree 2444 grow_tree_vec (tree v, int len MEM_STAT_DECL) 2445 { 2446 gcc_assert (TREE_CODE (v) == TREE_VEC); 2447 2448 int oldlen = TREE_VEC_LENGTH (v); 2449 gcc_assert (len > oldlen); 2450 2451 size_t oldlength = (oldlen - 1) * sizeof (tree) + sizeof (struct tree_vec); 2452 size_t length = (len - 1) * sizeof (tree) + sizeof (struct tree_vec); 2453 2454 record_node_allocation_statistics (TREE_VEC, length - oldlength); 2455 2456 v = (tree) ggc_realloc (v, length PASS_MEM_STAT); 2457 2458 TREE_VEC_LENGTH (v) = len; 2459 2460 return v; 2461 } 2462 2463 /* Return 1 if EXPR is the constant zero, whether it is integral, float or 2464 fixed, and scalar, complex or vector. */ 2465 2466 int 2467 zerop (const_tree expr) 2468 { 2469 return (integer_zerop (expr) 2470 || real_zerop (expr) 2471 || fixed_zerop (expr)); 2472 } 2473 2474 /* Return 1 if EXPR is the integer constant zero or a complex constant 2475 of zero. */ 2476 2477 int 2478 integer_zerop (const_tree expr) 2479 { 2480 switch (TREE_CODE (expr)) 2481 { 2482 case INTEGER_CST: 2483 return wi::to_wide (expr) == 0; 2484 case COMPLEX_CST: 2485 return (integer_zerop (TREE_REALPART (expr)) 2486 && integer_zerop (TREE_IMAGPART (expr))); 2487 case VECTOR_CST: 2488 return (VECTOR_CST_NPATTERNS (expr) == 1 2489 && VECTOR_CST_DUPLICATE_P (expr) 2490 && integer_zerop (VECTOR_CST_ENCODED_ELT (expr, 0))); 2491 default: 2492 return false; 2493 } 2494 } 2495 2496 /* Return 1 if EXPR is the integer constant one or the corresponding 2497 complex constant. */ 2498 2499 int 2500 integer_onep (const_tree expr) 2501 { 2502 switch (TREE_CODE (expr)) 2503 { 2504 case INTEGER_CST: 2505 return wi::eq_p (wi::to_widest (expr), 1); 2506 case COMPLEX_CST: 2507 return (integer_onep (TREE_REALPART (expr)) 2508 && integer_zerop (TREE_IMAGPART (expr))); 2509 case VECTOR_CST: 2510 return (VECTOR_CST_NPATTERNS (expr) == 1 2511 && VECTOR_CST_DUPLICATE_P (expr) 2512 && integer_onep (VECTOR_CST_ENCODED_ELT (expr, 0))); 2513 default: 2514 return false; 2515 } 2516 } 2517 2518 /* Return 1 if EXPR is the integer constant one. For complex and vector, 2519 return 1 if every piece is the integer constant one. */ 2520 2521 int 2522 integer_each_onep (const_tree expr) 2523 { 2524 if (TREE_CODE (expr) == COMPLEX_CST) 2525 return (integer_onep (TREE_REALPART (expr)) 2526 && integer_onep (TREE_IMAGPART (expr))); 2527 else 2528 return integer_onep (expr); 2529 } 2530 2531 /* Return 1 if EXPR is an integer containing all 1's in as much precision as 2532 it contains, or a complex or vector whose subparts are such integers. */ 2533 2534 int 2535 integer_all_onesp (const_tree expr) 2536 { 2537 if (TREE_CODE (expr) == COMPLEX_CST 2538 && integer_all_onesp (TREE_REALPART (expr)) 2539 && integer_all_onesp (TREE_IMAGPART (expr))) 2540 return 1; 2541 2542 else if (TREE_CODE (expr) == VECTOR_CST) 2543 return (VECTOR_CST_NPATTERNS (expr) == 1 2544 && VECTOR_CST_DUPLICATE_P (expr) 2545 && integer_all_onesp (VECTOR_CST_ENCODED_ELT (expr, 0))); 2546 2547 else if (TREE_CODE (expr) != INTEGER_CST) 2548 return 0; 2549 2550 return (wi::max_value (TYPE_PRECISION (TREE_TYPE (expr)), UNSIGNED) 2551 == wi::to_wide (expr)); 2552 } 2553 2554 /* Return 1 if EXPR is the integer constant minus one. */ 2555 2556 int 2557 integer_minus_onep (const_tree expr) 2558 { 2559 if (TREE_CODE (expr) == COMPLEX_CST) 2560 return (integer_all_onesp (TREE_REALPART (expr)) 2561 && integer_zerop (TREE_IMAGPART (expr))); 2562 else 2563 return integer_all_onesp (expr); 2564 } 2565 2566 /* Return 1 if EXPR is an integer constant that is a power of 2 (i.e., has only 2567 one bit on). */ 2568 2569 int 2570 integer_pow2p (const_tree expr) 2571 { 2572 if (TREE_CODE (expr) == COMPLEX_CST 2573 && integer_pow2p (TREE_REALPART (expr)) 2574 && integer_zerop (TREE_IMAGPART (expr))) 2575 return 1; 2576 2577 if (TREE_CODE (expr) != INTEGER_CST) 2578 return 0; 2579 2580 return wi::popcount (wi::to_wide (expr)) == 1; 2581 } 2582 2583 /* Return 1 if EXPR is an integer constant other than zero or a 2584 complex constant other than zero. */ 2585 2586 int 2587 integer_nonzerop (const_tree expr) 2588 { 2589 return ((TREE_CODE (expr) == INTEGER_CST 2590 && wi::to_wide (expr) != 0) 2591 || (TREE_CODE (expr) == COMPLEX_CST 2592 && (integer_nonzerop (TREE_REALPART (expr)) 2593 || integer_nonzerop (TREE_IMAGPART (expr))))); 2594 } 2595 2596 /* Return 1 if EXPR is the integer constant one. For vector, 2597 return 1 if every piece is the integer constant minus one 2598 (representing the value TRUE). */ 2599 2600 int 2601 integer_truep (const_tree expr) 2602 { 2603 if (TREE_CODE (expr) == VECTOR_CST) 2604 return integer_all_onesp (expr); 2605 return integer_onep (expr); 2606 } 2607 2608 /* Return 1 if EXPR is the fixed-point constant zero. */ 2609 2610 int 2611 fixed_zerop (const_tree expr) 2612 { 2613 return (TREE_CODE (expr) == FIXED_CST 2614 && TREE_FIXED_CST (expr).data.is_zero ()); 2615 } 2616 2617 /* Return the power of two represented by a tree node known to be a 2618 power of two. */ 2619 2620 int 2621 tree_log2 (const_tree expr) 2622 { 2623 if (TREE_CODE (expr) == COMPLEX_CST) 2624 return tree_log2 (TREE_REALPART (expr)); 2625 2626 return wi::exact_log2 (wi::to_wide (expr)); 2627 } 2628 2629 /* Similar, but return the largest integer Y such that 2 ** Y is less 2630 than or equal to EXPR. */ 2631 2632 int 2633 tree_floor_log2 (const_tree expr) 2634 { 2635 if (TREE_CODE (expr) == COMPLEX_CST) 2636 return tree_log2 (TREE_REALPART (expr)); 2637 2638 return wi::floor_log2 (wi::to_wide (expr)); 2639 } 2640 2641 /* Return number of known trailing zero bits in EXPR, or, if the value of 2642 EXPR is known to be zero, the precision of it's type. */ 2643 2644 unsigned int 2645 tree_ctz (const_tree expr) 2646 { 2647 if (!INTEGRAL_TYPE_P (TREE_TYPE (expr)) 2648 && !POINTER_TYPE_P (TREE_TYPE (expr))) 2649 return 0; 2650 2651 unsigned int ret1, ret2, prec = TYPE_PRECISION (TREE_TYPE (expr)); 2652 switch (TREE_CODE (expr)) 2653 { 2654 case INTEGER_CST: 2655 ret1 = wi::ctz (wi::to_wide (expr)); 2656 return MIN (ret1, prec); 2657 case SSA_NAME: 2658 ret1 = wi::ctz (get_nonzero_bits (expr)); 2659 return MIN (ret1, prec); 2660 case PLUS_EXPR: 2661 case MINUS_EXPR: 2662 case BIT_IOR_EXPR: 2663 case BIT_XOR_EXPR: 2664 case MIN_EXPR: 2665 case MAX_EXPR: 2666 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2667 if (ret1 == 0) 2668 return ret1; 2669 ret2 = tree_ctz (TREE_OPERAND (expr, 1)); 2670 return MIN (ret1, ret2); 2671 case POINTER_PLUS_EXPR: 2672 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2673 ret2 = tree_ctz (TREE_OPERAND (expr, 1)); 2674 /* Second operand is sizetype, which could be in theory 2675 wider than pointer's precision. Make sure we never 2676 return more than prec. */ 2677 ret2 = MIN (ret2, prec); 2678 return MIN (ret1, ret2); 2679 case BIT_AND_EXPR: 2680 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2681 ret2 = tree_ctz (TREE_OPERAND (expr, 1)); 2682 return MAX (ret1, ret2); 2683 case MULT_EXPR: 2684 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2685 ret2 = tree_ctz (TREE_OPERAND (expr, 1)); 2686 return MIN (ret1 + ret2, prec); 2687 case LSHIFT_EXPR: 2688 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2689 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1)) 2690 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec)) 2691 { 2692 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1)); 2693 return MIN (ret1 + ret2, prec); 2694 } 2695 return ret1; 2696 case RSHIFT_EXPR: 2697 if (tree_fits_uhwi_p (TREE_OPERAND (expr, 1)) 2698 && (tree_to_uhwi (TREE_OPERAND (expr, 1)) < prec)) 2699 { 2700 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2701 ret2 = tree_to_uhwi (TREE_OPERAND (expr, 1)); 2702 if (ret1 > ret2) 2703 return ret1 - ret2; 2704 } 2705 return 0; 2706 case TRUNC_DIV_EXPR: 2707 case CEIL_DIV_EXPR: 2708 case FLOOR_DIV_EXPR: 2709 case ROUND_DIV_EXPR: 2710 case EXACT_DIV_EXPR: 2711 if (TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST 2712 && tree_int_cst_sgn (TREE_OPERAND (expr, 1)) == 1) 2713 { 2714 int l = tree_log2 (TREE_OPERAND (expr, 1)); 2715 if (l >= 0) 2716 { 2717 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2718 ret2 = l; 2719 if (ret1 > ret2) 2720 return ret1 - ret2; 2721 } 2722 } 2723 return 0; 2724 CASE_CONVERT: 2725 ret1 = tree_ctz (TREE_OPERAND (expr, 0)); 2726 if (ret1 && ret1 == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0)))) 2727 ret1 = prec; 2728 return MIN (ret1, prec); 2729 case SAVE_EXPR: 2730 return tree_ctz (TREE_OPERAND (expr, 0)); 2731 case COND_EXPR: 2732 ret1 = tree_ctz (TREE_OPERAND (expr, 1)); 2733 if (ret1 == 0) 2734 return 0; 2735 ret2 = tree_ctz (TREE_OPERAND (expr, 2)); 2736 return MIN (ret1, ret2); 2737 case COMPOUND_EXPR: 2738 return tree_ctz (TREE_OPERAND (expr, 1)); 2739 case ADDR_EXPR: 2740 ret1 = get_pointer_alignment (CONST_CAST_TREE (expr)); 2741 if (ret1 > BITS_PER_UNIT) 2742 { 2743 ret1 = ctz_hwi (ret1 / BITS_PER_UNIT); 2744 return MIN (ret1, prec); 2745 } 2746 return 0; 2747 default: 2748 return 0; 2749 } 2750 } 2751 2752 /* Return 1 if EXPR is the real constant zero. Trailing zeroes matter for 2753 decimal float constants, so don't return 1 for them. */ 2754 2755 int 2756 real_zerop (const_tree expr) 2757 { 2758 switch (TREE_CODE (expr)) 2759 { 2760 case REAL_CST: 2761 return real_equal (&TREE_REAL_CST (expr), &dconst0) 2762 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))); 2763 case COMPLEX_CST: 2764 return real_zerop (TREE_REALPART (expr)) 2765 && real_zerop (TREE_IMAGPART (expr)); 2766 case VECTOR_CST: 2767 { 2768 /* Don't simply check for a duplicate because the predicate 2769 accepts both +0.0 and -0.0. */ 2770 unsigned count = vector_cst_encoded_nelts (expr); 2771 for (unsigned int i = 0; i < count; ++i) 2772 if (!real_zerop (VECTOR_CST_ENCODED_ELT (expr, i))) 2773 return false; 2774 return true; 2775 } 2776 default: 2777 return false; 2778 } 2779 } 2780 2781 /* Return 1 if EXPR is the real constant one in real or complex form. 2782 Trailing zeroes matter for decimal float constants, so don't return 2783 1 for them. */ 2784 2785 int 2786 real_onep (const_tree expr) 2787 { 2788 switch (TREE_CODE (expr)) 2789 { 2790 case REAL_CST: 2791 return real_equal (&TREE_REAL_CST (expr), &dconst1) 2792 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))); 2793 case COMPLEX_CST: 2794 return real_onep (TREE_REALPART (expr)) 2795 && real_zerop (TREE_IMAGPART (expr)); 2796 case VECTOR_CST: 2797 return (VECTOR_CST_NPATTERNS (expr) == 1 2798 && VECTOR_CST_DUPLICATE_P (expr) 2799 && real_onep (VECTOR_CST_ENCODED_ELT (expr, 0))); 2800 default: 2801 return false; 2802 } 2803 } 2804 2805 /* Return 1 if EXPR is the real constant minus one. Trailing zeroes 2806 matter for decimal float constants, so don't return 1 for them. */ 2807 2808 int 2809 real_minus_onep (const_tree expr) 2810 { 2811 switch (TREE_CODE (expr)) 2812 { 2813 case REAL_CST: 2814 return real_equal (&TREE_REAL_CST (expr), &dconstm1) 2815 && !(DECIMAL_FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (expr)))); 2816 case COMPLEX_CST: 2817 return real_minus_onep (TREE_REALPART (expr)) 2818 && real_zerop (TREE_IMAGPART (expr)); 2819 case VECTOR_CST: 2820 return (VECTOR_CST_NPATTERNS (expr) == 1 2821 && VECTOR_CST_DUPLICATE_P (expr) 2822 && real_minus_onep (VECTOR_CST_ENCODED_ELT (expr, 0))); 2823 default: 2824 return false; 2825 } 2826 } 2827 2828 /* Nonzero if EXP is a constant or a cast of a constant. */ 2829 2830 int 2831 really_constant_p (const_tree exp) 2832 { 2833 /* This is not quite the same as STRIP_NOPS. It does more. */ 2834 while (CONVERT_EXPR_P (exp) 2835 || TREE_CODE (exp) == NON_LVALUE_EXPR) 2836 exp = TREE_OPERAND (exp, 0); 2837 return TREE_CONSTANT (exp); 2838 } 2839 2840 /* Return true if T holds a polynomial pointer difference, storing it in 2841 *VALUE if so. A true return means that T's precision is no greater 2842 than 64 bits, which is the largest address space we support, so *VALUE 2843 never loses precision. However, the signedness of the result does 2844 not necessarily match the signedness of T: sometimes an unsigned type 2845 like sizetype is used to encode a value that is actually negative. */ 2846 2847 bool 2848 ptrdiff_tree_p (const_tree t, poly_int64_pod *value) 2849 { 2850 if (!t) 2851 return false; 2852 if (TREE_CODE (t) == INTEGER_CST) 2853 { 2854 if (!cst_and_fits_in_hwi (t)) 2855 return false; 2856 *value = int_cst_value (t); 2857 return true; 2858 } 2859 if (POLY_INT_CST_P (t)) 2860 { 2861 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 2862 if (!cst_and_fits_in_hwi (POLY_INT_CST_COEFF (t, i))) 2863 return false; 2864 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 2865 value->coeffs[i] = int_cst_value (POLY_INT_CST_COEFF (t, i)); 2866 return true; 2867 } 2868 return false; 2869 } 2870 2871 poly_int64 2872 tree_to_poly_int64 (const_tree t) 2873 { 2874 gcc_assert (tree_fits_poly_int64_p (t)); 2875 if (POLY_INT_CST_P (t)) 2876 return poly_int_cst_value (t).force_shwi (); 2877 return TREE_INT_CST_LOW (t); 2878 } 2879 2880 poly_uint64 2881 tree_to_poly_uint64 (const_tree t) 2882 { 2883 gcc_assert (tree_fits_poly_uint64_p (t)); 2884 if (POLY_INT_CST_P (t)) 2885 return poly_int_cst_value (t).force_uhwi (); 2886 return TREE_INT_CST_LOW (t); 2887 } 2888 2889 /* Return first list element whose TREE_VALUE is ELEM. 2890 Return 0 if ELEM is not in LIST. */ 2891 2892 tree 2893 value_member (tree elem, tree list) 2894 { 2895 while (list) 2896 { 2897 if (elem == TREE_VALUE (list)) 2898 return list; 2899 list = TREE_CHAIN (list); 2900 } 2901 return NULL_TREE; 2902 } 2903 2904 /* Return first list element whose TREE_PURPOSE is ELEM. 2905 Return 0 if ELEM is not in LIST. */ 2906 2907 tree 2908 purpose_member (const_tree elem, tree list) 2909 { 2910 while (list) 2911 { 2912 if (elem == TREE_PURPOSE (list)) 2913 return list; 2914 list = TREE_CHAIN (list); 2915 } 2916 return NULL_TREE; 2917 } 2918 2919 /* Return true if ELEM is in V. */ 2920 2921 bool 2922 vec_member (const_tree elem, vec<tree, va_gc> *v) 2923 { 2924 unsigned ix; 2925 tree t; 2926 FOR_EACH_VEC_SAFE_ELT (v, ix, t) 2927 if (elem == t) 2928 return true; 2929 return false; 2930 } 2931 2932 /* Returns element number IDX (zero-origin) of chain CHAIN, or 2933 NULL_TREE. */ 2934 2935 tree 2936 chain_index (int idx, tree chain) 2937 { 2938 for (; chain && idx > 0; --idx) 2939 chain = TREE_CHAIN (chain); 2940 return chain; 2941 } 2942 2943 /* Return nonzero if ELEM is part of the chain CHAIN. */ 2944 2945 int 2946 chain_member (const_tree elem, const_tree chain) 2947 { 2948 while (chain) 2949 { 2950 if (elem == chain) 2951 return 1; 2952 chain = DECL_CHAIN (chain); 2953 } 2954 2955 return 0; 2956 } 2957 2958 /* Return the length of a chain of nodes chained through TREE_CHAIN. 2959 We expect a null pointer to mark the end of the chain. 2960 This is the Lisp primitive `length'. */ 2961 2962 int 2963 list_length (const_tree t) 2964 { 2965 const_tree p = t; 2966 #ifdef ENABLE_TREE_CHECKING 2967 const_tree q = t; 2968 #endif 2969 int len = 0; 2970 2971 while (p) 2972 { 2973 p = TREE_CHAIN (p); 2974 #ifdef ENABLE_TREE_CHECKING 2975 if (len % 2) 2976 q = TREE_CHAIN (q); 2977 gcc_assert (p != q); 2978 #endif 2979 len++; 2980 } 2981 2982 return len; 2983 } 2984 2985 /* Returns the first FIELD_DECL in the TYPE_FIELDS of the RECORD_TYPE or 2986 UNION_TYPE TYPE, or NULL_TREE if none. */ 2987 2988 tree 2989 first_field (const_tree type) 2990 { 2991 tree t = TYPE_FIELDS (type); 2992 while (t && TREE_CODE (t) != FIELD_DECL) 2993 t = TREE_CHAIN (t); 2994 return t; 2995 } 2996 2997 /* Concatenate two chains of nodes (chained through TREE_CHAIN) 2998 by modifying the last node in chain 1 to point to chain 2. 2999 This is the Lisp primitive `nconc'. */ 3000 3001 tree 3002 chainon (tree op1, tree op2) 3003 { 3004 tree t1; 3005 3006 if (!op1) 3007 return op2; 3008 if (!op2) 3009 return op1; 3010 3011 for (t1 = op1; TREE_CHAIN (t1); t1 = TREE_CHAIN (t1)) 3012 continue; 3013 TREE_CHAIN (t1) = op2; 3014 3015 #ifdef ENABLE_TREE_CHECKING 3016 { 3017 tree t2; 3018 for (t2 = op2; t2; t2 = TREE_CHAIN (t2)) 3019 gcc_assert (t2 != t1); 3020 } 3021 #endif 3022 3023 return op1; 3024 } 3025 3026 /* Return the last node in a chain of nodes (chained through TREE_CHAIN). */ 3027 3028 tree 3029 tree_last (tree chain) 3030 { 3031 tree next; 3032 if (chain) 3033 while ((next = TREE_CHAIN (chain))) 3034 chain = next; 3035 return chain; 3036 } 3037 3038 /* Reverse the order of elements in the chain T, 3039 and return the new head of the chain (old last element). */ 3040 3041 tree 3042 nreverse (tree t) 3043 { 3044 tree prev = 0, decl, next; 3045 for (decl = t; decl; decl = next) 3046 { 3047 /* We shouldn't be using this function to reverse BLOCK chains; we 3048 have blocks_nreverse for that. */ 3049 gcc_checking_assert (TREE_CODE (decl) != BLOCK); 3050 next = TREE_CHAIN (decl); 3051 TREE_CHAIN (decl) = prev; 3052 prev = decl; 3053 } 3054 return prev; 3055 } 3056 3057 /* Return a newly created TREE_LIST node whose 3058 purpose and value fields are PARM and VALUE. */ 3059 3060 tree 3061 build_tree_list (tree parm, tree value MEM_STAT_DECL) 3062 { 3063 tree t = make_node (TREE_LIST PASS_MEM_STAT); 3064 TREE_PURPOSE (t) = parm; 3065 TREE_VALUE (t) = value; 3066 return t; 3067 } 3068 3069 /* Build a chain of TREE_LIST nodes from a vector. */ 3070 3071 tree 3072 build_tree_list_vec (const vec<tree, va_gc> *vec MEM_STAT_DECL) 3073 { 3074 tree ret = NULL_TREE; 3075 tree *pp = &ret; 3076 unsigned int i; 3077 tree t; 3078 FOR_EACH_VEC_SAFE_ELT (vec, i, t) 3079 { 3080 *pp = build_tree_list (NULL, t PASS_MEM_STAT); 3081 pp = &TREE_CHAIN (*pp); 3082 } 3083 return ret; 3084 } 3085 3086 /* Return a newly created TREE_LIST node whose 3087 purpose and value fields are PURPOSE and VALUE 3088 and whose TREE_CHAIN is CHAIN. */ 3089 3090 tree 3091 tree_cons (tree purpose, tree value, tree chain MEM_STAT_DECL) 3092 { 3093 tree node; 3094 3095 node = ggc_alloc_tree_node_stat (sizeof (struct tree_list) PASS_MEM_STAT); 3096 memset (node, 0, sizeof (struct tree_common)); 3097 3098 record_node_allocation_statistics (TREE_LIST, sizeof (struct tree_list)); 3099 3100 TREE_SET_CODE (node, TREE_LIST); 3101 TREE_CHAIN (node) = chain; 3102 TREE_PURPOSE (node) = purpose; 3103 TREE_VALUE (node) = value; 3104 return node; 3105 } 3106 3107 /* Return the values of the elements of a CONSTRUCTOR as a vector of 3108 trees. */ 3109 3110 vec<tree, va_gc> * 3111 ctor_to_vec (tree ctor) 3112 { 3113 vec<tree, va_gc> *vec; 3114 vec_alloc (vec, CONSTRUCTOR_NELTS (ctor)); 3115 unsigned int ix; 3116 tree val; 3117 3118 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), ix, val) 3119 vec->quick_push (val); 3120 3121 return vec; 3122 } 3123 3124 /* Return the size nominally occupied by an object of type TYPE 3125 when it resides in memory. The value is measured in units of bytes, 3126 and its data type is that normally used for type sizes 3127 (which is the first type created by make_signed_type or 3128 make_unsigned_type). */ 3129 3130 tree 3131 size_in_bytes_loc (location_t loc, const_tree type) 3132 { 3133 tree t; 3134 3135 if (type == error_mark_node) 3136 return integer_zero_node; 3137 3138 type = TYPE_MAIN_VARIANT (type); 3139 t = TYPE_SIZE_UNIT (type); 3140 3141 if (t == 0) 3142 { 3143 lang_hooks.types.incomplete_type_error (loc, NULL_TREE, type); 3144 return size_zero_node; 3145 } 3146 3147 return t; 3148 } 3149 3150 /* Return the size of TYPE (in bytes) as a wide integer 3151 or return -1 if the size can vary or is larger than an integer. */ 3152 3153 HOST_WIDE_INT 3154 int_size_in_bytes (const_tree type) 3155 { 3156 tree t; 3157 3158 if (type == error_mark_node) 3159 return 0; 3160 3161 type = TYPE_MAIN_VARIANT (type); 3162 t = TYPE_SIZE_UNIT (type); 3163 3164 if (t && tree_fits_uhwi_p (t)) 3165 return TREE_INT_CST_LOW (t); 3166 else 3167 return -1; 3168 } 3169 3170 /* Return the maximum size of TYPE (in bytes) as a wide integer 3171 or return -1 if the size can vary or is larger than an integer. */ 3172 3173 HOST_WIDE_INT 3174 max_int_size_in_bytes (const_tree type) 3175 { 3176 HOST_WIDE_INT size = -1; 3177 tree size_tree; 3178 3179 /* If this is an array type, check for a possible MAX_SIZE attached. */ 3180 3181 if (TREE_CODE (type) == ARRAY_TYPE) 3182 { 3183 size_tree = TYPE_ARRAY_MAX_SIZE (type); 3184 3185 if (size_tree && tree_fits_uhwi_p (size_tree)) 3186 size = tree_to_uhwi (size_tree); 3187 } 3188 3189 /* If we still haven't been able to get a size, see if the language 3190 can compute a maximum size. */ 3191 3192 if (size == -1) 3193 { 3194 size_tree = lang_hooks.types.max_size (type); 3195 3196 if (size_tree && tree_fits_uhwi_p (size_tree)) 3197 size = tree_to_uhwi (size_tree); 3198 } 3199 3200 return size; 3201 } 3202 3203 /* Return the bit position of FIELD, in bits from the start of the record. 3204 This is a tree of type bitsizetype. */ 3205 3206 tree 3207 bit_position (const_tree field) 3208 { 3209 return bit_from_pos (DECL_FIELD_OFFSET (field), 3210 DECL_FIELD_BIT_OFFSET (field)); 3211 } 3212 3213 /* Return the byte position of FIELD, in bytes from the start of the record. 3214 This is a tree of type sizetype. */ 3215 3216 tree 3217 byte_position (const_tree field) 3218 { 3219 return byte_from_pos (DECL_FIELD_OFFSET (field), 3220 DECL_FIELD_BIT_OFFSET (field)); 3221 } 3222 3223 /* Likewise, but return as an integer. It must be representable in 3224 that way (since it could be a signed value, we don't have the 3225 option of returning -1 like int_size_in_byte can. */ 3226 3227 HOST_WIDE_INT 3228 int_byte_position (const_tree field) 3229 { 3230 return tree_to_shwi (byte_position (field)); 3231 } 3232 3233 /* Return the strictest alignment, in bits, that T is known to have. */ 3234 3235 unsigned int 3236 expr_align (const_tree t) 3237 { 3238 unsigned int align0, align1; 3239 3240 switch (TREE_CODE (t)) 3241 { 3242 CASE_CONVERT: case NON_LVALUE_EXPR: 3243 /* If we have conversions, we know that the alignment of the 3244 object must meet each of the alignments of the types. */ 3245 align0 = expr_align (TREE_OPERAND (t, 0)); 3246 align1 = TYPE_ALIGN (TREE_TYPE (t)); 3247 return MAX (align0, align1); 3248 3249 case SAVE_EXPR: case COMPOUND_EXPR: case MODIFY_EXPR: 3250 case INIT_EXPR: case TARGET_EXPR: case WITH_CLEANUP_EXPR: 3251 case CLEANUP_POINT_EXPR: 3252 /* These don't change the alignment of an object. */ 3253 return expr_align (TREE_OPERAND (t, 0)); 3254 3255 case COND_EXPR: 3256 /* The best we can do is say that the alignment is the least aligned 3257 of the two arms. */ 3258 align0 = expr_align (TREE_OPERAND (t, 1)); 3259 align1 = expr_align (TREE_OPERAND (t, 2)); 3260 return MIN (align0, align1); 3261 3262 /* FIXME: LABEL_DECL and CONST_DECL never have DECL_ALIGN set 3263 meaningfully, it's always 1. */ 3264 case LABEL_DECL: case CONST_DECL: 3265 case VAR_DECL: case PARM_DECL: case RESULT_DECL: 3266 case FUNCTION_DECL: 3267 gcc_assert (DECL_ALIGN (t) != 0); 3268 return DECL_ALIGN (t); 3269 3270 default: 3271 break; 3272 } 3273 3274 /* Otherwise take the alignment from that of the type. */ 3275 return TYPE_ALIGN (TREE_TYPE (t)); 3276 } 3277 3278 /* Return, as a tree node, the number of elements for TYPE (which is an 3279 ARRAY_TYPE) minus one. This counts only elements of the top array. */ 3280 3281 tree 3282 array_type_nelts (const_tree type) 3283 { 3284 tree index_type, min, max; 3285 3286 /* If they did it with unspecified bounds, then we should have already 3287 given an error about it before we got here. */ 3288 if (! TYPE_DOMAIN (type)) 3289 return error_mark_node; 3290 3291 index_type = TYPE_DOMAIN (type); 3292 min = TYPE_MIN_VALUE (index_type); 3293 max = TYPE_MAX_VALUE (index_type); 3294 3295 /* TYPE_MAX_VALUE may not be set if the array has unknown length. */ 3296 if (!max) 3297 return error_mark_node; 3298 3299 return (integer_zerop (min) 3300 ? max 3301 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min)); 3302 } 3303 3304 /* If arg is static -- a reference to an object in static storage -- then 3305 return the object. This is not the same as the C meaning of `static'. 3306 If arg isn't static, return NULL. */ 3307 3308 tree 3309 staticp (tree arg) 3310 { 3311 switch (TREE_CODE (arg)) 3312 { 3313 case FUNCTION_DECL: 3314 /* Nested functions are static, even though taking their address will 3315 involve a trampoline as we unnest the nested function and create 3316 the trampoline on the tree level. */ 3317 return arg; 3318 3319 case VAR_DECL: 3320 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg)) 3321 && ! DECL_THREAD_LOCAL_P (arg) 3322 && ! DECL_DLLIMPORT_P (arg) 3323 ? arg : NULL); 3324 3325 case CONST_DECL: 3326 return ((TREE_STATIC (arg) || DECL_EXTERNAL (arg)) 3327 ? arg : NULL); 3328 3329 case CONSTRUCTOR: 3330 return TREE_STATIC (arg) ? arg : NULL; 3331 3332 case LABEL_DECL: 3333 case STRING_CST: 3334 return arg; 3335 3336 case COMPONENT_REF: 3337 /* If the thing being referenced is not a field, then it is 3338 something language specific. */ 3339 gcc_assert (TREE_CODE (TREE_OPERAND (arg, 1)) == FIELD_DECL); 3340 3341 /* If we are referencing a bitfield, we can't evaluate an 3342 ADDR_EXPR at compile time and so it isn't a constant. */ 3343 if (DECL_BIT_FIELD (TREE_OPERAND (arg, 1))) 3344 return NULL; 3345 3346 return staticp (TREE_OPERAND (arg, 0)); 3347 3348 case BIT_FIELD_REF: 3349 return NULL; 3350 3351 case INDIRECT_REF: 3352 return TREE_CONSTANT (TREE_OPERAND (arg, 0)) ? arg : NULL; 3353 3354 case ARRAY_REF: 3355 case ARRAY_RANGE_REF: 3356 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (arg))) == INTEGER_CST 3357 && TREE_CODE (TREE_OPERAND (arg, 1)) == INTEGER_CST) 3358 return staticp (TREE_OPERAND (arg, 0)); 3359 else 3360 return NULL; 3361 3362 case COMPOUND_LITERAL_EXPR: 3363 return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL; 3364 3365 default: 3366 return NULL; 3367 } 3368 } 3369 3370 3371 3372 3373 /* Return whether OP is a DECL whose address is function-invariant. */ 3374 3375 bool 3376 decl_address_invariant_p (const_tree op) 3377 { 3378 /* The conditions below are slightly less strict than the one in 3379 staticp. */ 3380 3381 switch (TREE_CODE (op)) 3382 { 3383 case PARM_DECL: 3384 case RESULT_DECL: 3385 case LABEL_DECL: 3386 case FUNCTION_DECL: 3387 return true; 3388 3389 case VAR_DECL: 3390 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)) 3391 || DECL_THREAD_LOCAL_P (op) 3392 || DECL_CONTEXT (op) == current_function_decl 3393 || decl_function_context (op) == current_function_decl) 3394 return true; 3395 break; 3396 3397 case CONST_DECL: 3398 if ((TREE_STATIC (op) || DECL_EXTERNAL (op)) 3399 || decl_function_context (op) == current_function_decl) 3400 return true; 3401 break; 3402 3403 default: 3404 break; 3405 } 3406 3407 return false; 3408 } 3409 3410 /* Return whether OP is a DECL whose address is interprocedural-invariant. */ 3411 3412 bool 3413 decl_address_ip_invariant_p (const_tree op) 3414 { 3415 /* The conditions below are slightly less strict than the one in 3416 staticp. */ 3417 3418 switch (TREE_CODE (op)) 3419 { 3420 case LABEL_DECL: 3421 case FUNCTION_DECL: 3422 case STRING_CST: 3423 return true; 3424 3425 case VAR_DECL: 3426 if (((TREE_STATIC (op) || DECL_EXTERNAL (op)) 3427 && !DECL_DLLIMPORT_P (op)) 3428 || DECL_THREAD_LOCAL_P (op)) 3429 return true; 3430 break; 3431 3432 case CONST_DECL: 3433 if ((TREE_STATIC (op) || DECL_EXTERNAL (op))) 3434 return true; 3435 break; 3436 3437 default: 3438 break; 3439 } 3440 3441 return false; 3442 } 3443 3444 3445 /* Return true if T is function-invariant (internal function, does 3446 not handle arithmetic; that's handled in skip_simple_arithmetic and 3447 tree_invariant_p). */ 3448 3449 static bool 3450 tree_invariant_p_1 (tree t) 3451 { 3452 tree op; 3453 3454 if (TREE_CONSTANT (t) 3455 || (TREE_READONLY (t) && !TREE_SIDE_EFFECTS (t))) 3456 return true; 3457 3458 switch (TREE_CODE (t)) 3459 { 3460 case SAVE_EXPR: 3461 return true; 3462 3463 case ADDR_EXPR: 3464 op = TREE_OPERAND (t, 0); 3465 while (handled_component_p (op)) 3466 { 3467 switch (TREE_CODE (op)) 3468 { 3469 case ARRAY_REF: 3470 case ARRAY_RANGE_REF: 3471 if (!tree_invariant_p (TREE_OPERAND (op, 1)) 3472 || TREE_OPERAND (op, 2) != NULL_TREE 3473 || TREE_OPERAND (op, 3) != NULL_TREE) 3474 return false; 3475 break; 3476 3477 case COMPONENT_REF: 3478 if (TREE_OPERAND (op, 2) != NULL_TREE) 3479 return false; 3480 break; 3481 3482 default:; 3483 } 3484 op = TREE_OPERAND (op, 0); 3485 } 3486 3487 return CONSTANT_CLASS_P (op) || decl_address_invariant_p (op); 3488 3489 default: 3490 break; 3491 } 3492 3493 return false; 3494 } 3495 3496 /* Return true if T is function-invariant. */ 3497 3498 bool 3499 tree_invariant_p (tree t) 3500 { 3501 tree inner = skip_simple_arithmetic (t); 3502 return tree_invariant_p_1 (inner); 3503 } 3504 3505 /* Wrap a SAVE_EXPR around EXPR, if appropriate. 3506 Do this to any expression which may be used in more than one place, 3507 but must be evaluated only once. 3508 3509 Normally, expand_expr would reevaluate the expression each time. 3510 Calling save_expr produces something that is evaluated and recorded 3511 the first time expand_expr is called on it. Subsequent calls to 3512 expand_expr just reuse the recorded value. 3513 3514 The call to expand_expr that generates code that actually computes 3515 the value is the first call *at compile time*. Subsequent calls 3516 *at compile time* generate code to use the saved value. 3517 This produces correct result provided that *at run time* control 3518 always flows through the insns made by the first expand_expr 3519 before reaching the other places where the save_expr was evaluated. 3520 You, the caller of save_expr, must make sure this is so. 3521 3522 Constants, and certain read-only nodes, are returned with no 3523 SAVE_EXPR because that is safe. Expressions containing placeholders 3524 are not touched; see tree.def for an explanation of what these 3525 are used for. */ 3526 3527 tree 3528 save_expr (tree expr) 3529 { 3530 tree inner; 3531 3532 /* If the tree evaluates to a constant, then we don't want to hide that 3533 fact (i.e. this allows further folding, and direct checks for constants). 3534 However, a read-only object that has side effects cannot be bypassed. 3535 Since it is no problem to reevaluate literals, we just return the 3536 literal node. */ 3537 inner = skip_simple_arithmetic (expr); 3538 if (TREE_CODE (inner) == ERROR_MARK) 3539 return inner; 3540 3541 if (tree_invariant_p_1 (inner)) 3542 return expr; 3543 3544 /* If INNER contains a PLACEHOLDER_EXPR, we must evaluate it each time, since 3545 it means that the size or offset of some field of an object depends on 3546 the value within another field. 3547 3548 Note that it must not be the case that EXPR contains both a PLACEHOLDER_EXPR 3549 and some variable since it would then need to be both evaluated once and 3550 evaluated more than once. Front-ends must assure this case cannot 3551 happen by surrounding any such subexpressions in their own SAVE_EXPR 3552 and forcing evaluation at the proper time. */ 3553 if (contains_placeholder_p (inner)) 3554 return expr; 3555 3556 expr = build1_loc (EXPR_LOCATION (expr), SAVE_EXPR, TREE_TYPE (expr), expr); 3557 3558 /* This expression might be placed ahead of a jump to ensure that the 3559 value was computed on both sides of the jump. So make sure it isn't 3560 eliminated as dead. */ 3561 TREE_SIDE_EFFECTS (expr) = 1; 3562 return expr; 3563 } 3564 3565 /* Look inside EXPR into any simple arithmetic operations. Return the 3566 outermost non-arithmetic or non-invariant node. */ 3567 3568 tree 3569 skip_simple_arithmetic (tree expr) 3570 { 3571 /* We don't care about whether this can be used as an lvalue in this 3572 context. */ 3573 while (TREE_CODE (expr) == NON_LVALUE_EXPR) 3574 expr = TREE_OPERAND (expr, 0); 3575 3576 /* If we have simple operations applied to a SAVE_EXPR or to a SAVE_EXPR and 3577 a constant, it will be more efficient to not make another SAVE_EXPR since 3578 it will allow better simplification and GCSE will be able to merge the 3579 computations if they actually occur. */ 3580 while (true) 3581 { 3582 if (UNARY_CLASS_P (expr)) 3583 expr = TREE_OPERAND (expr, 0); 3584 else if (BINARY_CLASS_P (expr)) 3585 { 3586 if (tree_invariant_p (TREE_OPERAND (expr, 1))) 3587 expr = TREE_OPERAND (expr, 0); 3588 else if (tree_invariant_p (TREE_OPERAND (expr, 0))) 3589 expr = TREE_OPERAND (expr, 1); 3590 else 3591 break; 3592 } 3593 else 3594 break; 3595 } 3596 3597 return expr; 3598 } 3599 3600 /* Look inside EXPR into simple arithmetic operations involving constants. 3601 Return the outermost non-arithmetic or non-constant node. */ 3602 3603 tree 3604 skip_simple_constant_arithmetic (tree expr) 3605 { 3606 while (TREE_CODE (expr) == NON_LVALUE_EXPR) 3607 expr = TREE_OPERAND (expr, 0); 3608 3609 while (true) 3610 { 3611 if (UNARY_CLASS_P (expr)) 3612 expr = TREE_OPERAND (expr, 0); 3613 else if (BINARY_CLASS_P (expr)) 3614 { 3615 if (TREE_CONSTANT (TREE_OPERAND (expr, 1))) 3616 expr = TREE_OPERAND (expr, 0); 3617 else if (TREE_CONSTANT (TREE_OPERAND (expr, 0))) 3618 expr = TREE_OPERAND (expr, 1); 3619 else 3620 break; 3621 } 3622 else 3623 break; 3624 } 3625 3626 return expr; 3627 } 3628 3629 /* Return which tree structure is used by T. */ 3630 3631 enum tree_node_structure_enum 3632 tree_node_structure (const_tree t) 3633 { 3634 const enum tree_code code = TREE_CODE (t); 3635 return tree_node_structure_for_code (code); 3636 } 3637 3638 /* Set various status flags when building a CALL_EXPR object T. */ 3639 3640 static void 3641 process_call_operands (tree t) 3642 { 3643 bool side_effects = TREE_SIDE_EFFECTS (t); 3644 bool read_only = false; 3645 int i = call_expr_flags (t); 3646 3647 /* Calls have side-effects, except those to const or pure functions. */ 3648 if ((i & ECF_LOOPING_CONST_OR_PURE) || !(i & (ECF_CONST | ECF_PURE))) 3649 side_effects = true; 3650 /* Propagate TREE_READONLY of arguments for const functions. */ 3651 if (i & ECF_CONST) 3652 read_only = true; 3653 3654 if (!side_effects || read_only) 3655 for (i = 1; i < TREE_OPERAND_LENGTH (t); i++) 3656 { 3657 tree op = TREE_OPERAND (t, i); 3658 if (op && TREE_SIDE_EFFECTS (op)) 3659 side_effects = true; 3660 if (op && !TREE_READONLY (op) && !CONSTANT_CLASS_P (op)) 3661 read_only = false; 3662 } 3663 3664 TREE_SIDE_EFFECTS (t) = side_effects; 3665 TREE_READONLY (t) = read_only; 3666 } 3667 3668 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a 3669 size or offset that depends on a field within a record. */ 3670 3671 bool 3672 contains_placeholder_p (const_tree exp) 3673 { 3674 enum tree_code code; 3675 3676 if (!exp) 3677 return 0; 3678 3679 code = TREE_CODE (exp); 3680 if (code == PLACEHOLDER_EXPR) 3681 return 1; 3682 3683 switch (TREE_CODE_CLASS (code)) 3684 { 3685 case tcc_reference: 3686 /* Don't look at any PLACEHOLDER_EXPRs that might be in index or bit 3687 position computations since they will be converted into a 3688 WITH_RECORD_EXPR involving the reference, which will assume 3689 here will be valid. */ 3690 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0)); 3691 3692 case tcc_exceptional: 3693 if (code == TREE_LIST) 3694 return (CONTAINS_PLACEHOLDER_P (TREE_VALUE (exp)) 3695 || CONTAINS_PLACEHOLDER_P (TREE_CHAIN (exp))); 3696 break; 3697 3698 case tcc_unary: 3699 case tcc_binary: 3700 case tcc_comparison: 3701 case tcc_expression: 3702 switch (code) 3703 { 3704 case COMPOUND_EXPR: 3705 /* Ignoring the first operand isn't quite right, but works best. */ 3706 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)); 3707 3708 case COND_EXPR: 3709 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0)) 3710 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1)) 3711 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 2))); 3712 3713 case SAVE_EXPR: 3714 /* The save_expr function never wraps anything containing 3715 a PLACEHOLDER_EXPR. */ 3716 return 0; 3717 3718 default: 3719 break; 3720 } 3721 3722 switch (TREE_CODE_LENGTH (code)) 3723 { 3724 case 1: 3725 return CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0)); 3726 case 2: 3727 return (CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 0)) 3728 || CONTAINS_PLACEHOLDER_P (TREE_OPERAND (exp, 1))); 3729 default: 3730 return 0; 3731 } 3732 3733 case tcc_vl_exp: 3734 switch (code) 3735 { 3736 case CALL_EXPR: 3737 { 3738 const_tree arg; 3739 const_call_expr_arg_iterator iter; 3740 FOR_EACH_CONST_CALL_EXPR_ARG (arg, iter, exp) 3741 if (CONTAINS_PLACEHOLDER_P (arg)) 3742 return 1; 3743 return 0; 3744 } 3745 default: 3746 return 0; 3747 } 3748 3749 default: 3750 return 0; 3751 } 3752 return 0; 3753 } 3754 3755 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR 3756 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and 3757 field positions. */ 3758 3759 static bool 3760 type_contains_placeholder_1 (const_tree type) 3761 { 3762 /* If the size contains a placeholder or the parent type (component type in 3763 the case of arrays) type involves a placeholder, this type does. */ 3764 if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type)) 3765 || CONTAINS_PLACEHOLDER_P (TYPE_SIZE_UNIT (type)) 3766 || (!POINTER_TYPE_P (type) 3767 && TREE_TYPE (type) 3768 && type_contains_placeholder_p (TREE_TYPE (type)))) 3769 return true; 3770 3771 /* Now do type-specific checks. Note that the last part of the check above 3772 greatly limits what we have to do below. */ 3773 switch (TREE_CODE (type)) 3774 { 3775 case VOID_TYPE: 3776 case POINTER_BOUNDS_TYPE: 3777 case COMPLEX_TYPE: 3778 case ENUMERAL_TYPE: 3779 case BOOLEAN_TYPE: 3780 case POINTER_TYPE: 3781 case OFFSET_TYPE: 3782 case REFERENCE_TYPE: 3783 case METHOD_TYPE: 3784 case FUNCTION_TYPE: 3785 case VECTOR_TYPE: 3786 case NULLPTR_TYPE: 3787 return false; 3788 3789 case INTEGER_TYPE: 3790 case REAL_TYPE: 3791 case FIXED_POINT_TYPE: 3792 /* Here we just check the bounds. */ 3793 return (CONTAINS_PLACEHOLDER_P (TYPE_MIN_VALUE (type)) 3794 || CONTAINS_PLACEHOLDER_P (TYPE_MAX_VALUE (type))); 3795 3796 case ARRAY_TYPE: 3797 /* We have already checked the component type above, so just check 3798 the domain type. Flexible array members have a null domain. */ 3799 return TYPE_DOMAIN (type) ? 3800 type_contains_placeholder_p (TYPE_DOMAIN (type)) : false; 3801 3802 case RECORD_TYPE: 3803 case UNION_TYPE: 3804 case QUAL_UNION_TYPE: 3805 { 3806 tree field; 3807 3808 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) 3809 if (TREE_CODE (field) == FIELD_DECL 3810 && (CONTAINS_PLACEHOLDER_P (DECL_FIELD_OFFSET (field)) 3811 || (TREE_CODE (type) == QUAL_UNION_TYPE 3812 && CONTAINS_PLACEHOLDER_P (DECL_QUALIFIER (field))) 3813 || type_contains_placeholder_p (TREE_TYPE (field)))) 3814 return true; 3815 3816 return false; 3817 } 3818 3819 default: 3820 gcc_unreachable (); 3821 } 3822 } 3823 3824 /* Wrapper around above function used to cache its result. */ 3825 3826 bool 3827 type_contains_placeholder_p (tree type) 3828 { 3829 bool result; 3830 3831 /* If the contains_placeholder_bits field has been initialized, 3832 then we know the answer. */ 3833 if (TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) > 0) 3834 return TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) - 1; 3835 3836 /* Indicate that we've seen this type node, and the answer is false. 3837 This is what we want to return if we run into recursion via fields. */ 3838 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = 1; 3839 3840 /* Compute the real value. */ 3841 result = type_contains_placeholder_1 (type); 3842 3843 /* Store the real value. */ 3844 TYPE_CONTAINS_PLACEHOLDER_INTERNAL (type) = result + 1; 3845 3846 return result; 3847 } 3848 3849 /* Push tree EXP onto vector QUEUE if it is not already present. */ 3850 3851 static void 3852 push_without_duplicates (tree exp, vec<tree> *queue) 3853 { 3854 unsigned int i; 3855 tree iter; 3856 3857 FOR_EACH_VEC_ELT (*queue, i, iter) 3858 if (simple_cst_equal (iter, exp) == 1) 3859 break; 3860 3861 if (!iter) 3862 queue->safe_push (exp); 3863 } 3864 3865 /* Given a tree EXP, find all occurrences of references to fields 3866 in a PLACEHOLDER_EXPR and place them in vector REFS without 3867 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that 3868 we assume here that EXP contains only arithmetic expressions 3869 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their 3870 argument list. */ 3871 3872 void 3873 find_placeholder_in_expr (tree exp, vec<tree> *refs) 3874 { 3875 enum tree_code code = TREE_CODE (exp); 3876 tree inner; 3877 int i; 3878 3879 /* We handle TREE_LIST and COMPONENT_REF separately. */ 3880 if (code == TREE_LIST) 3881 { 3882 FIND_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), refs); 3883 FIND_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), refs); 3884 } 3885 else if (code == COMPONENT_REF) 3886 { 3887 for (inner = TREE_OPERAND (exp, 0); 3888 REFERENCE_CLASS_P (inner); 3889 inner = TREE_OPERAND (inner, 0)) 3890 ; 3891 3892 if (TREE_CODE (inner) == PLACEHOLDER_EXPR) 3893 push_without_duplicates (exp, refs); 3894 else 3895 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), refs); 3896 } 3897 else 3898 switch (TREE_CODE_CLASS (code)) 3899 { 3900 case tcc_constant: 3901 break; 3902 3903 case tcc_declaration: 3904 /* Variables allocated to static storage can stay. */ 3905 if (!TREE_STATIC (exp)) 3906 push_without_duplicates (exp, refs); 3907 break; 3908 3909 case tcc_expression: 3910 /* This is the pattern built in ada/make_aligning_type. */ 3911 if (code == ADDR_EXPR 3912 && TREE_CODE (TREE_OPERAND (exp, 0)) == PLACEHOLDER_EXPR) 3913 { 3914 push_without_duplicates (exp, refs); 3915 break; 3916 } 3917 3918 /* Fall through. */ 3919 3920 case tcc_exceptional: 3921 case tcc_unary: 3922 case tcc_binary: 3923 case tcc_comparison: 3924 case tcc_reference: 3925 for (i = 0; i < TREE_CODE_LENGTH (code); i++) 3926 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs); 3927 break; 3928 3929 case tcc_vl_exp: 3930 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++) 3931 FIND_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, i), refs); 3932 break; 3933 3934 default: 3935 gcc_unreachable (); 3936 } 3937 } 3938 3939 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R, 3940 return a tree with all occurrences of references to F in a 3941 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and 3942 CONST_DECLs. Note that we assume here that EXP contains only 3943 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs 3944 occurring only in their argument list. */ 3945 3946 tree 3947 substitute_in_expr (tree exp, tree f, tree r) 3948 { 3949 enum tree_code code = TREE_CODE (exp); 3950 tree op0, op1, op2, op3; 3951 tree new_tree; 3952 3953 /* We handle TREE_LIST and COMPONENT_REF separately. */ 3954 if (code == TREE_LIST) 3955 { 3956 op0 = SUBSTITUTE_IN_EXPR (TREE_CHAIN (exp), f, r); 3957 op1 = SUBSTITUTE_IN_EXPR (TREE_VALUE (exp), f, r); 3958 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp)) 3959 return exp; 3960 3961 return tree_cons (TREE_PURPOSE (exp), op1, op0); 3962 } 3963 else if (code == COMPONENT_REF) 3964 { 3965 tree inner; 3966 3967 /* If this expression is getting a value from a PLACEHOLDER_EXPR 3968 and it is the right field, replace it with R. */ 3969 for (inner = TREE_OPERAND (exp, 0); 3970 REFERENCE_CLASS_P (inner); 3971 inner = TREE_OPERAND (inner, 0)) 3972 ; 3973 3974 /* The field. */ 3975 op1 = TREE_OPERAND (exp, 1); 3976 3977 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && op1 == f) 3978 return r; 3979 3980 /* If this expression hasn't been completed let, leave it alone. */ 3981 if (TREE_CODE (inner) == PLACEHOLDER_EXPR && !TREE_TYPE (inner)) 3982 return exp; 3983 3984 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r); 3985 if (op0 == TREE_OPERAND (exp, 0)) 3986 return exp; 3987 3988 new_tree 3989 = fold_build3 (COMPONENT_REF, TREE_TYPE (exp), op0, op1, NULL_TREE); 3990 } 3991 else 3992 switch (TREE_CODE_CLASS (code)) 3993 { 3994 case tcc_constant: 3995 return exp; 3996 3997 case tcc_declaration: 3998 if (exp == f) 3999 return r; 4000 else 4001 return exp; 4002 4003 case tcc_expression: 4004 if (exp == f) 4005 return r; 4006 4007 /* Fall through. */ 4008 4009 case tcc_exceptional: 4010 case tcc_unary: 4011 case tcc_binary: 4012 case tcc_comparison: 4013 case tcc_reference: 4014 switch (TREE_CODE_LENGTH (code)) 4015 { 4016 case 0: 4017 return exp; 4018 4019 case 1: 4020 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r); 4021 if (op0 == TREE_OPERAND (exp, 0)) 4022 return exp; 4023 4024 new_tree = fold_build1 (code, TREE_TYPE (exp), op0); 4025 break; 4026 4027 case 2: 4028 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r); 4029 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r); 4030 4031 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)) 4032 return exp; 4033 4034 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1); 4035 break; 4036 4037 case 3: 4038 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r); 4039 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r); 4040 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r); 4041 4042 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) 4043 && op2 == TREE_OPERAND (exp, 2)) 4044 return exp; 4045 4046 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2); 4047 break; 4048 4049 case 4: 4050 op0 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 0), f, r); 4051 op1 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 1), f, r); 4052 op2 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 2), f, r); 4053 op3 = SUBSTITUTE_IN_EXPR (TREE_OPERAND (exp, 3), f, r); 4054 4055 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) 4056 && op2 == TREE_OPERAND (exp, 2) 4057 && op3 == TREE_OPERAND (exp, 3)) 4058 return exp; 4059 4060 new_tree 4061 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3)); 4062 break; 4063 4064 default: 4065 gcc_unreachable (); 4066 } 4067 break; 4068 4069 case tcc_vl_exp: 4070 { 4071 int i; 4072 4073 new_tree = NULL_TREE; 4074 4075 /* If we are trying to replace F with a constant or with another 4076 instance of one of the arguments of the call, inline back 4077 functions which do nothing else than computing a value from 4078 the arguments they are passed. This makes it possible to 4079 fold partially or entirely the replacement expression. */ 4080 if (code == CALL_EXPR) 4081 { 4082 bool maybe_inline = false; 4083 if (CONSTANT_CLASS_P (r)) 4084 maybe_inline = true; 4085 else 4086 for (i = 3; i < TREE_OPERAND_LENGTH (exp); i++) 4087 if (operand_equal_p (TREE_OPERAND (exp, i), r, 0)) 4088 { 4089 maybe_inline = true; 4090 break; 4091 } 4092 if (maybe_inline) 4093 { 4094 tree t = maybe_inline_call_in_expr (exp); 4095 if (t) 4096 return SUBSTITUTE_IN_EXPR (t, f, r); 4097 } 4098 } 4099 4100 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++) 4101 { 4102 tree op = TREE_OPERAND (exp, i); 4103 tree new_op = SUBSTITUTE_IN_EXPR (op, f, r); 4104 if (new_op != op) 4105 { 4106 if (!new_tree) 4107 new_tree = copy_node (exp); 4108 TREE_OPERAND (new_tree, i) = new_op; 4109 } 4110 } 4111 4112 if (new_tree) 4113 { 4114 new_tree = fold (new_tree); 4115 if (TREE_CODE (new_tree) == CALL_EXPR) 4116 process_call_operands (new_tree); 4117 } 4118 else 4119 return exp; 4120 } 4121 break; 4122 4123 default: 4124 gcc_unreachable (); 4125 } 4126 4127 TREE_READONLY (new_tree) |= TREE_READONLY (exp); 4128 4129 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF) 4130 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp); 4131 4132 return new_tree; 4133 } 4134 4135 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement 4136 for it within OBJ, a tree that is an object or a chain of references. */ 4137 4138 tree 4139 substitute_placeholder_in_expr (tree exp, tree obj) 4140 { 4141 enum tree_code code = TREE_CODE (exp); 4142 tree op0, op1, op2, op3; 4143 tree new_tree; 4144 4145 /* If this is a PLACEHOLDER_EXPR, see if we find a corresponding type 4146 in the chain of OBJ. */ 4147 if (code == PLACEHOLDER_EXPR) 4148 { 4149 tree need_type = TYPE_MAIN_VARIANT (TREE_TYPE (exp)); 4150 tree elt; 4151 4152 for (elt = obj; elt != 0; 4153 elt = ((TREE_CODE (elt) == COMPOUND_EXPR 4154 || TREE_CODE (elt) == COND_EXPR) 4155 ? TREE_OPERAND (elt, 1) 4156 : (REFERENCE_CLASS_P (elt) 4157 || UNARY_CLASS_P (elt) 4158 || BINARY_CLASS_P (elt) 4159 || VL_EXP_CLASS_P (elt) 4160 || EXPRESSION_CLASS_P (elt)) 4161 ? TREE_OPERAND (elt, 0) : 0)) 4162 if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type) 4163 return elt; 4164 4165 for (elt = obj; elt != 0; 4166 elt = ((TREE_CODE (elt) == COMPOUND_EXPR 4167 || TREE_CODE (elt) == COND_EXPR) 4168 ? TREE_OPERAND (elt, 1) 4169 : (REFERENCE_CLASS_P (elt) 4170 || UNARY_CLASS_P (elt) 4171 || BINARY_CLASS_P (elt) 4172 || VL_EXP_CLASS_P (elt) 4173 || EXPRESSION_CLASS_P (elt)) 4174 ? TREE_OPERAND (elt, 0) : 0)) 4175 if (POINTER_TYPE_P (TREE_TYPE (elt)) 4176 && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt))) 4177 == need_type)) 4178 return fold_build1 (INDIRECT_REF, need_type, elt); 4179 4180 /* If we didn't find it, return the original PLACEHOLDER_EXPR. If it 4181 survives until RTL generation, there will be an error. */ 4182 return exp; 4183 } 4184 4185 /* TREE_LIST is special because we need to look at TREE_VALUE 4186 and TREE_CHAIN, not TREE_OPERANDS. */ 4187 else if (code == TREE_LIST) 4188 { 4189 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_CHAIN (exp), obj); 4190 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_VALUE (exp), obj); 4191 if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp)) 4192 return exp; 4193 4194 return tree_cons (TREE_PURPOSE (exp), op1, op0); 4195 } 4196 else 4197 switch (TREE_CODE_CLASS (code)) 4198 { 4199 case tcc_constant: 4200 case tcc_declaration: 4201 return exp; 4202 4203 case tcc_exceptional: 4204 case tcc_unary: 4205 case tcc_binary: 4206 case tcc_comparison: 4207 case tcc_expression: 4208 case tcc_reference: 4209 case tcc_statement: 4210 switch (TREE_CODE_LENGTH (code)) 4211 { 4212 case 0: 4213 return exp; 4214 4215 case 1: 4216 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj); 4217 if (op0 == TREE_OPERAND (exp, 0)) 4218 return exp; 4219 4220 new_tree = fold_build1 (code, TREE_TYPE (exp), op0); 4221 break; 4222 4223 case 2: 4224 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj); 4225 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj); 4226 4227 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)) 4228 return exp; 4229 4230 new_tree = fold_build2 (code, TREE_TYPE (exp), op0, op1); 4231 break; 4232 4233 case 3: 4234 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj); 4235 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj); 4236 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj); 4237 4238 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) 4239 && op2 == TREE_OPERAND (exp, 2)) 4240 return exp; 4241 4242 new_tree = fold_build3 (code, TREE_TYPE (exp), op0, op1, op2); 4243 break; 4244 4245 case 4: 4246 op0 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 0), obj); 4247 op1 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 1), obj); 4248 op2 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 2), obj); 4249 op3 = SUBSTITUTE_PLACEHOLDER_IN_EXPR (TREE_OPERAND (exp, 3), obj); 4250 4251 if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1) 4252 && op2 == TREE_OPERAND (exp, 2) 4253 && op3 == TREE_OPERAND (exp, 3)) 4254 return exp; 4255 4256 new_tree 4257 = fold (build4 (code, TREE_TYPE (exp), op0, op1, op2, op3)); 4258 break; 4259 4260 default: 4261 gcc_unreachable (); 4262 } 4263 break; 4264 4265 case tcc_vl_exp: 4266 { 4267 int i; 4268 4269 new_tree = NULL_TREE; 4270 4271 for (i = 1; i < TREE_OPERAND_LENGTH (exp); i++) 4272 { 4273 tree op = TREE_OPERAND (exp, i); 4274 tree new_op = SUBSTITUTE_PLACEHOLDER_IN_EXPR (op, obj); 4275 if (new_op != op) 4276 { 4277 if (!new_tree) 4278 new_tree = copy_node (exp); 4279 TREE_OPERAND (new_tree, i) = new_op; 4280 } 4281 } 4282 4283 if (new_tree) 4284 { 4285 new_tree = fold (new_tree); 4286 if (TREE_CODE (new_tree) == CALL_EXPR) 4287 process_call_operands (new_tree); 4288 } 4289 else 4290 return exp; 4291 } 4292 break; 4293 4294 default: 4295 gcc_unreachable (); 4296 } 4297 4298 TREE_READONLY (new_tree) |= TREE_READONLY (exp); 4299 4300 if (code == INDIRECT_REF || code == ARRAY_REF || code == ARRAY_RANGE_REF) 4301 TREE_THIS_NOTRAP (new_tree) |= TREE_THIS_NOTRAP (exp); 4302 4303 return new_tree; 4304 } 4305 4306 4307 /* Subroutine of stabilize_reference; this is called for subtrees of 4308 references. Any expression with side-effects must be put in a SAVE_EXPR 4309 to ensure that it is only evaluated once. 4310 4311 We don't put SAVE_EXPR nodes around everything, because assigning very 4312 simple expressions to temporaries causes us to miss good opportunities 4313 for optimizations. Among other things, the opportunity to fold in the 4314 addition of a constant into an addressing mode often gets lost, e.g. 4315 "y[i+1] += x;". In general, we take the approach that we should not make 4316 an assignment unless we are forced into it - i.e., that any non-side effect 4317 operator should be allowed, and that cse should take care of coalescing 4318 multiple utterances of the same expression should that prove fruitful. */ 4319 4320 static tree 4321 stabilize_reference_1 (tree e) 4322 { 4323 tree result; 4324 enum tree_code code = TREE_CODE (e); 4325 4326 /* We cannot ignore const expressions because it might be a reference 4327 to a const array but whose index contains side-effects. But we can 4328 ignore things that are actual constant or that already have been 4329 handled by this function. */ 4330 4331 if (tree_invariant_p (e)) 4332 return e; 4333 4334 switch (TREE_CODE_CLASS (code)) 4335 { 4336 case tcc_exceptional: 4337 /* Always wrap STATEMENT_LIST into SAVE_EXPR, even if it doesn't 4338 have side-effects. */ 4339 if (code == STATEMENT_LIST) 4340 return save_expr (e); 4341 /* FALLTHRU */ 4342 case tcc_type: 4343 case tcc_declaration: 4344 case tcc_comparison: 4345 case tcc_statement: 4346 case tcc_expression: 4347 case tcc_reference: 4348 case tcc_vl_exp: 4349 /* If the expression has side-effects, then encase it in a SAVE_EXPR 4350 so that it will only be evaluated once. */ 4351 /* The reference (r) and comparison (<) classes could be handled as 4352 below, but it is generally faster to only evaluate them once. */ 4353 if (TREE_SIDE_EFFECTS (e)) 4354 return save_expr (e); 4355 return e; 4356 4357 case tcc_constant: 4358 /* Constants need no processing. In fact, we should never reach 4359 here. */ 4360 return e; 4361 4362 case tcc_binary: 4363 /* Division is slow and tends to be compiled with jumps, 4364 especially the division by powers of 2 that is often 4365 found inside of an array reference. So do it just once. */ 4366 if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR 4367 || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR 4368 || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR 4369 || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR) 4370 return save_expr (e); 4371 /* Recursively stabilize each operand. */ 4372 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)), 4373 stabilize_reference_1 (TREE_OPERAND (e, 1))); 4374 break; 4375 4376 case tcc_unary: 4377 /* Recursively stabilize each operand. */ 4378 result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0))); 4379 break; 4380 4381 default: 4382 gcc_unreachable (); 4383 } 4384 4385 TREE_TYPE (result) = TREE_TYPE (e); 4386 TREE_READONLY (result) = TREE_READONLY (e); 4387 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (e); 4388 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (e); 4389 4390 return result; 4391 } 4392 4393 /* Stabilize a reference so that we can use it any number of times 4394 without causing its operands to be evaluated more than once. 4395 Returns the stabilized reference. This works by means of save_expr, 4396 so see the caveats in the comments about save_expr. 4397 4398 Also allows conversion expressions whose operands are references. 4399 Any other kind of expression is returned unchanged. */ 4400 4401 tree 4402 stabilize_reference (tree ref) 4403 { 4404 tree result; 4405 enum tree_code code = TREE_CODE (ref); 4406 4407 switch (code) 4408 { 4409 case VAR_DECL: 4410 case PARM_DECL: 4411 case RESULT_DECL: 4412 /* No action is needed in this case. */ 4413 return ref; 4414 4415 CASE_CONVERT: 4416 case FLOAT_EXPR: 4417 case FIX_TRUNC_EXPR: 4418 result = build_nt (code, stabilize_reference (TREE_OPERAND (ref, 0))); 4419 break; 4420 4421 case INDIRECT_REF: 4422 result = build_nt (INDIRECT_REF, 4423 stabilize_reference_1 (TREE_OPERAND (ref, 0))); 4424 break; 4425 4426 case COMPONENT_REF: 4427 result = build_nt (COMPONENT_REF, 4428 stabilize_reference (TREE_OPERAND (ref, 0)), 4429 TREE_OPERAND (ref, 1), NULL_TREE); 4430 break; 4431 4432 case BIT_FIELD_REF: 4433 result = build_nt (BIT_FIELD_REF, 4434 stabilize_reference (TREE_OPERAND (ref, 0)), 4435 TREE_OPERAND (ref, 1), TREE_OPERAND (ref, 2)); 4436 REF_REVERSE_STORAGE_ORDER (result) = REF_REVERSE_STORAGE_ORDER (ref); 4437 break; 4438 4439 case ARRAY_REF: 4440 result = build_nt (ARRAY_REF, 4441 stabilize_reference (TREE_OPERAND (ref, 0)), 4442 stabilize_reference_1 (TREE_OPERAND (ref, 1)), 4443 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3)); 4444 break; 4445 4446 case ARRAY_RANGE_REF: 4447 result = build_nt (ARRAY_RANGE_REF, 4448 stabilize_reference (TREE_OPERAND (ref, 0)), 4449 stabilize_reference_1 (TREE_OPERAND (ref, 1)), 4450 TREE_OPERAND (ref, 2), TREE_OPERAND (ref, 3)); 4451 break; 4452 4453 case COMPOUND_EXPR: 4454 /* We cannot wrap the first expression in a SAVE_EXPR, as then 4455 it wouldn't be ignored. This matters when dealing with 4456 volatiles. */ 4457 return stabilize_reference_1 (ref); 4458 4459 /* If arg isn't a kind of lvalue we recognize, make no change. 4460 Caller should recognize the error for an invalid lvalue. */ 4461 default: 4462 return ref; 4463 4464 case ERROR_MARK: 4465 return error_mark_node; 4466 } 4467 4468 TREE_TYPE (result) = TREE_TYPE (ref); 4469 TREE_READONLY (result) = TREE_READONLY (ref); 4470 TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref); 4471 TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref); 4472 4473 return result; 4474 } 4475 4476 /* Low-level constructors for expressions. */ 4477 4478 /* A helper function for build1 and constant folders. Set TREE_CONSTANT, 4479 and TREE_SIDE_EFFECTS for an ADDR_EXPR. */ 4480 4481 void 4482 recompute_tree_invariant_for_addr_expr (tree t) 4483 { 4484 tree node; 4485 bool tc = true, se = false; 4486 4487 gcc_assert (TREE_CODE (t) == ADDR_EXPR); 4488 4489 /* We started out assuming this address is both invariant and constant, but 4490 does not have side effects. Now go down any handled components and see if 4491 any of them involve offsets that are either non-constant or non-invariant. 4492 Also check for side-effects. 4493 4494 ??? Note that this code makes no attempt to deal with the case where 4495 taking the address of something causes a copy due to misalignment. */ 4496 4497 #define UPDATE_FLAGS(NODE) \ 4498 do { tree _node = (NODE); \ 4499 if (_node && !TREE_CONSTANT (_node)) tc = false; \ 4500 if (_node && TREE_SIDE_EFFECTS (_node)) se = true; } while (0) 4501 4502 for (node = TREE_OPERAND (t, 0); handled_component_p (node); 4503 node = TREE_OPERAND (node, 0)) 4504 { 4505 /* If the first operand doesn't have an ARRAY_TYPE, this is a bogus 4506 array reference (probably made temporarily by the G++ front end), 4507 so ignore all the operands. */ 4508 if ((TREE_CODE (node) == ARRAY_REF 4509 || TREE_CODE (node) == ARRAY_RANGE_REF) 4510 && TREE_CODE (TREE_TYPE (TREE_OPERAND (node, 0))) == ARRAY_TYPE) 4511 { 4512 UPDATE_FLAGS (TREE_OPERAND (node, 1)); 4513 if (TREE_OPERAND (node, 2)) 4514 UPDATE_FLAGS (TREE_OPERAND (node, 2)); 4515 if (TREE_OPERAND (node, 3)) 4516 UPDATE_FLAGS (TREE_OPERAND (node, 3)); 4517 } 4518 /* Likewise, just because this is a COMPONENT_REF doesn't mean we have a 4519 FIELD_DECL, apparently. The G++ front end can put something else 4520 there, at least temporarily. */ 4521 else if (TREE_CODE (node) == COMPONENT_REF 4522 && TREE_CODE (TREE_OPERAND (node, 1)) == FIELD_DECL) 4523 { 4524 if (TREE_OPERAND (node, 2)) 4525 UPDATE_FLAGS (TREE_OPERAND (node, 2)); 4526 } 4527 } 4528 4529 node = lang_hooks.expr_to_decl (node, &tc, &se); 4530 4531 /* Now see what's inside. If it's an INDIRECT_REF, copy our properties from 4532 the address, since &(*a)->b is a form of addition. If it's a constant, the 4533 address is constant too. If it's a decl, its address is constant if the 4534 decl is static. Everything else is not constant and, furthermore, 4535 taking the address of a volatile variable is not volatile. */ 4536 if (TREE_CODE (node) == INDIRECT_REF 4537 || TREE_CODE (node) == MEM_REF) 4538 UPDATE_FLAGS (TREE_OPERAND (node, 0)); 4539 else if (CONSTANT_CLASS_P (node)) 4540 ; 4541 else if (DECL_P (node)) 4542 tc &= (staticp (node) != NULL_TREE); 4543 else 4544 { 4545 tc = false; 4546 se |= TREE_SIDE_EFFECTS (node); 4547 } 4548 4549 4550 TREE_CONSTANT (t) = tc; 4551 TREE_SIDE_EFFECTS (t) = se; 4552 #undef UPDATE_FLAGS 4553 } 4554 4555 /* Build an expression of code CODE, data type TYPE, and operands as 4556 specified. Expressions and reference nodes can be created this way. 4557 Constants, decls, types and misc nodes cannot be. 4558 4559 We define 5 non-variadic functions, from 0 to 4 arguments. This is 4560 enough for all extant tree codes. */ 4561 4562 tree 4563 build0 (enum tree_code code, tree tt MEM_STAT_DECL) 4564 { 4565 tree t; 4566 4567 gcc_assert (TREE_CODE_LENGTH (code) == 0); 4568 4569 t = make_node (code PASS_MEM_STAT); 4570 TREE_TYPE (t) = tt; 4571 4572 return t; 4573 } 4574 4575 tree 4576 build1 (enum tree_code code, tree type, tree node MEM_STAT_DECL) 4577 { 4578 int length = sizeof (struct tree_exp); 4579 tree t; 4580 4581 record_node_allocation_statistics (code, length); 4582 4583 gcc_assert (TREE_CODE_LENGTH (code) == 1); 4584 4585 t = ggc_alloc_tree_node_stat (length PASS_MEM_STAT); 4586 4587 memset (t, 0, sizeof (struct tree_common)); 4588 4589 TREE_SET_CODE (t, code); 4590 4591 TREE_TYPE (t) = type; 4592 SET_EXPR_LOCATION (t, UNKNOWN_LOCATION); 4593 TREE_OPERAND (t, 0) = node; 4594 if (node && !TYPE_P (node)) 4595 { 4596 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (node); 4597 TREE_READONLY (t) = TREE_READONLY (node); 4598 } 4599 4600 if (TREE_CODE_CLASS (code) == tcc_statement) 4601 { 4602 if (code != DEBUG_BEGIN_STMT) 4603 TREE_SIDE_EFFECTS (t) = 1; 4604 } 4605 else switch (code) 4606 { 4607 case VA_ARG_EXPR: 4608 /* All of these have side-effects, no matter what their 4609 operands are. */ 4610 TREE_SIDE_EFFECTS (t) = 1; 4611 TREE_READONLY (t) = 0; 4612 break; 4613 4614 case INDIRECT_REF: 4615 /* Whether a dereference is readonly has nothing to do with whether 4616 its operand is readonly. */ 4617 TREE_READONLY (t) = 0; 4618 break; 4619 4620 case ADDR_EXPR: 4621 if (node) 4622 recompute_tree_invariant_for_addr_expr (t); 4623 break; 4624 4625 default: 4626 if ((TREE_CODE_CLASS (code) == tcc_unary || code == VIEW_CONVERT_EXPR) 4627 && node && !TYPE_P (node) 4628 && TREE_CONSTANT (node)) 4629 TREE_CONSTANT (t) = 1; 4630 if (TREE_CODE_CLASS (code) == tcc_reference 4631 && node && TREE_THIS_VOLATILE (node)) 4632 TREE_THIS_VOLATILE (t) = 1; 4633 break; 4634 } 4635 4636 return t; 4637 } 4638 4639 #define PROCESS_ARG(N) \ 4640 do { \ 4641 TREE_OPERAND (t, N) = arg##N; \ 4642 if (arg##N &&!TYPE_P (arg##N)) \ 4643 { \ 4644 if (TREE_SIDE_EFFECTS (arg##N)) \ 4645 side_effects = 1; \ 4646 if (!TREE_READONLY (arg##N) \ 4647 && !CONSTANT_CLASS_P (arg##N)) \ 4648 (void) (read_only = 0); \ 4649 if (!TREE_CONSTANT (arg##N)) \ 4650 (void) (constant = 0); \ 4651 } \ 4652 } while (0) 4653 4654 tree 4655 build2 (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL) 4656 { 4657 bool constant, read_only, side_effects, div_by_zero; 4658 tree t; 4659 4660 gcc_assert (TREE_CODE_LENGTH (code) == 2); 4661 4662 if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR) 4663 && arg0 && arg1 && tt && POINTER_TYPE_P (tt) 4664 /* When sizetype precision doesn't match that of pointers 4665 we need to be able to build explicit extensions or truncations 4666 of the offset argument. */ 4667 && TYPE_PRECISION (sizetype) == TYPE_PRECISION (tt)) 4668 gcc_assert (TREE_CODE (arg0) == INTEGER_CST 4669 && TREE_CODE (arg1) == INTEGER_CST); 4670 4671 if (code == POINTER_PLUS_EXPR && arg0 && arg1 && tt) 4672 gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0)) 4673 && ptrofftype_p (TREE_TYPE (arg1))); 4674 4675 t = make_node (code PASS_MEM_STAT); 4676 TREE_TYPE (t) = tt; 4677 4678 /* Below, we automatically set TREE_SIDE_EFFECTS and TREE_READONLY for the 4679 result based on those same flags for the arguments. But if the 4680 arguments aren't really even `tree' expressions, we shouldn't be trying 4681 to do this. */ 4682 4683 /* Expressions without side effects may be constant if their 4684 arguments are as well. */ 4685 constant = (TREE_CODE_CLASS (code) == tcc_comparison 4686 || TREE_CODE_CLASS (code) == tcc_binary); 4687 read_only = 1; 4688 side_effects = TREE_SIDE_EFFECTS (t); 4689 4690 switch (code) 4691 { 4692 case TRUNC_DIV_EXPR: 4693 case CEIL_DIV_EXPR: 4694 case FLOOR_DIV_EXPR: 4695 case ROUND_DIV_EXPR: 4696 case EXACT_DIV_EXPR: 4697 case CEIL_MOD_EXPR: 4698 case FLOOR_MOD_EXPR: 4699 case ROUND_MOD_EXPR: 4700 case TRUNC_MOD_EXPR: 4701 div_by_zero = integer_zerop (arg1); 4702 break; 4703 default: 4704 div_by_zero = false; 4705 } 4706 4707 PROCESS_ARG (0); 4708 PROCESS_ARG (1); 4709 4710 TREE_SIDE_EFFECTS (t) = side_effects; 4711 if (code == MEM_REF) 4712 { 4713 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR) 4714 { 4715 tree o = TREE_OPERAND (arg0, 0); 4716 TREE_READONLY (t) = TREE_READONLY (o); 4717 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o); 4718 } 4719 } 4720 else 4721 { 4722 TREE_READONLY (t) = read_only; 4723 /* Don't mark X / 0 as constant. */ 4724 TREE_CONSTANT (t) = constant && !div_by_zero; 4725 TREE_THIS_VOLATILE (t) 4726 = (TREE_CODE_CLASS (code) == tcc_reference 4727 && arg0 && TREE_THIS_VOLATILE (arg0)); 4728 } 4729 4730 return t; 4731 } 4732 4733 4734 tree 4735 build3 (enum tree_code code, tree tt, tree arg0, tree arg1, 4736 tree arg2 MEM_STAT_DECL) 4737 { 4738 bool constant, read_only, side_effects; 4739 tree t; 4740 4741 gcc_assert (TREE_CODE_LENGTH (code) == 3); 4742 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp); 4743 4744 t = make_node (code PASS_MEM_STAT); 4745 TREE_TYPE (t) = tt; 4746 4747 read_only = 1; 4748 4749 /* As a special exception, if COND_EXPR has NULL branches, we 4750 assume that it is a gimple statement and always consider 4751 it to have side effects. */ 4752 if (code == COND_EXPR 4753 && tt == void_type_node 4754 && arg1 == NULL_TREE 4755 && arg2 == NULL_TREE) 4756 side_effects = true; 4757 else 4758 side_effects = TREE_SIDE_EFFECTS (t); 4759 4760 PROCESS_ARG (0); 4761 PROCESS_ARG (1); 4762 PROCESS_ARG (2); 4763 4764 if (code == COND_EXPR) 4765 TREE_READONLY (t) = read_only; 4766 4767 TREE_SIDE_EFFECTS (t) = side_effects; 4768 TREE_THIS_VOLATILE (t) 4769 = (TREE_CODE_CLASS (code) == tcc_reference 4770 && arg0 && TREE_THIS_VOLATILE (arg0)); 4771 4772 return t; 4773 } 4774 4775 tree 4776 build4 (enum tree_code code, tree tt, tree arg0, tree arg1, 4777 tree arg2, tree arg3 MEM_STAT_DECL) 4778 { 4779 bool constant, read_only, side_effects; 4780 tree t; 4781 4782 gcc_assert (TREE_CODE_LENGTH (code) == 4); 4783 4784 t = make_node (code PASS_MEM_STAT); 4785 TREE_TYPE (t) = tt; 4786 4787 side_effects = TREE_SIDE_EFFECTS (t); 4788 4789 PROCESS_ARG (0); 4790 PROCESS_ARG (1); 4791 PROCESS_ARG (2); 4792 PROCESS_ARG (3); 4793 4794 TREE_SIDE_EFFECTS (t) = side_effects; 4795 TREE_THIS_VOLATILE (t) 4796 = (TREE_CODE_CLASS (code) == tcc_reference 4797 && arg0 && TREE_THIS_VOLATILE (arg0)); 4798 4799 return t; 4800 } 4801 4802 tree 4803 build5 (enum tree_code code, tree tt, tree arg0, tree arg1, 4804 tree arg2, tree arg3, tree arg4 MEM_STAT_DECL) 4805 { 4806 bool constant, read_only, side_effects; 4807 tree t; 4808 4809 gcc_assert (TREE_CODE_LENGTH (code) == 5); 4810 4811 t = make_node (code PASS_MEM_STAT); 4812 TREE_TYPE (t) = tt; 4813 4814 side_effects = TREE_SIDE_EFFECTS (t); 4815 4816 PROCESS_ARG (0); 4817 PROCESS_ARG (1); 4818 PROCESS_ARG (2); 4819 PROCESS_ARG (3); 4820 PROCESS_ARG (4); 4821 4822 TREE_SIDE_EFFECTS (t) = side_effects; 4823 if (code == TARGET_MEM_REF) 4824 { 4825 if (arg0 && TREE_CODE (arg0) == ADDR_EXPR) 4826 { 4827 tree o = TREE_OPERAND (arg0, 0); 4828 TREE_READONLY (t) = TREE_READONLY (o); 4829 TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o); 4830 } 4831 } 4832 else 4833 TREE_THIS_VOLATILE (t) 4834 = (TREE_CODE_CLASS (code) == tcc_reference 4835 && arg0 && TREE_THIS_VOLATILE (arg0)); 4836 4837 return t; 4838 } 4839 4840 /* Build a simple MEM_REF tree with the sematics of a plain INDIRECT_REF 4841 on the pointer PTR. */ 4842 4843 tree 4844 build_simple_mem_ref_loc (location_t loc, tree ptr) 4845 { 4846 poly_int64 offset = 0; 4847 tree ptype = TREE_TYPE (ptr); 4848 tree tem; 4849 /* For convenience allow addresses that collapse to a simple base 4850 and offset. */ 4851 if (TREE_CODE (ptr) == ADDR_EXPR 4852 && (handled_component_p (TREE_OPERAND (ptr, 0)) 4853 || TREE_CODE (TREE_OPERAND (ptr, 0)) == MEM_REF)) 4854 { 4855 ptr = get_addr_base_and_unit_offset (TREE_OPERAND (ptr, 0), &offset); 4856 gcc_assert (ptr); 4857 if (TREE_CODE (ptr) == MEM_REF) 4858 { 4859 offset += mem_ref_offset (ptr).force_shwi (); 4860 ptr = TREE_OPERAND (ptr, 0); 4861 } 4862 else 4863 ptr = build_fold_addr_expr (ptr); 4864 gcc_assert (is_gimple_reg (ptr) || is_gimple_min_invariant (ptr)); 4865 } 4866 tem = build2 (MEM_REF, TREE_TYPE (ptype), 4867 ptr, build_int_cst (ptype, offset)); 4868 SET_EXPR_LOCATION (tem, loc); 4869 return tem; 4870 } 4871 4872 /* Return the constant offset of a MEM_REF or TARGET_MEM_REF tree T. */ 4873 4874 poly_offset_int 4875 mem_ref_offset (const_tree t) 4876 { 4877 return poly_offset_int::from (wi::to_poly_wide (TREE_OPERAND (t, 1)), 4878 SIGNED); 4879 } 4880 4881 /* Return an invariant ADDR_EXPR of type TYPE taking the address of BASE 4882 offsetted by OFFSET units. */ 4883 4884 tree 4885 build_invariant_address (tree type, tree base, poly_int64 offset) 4886 { 4887 tree ref = fold_build2 (MEM_REF, TREE_TYPE (type), 4888 build_fold_addr_expr (base), 4889 build_int_cst (ptr_type_node, offset)); 4890 tree addr = build1 (ADDR_EXPR, type, ref); 4891 recompute_tree_invariant_for_addr_expr (addr); 4892 return addr; 4893 } 4894 4895 /* Similar except don't specify the TREE_TYPE 4896 and leave the TREE_SIDE_EFFECTS as 0. 4897 It is permissible for arguments to be null, 4898 or even garbage if their values do not matter. */ 4899 4900 tree 4901 build_nt (enum tree_code code, ...) 4902 { 4903 tree t; 4904 int length; 4905 int i; 4906 va_list p; 4907 4908 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp); 4909 4910 va_start (p, code); 4911 4912 t = make_node (code); 4913 length = TREE_CODE_LENGTH (code); 4914 4915 for (i = 0; i < length; i++) 4916 TREE_OPERAND (t, i) = va_arg (p, tree); 4917 4918 va_end (p); 4919 return t; 4920 } 4921 4922 /* Similar to build_nt, but for creating a CALL_EXPR object with a 4923 tree vec. */ 4924 4925 tree 4926 build_nt_call_vec (tree fn, vec<tree, va_gc> *args) 4927 { 4928 tree ret, t; 4929 unsigned int ix; 4930 4931 ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3); 4932 CALL_EXPR_FN (ret) = fn; 4933 CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE; 4934 FOR_EACH_VEC_SAFE_ELT (args, ix, t) 4935 CALL_EXPR_ARG (ret, ix) = t; 4936 return ret; 4937 } 4938 4939 /* Create a DECL_... node of code CODE, name NAME and data type TYPE. 4940 We do NOT enter this node in any sort of symbol table. 4941 4942 LOC is the location of the decl. 4943 4944 layout_decl is used to set up the decl's storage layout. 4945 Other slots are initialized to 0 or null pointers. */ 4946 4947 tree 4948 build_decl (location_t loc, enum tree_code code, tree name, 4949 tree type MEM_STAT_DECL) 4950 { 4951 tree t; 4952 4953 t = make_node (code PASS_MEM_STAT); 4954 DECL_SOURCE_LOCATION (t) = loc; 4955 4956 /* if (type == error_mark_node) 4957 type = integer_type_node; */ 4958 /* That is not done, deliberately, so that having error_mark_node 4959 as the type can suppress useless errors in the use of this variable. */ 4960 4961 DECL_NAME (t) = name; 4962 TREE_TYPE (t) = type; 4963 4964 if (code == VAR_DECL || code == PARM_DECL || code == RESULT_DECL) 4965 layout_decl (t, 0); 4966 4967 return t; 4968 } 4969 4970 /* Builds and returns function declaration with NAME and TYPE. */ 4971 4972 tree 4973 build_fn_decl (const char *name, tree type) 4974 { 4975 tree id = get_identifier (name); 4976 tree decl = build_decl (input_location, FUNCTION_DECL, id, type); 4977 4978 DECL_EXTERNAL (decl) = 1; 4979 TREE_PUBLIC (decl) = 1; 4980 DECL_ARTIFICIAL (decl) = 1; 4981 TREE_NOTHROW (decl) = 1; 4982 4983 return decl; 4984 } 4985 4986 vec<tree, va_gc> *all_translation_units; 4987 4988 /* Builds a new translation-unit decl with name NAME, queues it in the 4989 global list of translation-unit decls and returns it. */ 4990 4991 tree 4992 build_translation_unit_decl (tree name) 4993 { 4994 tree tu = build_decl (UNKNOWN_LOCATION, TRANSLATION_UNIT_DECL, 4995 name, NULL_TREE); 4996 TRANSLATION_UNIT_LANGUAGE (tu) = lang_hooks.name; 4997 vec_safe_push (all_translation_units, tu); 4998 return tu; 4999 } 5000 5001 5002 /* BLOCK nodes are used to represent the structure of binding contours 5003 and declarations, once those contours have been exited and their contents 5004 compiled. This information is used for outputting debugging info. */ 5005 5006 tree 5007 build_block (tree vars, tree subblocks, tree supercontext, tree chain) 5008 { 5009 tree block = make_node (BLOCK); 5010 5011 BLOCK_VARS (block) = vars; 5012 BLOCK_SUBBLOCKS (block) = subblocks; 5013 BLOCK_SUPERCONTEXT (block) = supercontext; 5014 BLOCK_CHAIN (block) = chain; 5015 return block; 5016 } 5017 5018 5019 /* Like SET_EXPR_LOCATION, but make sure the tree can have a location. 5020 5021 LOC is the location to use in tree T. */ 5022 5023 void 5024 protected_set_expr_location (tree t, location_t loc) 5025 { 5026 if (CAN_HAVE_LOCATION_P (t)) 5027 SET_EXPR_LOCATION (t, loc); 5028 } 5029 5030 /* Reset the expression *EXPR_P, a size or position. 5031 5032 ??? We could reset all non-constant sizes or positions. But it's cheap 5033 enough to not do so and refrain from adding workarounds to dwarf2out.c. 5034 5035 We need to reset self-referential sizes or positions because they cannot 5036 be gimplified and thus can contain a CALL_EXPR after the gimplification 5037 is finished, which will run afoul of LTO streaming. And they need to be 5038 reset to something essentially dummy but not constant, so as to preserve 5039 the properties of the object they are attached to. */ 5040 5041 static inline void 5042 free_lang_data_in_one_sizepos (tree *expr_p) 5043 { 5044 tree expr = *expr_p; 5045 if (CONTAINS_PLACEHOLDER_P (expr)) 5046 *expr_p = build0 (PLACEHOLDER_EXPR, TREE_TYPE (expr)); 5047 } 5048 5049 5050 /* Reset all the fields in a binfo node BINFO. We only keep 5051 BINFO_VTABLE, which is used by gimple_fold_obj_type_ref. */ 5052 5053 static void 5054 free_lang_data_in_binfo (tree binfo) 5055 { 5056 unsigned i; 5057 tree t; 5058 5059 gcc_assert (TREE_CODE (binfo) == TREE_BINFO); 5060 5061 BINFO_VIRTUALS (binfo) = NULL_TREE; 5062 BINFO_BASE_ACCESSES (binfo) = NULL; 5063 BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE; 5064 BINFO_SUBVTT_INDEX (binfo) = NULL_TREE; 5065 5066 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t) 5067 free_lang_data_in_binfo (t); 5068 } 5069 5070 5071 /* Reset all language specific information still present in TYPE. */ 5072 5073 static void 5074 free_lang_data_in_type (tree type) 5075 { 5076 gcc_assert (TYPE_P (type)); 5077 5078 /* Give the FE a chance to remove its own data first. */ 5079 lang_hooks.free_lang_data (type); 5080 5081 TREE_LANG_FLAG_0 (type) = 0; 5082 TREE_LANG_FLAG_1 (type) = 0; 5083 TREE_LANG_FLAG_2 (type) = 0; 5084 TREE_LANG_FLAG_3 (type) = 0; 5085 TREE_LANG_FLAG_4 (type) = 0; 5086 TREE_LANG_FLAG_5 (type) = 0; 5087 TREE_LANG_FLAG_6 (type) = 0; 5088 5089 if (TREE_CODE (type) == FUNCTION_TYPE) 5090 { 5091 /* Remove the const and volatile qualifiers from arguments. The 5092 C++ front end removes them, but the C front end does not, 5093 leading to false ODR violation errors when merging two 5094 instances of the same function signature compiled by 5095 different front ends. */ 5096 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) 5097 { 5098 tree arg_type = TREE_VALUE (p); 5099 5100 if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type)) 5101 { 5102 int quals = TYPE_QUALS (arg_type) 5103 & ~TYPE_QUAL_CONST 5104 & ~TYPE_QUAL_VOLATILE; 5105 TREE_VALUE (p) = build_qualified_type (arg_type, quals); 5106 free_lang_data_in_type (TREE_VALUE (p)); 5107 } 5108 /* C++ FE uses TREE_PURPOSE to store initial values. */ 5109 TREE_PURPOSE (p) = NULL; 5110 } 5111 } 5112 else if (TREE_CODE (type) == METHOD_TYPE) 5113 for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) 5114 /* C++ FE uses TREE_PURPOSE to store initial values. */ 5115 TREE_PURPOSE (p) = NULL; 5116 else if (RECORD_OR_UNION_TYPE_P (type)) 5117 { 5118 /* Remove members that are not FIELD_DECLs from the field list 5119 of an aggregate. These occur in C++. */ 5120 for (tree *prev = &TYPE_FIELDS (type), member; (member = *prev);) 5121 if (TREE_CODE (member) == FIELD_DECL) 5122 prev = &DECL_CHAIN (member); 5123 else 5124 *prev = DECL_CHAIN (member); 5125 5126 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS 5127 and danagle the pointer from time to time. */ 5128 if (TYPE_VFIELD (type) && TREE_CODE (TYPE_VFIELD (type)) != FIELD_DECL) 5129 TYPE_VFIELD (type) = NULL_TREE; 5130 5131 if (TYPE_BINFO (type)) 5132 { 5133 free_lang_data_in_binfo (TYPE_BINFO (type)); 5134 /* We need to preserve link to bases and virtual table for all 5135 polymorphic types to make devirtualization machinery working. */ 5136 if (!BINFO_VTABLE (TYPE_BINFO (type))) 5137 TYPE_BINFO (type) = NULL; 5138 } 5139 } 5140 else if (INTEGRAL_TYPE_P (type) 5141 || SCALAR_FLOAT_TYPE_P (type) 5142 || FIXED_POINT_TYPE_P (type)) 5143 { 5144 free_lang_data_in_one_sizepos (&TYPE_MIN_VALUE (type)); 5145 free_lang_data_in_one_sizepos (&TYPE_MAX_VALUE (type)); 5146 } 5147 5148 TYPE_LANG_SLOT_1 (type) = NULL_TREE; 5149 5150 free_lang_data_in_one_sizepos (&TYPE_SIZE (type)); 5151 free_lang_data_in_one_sizepos (&TYPE_SIZE_UNIT (type)); 5152 5153 if (TYPE_CONTEXT (type) 5154 && TREE_CODE (TYPE_CONTEXT (type)) == BLOCK) 5155 { 5156 tree ctx = TYPE_CONTEXT (type); 5157 do 5158 { 5159 ctx = BLOCK_SUPERCONTEXT (ctx); 5160 } 5161 while (ctx && TREE_CODE (ctx) == BLOCK); 5162 TYPE_CONTEXT (type) = ctx; 5163 } 5164 5165 /* Drop TYPE_DECLs in TYPE_NAME in favor of the identifier in the 5166 TYPE_DECL if the type doesn't have linkage. */ 5167 if (! type_with_linkage_p (type)) 5168 TYPE_NAME (type) = TYPE_IDENTIFIER (type); 5169 } 5170 5171 5172 /* Return true if DECL may need an assembler name to be set. */ 5173 5174 static inline bool 5175 need_assembler_name_p (tree decl) 5176 { 5177 /* We use DECL_ASSEMBLER_NAME to hold mangled type names for One Definition 5178 Rule merging. This makes type_odr_p to return true on those types during 5179 LTO and by comparing the mangled name, we can say what types are intended 5180 to be equivalent across compilation unit. 5181 5182 We do not store names of type_in_anonymous_namespace_p. 5183 5184 Record, union and enumeration type have linkage that allows use 5185 to check type_in_anonymous_namespace_p. We do not mangle compound types 5186 that always can be compared structurally. 5187 5188 Similarly for builtin types, we compare properties of their main variant. 5189 A special case are integer types where mangling do make differences 5190 between char/signed char/unsigned char etc. Storing name for these makes 5191 e.g. -fno-signed-char/-fsigned-char mismatches to be handled well. 5192 See cp/mangle.c:write_builtin_type for details. */ 5193 5194 if (flag_lto_odr_type_mering 5195 && TREE_CODE (decl) == TYPE_DECL 5196 && DECL_NAME (decl) 5197 && decl == TYPE_NAME (TREE_TYPE (decl)) 5198 && TYPE_MAIN_VARIANT (TREE_TYPE (decl)) == TREE_TYPE (decl) 5199 && !TYPE_ARTIFICIAL (TREE_TYPE (decl)) 5200 && (type_with_linkage_p (TREE_TYPE (decl)) 5201 || TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE) 5202 && !variably_modified_type_p (TREE_TYPE (decl), NULL_TREE)) 5203 return !DECL_ASSEMBLER_NAME_SET_P (decl); 5204 /* Only FUNCTION_DECLs and VAR_DECLs are considered. */ 5205 if (!VAR_OR_FUNCTION_DECL_P (decl)) 5206 return false; 5207 5208 /* If DECL already has its assembler name set, it does not need a 5209 new one. */ 5210 if (!HAS_DECL_ASSEMBLER_NAME_P (decl) 5211 || DECL_ASSEMBLER_NAME_SET_P (decl)) 5212 return false; 5213 5214 /* Abstract decls do not need an assembler name. */ 5215 if (DECL_ABSTRACT_P (decl)) 5216 return false; 5217 5218 /* For VAR_DECLs, only static, public and external symbols need an 5219 assembler name. */ 5220 if (VAR_P (decl) 5221 && !TREE_STATIC (decl) 5222 && !TREE_PUBLIC (decl) 5223 && !DECL_EXTERNAL (decl)) 5224 return false; 5225 5226 if (TREE_CODE (decl) == FUNCTION_DECL) 5227 { 5228 /* Do not set assembler name on builtins. Allow RTL expansion to 5229 decide whether to expand inline or via a regular call. */ 5230 if (DECL_BUILT_IN (decl) 5231 && DECL_BUILT_IN_CLASS (decl) != BUILT_IN_FRONTEND) 5232 return false; 5233 5234 /* Functions represented in the callgraph need an assembler name. */ 5235 if (cgraph_node::get (decl) != NULL) 5236 return true; 5237 5238 /* Unused and not public functions don't need an assembler name. */ 5239 if (!TREE_USED (decl) && !TREE_PUBLIC (decl)) 5240 return false; 5241 } 5242 5243 return true; 5244 } 5245 5246 5247 /* Reset all language specific information still present in symbol 5248 DECL. */ 5249 5250 static void 5251 free_lang_data_in_decl (tree decl) 5252 { 5253 gcc_assert (DECL_P (decl)); 5254 5255 /* Give the FE a chance to remove its own data first. */ 5256 lang_hooks.free_lang_data (decl); 5257 5258 TREE_LANG_FLAG_0 (decl) = 0; 5259 TREE_LANG_FLAG_1 (decl) = 0; 5260 TREE_LANG_FLAG_2 (decl) = 0; 5261 TREE_LANG_FLAG_3 (decl) = 0; 5262 TREE_LANG_FLAG_4 (decl) = 0; 5263 TREE_LANG_FLAG_5 (decl) = 0; 5264 TREE_LANG_FLAG_6 (decl) = 0; 5265 5266 free_lang_data_in_one_sizepos (&DECL_SIZE (decl)); 5267 free_lang_data_in_one_sizepos (&DECL_SIZE_UNIT (decl)); 5268 if (TREE_CODE (decl) == FIELD_DECL) 5269 { 5270 free_lang_data_in_one_sizepos (&DECL_FIELD_OFFSET (decl)); 5271 if (TREE_CODE (DECL_CONTEXT (decl)) == QUAL_UNION_TYPE) 5272 DECL_QUALIFIER (decl) = NULL_TREE; 5273 } 5274 5275 if (TREE_CODE (decl) == FUNCTION_DECL) 5276 { 5277 struct cgraph_node *node; 5278 if (!(node = cgraph_node::get (decl)) 5279 || (!node->definition && !node->clones)) 5280 { 5281 if (node) 5282 node->release_body (); 5283 else 5284 { 5285 release_function_body (decl); 5286 DECL_ARGUMENTS (decl) = NULL; 5287 DECL_RESULT (decl) = NULL; 5288 DECL_INITIAL (decl) = error_mark_node; 5289 } 5290 } 5291 if (gimple_has_body_p (decl) || (node && node->thunk.thunk_p)) 5292 { 5293 tree t; 5294 5295 /* If DECL has a gimple body, then the context for its 5296 arguments must be DECL. Otherwise, it doesn't really 5297 matter, as we will not be emitting any code for DECL. In 5298 general, there may be other instances of DECL created by 5299 the front end and since PARM_DECLs are generally shared, 5300 their DECL_CONTEXT changes as the replicas of DECL are 5301 created. The only time where DECL_CONTEXT is important 5302 is for the FUNCTION_DECLs that have a gimple body (since 5303 the PARM_DECL will be used in the function's body). */ 5304 for (t = DECL_ARGUMENTS (decl); t; t = TREE_CHAIN (t)) 5305 DECL_CONTEXT (t) = decl; 5306 if (!DECL_FUNCTION_SPECIFIC_TARGET (decl)) 5307 DECL_FUNCTION_SPECIFIC_TARGET (decl) 5308 = target_option_default_node; 5309 if (!DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)) 5310 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) 5311 = optimization_default_node; 5312 } 5313 5314 /* DECL_SAVED_TREE holds the GENERIC representation for DECL. 5315 At this point, it is not needed anymore. */ 5316 DECL_SAVED_TREE (decl) = NULL_TREE; 5317 5318 /* Clear the abstract origin if it refers to a method. 5319 Otherwise dwarf2out.c will ICE as we splice functions out of 5320 TYPE_FIELDS and thus the origin will not be output 5321 correctly. */ 5322 if (DECL_ABSTRACT_ORIGIN (decl) 5323 && DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl)) 5324 && RECORD_OR_UNION_TYPE_P 5325 (DECL_CONTEXT (DECL_ABSTRACT_ORIGIN (decl)))) 5326 DECL_ABSTRACT_ORIGIN (decl) = NULL_TREE; 5327 5328 /* Sometimes the C++ frontend doesn't manage to transform a temporary 5329 DECL_VINDEX referring to itself into a vtable slot number as it 5330 should. Happens with functions that are copied and then forgotten 5331 about. Just clear it, it won't matter anymore. */ 5332 if (DECL_VINDEX (decl) && !tree_fits_shwi_p (DECL_VINDEX (decl))) 5333 DECL_VINDEX (decl) = NULL_TREE; 5334 } 5335 else if (VAR_P (decl)) 5336 { 5337 if ((DECL_EXTERNAL (decl) 5338 && (!TREE_STATIC (decl) || !TREE_READONLY (decl))) 5339 || (decl_function_context (decl) && !TREE_STATIC (decl))) 5340 DECL_INITIAL (decl) = NULL_TREE; 5341 } 5342 else if (TREE_CODE (decl) == TYPE_DECL) 5343 { 5344 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; 5345 DECL_VISIBILITY_SPECIFIED (decl) = 0; 5346 DECL_INITIAL (decl) = NULL_TREE; 5347 } 5348 else if (TREE_CODE (decl) == FIELD_DECL) 5349 DECL_INITIAL (decl) = NULL_TREE; 5350 else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL 5351 && DECL_INITIAL (decl) 5352 && TREE_CODE (DECL_INITIAL (decl)) == BLOCK) 5353 { 5354 /* Strip builtins from the translation-unit BLOCK. We still have targets 5355 without builtin_decl_explicit support and also builtins are shared 5356 nodes and thus we can't use TREE_CHAIN in multiple lists. */ 5357 tree *nextp = &BLOCK_VARS (DECL_INITIAL (decl)); 5358 while (*nextp) 5359 { 5360 tree var = *nextp; 5361 if (TREE_CODE (var) == FUNCTION_DECL 5362 && DECL_BUILT_IN (var)) 5363 *nextp = TREE_CHAIN (var); 5364 else 5365 nextp = &TREE_CHAIN (var); 5366 } 5367 } 5368 } 5369 5370 5371 /* Data used when collecting DECLs and TYPEs for language data removal. */ 5372 5373 struct free_lang_data_d 5374 { 5375 free_lang_data_d () : decls (100), types (100) {} 5376 5377 /* Worklist to avoid excessive recursion. */ 5378 auto_vec<tree> worklist; 5379 5380 /* Set of traversed objects. Used to avoid duplicate visits. */ 5381 hash_set<tree> pset; 5382 5383 /* Array of symbols to process with free_lang_data_in_decl. */ 5384 auto_vec<tree> decls; 5385 5386 /* Array of types to process with free_lang_data_in_type. */ 5387 auto_vec<tree> types; 5388 }; 5389 5390 5391 /* Add type or decl T to one of the list of tree nodes that need their 5392 language data removed. The lists are held inside FLD. */ 5393 5394 static void 5395 add_tree_to_fld_list (tree t, struct free_lang_data_d *fld) 5396 { 5397 if (DECL_P (t)) 5398 fld->decls.safe_push (t); 5399 else if (TYPE_P (t)) 5400 fld->types.safe_push (t); 5401 else 5402 gcc_unreachable (); 5403 } 5404 5405 /* Push tree node T into FLD->WORKLIST. */ 5406 5407 static inline void 5408 fld_worklist_push (tree t, struct free_lang_data_d *fld) 5409 { 5410 if (t && !is_lang_specific (t) && !fld->pset.contains (t)) 5411 fld->worklist.safe_push ((t)); 5412 } 5413 5414 5415 /* Operand callback helper for free_lang_data_in_node. *TP is the 5416 subtree operand being considered. */ 5417 5418 static tree 5419 find_decls_types_r (tree *tp, int *ws, void *data) 5420 { 5421 tree t = *tp; 5422 struct free_lang_data_d *fld = (struct free_lang_data_d *) data; 5423 5424 if (TREE_CODE (t) == TREE_LIST) 5425 return NULL_TREE; 5426 5427 /* Language specific nodes will be removed, so there is no need 5428 to gather anything under them. */ 5429 if (is_lang_specific (t)) 5430 { 5431 *ws = 0; 5432 return NULL_TREE; 5433 } 5434 5435 if (DECL_P (t)) 5436 { 5437 /* Note that walk_tree does not traverse every possible field in 5438 decls, so we have to do our own traversals here. */ 5439 add_tree_to_fld_list (t, fld); 5440 5441 fld_worklist_push (DECL_NAME (t), fld); 5442 fld_worklist_push (DECL_CONTEXT (t), fld); 5443 fld_worklist_push (DECL_SIZE (t), fld); 5444 fld_worklist_push (DECL_SIZE_UNIT (t), fld); 5445 5446 /* We are going to remove everything under DECL_INITIAL for 5447 TYPE_DECLs. No point walking them. */ 5448 if (TREE_CODE (t) != TYPE_DECL) 5449 fld_worklist_push (DECL_INITIAL (t), fld); 5450 5451 fld_worklist_push (DECL_ATTRIBUTES (t), fld); 5452 fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld); 5453 5454 if (TREE_CODE (t) == FUNCTION_DECL) 5455 { 5456 fld_worklist_push (DECL_ARGUMENTS (t), fld); 5457 fld_worklist_push (DECL_RESULT (t), fld); 5458 } 5459 else if (TREE_CODE (t) == TYPE_DECL) 5460 { 5461 fld_worklist_push (DECL_ORIGINAL_TYPE (t), fld); 5462 } 5463 else if (TREE_CODE (t) == FIELD_DECL) 5464 { 5465 fld_worklist_push (DECL_FIELD_OFFSET (t), fld); 5466 fld_worklist_push (DECL_BIT_FIELD_TYPE (t), fld); 5467 fld_worklist_push (DECL_FIELD_BIT_OFFSET (t), fld); 5468 fld_worklist_push (DECL_FCONTEXT (t), fld); 5469 } 5470 5471 if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL) 5472 && DECL_HAS_VALUE_EXPR_P (t)) 5473 fld_worklist_push (DECL_VALUE_EXPR (t), fld); 5474 5475 if (TREE_CODE (t) != FIELD_DECL 5476 && TREE_CODE (t) != TYPE_DECL) 5477 fld_worklist_push (TREE_CHAIN (t), fld); 5478 *ws = 0; 5479 } 5480 else if (TYPE_P (t)) 5481 { 5482 /* Note that walk_tree does not traverse every possible field in 5483 types, so we have to do our own traversals here. */ 5484 add_tree_to_fld_list (t, fld); 5485 5486 if (!RECORD_OR_UNION_TYPE_P (t)) 5487 fld_worklist_push (TYPE_CACHED_VALUES (t), fld); 5488 fld_worklist_push (TYPE_SIZE (t), fld); 5489 fld_worklist_push (TYPE_SIZE_UNIT (t), fld); 5490 fld_worklist_push (TYPE_ATTRIBUTES (t), fld); 5491 fld_worklist_push (TYPE_POINTER_TO (t), fld); 5492 fld_worklist_push (TYPE_REFERENCE_TO (t), fld); 5493 fld_worklist_push (TYPE_NAME (t), fld); 5494 /* Do not walk TYPE_NEXT_PTR_TO or TYPE_NEXT_REF_TO. We do not stream 5495 them and thus do not and want not to reach unused pointer types 5496 this way. */ 5497 if (!POINTER_TYPE_P (t)) 5498 fld_worklist_push (TYPE_MIN_VALUE_RAW (t), fld); 5499 /* TYPE_MAX_VALUE_RAW is TYPE_BINFO for record types. */ 5500 if (!RECORD_OR_UNION_TYPE_P (t)) 5501 fld_worklist_push (TYPE_MAX_VALUE_RAW (t), fld); 5502 fld_worklist_push (TYPE_MAIN_VARIANT (t), fld); 5503 /* Do not walk TYPE_NEXT_VARIANT. We do not stream it and thus 5504 do not and want not to reach unused variants this way. */ 5505 if (TYPE_CONTEXT (t)) 5506 { 5507 tree ctx = TYPE_CONTEXT (t); 5508 /* We adjust BLOCK TYPE_CONTEXTs to the innermost non-BLOCK one. 5509 So push that instead. */ 5510 while (ctx && TREE_CODE (ctx) == BLOCK) 5511 ctx = BLOCK_SUPERCONTEXT (ctx); 5512 fld_worklist_push (ctx, fld); 5513 } 5514 /* Do not walk TYPE_CANONICAL. We do not stream it and thus do not 5515 and want not to reach unused types this way. */ 5516 5517 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t)) 5518 { 5519 unsigned i; 5520 tree tem; 5521 FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (TYPE_BINFO (t)), i, tem) 5522 fld_worklist_push (TREE_TYPE (tem), fld); 5523 fld_worklist_push (BINFO_TYPE (TYPE_BINFO (t)), fld); 5524 fld_worklist_push (BINFO_VTABLE (TYPE_BINFO (t)), fld); 5525 } 5526 if (RECORD_OR_UNION_TYPE_P (t)) 5527 { 5528 tree tem; 5529 /* Push all TYPE_FIELDS - there can be interleaving interesting 5530 and non-interesting things. */ 5531 tem = TYPE_FIELDS (t); 5532 while (tem) 5533 { 5534 if (TREE_CODE (tem) == FIELD_DECL 5535 || (TREE_CODE (tem) == TYPE_DECL 5536 && !DECL_IGNORED_P (tem) 5537 && debug_info_level > DINFO_LEVEL_TERSE 5538 && !is_redundant_typedef (tem))) 5539 fld_worklist_push (tem, fld); 5540 tem = TREE_CHAIN (tem); 5541 } 5542 } 5543 if (FUNC_OR_METHOD_TYPE_P (t)) 5544 fld_worklist_push (TYPE_METHOD_BASETYPE (t), fld); 5545 5546 fld_worklist_push (TYPE_STUB_DECL (t), fld); 5547 *ws = 0; 5548 } 5549 else if (TREE_CODE (t) == BLOCK) 5550 { 5551 tree tem; 5552 for (tem = BLOCK_VARS (t); tem; tem = TREE_CHAIN (tem)) 5553 fld_worklist_push (tem, fld); 5554 for (tem = BLOCK_SUBBLOCKS (t); tem; tem = BLOCK_CHAIN (tem)) 5555 fld_worklist_push (tem, fld); 5556 fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld); 5557 } 5558 5559 if (TREE_CODE (t) != IDENTIFIER_NODE 5560 && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)) 5561 fld_worklist_push (TREE_TYPE (t), fld); 5562 5563 return NULL_TREE; 5564 } 5565 5566 5567 /* Find decls and types in T. */ 5568 5569 static void 5570 find_decls_types (tree t, struct free_lang_data_d *fld) 5571 { 5572 while (1) 5573 { 5574 if (!fld->pset.contains (t)) 5575 walk_tree (&t, find_decls_types_r, fld, &fld->pset); 5576 if (fld->worklist.is_empty ()) 5577 break; 5578 t = fld->worklist.pop (); 5579 } 5580 } 5581 5582 /* Translate all the types in LIST with the corresponding runtime 5583 types. */ 5584 5585 static tree 5586 get_eh_types_for_runtime (tree list) 5587 { 5588 tree head, prev; 5589 5590 if (list == NULL_TREE) 5591 return NULL_TREE; 5592 5593 head = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list))); 5594 prev = head; 5595 list = TREE_CHAIN (list); 5596 while (list) 5597 { 5598 tree n = build_tree_list (0, lookup_type_for_runtime (TREE_VALUE (list))); 5599 TREE_CHAIN (prev) = n; 5600 prev = TREE_CHAIN (prev); 5601 list = TREE_CHAIN (list); 5602 } 5603 5604 return head; 5605 } 5606 5607 5608 /* Find decls and types referenced in EH region R and store them in 5609 FLD->DECLS and FLD->TYPES. */ 5610 5611 static void 5612 find_decls_types_in_eh_region (eh_region r, struct free_lang_data_d *fld) 5613 { 5614 switch (r->type) 5615 { 5616 case ERT_CLEANUP: 5617 break; 5618 5619 case ERT_TRY: 5620 { 5621 eh_catch c; 5622 5623 /* The types referenced in each catch must first be changed to the 5624 EH types used at runtime. This removes references to FE types 5625 in the region. */ 5626 for (c = r->u.eh_try.first_catch; c ; c = c->next_catch) 5627 { 5628 c->type_list = get_eh_types_for_runtime (c->type_list); 5629 walk_tree (&c->type_list, find_decls_types_r, fld, &fld->pset); 5630 } 5631 } 5632 break; 5633 5634 case ERT_ALLOWED_EXCEPTIONS: 5635 r->u.allowed.type_list 5636 = get_eh_types_for_runtime (r->u.allowed.type_list); 5637 walk_tree (&r->u.allowed.type_list, find_decls_types_r, fld, &fld->pset); 5638 break; 5639 5640 case ERT_MUST_NOT_THROW: 5641 walk_tree (&r->u.must_not_throw.failure_decl, 5642 find_decls_types_r, fld, &fld->pset); 5643 break; 5644 } 5645 } 5646 5647 5648 /* Find decls and types referenced in cgraph node N and store them in 5649 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will 5650 look for *every* kind of DECL and TYPE node reachable from N, 5651 including those embedded inside types and decls (i.e,, TYPE_DECLs, 5652 NAMESPACE_DECLs, etc). */ 5653 5654 static void 5655 find_decls_types_in_node (struct cgraph_node *n, struct free_lang_data_d *fld) 5656 { 5657 basic_block bb; 5658 struct function *fn; 5659 unsigned ix; 5660 tree t; 5661 5662 find_decls_types (n->decl, fld); 5663 5664 if (!gimple_has_body_p (n->decl)) 5665 return; 5666 5667 gcc_assert (current_function_decl == NULL_TREE && cfun == NULL); 5668 5669 fn = DECL_STRUCT_FUNCTION (n->decl); 5670 5671 /* Traverse locals. */ 5672 FOR_EACH_LOCAL_DECL (fn, ix, t) 5673 find_decls_types (t, fld); 5674 5675 /* Traverse EH regions in FN. */ 5676 { 5677 eh_region r; 5678 FOR_ALL_EH_REGION_FN (r, fn) 5679 find_decls_types_in_eh_region (r, fld); 5680 } 5681 5682 /* Traverse every statement in FN. */ 5683 FOR_EACH_BB_FN (bb, fn) 5684 { 5685 gphi_iterator psi; 5686 gimple_stmt_iterator si; 5687 unsigned i; 5688 5689 for (psi = gsi_start_phis (bb); !gsi_end_p (psi); gsi_next (&psi)) 5690 { 5691 gphi *phi = psi.phi (); 5692 5693 for (i = 0; i < gimple_phi_num_args (phi); i++) 5694 { 5695 tree *arg_p = gimple_phi_arg_def_ptr (phi, i); 5696 find_decls_types (*arg_p, fld); 5697 } 5698 } 5699 5700 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 5701 { 5702 gimple *stmt = gsi_stmt (si); 5703 5704 if (is_gimple_call (stmt)) 5705 find_decls_types (gimple_call_fntype (stmt), fld); 5706 5707 for (i = 0; i < gimple_num_ops (stmt); i++) 5708 { 5709 tree arg = gimple_op (stmt, i); 5710 find_decls_types (arg, fld); 5711 } 5712 } 5713 } 5714 } 5715 5716 5717 /* Find decls and types referenced in varpool node N and store them in 5718 FLD->DECLS and FLD->TYPES. Unlike pass_referenced_vars, this will 5719 look for *every* kind of DECL and TYPE node reachable from N, 5720 including those embedded inside types and decls (i.e,, TYPE_DECLs, 5721 NAMESPACE_DECLs, etc). */ 5722 5723 static void 5724 find_decls_types_in_var (varpool_node *v, struct free_lang_data_d *fld) 5725 { 5726 find_decls_types (v->decl, fld); 5727 } 5728 5729 /* If T needs an assembler name, have one created for it. */ 5730 5731 void 5732 assign_assembler_name_if_needed (tree t) 5733 { 5734 if (need_assembler_name_p (t)) 5735 { 5736 /* When setting DECL_ASSEMBLER_NAME, the C++ mangler may emit 5737 diagnostics that use input_location to show locus 5738 information. The problem here is that, at this point, 5739 input_location is generally anchored to the end of the file 5740 (since the parser is long gone), so we don't have a good 5741 position to pin it to. 5742 5743 To alleviate this problem, this uses the location of T's 5744 declaration. Examples of this are 5745 testsuite/g++.dg/template/cond2.C and 5746 testsuite/g++.dg/template/pr35240.C. */ 5747 location_t saved_location = input_location; 5748 input_location = DECL_SOURCE_LOCATION (t); 5749 5750 decl_assembler_name (t); 5751 5752 input_location = saved_location; 5753 } 5754 } 5755 5756 5757 /* Free language specific information for every operand and expression 5758 in every node of the call graph. This process operates in three stages: 5759 5760 1- Every callgraph node and varpool node is traversed looking for 5761 decls and types embedded in them. This is a more exhaustive 5762 search than that done by find_referenced_vars, because it will 5763 also collect individual fields, decls embedded in types, etc. 5764 5765 2- All the decls found are sent to free_lang_data_in_decl. 5766 5767 3- All the types found are sent to free_lang_data_in_type. 5768 5769 The ordering between decls and types is important because 5770 free_lang_data_in_decl sets assembler names, which includes 5771 mangling. So types cannot be freed up until assembler names have 5772 been set up. */ 5773 5774 static void 5775 free_lang_data_in_cgraph (void) 5776 { 5777 struct cgraph_node *n; 5778 varpool_node *v; 5779 struct free_lang_data_d fld; 5780 tree t; 5781 unsigned i; 5782 alias_pair *p; 5783 5784 /* Find decls and types in the body of every function in the callgraph. */ 5785 FOR_EACH_FUNCTION (n) 5786 find_decls_types_in_node (n, &fld); 5787 5788 FOR_EACH_VEC_SAFE_ELT (alias_pairs, i, p) 5789 find_decls_types (p->decl, &fld); 5790 5791 /* Find decls and types in every varpool symbol. */ 5792 FOR_EACH_VARIABLE (v) 5793 find_decls_types_in_var (v, &fld); 5794 5795 /* Set the assembler name on every decl found. We need to do this 5796 now because free_lang_data_in_decl will invalidate data needed 5797 for mangling. This breaks mangling on interdependent decls. */ 5798 FOR_EACH_VEC_ELT (fld.decls, i, t) 5799 assign_assembler_name_if_needed (t); 5800 5801 /* Traverse every decl found freeing its language data. */ 5802 FOR_EACH_VEC_ELT (fld.decls, i, t) 5803 free_lang_data_in_decl (t); 5804 5805 /* Traverse every type found freeing its language data. */ 5806 FOR_EACH_VEC_ELT (fld.types, i, t) 5807 free_lang_data_in_type (t); 5808 if (flag_checking) 5809 { 5810 FOR_EACH_VEC_ELT (fld.types, i, t) 5811 verify_type (t); 5812 } 5813 } 5814 5815 5816 /* Free resources that are used by FE but are not needed once they are done. */ 5817 5818 static unsigned 5819 free_lang_data (void) 5820 { 5821 unsigned i; 5822 5823 /* If we are the LTO frontend we have freed lang-specific data already. */ 5824 if (in_lto_p 5825 || (!flag_generate_lto && !flag_generate_offload)) 5826 { 5827 /* Rebuild type inheritance graph even when not doing LTO to get 5828 consistent profile data. */ 5829 rebuild_type_inheritance_graph (); 5830 return 0; 5831 } 5832 5833 /* Provide a dummy TRANSLATION_UNIT_DECL if the FE failed to provide one. */ 5834 if (vec_safe_is_empty (all_translation_units)) 5835 build_translation_unit_decl (NULL_TREE); 5836 5837 /* Allocate and assign alias sets to the standard integer types 5838 while the slots are still in the way the frontends generated them. */ 5839 for (i = 0; i < itk_none; ++i) 5840 if (integer_types[i]) 5841 TYPE_ALIAS_SET (integer_types[i]) = get_alias_set (integer_types[i]); 5842 5843 /* Traverse the IL resetting language specific information for 5844 operands, expressions, etc. */ 5845 free_lang_data_in_cgraph (); 5846 5847 /* Create gimple variants for common types. */ 5848 for (unsigned i = 0; 5849 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type); 5850 ++i) 5851 builtin_structptr_types[i].node = builtin_structptr_types[i].base; 5852 5853 /* Reset some langhooks. Do not reset types_compatible_p, it may 5854 still be used indirectly via the get_alias_set langhook. */ 5855 lang_hooks.dwarf_name = lhd_dwarf_name; 5856 lang_hooks.decl_printable_name = gimple_decl_printable_name; 5857 lang_hooks.gimplify_expr = lhd_gimplify_expr; 5858 5859 /* We do not want the default decl_assembler_name implementation, 5860 rather if we have fixed everything we want a wrapper around it 5861 asserting that all non-local symbols already got their assembler 5862 name and only produce assembler names for local symbols. Or rather 5863 make sure we never call decl_assembler_name on local symbols and 5864 devise a separate, middle-end private scheme for it. */ 5865 5866 /* Reset diagnostic machinery. */ 5867 tree_diagnostics_defaults (global_dc); 5868 5869 rebuild_type_inheritance_graph (); 5870 5871 return 0; 5872 } 5873 5874 5875 namespace { 5876 5877 const pass_data pass_data_ipa_free_lang_data = 5878 { 5879 SIMPLE_IPA_PASS, /* type */ 5880 "*free_lang_data", /* name */ 5881 OPTGROUP_NONE, /* optinfo_flags */ 5882 TV_IPA_FREE_LANG_DATA, /* tv_id */ 5883 0, /* properties_required */ 5884 0, /* properties_provided */ 5885 0, /* properties_destroyed */ 5886 0, /* todo_flags_start */ 5887 0, /* todo_flags_finish */ 5888 }; 5889 5890 class pass_ipa_free_lang_data : public simple_ipa_opt_pass 5891 { 5892 public: 5893 pass_ipa_free_lang_data (gcc::context *ctxt) 5894 : simple_ipa_opt_pass (pass_data_ipa_free_lang_data, ctxt) 5895 {} 5896 5897 /* opt_pass methods: */ 5898 virtual unsigned int execute (function *) { return free_lang_data (); } 5899 5900 }; // class pass_ipa_free_lang_data 5901 5902 } // anon namespace 5903 5904 simple_ipa_opt_pass * 5905 make_pass_ipa_free_lang_data (gcc::context *ctxt) 5906 { 5907 return new pass_ipa_free_lang_data (ctxt); 5908 } 5909 5910 /* Set the type qualifiers for TYPE to TYPE_QUALS, which is a bitmask 5911 of the various TYPE_QUAL values. */ 5912 5913 static void 5914 set_type_quals (tree type, int type_quals) 5915 { 5916 TYPE_READONLY (type) = (type_quals & TYPE_QUAL_CONST) != 0; 5917 TYPE_VOLATILE (type) = (type_quals & TYPE_QUAL_VOLATILE) != 0; 5918 TYPE_RESTRICT (type) = (type_quals & TYPE_QUAL_RESTRICT) != 0; 5919 TYPE_ATOMIC (type) = (type_quals & TYPE_QUAL_ATOMIC) != 0; 5920 TYPE_ADDR_SPACE (type) = DECODE_QUAL_ADDR_SPACE (type_quals); 5921 } 5922 5923 /* Returns true iff CAND and BASE have equivalent language-specific 5924 qualifiers. */ 5925 5926 bool 5927 check_lang_type (const_tree cand, const_tree base) 5928 { 5929 if (lang_hooks.types.type_hash_eq == NULL) 5930 return true; 5931 /* type_hash_eq currently only applies to these types. */ 5932 if (TREE_CODE (cand) != FUNCTION_TYPE 5933 && TREE_CODE (cand) != METHOD_TYPE) 5934 return true; 5935 return lang_hooks.types.type_hash_eq (cand, base); 5936 } 5937 5938 /* Returns true iff unqualified CAND and BASE are equivalent. */ 5939 5940 bool 5941 check_base_type (const_tree cand, const_tree base) 5942 { 5943 return (TYPE_NAME (cand) == TYPE_NAME (base) 5944 /* Apparently this is needed for Objective-C. */ 5945 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base) 5946 /* Check alignment. */ 5947 && TYPE_ALIGN (cand) == TYPE_ALIGN (base) 5948 && attribute_list_equal (TYPE_ATTRIBUTES (cand), 5949 TYPE_ATTRIBUTES (base))); 5950 } 5951 5952 /* Returns true iff CAND is equivalent to BASE with TYPE_QUALS. */ 5953 5954 bool 5955 check_qualified_type (const_tree cand, const_tree base, int type_quals) 5956 { 5957 return (TYPE_QUALS (cand) == type_quals 5958 && check_base_type (cand, base) 5959 && check_lang_type (cand, base)); 5960 } 5961 5962 /* Returns true iff CAND is equivalent to BASE with ALIGN. */ 5963 5964 static bool 5965 check_aligned_type (const_tree cand, const_tree base, unsigned int align) 5966 { 5967 return (TYPE_QUALS (cand) == TYPE_QUALS (base) 5968 && TYPE_NAME (cand) == TYPE_NAME (base) 5969 /* Apparently this is needed for Objective-C. */ 5970 && TYPE_CONTEXT (cand) == TYPE_CONTEXT (base) 5971 /* Check alignment. */ 5972 && TYPE_ALIGN (cand) == align 5973 && attribute_list_equal (TYPE_ATTRIBUTES (cand), 5974 TYPE_ATTRIBUTES (base)) 5975 && check_lang_type (cand, base)); 5976 } 5977 5978 /* This function checks to see if TYPE matches the size one of the built-in 5979 atomic types, and returns that core atomic type. */ 5980 5981 static tree 5982 find_atomic_core_type (tree type) 5983 { 5984 tree base_atomic_type; 5985 5986 /* Only handle complete types. */ 5987 if (!tree_fits_uhwi_p (TYPE_SIZE (type))) 5988 return NULL_TREE; 5989 5990 switch (tree_to_uhwi (TYPE_SIZE (type))) 5991 { 5992 case 8: 5993 base_atomic_type = atomicQI_type_node; 5994 break; 5995 5996 case 16: 5997 base_atomic_type = atomicHI_type_node; 5998 break; 5999 6000 case 32: 6001 base_atomic_type = atomicSI_type_node; 6002 break; 6003 6004 case 64: 6005 base_atomic_type = atomicDI_type_node; 6006 break; 6007 6008 case 128: 6009 base_atomic_type = atomicTI_type_node; 6010 break; 6011 6012 default: 6013 base_atomic_type = NULL_TREE; 6014 } 6015 6016 return base_atomic_type; 6017 } 6018 6019 /* Return a version of the TYPE, qualified as indicated by the 6020 TYPE_QUALS, if one exists. If no qualified version exists yet, 6021 return NULL_TREE. */ 6022 6023 tree 6024 get_qualified_type (tree type, int type_quals) 6025 { 6026 tree t; 6027 6028 if (TYPE_QUALS (type) == type_quals) 6029 return type; 6030 6031 /* Search the chain of variants to see if there is already one there just 6032 like the one we need to have. If so, use that existing one. We must 6033 preserve the TYPE_NAME, since there is code that depends on this. */ 6034 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) 6035 if (check_qualified_type (t, type, type_quals)) 6036 return t; 6037 6038 return NULL_TREE; 6039 } 6040 6041 /* Like get_qualified_type, but creates the type if it does not 6042 exist. This function never returns NULL_TREE. */ 6043 6044 tree 6045 build_qualified_type (tree type, int type_quals MEM_STAT_DECL) 6046 { 6047 tree t; 6048 6049 /* See if we already have the appropriate qualified variant. */ 6050 t = get_qualified_type (type, type_quals); 6051 6052 /* If not, build it. */ 6053 if (!t) 6054 { 6055 t = build_variant_type_copy (type PASS_MEM_STAT); 6056 set_type_quals (t, type_quals); 6057 6058 if (((type_quals & TYPE_QUAL_ATOMIC) == TYPE_QUAL_ATOMIC)) 6059 { 6060 /* See if this object can map to a basic atomic type. */ 6061 tree atomic_type = find_atomic_core_type (type); 6062 if (atomic_type) 6063 { 6064 /* Ensure the alignment of this type is compatible with 6065 the required alignment of the atomic type. */ 6066 if (TYPE_ALIGN (atomic_type) > TYPE_ALIGN (t)) 6067 SET_TYPE_ALIGN (t, TYPE_ALIGN (atomic_type)); 6068 } 6069 } 6070 6071 if (TYPE_STRUCTURAL_EQUALITY_P (type)) 6072 /* Propagate structural equality. */ 6073 SET_TYPE_STRUCTURAL_EQUALITY (t); 6074 else if (TYPE_CANONICAL (type) != type) 6075 /* Build the underlying canonical type, since it is different 6076 from TYPE. */ 6077 { 6078 tree c = build_qualified_type (TYPE_CANONICAL (type), type_quals); 6079 TYPE_CANONICAL (t) = TYPE_CANONICAL (c); 6080 } 6081 else 6082 /* T is its own canonical type. */ 6083 TYPE_CANONICAL (t) = t; 6084 6085 } 6086 6087 return t; 6088 } 6089 6090 /* Create a variant of type T with alignment ALIGN. */ 6091 6092 tree 6093 build_aligned_type (tree type, unsigned int align) 6094 { 6095 tree t; 6096 6097 if (TYPE_PACKED (type) 6098 || TYPE_ALIGN (type) == align) 6099 return type; 6100 6101 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) 6102 if (check_aligned_type (t, type, align)) 6103 return t; 6104 6105 t = build_variant_type_copy (type); 6106 SET_TYPE_ALIGN (t, align); 6107 TYPE_USER_ALIGN (t) = 1; 6108 6109 return t; 6110 } 6111 6112 /* Create a new distinct copy of TYPE. The new type is made its own 6113 MAIN_VARIANT. If TYPE requires structural equality checks, the 6114 resulting type requires structural equality checks; otherwise, its 6115 TYPE_CANONICAL points to itself. */ 6116 6117 tree 6118 build_distinct_type_copy (tree type MEM_STAT_DECL) 6119 { 6120 tree t = copy_node (type PASS_MEM_STAT); 6121 6122 TYPE_POINTER_TO (t) = 0; 6123 TYPE_REFERENCE_TO (t) = 0; 6124 6125 /* Set the canonical type either to a new equivalence class, or 6126 propagate the need for structural equality checks. */ 6127 if (TYPE_STRUCTURAL_EQUALITY_P (type)) 6128 SET_TYPE_STRUCTURAL_EQUALITY (t); 6129 else 6130 TYPE_CANONICAL (t) = t; 6131 6132 /* Make it its own variant. */ 6133 TYPE_MAIN_VARIANT (t) = t; 6134 TYPE_NEXT_VARIANT (t) = 0; 6135 6136 /* Note that it is now possible for TYPE_MIN_VALUE to be a value 6137 whose TREE_TYPE is not t. This can also happen in the Ada 6138 frontend when using subtypes. */ 6139 6140 return t; 6141 } 6142 6143 /* Create a new variant of TYPE, equivalent but distinct. This is so 6144 the caller can modify it. TYPE_CANONICAL for the return type will 6145 be equivalent to TYPE_CANONICAL of TYPE, indicating that the types 6146 are considered equal by the language itself (or that both types 6147 require structural equality checks). */ 6148 6149 tree 6150 build_variant_type_copy (tree type MEM_STAT_DECL) 6151 { 6152 tree t, m = TYPE_MAIN_VARIANT (type); 6153 6154 t = build_distinct_type_copy (type PASS_MEM_STAT); 6155 6156 /* Since we're building a variant, assume that it is a non-semantic 6157 variant. This also propagates TYPE_STRUCTURAL_EQUALITY_P. */ 6158 TYPE_CANONICAL (t) = TYPE_CANONICAL (type); 6159 /* Type variants have no alias set defined. */ 6160 TYPE_ALIAS_SET (t) = -1; 6161 6162 /* Add the new type to the chain of variants of TYPE. */ 6163 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m); 6164 TYPE_NEXT_VARIANT (m) = t; 6165 TYPE_MAIN_VARIANT (t) = m; 6166 6167 return t; 6168 } 6169 6170 /* Return true if the from tree in both tree maps are equal. */ 6171 6172 int 6173 tree_map_base_eq (const void *va, const void *vb) 6174 { 6175 const struct tree_map_base *const a = (const struct tree_map_base *) va, 6176 *const b = (const struct tree_map_base *) vb; 6177 return (a->from == b->from); 6178 } 6179 6180 /* Hash a from tree in a tree_base_map. */ 6181 6182 unsigned int 6183 tree_map_base_hash (const void *item) 6184 { 6185 return htab_hash_pointer (((const struct tree_map_base *)item)->from); 6186 } 6187 6188 /* Return true if this tree map structure is marked for garbage collection 6189 purposes. We simply return true if the from tree is marked, so that this 6190 structure goes away when the from tree goes away. */ 6191 6192 int 6193 tree_map_base_marked_p (const void *p) 6194 { 6195 return ggc_marked_p (((const struct tree_map_base *) p)->from); 6196 } 6197 6198 /* Hash a from tree in a tree_map. */ 6199 6200 unsigned int 6201 tree_map_hash (const void *item) 6202 { 6203 return (((const struct tree_map *) item)->hash); 6204 } 6205 6206 /* Hash a from tree in a tree_decl_map. */ 6207 6208 unsigned int 6209 tree_decl_map_hash (const void *item) 6210 { 6211 return DECL_UID (((const struct tree_decl_map *) item)->base.from); 6212 } 6213 6214 /* Return the initialization priority for DECL. */ 6215 6216 priority_type 6217 decl_init_priority_lookup (tree decl) 6218 { 6219 symtab_node *snode = symtab_node::get (decl); 6220 6221 if (!snode) 6222 return DEFAULT_INIT_PRIORITY; 6223 return 6224 snode->get_init_priority (); 6225 } 6226 6227 /* Return the finalization priority for DECL. */ 6228 6229 priority_type 6230 decl_fini_priority_lookup (tree decl) 6231 { 6232 cgraph_node *node = cgraph_node::get (decl); 6233 6234 if (!node) 6235 return DEFAULT_INIT_PRIORITY; 6236 return 6237 node->get_fini_priority (); 6238 } 6239 6240 /* Set the initialization priority for DECL to PRIORITY. */ 6241 6242 void 6243 decl_init_priority_insert (tree decl, priority_type priority) 6244 { 6245 struct symtab_node *snode; 6246 6247 if (priority == DEFAULT_INIT_PRIORITY) 6248 { 6249 snode = symtab_node::get (decl); 6250 if (!snode) 6251 return; 6252 } 6253 else if (VAR_P (decl)) 6254 snode = varpool_node::get_create (decl); 6255 else 6256 snode = cgraph_node::get_create (decl); 6257 snode->set_init_priority (priority); 6258 } 6259 6260 /* Set the finalization priority for DECL to PRIORITY. */ 6261 6262 void 6263 decl_fini_priority_insert (tree decl, priority_type priority) 6264 { 6265 struct cgraph_node *node; 6266 6267 if (priority == DEFAULT_INIT_PRIORITY) 6268 { 6269 node = cgraph_node::get (decl); 6270 if (!node) 6271 return; 6272 } 6273 else 6274 node = cgraph_node::get_create (decl); 6275 node->set_fini_priority (priority); 6276 } 6277 6278 /* Print out the statistics for the DECL_DEBUG_EXPR hash table. */ 6279 6280 static void 6281 print_debug_expr_statistics (void) 6282 { 6283 fprintf (stderr, "DECL_DEBUG_EXPR hash: size %ld, %ld elements, %f collisions\n", 6284 (long) debug_expr_for_decl->size (), 6285 (long) debug_expr_for_decl->elements (), 6286 debug_expr_for_decl->collisions ()); 6287 } 6288 6289 /* Print out the statistics for the DECL_VALUE_EXPR hash table. */ 6290 6291 static void 6292 print_value_expr_statistics (void) 6293 { 6294 fprintf (stderr, "DECL_VALUE_EXPR hash: size %ld, %ld elements, %f collisions\n", 6295 (long) value_expr_for_decl->size (), 6296 (long) value_expr_for_decl->elements (), 6297 value_expr_for_decl->collisions ()); 6298 } 6299 6300 /* Lookup a debug expression for FROM, and return it if we find one. */ 6301 6302 tree 6303 decl_debug_expr_lookup (tree from) 6304 { 6305 struct tree_decl_map *h, in; 6306 in.base.from = from; 6307 6308 h = debug_expr_for_decl->find_with_hash (&in, DECL_UID (from)); 6309 if (h) 6310 return h->to; 6311 return NULL_TREE; 6312 } 6313 6314 /* Insert a mapping FROM->TO in the debug expression hashtable. */ 6315 6316 void 6317 decl_debug_expr_insert (tree from, tree to) 6318 { 6319 struct tree_decl_map *h; 6320 6321 h = ggc_alloc<tree_decl_map> (); 6322 h->base.from = from; 6323 h->to = to; 6324 *debug_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h; 6325 } 6326 6327 /* Lookup a value expression for FROM, and return it if we find one. */ 6328 6329 tree 6330 decl_value_expr_lookup (tree from) 6331 { 6332 struct tree_decl_map *h, in; 6333 in.base.from = from; 6334 6335 h = value_expr_for_decl->find_with_hash (&in, DECL_UID (from)); 6336 if (h) 6337 return h->to; 6338 return NULL_TREE; 6339 } 6340 6341 /* Insert a mapping FROM->TO in the value expression hashtable. */ 6342 6343 void 6344 decl_value_expr_insert (tree from, tree to) 6345 { 6346 struct tree_decl_map *h; 6347 6348 h = ggc_alloc<tree_decl_map> (); 6349 h->base.from = from; 6350 h->to = to; 6351 *value_expr_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h; 6352 } 6353 6354 /* Lookup a vector of debug arguments for FROM, and return it if we 6355 find one. */ 6356 6357 vec<tree, va_gc> ** 6358 decl_debug_args_lookup (tree from) 6359 { 6360 struct tree_vec_map *h, in; 6361 6362 if (!DECL_HAS_DEBUG_ARGS_P (from)) 6363 return NULL; 6364 gcc_checking_assert (debug_args_for_decl != NULL); 6365 in.base.from = from; 6366 h = debug_args_for_decl->find_with_hash (&in, DECL_UID (from)); 6367 if (h) 6368 return &h->to; 6369 return NULL; 6370 } 6371 6372 /* Insert a mapping FROM->empty vector of debug arguments in the value 6373 expression hashtable. */ 6374 6375 vec<tree, va_gc> ** 6376 decl_debug_args_insert (tree from) 6377 { 6378 struct tree_vec_map *h; 6379 tree_vec_map **loc; 6380 6381 if (DECL_HAS_DEBUG_ARGS_P (from)) 6382 return decl_debug_args_lookup (from); 6383 if (debug_args_for_decl == NULL) 6384 debug_args_for_decl = hash_table<tree_vec_map_cache_hasher>::create_ggc (64); 6385 h = ggc_alloc<tree_vec_map> (); 6386 h->base.from = from; 6387 h->to = NULL; 6388 loc = debug_args_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT); 6389 *loc = h; 6390 DECL_HAS_DEBUG_ARGS_P (from) = 1; 6391 return &h->to; 6392 } 6393 6394 /* Hashing of types so that we don't make duplicates. 6395 The entry point is `type_hash_canon'. */ 6396 6397 /* Generate the default hash code for TYPE. This is designed for 6398 speed, rather than maximum entropy. */ 6399 6400 hashval_t 6401 type_hash_canon_hash (tree type) 6402 { 6403 inchash::hash hstate; 6404 6405 hstate.add_int (TREE_CODE (type)); 6406 6407 if (TREE_TYPE (type)) 6408 hstate.add_object (TYPE_HASH (TREE_TYPE (type))); 6409 6410 for (tree t = TYPE_ATTRIBUTES (type); t; t = TREE_CHAIN (t)) 6411 /* Just the identifier is adequate to distinguish. */ 6412 hstate.add_object (IDENTIFIER_HASH_VALUE (get_attribute_name (t))); 6413 6414 switch (TREE_CODE (type)) 6415 { 6416 case METHOD_TYPE: 6417 hstate.add_object (TYPE_HASH (TYPE_METHOD_BASETYPE (type))); 6418 /* FALLTHROUGH. */ 6419 case FUNCTION_TYPE: 6420 for (tree t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t)) 6421 if (TREE_VALUE (t) != error_mark_node) 6422 hstate.add_object (TYPE_HASH (TREE_VALUE (t))); 6423 break; 6424 6425 case OFFSET_TYPE: 6426 hstate.add_object (TYPE_HASH (TYPE_OFFSET_BASETYPE (type))); 6427 break; 6428 6429 case ARRAY_TYPE: 6430 { 6431 if (TYPE_DOMAIN (type)) 6432 hstate.add_object (TYPE_HASH (TYPE_DOMAIN (type))); 6433 if (!AGGREGATE_TYPE_P (TREE_TYPE (type))) 6434 { 6435 unsigned typeless = TYPE_TYPELESS_STORAGE (type); 6436 hstate.add_object (typeless); 6437 } 6438 } 6439 break; 6440 6441 case INTEGER_TYPE: 6442 { 6443 tree t = TYPE_MAX_VALUE (type); 6444 if (!t) 6445 t = TYPE_MIN_VALUE (type); 6446 for (int i = 0; i < TREE_INT_CST_NUNITS (t); i++) 6447 hstate.add_object (TREE_INT_CST_ELT (t, i)); 6448 break; 6449 } 6450 6451 case REAL_TYPE: 6452 case FIXED_POINT_TYPE: 6453 { 6454 unsigned prec = TYPE_PRECISION (type); 6455 hstate.add_object (prec); 6456 break; 6457 } 6458 6459 case VECTOR_TYPE: 6460 hstate.add_poly_int (TYPE_VECTOR_SUBPARTS (type)); 6461 break; 6462 6463 default: 6464 break; 6465 } 6466 6467 return hstate.end (); 6468 } 6469 6470 /* These are the Hashtable callback functions. */ 6471 6472 /* Returns true iff the types are equivalent. */ 6473 6474 bool 6475 type_cache_hasher::equal (type_hash *a, type_hash *b) 6476 { 6477 /* First test the things that are the same for all types. */ 6478 if (a->hash != b->hash 6479 || TREE_CODE (a->type) != TREE_CODE (b->type) 6480 || TREE_TYPE (a->type) != TREE_TYPE (b->type) 6481 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type), 6482 TYPE_ATTRIBUTES (b->type)) 6483 || (TREE_CODE (a->type) != COMPLEX_TYPE 6484 && TYPE_NAME (a->type) != TYPE_NAME (b->type))) 6485 return 0; 6486 6487 /* Be careful about comparing arrays before and after the element type 6488 has been completed; don't compare TYPE_ALIGN unless both types are 6489 complete. */ 6490 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type) 6491 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type) 6492 || TYPE_MODE (a->type) != TYPE_MODE (b->type))) 6493 return 0; 6494 6495 switch (TREE_CODE (a->type)) 6496 { 6497 case VOID_TYPE: 6498 case COMPLEX_TYPE: 6499 case POINTER_TYPE: 6500 case REFERENCE_TYPE: 6501 case NULLPTR_TYPE: 6502 return 1; 6503 6504 case VECTOR_TYPE: 6505 return known_eq (TYPE_VECTOR_SUBPARTS (a->type), 6506 TYPE_VECTOR_SUBPARTS (b->type)); 6507 6508 case ENUMERAL_TYPE: 6509 if (TYPE_VALUES (a->type) != TYPE_VALUES (b->type) 6510 && !(TYPE_VALUES (a->type) 6511 && TREE_CODE (TYPE_VALUES (a->type)) == TREE_LIST 6512 && TYPE_VALUES (b->type) 6513 && TREE_CODE (TYPE_VALUES (b->type)) == TREE_LIST 6514 && type_list_equal (TYPE_VALUES (a->type), 6515 TYPE_VALUES (b->type)))) 6516 return 0; 6517 6518 /* fall through */ 6519 6520 case INTEGER_TYPE: 6521 case REAL_TYPE: 6522 case BOOLEAN_TYPE: 6523 if (TYPE_PRECISION (a->type) != TYPE_PRECISION (b->type)) 6524 return false; 6525 return ((TYPE_MAX_VALUE (a->type) == TYPE_MAX_VALUE (b->type) 6526 || tree_int_cst_equal (TYPE_MAX_VALUE (a->type), 6527 TYPE_MAX_VALUE (b->type))) 6528 && (TYPE_MIN_VALUE (a->type) == TYPE_MIN_VALUE (b->type) 6529 || tree_int_cst_equal (TYPE_MIN_VALUE (a->type), 6530 TYPE_MIN_VALUE (b->type)))); 6531 6532 case FIXED_POINT_TYPE: 6533 return TYPE_SATURATING (a->type) == TYPE_SATURATING (b->type); 6534 6535 case OFFSET_TYPE: 6536 return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type); 6537 6538 case METHOD_TYPE: 6539 if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type) 6540 && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type) 6541 || (TYPE_ARG_TYPES (a->type) 6542 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST 6543 && TYPE_ARG_TYPES (b->type) 6544 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST 6545 && type_list_equal (TYPE_ARG_TYPES (a->type), 6546 TYPE_ARG_TYPES (b->type))))) 6547 break; 6548 return 0; 6549 case ARRAY_TYPE: 6550 /* Don't compare TYPE_TYPELESS_STORAGE flag on aggregates, 6551 where the flag should be inherited from the element type 6552 and can change after ARRAY_TYPEs are created; on non-aggregates 6553 compare it and hash it, scalars will never have that flag set 6554 and we need to differentiate between arrays created by different 6555 front-ends or middle-end created arrays. */ 6556 return (TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type) 6557 && (AGGREGATE_TYPE_P (TREE_TYPE (a->type)) 6558 || (TYPE_TYPELESS_STORAGE (a->type) 6559 == TYPE_TYPELESS_STORAGE (b->type)))); 6560 6561 case RECORD_TYPE: 6562 case UNION_TYPE: 6563 case QUAL_UNION_TYPE: 6564 return (TYPE_FIELDS (a->type) == TYPE_FIELDS (b->type) 6565 || (TYPE_FIELDS (a->type) 6566 && TREE_CODE (TYPE_FIELDS (a->type)) == TREE_LIST 6567 && TYPE_FIELDS (b->type) 6568 && TREE_CODE (TYPE_FIELDS (b->type)) == TREE_LIST 6569 && type_list_equal (TYPE_FIELDS (a->type), 6570 TYPE_FIELDS (b->type)))); 6571 6572 case FUNCTION_TYPE: 6573 if (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type) 6574 || (TYPE_ARG_TYPES (a->type) 6575 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST 6576 && TYPE_ARG_TYPES (b->type) 6577 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST 6578 && type_list_equal (TYPE_ARG_TYPES (a->type), 6579 TYPE_ARG_TYPES (b->type)))) 6580 break; 6581 return 0; 6582 6583 default: 6584 return 0; 6585 } 6586 6587 if (lang_hooks.types.type_hash_eq != NULL) 6588 return lang_hooks.types.type_hash_eq (a->type, b->type); 6589 6590 return 1; 6591 } 6592 6593 /* Given TYPE, and HASHCODE its hash code, return the canonical 6594 object for an identical type if one already exists. 6595 Otherwise, return TYPE, and record it as the canonical object. 6596 6597 To use this function, first create a type of the sort you want. 6598 Then compute its hash code from the fields of the type that 6599 make it different from other similar types. 6600 Then call this function and use the value. */ 6601 6602 tree 6603 type_hash_canon (unsigned int hashcode, tree type) 6604 { 6605 type_hash in; 6606 type_hash **loc; 6607 6608 /* The hash table only contains main variants, so ensure that's what we're 6609 being passed. */ 6610 gcc_assert (TYPE_MAIN_VARIANT (type) == type); 6611 6612 /* The TYPE_ALIGN field of a type is set by layout_type(), so we 6613 must call that routine before comparing TYPE_ALIGNs. */ 6614 layout_type (type); 6615 6616 in.hash = hashcode; 6617 in.type = type; 6618 6619 loc = type_hash_table->find_slot_with_hash (&in, hashcode, INSERT); 6620 if (*loc) 6621 { 6622 tree t1 = ((type_hash *) *loc)->type; 6623 gcc_assert (TYPE_MAIN_VARIANT (t1) == t1 6624 && t1 != type); 6625 if (TYPE_UID (type) + 1 == next_type_uid) 6626 --next_type_uid; 6627 /* Free also min/max values and the cache for integer 6628 types. This can't be done in free_node, as LTO frees 6629 those on its own. */ 6630 if (TREE_CODE (type) == INTEGER_TYPE) 6631 { 6632 if (TYPE_MIN_VALUE (type) 6633 && TREE_TYPE (TYPE_MIN_VALUE (type)) == type) 6634 { 6635 /* Zero is always in TYPE_CACHED_VALUES. */ 6636 if (! TYPE_UNSIGNED (type)) 6637 int_cst_hash_table->remove_elt (TYPE_MIN_VALUE (type)); 6638 ggc_free (TYPE_MIN_VALUE (type)); 6639 } 6640 if (TYPE_MAX_VALUE (type) 6641 && TREE_TYPE (TYPE_MAX_VALUE (type)) == type) 6642 { 6643 int_cst_hash_table->remove_elt (TYPE_MAX_VALUE (type)); 6644 ggc_free (TYPE_MAX_VALUE (type)); 6645 } 6646 if (TYPE_CACHED_VALUES_P (type)) 6647 ggc_free (TYPE_CACHED_VALUES (type)); 6648 } 6649 free_node (type); 6650 return t1; 6651 } 6652 else 6653 { 6654 struct type_hash *h; 6655 6656 h = ggc_alloc<type_hash> (); 6657 h->hash = hashcode; 6658 h->type = type; 6659 *loc = h; 6660 6661 return type; 6662 } 6663 } 6664 6665 static void 6666 print_type_hash_statistics (void) 6667 { 6668 fprintf (stderr, "Type hash: size %ld, %ld elements, %f collisions\n", 6669 (long) type_hash_table->size (), 6670 (long) type_hash_table->elements (), 6671 type_hash_table->collisions ()); 6672 } 6673 6674 /* Given two lists of types 6675 (chains of TREE_LIST nodes with types in the TREE_VALUE slots) 6676 return 1 if the lists contain the same types in the same order. 6677 Also, the TREE_PURPOSEs must match. */ 6678 6679 int 6680 type_list_equal (const_tree l1, const_tree l2) 6681 { 6682 const_tree t1, t2; 6683 6684 for (t1 = l1, t2 = l2; t1 && t2; t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2)) 6685 if (TREE_VALUE (t1) != TREE_VALUE (t2) 6686 || (TREE_PURPOSE (t1) != TREE_PURPOSE (t2) 6687 && ! (1 == simple_cst_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)) 6688 && (TREE_TYPE (TREE_PURPOSE (t1)) 6689 == TREE_TYPE (TREE_PURPOSE (t2)))))) 6690 return 0; 6691 6692 return t1 == t2; 6693 } 6694 6695 /* Returns the number of arguments to the FUNCTION_TYPE or METHOD_TYPE 6696 given by TYPE. If the argument list accepts variable arguments, 6697 then this function counts only the ordinary arguments. */ 6698 6699 int 6700 type_num_arguments (const_tree type) 6701 { 6702 int i = 0; 6703 tree t; 6704 6705 for (t = TYPE_ARG_TYPES (type); t; t = TREE_CHAIN (t)) 6706 /* If the function does not take a variable number of arguments, 6707 the last element in the list will have type `void'. */ 6708 if (VOID_TYPE_P (TREE_VALUE (t))) 6709 break; 6710 else 6711 ++i; 6712 6713 return i; 6714 } 6715 6716 /* Nonzero if integer constants T1 and T2 6717 represent the same constant value. */ 6718 6719 int 6720 tree_int_cst_equal (const_tree t1, const_tree t2) 6721 { 6722 if (t1 == t2) 6723 return 1; 6724 6725 if (t1 == 0 || t2 == 0) 6726 return 0; 6727 6728 if (TREE_CODE (t1) == INTEGER_CST 6729 && TREE_CODE (t2) == INTEGER_CST 6730 && wi::to_widest (t1) == wi::to_widest (t2)) 6731 return 1; 6732 6733 return 0; 6734 } 6735 6736 /* Return true if T is an INTEGER_CST whose numerical value (extended 6737 according to TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. */ 6738 6739 bool 6740 tree_fits_shwi_p (const_tree t) 6741 { 6742 return (t != NULL_TREE 6743 && TREE_CODE (t) == INTEGER_CST 6744 && wi::fits_shwi_p (wi::to_widest (t))); 6745 } 6746 6747 /* Return true if T is an INTEGER_CST or POLY_INT_CST whose numerical 6748 value (extended according to TYPE_UNSIGNED) fits in a poly_int64. */ 6749 6750 bool 6751 tree_fits_poly_int64_p (const_tree t) 6752 { 6753 if (t == NULL_TREE) 6754 return false; 6755 if (POLY_INT_CST_P (t)) 6756 { 6757 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; i++) 6758 if (!wi::fits_shwi_p (wi::to_wide (POLY_INT_CST_COEFF (t, i)))) 6759 return false; 6760 return true; 6761 } 6762 return (TREE_CODE (t) == INTEGER_CST 6763 && wi::fits_shwi_p (wi::to_widest (t))); 6764 } 6765 6766 /* Return true if T is an INTEGER_CST whose numerical value (extended 6767 according to TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. */ 6768 6769 bool 6770 tree_fits_uhwi_p (const_tree t) 6771 { 6772 return (t != NULL_TREE 6773 && TREE_CODE (t) == INTEGER_CST 6774 && wi::fits_uhwi_p (wi::to_widest (t))); 6775 } 6776 6777 /* Return true if T is an INTEGER_CST or POLY_INT_CST whose numerical 6778 value (extended according to TYPE_UNSIGNED) fits in a poly_uint64. */ 6779 6780 bool 6781 tree_fits_poly_uint64_p (const_tree t) 6782 { 6783 if (t == NULL_TREE) 6784 return false; 6785 if (POLY_INT_CST_P (t)) 6786 { 6787 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; i++) 6788 if (!wi::fits_uhwi_p (wi::to_widest (POLY_INT_CST_COEFF (t, i)))) 6789 return false; 6790 return true; 6791 } 6792 return (TREE_CODE (t) == INTEGER_CST 6793 && wi::fits_uhwi_p (wi::to_widest (t))); 6794 } 6795 6796 /* T is an INTEGER_CST whose numerical value (extended according to 6797 TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT. Return that 6798 HOST_WIDE_INT. */ 6799 6800 HOST_WIDE_INT 6801 tree_to_shwi (const_tree t) 6802 { 6803 gcc_assert (tree_fits_shwi_p (t)); 6804 return TREE_INT_CST_LOW (t); 6805 } 6806 6807 /* T is an INTEGER_CST whose numerical value (extended according to 6808 TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT. Return that 6809 HOST_WIDE_INT. */ 6810 6811 unsigned HOST_WIDE_INT 6812 tree_to_uhwi (const_tree t) 6813 { 6814 gcc_assert (tree_fits_uhwi_p (t)); 6815 return TREE_INT_CST_LOW (t); 6816 } 6817 6818 /* Return the most significant (sign) bit of T. */ 6819 6820 int 6821 tree_int_cst_sign_bit (const_tree t) 6822 { 6823 unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1; 6824 6825 return wi::extract_uhwi (wi::to_wide (t), bitno, 1); 6826 } 6827 6828 /* Return an indication of the sign of the integer constant T. 6829 The return value is -1 if T < 0, 0 if T == 0, and 1 if T > 0. 6830 Note that -1 will never be returned if T's type is unsigned. */ 6831 6832 int 6833 tree_int_cst_sgn (const_tree t) 6834 { 6835 if (wi::to_wide (t) == 0) 6836 return 0; 6837 else if (TYPE_UNSIGNED (TREE_TYPE (t))) 6838 return 1; 6839 else if (wi::neg_p (wi::to_wide (t))) 6840 return -1; 6841 else 6842 return 1; 6843 } 6844 6845 /* Return the minimum number of bits needed to represent VALUE in a 6846 signed or unsigned type, UNSIGNEDP says which. */ 6847 6848 unsigned int 6849 tree_int_cst_min_precision (tree value, signop sgn) 6850 { 6851 /* If the value is negative, compute its negative minus 1. The latter 6852 adjustment is because the absolute value of the largest negative value 6853 is one larger than the largest positive value. This is equivalent to 6854 a bit-wise negation, so use that operation instead. */ 6855 6856 if (tree_int_cst_sgn (value) < 0) 6857 value = fold_build1 (BIT_NOT_EXPR, TREE_TYPE (value), value); 6858 6859 /* Return the number of bits needed, taking into account the fact 6860 that we need one more bit for a signed than unsigned type. 6861 If value is 0 or -1, the minimum precision is 1 no matter 6862 whether unsignedp is true or false. */ 6863 6864 if (integer_zerop (value)) 6865 return 1; 6866 else 6867 return tree_floor_log2 (value) + 1 + (sgn == SIGNED ? 1 : 0) ; 6868 } 6869 6870 /* Return truthvalue of whether T1 is the same tree structure as T2. 6871 Return 1 if they are the same. 6872 Return 0 if they are understandably different. 6873 Return -1 if either contains tree structure not understood by 6874 this function. */ 6875 6876 int 6877 simple_cst_equal (const_tree t1, const_tree t2) 6878 { 6879 enum tree_code code1, code2; 6880 int cmp; 6881 int i; 6882 6883 if (t1 == t2) 6884 return 1; 6885 if (t1 == 0 || t2 == 0) 6886 return 0; 6887 6888 code1 = TREE_CODE (t1); 6889 code2 = TREE_CODE (t2); 6890 6891 if (CONVERT_EXPR_CODE_P (code1) || code1 == NON_LVALUE_EXPR) 6892 { 6893 if (CONVERT_EXPR_CODE_P (code2) 6894 || code2 == NON_LVALUE_EXPR) 6895 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); 6896 else 6897 return simple_cst_equal (TREE_OPERAND (t1, 0), t2); 6898 } 6899 6900 else if (CONVERT_EXPR_CODE_P (code2) 6901 || code2 == NON_LVALUE_EXPR) 6902 return simple_cst_equal (t1, TREE_OPERAND (t2, 0)); 6903 6904 if (code1 != code2) 6905 return 0; 6906 6907 switch (code1) 6908 { 6909 case INTEGER_CST: 6910 return wi::to_widest (t1) == wi::to_widest (t2); 6911 6912 case REAL_CST: 6913 return real_identical (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2)); 6914 6915 case FIXED_CST: 6916 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1), TREE_FIXED_CST (t2)); 6917 6918 case STRING_CST: 6919 return (TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2) 6920 && ! memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2), 6921 TREE_STRING_LENGTH (t1))); 6922 6923 case CONSTRUCTOR: 6924 { 6925 unsigned HOST_WIDE_INT idx; 6926 vec<constructor_elt, va_gc> *v1 = CONSTRUCTOR_ELTS (t1); 6927 vec<constructor_elt, va_gc> *v2 = CONSTRUCTOR_ELTS (t2); 6928 6929 if (vec_safe_length (v1) != vec_safe_length (v2)) 6930 return false; 6931 6932 for (idx = 0; idx < vec_safe_length (v1); ++idx) 6933 /* ??? Should we handle also fields here? */ 6934 if (!simple_cst_equal ((*v1)[idx].value, (*v2)[idx].value)) 6935 return false; 6936 return true; 6937 } 6938 6939 case SAVE_EXPR: 6940 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); 6941 6942 case CALL_EXPR: 6943 cmp = simple_cst_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)); 6944 if (cmp <= 0) 6945 return cmp; 6946 if (call_expr_nargs (t1) != call_expr_nargs (t2)) 6947 return 0; 6948 { 6949 const_tree arg1, arg2; 6950 const_call_expr_arg_iterator iter1, iter2; 6951 for (arg1 = first_const_call_expr_arg (t1, &iter1), 6952 arg2 = first_const_call_expr_arg (t2, &iter2); 6953 arg1 && arg2; 6954 arg1 = next_const_call_expr_arg (&iter1), 6955 arg2 = next_const_call_expr_arg (&iter2)) 6956 { 6957 cmp = simple_cst_equal (arg1, arg2); 6958 if (cmp <= 0) 6959 return cmp; 6960 } 6961 return arg1 == arg2; 6962 } 6963 6964 case TARGET_EXPR: 6965 /* Special case: if either target is an unallocated VAR_DECL, 6966 it means that it's going to be unified with whatever the 6967 TARGET_EXPR is really supposed to initialize, so treat it 6968 as being equivalent to anything. */ 6969 if ((TREE_CODE (TREE_OPERAND (t1, 0)) == VAR_DECL 6970 && DECL_NAME (TREE_OPERAND (t1, 0)) == NULL_TREE 6971 && !DECL_RTL_SET_P (TREE_OPERAND (t1, 0))) 6972 || (TREE_CODE (TREE_OPERAND (t2, 0)) == VAR_DECL 6973 && DECL_NAME (TREE_OPERAND (t2, 0)) == NULL_TREE 6974 && !DECL_RTL_SET_P (TREE_OPERAND (t2, 0)))) 6975 cmp = 1; 6976 else 6977 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); 6978 6979 if (cmp <= 0) 6980 return cmp; 6981 6982 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)); 6983 6984 case WITH_CLEANUP_EXPR: 6985 cmp = simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); 6986 if (cmp <= 0) 6987 return cmp; 6988 6989 return simple_cst_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1)); 6990 6991 case COMPONENT_REF: 6992 if (TREE_OPERAND (t1, 1) == TREE_OPERAND (t2, 1)) 6993 return simple_cst_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)); 6994 6995 return 0; 6996 6997 case VAR_DECL: 6998 case PARM_DECL: 6999 case CONST_DECL: 7000 case FUNCTION_DECL: 7001 return 0; 7002 7003 default: 7004 if (POLY_INT_CST_P (t1)) 7005 /* A false return means maybe_ne rather than known_ne. */ 7006 return known_eq (poly_widest_int::from (poly_int_cst_value (t1), 7007 TYPE_SIGN (TREE_TYPE (t1))), 7008 poly_widest_int::from (poly_int_cst_value (t2), 7009 TYPE_SIGN (TREE_TYPE (t2)))); 7010 break; 7011 } 7012 7013 /* This general rule works for most tree codes. All exceptions should be 7014 handled above. If this is a language-specific tree code, we can't 7015 trust what might be in the operand, so say we don't know 7016 the situation. */ 7017 if ((int) code1 >= (int) LAST_AND_UNUSED_TREE_CODE) 7018 return -1; 7019 7020 switch (TREE_CODE_CLASS (code1)) 7021 { 7022 case tcc_unary: 7023 case tcc_binary: 7024 case tcc_comparison: 7025 case tcc_expression: 7026 case tcc_reference: 7027 case tcc_statement: 7028 cmp = 1; 7029 for (i = 0; i < TREE_CODE_LENGTH (code1); i++) 7030 { 7031 cmp = simple_cst_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)); 7032 if (cmp <= 0) 7033 return cmp; 7034 } 7035 7036 return cmp; 7037 7038 default: 7039 return -1; 7040 } 7041 } 7042 7043 /* Compare the value of T, an INTEGER_CST, with U, an unsigned integer value. 7044 Return -1, 0, or 1 if the value of T is less than, equal to, or greater 7045 than U, respectively. */ 7046 7047 int 7048 compare_tree_int (const_tree t, unsigned HOST_WIDE_INT u) 7049 { 7050 if (tree_int_cst_sgn (t) < 0) 7051 return -1; 7052 else if (!tree_fits_uhwi_p (t)) 7053 return 1; 7054 else if (TREE_INT_CST_LOW (t) == u) 7055 return 0; 7056 else if (TREE_INT_CST_LOW (t) < u) 7057 return -1; 7058 else 7059 return 1; 7060 } 7061 7062 /* Return true if SIZE represents a constant size that is in bounds of 7063 what the middle-end and the backend accepts (covering not more than 7064 half of the address-space). */ 7065 7066 bool 7067 valid_constant_size_p (const_tree size) 7068 { 7069 if (POLY_INT_CST_P (size)) 7070 { 7071 if (TREE_OVERFLOW (size)) 7072 return false; 7073 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 7074 if (!valid_constant_size_p (POLY_INT_CST_COEFF (size, i))) 7075 return false; 7076 return true; 7077 } 7078 if (! tree_fits_uhwi_p (size) 7079 || TREE_OVERFLOW (size) 7080 || tree_int_cst_sign_bit (size) != 0) 7081 return false; 7082 return true; 7083 } 7084 7085 /* Return the precision of the type, or for a complex or vector type the 7086 precision of the type of its elements. */ 7087 7088 unsigned int 7089 element_precision (const_tree type) 7090 { 7091 if (!TYPE_P (type)) 7092 type = TREE_TYPE (type); 7093 enum tree_code code = TREE_CODE (type); 7094 if (code == COMPLEX_TYPE || code == VECTOR_TYPE) 7095 type = TREE_TYPE (type); 7096 7097 return TYPE_PRECISION (type); 7098 } 7099 7100 /* Return true if CODE represents an associative tree code. Otherwise 7101 return false. */ 7102 bool 7103 associative_tree_code (enum tree_code code) 7104 { 7105 switch (code) 7106 { 7107 case BIT_IOR_EXPR: 7108 case BIT_AND_EXPR: 7109 case BIT_XOR_EXPR: 7110 case PLUS_EXPR: 7111 case MULT_EXPR: 7112 case MIN_EXPR: 7113 case MAX_EXPR: 7114 return true; 7115 7116 default: 7117 break; 7118 } 7119 return false; 7120 } 7121 7122 /* Return true if CODE represents a commutative tree code. Otherwise 7123 return false. */ 7124 bool 7125 commutative_tree_code (enum tree_code code) 7126 { 7127 switch (code) 7128 { 7129 case PLUS_EXPR: 7130 case MULT_EXPR: 7131 case MULT_HIGHPART_EXPR: 7132 case MIN_EXPR: 7133 case MAX_EXPR: 7134 case BIT_IOR_EXPR: 7135 case BIT_XOR_EXPR: 7136 case BIT_AND_EXPR: 7137 case NE_EXPR: 7138 case EQ_EXPR: 7139 case UNORDERED_EXPR: 7140 case ORDERED_EXPR: 7141 case UNEQ_EXPR: 7142 case LTGT_EXPR: 7143 case TRUTH_AND_EXPR: 7144 case TRUTH_XOR_EXPR: 7145 case TRUTH_OR_EXPR: 7146 case WIDEN_MULT_EXPR: 7147 case VEC_WIDEN_MULT_HI_EXPR: 7148 case VEC_WIDEN_MULT_LO_EXPR: 7149 case VEC_WIDEN_MULT_EVEN_EXPR: 7150 case VEC_WIDEN_MULT_ODD_EXPR: 7151 return true; 7152 7153 default: 7154 break; 7155 } 7156 return false; 7157 } 7158 7159 /* Return true if CODE represents a ternary tree code for which the 7160 first two operands are commutative. Otherwise return false. */ 7161 bool 7162 commutative_ternary_tree_code (enum tree_code code) 7163 { 7164 switch (code) 7165 { 7166 case WIDEN_MULT_PLUS_EXPR: 7167 case WIDEN_MULT_MINUS_EXPR: 7168 case DOT_PROD_EXPR: 7169 case FMA_EXPR: 7170 return true; 7171 7172 default: 7173 break; 7174 } 7175 return false; 7176 } 7177 7178 /* Returns true if CODE can overflow. */ 7179 7180 bool 7181 operation_can_overflow (enum tree_code code) 7182 { 7183 switch (code) 7184 { 7185 case PLUS_EXPR: 7186 case MINUS_EXPR: 7187 case MULT_EXPR: 7188 case LSHIFT_EXPR: 7189 /* Can overflow in various ways. */ 7190 return true; 7191 case TRUNC_DIV_EXPR: 7192 case EXACT_DIV_EXPR: 7193 case FLOOR_DIV_EXPR: 7194 case CEIL_DIV_EXPR: 7195 /* For INT_MIN / -1. */ 7196 return true; 7197 case NEGATE_EXPR: 7198 case ABS_EXPR: 7199 /* For -INT_MIN. */ 7200 return true; 7201 default: 7202 /* These operators cannot overflow. */ 7203 return false; 7204 } 7205 } 7206 7207 /* Returns true if CODE operating on operands of type TYPE doesn't overflow, or 7208 ftrapv doesn't generate trapping insns for CODE. */ 7209 7210 bool 7211 operation_no_trapping_overflow (tree type, enum tree_code code) 7212 { 7213 gcc_checking_assert (ANY_INTEGRAL_TYPE_P (type)); 7214 7215 /* We don't generate instructions that trap on overflow for complex or vector 7216 types. */ 7217 if (!INTEGRAL_TYPE_P (type)) 7218 return true; 7219 7220 if (!TYPE_OVERFLOW_TRAPS (type)) 7221 return true; 7222 7223 switch (code) 7224 { 7225 case PLUS_EXPR: 7226 case MINUS_EXPR: 7227 case MULT_EXPR: 7228 case NEGATE_EXPR: 7229 case ABS_EXPR: 7230 /* These operators can overflow, and -ftrapv generates trapping code for 7231 these. */ 7232 return false; 7233 case TRUNC_DIV_EXPR: 7234 case EXACT_DIV_EXPR: 7235 case FLOOR_DIV_EXPR: 7236 case CEIL_DIV_EXPR: 7237 case LSHIFT_EXPR: 7238 /* These operators can overflow, but -ftrapv does not generate trapping 7239 code for these. */ 7240 return true; 7241 default: 7242 /* These operators cannot overflow. */ 7243 return true; 7244 } 7245 } 7246 7247 namespace inchash 7248 { 7249 7250 /* Generate a hash value for an expression. This can be used iteratively 7251 by passing a previous result as the HSTATE argument. 7252 7253 This function is intended to produce the same hash for expressions which 7254 would compare equal using operand_equal_p. */ 7255 void 7256 add_expr (const_tree t, inchash::hash &hstate, unsigned int flags) 7257 { 7258 int i; 7259 enum tree_code code; 7260 enum tree_code_class tclass; 7261 7262 if (t == NULL_TREE || t == error_mark_node) 7263 { 7264 hstate.merge_hash (0); 7265 return; 7266 } 7267 7268 if (!(flags & OEP_ADDRESS_OF)) 7269 STRIP_NOPS (t); 7270 7271 code = TREE_CODE (t); 7272 7273 switch (code) 7274 { 7275 /* Alas, constants aren't shared, so we can't rely on pointer 7276 identity. */ 7277 case VOID_CST: 7278 hstate.merge_hash (0); 7279 return; 7280 case INTEGER_CST: 7281 gcc_checking_assert (!(flags & OEP_ADDRESS_OF)); 7282 for (i = 0; i < TREE_INT_CST_EXT_NUNITS (t); i++) 7283 hstate.add_hwi (TREE_INT_CST_ELT (t, i)); 7284 return; 7285 case REAL_CST: 7286 { 7287 unsigned int val2; 7288 if (!HONOR_SIGNED_ZEROS (t) && real_zerop (t)) 7289 val2 = rvc_zero; 7290 else 7291 val2 = real_hash (TREE_REAL_CST_PTR (t)); 7292 hstate.merge_hash (val2); 7293 return; 7294 } 7295 case FIXED_CST: 7296 { 7297 unsigned int val2 = fixed_hash (TREE_FIXED_CST_PTR (t)); 7298 hstate.merge_hash (val2); 7299 return; 7300 } 7301 case STRING_CST: 7302 hstate.add ((const void *) TREE_STRING_POINTER (t), 7303 TREE_STRING_LENGTH (t)); 7304 return; 7305 case COMPLEX_CST: 7306 inchash::add_expr (TREE_REALPART (t), hstate, flags); 7307 inchash::add_expr (TREE_IMAGPART (t), hstate, flags); 7308 return; 7309 case VECTOR_CST: 7310 { 7311 hstate.add_int (VECTOR_CST_NPATTERNS (t)); 7312 hstate.add_int (VECTOR_CST_NELTS_PER_PATTERN (t)); 7313 unsigned int count = vector_cst_encoded_nelts (t); 7314 for (unsigned int i = 0; i < count; ++i) 7315 inchash::add_expr (VECTOR_CST_ENCODED_ELT (t, i), hstate, flags); 7316 return; 7317 } 7318 case SSA_NAME: 7319 /* We can just compare by pointer. */ 7320 hstate.add_hwi (SSA_NAME_VERSION (t)); 7321 return; 7322 case PLACEHOLDER_EXPR: 7323 /* The node itself doesn't matter. */ 7324 return; 7325 case BLOCK: 7326 case OMP_CLAUSE: 7327 /* Ignore. */ 7328 return; 7329 case TREE_LIST: 7330 /* A list of expressions, for a CALL_EXPR or as the elements of a 7331 VECTOR_CST. */ 7332 for (; t; t = TREE_CHAIN (t)) 7333 inchash::add_expr (TREE_VALUE (t), hstate, flags); 7334 return; 7335 case CONSTRUCTOR: 7336 { 7337 unsigned HOST_WIDE_INT idx; 7338 tree field, value; 7339 flags &= ~OEP_ADDRESS_OF; 7340 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), idx, field, value) 7341 { 7342 inchash::add_expr (field, hstate, flags); 7343 inchash::add_expr (value, hstate, flags); 7344 } 7345 return; 7346 } 7347 case STATEMENT_LIST: 7348 { 7349 tree_stmt_iterator i; 7350 for (i = tsi_start (CONST_CAST_TREE (t)); 7351 !tsi_end_p (i); tsi_next (&i)) 7352 inchash::add_expr (tsi_stmt (i), hstate, flags); 7353 return; 7354 } 7355 case TREE_VEC: 7356 for (i = 0; i < TREE_VEC_LENGTH (t); ++i) 7357 inchash::add_expr (TREE_VEC_ELT (t, i), hstate, flags); 7358 return; 7359 case IDENTIFIER_NODE: 7360 hstate.add_object (IDENTIFIER_HASH_VALUE (t)); 7361 return; 7362 case FUNCTION_DECL: 7363 /* When referring to a built-in FUNCTION_DECL, use the __builtin__ form. 7364 Otherwise nodes that compare equal according to operand_equal_p might 7365 get different hash codes. However, don't do this for machine specific 7366 or front end builtins, since the function code is overloaded in those 7367 cases. */ 7368 if (DECL_BUILT_IN_CLASS (t) == BUILT_IN_NORMAL 7369 && builtin_decl_explicit_p (DECL_FUNCTION_CODE (t))) 7370 { 7371 t = builtin_decl_explicit (DECL_FUNCTION_CODE (t)); 7372 code = TREE_CODE (t); 7373 } 7374 /* FALL THROUGH */ 7375 default: 7376 if (POLY_INT_CST_P (t)) 7377 { 7378 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i) 7379 hstate.add_wide_int (wi::to_wide (POLY_INT_CST_COEFF (t, i))); 7380 return; 7381 } 7382 tclass = TREE_CODE_CLASS (code); 7383 7384 if (tclass == tcc_declaration) 7385 { 7386 /* DECL's have a unique ID */ 7387 hstate.add_hwi (DECL_UID (t)); 7388 } 7389 else if (tclass == tcc_comparison && !commutative_tree_code (code)) 7390 { 7391 /* For comparisons that can be swapped, use the lower 7392 tree code. */ 7393 enum tree_code ccode = swap_tree_comparison (code); 7394 if (code < ccode) 7395 ccode = code; 7396 hstate.add_object (ccode); 7397 inchash::add_expr (TREE_OPERAND (t, ccode != code), hstate, flags); 7398 inchash::add_expr (TREE_OPERAND (t, ccode == code), hstate, flags); 7399 } 7400 else if (CONVERT_EXPR_CODE_P (code)) 7401 { 7402 /* NOP_EXPR and CONVERT_EXPR are considered equal by 7403 operand_equal_p. */ 7404 enum tree_code ccode = NOP_EXPR; 7405 hstate.add_object (ccode); 7406 7407 /* Don't hash the type, that can lead to having nodes which 7408 compare equal according to operand_equal_p, but which 7409 have different hash codes. Make sure to include signedness 7410 in the hash computation. */ 7411 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t))); 7412 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags); 7413 } 7414 /* For OEP_ADDRESS_OF, hash MEM_EXPR[&decl, 0] the same as decl. */ 7415 else if (code == MEM_REF 7416 && (flags & OEP_ADDRESS_OF) != 0 7417 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR 7418 && DECL_P (TREE_OPERAND (TREE_OPERAND (t, 0), 0)) 7419 && integer_zerop (TREE_OPERAND (t, 1))) 7420 inchash::add_expr (TREE_OPERAND (TREE_OPERAND (t, 0), 0), 7421 hstate, flags); 7422 /* Don't ICE on FE specific trees, or their arguments etc. 7423 during operand_equal_p hash verification. */ 7424 else if (!IS_EXPR_CODE_CLASS (tclass)) 7425 gcc_assert (flags & OEP_HASH_CHECK); 7426 else 7427 { 7428 unsigned int sflags = flags; 7429 7430 hstate.add_object (code); 7431 7432 switch (code) 7433 { 7434 case ADDR_EXPR: 7435 gcc_checking_assert (!(flags & OEP_ADDRESS_OF)); 7436 flags |= OEP_ADDRESS_OF; 7437 sflags = flags; 7438 break; 7439 7440 case INDIRECT_REF: 7441 case MEM_REF: 7442 case TARGET_MEM_REF: 7443 flags &= ~OEP_ADDRESS_OF; 7444 sflags = flags; 7445 break; 7446 7447 case ARRAY_REF: 7448 case ARRAY_RANGE_REF: 7449 case COMPONENT_REF: 7450 case BIT_FIELD_REF: 7451 sflags &= ~OEP_ADDRESS_OF; 7452 break; 7453 7454 case COND_EXPR: 7455 flags &= ~OEP_ADDRESS_OF; 7456 break; 7457 7458 case FMA_EXPR: 7459 case WIDEN_MULT_PLUS_EXPR: 7460 case WIDEN_MULT_MINUS_EXPR: 7461 { 7462 /* The multiplication operands are commutative. */ 7463 inchash::hash one, two; 7464 inchash::add_expr (TREE_OPERAND (t, 0), one, flags); 7465 inchash::add_expr (TREE_OPERAND (t, 1), two, flags); 7466 hstate.add_commutative (one, two); 7467 inchash::add_expr (TREE_OPERAND (t, 2), two, flags); 7468 return; 7469 } 7470 7471 case CALL_EXPR: 7472 if (CALL_EXPR_FN (t) == NULL_TREE) 7473 hstate.add_int (CALL_EXPR_IFN (t)); 7474 break; 7475 7476 case TARGET_EXPR: 7477 /* For TARGET_EXPR, just hash on the TARGET_EXPR_SLOT. 7478 Usually different TARGET_EXPRs just should use 7479 different temporaries in their slots. */ 7480 inchash::add_expr (TARGET_EXPR_SLOT (t), hstate, flags); 7481 return; 7482 7483 default: 7484 break; 7485 } 7486 7487 /* Don't hash the type, that can lead to having nodes which 7488 compare equal according to operand_equal_p, but which 7489 have different hash codes. */ 7490 if (code == NON_LVALUE_EXPR) 7491 { 7492 /* Make sure to include signness in the hash computation. */ 7493 hstate.add_int (TYPE_UNSIGNED (TREE_TYPE (t))); 7494 inchash::add_expr (TREE_OPERAND (t, 0), hstate, flags); 7495 } 7496 7497 else if (commutative_tree_code (code)) 7498 { 7499 /* It's a commutative expression. We want to hash it the same 7500 however it appears. We do this by first hashing both operands 7501 and then rehashing based on the order of their independent 7502 hashes. */ 7503 inchash::hash one, two; 7504 inchash::add_expr (TREE_OPERAND (t, 0), one, flags); 7505 inchash::add_expr (TREE_OPERAND (t, 1), two, flags); 7506 hstate.add_commutative (one, two); 7507 } 7508 else 7509 for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i) 7510 inchash::add_expr (TREE_OPERAND (t, i), hstate, 7511 i == 0 ? flags : sflags); 7512 } 7513 return; 7514 } 7515 } 7516 7517 } 7518 7519 /* Constructors for pointer, array and function types. 7520 (RECORD_TYPE, UNION_TYPE and ENUMERAL_TYPE nodes are 7521 constructed by language-dependent code, not here.) */ 7522 7523 /* Construct, lay out and return the type of pointers to TO_TYPE with 7524 mode MODE. If CAN_ALIAS_ALL is TRUE, indicate this type can 7525 reference all of memory. If such a type has already been 7526 constructed, reuse it. */ 7527 7528 tree 7529 build_pointer_type_for_mode (tree to_type, machine_mode mode, 7530 bool can_alias_all) 7531 { 7532 tree t; 7533 bool could_alias = can_alias_all; 7534 7535 if (to_type == error_mark_node) 7536 return error_mark_node; 7537 7538 /* If the pointed-to type has the may_alias attribute set, force 7539 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */ 7540 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type))) 7541 can_alias_all = true; 7542 7543 /* In some cases, languages will have things that aren't a POINTER_TYPE 7544 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_POINTER_TO. 7545 In that case, return that type without regard to the rest of our 7546 operands. 7547 7548 ??? This is a kludge, but consistent with the way this function has 7549 always operated and there doesn't seem to be a good way to avoid this 7550 at the moment. */ 7551 if (TYPE_POINTER_TO (to_type) != 0 7552 && TREE_CODE (TYPE_POINTER_TO (to_type)) != POINTER_TYPE) 7553 return TYPE_POINTER_TO (to_type); 7554 7555 /* First, if we already have a type for pointers to TO_TYPE and it's 7556 the proper mode, use it. */ 7557 for (t = TYPE_POINTER_TO (to_type); t; t = TYPE_NEXT_PTR_TO (t)) 7558 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all) 7559 return t; 7560 7561 t = make_node (POINTER_TYPE); 7562 7563 TREE_TYPE (t) = to_type; 7564 SET_TYPE_MODE (t, mode); 7565 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all; 7566 TYPE_NEXT_PTR_TO (t) = TYPE_POINTER_TO (to_type); 7567 TYPE_POINTER_TO (to_type) = t; 7568 7569 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */ 7570 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p) 7571 SET_TYPE_STRUCTURAL_EQUALITY (t); 7572 else if (TYPE_CANONICAL (to_type) != to_type || could_alias) 7573 TYPE_CANONICAL (t) 7574 = build_pointer_type_for_mode (TYPE_CANONICAL (to_type), 7575 mode, false); 7576 7577 /* Lay out the type. This function has many callers that are concerned 7578 with expression-construction, and this simplifies them all. */ 7579 layout_type (t); 7580 7581 return t; 7582 } 7583 7584 /* By default build pointers in ptr_mode. */ 7585 7586 tree 7587 build_pointer_type (tree to_type) 7588 { 7589 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC 7590 : TYPE_ADDR_SPACE (to_type); 7591 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as); 7592 return build_pointer_type_for_mode (to_type, pointer_mode, false); 7593 } 7594 7595 /* Same as build_pointer_type_for_mode, but for REFERENCE_TYPE. */ 7596 7597 tree 7598 build_reference_type_for_mode (tree to_type, machine_mode mode, 7599 bool can_alias_all) 7600 { 7601 tree t; 7602 bool could_alias = can_alias_all; 7603 7604 if (to_type == error_mark_node) 7605 return error_mark_node; 7606 7607 /* If the pointed-to type has the may_alias attribute set, force 7608 a TYPE_REF_CAN_ALIAS_ALL pointer to be generated. */ 7609 if (lookup_attribute ("may_alias", TYPE_ATTRIBUTES (to_type))) 7610 can_alias_all = true; 7611 7612 /* In some cases, languages will have things that aren't a REFERENCE_TYPE 7613 (such as a RECORD_TYPE for fat pointers in Ada) as TYPE_REFERENCE_TO. 7614 In that case, return that type without regard to the rest of our 7615 operands. 7616 7617 ??? This is a kludge, but consistent with the way this function has 7618 always operated and there doesn't seem to be a good way to avoid this 7619 at the moment. */ 7620 if (TYPE_REFERENCE_TO (to_type) != 0 7621 && TREE_CODE (TYPE_REFERENCE_TO (to_type)) != REFERENCE_TYPE) 7622 return TYPE_REFERENCE_TO (to_type); 7623 7624 /* First, if we already have a type for pointers to TO_TYPE and it's 7625 the proper mode, use it. */ 7626 for (t = TYPE_REFERENCE_TO (to_type); t; t = TYPE_NEXT_REF_TO (t)) 7627 if (TYPE_MODE (t) == mode && TYPE_REF_CAN_ALIAS_ALL (t) == can_alias_all) 7628 return t; 7629 7630 t = make_node (REFERENCE_TYPE); 7631 7632 TREE_TYPE (t) = to_type; 7633 SET_TYPE_MODE (t, mode); 7634 TYPE_REF_CAN_ALIAS_ALL (t) = can_alias_all; 7635 TYPE_NEXT_REF_TO (t) = TYPE_REFERENCE_TO (to_type); 7636 TYPE_REFERENCE_TO (to_type) = t; 7637 7638 /* During LTO we do not set TYPE_CANONICAL of pointers and references. */ 7639 if (TYPE_STRUCTURAL_EQUALITY_P (to_type) || in_lto_p) 7640 SET_TYPE_STRUCTURAL_EQUALITY (t); 7641 else if (TYPE_CANONICAL (to_type) != to_type || could_alias) 7642 TYPE_CANONICAL (t) 7643 = build_reference_type_for_mode (TYPE_CANONICAL (to_type), 7644 mode, false); 7645 7646 layout_type (t); 7647 7648 return t; 7649 } 7650 7651 7652 /* Build the node for the type of references-to-TO_TYPE by default 7653 in ptr_mode. */ 7654 7655 tree 7656 build_reference_type (tree to_type) 7657 { 7658 addr_space_t as = to_type == error_mark_node? ADDR_SPACE_GENERIC 7659 : TYPE_ADDR_SPACE (to_type); 7660 machine_mode pointer_mode = targetm.addr_space.pointer_mode (as); 7661 return build_reference_type_for_mode (to_type, pointer_mode, false); 7662 } 7663 7664 #define MAX_INT_CACHED_PREC \ 7665 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64) 7666 static GTY(()) tree nonstandard_integer_type_cache[2 * MAX_INT_CACHED_PREC + 2]; 7667 7668 /* Builds a signed or unsigned integer type of precision PRECISION. 7669 Used for C bitfields whose precision does not match that of 7670 built-in target types. */ 7671 tree 7672 build_nonstandard_integer_type (unsigned HOST_WIDE_INT precision, 7673 int unsignedp) 7674 { 7675 tree itype, ret; 7676 7677 if (unsignedp) 7678 unsignedp = MAX_INT_CACHED_PREC + 1; 7679 7680 if (precision <= MAX_INT_CACHED_PREC) 7681 { 7682 itype = nonstandard_integer_type_cache[precision + unsignedp]; 7683 if (itype) 7684 return itype; 7685 } 7686 7687 itype = make_node (INTEGER_TYPE); 7688 TYPE_PRECISION (itype) = precision; 7689 7690 if (unsignedp) 7691 fixup_unsigned_type (itype); 7692 else 7693 fixup_signed_type (itype); 7694 7695 ret = itype; 7696 7697 inchash::hash hstate; 7698 inchash::add_expr (TYPE_MAX_VALUE (itype), hstate); 7699 ret = type_hash_canon (hstate.end (), itype); 7700 if (precision <= MAX_INT_CACHED_PREC) 7701 nonstandard_integer_type_cache[precision + unsignedp] = ret; 7702 7703 return ret; 7704 } 7705 7706 #define MAX_BOOL_CACHED_PREC \ 7707 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64) 7708 static GTY(()) tree nonstandard_boolean_type_cache[MAX_BOOL_CACHED_PREC + 1]; 7709 7710 /* Builds a boolean type of precision PRECISION. 7711 Used for boolean vectors to choose proper vector element size. */ 7712 tree 7713 build_nonstandard_boolean_type (unsigned HOST_WIDE_INT precision) 7714 { 7715 tree type; 7716 7717 if (precision <= MAX_BOOL_CACHED_PREC) 7718 { 7719 type = nonstandard_boolean_type_cache[precision]; 7720 if (type) 7721 return type; 7722 } 7723 7724 type = make_node (BOOLEAN_TYPE); 7725 TYPE_PRECISION (type) = precision; 7726 fixup_signed_type (type); 7727 7728 if (precision <= MAX_INT_CACHED_PREC) 7729 nonstandard_boolean_type_cache[precision] = type; 7730 7731 return type; 7732 } 7733 7734 /* Create a range of some discrete type TYPE (an INTEGER_TYPE, ENUMERAL_TYPE 7735 or BOOLEAN_TYPE) with low bound LOWVAL and high bound HIGHVAL. If SHARED 7736 is true, reuse such a type that has already been constructed. */ 7737 7738 static tree 7739 build_range_type_1 (tree type, tree lowval, tree highval, bool shared) 7740 { 7741 tree itype = make_node (INTEGER_TYPE); 7742 7743 TREE_TYPE (itype) = type; 7744 7745 TYPE_MIN_VALUE (itype) = fold_convert (type, lowval); 7746 TYPE_MAX_VALUE (itype) = highval ? fold_convert (type, highval) : NULL; 7747 7748 TYPE_PRECISION (itype) = TYPE_PRECISION (type); 7749 SET_TYPE_MODE (itype, TYPE_MODE (type)); 7750 TYPE_SIZE (itype) = TYPE_SIZE (type); 7751 TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (type); 7752 SET_TYPE_ALIGN (itype, TYPE_ALIGN (type)); 7753 TYPE_USER_ALIGN (itype) = TYPE_USER_ALIGN (type); 7754 SET_TYPE_WARN_IF_NOT_ALIGN (itype, TYPE_WARN_IF_NOT_ALIGN (type)); 7755 7756 if (!shared) 7757 return itype; 7758 7759 if ((TYPE_MIN_VALUE (itype) 7760 && TREE_CODE (TYPE_MIN_VALUE (itype)) != INTEGER_CST) 7761 || (TYPE_MAX_VALUE (itype) 7762 && TREE_CODE (TYPE_MAX_VALUE (itype)) != INTEGER_CST)) 7763 { 7764 /* Since we cannot reliably merge this type, we need to compare it using 7765 structural equality checks. */ 7766 SET_TYPE_STRUCTURAL_EQUALITY (itype); 7767 return itype; 7768 } 7769 7770 hashval_t hash = type_hash_canon_hash (itype); 7771 itype = type_hash_canon (hash, itype); 7772 7773 return itype; 7774 } 7775 7776 /* Wrapper around build_range_type_1 with SHARED set to true. */ 7777 7778 tree 7779 build_range_type (tree type, tree lowval, tree highval) 7780 { 7781 return build_range_type_1 (type, lowval, highval, true); 7782 } 7783 7784 /* Wrapper around build_range_type_1 with SHARED set to false. */ 7785 7786 tree 7787 build_nonshared_range_type (tree type, tree lowval, tree highval) 7788 { 7789 return build_range_type_1 (type, lowval, highval, false); 7790 } 7791 7792 /* Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE. 7793 MAXVAL should be the maximum value in the domain 7794 (one less than the length of the array). 7795 7796 The maximum value that MAXVAL can have is INT_MAX for a HOST_WIDE_INT. 7797 We don't enforce this limit, that is up to caller (e.g. language front end). 7798 The limit exists because the result is a signed type and we don't handle 7799 sizes that use more than one HOST_WIDE_INT. */ 7800 7801 tree 7802 build_index_type (tree maxval) 7803 { 7804 return build_range_type (sizetype, size_zero_node, maxval); 7805 } 7806 7807 /* Return true if the debug information for TYPE, a subtype, should be emitted 7808 as a subrange type. If so, set LOWVAL to the low bound and HIGHVAL to the 7809 high bound, respectively. Sometimes doing so unnecessarily obfuscates the 7810 debug info and doesn't reflect the source code. */ 7811 7812 bool 7813 subrange_type_for_debug_p (const_tree type, tree *lowval, tree *highval) 7814 { 7815 tree base_type = TREE_TYPE (type), low, high; 7816 7817 /* Subrange types have a base type which is an integral type. */ 7818 if (!INTEGRAL_TYPE_P (base_type)) 7819 return false; 7820 7821 /* Get the real bounds of the subtype. */ 7822 if (lang_hooks.types.get_subrange_bounds) 7823 lang_hooks.types.get_subrange_bounds (type, &low, &high); 7824 else 7825 { 7826 low = TYPE_MIN_VALUE (type); 7827 high = TYPE_MAX_VALUE (type); 7828 } 7829 7830 /* If the type and its base type have the same representation and the same 7831 name, then the type is not a subrange but a copy of the base type. */ 7832 if ((TREE_CODE (base_type) == INTEGER_TYPE 7833 || TREE_CODE (base_type) == BOOLEAN_TYPE) 7834 && int_size_in_bytes (type) == int_size_in_bytes (base_type) 7835 && tree_int_cst_equal (low, TYPE_MIN_VALUE (base_type)) 7836 && tree_int_cst_equal (high, TYPE_MAX_VALUE (base_type)) 7837 && TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (base_type)) 7838 return false; 7839 7840 if (lowval) 7841 *lowval = low; 7842 if (highval) 7843 *highval = high; 7844 return true; 7845 } 7846 7847 /* Construct, lay out and return the type of arrays of elements with ELT_TYPE 7848 and number of elements specified by the range of values of INDEX_TYPE. 7849 If TYPELESS_STORAGE is true, TYPE_TYPELESS_STORAGE flag is set on the type. 7850 If SHARED is true, reuse such a type that has already been constructed. */ 7851 7852 static tree 7853 build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage, 7854 bool shared) 7855 { 7856 tree t; 7857 7858 if (TREE_CODE (elt_type) == FUNCTION_TYPE) 7859 { 7860 error ("arrays of functions are not meaningful"); 7861 elt_type = integer_type_node; 7862 } 7863 7864 t = make_node (ARRAY_TYPE); 7865 TREE_TYPE (t) = elt_type; 7866 TYPE_DOMAIN (t) = index_type; 7867 TYPE_ADDR_SPACE (t) = TYPE_ADDR_SPACE (elt_type); 7868 TYPE_TYPELESS_STORAGE (t) = typeless_storage; 7869 layout_type (t); 7870 7871 /* If the element type is incomplete at this point we get marked for 7872 structural equality. Do not record these types in the canonical 7873 type hashtable. */ 7874 if (TYPE_STRUCTURAL_EQUALITY_P (t)) 7875 return t; 7876 7877 if (shared) 7878 { 7879 hashval_t hash = type_hash_canon_hash (t); 7880 t = type_hash_canon (hash, t); 7881 } 7882 7883 if (TYPE_CANONICAL (t) == t) 7884 { 7885 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type) 7886 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)) 7887 || in_lto_p) 7888 SET_TYPE_STRUCTURAL_EQUALITY (t); 7889 else if (TYPE_CANONICAL (elt_type) != elt_type 7890 || (index_type && TYPE_CANONICAL (index_type) != index_type)) 7891 TYPE_CANONICAL (t) 7892 = build_array_type_1 (TYPE_CANONICAL (elt_type), 7893 index_type 7894 ? TYPE_CANONICAL (index_type) : NULL_TREE, 7895 typeless_storage, shared); 7896 } 7897 7898 return t; 7899 } 7900 7901 /* Wrapper around build_array_type_1 with SHARED set to true. */ 7902 7903 tree 7904 build_array_type (tree elt_type, tree index_type, bool typeless_storage) 7905 { 7906 return build_array_type_1 (elt_type, index_type, typeless_storage, true); 7907 } 7908 7909 /* Wrapper around build_array_type_1 with SHARED set to false. */ 7910 7911 tree 7912 build_nonshared_array_type (tree elt_type, tree index_type) 7913 { 7914 return build_array_type_1 (elt_type, index_type, false, false); 7915 } 7916 7917 /* Return a representation of ELT_TYPE[NELTS], using indices of type 7918 sizetype. */ 7919 7920 tree 7921 build_array_type_nelts (tree elt_type, poly_uint64 nelts) 7922 { 7923 return build_array_type (elt_type, build_index_type (size_int (nelts - 1))); 7924 } 7925 7926 /* Recursively examines the array elements of TYPE, until a non-array 7927 element type is found. */ 7928 7929 tree 7930 strip_array_types (tree type) 7931 { 7932 while (TREE_CODE (type) == ARRAY_TYPE) 7933 type = TREE_TYPE (type); 7934 7935 return type; 7936 } 7937 7938 /* Computes the canonical argument types from the argument type list 7939 ARGTYPES. 7940 7941 Upon return, *ANY_STRUCTURAL_P will be true iff either it was true 7942 on entry to this function, or if any of the ARGTYPES are 7943 structural. 7944 7945 Upon return, *ANY_NONCANONICAL_P will be true iff either it was 7946 true on entry to this function, or if any of the ARGTYPES are 7947 non-canonical. 7948 7949 Returns a canonical argument list, which may be ARGTYPES when the 7950 canonical argument list is unneeded (i.e., *ANY_STRUCTURAL_P is 7951 true) or would not differ from ARGTYPES. */ 7952 7953 static tree 7954 maybe_canonicalize_argtypes (tree argtypes, 7955 bool *any_structural_p, 7956 bool *any_noncanonical_p) 7957 { 7958 tree arg; 7959 bool any_noncanonical_argtypes_p = false; 7960 7961 for (arg = argtypes; arg && !(*any_structural_p); arg = TREE_CHAIN (arg)) 7962 { 7963 if (!TREE_VALUE (arg) || TREE_VALUE (arg) == error_mark_node) 7964 /* Fail gracefully by stating that the type is structural. */ 7965 *any_structural_p = true; 7966 else if (TYPE_STRUCTURAL_EQUALITY_P (TREE_VALUE (arg))) 7967 *any_structural_p = true; 7968 else if (TYPE_CANONICAL (TREE_VALUE (arg)) != TREE_VALUE (arg) 7969 || TREE_PURPOSE (arg)) 7970 /* If the argument has a default argument, we consider it 7971 non-canonical even though the type itself is canonical. 7972 That way, different variants of function and method types 7973 with default arguments will all point to the variant with 7974 no defaults as their canonical type. */ 7975 any_noncanonical_argtypes_p = true; 7976 } 7977 7978 if (*any_structural_p) 7979 return argtypes; 7980 7981 if (any_noncanonical_argtypes_p) 7982 { 7983 /* Build the canonical list of argument types. */ 7984 tree canon_argtypes = NULL_TREE; 7985 bool is_void = false; 7986 7987 for (arg = argtypes; arg; arg = TREE_CHAIN (arg)) 7988 { 7989 if (arg == void_list_node) 7990 is_void = true; 7991 else 7992 canon_argtypes = tree_cons (NULL_TREE, 7993 TYPE_CANONICAL (TREE_VALUE (arg)), 7994 canon_argtypes); 7995 } 7996 7997 canon_argtypes = nreverse (canon_argtypes); 7998 if (is_void) 7999 canon_argtypes = chainon (canon_argtypes, void_list_node); 8000 8001 /* There is a non-canonical type. */ 8002 *any_noncanonical_p = true; 8003 return canon_argtypes; 8004 } 8005 8006 /* The canonical argument types are the same as ARGTYPES. */ 8007 return argtypes; 8008 } 8009 8010 /* Construct, lay out and return 8011 the type of functions returning type VALUE_TYPE 8012 given arguments of types ARG_TYPES. 8013 ARG_TYPES is a chain of TREE_LIST nodes whose TREE_VALUEs 8014 are data type nodes for the arguments of the function. 8015 If such a type has already been constructed, reuse it. */ 8016 8017 tree 8018 build_function_type (tree value_type, tree arg_types) 8019 { 8020 tree t; 8021 inchash::hash hstate; 8022 bool any_structural_p, any_noncanonical_p; 8023 tree canon_argtypes; 8024 8025 gcc_assert (arg_types != error_mark_node); 8026 8027 if (TREE_CODE (value_type) == FUNCTION_TYPE) 8028 { 8029 error ("function return type cannot be function"); 8030 value_type = integer_type_node; 8031 } 8032 8033 /* Make a node of the sort we want. */ 8034 t = make_node (FUNCTION_TYPE); 8035 TREE_TYPE (t) = value_type; 8036 TYPE_ARG_TYPES (t) = arg_types; 8037 8038 /* If we already have such a type, use the old one. */ 8039 hashval_t hash = type_hash_canon_hash (t); 8040 t = type_hash_canon (hash, t); 8041 8042 /* Set up the canonical type. */ 8043 any_structural_p = TYPE_STRUCTURAL_EQUALITY_P (value_type); 8044 any_noncanonical_p = TYPE_CANONICAL (value_type) != value_type; 8045 canon_argtypes = maybe_canonicalize_argtypes (arg_types, 8046 &any_structural_p, 8047 &any_noncanonical_p); 8048 if (any_structural_p) 8049 SET_TYPE_STRUCTURAL_EQUALITY (t); 8050 else if (any_noncanonical_p) 8051 TYPE_CANONICAL (t) = build_function_type (TYPE_CANONICAL (value_type), 8052 canon_argtypes); 8053 8054 if (!COMPLETE_TYPE_P (t)) 8055 layout_type (t); 8056 return t; 8057 } 8058 8059 /* Build a function type. The RETURN_TYPE is the type returned by the 8060 function. If VAARGS is set, no void_type_node is appended to the 8061 list. ARGP must be always be terminated be a NULL_TREE. */ 8062 8063 static tree 8064 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp) 8065 { 8066 tree t, args, last; 8067 8068 t = va_arg (argp, tree); 8069 for (args = NULL_TREE; t != NULL_TREE; t = va_arg (argp, tree)) 8070 args = tree_cons (NULL_TREE, t, args); 8071 8072 if (vaargs) 8073 { 8074 last = args; 8075 if (args != NULL_TREE) 8076 args = nreverse (args); 8077 gcc_assert (last != void_list_node); 8078 } 8079 else if (args == NULL_TREE) 8080 args = void_list_node; 8081 else 8082 { 8083 last = args; 8084 args = nreverse (args); 8085 TREE_CHAIN (last) = void_list_node; 8086 } 8087 args = build_function_type (return_type, args); 8088 8089 return args; 8090 } 8091 8092 /* Build a function type. The RETURN_TYPE is the type returned by the 8093 function. If additional arguments are provided, they are 8094 additional argument types. The list of argument types must always 8095 be terminated by NULL_TREE. */ 8096 8097 tree 8098 build_function_type_list (tree return_type, ...) 8099 { 8100 tree args; 8101 va_list p; 8102 8103 va_start (p, return_type); 8104 args = build_function_type_list_1 (false, return_type, p); 8105 va_end (p); 8106 return args; 8107 } 8108 8109 /* Build a variable argument function type. The RETURN_TYPE is the 8110 type returned by the function. If additional arguments are provided, 8111 they are additional argument types. The list of argument types must 8112 always be terminated by NULL_TREE. */ 8113 8114 tree 8115 build_varargs_function_type_list (tree return_type, ...) 8116 { 8117 tree args; 8118 va_list p; 8119 8120 va_start (p, return_type); 8121 args = build_function_type_list_1 (true, return_type, p); 8122 va_end (p); 8123 8124 return args; 8125 } 8126 8127 /* Build a function type. RETURN_TYPE is the type returned by the 8128 function; VAARGS indicates whether the function takes varargs. The 8129 function takes N named arguments, the types of which are provided in 8130 ARG_TYPES. */ 8131 8132 static tree 8133 build_function_type_array_1 (bool vaargs, tree return_type, int n, 8134 tree *arg_types) 8135 { 8136 int i; 8137 tree t = vaargs ? NULL_TREE : void_list_node; 8138 8139 for (i = n - 1; i >= 0; i--) 8140 t = tree_cons (NULL_TREE, arg_types[i], t); 8141 8142 return build_function_type (return_type, t); 8143 } 8144 8145 /* Build a function type. RETURN_TYPE is the type returned by the 8146 function. The function takes N named arguments, the types of which 8147 are provided in ARG_TYPES. */ 8148 8149 tree 8150 build_function_type_array (tree return_type, int n, tree *arg_types) 8151 { 8152 return build_function_type_array_1 (false, return_type, n, arg_types); 8153 } 8154 8155 /* Build a variable argument function type. RETURN_TYPE is the type 8156 returned by the function. The function takes N named arguments, the 8157 types of which are provided in ARG_TYPES. */ 8158 8159 tree 8160 build_varargs_function_type_array (tree return_type, int n, tree *arg_types) 8161 { 8162 return build_function_type_array_1 (true, return_type, n, arg_types); 8163 } 8164 8165 /* Build a METHOD_TYPE for a member of BASETYPE. The RETTYPE (a TYPE) 8166 and ARGTYPES (a TREE_LIST) are the return type and arguments types 8167 for the method. An implicit additional parameter (of type 8168 pointer-to-BASETYPE) is added to the ARGTYPES. */ 8169 8170 tree 8171 build_method_type_directly (tree basetype, 8172 tree rettype, 8173 tree argtypes) 8174 { 8175 tree t; 8176 tree ptype; 8177 bool any_structural_p, any_noncanonical_p; 8178 tree canon_argtypes; 8179 8180 /* Make a node of the sort we want. */ 8181 t = make_node (METHOD_TYPE); 8182 8183 TYPE_METHOD_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype); 8184 TREE_TYPE (t) = rettype; 8185 ptype = build_pointer_type (basetype); 8186 8187 /* The actual arglist for this function includes a "hidden" argument 8188 which is "this". Put it into the list of argument types. */ 8189 argtypes = tree_cons (NULL_TREE, ptype, argtypes); 8190 TYPE_ARG_TYPES (t) = argtypes; 8191 8192 /* If we already have such a type, use the old one. */ 8193 hashval_t hash = type_hash_canon_hash (t); 8194 t = type_hash_canon (hash, t); 8195 8196 /* Set up the canonical type. */ 8197 any_structural_p 8198 = (TYPE_STRUCTURAL_EQUALITY_P (basetype) 8199 || TYPE_STRUCTURAL_EQUALITY_P (rettype)); 8200 any_noncanonical_p 8201 = (TYPE_CANONICAL (basetype) != basetype 8202 || TYPE_CANONICAL (rettype) != rettype); 8203 canon_argtypes = maybe_canonicalize_argtypes (TREE_CHAIN (argtypes), 8204 &any_structural_p, 8205 &any_noncanonical_p); 8206 if (any_structural_p) 8207 SET_TYPE_STRUCTURAL_EQUALITY (t); 8208 else if (any_noncanonical_p) 8209 TYPE_CANONICAL (t) 8210 = build_method_type_directly (TYPE_CANONICAL (basetype), 8211 TYPE_CANONICAL (rettype), 8212 canon_argtypes); 8213 if (!COMPLETE_TYPE_P (t)) 8214 layout_type (t); 8215 8216 return t; 8217 } 8218 8219 /* Construct, lay out and return the type of methods belonging to class 8220 BASETYPE and whose arguments and values are described by TYPE. 8221 If that type exists already, reuse it. 8222 TYPE must be a FUNCTION_TYPE node. */ 8223 8224 tree 8225 build_method_type (tree basetype, tree type) 8226 { 8227 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE); 8228 8229 return build_method_type_directly (basetype, 8230 TREE_TYPE (type), 8231 TYPE_ARG_TYPES (type)); 8232 } 8233 8234 /* Construct, lay out and return the type of offsets to a value 8235 of type TYPE, within an object of type BASETYPE. 8236 If a suitable offset type exists already, reuse it. */ 8237 8238 tree 8239 build_offset_type (tree basetype, tree type) 8240 { 8241 tree t; 8242 8243 /* Make a node of the sort we want. */ 8244 t = make_node (OFFSET_TYPE); 8245 8246 TYPE_OFFSET_BASETYPE (t) = TYPE_MAIN_VARIANT (basetype); 8247 TREE_TYPE (t) = type; 8248 8249 /* If we already have such a type, use the old one. */ 8250 hashval_t hash = type_hash_canon_hash (t); 8251 t = type_hash_canon (hash, t); 8252 8253 if (!COMPLETE_TYPE_P (t)) 8254 layout_type (t); 8255 8256 if (TYPE_CANONICAL (t) == t) 8257 { 8258 if (TYPE_STRUCTURAL_EQUALITY_P (basetype) 8259 || TYPE_STRUCTURAL_EQUALITY_P (type)) 8260 SET_TYPE_STRUCTURAL_EQUALITY (t); 8261 else if (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)) != basetype 8262 || TYPE_CANONICAL (type) != type) 8263 TYPE_CANONICAL (t) 8264 = build_offset_type (TYPE_CANONICAL (TYPE_MAIN_VARIANT (basetype)), 8265 TYPE_CANONICAL (type)); 8266 } 8267 8268 return t; 8269 } 8270 8271 /* Create a complex type whose components are COMPONENT_TYPE. 8272 8273 If NAMED is true, the type is given a TYPE_NAME. We do not always 8274 do so because this creates a DECL node and thus make the DECL_UIDs 8275 dependent on the type canonicalization hashtable, which is GC-ed, 8276 so the DECL_UIDs would not be stable wrt garbage collection. */ 8277 8278 tree 8279 build_complex_type (tree component_type, bool named) 8280 { 8281 gcc_assert (INTEGRAL_TYPE_P (component_type) 8282 || SCALAR_FLOAT_TYPE_P (component_type) 8283 || FIXED_POINT_TYPE_P (component_type)); 8284 8285 /* Make a node of the sort we want. */ 8286 tree probe = make_node (COMPLEX_TYPE); 8287 8288 TREE_TYPE (probe) = TYPE_MAIN_VARIANT (component_type); 8289 8290 /* If we already have such a type, use the old one. */ 8291 hashval_t hash = type_hash_canon_hash (probe); 8292 tree t = type_hash_canon (hash, probe); 8293 8294 if (t == probe) 8295 { 8296 /* We created a new type. The hash insertion will have laid 8297 out the type. We need to check the canonicalization and 8298 maybe set the name. */ 8299 gcc_checking_assert (COMPLETE_TYPE_P (t) 8300 && !TYPE_NAME (t) 8301 && TYPE_CANONICAL (t) == t); 8302 8303 if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (t))) 8304 SET_TYPE_STRUCTURAL_EQUALITY (t); 8305 else if (TYPE_CANONICAL (TREE_TYPE (t)) != TREE_TYPE (t)) 8306 TYPE_CANONICAL (t) 8307 = build_complex_type (TYPE_CANONICAL (TREE_TYPE (t)), named); 8308 8309 /* We need to create a name, since complex is a fundamental type. */ 8310 if (named) 8311 { 8312 const char *name = NULL; 8313 8314 if (TREE_TYPE (t) == char_type_node) 8315 name = "complex char"; 8316 else if (TREE_TYPE (t) == signed_char_type_node) 8317 name = "complex signed char"; 8318 else if (TREE_TYPE (t) == unsigned_char_type_node) 8319 name = "complex unsigned char"; 8320 else if (TREE_TYPE (t) == short_integer_type_node) 8321 name = "complex short int"; 8322 else if (TREE_TYPE (t) == short_unsigned_type_node) 8323 name = "complex short unsigned int"; 8324 else if (TREE_TYPE (t) == integer_type_node) 8325 name = "complex int"; 8326 else if (TREE_TYPE (t) == unsigned_type_node) 8327 name = "complex unsigned int"; 8328 else if (TREE_TYPE (t) == long_integer_type_node) 8329 name = "complex long int"; 8330 else if (TREE_TYPE (t) == long_unsigned_type_node) 8331 name = "complex long unsigned int"; 8332 else if (TREE_TYPE (t) == long_long_integer_type_node) 8333 name = "complex long long int"; 8334 else if (TREE_TYPE (t) == long_long_unsigned_type_node) 8335 name = "complex long long unsigned int"; 8336 8337 if (name != NULL) 8338 TYPE_NAME (t) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, 8339 get_identifier (name), t); 8340 } 8341 } 8342 8343 return build_qualified_type (t, TYPE_QUALS (component_type)); 8344 } 8345 8346 /* If TYPE is a real or complex floating-point type and the target 8347 does not directly support arithmetic on TYPE then return the wider 8348 type to be used for arithmetic on TYPE. Otherwise, return 8349 NULL_TREE. */ 8350 8351 tree 8352 excess_precision_type (tree type) 8353 { 8354 /* The target can give two different responses to the question of 8355 which excess precision mode it would like depending on whether we 8356 are in -fexcess-precision=standard or -fexcess-precision=fast. */ 8357 8358 enum excess_precision_type requested_type 8359 = (flag_excess_precision == EXCESS_PRECISION_FAST 8360 ? EXCESS_PRECISION_TYPE_FAST 8361 : EXCESS_PRECISION_TYPE_STANDARD); 8362 8363 enum flt_eval_method target_flt_eval_method 8364 = targetm.c.excess_precision (requested_type); 8365 8366 /* The target should not ask for unpredictable float evaluation (though 8367 it might advertise that implicitly the evaluation is unpredictable, 8368 but we don't care about that here, it will have been reported 8369 elsewhere). If it does ask for unpredictable evaluation, we have 8370 nothing to do here. */ 8371 gcc_assert (target_flt_eval_method != FLT_EVAL_METHOD_UNPREDICTABLE); 8372 8373 /* Nothing to do. The target has asked for all types we know about 8374 to be computed with their native precision and range. */ 8375 if (target_flt_eval_method == FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16) 8376 return NULL_TREE; 8377 8378 /* The target will promote this type in a target-dependent way, so excess 8379 precision ought to leave it alone. */ 8380 if (targetm.promoted_type (type) != NULL_TREE) 8381 return NULL_TREE; 8382 8383 machine_mode float16_type_mode = (float16_type_node 8384 ? TYPE_MODE (float16_type_node) 8385 : VOIDmode); 8386 machine_mode float_type_mode = TYPE_MODE (float_type_node); 8387 machine_mode double_type_mode = TYPE_MODE (double_type_node); 8388 8389 switch (TREE_CODE (type)) 8390 { 8391 case REAL_TYPE: 8392 { 8393 machine_mode type_mode = TYPE_MODE (type); 8394 switch (target_flt_eval_method) 8395 { 8396 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT: 8397 if (type_mode == float16_type_mode) 8398 return float_type_node; 8399 break; 8400 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE: 8401 if (type_mode == float16_type_mode 8402 || type_mode == float_type_mode) 8403 return double_type_node; 8404 break; 8405 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE: 8406 if (type_mode == float16_type_mode 8407 || type_mode == float_type_mode 8408 || type_mode == double_type_mode) 8409 return long_double_type_node; 8410 break; 8411 default: 8412 gcc_unreachable (); 8413 } 8414 break; 8415 } 8416 case COMPLEX_TYPE: 8417 { 8418 if (TREE_CODE (TREE_TYPE (type)) != REAL_TYPE) 8419 return NULL_TREE; 8420 machine_mode type_mode = TYPE_MODE (TREE_TYPE (type)); 8421 switch (target_flt_eval_method) 8422 { 8423 case FLT_EVAL_METHOD_PROMOTE_TO_FLOAT: 8424 if (type_mode == float16_type_mode) 8425 return complex_float_type_node; 8426 break; 8427 case FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE: 8428 if (type_mode == float16_type_mode 8429 || type_mode == float_type_mode) 8430 return complex_double_type_node; 8431 break; 8432 case FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE: 8433 if (type_mode == float16_type_mode 8434 || type_mode == float_type_mode 8435 || type_mode == double_type_mode) 8436 return complex_long_double_type_node; 8437 break; 8438 default: 8439 gcc_unreachable (); 8440 } 8441 break; 8442 } 8443 default: 8444 break; 8445 } 8446 8447 return NULL_TREE; 8448 } 8449 8450 /* Return OP, stripped of any conversions to wider types as much as is safe. 8451 Converting the value back to OP's type makes a value equivalent to OP. 8452 8453 If FOR_TYPE is nonzero, we return a value which, if converted to 8454 type FOR_TYPE, would be equivalent to converting OP to type FOR_TYPE. 8455 8456 OP must have integer, real or enumeral type. Pointers are not allowed! 8457 8458 There are some cases where the obvious value we could return 8459 would regenerate to OP if converted to OP's type, 8460 but would not extend like OP to wider types. 8461 If FOR_TYPE indicates such extension is contemplated, we eschew such values. 8462 For example, if OP is (unsigned short)(signed char)-1, 8463 we avoid returning (signed char)-1 if FOR_TYPE is int, 8464 even though extending that to an unsigned short would regenerate OP, 8465 since the result of extending (signed char)-1 to (int) 8466 is different from (int) OP. */ 8467 8468 tree 8469 get_unwidened (tree op, tree for_type) 8470 { 8471 /* Set UNS initially if converting OP to FOR_TYPE is a zero-extension. */ 8472 tree type = TREE_TYPE (op); 8473 unsigned final_prec 8474 = TYPE_PRECISION (for_type != 0 ? for_type : type); 8475 int uns 8476 = (for_type != 0 && for_type != type 8477 && final_prec > TYPE_PRECISION (type) 8478 && TYPE_UNSIGNED (type)); 8479 tree win = op; 8480 8481 while (CONVERT_EXPR_P (op)) 8482 { 8483 int bitschange; 8484 8485 /* TYPE_PRECISION on vector types has different meaning 8486 (TYPE_VECTOR_SUBPARTS) and casts from vectors are view conversions, 8487 so avoid them here. */ 8488 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (op, 0))) == VECTOR_TYPE) 8489 break; 8490 8491 bitschange = TYPE_PRECISION (TREE_TYPE (op)) 8492 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0))); 8493 8494 /* Truncations are many-one so cannot be removed. 8495 Unless we are later going to truncate down even farther. */ 8496 if (bitschange < 0 8497 && final_prec > TYPE_PRECISION (TREE_TYPE (op))) 8498 break; 8499 8500 /* See what's inside this conversion. If we decide to strip it, 8501 we will set WIN. */ 8502 op = TREE_OPERAND (op, 0); 8503 8504 /* If we have not stripped any zero-extensions (uns is 0), 8505 we can strip any kind of extension. 8506 If we have previously stripped a zero-extension, 8507 only zero-extensions can safely be stripped. 8508 Any extension can be stripped if the bits it would produce 8509 are all going to be discarded later by truncating to FOR_TYPE. */ 8510 8511 if (bitschange > 0) 8512 { 8513 if (! uns || final_prec <= TYPE_PRECISION (TREE_TYPE (op))) 8514 win = op; 8515 /* TYPE_UNSIGNED says whether this is a zero-extension. 8516 Let's avoid computing it if it does not affect WIN 8517 and if UNS will not be needed again. */ 8518 if ((uns 8519 || CONVERT_EXPR_P (op)) 8520 && TYPE_UNSIGNED (TREE_TYPE (op))) 8521 { 8522 uns = 1; 8523 win = op; 8524 } 8525 } 8526 } 8527 8528 /* If we finally reach a constant see if it fits in sth smaller and 8529 in that case convert it. */ 8530 if (TREE_CODE (win) == INTEGER_CST) 8531 { 8532 tree wtype = TREE_TYPE (win); 8533 unsigned prec = wi::min_precision (wi::to_wide (win), TYPE_SIGN (wtype)); 8534 if (for_type) 8535 prec = MAX (prec, final_prec); 8536 if (prec < TYPE_PRECISION (wtype)) 8537 { 8538 tree t = lang_hooks.types.type_for_size (prec, TYPE_UNSIGNED (wtype)); 8539 if (t && TYPE_PRECISION (t) < TYPE_PRECISION (wtype)) 8540 win = fold_convert (t, win); 8541 } 8542 } 8543 8544 return win; 8545 } 8546 8547 /* Return OP or a simpler expression for a narrower value 8548 which can be sign-extended or zero-extended to give back OP. 8549 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended 8550 or 0 if the value should be sign-extended. */ 8551 8552 tree 8553 get_narrower (tree op, int *unsignedp_ptr) 8554 { 8555 int uns = 0; 8556 int first = 1; 8557 tree win = op; 8558 bool integral_p = INTEGRAL_TYPE_P (TREE_TYPE (op)); 8559 8560 while (TREE_CODE (op) == NOP_EXPR) 8561 { 8562 int bitschange 8563 = (TYPE_PRECISION (TREE_TYPE (op)) 8564 - TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op, 0)))); 8565 8566 /* Truncations are many-one so cannot be removed. */ 8567 if (bitschange < 0) 8568 break; 8569 8570 /* See what's inside this conversion. If we decide to strip it, 8571 we will set WIN. */ 8572 8573 if (bitschange > 0) 8574 { 8575 op = TREE_OPERAND (op, 0); 8576 /* An extension: the outermost one can be stripped, 8577 but remember whether it is zero or sign extension. */ 8578 if (first) 8579 uns = TYPE_UNSIGNED (TREE_TYPE (op)); 8580 /* Otherwise, if a sign extension has been stripped, 8581 only sign extensions can now be stripped; 8582 if a zero extension has been stripped, only zero-extensions. */ 8583 else if (uns != TYPE_UNSIGNED (TREE_TYPE (op))) 8584 break; 8585 first = 0; 8586 } 8587 else /* bitschange == 0 */ 8588 { 8589 /* A change in nominal type can always be stripped, but we must 8590 preserve the unsignedness. */ 8591 if (first) 8592 uns = TYPE_UNSIGNED (TREE_TYPE (op)); 8593 first = 0; 8594 op = TREE_OPERAND (op, 0); 8595 /* Keep trying to narrow, but don't assign op to win if it 8596 would turn an integral type into something else. */ 8597 if (INTEGRAL_TYPE_P (TREE_TYPE (op)) != integral_p) 8598 continue; 8599 } 8600 8601 win = op; 8602 } 8603 8604 if (TREE_CODE (op) == COMPONENT_REF 8605 /* Since type_for_size always gives an integer type. */ 8606 && TREE_CODE (TREE_TYPE (op)) != REAL_TYPE 8607 && TREE_CODE (TREE_TYPE (op)) != FIXED_POINT_TYPE 8608 /* Ensure field is laid out already. */ 8609 && DECL_SIZE (TREE_OPERAND (op, 1)) != 0 8610 && tree_fits_uhwi_p (DECL_SIZE (TREE_OPERAND (op, 1)))) 8611 { 8612 unsigned HOST_WIDE_INT innerprec 8613 = tree_to_uhwi (DECL_SIZE (TREE_OPERAND (op, 1))); 8614 int unsignedp = (DECL_UNSIGNED (TREE_OPERAND (op, 1)) 8615 || TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op, 1)))); 8616 tree type = lang_hooks.types.type_for_size (innerprec, unsignedp); 8617 8618 /* We can get this structure field in a narrower type that fits it, 8619 but the resulting extension to its nominal type (a fullword type) 8620 must satisfy the same conditions as for other extensions. 8621 8622 Do this only for fields that are aligned (not bit-fields), 8623 because when bit-field insns will be used there is no 8624 advantage in doing this. */ 8625 8626 if (innerprec < TYPE_PRECISION (TREE_TYPE (op)) 8627 && ! DECL_BIT_FIELD (TREE_OPERAND (op, 1)) 8628 && (first || uns == DECL_UNSIGNED (TREE_OPERAND (op, 1))) 8629 && type != 0) 8630 { 8631 if (first) 8632 uns = DECL_UNSIGNED (TREE_OPERAND (op, 1)); 8633 win = fold_convert (type, op); 8634 } 8635 } 8636 8637 *unsignedp_ptr = uns; 8638 return win; 8639 } 8640 8641 /* Return true if integer constant C has a value that is permissible 8642 for TYPE, an integral type. */ 8643 8644 bool 8645 int_fits_type_p (const_tree c, const_tree type) 8646 { 8647 tree type_low_bound, type_high_bound; 8648 bool ok_for_low_bound, ok_for_high_bound; 8649 signop sgn_c = TYPE_SIGN (TREE_TYPE (c)); 8650 8651 /* Non-standard boolean types can have arbitrary precision but various 8652 transformations assume that they can only take values 0 and +/-1. */ 8653 if (TREE_CODE (type) == BOOLEAN_TYPE) 8654 return wi::fits_to_boolean_p (wi::to_wide (c), type); 8655 8656 retry: 8657 type_low_bound = TYPE_MIN_VALUE (type); 8658 type_high_bound = TYPE_MAX_VALUE (type); 8659 8660 /* If at least one bound of the type is a constant integer, we can check 8661 ourselves and maybe make a decision. If no such decision is possible, but 8662 this type is a subtype, try checking against that. Otherwise, use 8663 fits_to_tree_p, which checks against the precision. 8664 8665 Compute the status for each possibly constant bound, and return if we see 8666 one does not match. Use ok_for_xxx_bound for this purpose, assigning -1 8667 for "unknown if constant fits", 0 for "constant known *not* to fit" and 1 8668 for "constant known to fit". */ 8669 8670 /* Check if c >= type_low_bound. */ 8671 if (type_low_bound && TREE_CODE (type_low_bound) == INTEGER_CST) 8672 { 8673 if (tree_int_cst_lt (c, type_low_bound)) 8674 return false; 8675 ok_for_low_bound = true; 8676 } 8677 else 8678 ok_for_low_bound = false; 8679 8680 /* Check if c <= type_high_bound. */ 8681 if (type_high_bound && TREE_CODE (type_high_bound) == INTEGER_CST) 8682 { 8683 if (tree_int_cst_lt (type_high_bound, c)) 8684 return false; 8685 ok_for_high_bound = true; 8686 } 8687 else 8688 ok_for_high_bound = false; 8689 8690 /* If the constant fits both bounds, the result is known. */ 8691 if (ok_for_low_bound && ok_for_high_bound) 8692 return true; 8693 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) && sgn_c == SIGNED && wi::neg_p (wi::to_wide (c))) 8698 return false; 8699 8700 /* Second, narrower types always fit in wider ones. */ 8701 if (TYPE_PRECISION (type) > TYPE_PRECISION (TREE_TYPE (c))) 8702 return true; 8703 8704 /* Third, unsigned integers with top bit set never fit signed types. */ 8705 if (!TYPE_UNSIGNED (type) && sgn_c == UNSIGNED) 8706 { 8707 int prec = GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (TREE_TYPE (c))) - 1; 8708 if (prec < TYPE_PRECISION (TREE_TYPE (c))) 8709 { 8710 /* When a tree_cst is converted to a wide-int, the precision 8711 is taken from the type. However, if the precision of the 8712 mode underneath the type is smaller than that, it is 8713 possible that the value will not fit. The test below 8714 fails if any bit is set between the sign bit of the 8715 underlying mode and the top bit of the type. */ 8716 if (wi::zext (wi::to_wide (c), prec - 1) != wi::to_wide (c)) 8717 return false; 8718 } 8719 else if (wi::neg_p (wi::to_wide (c))) 8720 return false; 8721 } 8722 8723 /* If we haven't been able to decide at this point, there nothing more we 8724 can check ourselves here. Look at the base type if we have one and it 8725 has the same precision. */ 8726 if (TREE_CODE (type) == INTEGER_TYPE 8727 && TREE_TYPE (type) != 0 8728 && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (type))) 8729 { 8730 type = TREE_TYPE (type); 8731 goto retry; 8732 } 8733 8734 /* Or to fits_to_tree_p, if nothing else. */ 8735 return wi::fits_to_tree_p (wi::to_wide (c), type); 8736 } 8737 8738 /* Stores bounds of an integer TYPE in MIN and MAX. If TYPE has non-constant 8739 bounds or is a POINTER_TYPE, the maximum and/or minimum values that can be 8740 represented (assuming two's-complement arithmetic) within the bit 8741 precision of the type are returned instead. */ 8742 8743 void 8744 get_type_static_bounds (const_tree type, mpz_t min, mpz_t max) 8745 { 8746 if (!POINTER_TYPE_P (type) && TYPE_MIN_VALUE (type) 8747 && TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST) 8748 wi::to_mpz (wi::to_wide (TYPE_MIN_VALUE (type)), min, TYPE_SIGN (type)); 8749 else 8750 { 8751 if (TYPE_UNSIGNED (type)) 8752 mpz_set_ui (min, 0); 8753 else 8754 { 8755 wide_int mn = wi::min_value (TYPE_PRECISION (type), SIGNED); 8756 wi::to_mpz (mn, min, SIGNED); 8757 } 8758 } 8759 8760 if (!POINTER_TYPE_P (type) && TYPE_MAX_VALUE (type) 8761 && TREE_CODE (TYPE_MAX_VALUE (type)) == INTEGER_CST) 8762 wi::to_mpz (wi::to_wide (TYPE_MAX_VALUE (type)), max, TYPE_SIGN (type)); 8763 else 8764 { 8765 wide_int mn = wi::max_value (TYPE_PRECISION (type), TYPE_SIGN (type)); 8766 wi::to_mpz (mn, max, TYPE_SIGN (type)); 8767 } 8768 } 8769 8770 /* Return true if VAR is an automatic variable defined in function FN. */ 8771 8772 bool 8773 auto_var_in_fn_p (const_tree var, const_tree fn) 8774 { 8775 return (DECL_P (var) && DECL_CONTEXT (var) == fn 8776 && ((((VAR_P (var) && ! DECL_EXTERNAL (var)) 8777 || TREE_CODE (var) == PARM_DECL) 8778 && ! TREE_STATIC (var)) 8779 || TREE_CODE (var) == LABEL_DECL 8780 || TREE_CODE (var) == RESULT_DECL)); 8781 } 8782 8783 /* Subprogram of following function. Called by walk_tree. 8784 8785 Return *TP if it is an automatic variable or parameter of the 8786 function passed in as DATA. */ 8787 8788 static tree 8789 find_var_from_fn (tree *tp, int *walk_subtrees, void *data) 8790 { 8791 tree fn = (tree) data; 8792 8793 if (TYPE_P (*tp)) 8794 *walk_subtrees = 0; 8795 8796 else if (DECL_P (*tp) 8797 && auto_var_in_fn_p (*tp, fn)) 8798 return *tp; 8799 8800 return NULL_TREE; 8801 } 8802 8803 /* Returns true if T is, contains, or refers to a type with variable 8804 size. For METHOD_TYPEs and FUNCTION_TYPEs we exclude the 8805 arguments, but not the return type. If FN is nonzero, only return 8806 true if a modifier of the type or position of FN is a variable or 8807 parameter inside FN. 8808 8809 This concept is more general than that of C99 'variably modified types': 8810 in C99, a struct type is never variably modified because a VLA may not 8811 appear as a structure member. However, in GNU C code like: 8812 8813 struct S { int i[f()]; }; 8814 8815 is valid, and other languages may define similar constructs. */ 8816 8817 bool 8818 variably_modified_type_p (tree type, tree fn) 8819 { 8820 tree t; 8821 8822 /* Test if T is either variable (if FN is zero) or an expression containing 8823 a variable in FN. If TYPE isn't gimplified, return true also if 8824 gimplify_one_sizepos would gimplify the expression into a local 8825 variable. */ 8826 #define RETURN_TRUE_IF_VAR(T) \ 8827 do { tree _t = (T); \ 8828 if (_t != NULL_TREE \ 8829 && _t != error_mark_node \ 8830 && !CONSTANT_CLASS_P (_t) \ 8831 && TREE_CODE (_t) != PLACEHOLDER_EXPR \ 8832 && (!fn \ 8833 || (!TYPE_SIZES_GIMPLIFIED (type) \ 8834 && (TREE_CODE (_t) != VAR_DECL \ 8835 && !CONTAINS_PLACEHOLDER_P (_t))) \ 8836 || walk_tree (&_t, find_var_from_fn, fn, NULL))) \ 8837 return true; } while (0) 8838 8839 if (type == error_mark_node) 8840 return false; 8841 8842 /* If TYPE itself has variable size, it is variably modified. */ 8843 RETURN_TRUE_IF_VAR (TYPE_SIZE (type)); 8844 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (type)); 8845 8846 switch (TREE_CODE (type)) 8847 { 8848 case POINTER_TYPE: 8849 case REFERENCE_TYPE: 8850 case VECTOR_TYPE: 8851 /* Ada can have pointer types refering to themselves indirectly. */ 8852 if (TREE_VISITED (type)) 8853 return false; 8854 TREE_VISITED (type) = true; 8855 if (variably_modified_type_p (TREE_TYPE (type), fn)) 8856 { 8857 TREE_VISITED (type) = false; 8858 return true; 8859 } 8860 TREE_VISITED (type) = false; 8861 break; 8862 8863 case FUNCTION_TYPE: 8864 case METHOD_TYPE: 8865 /* If TYPE is a function type, it is variably modified if the 8866 return type is variably modified. */ 8867 if (variably_modified_type_p (TREE_TYPE (type), fn)) 8868 return true; 8869 break; 8870 8871 case INTEGER_TYPE: 8872 case REAL_TYPE: 8873 case FIXED_POINT_TYPE: 8874 case ENUMERAL_TYPE: 8875 case BOOLEAN_TYPE: 8876 /* Scalar types are variably modified if their end points 8877 aren't constant. */ 8878 RETURN_TRUE_IF_VAR (TYPE_MIN_VALUE (type)); 8879 RETURN_TRUE_IF_VAR (TYPE_MAX_VALUE (type)); 8880 break; 8881 8882 case RECORD_TYPE: 8883 case UNION_TYPE: 8884 case QUAL_UNION_TYPE: 8885 /* We can't see if any of the fields are variably-modified by the 8886 definition we normally use, since that would produce infinite 8887 recursion via pointers. */ 8888 /* This is variably modified if some field's type is. */ 8889 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t)) 8890 if (TREE_CODE (t) == FIELD_DECL) 8891 { 8892 RETURN_TRUE_IF_VAR (DECL_FIELD_OFFSET (t)); 8893 RETURN_TRUE_IF_VAR (DECL_SIZE (t)); 8894 RETURN_TRUE_IF_VAR (DECL_SIZE_UNIT (t)); 8895 8896 if (TREE_CODE (type) == QUAL_UNION_TYPE) 8897 RETURN_TRUE_IF_VAR (DECL_QUALIFIER (t)); 8898 } 8899 break; 8900 8901 case ARRAY_TYPE: 8902 /* Do not call ourselves to avoid infinite recursion. This is 8903 variably modified if the element type is. */ 8904 RETURN_TRUE_IF_VAR (TYPE_SIZE (TREE_TYPE (type))); 8905 RETURN_TRUE_IF_VAR (TYPE_SIZE_UNIT (TREE_TYPE (type))); 8906 break; 8907 8908 default: 8909 break; 8910 } 8911 8912 /* The current language may have other cases to check, but in general, 8913 all other types are not variably modified. */ 8914 return lang_hooks.tree_inlining.var_mod_type_p (type, fn); 8915 8916 #undef RETURN_TRUE_IF_VAR 8917 } 8918 8919 /* Given a DECL or TYPE, return the scope in which it was declared, or 8920 NULL_TREE if there is no containing scope. */ 8921 8922 tree 8923 get_containing_scope (const_tree t) 8924 { 8925 return (TYPE_P (t) ? TYPE_CONTEXT (t) : DECL_CONTEXT (t)); 8926 } 8927 8928 /* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL. */ 8929 8930 const_tree 8931 get_ultimate_context (const_tree decl) 8932 { 8933 while (decl && TREE_CODE (decl) != TRANSLATION_UNIT_DECL) 8934 { 8935 if (TREE_CODE (decl) == BLOCK) 8936 decl = BLOCK_SUPERCONTEXT (decl); 8937 else 8938 decl = get_containing_scope (decl); 8939 } 8940 return decl; 8941 } 8942 8943 /* Return the innermost context enclosing DECL that is 8944 a FUNCTION_DECL, or zero if none. */ 8945 8946 tree 8947 decl_function_context (const_tree decl) 8948 { 8949 tree context; 8950 8951 if (TREE_CODE (decl) == ERROR_MARK) 8952 return 0; 8953 8954 /* C++ virtual functions use DECL_CONTEXT for the class of the vtable 8955 where we look up the function at runtime. Such functions always take 8956 a first argument of type 'pointer to real context'. 8957 8958 C++ should really be fixed to use DECL_CONTEXT for the real context, 8959 and use something else for the "virtual context". */ 8960 else if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VINDEX (decl)) 8961 context 8962 = TYPE_MAIN_VARIANT 8963 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl))))); 8964 else 8965 context = DECL_CONTEXT (decl); 8966 8967 while (context && TREE_CODE (context) != FUNCTION_DECL) 8968 { 8969 if (TREE_CODE (context) == BLOCK) 8970 context = BLOCK_SUPERCONTEXT (context); 8971 else 8972 context = get_containing_scope (context); 8973 } 8974 8975 return context; 8976 } 8977 8978 /* Return the innermost context enclosing DECL that is 8979 a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, or zero if none. 8980 TYPE_DECLs and FUNCTION_DECLs are transparent to this function. */ 8981 8982 tree 8983 decl_type_context (const_tree decl) 8984 { 8985 tree context = DECL_CONTEXT (decl); 8986 8987 while (context) 8988 switch (TREE_CODE (context)) 8989 { 8990 case NAMESPACE_DECL: 8991 case TRANSLATION_UNIT_DECL: 8992 return NULL_TREE; 8993 8994 case RECORD_TYPE: 8995 case UNION_TYPE: 8996 case QUAL_UNION_TYPE: 8997 return context; 8998 8999 case TYPE_DECL: 9000 case FUNCTION_DECL: 9001 context = DECL_CONTEXT (context); 9002 break; 9003 9004 case BLOCK: 9005 context = BLOCK_SUPERCONTEXT (context); 9006 break; 9007 9008 default: 9009 gcc_unreachable (); 9010 } 9011 9012 return NULL_TREE; 9013 } 9014 9015 /* CALL is a CALL_EXPR. Return the declaration for the function 9016 called, or NULL_TREE if the called function cannot be 9017 determined. */ 9018 9019 tree 9020 get_callee_fndecl (const_tree call) 9021 { 9022 tree addr; 9023 9024 if (call == error_mark_node) 9025 return error_mark_node; 9026 9027 /* It's invalid to call this function with anything but a 9028 CALL_EXPR. */ 9029 gcc_assert (TREE_CODE (call) == CALL_EXPR); 9030 9031 /* The first operand to the CALL is the address of the function 9032 called. */ 9033 addr = CALL_EXPR_FN (call); 9034 9035 /* If there is no function, return early. */ 9036 if (addr == NULL_TREE) 9037 return NULL_TREE; 9038 9039 STRIP_NOPS (addr); 9040 9041 /* If this is a readonly function pointer, extract its initial value. */ 9042 if (DECL_P (addr) && TREE_CODE (addr) != FUNCTION_DECL 9043 && TREE_READONLY (addr) && ! TREE_THIS_VOLATILE (addr) 9044 && DECL_INITIAL (addr)) 9045 addr = DECL_INITIAL (addr); 9046 9047 /* If the address is just `&f' for some function `f', then we know 9048 that `f' is being called. */ 9049 if (TREE_CODE (addr) == ADDR_EXPR 9050 && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL) 9051 return TREE_OPERAND (addr, 0); 9052 9053 /* We couldn't figure out what was being called. */ 9054 return NULL_TREE; 9055 } 9056 9057 /* If CALL_EXPR CALL calls a normal built-in function or an internal function, 9058 return the associated function code, otherwise return CFN_LAST. */ 9059 9060 combined_fn 9061 get_call_combined_fn (const_tree call) 9062 { 9063 /* It's invalid to call this function with anything but a CALL_EXPR. */ 9064 gcc_assert (TREE_CODE (call) == CALL_EXPR); 9065 9066 if (!CALL_EXPR_FN (call)) 9067 return as_combined_fn (CALL_EXPR_IFN (call)); 9068 9069 tree fndecl = get_callee_fndecl (call); 9070 if (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL) 9071 return as_combined_fn (DECL_FUNCTION_CODE (fndecl)); 9072 9073 return CFN_LAST; 9074 } 9075 9076 #define TREE_MEM_USAGE_SPACES 40 9077 9078 /* Print debugging information about tree nodes generated during the compile, 9079 and any language-specific information. */ 9080 9081 void 9082 dump_tree_statistics (void) 9083 { 9084 if (GATHER_STATISTICS) 9085 { 9086 int i; 9087 uint64_t total_nodes, total_bytes; 9088 fprintf (stderr, "\nKind Nodes Bytes\n"); 9089 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); 9090 total_nodes = total_bytes = 0; 9091 for (i = 0; i < (int) all_kinds; i++) 9092 { 9093 fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", 9094 tree_node_kind_names[i], tree_node_counts[i], 9095 tree_node_sizes[i]); 9096 total_nodes += tree_node_counts[i]; 9097 total_bytes += tree_node_sizes[i]; 9098 } 9099 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); 9100 fprintf (stderr, "%-20s %7" PRIu64 " %10" PRIu64 "\n", "Total", 9101 total_nodes, total_bytes); 9102 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); 9103 fprintf (stderr, "Code Nodes\n"); 9104 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); 9105 for (i = 0; i < (int) MAX_TREE_CODES; i++) 9106 fprintf (stderr, "%-32s %7" PRIu64 "\n", 9107 get_tree_code_name ((enum tree_code) i), tree_code_counts[i]); 9108 mem_usage::print_dash_line (TREE_MEM_USAGE_SPACES); 9109 fprintf (stderr, "\n"); 9110 ssanames_print_statistics (); 9111 fprintf (stderr, "\n"); 9112 phinodes_print_statistics (); 9113 fprintf (stderr, "\n"); 9114 } 9115 else 9116 fprintf (stderr, "(No per-node statistics)\n"); 9117 9118 print_type_hash_statistics (); 9119 print_debug_expr_statistics (); 9120 print_value_expr_statistics (); 9121 lang_hooks.print_statistics (); 9122 } 9123 9124 #define FILE_FUNCTION_FORMAT "_GLOBAL__%s_%s" 9125 9126 /* Generate a crc32 of the low BYTES bytes of VALUE. */ 9127 9128 unsigned 9129 crc32_unsigned_n (unsigned chksum, unsigned value, unsigned bytes) 9130 { 9131 /* This relies on the raw feedback's top 4 bits being zero. */ 9132 #define FEEDBACK(X) ((X) * 0x04c11db7) 9133 #define SYNDROME(X) (FEEDBACK ((X) & 1) ^ FEEDBACK ((X) & 2) \ 9134 ^ FEEDBACK ((X) & 4) ^ FEEDBACK ((X) & 8)) 9135 static const unsigned syndromes[16] = 9136 { 9137 SYNDROME(0x0), SYNDROME(0x1), SYNDROME(0x2), SYNDROME(0x3), 9138 SYNDROME(0x4), SYNDROME(0x5), SYNDROME(0x6), SYNDROME(0x7), 9139 SYNDROME(0x8), SYNDROME(0x9), SYNDROME(0xa), SYNDROME(0xb), 9140 SYNDROME(0xc), SYNDROME(0xd), SYNDROME(0xe), SYNDROME(0xf), 9141 }; 9142 #undef FEEDBACK 9143 #undef SYNDROME 9144 9145 value <<= (32 - bytes * 8); 9146 for (unsigned ix = bytes * 2; ix--; value <<= 4) 9147 { 9148 unsigned feedback = syndromes[((value ^ chksum) >> 28) & 0xf]; 9149 9150 chksum = (chksum << 4) ^ feedback; 9151 } 9152 9153 return chksum; 9154 } 9155 9156 /* Generate a crc32 of a string. */ 9157 9158 unsigned 9159 crc32_string (unsigned chksum, const char *string) 9160 { 9161 do 9162 chksum = crc32_byte (chksum, *string); 9163 while (*string++); 9164 return chksum; 9165 } 9166 9167 /* P is a string that will be used in a symbol. Mask out any characters 9168 that are not valid in that context. */ 9169 9170 void 9171 clean_symbol_name (char *p) 9172 { 9173 for (; *p; p++) 9174 if (! (ISALNUM (*p) 9175 #ifndef NO_DOLLAR_IN_LABEL /* this for `$'; unlikely, but... -- kr */ 9176 || *p == '$' 9177 #endif 9178 #ifndef NO_DOT_IN_LABEL /* this for `.'; unlikely, but... */ 9179 || *p == '.' 9180 #endif 9181 )) 9182 *p = '_'; 9183 } 9184 9185 /* For anonymous aggregate types, we need some sort of name to 9186 hold on to. In practice, this should not appear, but it should 9187 not be harmful if it does. */ 9188 bool 9189 anon_aggrname_p(const_tree id_node) 9190 { 9191 #ifndef NO_DOT_IN_LABEL 9192 return (IDENTIFIER_POINTER (id_node)[0] == '.' 9193 && IDENTIFIER_POINTER (id_node)[1] == '_'); 9194 #else /* NO_DOT_IN_LABEL */ 9195 #ifndef NO_DOLLAR_IN_LABEL 9196 return (IDENTIFIER_POINTER (id_node)[0] == '$' \ 9197 && IDENTIFIER_POINTER (id_node)[1] == '_'); 9198 #else /* NO_DOLLAR_IN_LABEL */ 9199 #define ANON_AGGRNAME_PREFIX "__anon_" 9200 return (!strncmp (IDENTIFIER_POINTER (id_node), ANON_AGGRNAME_PREFIX, 9201 sizeof (ANON_AGGRNAME_PREFIX) - 1)); 9202 #endif /* NO_DOLLAR_IN_LABEL */ 9203 #endif /* NO_DOT_IN_LABEL */ 9204 } 9205 9206 /* Return a format for an anonymous aggregate name. */ 9207 const char * 9208 anon_aggrname_format() 9209 { 9210 #ifndef NO_DOT_IN_LABEL 9211 return "._%d"; 9212 #else /* NO_DOT_IN_LABEL */ 9213 #ifndef NO_DOLLAR_IN_LABEL 9214 return "$_%d"; 9215 #else /* NO_DOLLAR_IN_LABEL */ 9216 return "__anon_%d"; 9217 #endif /* NO_DOLLAR_IN_LABEL */ 9218 #endif /* NO_DOT_IN_LABEL */ 9219 } 9220 9221 /* Generate a name for a special-purpose function. 9222 The generated name may need to be unique across the whole link. 9223 Changes to this function may also require corresponding changes to 9224 xstrdup_mask_random. 9225 TYPE is some string to identify the purpose of this function to the 9226 linker or collect2; it must start with an uppercase letter, 9227 one of: 9228 I - for constructors 9229 D - for destructors 9230 N - for C++ anonymous namespaces 9231 F - for DWARF unwind frame information. */ 9232 9233 tree 9234 get_file_function_name (const char *type) 9235 { 9236 char *buf; 9237 const char *p; 9238 char *q; 9239 9240 /* If we already have a name we know to be unique, just use that. */ 9241 if (first_global_object_name) 9242 p = q = ASTRDUP (first_global_object_name); 9243 /* If the target is handling the constructors/destructors, they 9244 will be local to this file and the name is only necessary for 9245 debugging purposes. 9246 We also assign sub_I and sub_D sufixes to constructors called from 9247 the global static constructors. These are always local. */ 9248 else if (((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors) 9249 || (strncmp (type, "sub_", 4) == 0 9250 && (type[4] == 'I' || type[4] == 'D'))) 9251 { 9252 const char *file = main_input_filename; 9253 if (! file) 9254 file = LOCATION_FILE (input_location); 9255 /* Just use the file's basename, because the full pathname 9256 might be quite long. */ 9257 p = q = ASTRDUP (lbasename (file)); 9258 } 9259 else 9260 { 9261 /* Otherwise, the name must be unique across the entire link. 9262 We don't have anything that we know to be unique to this translation 9263 unit, so use what we do have and throw in some randomness. */ 9264 unsigned len; 9265 const char *name = weak_global_object_name; 9266 const char *file = main_input_filename; 9267 9268 if (! name) 9269 name = ""; 9270 if (! file) 9271 file = LOCATION_FILE (input_location); 9272 9273 len = strlen (file); 9274 q = (char *) alloca (9 + 19 + len + 1); 9275 memcpy (q, file, len + 1); 9276 9277 snprintf (q + len, 9 + 19 + 1, "_%08X_" HOST_WIDE_INT_PRINT_HEX, 9278 crc32_string (0, name), get_random_seed (false)); 9279 9280 p = q; 9281 } 9282 9283 clean_symbol_name (q); 9284 buf = (char *) alloca (sizeof (FILE_FUNCTION_FORMAT) + strlen (p) 9285 + strlen (type)); 9286 9287 /* Set up the name of the file-level functions we may need. 9288 Use a global object (which is already required to be unique over 9289 the program) rather than the file name (which imposes extra 9290 constraints). */ 9291 sprintf (buf, FILE_FUNCTION_FORMAT, type, p); 9292 9293 return get_identifier (buf); 9294 } 9295 9296 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) 9297 9298 /* Complain that the tree code of NODE does not match the expected 0 9299 terminated list of trailing codes. The trailing code list can be 9300 empty, for a more vague error message. FILE, LINE, and FUNCTION 9301 are of the caller. */ 9302 9303 void 9304 tree_check_failed (const_tree node, const char *file, 9305 int line, const char *function, ...) 9306 { 9307 va_list args; 9308 const char *buffer; 9309 unsigned length = 0; 9310 enum tree_code code; 9311 9312 va_start (args, function); 9313 while ((code = (enum tree_code) va_arg (args, int))) 9314 length += 4 + strlen (get_tree_code_name (code)); 9315 va_end (args); 9316 if (length) 9317 { 9318 char *tmp; 9319 va_start (args, function); 9320 length += strlen ("expected "); 9321 buffer = tmp = (char *) alloca (length); 9322 length = 0; 9323 while ((code = (enum tree_code) va_arg (args, int))) 9324 { 9325 const char *prefix = length ? " or " : "expected "; 9326 9327 strcpy (tmp + length, prefix); 9328 length += strlen (prefix); 9329 strcpy (tmp + length, get_tree_code_name (code)); 9330 length += strlen (get_tree_code_name (code)); 9331 } 9332 va_end (args); 9333 } 9334 else 9335 buffer = "unexpected node"; 9336 9337 internal_error ("tree check: %s, have %s in %s, at %s:%d", 9338 buffer, get_tree_code_name (TREE_CODE (node)), 9339 function, trim_filename (file), line); 9340 } 9341 9342 /* Complain that the tree code of NODE does match the expected 0 9343 terminated list of trailing codes. FILE, LINE, and FUNCTION are of 9344 the caller. */ 9345 9346 void 9347 tree_not_check_failed (const_tree node, const char *file, 9348 int line, const char *function, ...) 9349 { 9350 va_list args; 9351 char *buffer; 9352 unsigned length = 0; 9353 enum tree_code code; 9354 9355 va_start (args, function); 9356 while ((code = (enum tree_code) va_arg (args, int))) 9357 length += 4 + strlen (get_tree_code_name (code)); 9358 va_end (args); 9359 va_start (args, function); 9360 buffer = (char *) alloca (length); 9361 length = 0; 9362 while ((code = (enum tree_code) va_arg (args, int))) 9363 { 9364 if (length) 9365 { 9366 strcpy (buffer + length, " or "); 9367 length += 4; 9368 } 9369 strcpy (buffer + length, get_tree_code_name (code)); 9370 length += strlen (get_tree_code_name (code)); 9371 } 9372 va_end (args); 9373 9374 internal_error ("tree check: expected none of %s, have %s in %s, at %s:%d", 9375 buffer, get_tree_code_name (TREE_CODE (node)), 9376 function, trim_filename (file), line); 9377 } 9378 9379 /* Similar to tree_check_failed, except that we check for a class of tree 9380 code, given in CL. */ 9381 9382 void 9383 tree_class_check_failed (const_tree node, const enum tree_code_class cl, 9384 const char *file, int line, const char *function) 9385 { 9386 internal_error 9387 ("tree check: expected class %qs, have %qs (%s) in %s, at %s:%d", 9388 TREE_CODE_CLASS_STRING (cl), 9389 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))), 9390 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line); 9391 } 9392 9393 /* Similar to tree_check_failed, except that instead of specifying a 9394 dozen codes, use the knowledge that they're all sequential. */ 9395 9396 void 9397 tree_range_check_failed (const_tree node, const char *file, int line, 9398 const char *function, enum tree_code c1, 9399 enum tree_code c2) 9400 { 9401 char *buffer; 9402 unsigned length = 0; 9403 unsigned int c; 9404 9405 for (c = c1; c <= c2; ++c) 9406 length += 4 + strlen (get_tree_code_name ((enum tree_code) c)); 9407 9408 length += strlen ("expected "); 9409 buffer = (char *) alloca (length); 9410 length = 0; 9411 9412 for (c = c1; c <= c2; ++c) 9413 { 9414 const char *prefix = length ? " or " : "expected "; 9415 9416 strcpy (buffer + length, prefix); 9417 length += strlen (prefix); 9418 strcpy (buffer + length, get_tree_code_name ((enum tree_code) c)); 9419 length += strlen (get_tree_code_name ((enum tree_code) c)); 9420 } 9421 9422 internal_error ("tree check: %s, have %s in %s, at %s:%d", 9423 buffer, get_tree_code_name (TREE_CODE (node)), 9424 function, trim_filename (file), line); 9425 } 9426 9427 9428 /* Similar to tree_check_failed, except that we check that a tree does 9429 not have the specified code, given in CL. */ 9430 9431 void 9432 tree_not_class_check_failed (const_tree node, const enum tree_code_class cl, 9433 const char *file, int line, const char *function) 9434 { 9435 internal_error 9436 ("tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d", 9437 TREE_CODE_CLASS_STRING (cl), 9438 TREE_CODE_CLASS_STRING (TREE_CODE_CLASS (TREE_CODE (node))), 9439 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line); 9440 } 9441 9442 9443 /* Similar to tree_check_failed but applied to OMP_CLAUSE codes. */ 9444 9445 void 9446 omp_clause_check_failed (const_tree node, const char *file, int line, 9447 const char *function, enum omp_clause_code code) 9448 { 9449 internal_error ("tree check: expected omp_clause %s, have %s in %s, at %s:%d", 9450 omp_clause_code_name[code], get_tree_code_name (TREE_CODE (node)), 9451 function, trim_filename (file), line); 9452 } 9453 9454 9455 /* Similar to tree_range_check_failed but applied to OMP_CLAUSE codes. */ 9456 9457 void 9458 omp_clause_range_check_failed (const_tree node, const char *file, int line, 9459 const char *function, enum omp_clause_code c1, 9460 enum omp_clause_code c2) 9461 { 9462 char *buffer; 9463 unsigned length = 0; 9464 unsigned int c; 9465 9466 for (c = c1; c <= c2; ++c) 9467 length += 4 + strlen (omp_clause_code_name[c]); 9468 9469 length += strlen ("expected "); 9470 buffer = (char *) alloca (length); 9471 length = 0; 9472 9473 for (c = c1; c <= c2; ++c) 9474 { 9475 const char *prefix = length ? " or " : "expected "; 9476 9477 strcpy (buffer + length, prefix); 9478 length += strlen (prefix); 9479 strcpy (buffer + length, omp_clause_code_name[c]); 9480 length += strlen (omp_clause_code_name[c]); 9481 } 9482 9483 internal_error ("tree check: %s, have %s in %s, at %s:%d", 9484 buffer, omp_clause_code_name[TREE_CODE (node)], 9485 function, trim_filename (file), line); 9486 } 9487 9488 9489 #undef DEFTREESTRUCT 9490 #define DEFTREESTRUCT(VAL, NAME) NAME, 9491 9492 static const char *ts_enum_names[] = { 9493 #include "treestruct.def" 9494 }; 9495 #undef DEFTREESTRUCT 9496 9497 #define TS_ENUM_NAME(EN) (ts_enum_names[(EN)]) 9498 9499 /* Similar to tree_class_check_failed, except that we check for 9500 whether CODE contains the tree structure identified by EN. */ 9501 9502 void 9503 tree_contains_struct_check_failed (const_tree node, 9504 const enum tree_node_structure_enum en, 9505 const char *file, int line, 9506 const char *function) 9507 { 9508 internal_error 9509 ("tree check: expected tree that contains %qs structure, have %qs in %s, at %s:%d", 9510 TS_ENUM_NAME (en), 9511 get_tree_code_name (TREE_CODE (node)), function, trim_filename (file), line); 9512 } 9513 9514 9515 /* Similar to above, except that the check is for the bounds of a TREE_VEC's 9516 (dynamically sized) vector. */ 9517 9518 void 9519 tree_int_cst_elt_check_failed (int idx, int len, const char *file, int line, 9520 const char *function) 9521 { 9522 internal_error 9523 ("tree check: accessed elt %d of tree_int_cst with %d elts in %s, at %s:%d", 9524 idx + 1, len, function, trim_filename (file), line); 9525 } 9526 9527 /* Similar to above, except that the check is for the bounds of a TREE_VEC's 9528 (dynamically sized) vector. */ 9529 9530 void 9531 tree_vec_elt_check_failed (int idx, int len, const char *file, int line, 9532 const char *function) 9533 { 9534 internal_error 9535 ("tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d", 9536 idx + 1, len, function, trim_filename (file), line); 9537 } 9538 9539 /* Similar to above, except that the check is for the bounds of the operand 9540 vector of an expression node EXP. */ 9541 9542 void 9543 tree_operand_check_failed (int idx, const_tree exp, const char *file, 9544 int line, const char *function) 9545 { 9546 enum tree_code code = TREE_CODE (exp); 9547 internal_error 9548 ("tree check: accessed operand %d of %s with %d operands in %s, at %s:%d", 9549 idx + 1, get_tree_code_name (code), TREE_OPERAND_LENGTH (exp), 9550 function, trim_filename (file), line); 9551 } 9552 9553 /* Similar to above, except that the check is for the number of 9554 operands of an OMP_CLAUSE node. */ 9555 9556 void 9557 omp_clause_operand_check_failed (int idx, const_tree t, const char *file, 9558 int line, const char *function) 9559 { 9560 internal_error 9561 ("tree check: accessed operand %d of omp_clause %s with %d operands " 9562 "in %s, at %s:%d", idx + 1, omp_clause_code_name[OMP_CLAUSE_CODE (t)], 9563 omp_clause_num_ops [OMP_CLAUSE_CODE (t)], function, 9564 trim_filename (file), line); 9565 } 9566 #endif /* ENABLE_TREE_CHECKING */ 9567 9568 /* Create a new vector type node holding NUNITS units of type INNERTYPE, 9569 and mapped to the machine mode MODE. Initialize its fields and build 9570 the information necessary for debugging output. */ 9571 9572 static tree 9573 make_vector_type (tree innertype, poly_int64 nunits, machine_mode mode) 9574 { 9575 tree t; 9576 tree mv_innertype = TYPE_MAIN_VARIANT (innertype); 9577 9578 t = make_node (VECTOR_TYPE); 9579 TREE_TYPE (t) = mv_innertype; 9580 SET_TYPE_VECTOR_SUBPARTS (t, nunits); 9581 SET_TYPE_MODE (t, mode); 9582 9583 if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p) 9584 SET_TYPE_STRUCTURAL_EQUALITY (t); 9585 else if ((TYPE_CANONICAL (mv_innertype) != innertype 9586 || mode != VOIDmode) 9587 && !VECTOR_BOOLEAN_TYPE_P (t)) 9588 TYPE_CANONICAL (t) 9589 = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode); 9590 9591 layout_type (t); 9592 9593 hashval_t hash = type_hash_canon_hash (t); 9594 t = type_hash_canon (hash, t); 9595 9596 /* We have built a main variant, based on the main variant of the 9597 inner type. Use it to build the variant we return. */ 9598 if ((TYPE_ATTRIBUTES (innertype) || TYPE_QUALS (innertype)) 9599 && TREE_TYPE (t) != innertype) 9600 return build_type_attribute_qual_variant (t, 9601 TYPE_ATTRIBUTES (innertype), 9602 TYPE_QUALS (innertype)); 9603 9604 return t; 9605 } 9606 9607 static tree 9608 make_or_reuse_type (unsigned size, int unsignedp) 9609 { 9610 int i; 9611 9612 if (size == INT_TYPE_SIZE) 9613 return unsignedp ? unsigned_type_node : integer_type_node; 9614 if (size == CHAR_TYPE_SIZE) 9615 return unsignedp ? unsigned_char_type_node : signed_char_type_node; 9616 if (size == SHORT_TYPE_SIZE) 9617 return unsignedp ? short_unsigned_type_node : short_integer_type_node; 9618 if (size == LONG_TYPE_SIZE) 9619 return unsignedp ? long_unsigned_type_node : long_integer_type_node; 9620 if (size == LONG_LONG_TYPE_SIZE) 9621 return (unsignedp ? long_long_unsigned_type_node 9622 : long_long_integer_type_node); 9623 9624 for (i = 0; i < NUM_INT_N_ENTS; i ++) 9625 if (size == int_n_data[i].bitsize 9626 && int_n_enabled_p[i]) 9627 return (unsignedp ? int_n_trees[i].unsigned_type 9628 : int_n_trees[i].signed_type); 9629 9630 if (unsignedp) 9631 return make_unsigned_type (size); 9632 else 9633 return make_signed_type (size); 9634 } 9635 9636 /* Create or reuse a fract type by SIZE, UNSIGNEDP, and SATP. */ 9637 9638 static tree 9639 make_or_reuse_fract_type (unsigned size, int unsignedp, int satp) 9640 { 9641 if (satp) 9642 { 9643 if (size == SHORT_FRACT_TYPE_SIZE) 9644 return unsignedp ? sat_unsigned_short_fract_type_node 9645 : sat_short_fract_type_node; 9646 if (size == FRACT_TYPE_SIZE) 9647 return unsignedp ? sat_unsigned_fract_type_node : sat_fract_type_node; 9648 if (size == LONG_FRACT_TYPE_SIZE) 9649 return unsignedp ? sat_unsigned_long_fract_type_node 9650 : sat_long_fract_type_node; 9651 if (size == LONG_LONG_FRACT_TYPE_SIZE) 9652 return unsignedp ? sat_unsigned_long_long_fract_type_node 9653 : sat_long_long_fract_type_node; 9654 } 9655 else 9656 { 9657 if (size == SHORT_FRACT_TYPE_SIZE) 9658 return unsignedp ? unsigned_short_fract_type_node 9659 : short_fract_type_node; 9660 if (size == FRACT_TYPE_SIZE) 9661 return unsignedp ? unsigned_fract_type_node : fract_type_node; 9662 if (size == LONG_FRACT_TYPE_SIZE) 9663 return unsignedp ? unsigned_long_fract_type_node 9664 : long_fract_type_node; 9665 if (size == LONG_LONG_FRACT_TYPE_SIZE) 9666 return unsignedp ? unsigned_long_long_fract_type_node 9667 : long_long_fract_type_node; 9668 } 9669 9670 return make_fract_type (size, unsignedp, satp); 9671 } 9672 9673 /* Create or reuse an accum type by SIZE, UNSIGNEDP, and SATP. */ 9674 9675 static tree 9676 make_or_reuse_accum_type (unsigned size, int unsignedp, int satp) 9677 { 9678 if (satp) 9679 { 9680 if (size == SHORT_ACCUM_TYPE_SIZE) 9681 return unsignedp ? sat_unsigned_short_accum_type_node 9682 : sat_short_accum_type_node; 9683 if (size == ACCUM_TYPE_SIZE) 9684 return unsignedp ? sat_unsigned_accum_type_node : sat_accum_type_node; 9685 if (size == LONG_ACCUM_TYPE_SIZE) 9686 return unsignedp ? sat_unsigned_long_accum_type_node 9687 : sat_long_accum_type_node; 9688 if (size == LONG_LONG_ACCUM_TYPE_SIZE) 9689 return unsignedp ? sat_unsigned_long_long_accum_type_node 9690 : sat_long_long_accum_type_node; 9691 } 9692 else 9693 { 9694 if (size == SHORT_ACCUM_TYPE_SIZE) 9695 return unsignedp ? unsigned_short_accum_type_node 9696 : short_accum_type_node; 9697 if (size == ACCUM_TYPE_SIZE) 9698 return unsignedp ? unsigned_accum_type_node : accum_type_node; 9699 if (size == LONG_ACCUM_TYPE_SIZE) 9700 return unsignedp ? unsigned_long_accum_type_node 9701 : long_accum_type_node; 9702 if (size == LONG_LONG_ACCUM_TYPE_SIZE) 9703 return unsignedp ? unsigned_long_long_accum_type_node 9704 : long_long_accum_type_node; 9705 } 9706 9707 return make_accum_type (size, unsignedp, satp); 9708 } 9709 9710 9711 /* Create an atomic variant node for TYPE. This routine is called 9712 during initialization of data types to create the 5 basic atomic 9713 types. The generic build_variant_type function requires these to 9714 already be set up in order to function properly, so cannot be 9715 called from there. If ALIGN is non-zero, then ensure alignment is 9716 overridden to this value. */ 9717 9718 static tree 9719 build_atomic_base (tree type, unsigned int align) 9720 { 9721 tree t; 9722 9723 /* Make sure its not already registered. */ 9724 if ((t = get_qualified_type (type, TYPE_QUAL_ATOMIC))) 9725 return t; 9726 9727 t = build_variant_type_copy (type); 9728 set_type_quals (t, TYPE_QUAL_ATOMIC); 9729 9730 if (align) 9731 SET_TYPE_ALIGN (t, align); 9732 9733 return t; 9734 } 9735 9736 /* Information about the _FloatN and _FloatNx types. This must be in 9737 the same order as the corresponding TI_* enum values. */ 9738 const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES] = 9739 { 9740 { 16, false }, 9741 { 32, false }, 9742 { 64, false }, 9743 { 128, false }, 9744 { 32, true }, 9745 { 64, true }, 9746 { 128, true }, 9747 }; 9748 9749 9750 /* Create nodes for all integer types (and error_mark_node) using the sizes 9751 of C datatypes. SIGNED_CHAR specifies whether char is signed. */ 9752 9753 void 9754 build_common_tree_nodes (bool signed_char) 9755 { 9756 int i; 9757 9758 error_mark_node = make_node (ERROR_MARK); 9759 TREE_TYPE (error_mark_node) = error_mark_node; 9760 9761 initialize_sizetypes (); 9762 9763 /* Define both `signed char' and `unsigned char'. */ 9764 signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE); 9765 TYPE_STRING_FLAG (signed_char_type_node) = 1; 9766 unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE); 9767 TYPE_STRING_FLAG (unsigned_char_type_node) = 1; 9768 9769 /* Define `char', which is like either `signed char' or `unsigned char' 9770 but not the same as either. */ 9771 char_type_node 9772 = (signed_char 9773 ? make_signed_type (CHAR_TYPE_SIZE) 9774 : make_unsigned_type (CHAR_TYPE_SIZE)); 9775 TYPE_STRING_FLAG (char_type_node) = 1; 9776 9777 short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE); 9778 short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE); 9779 integer_type_node = make_signed_type (INT_TYPE_SIZE); 9780 unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE); 9781 long_integer_type_node = make_signed_type (LONG_TYPE_SIZE); 9782 long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE); 9783 long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE); 9784 long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE); 9785 9786 for (i = 0; i < NUM_INT_N_ENTS; i ++) 9787 { 9788 int_n_trees[i].signed_type = make_signed_type (int_n_data[i].bitsize); 9789 int_n_trees[i].unsigned_type = make_unsigned_type (int_n_data[i].bitsize); 9790 TYPE_SIZE (int_n_trees[i].signed_type) = bitsize_int (int_n_data[i].bitsize); 9791 TYPE_SIZE (int_n_trees[i].unsigned_type) = bitsize_int (int_n_data[i].bitsize); 9792 9793 if (int_n_enabled_p[i]) 9794 { 9795 integer_types[itk_intN_0 + i * 2] = int_n_trees[i].signed_type; 9796 integer_types[itk_unsigned_intN_0 + i * 2] = int_n_trees[i].unsigned_type; 9797 } 9798 } 9799 9800 /* Define a boolean type. This type only represents boolean values but 9801 may be larger than char depending on the value of BOOL_TYPE_SIZE. */ 9802 boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE); 9803 TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE); 9804 TYPE_PRECISION (boolean_type_node) = 1; 9805 TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1); 9806 9807 /* Define what type to use for size_t. */ 9808 if (strcmp (SIZE_TYPE, "unsigned int") == 0) 9809 size_type_node = unsigned_type_node; 9810 else if (strcmp (SIZE_TYPE, "long unsigned int") == 0) 9811 size_type_node = long_unsigned_type_node; 9812 else if (strcmp (SIZE_TYPE, "long long unsigned int") == 0) 9813 size_type_node = long_long_unsigned_type_node; 9814 else if (strcmp (SIZE_TYPE, "short unsigned int") == 0) 9815 size_type_node = short_unsigned_type_node; 9816 else 9817 { 9818 int i; 9819 9820 size_type_node = NULL_TREE; 9821 for (i = 0; i < NUM_INT_N_ENTS; i++) 9822 if (int_n_enabled_p[i]) 9823 { 9824 char name[50]; 9825 sprintf (name, "__int%d unsigned", int_n_data[i].bitsize); 9826 9827 if (strcmp (name, SIZE_TYPE) == 0) 9828 { 9829 size_type_node = int_n_trees[i].unsigned_type; 9830 } 9831 } 9832 if (size_type_node == NULL_TREE) 9833 gcc_unreachable (); 9834 } 9835 9836 /* Define what type to use for ptrdiff_t. */ 9837 if (strcmp (PTRDIFF_TYPE, "int") == 0) 9838 ptrdiff_type_node = integer_type_node; 9839 else if (strcmp (PTRDIFF_TYPE, "long int") == 0) 9840 ptrdiff_type_node = long_integer_type_node; 9841 else if (strcmp (PTRDIFF_TYPE, "long long int") == 0) 9842 ptrdiff_type_node = long_long_integer_type_node; 9843 else if (strcmp (PTRDIFF_TYPE, "short int") == 0) 9844 ptrdiff_type_node = short_integer_type_node; 9845 else 9846 { 9847 ptrdiff_type_node = NULL_TREE; 9848 for (int i = 0; i < NUM_INT_N_ENTS; i++) 9849 if (int_n_enabled_p[i]) 9850 { 9851 char name[50]; 9852 sprintf (name, "__int%d", int_n_data[i].bitsize); 9853 if (strcmp (name, PTRDIFF_TYPE) == 0) 9854 ptrdiff_type_node = int_n_trees[i].signed_type; 9855 } 9856 if (ptrdiff_type_node == NULL_TREE) 9857 gcc_unreachable (); 9858 } 9859 9860 /* Fill in the rest of the sized types. Reuse existing type nodes 9861 when possible. */ 9862 intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0); 9863 intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 0); 9864 intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 0); 9865 intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 0); 9866 intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 0); 9867 9868 unsigned_intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 1); 9869 unsigned_intHI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (HImode), 1); 9870 unsigned_intSI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (SImode), 1); 9871 unsigned_intDI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (DImode), 1); 9872 unsigned_intTI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (TImode), 1); 9873 9874 /* Don't call build_qualified type for atomics. That routine does 9875 special processing for atomics, and until they are initialized 9876 it's better not to make that call. 9877 9878 Check to see if there is a target override for atomic types. */ 9879 9880 atomicQI_type_node = build_atomic_base (unsigned_intQI_type_node, 9881 targetm.atomic_align_for_mode (QImode)); 9882 atomicHI_type_node = build_atomic_base (unsigned_intHI_type_node, 9883 targetm.atomic_align_for_mode (HImode)); 9884 atomicSI_type_node = build_atomic_base (unsigned_intSI_type_node, 9885 targetm.atomic_align_for_mode (SImode)); 9886 atomicDI_type_node = build_atomic_base (unsigned_intDI_type_node, 9887 targetm.atomic_align_for_mode (DImode)); 9888 atomicTI_type_node = build_atomic_base (unsigned_intTI_type_node, 9889 targetm.atomic_align_for_mode (TImode)); 9890 9891 access_public_node = get_identifier ("public"); 9892 access_protected_node = get_identifier ("protected"); 9893 access_private_node = get_identifier ("private"); 9894 9895 /* Define these next since types below may used them. */ 9896 integer_zero_node = build_int_cst (integer_type_node, 0); 9897 integer_one_node = build_int_cst (integer_type_node, 1); 9898 integer_three_node = build_int_cst (integer_type_node, 3); 9899 integer_minus_one_node = build_int_cst (integer_type_node, -1); 9900 9901 size_zero_node = size_int (0); 9902 size_one_node = size_int (1); 9903 bitsize_zero_node = bitsize_int (0); 9904 bitsize_one_node = bitsize_int (1); 9905 bitsize_unit_node = bitsize_int (BITS_PER_UNIT); 9906 9907 boolean_false_node = TYPE_MIN_VALUE (boolean_type_node); 9908 boolean_true_node = TYPE_MAX_VALUE (boolean_type_node); 9909 9910 void_type_node = make_node (VOID_TYPE); 9911 layout_type (void_type_node); 9912 9913 pointer_bounds_type_node = targetm.chkp_bound_type (); 9914 9915 /* We are not going to have real types in C with less than byte alignment, 9916 so we might as well not have any types that claim to have it. */ 9917 SET_TYPE_ALIGN (void_type_node, BITS_PER_UNIT); 9918 TYPE_USER_ALIGN (void_type_node) = 0; 9919 9920 void_node = make_node (VOID_CST); 9921 TREE_TYPE (void_node) = void_type_node; 9922 9923 null_pointer_node = build_int_cst (build_pointer_type (void_type_node), 0); 9924 layout_type (TREE_TYPE (null_pointer_node)); 9925 9926 ptr_type_node = build_pointer_type (void_type_node); 9927 const_ptr_type_node 9928 = build_pointer_type (build_type_variant (void_type_node, 1, 0)); 9929 for (unsigned i = 0; 9930 i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type); 9931 ++i) 9932 builtin_structptr_types[i].node = builtin_structptr_types[i].base; 9933 9934 pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1); 9935 9936 float_type_node = make_node (REAL_TYPE); 9937 TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE; 9938 layout_type (float_type_node); 9939 9940 double_type_node = make_node (REAL_TYPE); 9941 TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE; 9942 layout_type (double_type_node); 9943 9944 long_double_type_node = make_node (REAL_TYPE); 9945 TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE; 9946 layout_type (long_double_type_node); 9947 9948 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++) 9949 { 9950 int n = floatn_nx_types[i].n; 9951 bool extended = floatn_nx_types[i].extended; 9952 scalar_float_mode mode; 9953 if (!targetm.floatn_mode (n, extended).exists (&mode)) 9954 continue; 9955 int precision = GET_MODE_PRECISION (mode); 9956 /* Work around the rs6000 KFmode having precision 113 not 9957 128. */ 9958 const struct real_format *fmt = REAL_MODE_FORMAT (mode); 9959 gcc_assert (fmt->b == 2 && fmt->emin + fmt->emax == 3); 9960 int min_precision = fmt->p + ceil_log2 (fmt->emax - fmt->emin); 9961 if (!extended) 9962 gcc_assert (min_precision == n); 9963 if (precision < min_precision) 9964 precision = min_precision; 9965 FLOATN_NX_TYPE_NODE (i) = make_node (REAL_TYPE); 9966 TYPE_PRECISION (FLOATN_NX_TYPE_NODE (i)) = precision; 9967 layout_type (FLOATN_NX_TYPE_NODE (i)); 9968 SET_TYPE_MODE (FLOATN_NX_TYPE_NODE (i), mode); 9969 } 9970 9971 float_ptr_type_node = build_pointer_type (float_type_node); 9972 double_ptr_type_node = build_pointer_type (double_type_node); 9973 long_double_ptr_type_node = build_pointer_type (long_double_type_node); 9974 integer_ptr_type_node = build_pointer_type (integer_type_node); 9975 9976 /* Fixed size integer types. */ 9977 uint16_type_node = make_or_reuse_type (16, 1); 9978 uint32_type_node = make_or_reuse_type (32, 1); 9979 uint64_type_node = make_or_reuse_type (64, 1); 9980 9981 /* Decimal float types. */ 9982 dfloat32_type_node = make_node (REAL_TYPE); 9983 TYPE_PRECISION (dfloat32_type_node) = DECIMAL32_TYPE_SIZE; 9984 SET_TYPE_MODE (dfloat32_type_node, SDmode); 9985 layout_type (dfloat32_type_node); 9986 dfloat32_ptr_type_node = build_pointer_type (dfloat32_type_node); 9987 9988 dfloat64_type_node = make_node (REAL_TYPE); 9989 TYPE_PRECISION (dfloat64_type_node) = DECIMAL64_TYPE_SIZE; 9990 SET_TYPE_MODE (dfloat64_type_node, DDmode); 9991 layout_type (dfloat64_type_node); 9992 dfloat64_ptr_type_node = build_pointer_type (dfloat64_type_node); 9993 9994 dfloat128_type_node = make_node (REAL_TYPE); 9995 TYPE_PRECISION (dfloat128_type_node) = DECIMAL128_TYPE_SIZE; 9996 SET_TYPE_MODE (dfloat128_type_node, TDmode); 9997 layout_type (dfloat128_type_node); 9998 dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node); 9999 10000 complex_integer_type_node = build_complex_type (integer_type_node, true); 10001 complex_float_type_node = build_complex_type (float_type_node, true); 10002 complex_double_type_node = build_complex_type (double_type_node, true); 10003 complex_long_double_type_node = build_complex_type (long_double_type_node, 10004 true); 10005 10006 for (i = 0; i < NUM_FLOATN_NX_TYPES; i++) 10007 { 10008 if (FLOATN_NX_TYPE_NODE (i) != NULL_TREE) 10009 COMPLEX_FLOATN_NX_TYPE_NODE (i) 10010 = build_complex_type (FLOATN_NX_TYPE_NODE (i)); 10011 } 10012 10013 /* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */ 10014 #define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \ 10015 sat_ ## KIND ## _type_node = \ 10016 make_sat_signed_ ## KIND ## _type (SIZE); \ 10017 sat_unsigned_ ## KIND ## _type_node = \ 10018 make_sat_unsigned_ ## KIND ## _type (SIZE); \ 10019 KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \ 10020 unsigned_ ## KIND ## _type_node = \ 10021 make_unsigned_ ## KIND ## _type (SIZE); 10022 10023 #define MAKE_FIXED_TYPE_NODE_WIDTH(KIND,WIDTH,SIZE) \ 10024 sat_ ## WIDTH ## KIND ## _type_node = \ 10025 make_sat_signed_ ## KIND ## _type (SIZE); \ 10026 sat_unsigned_ ## WIDTH ## KIND ## _type_node = \ 10027 make_sat_unsigned_ ## KIND ## _type (SIZE); \ 10028 WIDTH ## KIND ## _type_node = make_signed_ ## KIND ## _type (SIZE); \ 10029 unsigned_ ## WIDTH ## KIND ## _type_node = \ 10030 make_unsigned_ ## KIND ## _type (SIZE); 10031 10032 /* Make fixed-point type nodes based on four different widths. */ 10033 #define MAKE_FIXED_TYPE_NODE_FAMILY(N1,N2) \ 10034 MAKE_FIXED_TYPE_NODE_WIDTH (N1, short_, SHORT_ ## N2 ## _TYPE_SIZE) \ 10035 MAKE_FIXED_TYPE_NODE (N1, N2 ## _TYPE_SIZE) \ 10036 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_, LONG_ ## N2 ## _TYPE_SIZE) \ 10037 MAKE_FIXED_TYPE_NODE_WIDTH (N1, long_long_, LONG_LONG_ ## N2 ## _TYPE_SIZE) 10038 10039 /* Make fixed-point mode nodes based on sat/non-sat and signed/unsigned. */ 10040 #define MAKE_FIXED_MODE_NODE(KIND,NAME,MODE) \ 10041 NAME ## _type_node = \ 10042 make_or_reuse_signed_ ## KIND ## _type (GET_MODE_BITSIZE (MODE ## mode)); \ 10043 u ## NAME ## _type_node = \ 10044 make_or_reuse_unsigned_ ## KIND ## _type \ 10045 (GET_MODE_BITSIZE (U ## MODE ## mode)); \ 10046 sat_ ## NAME ## _type_node = \ 10047 make_or_reuse_sat_signed_ ## KIND ## _type \ 10048 (GET_MODE_BITSIZE (MODE ## mode)); \ 10049 sat_u ## NAME ## _type_node = \ 10050 make_or_reuse_sat_unsigned_ ## KIND ## _type \ 10051 (GET_MODE_BITSIZE (U ## MODE ## mode)); 10052 10053 /* Fixed-point type and mode nodes. */ 10054 MAKE_FIXED_TYPE_NODE_FAMILY (fract, FRACT) 10055 MAKE_FIXED_TYPE_NODE_FAMILY (accum, ACCUM) 10056 MAKE_FIXED_MODE_NODE (fract, qq, QQ) 10057 MAKE_FIXED_MODE_NODE (fract, hq, HQ) 10058 MAKE_FIXED_MODE_NODE (fract, sq, SQ) 10059 MAKE_FIXED_MODE_NODE (fract, dq, DQ) 10060 MAKE_FIXED_MODE_NODE (fract, tq, TQ) 10061 MAKE_FIXED_MODE_NODE (accum, ha, HA) 10062 MAKE_FIXED_MODE_NODE (accum, sa, SA) 10063 MAKE_FIXED_MODE_NODE (accum, da, DA) 10064 MAKE_FIXED_MODE_NODE (accum, ta, TA) 10065 10066 { 10067 tree t = targetm.build_builtin_va_list (); 10068 10069 /* Many back-ends define record types without setting TYPE_NAME. 10070 If we copied the record type here, we'd keep the original 10071 record type without a name. This breaks name mangling. So, 10072 don't copy record types and let c_common_nodes_and_builtins() 10073 declare the type to be __builtin_va_list. */ 10074 if (TREE_CODE (t) != RECORD_TYPE) 10075 t = build_variant_type_copy (t); 10076 10077 va_list_type_node = t; 10078 } 10079 } 10080 10081 /* Modify DECL for given flags. 10082 TM_PURE attribute is set only on types, so the function will modify 10083 DECL's type when ECF_TM_PURE is used. */ 10084 10085 void 10086 set_call_expr_flags (tree decl, int flags) 10087 { 10088 if (flags & ECF_NOTHROW) 10089 TREE_NOTHROW (decl) = 1; 10090 if (flags & ECF_CONST) 10091 TREE_READONLY (decl) = 1; 10092 if (flags & ECF_PURE) 10093 DECL_PURE_P (decl) = 1; 10094 if (flags & ECF_LOOPING_CONST_OR_PURE) 10095 DECL_LOOPING_CONST_OR_PURE_P (decl) = 1; 10096 if (flags & ECF_NOVOPS) 10097 DECL_IS_NOVOPS (decl) = 1; 10098 if (flags & ECF_NORETURN) 10099 TREE_THIS_VOLATILE (decl) = 1; 10100 if (flags & ECF_MALLOC) 10101 DECL_IS_MALLOC (decl) = 1; 10102 if (flags & ECF_RETURNS_TWICE) 10103 DECL_IS_RETURNS_TWICE (decl) = 1; 10104 if (flags & ECF_LEAF) 10105 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"), 10106 NULL, DECL_ATTRIBUTES (decl)); 10107 if (flags & ECF_COLD) 10108 DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("cold"), 10109 NULL, DECL_ATTRIBUTES (decl)); 10110 if (flags & ECF_RET1) 10111 DECL_ATTRIBUTES (decl) 10112 = tree_cons (get_identifier ("fn spec"), 10113 build_tree_list (NULL_TREE, build_string (1, "1")), 10114 DECL_ATTRIBUTES (decl)); 10115 if ((flags & ECF_TM_PURE) && flag_tm) 10116 apply_tm_attr (decl, get_identifier ("transaction_pure")); 10117 /* Looping const or pure is implied by noreturn. 10118 There is currently no way to declare looping const or looping pure alone. */ 10119 gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE) 10120 || ((flags & ECF_NORETURN) && (flags & (ECF_CONST | ECF_PURE)))); 10121 } 10122 10123 10124 /* A subroutine of build_common_builtin_nodes. Define a builtin function. */ 10125 10126 static void 10127 local_define_builtin (const char *name, tree type, enum built_in_function code, 10128 const char *library_name, int ecf_flags) 10129 { 10130 tree decl; 10131 10132 decl = add_builtin_function (name, type, code, BUILT_IN_NORMAL, 10133 library_name, NULL_TREE); 10134 set_call_expr_flags (decl, ecf_flags); 10135 10136 set_builtin_decl (code, decl, true); 10137 } 10138 10139 /* Call this function after instantiating all builtins that the language 10140 front end cares about. This will build the rest of the builtins 10141 and internal functions that are relied upon by the tree optimizers and 10142 the middle-end. */ 10143 10144 void 10145 build_common_builtin_nodes (void) 10146 { 10147 tree tmp, ftype; 10148 int ecf_flags; 10149 10150 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE) 10151 || !builtin_decl_explicit_p (BUILT_IN_ABORT)) 10152 { 10153 ftype = build_function_type (void_type_node, void_list_node); 10154 if (!builtin_decl_explicit_p (BUILT_IN_UNREACHABLE)) 10155 local_define_builtin ("__builtin_unreachable", ftype, 10156 BUILT_IN_UNREACHABLE, 10157 "__builtin_unreachable", 10158 ECF_NOTHROW | ECF_LEAF | ECF_NORETURN 10159 | ECF_CONST | ECF_COLD); 10160 if (!builtin_decl_explicit_p (BUILT_IN_ABORT)) 10161 local_define_builtin ("__builtin_abort", ftype, BUILT_IN_ABORT, 10162 "abort", 10163 ECF_LEAF | ECF_NORETURN | ECF_CONST | ECF_COLD); 10164 } 10165 10166 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY) 10167 || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE)) 10168 { 10169 ftype = build_function_type_list (ptr_type_node, 10170 ptr_type_node, const_ptr_type_node, 10171 size_type_node, NULL_TREE); 10172 10173 if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)) 10174 local_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY, 10175 "memcpy", ECF_NOTHROW | ECF_LEAF | ECF_RET1); 10176 if (!builtin_decl_explicit_p (BUILT_IN_MEMMOVE)) 10177 local_define_builtin ("__builtin_memmove", ftype, BUILT_IN_MEMMOVE, 10178 "memmove", ECF_NOTHROW | ECF_LEAF | ECF_RET1); 10179 } 10180 10181 if (!builtin_decl_explicit_p (BUILT_IN_MEMCMP)) 10182 { 10183 ftype = build_function_type_list (integer_type_node, const_ptr_type_node, 10184 const_ptr_type_node, size_type_node, 10185 NULL_TREE); 10186 local_define_builtin ("__builtin_memcmp", ftype, BUILT_IN_MEMCMP, 10187 "memcmp", ECF_PURE | ECF_NOTHROW | ECF_LEAF); 10188 } 10189 10190 if (!builtin_decl_explicit_p (BUILT_IN_MEMSET)) 10191 { 10192 ftype = build_function_type_list (ptr_type_node, 10193 ptr_type_node, integer_type_node, 10194 size_type_node, NULL_TREE); 10195 local_define_builtin ("__builtin_memset", ftype, BUILT_IN_MEMSET, 10196 "memset", ECF_NOTHROW | ECF_LEAF | ECF_RET1); 10197 } 10198 10199 /* If we're checking the stack, `alloca' can throw. */ 10200 const int alloca_flags 10201 = ECF_MALLOC | ECF_LEAF | (flag_stack_check ? 0 : ECF_NOTHROW); 10202 10203 if (!builtin_decl_explicit_p (BUILT_IN_ALLOCA)) 10204 { 10205 ftype = build_function_type_list (ptr_type_node, 10206 size_type_node, NULL_TREE); 10207 local_define_builtin ("__builtin_alloca", ftype, BUILT_IN_ALLOCA, 10208 "alloca", alloca_flags); 10209 } 10210 10211 ftype = build_function_type_list (ptr_type_node, size_type_node, 10212 size_type_node, NULL_TREE); 10213 local_define_builtin ("__builtin_alloca_with_align", ftype, 10214 BUILT_IN_ALLOCA_WITH_ALIGN, 10215 "__builtin_alloca_with_align", 10216 alloca_flags); 10217 10218 ftype = build_function_type_list (ptr_type_node, size_type_node, 10219 size_type_node, size_type_node, NULL_TREE); 10220 local_define_builtin ("__builtin_alloca_with_align_and_max", ftype, 10221 BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX, 10222 "__builtin_alloca_with_align_and_max", 10223 alloca_flags); 10224 10225 ftype = build_function_type_list (void_type_node, 10226 ptr_type_node, ptr_type_node, 10227 ptr_type_node, NULL_TREE); 10228 local_define_builtin ("__builtin_init_trampoline", ftype, 10229 BUILT_IN_INIT_TRAMPOLINE, 10230 "__builtin_init_trampoline", ECF_NOTHROW | ECF_LEAF); 10231 local_define_builtin ("__builtin_init_heap_trampoline", ftype, 10232 BUILT_IN_INIT_HEAP_TRAMPOLINE, 10233 "__builtin_init_heap_trampoline", 10234 ECF_NOTHROW | ECF_LEAF); 10235 local_define_builtin ("__builtin_init_descriptor", ftype, 10236 BUILT_IN_INIT_DESCRIPTOR, 10237 "__builtin_init_descriptor", ECF_NOTHROW | ECF_LEAF); 10238 10239 ftype = build_function_type_list (ptr_type_node, ptr_type_node, NULL_TREE); 10240 local_define_builtin ("__builtin_adjust_trampoline", ftype, 10241 BUILT_IN_ADJUST_TRAMPOLINE, 10242 "__builtin_adjust_trampoline", 10243 ECF_CONST | ECF_NOTHROW); 10244 local_define_builtin ("__builtin_adjust_descriptor", ftype, 10245 BUILT_IN_ADJUST_DESCRIPTOR, 10246 "__builtin_adjust_descriptor", 10247 ECF_CONST | ECF_NOTHROW); 10248 10249 ftype = build_function_type_list (void_type_node, 10250 ptr_type_node, ptr_type_node, NULL_TREE); 10251 local_define_builtin ("__builtin_nonlocal_goto", ftype, 10252 BUILT_IN_NONLOCAL_GOTO, 10253 "__builtin_nonlocal_goto", 10254 ECF_NORETURN | ECF_NOTHROW); 10255 10256 ftype = build_function_type_list (void_type_node, 10257 ptr_type_node, ptr_type_node, NULL_TREE); 10258 local_define_builtin ("__builtin_setjmp_setup", ftype, 10259 BUILT_IN_SETJMP_SETUP, 10260 "__builtin_setjmp_setup", ECF_NOTHROW); 10261 10262 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE); 10263 local_define_builtin ("__builtin_setjmp_receiver", ftype, 10264 BUILT_IN_SETJMP_RECEIVER, 10265 "__builtin_setjmp_receiver", ECF_NOTHROW | ECF_LEAF); 10266 10267 ftype = build_function_type_list (ptr_type_node, NULL_TREE); 10268 local_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE, 10269 "__builtin_stack_save", ECF_NOTHROW | ECF_LEAF); 10270 10271 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE); 10272 local_define_builtin ("__builtin_stack_restore", ftype, 10273 BUILT_IN_STACK_RESTORE, 10274 "__builtin_stack_restore", ECF_NOTHROW | ECF_LEAF); 10275 10276 ftype = build_function_type_list (integer_type_node, const_ptr_type_node, 10277 const_ptr_type_node, size_type_node, 10278 NULL_TREE); 10279 local_define_builtin ("__builtin_memcmp_eq", ftype, BUILT_IN_MEMCMP_EQ, 10280 "__builtin_memcmp_eq", 10281 ECF_PURE | ECF_NOTHROW | ECF_LEAF); 10282 10283 /* If there's a possibility that we might use the ARM EABI, build the 10284 alternate __cxa_end_cleanup node used to resume from C++. */ 10285 if (targetm.arm_eabi_unwinder) 10286 { 10287 ftype = build_function_type_list (void_type_node, NULL_TREE); 10288 local_define_builtin ("__builtin_cxa_end_cleanup", ftype, 10289 BUILT_IN_CXA_END_CLEANUP, 10290 "__cxa_end_cleanup", ECF_NORETURN | ECF_LEAF); 10291 } 10292 10293 ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE); 10294 local_define_builtin ("__builtin_unwind_resume", ftype, 10295 BUILT_IN_UNWIND_RESUME, 10296 ((targetm_common.except_unwind_info (&global_options) 10297 == UI_SJLJ) 10298 ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"), 10299 ECF_NORETURN); 10300 10301 if (builtin_decl_explicit (BUILT_IN_RETURN_ADDRESS) == NULL_TREE) 10302 { 10303 ftype = build_function_type_list (ptr_type_node, integer_type_node, 10304 NULL_TREE); 10305 local_define_builtin ("__builtin_return_address", ftype, 10306 BUILT_IN_RETURN_ADDRESS, 10307 "__builtin_return_address", 10308 ECF_NOTHROW); 10309 } 10310 10311 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER) 10312 || !builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT)) 10313 { 10314 ftype = build_function_type_list (void_type_node, ptr_type_node, 10315 ptr_type_node, NULL_TREE); 10316 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_ENTER)) 10317 local_define_builtin ("__cyg_profile_func_enter", ftype, 10318 BUILT_IN_PROFILE_FUNC_ENTER, 10319 "__cyg_profile_func_enter", 0); 10320 if (!builtin_decl_explicit_p (BUILT_IN_PROFILE_FUNC_EXIT)) 10321 local_define_builtin ("__cyg_profile_func_exit", ftype, 10322 BUILT_IN_PROFILE_FUNC_EXIT, 10323 "__cyg_profile_func_exit", 0); 10324 } 10325 10326 /* The exception object and filter values from the runtime. The argument 10327 must be zero before exception lowering, i.e. from the front end. After 10328 exception lowering, it will be the region number for the exception 10329 landing pad. These functions are PURE instead of CONST to prevent 10330 them from being hoisted past the exception edge that will initialize 10331 its value in the landing pad. */ 10332 ftype = build_function_type_list (ptr_type_node, 10333 integer_type_node, NULL_TREE); 10334 ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF; 10335 /* Only use TM_PURE if we have TM language support. */ 10336 if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1)) 10337 ecf_flags |= ECF_TM_PURE; 10338 local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER, 10339 "__builtin_eh_pointer", ecf_flags); 10340 10341 tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0); 10342 ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE); 10343 local_define_builtin ("__builtin_eh_filter", ftype, BUILT_IN_EH_FILTER, 10344 "__builtin_eh_filter", ECF_PURE | ECF_NOTHROW | ECF_LEAF); 10345 10346 ftype = build_function_type_list (void_type_node, 10347 integer_type_node, integer_type_node, 10348 NULL_TREE); 10349 local_define_builtin ("__builtin_eh_copy_values", ftype, 10350 BUILT_IN_EH_COPY_VALUES, 10351 "__builtin_eh_copy_values", ECF_NOTHROW); 10352 10353 /* Complex multiplication and division. These are handled as builtins 10354 rather than optabs because emit_library_call_value doesn't support 10355 complex. Further, we can do slightly better with folding these 10356 beasties if the real and complex parts of the arguments are separate. */ 10357 { 10358 int mode; 10359 10360 for (mode = MIN_MODE_COMPLEX_FLOAT; mode <= MAX_MODE_COMPLEX_FLOAT; ++mode) 10361 { 10362 char mode_name_buf[4], *q; 10363 const char *p; 10364 enum built_in_function mcode, dcode; 10365 tree type, inner_type; 10366 const char *prefix = "__"; 10367 10368 if (targetm.libfunc_gnu_prefix) 10369 prefix = "__gnu_"; 10370 10371 type = lang_hooks.types.type_for_mode ((machine_mode) mode, 0); 10372 if (type == NULL) 10373 continue; 10374 inner_type = TREE_TYPE (type); 10375 10376 ftype = build_function_type_list (type, inner_type, inner_type, 10377 inner_type, inner_type, NULL_TREE); 10378 10379 mcode = ((enum built_in_function) 10380 (BUILT_IN_COMPLEX_MUL_MIN + mode - MIN_MODE_COMPLEX_FLOAT)); 10381 dcode = ((enum built_in_function) 10382 (BUILT_IN_COMPLEX_DIV_MIN + mode - MIN_MODE_COMPLEX_FLOAT)); 10383 10384 for (p = GET_MODE_NAME (mode), q = mode_name_buf; *p; p++, q++) 10385 *q = TOLOWER (*p); 10386 *q = '\0'; 10387 10388 built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3", 10389 NULL); 10390 local_define_builtin (built_in_names[mcode], ftype, mcode, 10391 built_in_names[mcode], 10392 ECF_CONST | ECF_NOTHROW | ECF_LEAF); 10393 10394 built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3", 10395 NULL); 10396 local_define_builtin (built_in_names[dcode], ftype, dcode, 10397 built_in_names[dcode], 10398 ECF_CONST | ECF_NOTHROW | ECF_LEAF); 10399 } 10400 } 10401 10402 init_internal_fns (); 10403 } 10404 10405 /* HACK. GROSS. This is absolutely disgusting. I wish there was a 10406 better way. 10407 10408 If we requested a pointer to a vector, build up the pointers that 10409 we stripped off while looking for the inner type. Similarly for 10410 return values from functions. 10411 10412 The argument TYPE is the top of the chain, and BOTTOM is the 10413 new type which we will point to. */ 10414 10415 tree 10416 reconstruct_complex_type (tree type, tree bottom) 10417 { 10418 tree inner, outer; 10419 10420 if (TREE_CODE (type) == POINTER_TYPE) 10421 { 10422 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10423 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type), 10424 TYPE_REF_CAN_ALIAS_ALL (type)); 10425 } 10426 else if (TREE_CODE (type) == REFERENCE_TYPE) 10427 { 10428 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10429 outer = build_reference_type_for_mode (inner, TYPE_MODE (type), 10430 TYPE_REF_CAN_ALIAS_ALL (type)); 10431 } 10432 else if (TREE_CODE (type) == ARRAY_TYPE) 10433 { 10434 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10435 outer = build_array_type (inner, TYPE_DOMAIN (type)); 10436 } 10437 else if (TREE_CODE (type) == FUNCTION_TYPE) 10438 { 10439 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10440 outer = build_function_type (inner, TYPE_ARG_TYPES (type)); 10441 } 10442 else if (TREE_CODE (type) == METHOD_TYPE) 10443 { 10444 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10445 /* The build_method_type_directly() routine prepends 'this' to argument list, 10446 so we must compensate by getting rid of it. */ 10447 outer 10448 = build_method_type_directly 10449 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))), 10450 inner, 10451 TREE_CHAIN (TYPE_ARG_TYPES (type))); 10452 } 10453 else if (TREE_CODE (type) == OFFSET_TYPE) 10454 { 10455 inner = reconstruct_complex_type (TREE_TYPE (type), bottom); 10456 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner); 10457 } 10458 else 10459 return bottom; 10460 10461 return build_type_attribute_qual_variant (outer, TYPE_ATTRIBUTES (type), 10462 TYPE_QUALS (type)); 10463 } 10464 10465 /* Returns a vector tree node given a mode (integer, vector, or BLKmode) and 10466 the inner type. */ 10467 tree 10468 build_vector_type_for_mode (tree innertype, machine_mode mode) 10469 { 10470 poly_int64 nunits; 10471 unsigned int bitsize; 10472 10473 switch (GET_MODE_CLASS (mode)) 10474 { 10475 case MODE_VECTOR_BOOL: 10476 case MODE_VECTOR_INT: 10477 case MODE_VECTOR_FLOAT: 10478 case MODE_VECTOR_FRACT: 10479 case MODE_VECTOR_UFRACT: 10480 case MODE_VECTOR_ACCUM: 10481 case MODE_VECTOR_UACCUM: 10482 nunits = GET_MODE_NUNITS (mode); 10483 break; 10484 10485 case MODE_INT: 10486 /* Check that there are no leftover bits. */ 10487 bitsize = GET_MODE_BITSIZE (as_a <scalar_int_mode> (mode)); 10488 gcc_assert (bitsize % TREE_INT_CST_LOW (TYPE_SIZE (innertype)) == 0); 10489 nunits = bitsize / TREE_INT_CST_LOW (TYPE_SIZE (innertype)); 10490 break; 10491 10492 default: 10493 gcc_unreachable (); 10494 } 10495 10496 return make_vector_type (innertype, nunits, mode); 10497 } 10498 10499 /* Similarly, but takes the inner type and number of units, which must be 10500 a power of two. */ 10501 10502 tree 10503 build_vector_type (tree innertype, poly_int64 nunits) 10504 { 10505 return make_vector_type (innertype, nunits, VOIDmode); 10506 } 10507 10508 /* Build truth vector with specified length and number of units. */ 10509 10510 tree 10511 build_truth_vector_type (poly_uint64 nunits, poly_uint64 vector_size) 10512 { 10513 machine_mode mask_mode 10514 = targetm.vectorize.get_mask_mode (nunits, vector_size).else_blk (); 10515 10516 poly_uint64 vsize; 10517 if (mask_mode == BLKmode) 10518 vsize = vector_size * BITS_PER_UNIT; 10519 else 10520 vsize = GET_MODE_BITSIZE (mask_mode); 10521 10522 unsigned HOST_WIDE_INT esize = vector_element_size (vsize, nunits); 10523 10524 tree bool_type = build_nonstandard_boolean_type (esize); 10525 10526 return make_vector_type (bool_type, nunits, mask_mode); 10527 } 10528 10529 /* Returns a vector type corresponding to a comparison of VECTYPE. */ 10530 10531 tree 10532 build_same_sized_truth_vector_type (tree vectype) 10533 { 10534 if (VECTOR_BOOLEAN_TYPE_P (vectype)) 10535 return vectype; 10536 10537 poly_uint64 size = GET_MODE_SIZE (TYPE_MODE (vectype)); 10538 10539 if (known_eq (size, 0U)) 10540 size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype)); 10541 10542 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size); 10543 } 10544 10545 /* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */ 10546 10547 tree 10548 build_opaque_vector_type (tree innertype, poly_int64 nunits) 10549 { 10550 tree t = make_vector_type (innertype, nunits, VOIDmode); 10551 tree cand; 10552 /* We always build the non-opaque variant before the opaque one, 10553 so if it already exists, it is TYPE_NEXT_VARIANT of this one. */ 10554 cand = TYPE_NEXT_VARIANT (t); 10555 if (cand 10556 && TYPE_VECTOR_OPAQUE (cand) 10557 && check_qualified_type (cand, t, TYPE_QUALS (t))) 10558 return cand; 10559 /* Othewise build a variant type and make sure to queue it after 10560 the non-opaque type. */ 10561 cand = build_distinct_type_copy (t); 10562 TYPE_VECTOR_OPAQUE (cand) = true; 10563 TYPE_CANONICAL (cand) = TYPE_CANONICAL (t); 10564 TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t); 10565 TYPE_NEXT_VARIANT (t) = cand; 10566 TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t); 10567 return cand; 10568 } 10569 10570 /* Return the value of element I of VECTOR_CST T as a wide_int. */ 10571 10572 wide_int 10573 vector_cst_int_elt (const_tree t, unsigned int i) 10574 { 10575 /* First handle elements that are directly encoded. */ 10576 unsigned int encoded_nelts = vector_cst_encoded_nelts (t); 10577 if (i < encoded_nelts) 10578 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, i)); 10579 10580 /* Identify the pattern that contains element I and work out the index of 10581 the last encoded element for that pattern. */ 10582 unsigned int npatterns = VECTOR_CST_NPATTERNS (t); 10583 unsigned int pattern = i % npatterns; 10584 unsigned int count = i / npatterns; 10585 unsigned int final_i = encoded_nelts - npatterns + pattern; 10586 10587 /* If there are no steps, the final encoded value is the right one. */ 10588 if (!VECTOR_CST_STEPPED_P (t)) 10589 return wi::to_wide (VECTOR_CST_ENCODED_ELT (t, final_i)); 10590 10591 /* Otherwise work out the value from the last two encoded elements. */ 10592 tree v1 = VECTOR_CST_ENCODED_ELT (t, final_i - npatterns); 10593 tree v2 = VECTOR_CST_ENCODED_ELT (t, final_i); 10594 wide_int diff = wi::to_wide (v2) - wi::to_wide (v1); 10595 return wi::to_wide (v2) + (count - 2) * diff; 10596 } 10597 10598 /* Return the value of element I of VECTOR_CST T. */ 10599 10600 tree 10601 vector_cst_elt (const_tree t, unsigned int i) 10602 { 10603 /* First handle elements that are directly encoded. */ 10604 unsigned int encoded_nelts = vector_cst_encoded_nelts (t); 10605 if (i < encoded_nelts) 10606 return VECTOR_CST_ENCODED_ELT (t, i); 10607 10608 /* If there are no steps, the final encoded value is the right one. */ 10609 if (!VECTOR_CST_STEPPED_P (t)) 10610 { 10611 /* Identify the pattern that contains element I and work out the index of 10612 the last encoded element for that pattern. */ 10613 unsigned int npatterns = VECTOR_CST_NPATTERNS (t); 10614 unsigned int pattern = i % npatterns; 10615 unsigned int final_i = encoded_nelts - npatterns + pattern; 10616 return VECTOR_CST_ENCODED_ELT (t, final_i); 10617 } 10618 10619 /* Otherwise work out the value from the last two encoded elements. */ 10620 return wide_int_to_tree (TREE_TYPE (TREE_TYPE (t)), 10621 vector_cst_int_elt (t, i)); 10622 } 10623 10624 /* Given an initializer INIT, return TRUE if INIT is zero or some 10625 aggregate of zeros. Otherwise return FALSE. */ 10626 bool 10627 initializer_zerop (const_tree init) 10628 { 10629 tree elt; 10630 10631 STRIP_NOPS (init); 10632 10633 switch (TREE_CODE (init)) 10634 { 10635 case INTEGER_CST: 10636 return integer_zerop (init); 10637 10638 case REAL_CST: 10639 /* ??? Note that this is not correct for C4X float formats. There, 10640 a bit pattern of all zeros is 1.0; 0.0 is encoded with the most 10641 negative exponent. */ 10642 return real_zerop (init) 10643 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (init)); 10644 10645 case FIXED_CST: 10646 return fixed_zerop (init); 10647 10648 case COMPLEX_CST: 10649 return integer_zerop (init) 10650 || (real_zerop (init) 10651 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_REALPART (init))) 10652 && ! REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (TREE_IMAGPART (init)))); 10653 10654 case VECTOR_CST: 10655 return (VECTOR_CST_NPATTERNS (init) == 1 10656 && VECTOR_CST_DUPLICATE_P (init) 10657 && initializer_zerop (VECTOR_CST_ENCODED_ELT (init, 0))); 10658 10659 case CONSTRUCTOR: 10660 { 10661 unsigned HOST_WIDE_INT idx; 10662 10663 if (TREE_CLOBBER_P (init)) 10664 return false; 10665 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt) 10666 if (!initializer_zerop (elt)) 10667 return false; 10668 return true; 10669 } 10670 10671 case STRING_CST: 10672 { 10673 int i; 10674 10675 /* We need to loop through all elements to handle cases like 10676 "\0" and "\0foobar". */ 10677 for (i = 0; i < TREE_STRING_LENGTH (init); ++i) 10678 if (TREE_STRING_POINTER (init)[i] != '\0') 10679 return false; 10680 10681 return true; 10682 } 10683 10684 default: 10685 return false; 10686 } 10687 } 10688 10689 /* Check if vector VEC consists of all the equal elements and 10690 that the number of elements corresponds to the type of VEC. 10691 The function returns first element of the vector 10692 or NULL_TREE if the vector is not uniform. */ 10693 tree 10694 uniform_vector_p (const_tree vec) 10695 { 10696 tree first, t; 10697 unsigned HOST_WIDE_INT i, nelts; 10698 10699 if (vec == NULL_TREE) 10700 return NULL_TREE; 10701 10702 gcc_assert (VECTOR_TYPE_P (TREE_TYPE (vec))); 10703 10704 if (TREE_CODE (vec) == VEC_DUPLICATE_EXPR) 10705 return TREE_OPERAND (vec, 0); 10706 10707 else if (TREE_CODE (vec) == VECTOR_CST) 10708 { 10709 if (VECTOR_CST_NPATTERNS (vec) == 1 && VECTOR_CST_DUPLICATE_P (vec)) 10710 return VECTOR_CST_ENCODED_ELT (vec, 0); 10711 return NULL_TREE; 10712 } 10713 10714 else if (TREE_CODE (vec) == CONSTRUCTOR 10715 && TYPE_VECTOR_SUBPARTS (TREE_TYPE (vec)).is_constant (&nelts)) 10716 { 10717 first = error_mark_node; 10718 10719 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (vec), i, t) 10720 { 10721 if (i == 0) 10722 { 10723 first = t; 10724 continue; 10725 } 10726 if (!operand_equal_p (first, t, 0)) 10727 return NULL_TREE; 10728 } 10729 if (i != nelts) 10730 return NULL_TREE; 10731 10732 return first; 10733 } 10734 10735 return NULL_TREE; 10736 } 10737 10738 /* Build an empty statement at location LOC. */ 10739 10740 tree 10741 build_empty_stmt (location_t loc) 10742 { 10743 tree t = build1 (NOP_EXPR, void_type_node, size_zero_node); 10744 SET_EXPR_LOCATION (t, loc); 10745 return t; 10746 } 10747 10748 10749 /* Build an OpenMP clause with code CODE. LOC is the location of the 10750 clause. */ 10751 10752 tree 10753 build_omp_clause (location_t loc, enum omp_clause_code code) 10754 { 10755 tree t; 10756 int size, length; 10757 10758 length = omp_clause_num_ops[code]; 10759 size = (sizeof (struct tree_omp_clause) + (length - 1) * sizeof (tree)); 10760 10761 record_node_allocation_statistics (OMP_CLAUSE, size); 10762 10763 t = (tree) ggc_internal_alloc (size); 10764 memset (t, 0, size); 10765 TREE_SET_CODE (t, OMP_CLAUSE); 10766 OMP_CLAUSE_SET_CODE (t, code); 10767 OMP_CLAUSE_LOCATION (t) = loc; 10768 10769 return t; 10770 } 10771 10772 /* Build a tcc_vl_exp object with code CODE and room for LEN operands. LEN 10773 includes the implicit operand count in TREE_OPERAND 0, and so must be >= 1. 10774 Except for the CODE and operand count field, other storage for the 10775 object is initialized to zeros. */ 10776 10777 tree 10778 build_vl_exp (enum tree_code code, int len MEM_STAT_DECL) 10779 { 10780 tree t; 10781 int length = (len - 1) * sizeof (tree) + sizeof (struct tree_exp); 10782 10783 gcc_assert (TREE_CODE_CLASS (code) == tcc_vl_exp); 10784 gcc_assert (len >= 1); 10785 10786 record_node_allocation_statistics (code, length); 10787 10788 t = ggc_alloc_cleared_tree_node_stat (length PASS_MEM_STAT); 10789 10790 TREE_SET_CODE (t, code); 10791 10792 /* Can't use TREE_OPERAND to store the length because if checking is 10793 enabled, it will try to check the length before we store it. :-P */ 10794 t->exp.operands[0] = build_int_cst (sizetype, len); 10795 10796 return t; 10797 } 10798 10799 /* Helper function for build_call_* functions; build a CALL_EXPR with 10800 indicated RETURN_TYPE, FN, and NARGS, but do not initialize any of 10801 the argument slots. */ 10802 10803 static tree 10804 build_call_1 (tree return_type, tree fn, int nargs) 10805 { 10806 tree t; 10807 10808 t = build_vl_exp (CALL_EXPR, nargs + 3); 10809 TREE_TYPE (t) = return_type; 10810 CALL_EXPR_FN (t) = fn; 10811 CALL_EXPR_STATIC_CHAIN (t) = NULL; 10812 10813 return t; 10814 } 10815 10816 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and 10817 FN and a null static chain slot. NARGS is the number of call arguments 10818 which are specified as "..." arguments. */ 10819 10820 tree 10821 build_call_nary (tree return_type, tree fn, int nargs, ...) 10822 { 10823 tree ret; 10824 va_list args; 10825 va_start (args, nargs); 10826 ret = build_call_valist (return_type, fn, nargs, args); 10827 va_end (args); 10828 return ret; 10829 } 10830 10831 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and 10832 FN and a null static chain slot. NARGS is the number of call arguments 10833 which are specified as a va_list ARGS. */ 10834 10835 tree 10836 build_call_valist (tree return_type, tree fn, int nargs, va_list args) 10837 { 10838 tree t; 10839 int i; 10840 10841 t = build_call_1 (return_type, fn, nargs); 10842 for (i = 0; i < nargs; i++) 10843 CALL_EXPR_ARG (t, i) = va_arg (args, tree); 10844 process_call_operands (t); 10845 return t; 10846 } 10847 10848 /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and 10849 FN and a null static chain slot. NARGS is the number of call arguments 10850 which are specified as a tree array ARGS. */ 10851 10852 tree 10853 build_call_array_loc (location_t loc, tree return_type, tree fn, 10854 int nargs, const tree *args) 10855 { 10856 tree t; 10857 int i; 10858 10859 t = build_call_1 (return_type, fn, nargs); 10860 for (i = 0; i < nargs; i++) 10861 CALL_EXPR_ARG (t, i) = args[i]; 10862 process_call_operands (t); 10863 SET_EXPR_LOCATION (t, loc); 10864 return t; 10865 } 10866 10867 /* Like build_call_array, but takes a vec. */ 10868 10869 tree 10870 build_call_vec (tree return_type, tree fn, vec<tree, va_gc> *args) 10871 { 10872 tree ret, t; 10873 unsigned int ix; 10874 10875 ret = build_call_1 (return_type, fn, vec_safe_length (args)); 10876 FOR_EACH_VEC_SAFE_ELT (args, ix, t) 10877 CALL_EXPR_ARG (ret, ix) = t; 10878 process_call_operands (ret); 10879 return ret; 10880 } 10881 10882 /* Conveniently construct a function call expression. FNDECL names the 10883 function to be called and N arguments are passed in the array 10884 ARGARRAY. */ 10885 10886 tree 10887 build_call_expr_loc_array (location_t loc, tree fndecl, int n, tree *argarray) 10888 { 10889 tree fntype = TREE_TYPE (fndecl); 10890 tree fn = build1 (ADDR_EXPR, build_pointer_type (fntype), fndecl); 10891 10892 return fold_build_call_array_loc (loc, TREE_TYPE (fntype), fn, n, argarray); 10893 } 10894 10895 /* Conveniently construct a function call expression. FNDECL names the 10896 function to be called and the arguments are passed in the vector 10897 VEC. */ 10898 10899 tree 10900 build_call_expr_loc_vec (location_t loc, tree fndecl, vec<tree, va_gc> *vec) 10901 { 10902 return build_call_expr_loc_array (loc, fndecl, vec_safe_length (vec), 10903 vec_safe_address (vec)); 10904 } 10905 10906 10907 /* Conveniently construct a function call expression. FNDECL names the 10908 function to be called, N is the number of arguments, and the "..." 10909 parameters are the argument expressions. */ 10910 10911 tree 10912 build_call_expr_loc (location_t loc, tree fndecl, int n, ...) 10913 { 10914 va_list ap; 10915 tree *argarray = XALLOCAVEC (tree, n); 10916 int i; 10917 10918 va_start (ap, n); 10919 for (i = 0; i < n; i++) 10920 argarray[i] = va_arg (ap, tree); 10921 va_end (ap); 10922 return build_call_expr_loc_array (loc, fndecl, n, argarray); 10923 } 10924 10925 /* Like build_call_expr_loc (UNKNOWN_LOCATION, ...). Duplicated because 10926 varargs macros aren't supported by all bootstrap compilers. */ 10927 10928 tree 10929 build_call_expr (tree fndecl, int n, ...) 10930 { 10931 va_list ap; 10932 tree *argarray = XALLOCAVEC (tree, n); 10933 int i; 10934 10935 va_start (ap, n); 10936 for (i = 0; i < n; i++) 10937 argarray[i] = va_arg (ap, tree); 10938 va_end (ap); 10939 return build_call_expr_loc_array (UNKNOWN_LOCATION, fndecl, n, argarray); 10940 } 10941 10942 /* Build an internal call to IFN, with arguments ARGS[0:N-1] and with return 10943 type TYPE. This is just like CALL_EXPR, except its CALL_EXPR_FN is NULL. 10944 It will get gimplified later into an ordinary internal function. */ 10945 10946 tree 10947 build_call_expr_internal_loc_array (location_t loc, internal_fn ifn, 10948 tree type, int n, const tree *args) 10949 { 10950 tree t = build_call_1 (type, NULL_TREE, n); 10951 for (int i = 0; i < n; ++i) 10952 CALL_EXPR_ARG (t, i) = args[i]; 10953 SET_EXPR_LOCATION (t, loc); 10954 CALL_EXPR_IFN (t) = ifn; 10955 return t; 10956 } 10957 10958 /* Build internal call expression. This is just like CALL_EXPR, except 10959 its CALL_EXPR_FN is NULL. It will get gimplified later into ordinary 10960 internal function. */ 10961 10962 tree 10963 build_call_expr_internal_loc (location_t loc, enum internal_fn ifn, 10964 tree type, int n, ...) 10965 { 10966 va_list ap; 10967 tree *argarray = XALLOCAVEC (tree, n); 10968 int i; 10969 10970 va_start (ap, n); 10971 for (i = 0; i < n; i++) 10972 argarray[i] = va_arg (ap, tree); 10973 va_end (ap); 10974 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray); 10975 } 10976 10977 /* Return a function call to FN, if the target is guaranteed to support it, 10978 or null otherwise. 10979 10980 N is the number of arguments, passed in the "...", and TYPE is the 10981 type of the return value. */ 10982 10983 tree 10984 maybe_build_call_expr_loc (location_t loc, combined_fn fn, tree type, 10985 int n, ...) 10986 { 10987 va_list ap; 10988 tree *argarray = XALLOCAVEC (tree, n); 10989 int i; 10990 10991 va_start (ap, n); 10992 for (i = 0; i < n; i++) 10993 argarray[i] = va_arg (ap, tree); 10994 va_end (ap); 10995 if (internal_fn_p (fn)) 10996 { 10997 internal_fn ifn = as_internal_fn (fn); 10998 if (direct_internal_fn_p (ifn)) 10999 { 11000 tree_pair types = direct_internal_fn_types (ifn, type, argarray); 11001 if (!direct_internal_fn_supported_p (ifn, types, 11002 OPTIMIZE_FOR_BOTH)) 11003 return NULL_TREE; 11004 } 11005 return build_call_expr_internal_loc_array (loc, ifn, type, n, argarray); 11006 } 11007 else 11008 { 11009 tree fndecl = builtin_decl_implicit (as_builtin_fn (fn)); 11010 if (!fndecl) 11011 return NULL_TREE; 11012 return build_call_expr_loc_array (loc, fndecl, n, argarray); 11013 } 11014 } 11015 11016 /* Return a function call to the appropriate builtin alloca variant. 11017 11018 SIZE is the size to be allocated. ALIGN, if non-zero, is the requested 11019 alignment of the allocated area. MAX_SIZE, if non-negative, is an upper 11020 bound for SIZE in case it is not a fixed value. */ 11021 11022 tree 11023 build_alloca_call_expr (tree size, unsigned int align, HOST_WIDE_INT max_size) 11024 { 11025 if (max_size >= 0) 11026 { 11027 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX); 11028 return 11029 build_call_expr (t, 3, size, size_int (align), size_int (max_size)); 11030 } 11031 else if (align > 0) 11032 { 11033 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA_WITH_ALIGN); 11034 return build_call_expr (t, 2, size, size_int (align)); 11035 } 11036 else 11037 { 11038 tree t = builtin_decl_explicit (BUILT_IN_ALLOCA); 11039 return build_call_expr (t, 1, size); 11040 } 11041 } 11042 11043 /* Create a new constant string literal and return a char* pointer to it. 11044 The STRING_CST value is the LEN characters at STR. */ 11045 tree 11046 build_string_literal (int len, const char *str) 11047 { 11048 tree t, elem, index, type; 11049 11050 t = build_string (len, str); 11051 elem = build_type_variant (char_type_node, 1, 0); 11052 index = build_index_type (size_int (len - 1)); 11053 type = build_array_type (elem, index); 11054 TREE_TYPE (t) = type; 11055 TREE_CONSTANT (t) = 1; 11056 TREE_READONLY (t) = 1; 11057 TREE_STATIC (t) = 1; 11058 11059 type = build_pointer_type (elem); 11060 t = build1 (ADDR_EXPR, type, 11061 build4 (ARRAY_REF, elem, 11062 t, integer_zero_node, NULL_TREE, NULL_TREE)); 11063 return t; 11064 } 11065 11066 11067 11068 /* Return true if T (assumed to be a DECL) must be assigned a memory 11069 location. */ 11070 11071 bool 11072 needs_to_live_in_memory (const_tree t) 11073 { 11074 return (TREE_ADDRESSABLE (t) 11075 || is_global_var (t) 11076 || (TREE_CODE (t) == RESULT_DECL 11077 && !DECL_BY_REFERENCE (t) 11078 && aggregate_value_p (t, current_function_decl))); 11079 } 11080 11081 /* Return value of a constant X and sign-extend it. */ 11082 11083 HOST_WIDE_INT 11084 int_cst_value (const_tree x) 11085 { 11086 unsigned bits = TYPE_PRECISION (TREE_TYPE (x)); 11087 unsigned HOST_WIDE_INT val = TREE_INT_CST_LOW (x); 11088 11089 /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */ 11090 gcc_assert (cst_and_fits_in_hwi (x)); 11091 11092 if (bits < HOST_BITS_PER_WIDE_INT) 11093 { 11094 bool negative = ((val >> (bits - 1)) & 1) != 0; 11095 if (negative) 11096 val |= HOST_WIDE_INT_M1U << (bits - 1) << 1; 11097 else 11098 val &= ~(HOST_WIDE_INT_M1U << (bits - 1) << 1); 11099 } 11100 11101 return val; 11102 } 11103 11104 /* If TYPE is an integral or pointer type, return an integer type with 11105 the same precision which is unsigned iff UNSIGNEDP is true, or itself 11106 if TYPE is already an integer type of signedness UNSIGNEDP. */ 11107 11108 tree 11109 signed_or_unsigned_type_for (int unsignedp, tree type) 11110 { 11111 if (TREE_CODE (type) == INTEGER_TYPE && TYPE_UNSIGNED (type) == unsignedp) 11112 return type; 11113 11114 if (TREE_CODE (type) == VECTOR_TYPE) 11115 { 11116 tree inner = TREE_TYPE (type); 11117 tree inner2 = signed_or_unsigned_type_for (unsignedp, inner); 11118 if (!inner2) 11119 return NULL_TREE; 11120 if (inner == inner2) 11121 return type; 11122 return build_vector_type (inner2, TYPE_VECTOR_SUBPARTS (type)); 11123 } 11124 11125 if (!INTEGRAL_TYPE_P (type) 11126 && !POINTER_TYPE_P (type) 11127 && TREE_CODE (type) != OFFSET_TYPE) 11128 return NULL_TREE; 11129 11130 return build_nonstandard_integer_type (TYPE_PRECISION (type), unsignedp); 11131 } 11132 11133 /* If TYPE is an integral or pointer type, return an integer type with 11134 the same precision which is unsigned, or itself if TYPE is already an 11135 unsigned integer type. */ 11136 11137 tree 11138 unsigned_type_for (tree type) 11139 { 11140 return signed_or_unsigned_type_for (1, type); 11141 } 11142 11143 /* If TYPE is an integral or pointer type, return an integer type with 11144 the same precision which is signed, or itself if TYPE is already a 11145 signed integer type. */ 11146 11147 tree 11148 signed_type_for (tree type) 11149 { 11150 return signed_or_unsigned_type_for (0, type); 11151 } 11152 11153 /* If TYPE is a vector type, return a signed integer vector type with the 11154 same width and number of subparts. Otherwise return boolean_type_node. */ 11155 11156 tree 11157 truth_type_for (tree type) 11158 { 11159 if (TREE_CODE (type) == VECTOR_TYPE) 11160 { 11161 if (VECTOR_BOOLEAN_TYPE_P (type)) 11162 return type; 11163 return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type), 11164 GET_MODE_SIZE (TYPE_MODE (type))); 11165 } 11166 else 11167 return boolean_type_node; 11168 } 11169 11170 /* Returns the largest value obtainable by casting something in INNER type to 11171 OUTER type. */ 11172 11173 tree 11174 upper_bound_in_type (tree outer, tree inner) 11175 { 11176 unsigned int det = 0; 11177 unsigned oprec = TYPE_PRECISION (outer); 11178 unsigned iprec = TYPE_PRECISION (inner); 11179 unsigned prec; 11180 11181 /* Compute a unique number for every combination. */ 11182 det |= (oprec > iprec) ? 4 : 0; 11183 det |= TYPE_UNSIGNED (outer) ? 2 : 0; 11184 det |= TYPE_UNSIGNED (inner) ? 1 : 0; 11185 11186 /* Determine the exponent to use. */ 11187 switch (det) 11188 { 11189 case 0: 11190 case 1: 11191 /* oprec <= iprec, outer: signed, inner: don't care. */ 11192 prec = oprec - 1; 11193 break; 11194 case 2: 11195 case 3: 11196 /* oprec <= iprec, outer: unsigned, inner: don't care. */ 11197 prec = oprec; 11198 break; 11199 case 4: 11200 /* oprec > iprec, outer: signed, inner: signed. */ 11201 prec = iprec - 1; 11202 break; 11203 case 5: 11204 /* oprec > iprec, outer: signed, inner: unsigned. */ 11205 prec = iprec; 11206 break; 11207 case 6: 11208 /* oprec > iprec, outer: unsigned, inner: signed. */ 11209 prec = oprec; 11210 break; 11211 case 7: 11212 /* oprec > iprec, outer: unsigned, inner: unsigned. */ 11213 prec = iprec; 11214 break; 11215 default: 11216 gcc_unreachable (); 11217 } 11218 11219 return wide_int_to_tree (outer, 11220 wi::mask (prec, false, TYPE_PRECISION (outer))); 11221 } 11222 11223 /* Returns the smallest value obtainable by casting something in INNER type to 11224 OUTER type. */ 11225 11226 tree 11227 lower_bound_in_type (tree outer, tree inner) 11228 { 11229 unsigned oprec = TYPE_PRECISION (outer); 11230 unsigned iprec = TYPE_PRECISION (inner); 11231 11232 /* If OUTER type is unsigned, we can definitely cast 0 to OUTER type 11233 and obtain 0. */ 11234 if (TYPE_UNSIGNED (outer) 11235 /* If we are widening something of an unsigned type, OUTER type 11236 contains all values of INNER type. In particular, both INNER 11237 and OUTER types have zero in common. */ 11238 || (oprec > iprec && TYPE_UNSIGNED (inner))) 11239 return build_int_cst (outer, 0); 11240 else 11241 { 11242 /* If we are widening a signed type to another signed type, we 11243 want to obtain -2^^(iprec-1). If we are keeping the 11244 precision or narrowing to a signed type, we want to obtain 11245 -2^(oprec-1). */ 11246 unsigned prec = oprec > iprec ? iprec : oprec; 11247 return wide_int_to_tree (outer, 11248 wi::mask (prec - 1, true, 11249 TYPE_PRECISION (outer))); 11250 } 11251 } 11252 11253 /* Return nonzero if two operands that are suitable for PHI nodes are 11254 necessarily equal. Specifically, both ARG0 and ARG1 must be either 11255 SSA_NAME or invariant. Note that this is strictly an optimization. 11256 That is, callers of this function can directly call operand_equal_p 11257 and get the same result, only slower. */ 11258 11259 int 11260 operand_equal_for_phi_arg_p (const_tree arg0, const_tree arg1) 11261 { 11262 if (arg0 == arg1) 11263 return 1; 11264 if (TREE_CODE (arg0) == SSA_NAME || TREE_CODE (arg1) == SSA_NAME) 11265 return 0; 11266 return operand_equal_p (arg0, arg1, 0); 11267 } 11268 11269 /* Returns number of zeros at the end of binary representation of X. */ 11270 11271 tree 11272 num_ending_zeros (const_tree x) 11273 { 11274 return build_int_cst (TREE_TYPE (x), wi::ctz (wi::to_wide (x))); 11275 } 11276 11277 11278 #define WALK_SUBTREE(NODE) \ 11279 do \ 11280 { \ 11281 result = walk_tree_1 (&(NODE), func, data, pset, lh); \ 11282 if (result) \ 11283 return result; \ 11284 } \ 11285 while (0) 11286 11287 /* This is a subroutine of walk_tree that walks field of TYPE that are to 11288 be walked whenever a type is seen in the tree. Rest of operands and return 11289 value are as for walk_tree. */ 11290 11291 static tree 11292 walk_type_fields (tree type, walk_tree_fn func, void *data, 11293 hash_set<tree> *pset, walk_tree_lh lh) 11294 { 11295 tree result = NULL_TREE; 11296 11297 switch (TREE_CODE (type)) 11298 { 11299 case POINTER_TYPE: 11300 case REFERENCE_TYPE: 11301 case VECTOR_TYPE: 11302 /* We have to worry about mutually recursive pointers. These can't 11303 be written in C. They can in Ada. It's pathological, but 11304 there's an ACATS test (c38102a) that checks it. Deal with this 11305 by checking if we're pointing to another pointer, that one 11306 points to another pointer, that one does too, and we have no htab. 11307 If so, get a hash table. We check three levels deep to avoid 11308 the cost of the hash table if we don't need one. */ 11309 if (POINTER_TYPE_P (TREE_TYPE (type)) 11310 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (type))) 11311 && POINTER_TYPE_P (TREE_TYPE (TREE_TYPE (TREE_TYPE (type)))) 11312 && !pset) 11313 { 11314 result = walk_tree_without_duplicates (&TREE_TYPE (type), 11315 func, data); 11316 if (result) 11317 return result; 11318 11319 break; 11320 } 11321 11322 /* fall through */ 11323 11324 case COMPLEX_TYPE: 11325 WALK_SUBTREE (TREE_TYPE (type)); 11326 break; 11327 11328 case METHOD_TYPE: 11329 WALK_SUBTREE (TYPE_METHOD_BASETYPE (type)); 11330 11331 /* Fall through. */ 11332 11333 case FUNCTION_TYPE: 11334 WALK_SUBTREE (TREE_TYPE (type)); 11335 { 11336 tree arg; 11337 11338 /* We never want to walk into default arguments. */ 11339 for (arg = TYPE_ARG_TYPES (type); arg; arg = TREE_CHAIN (arg)) 11340 WALK_SUBTREE (TREE_VALUE (arg)); 11341 } 11342 break; 11343 11344 case ARRAY_TYPE: 11345 /* Don't follow this nodes's type if a pointer for fear that 11346 we'll have infinite recursion. If we have a PSET, then we 11347 need not fear. */ 11348 if (pset 11349 || (!POINTER_TYPE_P (TREE_TYPE (type)) 11350 && TREE_CODE (TREE_TYPE (type)) != OFFSET_TYPE)) 11351 WALK_SUBTREE (TREE_TYPE (type)); 11352 WALK_SUBTREE (TYPE_DOMAIN (type)); 11353 break; 11354 11355 case OFFSET_TYPE: 11356 WALK_SUBTREE (TREE_TYPE (type)); 11357 WALK_SUBTREE (TYPE_OFFSET_BASETYPE (type)); 11358 break; 11359 11360 default: 11361 break; 11362 } 11363 11364 return NULL_TREE; 11365 } 11366 11367 /* Apply FUNC to all the sub-trees of TP in a pre-order traversal. FUNC is 11368 called with the DATA and the address of each sub-tree. If FUNC returns a 11369 non-NULL value, the traversal is stopped, and the value returned by FUNC 11370 is returned. If PSET is non-NULL it is used to record the nodes visited, 11371 and to avoid visiting a node more than once. */ 11372 11373 tree 11374 walk_tree_1 (tree *tp, walk_tree_fn func, void *data, 11375 hash_set<tree> *pset, walk_tree_lh lh) 11376 { 11377 enum tree_code code; 11378 int walk_subtrees; 11379 tree result; 11380 11381 #define WALK_SUBTREE_TAIL(NODE) \ 11382 do \ 11383 { \ 11384 tp = & (NODE); \ 11385 goto tail_recurse; \ 11386 } \ 11387 while (0) 11388 11389 tail_recurse: 11390 /* Skip empty subtrees. */ 11391 if (!*tp) 11392 return NULL_TREE; 11393 11394 /* Don't walk the same tree twice, if the user has requested 11395 that we avoid doing so. */ 11396 if (pset && pset->add (*tp)) 11397 return NULL_TREE; 11398 11399 /* Call the function. */ 11400 walk_subtrees = 1; 11401 result = (*func) (tp, &walk_subtrees, data); 11402 11403 /* If we found something, return it. */ 11404 if (result) 11405 return result; 11406 11407 code = TREE_CODE (*tp); 11408 11409 /* Even if we didn't, FUNC may have decided that there was nothing 11410 interesting below this point in the tree. */ 11411 if (!walk_subtrees) 11412 { 11413 /* But we still need to check our siblings. */ 11414 if (code == TREE_LIST) 11415 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); 11416 else if (code == OMP_CLAUSE) 11417 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11418 else 11419 return NULL_TREE; 11420 } 11421 11422 if (lh) 11423 { 11424 result = (*lh) (tp, &walk_subtrees, func, data, pset); 11425 if (result || !walk_subtrees) 11426 return result; 11427 } 11428 11429 switch (code) 11430 { 11431 case ERROR_MARK: 11432 case IDENTIFIER_NODE: 11433 case INTEGER_CST: 11434 case REAL_CST: 11435 case FIXED_CST: 11436 case VECTOR_CST: 11437 case STRING_CST: 11438 case BLOCK: 11439 case PLACEHOLDER_EXPR: 11440 case SSA_NAME: 11441 case FIELD_DECL: 11442 case RESULT_DECL: 11443 /* None of these have subtrees other than those already walked 11444 above. */ 11445 break; 11446 11447 case TREE_LIST: 11448 WALK_SUBTREE (TREE_VALUE (*tp)); 11449 WALK_SUBTREE_TAIL (TREE_CHAIN (*tp)); 11450 break; 11451 11452 case TREE_VEC: 11453 { 11454 int len = TREE_VEC_LENGTH (*tp); 11455 11456 if (len == 0) 11457 break; 11458 11459 /* Walk all elements but the first. */ 11460 while (--len) 11461 WALK_SUBTREE (TREE_VEC_ELT (*tp, len)); 11462 11463 /* Now walk the first one as a tail call. */ 11464 WALK_SUBTREE_TAIL (TREE_VEC_ELT (*tp, 0)); 11465 } 11466 11467 case COMPLEX_CST: 11468 WALK_SUBTREE (TREE_REALPART (*tp)); 11469 WALK_SUBTREE_TAIL (TREE_IMAGPART (*tp)); 11470 11471 case CONSTRUCTOR: 11472 { 11473 unsigned HOST_WIDE_INT idx; 11474 constructor_elt *ce; 11475 11476 for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (*tp), idx, &ce); 11477 idx++) 11478 WALK_SUBTREE (ce->value); 11479 } 11480 break; 11481 11482 case SAVE_EXPR: 11483 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, 0)); 11484 11485 case BIND_EXPR: 11486 { 11487 tree decl; 11488 for (decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl)) 11489 { 11490 /* Walk the DECL_INITIAL and DECL_SIZE. We don't want to walk 11491 into declarations that are just mentioned, rather than 11492 declared; they don't really belong to this part of the tree. 11493 And, we can see cycles: the initializer for a declaration 11494 can refer to the declaration itself. */ 11495 WALK_SUBTREE (DECL_INITIAL (decl)); 11496 WALK_SUBTREE (DECL_SIZE (decl)); 11497 WALK_SUBTREE (DECL_SIZE_UNIT (decl)); 11498 } 11499 WALK_SUBTREE_TAIL (BIND_EXPR_BODY (*tp)); 11500 } 11501 11502 case STATEMENT_LIST: 11503 { 11504 tree_stmt_iterator i; 11505 for (i = tsi_start (*tp); !tsi_end_p (i); tsi_next (&i)) 11506 WALK_SUBTREE (*tsi_stmt_ptr (i)); 11507 } 11508 break; 11509 11510 case OMP_CLAUSE: 11511 switch (OMP_CLAUSE_CODE (*tp)) 11512 { 11513 case OMP_CLAUSE_GANG: 11514 case OMP_CLAUSE__GRIDDIM_: 11515 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1)); 11516 /* FALLTHRU */ 11517 11518 case OMP_CLAUSE_ASYNC: 11519 case OMP_CLAUSE_WAIT: 11520 case OMP_CLAUSE_WORKER: 11521 case OMP_CLAUSE_VECTOR: 11522 case OMP_CLAUSE_NUM_GANGS: 11523 case OMP_CLAUSE_NUM_WORKERS: 11524 case OMP_CLAUSE_VECTOR_LENGTH: 11525 case OMP_CLAUSE_PRIVATE: 11526 case OMP_CLAUSE_SHARED: 11527 case OMP_CLAUSE_FIRSTPRIVATE: 11528 case OMP_CLAUSE_COPYIN: 11529 case OMP_CLAUSE_COPYPRIVATE: 11530 case OMP_CLAUSE_FINAL: 11531 case OMP_CLAUSE_IF: 11532 case OMP_CLAUSE_NUM_THREADS: 11533 case OMP_CLAUSE_SCHEDULE: 11534 case OMP_CLAUSE_UNIFORM: 11535 case OMP_CLAUSE_DEPEND: 11536 case OMP_CLAUSE_NUM_TEAMS: 11537 case OMP_CLAUSE_THREAD_LIMIT: 11538 case OMP_CLAUSE_DEVICE: 11539 case OMP_CLAUSE_DIST_SCHEDULE: 11540 case OMP_CLAUSE_SAFELEN: 11541 case OMP_CLAUSE_SIMDLEN: 11542 case OMP_CLAUSE_ORDERED: 11543 case OMP_CLAUSE_PRIORITY: 11544 case OMP_CLAUSE_GRAINSIZE: 11545 case OMP_CLAUSE_NUM_TASKS: 11546 case OMP_CLAUSE_HINT: 11547 case OMP_CLAUSE_TO_DECLARE: 11548 case OMP_CLAUSE_LINK: 11549 case OMP_CLAUSE_USE_DEVICE_PTR: 11550 case OMP_CLAUSE_IS_DEVICE_PTR: 11551 case OMP_CLAUSE__LOOPTEMP_: 11552 case OMP_CLAUSE__SIMDUID_: 11553 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 0)); 11554 /* FALLTHRU */ 11555 11556 case OMP_CLAUSE_INDEPENDENT: 11557 case OMP_CLAUSE_NOWAIT: 11558 case OMP_CLAUSE_DEFAULT: 11559 case OMP_CLAUSE_UNTIED: 11560 case OMP_CLAUSE_MERGEABLE: 11561 case OMP_CLAUSE_PROC_BIND: 11562 case OMP_CLAUSE_INBRANCH: 11563 case OMP_CLAUSE_NOTINBRANCH: 11564 case OMP_CLAUSE_FOR: 11565 case OMP_CLAUSE_PARALLEL: 11566 case OMP_CLAUSE_SECTIONS: 11567 case OMP_CLAUSE_TASKGROUP: 11568 case OMP_CLAUSE_NOGROUP: 11569 case OMP_CLAUSE_THREADS: 11570 case OMP_CLAUSE_SIMD: 11571 case OMP_CLAUSE_DEFAULTMAP: 11572 case OMP_CLAUSE_AUTO: 11573 case OMP_CLAUSE_SEQ: 11574 case OMP_CLAUSE_TILE: 11575 case OMP_CLAUSE__SIMT_: 11576 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11577 11578 case OMP_CLAUSE_LASTPRIVATE: 11579 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp)); 11580 WALK_SUBTREE (OMP_CLAUSE_LASTPRIVATE_STMT (*tp)); 11581 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11582 11583 case OMP_CLAUSE_COLLAPSE: 11584 { 11585 int i; 11586 for (i = 0; i < 3; i++) 11587 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i)); 11588 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11589 } 11590 11591 case OMP_CLAUSE_LINEAR: 11592 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp)); 11593 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp)); 11594 WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp)); 11595 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11596 11597 case OMP_CLAUSE_ALIGNED: 11598 case OMP_CLAUSE_FROM: 11599 case OMP_CLAUSE_TO: 11600 case OMP_CLAUSE_MAP: 11601 case OMP_CLAUSE__CACHE_: 11602 WALK_SUBTREE (OMP_CLAUSE_DECL (*tp)); 11603 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, 1)); 11604 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11605 11606 case OMP_CLAUSE_REDUCTION: 11607 { 11608 int i; 11609 for (i = 0; i < 5; i++) 11610 WALK_SUBTREE (OMP_CLAUSE_OPERAND (*tp, i)); 11611 WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp)); 11612 } 11613 11614 default: 11615 gcc_unreachable (); 11616 } 11617 break; 11618 11619 case TARGET_EXPR: 11620 { 11621 int i, len; 11622 11623 /* TARGET_EXPRs are peculiar: operands 1 and 3 can be the same. 11624 But, we only want to walk once. */ 11625 len = (TREE_OPERAND (*tp, 3) == TREE_OPERAND (*tp, 1)) ? 2 : 3; 11626 for (i = 0; i < len; ++i) 11627 WALK_SUBTREE (TREE_OPERAND (*tp, i)); 11628 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len)); 11629 } 11630 11631 case DECL_EXPR: 11632 /* If this is a TYPE_DECL, walk into the fields of the type that it's 11633 defining. We only want to walk into these fields of a type in this 11634 case and not in the general case of a mere reference to the type. 11635 11636 The criterion is as follows: if the field can be an expression, it 11637 must be walked only here. This should be in keeping with the fields 11638 that are directly gimplified in gimplify_type_sizes in order for the 11639 mark/copy-if-shared/unmark machinery of the gimplifier to work with 11640 variable-sized types. 11641 11642 Note that DECLs get walked as part of processing the BIND_EXPR. */ 11643 if (TREE_CODE (DECL_EXPR_DECL (*tp)) == TYPE_DECL) 11644 { 11645 tree *type_p = &TREE_TYPE (DECL_EXPR_DECL (*tp)); 11646 if (TREE_CODE (*type_p) == ERROR_MARK) 11647 return NULL_TREE; 11648 11649 /* Call the function for the type. See if it returns anything or 11650 doesn't want us to continue. If we are to continue, walk both 11651 the normal fields and those for the declaration case. */ 11652 result = (*func) (type_p, &walk_subtrees, data); 11653 if (result || !walk_subtrees) 11654 return result; 11655 11656 /* But do not walk a pointed-to type since it may itself need to 11657 be walked in the declaration case if it isn't anonymous. */ 11658 if (!POINTER_TYPE_P (*type_p)) 11659 { 11660 result = walk_type_fields (*type_p, func, data, pset, lh); 11661 if (result) 11662 return result; 11663 } 11664 11665 /* If this is a record type, also walk the fields. */ 11666 if (RECORD_OR_UNION_TYPE_P (*type_p)) 11667 { 11668 tree field; 11669 11670 for (field = TYPE_FIELDS (*type_p); field; 11671 field = DECL_CHAIN (field)) 11672 { 11673 /* We'd like to look at the type of the field, but we can 11674 easily get infinite recursion. So assume it's pointed 11675 to elsewhere in the tree. Also, ignore things that 11676 aren't fields. */ 11677 if (TREE_CODE (field) != FIELD_DECL) 11678 continue; 11679 11680 WALK_SUBTREE (DECL_FIELD_OFFSET (field)); 11681 WALK_SUBTREE (DECL_SIZE (field)); 11682 WALK_SUBTREE (DECL_SIZE_UNIT (field)); 11683 if (TREE_CODE (*type_p) == QUAL_UNION_TYPE) 11684 WALK_SUBTREE (DECL_QUALIFIER (field)); 11685 } 11686 } 11687 11688 /* Same for scalar types. */ 11689 else if (TREE_CODE (*type_p) == BOOLEAN_TYPE 11690 || TREE_CODE (*type_p) == ENUMERAL_TYPE 11691 || TREE_CODE (*type_p) == INTEGER_TYPE 11692 || TREE_CODE (*type_p) == FIXED_POINT_TYPE 11693 || TREE_CODE (*type_p) == REAL_TYPE) 11694 { 11695 WALK_SUBTREE (TYPE_MIN_VALUE (*type_p)); 11696 WALK_SUBTREE (TYPE_MAX_VALUE (*type_p)); 11697 } 11698 11699 WALK_SUBTREE (TYPE_SIZE (*type_p)); 11700 WALK_SUBTREE_TAIL (TYPE_SIZE_UNIT (*type_p)); 11701 } 11702 /* FALLTHRU */ 11703 11704 default: 11705 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (code))) 11706 { 11707 int i, len; 11708 11709 /* Walk over all the sub-trees of this operand. */ 11710 len = TREE_OPERAND_LENGTH (*tp); 11711 11712 /* Go through the subtrees. We need to do this in forward order so 11713 that the scope of a FOR_EXPR is handled properly. */ 11714 if (len) 11715 { 11716 for (i = 0; i < len - 1; ++i) 11717 WALK_SUBTREE (TREE_OPERAND (*tp, i)); 11718 WALK_SUBTREE_TAIL (TREE_OPERAND (*tp, len - 1)); 11719 } 11720 } 11721 /* If this is a type, walk the needed fields in the type. */ 11722 else if (TYPE_P (*tp)) 11723 return walk_type_fields (*tp, func, data, pset, lh); 11724 break; 11725 } 11726 11727 /* We didn't find what we were looking for. */ 11728 return NULL_TREE; 11729 11730 #undef WALK_SUBTREE_TAIL 11731 } 11732 #undef WALK_SUBTREE 11733 11734 /* Like walk_tree, but does not walk duplicate nodes more than once. */ 11735 11736 tree 11737 walk_tree_without_duplicates_1 (tree *tp, walk_tree_fn func, void *data, 11738 walk_tree_lh lh) 11739 { 11740 tree result; 11741 11742 hash_set<tree> pset; 11743 result = walk_tree_1 (tp, func, data, &pset, lh); 11744 return result; 11745 } 11746 11747 11748 tree 11749 tree_block (tree t) 11750 { 11751 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t)); 11752 11753 if (IS_EXPR_CODE_CLASS (c)) 11754 return LOCATION_BLOCK (t->exp.locus); 11755 gcc_unreachable (); 11756 return NULL; 11757 } 11758 11759 void 11760 tree_set_block (tree t, tree b) 11761 { 11762 const enum tree_code_class c = TREE_CODE_CLASS (TREE_CODE (t)); 11763 11764 if (IS_EXPR_CODE_CLASS (c)) 11765 { 11766 t->exp.locus = set_block (t->exp.locus, b); 11767 } 11768 else 11769 gcc_unreachable (); 11770 } 11771 11772 /* Create a nameless artificial label and put it in the current 11773 function context. The label has a location of LOC. Returns the 11774 newly created label. */ 11775 11776 tree 11777 create_artificial_label (location_t loc) 11778 { 11779 tree lab = build_decl (loc, 11780 LABEL_DECL, NULL_TREE, void_type_node); 11781 11782 DECL_ARTIFICIAL (lab) = 1; 11783 DECL_IGNORED_P (lab) = 1; 11784 DECL_CONTEXT (lab) = current_function_decl; 11785 return lab; 11786 } 11787 11788 /* Given a tree, try to return a useful variable name that we can use 11789 to prefix a temporary that is being assigned the value of the tree. 11790 I.E. given <temp> = &A, return A. */ 11791 11792 const char * 11793 get_name (tree t) 11794 { 11795 tree stripped_decl; 11796 11797 stripped_decl = t; 11798 STRIP_NOPS (stripped_decl); 11799 if (DECL_P (stripped_decl) && DECL_NAME (stripped_decl)) 11800 return IDENTIFIER_POINTER (DECL_NAME (stripped_decl)); 11801 else if (TREE_CODE (stripped_decl) == SSA_NAME) 11802 { 11803 tree name = SSA_NAME_IDENTIFIER (stripped_decl); 11804 if (!name) 11805 return NULL; 11806 return IDENTIFIER_POINTER (name); 11807 } 11808 else 11809 { 11810 switch (TREE_CODE (stripped_decl)) 11811 { 11812 case ADDR_EXPR: 11813 return get_name (TREE_OPERAND (stripped_decl, 0)); 11814 default: 11815 return NULL; 11816 } 11817 } 11818 } 11819 11820 /* Return true if TYPE has a variable argument list. */ 11821 11822 bool 11823 stdarg_p (const_tree fntype) 11824 { 11825 function_args_iterator args_iter; 11826 tree n = NULL_TREE, t; 11827 11828 if (!fntype) 11829 return false; 11830 11831 FOREACH_FUNCTION_ARGS (fntype, t, args_iter) 11832 { 11833 n = t; 11834 } 11835 11836 return n != NULL_TREE && n != void_type_node; 11837 } 11838 11839 /* Return true if TYPE has a prototype. */ 11840 11841 bool 11842 prototype_p (const_tree fntype) 11843 { 11844 tree t; 11845 11846 gcc_assert (fntype != NULL_TREE); 11847 11848 t = TYPE_ARG_TYPES (fntype); 11849 return (t != NULL_TREE); 11850 } 11851 11852 /* If BLOCK is inlined from an __attribute__((__artificial__)) 11853 routine, return pointer to location from where it has been 11854 called. */ 11855 location_t * 11856 block_nonartificial_location (tree block) 11857 { 11858 location_t *ret = NULL; 11859 11860 while (block && TREE_CODE (block) == BLOCK 11861 && BLOCK_ABSTRACT_ORIGIN (block)) 11862 { 11863 tree ao = BLOCK_ABSTRACT_ORIGIN (block); 11864 11865 while (TREE_CODE (ao) == BLOCK 11866 && BLOCK_ABSTRACT_ORIGIN (ao) 11867 && BLOCK_ABSTRACT_ORIGIN (ao) != ao) 11868 ao = BLOCK_ABSTRACT_ORIGIN (ao); 11869 11870 if (TREE_CODE (ao) == FUNCTION_DECL) 11871 { 11872 /* If AO is an artificial inline, point RET to the 11873 call site locus at which it has been inlined and continue 11874 the loop, in case AO's caller is also an artificial 11875 inline. */ 11876 if (DECL_DECLARED_INLINE_P (ao) 11877 && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao))) 11878 ret = &BLOCK_SOURCE_LOCATION (block); 11879 else 11880 break; 11881 } 11882 else if (TREE_CODE (ao) != BLOCK) 11883 break; 11884 11885 block = BLOCK_SUPERCONTEXT (block); 11886 } 11887 return ret; 11888 } 11889 11890 11891 /* If EXP is inlined from an __attribute__((__artificial__)) 11892 function, return the location of the original call expression. */ 11893 11894 location_t 11895 tree_nonartificial_location (tree exp) 11896 { 11897 location_t *loc = block_nonartificial_location (TREE_BLOCK (exp)); 11898 11899 if (loc) 11900 return *loc; 11901 else 11902 return EXPR_LOCATION (exp); 11903 } 11904 11905 11906 /* These are the hash table functions for the hash table of OPTIMIZATION_NODEq 11907 nodes. */ 11908 11909 /* Return the hash code X, an OPTIMIZATION_NODE or TARGET_OPTION code. */ 11910 11911 hashval_t 11912 cl_option_hasher::hash (tree x) 11913 { 11914 const_tree const t = x; 11915 const char *p; 11916 size_t i; 11917 size_t len = 0; 11918 hashval_t hash = 0; 11919 11920 if (TREE_CODE (t) == OPTIMIZATION_NODE) 11921 { 11922 p = (const char *)TREE_OPTIMIZATION (t); 11923 len = sizeof (struct cl_optimization); 11924 } 11925 11926 else if (TREE_CODE (t) == TARGET_OPTION_NODE) 11927 return cl_target_option_hash (TREE_TARGET_OPTION (t)); 11928 11929 else 11930 gcc_unreachable (); 11931 11932 /* assume most opt flags are just 0/1, some are 2-3, and a few might be 11933 something else. */ 11934 for (i = 0; i < len; i++) 11935 if (p[i]) 11936 hash = (hash << 4) ^ ((i << 2) | p[i]); 11937 11938 return hash; 11939 } 11940 11941 /* Return nonzero if the value represented by *X (an OPTIMIZATION or 11942 TARGET_OPTION tree node) is the same as that given by *Y, which is the 11943 same. */ 11944 11945 bool 11946 cl_option_hasher::equal (tree x, tree y) 11947 { 11948 const_tree const xt = x; 11949 const_tree const yt = y; 11950 const char *xp; 11951 const char *yp; 11952 size_t len; 11953 11954 if (TREE_CODE (xt) != TREE_CODE (yt)) 11955 return 0; 11956 11957 if (TREE_CODE (xt) == OPTIMIZATION_NODE) 11958 { 11959 xp = (const char *)TREE_OPTIMIZATION (xt); 11960 yp = (const char *)TREE_OPTIMIZATION (yt); 11961 len = sizeof (struct cl_optimization); 11962 } 11963 11964 else if (TREE_CODE (xt) == TARGET_OPTION_NODE) 11965 { 11966 return cl_target_option_eq (TREE_TARGET_OPTION (xt), 11967 TREE_TARGET_OPTION (yt)); 11968 } 11969 11970 else 11971 gcc_unreachable (); 11972 11973 return (memcmp (xp, yp, len) == 0); 11974 } 11975 11976 /* Build an OPTIMIZATION_NODE based on the options in OPTS. */ 11977 11978 tree 11979 build_optimization_node (struct gcc_options *opts) 11980 { 11981 tree t; 11982 11983 /* Use the cache of optimization nodes. */ 11984 11985 cl_optimization_save (TREE_OPTIMIZATION (cl_optimization_node), 11986 opts); 11987 11988 tree *slot = cl_option_hash_table->find_slot (cl_optimization_node, INSERT); 11989 t = *slot; 11990 if (!t) 11991 { 11992 /* Insert this one into the hash table. */ 11993 t = cl_optimization_node; 11994 *slot = t; 11995 11996 /* Make a new node for next time round. */ 11997 cl_optimization_node = make_node (OPTIMIZATION_NODE); 11998 } 11999 12000 return t; 12001 } 12002 12003 /* Build a TARGET_OPTION_NODE based on the options in OPTS. */ 12004 12005 tree 12006 build_target_option_node (struct gcc_options *opts) 12007 { 12008 tree t; 12009 12010 /* Use the cache of optimization nodes. */ 12011 12012 cl_target_option_save (TREE_TARGET_OPTION (cl_target_option_node), 12013 opts); 12014 12015 tree *slot = cl_option_hash_table->find_slot (cl_target_option_node, INSERT); 12016 t = *slot; 12017 if (!t) 12018 { 12019 /* Insert this one into the hash table. */ 12020 t = cl_target_option_node; 12021 *slot = t; 12022 12023 /* Make a new node for next time round. */ 12024 cl_target_option_node = make_node (TARGET_OPTION_NODE); 12025 } 12026 12027 return t; 12028 } 12029 12030 /* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees, 12031 so that they aren't saved during PCH writing. */ 12032 12033 void 12034 prepare_target_option_nodes_for_pch (void) 12035 { 12036 hash_table<cl_option_hasher>::iterator iter = cl_option_hash_table->begin (); 12037 for (; iter != cl_option_hash_table->end (); ++iter) 12038 if (TREE_CODE (*iter) == TARGET_OPTION_NODE) 12039 TREE_TARGET_GLOBALS (*iter) = NULL; 12040 } 12041 12042 /* Determine the "ultimate origin" of a block. The block may be an inlined 12043 instance of an inlined instance of a block which is local to an inline 12044 function, so we have to trace all of the way back through the origin chain 12045 to find out what sort of node actually served as the original seed for the 12046 given block. */ 12047 12048 tree 12049 block_ultimate_origin (const_tree block) 12050 { 12051 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block); 12052 12053 /* BLOCK_ABSTRACT_ORIGIN can point to itself; ignore that if 12054 we're trying to output the abstract instance of this function. */ 12055 if (BLOCK_ABSTRACT (block) && immediate_origin == block) 12056 return NULL_TREE; 12057 12058 if (immediate_origin == NULL_TREE) 12059 return NULL_TREE; 12060 else 12061 { 12062 tree ret_val; 12063 tree lookahead = immediate_origin; 12064 12065 do 12066 { 12067 ret_val = lookahead; 12068 lookahead = (TREE_CODE (ret_val) == BLOCK 12069 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL); 12070 } 12071 while (lookahead != NULL && lookahead != ret_val); 12072 12073 /* The block's abstract origin chain may not be the *ultimate* origin of 12074 the block. It could lead to a DECL that has an abstract origin set. 12075 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN 12076 will give us if it has one). Note that DECL's abstract origins are 12077 supposed to be the most distant ancestor (or so decl_ultimate_origin 12078 claims), so we don't need to loop following the DECL origins. */ 12079 if (DECL_P (ret_val)) 12080 return DECL_ORIGIN (ret_val); 12081 12082 return ret_val; 12083 } 12084 } 12085 12086 /* Return true iff conversion from INNER_TYPE to OUTER_TYPE generates 12087 no instruction. */ 12088 12089 bool 12090 tree_nop_conversion_p (const_tree outer_type, const_tree inner_type) 12091 { 12092 /* Do not strip casts into or out of differing address spaces. */ 12093 if (POINTER_TYPE_P (outer_type) 12094 && TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) != ADDR_SPACE_GENERIC) 12095 { 12096 if (!POINTER_TYPE_P (inner_type) 12097 || (TYPE_ADDR_SPACE (TREE_TYPE (outer_type)) 12098 != TYPE_ADDR_SPACE (TREE_TYPE (inner_type)))) 12099 return false; 12100 } 12101 else if (POINTER_TYPE_P (inner_type) 12102 && TYPE_ADDR_SPACE (TREE_TYPE (inner_type)) != ADDR_SPACE_GENERIC) 12103 { 12104 /* We already know that outer_type is not a pointer with 12105 a non-generic address space. */ 12106 return false; 12107 } 12108 12109 /* Use precision rather then machine mode when we can, which gives 12110 the correct answer even for submode (bit-field) types. */ 12111 if ((INTEGRAL_TYPE_P (outer_type) 12112 || POINTER_TYPE_P (outer_type) 12113 || TREE_CODE (outer_type) == OFFSET_TYPE) 12114 && (INTEGRAL_TYPE_P (inner_type) 12115 || POINTER_TYPE_P (inner_type) 12116 || TREE_CODE (inner_type) == OFFSET_TYPE)) 12117 return TYPE_PRECISION (outer_type) == TYPE_PRECISION (inner_type); 12118 12119 /* Otherwise fall back on comparing machine modes (e.g. for 12120 aggregate types, floats). */ 12121 return TYPE_MODE (outer_type) == TYPE_MODE (inner_type); 12122 } 12123 12124 /* Return true iff conversion in EXP generates no instruction. Mark 12125 it inline so that we fully inline into the stripping functions even 12126 though we have two uses of this function. */ 12127 12128 static inline bool 12129 tree_nop_conversion (const_tree exp) 12130 { 12131 tree outer_type, inner_type; 12132 12133 if (location_wrapper_p (exp)) 12134 return true; 12135 if (!CONVERT_EXPR_P (exp) 12136 && TREE_CODE (exp) != NON_LVALUE_EXPR) 12137 return false; 12138 if (TREE_OPERAND (exp, 0) == error_mark_node) 12139 return false; 12140 12141 outer_type = TREE_TYPE (exp); 12142 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); 12143 12144 if (!inner_type) 12145 return false; 12146 12147 return tree_nop_conversion_p (outer_type, inner_type); 12148 } 12149 12150 /* Return true iff conversion in EXP generates no instruction. Don't 12151 consider conversions changing the signedness. */ 12152 12153 static bool 12154 tree_sign_nop_conversion (const_tree exp) 12155 { 12156 tree outer_type, inner_type; 12157 12158 if (!tree_nop_conversion (exp)) 12159 return false; 12160 12161 outer_type = TREE_TYPE (exp); 12162 inner_type = TREE_TYPE (TREE_OPERAND (exp, 0)); 12163 12164 return (TYPE_UNSIGNED (outer_type) == TYPE_UNSIGNED (inner_type) 12165 && POINTER_TYPE_P (outer_type) == POINTER_TYPE_P (inner_type)); 12166 } 12167 12168 /* Strip conversions from EXP according to tree_nop_conversion and 12169 return the resulting expression. */ 12170 12171 tree 12172 tree_strip_nop_conversions (tree exp) 12173 { 12174 while (tree_nop_conversion (exp)) 12175 exp = TREE_OPERAND (exp, 0); 12176 return exp; 12177 } 12178 12179 /* Strip conversions from EXP according to tree_sign_nop_conversion 12180 and return the resulting expression. */ 12181 12182 tree 12183 tree_strip_sign_nop_conversions (tree exp) 12184 { 12185 while (tree_sign_nop_conversion (exp)) 12186 exp = TREE_OPERAND (exp, 0); 12187 return exp; 12188 } 12189 12190 /* Avoid any floating point extensions from EXP. */ 12191 tree 12192 strip_float_extensions (tree exp) 12193 { 12194 tree sub, expt, subt; 12195 12196 /* For floating point constant look up the narrowest type that can hold 12197 it properly and handle it like (type)(narrowest_type)constant. 12198 This way we can optimize for instance a=a*2.0 where "a" is float 12199 but 2.0 is double constant. */ 12200 if (TREE_CODE (exp) == REAL_CST && !DECIMAL_FLOAT_TYPE_P (TREE_TYPE (exp))) 12201 { 12202 REAL_VALUE_TYPE orig; 12203 tree type = NULL; 12204 12205 orig = TREE_REAL_CST (exp); 12206 if (TYPE_PRECISION (TREE_TYPE (exp)) > TYPE_PRECISION (float_type_node) 12207 && exact_real_truncate (TYPE_MODE (float_type_node), &orig)) 12208 type = float_type_node; 12209 else if (TYPE_PRECISION (TREE_TYPE (exp)) 12210 > TYPE_PRECISION (double_type_node) 12211 && exact_real_truncate (TYPE_MODE (double_type_node), &orig)) 12212 type = double_type_node; 12213 if (type) 12214 return build_real_truncate (type, orig); 12215 } 12216 12217 if (!CONVERT_EXPR_P (exp)) 12218 return exp; 12219 12220 sub = TREE_OPERAND (exp, 0); 12221 subt = TREE_TYPE (sub); 12222 expt = TREE_TYPE (exp); 12223 12224 if (!FLOAT_TYPE_P (subt)) 12225 return exp; 12226 12227 if (DECIMAL_FLOAT_TYPE_P (expt) != DECIMAL_FLOAT_TYPE_P (subt)) 12228 return exp; 12229 12230 if (TYPE_PRECISION (subt) > TYPE_PRECISION (expt)) 12231 return exp; 12232 12233 return strip_float_extensions (sub); 12234 } 12235 12236 /* Strip out all handled components that produce invariant 12237 offsets. */ 12238 12239 const_tree 12240 strip_invariant_refs (const_tree op) 12241 { 12242 while (handled_component_p (op)) 12243 { 12244 switch (TREE_CODE (op)) 12245 { 12246 case ARRAY_REF: 12247 case ARRAY_RANGE_REF: 12248 if (!is_gimple_constant (TREE_OPERAND (op, 1)) 12249 || TREE_OPERAND (op, 2) != NULL_TREE 12250 || TREE_OPERAND (op, 3) != NULL_TREE) 12251 return NULL; 12252 break; 12253 12254 case COMPONENT_REF: 12255 if (TREE_OPERAND (op, 2) != NULL_TREE) 12256 return NULL; 12257 break; 12258 12259 default:; 12260 } 12261 op = TREE_OPERAND (op, 0); 12262 } 12263 12264 return op; 12265 } 12266 12267 static GTY(()) tree gcc_eh_personality_decl; 12268 12269 /* Return the GCC personality function decl. */ 12270 12271 tree 12272 lhd_gcc_personality (void) 12273 { 12274 if (!gcc_eh_personality_decl) 12275 gcc_eh_personality_decl = build_personality_function ("gcc"); 12276 return gcc_eh_personality_decl; 12277 } 12278 12279 /* TARGET is a call target of GIMPLE call statement 12280 (obtained by gimple_call_fn). Return true if it is 12281 OBJ_TYPE_REF representing an virtual call of C++ method. 12282 (As opposed to OBJ_TYPE_REF representing objc calls 12283 through a cast where middle-end devirtualization machinery 12284 can't apply.) */ 12285 12286 bool 12287 virtual_method_call_p (const_tree target) 12288 { 12289 if (TREE_CODE (target) != OBJ_TYPE_REF) 12290 return false; 12291 tree t = TREE_TYPE (target); 12292 gcc_checking_assert (TREE_CODE (t) == POINTER_TYPE); 12293 t = TREE_TYPE (t); 12294 if (TREE_CODE (t) == FUNCTION_TYPE) 12295 return false; 12296 gcc_checking_assert (TREE_CODE (t) == METHOD_TYPE); 12297 /* If we do not have BINFO associated, it means that type was built 12298 without devirtualization enabled. Do not consider this a virtual 12299 call. */ 12300 if (!TYPE_BINFO (obj_type_ref_class (target))) 12301 return false; 12302 return true; 12303 } 12304 12305 /* REF is OBJ_TYPE_REF, return the class the ref corresponds to. */ 12306 12307 tree 12308 obj_type_ref_class (const_tree ref) 12309 { 12310 gcc_checking_assert (TREE_CODE (ref) == OBJ_TYPE_REF); 12311 ref = TREE_TYPE (ref); 12312 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE); 12313 ref = TREE_TYPE (ref); 12314 /* We look for type THIS points to. ObjC also builds 12315 OBJ_TYPE_REF with non-method calls, Their first parameter 12316 ID however also corresponds to class type. */ 12317 gcc_checking_assert (TREE_CODE (ref) == METHOD_TYPE 12318 || TREE_CODE (ref) == FUNCTION_TYPE); 12319 ref = TREE_VALUE (TYPE_ARG_TYPES (ref)); 12320 gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE); 12321 return TREE_TYPE (ref); 12322 } 12323 12324 /* Lookup sub-BINFO of BINFO of TYPE at offset POS. */ 12325 12326 static tree 12327 lookup_binfo_at_offset (tree binfo, tree type, HOST_WIDE_INT pos) 12328 { 12329 unsigned int i; 12330 tree base_binfo, b; 12331 12332 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) 12333 if (pos == tree_to_shwi (BINFO_OFFSET (base_binfo)) 12334 && types_same_for_odr (TREE_TYPE (base_binfo), type)) 12335 return base_binfo; 12336 else if ((b = lookup_binfo_at_offset (base_binfo, type, pos)) != NULL) 12337 return b; 12338 return NULL; 12339 } 12340 12341 /* Try to find a base info of BINFO that would have its field decl at offset 12342 OFFSET within the BINFO type and which is of EXPECTED_TYPE. If it can be 12343 found, return, otherwise return NULL_TREE. */ 12344 12345 tree 12346 get_binfo_at_offset (tree binfo, poly_int64 offset, tree expected_type) 12347 { 12348 tree type = BINFO_TYPE (binfo); 12349 12350 while (true) 12351 { 12352 HOST_WIDE_INT pos, size; 12353 tree fld; 12354 int i; 12355 12356 if (types_same_for_odr (type, expected_type)) 12357 return binfo; 12358 if (maybe_lt (offset, 0)) 12359 return NULL_TREE; 12360 12361 for (fld = TYPE_FIELDS (type); fld; fld = DECL_CHAIN (fld)) 12362 { 12363 if (TREE_CODE (fld) != FIELD_DECL || !DECL_ARTIFICIAL (fld)) 12364 continue; 12365 12366 pos = int_bit_position (fld); 12367 size = tree_to_uhwi (DECL_SIZE (fld)); 12368 if (known_in_range_p (offset, pos, size)) 12369 break; 12370 } 12371 if (!fld || TREE_CODE (TREE_TYPE (fld)) != RECORD_TYPE) 12372 return NULL_TREE; 12373 12374 /* Offset 0 indicates the primary base, whose vtable contents are 12375 represented in the binfo for the derived class. */ 12376 else if (maybe_ne (offset, 0)) 12377 { 12378 tree found_binfo = NULL, base_binfo; 12379 /* Offsets in BINFO are in bytes relative to the whole structure 12380 while POS is in bits relative to the containing field. */ 12381 int binfo_offset = (tree_to_shwi (BINFO_OFFSET (binfo)) + pos 12382 / BITS_PER_UNIT); 12383 12384 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) 12385 if (tree_to_shwi (BINFO_OFFSET (base_binfo)) == binfo_offset 12386 && types_same_for_odr (TREE_TYPE (base_binfo), TREE_TYPE (fld))) 12387 { 12388 found_binfo = base_binfo; 12389 break; 12390 } 12391 if (found_binfo) 12392 binfo = found_binfo; 12393 else 12394 binfo = lookup_binfo_at_offset (binfo, TREE_TYPE (fld), 12395 binfo_offset); 12396 } 12397 12398 type = TREE_TYPE (fld); 12399 offset -= pos; 12400 } 12401 } 12402 12403 /* Returns true if X is a typedef decl. */ 12404 12405 bool 12406 is_typedef_decl (const_tree x) 12407 { 12408 return (x && TREE_CODE (x) == TYPE_DECL 12409 && DECL_ORIGINAL_TYPE (x) != NULL_TREE); 12410 } 12411 12412 /* Returns true iff TYPE is a type variant created for a typedef. */ 12413 12414 bool 12415 typedef_variant_p (const_tree type) 12416 { 12417 return is_typedef_decl (TYPE_NAME (type)); 12418 } 12419 12420 /* Warn about a use of an identifier which was marked deprecated. */ 12421 void 12422 warn_deprecated_use (tree node, tree attr) 12423 { 12424 const char *msg; 12425 12426 if (node == 0 || !warn_deprecated_decl) 12427 return; 12428 12429 if (!attr) 12430 { 12431 if (DECL_P (node)) 12432 attr = DECL_ATTRIBUTES (node); 12433 else if (TYPE_P (node)) 12434 { 12435 tree decl = TYPE_STUB_DECL (node); 12436 if (decl) 12437 attr = lookup_attribute ("deprecated", 12438 TYPE_ATTRIBUTES (TREE_TYPE (decl))); 12439 } 12440 } 12441 12442 if (attr) 12443 attr = lookup_attribute ("deprecated", attr); 12444 12445 if (attr) 12446 msg = TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))); 12447 else 12448 msg = NULL; 12449 12450 bool w; 12451 if (DECL_P (node)) 12452 { 12453 if (msg) 12454 w = warning (OPT_Wdeprecated_declarations, 12455 "%qD is deprecated: %s", node, msg); 12456 else 12457 w = warning (OPT_Wdeprecated_declarations, 12458 "%qD is deprecated", node); 12459 if (w) 12460 inform (DECL_SOURCE_LOCATION (node), "declared here"); 12461 } 12462 else if (TYPE_P (node)) 12463 { 12464 tree what = NULL_TREE; 12465 tree decl = TYPE_STUB_DECL (node); 12466 12467 if (TYPE_NAME (node)) 12468 { 12469 if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE) 12470 what = TYPE_NAME (node); 12471 else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL 12472 && DECL_NAME (TYPE_NAME (node))) 12473 what = DECL_NAME (TYPE_NAME (node)); 12474 } 12475 12476 if (decl) 12477 { 12478 if (what) 12479 { 12480 if (msg) 12481 w = warning (OPT_Wdeprecated_declarations, 12482 "%qE is deprecated: %s", what, msg); 12483 else 12484 w = warning (OPT_Wdeprecated_declarations, 12485 "%qE is deprecated", what); 12486 } 12487 else 12488 { 12489 if (msg) 12490 w = warning (OPT_Wdeprecated_declarations, 12491 "type is deprecated: %s", msg); 12492 else 12493 w = warning (OPT_Wdeprecated_declarations, 12494 "type is deprecated"); 12495 } 12496 if (w) 12497 inform (DECL_SOURCE_LOCATION (decl), "declared here"); 12498 } 12499 else 12500 { 12501 if (what) 12502 { 12503 if (msg) 12504 warning (OPT_Wdeprecated_declarations, "%qE is deprecated: %s", 12505 what, msg); 12506 else 12507 warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what); 12508 } 12509 else 12510 { 12511 if (msg) 12512 warning (OPT_Wdeprecated_declarations, "type is deprecated: %s", 12513 msg); 12514 else 12515 warning (OPT_Wdeprecated_declarations, "type is deprecated"); 12516 } 12517 } 12518 } 12519 } 12520 12521 /* Return true if REF has a COMPONENT_REF with a bit-field field declaration 12522 somewhere in it. */ 12523 12524 bool 12525 contains_bitfld_component_ref_p (const_tree ref) 12526 { 12527 while (handled_component_p (ref)) 12528 { 12529 if (TREE_CODE (ref) == COMPONENT_REF 12530 && DECL_BIT_FIELD (TREE_OPERAND (ref, 1))) 12531 return true; 12532 ref = TREE_OPERAND (ref, 0); 12533 } 12534 12535 return false; 12536 } 12537 12538 /* Try to determine whether a TRY_CATCH expression can fall through. 12539 This is a subroutine of block_may_fallthru. */ 12540 12541 static bool 12542 try_catch_may_fallthru (const_tree stmt) 12543 { 12544 tree_stmt_iterator i; 12545 12546 /* If the TRY block can fall through, the whole TRY_CATCH can 12547 fall through. */ 12548 if (block_may_fallthru (TREE_OPERAND (stmt, 0))) 12549 return true; 12550 12551 i = tsi_start (TREE_OPERAND (stmt, 1)); 12552 switch (TREE_CODE (tsi_stmt (i))) 12553 { 12554 case CATCH_EXPR: 12555 /* We expect to see a sequence of CATCH_EXPR trees, each with a 12556 catch expression and a body. The whole TRY_CATCH may fall 12557 through iff any of the catch bodies falls through. */ 12558 for (; !tsi_end_p (i); tsi_next (&i)) 12559 { 12560 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i)))) 12561 return true; 12562 } 12563 return false; 12564 12565 case EH_FILTER_EXPR: 12566 /* The exception filter expression only matters if there is an 12567 exception. If the exception does not match EH_FILTER_TYPES, 12568 we will execute EH_FILTER_FAILURE, and we will fall through 12569 if that falls through. If the exception does match 12570 EH_FILTER_TYPES, the stack unwinder will continue up the 12571 stack, so we will not fall through. We don't know whether we 12572 will throw an exception which matches EH_FILTER_TYPES or not, 12573 so we just ignore EH_FILTER_TYPES and assume that we might 12574 throw an exception which doesn't match. */ 12575 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i))); 12576 12577 default: 12578 /* This case represents statements to be executed when an 12579 exception occurs. Those statements are implicitly followed 12580 by a RESX statement to resume execution after the exception. 12581 So in this case the TRY_CATCH never falls through. */ 12582 return false; 12583 } 12584 } 12585 12586 /* Try to determine if we can fall out of the bottom of BLOCK. This guess 12587 need not be 100% accurate; simply be conservative and return true if we 12588 don't know. This is used only to avoid stupidly generating extra code. 12589 If we're wrong, we'll just delete the extra code later. */ 12590 12591 bool 12592 block_may_fallthru (const_tree block) 12593 { 12594 /* This CONST_CAST is okay because expr_last returns its argument 12595 unmodified and we assign it to a const_tree. */ 12596 const_tree stmt = expr_last (CONST_CAST_TREE (block)); 12597 12598 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK) 12599 { 12600 case GOTO_EXPR: 12601 case RETURN_EXPR: 12602 /* Easy cases. If the last statement of the block implies 12603 control transfer, then we can't fall through. */ 12604 return false; 12605 12606 case SWITCH_EXPR: 12607 /* If there is a default: label or case labels cover all possible 12608 SWITCH_COND values, then the SWITCH_EXPR will transfer control 12609 to some case label in all cases and all we care is whether the 12610 SWITCH_BODY falls through. */ 12611 if (SWITCH_ALL_CASES_P (stmt)) 12612 return block_may_fallthru (SWITCH_BODY (stmt)); 12613 return true; 12614 12615 case COND_EXPR: 12616 if (block_may_fallthru (COND_EXPR_THEN (stmt))) 12617 return true; 12618 return block_may_fallthru (COND_EXPR_ELSE (stmt)); 12619 12620 case BIND_EXPR: 12621 return block_may_fallthru (BIND_EXPR_BODY (stmt)); 12622 12623 case TRY_CATCH_EXPR: 12624 return try_catch_may_fallthru (stmt); 12625 12626 case TRY_FINALLY_EXPR: 12627 /* The finally clause is always executed after the try clause, 12628 so if it does not fall through, then the try-finally will not 12629 fall through. Otherwise, if the try clause does not fall 12630 through, then when the finally clause falls through it will 12631 resume execution wherever the try clause was going. So the 12632 whole try-finally will only fall through if both the try 12633 clause and the finally clause fall through. */ 12634 return (block_may_fallthru (TREE_OPERAND (stmt, 0)) 12635 && block_may_fallthru (TREE_OPERAND (stmt, 1))); 12636 12637 case MODIFY_EXPR: 12638 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR) 12639 stmt = TREE_OPERAND (stmt, 1); 12640 else 12641 return true; 12642 /* FALLTHRU */ 12643 12644 case CALL_EXPR: 12645 /* Functions that do not return do not fall through. */ 12646 return (call_expr_flags (stmt) & ECF_NORETURN) == 0; 12647 12648 case CLEANUP_POINT_EXPR: 12649 return block_may_fallthru (TREE_OPERAND (stmt, 0)); 12650 12651 case TARGET_EXPR: 12652 return block_may_fallthru (TREE_OPERAND (stmt, 1)); 12653 12654 case ERROR_MARK: 12655 return true; 12656 12657 default: 12658 return lang_hooks.block_may_fallthru (stmt); 12659 } 12660 } 12661 12662 /* True if we are using EH to handle cleanups. */ 12663 static bool using_eh_for_cleanups_flag = false; 12664 12665 /* This routine is called from front ends to indicate eh should be used for 12666 cleanups. */ 12667 void 12668 using_eh_for_cleanups (void) 12669 { 12670 using_eh_for_cleanups_flag = true; 12671 } 12672 12673 /* Query whether EH is used for cleanups. */ 12674 bool 12675 using_eh_for_cleanups_p (void) 12676 { 12677 return using_eh_for_cleanups_flag; 12678 } 12679 12680 /* Wrapper for tree_code_name to ensure that tree code is valid */ 12681 const char * 12682 get_tree_code_name (enum tree_code code) 12683 { 12684 const char *invalid = "<invalid tree code>"; 12685 12686 if (code >= MAX_TREE_CODES) 12687 return invalid; 12688 12689 return tree_code_name[code]; 12690 } 12691 12692 /* Drops the TREE_OVERFLOW flag from T. */ 12693 12694 tree 12695 drop_tree_overflow (tree t) 12696 { 12697 gcc_checking_assert (TREE_OVERFLOW (t)); 12698 12699 /* For tree codes with a sharing machinery re-build the result. */ 12700 if (poly_int_tree_p (t)) 12701 return wide_int_to_tree (TREE_TYPE (t), wi::to_poly_wide (t)); 12702 12703 /* For VECTOR_CST, remove the overflow bits from the encoded elements 12704 and canonicalize the result. */ 12705 if (TREE_CODE (t) == VECTOR_CST) 12706 { 12707 tree_vector_builder builder; 12708 builder.new_unary_operation (TREE_TYPE (t), t, true); 12709 unsigned int count = builder.encoded_nelts (); 12710 for (unsigned int i = 0; i < count; ++i) 12711 { 12712 tree elt = VECTOR_CST_ELT (t, i); 12713 if (TREE_OVERFLOW (elt)) 12714 elt = drop_tree_overflow (elt); 12715 builder.quick_push (elt); 12716 } 12717 return builder.build (); 12718 } 12719 12720 /* Otherwise, as all tcc_constants are possibly shared, copy the node 12721 and drop the flag. */ 12722 t = copy_node (t); 12723 TREE_OVERFLOW (t) = 0; 12724 12725 /* For constants that contain nested constants, drop the flag 12726 from those as well. */ 12727 if (TREE_CODE (t) == COMPLEX_CST) 12728 { 12729 if (TREE_OVERFLOW (TREE_REALPART (t))) 12730 TREE_REALPART (t) = drop_tree_overflow (TREE_REALPART (t)); 12731 if (TREE_OVERFLOW (TREE_IMAGPART (t))) 12732 TREE_IMAGPART (t) = drop_tree_overflow (TREE_IMAGPART (t)); 12733 } 12734 12735 return t; 12736 } 12737 12738 /* Given a memory reference expression T, return its base address. 12739 The base address of a memory reference expression is the main 12740 object being referenced. For instance, the base address for 12741 'array[i].fld[j]' is 'array'. You can think of this as stripping 12742 away the offset part from a memory address. 12743 12744 This function calls handled_component_p to strip away all the inner 12745 parts of the memory reference until it reaches the base object. */ 12746 12747 tree 12748 get_base_address (tree t) 12749 { 12750 while (handled_component_p (t)) 12751 t = TREE_OPERAND (t, 0); 12752 12753 if ((TREE_CODE (t) == MEM_REF 12754 || TREE_CODE (t) == TARGET_MEM_REF) 12755 && TREE_CODE (TREE_OPERAND (t, 0)) == ADDR_EXPR) 12756 t = TREE_OPERAND (TREE_OPERAND (t, 0), 0); 12757 12758 /* ??? Either the alias oracle or all callers need to properly deal 12759 with WITH_SIZE_EXPRs before we can look through those. */ 12760 if (TREE_CODE (t) == WITH_SIZE_EXPR) 12761 return NULL_TREE; 12762 12763 return t; 12764 } 12765 12766 /* Return a tree of sizetype representing the size, in bytes, of the element 12767 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 12768 12769 tree 12770 array_ref_element_size (tree exp) 12771 { 12772 tree aligned_size = TREE_OPERAND (exp, 3); 12773 tree elmt_type = TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))); 12774 location_t loc = EXPR_LOCATION (exp); 12775 12776 /* If a size was specified in the ARRAY_REF, it's the size measured 12777 in alignment units of the element type. So multiply by that value. */ 12778 if (aligned_size) 12779 { 12780 /* ??? tree_ssa_useless_type_conversion will eliminate casts to 12781 sizetype from another type of the same width and signedness. */ 12782 if (TREE_TYPE (aligned_size) != sizetype) 12783 aligned_size = fold_convert_loc (loc, sizetype, aligned_size); 12784 return size_binop_loc (loc, MULT_EXPR, aligned_size, 12785 size_int (TYPE_ALIGN_UNIT (elmt_type))); 12786 } 12787 12788 /* Otherwise, take the size from that of the element type. Substitute 12789 any PLACEHOLDER_EXPR that we have. */ 12790 else 12791 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_SIZE_UNIT (elmt_type), exp); 12792 } 12793 12794 /* Return a tree representing the lower bound of the array mentioned in 12795 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 12796 12797 tree 12798 array_ref_low_bound (tree exp) 12799 { 12800 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0))); 12801 12802 /* If a lower bound is specified in EXP, use it. */ 12803 if (TREE_OPERAND (exp, 2)) 12804 return TREE_OPERAND (exp, 2); 12805 12806 /* Otherwise, if there is a domain type and it has a lower bound, use it, 12807 substituting for a PLACEHOLDER_EXPR as needed. */ 12808 if (domain_type && TYPE_MIN_VALUE (domain_type)) 12809 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MIN_VALUE (domain_type), exp); 12810 12811 /* Otherwise, return a zero of the appropriate type. */ 12812 return build_int_cst (TREE_TYPE (TREE_OPERAND (exp, 1)), 0); 12813 } 12814 12815 /* Return a tree representing the upper bound of the array mentioned in 12816 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 12817 12818 tree 12819 array_ref_up_bound (tree exp) 12820 { 12821 tree domain_type = TYPE_DOMAIN (TREE_TYPE (TREE_OPERAND (exp, 0))); 12822 12823 /* If there is a domain type and it has an upper bound, use it, substituting 12824 for a PLACEHOLDER_EXPR as needed. */ 12825 if (domain_type && TYPE_MAX_VALUE (domain_type)) 12826 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (TYPE_MAX_VALUE (domain_type), exp); 12827 12828 /* Otherwise fail. */ 12829 return NULL_TREE; 12830 } 12831 12832 /* Returns true if REF is an array reference or a component reference 12833 to an array at the end of a structure. 12834 If this is the case, the array may be allocated larger 12835 than its upper bound implies. */ 12836 12837 bool 12838 array_at_struct_end_p (tree ref) 12839 { 12840 tree atype; 12841 12842 if (TREE_CODE (ref) == ARRAY_REF 12843 || TREE_CODE (ref) == ARRAY_RANGE_REF) 12844 { 12845 atype = TREE_TYPE (TREE_OPERAND (ref, 0)); 12846 ref = TREE_OPERAND (ref, 0); 12847 } 12848 else if (TREE_CODE (ref) == COMPONENT_REF 12849 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 1))) == ARRAY_TYPE) 12850 atype = TREE_TYPE (TREE_OPERAND (ref, 1)); 12851 else 12852 return false; 12853 12854 if (TREE_CODE (ref) == STRING_CST) 12855 return false; 12856 12857 tree ref_to_array = ref; 12858 while (handled_component_p (ref)) 12859 { 12860 /* If the reference chain contains a component reference to a 12861 non-union type and there follows another field the reference 12862 is not at the end of a structure. */ 12863 if (TREE_CODE (ref) == COMPONENT_REF) 12864 { 12865 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0))) == RECORD_TYPE) 12866 { 12867 tree nextf = DECL_CHAIN (TREE_OPERAND (ref, 1)); 12868 while (nextf && TREE_CODE (nextf) != FIELD_DECL) 12869 nextf = DECL_CHAIN (nextf); 12870 if (nextf) 12871 return false; 12872 } 12873 } 12874 /* If we have a multi-dimensional array we do not consider 12875 a non-innermost dimension as flex array if the whole 12876 multi-dimensional array is at struct end. 12877 Same for an array of aggregates with a trailing array 12878 member. */ 12879 else if (TREE_CODE (ref) == ARRAY_REF) 12880 return false; 12881 else if (TREE_CODE (ref) == ARRAY_RANGE_REF) 12882 ; 12883 /* If we view an underlying object as sth else then what we 12884 gathered up to now is what we have to rely on. */ 12885 else if (TREE_CODE (ref) == VIEW_CONVERT_EXPR) 12886 break; 12887 else 12888 gcc_unreachable (); 12889 12890 ref = TREE_OPERAND (ref, 0); 12891 } 12892 12893 /* The array now is at struct end. Treat flexible arrays as 12894 always subject to extend, even into just padding constrained by 12895 an underlying decl. */ 12896 if (! TYPE_SIZE (atype) 12897 || ! TYPE_DOMAIN (atype) 12898 || ! TYPE_MAX_VALUE (TYPE_DOMAIN (atype))) 12899 return true; 12900 12901 if (TREE_CODE (ref) == MEM_REF 12902 && TREE_CODE (TREE_OPERAND (ref, 0)) == ADDR_EXPR) 12903 ref = TREE_OPERAND (TREE_OPERAND (ref, 0), 0); 12904 12905 /* If the reference is based on a declared entity, the size of the array 12906 is constrained by its given domain. (Do not trust commons PR/69368). */ 12907 if (DECL_P (ref) 12908 && !(flag_unconstrained_commons 12909 && VAR_P (ref) && DECL_COMMON (ref)) 12910 && DECL_SIZE_UNIT (ref) 12911 && TREE_CODE (DECL_SIZE_UNIT (ref)) == INTEGER_CST) 12912 { 12913 /* Check whether the array domain covers all of the available 12914 padding. */ 12915 poly_int64 offset; 12916 if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (atype))) != INTEGER_CST 12917 || TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (atype))) != INTEGER_CST 12918 || TREE_CODE (TYPE_MIN_VALUE (TYPE_DOMAIN (atype))) != INTEGER_CST) 12919 return true; 12920 if (! get_addr_base_and_unit_offset (ref_to_array, &offset)) 12921 return true; 12922 12923 /* If at least one extra element fits it is a flexarray. */ 12924 if (known_le ((wi::to_offset (TYPE_MAX_VALUE (TYPE_DOMAIN (atype))) 12925 - wi::to_offset (TYPE_MIN_VALUE (TYPE_DOMAIN (atype))) 12926 + 2) 12927 * wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (atype))), 12928 wi::to_offset (DECL_SIZE_UNIT (ref)) - offset)) 12929 return true; 12930 12931 return false; 12932 } 12933 12934 return true; 12935 } 12936 12937 /* Return a tree representing the offset, in bytes, of the field referenced 12938 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */ 12939 12940 tree 12941 component_ref_field_offset (tree exp) 12942 { 12943 tree aligned_offset = TREE_OPERAND (exp, 2); 12944 tree field = TREE_OPERAND (exp, 1); 12945 location_t loc = EXPR_LOCATION (exp); 12946 12947 /* If an offset was specified in the COMPONENT_REF, it's the offset measured 12948 in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT. So multiply by that 12949 value. */ 12950 if (aligned_offset) 12951 { 12952 /* ??? tree_ssa_useless_type_conversion will eliminate casts to 12953 sizetype from another type of the same width and signedness. */ 12954 if (TREE_TYPE (aligned_offset) != sizetype) 12955 aligned_offset = fold_convert_loc (loc, sizetype, aligned_offset); 12956 return size_binop_loc (loc, MULT_EXPR, aligned_offset, 12957 size_int (DECL_OFFSET_ALIGN (field) 12958 / BITS_PER_UNIT)); 12959 } 12960 12961 /* Otherwise, take the offset from that of the field. Substitute 12962 any PLACEHOLDER_EXPR that we have. */ 12963 else 12964 return SUBSTITUTE_PLACEHOLDER_IN_EXPR (DECL_FIELD_OFFSET (field), exp); 12965 } 12966 12967 /* Return the machine mode of T. For vectors, returns the mode of the 12968 inner type. The main use case is to feed the result to HONOR_NANS, 12969 avoiding the BLKmode that a direct TYPE_MODE (T) might return. */ 12970 12971 machine_mode 12972 element_mode (const_tree t) 12973 { 12974 if (!TYPE_P (t)) 12975 t = TREE_TYPE (t); 12976 if (VECTOR_TYPE_P (t) || TREE_CODE (t) == COMPLEX_TYPE) 12977 t = TREE_TYPE (t); 12978 return TYPE_MODE (t); 12979 } 12980 12981 /* Vector types need to re-check the target flags each time we report 12982 the machine mode. We need to do this because attribute target can 12983 change the result of vector_mode_supported_p and have_regs_of_mode 12984 on a per-function basis. Thus the TYPE_MODE of a VECTOR_TYPE can 12985 change on a per-function basis. */ 12986 /* ??? Possibly a better solution is to run through all the types 12987 referenced by a function and re-compute the TYPE_MODE once, rather 12988 than make the TYPE_MODE macro call a function. */ 12989 12990 machine_mode 12991 vector_type_mode (const_tree t) 12992 { 12993 machine_mode mode; 12994 12995 gcc_assert (TREE_CODE (t) == VECTOR_TYPE); 12996 12997 mode = t->type_common.mode; 12998 if (VECTOR_MODE_P (mode) 12999 && (!targetm.vector_mode_supported_p (mode) 13000 || !have_regs_of_mode[mode])) 13001 { 13002 scalar_int_mode innermode; 13003 13004 /* For integers, try mapping it to a same-sized scalar mode. */ 13005 if (is_int_mode (TREE_TYPE (t)->type_common.mode, &innermode)) 13006 { 13007 poly_int64 size = (TYPE_VECTOR_SUBPARTS (t) 13008 * GET_MODE_BITSIZE (innermode)); 13009 scalar_int_mode mode; 13010 if (int_mode_for_size (size, 0).exists (&mode) 13011 && have_regs_of_mode[mode]) 13012 return mode; 13013 } 13014 13015 return BLKmode; 13016 } 13017 13018 return mode; 13019 } 13020 13021 /* Verify that basic properties of T match TV and thus T can be a variant of 13022 TV. TV should be the more specified variant (i.e. the main variant). */ 13023 13024 static bool 13025 verify_type_variant (const_tree t, tree tv) 13026 { 13027 /* Type variant can differ by: 13028 13029 - TYPE_QUALS: TYPE_READONLY, TYPE_VOLATILE, TYPE_ATOMIC, TYPE_RESTRICT, 13030 ENCODE_QUAL_ADDR_SPACE. 13031 - main variant may be TYPE_COMPLETE_P and variant types !TYPE_COMPLETE_P 13032 in this case some values may not be set in the variant types 13033 (see TYPE_COMPLETE_P checks). 13034 - it is possible to have TYPE_ARTIFICIAL variant of non-artifical type 13035 - by TYPE_NAME and attributes (i.e. when variant originate by typedef) 13036 - TYPE_CANONICAL (TYPE_ALIAS_SET is the same among variants) 13037 - by the alignment: TYPE_ALIGN and TYPE_USER_ALIGN 13038 - during LTO by TYPE_CONTEXT if type is TYPE_FILE_SCOPE_P 13039 this is necessary to make it possible to merge types form different TUs 13040 - arrays, pointers and references may have TREE_TYPE that is a variant 13041 of TREE_TYPE of their main variants. 13042 - aggregates may have new TYPE_FIELDS list that list variants of 13043 the main variant TYPE_FIELDS. 13044 - vector types may differ by TYPE_VECTOR_OPAQUE 13045 */ 13046 13047 /* Convenience macro for matching individual fields. */ 13048 #define verify_variant_match(flag) \ 13049 do { \ 13050 if (flag (tv) != flag (t)) \ 13051 { \ 13052 error ("type variant differs by %s", #flag); \ 13053 debug_tree (tv); \ 13054 return false; \ 13055 } \ 13056 } while (false) 13057 13058 /* tree_base checks. */ 13059 13060 verify_variant_match (TREE_CODE); 13061 /* FIXME: Ada builds non-artificial variants of artificial types. */ 13062 if (TYPE_ARTIFICIAL (tv) && 0) 13063 verify_variant_match (TYPE_ARTIFICIAL); 13064 if (POINTER_TYPE_P (tv)) 13065 verify_variant_match (TYPE_REF_CAN_ALIAS_ALL); 13066 /* FIXME: TYPE_SIZES_GIMPLIFIED may differs for Ada build. */ 13067 verify_variant_match (TYPE_UNSIGNED); 13068 verify_variant_match (TYPE_PACKED); 13069 if (TREE_CODE (t) == REFERENCE_TYPE) 13070 verify_variant_match (TYPE_REF_IS_RVALUE); 13071 if (AGGREGATE_TYPE_P (t)) 13072 verify_variant_match (TYPE_REVERSE_STORAGE_ORDER); 13073 else 13074 verify_variant_match (TYPE_SATURATING); 13075 /* FIXME: This check trigger during libstdc++ build. */ 13076 if (RECORD_OR_UNION_TYPE_P (t) && COMPLETE_TYPE_P (t) && 0) 13077 verify_variant_match (TYPE_FINAL_P); 13078 13079 /* tree_type_common checks. */ 13080 13081 if (COMPLETE_TYPE_P (t)) 13082 { 13083 verify_variant_match (TYPE_MODE); 13084 if (TREE_CODE (TYPE_SIZE (t)) != PLACEHOLDER_EXPR 13085 && TREE_CODE (TYPE_SIZE (tv)) != PLACEHOLDER_EXPR) 13086 verify_variant_match (TYPE_SIZE); 13087 if (TREE_CODE (TYPE_SIZE_UNIT (t)) != PLACEHOLDER_EXPR 13088 && TREE_CODE (TYPE_SIZE_UNIT (tv)) != PLACEHOLDER_EXPR 13089 && TYPE_SIZE_UNIT (t) != TYPE_SIZE_UNIT (tv)) 13090 { 13091 gcc_assert (!operand_equal_p (TYPE_SIZE_UNIT (t), 13092 TYPE_SIZE_UNIT (tv), 0)); 13093 error ("type variant has different TYPE_SIZE_UNIT"); 13094 debug_tree (tv); 13095 error ("type variant's TYPE_SIZE_UNIT"); 13096 debug_tree (TYPE_SIZE_UNIT (tv)); 13097 error ("type's TYPE_SIZE_UNIT"); 13098 debug_tree (TYPE_SIZE_UNIT (t)); 13099 return false; 13100 } 13101 } 13102 verify_variant_match (TYPE_PRECISION); 13103 verify_variant_match (TYPE_NEEDS_CONSTRUCTING); 13104 if (RECORD_OR_UNION_TYPE_P (t)) 13105 verify_variant_match (TYPE_TRANSPARENT_AGGR); 13106 else if (TREE_CODE (t) == ARRAY_TYPE) 13107 verify_variant_match (TYPE_NONALIASED_COMPONENT); 13108 /* During LTO we merge variant lists from diferent translation units 13109 that may differ BY TYPE_CONTEXT that in turn may point 13110 to TRANSLATION_UNIT_DECL. 13111 Ada also builds variants of types with different TYPE_CONTEXT. */ 13112 if ((!in_lto_p || !TYPE_FILE_SCOPE_P (t)) && 0) 13113 verify_variant_match (TYPE_CONTEXT); 13114 verify_variant_match (TYPE_STRING_FLAG); 13115 if (TYPE_ALIAS_SET_KNOWN_P (t)) 13116 { 13117 error ("type variant with TYPE_ALIAS_SET_KNOWN_P"); 13118 debug_tree (tv); 13119 return false; 13120 } 13121 13122 /* tree_type_non_common checks. */ 13123 13124 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS 13125 and dangle the pointer from time to time. */ 13126 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_VFIELD (t) != TYPE_VFIELD (tv) 13127 && (in_lto_p || !TYPE_VFIELD (tv) 13128 || TREE_CODE (TYPE_VFIELD (tv)) != TREE_LIST)) 13129 { 13130 error ("type variant has different TYPE_VFIELD"); 13131 debug_tree (tv); 13132 return false; 13133 } 13134 if ((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t)) 13135 || TREE_CODE (t) == INTEGER_TYPE 13136 || TREE_CODE (t) == BOOLEAN_TYPE 13137 || TREE_CODE (t) == REAL_TYPE 13138 || TREE_CODE (t) == FIXED_POINT_TYPE) 13139 { 13140 verify_variant_match (TYPE_MAX_VALUE); 13141 verify_variant_match (TYPE_MIN_VALUE); 13142 } 13143 if (TREE_CODE (t) == METHOD_TYPE) 13144 verify_variant_match (TYPE_METHOD_BASETYPE); 13145 if (TREE_CODE (t) == OFFSET_TYPE) 13146 verify_variant_match (TYPE_OFFSET_BASETYPE); 13147 if (TREE_CODE (t) == ARRAY_TYPE) 13148 verify_variant_match (TYPE_ARRAY_MAX_SIZE); 13149 /* FIXME: Be lax and allow TYPE_BINFO to be missing in variant types 13150 or even type's main variant. This is needed to make bootstrap pass 13151 and the bug seems new in GCC 5. 13152 C++ FE should be updated to make this consistent and we should check 13153 that TYPE_BINFO is always NULL for !COMPLETE_TYPE_P and otherwise there 13154 is a match with main variant. 13155 13156 Also disable the check for Java for now because of parser hack that builds 13157 first an dummy BINFO and then sometimes replace it by real BINFO in some 13158 of the copies. */ 13159 if (RECORD_OR_UNION_TYPE_P (t) && TYPE_BINFO (t) && TYPE_BINFO (tv) 13160 && TYPE_BINFO (t) != TYPE_BINFO (tv) 13161 /* FIXME: Java sometimes keep dump TYPE_BINFOs on variant types. 13162 Since there is no cheap way to tell C++/Java type w/o LTO, do checking 13163 at LTO time only. */ 13164 && (in_lto_p && odr_type_p (t))) 13165 { 13166 error ("type variant has different TYPE_BINFO"); 13167 debug_tree (tv); 13168 error ("type variant's TYPE_BINFO"); 13169 debug_tree (TYPE_BINFO (tv)); 13170 error ("type's TYPE_BINFO"); 13171 debug_tree (TYPE_BINFO (t)); 13172 return false; 13173 } 13174 13175 /* Check various uses of TYPE_VALUES_RAW. */ 13176 if (TREE_CODE (t) == ENUMERAL_TYPE) 13177 verify_variant_match (TYPE_VALUES); 13178 else if (TREE_CODE (t) == ARRAY_TYPE) 13179 verify_variant_match (TYPE_DOMAIN); 13180 /* Permit incomplete variants of complete type. While FEs may complete 13181 all variants, this does not happen for C++ templates in all cases. */ 13182 else if (RECORD_OR_UNION_TYPE_P (t) 13183 && COMPLETE_TYPE_P (t) 13184 && TYPE_FIELDS (t) != TYPE_FIELDS (tv)) 13185 { 13186 tree f1, f2; 13187 13188 /* Fortran builds qualified variants as new records with items of 13189 qualified type. Verify that they looks same. */ 13190 for (f1 = TYPE_FIELDS (t), f2 = TYPE_FIELDS (tv); 13191 f1 && f2; 13192 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2)) 13193 if (TREE_CODE (f1) != FIELD_DECL || TREE_CODE (f2) != FIELD_DECL 13194 || (TYPE_MAIN_VARIANT (TREE_TYPE (f1)) 13195 != TYPE_MAIN_VARIANT (TREE_TYPE (f2)) 13196 /* FIXME: gfc_nonrestricted_type builds all types as variants 13197 with exception of pointer types. It deeply copies the type 13198 which means that we may end up with a variant type 13199 referring non-variant pointer. We may change it to 13200 produce types as variants, too, like 13201 objc_get_protocol_qualified_type does. */ 13202 && !POINTER_TYPE_P (TREE_TYPE (f1))) 13203 || DECL_FIELD_OFFSET (f1) != DECL_FIELD_OFFSET (f2) 13204 || DECL_FIELD_BIT_OFFSET (f1) != DECL_FIELD_BIT_OFFSET (f2)) 13205 break; 13206 if (f1 || f2) 13207 { 13208 error ("type variant has different TYPE_FIELDS"); 13209 debug_tree (tv); 13210 error ("first mismatch is field"); 13211 debug_tree (f1); 13212 error ("and field"); 13213 debug_tree (f2); 13214 return false; 13215 } 13216 } 13217 else if ((TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)) 13218 verify_variant_match (TYPE_ARG_TYPES); 13219 /* For C++ the qualified variant of array type is really an array type 13220 of qualified TREE_TYPE. 13221 objc builds variants of pointer where pointer to type is a variant, too 13222 in objc_get_protocol_qualified_type. */ 13223 if (TREE_TYPE (t) != TREE_TYPE (tv) 13224 && ((TREE_CODE (t) != ARRAY_TYPE 13225 && !POINTER_TYPE_P (t)) 13226 || TYPE_MAIN_VARIANT (TREE_TYPE (t)) 13227 != TYPE_MAIN_VARIANT (TREE_TYPE (tv)))) 13228 { 13229 error ("type variant has different TREE_TYPE"); 13230 debug_tree (tv); 13231 error ("type variant's TREE_TYPE"); 13232 debug_tree (TREE_TYPE (tv)); 13233 error ("type's TREE_TYPE"); 13234 debug_tree (TREE_TYPE (t)); 13235 return false; 13236 } 13237 if (type_with_alias_set_p (t) 13238 && !gimple_canonical_types_compatible_p (t, tv, false)) 13239 { 13240 error ("type is not compatible with its variant"); 13241 debug_tree (tv); 13242 error ("type variant's TREE_TYPE"); 13243 debug_tree (TREE_TYPE (tv)); 13244 error ("type's TREE_TYPE"); 13245 debug_tree (TREE_TYPE (t)); 13246 return false; 13247 } 13248 return true; 13249 #undef verify_variant_match 13250 } 13251 13252 13253 /* The TYPE_CANONICAL merging machinery. It should closely resemble 13254 the middle-end types_compatible_p function. It needs to avoid 13255 claiming types are different for types that should be treated 13256 the same with respect to TBAA. Canonical types are also used 13257 for IL consistency checks via the useless_type_conversion_p 13258 predicate which does not handle all type kinds itself but falls 13259 back to pointer-comparison of TYPE_CANONICAL for aggregates 13260 for example. */ 13261 13262 /* Return true if TYPE_UNSIGNED of TYPE should be ignored for canonical 13263 type calculation because we need to allow inter-operability between signed 13264 and unsigned variants. */ 13265 13266 bool 13267 type_with_interoperable_signedness (const_tree type) 13268 { 13269 /* Fortran standard require C_SIGNED_CHAR to be interoperable with both 13270 signed char and unsigned char. Similarly fortran FE builds 13271 C_SIZE_T as signed type, while C defines it unsigned. */ 13272 13273 return tree_code_for_canonical_type_merging (TREE_CODE (type)) 13274 == INTEGER_TYPE 13275 && (TYPE_PRECISION (type) == TYPE_PRECISION (signed_char_type_node) 13276 || TYPE_PRECISION (type) == TYPE_PRECISION (size_type_node)); 13277 } 13278 13279 /* Return true iff T1 and T2 are structurally identical for what 13280 TBAA is concerned. 13281 This function is used both by lto.c canonical type merging and by the 13282 verifier. If TRUST_TYPE_CANONICAL we do not look into structure of types 13283 that have TYPE_CANONICAL defined and assume them equivalent. This is useful 13284 only for LTO because only in these cases TYPE_CANONICAL equivalence 13285 correspond to one defined by gimple_canonical_types_compatible_p. */ 13286 13287 bool 13288 gimple_canonical_types_compatible_p (const_tree t1, const_tree t2, 13289 bool trust_type_canonical) 13290 { 13291 /* Type variants should be same as the main variant. When not doing sanity 13292 checking to verify this fact, go to main variants and save some work. */ 13293 if (trust_type_canonical) 13294 { 13295 t1 = TYPE_MAIN_VARIANT (t1); 13296 t2 = TYPE_MAIN_VARIANT (t2); 13297 } 13298 13299 /* Check first for the obvious case of pointer identity. */ 13300 if (t1 == t2) 13301 return true; 13302 13303 /* Check that we have two types to compare. */ 13304 if (t1 == NULL_TREE || t2 == NULL_TREE) 13305 return false; 13306 13307 /* We consider complete types always compatible with incomplete type. 13308 This does not make sense for canonical type calculation and thus we 13309 need to ensure that we are never called on it. 13310 13311 FIXME: For more correctness the function probably should have three modes 13312 1) mode assuming that types are complete mathcing their structure 13313 2) mode allowing incomplete types but producing equivalence classes 13314 and thus ignoring all info from complete types 13315 3) mode allowing incomplete types to match complete but checking 13316 compatibility between complete types. 13317 13318 1 and 2 can be used for canonical type calculation. 3 is the real 13319 definition of type compatibility that can be used i.e. for warnings during 13320 declaration merging. */ 13321 13322 gcc_assert (!trust_type_canonical 13323 || (type_with_alias_set_p (t1) && type_with_alias_set_p (t2))); 13324 /* If the types have been previously registered and found equal 13325 they still are. */ 13326 13327 if (TYPE_CANONICAL (t1) && TYPE_CANONICAL (t2) 13328 && trust_type_canonical) 13329 { 13330 /* Do not use TYPE_CANONICAL of pointer types. For LTO streamed types 13331 they are always NULL, but they are set to non-NULL for types 13332 constructed by build_pointer_type and variants. In this case the 13333 TYPE_CANONICAL is more fine grained than the equivalnce we test (where 13334 all pointers are considered equal. Be sure to not return false 13335 negatives. */ 13336 gcc_checking_assert (canonical_type_used_p (t1) 13337 && canonical_type_used_p (t2)); 13338 return TYPE_CANONICAL (t1) == TYPE_CANONICAL (t2); 13339 } 13340 13341 /* Can't be the same type if the types don't have the same code. */ 13342 enum tree_code code = tree_code_for_canonical_type_merging (TREE_CODE (t1)); 13343 if (code != tree_code_for_canonical_type_merging (TREE_CODE (t2))) 13344 return false; 13345 13346 /* Qualifiers do not matter for canonical type comparison purposes. */ 13347 13348 /* Void types and nullptr types are always the same. */ 13349 if (TREE_CODE (t1) == VOID_TYPE 13350 || TREE_CODE (t1) == NULLPTR_TYPE) 13351 return true; 13352 13353 /* Can't be the same type if they have different mode. */ 13354 if (TYPE_MODE (t1) != TYPE_MODE (t2)) 13355 return false; 13356 13357 /* Non-aggregate types can be handled cheaply. */ 13358 if (INTEGRAL_TYPE_P (t1) 13359 || SCALAR_FLOAT_TYPE_P (t1) 13360 || FIXED_POINT_TYPE_P (t1) 13361 || TREE_CODE (t1) == VECTOR_TYPE 13362 || TREE_CODE (t1) == COMPLEX_TYPE 13363 || TREE_CODE (t1) == OFFSET_TYPE 13364 || POINTER_TYPE_P (t1)) 13365 { 13366 /* Can't be the same type if they have different recision. */ 13367 if (TYPE_PRECISION (t1) != TYPE_PRECISION (t2)) 13368 return false; 13369 13370 /* In some cases the signed and unsigned types are required to be 13371 inter-operable. */ 13372 if (TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2) 13373 && !type_with_interoperable_signedness (t1)) 13374 return false; 13375 13376 /* Fortran's C_SIGNED_CHAR is !TYPE_STRING_FLAG but needs to be 13377 interoperable with "signed char". Unless all frontends are revisited 13378 to agree on these types, we must ignore the flag completely. */ 13379 13380 /* Fortran standard define C_PTR type that is compatible with every 13381 C pointer. For this reason we need to glob all pointers into one. 13382 Still pointers in different address spaces are not compatible. */ 13383 if (POINTER_TYPE_P (t1)) 13384 { 13385 if (TYPE_ADDR_SPACE (TREE_TYPE (t1)) 13386 != TYPE_ADDR_SPACE (TREE_TYPE (t2))) 13387 return false; 13388 } 13389 13390 /* Tail-recurse to components. */ 13391 if (TREE_CODE (t1) == VECTOR_TYPE 13392 || TREE_CODE (t1) == COMPLEX_TYPE) 13393 return gimple_canonical_types_compatible_p (TREE_TYPE (t1), 13394 TREE_TYPE (t2), 13395 trust_type_canonical); 13396 13397 return true; 13398 } 13399 13400 /* Do type-specific comparisons. */ 13401 switch (TREE_CODE (t1)) 13402 { 13403 case ARRAY_TYPE: 13404 /* Array types are the same if the element types are the same and 13405 the number of elements are the same. */ 13406 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2), 13407 trust_type_canonical) 13408 || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2) 13409 || TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2) 13410 || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2)) 13411 return false; 13412 else 13413 { 13414 tree i1 = TYPE_DOMAIN (t1); 13415 tree i2 = TYPE_DOMAIN (t2); 13416 13417 /* For an incomplete external array, the type domain can be 13418 NULL_TREE. Check this condition also. */ 13419 if (i1 == NULL_TREE && i2 == NULL_TREE) 13420 return true; 13421 else if (i1 == NULL_TREE || i2 == NULL_TREE) 13422 return false; 13423 else 13424 { 13425 tree min1 = TYPE_MIN_VALUE (i1); 13426 tree min2 = TYPE_MIN_VALUE (i2); 13427 tree max1 = TYPE_MAX_VALUE (i1); 13428 tree max2 = TYPE_MAX_VALUE (i2); 13429 13430 /* The minimum/maximum values have to be the same. */ 13431 if ((min1 == min2 13432 || (min1 && min2 13433 && ((TREE_CODE (min1) == PLACEHOLDER_EXPR 13434 && TREE_CODE (min2) == PLACEHOLDER_EXPR) 13435 || operand_equal_p (min1, min2, 0)))) 13436 && (max1 == max2 13437 || (max1 && max2 13438 && ((TREE_CODE (max1) == PLACEHOLDER_EXPR 13439 && TREE_CODE (max2) == PLACEHOLDER_EXPR) 13440 || operand_equal_p (max1, max2, 0))))) 13441 return true; 13442 else 13443 return false; 13444 } 13445 } 13446 13447 case METHOD_TYPE: 13448 case FUNCTION_TYPE: 13449 /* Function types are the same if the return type and arguments types 13450 are the same. */ 13451 if (!gimple_canonical_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2), 13452 trust_type_canonical)) 13453 return false; 13454 13455 if (TYPE_ARG_TYPES (t1) == TYPE_ARG_TYPES (t2)) 13456 return true; 13457 else 13458 { 13459 tree parms1, parms2; 13460 13461 for (parms1 = TYPE_ARG_TYPES (t1), parms2 = TYPE_ARG_TYPES (t2); 13462 parms1 && parms2; 13463 parms1 = TREE_CHAIN (parms1), parms2 = TREE_CHAIN (parms2)) 13464 { 13465 if (!gimple_canonical_types_compatible_p 13466 (TREE_VALUE (parms1), TREE_VALUE (parms2), 13467 trust_type_canonical)) 13468 return false; 13469 } 13470 13471 if (parms1 || parms2) 13472 return false; 13473 13474 return true; 13475 } 13476 13477 case RECORD_TYPE: 13478 case UNION_TYPE: 13479 case QUAL_UNION_TYPE: 13480 { 13481 tree f1, f2; 13482 13483 /* Don't try to compare variants of an incomplete type, before 13484 TYPE_FIELDS has been copied around. */ 13485 if (!COMPLETE_TYPE_P (t1) && !COMPLETE_TYPE_P (t2)) 13486 return true; 13487 13488 13489 if (TYPE_REVERSE_STORAGE_ORDER (t1) != TYPE_REVERSE_STORAGE_ORDER (t2)) 13490 return false; 13491 13492 /* For aggregate types, all the fields must be the same. */ 13493 for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2); 13494 f1 || f2; 13495 f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2)) 13496 { 13497 /* Skip non-fields and zero-sized fields. */ 13498 while (f1 && (TREE_CODE (f1) != FIELD_DECL 13499 || (DECL_SIZE (f1) 13500 && integer_zerop (DECL_SIZE (f1))))) 13501 f1 = TREE_CHAIN (f1); 13502 while (f2 && (TREE_CODE (f2) != FIELD_DECL 13503 || (DECL_SIZE (f2) 13504 && integer_zerop (DECL_SIZE (f2))))) 13505 f2 = TREE_CHAIN (f2); 13506 if (!f1 || !f2) 13507 break; 13508 /* The fields must have the same name, offset and type. */ 13509 if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2) 13510 || !gimple_compare_field_offset (f1, f2) 13511 || !gimple_canonical_types_compatible_p 13512 (TREE_TYPE (f1), TREE_TYPE (f2), 13513 trust_type_canonical)) 13514 return false; 13515 } 13516 13517 /* If one aggregate has more fields than the other, they 13518 are not the same. */ 13519 if (f1 || f2) 13520 return false; 13521 13522 return true; 13523 } 13524 13525 default: 13526 /* Consider all types with language specific trees in them mutually 13527 compatible. This is executed only from verify_type and false 13528 positives can be tolerated. */ 13529 gcc_assert (!in_lto_p); 13530 return true; 13531 } 13532 } 13533 13534 /* Verify type T. */ 13535 13536 void 13537 verify_type (const_tree t) 13538 { 13539 bool error_found = false; 13540 tree mv = TYPE_MAIN_VARIANT (t); 13541 if (!mv) 13542 { 13543 error ("Main variant is not defined"); 13544 error_found = true; 13545 } 13546 else if (mv != TYPE_MAIN_VARIANT (mv)) 13547 { 13548 error ("TYPE_MAIN_VARIANT has different TYPE_MAIN_VARIANT"); 13549 debug_tree (mv); 13550 error_found = true; 13551 } 13552 else if (t != mv && !verify_type_variant (t, mv)) 13553 error_found = true; 13554 13555 tree ct = TYPE_CANONICAL (t); 13556 if (!ct) 13557 ; 13558 else if (TYPE_CANONICAL (t) != ct) 13559 { 13560 error ("TYPE_CANONICAL has different TYPE_CANONICAL"); 13561 debug_tree (ct); 13562 error_found = true; 13563 } 13564 /* Method and function types can not be used to address memory and thus 13565 TYPE_CANONICAL really matters only for determining useless conversions. 13566 13567 FIXME: C++ FE produce declarations of builtin functions that are not 13568 compatible with main variants. */ 13569 else if (TREE_CODE (t) == FUNCTION_TYPE) 13570 ; 13571 else if (t != ct 13572 /* FIXME: gimple_canonical_types_compatible_p can not compare types 13573 with variably sized arrays because their sizes possibly 13574 gimplified to different variables. */ 13575 && !variably_modified_type_p (ct, NULL) 13576 && !gimple_canonical_types_compatible_p (t, ct, false)) 13577 { 13578 error ("TYPE_CANONICAL is not compatible"); 13579 debug_tree (ct); 13580 error_found = true; 13581 } 13582 13583 if (COMPLETE_TYPE_P (t) && TYPE_CANONICAL (t) 13584 && TYPE_MODE (t) != TYPE_MODE (TYPE_CANONICAL (t))) 13585 { 13586 error ("TYPE_MODE of TYPE_CANONICAL is not compatible"); 13587 debug_tree (ct); 13588 error_found = true; 13589 } 13590 if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct) 13591 { 13592 error ("TYPE_CANONICAL of main variant is not main variant"); 13593 debug_tree (ct); 13594 debug_tree (TYPE_MAIN_VARIANT (ct)); 13595 error_found = true; 13596 } 13597 13598 13599 /* Check various uses of TYPE_MIN_VALUE_RAW. */ 13600 if (RECORD_OR_UNION_TYPE_P (t)) 13601 { 13602 /* FIXME: C FE uses TYPE_VFIELD to record C_TYPE_INCOMPLETE_VARS 13603 and danagle the pointer from time to time. */ 13604 if (TYPE_VFIELD (t) 13605 && TREE_CODE (TYPE_VFIELD (t)) != FIELD_DECL 13606 && TREE_CODE (TYPE_VFIELD (t)) != TREE_LIST) 13607 { 13608 error ("TYPE_VFIELD is not FIELD_DECL nor TREE_LIST"); 13609 debug_tree (TYPE_VFIELD (t)); 13610 error_found = true; 13611 } 13612 } 13613 else if (TREE_CODE (t) == POINTER_TYPE) 13614 { 13615 if (TYPE_NEXT_PTR_TO (t) 13616 && TREE_CODE (TYPE_NEXT_PTR_TO (t)) != POINTER_TYPE) 13617 { 13618 error ("TYPE_NEXT_PTR_TO is not POINTER_TYPE"); 13619 debug_tree (TYPE_NEXT_PTR_TO (t)); 13620 error_found = true; 13621 } 13622 } 13623 else if (TREE_CODE (t) == REFERENCE_TYPE) 13624 { 13625 if (TYPE_NEXT_REF_TO (t) 13626 && TREE_CODE (TYPE_NEXT_REF_TO (t)) != REFERENCE_TYPE) 13627 { 13628 error ("TYPE_NEXT_REF_TO is not REFERENCE_TYPE"); 13629 debug_tree (TYPE_NEXT_REF_TO (t)); 13630 error_found = true; 13631 } 13632 } 13633 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE 13634 || TREE_CODE (t) == FIXED_POINT_TYPE) 13635 { 13636 /* FIXME: The following check should pass: 13637 useless_type_conversion_p (const_cast <tree> (t), 13638 TREE_TYPE (TYPE_MIN_VALUE (t)) 13639 but does not for C sizetypes in LTO. */ 13640 } 13641 13642 /* Check various uses of TYPE_MAXVAL_RAW. */ 13643 if (RECORD_OR_UNION_TYPE_P (t)) 13644 { 13645 if (!TYPE_BINFO (t)) 13646 ; 13647 else if (TREE_CODE (TYPE_BINFO (t)) != TREE_BINFO) 13648 { 13649 error ("TYPE_BINFO is not TREE_BINFO"); 13650 debug_tree (TYPE_BINFO (t)); 13651 error_found = true; 13652 } 13653 else if (TREE_TYPE (TYPE_BINFO (t)) != TYPE_MAIN_VARIANT (t)) 13654 { 13655 error ("TYPE_BINFO type is not TYPE_MAIN_VARIANT"); 13656 debug_tree (TREE_TYPE (TYPE_BINFO (t))); 13657 error_found = true; 13658 } 13659 } 13660 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE) 13661 { 13662 if (TYPE_METHOD_BASETYPE (t) 13663 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != RECORD_TYPE 13664 && TREE_CODE (TYPE_METHOD_BASETYPE (t)) != UNION_TYPE) 13665 { 13666 error ("TYPE_METHOD_BASETYPE is not record nor union"); 13667 debug_tree (TYPE_METHOD_BASETYPE (t)); 13668 error_found = true; 13669 } 13670 } 13671 else if (TREE_CODE (t) == OFFSET_TYPE) 13672 { 13673 if (TYPE_OFFSET_BASETYPE (t) 13674 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != RECORD_TYPE 13675 && TREE_CODE (TYPE_OFFSET_BASETYPE (t)) != UNION_TYPE) 13676 { 13677 error ("TYPE_OFFSET_BASETYPE is not record nor union"); 13678 debug_tree (TYPE_OFFSET_BASETYPE (t)); 13679 error_found = true; 13680 } 13681 } 13682 else if (INTEGRAL_TYPE_P (t) || TREE_CODE (t) == REAL_TYPE 13683 || TREE_CODE (t) == FIXED_POINT_TYPE) 13684 { 13685 /* FIXME: The following check should pass: 13686 useless_type_conversion_p (const_cast <tree> (t), 13687 TREE_TYPE (TYPE_MAX_VALUE (t)) 13688 but does not for C sizetypes in LTO. */ 13689 } 13690 else if (TREE_CODE (t) == ARRAY_TYPE) 13691 { 13692 if (TYPE_ARRAY_MAX_SIZE (t) 13693 && TREE_CODE (TYPE_ARRAY_MAX_SIZE (t)) != INTEGER_CST) 13694 { 13695 error ("TYPE_ARRAY_MAX_SIZE not INTEGER_CST"); 13696 debug_tree (TYPE_ARRAY_MAX_SIZE (t)); 13697 error_found = true; 13698 } 13699 } 13700 else if (TYPE_MAX_VALUE_RAW (t)) 13701 { 13702 error ("TYPE_MAX_VALUE_RAW non-NULL"); 13703 debug_tree (TYPE_MAX_VALUE_RAW (t)); 13704 error_found = true; 13705 } 13706 13707 if (TYPE_LANG_SLOT_1 (t) && in_lto_p) 13708 { 13709 error ("TYPE_LANG_SLOT_1 (binfo) field is non-NULL"); 13710 debug_tree (TYPE_LANG_SLOT_1 (t)); 13711 error_found = true; 13712 } 13713 13714 /* Check various uses of TYPE_VALUES_RAW. */ 13715 if (TREE_CODE (t) == ENUMERAL_TYPE) 13716 for (tree l = TYPE_VALUES (t); l; l = TREE_CHAIN (l)) 13717 { 13718 tree value = TREE_VALUE (l); 13719 tree name = TREE_PURPOSE (l); 13720 13721 /* C FE porduce INTEGER_CST of INTEGER_TYPE, while C++ FE uses 13722 CONST_DECL of ENUMERAL TYPE. */ 13723 if (TREE_CODE (value) != INTEGER_CST && TREE_CODE (value) != CONST_DECL) 13724 { 13725 error ("Enum value is not CONST_DECL or INTEGER_CST"); 13726 debug_tree (value); 13727 debug_tree (name); 13728 error_found = true; 13729 } 13730 if (TREE_CODE (TREE_TYPE (value)) != INTEGER_TYPE 13731 && !useless_type_conversion_p (const_cast <tree> (t), TREE_TYPE (value))) 13732 { 13733 error ("Enum value type is not INTEGER_TYPE nor convertible to the enum"); 13734 debug_tree (value); 13735 debug_tree (name); 13736 error_found = true; 13737 } 13738 if (TREE_CODE (name) != IDENTIFIER_NODE) 13739 { 13740 error ("Enum value name is not IDENTIFIER_NODE"); 13741 debug_tree (value); 13742 debug_tree (name); 13743 error_found = true; 13744 } 13745 } 13746 else if (TREE_CODE (t) == ARRAY_TYPE) 13747 { 13748 if (TYPE_DOMAIN (t) && TREE_CODE (TYPE_DOMAIN (t)) != INTEGER_TYPE) 13749 { 13750 error ("Array TYPE_DOMAIN is not integer type"); 13751 debug_tree (TYPE_DOMAIN (t)); 13752 error_found = true; 13753 } 13754 } 13755 else if (RECORD_OR_UNION_TYPE_P (t)) 13756 { 13757 if (TYPE_FIELDS (t) && !COMPLETE_TYPE_P (t) && in_lto_p) 13758 { 13759 error ("TYPE_FIELDS defined in incomplete type"); 13760 error_found = true; 13761 } 13762 for (tree fld = TYPE_FIELDS (t); fld; fld = TREE_CHAIN (fld)) 13763 { 13764 /* TODO: verify properties of decls. */ 13765 if (TREE_CODE (fld) == FIELD_DECL) 13766 ; 13767 else if (TREE_CODE (fld) == TYPE_DECL) 13768 ; 13769 else if (TREE_CODE (fld) == CONST_DECL) 13770 ; 13771 else if (VAR_P (fld)) 13772 ; 13773 else if (TREE_CODE (fld) == TEMPLATE_DECL) 13774 ; 13775 else if (TREE_CODE (fld) == USING_DECL) 13776 ; 13777 else if (TREE_CODE (fld) == FUNCTION_DECL) 13778 ; 13779 else 13780 { 13781 error ("Wrong tree in TYPE_FIELDS list"); 13782 debug_tree (fld); 13783 error_found = true; 13784 } 13785 } 13786 } 13787 else if (TREE_CODE (t) == INTEGER_TYPE 13788 || TREE_CODE (t) == BOOLEAN_TYPE 13789 || TREE_CODE (t) == OFFSET_TYPE 13790 || TREE_CODE (t) == REFERENCE_TYPE 13791 || TREE_CODE (t) == NULLPTR_TYPE 13792 || TREE_CODE (t) == POINTER_TYPE) 13793 { 13794 if (TYPE_CACHED_VALUES_P (t) != (TYPE_CACHED_VALUES (t) != NULL)) 13795 { 13796 error ("TYPE_CACHED_VALUES_P is %i while TYPE_CACHED_VALUES is %p", 13797 TYPE_CACHED_VALUES_P (t), (void *)TYPE_CACHED_VALUES (t)); 13798 error_found = true; 13799 } 13800 else if (TYPE_CACHED_VALUES_P (t) && TREE_CODE (TYPE_CACHED_VALUES (t)) != TREE_VEC) 13801 { 13802 error ("TYPE_CACHED_VALUES is not TREE_VEC"); 13803 debug_tree (TYPE_CACHED_VALUES (t)); 13804 error_found = true; 13805 } 13806 /* Verify just enough of cache to ensure that no one copied it to new type. 13807 All copying should go by copy_node that should clear it. */ 13808 else if (TYPE_CACHED_VALUES_P (t)) 13809 { 13810 int i; 13811 for (i = 0; i < TREE_VEC_LENGTH (TYPE_CACHED_VALUES (t)); i++) 13812 if (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i) 13813 && TREE_TYPE (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)) != t) 13814 { 13815 error ("wrong TYPE_CACHED_VALUES entry"); 13816 debug_tree (TREE_VEC_ELT (TYPE_CACHED_VALUES (t), i)); 13817 error_found = true; 13818 break; 13819 } 13820 } 13821 } 13822 else if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE) 13823 for (tree l = TYPE_ARG_TYPES (t); l; l = TREE_CHAIN (l)) 13824 { 13825 /* C++ FE uses TREE_PURPOSE to store initial values. */ 13826 if (TREE_PURPOSE (l) && in_lto_p) 13827 { 13828 error ("TREE_PURPOSE is non-NULL in TYPE_ARG_TYPES list"); 13829 debug_tree (l); 13830 error_found = true; 13831 } 13832 if (!TYPE_P (TREE_VALUE (l))) 13833 { 13834 error ("Wrong entry in TYPE_ARG_TYPES list"); 13835 debug_tree (l); 13836 error_found = true; 13837 } 13838 } 13839 else if (!is_lang_specific (t) && TYPE_VALUES_RAW (t)) 13840 { 13841 error ("TYPE_VALUES_RAW field is non-NULL"); 13842 debug_tree (TYPE_VALUES_RAW (t)); 13843 error_found = true; 13844 } 13845 if (TREE_CODE (t) != INTEGER_TYPE 13846 && TREE_CODE (t) != BOOLEAN_TYPE 13847 && TREE_CODE (t) != OFFSET_TYPE 13848 && TREE_CODE (t) != REFERENCE_TYPE 13849 && TREE_CODE (t) != NULLPTR_TYPE 13850 && TREE_CODE (t) != POINTER_TYPE 13851 && TYPE_CACHED_VALUES_P (t)) 13852 { 13853 error ("TYPE_CACHED_VALUES_P is set while it should not"); 13854 error_found = true; 13855 } 13856 if (TYPE_STRING_FLAG (t) 13857 && TREE_CODE (t) != ARRAY_TYPE && TREE_CODE (t) != INTEGER_TYPE) 13858 { 13859 error ("TYPE_STRING_FLAG is set on wrong type code"); 13860 error_found = true; 13861 } 13862 13863 /* ipa-devirt makes an assumption that TYPE_METHOD_BASETYPE is always 13864 TYPE_MAIN_VARIANT and it would be odd to add methods only to variatns 13865 of a type. */ 13866 if (TREE_CODE (t) == METHOD_TYPE 13867 && TYPE_MAIN_VARIANT (TYPE_METHOD_BASETYPE (t)) != TYPE_METHOD_BASETYPE (t)) 13868 { 13869 error ("TYPE_METHOD_BASETYPE is not main variant"); 13870 error_found = true; 13871 } 13872 13873 if (error_found) 13874 { 13875 debug_tree (const_cast <tree> (t)); 13876 internal_error ("verify_type failed"); 13877 } 13878 } 13879 13880 13881 /* Return 1 if ARG interpreted as signed in its precision is known to be 13882 always positive or 2 if ARG is known to be always negative, or 3 if 13883 ARG may be positive or negative. */ 13884 13885 int 13886 get_range_pos_neg (tree arg) 13887 { 13888 if (arg == error_mark_node) 13889 return 3; 13890 13891 int prec = TYPE_PRECISION (TREE_TYPE (arg)); 13892 int cnt = 0; 13893 if (TREE_CODE (arg) == INTEGER_CST) 13894 { 13895 wide_int w = wi::sext (wi::to_wide (arg), prec); 13896 if (wi::neg_p (w)) 13897 return 2; 13898 else 13899 return 1; 13900 } 13901 while (CONVERT_EXPR_P (arg) 13902 && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (arg, 0))) 13903 && TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (arg, 0))) <= prec) 13904 { 13905 arg = TREE_OPERAND (arg, 0); 13906 /* Narrower value zero extended into wider type 13907 will always result in positive values. */ 13908 if (TYPE_UNSIGNED (TREE_TYPE (arg)) 13909 && TYPE_PRECISION (TREE_TYPE (arg)) < prec) 13910 return 1; 13911 prec = TYPE_PRECISION (TREE_TYPE (arg)); 13912 if (++cnt > 30) 13913 return 3; 13914 } 13915 13916 if (TREE_CODE (arg) != SSA_NAME) 13917 return 3; 13918 wide_int arg_min, arg_max; 13919 while (get_range_info (arg, &arg_min, &arg_max) != VR_RANGE) 13920 { 13921 gimple *g = SSA_NAME_DEF_STMT (arg); 13922 if (is_gimple_assign (g) 13923 && CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (g))) 13924 { 13925 tree t = gimple_assign_rhs1 (g); 13926 if (INTEGRAL_TYPE_P (TREE_TYPE (t)) 13927 && TYPE_PRECISION (TREE_TYPE (t)) <= prec) 13928 { 13929 if (TYPE_UNSIGNED (TREE_TYPE (t)) 13930 && TYPE_PRECISION (TREE_TYPE (t)) < prec) 13931 return 1; 13932 prec = TYPE_PRECISION (TREE_TYPE (t)); 13933 arg = t; 13934 if (++cnt > 30) 13935 return 3; 13936 continue; 13937 } 13938 } 13939 return 3; 13940 } 13941 if (TYPE_UNSIGNED (TREE_TYPE (arg))) 13942 { 13943 /* For unsigned values, the "positive" range comes 13944 below the "negative" range. */ 13945 if (!wi::neg_p (wi::sext (arg_max, prec), SIGNED)) 13946 return 1; 13947 if (wi::neg_p (wi::sext (arg_min, prec), SIGNED)) 13948 return 2; 13949 } 13950 else 13951 { 13952 if (!wi::neg_p (wi::sext (arg_min, prec), SIGNED)) 13953 return 1; 13954 if (wi::neg_p (wi::sext (arg_max, prec), SIGNED)) 13955 return 2; 13956 } 13957 return 3; 13958 } 13959 13960 13961 13962 13963 /* Return true if ARG is marked with the nonnull attribute in the 13964 current function signature. */ 13965 13966 bool 13967 nonnull_arg_p (const_tree arg) 13968 { 13969 tree t, attrs, fntype; 13970 unsigned HOST_WIDE_INT arg_num; 13971 13972 gcc_assert (TREE_CODE (arg) == PARM_DECL 13973 && (POINTER_TYPE_P (TREE_TYPE (arg)) 13974 || TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)); 13975 13976 /* The static chain decl is always non null. */ 13977 if (arg == cfun->static_chain_decl) 13978 return true; 13979 13980 /* THIS argument of method is always non-NULL. */ 13981 if (TREE_CODE (TREE_TYPE (cfun->decl)) == METHOD_TYPE 13982 && arg == DECL_ARGUMENTS (cfun->decl) 13983 && flag_delete_null_pointer_checks) 13984 return true; 13985 13986 /* Values passed by reference are always non-NULL. */ 13987 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE 13988 && flag_delete_null_pointer_checks) 13989 return true; 13990 13991 fntype = TREE_TYPE (cfun->decl); 13992 for (attrs = TYPE_ATTRIBUTES (fntype); attrs; attrs = TREE_CHAIN (attrs)) 13993 { 13994 attrs = lookup_attribute ("nonnull", attrs); 13995 13996 /* If "nonnull" wasn't specified, we know nothing about the argument. */ 13997 if (attrs == NULL_TREE) 13998 return false; 13999 14000 /* If "nonnull" applies to all the arguments, then ARG is non-null. */ 14001 if (TREE_VALUE (attrs) == NULL_TREE) 14002 return true; 14003 14004 /* Get the position number for ARG in the function signature. */ 14005 for (arg_num = 1, t = DECL_ARGUMENTS (cfun->decl); 14006 t; 14007 t = DECL_CHAIN (t), arg_num++) 14008 { 14009 if (t == arg) 14010 break; 14011 } 14012 14013 gcc_assert (t == arg); 14014 14015 /* Now see if ARG_NUM is mentioned in the nonnull list. */ 14016 for (t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t)) 14017 { 14018 if (compare_tree_int (TREE_VALUE (t), arg_num) == 0) 14019 return true; 14020 } 14021 } 14022 14023 return false; 14024 } 14025 14026 /* Combine LOC and BLOCK to a combined adhoc loc, retaining any range 14027 information. */ 14028 14029 location_t 14030 set_block (location_t loc, tree block) 14031 { 14032 location_t pure_loc = get_pure_location (loc); 14033 source_range src_range = get_range_from_loc (line_table, loc); 14034 return COMBINE_LOCATION_DATA (line_table, pure_loc, src_range, block); 14035 } 14036 14037 location_t 14038 set_source_range (tree expr, location_t start, location_t finish) 14039 { 14040 source_range src_range; 14041 src_range.m_start = start; 14042 src_range.m_finish = finish; 14043 return set_source_range (expr, src_range); 14044 } 14045 14046 location_t 14047 set_source_range (tree expr, source_range src_range) 14048 { 14049 if (!EXPR_P (expr)) 14050 return UNKNOWN_LOCATION; 14051 14052 location_t pure_loc = get_pure_location (EXPR_LOCATION (expr)); 14053 location_t adhoc = COMBINE_LOCATION_DATA (line_table, 14054 pure_loc, 14055 src_range, 14056 NULL); 14057 SET_EXPR_LOCATION (expr, adhoc); 14058 return adhoc; 14059 } 14060 14061 /* Return EXPR, potentially wrapped with a node expression LOC, 14062 if !CAN_HAVE_LOCATION_P (expr). 14063 14064 NON_LVALUE_EXPR is used for wrapping constants, apart from STRING_CST. 14065 VIEW_CONVERT_EXPR is used for wrapping non-constants and STRING_CST. 14066 14067 Wrapper nodes can be identified using location_wrapper_p. */ 14068 14069 tree 14070 maybe_wrap_with_location (tree expr, location_t loc) 14071 { 14072 if (expr == NULL) 14073 return NULL; 14074 if (loc == UNKNOWN_LOCATION) 14075 return expr; 14076 if (CAN_HAVE_LOCATION_P (expr)) 14077 return expr; 14078 /* We should only be adding wrappers for constants and for decls, 14079 or for some exceptional tree nodes (e.g. BASELINK in the C++ FE). */ 14080 gcc_assert (CONSTANT_CLASS_P (expr) 14081 || DECL_P (expr) 14082 || EXCEPTIONAL_CLASS_P (expr)); 14083 14084 /* For now, don't add wrappers to exceptional tree nodes, to minimize 14085 any impact of the wrapper nodes. */ 14086 if (EXCEPTIONAL_CLASS_P (expr)) 14087 return expr; 14088 14089 tree_code code 14090 = (((CONSTANT_CLASS_P (expr) && TREE_CODE (expr) != STRING_CST) 14091 || (TREE_CODE (expr) == CONST_DECL && !TREE_STATIC (expr))) 14092 ? NON_LVALUE_EXPR : VIEW_CONVERT_EXPR); 14093 tree wrapper = build1_loc (loc, code, TREE_TYPE (expr), expr); 14094 /* Mark this node as being a wrapper. */ 14095 EXPR_LOCATION_WRAPPER_P (wrapper) = 1; 14096 return wrapper; 14097 } 14098 14099 /* Return the name of combined function FN, for debugging purposes. */ 14100 14101 const char * 14102 combined_fn_name (combined_fn fn) 14103 { 14104 if (builtin_fn_p (fn)) 14105 { 14106 tree fndecl = builtin_decl_explicit (as_builtin_fn (fn)); 14107 return IDENTIFIER_POINTER (DECL_NAME (fndecl)); 14108 } 14109 else 14110 return internal_fn_name (as_internal_fn (fn)); 14111 } 14112 14113 /* Return a bitmap with a bit set corresponding to each argument in 14114 a function call type FNTYPE declared with attribute nonnull, 14115 or null if none of the function's argument are nonnull. The caller 14116 must free the bitmap. */ 14117 14118 bitmap 14119 get_nonnull_args (const_tree fntype) 14120 { 14121 if (fntype == NULL_TREE) 14122 return NULL; 14123 14124 tree attrs = TYPE_ATTRIBUTES (fntype); 14125 if (!attrs) 14126 return NULL; 14127 14128 bitmap argmap = NULL; 14129 14130 /* A function declaration can specify multiple attribute nonnull, 14131 each with zero or more arguments. The loop below creates a bitmap 14132 representing a union of all the arguments. An empty (but non-null) 14133 bitmap means that all arguments have been declaraed nonnull. */ 14134 for ( ; attrs; attrs = TREE_CHAIN (attrs)) 14135 { 14136 attrs = lookup_attribute ("nonnull", attrs); 14137 if (!attrs) 14138 break; 14139 14140 if (!argmap) 14141 argmap = BITMAP_ALLOC (NULL); 14142 14143 if (!TREE_VALUE (attrs)) 14144 { 14145 /* Clear the bitmap in case a previous attribute nonnull 14146 set it and this one overrides it for all arguments. */ 14147 bitmap_clear (argmap); 14148 return argmap; 14149 } 14150 14151 /* Iterate over the indices of the format arguments declared nonnull 14152 and set a bit for each. */ 14153 for (tree idx = TREE_VALUE (attrs); idx; idx = TREE_CHAIN (idx)) 14154 { 14155 unsigned int val = TREE_INT_CST_LOW (TREE_VALUE (idx)) - 1; 14156 bitmap_set_bit (argmap, val); 14157 } 14158 } 14159 14160 return argmap; 14161 } 14162 14163 /* Returns true if TYPE is a type where it and all of its subobjects 14164 (recursively) are of structure, union, or array type. */ 14165 14166 static bool 14167 default_is_empty_type (tree type) 14168 { 14169 if (RECORD_OR_UNION_TYPE_P (type)) 14170 { 14171 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) 14172 if (TREE_CODE (field) == FIELD_DECL 14173 && !DECL_PADDING_P (field) 14174 && !default_is_empty_type (TREE_TYPE (field))) 14175 return false; 14176 return true; 14177 } 14178 else if (TREE_CODE (type) == ARRAY_TYPE) 14179 return (integer_minus_onep (array_type_nelts (type)) 14180 || TYPE_DOMAIN (type) == NULL_TREE 14181 || default_is_empty_type (TREE_TYPE (type))); 14182 return false; 14183 } 14184 14185 /* Implement TARGET_EMPTY_RECORD_P. Return true if TYPE is an empty type 14186 that shouldn't be passed via stack. */ 14187 14188 bool 14189 default_is_empty_record (const_tree type) 14190 { 14191 if (!abi_version_at_least (12)) 14192 return false; 14193 14194 if (type == error_mark_node) 14195 return false; 14196 14197 if (TREE_ADDRESSABLE (type)) 14198 return false; 14199 14200 return default_is_empty_type (TYPE_MAIN_VARIANT (type)); 14201 } 14202 14203 /* Like int_size_in_bytes, but handle empty records specially. */ 14204 14205 HOST_WIDE_INT 14206 arg_int_size_in_bytes (const_tree type) 14207 { 14208 return TYPE_EMPTY_P (type) ? 0 : int_size_in_bytes (type); 14209 } 14210 14211 /* Like size_in_bytes, but handle empty records specially. */ 14212 14213 tree 14214 arg_size_in_bytes (const_tree type) 14215 { 14216 return TYPE_EMPTY_P (type) ? size_zero_node : size_in_bytes (type); 14217 } 14218 14219 /* Return true if an expression with CODE has to have the same result type as 14220 its first operand. */ 14221 14222 bool 14223 expr_type_first_operand_type_p (tree_code code) 14224 { 14225 switch (code) 14226 { 14227 case NEGATE_EXPR: 14228 case ABS_EXPR: 14229 case BIT_NOT_EXPR: 14230 case PAREN_EXPR: 14231 case CONJ_EXPR: 14232 14233 case PLUS_EXPR: 14234 case MINUS_EXPR: 14235 case MULT_EXPR: 14236 case TRUNC_DIV_EXPR: 14237 case CEIL_DIV_EXPR: 14238 case FLOOR_DIV_EXPR: 14239 case ROUND_DIV_EXPR: 14240 case TRUNC_MOD_EXPR: 14241 case CEIL_MOD_EXPR: 14242 case FLOOR_MOD_EXPR: 14243 case ROUND_MOD_EXPR: 14244 case RDIV_EXPR: 14245 case EXACT_DIV_EXPR: 14246 case MIN_EXPR: 14247 case MAX_EXPR: 14248 case BIT_IOR_EXPR: 14249 case BIT_XOR_EXPR: 14250 case BIT_AND_EXPR: 14251 14252 case LSHIFT_EXPR: 14253 case RSHIFT_EXPR: 14254 case LROTATE_EXPR: 14255 case RROTATE_EXPR: 14256 return true; 14257 14258 default: 14259 return false; 14260 } 14261 } 14262 14263 /* List of pointer types used to declare builtins before we have seen their 14264 real declaration. 14265 14266 Keep the size up to date in tree.h ! */ 14267 const builtin_structptr_type builtin_structptr_types[6] = 14268 { 14269 { fileptr_type_node, ptr_type_node, "FILE" }, 14270 { const_tm_ptr_type_node, const_ptr_type_node, "tm" }, 14271 { fenv_t_ptr_type_node, ptr_type_node, "fenv_t" }, 14272 { const_fenv_t_ptr_type_node, const_ptr_type_node, "fenv_t" }, 14273 { fexcept_t_ptr_type_node, ptr_type_node, "fexcept_t" }, 14274 { const_fexcept_t_ptr_type_node, const_ptr_type_node, "fexcept_t" } 14275 }; 14276 14277 #if CHECKING_P 14278 14279 namespace selftest { 14280 14281 /* Selftests for tree. */ 14282 14283 /* Verify that integer constants are sane. */ 14284 14285 static void 14286 test_integer_constants () 14287 { 14288 ASSERT_TRUE (integer_type_node != NULL); 14289 ASSERT_TRUE (build_int_cst (integer_type_node, 0) != NULL); 14290 14291 tree type = integer_type_node; 14292 14293 tree zero = build_zero_cst (type); 14294 ASSERT_EQ (INTEGER_CST, TREE_CODE (zero)); 14295 ASSERT_EQ (type, TREE_TYPE (zero)); 14296 14297 tree one = build_int_cst (type, 1); 14298 ASSERT_EQ (INTEGER_CST, TREE_CODE (one)); 14299 ASSERT_EQ (type, TREE_TYPE (zero)); 14300 } 14301 14302 /* Verify identifiers. */ 14303 14304 static void 14305 test_identifiers () 14306 { 14307 tree identifier = get_identifier ("foo"); 14308 ASSERT_EQ (3, IDENTIFIER_LENGTH (identifier)); 14309 ASSERT_STREQ ("foo", IDENTIFIER_POINTER (identifier)); 14310 } 14311 14312 /* Verify LABEL_DECL. */ 14313 14314 static void 14315 test_labels () 14316 { 14317 tree identifier = get_identifier ("err"); 14318 tree label_decl = build_decl (UNKNOWN_LOCATION, LABEL_DECL, 14319 identifier, void_type_node); 14320 ASSERT_EQ (-1, LABEL_DECL_UID (label_decl)); 14321 ASSERT_FALSE (FORCED_LABEL (label_decl)); 14322 } 14323 14324 /* Return a new VECTOR_CST node whose type is TYPE and whose values 14325 are given by VALS. */ 14326 14327 static tree 14328 build_vector (tree type, vec<tree> vals MEM_STAT_DECL) 14329 { 14330 gcc_assert (known_eq (vals.length (), TYPE_VECTOR_SUBPARTS (type))); 14331 tree_vector_builder builder (type, vals.length (), 1); 14332 builder.splice (vals); 14333 return builder.build (); 14334 } 14335 14336 /* Check that VECTOR_CST ACTUAL contains the elements in EXPECTED. */ 14337 14338 static void 14339 check_vector_cst (vec<tree> expected, tree actual) 14340 { 14341 ASSERT_KNOWN_EQ (expected.length (), 14342 TYPE_VECTOR_SUBPARTS (TREE_TYPE (actual))); 14343 for (unsigned int i = 0; i < expected.length (); ++i) 14344 ASSERT_EQ (wi::to_wide (expected[i]), 14345 wi::to_wide (vector_cst_elt (actual, i))); 14346 } 14347 14348 /* Check that VECTOR_CST ACTUAL contains NPATTERNS duplicated elements, 14349 and that its elements match EXPECTED. */ 14350 14351 static void 14352 check_vector_cst_duplicate (vec<tree> expected, tree actual, 14353 unsigned int npatterns) 14354 { 14355 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual)); 14356 ASSERT_EQ (1, VECTOR_CST_NELTS_PER_PATTERN (actual)); 14357 ASSERT_EQ (npatterns, vector_cst_encoded_nelts (actual)); 14358 ASSERT_TRUE (VECTOR_CST_DUPLICATE_P (actual)); 14359 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual)); 14360 check_vector_cst (expected, actual); 14361 } 14362 14363 /* Check that VECTOR_CST ACTUAL contains NPATTERNS foreground elements 14364 and NPATTERNS background elements, and that its elements match 14365 EXPECTED. */ 14366 14367 static void 14368 check_vector_cst_fill (vec<tree> expected, tree actual, 14369 unsigned int npatterns) 14370 { 14371 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual)); 14372 ASSERT_EQ (2, VECTOR_CST_NELTS_PER_PATTERN (actual)); 14373 ASSERT_EQ (2 * npatterns, vector_cst_encoded_nelts (actual)); 14374 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual)); 14375 ASSERT_FALSE (VECTOR_CST_STEPPED_P (actual)); 14376 check_vector_cst (expected, actual); 14377 } 14378 14379 /* Check that VECTOR_CST ACTUAL contains NPATTERNS stepped patterns, 14380 and that its elements match EXPECTED. */ 14381 14382 static void 14383 check_vector_cst_stepped (vec<tree> expected, tree actual, 14384 unsigned int npatterns) 14385 { 14386 ASSERT_EQ (npatterns, VECTOR_CST_NPATTERNS (actual)); 14387 ASSERT_EQ (3, VECTOR_CST_NELTS_PER_PATTERN (actual)); 14388 ASSERT_EQ (3 * npatterns, vector_cst_encoded_nelts (actual)); 14389 ASSERT_FALSE (VECTOR_CST_DUPLICATE_P (actual)); 14390 ASSERT_TRUE (VECTOR_CST_STEPPED_P (actual)); 14391 check_vector_cst (expected, actual); 14392 } 14393 14394 /* Test the creation of VECTOR_CSTs. */ 14395 14396 static void 14397 test_vector_cst_patterns (ALONE_CXX_MEM_STAT_INFO) 14398 { 14399 auto_vec<tree, 8> elements (8); 14400 elements.quick_grow (8); 14401 tree element_type = build_nonstandard_integer_type (16, true); 14402 tree vector_type = build_vector_type (element_type, 8); 14403 14404 /* Test a simple linear series with a base of 0 and a step of 1: 14405 { 0, 1, 2, 3, 4, 5, 6, 7 }. */ 14406 for (unsigned int i = 0; i < 8; ++i) 14407 elements[i] = build_int_cst (element_type, i); 14408 tree vector = build_vector (vector_type, elements PASS_MEM_STAT); 14409 check_vector_cst_stepped (elements, vector, 1); 14410 14411 /* Try the same with the first element replaced by 100: 14412 { 100, 1, 2, 3, 4, 5, 6, 7 }. */ 14413 elements[0] = build_int_cst (element_type, 100); 14414 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14415 check_vector_cst_stepped (elements, vector, 1); 14416 14417 /* Try a series that wraps around. 14418 { 100, 65531, 65532, 65533, 65534, 65535, 0, 1 }. */ 14419 for (unsigned int i = 1; i < 8; ++i) 14420 elements[i] = build_int_cst (element_type, (65530 + i) & 0xffff); 14421 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14422 check_vector_cst_stepped (elements, vector, 1); 14423 14424 /* Try a downward series: 14425 { 100, 79, 78, 77, 76, 75, 75, 73 }. */ 14426 for (unsigned int i = 1; i < 8; ++i) 14427 elements[i] = build_int_cst (element_type, 80 - i); 14428 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14429 check_vector_cst_stepped (elements, vector, 1); 14430 14431 /* Try two interleaved series with different bases and steps: 14432 { 100, 53, 66, 206, 62, 212, 58, 218 }. */ 14433 elements[1] = build_int_cst (element_type, 53); 14434 for (unsigned int i = 2; i < 8; i += 2) 14435 { 14436 elements[i] = build_int_cst (element_type, 70 - i * 2); 14437 elements[i + 1] = build_int_cst (element_type, 200 + i * 3); 14438 } 14439 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14440 check_vector_cst_stepped (elements, vector, 2); 14441 14442 /* Try a duplicated value: 14443 { 100, 100, 100, 100, 100, 100, 100, 100 }. */ 14444 for (unsigned int i = 1; i < 8; ++i) 14445 elements[i] = elements[0]; 14446 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14447 check_vector_cst_duplicate (elements, vector, 1); 14448 14449 /* Try an interleaved duplicated value: 14450 { 100, 55, 100, 55, 100, 55, 100, 55 }. */ 14451 elements[1] = build_int_cst (element_type, 55); 14452 for (unsigned int i = 2; i < 8; ++i) 14453 elements[i] = elements[i - 2]; 14454 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14455 check_vector_cst_duplicate (elements, vector, 2); 14456 14457 /* Try a duplicated value with 2 exceptions 14458 { 41, 97, 100, 55, 100, 55, 100, 55 }. */ 14459 elements[0] = build_int_cst (element_type, 41); 14460 elements[1] = build_int_cst (element_type, 97); 14461 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14462 check_vector_cst_fill (elements, vector, 2); 14463 14464 /* Try with and without a step 14465 { 41, 97, 100, 21, 100, 35, 100, 49 }. */ 14466 for (unsigned int i = 3; i < 8; i += 2) 14467 elements[i] = build_int_cst (element_type, i * 7); 14468 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14469 check_vector_cst_stepped (elements, vector, 2); 14470 14471 /* Try a fully-general constant: 14472 { 41, 97, 100, 21, 100, 9990, 100, 49 }. */ 14473 elements[5] = build_int_cst (element_type, 9990); 14474 vector = build_vector (vector_type, elements PASS_MEM_STAT); 14475 check_vector_cst_fill (elements, vector, 4); 14476 } 14477 14478 /* Verify that STRIP_NOPS (NODE) is EXPECTED. 14479 Helper function for test_location_wrappers, to deal with STRIP_NOPS 14480 modifying its argument in-place. */ 14481 14482 static void 14483 check_strip_nops (tree node, tree expected) 14484 { 14485 STRIP_NOPS (node); 14486 ASSERT_EQ (expected, node); 14487 } 14488 14489 /* Verify location wrappers. */ 14490 14491 static void 14492 test_location_wrappers () 14493 { 14494 location_t loc = BUILTINS_LOCATION; 14495 14496 ASSERT_EQ (NULL_TREE, maybe_wrap_with_location (NULL_TREE, loc)); 14497 14498 /* Wrapping a constant. */ 14499 tree int_cst = build_int_cst (integer_type_node, 42); 14500 ASSERT_FALSE (CAN_HAVE_LOCATION_P (int_cst)); 14501 ASSERT_FALSE (location_wrapper_p (int_cst)); 14502 14503 tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc); 14504 ASSERT_TRUE (location_wrapper_p (wrapped_int_cst)); 14505 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_int_cst)); 14506 ASSERT_EQ (int_cst, tree_strip_any_location_wrapper (wrapped_int_cst)); 14507 14508 /* We shouldn't add wrapper nodes for UNKNOWN_LOCATION. */ 14509 ASSERT_EQ (int_cst, maybe_wrap_with_location (int_cst, UNKNOWN_LOCATION)); 14510 14511 /* We shouldn't add wrapper nodes for nodes that CAN_HAVE_LOCATION_P. */ 14512 tree cast = build1 (NOP_EXPR, char_type_node, int_cst); 14513 ASSERT_TRUE (CAN_HAVE_LOCATION_P (cast)); 14514 ASSERT_EQ (cast, maybe_wrap_with_location (cast, loc)); 14515 14516 /* Wrapping a STRING_CST. */ 14517 tree string_cst = build_string (4, "foo"); 14518 ASSERT_FALSE (CAN_HAVE_LOCATION_P (string_cst)); 14519 ASSERT_FALSE (location_wrapper_p (string_cst)); 14520 14521 tree wrapped_string_cst = maybe_wrap_with_location (string_cst, loc); 14522 ASSERT_TRUE (location_wrapper_p (wrapped_string_cst)); 14523 ASSERT_EQ (VIEW_CONVERT_EXPR, TREE_CODE (wrapped_string_cst)); 14524 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_string_cst)); 14525 ASSERT_EQ (string_cst, tree_strip_any_location_wrapper (wrapped_string_cst)); 14526 14527 14528 /* Wrapping a variable. */ 14529 tree int_var = build_decl (UNKNOWN_LOCATION, VAR_DECL, 14530 get_identifier ("some_int_var"), 14531 integer_type_node); 14532 ASSERT_FALSE (CAN_HAVE_LOCATION_P (int_var)); 14533 ASSERT_FALSE (location_wrapper_p (int_var)); 14534 14535 tree wrapped_int_var = maybe_wrap_with_location (int_var, loc); 14536 ASSERT_TRUE (location_wrapper_p (wrapped_int_var)); 14537 ASSERT_EQ (loc, EXPR_LOCATION (wrapped_int_var)); 14538 ASSERT_EQ (int_var, tree_strip_any_location_wrapper (wrapped_int_var)); 14539 14540 /* Verify that "reinterpret_cast<int>(some_int_var)" is not a location 14541 wrapper. */ 14542 tree r_cast = build1 (NON_LVALUE_EXPR, integer_type_node, int_var); 14543 ASSERT_FALSE (location_wrapper_p (r_cast)); 14544 ASSERT_EQ (r_cast, tree_strip_any_location_wrapper (r_cast)); 14545 14546 /* Verify that STRIP_NOPS removes wrappers. */ 14547 check_strip_nops (wrapped_int_cst, int_cst); 14548 check_strip_nops (wrapped_string_cst, string_cst); 14549 check_strip_nops (wrapped_int_var, int_var); 14550 } 14551 14552 /* Run all of the selftests within this file. */ 14553 14554 void 14555 tree_c_tests () 14556 { 14557 test_integer_constants (); 14558 test_identifiers (); 14559 test_labels (); 14560 test_vector_cst_patterns (); 14561 test_location_wrappers (); 14562 } 14563 14564 } // namespace selftest 14565 14566 #endif /* CHECKING_P */ 14567 14568 #include "gt-tree.h" 14569