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.



Reply via email to