[Bug fortran/33998] ICE in make_decl_rtl, at varasm.c:1263
pault at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Nov 6 11:50:00 GMT 2007
------- Comment #2 from pault at gcc dot gnu dot org 2007-11-06 11:49 -------
In the code for the testcase:
len_test ()
{
real4 x[7];
static int4 options.40[7] = {68, 127, 0, 0, 0, 1, 0};
......snip......
parm.48.dim[0].lbound = D.727;
parm.48.dim[0].ubound = ubound.45;
parm.48.dim[0].stride = 1;
parm.48.data = (void *) (char[0:][1:1] *) &(*sv2)[D.727 - lbound.44];
parm.48.offset = (lbound.44 - D.727) + D.730;
......snip.....
_gfortran_st_write_done (&dt_parm.41);
}
}
Thus, there are two remarks to make:
(1) First 'sv2' is being referenced in the main programme, so the interface
functions in trans-expr.c are failing; and
(2) A temporary descriptor is being written, which is unnecessary.
This is very much related to PR33888 in my opinion. In that PR, the problem
arises because trans-array.c(gfc_conv_expr_descriptor) fails to substitute the
dummy expressions, with the interface routines, before creating the temporary.
The character length calculation at trans-array.c:4685 is simply not up to the
job.
I do not see any alternative but to rewrite the interface routines and put them
in resolve.c.
Cheers
Paul
--
pault at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
BugsThisDependsOn| |33888
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33998
More information about the Gcc-bugs
mailing list