This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/33998] ICE in make_decl_rtl, at varasm.c:1263



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]