1 /* Front-end tree definitions for GNU compiler. 2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 4 Free Software Foundation, Inc. 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 3, or (at your option) any later 11 version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING3. If not see 20 <http://www.gnu.org/licenses/>. */ 21 22 #ifndef GCC_TREE_H 23 #define GCC_TREE_H 24 25 #include "hashtab.h" 26 #include "machmode.h" 27 #include "input.h" 28 #include "statistics.h" 29 #include "vec.h" 30 #include "vecir.h" 31 #include "double-int.h" 32 #include "real.h" 33 #include "fixed-value.h" 34 #include "alias.h" 35 #include "flags.h" 36 37 /* Codes of tree nodes */ 38 39 #define DEFTREECODE(SYM, STRING, TYPE, NARGS) SYM, 40 #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE, 41 42 enum tree_code { 43 #include "all-tree.def" 44 MAX_TREE_CODES 45 }; 46 47 #undef DEFTREECODE 48 #undef END_OF_BASE_TREE_CODES 49 50 extern unsigned char tree_contains_struct[MAX_TREE_CODES][64]; 51 #define CODE_CONTAINS_STRUCT(CODE, STRUCT) (tree_contains_struct[(CODE)][(STRUCT)]) 52 53 /* Number of language-independent tree codes. */ 54 #define NUM_TREE_CODES ((int) LAST_AND_UNUSED_TREE_CODE) 55 56 /* Tree code classes. */ 57 58 /* Each tree_code has an associated code class represented by a 59 TREE_CODE_CLASS. */ 60 61 enum tree_code_class { 62 tcc_exceptional, /* An exceptional code (fits no category). */ 63 tcc_constant, /* A constant. */ 64 /* Order of tcc_type and tcc_declaration is important. */ 65 tcc_type, /* A type object code. */ 66 tcc_declaration, /* A declaration (also serving as variable refs). */ 67 tcc_reference, /* A reference to storage. */ 68 tcc_comparison, /* A comparison expression. */ 69 tcc_unary, /* A unary arithmetic expression. */ 70 tcc_binary, /* A binary arithmetic expression. */ 71 tcc_statement, /* A statement expression, which have side effects 72 but usually no interesting value. */ 73 tcc_vl_exp, /* A function call or other expression with a 74 variable-length operand vector. */ 75 tcc_expression /* Any other expression. */ 76 }; 77 78 /* Each tree code class has an associated string representation. 79 These must correspond to the tree_code_class entries. */ 80 81 extern const char *const tree_code_class_strings[]; 82 83 /* Returns the string representing CLASS. */ 84 85 #define TREE_CODE_CLASS_STRING(CLASS)\ 86 tree_code_class_strings[(int) (CLASS)] 87 88 extern const enum tree_code_class tree_code_type[]; 89 #define TREE_CODE_CLASS(CODE) tree_code_type[(int) (CODE)] 90 91 /* Nonzero if CODE represents an exceptional code. */ 92 93 #define EXCEPTIONAL_CLASS_P(CODE)\ 94 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_exceptional) 95 96 /* Nonzero if CODE represents a constant. */ 97 98 #define CONSTANT_CLASS_P(CODE)\ 99 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_constant) 100 101 /* Nonzero if CODE represents a type. */ 102 103 #define TYPE_P(CODE)\ 104 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_type) 105 106 /* Nonzero if CODE represents a declaration. */ 107 108 #define DECL_P(CODE)\ 109 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_declaration) 110 111 /* Nonzero if DECL represents a VAR_DECL or FUNCTION_DECL. */ 112 113 #define VAR_OR_FUNCTION_DECL_P(DECL)\ 114 (TREE_CODE (DECL) == VAR_DECL || TREE_CODE (DECL) == FUNCTION_DECL) 115 116 /* Nonzero if CODE represents a INDIRECT_REF. Keep these checks in 117 ascending code order. */ 118 119 #define INDIRECT_REF_P(CODE)\ 120 (TREE_CODE (CODE) == INDIRECT_REF) 121 122 /* Nonzero if CODE represents a reference. */ 123 124 #define REFERENCE_CLASS_P(CODE)\ 125 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_reference) 126 127 /* Nonzero if CODE represents a comparison. */ 128 129 #define COMPARISON_CLASS_P(CODE)\ 130 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_comparison) 131 132 /* Nonzero if CODE represents a unary arithmetic expression. */ 133 134 #define UNARY_CLASS_P(CODE)\ 135 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_unary) 136 137 /* Nonzero if CODE represents a binary arithmetic expression. */ 138 139 #define BINARY_CLASS_P(CODE)\ 140 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_binary) 141 142 /* Nonzero if CODE represents a statement expression. */ 143 144 #define STATEMENT_CLASS_P(CODE)\ 145 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_statement) 146 147 /* Nonzero if CODE represents a function call-like expression with a 148 variable-length operand vector. */ 149 150 #define VL_EXP_CLASS_P(CODE)\ 151 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_vl_exp) 152 153 /* Nonzero if CODE represents any other expression. */ 154 155 #define EXPRESSION_CLASS_P(CODE)\ 156 (TREE_CODE_CLASS (TREE_CODE (CODE)) == tcc_expression) 157 158 /* Returns nonzero iff CODE represents a type or declaration. */ 159 160 #define IS_TYPE_OR_DECL_P(CODE)\ 161 (TYPE_P (CODE) || DECL_P (CODE)) 162 163 /* Returns nonzero iff CLASS is the tree-code class of an 164 expression. */ 165 166 #define IS_EXPR_CODE_CLASS(CLASS)\ 167 ((CLASS) >= tcc_reference && (CLASS) <= tcc_expression) 168 169 /* Returns nonzero iff NODE is an expression of some kind. */ 170 171 #define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE))) 172 173 /* Number of argument-words in each kind of tree-node. */ 174 175 extern const unsigned char tree_code_length[]; 176 #define TREE_CODE_LENGTH(CODE) tree_code_length[(int) (CODE)] 177 178 /* Names of tree components. */ 179 180 extern const char *const tree_code_name[]; 181 182 /* We have to be able to tell cgraph about the needed-ness of the target 183 of an alias. This requires that the decl have been defined. Aliases 184 that precede their definition have to be queued for later processing. */ 185 186 /* The deferred processing proceeds in several passes. We memorize the 187 diagnostics emitted for a pair to prevent repeating messages when the 188 queue gets re-scanned after possible updates. */ 189 190 typedef enum { 191 ALIAS_DIAG_NONE = 0x0, 192 ALIAS_DIAG_TO_UNDEF = 0x1, 193 ALIAS_DIAG_TO_EXTERN = 0x2 194 } alias_diag_flags; 195 196 typedef struct GTY(()) alias_pair 197 { 198 tree decl; 199 tree target; 200 int emitted_diags; /* alias_diags already emitted for this pair. */ 201 } alias_pair; 202 203 /* Define gc'd vector type. */ 204 DEF_VEC_O(alias_pair); 205 DEF_VEC_ALLOC_O(alias_pair,gc); 206 207 extern GTY(()) VEC(alias_pair,gc) * alias_pairs; 208 209 210 /* Classify which part of the compiler has defined a given builtin function. 212 Note that we assume below that this is no more than two bits. */ 213 enum built_in_class 214 { 215 NOT_BUILT_IN = 0, 216 BUILT_IN_FRONTEND, 217 BUILT_IN_MD, 218 BUILT_IN_NORMAL 219 }; 220 221 /* Names for the above. */ 222 extern const char *const built_in_class_names[4]; 223 224 /* Codes that identify the various built in functions 225 so that expand_call can identify them quickly. */ 226 227 #define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM, 228 enum built_in_function 229 { 230 #include "builtins.def" 231 232 /* Complex division routines in libgcc. These are done via builtins 233 because emit_library_call_value can't handle complex values. */ 234 BUILT_IN_COMPLEX_MUL_MIN, 235 BUILT_IN_COMPLEX_MUL_MAX 236 = BUILT_IN_COMPLEX_MUL_MIN 237 + MAX_MODE_COMPLEX_FLOAT 238 - MIN_MODE_COMPLEX_FLOAT, 239 240 BUILT_IN_COMPLEX_DIV_MIN, 241 BUILT_IN_COMPLEX_DIV_MAX 242 = BUILT_IN_COMPLEX_DIV_MIN 243 + MAX_MODE_COMPLEX_FLOAT 244 - MIN_MODE_COMPLEX_FLOAT, 245 246 /* Upper bound on non-language-specific builtins. */ 247 END_BUILTINS 248 }; 249 #undef DEF_BUILTIN 250 251 /* Names for the above. */ 252 extern const char * built_in_names[(int) END_BUILTINS]; 253 254 /* Helper macros for math builtins. */ 255 256 #define BUILTIN_EXP10_P(FN) \ 257 ((FN) == BUILT_IN_EXP10 || (FN) == BUILT_IN_EXP10F || (FN) == BUILT_IN_EXP10L \ 258 || (FN) == BUILT_IN_POW10 || (FN) == BUILT_IN_POW10F || (FN) == BUILT_IN_POW10L) 259 260 #define BUILTIN_EXPONENT_P(FN) (BUILTIN_EXP10_P (FN) \ 261 || (FN) == BUILT_IN_EXP || (FN) == BUILT_IN_EXPF || (FN) == BUILT_IN_EXPL \ 262 || (FN) == BUILT_IN_EXP2 || (FN) == BUILT_IN_EXP2F || (FN) == BUILT_IN_EXP2L) 263 264 #define BUILTIN_SQRT_P(FN) \ 265 ((FN) == BUILT_IN_SQRT || (FN) == BUILT_IN_SQRTF || (FN) == BUILT_IN_SQRTL) 266 267 #define BUILTIN_CBRT_P(FN) \ 268 ((FN) == BUILT_IN_CBRT || (FN) == BUILT_IN_CBRTF || (FN) == BUILT_IN_CBRTL) 269 270 #define BUILTIN_ROOT_P(FN) (BUILTIN_SQRT_P (FN) || BUILTIN_CBRT_P (FN)) 271 272 #define CASE_FLT_FN(FN) case FN: case FN##F: case FN##L 273 #define CASE_FLT_FN_REENT(FN) case FN##_R: case FN##F_R: case FN##L_R 274 #define CASE_INT_FN(FN) case FN: case FN##L: case FN##LL 275 276 /* An array of _DECL trees for the above. */ 277 extern GTY(()) tree built_in_decls[(int) END_BUILTINS]; 278 extern GTY(()) tree implicit_built_in_decls[(int) END_BUILTINS]; 279 280 /* In an OMP_CLAUSE node. */ 282 283 /* Number of operands and names for each clause. */ 284 extern unsigned const char omp_clause_num_ops[]; 285 extern const char * const omp_clause_code_name[]; 286 287 /* Clause codes. Do not reorder, as this is used to index into the tables 288 omp_clause_num_ops and omp_clause_code_name. */ 289 enum omp_clause_code 290 { 291 /* Clause zero is special-cased inside the parser 292 (c_parser_omp_variable_list). */ 293 OMP_CLAUSE_ERROR = 0, 294 295 /* OpenMP clause: private (variable_list). */ 296 OMP_CLAUSE_PRIVATE, 297 298 /* OpenMP clause: shared (variable_list). */ 299 OMP_CLAUSE_SHARED, 300 301 /* OpenMP clause: firstprivate (variable_list). */ 302 OMP_CLAUSE_FIRSTPRIVATE, 303 304 /* OpenMP clause: lastprivate (variable_list). */ 305 OMP_CLAUSE_LASTPRIVATE, 306 307 /* OpenMP clause: reduction (operator:variable_list). 308 OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator. 309 Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var. 310 Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var 311 into the shared one. 312 Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL 313 placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}. */ 314 OMP_CLAUSE_REDUCTION, 315 316 /* OpenMP clause: copyin (variable_list). */ 317 OMP_CLAUSE_COPYIN, 318 319 /* OpenMP clause: copyprivate (variable_list). */ 320 OMP_CLAUSE_COPYPRIVATE, 321 322 /* OpenMP clause: if (scalar-expression). */ 323 OMP_CLAUSE_IF, 324 325 /* OpenMP clause: num_threads (integer-expression). */ 326 OMP_CLAUSE_NUM_THREADS, 327 328 /* OpenMP clause: schedule. */ 329 OMP_CLAUSE_SCHEDULE, 330 331 /* OpenMP clause: nowait. */ 332 OMP_CLAUSE_NOWAIT, 333 334 /* OpenMP clause: ordered. */ 335 OMP_CLAUSE_ORDERED, 336 337 /* OpenMP clause: default. */ 338 OMP_CLAUSE_DEFAULT, 339 340 /* OpenMP clause: collapse (constant-integer-expression). */ 341 OMP_CLAUSE_COLLAPSE, 342 343 /* OpenMP clause: untied. */ 344 OMP_CLAUSE_UNTIED 345 }; 346 347 /* The definition of tree nodes fills the next several pages. */ 349 350 /* A tree node can represent a data type, a variable, an expression 351 or a statement. Each node has a TREE_CODE which says what kind of 352 thing it represents. Some common codes are: 353 INTEGER_TYPE -- represents a type of integers. 354 ARRAY_TYPE -- represents a type of pointer. 355 VAR_DECL -- represents a declared variable. 356 INTEGER_CST -- represents a constant integer value. 357 PLUS_EXPR -- represents a sum (an expression). 358 359 As for the contents of a tree node: there are some fields 360 that all nodes share. Each TREE_CODE has various special-purpose 361 fields as well. The fields of a node are never accessed directly, 362 always through accessor macros. */ 363 364 /* Every kind of tree node starts with this structure, 365 so all nodes have these fields. 366 367 See the accessor macros, defined below, for documentation of the 368 fields. */ 369 370 struct GTY(()) tree_base { 371 ENUM_BITFIELD(tree_code) code : 16; 372 373 unsigned side_effects_flag : 1; 374 unsigned constant_flag : 1; 375 unsigned addressable_flag : 1; 376 unsigned volatile_flag : 1; 377 unsigned readonly_flag : 1; 378 unsigned unsigned_flag : 1; 379 unsigned asm_written_flag: 1; 380 unsigned nowarning_flag : 1; 381 382 unsigned used_flag : 1; 383 unsigned nothrow_flag : 1; 384 unsigned static_flag : 1; 385 unsigned public_flag : 1; 386 unsigned private_flag : 1; 387 unsigned protected_flag : 1; 388 unsigned deprecated_flag : 1; 389 unsigned saturating_flag : 1; 390 391 unsigned default_def_flag : 1; 392 unsigned lang_flag_0 : 1; 393 unsigned lang_flag_1 : 1; 394 unsigned lang_flag_2 : 1; 395 unsigned lang_flag_3 : 1; 396 unsigned lang_flag_4 : 1; 397 unsigned lang_flag_5 : 1; 398 unsigned lang_flag_6 : 1; 399 400 unsigned visited : 1; 401 unsigned packed_flag : 1; 402 unsigned user_align : 1; 403 unsigned nameless_flag : 1; 404 unsigned expr_folded_flag : 1; 405 406 unsigned spare : 11; 407 408 /* This field is only used with type nodes; the only reason it is present 409 in tree_base instead of tree_type is to save space. The size of the 410 field must be large enough to hold addr_space_t values. */ 411 unsigned address_space : 8; 412 }; 413 414 struct GTY(()) tree_common { 415 struct tree_base base; 416 tree chain; 417 tree type; 418 }; 419 420 /* The following table lists the uses of each of the above flags and 421 for which types of nodes they are defined. 422 423 addressable_flag: 424 425 TREE_ADDRESSABLE in 426 VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL 427 all types 428 CONSTRUCTOR, IDENTIFIER_NODE 429 STMT_EXPR, it means we want the result of the enclosed expression 430 431 CALL_EXPR_TAILCALL in 432 CALL_EXPR 433 434 CASE_LOW_SEEN in 435 CASE_LABEL_EXPR 436 437 static_flag: 438 439 TREE_STATIC in 440 VAR_DECL, FUNCTION_DECL 441 CONSTRUCTOR 442 443 TREE_NO_TRAMPOLINE in 444 ADDR_EXPR 445 446 BINFO_VIRTUAL_P in 447 TREE_BINFO 448 449 TREE_SYMBOL_REFERENCED in 450 IDENTIFIER_NODE 451 452 CLEANUP_EH_ONLY in 453 TARGET_EXPR, WITH_CLEANUP_EXPR 454 455 TRY_CATCH_IS_CLEANUP in 456 TRY_CATCH_EXPR 457 458 ASM_INPUT_P in 459 ASM_EXPR 460 461 TYPE_REF_CAN_ALIAS_ALL in 462 POINTER_TYPE, REFERENCE_TYPE 463 464 MOVE_NONTEMPORAL in 465 MODIFY_EXPR 466 467 CASE_HIGH_SEEN in 468 CASE_LABEL_EXPR 469 470 CALL_CANNOT_INLINE_P in 471 CALL_EXPR 472 473 ENUM_IS_SCOPED in 474 ENUMERAL_TYPE 475 476 public_flag: 477 478 TREE_OVERFLOW in 479 INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST 480 481 TREE_PUBLIC in 482 VAR_DECL, FUNCTION_DECL 483 IDENTIFIER_NODE 484 485 ASM_VOLATILE_P in 486 ASM_EXPR 487 488 CALL_EXPR_VA_ARG_PACK in 489 CALL_EXPR 490 491 TYPE_CACHED_VALUES_P in 492 all types 493 494 SAVE_EXPR_RESOLVED_P in 495 SAVE_EXPR 496 497 OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in 498 OMP_CLAUSE_LASTPRIVATE 499 500 OMP_CLAUSE_PRIVATE_DEBUG in 501 OMP_CLAUSE_PRIVATE 502 503 private_flag: 504 505 TREE_PRIVATE in 506 all decls 507 508 CALL_EXPR_RETURN_SLOT_OPT in 509 CALL_EXPR 510 511 OMP_SECTION_LAST in 512 OMP_SECTION 513 514 OMP_PARALLEL_COMBINED in 515 OMP_PARALLEL 516 OMP_CLAUSE_PRIVATE_OUTER_REF in 517 OMP_CLAUSE_PRIVATE 518 519 TYPE_REF_IS_RVALUE in 520 REFERENCE_TYPE 521 522 protected_flag: 523 524 TREE_PROTECTED in 525 BLOCK 526 all decls 527 528 CALL_FROM_THUNK_P and 529 ALLOCA_FOR_VAR_P in 530 CALL_EXPR 531 532 side_effects_flag: 533 534 TREE_SIDE_EFFECTS in 535 all expressions 536 all decls 537 all constants 538 539 FORCED_LABEL in 540 LABEL_DECL 541 542 volatile_flag: 543 544 TREE_THIS_VOLATILE in 545 all expressions 546 all decls 547 548 TYPE_VOLATILE in 549 all types 550 551 readonly_flag: 552 553 TREE_READONLY in 554 all expressions 555 all decls 556 557 TYPE_READONLY in 558 all types 559 560 constant_flag: 561 562 TREE_CONSTANT in 563 all expressions 564 all decls 565 all constants 566 567 TYPE_SIZES_GIMPLIFIED in 568 all types 569 570 unsigned_flag: 571 572 TYPE_UNSIGNED in 573 all types 574 575 DECL_UNSIGNED in 576 all decls 577 578 REGISTER_DEFS_IN_THIS_STMT in 579 all expressions (tree-into-ssa.c) 580 581 asm_written_flag: 582 583 TREE_ASM_WRITTEN in 584 VAR_DECL, FUNCTION_DECL 585 RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE 586 BLOCK, SSA_NAME, STRING_CST 587 588 NECESSARY in 589 all expressions (tree-ssa-dce.c, tree-ssa-pre.c) 590 591 used_flag: 592 593 TREE_USED in 594 all expressions 595 all decls 596 IDENTIFIER_NODE 597 598 nothrow_flag: 599 600 TREE_NOTHROW in 601 CALL_EXPR 602 FUNCTION_DECL 603 604 TYPE_ALIGN_OK in 605 all types 606 607 TREE_THIS_NOTRAP in 608 INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF 609 610 deprecated_flag: 611 612 TREE_DEPRECATED in 613 all decls 614 all types 615 616 IDENTIFIER_TRANSPARENT_ALIAS in 617 IDENTIFIER_NODE 618 619 STMT_IN_SSA_EDGE_WORKLIST in 620 all expressions (tree-ssa-propagate.c) 621 622 visited: 623 624 TREE_VISITED in 625 all trees (used liberally by many passes) 626 627 saturating_flag: 628 629 TYPE_SATURATING in 630 all types 631 632 nowarning_flag: 633 634 TREE_NO_WARNING in 635 all expressions 636 all decls 637 638 default_def_flag: 639 640 TYPE_VECTOR_OPAQUE in 641 VECTOR_TYPE 642 643 SSA_NAME_IS_DEFAULT_DEF in 644 SSA_NAME 645 646 expr_folded_flag: 647 648 EXPR_FOLDED in 649 all expressions 650 all decls 651 all constants 652 */ 653 654 #undef DEFTREESTRUCT 655 #define DEFTREESTRUCT(ENUM, NAME) ENUM, 656 enum tree_node_structure_enum { 657 #include "treestruct.def" 658 LAST_TS_ENUM 659 }; 660 #undef DEFTREESTRUCT 661 662 /* Define accessors for the fields that all tree nodes have 663 (though some fields are not used for all kinds of nodes). */ 664 665 /* The tree-code says what kind of node it is. 666 Codes are defined in tree.def. */ 667 #define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code) 668 #define TREE_SET_CODE(NODE, VALUE) ((NODE)->base.code = (VALUE)) 669 670 /* When checking is enabled, errors will be generated if a tree node 671 is accessed incorrectly. The macros die with a fatal error. */ 672 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) 673 674 #define TREE_CHECK(T, CODE) __extension__ \ 675 ({ __typeof (T) const __t = (T); \ 676 if (TREE_CODE (__t) != (CODE)) \ 677 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 678 (CODE), 0); \ 679 __t; }) 680 681 #define TREE_NOT_CHECK(T, CODE) __extension__ \ 682 ({ __typeof (T) const __t = (T); \ 683 if (TREE_CODE (__t) == (CODE)) \ 684 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 685 (CODE), 0); \ 686 __t; }) 687 688 #define TREE_CHECK2(T, CODE1, CODE2) __extension__ \ 689 ({ __typeof (T) const __t = (T); \ 690 if (TREE_CODE (__t) != (CODE1) \ 691 && TREE_CODE (__t) != (CODE2)) \ 692 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 693 (CODE1), (CODE2), 0); \ 694 __t; }) 695 696 #define TREE_NOT_CHECK2(T, CODE1, CODE2) __extension__ \ 697 ({ __typeof (T) const __t = (T); \ 698 if (TREE_CODE (__t) == (CODE1) \ 699 || TREE_CODE (__t) == (CODE2)) \ 700 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 701 (CODE1), (CODE2), 0); \ 702 __t; }) 703 704 #define TREE_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \ 705 ({ __typeof (T) const __t = (T); \ 706 if (TREE_CODE (__t) != (CODE1) \ 707 && TREE_CODE (__t) != (CODE2) \ 708 && TREE_CODE (__t) != (CODE3)) \ 709 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 710 (CODE1), (CODE2), (CODE3), 0); \ 711 __t; }) 712 713 #define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) __extension__ \ 714 ({ __typeof (T) const __t = (T); \ 715 if (TREE_CODE (__t) == (CODE1) \ 716 || TREE_CODE (__t) == (CODE2) \ 717 || TREE_CODE (__t) == (CODE3)) \ 718 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 719 (CODE1), (CODE2), (CODE3), 0); \ 720 __t; }) 721 722 #define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \ 723 ({ __typeof (T) const __t = (T); \ 724 if (TREE_CODE (__t) != (CODE1) \ 725 && TREE_CODE (__t) != (CODE2) \ 726 && TREE_CODE (__t) != (CODE3) \ 727 && TREE_CODE (__t) != (CODE4)) \ 728 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 729 (CODE1), (CODE2), (CODE3), (CODE4), 0); \ 730 __t; }) 731 732 #define NON_TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) __extension__ \ 733 ({ __typeof (T) const __t = (T); \ 734 if (TREE_CODE (__t) == (CODE1) \ 735 || TREE_CODE (__t) == (CODE2) \ 736 || TREE_CODE (__t) == (CODE3) \ 737 || TREE_CODE (__t) == (CODE4)) \ 738 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 739 (CODE1), (CODE2), (CODE3), (CODE4), 0); \ 740 __t; }) 741 742 #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \ 743 ({ __typeof (T) const __t = (T); \ 744 if (TREE_CODE (__t) != (CODE1) \ 745 && TREE_CODE (__t) != (CODE2) \ 746 && TREE_CODE (__t) != (CODE3) \ 747 && TREE_CODE (__t) != (CODE4) \ 748 && TREE_CODE (__t) != (CODE5)) \ 749 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 750 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\ 751 __t; }) 752 753 #define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) __extension__ \ 754 ({ __typeof (T) const __t = (T); \ 755 if (TREE_CODE (__t) == (CODE1) \ 756 || TREE_CODE (__t) == (CODE2) \ 757 || TREE_CODE (__t) == (CODE3) \ 758 || TREE_CODE (__t) == (CODE4) \ 759 || TREE_CODE (__t) == (CODE5)) \ 760 tree_not_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 761 (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), 0);\ 762 __t; }) 763 764 #define CONTAINS_STRUCT_CHECK(T, STRUCT) __extension__ \ 765 ({ __typeof (T) const __t = (T); \ 766 if (tree_contains_struct[TREE_CODE(__t)][(STRUCT)] != 1) \ 767 tree_contains_struct_check_failed (__t, (STRUCT), __FILE__, __LINE__, \ 768 __FUNCTION__); \ 769 __t; }) 770 771 #define TREE_CLASS_CHECK(T, CLASS) __extension__ \ 772 ({ __typeof (T) const __t = (T); \ 773 if (TREE_CODE_CLASS (TREE_CODE(__t)) != (CLASS)) \ 774 tree_class_check_failed (__t, (CLASS), __FILE__, __LINE__, \ 775 __FUNCTION__); \ 776 __t; }) 777 778 #define TREE_RANGE_CHECK(T, CODE1, CODE2) __extension__ \ 779 ({ __typeof (T) const __t = (T); \ 780 if (TREE_CODE (__t) < (CODE1) || TREE_CODE (__t) > (CODE2)) \ 781 tree_range_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 782 (CODE1), (CODE2)); \ 783 __t; }) 784 785 #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) __extension__ \ 786 ({ __typeof (T) const __t = (T); \ 787 if (TREE_CODE (__t) != OMP_CLAUSE) \ 788 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 789 OMP_CLAUSE, 0); \ 790 if (__t->omp_clause.code != (CODE)) \ 791 omp_clause_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 792 (CODE)); \ 793 __t; }) 794 795 #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) __extension__ \ 796 ({ __typeof (T) const __t = (T); \ 797 if (TREE_CODE (__t) != OMP_CLAUSE) \ 798 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 799 OMP_CLAUSE, 0); \ 800 if ((int) __t->omp_clause.code < (int) (CODE1) \ 801 || (int) __t->omp_clause.code > (int) (CODE2)) \ 802 omp_clause_range_check_failed (__t, __FILE__, __LINE__, \ 803 __FUNCTION__, (CODE1), (CODE2)); \ 804 __t; }) 805 806 /* These checks have to be special cased. */ 807 #define EXPR_CHECK(T) __extension__ \ 808 ({ __typeof (T) const __t = (T); \ 809 char const __c = TREE_CODE_CLASS (TREE_CODE (__t)); \ 810 if (!IS_EXPR_CODE_CLASS (__c)) \ 811 tree_class_check_failed (__t, tcc_expression, __FILE__, __LINE__, \ 812 __FUNCTION__); \ 813 __t; }) 814 815 /* These checks have to be special cased. */ 816 #define NON_TYPE_CHECK(T) __extension__ \ 817 ({ __typeof (T) const __t = (T); \ 818 if (TYPE_P (__t)) \ 819 tree_not_class_check_failed (__t, tcc_type, __FILE__, __LINE__, \ 820 __FUNCTION__); \ 821 __t; }) 822 823 #define TREE_VEC_ELT_CHECK(T, I) __extension__ \ 824 (*({__typeof (T) const __t = (T); \ 825 const int __i = (I); \ 826 if (TREE_CODE (__t) != TREE_VEC) \ 827 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 828 TREE_VEC, 0); \ 829 if (__i < 0 || __i >= __t->vec.length) \ 830 tree_vec_elt_check_failed (__i, __t->vec.length, \ 831 __FILE__, __LINE__, __FUNCTION__); \ 832 &__t->vec.a[__i]; })) 833 834 #define OMP_CLAUSE_ELT_CHECK(T, I) __extension__ \ 835 (*({__typeof (T) const __t = (T); \ 836 const int __i = (I); \ 837 if (TREE_CODE (__t) != OMP_CLAUSE) \ 838 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, \ 839 OMP_CLAUSE, 0); \ 840 if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code]) \ 841 omp_clause_operand_check_failed (__i, __t, __FILE__, __LINE__, \ 842 __FUNCTION__); \ 843 &__t->omp_clause.ops[__i]; })) 844 845 /* Special checks for TREE_OPERANDs. */ 846 #define TREE_OPERAND_CHECK(T, I) __extension__ \ 847 (*({__typeof (T) const __t = EXPR_CHECK (T); \ 848 const int __i = (I); \ 849 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \ 850 tree_operand_check_failed (__i, __t, \ 851 __FILE__, __LINE__, __FUNCTION__); \ 852 &__t->exp.operands[__i]; })) 853 854 #define TREE_OPERAND_CHECK_CODE(T, CODE, I) __extension__ \ 855 (*({__typeof (T) const __t = (T); \ 856 const int __i = (I); \ 857 if (TREE_CODE (__t) != CODE) \ 858 tree_check_failed (__t, __FILE__, __LINE__, __FUNCTION__, (CODE), 0);\ 859 if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t)) \ 860 tree_operand_check_failed (__i, __t, \ 861 __FILE__, __LINE__, __FUNCTION__); \ 862 &__t->exp.operands[__i]; })) 863 864 /* Nodes are chained together for many purposes. 865 Types are chained together to record them for being output to the debugger 866 (see the function `chain_type'). 867 Decls in the same scope are chained together to record the contents 868 of the scope. 869 Statement nodes for successive statements used to be chained together. 870 Often lists of things are represented by TREE_LIST nodes that 871 are chained together. */ 872 873 #define TREE_CHAIN(NODE) __extension__ \ 874 (*({__typeof (NODE) const __t = (NODE); \ 875 &__t->common.chain; })) 876 877 /* In all nodes that are expressions, this is the data type of the expression. 878 In POINTER_TYPE nodes, this is the type that the pointer points to. 879 In ARRAY_TYPE nodes, this is the type of the elements. 880 In VECTOR_TYPE nodes, this is the type of the elements. */ 881 #define TREE_TYPE(NODE) __extension__ \ 882 (*({__typeof (NODE) const __t = (NODE); \ 883 &__t->common.type; })) 884 885 extern void tree_contains_struct_check_failed (const_tree, 886 const enum tree_node_structure_enum, 887 const char *, int, const char *) 888 ATTRIBUTE_NORETURN; 889 890 extern void tree_check_failed (const_tree, const char *, int, const char *, 891 ...) ATTRIBUTE_NORETURN; 892 extern void tree_not_check_failed (const_tree, const char *, int, const char *, 893 ...) ATTRIBUTE_NORETURN; 894 extern void tree_class_check_failed (const_tree, const enum tree_code_class, 895 const char *, int, const char *) 896 ATTRIBUTE_NORETURN; 897 extern void tree_range_check_failed (const_tree, const char *, int, 898 const char *, enum tree_code, 899 enum tree_code) 900 ATTRIBUTE_NORETURN; 901 extern void tree_not_class_check_failed (const_tree, 902 const enum tree_code_class, 903 const char *, int, const char *) 904 ATTRIBUTE_NORETURN; 905 extern void tree_vec_elt_check_failed (int, int, const char *, 906 int, const char *) 907 ATTRIBUTE_NORETURN; 908 extern void phi_node_elt_check_failed (int, int, const char *, 909 int, const char *) 910 ATTRIBUTE_NORETURN; 911 extern void tree_operand_check_failed (int, const_tree, 912 const char *, int, const char *) 913 ATTRIBUTE_NORETURN; 914 extern void omp_clause_check_failed (const_tree, const char *, int, 915 const char *, enum omp_clause_code) 916 ATTRIBUTE_NORETURN; 917 extern void omp_clause_operand_check_failed (int, const_tree, const char *, 918 int, const char *) 919 ATTRIBUTE_NORETURN; 920 extern void omp_clause_range_check_failed (const_tree, const char *, int, 921 const char *, enum omp_clause_code, 922 enum omp_clause_code) 923 ATTRIBUTE_NORETURN; 924 925 #else /* not ENABLE_TREE_CHECKING, or not gcc */ 926 927 #define CONTAINS_STRUCT_CHECK(T, ENUM) (T) 928 #define TREE_CHECK(T, CODE) (T) 929 #define TREE_NOT_CHECK(T, CODE) (T) 930 #define TREE_CHECK2(T, CODE1, CODE2) (T) 931 #define TREE_NOT_CHECK2(T, CODE1, CODE2) (T) 932 #define TREE_CHECK3(T, CODE1, CODE2, CODE3) (T) 933 #define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) (T) 934 #define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T) 935 #define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T) 936 #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T) 937 #define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T) 938 #define TREE_CLASS_CHECK(T, CODE) (T) 939 #define TREE_RANGE_CHECK(T, CODE1, CODE2) (T) 940 #define EXPR_CHECK(T) (T) 941 #define NON_TYPE_CHECK(T) (T) 942 #define TREE_VEC_ELT_CHECK(T, I) ((T)->vec.a[I]) 943 #define TREE_OPERAND_CHECK(T, I) ((T)->exp.operands[I]) 944 #define TREE_OPERAND_CHECK_CODE(T, CODE, I) ((T)->exp.operands[I]) 945 #define OMP_CLAUSE_ELT_CHECK(T, i) ((T)->omp_clause.ops[i]) 946 #define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) (T) 947 #define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) (T) 948 949 #define TREE_CHAIN(NODE) ((NODE)->common.chain) 950 #define TREE_TYPE(NODE) ((NODE)->common.type) 951 952 #endif 953 954 #define TREE_BLOCK(NODE) *(tree_block (NODE)) 955 956 #include "tree-check.h" 957 958 #define TYPE_CHECK(T) TREE_CLASS_CHECK (T, tcc_type) 959 #define DECL_MINIMAL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_MINIMAL) 960 #define DECL_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_COMMON) 961 #define DECL_WRTL_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WRTL) 962 #define DECL_WITH_VIS_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_WITH_VIS) 963 #define DECL_NON_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_NON_COMMON) 964 #define CST_CHECK(T) TREE_CLASS_CHECK (T, tcc_constant) 965 #define STMT_CHECK(T) TREE_CLASS_CHECK (T, tcc_statement) 966 #define VL_EXP_CHECK(T) TREE_CLASS_CHECK (T, tcc_vl_exp) 967 #define FUNC_OR_METHOD_CHECK(T) TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE) 968 #define PTR_OR_REF_CHECK(T) TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE) 969 970 #define RECORD_OR_UNION_CHECK(T) \ 971 TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE) 972 #define NOT_RECORD_OR_UNION_CHECK(T) \ 973 TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE) 974 975 #define NUMERICAL_TYPE_CHECK(T) \ 976 TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE, \ 977 FIXED_POINT_TYPE) 978 979 /* Here is how primitive or already-canonicalized types' hash codes 980 are made. */ 981 #define TYPE_HASH(TYPE) (TYPE_UID (TYPE)) 982 983 /* A simple hash function for an arbitrary tree node. This must not be 984 used in hash tables which are saved to a PCH. */ 985 #define TREE_HASH(NODE) ((size_t) (NODE) & 0777777) 986 987 /* Tests if CODE is a conversion expr (NOP_EXPR or CONVERT_EXPR). */ 988 #define CONVERT_EXPR_CODE_P(CODE) \ 989 ((CODE) == NOP_EXPR || (CODE) == CONVERT_EXPR) 990 991 /* Similarly, but accept an expressions instead of a tree code. */ 992 #define CONVERT_EXPR_P(EXP) CONVERT_EXPR_CODE_P (TREE_CODE (EXP)) 993 994 /* Generate case for NOP_EXPR, CONVERT_EXPR. */ 995 996 #define CASE_CONVERT \ 997 case NOP_EXPR: \ 998 case CONVERT_EXPR 999 1000 /* Given an expression as a tree, strip any conversion that generates 1001 no instruction. Accepts both tree and const_tree arguments since 1002 we are not modifying the tree itself. */ 1003 1004 #define STRIP_NOPS(EXP) \ 1005 (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP)) 1006 1007 /* Like STRIP_NOPS, but don't let the signedness change either. */ 1008 1009 #define STRIP_SIGN_NOPS(EXP) \ 1010 (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP)) 1011 1012 /* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */ 1013 1014 #define STRIP_TYPE_NOPS(EXP) \ 1015 while ((CONVERT_EXPR_P (EXP) \ 1016 || TREE_CODE (EXP) == NON_LVALUE_EXPR) \ 1017 && TREE_OPERAND (EXP, 0) != error_mark_node \ 1018 && (TREE_TYPE (EXP) \ 1019 == TREE_TYPE (TREE_OPERAND (EXP, 0)))) \ 1020 (EXP) = TREE_OPERAND (EXP, 0) 1021 1022 /* Remove unnecessary type conversions according to 1023 tree_ssa_useless_type_conversion. */ 1024 1025 #define STRIP_USELESS_TYPE_CONVERSION(EXP) \ 1026 (EXP) = tree_ssa_strip_useless_type_conversions (EXP) 1027 1028 /* Nonzero if TYPE represents an integral type. Note that we do not 1029 include COMPLEX types here. Keep these checks in ascending code 1030 order. */ 1031 1032 #define INTEGRAL_TYPE_P(TYPE) \ 1033 (TREE_CODE (TYPE) == ENUMERAL_TYPE \ 1034 || TREE_CODE (TYPE) == BOOLEAN_TYPE \ 1035 || TREE_CODE (TYPE) == INTEGER_TYPE) 1036 1037 /* Nonzero if TYPE represents a non-saturating fixed-point type. */ 1038 1039 #define NON_SAT_FIXED_POINT_TYPE_P(TYPE) \ 1040 (TREE_CODE (TYPE) == FIXED_POINT_TYPE && !TYPE_SATURATING (TYPE)) 1041 1042 /* Nonzero if TYPE represents a saturating fixed-point type. */ 1043 1044 #define SAT_FIXED_POINT_TYPE_P(TYPE) \ 1045 (TREE_CODE (TYPE) == FIXED_POINT_TYPE && TYPE_SATURATING (TYPE)) 1046 1047 /* Nonzero if TYPE represents a fixed-point type. */ 1048 1049 #define FIXED_POINT_TYPE_P(TYPE) (TREE_CODE (TYPE) == FIXED_POINT_TYPE) 1050 1051 /* Nonzero if TYPE represents a scalar floating-point type. */ 1052 1053 #define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE) 1054 1055 /* Nonzero if TYPE represents a complex floating-point type. */ 1056 1057 #define COMPLEX_FLOAT_TYPE_P(TYPE) \ 1058 (TREE_CODE (TYPE) == COMPLEX_TYPE \ 1059 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE) 1060 1061 /* Nonzero if TYPE represents a vector floating-point type. */ 1062 1063 #define VECTOR_FLOAT_TYPE_P(TYPE) \ 1064 (TREE_CODE (TYPE) == VECTOR_TYPE \ 1065 && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE) 1066 1067 /* Nonzero if TYPE represents a floating-point type, including complex 1068 and vector floating-point types. The vector and complex check does 1069 not use the previous two macros to enable early folding. */ 1070 1071 #define FLOAT_TYPE_P(TYPE) \ 1072 (SCALAR_FLOAT_TYPE_P (TYPE) \ 1073 || ((TREE_CODE (TYPE) == COMPLEX_TYPE \ 1074 || TREE_CODE (TYPE) == VECTOR_TYPE) \ 1075 && SCALAR_FLOAT_TYPE_P (TREE_TYPE (TYPE)))) 1076 1077 /* Nonzero if TYPE represents a decimal floating-point type. */ 1078 #define DECIMAL_FLOAT_TYPE_P(TYPE) \ 1079 (SCALAR_FLOAT_TYPE_P (TYPE) \ 1080 && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TYPE))) 1081 1082 /* Nonzero if TYPE is a record or union type. */ 1083 #define RECORD_OR_UNION_TYPE_P(TYPE) \ 1084 (TREE_CODE (TYPE) == RECORD_TYPE \ 1085 || TREE_CODE (TYPE) == UNION_TYPE \ 1086 || TREE_CODE (TYPE) == QUAL_UNION_TYPE) 1087 1088 /* Nonzero if TYPE represents an aggregate (multi-component) type. 1089 Keep these checks in ascending code order. */ 1090 1091 #define AGGREGATE_TYPE_P(TYPE) \ 1092 (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE)) 1093 1094 /* Nonzero if TYPE represents a pointer or reference type. 1095 (It should be renamed to INDIRECT_TYPE_P.) Keep these checks in 1096 ascending code order. */ 1097 1098 #define POINTER_TYPE_P(TYPE) \ 1099 (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE) 1100 1101 /* Nonzero if this type is a complete type. */ 1102 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE) 1103 1104 /* Nonzero if this type is the (possibly qualified) void type. */ 1105 #define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE) 1106 1107 /* Nonzero if this type is complete or is cv void. */ 1108 #define COMPLETE_OR_VOID_TYPE_P(NODE) \ 1109 (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE)) 1110 1111 /* Nonzero if this type is complete or is an array with unspecified bound. */ 1112 #define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \ 1113 (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE))) 1114 1115 1116 /* Define many boolean fields that all tree nodes have. */ 1118 1119 /* In VAR_DECL, PARM_DECL and RESULT_DECL nodes, nonzero means address 1120 of this is needed. So it cannot be in a register. 1121 In a FUNCTION_DECL it has no meaning. 1122 In CONSTRUCTOR nodes, it means object constructed must be in memory. 1123 In LABEL_DECL nodes, it means a goto for this label has been seen 1124 from a place outside all binding contours that restore stack levels. 1125 In ..._TYPE nodes, it means that objects of this type must be fully 1126 addressable. This means that pieces of this object cannot go into 1127 register parameters, for example. If this a function type, this 1128 means that the value must be returned in memory. 1129 In IDENTIFIER_NODEs, this means that some extern decl for this name 1130 had its address taken. That matters for inline functions. */ 1131 #define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag) 1132 1133 /* Set on a CALL_EXPR if the call is in a tail position, ie. just before the 1134 exit of a function. Calls for which this is true are candidates for tail 1135 call optimizations. */ 1136 #define CALL_EXPR_TAILCALL(NODE) \ 1137 (CALL_EXPR_CHECK(NODE)->base.addressable_flag) 1138 1139 /* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the 1140 CASE_LOW operand has been processed. */ 1141 #define CASE_LOW_SEEN(NODE) \ 1142 (CASE_LABEL_EXPR_CHECK (NODE)->base.addressable_flag) 1143 1144 #define PREDICT_EXPR_OUTCOME(NODE) \ 1145 ((enum prediction) (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag)) 1146 #define SET_PREDICT_EXPR_OUTCOME(NODE, OUTCOME) \ 1147 (PREDICT_EXPR_CHECK(NODE)->base.addressable_flag = (int) OUTCOME) 1148 #define PREDICT_EXPR_PREDICTOR(NODE) \ 1149 ((enum br_predictor)tree_low_cst (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 0), 0)) 1150 1151 /* In a VAR_DECL, nonzero means allocate static storage. 1152 In a FUNCTION_DECL, nonzero if function has been defined. 1153 In a CONSTRUCTOR, nonzero means allocate static storage. */ 1154 #define TREE_STATIC(NODE) ((NODE)->base.static_flag) 1155 1156 /* In an ADDR_EXPR, nonzero means do not use a trampoline. */ 1157 #define TREE_NO_TRAMPOLINE(NODE) (ADDR_EXPR_CHECK (NODE)->base.static_flag) 1158 1159 /* In a TARGET_EXPR or WITH_CLEANUP_EXPR, means that the pertinent cleanup 1160 should only be executed if an exception is thrown, not on normal exit 1161 of its scope. */ 1162 #define CLEANUP_EH_ONLY(NODE) ((NODE)->base.static_flag) 1163 1164 /* In a TRY_CATCH_EXPR, means that the handler should be considered a 1165 separate cleanup in honor_protect_cleanup_actions. */ 1166 #define TRY_CATCH_IS_CLEANUP(NODE) \ 1167 (TRY_CATCH_EXPR_CHECK (NODE)->base.static_flag) 1168 1169 /* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the 1170 CASE_HIGH operand has been processed. */ 1171 #define CASE_HIGH_SEEN(NODE) \ 1172 (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag) 1173 1174 /* Used to mark a CALL_EXPR as not suitable for inlining. */ 1175 #define CALL_CANNOT_INLINE_P(NODE) (CALL_EXPR_CHECK (NODE)->base.static_flag) 1176 1177 /* Used to mark scoped enums. */ 1178 #define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag) 1179 1180 /* Determines whether an ENUMERAL_TYPE has defined the list of constants. */ 1181 #define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag) 1182 1183 /* In an expr node (usually a conversion) this means the node was made 1184 implicitly and should not lead to any sort of warning. In a decl node, 1185 warnings concerning the decl should be suppressed. This is used at 1186 least for used-before-set warnings, and it set after one warning is 1187 emitted. */ 1188 #define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag) 1189 1190 /* In an IDENTIFIER_NODE, this means that assemble_name was called with 1191 this string as an argument. */ 1192 #define TREE_SYMBOL_REFERENCED(NODE) \ 1193 (IDENTIFIER_NODE_CHECK (NODE)->base.static_flag) 1194 1195 /* Nonzero in a pointer or reference type means the data pointed to 1196 by this type can alias anything. */ 1197 #define TYPE_REF_CAN_ALIAS_ALL(NODE) \ 1198 (PTR_OR_REF_CHECK (NODE)->base.static_flag) 1199 1200 /* In a MODIFY_EXPR, means that the store in the expression is nontemporal. */ 1201 #define MOVE_NONTEMPORAL(NODE) \ 1202 (EXPR_CHECK (NODE)->base.static_flag) 1203 1204 /* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means 1205 there was an overflow in folding. */ 1206 1207 #define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->base.public_flag) 1208 1209 /* TREE_OVERFLOW can only be true for EXPR of CONSTANT_CLASS_P. */ 1210 1211 #define TREE_OVERFLOW_P(EXPR) \ 1212 (CONSTANT_CLASS_P (EXPR) && TREE_OVERFLOW (EXPR)) 1213 1214 /* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL, 1215 nonzero means name is to be accessible from outside this translation unit. 1216 In an IDENTIFIER_NODE, nonzero means an external declaration 1217 accessible from outside this translation unit was previously seen 1218 for this name in an inner scope. */ 1219 #define TREE_PUBLIC(NODE) ((NODE)->base.public_flag) 1220 1221 /* In a _TYPE, indicates whether TYPE_CACHED_VALUES contains a vector 1222 of cached values, or is something else. */ 1223 #define TYPE_CACHED_VALUES_P(NODE) (TYPE_CHECK(NODE)->base.public_flag) 1224 1225 /* In a SAVE_EXPR, indicates that the original expression has already 1226 been substituted with a VAR_DECL that contains the value. */ 1227 #define SAVE_EXPR_RESOLVED_P(NODE) \ 1228 (SAVE_EXPR_CHECK (NODE)->base.public_flag) 1229 1230 /* Set on a CALL_EXPR if this stdarg call should be passed the argument 1231 pack. */ 1232 #define CALL_EXPR_VA_ARG_PACK(NODE) \ 1233 (CALL_EXPR_CHECK(NODE)->base.public_flag) 1234 1235 /* In any expression, decl, or constant, nonzero means it has side effects or 1236 reevaluation of the whole expression could produce a different value. 1237 This is set if any subexpression is a function call, a side effect or a 1238 reference to a volatile variable. In a ..._DECL, this is set only if the 1239 declaration said `volatile'. This will never be set for a constant. */ 1240 #define TREE_SIDE_EFFECTS(NODE) \ 1241 (NON_TYPE_CHECK (NODE)->base.side_effects_flag) 1242 1243 /* In a LABEL_DECL, nonzero means this label had its address taken 1244 and therefore can never be deleted and is a jump target for 1245 computed gotos. */ 1246 #define FORCED_LABEL(NODE) (LABEL_DECL_CHECK (NODE)->base.side_effects_flag) 1247 1248 /* Nonzero means this expression is volatile in the C sense: 1249 its address should be of type `volatile WHATEVER *'. 1250 In other words, the declared item is volatile qualified. 1251 This is used in _DECL nodes and _REF nodes. 1252 On a FUNCTION_DECL node, this means the function does not 1253 return normally. This is the same effect as setting 1254 the attribute noreturn on the function in C. 1255 1256 In a ..._TYPE node, means this type is volatile-qualified. 1257 But use TYPE_VOLATILE instead of this macro when the node is a type, 1258 because eventually we may make that a different bit. 1259 1260 If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */ 1261 #define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag) 1262 1263 /* Nonzero means this node will not trap. In an INDIRECT_REF, means 1264 accessing the memory pointed to won't generate a trap. However, 1265 this only applies to an object when used appropriately: it doesn't 1266 mean that writing a READONLY mem won't trap. 1267 1268 In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index 1269 (or slice of the array) always belongs to the range of the array. 1270 I.e. that the access will not trap, provided that the access to 1271 the base to the array will not trap. */ 1272 #define TREE_THIS_NOTRAP(NODE) \ 1273 (TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, \ 1274 ARRAY_RANGE_REF)->base.nothrow_flag) 1275 1276 /* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node, 1277 nonzero means it may not be the lhs of an assignment. 1278 Nonzero in a FUNCTION_DECL means this function should be treated 1279 as "const" function (can only read its arguments). */ 1280 #define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->base.readonly_flag) 1281 1282 /* Value of expression is constant. Always on in all ..._CST nodes. May 1283 also appear in an expression or decl where the value is constant. */ 1284 #define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->base.constant_flag) 1285 1286 /* Nonzero if NODE, a type, has had its sizes gimplified. */ 1287 #define TYPE_SIZES_GIMPLIFIED(NODE) \ 1288 (TYPE_CHECK (NODE)->base.constant_flag) 1289 1290 /* In a decl (most significantly a FIELD_DECL), means an unsigned field. */ 1291 #define DECL_UNSIGNED(NODE) \ 1292 (DECL_COMMON_CHECK (NODE)->base.unsigned_flag) 1293 1294 /* In integral and pointer types, means an unsigned type. */ 1295 #define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.unsigned_flag) 1296 1297 /* Nonzero in a VAR_DECL or STRING_CST means assembler code has been written. 1298 Nonzero in a FUNCTION_DECL means that the function has been compiled. 1299 This is interesting in an inline function, since it might not need 1300 to be compiled separately. 1301 Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE 1302 if the debugging info for the type has been written. 1303 In a BLOCK node, nonzero if reorder_blocks has already seen this block. 1304 In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal 1305 PHI node. */ 1306 #define TREE_ASM_WRITTEN(NODE) ((NODE)->base.asm_written_flag) 1307 1308 /* Nonzero in a _DECL if the name is used in its scope. 1309 Nonzero in an expr node means inhibit warning if value is unused. 1310 In IDENTIFIER_NODEs, this means that some extern decl for this name 1311 was used. 1312 In a BLOCK, this means that the block contains variables that are used. */ 1313 #define TREE_USED(NODE) ((NODE)->base.used_flag) 1314 1315 /* In a FUNCTION_DECL, nonzero means a call to the function cannot 1316 throw an exception. In a CALL_EXPR, nonzero means the call cannot 1317 throw. We can't easily check the node type here as the C++ 1318 frontend also uses this flag (for AGGR_INIT_EXPR). */ 1319 #define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag) 1320 1321 /* In a CALL_EXPR, means that it's safe to use the target of the call 1322 expansion as the return slot for a call that returns in memory. */ 1323 #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \ 1324 (CALL_EXPR_CHECK (NODE)->base.private_flag) 1325 1326 /* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is 1327 passed by invisible reference (and the TREE_TYPE is a pointer to the true 1328 type). */ 1329 #define DECL_BY_REFERENCE(NODE) \ 1330 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ 1331 RESULT_DECL)->decl_common.decl_by_reference_flag) 1332 1333 /* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that this decl 1334 can be used as restricted tag to disambiguate against other restrict 1335 pointers. Used by fortran to capture something like non-addressability 1336 (which it isn't really because the middle-end does take addresses of 1337 such variables). */ 1338 #define DECL_RESTRICTED_P(NODE) \ 1339 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ 1340 RESULT_DECL)->decl_common.decl_restricted_flag) 1341 1342 #define DECL_READ_P(NODE) \ 1343 (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_read_flag) 1344 1345 #define DECL_NONSHAREABLE(NODE) \ 1346 (TREE_CHECK2 (NODE, VAR_DECL, \ 1347 RESULT_DECL)->decl_common.decl_nonshareable_flag) 1348 1349 /* In a CALL_EXPR, means that the call is the jump from a thunk to the 1350 thunked-to function. */ 1351 #define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag) 1352 1353 /* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that 1354 it has been built for the declaration of a variable-sized object. */ 1355 #define ALLOCA_FOR_VAR_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag) 1356 1357 /* In a type, nonzero means that all objects of the type are guaranteed by the 1358 language or front-end to be properly aligned, so we can indicate that a MEM 1359 of this type is aligned at least to the alignment of the type, even if it 1360 doesn't appear that it is. We see this, for example, in object-oriented 1361 languages where a tag field may show this is an object of a more-aligned 1362 variant of the more generic type. 1363 1364 In an SSA_NAME node, nonzero if the SSA_NAME node is on the SSA_NAME 1365 freelist. */ 1366 #define TYPE_ALIGN_OK(NODE) (TYPE_CHECK (NODE)->base.nothrow_flag) 1367 1368 /* Used in classes in C++. */ 1369 #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag) 1370 /* Used in classes in C++. */ 1371 #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag) 1372 1373 /* True if reference type NODE is a C++ rvalue reference. */ 1374 #define TYPE_REF_IS_RVALUE(NODE) \ 1375 (REFERENCE_TYPE_CHECK (NODE)->base.private_flag) 1376 1377 /* Nonzero in a _DECL if the use of the name is defined as a 1378 deprecated feature by __attribute__((deprecated)). */ 1379 #define TREE_DEPRECATED(NODE) \ 1380 ((NODE)->base.deprecated_flag) 1381 1382 /* Nonzero in an IDENTIFIER_NODE if the name is a local alias, whose 1383 uses are to be substituted for uses of the TREE_CHAINed identifier. */ 1384 #define IDENTIFIER_TRANSPARENT_ALIAS(NODE) \ 1385 (IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag) 1386 1387 /* In fixed-point types, means a saturating type. */ 1388 #define TYPE_SATURATING(NODE) ((NODE)->base.saturating_flag) 1389 1390 /* Nonzero in an expression, a decl, or a constant node if the node is 1391 the result of a successful constant-folding. */ 1392 #define EXPR_FOLDED(NODE) ((NODE)->base.expr_folded_flag) 1393 1394 /* These flags are available for each language front end to use internally. */ 1395 #define TREE_LANG_FLAG_0(NODE) ((NODE)->base.lang_flag_0) 1396 #define TREE_LANG_FLAG_1(NODE) ((NODE)->base.lang_flag_1) 1397 #define TREE_LANG_FLAG_2(NODE) ((NODE)->base.lang_flag_2) 1398 #define TREE_LANG_FLAG_3(NODE) ((NODE)->base.lang_flag_3) 1399 #define TREE_LANG_FLAG_4(NODE) ((NODE)->base.lang_flag_4) 1400 #define TREE_LANG_FLAG_5(NODE) ((NODE)->base.lang_flag_5) 1401 #define TREE_LANG_FLAG_6(NODE) ((NODE)->base.lang_flag_6) 1402 1403 /* Define additional fields and accessors for nodes representing constants. */ 1405 1406 /* In an INTEGER_CST node. These two together make a 2-word integer. 1407 If the data type is signed, the value is sign-extended to 2 words 1408 even though not all of them may really be in use. 1409 In an unsigned constant shorter than 2 words, the extra bits are 0. */ 1410 #define TREE_INT_CST(NODE) (INTEGER_CST_CHECK (NODE)->int_cst.int_cst) 1411 #define TREE_INT_CST_LOW(NODE) (TREE_INT_CST (NODE).low) 1412 #define TREE_INT_CST_HIGH(NODE) (TREE_INT_CST (NODE).high) 1413 1414 #define INT_CST_LT(A, B) \ 1415 (TREE_INT_CST_HIGH (A) < TREE_INT_CST_HIGH (B) \ 1416 || (TREE_INT_CST_HIGH (A) == TREE_INT_CST_HIGH (B) \ 1417 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) 1418 1419 #define INT_CST_LT_UNSIGNED(A, B) \ 1420 (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ 1421 < (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ 1422 || (((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (A) \ 1423 == (unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (B)) \ 1424 && TREE_INT_CST_LOW (A) < TREE_INT_CST_LOW (B))) 1425 1426 struct GTY(()) tree_int_cst { 1427 struct tree_common common; 1428 double_int int_cst; 1429 }; 1430 1431 /* In a REAL_CST node. struct real_value is an opaque entity, with 1432 manipulators defined in real.h. We don't want tree.h depending on 1433 real.h and transitively on tm.h. */ 1434 struct real_value; 1435 1436 #define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr) 1437 #define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE)) 1438 1439 struct GTY(()) tree_real_cst { 1440 struct tree_common common; 1441 struct real_value * real_cst_ptr; 1442 }; 1443 1444 /* In a FIXED_CST node. */ 1445 struct fixed_value; 1446 1447 #define TREE_FIXED_CST_PTR(NODE) \ 1448 (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr) 1449 #define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE)) 1450 1451 struct GTY(()) tree_fixed_cst { 1452 struct tree_common common; 1453 struct fixed_value * fixed_cst_ptr; 1454 }; 1455 1456 /* In a STRING_CST */ 1457 #define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length) 1458 #define TREE_STRING_POINTER(NODE) \ 1459 ((const char *)(STRING_CST_CHECK (NODE)->string.str)) 1460 1461 struct GTY(()) tree_string { 1462 struct tree_common common; 1463 int length; 1464 char str[1]; 1465 }; 1466 1467 /* In a COMPLEX_CST node. */ 1468 #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real) 1469 #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag) 1470 1471 struct GTY(()) tree_complex { 1472 struct tree_common common; 1473 tree real; 1474 tree imag; 1475 }; 1476 1477 /* In a VECTOR_CST node. */ 1478 #define TREE_VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elements) 1479 1480 struct GTY(()) tree_vector { 1481 struct tree_common common; 1482 tree elements; 1483 }; 1484 1485 #include "symtab.h" 1487 1488 /* Define fields and accessors for some special-purpose tree nodes. */ 1489 1490 #define IDENTIFIER_LENGTH(NODE) \ 1491 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len) 1492 #define IDENTIFIER_POINTER(NODE) \ 1493 ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str) 1494 #define IDENTIFIER_HASH_VALUE(NODE) \ 1495 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value) 1496 1497 /* Translate a hash table identifier pointer to a tree_identifier 1498 pointer, and vice versa. */ 1499 1500 #define HT_IDENT_TO_GCC_IDENT(NODE) \ 1501 ((tree) ((char *) (NODE) - sizeof (struct tree_common))) 1502 #define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id) 1503 1504 struct GTY(()) tree_identifier { 1505 struct tree_common common; 1506 struct ht_identifier id; 1507 }; 1508 1509 /* In a TREE_LIST node. */ 1510 #define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose) 1511 #define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value) 1512 1513 struct GTY(()) tree_list { 1514 struct tree_common common; 1515 tree purpose; 1516 tree value; 1517 }; 1518 1519 /* In a TREE_VEC node. */ 1520 #define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->vec.length) 1521 #define TREE_VEC_END(NODE) \ 1522 ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.length])) 1523 1524 #define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I) 1525 1526 struct GTY(()) tree_vec { 1527 struct tree_common common; 1528 int length; 1529 tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1]; 1530 }; 1531 1532 /* In a CONSTRUCTOR node. */ 1533 #define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts) 1534 #define CONSTRUCTOR_ELT(NODE,IDX) \ 1535 (VEC_index (constructor_elt, CONSTRUCTOR_ELTS (NODE), IDX)) 1536 #define CONSTRUCTOR_NELTS(NODE) \ 1537 (VEC_length (constructor_elt, CONSTRUCTOR_ELTS (NODE))) 1538 1539 /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the 1540 value of each element (stored within VAL). IX must be a scratch variable 1541 of unsigned integer type. */ 1542 #define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \ 1543 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \ 1544 ? false \ 1545 : ((VAL = VEC_index (constructor_elt, V, IX)->value), \ 1546 true); \ 1547 (IX)++) 1548 1549 /* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding both 1550 the value of each element (stored within VAL) and its index (stored 1551 within INDEX). IX must be a scratch variable of unsigned integer type. */ 1552 #define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \ 1553 for (IX = 0; (IX >= VEC_length (constructor_elt, V)) \ 1554 ? false \ 1555 : (((void) (VAL = VEC_index (constructor_elt, V, IX)->value)), \ 1556 (INDEX = VEC_index (constructor_elt, V, IX)->index), \ 1557 true); \ 1558 (IX)++) 1559 1560 /* Append a new constructor element to V, with the specified INDEX and VAL. */ 1561 #define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \ 1562 do { \ 1563 constructor_elt *_ce___ = VEC_safe_push (constructor_elt, gc, V, NULL); \ 1564 _ce___->index = INDEX; \ 1565 _ce___->value = VALUE; \ 1566 } while (0) 1567 1568 /* True if NODE, a FIELD_DECL, is to be processed as a bitfield for 1569 constructor output purposes. */ 1570 #define CONSTRUCTOR_BITFIELD_P(NODE) \ 1571 (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) && DECL_MODE (NODE) != BLKmode) 1572 1573 /* A single element of a CONSTRUCTOR. VALUE holds the actual value of the 1574 element. INDEX can optionally design the position of VALUE: in arrays, 1575 it is the index where VALUE has to be placed; in structures, it is the 1576 FIELD_DECL of the member. */ 1577 typedef struct GTY(()) constructor_elt_d { 1578 tree index; 1579 tree value; 1580 } constructor_elt; 1581 1582 DEF_VEC_O(constructor_elt); 1583 DEF_VEC_ALLOC_O(constructor_elt,gc); 1584 1585 struct GTY(()) tree_constructor { 1586 struct tree_common common; 1587 VEC(constructor_elt,gc) *elts; 1588 }; 1589 1590 /* Define fields and accessors for some nodes that represent expressions. */ 1591 1592 /* Nonzero if NODE is an empty statement (NOP_EXPR <0>). */ 1593 #define IS_EMPTY_STMT(NODE) (TREE_CODE (NODE) == NOP_EXPR \ 1594 && VOID_TYPE_P (TREE_TYPE (NODE)) \ 1595 && integer_zerop (TREE_OPERAND (NODE, 0))) 1596 1597 /* In ordinary expression nodes. */ 1598 #define TREE_OPERAND_LENGTH(NODE) tree_operand_length (NODE) 1599 #define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I) 1600 1601 /* In a tcc_vl_exp node, operand 0 is an INT_CST node holding the operand 1602 length. Its value includes the length operand itself; that is, 1603 the minimum valid length is 1. 1604 Note that we have to bypass the use of TREE_OPERAND to access 1605 that field to avoid infinite recursion in expanding the macros. */ 1606 #define VL_EXP_OPERAND_LENGTH(NODE) \ 1607 ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0])) 1608 1609 /* Nonzero if is_gimple_debug() may possibly hold. */ 1610 #define MAY_HAVE_DEBUG_STMTS (flag_var_tracking_assignments) 1611 1612 /* In a LOOP_EXPR node. */ 1613 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0) 1614 1615 /* The source location of this expression. Non-tree_exp nodes such as 1616 decls and constants can be shared among multiple locations, so 1617 return nothing. */ 1618 #define EXPR_LOCATION(NODE) \ 1619 (EXPR_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION) 1620 #define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS) 1621 #define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION) 1622 #define EXPR_LOC_OR_HERE(NODE) (EXPR_HAS_LOCATION (NODE) ? (NODE)->exp.locus : input_location) 1623 #define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus) 1624 #define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus) 1625 1626 /* True if a tree is an expression or statement that can have a 1627 location. */ 1628 #define CAN_HAVE_LOCATION_P(NODE) ((NODE) && EXPR_P (NODE)) 1629 1630 extern void protected_set_expr_location (tree, location_t); 1631 1632 /* In a TARGET_EXPR node. */ 1633 #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0) 1634 #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1) 1635 #define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2) 1636 1637 /* DECL_EXPR accessor. This gives access to the DECL associated with 1638 the given declaration statement. */ 1639 #define DECL_EXPR_DECL(NODE) TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0) 1640 1641 #define EXIT_EXPR_COND(NODE) TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0) 1642 1643 /* COMPOUND_LITERAL_EXPR accessors. */ 1644 #define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE) \ 1645 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) 1646 #define COMPOUND_LITERAL_EXPR_DECL(NODE) \ 1647 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE)) 1648 1649 /* SWITCH_EXPR accessors. These give access to the condition, body and 1650 original condition type (before any compiler conversions) 1651 of the switch statement, respectively. */ 1652 #define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0) 1653 #define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1) 1654 #define SWITCH_LABELS(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 2) 1655 1656 /* CASE_LABEL_EXPR accessors. These give access to the high and low values 1657 of a case label, respectively. */ 1658 #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0) 1659 #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1) 1660 #define CASE_LABEL(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2) 1661 1662 /* The operands of a TARGET_MEM_REF. Operands 0 and 1 have to match 1663 corresponding MEM_REF operands. */ 1664 #define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0)) 1665 #define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1)) 1666 #define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2)) 1667 #define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3)) 1668 #define TMR_INDEX2(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4)) 1669 1670 /* The operands of a BIND_EXPR. */ 1671 #define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0)) 1672 #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1)) 1673 #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2)) 1674 1675 /* GOTO_EXPR accessor. This gives access to the label associated with 1676 a goto statement. */ 1677 #define GOTO_DESTINATION(NODE) TREE_OPERAND ((NODE), 0) 1678 1679 /* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the 1680 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and 1681 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the 1682 statement. */ 1683 #define ASM_STRING(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 0) 1684 #define ASM_OUTPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1) 1685 #define ASM_INPUTS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2) 1686 #define ASM_CLOBBERS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3) 1687 #define ASM_LABELS(NODE) TREE_OPERAND (ASM_EXPR_CHECK (NODE), 4) 1688 /* Nonzero if we want to create an ASM_INPUT instead of an 1689 ASM_OPERAND with no operands. */ 1690 #define ASM_INPUT_P(NODE) (ASM_EXPR_CHECK (NODE)->base.static_flag) 1691 #define ASM_VOLATILE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.public_flag) 1692 1693 /* COND_EXPR accessors. */ 1694 #define COND_EXPR_COND(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 0)) 1695 #define COND_EXPR_THEN(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 1)) 1696 #define COND_EXPR_ELSE(NODE) (TREE_OPERAND (COND_EXPR_CHECK (NODE), 2)) 1697 1698 /* Accessors for the chains of recurrences. */ 1699 #define CHREC_VAR(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 0) 1700 #define CHREC_LEFT(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 1) 1701 #define CHREC_RIGHT(NODE) TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 2) 1702 #define CHREC_VARIABLE(NODE) TREE_INT_CST_LOW (CHREC_VAR (NODE)) 1703 1704 /* LABEL_EXPR accessor. This gives access to the label associated with 1705 the given label expression. */ 1706 #define LABEL_EXPR_LABEL(NODE) TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0) 1707 1708 /* VDEF_EXPR accessors are specified in tree-flow.h, along with the other 1709 accessors for SSA operands. */ 1710 1711 /* CATCH_EXPR accessors. */ 1712 #define CATCH_TYPES(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0) 1713 #define CATCH_BODY(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1) 1714 1715 /* EH_FILTER_EXPR accessors. */ 1716 #define EH_FILTER_TYPES(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0) 1717 #define EH_FILTER_FAILURE(NODE) TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1) 1718 1719 /* OBJ_TYPE_REF accessors. */ 1720 #define OBJ_TYPE_REF_EXPR(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0) 1721 #define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1) 1722 #define OBJ_TYPE_REF_TOKEN(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2) 1723 1724 /* ASSERT_EXPR accessors. */ 1725 #define ASSERT_EXPR_VAR(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 0) 1726 #define ASSERT_EXPR_COND(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 1) 1727 1728 /* CALL_EXPR accessors. 1729 */ 1730 #define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1) 1731 #define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2) 1732 #define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3) 1733 #define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH(NODE) - 3) 1734 1735 /* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE. 1736 We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if 1737 the argument count is zero when checking is enabled. Instead, do 1738 the pointer arithmetic to advance past the 3 fixed operands in a 1739 CALL_EXPR. That produces a valid pointer to just past the end of the 1740 operand array, even if it's not valid to dereference it. */ 1741 #define CALL_EXPR_ARGP(NODE) \ 1742 (&(TREE_OPERAND (CALL_EXPR_CHECK (NODE), 0)) + 3) 1743 1744 /* OpenMP directive and clause accessors. */ 1745 1746 #define OMP_BODY(NODE) \ 1747 TREE_OPERAND (TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_CRITICAL), 0) 1748 #define OMP_CLAUSES(NODE) \ 1749 TREE_OPERAND (TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_SINGLE), 1) 1750 1751 #define OMP_PARALLEL_BODY(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 0) 1752 #define OMP_PARALLEL_CLAUSES(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 1) 1753 1754 #define OMP_TASK_BODY(NODE) TREE_OPERAND (OMP_TASK_CHECK (NODE), 0) 1755 #define OMP_TASK_CLAUSES(NODE) TREE_OPERAND (OMP_TASK_CHECK (NODE), 1) 1756 1757 #define OMP_TASKREG_CHECK(NODE) TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_TASK) 1758 #define OMP_TASKREG_BODY(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 0) 1759 #define OMP_TASKREG_CLAUSES(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 1) 1760 1761 #define OMP_FOR_BODY(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 0) 1762 #define OMP_FOR_CLAUSES(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 1) 1763 #define OMP_FOR_INIT(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 2) 1764 #define OMP_FOR_COND(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 3) 1765 #define OMP_FOR_INCR(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 4) 1766 #define OMP_FOR_PRE_BODY(NODE) TREE_OPERAND (OMP_FOR_CHECK (NODE), 5) 1767 1768 #define OMP_SECTIONS_BODY(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 0) 1769 #define OMP_SECTIONS_CLAUSES(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 1) 1770 1771 #define OMP_SECTION_BODY(NODE) TREE_OPERAND (OMP_SECTION_CHECK (NODE), 0) 1772 1773 #define OMP_SINGLE_BODY(NODE) TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 0) 1774 #define OMP_SINGLE_CLAUSES(NODE) TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 1) 1775 1776 #define OMP_MASTER_BODY(NODE) TREE_OPERAND (OMP_MASTER_CHECK (NODE), 0) 1777 1778 #define OMP_ORDERED_BODY(NODE) TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 0) 1779 1780 #define OMP_CRITICAL_BODY(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 0) 1781 #define OMP_CRITICAL_NAME(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 1) 1782 1783 #define OMP_CLAUSE_CHAIN(NODE) TREE_CHAIN (OMP_CLAUSE_CHECK (NODE)) 1784 #define OMP_CLAUSE_DECL(NODE) \ 1785 OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE), \ 1786 OMP_CLAUSE_PRIVATE, \ 1787 OMP_CLAUSE_COPYPRIVATE), 0) 1788 #define OMP_CLAUSE_HAS_LOCATION(NODE) \ 1789 ((OMP_CLAUSE_CHECK (NODE))->omp_clause.locus != UNKNOWN_LOCATION) 1790 #define OMP_CLAUSE_LOCATION(NODE) (OMP_CLAUSE_CHECK (NODE))->omp_clause.locus 1791 1792 /* True on an OMP_SECTION statement that was the last lexical member. 1793 This status is meaningful in the implementation of lastprivate. */ 1794 #define OMP_SECTION_LAST(NODE) \ 1795 (OMP_SECTION_CHECK (NODE)->base.private_flag) 1796 1797 /* True on an OMP_PARALLEL statement if it represents an explicit 1798 combined parallel work-sharing constructs. */ 1799 #define OMP_PARALLEL_COMBINED(NODE) \ 1800 (OMP_PARALLEL_CHECK (NODE)->base.private_flag) 1801 1802 /* True on a PRIVATE clause if its decl is kept around for debugging 1803 information only and its DECL_VALUE_EXPR is supposed to point 1804 to what it has been remapped to. */ 1805 #define OMP_CLAUSE_PRIVATE_DEBUG(NODE) \ 1806 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)->base.public_flag) 1807 1808 /* True on a PRIVATE clause if ctor needs access to outer region's 1809 variable. */ 1810 #define OMP_CLAUSE_PRIVATE_OUTER_REF(NODE) \ 1811 TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)) 1812 1813 /* True on a LASTPRIVATE clause if a FIRSTPRIVATE clause for the same 1814 decl is present in the chain. */ 1815 #define OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE(NODE) \ 1816 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE)->base.public_flag) 1817 #define OMP_CLAUSE_LASTPRIVATE_STMT(NODE) \ 1818 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \ 1819 OMP_CLAUSE_LASTPRIVATE),\ 1820 1) 1821 #define OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ(NODE) \ 1822 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init 1823 1824 #define OMP_CLAUSE_IF_EXPR(NODE) \ 1825 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF), 0) 1826 #define OMP_CLAUSE_NUM_THREADS_EXPR(NODE) \ 1827 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_THREADS),0) 1828 #define OMP_CLAUSE_SCHEDULE_CHUNK_EXPR(NODE) \ 1829 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE), 0) 1830 1831 #define OMP_CLAUSE_COLLAPSE_EXPR(NODE) \ 1832 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 0) 1833 #define OMP_CLAUSE_COLLAPSE_ITERVAR(NODE) \ 1834 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 1) 1835 #define OMP_CLAUSE_COLLAPSE_COUNT(NODE) \ 1836 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 2) 1837 1838 #define OMP_CLAUSE_REDUCTION_CODE(NODE) \ 1839 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION)->omp_clause.subcode.reduction_code) 1840 #define OMP_CLAUSE_REDUCTION_INIT(NODE) \ 1841 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 1) 1842 #define OMP_CLAUSE_REDUCTION_MERGE(NODE) \ 1843 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 2) 1844 #define OMP_CLAUSE_REDUCTION_GIMPLE_INIT(NODE) \ 1845 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init 1846 #define OMP_CLAUSE_REDUCTION_GIMPLE_MERGE(NODE) \ 1847 (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_merge 1848 #define OMP_CLAUSE_REDUCTION_PLACEHOLDER(NODE) \ 1849 OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION), 3) 1850 1851 enum omp_clause_schedule_kind 1852 { 1853 OMP_CLAUSE_SCHEDULE_STATIC, 1854 OMP_CLAUSE_SCHEDULE_DYNAMIC, 1855 OMP_CLAUSE_SCHEDULE_GUIDED, 1856 OMP_CLAUSE_SCHEDULE_AUTO, 1857 OMP_CLAUSE_SCHEDULE_RUNTIME 1858 }; 1859 1860 #define OMP_CLAUSE_SCHEDULE_KIND(NODE) \ 1861 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->omp_clause.subcode.schedule_kind) 1862 1863 enum omp_clause_default_kind 1864 { 1865 OMP_CLAUSE_DEFAULT_UNSPECIFIED, 1866 OMP_CLAUSE_DEFAULT_SHARED, 1867 OMP_CLAUSE_DEFAULT_NONE, 1868 OMP_CLAUSE_DEFAULT_PRIVATE, 1869 OMP_CLAUSE_DEFAULT_FIRSTPRIVATE 1870 }; 1871 1872 #define OMP_CLAUSE_DEFAULT_KIND(NODE) \ 1873 (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind) 1874 1875 struct GTY(()) tree_exp { 1876 struct tree_common common; 1877 location_t locus; 1878 tree block; 1879 tree GTY ((special ("tree_exp"), 1880 desc ("TREE_CODE ((tree) &%0)"))) 1881 operands[1]; 1882 }; 1883 1884 /* SSA_NAME accessors. */ 1886 1887 /* Returns the variable being referenced. Once released, this is the 1888 only field that can be relied upon. */ 1889 #define SSA_NAME_VAR(NODE) SSA_NAME_CHECK (NODE)->ssa_name.var 1890 1891 /* Returns the statement which defines this SSA name. */ 1892 #define SSA_NAME_DEF_STMT(NODE) SSA_NAME_CHECK (NODE)->ssa_name.def_stmt 1893 1894 /* Returns the SSA version number of this SSA name. Note that in 1895 tree SSA, version numbers are not per variable and may be recycled. */ 1896 #define SSA_NAME_VERSION(NODE) SSA_NAME_CHECK (NODE)->ssa_name.version 1897 1898 /* Nonzero if this SSA name occurs in an abnormal PHI. SSA_NAMES are 1899 never output, so we can safely use the ASM_WRITTEN_FLAG for this 1900 status bit. */ 1901 #define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \ 1902 SSA_NAME_CHECK (NODE)->base.asm_written_flag 1903 1904 /* Nonzero if this SSA_NAME expression is currently on the free list of 1905 SSA_NAMES. Using NOTHROW_FLAG seems reasonably safe since throwing 1906 has no meaning for an SSA_NAME. */ 1907 #define SSA_NAME_IN_FREE_LIST(NODE) \ 1908 SSA_NAME_CHECK (NODE)->base.nothrow_flag 1909 1910 /* Nonzero if this SSA_NAME is the default definition for the 1911 underlying symbol. A default SSA name is created for symbol S if 1912 the very first reference to S in the function is a read operation. 1913 Default definitions are always created by an empty statement and 1914 belong to no basic block. */ 1915 #define SSA_NAME_IS_DEFAULT_DEF(NODE) \ 1916 SSA_NAME_CHECK (NODE)->base.default_def_flag 1917 1918 /* Attributes for SSA_NAMEs for pointer-type variables. */ 1919 #define SSA_NAME_PTR_INFO(N) \ 1920 SSA_NAME_CHECK (N)->ssa_name.ptr_info 1921 1922 /* Defined in tree-flow.h. */ 1923 struct ptr_info_def; 1924 1925 /* Immediate use linking structure. This structure is used for maintaining 1926 a doubly linked list of uses of an SSA_NAME. */ 1927 typedef struct GTY(()) ssa_use_operand_d { 1928 struct ssa_use_operand_d* GTY((skip(""))) prev; 1929 struct ssa_use_operand_d* GTY((skip(""))) next; 1930 /* Immediate uses for a given SSA name are maintained as a cyclic 1931 list. To recognize the root of this list, the location field 1932 needs to point to the original SSA name. Since statements and 1933 SSA names are of different data types, we need this union. See 1934 the explanation in struct immediate_use_iterator_d. */ 1935 union { gimple stmt; tree ssa_name; } GTY((skip(""))) loc; 1936 tree *GTY((skip(""))) use; 1937 } ssa_use_operand_t; 1938 1939 /* Return the immediate_use information for an SSA_NAME. */ 1940 #define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses 1941 1942 struct GTY(()) tree_ssa_name { 1943 struct tree_common common; 1944 1945 /* _DECL wrapped by this SSA name. */ 1946 tree var; 1947 1948 /* Statement that defines this SSA name. */ 1949 gimple def_stmt; 1950 1951 /* SSA version number. */ 1952 unsigned int version; 1953 1954 /* Pointer attributes used for alias analysis. */ 1955 struct ptr_info_def *ptr_info; 1956 1957 /* Immediate uses list for this SSA_NAME. */ 1958 struct ssa_use_operand_d imm_uses; 1959 }; 1960 1961 struct GTY(()) phi_arg_d { 1963 /* imm_use MUST be the first element in struct because we do some 1964 pointer arithmetic with it. See phi_arg_index_from_use. */ 1965 struct ssa_use_operand_d imm_use; 1966 tree def; 1967 location_t locus; 1968 }; 1969 1970 1971 #define OMP_CLAUSE_CODE(NODE) \ 1973 (OMP_CLAUSE_CHECK (NODE))->omp_clause.code 1974 1975 #define OMP_CLAUSE_SET_CODE(NODE, CODE) \ 1976 ((OMP_CLAUSE_CHECK (NODE))->omp_clause.code = (CODE)) 1977 1978 #define OMP_CLAUSE_CODE(NODE) \ 1979 (OMP_CLAUSE_CHECK (NODE))->omp_clause.code 1980 1981 #define OMP_CLAUSE_OPERAND(NODE, I) \ 1982 OMP_CLAUSE_ELT_CHECK (NODE, I) 1983 1984 struct GTY(()) tree_omp_clause { 1985 struct tree_common common; 1986 location_t locus; 1987 enum omp_clause_code code; 1988 union omp_clause_subcode { 1989 enum omp_clause_default_kind default_kind; 1990 enum omp_clause_schedule_kind schedule_kind; 1991 enum tree_code reduction_code; 1992 } GTY ((skip)) subcode; 1993 1994 /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's 1995 usage. */ 1996 gimple_seq gimple_reduction_init; 1997 gimple_seq gimple_reduction_merge; 1998 1999 tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]"))) ops[1]; 2000 }; 2001 2002 2004 /* In a BLOCK node. */ 2005 #define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars) 2006 #define BLOCK_NONLOCALIZED_VARS(NODE) \ 2007 (BLOCK_CHECK (NODE)->block.nonlocalized_vars) 2008 #define BLOCK_NUM_NONLOCALIZED_VARS(NODE) \ 2009 VEC_length (tree, BLOCK_NONLOCALIZED_VARS (NODE)) 2010 #define BLOCK_NONLOCALIZED_VAR(NODE,N) \ 2011 VEC_index (tree, BLOCK_NONLOCALIZED_VARS (NODE), N) 2012 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks) 2013 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext) 2014 /* Note: when changing this, make sure to find the places 2015 that use chainon or nreverse. */ 2016 #define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE)) 2017 #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) 2018 #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) 2019 2020 /* An index number for this block. These values are not guaranteed to 2021 be unique across functions -- whether or not they are depends on 2022 the debugging output format in use. */ 2023 #define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num) 2024 2025 /* If block reordering splits a lexical block into discontiguous 2026 address ranges, we'll make a copy of the original block. 2027 2028 Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN. 2029 In that case, we have one source block that has been replicated 2030 (through inlining or unrolling) into many logical blocks, and that 2031 these logical blocks have different physical variables in them. 2032 2033 In this case, we have one logical block split into several 2034 non-contiguous address ranges. Most debug formats can't actually 2035 represent this idea directly, so we fake it by creating multiple 2036 logical blocks with the same variables in them. However, for those 2037 that do support non-contiguous regions, these allow the original 2038 logical block to be reconstructed, along with the set of address 2039 ranges. 2040 2041 One of the logical block fragments is arbitrarily chosen to be 2042 the ORIGIN. The other fragments will point to the origin via 2043 BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer 2044 be null. The list of fragments will be chained through 2045 BLOCK_FRAGMENT_CHAIN from the origin. */ 2046 2047 #define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin) 2048 #define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain) 2049 2050 /* For an inlined function, this gives the location where it was called 2051 from. This is only set in the top level block, which corresponds to the 2052 inlined function scope. This is used in the debug output routines. */ 2053 2054 #define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus) 2055 2056 struct GTY(()) tree_block { 2057 struct tree_common common; 2058 2059 unsigned abstract_flag : 1; 2060 unsigned block_num : 31; 2061 2062 location_t locus; 2063 2064 tree vars; 2065 VEC(tree,gc) *nonlocalized_vars; 2066 2067 tree subblocks; 2068 tree supercontext; 2069 tree abstract_origin; 2070 tree fragment_origin; 2071 tree fragment_chain; 2072 }; 2073 2074 /* Define fields and accessors for nodes representing data types. */ 2076 2077 /* See tree.def for documentation of the use of these fields. 2078 Look at the documentation of the various ..._TYPE tree codes. 2079 2080 Note that the type.values, type.minval, and type.maxval fields are 2081 overloaded and used for different macros in different kinds of types. 2082 Each macro must check to ensure the tree node is of the proper kind of 2083 type. Note also that some of the front-ends also overload these fields, 2084 so they must be checked as well. */ 2085 2086 #define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type.uid) 2087 #define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type.size) 2088 #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type.size_unit) 2089 #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type.values) 2090 #define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type.values) 2091 #define TYPE_FIELDS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.values) 2092 #define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK(NODE)->type.values) 2093 #define TYPE_METHODS(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.maxval) 2094 #define TYPE_VFIELD(NODE) (RECORD_OR_UNION_CHECK (NODE)->type.minval) 2095 #define TYPE_ARG_TYPES(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.values) 2096 #define TYPE_METHOD_BASETYPE(NODE) (FUNC_OR_METHOD_CHECK (NODE)->type.maxval) 2097 #define TYPE_OFFSET_BASETYPE(NODE) (OFFSET_TYPE_CHECK (NODE)->type.maxval) 2098 #define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type.pointer_to) 2099 #define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type.reference_to) 2100 #define TYPE_NEXT_PTR_TO(NODE) (POINTER_TYPE_CHECK (NODE)->type.minval) 2101 #define TYPE_NEXT_REF_TO(NODE) (REFERENCE_TYPE_CHECK (NODE)->type.minval) 2102 #define TYPE_MIN_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.minval) 2103 #define TYPE_MAX_VALUE(NODE) (NUMERICAL_TYPE_CHECK (NODE)->type.maxval) 2104 #define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type.precision) 2105 #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type.name) 2106 #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type.next_variant) 2107 #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type.main_variant) 2108 #define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type.context) 2109 #define TYPE_MAXVAL(NODE) (TYPE_CHECK (NODE)->type.maxval) 2110 #define TYPE_MINVAL(NODE) (TYPE_CHECK (NODE)->type.minval) 2111 2112 /* Vector types need to check target flags to determine type. */ 2113 extern enum machine_mode vector_type_mode (const_tree); 2114 #define TYPE_MODE(NODE) \ 2115 (TREE_CODE (TYPE_CHECK (NODE)) == VECTOR_TYPE \ 2116 ? vector_type_mode (NODE) : (NODE)->type.mode) 2117 #define SET_TYPE_MODE(NODE, MODE) \ 2118 (TYPE_CHECK (NODE)->type.mode = (MODE)) 2119 2120 /* The "canonical" type for this type node, which is used by frontends to 2121 compare the type for equality with another type. If two types are 2122 equal (based on the semantics of the language), then they will have 2123 equivalent TYPE_CANONICAL entries. 2124 2125 As a special case, if TYPE_CANONICAL is NULL_TREE, and thus 2126 TYPE_STRUCTURAL_EQUALITY_P is true, then it cannot 2127 be used for comparison against other types. Instead, the type is 2128 said to require structural equality checks, described in 2129 TYPE_STRUCTURAL_EQUALITY_P. 2130 2131 For unqualified aggregate and function types the middle-end relies on 2132 TYPE_CANONICAL to tell whether two variables can be assigned 2133 to each other without a conversion. The middle-end also makes sure 2134 to assign the same alias-sets to the type partition with equal 2135 TYPE_CANONICAL of their unqualified variants. */ 2136 #define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type.canonical) 2137 /* Indicates that the type node requires structural equality 2138 checks. The compiler will need to look at the composition of the 2139 type to determine whether it is equal to another type, rather than 2140 just comparing canonical type pointers. For instance, we would need 2141 to look at the return and parameter types of a FUNCTION_TYPE 2142 node. */ 2143 #define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE) 2144 /* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the 2145 type node requires structural equality. */ 2146 #define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE) 2147 2148 #define TYPE_LANG_SPECIFIC(NODE) (TYPE_CHECK (NODE)->type.lang_specific) 2149 #define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE))) 2150 #define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE))) 2151 2152 /* For record and union types, information about this type, as a base type 2153 for itself. */ 2154 #define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK(NODE)->type.binfo) 2155 2156 /* For non record and union types, used in a language-dependent way. */ 2157 #define TYPE_LANG_SLOT_1(NODE) (NOT_RECORD_OR_UNION_CHECK(NODE)->type.binfo) 2158 2159 /* The (language-specific) typed-based alias set for this type. 2160 Objects whose TYPE_ALIAS_SETs are different cannot alias each 2161 other. If the TYPE_ALIAS_SET is -1, no alias set has yet been 2162 assigned to this type. If the TYPE_ALIAS_SET is 0, objects of this 2163 type can alias objects of any type. */ 2164 #define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type.alias_set) 2165 2166 /* Nonzero iff the typed-based alias set for this type has been 2167 calculated. */ 2168 #define TYPE_ALIAS_SET_KNOWN_P(NODE) (TYPE_CHECK (NODE)->type.alias_set != -1) 2169 2170 /* A TREE_LIST of IDENTIFIER nodes of the attributes that apply 2171 to this type. */ 2172 #define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type.attributes) 2173 2174 /* The alignment necessary for objects of this type. 2175 The value is an int, measured in bits. */ 2176 #define TYPE_ALIGN(NODE) (TYPE_CHECK (NODE)->type.align) 2177 2178 /* 1 if the alignment for this type was requested by "aligned" attribute, 2179 0 if it is the default for this type. */ 2180 #define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->common.base.user_align) 2181 2182 /* The alignment for NODE, in bytes. */ 2183 #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT) 2184 2185 /* If your language allows you to declare types, and you want debug info 2186 for them, then you need to generate corresponding TYPE_DECL nodes. 2187 These "stub" TYPE_DECL nodes have no name, and simply point at the 2188 type node. You then set the TYPE_STUB_DECL field of the type node 2189 to point back at the TYPE_DECL node. This allows the debug routines 2190 to know that the two nodes represent the same type, so that we only 2191 get one debug info record for them. */ 2192 #define TYPE_STUB_DECL(NODE) TREE_CHAIN (NODE) 2193 2194 /* In a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE, it means the type 2195 has BLKmode only because it lacks the alignment requirement for 2196 its size. */ 2197 #define TYPE_NO_FORCE_BLK(NODE) (TYPE_CHECK (NODE)->type.no_force_blk_flag) 2198 2199 /* In an INTEGER_TYPE, it means the type represents a size. We use 2200 this both for validity checking and to permit optimizations that 2201 are unsafe for other types. Note that the C `size_t' type should 2202 *not* have this flag set. The `size_t' type is simply a typedef 2203 for an ordinary integer type that happens to be the type of an 2204 expression returned by `sizeof'; `size_t' has no special 2205 properties. Expressions whose type have TYPE_IS_SIZETYPE set are 2206 always actual sizes. */ 2207 #define TYPE_IS_SIZETYPE(NODE) \ 2208 (INTEGER_TYPE_CHECK (NODE)->type.no_force_blk_flag) 2209 2210 /* Nonzero in a type considered volatile as a whole. */ 2211 #define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->base.volatile_flag) 2212 2213 /* Means this type is const-qualified. */ 2214 #define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->base.readonly_flag) 2215 2216 /* If nonzero, this type is `restrict'-qualified, in the C sense of 2217 the term. */ 2218 #define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type.restrict_flag) 2219 2220 /* If nonzero, type's name shouldn't be emitted into debug info. */ 2221 #define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.nameless_flag) 2222 2223 /* The address space the type is in. */ 2224 #define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.address_space) 2225 2226 /* There is a TYPE_QUAL value for each type qualifier. They can be 2227 combined by bitwise-or to form the complete set of qualifiers for a 2228 type. */ 2229 2230 #define TYPE_UNQUALIFIED 0x0 2231 #define TYPE_QUAL_CONST 0x1 2232 #define TYPE_QUAL_VOLATILE 0x2 2233 #define TYPE_QUAL_RESTRICT 0x4 2234 2235 /* Encode/decode the named memory support as part of the qualifier. If more 2236 than 8 qualifiers are added, these macros need to be adjusted. */ 2237 #define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8) 2238 #define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF) 2239 2240 /* Return all qualifiers except for the address space qualifiers. */ 2241 #define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00) 2242 2243 /* Only keep the address space out of the qualifiers and discard the other 2244 qualifiers. */ 2245 #define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00) 2246 2247 /* The set of type qualifiers for this type. */ 2248 #define TYPE_QUALS(NODE) \ 2249 ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \ 2250 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \ 2251 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT) \ 2252 | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE)))) 2253 2254 /* The same as TYPE_QUALS without the address space qualifications. */ 2255 #define TYPE_QUALS_NO_ADDR_SPACE(NODE) \ 2256 ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST) \ 2257 | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE) \ 2258 | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)) 2259 2260 /* These flags are available for each language front end to use internally. */ 2261 #define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type.lang_flag_0) 2262 #define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type.lang_flag_1) 2263 #define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type.lang_flag_2) 2264 #define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type.lang_flag_3) 2265 #define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type.lang_flag_4) 2266 #define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type.lang_flag_5) 2267 #define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type.lang_flag_6) 2268 2269 /* Used to keep track of visited nodes in tree traversals. This is set to 2270 0 by copy_node and make_node. */ 2271 #define TREE_VISITED(NODE) ((NODE)->base.visited) 2272 2273 /* If set in an ARRAY_TYPE, indicates a string type (for languages 2274 that distinguish string from array of char). 2275 If set in a INTEGER_TYPE, indicates a character type. */ 2276 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type.string_flag) 2277 2278 /* If non-NULL, this is an upper bound of the size (in bytes) of an 2279 object of the given ARRAY_TYPE. This allows temporaries to be 2280 allocated. */ 2281 #define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \ 2282 (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type.maxval) 2283 2284 /* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */ 2285 #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \ 2286 (((unsigned HOST_WIDE_INT) 1) \ 2287 << VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision) 2288 2289 /* Set precision to n when we have 2^n sub-parts of the vector. */ 2290 #define SET_TYPE_VECTOR_SUBPARTS(VECTOR_TYPE, X) \ 2291 (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type.precision = exact_log2 (X)) 2292 2293 /* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings 2294 about missing conversions to other vector types of the same size. */ 2295 #define TYPE_VECTOR_OPAQUE(NODE) \ 2296 (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag) 2297 2298 /* Indicates that objects of this type must be initialized by calling a 2299 function when they are created. */ 2300 #define TYPE_NEEDS_CONSTRUCTING(NODE) \ 2301 (TYPE_CHECK (NODE)->type.needs_constructing_flag) 2302 2303 /* Indicates that a UNION_TYPE object should be passed the same way that 2304 the first union alternative would be passed, or that a RECORD_TYPE 2305 object should be passed the same way that the first (and only) member 2306 would be passed. */ 2307 #define TYPE_TRANSPARENT_AGGR(NODE) \ 2308 (RECORD_OR_UNION_CHECK (NODE)->type.transparent_aggr_flag) 2309 2310 /* For an ARRAY_TYPE, indicates that it is not permitted to take the 2311 address of a component of the type. This is the counterpart of 2312 DECL_NONADDRESSABLE_P for arrays, see the definition of this flag. */ 2313 #define TYPE_NONALIASED_COMPONENT(NODE) \ 2314 (ARRAY_TYPE_CHECK (NODE)->type.transparent_aggr_flag) 2315 2316 /* Indicated that objects of this type should be laid out in as 2317 compact a way as possible. */ 2318 #define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag) 2319 2320 /* Used by type_contains_placeholder_p to avoid recomputation. 2321 Values are: 0 (unknown), 1 (false), 2 (true). Never access 2322 this field directly. */ 2323 #define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \ 2324 (TYPE_CHECK (NODE)->type.contains_placeholder_bits) 2325 2326 /* The debug output functions use the symtab union field to store 2327 information specific to the debugging format. The different debug 2328 output hooks store different types in the union field. These three 2329 macros are used to access different fields in the union. The debug 2330 hooks are responsible for consistently using only a specific 2331 macro. */ 2332 2333 /* Symtab field as an integer. Used by stabs generator in dbxout.c to 2334 hold the type's number in the generated stabs. */ 2335 #define TYPE_SYMTAB_ADDRESS(NODE) (TYPE_CHECK (NODE)->type.symtab.address) 2336 2337 /* Symtab field as a string. Used by COFF generator in sdbout.c to 2338 hold struct/union type tag names. */ 2339 #define TYPE_SYMTAB_POINTER(NODE) (TYPE_CHECK (NODE)->type.symtab.pointer) 2340 2341 /* Symtab field as a pointer to a DWARF DIE. Used by DWARF generator 2342 in dwarf2out.c to point to the DIE generated for the type. */ 2343 #define TYPE_SYMTAB_DIE(NODE) (TYPE_CHECK (NODE)->type.symtab.die) 2344 2345 /* The garbage collector needs to know the interpretation of the 2346 symtab field. These constants represent the different types in the 2347 union. */ 2348 2349 #define TYPE_SYMTAB_IS_ADDRESS (0) 2350 #define TYPE_SYMTAB_IS_POINTER (1) 2351 #define TYPE_SYMTAB_IS_DIE (2) 2352 2353 struct die_struct; 2354 2355 struct GTY(()) tree_type { 2356 struct tree_common common; 2357 tree values; 2358 tree size; 2359 tree size_unit; 2360 tree attributes; 2361 unsigned int uid; 2362 2363 unsigned int precision : 10; 2364 unsigned no_force_blk_flag : 1; 2365 unsigned needs_constructing_flag : 1; 2366 unsigned transparent_aggr_flag : 1; 2367 unsigned restrict_flag : 1; 2368 unsigned contains_placeholder_bits : 2; 2369 2370 ENUM_BITFIELD(machine_mode) mode : 8; 2371 2372 unsigned string_flag : 1; 2373 unsigned lang_flag_0 : 1; 2374 unsigned lang_flag_1 : 1; 2375 unsigned lang_flag_2 : 1; 2376 unsigned lang_flag_3 : 1; 2377 unsigned lang_flag_4 : 1; 2378 unsigned lang_flag_5 : 1; 2379 unsigned lang_flag_6 : 1; 2380 2381 unsigned int align; 2382 alias_set_type alias_set; 2383 tree pointer_to; 2384 tree reference_to; 2385 union tree_type_symtab { 2386 int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address; 2387 const char * GTY ((tag ("TYPE_SYMTAB_IS_POINTER"))) pointer; 2388 struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die; 2389 } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab; 2390 tree name; 2391 tree minval; 2392 tree maxval; 2393 tree next_variant; 2394 tree main_variant; 2395 tree binfo; 2396 tree context; 2397 tree canonical; 2398 /* Points to a structure whose details depend on the language in use. */ 2399 struct lang_type *lang_specific; 2400 }; 2401 2402 /* Define accessor macros for information about type inheritance 2404 and basetypes. 2405 2406 A "basetype" means a particular usage of a data type for inheritance 2407 in another type. Each such basetype usage has its own "binfo" 2408 object to describe it. The binfo object is a TREE_VEC node. 2409 2410 Inheritance is represented by the binfo nodes allocated for a 2411 given type. For example, given types C and D, such that D is 2412 inherited by C, 3 binfo nodes will be allocated: one for describing 2413 the binfo properties of C, similarly one for D, and one for 2414 describing the binfo properties of D as a base type for C. 2415 Thus, given a pointer to class C, one can get a pointer to the binfo 2416 of D acting as a basetype for C by looking at C's binfo's basetypes. */ 2417 2418 /* BINFO specific flags. */ 2419 2420 /* Nonzero means that the derivation chain is via a `virtual' declaration. */ 2421 #define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->base.static_flag) 2422 2423 /* Flags for language dependent use. */ 2424 #define BINFO_MARKED(NODE) TREE_LANG_FLAG_0(TREE_BINFO_CHECK(NODE)) 2425 #define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1(TREE_BINFO_CHECK(NODE)) 2426 #define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2(TREE_BINFO_CHECK(NODE)) 2427 #define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3(TREE_BINFO_CHECK(NODE)) 2428 #define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4(TREE_BINFO_CHECK(NODE)) 2429 #define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5(TREE_BINFO_CHECK(NODE)) 2430 #define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6(TREE_BINFO_CHECK(NODE)) 2431 2432 /* The actual data type node being inherited in this basetype. */ 2433 #define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK(NODE)) 2434 2435 /* The offset where this basetype appears in its containing type. 2436 BINFO_OFFSET slot holds the offset (in bytes) 2437 from the base of the complete object to the base of the part of the 2438 object that is allocated on behalf of this `type'. 2439 This is always 0 except when there is multiple inheritance. */ 2440 2441 #define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK(NODE)->binfo.offset) 2442 #define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE))) 2443 2444 /* The virtual function table belonging to this basetype. Virtual 2445 function tables provide a mechanism for run-time method dispatching. 2446 The entries of a virtual function table are language-dependent. */ 2447 2448 #define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtable) 2449 2450 /* The virtual functions in the virtual function table. This is 2451 a TREE_LIST that is used as an initial approximation for building 2452 a virtual function table for this basetype. */ 2453 #define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK(NODE)->binfo.virtuals) 2454 2455 /* A vector of binfos for the direct basetypes inherited by this 2456 basetype. 2457 2458 If this basetype describes type D as inherited in C, and if the 2459 basetypes of D are E and F, then this vector contains binfos for 2460 inheritance of E and F by C. */ 2461 #define BINFO_BASE_BINFOS(NODE) (&TREE_BINFO_CHECK(NODE)->binfo.base_binfos) 2462 2463 /* The number of basetypes for NODE. */ 2464 #define BINFO_N_BASE_BINFOS(NODE) (VEC_length (tree, BINFO_BASE_BINFOS (NODE))) 2465 2466 /* Accessor macro to get to the Nth base binfo of this binfo. */ 2467 #define BINFO_BASE_BINFO(NODE,N) \ 2468 (VEC_index (tree, BINFO_BASE_BINFOS (NODE), (N))) 2469 #define BINFO_BASE_ITERATE(NODE,N,B) \ 2470 (VEC_iterate (tree, BINFO_BASE_BINFOS (NODE), (N), (B))) 2471 #define BINFO_BASE_APPEND(NODE,T) \ 2472 (VEC_quick_push (tree, BINFO_BASE_BINFOS (NODE), (T))) 2473 2474 /* For a BINFO record describing a virtual base class, i.e., one where 2475 TREE_VIA_VIRTUAL is set, this field assists in locating the virtual 2476 base. The actual contents are language-dependent. In the C++ 2477 front-end this field is an INTEGER_CST giving an offset into the 2478 vtable where the offset to the virtual base can be found. */ 2479 #define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vptr_field) 2480 2481 /* Indicates the accesses this binfo has to its bases. The values are 2482 access_public_node, access_protected_node or access_private_node. 2483 If this array is not present, public access is implied. */ 2484 #define BINFO_BASE_ACCESSES(NODE) (TREE_BINFO_CHECK(NODE)->binfo.base_accesses) 2485 2486 #define BINFO_BASE_ACCESS(NODE,N) \ 2487 VEC_index (tree, BINFO_BASE_ACCESSES (NODE), (N)) 2488 #define BINFO_BASE_ACCESS_APPEND(NODE,T) \ 2489 VEC_quick_push (tree, BINFO_BASE_ACCESSES (NODE), (T)) 2490 2491 /* The index in the VTT where this subobject's sub-VTT can be found. 2492 NULL_TREE if there is no sub-VTT. */ 2493 #define BINFO_SUBVTT_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_subvtt) 2494 2495 /* The index in the VTT where the vptr for this subobject can be 2496 found. NULL_TREE if there is no secondary vptr in the VTT. */ 2497 #define BINFO_VPTR_INDEX(NODE) (TREE_BINFO_CHECK(NODE)->binfo.vtt_vptr) 2498 2499 /* The BINFO_INHERITANCE_CHAIN points at the binfo for the base 2500 inheriting this base for non-virtual bases. For virtual bases it 2501 points either to the binfo for which this is a primary binfo, or to 2502 the binfo of the most derived type. */ 2503 #define BINFO_INHERITANCE_CHAIN(NODE) \ 2504 (TREE_BINFO_CHECK(NODE)->binfo.inheritance) 2505 2506 struct GTY (()) tree_binfo { 2507 struct tree_common common; 2508 2509 tree offset; 2510 tree vtable; 2511 tree virtuals; 2512 tree vptr_field; 2513 VEC(tree,gc) *base_accesses; 2514 tree inheritance; 2515 2516 tree vtt_subvtt; 2517 tree vtt_vptr; 2518 2519 VEC(tree,none) base_binfos; 2520 }; 2521 2522 2523 /* Define fields and accessors for nodes representing declared names. */ 2525 2526 /* Nonzero if DECL represents a variable for the SSA passes. */ 2527 #define SSA_VAR_P(DECL) \ 2528 (TREE_CODE (DECL) == VAR_DECL \ 2529 || TREE_CODE (DECL) == PARM_DECL \ 2530 || TREE_CODE (DECL) == RESULT_DECL \ 2531 || (TREE_CODE (DECL) == SSA_NAME \ 2532 && (TREE_CODE (SSA_NAME_VAR (DECL)) == VAR_DECL \ 2533 || TREE_CODE (SSA_NAME_VAR (DECL)) == PARM_DECL \ 2534 || TREE_CODE (SSA_NAME_VAR (DECL)) == RESULT_DECL))) 2535 2536 2537 2538 2539 /* Enumerate visibility settings. */ 2540 #ifndef SYMBOL_VISIBILITY_DEFINED 2541 #define SYMBOL_VISIBILITY_DEFINED 2542 enum symbol_visibility 2543 { 2544 VISIBILITY_DEFAULT, 2545 VISIBILITY_PROTECTED, 2546 VISIBILITY_HIDDEN, 2547 VISIBILITY_INTERNAL 2548 }; 2549 #endif 2550 2551 struct function; 2552 2553 #define DECL_CHAIN(NODE) (TREE_CHAIN (DECL_MINIMAL_CHECK (NODE))) 2554 2555 /* This is the name of the object as written by the user. 2556 It is an IDENTIFIER_NODE. */ 2557 #define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name) 2558 2559 /* Every ..._DECL node gets a unique number. */ 2560 #define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid) 2561 2562 /* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous 2563 uses. */ 2564 #define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL))) 2565 2566 /* Every ..._DECL node gets a unique number that stays the same even 2567 when the decl is copied by the inliner once it is set. */ 2568 #define DECL_PT_UID(NODE) \ 2569 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid == -1u \ 2570 ? (NODE)->decl_minimal.uid : (NODE)->decl_common.pt_uid) 2571 /* Initialize the ..._DECL node pt-uid to the decls uid. */ 2572 #define SET_DECL_PT_UID(NODE, UID) \ 2573 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid = (UID)) 2574 /* Whether the ..._DECL node pt-uid has been initialized and thus needs to 2575 be preserved when copyin the decl. */ 2576 #define DECL_PT_UID_SET_P(NODE) \ 2577 (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid != -1u) 2578 2579 /* These two fields describe where in the source code the declaration 2580 was. If the declaration appears in several places (as for a C 2581 function that is declared first and then defined later), this 2582 information should refer to the definition. */ 2583 #define DECL_SOURCE_LOCATION(NODE) \ 2584 (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus) 2585 #define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE)) 2586 #define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE)) 2587 #define DECL_IS_BUILTIN(DECL) \ 2588 (DECL_SOURCE_LOCATION (DECL) <= BUILTINS_LOCATION) 2589 2590 /* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or 2591 QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, 2592 PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL 2593 nodes, this points to either the FUNCTION_DECL for the containing 2594 function, the RECORD_TYPE or UNION_TYPE for the containing type, or 2595 NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file 2596 scope". */ 2597 #define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context) 2598 #define DECL_FIELD_CONTEXT(NODE) \ 2599 (FIELD_DECL_CHECK (NODE)->decl_minimal.context) 2600 2601 /* If nonzero, decl's name shouldn't be emitted into debug info. */ 2602 #define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.nameless_flag) 2603 2604 struct GTY(()) tree_decl_minimal { 2605 struct tree_common common; 2606 location_t locus; 2607 unsigned int uid; 2608 tree name; 2609 tree context; 2610 }; 2611 2612 2613 /* For any sort of a ..._DECL node, this points to the original (abstract) 2614 decl node which this decl is an inlined/cloned instance of, or else it 2615 is NULL indicating that this decl is not an instance of some other decl. 2616 2617 The C front-end also uses this in a nested declaration of an inline 2618 function, to point back to the definition. */ 2619 #define DECL_ABSTRACT_ORIGIN(NODE) \ 2620 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin) 2621 2622 /* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract 2623 origin. This is useful when setting the DECL_ABSTRACT_ORIGIN. */ 2624 #define DECL_ORIGIN(NODE) \ 2625 (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE)) 2626 2627 /* Nonzero for any sort of ..._DECL node means this decl node represents an 2628 inline instance of some original (abstract) decl from an inline function; 2629 suppress any warnings about shadowing some other variable. FUNCTION_DECL 2630 nodes can also have their abstract origin set to themselves. */ 2631 #define DECL_FROM_INLINE(NODE) \ 2632 (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \ 2633 && DECL_ABSTRACT_ORIGIN (NODE) != (NODE)) 2634 2635 /* In a DECL this is the field where attributes are stored. */ 2636 #define DECL_ATTRIBUTES(NODE) \ 2637 (DECL_COMMON_CHECK (NODE)->decl_common.attributes) 2638 2639 /* For a FUNCTION_DECL, holds the tree of BINDINGs. 2640 For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK. 2641 For a VAR_DECL, holds the initial value. 2642 For a PARM_DECL, used for DECL_ARG_TYPE--default 2643 values for parameters are encoded in the type of the function, 2644 not in the PARM_DECL slot. 2645 For a FIELD_DECL, this is used for enumeration values and the C 2646 frontend uses it for temporarily storing bitwidth of bitfields. 2647 2648 ??? Need to figure out some way to check this isn't a PARM_DECL. */ 2649 #define DECL_INITIAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.initial) 2650 2651 /* Holds the size of the datum, in bits, as a tree expression. 2652 Need not be constant. */ 2653 #define DECL_SIZE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size) 2654 /* Likewise for the size in bytes. */ 2655 #define DECL_SIZE_UNIT(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size_unit) 2656 /* Holds the alignment required for the datum, in bits. */ 2657 #define DECL_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.align) 2658 /* The alignment of NODE, in bytes. */ 2659 #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT) 2660 /* Set if the alignment of this DECL has been set by the user, for 2661 example with an 'aligned' attribute. */ 2662 #define DECL_USER_ALIGN(NODE) \ 2663 (DECL_COMMON_CHECK (NODE)->common.base.user_align) 2664 /* Holds the machine mode corresponding to the declaration of a variable or 2665 field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a 2666 FIELD_DECL. */ 2667 #define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode) 2668 2669 /* For FUNCTION_DECL, if it is built-in, this identifies which built-in 2670 operation it is. Note, however, that this field is overloaded, with 2671 DECL_BUILT_IN_CLASS as the discriminant, so the latter must always be 2672 checked before any access to the former. */ 2673 #define DECL_FUNCTION_CODE(NODE) \ 2674 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_code) 2675 #define DECL_DEBUG_EXPR_IS_FROM(NODE) \ 2676 (DECL_COMMON_CHECK (NODE)->decl_common.debug_expr_is_from) 2677 2678 #define DECL_FUNCTION_PERSONALITY(NODE) \ 2679 (FUNCTION_DECL_CHECK (NODE)->function_decl.personality) 2680 2681 /* Nonzero for a given ..._DECL node means that the name of this node should 2682 be ignored for symbolic debug purposes. For a TYPE_DECL, this means that 2683 the associated type should be ignored. For a FUNCTION_DECL, the body of 2684 the function should also be ignored. */ 2685 #define DECL_IGNORED_P(NODE) \ 2686 (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag) 2687 2688 /* Nonzero for a given ..._DECL node means that this node represents an 2689 "abstract instance" of the given declaration (e.g. in the original 2690 declaration of an inline function). When generating symbolic debugging 2691 information, we mustn't try to generate any address information for nodes 2692 marked as "abstract instances" because we don't actually generate 2693 any code or allocate any data space for such instances. */ 2694 #define DECL_ABSTRACT(NODE) \ 2695 (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag) 2696 2697 /* Language-specific decl information. */ 2698 #define DECL_LANG_SPECIFIC(NODE) \ 2699 (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific) 2700 2701 /* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference: 2702 do not allocate storage, and refer to a definition elsewhere. Note that 2703 this does not necessarily imply the entity represented by NODE 2704 has no program source-level definition in this translation unit. For 2705 example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and 2706 DECL_EXTERNAL may be true simultaneously; that can be the case for 2707 a C99 "extern inline" function. */ 2708 #define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1) 2709 2710 /* Nonzero in a ..._DECL means this variable is ref'd from a nested function. 2711 For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. 2712 2713 For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted. 2714 2715 Also set in some languages for variables, etc., outside the normal 2716 lexical scope, such as class instance variables. */ 2717 #define DECL_NONLOCAL(NODE) \ 2718 (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag) 2719 2720 /* Used in VAR_DECLs to indicate that the variable is a vtable. 2721 Used in FIELD_DECLs for vtable pointers. 2722 Used in FUNCTION_DECLs to indicate that the function is virtual. */ 2723 #define DECL_VIRTUAL_P(NODE) \ 2724 (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag) 2725 2726 /* Used to indicate that this DECL represents a compiler-generated entity. */ 2727 #define DECL_ARTIFICIAL(NODE) \ 2728 (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag) 2729 2730 /* Additional flags for language-specific uses. */ 2731 #define DECL_LANG_FLAG_0(NODE) \ 2732 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0) 2733 #define DECL_LANG_FLAG_1(NODE) \ 2734 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1) 2735 #define DECL_LANG_FLAG_2(NODE) \ 2736 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2) 2737 #define DECL_LANG_FLAG_3(NODE) \ 2738 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3) 2739 #define DECL_LANG_FLAG_4(NODE) \ 2740 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4) 2741 #define DECL_LANG_FLAG_5(NODE) \ 2742 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5) 2743 #define DECL_LANG_FLAG_6(NODE) \ 2744 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6) 2745 #define DECL_LANG_FLAG_7(NODE) \ 2746 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7) 2747 #define DECL_LANG_FLAG_8(NODE) \ 2748 (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8) 2749 2750 /* Nonzero for a scope which is equal to file scope. */ 2751 #define SCOPE_FILE_SCOPE_P(EXP) \ 2752 (! (EXP) || TREE_CODE (EXP) == TRANSLATION_UNIT_DECL) 2753 /* Nonzero for a decl which is at file scope. */ 2754 #define DECL_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (DECL_CONTEXT (EXP)) 2755 /* Nonzero for a type which is at file scope. */ 2756 #define TYPE_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (TYPE_CONTEXT (EXP)) 2757 2758 /* Nonzero for a decl that is decorated using attribute used. 2759 This indicates to compiler tools that this decl needs to be preserved. */ 2760 #define DECL_PRESERVE_P(DECL) \ 2761 DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag 2762 2763 /* For function local variables of COMPLEX and VECTOR types, 2764 indicates that the variable is not aliased, and that all 2765 modifications to the variable have been adjusted so that 2766 they are killing assignments. Thus the variable may now 2767 be treated as a GIMPLE register, and use real instead of 2768 virtual ops in SSA form. */ 2769 #define DECL_GIMPLE_REG_P(DECL) \ 2770 DECL_COMMON_CHECK (DECL)->decl_common.gimple_reg_flag 2771 2772 struct GTY(()) tree_decl_common { 2773 struct tree_decl_minimal common; 2774 tree size; 2775 2776 ENUM_BITFIELD(machine_mode) mode : 8; 2777 2778 unsigned nonlocal_flag : 1; 2779 unsigned virtual_flag : 1; 2780 unsigned ignored_flag : 1; 2781 unsigned abstract_flag : 1; 2782 unsigned artificial_flag : 1; 2783 unsigned preserve_flag: 1; 2784 unsigned debug_expr_is_from : 1; 2785 2786 unsigned lang_flag_0 : 1; 2787 unsigned lang_flag_1 : 1; 2788 unsigned lang_flag_2 : 1; 2789 unsigned lang_flag_3 : 1; 2790 unsigned lang_flag_4 : 1; 2791 unsigned lang_flag_5 : 1; 2792 unsigned lang_flag_6 : 1; 2793 unsigned lang_flag_7 : 1; 2794 unsigned lang_flag_8 : 1; 2795 2796 /* In LABEL_DECL, this is DECL_ERROR_ISSUED. 2797 In VAR_DECL and PARM_DECL, this is DECL_REGISTER. */ 2798 unsigned decl_flag_0 : 1; 2799 /* In FIELD_DECL, this is DECL_BIT_FIELD 2800 In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL. 2801 In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */ 2802 unsigned decl_flag_1 : 1; 2803 /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P 2804 In VAR_DECL, PARM_DECL and RESULT_DECL, this is 2805 DECL_HAS_VALUE_EXPR_P. */ 2806 unsigned decl_flag_2 : 1; 2807 /* Logically, these two would go in a theoretical base shared by var and 2808 parm decl. */ 2809 unsigned gimple_reg_flag : 1; 2810 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ 2811 unsigned decl_by_reference_flag : 1; 2812 /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_RESTRICTED_P. */ 2813 unsigned decl_restricted_flag : 1; 2814 2815 /* In VAR_DECL and PARM_DECL set when the decl has been used except for 2816 being set. */ 2817 unsigned decl_read_flag : 1; 2818 2819 /* In VAR_DECL or RESULT_DECL set when significant code movement precludes 2820 attempting to share the stack slot with some other variable. */ 2821 unsigned decl_nonshareable_flag : 1; 2822 2823 /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ 2824 unsigned int off_align : 8; 2825 2826 /* 24-bits unused. */ 2827 2828 /* DECL_ALIGN. It should have the same size as TYPE_ALIGN. */ 2829 unsigned int align; 2830 2831 /* UID for points-to sets, stable over copying from inlining. */ 2832 unsigned int pt_uid; 2833 2834 tree size_unit; 2835 tree initial; 2836 tree attributes; 2837 tree abstract_origin; 2838 2839 /* Points to a structure whose details depend on the language in use. */ 2840 struct lang_decl *lang_specific; 2841 }; 2842 2843 extern tree decl_value_expr_lookup (tree); 2844 extern void decl_value_expr_insert (tree, tree); 2845 2846 /* In a VAR_DECL or PARM_DECL, the location at which the value may be found, 2847 if transformations have made this more complicated than evaluating the 2848 decl itself. This should only be used for debugging; once this field has 2849 been set, the decl itself may not legitimately appear in the function. */ 2850 #define DECL_HAS_VALUE_EXPR_P(NODE) \ 2851 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, RESULT_DECL) \ 2852 ->decl_common.decl_flag_2) 2853 #define DECL_VALUE_EXPR(NODE) \ 2854 (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE))) 2855 #define SET_DECL_VALUE_EXPR(NODE, VAL) \ 2856 (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL)) 2857 2858 /* Holds the RTL expression for the value of a variable or function. 2859 This value can be evaluated lazily for functions, variables with 2860 static storage duration, and labels. */ 2861 #define DECL_RTL(NODE) \ 2862 (DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl \ 2863 ? (NODE)->decl_with_rtl.rtl \ 2864 : (make_decl_rtl (NODE), (NODE)->decl_with_rtl.rtl)) 2865 2866 /* Set the DECL_RTL for NODE to RTL. */ 2867 #define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL) 2868 2869 /* Returns nonzero if NODE is a tree node that can contain RTL. */ 2870 #define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL)) 2871 2872 /* Returns nonzero if the DECL_RTL for NODE has already been set. */ 2873 #define DECL_RTL_SET_P(NODE) \ 2874 (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL) 2875 2876 /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for 2877 NODE1, it will not be set for NODE2; this is a lazy copy. */ 2878 #define COPY_DECL_RTL(NODE1, NODE2) \ 2879 (DECL_WRTL_CHECK (NODE2)->decl_with_rtl.rtl \ 2880 = DECL_WRTL_CHECK (NODE1)->decl_with_rtl.rtl) 2881 2882 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */ 2883 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL) 2884 2885 /* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'. */ 2886 #define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0) 2887 2888 struct GTY(()) tree_decl_with_rtl { 2889 struct tree_decl_common common; 2890 rtx rtl; 2891 }; 2892 2893 /* In a FIELD_DECL, this is the field position, counting in bytes, of the 2894 DECL_OFFSET_ALIGN-bit-sized word containing the bit closest to the beginning 2895 of the structure. */ 2896 #define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.offset) 2897 2898 /* In a FIELD_DECL, this is the offset, in bits, of the first bit of the 2899 field from DECL_FIELD_OFFSET. This field may be nonzero even for fields 2900 that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the 2901 natural alignment of the field's type). */ 2902 #define DECL_FIELD_BIT_OFFSET(NODE) \ 2903 (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset) 2904 2905 /* In a FIELD_DECL, this indicates whether the field was a bit-field and 2906 if so, the type that was originally specified for it. 2907 TREE_TYPE may have been modified (in finish_struct). */ 2908 #define DECL_BIT_FIELD_TYPE(NODE) \ 2909 (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type) 2910 2911 /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which 2912 if nonzero, indicates that the field occupies the type. */ 2913 #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier) 2914 2915 /* For FIELD_DECLs, off_align holds the number of low-order bits of 2916 DECL_FIELD_OFFSET which are known to be always zero. 2917 DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET 2918 has. */ 2919 #define DECL_OFFSET_ALIGN(NODE) \ 2920 (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl_common.off_align) 2921 2922 /* Specify that DECL_ALIGN(NODE) is a multiple of X. */ 2923 #define SET_DECL_OFFSET_ALIGN(NODE, X) \ 2924 (FIELD_DECL_CHECK (NODE)->decl_common.off_align = ffs_hwi (X) - 1) 2925 2926 /* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in 2927 which this FIELD_DECL is defined. This information is needed when 2928 writing debugging information about vfield and vbase decls for C++. */ 2929 #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext) 2930 2931 /* In a FIELD_DECL, indicates this field should be bit-packed. */ 2932 #define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->common.base.packed_flag) 2933 2934 /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed 2935 specially. */ 2936 #define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1) 2937 2938 /* Used in a FIELD_DECL to indicate that we cannot form the address of 2939 this component. This makes it possible for Type-Based Alias Analysis 2940 to disambiguate accesses to this field with indirect accesses using 2941 the field's type: 2942 2943 struct S { int i; } s; 2944 int *p; 2945 2946 If the flag is set on 'i', TBAA computes that s.i and *p never conflict. 2947 2948 From the implementation's viewpoint, the alias set of the type of the 2949 field 'i' (int) will not be recorded as a subset of that of the type of 2950 's' (struct S) in record_component_aliases. The counterpart is that 2951 accesses to s.i must not be given the alias set of the type of 'i' 2952 (int) but instead directly that of the type of 's' (struct S). */ 2953 #define DECL_NONADDRESSABLE_P(NODE) \ 2954 (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) 2955 2956 struct GTY(()) tree_field_decl { 2957 struct tree_decl_common common; 2958 2959 tree offset; 2960 tree bit_field_type; 2961 tree qualifier; 2962 tree bit_offset; 2963 tree fcontext; 2964 }; 2965 2966 /* A numeric unique identifier for a LABEL_DECL. The UID allocation is 2967 dense, unique within any one function, and may be used to index arrays. 2968 If the value is -1, then no UID has been assigned. */ 2969 #define LABEL_DECL_UID(NODE) \ 2970 (LABEL_DECL_CHECK (NODE)->label_decl.label_decl_uid) 2971 2972 /* In a LABEL_DECL, the EH region number for which the label is the 2973 post_landing_pad. */ 2974 #define EH_LANDING_PAD_NR(NODE) \ 2975 (LABEL_DECL_CHECK (NODE)->label_decl.eh_landing_pad_nr) 2976 2977 /* In LABEL_DECL nodes, nonzero means that an error message about 2978 jumping into such a binding contour has been printed for this label. */ 2979 #define DECL_ERROR_ISSUED(NODE) \ 2980 (LABEL_DECL_CHECK (NODE)->decl_common.decl_flag_0) 2981 2982 struct GTY(()) tree_label_decl { 2983 struct tree_decl_with_rtl common; 2984 int label_decl_uid; 2985 int eh_landing_pad_nr; 2986 }; 2987 2988 struct var_ann_d; 2989 struct GTY(()) tree_result_decl { 2990 struct tree_decl_with_rtl common; 2991 struct var_ann_d *ann; 2992 }; 2993 2994 struct GTY(()) tree_const_decl { 2995 struct tree_decl_with_rtl common; 2996 }; 2997 2998 /* For a PARM_DECL, records the data type used to pass the argument, 2999 which may be different from the type seen in the program. */ 3000 #define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial) 3001 3002 /* For PARM_DECL, holds an RTL for the stack slot or register 3003 where the data was actually passed. */ 3004 #define DECL_INCOMING_RTL(NODE) \ 3005 (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl) 3006 3007 struct GTY(()) tree_parm_decl { 3008 struct tree_decl_with_rtl common; 3009 rtx incoming_rtl; 3010 struct var_ann_d *ann; 3011 }; 3012 3013 3014 /* Nonzero for a given ..._DECL node means that no warnings should be 3015 generated just because this node is unused. */ 3016 #define DECL_IN_SYSTEM_HEADER(NODE) \ 3017 (in_system_header_at (DECL_SOURCE_LOCATION (NODE))) 3018 3019 /* Used to indicate that the linkage status of this DECL is not yet known, 3020 so it should not be output now. */ 3021 #define DECL_DEFER_OUTPUT(NODE) \ 3022 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output) 3023 3024 /* In a VAR_DECL that's static, 3025 nonzero if the space is in the text section. */ 3026 #define DECL_IN_TEXT_SECTION(NODE) \ 3027 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section) 3028 3029 /* In a VAR_DECL that's static, 3030 nonzero if it belongs to the global constant pool. */ 3031 #define DECL_IN_CONSTANT_POOL(NODE) \ 3032 (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool) 3033 3034 /* Nonzero for a given ..._DECL node means that this node should be 3035 put in .common, if possible. If a DECL_INITIAL is given, and it 3036 is not error_mark_node, then the decl cannot be put in .common. */ 3037 #define DECL_COMMON(NODE) \ 3038 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag) 3039 3040 /* In a VAR_DECL, nonzero if the decl is a register variable with 3041 an explicit asm specification. */ 3042 #define DECL_HARD_REGISTER(NODE) \ 3043 (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register) 3044 3045 /* Used to indicate that this DECL has weak linkage. */ 3046 #define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag) 3047 3048 /* Used to indicate that the DECL is a dllimport. */ 3049 #define DECL_DLLIMPORT_P(NODE) \ 3050 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag) 3051 3052 /* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need 3053 not be put out unless it is needed in this translation unit. 3054 Entities like this are shared across translation units (like weak 3055 entities), but are guaranteed to be generated by any translation 3056 unit that needs them, and therefore need not be put out anywhere 3057 where they are not needed. DECL_COMDAT is just a hint to the 3058 back-end; it is up to front-ends which set this flag to ensure 3059 that there will never be any harm, other than bloat, in putting out 3060 something which is DECL_COMDAT. */ 3061 #define DECL_COMDAT(NODE) \ 3062 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag) 3063 3064 #define DECL_COMDAT_GROUP(NODE) \ 3065 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group) 3066 3067 /* Used in TREE_PUBLIC decls to indicate that copies of this DECL in 3068 multiple translation units should be merged. */ 3069 #define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE) 3070 3071 /* The name of the object as the assembler will see it (but before any 3072 translations made by ASM_OUTPUT_LABELREF). Often this is the same 3073 as DECL_NAME. It is an IDENTIFIER_NODE. */ 3074 #define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE) 3075 3076 /* Return true if NODE is a NODE that can contain a DECL_ASSEMBLER_NAME. 3077 This is true of all DECL nodes except FIELD_DECL. */ 3078 #define HAS_DECL_ASSEMBLER_NAME_P(NODE) \ 3079 (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WITH_VIS)) 3080 3081 /* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set. If zero, 3082 the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set 3083 yet. */ 3084 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ 3085 (HAS_DECL_ASSEMBLER_NAME_P (NODE) \ 3086 && DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name != NULL_TREE) 3087 3088 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ 3089 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ 3090 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name = (NAME)) 3091 3092 /* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's 3093 DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause 3094 the DECL_ASSEMBLER_NAME of either DECL to be set. In other words, the 3095 semantics of using this macro, are different than saying: 3096 3097 SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1)) 3098 3099 which will try to set the DECL_ASSEMBLER_NAME for DECL1. */ 3100 3101 #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \ 3102 (DECL_ASSEMBLER_NAME_SET_P (DECL1) \ 3103 ? (void) SET_DECL_ASSEMBLER_NAME (DECL2, \ 3104 DECL_ASSEMBLER_NAME (DECL1)) \ 3105 : (void) 0) 3106 3107 /* Records the section name in a section attribute. Used to pass 3108 the name from decl_attributes to make_function_rtl and make_decl_rtl. */ 3109 #define DECL_SECTION_NAME(NODE) \ 3110 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.section_name) 3111 3112 /* Nonzero in a decl means that the gimplifier has seen (or placed) 3113 this variable in a BIND_EXPR. */ 3114 #define DECL_SEEN_IN_BIND_EXPR_P(NODE) \ 3115 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr) 3116 3117 /* Value of the decls's visibility attribute */ 3118 #define DECL_VISIBILITY(NODE) \ 3119 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility) 3120 3121 /* Nonzero means that the decl had its visibility specified rather than 3122 being inferred. */ 3123 #define DECL_VISIBILITY_SPECIFIED(NODE) \ 3124 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified) 3125 3126 /* In a VAR_DECL, the model to use if the data should be allocated from 3127 thread-local storage. */ 3128 #define DECL_TLS_MODEL(NODE) (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model) 3129 3130 /* In a VAR_DECL, nonzero if the data should be allocated from 3131 thread-local storage. */ 3132 #define DECL_THREAD_LOCAL_P(NODE) \ 3133 (VAR_DECL_CHECK (NODE)->decl_with_vis.tls_model >= TLS_MODEL_REAL) 3134 3135 /* In a non-local VAR_DECL with static storage duration, true if the 3136 variable has an initialization priority. If false, the variable 3137 will be initialized at the DEFAULT_INIT_PRIORITY. */ 3138 #define DECL_HAS_INIT_PRIORITY_P(NODE) \ 3139 (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p) 3140 3141 /* Specify whether the section name was set by user or by 3142 compiler via -ffunction-sections. */ 3143 #define DECL_HAS_IMPLICIT_SECTION_NAME_P(NODE) \ 3144 (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.implicit_section_name_p) 3145 3146 struct GTY(()) tree_decl_with_vis { 3147 struct tree_decl_with_rtl common; 3148 tree assembler_name; 3149 tree section_name; 3150 tree comdat_group; 3151 3152 /* Belong to VAR_DECL exclusively. */ 3153 unsigned defer_output : 1; 3154 unsigned hard_register : 1; 3155 unsigned thread_local : 1; 3156 unsigned common_flag : 1; 3157 unsigned in_text_section : 1; 3158 unsigned in_constant_pool : 1; 3159 unsigned dllimport_flag : 1; 3160 /* Don't belong to VAR_DECL exclusively. */ 3161 unsigned weak_flag : 1; 3162 3163 unsigned seen_in_bind_expr : 1; 3164 unsigned comdat_flag : 1; 3165 ENUM_BITFIELD(symbol_visibility) visibility : 2; 3166 unsigned visibility_specified : 1; 3167 /* Belongs to VAR_DECL exclusively. */ 3168 ENUM_BITFIELD(tls_model) tls_model : 3; 3169 3170 /* Belong to FUNCTION_DECL exclusively. */ 3171 unsigned init_priority_p : 1; 3172 /* Used by C++ only. Might become a generic decl flag. */ 3173 unsigned shadowed_for_var_p : 1; 3174 /* When SECTION_NAME is implied by -ffunsection-section. */ 3175 unsigned implicit_section_name_p : 1; 3176 /* 13 unused bits. */ 3177 }; 3178 3179 extern tree decl_debug_expr_lookup (tree); 3180 extern void decl_debug_expr_insert (tree, tree); 3181 /* For VAR_DECL, this is set to either an expression that it was split 3182 from (if DECL_DEBUG_EXPR_IS_FROM is true), otherwise a tree_list of 3183 subexpressions that it was split into. */ 3184 #define DECL_DEBUG_EXPR(NODE) \ 3185 (decl_debug_expr_lookup (VAR_DECL_CHECK (NODE))) 3186 3187 #define SET_DECL_DEBUG_EXPR(NODE, VAL) \ 3188 (decl_debug_expr_insert (VAR_DECL_CHECK (NODE), VAL)) 3189 3190 /* An initialization priority. */ 3191 typedef unsigned short priority_type; 3192 3193 extern priority_type decl_init_priority_lookup (tree); 3194 extern priority_type decl_fini_priority_lookup (tree); 3195 extern void decl_init_priority_insert (tree, priority_type); 3196 extern void decl_fini_priority_insert (tree, priority_type); 3197 3198 /* For a VAR_DECL or FUNCTION_DECL the initialization priority of 3199 NODE. */ 3200 #define DECL_INIT_PRIORITY(NODE) \ 3201 (decl_init_priority_lookup (NODE)) 3202 /* Set the initialization priority for NODE to VAL. */ 3203 #define SET_DECL_INIT_PRIORITY(NODE, VAL) \ 3204 (decl_init_priority_insert (NODE, VAL)) 3205 3206 /* For a FUNCTION_DECL the finalization priority of NODE. */ 3207 #define DECL_FINI_PRIORITY(NODE) \ 3208 (decl_fini_priority_lookup (NODE)) 3209 /* Set the finalization priority for NODE to VAL. */ 3210 #define SET_DECL_FINI_PRIORITY(NODE, VAL) \ 3211 (decl_fini_priority_insert (NODE, VAL)) 3212 3213 /* The initialization priority for entities for which no explicit 3214 initialization priority has been specified. */ 3215 #define DEFAULT_INIT_PRIORITY 65535 3216 3217 /* The maximum allowed initialization priority. */ 3218 #define MAX_INIT_PRIORITY 65535 3219 3220 /* The largest priority value reserved for use by system runtime 3221 libraries. */ 3222 #define MAX_RESERVED_INIT_PRIORITY 100 3223 3224 #define DECL_VAR_ANN_PTR(NODE) \ 3225 (TREE_CODE (NODE) == VAR_DECL ? &(NODE)->var_decl.ann \ 3226 : TREE_CODE (NODE) == PARM_DECL ? &(NODE)->parm_decl.ann \ 3227 : TREE_CODE (NODE) == RESULT_DECL ? &(NODE)->result_decl.ann \ 3228 : NULL) 3229 3230 struct GTY(()) tree_var_decl { 3231 struct tree_decl_with_vis common; 3232 struct var_ann_d *ann; 3233 }; 3234 3235 3236 /* This field is used to reference anything in decl.result and is meant only 3237 for use by the garbage collector. */ 3238 #define DECL_RESULT_FLD(NODE) \ 3239 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result) 3240 3241 /* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways. 3242 Before the struct containing the FUNCTION_DECL is laid out, 3243 DECL_VINDEX may point to a FUNCTION_DECL in a base class which 3244 is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual 3245 function. When the class is laid out, this pointer is changed 3246 to an INTEGER_CST node which is suitable for use as an index 3247 into the virtual function table. 3248 C++ also uses this field in namespaces, hence the DECL_NON_COMMON_CHECK. */ 3249 #define DECL_VINDEX(NODE) \ 3250 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.vindex) 3251 3252 struct GTY(()) 3253 tree_decl_non_common { 3254 struct tree_decl_with_vis common; 3255 /* C++ uses this in namespaces. */ 3256 tree saved_tree; 3257 /* C++ uses this in templates. */ 3258 tree arguments; 3259 /* Almost all FE's use this. */ 3260 tree result; 3261 /* C++ uses this in namespaces. */ 3262 tree vindex; 3263 }; 3264 3265 /* In FUNCTION_DECL, holds the decl for the return value. */ 3266 #define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result) 3267 3268 /* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */ 3269 #define DECL_UNINLINABLE(NODE) \ 3270 (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable) 3271 3272 /* In a FUNCTION_DECL, the saved representation of the body of the 3273 entire function. */ 3274 #define DECL_SAVED_TREE(NODE) \ 3275 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.saved_tree) 3276 3277 /* Nonzero in a FUNCTION_DECL means this function should be treated 3278 as if it were a malloc, meaning it returns a pointer that is 3279 not an alias. */ 3280 #define DECL_IS_MALLOC(NODE) \ 3281 (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag) 3282 3283 /* Nonzero in a FUNCTION_DECL means this function should be treated as 3284 C++ operator new, meaning that it returns a pointer for which we 3285 should not use type based aliasing. */ 3286 #define DECL_IS_OPERATOR_NEW(NODE) \ 3287 (FUNCTION_DECL_CHECK (NODE)->function_decl.operator_new_flag) 3288 3289 /* Nonzero in a FUNCTION_DECL means this function may return more 3290 than once. */ 3291 #define DECL_IS_RETURNS_TWICE(NODE) \ 3292 (FUNCTION_DECL_CHECK (NODE)->function_decl.returns_twice_flag) 3293 3294 /* Nonzero in a FUNCTION_DECL means this function should be treated 3295 as "pure" function (like const function, but may read global memory). */ 3296 #define DECL_PURE_P(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.pure_flag) 3297 3298 /* Nonzero only if one of TREE_READONLY or DECL_PURE_P is nonzero AND 3299 the const or pure function may not terminate. When this is nonzero 3300 for a const or pure function, it can be dealt with by cse passes 3301 but cannot be removed by dce passes since you are not allowed to 3302 change an infinite looping program into one that terminates without 3303 error. */ 3304 #define DECL_LOOPING_CONST_OR_PURE_P(NODE) \ 3305 (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag) 3306 3307 /* Nonzero in a FUNCTION_DECL means this function should be treated 3308 as "novops" function (function that does not read global memory, 3309 but may have arbitrary side effects). */ 3310 #define DECL_IS_NOVOPS(NODE) \ 3311 (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag) 3312 3313 /* Used in FUNCTION_DECLs to indicate that they should be run automatically 3314 at the beginning or end of execution. */ 3315 #define DECL_STATIC_CONSTRUCTOR(NODE) \ 3316 (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag) 3317 3318 #define DECL_STATIC_DESTRUCTOR(NODE) \ 3319 (FUNCTION_DECL_CHECK (NODE)->function_decl.static_dtor_flag) 3320 3321 /* Used in FUNCTION_DECLs to indicate that function entry and exit should 3322 be instrumented with calls to support routines. */ 3323 #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \ 3324 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_instrument_function_entry_exit) 3325 3326 /* Used in FUNCTION_DECLs to indicate that limit-stack-* should be 3327 disabled in this function. */ 3328 #define DECL_NO_LIMIT_STACK(NODE) \ 3329 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_limit_stack) 3330 3331 /* In a FUNCTION_DECL indicates that a static chain is needed. */ 3332 #define DECL_STATIC_CHAIN(NODE) \ 3333 (FUNCTION_DECL_CHECK (NODE)->function_decl.regdecl_flag) 3334 3335 /* Nonzero for a decl that cgraph has decided should be inlined into 3336 at least one call site. It is not meaningful to look at this 3337 directly; always use cgraph_function_possibly_inlined_p. */ 3338 #define DECL_POSSIBLY_INLINED(DECL) \ 3339 FUNCTION_DECL_CHECK (DECL)->function_decl.possibly_inlined 3340 3341 /* Nonzero in a FUNCTION_DECL means that this function was declared inline, 3342 such as via the `inline' keyword in C/C++. This flag controls the linkage 3343 semantics of 'inline' */ 3344 #define DECL_DECLARED_INLINE_P(NODE) \ 3345 (FUNCTION_DECL_CHECK (NODE)->function_decl.declared_inline_flag) 3346 3347 /* Nonzero in a FUNCTION_DECL means this function should not get 3348 -Winline warnings. */ 3349 #define DECL_NO_INLINE_WARNING_P(NODE) \ 3350 (FUNCTION_DECL_CHECK (NODE)->function_decl.no_inline_warning_flag) 3351 3352 /* Nonzero in a FUNCTION_DECL that should be always inlined by the inliner 3353 disregarding size and cost heuristics. This is equivalent to using 3354 the always_inline attribute without the required diagnostics if the 3355 function cannot be inlined. */ 3356 #define DECL_DISREGARD_INLINE_LIMITS(NODE) \ 3357 (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits) 3358 3359 /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function") 3360 that describes the status of this function. */ 3361 #define DECL_STRUCT_FUNCTION(NODE) \ 3362 (FUNCTION_DECL_CHECK (NODE)->function_decl.f) 3363 3364 /* In a FUNCTION_DECL, nonzero means a built in function. */ 3365 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN) 3366 3367 /* For a builtin function, identify which part of the compiler defined it. */ 3368 #define DECL_BUILT_IN_CLASS(NODE) \ 3369 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class) 3370 3371 /* In FUNCTION_DECL, a chain of ..._DECL nodes. 3372 VAR_DECL and PARM_DECL reserve the arguments slot for language-specific 3373 uses. */ 3374 #define DECL_ARGUMENTS(NODE) \ 3375 (FUNCTION_DECL_CHECK (NODE)->decl_non_common.arguments) 3376 #define DECL_ARGUMENT_FLD(NODE) \ 3377 (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.arguments) 3378 3379 /* In FUNCTION_DECL, the function specific target options to use when compiling 3380 this function. */ 3381 #define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \ 3382 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target) 3383 3384 /* In FUNCTION_DECL, the function specific optimization options to use when 3385 compiling this function. */ 3386 #define DECL_FUNCTION_SPECIFIC_OPTIMIZATION(NODE) \ 3387 (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_optimization) 3388 3389 /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the 3390 arguments/result/saved_tree fields by front ends. It was either inherit 3391 FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL, 3392 which seemed a bit strange. */ 3393 3394 struct GTY(()) tree_function_decl { 3395 struct tree_decl_non_common common; 3396 3397 struct function *f; 3398 3399 /* The personality function. Used for stack unwinding. */ 3400 tree personality; 3401 3402 /* Function specific options that are used by this function. */ 3403 tree function_specific_target; /* target options */ 3404 tree function_specific_optimization; /* optimization options */ 3405 3406 /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is 3407 DECL_FUNCTION_CODE. Otherwise unused. 3408 ??? The bitfield needs to be able to hold all target function 3409 codes as well. */ 3410 ENUM_BITFIELD(built_in_function) function_code : 11; 3411 ENUM_BITFIELD(built_in_class) built_in_class : 2; 3412 3413 unsigned static_ctor_flag : 1; 3414 unsigned static_dtor_flag : 1; 3415 unsigned uninlinable : 1; 3416 3417 unsigned possibly_inlined : 1; 3418 unsigned novops_flag : 1; 3419 unsigned returns_twice_flag : 1; 3420 unsigned malloc_flag : 1; 3421 unsigned operator_new_flag : 1; 3422 unsigned declared_inline_flag : 1; 3423 unsigned regdecl_flag : 1; 3424 3425 unsigned no_inline_warning_flag : 1; 3426 unsigned no_instrument_function_entry_exit : 1; 3427 unsigned no_limit_stack : 1; 3428 unsigned disregard_inline_limits : 1; 3429 unsigned pure_flag : 1; 3430 unsigned looping_const_or_pure_flag : 1; 3431 3432 3433 /* 3 bits left */ 3434 }; 3435 3436 /* The source language of the translation-unit. */ 3437 #define TRANSLATION_UNIT_LANGUAGE(NODE) \ 3438 (TRANSLATION_UNIT_DECL_CHECK (NODE)->translation_unit_decl.language) 3439 3440 /* TRANSLATION_UNIT_DECL inherits from DECL_MINIMAL. */ 3441 3442 struct GTY(()) tree_translation_unit_decl { 3443 struct tree_decl_common common; 3444 /* Source language of this translation unit. Used for DWARF output. */ 3445 const char * GTY((skip(""))) language; 3446 /* TODO: Non-optimization used to build this translation unit. */ 3447 /* TODO: Root of a partial DWARF tree for global types and decls. */ 3448 }; 3449 3450 /* A vector of all translation-units. */ 3451 extern GTY (()) VEC(tree,gc) *all_translation_units; 3452 3453 /* For a TYPE_DECL, holds the "original" type. (TREE_TYPE has the copy.) */ 3454 #define DECL_ORIGINAL_TYPE(NODE) \ 3455 (TYPE_DECL_CHECK (NODE)->decl_non_common.result) 3456 3457 /* In a TYPE_DECL nonzero means the detail info about this type is not dumped 3458 into stabs. Instead it will generate cross reference ('x') of names. 3459 This uses the same flag as DECL_EXTERNAL. */ 3460 #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ 3461 (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1) 3462 3463 /* Getter of the imported declaration associated to the 3464 IMPORTED_DECL node. */ 3465 #define IMPORTED_DECL_ASSOCIATED_DECL(NODE) \ 3466 (DECL_INITIAL (IMPORTED_DECL_CHECK (NODE))) 3467 3468 struct GTY(()) tree_type_decl { 3469 struct tree_decl_non_common common; 3470 3471 }; 3472 3473 /* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE. 3475 To reduce overhead, the nodes containing the statements are not trees. 3476 This avoids the overhead of tree_common on all linked list elements. 3477 3478 Use the interface in tree-iterator.h to access this node. */ 3479 3480 #define STATEMENT_LIST_HEAD(NODE) \ 3481 (STATEMENT_LIST_CHECK (NODE)->stmt_list.head) 3482 #define STATEMENT_LIST_TAIL(NODE) \ 3483 (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail) 3484 3485 struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node 3486 { 3487 struct tree_statement_list_node *prev; 3488 struct tree_statement_list_node *next; 3489 tree stmt; 3490 }; 3491 3492 struct GTY(()) tree_statement_list 3493 { 3494 struct tree_common common; 3495 struct tree_statement_list_node *head; 3496 struct tree_statement_list_node *tail; 3497 }; 3498 3499 3500 /* Optimization options used by a function. */ 3501 3502 struct GTY(()) tree_optimization_option { 3503 struct tree_common common; 3504 3505 /* The optimization options used by the user. */ 3506 struct cl_optimization opts; 3507 }; 3508 3509 #define TREE_OPTIMIZATION(NODE) \ 3510 (&OPTIMIZATION_NODE_CHECK (NODE)->optimization.opts) 3511 3512 /* Return a tree node that encapsulates the current optimization options. */ 3513 extern tree build_optimization_node (void); 3514 3515 /* Target options used by a function. */ 3516 3517 struct GTY(()) tree_target_option { 3518 struct tree_common common; 3519 3520 /* The optimization options used by the user. */ 3521 struct cl_target_option opts; 3522 }; 3523 3524 #define TREE_TARGET_OPTION(NODE) \ 3525 (&TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts) 3526 3527 /* Return a tree node that encapsulates the current target options. */ 3528 extern tree build_target_option_node (void); 3529 3530 3531 /* Define the overall contents of a tree node. 3533 It may be any of the structures declared above 3534 for various types of node. */ 3535 3536 union GTY ((ptr_alias (union lang_tree_node), 3537 desc ("tree_node_structure (&%h)"), variable_size)) tree_node { 3538 struct tree_base GTY ((tag ("TS_BASE"))) base; 3539 struct tree_common GTY ((tag ("TS_COMMON"))) common; 3540 struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst; 3541 struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst; 3542 struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst; 3543 struct tree_vector GTY ((tag ("TS_VECTOR"))) vector; 3544 struct tree_string GTY ((tag ("TS_STRING"))) string; 3545 struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex; 3546 struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier; 3547 struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal; 3548 struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common; 3549 struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl; 3550 struct tree_decl_non_common GTY ((tag ("TS_DECL_NON_COMMON"))) decl_non_common; 3551 struct tree_parm_decl GTY ((tag ("TS_PARM_DECL"))) parm_decl; 3552 struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis; 3553 struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl; 3554 struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl; 3555 struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl; 3556 struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl; 3557 struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl; 3558 struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl; 3559 struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl; 3560 struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL"))) 3561 translation_unit_decl; 3562 struct tree_type GTY ((tag ("TS_TYPE"))) type; 3563 struct tree_list GTY ((tag ("TS_LIST"))) list; 3564 struct tree_vec GTY ((tag ("TS_VEC"))) vec; 3565 struct tree_exp GTY ((tag ("TS_EXP"))) exp; 3566 struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name; 3567 struct tree_block GTY ((tag ("TS_BLOCK"))) block; 3568 struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo; 3569 struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list; 3570 struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor; 3571 struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause; 3572 struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization; 3573 struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option; 3574 }; 3575 3576 /* Standard named or nameless data types of the C compiler. */ 3578 3579 enum tree_index 3580 { 3581 TI_ERROR_MARK, 3582 TI_INTQI_TYPE, 3583 TI_INTHI_TYPE, 3584 TI_INTSI_TYPE, 3585 TI_INTDI_TYPE, 3586 TI_INTTI_TYPE, 3587 3588 TI_UINTQI_TYPE, 3589 TI_UINTHI_TYPE, 3590 TI_UINTSI_TYPE, 3591 TI_UINTDI_TYPE, 3592 TI_UINTTI_TYPE, 3593 3594 TI_UINT32_TYPE, 3595 TI_UINT64_TYPE, 3596 3597 TI_INTEGER_ZERO, 3598 TI_INTEGER_ONE, 3599 TI_INTEGER_THREE, 3600 TI_INTEGER_MINUS_ONE, 3601 TI_NULL_POINTER, 3602 3603 TI_SIZE_ZERO, 3604 TI_SIZE_ONE, 3605 3606 TI_BITSIZE_ZERO, 3607 TI_BITSIZE_ONE, 3608 TI_BITSIZE_UNIT, 3609 3610 TI_PUBLIC, 3611 TI_PROTECTED, 3612 TI_PRIVATE, 3613 3614 TI_BOOLEAN_FALSE, 3615 TI_BOOLEAN_TRUE, 3616 3617 TI_COMPLEX_INTEGER_TYPE, 3618 TI_COMPLEX_FLOAT_TYPE, 3619 TI_COMPLEX_DOUBLE_TYPE, 3620 TI_COMPLEX_LONG_DOUBLE_TYPE, 3621 3622 TI_FLOAT_TYPE, 3623 TI_DOUBLE_TYPE, 3624 TI_LONG_DOUBLE_TYPE, 3625 3626 TI_FLOAT_PTR_TYPE, 3627 TI_DOUBLE_PTR_TYPE, 3628 TI_LONG_DOUBLE_PTR_TYPE, 3629 TI_INTEGER_PTR_TYPE, 3630 3631 TI_VOID_TYPE, 3632 TI_PTR_TYPE, 3633 TI_CONST_PTR_TYPE, 3634 TI_SIZE_TYPE, 3635 TI_PID_TYPE, 3636 TI_PTRDIFF_TYPE, 3637 TI_VA_LIST_TYPE, 3638 TI_VA_LIST_GPR_COUNTER_FIELD, 3639 TI_VA_LIST_FPR_COUNTER_FIELD, 3640 TI_BOOLEAN_TYPE, 3641 TI_FILEPTR_TYPE, 3642 3643 TI_DFLOAT32_TYPE, 3644 TI_DFLOAT64_TYPE, 3645 TI_DFLOAT128_TYPE, 3646 TI_DFLOAT32_PTR_TYPE, 3647 TI_DFLOAT64_PTR_TYPE, 3648 TI_DFLOAT128_PTR_TYPE, 3649 3650 TI_VOID_LIST_NODE, 3651 3652 TI_MAIN_IDENTIFIER, 3653 3654 TI_SAT_SFRACT_TYPE, 3655 TI_SAT_FRACT_TYPE, 3656 TI_SAT_LFRACT_TYPE, 3657 TI_SAT_LLFRACT_TYPE, 3658 TI_SAT_USFRACT_TYPE, 3659 TI_SAT_UFRACT_TYPE, 3660 TI_SAT_ULFRACT_TYPE, 3661 TI_SAT_ULLFRACT_TYPE, 3662 TI_SFRACT_TYPE, 3663 TI_FRACT_TYPE, 3664 TI_LFRACT_TYPE, 3665 TI_LLFRACT_TYPE, 3666 TI_USFRACT_TYPE, 3667 TI_UFRACT_TYPE, 3668 TI_ULFRACT_TYPE, 3669 TI_ULLFRACT_TYPE, 3670 TI_SAT_SACCUM_TYPE, 3671 TI_SAT_ACCUM_TYPE, 3672 TI_SAT_LACCUM_TYPE, 3673 TI_SAT_LLACCUM_TYPE, 3674 TI_SAT_USACCUM_TYPE, 3675 TI_SAT_UACCUM_TYPE, 3676 TI_SAT_ULACCUM_TYPE, 3677 TI_SAT_ULLACCUM_TYPE, 3678 TI_SACCUM_TYPE, 3679 TI_ACCUM_TYPE, 3680 TI_LACCUM_TYPE, 3681 TI_LLACCUM_TYPE, 3682 TI_USACCUM_TYPE, 3683 TI_UACCUM_TYPE, 3684 TI_ULACCUM_TYPE, 3685 TI_ULLACCUM_TYPE, 3686 TI_QQ_TYPE, 3687 TI_HQ_TYPE, 3688 TI_SQ_TYPE, 3689 TI_DQ_TYPE, 3690 TI_TQ_TYPE, 3691 TI_UQQ_TYPE, 3692 TI_UHQ_TYPE, 3693 TI_USQ_TYPE, 3694 TI_UDQ_TYPE, 3695 TI_UTQ_TYPE, 3696 TI_SAT_QQ_TYPE, 3697 TI_SAT_HQ_TYPE, 3698 TI_SAT_SQ_TYPE, 3699 TI_SAT_DQ_TYPE, 3700 TI_SAT_TQ_TYPE, 3701 TI_SAT_UQQ_TYPE, 3702 TI_SAT_UHQ_TYPE, 3703 TI_SAT_USQ_TYPE, 3704 TI_SAT_UDQ_TYPE, 3705 TI_SAT_UTQ_TYPE, 3706 TI_HA_TYPE, 3707 TI_SA_TYPE, 3708 TI_DA_TYPE, 3709 TI_TA_TYPE, 3710 TI_UHA_TYPE, 3711 TI_USA_TYPE, 3712 TI_UDA_TYPE, 3713 TI_UTA_TYPE, 3714 TI_SAT_HA_TYPE, 3715 TI_SAT_SA_TYPE, 3716 TI_SAT_DA_TYPE, 3717 TI_SAT_TA_TYPE, 3718 TI_SAT_UHA_TYPE, 3719 TI_SAT_USA_TYPE, 3720 TI_SAT_UDA_TYPE, 3721 TI_SAT_UTA_TYPE, 3722 3723 TI_OPTIMIZATION_DEFAULT, 3724 TI_OPTIMIZATION_CURRENT, 3725 TI_TARGET_OPTION_DEFAULT, 3726 TI_TARGET_OPTION_CURRENT, 3727 TI_CURRENT_TARGET_PRAGMA, 3728 TI_CURRENT_OPTIMIZE_PRAGMA, 3729 3730 TI_MAX 3731 }; 3732 3733 extern GTY(()) tree global_trees[TI_MAX]; 3734 3735 #define error_mark_node global_trees[TI_ERROR_MARK] 3736 3737 #define intQI_type_node global_trees[TI_INTQI_TYPE] 3738 #define intHI_type_node global_trees[TI_INTHI_TYPE] 3739 #define intSI_type_node global_trees[TI_INTSI_TYPE] 3740 #define intDI_type_node global_trees[TI_INTDI_TYPE] 3741 #define intTI_type_node global_trees[TI_INTTI_TYPE] 3742 3743 #define unsigned_intQI_type_node global_trees[TI_UINTQI_TYPE] 3744 #define unsigned_intHI_type_node global_trees[TI_UINTHI_TYPE] 3745 #define unsigned_intSI_type_node global_trees[TI_UINTSI_TYPE] 3746 #define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE] 3747 #define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE] 3748 3749 #define uint32_type_node global_trees[TI_UINT32_TYPE] 3750 #define uint64_type_node global_trees[TI_UINT64_TYPE] 3751 3752 #define integer_zero_node global_trees[TI_INTEGER_ZERO] 3753 #define integer_one_node global_trees[TI_INTEGER_ONE] 3754 #define integer_three_node global_trees[TI_INTEGER_THREE] 3755 #define integer_minus_one_node global_trees[TI_INTEGER_MINUS_ONE] 3756 #define size_zero_node global_trees[TI_SIZE_ZERO] 3757 #define size_one_node global_trees[TI_SIZE_ONE] 3758 #define bitsize_zero_node global_trees[TI_BITSIZE_ZERO] 3759 #define bitsize_one_node global_trees[TI_BITSIZE_ONE] 3760 #define bitsize_unit_node global_trees[TI_BITSIZE_UNIT] 3761 3762 /* Base access nodes. */ 3763 #define access_public_node global_trees[TI_PUBLIC] 3764 #define access_protected_node global_trees[TI_PROTECTED] 3765 #define access_private_node global_trees[TI_PRIVATE] 3766 3767 #define null_pointer_node global_trees[TI_NULL_POINTER] 3768 3769 #define float_type_node global_trees[TI_FLOAT_TYPE] 3770 #define double_type_node global_trees[TI_DOUBLE_TYPE] 3771 #define long_double_type_node global_trees[TI_LONG_DOUBLE_TYPE] 3772 3773 #define float_ptr_type_node global_trees[TI_FLOAT_PTR_TYPE] 3774 #define double_ptr_type_node global_trees[TI_DOUBLE_PTR_TYPE] 3775 #define long_double_ptr_type_node global_trees[TI_LONG_DOUBLE_PTR_TYPE] 3776 #define integer_ptr_type_node global_trees[TI_INTEGER_PTR_TYPE] 3777 3778 #define complex_integer_type_node global_trees[TI_COMPLEX_INTEGER_TYPE] 3779 #define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE] 3780 #define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE] 3781 #define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE] 3782 3783 #define void_type_node global_trees[TI_VOID_TYPE] 3784 /* The C type `void *'. */ 3785 #define ptr_type_node global_trees[TI_PTR_TYPE] 3786 /* The C type `const void *'. */ 3787 #define const_ptr_type_node global_trees[TI_CONST_PTR_TYPE] 3788 /* The C type `size_t'. */ 3789 #define size_type_node global_trees[TI_SIZE_TYPE] 3790 #define pid_type_node global_trees[TI_PID_TYPE] 3791 #define ptrdiff_type_node global_trees[TI_PTRDIFF_TYPE] 3792 #define va_list_type_node global_trees[TI_VA_LIST_TYPE] 3793 #define va_list_gpr_counter_field global_trees[TI_VA_LIST_GPR_COUNTER_FIELD] 3794 #define va_list_fpr_counter_field global_trees[TI_VA_LIST_FPR_COUNTER_FIELD] 3795 /* The C type `FILE *'. */ 3796 #define fileptr_type_node global_trees[TI_FILEPTR_TYPE] 3797 3798 #define boolean_type_node global_trees[TI_BOOLEAN_TYPE] 3799 #define boolean_false_node global_trees[TI_BOOLEAN_FALSE] 3800 #define boolean_true_node global_trees[TI_BOOLEAN_TRUE] 3801 3802 /* The decimal floating point types. */ 3803 #define dfloat32_type_node global_trees[TI_DFLOAT32_TYPE] 3804 #define dfloat64_type_node global_trees[TI_DFLOAT64_TYPE] 3805 #define dfloat128_type_node global_trees[TI_DFLOAT128_TYPE] 3806 #define dfloat32_ptr_type_node global_trees[TI_DFLOAT32_PTR_TYPE] 3807 #define dfloat64_ptr_type_node global_trees[TI_DFLOAT64_PTR_TYPE] 3808 #define dfloat128_ptr_type_node global_trees[TI_DFLOAT128_PTR_TYPE] 3809 3810 /* The fixed-point types. */ 3811 #define sat_short_fract_type_node global_trees[TI_SAT_SFRACT_TYPE] 3812 #define sat_fract_type_node global_trees[TI_SAT_FRACT_TYPE] 3813 #define sat_long_fract_type_node global_trees[TI_SAT_LFRACT_TYPE] 3814 #define sat_long_long_fract_type_node global_trees[TI_SAT_LLFRACT_TYPE] 3815 #define sat_unsigned_short_fract_type_node \ 3816 global_trees[TI_SAT_USFRACT_TYPE] 3817 #define sat_unsigned_fract_type_node global_trees[TI_SAT_UFRACT_TYPE] 3818 #define sat_unsigned_long_fract_type_node \ 3819 global_trees[TI_SAT_ULFRACT_TYPE] 3820 #define sat_unsigned_long_long_fract_type_node \ 3821 global_trees[TI_SAT_ULLFRACT_TYPE] 3822 #define short_fract_type_node global_trees[TI_SFRACT_TYPE] 3823 #define fract_type_node global_trees[TI_FRACT_TYPE] 3824 #define long_fract_type_node global_trees[TI_LFRACT_TYPE] 3825 #define long_long_fract_type_node global_trees[TI_LLFRACT_TYPE] 3826 #define unsigned_short_fract_type_node global_trees[TI_USFRACT_TYPE] 3827 #define unsigned_fract_type_node global_trees[TI_UFRACT_TYPE] 3828 #define unsigned_long_fract_type_node global_trees[TI_ULFRACT_TYPE] 3829 #define unsigned_long_long_fract_type_node \ 3830 global_trees[TI_ULLFRACT_TYPE] 3831 #define sat_short_accum_type_node global_trees[TI_SAT_SACCUM_TYPE] 3832 #define sat_accum_type_node global_trees[TI_SAT_ACCUM_TYPE] 3833 #define sat_long_accum_type_node global_trees[TI_SAT_LACCUM_TYPE] 3834 #define sat_long_long_accum_type_node global_trees[TI_SAT_LLACCUM_TYPE] 3835 #define sat_unsigned_short_accum_type_node \ 3836 global_trees[TI_SAT_USACCUM_TYPE] 3837 #define sat_unsigned_accum_type_node global_trees[TI_SAT_UACCUM_TYPE] 3838 #define sat_unsigned_long_accum_type_node \ 3839 global_trees[TI_SAT_ULACCUM_TYPE] 3840 #define sat_unsigned_long_long_accum_type_node \ 3841 global_trees[TI_SAT_ULLACCUM_TYPE] 3842 #define short_accum_type_node global_trees[TI_SACCUM_TYPE] 3843 #define accum_type_node global_trees[TI_ACCUM_TYPE] 3844 #define long_accum_type_node global_trees[TI_LACCUM_TYPE] 3845 #define long_long_accum_type_node global_trees[TI_LLACCUM_TYPE] 3846 #define unsigned_short_accum_type_node global_trees[TI_USACCUM_TYPE] 3847 #define unsigned_accum_type_node global_trees[TI_UACCUM_TYPE] 3848 #define unsigned_long_accum_type_node global_trees[TI_ULACCUM_TYPE] 3849 #define unsigned_long_long_accum_type_node \ 3850 global_trees[TI_ULLACCUM_TYPE] 3851 #define qq_type_node global_trees[TI_QQ_TYPE] 3852 #define hq_type_node global_trees[TI_HQ_TYPE] 3853 #define sq_type_node global_trees[TI_SQ_TYPE] 3854 #define dq_type_node global_trees[TI_DQ_TYPE] 3855 #define tq_type_node global_trees[TI_TQ_TYPE] 3856 #define uqq_type_node global_trees[TI_UQQ_TYPE] 3857 #define uhq_type_node global_trees[TI_UHQ_TYPE] 3858 #define usq_type_node global_trees[TI_USQ_TYPE] 3859 #define udq_type_node global_trees[TI_UDQ_TYPE] 3860 #define utq_type_node global_trees[TI_UTQ_TYPE] 3861 #define sat_qq_type_node global_trees[TI_SAT_QQ_TYPE] 3862 #define sat_hq_type_node global_trees[TI_SAT_HQ_TYPE] 3863 #define sat_sq_type_node global_trees[TI_SAT_SQ_TYPE] 3864 #define sat_dq_type_node global_trees[TI_SAT_DQ_TYPE] 3865 #define sat_tq_type_node global_trees[TI_SAT_TQ_TYPE] 3866 #define sat_uqq_type_node global_trees[TI_SAT_UQQ_TYPE] 3867 #define sat_uhq_type_node global_trees[TI_SAT_UHQ_TYPE] 3868 #define sat_usq_type_node global_trees[TI_SAT_USQ_TYPE] 3869 #define sat_udq_type_node global_trees[TI_SAT_UDQ_TYPE] 3870 #define sat_utq_type_node global_trees[TI_SAT_UTQ_TYPE] 3871 #define ha_type_node global_trees[TI_HA_TYPE] 3872 #define sa_type_node global_trees[TI_SA_TYPE] 3873 #define da_type_node global_trees[TI_DA_TYPE] 3874 #define ta_type_node global_trees[TI_TA_TYPE] 3875 #define uha_type_node global_trees[TI_UHA_TYPE] 3876 #define usa_type_node global_trees[TI_USA_TYPE] 3877 #define uda_type_node global_trees[TI_UDA_TYPE] 3878 #define uta_type_node global_trees[TI_UTA_TYPE] 3879 #define sat_ha_type_node global_trees[TI_SAT_HA_TYPE] 3880 #define sat_sa_type_node global_trees[TI_SAT_SA_TYPE] 3881 #define sat_da_type_node global_trees[TI_SAT_DA_TYPE] 3882 #define sat_ta_type_node global_trees[TI_SAT_TA_TYPE] 3883 #define sat_uha_type_node global_trees[TI_SAT_UHA_TYPE] 3884 #define sat_usa_type_node global_trees[TI_SAT_USA_TYPE] 3885 #define sat_uda_type_node global_trees[TI_SAT_UDA_TYPE] 3886 #define sat_uta_type_node global_trees[TI_SAT_UTA_TYPE] 3887 3888 /* The node that should be placed at the end of a parameter list to 3889 indicate that the function does not take a variable number of 3890 arguments. The TREE_VALUE will be void_type_node and there will be 3891 no TREE_CHAIN. Language-independent code should not assume 3892 anything else about this node. */ 3893 #define void_list_node global_trees[TI_VOID_LIST_NODE] 3894 3895 #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER] 3896 #define MAIN_NAME_P(NODE) \ 3897 (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node) 3898 3899 /* Optimization options (OPTIMIZATION_NODE) to use for default and current 3900 functions. */ 3901 #define optimization_default_node global_trees[TI_OPTIMIZATION_DEFAULT] 3902 #define optimization_current_node global_trees[TI_OPTIMIZATION_CURRENT] 3903 3904 /* Default/current target options (TARGET_OPTION_NODE). */ 3905 #define target_option_default_node global_trees[TI_TARGET_OPTION_DEFAULT] 3906 #define target_option_current_node global_trees[TI_TARGET_OPTION_CURRENT] 3907 3908 /* Default tree list option(), optimize() pragmas to be linked into the 3909 attribute list. */ 3910 #define current_target_pragma global_trees[TI_CURRENT_TARGET_PRAGMA] 3911 #define current_optimize_pragma global_trees[TI_CURRENT_OPTIMIZE_PRAGMA] 3912 3913 /* An enumeration of the standard C integer types. These must be 3914 ordered so that shorter types appear before longer ones, and so 3915 that signed types appear before unsigned ones, for the correct 3916 functioning of interpret_integer() in c-lex.c. */ 3917 enum integer_type_kind 3918 { 3919 itk_char, 3920 itk_signed_char, 3921 itk_unsigned_char, 3922 itk_short, 3923 itk_unsigned_short, 3924 itk_int, 3925 itk_unsigned_int, 3926 itk_long, 3927 itk_unsigned_long, 3928 itk_long_long, 3929 itk_unsigned_long_long, 3930 itk_int128, 3931 itk_unsigned_int128, 3932 itk_none 3933 }; 3934 3935 typedef enum integer_type_kind integer_type_kind; 3936 3937 /* The standard C integer types. Use integer_type_kind to index into 3938 this array. */ 3939 extern GTY(()) tree integer_types[itk_none]; 3940 3941 #define char_type_node integer_types[itk_char] 3942 #define signed_char_type_node integer_types[itk_signed_char] 3943 #define unsigned_char_type_node integer_types[itk_unsigned_char] 3944 #define short_integer_type_node integer_types[itk_short] 3945 #define short_unsigned_type_node integer_types[itk_unsigned_short] 3946 #define integer_type_node integer_types[itk_int] 3947 #define unsigned_type_node integer_types[itk_unsigned_int] 3948 #define long_integer_type_node integer_types[itk_long] 3949 #define long_unsigned_type_node integer_types[itk_unsigned_long] 3950 #define long_long_integer_type_node integer_types[itk_long_long] 3951 #define long_long_unsigned_type_node integer_types[itk_unsigned_long_long] 3952 #define int128_integer_type_node integer_types[itk_int128] 3953 #define int128_unsigned_type_node integer_types[itk_unsigned_int128] 3954 3955 /* A pointer-to-function member type looks like: 3957 3958 struct { 3959 __P __pfn; 3960 ptrdiff_t __delta; 3961 }; 3962 3963 If __pfn is NULL, it is a NULL pointer-to-member-function. 3964 3965 (Because the vtable is always the first thing in the object, we 3966 don't need its offset.) If the function is virtual, then PFN is 3967 one plus twice the index into the vtable; otherwise, it is just a 3968 pointer to the function. 3969 3970 Unfortunately, using the lowest bit of PFN doesn't work in 3971 architectures that don't impose alignment requirements on function 3972 addresses, or that use the lowest bit to tell one ISA from another, 3973 for example. For such architectures, we use the lowest bit of 3974 DELTA instead of the lowest bit of the PFN, and DELTA will be 3975 multiplied by 2. */ 3976 3977 enum ptrmemfunc_vbit_where_t 3978 { 3979 ptrmemfunc_vbit_in_pfn, 3980 ptrmemfunc_vbit_in_delta 3981 }; 3982 3983 #define NULL_TREE (tree) NULL 3985 3986 extern tree decl_assembler_name (tree); 3987 extern bool decl_assembler_name_equal (tree decl, const_tree asmname); 3988 extern hashval_t decl_assembler_name_hash (const_tree asmname); 3989 3990 /* Compute the number of bytes occupied by 'node'. This routine only 3991 looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH. */ 3992 3993 extern size_t tree_size (const_tree); 3994 3995 /* Compute the number of bytes occupied by a tree with code CODE. This 3996 function cannot be used for TREE_VEC codes, which are of variable 3997 length. */ 3998 extern size_t tree_code_size (enum tree_code); 3999 4000 /* Lowest level primitive for allocating a node. 4001 The TREE_CODE is the only argument. Contents are initialized 4002 to zero except for a few of the common fields. */ 4003 4004 extern tree make_node_stat (enum tree_code MEM_STAT_DECL); 4005 #define make_node(t) make_node_stat (t MEM_STAT_INFO) 4006 4007 /* Make a copy of a node, with all the same contents. */ 4008 4009 extern tree copy_node_stat (tree MEM_STAT_DECL); 4010 #define copy_node(t) copy_node_stat (t MEM_STAT_INFO) 4011 4012 /* Make a copy of a chain of TREE_LIST nodes. */ 4013 4014 extern tree copy_list (tree); 4015 4016 /* Make a BINFO. */ 4017 extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL); 4018 #define make_tree_binfo(t) make_tree_binfo_stat (t MEM_STAT_INFO) 4019 4020 /* Make a TREE_VEC. */ 4021 4022 extern tree make_tree_vec_stat (int MEM_STAT_DECL); 4023 #define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO) 4024 4025 /* Return the (unique) IDENTIFIER_NODE node for a given name. 4026 The name is supplied as a char *. */ 4027 4028 extern tree get_identifier (const char *); 4029 4030 #if GCC_VERSION >= 3000 4031 #define get_identifier(str) \ 4032 (__builtin_constant_p (str) \ 4033 ? get_identifier_with_length ((str), strlen (str)) \ 4034 : get_identifier (str)) 4035 #endif 4036 4037 4038 /* Identical to get_identifier, except that the length is assumed 4039 known. */ 4040 4041 extern tree get_identifier_with_length (const char *, size_t); 4042 4043 /* If an identifier with the name TEXT (a null-terminated string) has 4044 previously been referred to, return that node; otherwise return 4045 NULL_TREE. */ 4046 4047 extern tree maybe_get_identifier (const char *); 4048 4049 /* Construct various types of nodes. */ 4050 4051 extern tree build_nt (enum tree_code, ...); 4052 extern tree build_nt_call_vec (tree, VEC(tree,gc) *); 4053 4054 extern tree build0_stat (enum tree_code, tree MEM_STAT_DECL); 4055 #define build0(c,t) build0_stat (c,t MEM_STAT_INFO) 4056 extern tree build1_stat (enum tree_code, tree, tree MEM_STAT_DECL); 4057 #define build1(c,t1,t2) build1_stat (c,t1,t2 MEM_STAT_INFO) 4058 extern tree build2_stat (enum tree_code, tree, tree, tree MEM_STAT_DECL); 4059 #define build2(c,t1,t2,t3) build2_stat (c,t1,t2,t3 MEM_STAT_INFO) 4060 extern tree build3_stat (enum tree_code, tree, tree, tree, tree MEM_STAT_DECL); 4061 #define build3(c,t1,t2,t3,t4) build3_stat (c,t1,t2,t3,t4 MEM_STAT_INFO) 4062 extern tree build4_stat (enum tree_code, tree, tree, tree, tree, 4063 tree MEM_STAT_DECL); 4064 #define build4(c,t1,t2,t3,t4,t5) build4_stat (c,t1,t2,t3,t4,t5 MEM_STAT_INFO) 4065 extern tree build5_stat (enum tree_code, tree, tree, tree, tree, tree, 4066 tree MEM_STAT_DECL); 4067 #define build5(c,t1,t2,t3,t4,t5,t6) build5_stat (c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO) 4068 extern tree build6_stat (enum tree_code, tree, tree, tree, tree, tree, 4069 tree, tree MEM_STAT_DECL); 4070 #define build6(c,t1,t2,t3,t4,t5,t6,t7) \ 4071 build6_stat (c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO) 4072 4073 /* _loc versions of build[1-6]. */ 4074 4075 static inline tree 4076 build1_stat_loc (location_t loc, enum tree_code code, tree type, 4077 tree arg1 MEM_STAT_DECL) 4078 { 4079 tree t = build1_stat (code, type, arg1 PASS_MEM_STAT); 4080 if (CAN_HAVE_LOCATION_P (t)) 4081 SET_EXPR_LOCATION (t, loc); 4082 return t; 4083 } 4084 #define build1_loc(l,c,t1,t2) build1_stat_loc (l,c,t1,t2 MEM_STAT_INFO) 4085 4086 static inline tree 4087 build2_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0, 4088 tree arg1 MEM_STAT_DECL) 4089 { 4090 tree t = build2_stat (code, type, arg0, arg1 PASS_MEM_STAT); 4091 if (CAN_HAVE_LOCATION_P (t)) 4092 SET_EXPR_LOCATION (t, loc); 4093 return t; 4094 } 4095 #define build2_loc(l,c,t1,t2,t3) build2_stat_loc (l,c,t1,t2,t3 MEM_STAT_INFO) 4096 4097 static inline tree 4098 build3_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0, 4099 tree arg1, tree arg2 MEM_STAT_DECL) 4100 { 4101 tree t = build3_stat (code, type, arg0, arg1, arg2 PASS_MEM_STAT); 4102 if (CAN_HAVE_LOCATION_P (t)) 4103 SET_EXPR_LOCATION (t, loc); 4104 return t; 4105 } 4106 #define build3_loc(l,c,t1,t2,t3,t4) \ 4107 build3_stat_loc (l,c,t1,t2,t3,t4 MEM_STAT_INFO) 4108 4109 static inline tree 4110 build4_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0, 4111 tree arg1, tree arg2, tree arg3 MEM_STAT_DECL) 4112 { 4113 tree t = build4_stat (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT); 4114 if (CAN_HAVE_LOCATION_P (t)) 4115 SET_EXPR_LOCATION (t, loc); 4116 return t; 4117 } 4118 #define build4_loc(l,c,t1,t2,t3,t4,t5) \ 4119 build4_stat_loc (l,c,t1,t2,t3,t4,t5 MEM_STAT_INFO) 4120 4121 static inline tree 4122 build5_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0, 4123 tree arg1, tree arg2, tree arg3, tree arg4 MEM_STAT_DECL) 4124 { 4125 tree t = build5_stat (code, type, arg0, arg1, arg2, arg3, 4126 arg4 PASS_MEM_STAT); 4127 if (CAN_HAVE_LOCATION_P (t)) 4128 SET_EXPR_LOCATION (t, loc); 4129 return t; 4130 } 4131 #define build5_loc(l,c,t1,t2,t3,t4,t5,t6) \ 4132 build5_stat_loc (l,c,t1,t2,t3,t4,t5,t6 MEM_STAT_INFO) 4133 4134 static inline tree 4135 build6_stat_loc (location_t loc, enum tree_code code, tree type, tree arg0, 4136 tree arg1, tree arg2, tree arg3, tree arg4, 4137 tree arg5 MEM_STAT_DECL) 4138 { 4139 tree t = build6_stat (code, type, arg0, arg1, arg2, arg3, arg4, 4140 arg5 PASS_MEM_STAT); 4141 if (CAN_HAVE_LOCATION_P (t)) 4142 SET_EXPR_LOCATION (t, loc); 4143 return t; 4144 } 4145 #define build6_loc(l,c,t1,t2,t3,t4,t5,t6,t7) \ 4146 build6_stat_loc (l,c,t1,t2,t3,t4,t5,t6,t7 MEM_STAT_INFO) 4147 4148 extern tree build_var_debug_value_stat (tree, tree MEM_STAT_DECL); 4149 #define build_var_debug_value(t1,t2) \ 4150 build_var_debug_value_stat (t1,t2 MEM_STAT_INFO) 4151 4152 /* Constructs double_int from tree CST. */ 4153 4154 static inline double_int 4155 tree_to_double_int (const_tree cst) 4156 { 4157 return TREE_INT_CST (cst); 4158 } 4159 4160 extern tree double_int_to_tree (tree, double_int); 4161 extern bool double_int_fits_to_tree_p (const_tree, double_int); 4162 extern tree force_fit_type_double (tree, double_int, int, bool); 4163 4164 /* Create an INT_CST node with a CST value zero extended. */ 4165 4166 static inline tree 4167 build_int_cstu (tree type, unsigned HOST_WIDE_INT cst) 4168 { 4169 return double_int_to_tree (type, uhwi_to_double_int (cst)); 4170 } 4171 4172 extern tree build_int_cst (tree, HOST_WIDE_INT); 4173 extern tree build_int_cst_type (tree, HOST_WIDE_INT); 4174 extern tree build_int_cst_wide (tree, unsigned HOST_WIDE_INT, HOST_WIDE_INT); 4175 extern tree build_vector (tree, tree); 4176 extern tree build_vector_from_ctor (tree, VEC(constructor_elt,gc) *); 4177 extern tree build_vector_from_val (tree, tree); 4178 extern tree build_constructor (tree, VEC(constructor_elt,gc) *); 4179 extern tree build_constructor_single (tree, tree, tree); 4180 extern tree build_constructor_from_list (tree, tree); 4181 extern tree build_real_from_int_cst (tree, const_tree); 4182 extern tree build_complex (tree, tree, tree); 4183 extern tree build_one_cst (tree); 4184 extern tree build_zero_cst (tree); 4185 extern tree build_string (int, const char *); 4186 extern tree build_tree_list_stat (tree, tree MEM_STAT_DECL); 4187 #define build_tree_list(t,q) build_tree_list_stat(t,q MEM_STAT_INFO) 4188 extern tree build_tree_list_vec_stat (const VEC(tree,gc) * MEM_STAT_DECL); 4189 #define build_tree_list_vec(v) build_tree_list_vec_stat (v MEM_STAT_INFO) 4190 extern tree build_decl_stat (location_t, enum tree_code, 4191 tree, tree MEM_STAT_DECL); 4192 extern tree build_fn_decl (const char *, tree); 4193 #define build_decl(l,c,t,q) build_decl_stat (l,c,t,q MEM_STAT_INFO) 4194 extern tree build_translation_unit_decl (tree); 4195 extern tree build_block (tree, tree, tree, tree); 4196 extern tree build_empty_stmt (location_t); 4197 extern tree build_omp_clause (location_t, enum omp_clause_code); 4198 4199 extern tree build_vl_exp_stat (enum tree_code, int MEM_STAT_DECL); 4200 #define build_vl_exp(c,n) build_vl_exp_stat (c,n MEM_STAT_INFO) 4201 4202 extern tree build_call_nary (tree, tree, int, ...); 4203 extern tree build_call_valist (tree, tree, int, va_list); 4204 #define build_call_array(T1,T2,N,T3)\ 4205 build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3) 4206 extern tree build_call_array_loc (location_t, tree, tree, int, const tree *); 4207 extern tree build_call_vec (tree, tree, VEC(tree,gc) *); 4208 4209 /* Construct various nodes representing data types. */ 4210 4211 extern tree make_signed_type (int); 4212 extern tree make_unsigned_type (int); 4213 extern tree signed_or_unsigned_type_for (int, tree); 4214 extern tree signed_type_for (tree); 4215 extern tree unsigned_type_for (tree); 4216 extern void initialize_sizetypes (void); 4217 extern void set_sizetype (tree); 4218 extern void fixup_unsigned_type (tree); 4219 extern tree build_pointer_type_for_mode (tree, enum machine_mode, bool); 4220 extern tree build_pointer_type (tree); 4221 extern tree build_reference_type_for_mode (tree, enum machine_mode, bool); 4222 extern tree build_reference_type (tree); 4223 extern tree build_vector_type_for_mode (tree, enum machine_mode); 4224 extern tree build_vector_type (tree innertype, int nunits); 4225 extern tree build_opaque_vector_type (tree innertype, int nunits); 4226 extern tree build_type_no_quals (tree); 4227 extern tree build_index_type (tree); 4228 extern tree build_array_type (tree, tree); 4229 extern tree build_nonshared_array_type (tree, tree); 4230 extern tree build_function_type (tree, tree); 4231 extern tree build_function_type_list (tree, ...); 4232 extern tree build_function_type_skip_args (tree, bitmap); 4233 extern tree build_function_decl_skip_args (tree, bitmap); 4234 extern tree build_varargs_function_type_list (tree, ...); 4235 extern tree build_method_type_directly (tree, tree, tree); 4236 extern tree build_method_type (tree, tree); 4237 extern tree build_offset_type (tree, tree); 4238 extern tree build_complex_type (tree); 4239 extern tree array_type_nelts (const_tree); 4240 extern bool in_array_bounds_p (tree); 4241 extern bool range_in_array_bounds_p (tree); 4242 4243 extern tree value_member (tree, tree); 4244 extern tree purpose_member (const_tree, tree); 4245 extern bool vec_member (const_tree, VEC(tree,gc) *); 4246 extern tree chain_index (int, tree); 4247 4248 extern int attribute_list_equal (const_tree, const_tree); 4249 extern int attribute_list_contained (const_tree, const_tree); 4250 extern int tree_int_cst_equal (const_tree, const_tree); 4251 extern int tree_int_cst_lt (const_tree, const_tree); 4252 extern int tree_int_cst_compare (const_tree, const_tree); 4253 extern int host_integerp (const_tree, int) 4254 #ifndef ENABLE_TREE_CHECKING 4255 ATTRIBUTE_PURE /* host_integerp is pure only when checking is disabled. */ 4256 #endif 4257 ; 4258 extern HOST_WIDE_INT tree_low_cst (const_tree, int); 4259 #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003) 4260 extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT 4261 tree_low_cst (const_tree t, int pos) 4262 { 4263 gcc_assert (host_integerp (t, pos)); 4264 return TREE_INT_CST_LOW (t); 4265 } 4266 #endif 4267 extern int tree_int_cst_msb (const_tree); 4268 extern int tree_int_cst_sgn (const_tree); 4269 extern int tree_int_cst_sign_bit (const_tree); 4270 extern unsigned int tree_int_cst_min_precision (tree, bool); 4271 extern bool tree_expr_nonnegative_p (tree); 4272 extern bool tree_expr_nonnegative_warnv_p (tree, bool *); 4273 extern bool may_negate_without_overflow_p (const_tree); 4274 extern tree strip_array_types (tree); 4275 extern tree excess_precision_type (tree); 4276 4277 /* Construct various nodes representing fract or accum data types. */ 4278 4279 extern tree make_fract_type (int, int, int); 4280 extern tree make_accum_type (int, int, int); 4281 4282 #define make_signed_fract_type(P) make_fract_type (P, 0, 0) 4283 #define make_unsigned_fract_type(P) make_fract_type (P, 1, 0) 4284 #define make_sat_signed_fract_type(P) make_fract_type (P, 0, 1) 4285 #define make_sat_unsigned_fract_type(P) make_fract_type (P, 1, 1) 4286 #define make_signed_accum_type(P) make_accum_type (P, 0, 0) 4287 #define make_unsigned_accum_type(P) make_accum_type (P, 1, 0) 4288 #define make_sat_signed_accum_type(P) make_accum_type (P, 0, 1) 4289 #define make_sat_unsigned_accum_type(P) make_accum_type (P, 1, 1) 4290 4291 #define make_or_reuse_signed_fract_type(P) \ 4292 make_or_reuse_fract_type (P, 0, 0) 4293 #define make_or_reuse_unsigned_fract_type(P) \ 4294 make_or_reuse_fract_type (P, 1, 0) 4295 #define make_or_reuse_sat_signed_fract_type(P) \ 4296 make_or_reuse_fract_type (P, 0, 1) 4297 #define make_or_reuse_sat_unsigned_fract_type(P) \ 4298 make_or_reuse_fract_type (P, 1, 1) 4299 #define make_or_reuse_signed_accum_type(P) \ 4300 make_or_reuse_accum_type (P, 0, 0) 4301 #define make_or_reuse_unsigned_accum_type(P) \ 4302 make_or_reuse_accum_type (P, 1, 0) 4303 #define make_or_reuse_sat_signed_accum_type(P) \ 4304 make_or_reuse_accum_type (P, 0, 1) 4305 #define make_or_reuse_sat_unsigned_accum_type(P) \ 4306 make_or_reuse_accum_type (P, 1, 1) 4307 4308 /* From expmed.c. Since rtl.h is included after tree.h, we can't 4309 put the prototype here. Rtl.h does declare the prototype if 4310 tree.h had been included. */ 4311 4312 extern tree make_tree (tree, rtx); 4313 4314 /* Return a type like TTYPE except that its TYPE_ATTRIBUTES 4316 is ATTRIBUTE. 4317 4318 Such modified types already made are recorded so that duplicates 4319 are not made. */ 4320 4321 extern tree build_type_attribute_variant (tree, tree); 4322 extern tree build_decl_attribute_variant (tree, tree); 4323 extern tree build_type_attribute_qual_variant (tree, tree, int); 4324 4325 /* Structure describing an attribute and a function to handle it. */ 4326 struct attribute_spec 4327 { 4328 /* The name of the attribute (without any leading or trailing __), 4329 or NULL to mark the end of a table of attributes. */ 4330 const char *const name; 4331 /* The minimum length of the list of arguments of the attribute. */ 4332 const int min_length; 4333 /* The maximum length of the list of arguments of the attribute 4334 (-1 for no maximum). */ 4335 const int max_length; 4336 /* Whether this attribute requires a DECL. If it does, it will be passed 4337 from types of DECLs, function return types and array element types to 4338 the DECLs, function types and array types respectively; but when 4339 applied to a type in any other circumstances, it will be ignored with 4340 a warning. (If greater control is desired for a given attribute, 4341 this should be false, and the flags argument to the handler may be 4342 used to gain greater control in that case.) */ 4343 const bool decl_required; 4344 /* Whether this attribute requires a type. If it does, it will be passed 4345 from a DECL to the type of that DECL. */ 4346 const bool type_required; 4347 /* Whether this attribute requires a function (or method) type. If it does, 4348 it will be passed from a function pointer type to the target type, 4349 and from a function return type (which is not itself a function 4350 pointer type) to the function type. */ 4351 const bool function_type_required; 4352 /* Function to handle this attribute. NODE points to the node to which 4353 the attribute is to be applied. If a DECL, it should be modified in 4354 place; if a TYPE, a copy should be created. NAME is the name of the 4355 attribute (possibly with leading or trailing __). ARGS is the TREE_LIST 4356 of the arguments (which may be NULL). FLAGS gives further information 4357 about the context of the attribute. Afterwards, the attributes will 4358 be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as appropriate, 4359 unless *NO_ADD_ATTRS is set to true (which should be done on error, 4360 as well as in any other cases when the attributes should not be added 4361 to the DECL or TYPE). Depending on FLAGS, any attributes to be 4362 applied to another type or DECL later may be returned; 4363 otherwise the return value should be NULL_TREE. This pointer may be 4364 NULL if no special handling is required beyond the checks implied 4365 by the rest of this structure. */ 4366 tree (*const handler) (tree *node, tree name, tree args, 4367 int flags, bool *no_add_attrs); 4368 }; 4369 4370 /* Flags that may be passed in the third argument of decl_attributes, and 4371 to handler functions for attributes. */ 4372 enum attribute_flags 4373 { 4374 /* The type passed in is the type of a DECL, and any attributes that 4375 should be passed in again to be applied to the DECL rather than the 4376 type should be returned. */ 4377 ATTR_FLAG_DECL_NEXT = 1, 4378 /* The type passed in is a function return type, and any attributes that 4379 should be passed in again to be applied to the function type rather 4380 than the return type should be returned. */ 4381 ATTR_FLAG_FUNCTION_NEXT = 2, 4382 /* The type passed in is an array element type, and any attributes that 4383 should be passed in again to be applied to the array type rather 4384 than the element type should be returned. */ 4385 ATTR_FLAG_ARRAY_NEXT = 4, 4386 /* The type passed in is a structure, union or enumeration type being 4387 created, and should be modified in place. */ 4388 ATTR_FLAG_TYPE_IN_PLACE = 8, 4389 /* The attributes are being applied by default to a library function whose 4390 name indicates known behavior, and should be silently ignored if they 4391 are not in fact compatible with the function type. */ 4392 ATTR_FLAG_BUILT_IN = 16 4393 }; 4394 4395 /* Default versions of target-overridable functions. */ 4396 4397 extern tree merge_decl_attributes (tree, tree); 4398 extern tree merge_type_attributes (tree, tree); 4399 4400 /* Given a tree node and a string, return nonzero if the tree node is 4401 a valid attribute name for the string. */ 4402 4403 extern int is_attribute_p (const char *, const_tree); 4404 4405 /* Given an attribute name and a list of attributes, return the list element 4406 of the attribute or NULL_TREE if not found. */ 4407 4408 extern tree lookup_attribute (const char *, tree); 4409 4410 /* Remove any instances of attribute ATTR_NAME in LIST and return the 4411 modified list. */ 4412 4413 extern tree remove_attribute (const char *, tree); 4414 4415 /* Given two attributes lists, return a list of their union. */ 4416 4417 extern tree merge_attributes (tree, tree); 4418 4419 #if TARGET_DLLIMPORT_DECL_ATTRIBUTES 4420 /* Given two Windows decl attributes lists, possibly including 4421 dllimport, return a list of their union . */ 4422 extern tree merge_dllimport_decl_attributes (tree, tree); 4423 4424 /* Handle a "dllimport" or "dllexport" attribute. */ 4425 extern tree handle_dll_attribute (tree *, tree, tree, int, bool *); 4426 #endif 4427 4428 /* Check whether CAND is suitable to be returned from get_qualified_type 4429 (BASE, TYPE_QUALS). */ 4430 4431 extern bool check_qualified_type (const_tree, const_tree, int); 4432 4433 /* Return a version of the TYPE, qualified as indicated by the 4434 TYPE_QUALS, if one exists. If no qualified version exists yet, 4435 return NULL_TREE. */ 4436 4437 extern tree get_qualified_type (tree, int); 4438 4439 /* Like get_qualified_type, but creates the type if it does not 4440 exist. This function never returns NULL_TREE. */ 4441 4442 extern tree build_qualified_type (tree, int); 4443 4444 /* Create a variant of type T with alignment ALIGN. */ 4445 4446 extern tree build_aligned_type (tree, unsigned int); 4447 4448 /* Like build_qualified_type, but only deals with the `const' and 4449 `volatile' qualifiers. This interface is retained for backwards 4450 compatibility with the various front-ends; new code should use 4451 build_qualified_type instead. */ 4452 4453 #define build_type_variant(TYPE, CONST_P, VOLATILE_P) \ 4454 build_qualified_type ((TYPE), \ 4455 ((CONST_P) ? TYPE_QUAL_CONST : 0) \ 4456 | ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0)) 4457 4458 /* Make a copy of a type node. */ 4459 4460 extern tree build_distinct_type_copy (tree); 4461 extern tree build_variant_type_copy (tree); 4462 4463 /* Finish up a builtin RECORD_TYPE. Give it a name and provide its 4464 fields. Optionally specify an alignment, and then lay it out. */ 4465 4466 extern void finish_builtin_struct (tree, const char *, 4467 tree, tree); 4468 4469 /* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT, 4470 TYPE_ALIGN and TYPE_MODE fields. If called more than once on one 4471 node, does nothing except for the first time. */ 4472 4473 extern void layout_type (tree); 4474 4475 /* These functions allow a front-end to perform a manual layout of a 4476 RECORD_TYPE. (For instance, if the placement of subsequent fields 4477 depends on the placement of fields so far.) Begin by calling 4478 start_record_layout. Then, call place_field for each of the 4479 fields. Then, call finish_record_layout. See layout_type for the 4480 default way in which these functions are used. */ 4481 4482 typedef struct record_layout_info_s 4483 { 4484 /* The RECORD_TYPE that we are laying out. */ 4485 tree t; 4486 /* The offset into the record so far, in bytes, not including bits in 4487 BITPOS. */ 4488 tree offset; 4489 /* The last known alignment of SIZE. */ 4490 unsigned int offset_align; 4491 /* The bit position within the last OFFSET_ALIGN bits, in bits. */ 4492 tree bitpos; 4493 /* The alignment of the record so far, in bits. */ 4494 unsigned int record_align; 4495 /* The alignment of the record so far, ignoring #pragma pack and 4496 __attribute__ ((packed)), in bits. */ 4497 unsigned int unpacked_align; 4498 /* The previous field layed out. */ 4499 tree prev_field; 4500 /* The static variables (i.e., class variables, as opposed to 4501 instance variables) encountered in T. */ 4502 VEC(tree,gc) *pending_statics; 4503 /* Bits remaining in the current alignment group */ 4504 int remaining_in_alignment; 4505 /* True if we've seen a packed field that didn't have normal 4506 alignment anyway. */ 4507 int packed_maybe_necessary; 4508 } *record_layout_info; 4509 4510 extern record_layout_info start_record_layout (tree); 4511 extern tree bit_from_pos (tree, tree); 4512 extern tree byte_from_pos (tree, tree); 4513 extern void pos_from_bit (tree *, tree *, unsigned int, tree); 4514 extern void normalize_offset (tree *, tree *, unsigned int); 4515 extern tree rli_size_unit_so_far (record_layout_info); 4516 extern tree rli_size_so_far (record_layout_info); 4517 extern void normalize_rli (record_layout_info); 4518 extern void place_field (record_layout_info, tree); 4519 extern void compute_record_mode (tree); 4520 extern void finish_record_layout (record_layout_info, int); 4521 4522 /* Given a hashcode and a ..._TYPE node (for which the hashcode was made), 4523 return a canonicalized ..._TYPE node, so that duplicates are not made. 4524 How the hash code is computed is up to the caller, as long as any two 4525 callers that could hash identical-looking type nodes agree. */ 4526 4527 extern tree type_hash_canon (unsigned int, tree); 4528 4529 /* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node, 4530 calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE 4531 fields. Call this only once for any given decl node. 4532 4533 Second argument is the boundary that this field can be assumed to 4534 be starting at (in bits). Zero means it can be assumed aligned 4535 on any boundary that may be needed. */ 4536 4537 extern void layout_decl (tree, unsigned); 4538 4539 /* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of 4540 a previous call to layout_decl and calls it again. */ 4541 4542 extern void relayout_decl (tree); 4543 4544 /* Return the mode for data of a given size SIZE and mode class CLASS. 4545 If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE. 4546 The value is BLKmode if no other mode is found. This is like 4547 mode_for_size, but is passed a tree. */ 4548 4549 extern enum machine_mode mode_for_size_tree (const_tree, enum mode_class, int); 4550 4551 /* Return an expr equal to X but certainly not valid as an lvalue. */ 4552 4553 #define non_lvalue(T) non_lvalue_loc (UNKNOWN_LOCATION, T) 4554 extern tree non_lvalue_loc (location_t, tree); 4555 4556 extern tree convert (tree, tree); 4557 extern unsigned int expr_align (const_tree); 4558 extern tree expr_first (tree); 4559 extern tree expr_last (tree); 4560 extern tree size_in_bytes (const_tree); 4561 extern HOST_WIDE_INT int_size_in_bytes (const_tree); 4562 extern HOST_WIDE_INT max_int_size_in_bytes (const_tree); 4563 extern tree tree_expr_size (const_tree); 4564 extern tree bit_position (const_tree); 4565 extern HOST_WIDE_INT int_bit_position (const_tree); 4566 extern tree byte_position (const_tree); 4567 extern HOST_WIDE_INT int_byte_position (const_tree); 4568 4569 /* Define data structures, macros, and functions for handling sizes 4570 and the various types used to represent sizes. */ 4571 4572 enum size_type_kind 4573 { 4574 SIZETYPE, /* Normal representation of sizes in bytes. */ 4575 SSIZETYPE, /* Signed representation of sizes in bytes. */ 4576 BITSIZETYPE, /* Normal representation of sizes in bits. */ 4577 SBITSIZETYPE, /* Signed representation of sizes in bits. */ 4578 TYPE_KIND_LAST}; 4579 4580 extern GTY(()) tree sizetype_tab[(int) TYPE_KIND_LAST]; 4581 4582 #define sizetype sizetype_tab[(int) SIZETYPE] 4583 #define bitsizetype sizetype_tab[(int) BITSIZETYPE] 4584 #define ssizetype sizetype_tab[(int) SSIZETYPE] 4585 #define sbitsizetype sizetype_tab[(int) SBITSIZETYPE] 4586 4587 extern tree size_int_kind (HOST_WIDE_INT, enum size_type_kind); 4588 #define size_binop(CODE,T1,T2)\ 4589 size_binop_loc (UNKNOWN_LOCATION, CODE, T1, T2) 4590 extern tree size_binop_loc (location_t, enum tree_code, tree, tree); 4591 #define size_diffop(T1,T2)\ 4592 size_diffop_loc (UNKNOWN_LOCATION, T1, T2) 4593 extern tree size_diffop_loc (location_t, tree, tree); 4594 4595 #define size_int(L) size_int_kind (L, SIZETYPE) 4596 #define ssize_int(L) size_int_kind (L, SSIZETYPE) 4597 #define bitsize_int(L) size_int_kind (L, BITSIZETYPE) 4598 #define sbitsize_int(L) size_int_kind (L, SBITSIZETYPE) 4599 4600 #define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N) 4601 extern tree round_up_loc (location_t, tree, int); 4602 #define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N) 4603 extern tree round_down_loc (location_t, tree, int); 4604 extern VEC(tree,gc) *get_pending_sizes (void); 4605 extern void put_pending_size (tree); 4606 extern void put_pending_sizes (VEC(tree,gc) *); 4607 extern void finalize_size_functions (void); 4608 4609 /* Type for sizes of data-type. */ 4610 4611 #define BITS_PER_UNIT_LOG \ 4612 ((BITS_PER_UNIT > 1) + (BITS_PER_UNIT > 2) + (BITS_PER_UNIT > 4) \ 4613 + (BITS_PER_UNIT > 8) + (BITS_PER_UNIT > 16) + (BITS_PER_UNIT > 32) \ 4614 + (BITS_PER_UNIT > 64) + (BITS_PER_UNIT > 128) + (BITS_PER_UNIT > 256)) 4615 4616 /* If nonzero, an upper limit on alignment of structure fields, in bits, */ 4617 extern unsigned int maximum_field_alignment; 4618 4619 /* Concatenate two lists (chains of TREE_LIST nodes) X and Y 4620 by making the last node in X point to Y. 4621 Returns X, except if X is 0 returns Y. */ 4622 4623 extern tree chainon (tree, tree); 4624 4625 /* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN. */ 4626 4627 extern tree tree_cons_stat (tree, tree, tree MEM_STAT_DECL); 4628 #define tree_cons(t,q,w) tree_cons_stat (t,q,w MEM_STAT_INFO) 4629 4630 /* Return the last tree node in a chain. */ 4631 4632 extern tree tree_last (tree); 4633 4634 /* Reverse the order of elements in a chain, and return the new head. */ 4635 4636 extern tree nreverse (tree); 4637 4638 /* Returns the length of a chain of nodes 4639 (number of chain pointers to follow before reaching a null pointer). */ 4640 4641 extern int list_length (const_tree); 4642 4643 /* Returns the number of FIELD_DECLs in a type. */ 4644 4645 extern int fields_length (const_tree); 4646 4647 /* Returns the first FIELD_DECL in a type. */ 4648 4649 extern tree first_field (const_tree); 4650 4651 /* Given an initializer INIT, return TRUE if INIT is zero or some 4652 aggregate of zeros. Otherwise return FALSE. */ 4653 4654 extern bool initializer_zerop (const_tree); 4655 4656 /* Given a CONSTRUCTOR CTOR, return the element values as a vector. */ 4657 4658 extern VEC(tree,gc) *ctor_to_vec (tree); 4659 4660 /* Examine CTOR to discover: 4661 * how many scalar fields are set to nonzero values, 4662 and place it in *P_NZ_ELTS; 4663 * how many scalar fields in total are in CTOR, 4664 and place it in *P_ELT_COUNT. 4665 * if a type is a union, and the initializer from the constructor 4666 is not the largest element in the union, then set *p_must_clear. 4667 4668 Return whether or not CTOR is a valid static constant initializer, the same 4669 as "initializer_constant_valid_p (CTOR, TREE_TYPE (CTOR)) != 0". */ 4670 4671 extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *, HOST_WIDE_INT *, 4672 bool *); 4673 4674 extern HOST_WIDE_INT count_type_elements (const_tree, bool); 4675 4676 /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0. */ 4677 4678 extern int integer_zerop (const_tree); 4679 4680 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1. */ 4681 4682 extern int integer_onep (const_tree); 4683 4684 /* integer_all_onesp (tree x) is nonzero if X is an integer constant 4685 all of whose significant bits are 1. */ 4686 4687 extern int integer_all_onesp (const_tree); 4688 4689 /* integer_pow2p (tree x) is nonzero is X is an integer constant with 4690 exactly one bit 1. */ 4691 4692 extern int integer_pow2p (const_tree); 4693 4694 /* integer_nonzerop (tree x) is nonzero if X is an integer constant 4695 with a nonzero value. */ 4696 4697 extern int integer_nonzerop (const_tree); 4698 4699 extern bool cst_and_fits_in_hwi (const_tree); 4700 extern tree num_ending_zeros (const_tree); 4701 4702 /* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of 4703 value 0. */ 4704 4705 extern int fixed_zerop (const_tree); 4706 4707 /* staticp (tree x) is nonzero if X is a reference to data allocated 4708 at a fixed address in memory. Returns the outermost data. */ 4709 4710 extern tree staticp (tree); 4711 4712 /* save_expr (EXP) returns an expression equivalent to EXP 4713 but it can be used multiple times within context CTX 4714 and only evaluate EXP once. */ 4715 4716 extern tree save_expr (tree); 4717 4718 /* Look inside EXPR and into any simple arithmetic operations. Return 4719 the innermost non-arithmetic node. */ 4720 4721 extern tree skip_simple_arithmetic (tree); 4722 4723 /* Return which tree structure is used by T. */ 4724 4725 enum tree_node_structure_enum tree_node_structure (const_tree); 4726 4727 /* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a 4728 size or offset that depends on a field within a record. */ 4729 4730 extern bool contains_placeholder_p (const_tree); 4731 4732 /* This macro calls the above function but short-circuits the common 4733 case of a constant to save time. Also check for null. */ 4734 4735 #define CONTAINS_PLACEHOLDER_P(EXP) \ 4736 ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP)) 4737 4738 /* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR 4739 directly. This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and 4740 field positions. */ 4741 4742 extern bool type_contains_placeholder_p (tree); 4743 4744 /* Given a tree EXP, find all occurences of references to fields 4745 in a PLACEHOLDER_EXPR and place them in vector REFS without 4746 duplicates. Also record VAR_DECLs and CONST_DECLs. Note that 4747 we assume here that EXP contains only arithmetic expressions 4748 or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their 4749 argument list. */ 4750 4751 extern void find_placeholder_in_expr (tree, VEC (tree, heap) **); 4752 4753 /* This macro calls the above function but short-circuits the common 4754 case of a constant to save time and also checks for NULL. */ 4755 4756 #define FIND_PLACEHOLDER_IN_EXPR(EXP, V) \ 4757 do { \ 4758 if((EXP) && !TREE_CONSTANT (EXP)) \ 4759 find_placeholder_in_expr (EXP, V); \ 4760 } while (0) 4761 4762 /* Given a tree EXP, a FIELD_DECL F, and a replacement value R, 4763 return a tree with all occurrences of references to F in a 4764 PLACEHOLDER_EXPR replaced by R. Also handle VAR_DECLs and 4765 CONST_DECLs. Note that we assume here that EXP contains only 4766 arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs 4767 occurring only in their argument list. */ 4768 4769 extern tree substitute_in_expr (tree, tree, tree); 4770 4771 /* This macro calls the above function but short-circuits the common 4772 case of a constant to save time and also checks for NULL. */ 4773 4774 #define SUBSTITUTE_IN_EXPR(EXP, F, R) \ 4775 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R)) 4776 4777 /* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement 4778 for it within OBJ, a tree that is an object or a chain of references. */ 4779 4780 extern tree substitute_placeholder_in_expr (tree, tree); 4781 4782 /* This macro calls the above function but short-circuits the common 4783 case of a constant to save time and also checks for NULL. */ 4784 4785 #define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \ 4786 ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) \ 4787 : substitute_placeholder_in_expr (EXP, OBJ)) 4788 4789 /* variable_size (EXP) is like save_expr (EXP) except that it 4790 is for the special case of something that is part of a 4791 variable size for a data type. It makes special arrangements 4792 to compute the value at the right time when the data type 4793 belongs to a function parameter. */ 4794 4795 extern tree variable_size (tree); 4796 4797 /* stabilize_reference (EXP) returns a reference equivalent to EXP 4798 but it can be used multiple times 4799 and only evaluate the subexpressions once. */ 4800 4801 extern tree stabilize_reference (tree); 4802 4803 /* Subroutine of stabilize_reference; this is called for subtrees of 4804 references. Any expression with side-effects must be put in a SAVE_EXPR 4805 to ensure that it is only evaluated once. */ 4806 4807 extern tree stabilize_reference_1 (tree); 4808 4809 /* Return EXP, stripped of any conversions to wider types 4810 in such a way that the result of converting to type FOR_TYPE 4811 is the same as if EXP were converted to FOR_TYPE. 4812 If FOR_TYPE is 0, it signifies EXP's type. */ 4813 4814 extern tree get_unwidened (tree, tree); 4815 4816 /* Return OP or a simpler expression for a narrower value 4817 which can be sign-extended or zero-extended to give back OP. 4818 Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended 4819 or 0 if the value should be sign-extended. */ 4820 4821 extern tree get_narrower (tree, int *); 4822 4823 /* Return true if T is an expression that get_inner_reference handles. */ 4824 4825 static inline bool 4826 handled_component_p (const_tree t) 4827 { 4828 switch (TREE_CODE (t)) 4829 { 4830 case BIT_FIELD_REF: 4831 case COMPONENT_REF: 4832 case ARRAY_REF: 4833 case ARRAY_RANGE_REF: 4834 case VIEW_CONVERT_EXPR: 4835 case REALPART_EXPR: 4836 case IMAGPART_EXPR: 4837 return true; 4838 4839 default: 4840 return false; 4841 } 4842 } 4843 4844 /* Given an expression EXP that is a handled_component_p, 4845 look for the ultimate containing object, which is returned and specify 4846 the access position and size. */ 4847 4848 extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *, 4849 tree *, enum machine_mode *, int *, int *, 4850 bool); 4851 4852 /* Given an expression EXP that may be a COMPONENT_REF, an ARRAY_REF or an 4853 ARRAY_RANGE_REF, look for whether EXP or any nested component-refs within 4854 EXP is marked as PACKED. */ 4855 4856 extern bool contains_packed_reference (const_tree exp); 4857 4858 /* Return a tree of sizetype representing the size, in bytes, of the element 4859 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 4860 4861 extern tree array_ref_element_size (tree); 4862 4863 /* Return a tree representing the lower bound of the array mentioned in 4864 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 4865 4866 extern tree array_ref_low_bound (tree); 4867 4868 /* Return a tree representing the upper bound of the array mentioned in 4869 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 4870 4871 extern tree array_ref_up_bound (tree); 4872 4873 /* Return a tree representing the offset, in bytes, of the field referenced 4874 by EXP. This does not include any offset in DECL_FIELD_BIT_OFFSET. */ 4875 4876 extern tree component_ref_field_offset (tree); 4877 4878 /* Given a DECL or TYPE, return the scope in which it was declared, or 4879 NUL_TREE if there is no containing scope. */ 4880 4881 extern tree get_containing_scope (const_tree); 4882 4883 /* Return the FUNCTION_DECL which provides this _DECL with its context, 4884 or zero if none. */ 4885 extern tree decl_function_context (const_tree); 4886 4887 /* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides 4888 this _DECL with its context, or zero if none. */ 4889 extern tree decl_type_context (const_tree); 4890 4891 /* Return 1 if EXPR is the real constant zero. */ 4892 extern int real_zerop (const_tree); 4893 4894 /* Declare commonly used variables for tree structure. */ 4896 4897 /* Nonzero means lvalues are limited to those valid in pedantic ANSI C. 4898 Zero means allow extended lvalues. */ 4899 4900 extern int pedantic_lvalues; 4901 4902 /* Points to the FUNCTION_DECL of the function whose body we are reading. */ 4903 4904 extern GTY(()) tree current_function_decl; 4905 4906 /* Nonzero means a FUNC_BEGIN label was emitted. */ 4907 extern GTY(()) const char * current_function_func_begin_label; 4908 4909 /* Iterator for going through the function arguments. */ 4911 typedef struct { 4912 tree next; /* TREE_LIST pointing to the next argument */ 4913 } function_args_iterator; 4914 4915 /* Initialize the iterator I with arguments from function FNDECL */ 4916 4917 static inline void 4918 function_args_iter_init (function_args_iterator *i, const_tree fntype) 4919 { 4920 i->next = TYPE_ARG_TYPES (fntype); 4921 } 4922 4923 /* Return a pointer that holds the next argument if there are more arguments to 4924 handle, otherwise return NULL. */ 4925 4926 static inline tree * 4927 function_args_iter_cond_ptr (function_args_iterator *i) 4928 { 4929 return (i->next) ? &TREE_VALUE (i->next) : NULL; 4930 } 4931 4932 /* Return the next argument if there are more arguments to handle, otherwise 4933 return NULL. */ 4934 4935 static inline tree 4936 function_args_iter_cond (function_args_iterator *i) 4937 { 4938 return (i->next) ? TREE_VALUE (i->next) : NULL_TREE; 4939 } 4940 4941 /* Advance to the next argument. */ 4942 static inline void 4943 function_args_iter_next (function_args_iterator *i) 4944 { 4945 gcc_assert (i->next != NULL_TREE); 4946 i->next = TREE_CHAIN (i->next); 4947 } 4948 4949 /* We set BLOCK_SOURCE_LOCATION only to inlined function entry points. */ 4950 4951 static inline bool 4952 inlined_function_outer_scope_p (const_tree block) 4953 { 4954 return BLOCK_SOURCE_LOCATION (block) != UNKNOWN_LOCATION; 4955 } 4956 4957 /* Loop over all function arguments of FNTYPE. In each iteration, PTR is set 4958 to point to the next tree element. ITER is an instance of 4959 function_args_iterator used to iterate the arguments. */ 4960 #define FOREACH_FUNCTION_ARGS_PTR(FNTYPE, PTR, ITER) \ 4961 for (function_args_iter_init (&(ITER), (FNTYPE)); \ 4962 (PTR = function_args_iter_cond_ptr (&(ITER))) != NULL; \ 4963 function_args_iter_next (&(ITER))) 4964 4965 /* Loop over all function arguments of FNTYPE. In each iteration, TREE is set 4966 to the next tree element. ITER is an instance of function_args_iterator 4967 used to iterate the arguments. */ 4968 #define FOREACH_FUNCTION_ARGS(FNTYPE, TREE, ITER) \ 4969 for (function_args_iter_init (&(ITER), (FNTYPE)); \ 4970 (TREE = function_args_iter_cond (&(ITER))) != NULL_TREE; \ 4971 function_args_iter_next (&(ITER))) 4972 4973 4974 4975 /* In tree.c */ 4977 extern unsigned crc32_string (unsigned, const char *); 4978 extern unsigned crc32_byte (unsigned, char); 4979 extern void clean_symbol_name (char *); 4980 extern tree get_file_function_name (const char *); 4981 extern tree get_callee_fndecl (const_tree); 4982 extern int type_num_arguments (const_tree); 4983 extern bool associative_tree_code (enum tree_code); 4984 extern bool commutative_tree_code (enum tree_code); 4985 extern bool commutative_ternary_tree_code (enum tree_code); 4986 extern tree upper_bound_in_type (tree, tree); 4987 extern tree lower_bound_in_type (tree, tree); 4988 extern int operand_equal_for_phi_arg_p (const_tree, const_tree); 4989 extern tree call_expr_arg (tree, int); 4990 extern tree *call_expr_argp (tree, int); 4991 extern tree create_artificial_label (location_t); 4992 extern const char *get_name (tree); 4993 extern bool stdarg_p (const_tree); 4994 extern bool prototype_p (tree); 4995 extern bool is_typedef_decl (tree x); 4996 extern bool typedef_variant_p (tree); 4997 extern bool auto_var_in_fn_p (const_tree, const_tree); 4998 extern tree build_low_bits_mask (tree, unsigned); 4999 extern tree tree_strip_nop_conversions (tree); 5000 extern tree tree_strip_sign_nop_conversions (tree); 5001 extern tree lhd_gcc_personality (void); 5002 extern void assign_assembler_name_if_neeeded (tree); 5003 extern void warn_deprecated_use (tree, tree); 5004 5005 5006 /* In cgraph.c */ 5008 extern void change_decl_assembler_name (tree, tree); 5009 5010 /* In gimplify.c */ 5012 extern tree unshare_expr (tree); 5013 5014 /* In stmt.c */ 5016 5017 extern void expand_expr_stmt (tree); 5018 extern int warn_if_unused_value (const_tree, location_t); 5019 extern void expand_label (tree); 5020 extern void expand_goto (tree); 5021 5022 extern rtx expand_stack_save (void); 5023 extern void expand_stack_restore (tree); 5024 extern void expand_return (tree); 5025 5026 /* In tree-eh.c */ 5027 extern void using_eh_for_cleanups (void); 5028 5029 /* In fold-const.c */ 5030 5031 /* Non-zero if we are folding constants inside an initializer; zero 5032 otherwise. */ 5033 extern int folding_initializer; 5034 5035 /* Convert between trees and native memory representation. */ 5036 extern int native_encode_expr (const_tree, unsigned char *, int); 5037 extern tree native_interpret_expr (tree, const unsigned char *, int); 5038 5039 /* Fold constants as much as possible in an expression. 5040 Returns the simplified expression. 5041 Acts only on the top level of the expression; 5042 if the argument itself cannot be simplified, its 5043 subexpressions are not changed. */ 5044 5045 extern tree fold (tree); 5046 #define fold_unary(CODE,T1,T2)\ 5047 fold_unary_loc (UNKNOWN_LOCATION, CODE, T1, T2) 5048 extern tree fold_unary_loc (location_t, enum tree_code, tree, tree); 5049 #define fold_unary_ignore_overflow(CODE,T1,T2)\ 5050 fold_unary_ignore_overflow_loc (UNKNOWN_LOCATION, CODE, T1, T2) 5051 extern tree fold_unary_ignore_overflow_loc (location_t, enum tree_code, tree, tree); 5052 #define fold_binary(CODE,T1,T2,T3)\ 5053 fold_binary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3) 5054 extern tree fold_binary_loc (location_t, enum tree_code, tree, tree, tree); 5055 #define fold_ternary(CODE,T1,T2,T3,T4)\ 5056 fold_ternary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3, T4) 5057 extern tree fold_ternary_loc (location_t, enum tree_code, tree, tree, tree, tree); 5058 #define fold_build1(c,t1,t2)\ 5059 fold_build1_stat_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO) 5060 #define fold_build1_loc(l,c,t1,t2)\ 5061 fold_build1_stat_loc (l, c, t1, t2 MEM_STAT_INFO) 5062 extern tree fold_build1_stat_loc (location_t, enum tree_code, tree, 5063 tree MEM_STAT_DECL); 5064 #define fold_build2(c,t1,t2,t3)\ 5065 fold_build2_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO) 5066 #define fold_build2_loc(l,c,t1,t2,t3)\ 5067 fold_build2_stat_loc (l, c, t1, t2, t3 MEM_STAT_INFO) 5068 extern tree fold_build2_stat_loc (location_t, enum tree_code, tree, tree, 5069 tree MEM_STAT_DECL); 5070 #define fold_build3(c,t1,t2,t3,t4)\ 5071 fold_build3_stat_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO) 5072 #define fold_build3_loc(l,c,t1,t2,t3,t4)\ 5073 fold_build3_stat_loc (l, c, t1, t2, t3, t4 MEM_STAT_INFO) 5074 extern tree fold_build3_stat_loc (location_t, enum tree_code, tree, tree, tree, 5075 tree MEM_STAT_DECL); 5076 extern tree fold_build1_initializer_loc (location_t, enum tree_code, tree, tree); 5077 extern tree fold_build2_initializer_loc (location_t, enum tree_code, tree, tree, tree); 5078 extern tree fold_build3_initializer_loc (location_t, enum tree_code, tree, tree, tree, tree); 5079 #define fold_build_call_array(T1,T2,N,T4)\ 5080 fold_build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T4) 5081 extern tree fold_build_call_array_loc (location_t, tree, tree, int, tree *); 5082 #define fold_build_call_array_initializer(T1,T2,N,T4)\ 5083 fold_build_call_array_initializer_loc (UNKNOWN_LOCATION, T1, T2, N, T4) 5084 extern tree fold_build_call_array_initializer_loc (location_t, tree, tree, int, tree *); 5085 extern bool fold_convertible_p (const_tree, const_tree); 5086 #define fold_convert(T1,T2)\ 5087 fold_convert_loc(UNKNOWN_LOCATION, T1, T2) 5088 extern tree fold_convert_loc (location_t, tree, tree); 5089 extern tree fold_single_bit_test (location_t, enum tree_code, tree, tree, tree); 5090 extern tree fold_ignored_result (tree); 5091 extern tree fold_abs_const (tree, tree); 5092 extern tree fold_indirect_ref_1 (location_t, tree, tree); 5093 extern void fold_defer_overflow_warnings (void); 5094 extern void fold_undefer_overflow_warnings (bool, const_gimple, int); 5095 extern void fold_undefer_and_ignore_overflow_warnings (void); 5096 extern bool fold_deferring_overflow_warnings_p (void); 5097 extern tree fold_fma (location_t, tree, tree, tree, tree); 5098 5099 enum operand_equal_flag 5100 { 5101 OEP_ONLY_CONST = 1, 5102 OEP_PURE_SAME = 2, 5103 OEP_ALLOW_NULL = 4, /* Allow NULL operands to be passed in and compared. */ 5104 OEP_ALLOW_NO_TYPE = 8 /* Allow operands both of which don't have a type 5105 to be compared. */ 5106 }; 5107 5108 extern int operand_equal_p (const_tree, const_tree, unsigned int); 5109 extern int multiple_of_p (tree, const_tree, const_tree); 5110 #define omit_one_operand(T1,T2,T3)\ 5111 omit_one_operand_loc (UNKNOWN_LOCATION, T1, T2, T3) 5112 extern tree omit_one_operand_loc (location_t, tree, tree, tree); 5113 #define omit_two_operands(T1,T2,T3,T4)\ 5114 omit_two_operands_loc (UNKNOWN_LOCATION, T1, T2, T3, T4) 5115 extern tree omit_two_operands_loc (location_t, tree, tree, tree, tree); 5116 #define invert_truthvalue(T)\ 5117 invert_truthvalue_loc(UNKNOWN_LOCATION, T) 5118 extern tree invert_truthvalue_loc (location_t, tree); 5119 extern tree fold_truth_not_expr (location_t, tree); 5120 extern tree fold_unary_to_constant (enum tree_code, tree, tree); 5121 extern tree fold_binary_to_constant (enum tree_code, tree, tree, tree); 5122 extern tree fold_read_from_constant_string (tree); 5123 extern tree int_const_binop (enum tree_code, const_tree, const_tree, int); 5124 #define build_fold_addr_expr(T)\ 5125 build_fold_addr_expr_loc (UNKNOWN_LOCATION, (T)) 5126 extern tree build_fold_addr_expr_loc (location_t, tree); 5127 #define build_fold_addr_expr_with_type(T,TYPE)\ 5128 build_fold_addr_expr_with_type_loc (UNKNOWN_LOCATION, (T), TYPE) 5129 extern tree build_fold_addr_expr_with_type_loc (location_t, tree, tree); 5130 extern tree fold_build_cleanup_point_expr (tree type, tree expr); 5131 extern tree fold_strip_sign_ops (tree); 5132 #define build_fold_indirect_ref(T)\ 5133 build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T) 5134 extern tree build_fold_indirect_ref_loc (location_t, tree); 5135 #define fold_indirect_ref(T)\ 5136 fold_indirect_ref_loc (UNKNOWN_LOCATION, T) 5137 extern tree fold_indirect_ref_loc (location_t, tree); 5138 extern tree build_simple_mem_ref_loc (location_t, tree); 5139 #define build_simple_mem_ref(T)\ 5140 build_simple_mem_ref_loc (UNKNOWN_LOCATION, T) 5141 extern double_int mem_ref_offset (const_tree); 5142 extern tree reference_alias_ptr_type (const_tree); 5143 extern tree constant_boolean_node (int, tree); 5144 extern tree div_if_zero_remainder (enum tree_code, const_tree, const_tree); 5145 5146 extern bool tree_swap_operands_p (const_tree, const_tree, bool); 5147 extern enum tree_code swap_tree_comparison (enum tree_code); 5148 5149 extern bool ptr_difference_const (tree, tree, HOST_WIDE_INT *); 5150 extern enum tree_code invert_tree_comparison (enum tree_code, bool); 5151 5152 extern bool tree_expr_nonzero_p (tree); 5153 extern bool tree_unary_nonzero_warnv_p (enum tree_code, tree, tree, bool *); 5154 extern bool tree_binary_nonzero_warnv_p (enum tree_code, tree, tree, tree op1, 5155 bool *); 5156 extern bool tree_single_nonzero_warnv_p (tree, bool *); 5157 extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree, bool *); 5158 extern bool tree_binary_nonnegative_warnv_p (enum tree_code, tree, tree, tree, 5159 bool *); 5160 extern bool tree_single_nonnegative_warnv_p (tree t, bool *strict_overflow_p); 5161 extern bool tree_invalid_nonnegative_warnv_p (tree t, bool *strict_overflow_p); 5162 extern bool tree_call_nonnegative_warnv_p (tree, tree, tree, tree, bool *); 5163 5164 extern bool tree_expr_nonzero_warnv_p (tree, bool *); 5165 5166 extern bool fold_real_zero_addition_p (const_tree, const_tree, int); 5167 extern tree combine_comparisons (location_t, enum tree_code, enum tree_code, 5168 enum tree_code, tree, tree, tree); 5169 extern void debug_fold_checksum (const_tree); 5170 5171 /* Return nonzero if CODE is a tree code that represents a truth value. */ 5172 static inline bool 5173 truth_value_p (enum tree_code code) 5174 { 5175 return (TREE_CODE_CLASS (code) == tcc_comparison 5176 || code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR 5177 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR 5178 || code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR); 5179 } 5180 5181 5182 /* In builtins.c */ 5183 extern bool avoid_folding_inline_builtin (tree); 5184 extern tree fold_call_expr (location_t, tree, bool); 5185 extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree); 5186 extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree); 5187 extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree); 5188 extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool, 5189 enum built_in_function); 5190 extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool, 5191 enum built_in_function); 5192 extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, tree); 5193 extern tree fold_builtin_snprintf_chk (location_t, tree, tree, enum built_in_function); 5194 extern bool fold_builtin_next_arg (tree, bool); 5195 extern enum built_in_function builtin_mathfn_code (const_tree); 5196 extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *); 5197 extern tree build_call_expr_loc_array (location_t, tree, int, tree *); 5198 extern tree build_call_expr_loc_vec (location_t, tree, VEC(tree,gc) *); 5199 extern tree build_call_expr_loc (location_t, tree, int, ...); 5200 extern tree build_call_expr (tree, int, ...); 5201 extern tree mathfn_built_in (tree, enum built_in_function fn); 5202 extern tree c_strlen (tree, int); 5203 extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); 5204 extern tree build_va_arg_indirect_ref (tree); 5205 extern tree build_string_literal (int, const char *); 5206 extern bool validate_arglist (const_tree, ...); 5207 extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode); 5208 extern bool can_trust_pointer_alignment (void); 5209 extern unsigned int get_pointer_alignment (tree, unsigned int); 5210 extern bool is_builtin_name (const char *); 5211 extern bool is_builtin_fn (tree); 5212 extern unsigned int get_object_alignment (tree, unsigned int); 5213 extern tree fold_call_stmt (gimple, bool); 5214 extern tree gimple_fold_builtin_snprintf_chk (gimple, tree, enum built_in_function); 5215 extern tree make_range (tree, int *, tree *, tree *, bool *); 5216 extern tree build_range_check (location_t, tree, tree, int, tree, tree); 5217 extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int, 5218 tree, tree); 5219 extern void set_builtin_user_assembler_name (tree decl, const char *asmspec); 5220 extern bool is_simple_builtin (tree); 5221 extern bool is_inexpensive_builtin (tree); 5222 5223 /* In convert.c */ 5224 extern tree strip_float_extensions (tree); 5225 5226 /* In tree.c */ 5227 extern int really_constant_p (const_tree); 5228 extern bool decl_address_invariant_p (const_tree); 5229 extern bool decl_address_ip_invariant_p (const_tree); 5230 extern bool int_fits_type_p (const_tree, const_tree); 5231 #ifndef GENERATOR_FILE 5232 extern void get_type_static_bounds (const_tree, mpz_t, mpz_t); 5233 #endif 5234 extern bool variably_modified_type_p (tree, tree); 5235 extern int tree_log2 (const_tree); 5236 extern int tree_floor_log2 (const_tree); 5237 extern int simple_cst_equal (const_tree, const_tree); 5238 extern hashval_t iterative_hash_expr (const_tree, hashval_t); 5239 extern hashval_t iterative_hash_exprs_commutative (const_tree, 5240 const_tree, hashval_t); 5241 extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); 5242 extern hashval_t iterative_hash_hashval_t (hashval_t, hashval_t); 5243 extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); 5244 extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT); 5245 extern int type_list_equal (const_tree, const_tree); 5246 extern int chain_member (const_tree, const_tree); 5247 extern tree type_hash_lookup (unsigned int, tree); 5248 extern void type_hash_add (unsigned int, tree); 5249 extern int simple_cst_list_equal (const_tree, const_tree); 5250 extern void dump_tree_statistics (void); 5251 extern void recompute_tree_invariant_for_addr_expr (tree); 5252 extern bool needs_to_live_in_memory (const_tree); 5253 extern tree reconstruct_complex_type (tree, tree); 5254 5255 extern int real_onep (const_tree); 5256 extern int real_twop (const_tree); 5257 extern int real_minus_onep (const_tree); 5258 extern void init_ttree (void); 5259 extern void build_common_tree_nodes (bool); 5260 extern void build_common_tree_nodes_2 (int); 5261 extern void build_common_builtin_nodes (void); 5262 extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); 5263 extern tree build_range_type (tree, tree, tree); 5264 extern tree build_nonshared_range_type (tree, tree, tree); 5265 extern bool subrange_type_for_debug_p (const_tree, tree *, tree *); 5266 extern HOST_WIDE_INT int_cst_value (const_tree); 5267 extern HOST_WIDEST_INT widest_int_cst_value (const_tree); 5268 5269 extern bool fields_compatible_p (const_tree, const_tree); 5270 extern tree find_compatible_field (tree, tree); 5271 5272 extern tree *tree_block (tree); 5273 extern location_t *block_nonartificial_location (tree); 5274 extern location_t tree_nonartificial_location (tree); 5275 5276 extern tree block_ultimate_origin (const_tree); 5277 5278 extern tree get_binfo_at_offset (tree, HOST_WIDE_INT, tree); 5279 5280 /* In tree-nested.c */ 5281 extern tree build_addr (tree, tree); 5282 5283 /* In function.c */ 5284 extern void expand_main_function (void); 5285 extern void expand_function_end (void); 5286 extern void expand_function_start (tree); 5287 extern void stack_protect_prologue (void); 5288 extern void stack_protect_epilogue (void); 5289 extern void init_dummy_function_start (void); 5290 extern void expand_dummy_function_end (void); 5291 extern unsigned int init_function_for_compilation (void); 5292 extern void allocate_struct_function (tree, bool); 5293 extern void push_struct_function (tree fndecl); 5294 extern void init_function_start (tree); 5295 extern bool use_register_for_decl (const_tree); 5296 extern void generate_setjmp_warnings (void); 5297 extern void init_temp_slots (void); 5298 extern void free_temp_slots (void); 5299 extern void pop_temp_slots (void); 5300 extern void push_temp_slots (void); 5301 extern void preserve_temp_slots (rtx); 5302 extern int aggregate_value_p (const_tree, const_tree); 5303 extern void push_function_context (void); 5304 extern void pop_function_context (void); 5305 extern gimple_seq gimplify_parameters (void); 5306 5307 /* In print-rtl.c */ 5308 #ifdef BUFSIZ 5309 extern void print_rtl (FILE *, const_rtx); 5310 #endif 5311 5312 /* In print-tree.c */ 5313 extern void debug_tree (tree); 5314 extern void debug_vec_tree (VEC(tree,gc) *); 5315 #ifdef BUFSIZ 5316 extern void dump_addr (FILE*, const char *, const void *); 5317 extern void print_node (FILE *, const char *, tree, int); 5318 extern void print_vec_tree (FILE *, const char *, VEC(tree,gc) *, int); 5319 extern void print_node_brief (FILE *, const char *, const_tree, int); 5320 extern void indent_to (FILE *, int); 5321 #endif 5322 5323 /* In tree-inline.c: */ 5324 extern bool debug_find_tree (tree, tree); 5325 /* This is in tree-inline.c since the routine uses 5326 data structures from the inliner. */ 5327 extern tree unsave_expr_now (tree); 5328 extern tree build_duplicate_type (tree); 5329 5330 /* In calls.c */ 5331 5332 /* Nonzero if this is a call to a function whose return value depends 5333 solely on its arguments, has no side effects, and does not read 5334 global memory. This corresponds to TREE_READONLY for function 5335 decls. */ 5336 #define ECF_CONST (1 << 0) 5337 /* Nonzero if this is a call to "pure" function (like const function, 5338 but may read memory. This corresponds to DECL_PURE_P for function 5339 decls. */ 5340 #define ECF_PURE (1 << 1) 5341 /* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no 5342 infinite loop. This corresponds to DECL_LOOPING_CONST_OR_PURE_P 5343 for function decls.*/ 5344 #define ECF_LOOPING_CONST_OR_PURE (1 << 2) 5345 /* Nonzero if this call will never return. */ 5346 #define ECF_NORETURN (1 << 3) 5347 /* Nonzero if this is a call to malloc or a related function. */ 5348 #define ECF_MALLOC (1 << 4) 5349 /* Nonzero if it is plausible that this is a call to alloca. */ 5350 #define ECF_MAY_BE_ALLOCA (1 << 5) 5351 /* Nonzero if this is a call to a function that won't throw an exception. */ 5352 #define ECF_NOTHROW (1 << 6) 5353 /* Nonzero if this is a call to setjmp or a related function. */ 5354 #define ECF_RETURNS_TWICE (1 << 7) 5355 /* Nonzero if this call replaces the current stack frame. */ 5356 #define ECF_SIBCALL (1 << 8) 5357 /* Function does not read or write memory (but may have side effects, so 5358 it does not necessarily fit ECF_CONST). */ 5359 #define ECF_NOVOPS (1 << 9) 5360 /* The function does not lead to calls within current function unit. */ 5361 #define ECF_LEAF (1 << 10) 5362 5363 extern int flags_from_decl_or_type (const_tree); 5364 extern int call_expr_flags (const_tree); 5365 5366 /* Call argument flags. */ 5367 5368 /* Nonzero if the argument is not dereferenced recursively, thus only 5369 directly reachable memory is read or written. */ 5370 #define EAF_DIRECT (1 << 0) 5371 /* Nonzero if memory reached by the argument is not clobbered. */ 5372 #define EAF_NOCLOBBER (1 << 1) 5373 /* Nonzero if the argument does not escape. */ 5374 #define EAF_NOESCAPE (1 << 2) 5375 /* Nonzero if the argument is not used by the function. */ 5376 #define EAF_UNUSED (1 << 3) 5377 5378 /* Call return flags. */ 5379 5380 /* Mask for the argument number that is returned. Lower two bits of 5381 the return flags, encodes argument slots zero to three. */ 5382 #define ERF_RETURN_ARG_MASK (3) 5383 /* Nonzero if the return value is equal to the argument number 5384 flags & ERF_RETURN_ARG_MASK. */ 5385 #define ERF_RETURNS_ARG (1 << 2) 5386 /* Nonzero if the return value does not alias with anything. Functions 5387 with the malloc attribute have this set on their return value. */ 5388 #define ERF_NOALIAS (1 << 3) 5389 5390 extern int setjmp_call_p (const_tree); 5391 extern bool gimple_alloca_call_p (const_gimple); 5392 extern bool alloca_call_p (const_tree); 5393 extern bool must_pass_in_stack_var_size (enum machine_mode, const_tree); 5394 extern bool must_pass_in_stack_var_size_or_pad (enum machine_mode, const_tree); 5395 5396 /* In attribs.c. */ 5397 5398 extern const struct attribute_spec *lookup_attribute_spec (const_tree); 5399 5400 /* Process the attributes listed in ATTRIBUTES and install them in *NODE, 5401 which is either a DECL (including a TYPE_DECL) or a TYPE. If a DECL, 5402 it should be modified in place; if a TYPE, a copy should be created 5403 unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS. FLAGS gives further 5404 information, in the form of a bitwise OR of flags in enum attribute_flags 5405 from tree.h. Depending on these flags, some attributes may be 5406 returned to be applied at a later stage (for example, to apply 5407 a decl attribute to the declaration rather than to its type). */ 5408 extern tree decl_attributes (tree *, tree, int); 5409 5410 /* Return true if the given identifier tree is the name of a lock attribute 5411 that takes arguments. */ 5412 extern bool is_lock_attribute_with_args (const_tree); 5413 5414 /* Extract and return all lock attributes from the given attribute list. */ 5415 extern tree extract_lock_attributes (tree); 5416 5417 /* In integrate.c */ 5418 extern void set_decl_abstract_flags (tree, int); 5419 extern void set_decl_origin_self (tree); 5420 5421 /* In stor-layout.c */ 5422 extern void set_min_and_max_values_for_integral_type (tree, int, bool); 5423 extern void fixup_signed_type (tree); 5424 extern void internal_reference_types (void); 5425 extern unsigned int update_alignment_for_field (record_layout_info, tree, 5426 unsigned int); 5427 /* varasm.c */ 5428 extern tree tree_output_constant_def (tree); 5429 extern void make_decl_rtl (tree); 5430 extern rtx make_decl_rtl_for_debug (tree); 5431 extern void make_decl_one_only (tree, tree); 5432 extern int supports_one_only (void); 5433 extern void resolve_unique_section (tree, int, int); 5434 extern void mark_referenced (tree); 5435 extern void mark_decl_referenced (tree); 5436 extern void notice_global_symbol (tree); 5437 extern void set_user_assembler_name (tree, const char *); 5438 extern void process_pending_assemble_externals (void); 5439 extern void finish_aliases_1 (void); 5440 extern void finish_aliases_2 (void); 5441 extern void remove_unreachable_alias_pairs (void); 5442 extern bool decl_replaceable_p (tree); 5443 extern bool decl_binds_to_current_def_p (tree); 5444 5445 /* Derived type for use by compute_visible_aliases and callers. A symbol 5446 alias set is a pointer set into which we enter IDENTIFIER_NODES bearing 5447 the canonicalised assembler-level symbol names corresponding to decls 5448 and their aliases. */ 5449 typedef struct pointer_set_t symbol_alias_set_t; 5450 5451 extern void symbol_alias_set_destroy (symbol_alias_set_t *); 5452 extern int symbol_alias_set_contains (const symbol_alias_set_t *, tree); 5453 extern symbol_alias_set_t * propagate_aliases_backward (bool (*) 5454 (tree, tree, void *), 5455 void *); 5456 5457 /* In stmt.c */ 5458 extern void expand_computed_goto (tree); 5459 extern bool parse_output_constraint (const char **, int, int, int, 5460 bool *, bool *, bool *); 5461 extern bool parse_input_constraint (const char **, int, int, int, int, 5462 const char * const *, bool *, bool *); 5463 extern void expand_asm_stmt (gimple); 5464 extern tree resolve_asm_operand_names (tree, tree, tree, tree); 5465 extern bool expand_switch_using_bit_tests_p (tree, tree, unsigned int, 5466 unsigned int); 5467 extern void expand_case (gimple); 5468 extern void expand_decl (tree); 5469 #ifdef HARD_CONST 5470 /* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */ 5471 extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *); 5472 #endif 5473 5474 5475 /* In dwarf2out.c */ 5477 /* Interface of the DWARF2 unwind info support. */ 5478 5479 /* Generate a new label for the CFI info to refer to. */ 5480 5481 extern char *dwarf2out_cfi_label (bool); 5482 5483 /* Entry point to update the canonical frame address (CFA). */ 5484 5485 extern void dwarf2out_def_cfa (const char *, unsigned, HOST_WIDE_INT); 5486 5487 /* Add the CFI for saving a register window. */ 5488 5489 extern void dwarf2out_window_save (const char *); 5490 5491 /* Entry point for saving a register to the stack. */ 5492 5493 extern void dwarf2out_reg_save (const char *, unsigned, HOST_WIDE_INT); 5494 5495 /* Entry point for saving the return address in the stack. */ 5496 5497 extern void dwarf2out_return_save (const char *, HOST_WIDE_INT); 5498 5499 /* Entry point for saving the return address in a register. */ 5500 5501 extern void dwarf2out_return_reg (const char *, unsigned); 5502 5503 /* Entry point for saving the first register into the second. */ 5504 5505 extern void dwarf2out_reg_save_reg (const char *, rtx, rtx); 5506 5507 /* In tree-inline.c */ 5508 5509 /* The type of a set of already-visited pointers. Functions for creating 5510 and manipulating it are declared in pointer-set.h */ 5511 struct pointer_set_t; 5512 5513 /* The type of a callback function for walking over tree structure. */ 5514 5515 typedef tree (*walk_tree_fn) (tree *, int *, void *); 5516 5517 /* The type of a callback function that represents a custom walk_tree. */ 5518 5519 typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *), 5520 void *, struct pointer_set_t*); 5521 5522 extern tree walk_tree_1 (tree*, walk_tree_fn, void*, struct pointer_set_t*, 5523 walk_tree_lh); 5524 extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*, 5525 walk_tree_lh); 5526 #define walk_tree(a,b,c,d) \ 5527 walk_tree_1 (a, b, c, d, NULL) 5528 #define walk_tree_without_duplicates(a,b,c) \ 5529 walk_tree_without_duplicates_1 (a, b, c, NULL) 5530 5531 /* In emit-rtl.c */ 5532 /* Assign the RTX to declaration. */ 5533 5534 extern void set_decl_rtl (tree, rtx); 5535 extern void set_decl_incoming_rtl (tree, rtx, bool); 5536 5537 /* Enum and arrays used for tree allocation stats. 5539 Keep in sync with tree.c:tree_node_kind_names. */ 5540 typedef enum 5541 { 5542 d_kind, 5543 t_kind, 5544 b_kind, 5545 s_kind, 5546 r_kind, 5547 e_kind, 5548 c_kind, 5549 id_kind, 5550 vec_kind, 5551 binfo_kind, 5552 ssa_name_kind, 5553 constr_kind, 5554 x_kind, 5555 lang_decl, 5556 lang_type, 5557 omp_clause_kind, 5558 all_kinds 5559 } tree_node_kind; 5560 5561 extern int tree_node_counts[]; 5562 extern int tree_node_sizes[]; 5563 5564 /* True if we are in gimple form and the actions of the folders need to 5565 be restricted. False if we are not in gimple form and folding is not 5566 restricted to creating gimple expressions. */ 5567 extern bool in_gimple_form; 5568 5569 /* In gimple.c. */ 5570 extern tree get_base_address (tree t); 5571 extern void mark_addressable (tree); 5572 5573 /* In tree.c. */ 5574 5575 struct GTY(()) tree_map_base { 5576 tree from; 5577 }; 5578 5579 extern int tree_map_base_eq (const void *, const void *); 5580 extern unsigned int tree_map_base_hash (const void *); 5581 extern int tree_map_base_marked_p (const void *); 5582 extern bool list_equal_p (const_tree, const_tree); 5583 5584 /* Map from a tree to another tree. */ 5585 5586 struct GTY(()) tree_map { 5587 struct tree_map_base base; 5588 unsigned int hash; 5589 tree to; 5590 }; 5591 5592 #define tree_map_eq tree_map_base_eq 5593 extern unsigned int tree_map_hash (const void *); 5594 #define tree_map_marked_p tree_map_base_marked_p 5595 5596 /* Map from a decl tree to another tree. */ 5597 5598 struct GTY(()) tree_decl_map { 5599 struct tree_map_base base; 5600 tree to; 5601 }; 5602 5603 #define tree_decl_map_eq tree_map_base_eq 5604 extern unsigned int tree_decl_map_hash (const void *); 5605 #define tree_decl_map_marked_p tree_map_base_marked_p 5606 5607 /* Map from a tree to an int. */ 5608 5609 struct GTY(()) tree_int_map { 5610 struct tree_map_base base; 5611 unsigned int to; 5612 }; 5613 5614 #define tree_int_map_eq tree_map_base_eq 5615 #define tree_int_map_hash tree_map_base_hash 5616 #define tree_int_map_marked_p tree_map_base_marked_p 5617 5618 /* Map from a tree to initialization/finalization priorities. */ 5619 5620 struct GTY(()) tree_priority_map { 5621 struct tree_map_base base; 5622 priority_type init; 5623 priority_type fini; 5624 }; 5625 5626 #define tree_priority_map_eq tree_map_base_eq 5627 #define tree_priority_map_hash tree_map_base_hash 5628 #define tree_priority_map_marked_p tree_map_base_marked_p 5629 5630 /* In tree-ssa.c */ 5631 5632 tree target_for_debug_bind (tree); 5633 5634 /* In tree-ssa-address.c. */ 5635 extern tree tree_mem_ref_addr (tree, tree); 5636 extern void copy_mem_ref_info (tree, tree); 5637 5638 /* In tree-vrp.c */ 5639 extern bool ssa_name_nonnegative_p (const_tree); 5640 5641 /* In tree-object-size.c. */ 5642 extern void init_object_sizes (void); 5643 extern void fini_object_sizes (void); 5644 extern unsigned HOST_WIDE_INT compute_builtin_object_size (tree, int); 5645 5646 /* In expr.c. */ 5647 extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree); 5648 extern tree build_personality_function (const char *); 5649 5650 /* In tree-inline.c. */ 5651 5652 void init_inline_once (void); 5653 5654 /* Compute the number of operands in an expression node NODE. For 5655 tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself, 5656 otherwise it is looked up from the node's code. */ 5657 static inline int 5658 tree_operand_length (const_tree node) 5659 { 5660 if (VL_EXP_CLASS_P (node)) 5661 return VL_EXP_OPERAND_LENGTH (node); 5662 else 5663 return TREE_CODE_LENGTH (TREE_CODE (node)); 5664 } 5665 5666 /* Abstract iterators for CALL_EXPRs. These static inline definitions 5667 have to go towards the end of tree.h so that union tree_node is fully 5668 defined by this point. */ 5669 5670 /* Structure containing iterator state. */ 5671 typedef struct call_expr_arg_iterator_d { 5672 tree t; /* the call_expr */ 5673 int n; /* argument count */ 5674 int i; /* next argument index */ 5675 } call_expr_arg_iterator; 5676 5677 typedef struct const_call_expr_arg_iterator_d { 5678 const_tree t; /* the call_expr */ 5679 int n; /* argument count */ 5680 int i; /* next argument index */ 5681 } const_call_expr_arg_iterator; 5682 5683 /* Initialize the abstract argument list iterator object ITER with the 5684 arguments from CALL_EXPR node EXP. */ 5685 static inline void 5686 init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter) 5687 { 5688 iter->t = exp; 5689 iter->n = call_expr_nargs (exp); 5690 iter->i = 0; 5691 } 5692 5693 static inline void 5694 init_const_call_expr_arg_iterator (const_tree exp, const_call_expr_arg_iterator *iter) 5695 { 5696 iter->t = exp; 5697 iter->n = call_expr_nargs (exp); 5698 iter->i = 0; 5699 } 5700 5701 /* Return the next argument from abstract argument list iterator object ITER, 5702 and advance its state. Return NULL_TREE if there are no more arguments. */ 5703 static inline tree 5704 next_call_expr_arg (call_expr_arg_iterator *iter) 5705 { 5706 tree result; 5707 if (iter->i >= iter->n) 5708 return NULL_TREE; 5709 result = CALL_EXPR_ARG (iter->t, iter->i); 5710 iter->i++; 5711 return result; 5712 } 5713 5714 static inline const_tree 5715 next_const_call_expr_arg (const_call_expr_arg_iterator *iter) 5716 { 5717 const_tree result; 5718 if (iter->i >= iter->n) 5719 return NULL_TREE; 5720 result = CALL_EXPR_ARG (iter->t, iter->i); 5721 iter->i++; 5722 return result; 5723 } 5724 5725 /* Initialize the abstract argument list iterator object ITER, then advance 5726 past and return the first argument. Useful in for expressions, e.g. 5727 for (arg = first_call_expr_arg (exp, &iter); arg; 5728 arg = next_call_expr_arg (&iter)) */ 5729 static inline tree 5730 first_call_expr_arg (tree exp, call_expr_arg_iterator *iter) 5731 { 5732 init_call_expr_arg_iterator (exp, iter); 5733 return next_call_expr_arg (iter); 5734 } 5735 5736 static inline const_tree 5737 first_const_call_expr_arg (const_tree exp, const_call_expr_arg_iterator *iter) 5738 { 5739 init_const_call_expr_arg_iterator (exp, iter); 5740 return next_const_call_expr_arg (iter); 5741 } 5742 5743 /* Test whether there are more arguments in abstract argument list iterator 5744 ITER, without changing its state. */ 5745 static inline bool 5746 more_call_expr_args_p (const call_expr_arg_iterator *iter) 5747 { 5748 return (iter->i < iter->n); 5749 } 5750 5751 static inline bool 5752 more_const_call_expr_args_p (const const_call_expr_arg_iterator *iter) 5753 { 5754 return (iter->i < iter->n); 5755 } 5756 5757 /* Iterate through each argument ARG of CALL_EXPR CALL, using variable ITER 5758 (of type call_expr_arg_iterator) to hold the iteration state. */ 5759 #define FOR_EACH_CALL_EXPR_ARG(arg, iter, call) \ 5760 for ((arg) = first_call_expr_arg ((call), &(iter)); (arg); \ 5761 (arg) = next_call_expr_arg (&(iter))) 5762 5763 #define FOR_EACH_CONST_CALL_EXPR_ARG(arg, iter, call) \ 5764 for ((arg) = first_const_call_expr_arg ((call), &(iter)); (arg); \ 5765 (arg) = next_const_call_expr_arg (&(iter))) 5766 5767 /* Return true if tree node T is a language-specific node. */ 5768 static inline bool 5769 is_lang_specific (tree t) 5770 { 5771 return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES; 5772 } 5773 5774 /* In gimple-low.c. */ 5775 extern bool block_may_fallthru (const_tree); 5776 5777 #endif /* GCC_TREE_H */ 5778