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