[Bug fortran/97799] New: Passing CHARACTER*(*) var(*) through ENTRY causes segfaults
hockney at jpl dot nasa.gov
gcc-bugzilla@gcc.gnu.org
Wed Nov 11 16:33:54 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97799
Bug ID: 97799
Summary: Passing CHARACTER*(*) var(*) through ENTRY causes
segfaults
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: hockney at jpl dot nasa.gov
Target Milestone: ---
Created attachment 49548
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49548&action=edit
bugtest.f -- program evincing bug
When a character(*)* var(*) is passed to a subroutine
through an entry point in another subroutine, gfortran 10.2.0
generates an exectuable which segfaults in a probablistic way. This
is probably related to a warning about an internally
generated variable being used uninitialized. The warning and error
do not occur in gfortran 9.2.0
The attached file bugtest.f evinces this behavior. The
attached file details.txt shows the exact compilition
flags to reproduce the failure, and also the resulting
backtrace.
The exact combination of compilation flags matters. All of
them produce the warning about carray.0 but some of them
both work and pass our valgrind test:
gfortran -Wall -g -S bugtest.f; gfortran bugtest.s -o bugtest # fail
gfortran -g bugtest.f -o bugtest # fail
gfortran -O1 bugtest.f -o bugtest # fail
gfortran -O2 bugtest.f -o bugtest # ok
gfortran -O3 bugtest.f -o bugtest # ok
gfortran -O2 -fPIC bugtest.f -o bugtest # fail
gfortran -O3 -fPIC bugtest.f -o bugtest # fail
The valgrind error trace for the errors is:
==32181== Conditional jump or move depends on uninitialised value(s)
==32181== at 0x401438: master.0.top_entry_ (bugtest.f:53)
==32181== by 0x40141B: char_entry_ (bugtest.f:49)
==32181== by 0x40148F: MAIN__ (bugtest.f:6)
==32181== by 0x401698: main (bugtest.f:12)
gfortran 9.2.0 does not evince this bug.
More information about the Gcc-bugs
mailing list