Trailing-Edge
-
PDP-10 Archives
-
bb-bt99g-bb
-
ftn10.d12
There is 1 other file named ftn10.d12 in the archive. Click here to see a list.
EDIT DESCRIPTIONS FOR FORTRAN-10-V10
EDIT 340 FOR FORDDT
[SYMPTOM]
FORDDT START, REMOVE, AND PAUSE commands can alter user ACS.
[DIAGNOSIS]
SAVACS incorrectly used as scracth area. SAVACS contains the user
ACS!
[CURE]
Edit 340.
********************************************************************************
EDIT 4217 FOR FOROTS
[SYMPTOM]
When a very large record is BACKSPACEd, a ?FRSRNR Record 1 has
not been written error message results.
[DIAGNOSIS]
In the COMBAK routine, a half word calculation is being done to
determine the desired file pointer. For large records a full word
calculation is needed.
[CURE]
Change the SUBI to a SUB in COMBAK. This is accomplished by edit
4217 to FORIO.
********************************************************************************
EDIT 4220 FOR FOROTS
SYMPTOM
When the initial terminal line is typed, all carriage control is suppressed,
whereas in V6 and V7 one line-feed was removed (if possible) from the
beginning of the output line.
DIAGNOSIS
In order to make terminal output compatible with the behavior of
CARRIAGECONTROL='FORTRAN' for disk files, dollar format was modified
to remove all vertical motion from the succeeding output line. The
case of the initial output line, which was previously handled as if
there had been a dollar format in the (non-existent) previous line,
was not considered.
CURE
Reinstall the code to use an alternate set of vertical motion
character strings if it is the initial output line, distinguished
by the fact that D%PDOL (previous dollar format) is off, but D%SEOL
(suppress end-of-line) is on. This edit, accomplished by edit 4220,
also cures a similar problem involving extra vertical motion after
error messages are typed on the terminal.
********************************************************************************
EDIT 4221 FOR FOROTS
[SYMPTOM]
The following program gets an ILL MEM REF:
WRITE(1,10) STUFF,SITEV,SNAME
10 FORMAT(A79,84X,A5,A6)
[DIAGNOSIS]
The origional size of the output record buffer (ORBUF) is 80
bytes. 79 bytes are used up by the A79 format specifier.
When processing the A5 format specifier FOROTS realizes that
ORBUF must be expanded. When expanding ORBUF we neglected
to ask for enough space to include the 84X format.
[CURE]
Ask for enough space when expanding the output record
buffer.
********************************************************************************
EDIT 2537 FOR FORTRA
[SYMPTOM]
Invalid error message /FLAG:VMS:
0000x write (1,a)
%FTNFMT Line:0000x VMS incompatibility: Keyword FMT instead of NML
(where "a" is a NAMELIST name). Note that "FMT=" is not given,
as claimed in the error message.
[DIAGNOSIS]
The routine FMTSCAN is called to process the FMT= expression. If
no FMT= or NML= is given, then it is determined by the position of the
expression (2nd, after the unit expression) to be a format, and
FMTSCAN is called as if FMT= has been given.
[CURE]
Add an argument to FMTSCAN to tell if FMT= was really given, or
defaulted to.
********************************************************************************
EDIT 2540 FOR FORTRA
[SYMPTOM]
An erroneous source program which contains a dot at the end of
the line immediately preceding the END statement will cause the
compiler to emit the 'No END statement' error message.
[DIAGNOSIS]
Macro ACMMISOPER in module LEXICA.BLI would issue a (correct)
message noting that the dot was not really the start of the expected
dotted operator. It would then skip to the next end-of-statement.
Due to the fact that at this point it is already after the end of the
erroneous statement, it would in fact skip the immediately following
statement.
[CURE]
Skip to end-of-statement only if the statement has not already
been completely parsed.
Since macro ACMMISOP1 had similar logic that would break under
similar circumstances, fix that macro also.
********************************************************************************
EDIT 2541 FOR FORTRA
[SYMPTOM]
A do loop which leaves the loop count in a register, but must
materialize the induction variable for use inside the loop, was not
updating the induction variable upon termination of the loop. For
example, the following program had the incorrect value for I after the
loop.
DIMENSION IRAY(3)
DATA IRAY/1,2,3/
IVAL = 4
DO 0100 I=1,3
IF (IVAL.LE.IRAY(I))GOTO 0300
0100 CONTINUE
0300 STOP
END
[DIAGNOSIS]
If the loop count is in a register, but the induction variable is
materialized for use inside the loop, it is not also materialized
after the loop.
[CURE]
Materialize the induction variable after the loop, besides inside
near the top of the loop.
********************************************************************************
EDIT 2543 FOR FORTRA
[SYMPTOM]
If a register, other than the AOBJN register, gets the value of
the do variable inside the loop, and then is substituted for the do
variable after the loop, the register's value will be off by one. For
example, in the code generated for the following program register 2 is
the AOBJN register and register 3 is used for the array index for
IRAY. At the end of the loop register 2 and I have the correct value
(of 4), however, register 3 (whose value is 3) is used for I in the IF
following the loop.
DIMENSION IRAY(3)
DATA IRAY/1,2,3/
IVAL = 4
DO 0100 I=1,3
IF (IVAL.LE.IRAY(I))GOTO 0300
0100 CONTINUE
IF (I.NE.4) TYPE *,'? ERROR'
0300 STOP
END
[DIAGNOSIS]
When a register is given the value of the do variable inside the
loop, the register allocator remembers this in case there are any
other uses of the do variable inside the loop which could be
substituted with this register. After the loop has been exited, the
register allocator still thinks it can substitute the register for the
do variable when it should not.
[CURE]
At the end of register allocation for a do loop any registers who
think they contain the do loop variable should be told that the do
loop variable has been updated.
********************************************************************************
EDIT 2544 FOR FORTRA
[SYMPTOM]
Neg flag in an expression is lost when the skeleton optimizer
makes two passes over the expression.
[DIAGNOSIS]
When a substract node is converted into an add node, the neg flag
is always set to one. If the neg flag is already set it needs to be
cleared.
[CURE]
When a substract node is converted into an add node, exclusive or
the neg flag.
********************************************************************************
EDIT 2545 FOR FORTRA
[SYMPTOM]
Compilation is unpredictable when giving too many digits on a
STOP or PAUSE statement. (Various possibilities for symptoms
depending on structure of program.) Could generate a bad listing with
incorrect error messages. For example,
STOP 12345671234567123456
[DIAGNOSIS]
Fortran allows 6 characters after a STOP or PAUSE statement, and
gives an error message for more than 6 characters. It keeps storing
every character past 6 characters, however, writing over memory that
is not allocated to the constant for these digits.
[CURE]
Install a check, only save the digit if the number read is .LE.
6. Otherwise ignore the character.
********************************************************************************
EDIT 2546 FOR FORTRA
[SYMPTOM]
Illegal instruction encountered during execution of a program
with a while statement.
[DIAGNOSIS]
When the while statement is being parsed, the address of the
conditional expression is pushed onto STK and routine IFNOTGEN is
called. IFNOTGEN expects to see a bytepointer on the STK.
[CURE]
Make the item on top of the STK a bytepointer to the conditional
expression.
********************************************************************************
END OF FORTRAN-10-V10