https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90530
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-reduction | Status|UNCONFIRMED |NEW Last reconfirmed| |2019-05-20 Ever confirmed|0 |1 --- Comment #10 from Martin Liška <marxin at gcc dot gnu.org> --- There's a reduced test-case: $ cat expmed.ii void fancy_abort(const char *, int, const char *); enum machine_mode { E_QImode, E_HImodeE_DImode, E_TImode, MIN_MODE_INT = E_QImode, MAX_MODE_INT = E_TImode }; template <typename U> void is_a(machine_mode, U); class A {}; struct B { bool cheap[2][MAX_MODE_INT + 1]; }; struct C { int cost[2][MAX_MODE_INT + 1]; }; struct { B x_sdiv_pow2_cheap; B x_smod_pow2_cheap; C x_udiv_cost; } a; bool *expmed_op_cheap_ptr(B *p1, bool p2, machine_mode p3) { return &p1->cheap[p2][p3]; } int *expmed_op_cost_ptr(C *p1, bool p2, machine_mode p3) { return &p1->cost[p2][p3]; } bool *b, *c; int d; machine_mode e; void init_expmed() { machine_mode f; int g = 0; for (;; g++) { f = MIN_MODE_INT; for (; f <= MAX_MODE_INT; f = machine_mode(f + 1)) { int *h = expmed_op_cost_ptr(&(&a)->x_udiv_cost, g, f); *h = d; b = expmed_op_cheap_ptr(&(&a)->x_sdiv_pow2_cheap, g, f); *b = (c = expmed_op_cheap_ptr(&(&a)->x_smod_pow2_cheap, g, f)); *c = 0; A i; is_a(f, i); for (; e;) fancy_abort("", 9, __FUNCTION__); } } } $ /dev/shm/objdir2/gcc/xgcc -B/dev/shm/objdir2/gcc/ -c expmed.ii -O2 expmed.ii: In function ‘void init_expmed()’: expmed.ii:48:1: error: unrecognizable insn: 48 | } | ^ (insn 177 176 178 2 (set (reg:SI 52 %fr24) (subreg:SI (reg:DI 51 %fr23) 4)) -1 (nil)) during RTL pass: reload expmed.ii:48:1: internal compiler error: in extract_insn, at recog.c:2310 0x52bc60 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) /home/marxin/Programming/gcc/gcc/rtl-error.c:108 0x52bc7e _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) /home/marxin/Programming/gcc/gcc/rtl-error.c:116 0x52baac extract_insn(rtx_insn*) /home/marxin/Programming/gcc/gcc/recog.c:2310 0xa2b29d extract_insn_cached(rtx_insn*) /home/marxin/Programming/gcc/gcc/recog.c:2199 0x82540a cleanup_subreg_operands(rtx_insn*) /home/marxin/Programming/gcc/gcc/final.c:3313 0xa54a49 reload(rtx_insn*, int) /home/marxin/Programming/gcc/gcc/reload1.c:1235 0x9259c0 do_reload /home/marxin/Programming/gcc/gcc/ira.c:5528 0x9259c0 execute /home/marxin/Programming/gcc/gcc/ira.c:5700