https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117506
Bug ID: 117506 Summary: [15 Regression] ICE: in decompose, at wide-int.h:1049 with -O3 -funroll-loops Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: patrick at rivosinc dot com Target Milestone: --- Testcase: char a; int b; unsigned c; short d; void e() { for (short f = 0; f < c; f += 3) { a ^= d; b = b < 0 ? b : 0; } } Command/backtrace: > /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/bin/riscv64-unknown-linux-gnu-gcc > -O3 -funroll-loops -march=rv64imdzve64x func.c -c -S -o /dev/null during RTL pass: loop2_unroll func.c: In function 'e': func.c:10:1: internal compiler error: in decompose, at wide-int.h:1049 10 | } | ^ 0x2f0de35 internal_error(char const*, ...) ../../../gcc/gcc/diagnostic-global-context.cc:518 0xc69f90 fancy_abort(char const*, int, char const*) ../../../gcc/gcc/diagnostic.cc:1696 0xafab88 wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::decompose(long*, unsigned int, generic_wide_int<wide_int_ref_storage<false, false> > const&) ../../../gcc/gcc/wide-int.h:1049 0x1390b29 wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::decompose(long*, unsigned int, generic_wide_int<wide_int_ref_storage<false, false> > const&) ../../../gcc/gcc/wide-int.h:1272 0x1390b29 wide_int_ref_storage<false, false>::wide_int_ref_storage<generic_wide_int<wide_int_ref_storage<false, false> > >(generic_wide_int<wide_int_ref_storage<false, false> > const&, unsigned int) ../../../gcc/gcc/wide-int.h:1099 0x1390b29 generic_wide_int<wide_int_ref_storage<false, false> >::generic_wide_int<generic_wide_int<wide_int_ref_storage<false, false> > >(generic_wide_int<wide_int_ref_storage<false, false> > const&, unsigned int) ../../../gcc/gcc/wide-int.h:855 0x1390b29 wi::binary_traits<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> >, wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::precision_type, wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::precision_type>::result_type wi::add<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> > >(generic_wide_int<wide_int_ref_storage<false, false> > const&, generic_wide_int<wide_int_ref_storage<false, false> > const&) ../../../gcc/gcc/wide-int.h:2871 0x1390b29 wi::binary_traits<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> >, wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::precision_type, wi::int_traits<generic_wide_int<wide_int_ref_storage<false, false> > >::precision_type>::operator_result operator+<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> > >(generic_wide_int<wide_int_ref_storage<false, false> > const&, generic_wide_int<wide_int_ref_storage<false, false> > const&) ../../../gcc/gcc/wide-int.h:3857 0x1390b29 poly_int<2u, poly_result<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> >, poly_coeff_pair_traits<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> > >::result_kind>::type> operator+<2u, generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_ref_storage<false, false> > >(poly_int<2u, generic_wide_int<wide_int_ref_storage<false, false> > > const&, poly_int<2u, generic_wide_int<wide_int_ref_storage<false, false> > > const&) ../../../gcc/gcc/poly-int.h:776 0x138b258 simplify_const_binary_operation(rtx_code, machine_mode, rtx_def*, rtx_def*) ../../../gcc/gcc/simplify-rtx.cc:5629 0x137d57c simplify_context::simplify_binary_operation(rtx_code, machine_mode, rtx_def*, rtx_def*) ../../../gcc/gcc/simplify-rtx.cc:2701 0x137d63d simplify_context::simplify_gen_binary(rtx_code, machine_mode, rtx_def*, rtx_def*) ../../../gcc/gcc/simplify-rtx.cc:182 0x1199345 simplify_gen_binary(rtx_code, machine_mode, rtx_def*, rtx_def*) ../../../gcc/gcc/rtl.h:3539 0x1199345 get_biv_step_1 ../../../gcc/gcc/loop-iv.cc:788 0x119a033 get_biv_step ../../../gcc/gcc/loop-iv.cc:828 0x119a033 iv_analyze_biv ../../../gcc/gcc/loop-iv.cc:921 0x119a5ea iv_analyze_op ../../../gcc/gcc/loop-iv.cc:1157 0x119a943 iv_analyze_expr(rtx_insn*, scalar_int_mode, rtx_def*, rtx_iv*) ../../../gcc/gcc/loop-iv.cc:1020 0x119a7a1 iv_analyze_expr(rtx_insn*, scalar_int_mode, rtx_def*, rtx_iv*) ../../../gcc/gcc/loop-iv.cc:1020 0x119ac31 iv_analyze_def ../../../gcc/gcc/loop-iv.cc:1115 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Assertion triggered: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/wide-int.h;h=03edc75bdd1cfc055c2bbc73aa736a30ccdd78f6;hb=HEAD#l1049 Tested with: riscv64-unknown-linux-gnu-gcc (g4473cf8409f) 15.0.0 20241107 (experimental) Found via fuzzer.