FIX: Optimization Problem, Assignment Not Made, Write Fails

ID: Q39514


The information in this article applies to:
  • Microsoft FORTRAN for MS-DOS, versions 4.01, 4.1, 5.0
  • Microsoft FORTRAN for OS/2, versions 4.1, 5.0


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 :
Version : :4.01,4.1,5.0
Platform :
Issue type :


Last Reviewed: November 5, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.