[Bug fortran/82968] New: gfortran.dg/ieee/ieee_6.f90 fails at -O0
ebotcazou at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 13 17:05:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82968
Bug ID: 82968
Summary: gfortran.dg/ieee/ieee_6.f90 fails at -O0
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: ebotcazou at gcc dot gnu.org
Target Milestone: ---
Host: sparc64-linux
Target: sparc64-linux
Build: sparc64-linux
The test raises SIGBUS at run time:
Starting program: /1/ebotcazou/build/ieee_6
Program received signal SIGBUS, Bus error.
__GI___fegetenv (envp=0x7fefffff14c) at ../sysdeps/sparc/fpu/fegetenv.c:25
25 ../sysdeps/sparc/fpu/fegetenv.c: No such file or directory.
(gdb) bt
#0 __GI___fegetenv (envp=0x7fefffff14c) at ../sysdeps/sparc/fpu/fegetenv.c:25
#1 0x0000000000100c68 in MAIN__ () at ieee_6.f90:23
because envp is not a multiple of 8. On this platform, fenv_t is defined as:
/* Type representing floating-point environment. */
typedef unsigned long int fenv_t;
so fegetenv expects an address multiple of 8 (the size of 'long').
The problematic Fortran type is apparently declared in ieee_exceptions.F90:
type, public :: IEEE_STATUS_TYPE
private
character(len=GFC_FPE_STATE_BUFFER_SIZE) :: hidden
end type
with the GFC_FPE_STATE_BUFFER_SIZE parameter coming from libgfortran.h:
/* Size of the buffer required to store FPU state for any target.
In particular, this has to be larger than fenv_t on all glibc targets.
Currently, the winner is x86_64 with 32 bytes. */
#define GFC_FPE_STATE_BUFFER_SIZE 32
This obviously overlooks alignment constraints.
More information about the Gcc-bugs
mailing list