maine@elxsi.dfrf.nasa.gov (Richard Maine) (08/29/90)
I've run into some annoying "features" of the error handling in the
Fortran runtimes in AIX 3.1 for the IBM RS 6000 series. Has anybody
else run into these?
For a sample of the worst, try the following trivial program.
Pardon the style; I wanted to keep the sample short.
program testerr
character c*7
c = '1y3.4e5'
read (c,'(f7.1)',iostat=ierr,err=100) x
if (iostat.ne.0) write (*,*) 'iostat = ',iostat
write (*,*) 'x = ',x
stop
100 write (*,*) 'Took err branch. iostat = ',iostat
end
The above program gives a value of 1. for x. There are no error
indications of any kind. Nice, huh?
My reading of IBM's Fortran manual is that much of this behavior is
intentional; the runtimes are "supposed" to "fix up" errors for you
instead of reporting them with err= or iostat=, which are reserved for
"data transfer errors" instead of data content errors. Perhaps it is
accidental that some cases don't print warning messages about the
fixup, but it appears intentional that neither err= or iostat= is used
to report the error. Does anybody really think of these as "features"
instead of serious bugs, or do people like getting wrong answers?
I've not run into this behavior on any other Fortran 77 compiler/runtime,
including those for IBM PCs, various Unix systems, Vaxen, and others.
The following is a slightly edited excerpt from the document file of
the IBM RS6000 port of one of my programs. It gives a little more
information, plus a possibly controversial recommendation. I must
agree that this system seems like a screamer for speed; wish I could
trust the results.
Constructive comments welcome. Nags to IBM to get them to fix it
even more welcome.
-----------------------------
BUGS
The error handling in the ibm runtimes is horrid. Specifically:
Hitting an end of file causes an error message to be splatted all
over the screen even if the program handles the condition with an
iostat= specifier. (An end= specifier seems to work as expected).
Likewise, errors in opening a file cause error messages that cannot
be disabled. The program works correctly, except for the ugly
error messages.
A substantially worse problem is that programs will not take err=
branches or set iostat variables on data errors such as illegal
characters in numeric format fields. The system has its own idea of
corrective action, which you can't override. It appears that for I
format reads, the system splats error messages all over the screen,
but does not inform the program of the problem. For floatting point
formatted reads, the system just garbages up the data, with no
indication of any problem.
Until the last problem above is fixed, I would be very reluctant
to trust computations on this system. There is too much chance
of simple typographical errors causing undiagnosed garbage results.
-----------------------------
--
Richard Maine
maine@elxsi.dfrf.nasa.gov [130.134.64.6]RAH@IBM.COM ("Russell A. Heise") (10/10/90)
maine@elxsi.dfrf.nasa.gov (Richard Maine) writes: > I've run into some annoying "features" of the error handling in the > Fortran runtimes in AIX 3.1 for the IBM RS 6000 series. Has anybody > else run into these? > > ... sample program ... > > My reading of IBM's Fortran manual is that much of this behavior is > intentional; the runtimes are "supposed" to "fix up" errors for you > instead of reporting them with err= or iostat=, which are reserved for > "data transfer errors" instead of data content errors. Perhaps it is > accidental that some cases don't print warning messages about the > fixup, but it appears intentional that neither err= or iostat= is used > to report the error. Does anybody really think of these as "features" > instead of serious bugs, or do people like getting wrong answers? No, this behavior is not good. Development is working on fixing it and the changes will be included in a future update. Contact your local IBM rep and have him/her report this as a problem. That will insure that you get the changes. > > ... > > Hitting an end of file causes an error message to be splatted all > over the screen even if the program handles the condition with an > iostat= specifier. (An end= specifier seems to work as expected). > Likewise, errors in opening a file cause error messages that cannot > be disabled. The program works correctly, except for the ugly > error messages. Actually, you can control these messages. Try the following command line: xrf_messages=no; export xrf_messages > > ... > > Until the last problem above is fixed, I would be very reluctant > to trust computations on this system. There is too much chance > of simple typographical errors causing undiagnosed garbage results. Russ Heise, AIX Technical Support, IBM