This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/33998] ICE in make_decl_rtl, at varasm.c:1263
- From: "pault at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 Nov 2007 11:50:00 -0000
- Subject: [Bug fortran/33998] ICE in make_decl_rtl, at varasm.c:1263
- References: <bug-33998-13404@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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