FIX: Substring Concatenation in Test Generates Incorrect Code (39849)
The information in this article applies to:
- Microsoft FORTRAN Compiler for MS-DOS 4.1
- Microsoft FORTRAN Compiler for MS-DOS 5.0
- Microsoft FORTRAN Compiler for MS-DOS 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:
The actual output is as follows:
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.
Modification Type: | Major | Last Reviewed: | 9/30/2003 |
---|
Keywords: | kbfix KB39849 |
---|
|