FIX: "Integer divide by 0" Error Handling

This article was previously published under Q118337
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
In code, there are two significant problems with dividing by 0:

  • "Integer divide by 0" is not generated as a run-time error. Instead, one of two error messages is produced:

    • Under MS-DOS, the DOSXMSF error message is produced:
      DX1020 unhandled exception: divide by zero exception
    • Under Windows NT, the Dr. Watson error message is produced:
      exception: divide by zero
  • With optimization on, the compiler replaces any constant expression that contains an "Integer divide by 0" with 0, which is incorrect, and produces the following error message:
    warning F4723: potential divide by 0
    (With optimization on, but warnings off, the compiler fails to generate an error or warning, either during compilation or run time.)
Microsoft has confirmed this to be a bug in the Microsoft products listedat the beginning of this article. This problem was corrected in MicrosoftFORTRAN PowerStation 32, version 4.0.
To generate the "Integer divide by 0" exceptions, compile and run the"Sample Code 1," below. With optimization off, the exception occurs on thefirst print statement. With optimization on, it occurs on the second printstatement.

NOTE: FORTRAN PowerStation for MS-DOS, version 1.0, correctly generateserror F6003 in this case.

To produce the invalid code generation and warning F4723, compile and runeither sample with optimization on (option /Ox). To demonstrate invalidcode generation with no warnings or errors, compile and run "SampleCode 2," below, with optimization on and warnings off (/Ox /W0). Withoptimization off (default option), "Sample Code 2" will correctly generatethe run-time error for "Integer divide by 0": M6103.

NOTE: /4Yb ($DEBUG) does not produce any additional error messages.

Sample Code 1

c compile options needed: See text above.      integer i,j      character*4 c /"0"/       i=0      j=1      print *, ' 1/0 =',j/i      read(c,'(I1)') i      print *, ' 1/0 =',j/i      end				

Sample Code 2

c compile options needed: See text above.      real a,b      a=0      b=1      print *, ' 1.0/0.0 =',b/a      end				
1.00 1.00a

Article ID: 118337 - Last Review: 10/24/2003 15:12:14 - Revision: 2.0

Microsoft FORTRAN PowerStation 1.0 Standard Edition, Microsoft Fortran PowerStation 1.0a for MS-DOS, Microsoft FORTRAN PowerStation 32

  • kbbug kbcompiler kberrmsg kbfix KB118337