Re: [PATCH, fortran] Fix Bug 124543 - INQUIRE: Sometimes returns incorrect values

Jerry D <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
On 3/29/26 1:08 PM, Harald Anlauf wrote:
> Hi Jerry,
> 
> thanks for your efforts!
> 
> I played with the testcase, threw the NAG compiler on it, and
> found a few minor nits:
> 
> 1)
> 
> ! Make sure there is no file with the name we will be using
>    open (lun, file=lfn, status='old', iostat=iostat)
>    if (iostat /= 0) then
>      close (lun, status='delete')
>    end if
> 

Fixed.

> Here the logic seems backwards to me: you want to delete an
> existing file.  It should rather read:
> 
>    if (iostat == 0) then
> ...
> 
> 2)
> 
>    inquire (file=lfn, id=id, pending=pending, recl=recl)  ! SEGV at run-time w/ 
> gfortran
> 
> This crashes with NAG, because there is *no* pending asynchronous
> transfer.

It also crashed with gfortran before the patch.

> 
> I recommend to replace that with
> 
>    inquire (file=lfn, id=id, pending=pending, recl=recl,iostat=iostat)
> 
> and I also wonder if we should set iostat to non-zero (like NAG) and
> test it with:
> 
>    if (iostat == 0) stop 80

It did not fail for me here, regardless I set it in the init_vars subroutine.

> 
> (This fails after your patch).
> 
> Similarly later on:
> 
>    inquire (unit=lun, id=id, pending=pending, recl=recl,iostat=iostat)
>    if (iostat == 0) stop 123
> 
> 
> The other differences I saw may be issues with NAG or an interpretation
> issue.

I have noticed a lot of variation across several compilers.

Doing INQUIRE on things that do not exist or are not connected is a bit unusual.

I will commit after some final testing here.

Thanks for the review.

Jerry

PS Also found "+  if  (pending) print *, pending" ;)

> 
> So the patch is OK with the above addressed and suitably resolved.
> 
> Thanks,
> Harald
> 
> 
> On 3/29/26 04:38, Jerry D wrote:
>> Hello All,
>>
>> The attached patch fixes numerous return values or missing checks.
>>
>> There were at least two places where we segfaulted on checking a gfc_unit 
>> value when the unit did not exist.
>>
>> I have not implemented inquire (unit=lun, leading_zero=leading_zero) since 
>> this is rather new and I prefer to add it after this patch. It is one of those 
>> examples of a new feature added that does not have a lot of value AFAICT. It 
>> will require some front-end work.
>>
>> The new test case is very busy. It is not too difficult to adjust if we miss 
>> anything there.
>>
>> Regression tested on X86_64.
>>
>> OK for mainline?
>>
>> Regards,
>>
>> Jerry
>> -----
>>      fortran: Fix several issues with INQUIRE and unconnected units.
>>
>>              PR libfortran/124543
>>
>>      libgfortran/ChangeLog:
>>
>>              * io/inquire.c (inquire_via_unit): Fix return value for
>>              NAMED. Add check for ACTION. Fix return values for
>>              ENCODING, PENDING, READ, WRITE, READWRITE.
>>              (inquire_via_filename): Add checks for ACTION, DELIM,
>>              ASYNCHRONOUS, and PENDING. Fix return value for
>>              ENCODING.
>>              * io/unix.c (inquire_access): Change return value from no
>>              to unknown.
>>
>>      gcc/testsuite/ChangeLog:
>>
>>              * gfortran.dg/pr124543.f90: New test.
>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.