https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120750
Bug ID: 120750 Summary: SEGV in remove_use, at rtl-ssa/accesses.cc:1276 Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: ondrejmachota at gmail dot com CC: rsandifo at gcc dot gnu.org Target Milestone: --- Hi, Jan Hubicka <hubi...@ucw.cz> and I are working on a new RTL DCE pass based on the RTL SSA framework. To help reproduce this bug, we have provided a branch: refs/users/omachota/heads/rtl-ssa-dce (commit: eb73be9bde7). We tested our DCE implementation agains UD_DCE, which deleted the same instructions in both provided testcases. Reduced testcase (testcase_pr72742.i): int a, b; short c; short *bar_y; void bar() { lab: short va; c %= a; if (a & (b ? *bar_y : 4)) va += va; a = va && a; goto lab; } Run: gcc -c testcase_pr72742.i -O2 Compiler output: during RTL pass: rtl_ssa_dce testcase_pr72742.i: In function 'bar': testcase_pr72742.i:12:1: internal compiler error: Segmentation fault 12 | } | ^ 0x2210511 internal_error(char const*, ...) ../../gcc/gcc/diagnostic-global-context.cc:517 0xd95f4f crash_signal ../../gcc/gcc/toplev.cc:322 0x2084d4e pointer_mux<rtl_ssa::use_info, rtl_ssa::use_info>::known_first() const ../../gcc/gcc/mux-utils.h:87 0x2084d4e rtl_ssa::use_info::last_use() const ../../gcc/gcc/rtl-ssa/member-fns.inl:148 0x2084d4e rtl_ssa::function_info::remove_use(rtl_ssa::use_info*) ../../gcc/gcc/rtl-ssa/accesses.cc:1276 0x21ca98e rtl_ssa::function_info::delete_phi(rtl_ssa::phi_info*) ../../gcc/gcc/rtl-ssa/blocks.cc:402 0x208ac7b rtl_ssa::function_info::process_uses_of_deleted_def(rtl_ssa::set_info*) ../../gcc/gcc/rtl-ssa/changes.cc:272 0x208de66 rtl_ssa::function_info::change_insns(array_slice<rtl_ssa::insn_change*>) ../../gcc/gcc/rtl-ssa/changes.cc:863 0x1ef8328 sweep ../../gcc/gcc/dce.cc:1675 0x1ef8328 execute ../../gcc/gcc/dce.cc:1709 0x1ef8328 execute ../../gcc/gcc/dce.cc:1747 Compiler details: Using built-in specs. COLLECT_GCC=/mnt/tmpfs/gcc-install/usr/local/bin/gcc COLLECT_LTO_WRAPPER=/mnt/tmpfs/gcc-install/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/15.0.1/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc/configure --enable-languages=c,c++ --disable-bootstrap --disable-multilib --disable-libquadmath --disable-nls --disable-lto --disable-shared --disable-threads Thread model: single Supported LTO compression algorithms: zlib zstd gcc version 15.0.1 20250123 (experimental) (GCC) Compiling GCC from the provided branch may fail. You might need to disable the rtl_ssa_dce pass, compile GCC, then re-enable the pass and compile again. One more reduced testcase (931102-1.i): int e_a; void e() { int d; char b; switch (e_a) case 1: { d |= e_a; if (b) e(); do if (d > b++) d |= e_a; while (1); } } Run: gcc -c 931102-1.i -O1 Compiler output: during RTL pass: rtl_ssa_dce 931102-1.i: In function 'e': 931102-1.i:15:1: internal compiler error: Segmentation fault 15 | } | ^ 0x2210511 internal_error(char const*, ...) ../../gcc/gcc/diagnostic-global-context.cc:517 0xd95f4f crash_signal ../../gcc/gcc/toplev.cc:322 0x2084d4e pointer_mux<rtl_ssa::use_info, rtl_ssa::use_info>::known_first() const ../../gcc/gcc/mux-utils.h:87 0x2084d4e rtl_ssa::use_info::last_use() const ../../gcc/gcc/rtl-ssa/member-fns.inl:148 0x2084d4e rtl_ssa::function_info::remove_use(rtl_ssa::use_info*) ../../gcc/gcc/rtl-ssa/accesses.cc:1276 0x21ca98e rtl_ssa::function_info::delete_phi(rtl_ssa::phi_info*) ../../gcc/gcc/rtl-ssa/blocks.cc:402 0x208ac7b rtl_ssa::function_info::process_uses_of_deleted_def(rtl_ssa::set_info*) ../../gcc/gcc/rtl-ssa/changes.cc:272 0x208de66 rtl_ssa::function_info::change_insns(array_slice<rtl_ssa::insn_change*>) ../../gcc/gcc/rtl-ssa/changes.cc:863 0x1ef8328 sweep ../../gcc/gcc/dce.cc:1675 0x1ef8328 execute ../../gcc/gcc/dce.cc:1709 0x1ef8328 execute ../../gcc/gcc/dce.cc:1747