comparison gcc/tree.h @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children d34655255c78 1830386684a0
comparison
equal deleted inserted replaced
111:04ced10e8804 131:84e7813d76e9
1 /* Definitions for the ubiquitous 'tree' type for GNU compilers. 1 /* Definitions for the ubiquitous 'tree' type for GNU compilers.
2 Copyright (C) 1989-2017 Free Software Foundation, Inc. 2 Copyright (C) 1989-2018 Free Software Foundation, Inc.
3 3
4 This file is part of GCC. 4 This file is part of GCC.
5 5
6 GCC is free software; you can redistribute it and/or modify it under 6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free 7 the terms of the GNU General Public License as published by the Free
481 tree_ssa_useless_type_conversion. */ 481 tree_ssa_useless_type_conversion. */
482 482
483 #define STRIP_USELESS_TYPE_CONVERSION(EXP) \ 483 #define STRIP_USELESS_TYPE_CONVERSION(EXP) \
484 (EXP) = tree_ssa_strip_useless_type_conversions (EXP) 484 (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
485 485
486 /* Remove any VIEW_CONVERT_EXPR or NON_LVALUE_EXPR that's purely
487 in use to provide a location_t. */
488
489 #define STRIP_ANY_LOCATION_WRAPPER(EXP) \
490 (EXP) = tree_strip_any_location_wrapper (CONST_CAST_TREE (EXP))
491
486 /* Nonzero if TYPE represents a vector type. */ 492 /* Nonzero if TYPE represents a vector type. */
487 493
488 #define VECTOR_TYPE_P(TYPE) (TREE_CODE (TYPE) == VECTOR_TYPE) 494 #define VECTOR_TYPE_P(TYPE) (TREE_CODE (TYPE) == VECTOR_TYPE)
489 495
490 /* Nonzero if TYPE represents a vector of booleans. */ 496 /* Nonzero if TYPE represents a vector of booleans. */
586 #define FUNCTION_POINTER_TYPE_P(TYPE) \ 592 #define FUNCTION_POINTER_TYPE_P(TYPE) \
587 (POINTER_TYPE_P (TYPE) && TREE_CODE (TREE_TYPE (TYPE)) == FUNCTION_TYPE) 593 (POINTER_TYPE_P (TYPE) && TREE_CODE (TREE_TYPE (TYPE)) == FUNCTION_TYPE)
588 594
589 /* Nonzero if this type is a complete type. */ 595 /* Nonzero if this type is a complete type. */
590 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE) 596 #define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
591
592 /* Nonzero if this type is a pointer bounds type. */
593 #define POINTER_BOUNDS_TYPE_P(NODE) \
594 (TREE_CODE (NODE) == POINTER_BOUNDS_TYPE)
595
596 /* Nonzero if this node has a pointer bounds type. */
597 #define POINTER_BOUNDS_P(NODE) \
598 (POINTER_BOUNDS_TYPE_P (TREE_TYPE (NODE)))
599
600 /* Nonzero if this type supposes bounds existence. */
601 #define BOUNDED_TYPE_P(type) (POINTER_TYPE_P (type))
602
603 /* Nonzero for objects with bounded type. */
604 #define BOUNDED_P(node) \
605 BOUNDED_TYPE_P (TREE_TYPE (node))
606 597
607 /* Nonzero if this type is the (possibly qualified) void type. */ 598 /* Nonzero if this type is the (possibly qualified) void type. */
608 #define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE) 599 #define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
609 600
610 /* Nonzero if this type is complete or is cv void. */ 601 /* Nonzero if this type is complete or is cv void. */
694 warnings concerning the decl should be suppressed. This is used at 685 warnings concerning the decl should be suppressed. This is used at
695 least for used-before-set warnings, and it set after one warning is 686 least for used-before-set warnings, and it set after one warning is
696 emitted. */ 687 emitted. */
697 #define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag) 688 #define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag)
698 689
690 /* Nonzero if we should warn about the change in empty class parameter
691 passing ABI in this TU. */
692 #define TRANSLATION_UNIT_WARN_EMPTY_P(NODE) \
693 (TRANSLATION_UNIT_DECL_CHECK (NODE)->decl_common.decl_flag_0)
694
695 /* Nonzero if this type is "empty" according to the particular psABI. */
696 #define TYPE_EMPTY_P(NODE) (TYPE_CHECK (NODE)->type_common.empty_flag)
697
699 /* Used to indicate that this TYPE represents a compiler-generated entity. */ 698 /* Used to indicate that this TYPE represents a compiler-generated entity. */
700 #define TYPE_ARTIFICIAL(NODE) (TYPE_CHECK (NODE)->base.nowarning_flag) 699 #define TYPE_ARTIFICIAL(NODE) (TYPE_CHECK (NODE)->base.nowarning_flag)
701 700
702 /* In an IDENTIFIER_NODE, this means that assemble_name was called with 701 /* In an IDENTIFIER_NODE, this means that assemble_name was called with
703 this string as an argument. */ 702 this string as an argument. */
756 /* Whether a case or a user-defined label is allowed to fall through to. 755 /* Whether a case or a user-defined label is allowed to fall through to.
757 This is used to implement -Wimplicit-fallthrough. */ 756 This is used to implement -Wimplicit-fallthrough. */
758 #define FALLTHROUGH_LABEL_P(NODE) \ 757 #define FALLTHROUGH_LABEL_P(NODE) \
759 (LABEL_DECL_CHECK (NODE)->base.private_flag) 758 (LABEL_DECL_CHECK (NODE)->base.private_flag)
760 759
760 /* Set on the artificial label created for break; stmt from a switch.
761 This is used to implement -Wimplicit-fallthrough. */
762 #define SWITCH_BREAK_LABEL_P(NODE) \
763 (LABEL_DECL_CHECK (NODE)->base.protected_flag)
764
761 /* Nonzero means this expression is volatile in the C sense: 765 /* Nonzero means this expression is volatile in the C sense:
762 its address should be of type `volatile WHATEVER *'. 766 its address should be of type `volatile WHATEVER *'.
763 In other words, the declared item is volatile qualified. 767 In other words, the declared item is volatile qualified.
764 This is used in _DECL nodes and _REF nodes. 768 This is used in _DECL nodes and _REF nodes.
765 On a FUNCTION_DECL node, this means the function does not 769 On a FUNCTION_DECL node, this means the function does not
808 #define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.u.bits.unsigned_flag) 812 #define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.u.bits.unsigned_flag)
809 813
810 /* Same as TYPE_UNSIGNED but converted to SIGNOP. */ 814 /* Same as TYPE_UNSIGNED but converted to SIGNOP. */
811 #define TYPE_SIGN(NODE) ((signop) TYPE_UNSIGNED (NODE)) 815 #define TYPE_SIGN(NODE) ((signop) TYPE_UNSIGNED (NODE))
812 816
813 /* True if overflow wraps around for the given integral type. That 817 /* True if overflow wraps around for the given integral or pointer type. That
814 is, TYPE_MAX + 1 == TYPE_MIN. */ 818 is, TYPE_MAX + 1 == TYPE_MIN. */
815 #define TYPE_OVERFLOW_WRAPS(TYPE) \ 819 #define TYPE_OVERFLOW_WRAPS(TYPE) \
816 (ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag || flag_wrapv) 820 (POINTER_TYPE_P (TYPE) \
817 821 ? flag_wrapv_pointer \
818 /* True if overflow is undefined for the given integral type. We may 822 : (ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag \
819 optimize on the assumption that values in the type never overflow. 823 || flag_wrapv))
824
825 /* True if overflow is undefined for the given integral or pointer type.
826 We may optimize on the assumption that values in the type never overflow.
820 827
821 IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED 828 IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED
822 must issue a warning based on warn_strict_overflow. In some cases 829 must issue a warning based on warn_strict_overflow. In some cases
823 it will be appropriate to issue the warning immediately, and in 830 it will be appropriate to issue the warning immediately, and in
824 other cases it will be appropriate to simply set a flag and let the 831 other cases it will be appropriate to simply set a flag and let the
825 caller decide whether a warning is appropriate or not. */ 832 caller decide whether a warning is appropriate or not. */
826 #define TYPE_OVERFLOW_UNDEFINED(TYPE) \ 833 #define TYPE_OVERFLOW_UNDEFINED(TYPE) \
827 (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag \ 834 (POINTER_TYPE_P (TYPE) \
828 && !flag_wrapv && !flag_trapv) 835 ? !flag_wrapv_pointer \
836 : (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag \
837 && !flag_wrapv && !flag_trapv))
829 838
830 /* True if overflow for the given integral type should issue a 839 /* True if overflow for the given integral type should issue a
831 trap. */ 840 trap. */
832 #define TYPE_OVERFLOW_TRAPS(TYPE) \ 841 #define TYPE_OVERFLOW_TRAPS(TYPE) \
833 (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag && flag_trapv) 842 (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag && flag_trapv)
865 /* In a CALL_EXPR, means that it's safe to use the target of the call 874 /* In a CALL_EXPR, means that it's safe to use the target of the call
866 expansion as the return slot for a call that returns in memory. */ 875 expansion as the return slot for a call that returns in memory. */
867 #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \ 876 #define CALL_EXPR_RETURN_SLOT_OPT(NODE) \
868 (CALL_EXPR_CHECK (NODE)->base.private_flag) 877 (CALL_EXPR_CHECK (NODE)->base.private_flag)
869 878
870 /* Cilk keywords accessors. */
871 #define CILK_SPAWN_FN(NODE) TREE_OPERAND (CILK_SPAWN_STMT_CHECK (NODE), 0)
872
873 /* If this is true, we should insert a __cilk_detach call just before
874 this function call. */
875 #define EXPR_CILK_SPAWN(NODE) \
876 (TREE_CHECK2 (NODE, CALL_EXPR, \
877 AGGR_INIT_EXPR)->base.u.bits.unsigned_flag)
878
879 /* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is 879 /* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is
880 passed by invisible reference (and the TREE_TYPE is a pointer to the true 880 passed by invisible reference (and the TREE_TYPE is a pointer to the true
881 type). */ 881 type). */
882 #define DECL_BY_REFERENCE(NODE) \ 882 #define DECL_BY_REFERENCE(NODE) \
883 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \ 883 (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
900 900
901 /* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that 901 /* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that
902 it has been built for the declaration of a variable-sized object. */ 902 it has been built for the declaration of a variable-sized object. */
903 #define CALL_ALLOCA_FOR_VAR_P(NODE) \ 903 #define CALL_ALLOCA_FOR_VAR_P(NODE) \
904 (CALL_EXPR_CHECK (NODE)->base.protected_flag) 904 (CALL_EXPR_CHECK (NODE)->base.protected_flag)
905
906 /* In a CALL_EXPR, means call was instrumented by Pointer Bounds Checker. */
907 #define CALL_WITH_BOUNDS_P(NODE) (CALL_EXPR_CHECK (NODE)->base.deprecated_flag)
908 905
909 /* Used in classes in C++. */ 906 /* Used in classes in C++. */
910 #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag) 907 #define TREE_PRIVATE(NODE) ((NODE)->base.private_flag)
911 /* Used in classes in C++. */ 908 /* Used in classes in C++. */
912 #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag) 909 #define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag)
985 (INTEGER_CST_CHECK (NODE)->base.u.int_length.offset) 982 (INTEGER_CST_CHECK (NODE)->base.u.int_length.offset)
986 #define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I) 983 #define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I)
987 #define TREE_INT_CST_LOW(NODE) \ 984 #define TREE_INT_CST_LOW(NODE) \
988 ((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0)) 985 ((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0))
989 986
987 /* Return true if NODE is a POLY_INT_CST. This is only ever true on
988 targets with variable-sized modes. */
989 #define POLY_INT_CST_P(NODE) \
990 (NUM_POLY_INT_COEFFS > 1 && TREE_CODE (NODE) == POLY_INT_CST)
991
992 /* In a POLY_INT_CST node. */
993 #define POLY_INT_CST_COEFF(NODE, I) \
994 (POLY_INT_CST_CHECK (NODE)->poly_int_cst.coeffs[I])
995
990 #define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr) 996 #define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
991 #define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE)) 997 #define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
992 998
993 #define TREE_FIXED_CST_PTR(NODE) \ 999 #define TREE_FIXED_CST_PTR(NODE) \
994 (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr) 1000 (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr)
1002 1008
1003 /* In a COMPLEX_CST node. */ 1009 /* In a COMPLEX_CST node. */
1004 #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real) 1010 #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
1005 #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag) 1011 #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
1006 1012
1007 /* In a VECTOR_CST node. */ 1013 /* In a VECTOR_CST node. See generic.texi for details. */
1008 #define VECTOR_CST_NELTS(NODE) (VECTOR_CST_CHECK (NODE)->base.u.nelts) 1014 #define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE)))
1009 #define VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elts) 1015 #define VECTOR_CST_ELT(NODE,IDX) vector_cst_elt (NODE, IDX)
1010 #define VECTOR_CST_ELT(NODE,IDX) (VECTOR_CST_CHECK (NODE)->vector.elts[IDX]) 1016
1017 #define VECTOR_CST_LOG2_NPATTERNS(NODE) \
1018 (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.log2_npatterns)
1019 #define VECTOR_CST_NPATTERNS(NODE) \
1020 (1U << VECTOR_CST_LOG2_NPATTERNS (NODE))
1021 #define VECTOR_CST_NELTS_PER_PATTERN(NODE) \
1022 (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.nelts_per_pattern)
1023 #define VECTOR_CST_DUPLICATE_P(NODE) \
1024 (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 1)
1025 #define VECTOR_CST_STEPPED_P(NODE) \
1026 (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 3)
1027 #define VECTOR_CST_ENCODED_ELTS(NODE) \
1028 (VECTOR_CST_CHECK (NODE)->vector.elts)
1029 #define VECTOR_CST_ENCODED_ELT(NODE, ELT) \
1030 (VECTOR_CST_CHECK (NODE)->vector.elts[ELT])
1011 1031
1012 /* Define fields and accessors for some special-purpose tree nodes. */ 1032 /* Define fields and accessors for some special-purpose tree nodes. */
1013 1033
1014 #define IDENTIFIER_LENGTH(NODE) \ 1034 #define IDENTIFIER_LENGTH(NODE) \
1015 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len) 1035 (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
1103 Note that we have to bypass the use of TREE_OPERAND to access 1123 Note that we have to bypass the use of TREE_OPERAND to access
1104 that field to avoid infinite recursion in expanding the macros. */ 1124 that field to avoid infinite recursion in expanding the macros. */
1105 #define VL_EXP_OPERAND_LENGTH(NODE) \ 1125 #define VL_EXP_OPERAND_LENGTH(NODE) \
1106 ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0])) 1126 ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
1107 1127
1128 /* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold. */
1129 #define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
1130 /* Nonzero if gimple_debug_bind_p() (and thus
1131 gimple_debug_source_bind_p()) may possibly hold. */
1132 #define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments
1108 /* Nonzero if is_gimple_debug() may possibly hold. */ 1133 /* Nonzero if is_gimple_debug() may possibly hold. */
1109 #define MAY_HAVE_DEBUG_STMTS (flag_var_tracking_assignments) 1134 #define MAY_HAVE_DEBUG_STMTS \
1135 (MAY_HAVE_DEBUG_MARKER_STMTS || MAY_HAVE_DEBUG_BIND_STMTS)
1110 1136
1111 /* In a LOOP_EXPR node. */ 1137 /* In a LOOP_EXPR node. */
1112 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0) 1138 #define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
1113 1139
1114 /* The source location of this expression. Non-tree_exp nodes such as 1140 /* The source location of this expression. Non-tree_exp nodes such as
1145 return get_range_from_loc (line_table, loc); 1171 return get_range_from_loc (line_table, loc);
1146 } 1172 }
1147 1173
1148 extern void protected_set_expr_location (tree, location_t); 1174 extern void protected_set_expr_location (tree, location_t);
1149 1175
1176 extern tree maybe_wrap_with_location (tree, location_t);
1177
1150 /* In a TARGET_EXPR node. */ 1178 /* In a TARGET_EXPR node. */
1151 #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0) 1179 #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
1152 #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1) 1180 #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
1153 #define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2) 1181 #define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
1182 /* Don't elide the initialization of TARGET_EXPR_SLOT for this TARGET_EXPR
1183 on rhs of MODIFY_EXPR. */
1184 #define TARGET_EXPR_NO_ELIDE(NODE) (TARGET_EXPR_CHECK (NODE)->base.private_flag)
1154 1185
1155 /* DECL_EXPR accessor. This gives access to the DECL associated with 1186 /* DECL_EXPR accessor. This gives access to the DECL associated with
1156 the given declaration statement. */ 1187 the given declaration statement. */
1157 #define DECL_EXPR_DECL(NODE) TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0) 1188 #define DECL_EXPR_DECL(NODE) TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)
1158 1189
1162 #define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE) \ 1193 #define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE) \
1163 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0) 1194 TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
1164 #define COMPOUND_LITERAL_EXPR_DECL(NODE) \ 1195 #define COMPOUND_LITERAL_EXPR_DECL(NODE) \
1165 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE)) 1196 DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE))
1166 1197
1167 /* SWITCH_EXPR accessors. These give access to the condition, body and 1198 /* SWITCH_EXPR accessors. These give access to the condition and body. */
1168 original condition type (before any compiler conversions)
1169 of the switch statement, respectively. */
1170 #define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0) 1199 #define SWITCH_COND(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0)
1171 #define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1) 1200 #define SWITCH_BODY(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1)
1172 #define SWITCH_LABELS(NODE) TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 2) 1201 /* True if there are case labels for all possible values of SWITCH_COND, either
1202 because there is a default: case label or because the case label ranges cover
1203 all values. */
1204 #define SWITCH_ALL_CASES_P(NODE) (SWITCH_EXPR_CHECK (NODE)->base.private_flag)
1173 1205
1174 /* CASE_LABEL_EXPR accessors. These give access to the high and low values 1206 /* CASE_LABEL_EXPR accessors. These give access to the high and low values
1175 of a case label, respectively. */ 1207 of a case label, respectively. */
1176 #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0) 1208 #define CASE_LOW(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
1177 #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1) 1209 #define CASE_HIGH(NODE) TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
1196 #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1)) 1228 #define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
1197 #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2)) 1229 #define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
1198 1230
1199 /* GOTO_EXPR accessor. This gives access to the label associated with 1231 /* GOTO_EXPR accessor. This gives access to the label associated with
1200 a goto statement. */ 1232 a goto statement. */
1201 #define GOTO_DESTINATION(NODE) TREE_OPERAND ((NODE), 0) 1233 #define GOTO_DESTINATION(NODE) TREE_OPERAND (GOTO_EXPR_CHECK (NODE), 0)
1202 1234
1203 /* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the 1235 /* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
1204 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and 1236 instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
1205 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the 1237 ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
1206 statement. */ 1238 statement. */
1709 Default definitions are always created by an empty statement and 1741 Default definitions are always created by an empty statement and
1710 belong to no basic block. */ 1742 belong to no basic block. */
1711 #define SSA_NAME_IS_DEFAULT_DEF(NODE) \ 1743 #define SSA_NAME_IS_DEFAULT_DEF(NODE) \
1712 SSA_NAME_CHECK (NODE)->base.default_def_flag 1744 SSA_NAME_CHECK (NODE)->base.default_def_flag
1713 1745
1746 /* Nonzero if this SSA_NAME is known to point to memory that may not
1747 be written to. This is set for default defs of function parameters
1748 that have a corresponding r or R specification in the functions
1749 fn spec attribute. This is used by alias analysis. */
1750 #define SSA_NAME_POINTS_TO_READONLY_MEMORY(NODE) \
1751 SSA_NAME_CHECK (NODE)->base.deprecated_flag
1752
1714 /* Attributes for SSA_NAMEs for pointer-type variables. */ 1753 /* Attributes for SSA_NAMEs for pointer-type variables. */
1715 #define SSA_NAME_PTR_INFO(N) \ 1754 #define SSA_NAME_PTR_INFO(N) \
1716 SSA_NAME_CHECK (N)->ssa_name.info.ptr_info 1755 SSA_NAME_CHECK (N)->ssa_name.info.ptr_info
1717 1756
1718 /* True if SSA_NAME_RANGE_INFO describes an anti-range. */ 1757 /* True if SSA_NAME_RANGE_INFO describes an anti-range. */
1748 #define BLOCK_NONLOCALIZED_VAR(NODE,N) (*BLOCK_NONLOCALIZED_VARS (NODE))[N] 1787 #define BLOCK_NONLOCALIZED_VAR(NODE,N) (*BLOCK_NONLOCALIZED_VARS (NODE))[N]
1749 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks) 1788 #define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
1750 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext) 1789 #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
1751 #define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain) 1790 #define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
1752 #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) 1791 #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
1753 #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag) 1792 #define BLOCK_ORIGIN(NODE) \
1793 (BLOCK_ABSTRACT_ORIGIN(NODE) ? BLOCK_ABSTRACT_ORIGIN(NODE) : (NODE))
1754 #define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die) 1794 #define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die)
1755 1795
1756 /* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */ 1796 /* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT. */
1757 #define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag) 1797 #define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag)
1758 1798
1999 /* If set in an ARRAY_TYPE, indicates a string type (for languages 2039 /* If set in an ARRAY_TYPE, indicates a string type (for languages
2000 that distinguish string from array of char). 2040 that distinguish string from array of char).
2001 If set in a INTEGER_TYPE, indicates a character type. */ 2041 If set in a INTEGER_TYPE, indicates a character type. */
2002 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type_common.string_flag) 2042 #define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type_common.string_flag)
2003 2043
2004 /* For a VECTOR_TYPE, this is the number of sub-parts of the vector. */
2005 #define TYPE_VECTOR_SUBPARTS(VECTOR_TYPE) \
2006 (HOST_WIDE_INT_1U \
2007 << VECTOR_TYPE_CHECK (VECTOR_TYPE)->type_common.precision)
2008
2009 /* Set precision to n when we have 2^n sub-parts of the vector. */
2010 #define SET_TYPE_VECTOR_SUBPARTS(VECTOR_TYPE, X) \
2011 (VECTOR_TYPE_CHECK (VECTOR_TYPE)->type_common.precision = exact_log2 (X))
2012
2013 /* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings 2044 /* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings
2014 about missing conversions to other vector types of the same size. */ 2045 about missing conversions to other vector types of the same size. */
2015 #define TYPE_VECTOR_OPAQUE(NODE) \ 2046 #define TYPE_VECTOR_OPAQUE(NODE) \
2016 (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag) 2047 (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag)
2017 2048
2070 /* Symtab field as an integer. Used by stabs generator in dbxout.c to 2101 /* Symtab field as an integer. Used by stabs generator in dbxout.c to
2071 hold the type's number in the generated stabs. */ 2102 hold the type's number in the generated stabs. */
2072 #define TYPE_SYMTAB_ADDRESS(NODE) \ 2103 #define TYPE_SYMTAB_ADDRESS(NODE) \
2073 (TYPE_CHECK (NODE)->type_common.symtab.address) 2104 (TYPE_CHECK (NODE)->type_common.symtab.address)
2074 2105
2075 /* Symtab field as a string. Used by COFF generator in sdbout.c to
2076 hold struct/union type tag names. */
2077 #define TYPE_SYMTAB_POINTER(NODE) \
2078 (TYPE_CHECK (NODE)->type_common.symtab.pointer)
2079
2080 /* Symtab field as a pointer to a DWARF DIE. Used by DWARF generator 2106 /* Symtab field as a pointer to a DWARF DIE. Used by DWARF generator
2081 in dwarf2out.c to point to the DIE generated for the type. */ 2107 in dwarf2out.c to point to the DIE generated for the type. */
2082 #define TYPE_SYMTAB_DIE(NODE) \ 2108 #define TYPE_SYMTAB_DIE(NODE) \
2083 (TYPE_CHECK (NODE)->type_common.symtab.die) 2109 (TYPE_CHECK (NODE)->type_common.symtab.die)
2084 2110
2085 /* The garbage collector needs to know the interpretation of the 2111 /* The garbage collector needs to know the interpretation of the
2086 symtab field. These constants represent the different types in the 2112 symtab field. These constants represent the different types in the
2087 union. */ 2113 union. */
2088 2114
2089 #define TYPE_SYMTAB_IS_ADDRESS (0) 2115 #define TYPE_SYMTAB_IS_ADDRESS (0)
2090 #define TYPE_SYMTAB_IS_POINTER (1) 2116 #define TYPE_SYMTAB_IS_DIE (1)
2091 #define TYPE_SYMTAB_IS_DIE (2)
2092 2117
2093 #define TYPE_LANG_SPECIFIC(NODE) \ 2118 #define TYPE_LANG_SPECIFIC(NODE) \
2094 (TYPE_CHECK (NODE)->type_with_lang_specific.lang_specific) 2119 (TYPE_CHECK (NODE)->type_with_lang_specific.lang_specific)
2095 2120
2096 #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type_non_common.values) 2121 #define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type_non_common.values)
2291 /* This accessor returns TRUE if the decl it operates on was created 2316 /* This accessor returns TRUE if the decl it operates on was created
2292 by a front-end or back-end rather than by user code. In this case 2317 by a front-end or back-end rather than by user code. In this case
2293 builtin-ness is indicated by source location. */ 2318 builtin-ness is indicated by source location. */
2294 #define DECL_IS_BUILTIN(DECL) \ 2319 #define DECL_IS_BUILTIN(DECL) \
2295 (LOCATION_LOCUS (DECL_SOURCE_LOCATION (DECL)) <= BUILTINS_LOCATION) 2320 (LOCATION_LOCUS (DECL_SOURCE_LOCATION (DECL)) <= BUILTINS_LOCATION)
2296
2297 #define DECL_LOCATION_RANGE(NODE) \
2298 (get_decl_source_range (DECL_MINIMAL_CHECK (NODE)))
2299 2321
2300 /* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or 2322 /* For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
2301 QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL, 2323 QUAL_UNION_TYPE node that the field is a member of. For VAR_DECL,
2302 PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL 2324 PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL
2303 nodes, this points to either the FUNCTION_DECL for the containing 2325 nodes, this points to either the FUNCTION_DECL for the containing
2532 2554
2533 /* Returns nonzero if the DECL_RTL for NODE has already been set. */ 2555 /* Returns nonzero if the DECL_RTL for NODE has already been set. */
2534 #define DECL_RTL_SET_P(NODE) \ 2556 #define DECL_RTL_SET_P(NODE) \
2535 (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL) 2557 (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL)
2536 2558
2537 /* Copy the RTL from NODE1 to NODE2. If the RTL was not set for 2559 /* Copy the RTL from SRC_DECL to DST_DECL. If the RTL was not set for
2538 NODE1, it will not be set for NODE2; this is a lazy copy. */ 2560 SRC_DECL, it will not be set for DST_DECL; this is a lazy copy. */
2539 #define COPY_DECL_RTL(NODE1, NODE2) \ 2561 #define COPY_DECL_RTL(SRC_DECL, DST_DECL) \
2540 (DECL_WRTL_CHECK (NODE2)->decl_with_rtl.rtl \ 2562 (DECL_WRTL_CHECK (DST_DECL)->decl_with_rtl.rtl \
2541 = DECL_WRTL_CHECK (NODE1)->decl_with_rtl.rtl) 2563 = DECL_WRTL_CHECK (SRC_DECL)->decl_with_rtl.rtl)
2542 2564
2543 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */ 2565 /* The DECL_RTL for NODE, if it is set, or NULL, if it is not set. */
2544 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL) 2566 #define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
2545 2567
2546 #if (GCC_VERSION >= 2007) 2568 #if (GCC_VERSION >= 2007)
2622 's' (struct S) in record_component_aliases. The counterpart is that 2644 's' (struct S) in record_component_aliases. The counterpart is that
2623 accesses to s.i must not be given the alias set of the type of 'i' 2645 accesses to s.i must not be given the alias set of the type of 'i'
2624 (int) but instead directly that of the type of 's' (struct S). */ 2646 (int) but instead directly that of the type of 's' (struct S). */
2625 #define DECL_NONADDRESSABLE_P(NODE) \ 2647 #define DECL_NONADDRESSABLE_P(NODE) \
2626 (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) 2648 (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
2649
2650 /* Used in a FIELD_DECL to indicate that this field is padding. */
2651 #define DECL_PADDING_P(NODE) \
2652 (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3)
2627 2653
2628 /* A numeric unique identifier for a LABEL_DECL. The UID allocation is 2654 /* A numeric unique identifier for a LABEL_DECL. The UID allocation is
2629 dense, unique within any one function, and may be used to index arrays. 2655 dense, unique within any one function, and may be used to index arrays.
2630 If the value is -1, then no UID has been assigned. */ 2656 If the value is -1, then no UID has been assigned. */
2631 #define LABEL_DECL_UID(NODE) \ 2657 #define LABEL_DECL_UID(NODE) \
2727 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \ 2753 #define DECL_ASSEMBLER_NAME_SET_P(NODE) \
2728 (DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE) 2754 (DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE)
2729 2755
2730 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */ 2756 /* Set the DECL_ASSEMBLER_NAME for NODE to NAME. */
2731 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \ 2757 #define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
2732 (DECL_ASSEMBLER_NAME_RAW (NODE) = (NAME)) 2758 overwrite_decl_assembler_name (NODE, NAME)
2733 2759
2734 /* Copy the DECL_ASSEMBLER_NAME from DECL1 to DECL2. Note that if DECL1's 2760 /* Copy the DECL_ASSEMBLER_NAME from SRC_DECL to DST_DECL. Note that
2735 DECL_ASSEMBLER_NAME has not yet been set, using this macro will not cause 2761 if SRC_DECL's DECL_ASSEMBLER_NAME has not yet been set, using this
2736 the DECL_ASSEMBLER_NAME of either DECL to be set. In other words, the 2762 macro will not cause the DECL_ASSEMBLER_NAME to be set, but will
2737 semantics of using this macro, are different than saying: 2763 clear DECL_ASSEMBLER_NAME of DST_DECL, if it was already set. In
2738 2764 other words, the semantics of using this macro, are different than
2739 SET_DECL_ASSEMBLER_NAME(DECL2, DECL_ASSEMBLER_NAME (DECL1)) 2765 saying:
2740 2766
2741 which will try to set the DECL_ASSEMBLER_NAME for DECL1. */ 2767 SET_DECL_ASSEMBLER_NAME(DST_DECL, DECL_ASSEMBLER_NAME (SRC_DECL))
2742 2768
2743 #define COPY_DECL_ASSEMBLER_NAME(DECL1, DECL2) \ 2769 which will try to set the DECL_ASSEMBLER_NAME for SRC_DECL. */
2744 SET_DECL_ASSEMBLER_NAME (DECL2, DECL_ASSEMBLER_NAME_RAW (DECL1)) 2770
2771 #define COPY_DECL_ASSEMBLER_NAME(SRC_DECL, DST_DECL) \
2772 SET_DECL_ASSEMBLER_NAME (DST_DECL, DECL_ASSEMBLER_NAME_RAW (SRC_DECL))
2745 2773
2746 /* Records the section name in a section attribute. Used to pass 2774 /* Records the section name in a section attribute. Used to pass
2747 the name from decl_attributes to make_function_rtl and make_decl_rtl. */ 2775 the name from decl_attributes to make_function_rtl and make_decl_rtl. */
2748 #define DECL_SECTION_NAME(NODE) decl_section_name (NODE) 2776 #define DECL_SECTION_NAME(NODE) decl_section_name (NODE)
2749 2777
2973 /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function") 3001 /* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
2974 that describes the status of this function. */ 3002 that describes the status of this function. */
2975 #define DECL_STRUCT_FUNCTION(NODE) \ 3003 #define DECL_STRUCT_FUNCTION(NODE) \
2976 (FUNCTION_DECL_CHECK (NODE)->function_decl.f) 3004 (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
2977 3005
2978 /* In a FUNCTION_DECL, nonzero means a built in function of a
2979 standard library or more generally a built in function that is
2980 recognized by optimizers and expanders.
2981
2982 Note that it is different from the DECL_IS_BUILTIN accessor. For
2983 instance, user declared prototypes of C library functions are not
2984 DECL_IS_BUILTIN but may be DECL_BUILT_IN. */
2985 #define DECL_BUILT_IN(NODE) (DECL_BUILT_IN_CLASS (NODE) != NOT_BUILT_IN)
2986 3006
2987 /* For a builtin function, identify which part of the compiler defined it. */ 3007 /* For a builtin function, identify which part of the compiler defined it. */
2988 #define DECL_BUILT_IN_CLASS(NODE) \ 3008 #define DECL_BUILT_IN_CLASS(NODE) \
2989 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class) 3009 (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
2990 3010
3017 3037
3018 /* In FUNCTION_DECL, this is set if this function is a C++ destructor. 3038 /* In FUNCTION_DECL, this is set if this function is a C++ destructor.
3019 Devirtualization machinery uses this to track types in destruction. */ 3039 Devirtualization machinery uses this to track types in destruction. */
3020 #define DECL_CXX_DESTRUCTOR_P(NODE)\ 3040 #define DECL_CXX_DESTRUCTOR_P(NODE)\
3021 (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor) 3041 (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor)
3042
3043 /* In FUNCTION_DECL, this is set if this function is a lambda function. */
3044 #define DECL_LAMBDA_FUNCTION(NODE) \
3045 (FUNCTION_DECL_CHECK (NODE)->function_decl.lambda_function)
3022 3046
3023 /* In FUNCTION_DECL that represent an virtual method this is set when 3047 /* In FUNCTION_DECL that represent an virtual method this is set when
3024 the method is final. */ 3048 the method is final. */
3025 #define DECL_FINAL_P(NODE)\ 3049 #define DECL_FINAL_P(NODE)\
3026 (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.final) 3050 (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.final)
3639 3663
3640 inline bool 3664 inline bool
3641 id_equal (const char *str, const_tree id) 3665 id_equal (const char *str, const_tree id)
3642 { 3666 {
3643 return !strcmp (str, IDENTIFIER_POINTER (id)); 3667 return !strcmp (str, IDENTIFIER_POINTER (id));
3668 }
3669
3670 /* Return the number of elements in the VECTOR_TYPE given by NODE. */
3671
3672 inline poly_uint64
3673 TYPE_VECTOR_SUBPARTS (const_tree node)
3674 {
3675 STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
3676 unsigned int precision = VECTOR_TYPE_CHECK (node)->type_common.precision;
3677 if (NUM_POLY_INT_COEFFS == 2)
3678 {
3679 poly_uint64 res = 0;
3680 res.coeffs[0] = 1 << (precision & 0xff);
3681 if (precision & 0x100)
3682 res.coeffs[1] = 1 << (precision & 0xff);
3683 return res;
3684 }
3685 else
3686 return 1 << precision;
3687 }
3688
3689 /* Set the number of elements in VECTOR_TYPE NODE to SUBPARTS, which must
3690 satisfy valid_vector_subparts_p. */
3691
3692 inline void
3693 SET_TYPE_VECTOR_SUBPARTS (tree node, poly_uint64 subparts)
3694 {
3695 STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
3696 unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
3697 int index = exact_log2 (coeff0);
3698 gcc_assert (index >= 0);
3699 if (NUM_POLY_INT_COEFFS == 2)
3700 {
3701 unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
3702 gcc_assert (coeff1 == 0 || coeff1 == coeff0);
3703 VECTOR_TYPE_CHECK (node)->type_common.precision
3704 = index + (coeff1 != 0 ? 0x100 : 0);
3705 }
3706 else
3707 VECTOR_TYPE_CHECK (node)->type_common.precision = index;
3708 }
3709
3710 /* Return true if we can construct vector types with the given number
3711 of subparts. */
3712
3713 static inline bool
3714 valid_vector_subparts_p (poly_uint64 subparts)
3715 {
3716 unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
3717 if (!pow2p_hwi (coeff0))
3718 return false;
3719 if (NUM_POLY_INT_COEFFS == 2)
3720 {
3721 unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
3722 if (coeff1 != 0 && coeff1 != coeff0)
3723 return false;
3724 }
3725 return true;
3726 }
3727
3728 /* In NON_LVALUE_EXPR and VIEW_CONVERT_EXPR, set when this node is merely a
3729 wrapper added to express a location_t on behalf of the node's child
3730 (e.g. by maybe_wrap_with_location). */
3731
3732 #define EXPR_LOCATION_WRAPPER_P(NODE) \
3733 (TREE_CHECK2(NODE, NON_LVALUE_EXPR, VIEW_CONVERT_EXPR)->base.public_flag)
3734
3735 /* Test if EXP is merely a wrapper node, added to express a location_t
3736 on behalf of the node's child (e.g. by maybe_wrap_with_location). */
3737
3738 inline bool
3739 location_wrapper_p (const_tree exp)
3740 {
3741 /* A wrapper node has code NON_LVALUE_EXPR or VIEW_CONVERT_EXPR, and
3742 the flag EXPR_LOCATION_WRAPPER_P is set.
3743 It normally has the same type as its operand, but it can have a
3744 different one if the type of the operand has changed (e.g. when
3745 merging duplicate decls).
3746
3747 NON_LVALUE_EXPR is used for wrapping constants, apart from STRING_CST.
3748 VIEW_CONVERT_EXPR is used for wrapping non-constants and STRING_CST. */
3749 if ((TREE_CODE (exp) == NON_LVALUE_EXPR
3750 || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
3751 && EXPR_LOCATION_WRAPPER_P (exp))
3752 return true;
3753 return false;
3754 }
3755
3756 /* Implementation of STRIP_ANY_LOCATION_WRAPPER. */
3757
3758 inline tree
3759 tree_strip_any_location_wrapper (tree exp)
3760 {
3761 if (location_wrapper_p (exp))
3762 return TREE_OPERAND (exp, 0);
3763 else
3764 return exp;
3644 } 3765 }
3645 3766
3646 #define error_mark_node global_trees[TI_ERROR_MARK] 3767 #define error_mark_node global_trees[TI_ERROR_MARK]
3647 3768
3648 #define intQI_type_node global_trees[TI_INTQI_TYPE] 3769 #define intQI_type_node global_trees[TI_INTQI_TYPE]
3715 #define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE] 3836 #define complex_float_type_node global_trees[TI_COMPLEX_FLOAT_TYPE]
3716 #define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE] 3837 #define complex_double_type_node global_trees[TI_COMPLEX_DOUBLE_TYPE]
3717 #define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE] 3838 #define complex_long_double_type_node global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
3718 3839
3719 #define COMPLEX_FLOATN_NX_TYPE_NODE(IDX) global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (IDX)] 3840 #define COMPLEX_FLOATN_NX_TYPE_NODE(IDX) global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (IDX)]
3720
3721 #define pointer_bounds_type_node global_trees[TI_POINTER_BOUNDS_TYPE]
3722 3841
3723 #define void_type_node global_trees[TI_VOID_TYPE] 3842 #define void_type_node global_trees[TI_VOID_TYPE]
3724 /* The C type `void *'. */ 3843 /* The C type `void *'. */
3725 #define ptr_type_node global_trees[TI_PTR_TYPE] 3844 #define ptr_type_node global_trees[TI_PTR_TYPE]
3726 /* The C type `const void *'. */ 3845 /* The C type `const void *'. */
3875 3994
3876 #define error_operand_p(NODE) \ 3995 #define error_operand_p(NODE) \
3877 ((NODE) == error_mark_node \ 3996 ((NODE) == error_mark_node \
3878 || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node)) 3997 || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node))
3879 3998
3999 /* Return the number of elements encoded directly in a VECTOR_CST. */
4000
4001 inline unsigned int
4002 vector_cst_encoded_nelts (const_tree t)
4003 {
4004 return VECTOR_CST_NPATTERNS (t) * VECTOR_CST_NELTS_PER_PATTERN (t);
4005 }
4006
3880 extern tree decl_assembler_name (tree); 4007 extern tree decl_assembler_name (tree);
4008 extern void overwrite_decl_assembler_name (tree decl, tree name);
3881 extern tree decl_comdat_group (const_tree); 4009 extern tree decl_comdat_group (const_tree);
3882 extern tree decl_comdat_group_id (const_tree); 4010 extern tree decl_comdat_group_id (const_tree);
3883 extern const char *decl_section_name (const_tree); 4011 extern const char *decl_section_name (const_tree);
3884 extern void set_decl_section_name (tree, const char *); 4012 extern void set_decl_section_name (tree, const char *);
3885 extern enum tls_model decl_tls_model (const_tree); 4013 extern enum tls_model decl_tls_model (const_tree);
4004 4132
4005 /* Constructs double_int from tree CST. */ 4133 /* Constructs double_int from tree CST. */
4006 4134
4007 extern tree double_int_to_tree (tree, double_int); 4135 extern tree double_int_to_tree (tree, double_int);
4008 4136
4009 extern tree wide_int_to_tree (tree type, const wide_int_ref &cst); 4137 extern tree wide_int_to_tree (tree type, const poly_wide_int_ref &cst);
4010 extern tree force_fit_type (tree, const wide_int_ref &, int, bool); 4138 extern tree force_fit_type (tree, const poly_wide_int_ref &, int, bool);
4011 4139
4012 /* Create an INT_CST node with a CST value zero extended. */ 4140 /* Create an INT_CST node with a CST value zero extended. */
4013 4141
4014 /* static inline */ 4142 /* static inline */
4015 extern tree build_int_cst (tree, HOST_WIDE_INT); 4143 extern tree build_int_cst (tree, poly_int64);
4016 extern tree build_int_cstu (tree type, unsigned HOST_WIDE_INT cst); 4144 extern tree build_int_cstu (tree type, poly_uint64);
4017 extern tree build_int_cst_type (tree, HOST_WIDE_INT); 4145 extern tree build_int_cst_type (tree, poly_int64);
4018 extern tree make_vector (unsigned CXX_MEM_STAT_INFO); 4146 extern tree make_vector (unsigned, unsigned CXX_MEM_STAT_INFO);
4019 extern tree build_vector (tree, vec<tree> CXX_MEM_STAT_INFO);
4020 extern tree build_vector_from_ctor (tree, vec<constructor_elt, va_gc> *); 4147 extern tree build_vector_from_ctor (tree, vec<constructor_elt, va_gc> *);
4021 extern tree build_vector_from_val (tree, tree); 4148 extern tree build_vector_from_val (tree, tree);
4149 extern tree build_vec_series (tree, tree, tree);
4150 extern tree build_index_vector (tree, poly_uint64, poly_uint64);
4022 extern void recompute_constructor_flags (tree); 4151 extern void recompute_constructor_flags (tree);
4023 extern void verify_constructor_flags (tree); 4152 extern void verify_constructor_flags (tree);
4024 extern tree build_constructor (tree, vec<constructor_elt, va_gc> *); 4153 extern tree build_constructor (tree, vec<constructor_elt, va_gc> *);
4025 extern tree build_constructor_single (tree, tree, tree); 4154 extern tree build_constructor_single (tree, tree, tree);
4026 extern tree build_constructor_from_list (tree, tree); 4155 extern tree build_constructor_from_list (tree, tree);
4027 extern tree build_constructor_va (tree, int, ...); 4156 extern tree build_constructor_va (tree, int, ...);
4157 extern tree build_clobber (tree);
4028 extern tree build_real_from_int_cst (tree, const_tree); 4158 extern tree build_real_from_int_cst (tree, const_tree);
4029 extern tree build_complex (tree, tree, tree); 4159 extern tree build_complex (tree, tree, tree);
4030 extern tree build_complex_inf (tree, bool); 4160 extern tree build_complex_inf (tree, bool);
4031 extern tree build_each_one_cst (tree); 4161 extern tree build_each_one_cst (tree);
4032 extern tree build_one_cst (tree); 4162 extern tree build_one_cst (tree);
4033 extern tree build_minus_one_cst (tree); 4163 extern tree build_minus_one_cst (tree);
4034 extern tree build_all_ones_cst (tree); 4164 extern tree build_all_ones_cst (tree);
4035 extern tree build_zero_cst (tree); 4165 extern tree build_zero_cst (tree);
4036 extern tree build_string (int, const char *); 4166 extern tree build_string (int, const char *);
4167 extern tree build_poly_int_cst (tree, const poly_wide_int_ref &);
4037 extern tree build_tree_list (tree, tree CXX_MEM_STAT_INFO); 4168 extern tree build_tree_list (tree, tree CXX_MEM_STAT_INFO);
4038 extern tree build_tree_list_vec (const vec<tree, va_gc> * CXX_MEM_STAT_INFO); 4169 extern tree build_tree_list_vec (const vec<tree, va_gc> * CXX_MEM_STAT_INFO);
4039 extern tree build_decl (location_t, enum tree_code, 4170 extern tree build_decl (location_t, enum tree_code,
4040 tree, tree CXX_MEM_STAT_INFO); 4171 tree, tree CXX_MEM_STAT_INFO);
4041 extern tree build_fn_decl (const char *, tree); 4172 extern tree build_fn_decl (const char *, tree);
4074 extern tree build_pointer_type_for_mode (tree, machine_mode, bool); 4205 extern tree build_pointer_type_for_mode (tree, machine_mode, bool);
4075 extern tree build_pointer_type (tree); 4206 extern tree build_pointer_type (tree);
4076 extern tree build_reference_type_for_mode (tree, machine_mode, bool); 4207 extern tree build_reference_type_for_mode (tree, machine_mode, bool);
4077 extern tree build_reference_type (tree); 4208 extern tree build_reference_type (tree);
4078 extern tree build_vector_type_for_mode (tree, machine_mode); 4209 extern tree build_vector_type_for_mode (tree, machine_mode);
4079 extern tree build_vector_type (tree innertype, int nunits); 4210 extern tree build_vector_type (tree, poly_int64);
4080 extern tree build_truth_vector_type (unsigned, unsigned); 4211 extern tree build_truth_vector_type (poly_uint64, poly_uint64);
4081 extern tree build_same_sized_truth_vector_type (tree vectype); 4212 extern tree build_same_sized_truth_vector_type (tree vectype);
4082 extern tree build_opaque_vector_type (tree innertype, int nunits); 4213 extern tree build_opaque_vector_type (tree, poly_int64);
4083 extern tree build_index_type (tree); 4214 extern tree build_index_type (tree);
4084 extern tree build_array_type (tree, tree, bool = false); 4215 extern tree build_array_type (tree, tree, bool = false);
4085 extern tree build_nonshared_array_type (tree, tree); 4216 extern tree build_nonshared_array_type (tree, tree);
4086 extern tree build_array_type_nelts (tree, unsigned HOST_WIDE_INT); 4217 extern tree build_array_type_nelts (tree, poly_uint64);
4087 extern tree build_function_type (tree, tree); 4218 extern tree build_function_type (tree, tree);
4088 extern tree build_function_type_list (tree, ...); 4219 extern tree build_function_type_list (tree, ...);
4089 extern tree build_varargs_function_type_list (tree, ...); 4220 extern tree build_varargs_function_type_list (tree, ...);
4090 extern tree build_function_type_array (tree, int, tree *); 4221 extern tree build_function_type_array (tree, int, tree *);
4091 extern tree build_varargs_function_type_array (tree, int, tree *); 4222 extern tree build_varargs_function_type_array (tree, int, tree *);
4103 extern tree value_member (tree, tree); 4234 extern tree value_member (tree, tree);
4104 extern tree purpose_member (const_tree, tree); 4235 extern tree purpose_member (const_tree, tree);
4105 extern bool vec_member (const_tree, vec<tree, va_gc> *); 4236 extern bool vec_member (const_tree, vec<tree, va_gc> *);
4106 extern tree chain_index (int, tree); 4237 extern tree chain_index (int, tree);
4107 4238
4239 /* Arguments may be null. */
4108 extern int tree_int_cst_equal (const_tree, const_tree); 4240 extern int tree_int_cst_equal (const_tree, const_tree);
4109 4241
4110 extern bool tree_fits_shwi_p (const_tree) 4242 /* The following predicates are safe to call with a null argument. */
4111 ATTRIBUTE_PURE; 4243 extern bool tree_fits_shwi_p (const_tree) ATTRIBUTE_PURE;
4112 extern bool tree_fits_uhwi_p (const_tree) 4244 extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE;
4113 ATTRIBUTE_PURE; 4245 extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE;
4114 extern HOST_WIDE_INT tree_to_shwi (const_tree); 4246 extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE;
4115 extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree); 4247
4248 extern HOST_WIDE_INT tree_to_shwi (const_tree)
4249 ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
4250 extern poly_int64 tree_to_poly_int64 (const_tree)
4251 ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
4252 extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree)
4253 ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
4254 extern poly_uint64 tree_to_poly_uint64 (const_tree)
4255 ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
4116 #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003) 4256 #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
4117 extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT 4257 extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
4118 tree_to_shwi (const_tree t) 4258 tree_to_shwi (const_tree t)
4119 { 4259 {
4120 gcc_assert (tree_fits_shwi_p (t)); 4260 gcc_assert (tree_fits_shwi_p (t));
4125 tree_to_uhwi (const_tree t) 4265 tree_to_uhwi (const_tree t)
4126 { 4266 {
4127 gcc_assert (tree_fits_uhwi_p (t)); 4267 gcc_assert (tree_fits_uhwi_p (t));
4128 return TREE_INT_CST_LOW (t); 4268 return TREE_INT_CST_LOW (t);
4129 } 4269 }
4270 #if NUM_POLY_INT_COEFFS == 1
4271 extern inline __attribute__ ((__gnu_inline__)) poly_int64
4272 tree_to_poly_int64 (const_tree t)
4273 {
4274 gcc_assert (tree_fits_poly_int64_p (t));
4275 return TREE_INT_CST_LOW (t);
4276 }
4277
4278 extern inline __attribute__ ((__gnu_inline__)) poly_uint64
4279 tree_to_poly_uint64 (const_tree t)
4280 {
4281 gcc_assert (tree_fits_poly_uint64_p (t));
4282 return TREE_INT_CST_LOW (t);
4283 }
4284 #endif
4130 #endif 4285 #endif
4131 extern int tree_int_cst_sgn (const_tree); 4286 extern int tree_int_cst_sgn (const_tree);
4132 extern int tree_int_cst_sign_bit (const_tree); 4287 extern int tree_int_cst_sign_bit (const_tree);
4133 extern unsigned int tree_int_cst_min_precision (tree, signop); 4288 extern unsigned int tree_int_cst_min_precision (tree, signop);
4134 extern tree strip_array_types (tree); 4289 extern tree strip_array_types (tree);
4135 extern tree excess_precision_type (tree); 4290 extern tree excess_precision_type (tree);
4136 extern bool valid_constant_size_p (const_tree); 4291 extern bool valid_constant_size_p (const_tree);
4137 4292
4293 /* Return true if T holds a value that can be represented as a poly_int64
4294 without loss of precision. Store the value in *VALUE if so. */
4295
4296 inline bool
4297 poly_int_tree_p (const_tree t, poly_int64_pod *value)
4298 {
4299 if (tree_fits_poly_int64_p (t))
4300 {
4301 *value = tree_to_poly_int64 (t);
4302 return true;
4303 }
4304 return false;
4305 }
4306
4307 /* Return true if T holds a value that can be represented as a poly_uint64
4308 without loss of precision. Store the value in *VALUE if so. */
4309
4310 inline bool
4311 poly_int_tree_p (const_tree t, poly_uint64_pod *value)
4312 {
4313 if (tree_fits_poly_uint64_p (t))
4314 {
4315 *value = tree_to_poly_uint64 (t);
4316 return true;
4317 }
4318 return false;
4319 }
4138 4320
4139 /* From expmed.c. Since rtl.h is included after tree.h, we can't 4321 /* From expmed.c. Since rtl.h is included after tree.h, we can't
4140 put the prototype here. Rtl.h does declare the prototype if 4322 put the prototype here. Rtl.h does declare the prototype if
4141 tree.h had been included. */ 4323 tree.h had been included. */
4142 4324
4256 /* Returns the first FIELD_DECL in a type. */ 4438 /* Returns the first FIELD_DECL in a type. */
4257 4439
4258 extern tree first_field (const_tree); 4440 extern tree first_field (const_tree);
4259 4441
4260 /* Given an initializer INIT, return TRUE if INIT is zero or some 4442 /* Given an initializer INIT, return TRUE if INIT is zero or some
4261 aggregate of zeros. Otherwise return FALSE. */ 4443 aggregate of zeros. Otherwise return FALSE. If NONZERO is not
4262 4444 null, set *NONZERO if and only if INIT is known not to be all
4263 extern bool initializer_zerop (const_tree); 4445 zeros. The combination of return value of false and *NONZERO
4446 false implies that INIT may but need not be all zeros. Other
4447 combinations indicate definitive answers. */
4448
4449 extern bool initializer_zerop (const_tree, bool * = NULL);
4450
4451 extern wide_int vector_cst_int_elt (const_tree, unsigned int);
4452 extern tree vector_cst_elt (const_tree, unsigned int);
4264 4453
4265 /* Given a vector VEC, return its first element if all elements are 4454 /* Given a vector VEC, return its first element if all elements are
4266 the same. Otherwise return NULL_TREE. */ 4455 the same. Otherwise return NULL_TREE. */
4267 4456
4268 extern tree uniform_vector_p (const_tree); 4457 extern tree uniform_vector_p (const_tree);
4271 4460
4272 extern vec<tree, va_gc> *ctor_to_vec (tree); 4461 extern vec<tree, va_gc> *ctor_to_vec (tree);
4273 4462
4274 /* zerop (tree x) is nonzero if X is a constant of value 0. */ 4463 /* zerop (tree x) is nonzero if X is a constant of value 0. */
4275 4464
4276 extern int zerop (const_tree); 4465 extern bool zerop (const_tree);
4277 4466
4278 /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0. */ 4467 /* integer_zerop (tree x) is nonzero if X is an integer constant of value 0. */
4279 4468
4280 extern int integer_zerop (const_tree); 4469 extern bool integer_zerop (const_tree);
4281 4470
4282 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1. */ 4471 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1. */
4283 4472
4284 extern int integer_onep (const_tree); 4473 extern bool integer_onep (const_tree);
4285 4474
4286 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1, or 4475 /* integer_onep (tree x) is nonzero if X is an integer constant of value 1, or
4287 a vector or complex where each part is 1. */ 4476 a vector or complex where each part is 1. */
4288 4477
4289 extern int integer_each_onep (const_tree); 4478 extern bool integer_each_onep (const_tree);
4290 4479
4291 /* integer_all_onesp (tree x) is nonzero if X is an integer constant 4480 /* integer_all_onesp (tree x) is nonzero if X is an integer constant
4292 all of whose significant bits are 1. */ 4481 all of whose significant bits are 1. */
4293 4482
4294 extern int integer_all_onesp (const_tree); 4483 extern bool integer_all_onesp (const_tree);
4295 4484
4296 /* integer_minus_onep (tree x) is nonzero if X is an integer constant of 4485 /* integer_minus_onep (tree x) is nonzero if X is an integer constant of
4297 value -1. */ 4486 value -1. */
4298 4487
4299 extern int integer_minus_onep (const_tree); 4488 extern bool integer_minus_onep (const_tree);
4300 4489
4301 /* integer_pow2p (tree x) is nonzero is X is an integer constant with 4490 /* integer_pow2p (tree x) is nonzero is X is an integer constant with
4302 exactly one bit 1. */ 4491 exactly one bit 1. */
4303 4492
4304 extern int integer_pow2p (const_tree); 4493 extern bool integer_pow2p (const_tree);
4305 4494
4306 /* integer_nonzerop (tree x) is nonzero if X is an integer constant 4495 /* integer_nonzerop (tree x) is nonzero if X is an integer constant
4307 with a nonzero value. */ 4496 with a nonzero value. */
4308 4497
4309 extern int integer_nonzerop (const_tree); 4498 extern bool integer_nonzerop (const_tree);
4310 4499
4311 /* integer_truep (tree x) is nonzero if X is an integer constant of value 1 or 4500 /* integer_truep (tree x) is nonzero if X is an integer constant of value 1 or
4312 a vector where each element is an integer constant of value -1. */ 4501 a vector where each element is an integer constant of value -1. */
4313 4502
4314 extern int integer_truep (const_tree); 4503 extern bool integer_truep (const_tree);
4315 4504
4316 extern bool cst_and_fits_in_hwi (const_tree); 4505 extern bool cst_and_fits_in_hwi (const_tree);
4317 extern tree num_ending_zeros (const_tree); 4506 extern tree num_ending_zeros (const_tree);
4318 4507
4319 /* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of 4508 /* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of
4320 value 0. */ 4509 value 0. */
4321 4510
4322 extern int fixed_zerop (const_tree); 4511 extern bool fixed_zerop (const_tree);
4323 4512
4324 /* staticp (tree x) is nonzero if X is a reference to data allocated 4513 /* staticp (tree x) is nonzero if X is a reference to data allocated
4325 at a fixed address in memory. Returns the outermost data. */ 4514 at a fixed address in memory. Returns the outermost data. */
4326 4515
4327 extern tree staticp (tree); 4516 extern tree staticp (tree);
4516 /* Given a DECL or TYPE, return the scope in which it was declared, or 4705 /* Given a DECL or TYPE, return the scope in which it was declared, or
4517 NUL_TREE if there is no containing scope. */ 4706 NUL_TREE if there is no containing scope. */
4518 4707
4519 extern tree get_containing_scope (const_tree); 4708 extern tree get_containing_scope (const_tree);
4520 4709
4710 /* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL. */
4711
4712 extern const_tree get_ultimate_context (const_tree);
4713
4521 /* Return the FUNCTION_DECL which provides this _DECL with its context, 4714 /* Return the FUNCTION_DECL which provides this _DECL with its context,
4522 or zero if none. */ 4715 or zero if none. */
4523 extern tree decl_function_context (const_tree); 4716 extern tree decl_function_context (const_tree);
4524 4717
4525 /* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides 4718 /* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
4526 this _DECL with its context, or zero if none. */ 4719 this _DECL with its context, or zero if none. */
4527 extern tree decl_type_context (const_tree); 4720 extern tree decl_type_context (const_tree);
4528 4721
4529 /* Return 1 if EXPR is the real constant zero. */ 4722 /* Return true if EXPR is the real constant zero. */
4530 extern int real_zerop (const_tree); 4723 extern bool real_zerop (const_tree);
4531 4724
4532 /* Initialize the iterator I with arguments from function FNDECL */ 4725 /* Initialize the iterator I with arguments from function FNDECL */
4533 4726
4534 static inline void 4727 static inline void
4535 function_args_iter_init (function_args_iterator *i, const_tree fntype) 4728 function_args_iter_init (function_args_iterator *i, const_tree fntype)
4625 extern tree tree_strip_nop_conversions (tree); 4818 extern tree tree_strip_nop_conversions (tree);
4626 extern tree tree_strip_sign_nop_conversions (tree); 4819 extern tree tree_strip_sign_nop_conversions (tree);
4627 extern const_tree strip_invariant_refs (const_tree); 4820 extern const_tree strip_invariant_refs (const_tree);
4628 extern tree lhd_gcc_personality (void); 4821 extern tree lhd_gcc_personality (void);
4629 extern void assign_assembler_name_if_needed (tree); 4822 extern void assign_assembler_name_if_needed (tree);
4630 extern void warn_deprecated_use (tree, tree); 4823 extern bool warn_deprecated_use (tree, tree);
4631 extern void cache_integer_cst (tree); 4824 extern void cache_integer_cst (tree);
4632 extern const char *combined_fn_name (combined_fn); 4825 extern const char *combined_fn_name (combined_fn);
4633 4826
4634 /* Compare and hash for any structure which begins with a canonical 4827 /* Compare and hash for any structure which begins with a canonical
4635 pointer. Assumes all pointers are interchangeable, which is sort 4828 pointer. Assumes all pointers are interchangeable, which is sort
4679 return COMPLETE_TYPE_P (type) 4872 return COMPLETE_TYPE_P (type)
4680 || (TREE_CODE (type) == ARRAY_TYPE 4873 || (TREE_CODE (type) == ARRAY_TYPE
4681 && COMPLETE_TYPE_P (TREE_TYPE (type))); 4874 && COMPLETE_TYPE_P (TREE_TYPE (type)));
4682 } 4875 }
4683 4876
4877 /* Return true if the value of T could be represented as a poly_widest_int. */
4878
4879 inline bool
4880 poly_int_tree_p (const_tree t)
4881 {
4882 return (TREE_CODE (t) == INTEGER_CST || POLY_INT_CST_P (t));
4883 }
4884
4885 /* Return the bit size of BIT_FIELD_REF T, in cases where it is known
4886 to be a poly_uint64. (This is always true at the gimple level.) */
4887
4888 inline poly_uint64
4889 bit_field_size (const_tree t)
4890 {
4891 return tree_to_poly_uint64 (TREE_OPERAND (t, 1));
4892 }
4893
4894 /* Return the starting bit offset of BIT_FIELD_REF T, in cases where it is
4895 known to be a poly_uint64. (This is always true at the gimple level.) */
4896
4897 inline poly_uint64
4898 bit_field_offset (const_tree t)
4899 {
4900 return tree_to_poly_uint64 (TREE_OPERAND (t, 2));
4901 }
4902
4684 extern tree strip_float_extensions (tree); 4903 extern tree strip_float_extensions (tree);
4685 extern int really_constant_p (const_tree); 4904 extern bool really_constant_p (const_tree);
4905 extern bool ptrdiff_tree_p (const_tree, poly_int64_pod *);
4686 extern bool decl_address_invariant_p (const_tree); 4906 extern bool decl_address_invariant_p (const_tree);
4687 extern bool decl_address_ip_invariant_p (const_tree); 4907 extern bool decl_address_ip_invariant_p (const_tree);
4688 extern bool int_fits_type_p (const_tree, const_tree); 4908 extern bool int_fits_type_p (const_tree, const_tree)
4909 ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2) ATTRIBUTE_PURE;
4689 #ifndef GENERATOR_FILE 4910 #ifndef GENERATOR_FILE
4690 extern void get_type_static_bounds (const_tree, mpz_t, mpz_t); 4911 extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
4691 #endif 4912 #endif
4692 extern bool variably_modified_type_p (tree, tree); 4913 extern bool variably_modified_type_p (tree, tree);
4693 extern int tree_log2 (const_tree); 4914 extern int tree_log2 (const_tree);
4710 inchash::add_expr (tree, hstate); 4931 inchash::add_expr (tree, hstate);
4711 return hstate.end (); 4932 return hstate.end ();
4712 } 4933 }
4713 4934
4714 extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT); 4935 extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT);
4715 extern int type_list_equal (const_tree, const_tree); 4936 extern bool type_list_equal (const_tree, const_tree);
4716 extern int chain_member (const_tree, const_tree); 4937 extern bool chain_member (const_tree, const_tree);
4717 extern void dump_tree_statistics (void); 4938 extern void dump_tree_statistics (void);
4718 extern void recompute_tree_invariant_for_addr_expr (tree); 4939 extern void recompute_tree_invariant_for_addr_expr (tree);
4719 extern bool needs_to_live_in_memory (const_tree); 4940 extern bool needs_to_live_in_memory (const_tree);
4720 extern tree reconstruct_complex_type (tree, tree); 4941 extern tree reconstruct_complex_type (tree, tree);
4721 extern int real_onep (const_tree); 4942 extern bool real_onep (const_tree);
4722 extern int real_minus_onep (const_tree); 4943 extern bool real_minus_onep (const_tree);
4723 extern void init_ttree (void); 4944 extern void init_ttree (void);
4724 extern void build_common_tree_nodes (bool); 4945 extern void build_common_tree_nodes (bool);
4725 extern void build_common_builtin_nodes (void); 4946 extern void build_common_builtin_nodes (void);
4726 extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); 4947 extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
4727 extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT); 4948 extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT);
4732 extern tree tree_block (tree); 4953 extern tree tree_block (tree);
4733 extern void tree_set_block (tree, tree); 4954 extern void tree_set_block (tree, tree);
4734 extern location_t *block_nonartificial_location (tree); 4955 extern location_t *block_nonartificial_location (tree);
4735 extern location_t tree_nonartificial_location (tree); 4956 extern location_t tree_nonartificial_location (tree);
4736 extern tree block_ultimate_origin (const_tree); 4957 extern tree block_ultimate_origin (const_tree);
4737 extern tree get_binfo_at_offset (tree, HOST_WIDE_INT, tree); 4958 extern tree get_binfo_at_offset (tree, poly_int64, tree);
4738 extern bool virtual_method_call_p (const_tree); 4959 extern bool virtual_method_call_p (const_tree);
4739 extern tree obj_type_ref_class (const_tree ref); 4960 extern tree obj_type_ref_class (const_tree ref);
4740 extern bool types_same_for_odr (const_tree type1, const_tree type2, 4961 extern bool types_same_for_odr (const_tree type1, const_tree type2,
4741 bool strict=false); 4962 bool strict=false);
4742 extern bool contains_bitfld_component_ref_p (const_tree); 4963 extern bool contains_bitfld_component_ref_p (const_tree);
4763 4984
4764 /* Return a tree of sizetype representing the size, in bytes, of the element 4985 /* Return a tree of sizetype representing the size, in bytes, of the element
4765 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 4986 of EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
4766 extern tree array_ref_element_size (tree); 4987 extern tree array_ref_element_size (tree);
4767 4988
4989 /* Return a typenode for the "standard" C type with a given name. */
4990 extern tree get_typenode_from_name (const char *);
4991
4768 /* Return a tree representing the upper bound of the array mentioned in 4992 /* Return a tree representing the upper bound of the array mentioned in
4769 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ 4993 EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */
4770 extern tree array_ref_up_bound (tree); 4994 extern tree array_ref_up_bound (tree);
4771 4995
4772 /* Return a tree representing the lower bound of the array mentioned in 4996 /* Return a tree representing the lower bound of the array mentioned in
4862 5086
4863 #define tree_vec_map_eq tree_map_base_eq 5087 #define tree_vec_map_eq tree_map_base_eq
4864 #define tree_vec_map_hash tree_decl_map_hash 5088 #define tree_vec_map_hash tree_decl_map_hash
4865 #define tree_vec_map_marked_p tree_map_base_marked_p 5089 #define tree_vec_map_marked_p tree_map_base_marked_p
4866 5090
5091 /* A hash_map of two trees for use with GTY((cache)). Garbage collection for
5092 such a map will not mark keys, and will mark values if the key is already
5093 marked. */
5094 struct tree_cache_traits
5095 : simple_cache_map_traits<default_hash_traits<tree>, tree> { };
5096 typedef hash_map<tree,tree,tree_cache_traits> tree_cache_map;
5097
4867 /* Initialize the abstract argument list iterator object ITER with the 5098 /* Initialize the abstract argument list iterator object ITER with the
4868 arguments from CALL_EXPR node EXP. */ 5099 arguments from CALL_EXPR node EXP. */
4869 static inline void 5100 static inline void
4870 init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter) 5101 init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter)
4871 { 5102 {
5109 extern bool anon_aggrname_p (const_tree); 5340 extern bool anon_aggrname_p (const_tree);
5110 5341
5111 /* The tree and const_tree overload templates. */ 5342 /* The tree and const_tree overload templates. */
5112 namespace wi 5343 namespace wi
5113 { 5344 {
5345 class unextended_tree
5346 {
5347 private:
5348 const_tree m_t;
5349
5350 public:
5351 unextended_tree () {}
5352 unextended_tree (const_tree t) : m_t (t) {}
5353
5354 unsigned int get_precision () const;
5355 const HOST_WIDE_INT *get_val () const;
5356 unsigned int get_len () const;
5357 const_tree get_tree () const { return m_t; }
5358 };
5359
5360 template <>
5361 struct int_traits <unextended_tree>
5362 {
5363 static const enum precision_type precision_type = VAR_PRECISION;
5364 static const bool host_dependent_precision = false;
5365 static const bool is_sign_extended = false;
5366 };
5367
5114 template <int N> 5368 template <int N>
5115 class extended_tree 5369 class extended_tree
5116 { 5370 {
5117 private: 5371 private:
5118 const_tree m_t; 5372 const_tree m_t;
5119 5373
5120 public: 5374 public:
5375 extended_tree () {}
5121 extended_tree (const_tree); 5376 extended_tree (const_tree);
5122 5377
5123 unsigned int get_precision () const; 5378 unsigned int get_precision () const;
5124 const HOST_WIDE_INT *get_val () const; 5379 const HOST_WIDE_INT *get_val () const;
5125 unsigned int get_len () const; 5380 unsigned int get_len () const;
5381 const_tree get_tree () const { return m_t; }
5126 }; 5382 };
5127 5383
5128 template <int N> 5384 template <int N>
5129 struct int_traits <extended_tree <N> > 5385 struct int_traits <extended_tree <N> >
5130 { 5386 {
5132 static const bool host_dependent_precision = false; 5388 static const bool host_dependent_precision = false;
5133 static const bool is_sign_extended = true; 5389 static const bool is_sign_extended = true;
5134 static const unsigned int precision = N; 5390 static const unsigned int precision = N;
5135 }; 5391 };
5136 5392
5137 typedef const generic_wide_int <extended_tree <WIDE_INT_MAX_PRECISION> > 5393 typedef extended_tree <WIDE_INT_MAX_PRECISION> widest_extended_tree;
5138 tree_to_widest_ref; 5394 typedef extended_tree <ADDR_MAX_PRECISION> offset_extended_tree;
5139 typedef const generic_wide_int <extended_tree <ADDR_MAX_PRECISION> > 5395
5140 tree_to_offset_ref; 5396 typedef const generic_wide_int <widest_extended_tree> tree_to_widest_ref;
5397 typedef const generic_wide_int <offset_extended_tree> tree_to_offset_ref;
5141 typedef const generic_wide_int<wide_int_ref_storage<false, false> > 5398 typedef const generic_wide_int<wide_int_ref_storage<false, false> >
5142 tree_to_wide_ref; 5399 tree_to_wide_ref;
5143 5400
5144 tree_to_widest_ref to_widest (const_tree); 5401 tree_to_widest_ref to_widest (const_tree);
5145 tree_to_offset_ref to_offset (const_tree); 5402 tree_to_offset_ref to_offset (const_tree);
5146 tree_to_wide_ref to_wide (const_tree); 5403 tree_to_wide_ref to_wide (const_tree);
5147 wide_int to_wide (const_tree, unsigned int); 5404 wide_int to_wide (const_tree, unsigned int);
5148 } 5405
5406 typedef const poly_int <NUM_POLY_INT_COEFFS,
5407 generic_wide_int <widest_extended_tree> >
5408 tree_to_poly_widest_ref;
5409 typedef const poly_int <NUM_POLY_INT_COEFFS,
5410 generic_wide_int <offset_extended_tree> >
5411 tree_to_poly_offset_ref;
5412 typedef const poly_int <NUM_POLY_INT_COEFFS,
5413 generic_wide_int <unextended_tree> >
5414 tree_to_poly_wide_ref;
5415
5416 tree_to_poly_widest_ref to_poly_widest (const_tree);
5417 tree_to_poly_offset_ref to_poly_offset (const_tree);
5418 tree_to_poly_wide_ref to_poly_wide (const_tree);
5419
5420 template <int N>
5421 struct ints_for <generic_wide_int <extended_tree <N> >, CONST_PRECISION>
5422 {
5423 typedef generic_wide_int <extended_tree <N> > extended;
5424 static extended zero (const extended &);
5425 };
5426
5427 template <>
5428 struct ints_for <generic_wide_int <unextended_tree>, VAR_PRECISION>
5429 {
5430 typedef generic_wide_int <unextended_tree> unextended;
5431 static unextended zero (const unextended &);
5432 };
5433 }
5434
5435 /* Used to convert a tree to a widest2_int like this:
5436 widest2_int foo = widest2_int_cst (some_tree). */
5437 typedef generic_wide_int <wi::extended_tree <WIDE_INT_MAX_PRECISION * 2> >
5438 widest2_int_cst;
5149 5439
5150 /* Refer to INTEGER_CST T as though it were a widest_int. 5440 /* Refer to INTEGER_CST T as though it were a widest_int.
5151 5441
5152 This function gives T's actual numerical value, influenced by the 5442 This function gives T's actual numerical value, influenced by the
5153 signedness of its type. For example, a signed byte with just the 5443 signedness of its type. For example, a signed byte with just the
5287 and needs to be as fast as possible, so there is no fallback for 5577 and needs to be as fast as possible, so there is no fallback for
5288 other casees. */ 5578 other casees. */
5289 gcc_unreachable (); 5579 gcc_unreachable ();
5290 } 5580 }
5291 5581
5582 inline unsigned int
5583 wi::unextended_tree::get_precision () const
5584 {
5585 return TYPE_PRECISION (TREE_TYPE (m_t));
5586 }
5587
5588 inline const HOST_WIDE_INT *
5589 wi::unextended_tree::get_val () const
5590 {
5591 return &TREE_INT_CST_ELT (m_t, 0);
5592 }
5593
5594 inline unsigned int
5595 wi::unextended_tree::get_len () const
5596 {
5597 return TREE_INT_CST_NUNITS (m_t);
5598 }
5599
5600 /* Return the value of a POLY_INT_CST in its native precision. */
5601
5602 inline wi::tree_to_poly_wide_ref
5603 poly_int_cst_value (const_tree x)
5604 {
5605 poly_int <NUM_POLY_INT_COEFFS, generic_wide_int <wi::unextended_tree> > res;
5606 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
5607 res.coeffs[i] = POLY_INT_CST_COEFF (x, i);
5608 return res;
5609 }
5610
5611 /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
5612 poly_widest_int. See wi::to_widest for more details. */
5613
5614 inline wi::tree_to_poly_widest_ref
5615 wi::to_poly_widest (const_tree t)
5616 {
5617 if (POLY_INT_CST_P (t))
5618 {
5619 poly_int <NUM_POLY_INT_COEFFS,
5620 generic_wide_int <widest_extended_tree> > res;
5621 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
5622 res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
5623 return res;
5624 }
5625 return t;
5626 }
5627
5628 /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
5629 poly_offset_int. See wi::to_offset for more details. */
5630
5631 inline wi::tree_to_poly_offset_ref
5632 wi::to_poly_offset (const_tree t)
5633 {
5634 if (POLY_INT_CST_P (t))
5635 {
5636 poly_int <NUM_POLY_INT_COEFFS,
5637 generic_wide_int <offset_extended_tree> > res;
5638 for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
5639 res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
5640 return res;
5641 }
5642 return t;
5643 }
5644
5645 /* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
5646 poly_wide_int. See wi::to_wide for more details. */
5647
5648 inline wi::tree_to_poly_wide_ref
5649 wi::to_poly_wide (const_tree t)
5650 {
5651 if (POLY_INT_CST_P (t))
5652 return poly_int_cst_value (t);
5653 return t;
5654 }
5655
5656 template <int N>
5657 inline generic_wide_int <wi::extended_tree <N> >
5658 wi::ints_for <generic_wide_int <wi::extended_tree <N> >,
5659 wi::CONST_PRECISION>::zero (const extended &x)
5660 {
5661 return build_zero_cst (TREE_TYPE (x.get_tree ()));
5662 }
5663
5664 inline generic_wide_int <wi::unextended_tree>
5665 wi::ints_for <generic_wide_int <wi::unextended_tree>,
5666 wi::VAR_PRECISION>::zero (const unextended &x)
5667 {
5668 return build_zero_cst (TREE_TYPE (x.get_tree ()));
5669 }
5670
5292 namespace wi 5671 namespace wi
5293 { 5672 {
5294 template <typename T> 5673 template <typename T>
5295 bool fits_to_boolean_p (const T &x, const_tree); 5674 bool fits_to_boolean_p (const T &x, const_tree);
5296 5675
5304 5683
5305 template <typename T> 5684 template <typename T>
5306 bool 5685 bool
5307 wi::fits_to_boolean_p (const T &x, const_tree type) 5686 wi::fits_to_boolean_p (const T &x, const_tree type)
5308 { 5687 {
5309 return eq_p (x, 0) || eq_p (x, TYPE_UNSIGNED (type) ? 1 : -1); 5688 typedef typename poly_int_traits<T>::int_type int_type;
5689 return (known_eq (x, int_type (0))
5690 || known_eq (x, int_type (TYPE_UNSIGNED (type) ? 1 : -1)));
5310 } 5691 }
5311 5692
5312 template <typename T> 5693 template <typename T>
5313 bool 5694 bool
5314 wi::fits_to_tree_p (const T &x, const_tree type) 5695 wi::fits_to_tree_p (const T &x, const_tree type)
5317 transformations assume that they can only take values 0 and +/-1. */ 5698 transformations assume that they can only take values 0 and +/-1. */
5318 if (TREE_CODE (type) == BOOLEAN_TYPE) 5699 if (TREE_CODE (type) == BOOLEAN_TYPE)
5319 return fits_to_boolean_p (x, type); 5700 return fits_to_boolean_p (x, type);
5320 5701
5321 if (TYPE_UNSIGNED (type)) 5702 if (TYPE_UNSIGNED (type))
5322 return eq_p (x, zext (x, TYPE_PRECISION (type))); 5703 return known_eq (x, zext (x, TYPE_PRECISION (type)));
5323 else 5704 else
5324 return eq_p (x, sext (x, TYPE_PRECISION (type))); 5705 return known_eq (x, sext (x, TYPE_PRECISION (type)));
5325 } 5706 }
5326 5707
5327 /* Produce the smallest number that is represented in TYPE. The precision 5708 /* Produce the smallest number that is represented in TYPE. The precision
5328 and sign are taken from TYPE. */ 5709 and sign are taken from TYPE. */
5329 inline wide_int 5710 inline wide_int
5378 extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree); 5759 extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree);
5379 5760
5380 /* Given an expression EXP that is a handled_component_p, 5761 /* Given an expression EXP that is a handled_component_p,
5381 look for the ultimate containing object, which is returned and specify 5762 look for the ultimate containing object, which is returned and specify
5382 the access position and size. */ 5763 the access position and size. */
5383 extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *, 5764 extern tree get_inner_reference (tree, poly_int64_pod *, poly_int64_pod *,
5384 tree *, machine_mode *, int *, int *, int *); 5765 tree *, machine_mode *, int *, int *, int *);
5385 5766
5386 extern tree build_personality_function (const char *); 5767 extern tree build_personality_function (const char *);
5387 5768
5388 struct GTY(()) int_n_trees_t { 5769 struct GTY(()) int_n_trees_t {
5431 extern void gt_ggc_mx (tree &); 5812 extern void gt_ggc_mx (tree &);
5432 extern void gt_pch_nx (tree &); 5813 extern void gt_pch_nx (tree &);
5433 extern void gt_pch_nx (tree &, gt_pointer_operator, void *); 5814 extern void gt_pch_nx (tree &, gt_pointer_operator, void *);
5434 5815
5435 extern bool nonnull_arg_p (const_tree); 5816 extern bool nonnull_arg_p (const_tree);
5436 extern bool is_redundant_typedef (const_tree); 5817 extern bool default_is_empty_record (const_tree);
5818 extern HOST_WIDE_INT arg_int_size_in_bytes (const_tree);
5819 extern tree arg_size_in_bytes (const_tree);
5820 extern bool expr_type_first_operand_type_p (tree_code);
5437 5821
5438 extern location_t 5822 extern location_t
5439 set_source_range (tree expr, location_t start, location_t finish); 5823 set_source_range (tree expr, location_t start, location_t finish);
5440 5824
5441 extern location_t 5825 extern location_t
5442 set_source_range (tree expr, source_range src_range); 5826 set_source_range (tree expr, source_range src_range);
5443
5444 static inline source_range
5445 get_decl_source_range (tree decl)
5446 {
5447 location_t loc = DECL_SOURCE_LOCATION (decl);
5448 return get_range_from_loc (line_table, loc);
5449 }
5450 5827
5451 /* Return true if it makes sense to promote/demote from_type to to_type. */ 5828 /* Return true if it makes sense to promote/demote from_type to to_type. */
5452 inline bool 5829 inline bool
5453 desired_pro_or_demotion_p (const_tree to_type, const_tree from_type) 5830 desired_pro_or_demotion_p (const_tree to_type, const_tree from_type)
5454 { 5831 {
5475 /* Return true if type T has the same precision as its underlying mode. */ 5852 /* Return true if type T has the same precision as its underlying mode. */
5476 5853
5477 inline bool 5854 inline bool
5478 type_has_mode_precision_p (const_tree t) 5855 type_has_mode_precision_p (const_tree t)
5479 { 5856 {
5480 return TYPE_PRECISION (t) == GET_MODE_PRECISION (TYPE_MODE (t)); 5857 return known_eq (TYPE_PRECISION (t), GET_MODE_PRECISION (TYPE_MODE (t)));
5858 }
5859
5860 /* Return true if a FUNCTION_DECL NODE is a GCC built-in function.
5861
5862 Note that it is different from the DECL_IS_BUILTIN accessor. For
5863 instance, user declared prototypes of C library functions are not
5864 DECL_IS_BUILTIN but may be DECL_BUILT_IN. */
5865
5866 inline bool
5867 fndecl_built_in_p (const_tree node)
5868 {
5869 return (DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN);
5870 }
5871
5872 /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
5873 of class KLASS. */
5874
5875 inline bool
5876 fndecl_built_in_p (const_tree node, built_in_class klass)
5877 {
5878 return (fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass);
5879 }
5880
5881 /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
5882 of class KLASS with name equal to NAME. */
5883
5884 inline bool
5885 fndecl_built_in_p (const_tree node, int name, built_in_class klass)
5886 {
5887 return (fndecl_built_in_p (node, klass) && DECL_FUNCTION_CODE (node) == name);
5888 }
5889
5890 /* Return true if a FUNCTION_DECL NODE is a GCC built-in function
5891 of BUILT_IN_NORMAL class with name equal to NAME. */
5892
5893 inline bool
5894 fndecl_built_in_p (const_tree node, built_in_function name)
5895 {
5896 return (fndecl_built_in_p (node, BUILT_IN_NORMAL)
5897 && DECL_FUNCTION_CODE (node) == name);
5481 } 5898 }
5482 5899
5483 #endif /* GCC_TREE_H */ 5900 #endif /* GCC_TREE_H */