[gfortran,committed] Fix half or PR31251: segfault in real charlen
Tobias Schlüter
Tobias.Schlueter@physik.uni-muenchen.de
Fri May 4 11:35:00 GMT 2007
François-Xavier Coudert wrote:
> Index: simplify.c
> ===================================================================
> --- simplify.c (revision 124412)
> +++ simplify.c (working copy)
> @@ -2136,14 +2136,15 @@ gfc_simplify_len (gfc_expr *e)
> }
>
> if (e->ts.cl != NULL && e->ts.cl->length != NULL
> - && e->ts.cl->length->expr_type == EXPR_CONSTANT)
> + && e->ts.cl->length->expr_type == EXPR_CONSTANT
> + && e->ts.cl->length->ts.type == BT_INTEGER)
> {
> result = gfc_constant_result (BT_INTEGER, gfc_default_integer_kind,
> &e->where);
> mpz_set (result->value.integer, e->ts.cl->length->value.integer);
> return range_check (result, "LEN");
> }
IIUC this shouldn't ever happen. If there's an erroneous character
length specified, it shouldn't be kept in place, and then worked around
down the line. Instead the charlen pointer should be set to NULL. This
may also be the solution to the double error, if, as I suppose, one
error is emitted during parsing, and one during resolution.
Cheers,
- Tobi
(who speaks w/o having the code around to check himself)
More information about the Fortran
mailing list