[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