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.

Reply via email to