Microsoft KB Archive/84330

= FIX: /Zi and INTERFACE and CHARACTER*(*) Halts Compiler =

Article ID: 84330

Article Last Modified on 10/23/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 5.0
 * Microsoft FORTRAN Compiler 5.1
 * Microsoft FORTRAN Compiler 5.1

-



This article was previously published under Q84330



SYMPTOMS
Using the Microsoft FORTRAN compiler version 5.0 or 5.1 with the /Zi option to compile code that has an INTERFACE statement and the character declaration CHARACTER*(*) may cause the machine to hang under MS-DOS when compiling. Compiling the same program with /Zi under OS/2 may cause a Trap D protection violation to be generated.



CAUSE
This problem occurs when the CHARACTER*(*) declaration is used within the INTERFACE statement, which is very similar to other reported problems compiling code containing INTERFACE statements with the /Zi option. For more information, please see the following article in the Microsoft Knowledge Base:

77258 Compiler Hang with /Zi or /Od, INTERFACE Statement



RESOLUTION
Change the specification CHARACTER*(*) to CHARACTER*1 in INTERFACE statements. The size of the character string in the INTERFACE statement is not used by the compiler so any dummy value can be used.



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



Sample Code 1
c The following sample code halts the compiler when compiled with /Zi.

interface to subroutine s(c) character*(*) c     end

subroutine s(c) character*(*) c     integer a1(2), a2(2), a3(2), a4(2) parameter (i1=1, i=-1) end

Sample Code 2
c No error is generated when compiling the following code with /Zi:

c FORTRAN character strings are passed by reference, similar to all c other FORTRAN data. The size of character string c in the INTERFACE c statement is not used by the compiler, so any fixed value solves c the problem.

interface to subroutine s(c) character*1 c    ! Arbitrary size of string assigned here. end

subroutine s(c) character*(*) c     integer a1(2), a2(2), a3(2), a4(2) parameter (i1=1, i=-1) end

Additional query words: 5.00 5.10 hang

Keywords: kbfix KB84330

-

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

© Microsoft Corporation. All rights reserved.