[gfortran,committed] Fix half or PR31251: segfault in real charlen

Jerry DeLisle jvdelisle@verizon.net
Fri May 4 14:42:00 GMT 2007


Tobias Schlüter wrote:
> 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)
> 
Thanks for the commit FX.  Now back to the second half of the problem.

Jerry



More information about the Fortran mailing list