https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105573
Bug ID: 105573
Summary: ICE when building numpy on SPARC64
Product: gcc
Version: 11.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sam at gentoo dot org
Target Milestone: ---
Created attachment 52957
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52957&action=edit
loops.i
Originally reported downstream in Gentoo at https://bugs.gentoo.org/843575 by
Agostino Sarubbo (ago).
Occurs when building numpy 1.22.3 on SPARC64 with GCC 11.3 (but also seen it
with: numpy 1.22.3/gcc 11.2.1_p20220115; numpy 1.21.1/gcc 10.3.0).
I've minimised a reproducer (attached) and can reproduce it myself:
```
$ cat loops.i
UINT_sign_args, UINT_sign_steps;
*UINT_sign_ip1;
__attribute__((optimize("O3"))) UINT_sign() {
char *op1 = UINT_sign_args;
int os1 = UINT_sign_steps, i;
for (; i; i++, op1 += os1) {
unsigned in = *(unsigned *)UINT_sign_ip1;
int *out = op1;
*out = in > 0;
}
}
$ sparc64-unknown-linux-gnu-gcc -O2 -pipe -mcpu=niagara4 -c loops.i
loops.i:1:1: warning: data definition has no type or storage class
1 | UINT_sign_args, UINT_sign_steps;
| ^~~~~~~~~~~~~~
loops.i:1:1: warning: type defaults to ‘int’ in declaration of ‘UINT_sign_args’
[-Wimplicit-int]
loops.i:1:17: warning: type defaults to ‘int’ in declaration of
‘UINT_sign_steps’ [-Wimplicit-int]
1 | UINT_sign_args, UINT_sign_steps;
| ^~~~~~~~~~~~~~~
loops.i:2:1: warning: data definition has no type or storage class
2 | *UINT_sign_ip1;
| ^
loops.i:2:2: warning: type defaults to ‘int’ in declaration of ‘UINT_sign_ip1’
[-Wimplicit-int]
2 | *UINT_sign_ip1;
| ^~~~~~~~~~~~~
loops.i:3:33: warning: return type defaults to ‘int’ [-Wimplicit-int]
3 | __attribute__((optimize("O3"))) UINT_sign() {
| ^~~~~~~~~
loops.i: In function ‘UINT_sign’:
loops.i:4:15: warning: initialization of ‘char *’ from ‘int’ makes pointer from
integer without a cast [-Wint-conversion]
4 | char *op1 = UINT_sign_args;
| ^~~~~~~~~~~~~~
loops.i:8:16: warning: initialization of ‘int *’ from incompatible pointer type
‘char *’ [-Wincompatible-pointer-types]
8 | int *out = op1;
| ^~~
during GIMPLE pass: isel
loops.i:3:33: internal compiler error: in gimple_expand_vec_cond_expr, at
gimple-isel.cc:267
3 | __attribute__((optimize("O3"))) UINT_sign() {
| ^~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.gentoo.org/> for instructions.
```
Please let me know if you need further information or hardware access (but I've
reproduced this above using a cross-compiler without issues).