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. >> >