Google
 

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