Microsoft KB Archive/39849

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


FIX: Substring Concatenation in Test Generates Incorrect Code

Article ID: 39849

Article Last Modified on 9/30/2003



APPLIES TO

  • Microsoft FORTRAN Compiler 4.1
  • Microsoft FORTRAN Compiler 5.0
  • Microsoft FORTRAN Compiler 5.1



This article was previously published under Q39849

SYMPTOMS

The following FORTRAN program produces incorrect results and causes the machine to hang:

        CHARACTER STRNG1*9, STRNG2*9
        INTEGER N
        LOGICAL SAME
        N=4
        STRNG1 = '123456789'
        STRNG2 = 'ABCDEFGHI'
        SAME = 'ZZ'//STRNG1(1:N) .EQ. STRNG2(1:N+2)
        WRITE(*,*) 'ZZ'//STRNG1(1:N)
        WRITE(*,*) STRNG2(1:N+2)
        WRITE(*,*) SAME
        END
                

The correct output should be as follows:

ZZ1234
ABCDEF
F


The actual output is as follows:

ZZ1234
ABCDEF
T


CAUSE

The code causes the machine to hang. Compiling without optimization had no effect. The problem is that bad code is generated for the substrings on the logical test line. Here the two substrings must be evaluated and incorrect code is being generated. If "N" in the concatenated substring is replaced with the numerical equivalent "4" or if the concatenation is executed previously and a temporary variable is used for the logical test, correct code is generated and everything executes correctly.

It has been reported that this code does not hang the system right away. You can execute internal MS-DOS commands, but as soon as you try any external commands, the system hangs.

STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. This problem was corrected in FORTRAN PowerStation.


Additional query words: 4.10 5.00 5.10

Keywords: kbfix KB39849