[Bug fortran/84615] [8 Regression] Executable Segfault for some tests compiled with -m32 after r256284
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Mar 19 17:47:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84615
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
--- Comment #15 from kargl at gcc dot gnu.org ---
(In reply to Janne Blomqvist from comment #12)
> So to be clear, the problem seems to be that while the code generation for
> the function itself appears Ok, it generates the interface wrong (i.e. uses
> the declared charlen kind instead of C_SIZE_T), and thus calling it doesn't
> work properly.
>
> I still have no idea where in the frontend code the error is.
I haven't looked, but suspect that you can force a
conversion to the correct charlen in
trans-intrinsic.c:gfc_conv_intrinsic_function_args
Well, for intrinsics, the above function has
if (e->ts.type == BT_CHARACTER)
{
gfc_conv_expr (&argse, e);
gfc_conv_string_parameter (&argse);
argarray[curr_arg++] = argse.string_length;
gcc_assert (curr_arg < nargs);
}
From trans-expr.c, one has
/* Makes sure se is suitable for passing as a function string parameter. */
/* TODO: Need to check all callers of this function. It may be abused. */
void
gfc_conv_string_parameter (gfc_se * se)
I suspect you can do a fold_convert here or a conversion
before the gfc_conv_expr.
More information about the Gcc-bugs
mailing list