FIX: Incorrect Result Initializing INTEGER*1 Array (72920)



The information in this article applies to:

  • Microsoft FORTRAN Compiler for MS-DOS 4.0
  • Microsoft FORTRAN Compiler for MS-DOS 4.01
  • Microsoft FORTRAN Compiler for MS-DOS 4.1
  • Microsoft FORTRAN Compiler for MS-DOS 5.0
  • Microsoft FORTRAN Compiler for MS-DOS 5.1
  • Microsoft FORTRAN compiler for OS/2 4.1
  • Microsoft FORTRAN compiler for OS/2 5.0
  • Microsoft FORTRAN compiler for OS/2 5.1

This article was previously published under Q72920

SYMPTOMS

Programs compiled with Microsoft FORTRAN versions 4.0, 4.01, 4.1, 5.0, and 5.1 that initialize an integer*1 array with negative values (that is, -128 to -1), can give incorrect results when run under MS-DOS or OS/2.

RESOLUTION

Adding an executable statement that uses an element of the array within the DO-LOOP, or disabling loop optimization with /Od, /Odct, or /4Yb when compiling, can prevent the problem from occurring.

STATUS

Microsoft has confirmed this to be a problem in FORTRAN versions 4.0, 4.01, 4.1, 5.0, and 5.1. This problem was corrected in FORTRAN PowerStation.

MORE INFORMATION

The following program examples illustrate the problem:

  1. Initializing array using a DO-LOOP.
          integer*1 arr(2)
          do 10 i=1,2
            arr(i) = -1
    10    continue
          write(*,*) arr(1)
          write(*,*) arr(2)
          end
    						
  2. Initializing array using a single assignment statement (Microsoft FORTRAN versions 5.0 and 5.1 only).
          integer*1 arr(2)
          arr = -1
          write(*,*) arr(1)
          write(*,*) arr(2)
          end
    						
The programs above produce the following output:

-1
-2

The following output should be produced:

-1
-1

To prevent the problem from occurring, add an executable statement that uses an element of the array within the DO-LOOP, or disable loop optimization with /Od, /Odct, or /4Yb when compiling.

Modification Type:MajorLast Reviewed:12/1/2003
Keywords:kbfix KB72920