[patch, Fortran] PR61933 Inquire on Internal Units

Jerry DeLisle jvdelisle@charter.net
Thu Jan 22 02:32:00 GMT 2015


On 01/21/2015 03:33 PM, Tobias Burnus wrote:
> Hi Jerry et al.,
>
> Jerry DeLisle wrote:
>> I have added the following to libgfortran.h and used them (see patch)
>>
>> /* Special unit numbers used to convey certain conditions. Numbers -3
>>    thru -9 available.  NEWUNIT values start at -10.  */
>> #define GFC_INTERNAL_UNIT -1
>> #define GFC_INVALID_UNIT  -2
>>
>
> Thanks!
>
>>>
>>> The conditions could be combined with a fold_build2_loc(...,TRUTH_AND_EXPR,...).
>>>
>>
>> I have combined the conditions using TRUTH_OR_EXPR which is what we want.  I
>> also rolled the one helper function I had into the caller since I now only
>> build one block in the combined condition.
>>
>>
>> Regression tested completely again.  OK for Trunk?
>> Thanks for the review.
>
> Looks quite good to me. On possible modification would be for:
>
>> +      var = build3_v (COND_EXPR, cond3, body, build_empty_stmt
>> (input_location));
>
> You could add before that line:
>    cond3 = gfc_unlikely (cond3, PRED_FORTRAN_FAIL_IO);
> which tells the compiler that it is less likely that that branch is taken.
>

OK, I will add this.

> However, I don't quite understand:
>
> +    *iqp->exist = (u != NULL) || (iqp->common.unit >= 0
> +           && iqp->common.unit <= GFC_INTEGER_4_HUGE);
>
> The "ipq->common.unit <= GFC_INTEGER_4_HUGE" is always true, isn't it? Or do I
> miss something?

No you do not miss something.  I will fix that. (gadzooks)

It should be:

	 *iqp->exist = (u != NULL) || (iqp->common.unit >= 0)

>
> Also, I miss the test case. I assume that you still include it, don't you?

Yes test case will be included.

With those corrections OK?

Jerry



More information about the Fortran mailing list