https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71436
Bug ID: 71436
Summary: [7 Regression] Segmentation fault in
arm_output_multireg_pop
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: ktkachov at gcc dot gnu.org
Target Milestone: ---
Target: arm
The testcase:
#pragma pack(1)
struct S0
{
volatile int f0;
short f2;
};
void foo (struct S0 *);
int a, d;
static struct S0 b[5];
static struct S0 c;
void fn1 ();
void
main ()
{
{
struct S0 e;
for (; d; fn1 ())
{
{
a = 3;
for (; a >= 0; a -= 1)
{
{
e = c;
}
b[a] = e;
}
}
}
}
foo (b);
}
ICEs on arm with -O3 -marm -march=armv7-a -mfloat-abi=hard -mfpu=neon
arm-crash.c: In function 'main':
arm-crash.c:33:1: internal compiler error: Segmentation fault
}
^
0xb152fe crash_signal
$SRC/gcc/toplev.c:333
0xe3e921 arm_output_multireg_pop(rtx_def**, bool, rtx_def*, bool, bool)
$SRC/gcc/config/arm/arm.c:17809
0x101fe24 output_390
$SRC/gcc/config/arm/arm.md:11344
0x8284a5 get_insn_template(int, rtx_def*)
$SRC/gcc/final.c:2077
0x82b3eb final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*)
$SRC/gcc/final.c:2948
0x82bbba final(rtx_insn*, _IO_FILE*, int)
$SRC/gcc/final.c:2045
0x82c053 rest_of_handle_final
$SRC/gcc/final.c:4441
0x82c053 execute
$SRC/gcc/final.c:4516
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
The rtx that's causing the segfault is:
(parallel [
(set (reg:SI 0 r0)
(mem/u/c:SI (reg/f:SI 5 r5 [147]) [2 c+0 S4 A32]))
(set (mem/c:SI (plus:SI (reg/f:SI 102 sfp)
(const_int -4 [0xfffffffffffffffc])) [4 %sfp+-12 S4 A32])
(mem/u/c:SI (plus:SI (reg/f:SI 5 r5 [147])
(const_int 4 [0x4])) [2 c+4 S4 A32]))
])
where the code is trying to extract:
REGNO (XEXP (XVECEXP (operands[0], 0, i), 0))
That second set mem-mem looks dodgy.
Bisection shows it started with r235765 but I'm not sure it's the root cause