https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125373
Bug ID: 125373
Summary: internal compiler error: in extract_insn, at
recog.cc:2894 unrecognisable insn during RTL pass:
cprop_hardreg
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: lu.maltsis at postgrad dot manchester.ac.uk
Target Milestone: ---
```sh
$ cat /tmp/bug.c
int f(int);
void g(int *v, int size) {
for (int i = 0; i < (long long)(v - 1); i++) {
if (v) {
v[i] = v[size];
}
}
}
int main(void)
{
int arr[] = {0,0,0,0};
g(arr, 4);
for (int i = 0; i < 4; i++)
f(arr[i]);
return 0;
}
$ gcc -O3 /tmp/bug.c
/tmp/bug.c: In function ‘main’:
/tmp/bug.c:17:1: error: unrecognizable insn:
17 | }
| ^
(insn 140 39 41 7 (set (reg:DI 2 cx [orig:129 _47 ] [129])
(plus:DI (mult:DI (reg/f:DI 7 sp)
(const_int 4 [0x4]))
(reg/f:DI 7 sp))) -1
(nil))
during RTL pass: cprop_hardreg
/tmp/bug.c:17:1: internal compiler error: in extract_insn, at recog.cc:2894
0x25a010b internal_error(char const*, ...)
/home/user/software/gcc/slot-b/src/gcc/diagnostic-global-context.cc:787
0x9cd0a7 fancy_abort(char const*, int, char const*)
/home/user/software/gcc/slot-b/src/gcc/diagnostics/context.cc:1813
0x854fd0 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/home/user/software/gcc/slot-b/src/gcc/rtl-error.cc:108
0x854ff2 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
/home/user/software/gcc/slot-b/src/gcc/rtl-error.cc:116
0x853439 extract_insn(rtx_insn*)
/home/user/software/gcc/slot-b/src/gcc/recog.cc:2894
0x10dcd7f extract_constrain_insn(rtx_insn*)
/home/user/software/gcc/slot-b/src/gcc/recog.cc:2793
0x10e5c72 copyprop_hardreg_forward_1
/home/user/software/gcc/slot-b/src/gcc/regcprop.cc:881
0x10e6f88 execute
/home/user/software/gcc/slot-b/src/gcc/regcprop.cc:1474
/home/user/software/gcc/slot-b/libexec/gcc/x86_64-pc-linux-gnu/17.0.0/cc1
-quiet -imultiarch x86_64-linux-gnu /tmp/bug.c -quiet -dumpdir a- -dumpbase
bug.c -dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -o /tmp/cc79yguk.s
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.
```
Compiler Explorer Reproducer: https://godbolt.org/z/cf94z5W9j
GCC Commit Hash: f80370a45926f323e0184acfe221738b3e4a00
(https://github.com/gcc-mirror/gcc/commit/f80370a45926f323e0184acfe221738b3e4a00)
Preprocessed Source:
```c
// Target: x86_64-pc-linux-gnu
// Configured with: /home/user/software/gcc/slot-b/src/configure
--prefix=/home/user/software/gcc/slot-b --enable-languages=c,c++
--disable-bootstrap --disable-multilib --with-gmp=/usr --with-mpfr=/usr
--with-mpc=/usr
// Thread model: posix
// Supported LTO compression algorithms: zlib zstd
// gcc version 17.0.0 20260518 (experimental) (GCC)
//
// /tmp/bug.c: In function ‘main’:
// /tmp/bug.c:17:1: error: unrecognizable insn:
// 17 | }
// | ^
// (insn 140 39 41 7 (set (reg:DI 2 cx [orig:129 _47 ] [129])
// (plus:DI (mult:DI (reg/f:DI 7 sp)
// (const_int 4 [0x4]))
// (reg/f:DI 7 sp))) -1
// (nil))
// during RTL pass: cprop_hardreg
// /tmp/bug.c:17:1: internal compiler error: in extract_insn, at recog.cc:2894
// 0x25a010b internal_error(char const*, ...)
// /home/user/software/gcc/slot-b/src/gcc/diagnostic-global-context.cc:787
// 0x9cd0a7 fancy_abort(char const*, int, char const*)
// /home/user/software/gcc/slot-b/src/gcc/diagnostics/context.cc:1813
// 0x854fd0 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
// /home/user/software/gcc/slot-b/src/gcc/rtl-error.cc:108
// 0x854ff2 _fatal_insn_not_found(rtx_def const*, char const*, int, char
const*)
// /home/user/software/gcc/slot-b/src/gcc/rtl-error.cc:116
// 0x853439 extract_insn(rtx_insn*)
// /home/user/software/gcc/slot-b/src/gcc/recog.cc:2894
// 0x10dcd7f extract_constrain_insn(rtx_insn*)
// /home/user/software/gcc/slot-b/src/gcc/recog.cc:2793
// 0x10e5c72 copyprop_hardreg_forward_1
// /home/user/software/gcc/slot-b/src/gcc/regcprop.cc:881
// 0x10e6f88 execute
// /home/user/software/gcc/slot-b/src/gcc/regcprop.cc:1474
// -quiet -imultiarch x86_64-linux-gnu /tmp/bug.c -quiet -dumpdir a- -dumpbase
bug.c -dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -freport-bug -o -
-frandom-seed=0 -fdump-noaddr
// Please submit a full bug report, with preprocessed source.
// Please include the complete backtrace with any bug report.
// See <https://gcc.gnu.org/bugs/> for instructions.
// /home/user/software/gcc/slot-b/libexec/gcc/x86_64-pc-linux-gnu/17.0.0/cc1
-quiet -imultiarch x86_64-linux-gnu /tmp/bug.c -quiet -dumpdir a- -dumpbase
bug.c -dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -freport-bug -o -
-frandom-seed=0 -fdump-noaddr
# 0 "/tmp/bug.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3
# 0 "<command-line>" 2
# 1 "/tmp/bug.c"
int f(int);
void g(int *v, int size) {
for (int i = 0; i < (long long)(v - 1); i++) {
if (v) {
v[i] = v[size];
}
}
}
int main(void)
{
int arr[] = {0,0,0,0};
g(arr, 4);
for (int i = 0; i < 4; i++)
f(arr[i]);
return 0;
}
```