[Bug fortran/30626] Wrong-code for internal read
jvdelisle at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Jan 30 14:36:00 GMT 2007
------- Comment #3 from jvdelisle at gcc dot gnu dot org 2007-01-30 14:36 -------
Paul's preliminary patch for pr30284 fixes this bug. The library side still
shows a potential problem, but we don't hit it with the test cases here because
we are only reading one record.
Here is dump for modified test case in #1:
MAIN__ ()
{
static char date[1][1:12] = {"200612231200"};
int4 foo;
_gfortran_set_std (70, 127, 0, 0);
{
int8 D.1365;
char A.2[1][1:12];
struct array1_unknown atmp.1;
struct __st_parameter_dt dt_parm.0;
dt_parm.0.common.filename = "pr30626-1.f90";
dt_parm.0.common.line = 4;
atmp.1.dtype = 817;
atmp.1.dim[0].stride = 1;
atmp.1.dim[0].lbound = 0;
atmp.1.dim[0].ubound = 0;
atmp.1.data = (void *) &A.2;
atmp.1.offset = 0;
{
int8 S.3;
S.3 = 0;
while (1)
{
if (S.3 > 0) goto L.1;
__builtin_memmove (&(*(char[0:][1:12] *) atmp.1.data)[S.3],
&date[NON_LVALUE_EXPR <S.3>], 12);
S.3 = S.3 + 1;
}
L.1:;
}
dt_parm.0.internal_unit = (char *) atmp.1.data;
dt_parm.0.internal_unit_len = 12;
dt_parm.0.internal_unit_desc = (char *) &atmp.1;
dt_parm.0.common.unit = 0;
dt_parm.0.format = "(i4)";
dt_parm.0.format_len = 4;
dt_parm.0.common.flags = 20480;
_gfortran_st_read (&dt_parm.0);
_gfortran_transfer_integer (&dt_parm.0, &foo, 4);
_gfortran_st_read_done (&dt_parm.0);
{
int8 S.4;
D.1365 = -1;
S.4 = 1;
while (1)
{
if (S.4 > 1) goto L.2;
__builtin_memmove (&date[S.4 + -1], &(*(char[0:][1:12] *)
atmp.1.data)[S.4 + D.1365], 12);
S.4 = S.4 + 1;
}
L.2:;
}
}
{
struct __st_parameter_dt dt_parm.5;
dt_parm.5.common.filename = "pr30626-1.f90";
dt_parm.5.common.line = 5;
dt_parm.5.common.unit = 6;
dt_parm.5.common.flags = 128;
_gfortran_st_write (&dt_parm.5);
_gfortran_transfer_integer (&dt_parm.5, &foo, 4);
_gfortran_st_write_done (&dt_parm.5);
}
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30626
More information about the Gcc-bugs
mailing list