[Bug fortran/84506] INQUIRE(pos=) always sets pos=0 with -fdefault-integer-8
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Feb 21 23:26:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84506
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P4
Status|WAITING |NEW
CC| |kargl at gcc dot gnu.org
--- Comment #2 from kargl at gcc dot gnu.org ---
(In reply to Dominique d'Humieres from comment #1)
> Use
>
> integer(4) :: iUnit, iPos
>
> -fdefault-integer-8 converts iUnit and iPos to integer(8) while open and
> inquire expect default integer, i.e., 4.
>
> IMO this PR should be closed as INVALID.
There isn't a problem with OPEN. The dump
(removing clutter) looks like
testinquire ()
{
integer(kind=8) ipos;
integer(kind=8) iunit;
{
struct __st_parameter_open open_parm.0;
integer(kind=4) newunit.1;
open_parm.0.newunit = &newunit.1;
_gfortran_st_open (&open_parm.0);
iunit = (integer(kind=8)) newunit.1;
}
Here open uses a INTEGER(4) internally and assigns
to the promoted INTEGER(8).
The INQUIRE is however broken for POS, which looks like
{
struct __st_parameter_inquire inquire_parm.3;
integer(kind=8) D.3764;
inquire_parm.3.strm_pos_out = &ipos;
inquire_parm.3.common.unit = (integer(kind=4)) iunit;
_gfortran_st_inquire (&inquire_parm.3);
}
}
inquire_parm.3.strm_pos_out is likely an INTEGER(4) and
gfortran is passing a pointer to an INTEGER(8) ipos.
At one point in time, there was a warning that
-fdefault-integer-8 changes the ABI and possibly
causes problems with libgfortran. I cannot find
the warning now. Documentation states
'-fdefault-integer-8'
Set the default integer and logical types to an
8 byte wide type.
which means gfortran should compile and execute
this code. In fact, gfortran appears broken.
From F03, 9.9.1, R930 has
inquire-spec is [ UNIT = ] file-unit-number
or POS = scalar-int-variable
Note that does not state scalar-default-int-variable.
Changing the original code to use INTEGER(8) instead of
using the -fdefault-integer-8 shows the same program.
More information about the Gcc-bugs
mailing list