From: Kito Cheng Date: Mon, 29 Dec 2025 06:14:25 +0000 (+0800) Subject: VN: Fix VN ICE for large _BitInt types X-Git-Tag: basepoints/gcc-17~2072 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cbb9d3815201cfb8869140fc80f0cee19f004a3f;p=thirdparty%2Fgcc.git VN: Fix VN ICE for large _BitInt types gcc.dg/torture/bitint-18.c triggers an ICE in push_partial_def when compiling for RISC-V with -O2. The issue occurs because build_nonstandard_integer_type cannot handle bit widths larger than MAX_FIXED_MODE_SIZE. For BITINT_TYPE with maxsizei > MAX_FIXED_MODE_SIZE, use build_bitint_type instead of build_nonstandard_integer_type, similar to what tree-sra.cc does. gcc/ChangeLog: * tree-ssa-sccvn.cc (vn_walk_cb_data::push_partial_def): Use build_bitint_type for BITINT_TYPE when maxsizei exceeds MAX_FIXED_MODE_SIZE. --- diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index b152dcb5943..13deccb6c6b 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -2316,7 +2316,13 @@ vn_walk_cb_data::push_partial_def (pd_data pd, /* Make sure to interpret in a type that has a range covering the whole access size. */ if (INTEGRAL_TYPE_P (vr->type) && maxsizei != TYPE_PRECISION (vr->type)) - type = build_nonstandard_integer_type (maxsizei, TYPE_UNSIGNED (type)); + { + if (TREE_CODE (vr->type) == BITINT_TYPE + && maxsizei > MAX_FIXED_MODE_SIZE) + type = build_bitint_type (maxsizei, TYPE_UNSIGNED (type)); + else + type = build_nonstandard_integer_type (maxsizei, TYPE_UNSIGNED (type)); + } tree val; if (BYTES_BIG_ENDIAN) {