https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116390
Bug ID: 116390 Summary: Another ICE for avrtiny and optimization Product: gcc Version: 15.0 URL: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=116389 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dv at vollmann dot ch Target Milestone: --- Target: avr Created attachment 58939 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58939&action=edit Produced by -freport-bug This ICE happened when I tried to strip down the source for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116389>. For -O3 and -O4 it produces an ICE very similar to #116389 (the file for O3 is attached). For -O2 it produces: during RTL pass: final ice.cc: In function 'void badFoo()': ice.cc:70:1: internal compiler error: Segmentation fault 70 | } | ^ 0x1cf6290 internal_error(char const*, ...) /ssd1/build/src/gcc/gcc/diagnostic-global-context.cc:491 0xfca7af crash_signal /ssd1/build/src/gcc/gcc/toplev.cc:321 0x7ff7ade1d58f ??? ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 0xbf92e1 output_operand(rtx_def*, int) /ssd1/build/src/gcc/gcc/final.cc:3624 0xbf9ee0 output_asm_insn(char const*, rtx_def**) /ssd1/build/src/gcc/gcc/final.cc:3524 0x13e5557 output_movsisf(rtx_insn*, rtx_def**, int*) /ssd1/build/src/gcc/gcc/config/avr/avr.cc:5923 0xbfd340 final_scan_insn_1 /ssd1/build/src/gcc/gcc/final.cc:2773 0xbfd908 final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*) /ssd1/build/src/gcc/gcc/final.cc:2886 0xbfdb37 final_1 /ssd1/build/src/gcc/gcc/final.cc:1977 0xbfe634 rest_of_handle_final /ssd1/build/src/gcc/gcc/final.cc:4239 0xbfe634 execute /ssd1/build/src/gcc/gcc/final.cc:4317 and claims: "The bug is not reproducible, so it is likely a hardware or OS problem." (which is bogus, it's 100% reproducible). Due to this difference I submit this as separate bug, but feel free to mark it as duplicate of #116389. Here's the complete source for reference: --- start source struct MyStruct { int i; }; void f_ic(int, char); void f_pi(char const *, int); void f_iic(int, int, char); const MyStruct *f_rms(); char *f_rcp(); int f_ri(); void badFoo() { const MyStruct* ps = f_rms(); const char* pc = f_rcp(); unsigned n1 = f_rcp() - pc; if (n1) { long n2 = n1 - ps->i; if (n2 > 0) { if (f_ri()) n2 = n1; if (f_ri()) { f_iic(1, 2 * n2, ' '); } else f_pi(pc, n2); } if (ps->i > 0) { if (n2 >= 0) f_pi(pc + n2, ps->i); else { f_ic(n2, ' '); } } const int which = f_ri(); switch (which) { case 1: if (f_ri()) f_rcp()[1] = ' '; break; case 2: f_pi(f_rcp(), 1); break; case 3: if (f_ri() && n1 < 0) f_ic(n1, ' '); else f_rcp()[1] = ' '; break; } } } --- end source