https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82815
Bug ID: 82815
Summary: RTL frontend errors out on const_double
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: thopre01 at gcc dot gnu.org
CC: dmalcolm at gcc dot gnu.org
Target Milestone: ---
Created attachment 42537
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42537&action=edit
Testcase showing bug in read_rtx_operand
read_rtx_operand in read-rtl.c assumes that a format starting with w is an
integer but this can also be a const_double (see real.h). It then tries to
validate the integer constant which fails and errors out with:
error: invalid decimal constant "1.0e+0"
The attached testcase shows the bug when compiled with:
arm-none-eabi-gcc -S foo.c -march=armv7e-m -mfloat-abi=hard -mfpu=fpv5-d16
testcase_read-rtl.c
The RTL is generated from:
double foo (void)
{
return 1.0;
}
and dumped from arm_reorg. Similar procedure on other targets should lead to
the error as well.