Microsoft KB Archive/39514

= FIX: Optimization Problem, Assignment Not Made, Write Fails =

Article ID: 39514

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 4.01
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN Compiler 5.0

-



This article was previously published under Q39514



SYMPTOMS
An application copies an incorrect value from an array in a COMMON block. An element of an array specified as an argument to a subprogram is the destination for the copied value.



CAUSE
The application passes an array to a subprogram through an argument list and shares another array with the subprogram through a COMMON block. The compile command line includes the /Od compile option switch to disable optimizations.



RESOLUTION
To work around this problem, perform one of the following two steps:


 * Remove the /Od compiler option switch and compile the application with default optimizations (the /Ox compiler option switch accomplishes the same purpose). -or-


 * Compile the code with only the common subexpression optimization by specifying the /Odc compiler option switch.



STATUS
Microsoft has confirmed this to be a problem in FORTRAN versions 4.01, 4.1, and 5.0 for MS-DOS and versions 4.1 and 5.0 for OS/2. This problem was corrected in FORTRAN version 5.1.



MORE INFORMATION
The following code demonstrates the problem.

Sample Code
C Compiler options needed: None IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION TMP(5000, 1) COMMON /BAD/ RBAD(3, 3) RBAD(1, 1) = 1 CALL TRY1(TMP) WRITE(0, *) TMP(1, 1) END C SUBROUTINE TRY1(TMP) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION TMP(5000, 1) COMMON /BAD/ RBAD(3, 3) I = 1 K = 1 TMP(I, K) = RBAD(K, I)     RETURN END

Additional query words: 4.01 4.10 5.00 buglist4.01 buglist4.10 buglist5.00 fixlist5.10

Keywords: kbfix KB39514

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.