FIX: ENTRY Statement Not Recognizing VALUE AttributeLast reviewed: September 16, 1997Article ID: Q85303 |
4.00 4.01 4.1 5.00 | 4.10 5.00
MS-DOS | OS/2kbprg kbbuglist kbfixlist kbcode The information in this article applies to:
SYMPTOMSA program compiled with Microsoft FORTRAN version 4.0, 4.01, 4.1, or 5.0 may generate incorrect results when it includes a subprogram containing an ENTRY statement. For the problem to occur, one of the arguments of the ENTRY statement must be passed by value. This argument must be a different name than the formal argument declared by the subprogram containing the ENTRY statement.
CAUSEVALUE attributes are incorrectly ignored in INTERFACE statements for subprograms that have an ENTRY statement if the arguments are not identical. Arguments to ENTRY statements are passed in by the default method, by reference, and the subprogram then generates incorrect results.
RESOLUTIONUse a formal parameter for the ENTRY point that exactly matches the name of the formal parameter of the parent function. In this case the following warning may be generated:
warning F4201: ENTRY : formal argument :attribute VALUE : mismatchThis warning message can be ignored.
STATUSMicrosoft has confirmed this to be a problem in Microsoft FORTRAN versions 4.0, 4.01, 4.1, and 5.0. This problem was corrected in Microsoft FORTRAN version 5.1.
MORE INFORMATION
Sample Code 1The following code reproduces the problem:
interface to subroutine t1(v1[value]) integer*2 v1 end interface to subroutine et1(v1[value]) integer*2 v1 end print *, 'Passing a 1 to t1()' call t1(1) print * print *, 'Passing a 10 to et1()' call et1(10) end subroutine t1(v1) integer*2 v1, ev1 print *, 'Value received by t1 =',v1 return ENTRY et1(ev1) print *, 'Value received by et1 =',ev1 return end Sample Code 2The following code corrects the problem:
interface to subroutine t1(v1[value]) integer*2 v1 end interface to subroutine et1(v1[value]) integer*2 v1 end print *, 'Passing a 1 to t1()' call t1(1) print * print *, 'Passing a 10 to et1()' call et1(10) end subroutine t1(v1) integer*2 v1 print *, 'Value received by t1 =',v1 return ENTRY et1(v1) print *, 'Value received by et1 =',v1 return end |
Additional reference words: 4.00 4.10 5.00 5.10 buglist4.00 buglist4.10
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |