diff options
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 94 |
1 files changed, 88 insertions, 6 deletions
@@ -363,6 +363,14 @@ code_helper::is_builtin_fn () const (tree_not_check5 ((T), __FILE__, __LINE__, __FUNCTION__, \ (CODE1), (CODE2), (CODE3), (CODE4), (CODE5))) +#define TREE_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) \ +(tree_check6 ((T), __FILE__, __LINE__, __FUNCTION__, \ + (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), (CODE6))) + +#define TREE_NOT_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) \ +(tree_not_check6 ((T), __FILE__, __LINE__, __FUNCTION__, \ + (CODE1), (CODE2), (CODE3), (CODE4), (CODE5), (CODE6))) + #define CONTAINS_STRUCT_CHECK(T, STRUCT) \ (contains_struct_check ((T), (STRUCT), __FILE__, __LINE__, __FUNCTION__)) @@ -485,6 +493,8 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, #define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T) #define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T) #define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T) +#define TREE_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) (T) +#define TREE_NOT_CHECK6(T, CODE1, CODE2, CODE3, CODE4, CODE5, CODE6) (T) #define TREE_CLASS_CHECK(T, CODE) (T) #define TREE_RANGE_CHECK(T, CODE1, CODE2) (T) #define EXPR_CHECK(T) (T) @@ -528,8 +538,8 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, TREE_CHECK2 (T, ARRAY_TYPE, INTEGER_TYPE) #define NUMERICAL_TYPE_CHECK(T) \ - TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE, \ - FIXED_POINT_TYPE) + TREE_CHECK6 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE, \ + FIXED_POINT_TYPE, BITINT_TYPE) /* Here is how primitive or already-canonicalized types' hash codes are made. */ @@ -603,7 +613,8 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, #define INTEGRAL_TYPE_P(TYPE) \ (TREE_CODE (TYPE) == ENUMERAL_TYPE \ || TREE_CODE (TYPE) == BOOLEAN_TYPE \ - || TREE_CODE (TYPE) == INTEGER_TYPE) + || TREE_CODE (TYPE) == INTEGER_TYPE \ + || TREE_CODE (TYPE) == BITINT_TYPE) /* Nonzero if TYPE represents an integral type, including complex and vector integer types. */ @@ -614,6 +625,10 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, || VECTOR_TYPE_P (TYPE)) \ && INTEGRAL_TYPE_P (TREE_TYPE (TYPE)))) +/* Nonzero if TYPE is bit-precise integer type. */ + +#define BITINT_TYPE_P(TYPE) (TREE_CODE (TYPE) == BITINT_TYPE) + /* Nonzero if TYPE represents a non-saturating fixed-point type. */ #define NON_SAT_FIXED_POINT_TYPE_P(TYPE) \ @@ -1244,7 +1259,9 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, /* True if NODE, a FIELD_DECL, is to be processed as a bitfield for constructor output purposes. */ #define CONSTRUCTOR_BITFIELD_P(NODE) \ - (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) && DECL_MODE (NODE) != BLKmode) + (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) \ + && (DECL_MODE (NODE) != BLKmode \ + || TREE_CODE (TREE_TYPE (NODE)) == BITINT_TYPE)) /* True if NODE is a clobber right hand side, an expression of indeterminate value that clobbers the LHS in a copy instruction. We use a volatile @@ -3687,6 +3704,38 @@ tree_not_check5 (tree __t, const char *__f, int __l, const char *__g, } inline tree +tree_check6 (tree __t, const char *__f, int __l, const char *__g, + enum tree_code __c1, enum tree_code __c2, enum tree_code __c3, + enum tree_code __c4, enum tree_code __c5, enum tree_code __c6) +{ + if (TREE_CODE (__t) != __c1 + && TREE_CODE (__t) != __c2 + && TREE_CODE (__t) != __c3 + && TREE_CODE (__t) != __c4 + && TREE_CODE (__t) != __c5 + && TREE_CODE (__t) != __c6) + tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, __c6, + 0); + return __t; +} + +inline tree +tree_not_check6 (tree __t, const char *__f, int __l, const char *__g, + enum tree_code __c1, enum tree_code __c2, enum tree_code __c3, + enum tree_code __c4, enum tree_code __c5, enum tree_code __c6) +{ + if (TREE_CODE (__t) == __c1 + || TREE_CODE (__t) == __c2 + || TREE_CODE (__t) == __c3 + || TREE_CODE (__t) == __c4 + || TREE_CODE (__t) == __c5 + || TREE_CODE (__t) == __c6) + tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, + __c6, 0); + return __t; +} + +inline tree contains_struct_check (tree __t, const enum tree_node_structure_enum __s, const char *__f, int __l, const char *__g) { @@ -3824,7 +3873,7 @@ any_integral_type_check (tree __t, const char *__f, int __l, const char *__g) { if (!ANY_INTEGRAL_TYPE_P (__t)) tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE, - INTEGER_TYPE, 0); + INTEGER_TYPE, BITINT_TYPE, 0); return __t; } @@ -3943,6 +3992,38 @@ tree_not_check5 (const_tree __t, const char *__f, int __l, const char *__g, } inline const_tree +tree_check6 (const_tree __t, const char *__f, int __l, const char *__g, + enum tree_code __c1, enum tree_code __c2, enum tree_code __c3, + enum tree_code __c4, enum tree_code __c5, enum tree_code __c6) +{ + if (TREE_CODE (__t) != __c1 + && TREE_CODE (__t) != __c2 + && TREE_CODE (__t) != __c3 + && TREE_CODE (__t) != __c4 + && TREE_CODE (__t) != __c5 + && TREE_CODE (__t) != __c6) + tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, __c6, + 0); + return __t; +} + +inline const_tree +tree_not_check6 (const_tree __t, const char *__f, int __l, const char *__g, + enum tree_code __c1, enum tree_code __c2, enum tree_code __c3, + enum tree_code __c4, enum tree_code __c5, enum tree_code __c6) +{ + if (TREE_CODE (__t) == __c1 + || TREE_CODE (__t) == __c2 + || TREE_CODE (__t) == __c3 + || TREE_CODE (__t) == __c4 + || TREE_CODE (__t) == __c5 + || TREE_CODE (__t) == __c6) + tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, + __c6, 0); + return __t; +} + +inline const_tree contains_struct_check (const_tree __t, const enum tree_node_structure_enum __s, const char *__f, int __l, const char *__g) { @@ -4050,7 +4131,7 @@ any_integral_type_check (const_tree __t, const char *__f, int __l, { if (!ANY_INTEGRAL_TYPE_P (__t)) tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE, - INTEGER_TYPE, 0); + INTEGER_TYPE, BITINT_TYPE, 0); return __t; } @@ -5582,6 +5663,7 @@ extern void build_common_builtin_nodes (void); extern void tree_cc_finalize (void); extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int); extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT); +extern tree build_bitint_type (unsigned HOST_WIDE_INT, int); extern tree build_range_type (tree, tree, tree); extern tree build_nonshared_range_type (tree, tree, tree); extern bool subrange_type_for_debug_p (const_tree, tree *, tree *); |