diff options
author | Richard Biener <rguenther@suse.de> | 2023-06-09 09:31:14 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-06-28 08:15:48 +0200 |
commit | fe48f2651334bc4d96b6df6b2bb6b29fcb732a83 (patch) | |
tree | 17b6a99417de436399e7e6d326c51185e45d14fb /gcc/tree.h | |
parent | abdf0b6cdff5783b97f35ad61ae31433f0569dfd (diff) | |
download | gcc-fe48f2651334bc4d96b6df6b2bb6b29fcb732a83.zip gcc-fe48f2651334bc4d96b6df6b2bb6b29fcb732a83.tar.gz gcc-fe48f2651334bc4d96b6df6b2bb6b29fcb732a83.tar.bz2 |
Prevent TYPE_PRECISION on VECTOR_TYPEs
The following makes sure that using TYPE_PRECISION on VECTOR_TYPE
ICEs when tree checking is enabled. This should avoid wrong-code
in cases like PR110182 and instead ICE.
It also introduces a TYPE_PRECISION_RAW accessor and adjusts
places I found that are eligible to use that.
* tree.h (TYPE_PRECISION): Check for non-VECTOR_TYPE.
(TYPE_PRECISION_RAW): Provide raw access to the precision
field.
* tree.cc (verify_type_variant): Compare TYPE_PRECISION_RAW.
(gimple_canonical_types_compatible_p): Likewise.
* tree-streamer-out.cc (pack_ts_type_common_value_fields):
Stream TYPE_PRECISION_RAW.
* tree-streamer-in.cc (unpack_ts_type_common_value_fields):
Likewise.
* lto-streamer-out.cc (hash_tree): Hash TYPE_PRECISION_RAW.
gcc/lto/
* lto-common.cc (compare_tree_sccs_1): Use TYPE_PRECISION_RAW.
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -2191,7 +2191,9 @@ class auto_suppress_location_wrappers #define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type_common.size_unit) #define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type_common.pointer_to) #define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type_common.reference_to) -#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type_common.precision) +#define TYPE_PRECISION(NODE) \ + (TREE_NOT_CHECK (TYPE_CHECK (NODE), VECTOR_TYPE)->type_common.precision) +#define TYPE_PRECISION_RAW(NODE) (TYPE_CHECK (NODE)->type_common.precision) #define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type_common.name) #define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.next_variant) #define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.main_variant) |