ECO NUMBER: FORTAVE01073 ----------- PRODUCT: Compaq Fortran for OpenVMS Alpha Systems -------- UPDATED PRODUCT: Compaq Fortran for OpenVMS Alpha Systems 7.3 ---------------- APPRX BLCK SIZE: 16170 ---------------- Compaq Cover Letter for Compaq Fortran V7.3 for OpenVMS Alpha ECO 01 ECO Kit FORTAVE01073 Description ---------------------------------- This kit contains an update of Compaq Fortran V7.3 (including Fortran 95/90 and Fortran 77 compilers) to correct problems discovered in the compilers and run-time library since the V7.3 release. You must have Compaq Fortran V7.3 installed before installing this update. o The following changes were made to the Fortran 95/90 compiler: o Some important information to note about this release: o An end-of-file condition on READ no longer triggers an ERR= branch - this is to conform with clearer wording in the recent standard. If an EOF condition occurs and there is no END= or IOSTAT=, an error is signalled. o The Compaq Extended Math Library (CXML) routines are not updated in this ECO 01 Compaq Fortran kit. o The new INT_PTR_KIND() intrinsic returns the kind of an integer pointer (ie, 8 for Tru64 UNIX/Alpha). o An optional KIND argument is now allowed on the intrinsics LEN, SHAPE, SIZE, UBOUND, LBOUND, MAXLOC, MINLOC, INDEX, LEN_TRIM, SCAN, and VERIFY. This allows these intrinsics to return a result that is other than default integer kind. o The following corrections have been made: o Eliminate internal compiler error for case involving EQUIVALENCEd POINTER variables not in COMMON. o Fix problem which could cause incorrect code to be generated for certain uses of PACK, RESHAPE and UNPACK, primarily with CHARACTER arguments. o Speed up compilation of initialized nested structures. o Fix problem with incorrect code generated for use of nested SPREAD intrinsic. o Correct problem where DO loop with loop ending value of the largest integer value would instead create an infinite loop. o Eliminate internal compiler errors for use of defined assignment in FORALL. o Speed up compilation where very large MODULEs are repeatedly used. Further work in this area remains. o Correct problem with PACK intrinsic where array is array of structures with an array field with constant subscript/substring values. o Improve generated code for SPREAD intrinsic. o Improve generated code for array reductions. o Improve generated code for UBOUND, LBOUND, SELECTED_ INT_KIND, SELECTED_REAL_KIND when the argument(s) are constants. o Improve generated code for SIZEOF when bounds are constants. o When generating temporary copies of arrays, don't allocate them in 64-bit space unless we know that 64-bit addresses are acceptable. o Eliminate internal compiler error for certain cases of integer (not F90) POINTER as a module variable. o Reduce severity of "variable has not been used" diagnostic to "informational". o Improve generated code for MINVAL/MAXVAL. o Improve generated code for SIZE(A(:)). o Improve generated code for SIZE with array argument that has vector subscripts. o Add new INT_PTR_KIND() intrinsic which returns the kind of an integer pointer (either 4 or 8). o Eliminate internal compiler error for use of allocatable array reference in a variable format expression. o Improve generated code for ILEN. o An end-of-file condition on READ no longer triggers an ERR= branch - this is to conform with clearer wording in the recent standard. If an EOF condition occurs and there is no END= or IOSTAT=, an error is signalled. o Add a NUL to the end of non-C character literals. This will not be reflected in the "length" of the constant. o %VAL/%REF now overrides any mechanism specified in an explicit interface. o Improve compile time performance when USEing a module which contains a large COMMON block with many (thousands) of EQUIVALENCEd variables. o Allow general CHARACTER expressions for the MOLD argument of the TRANSFER intrinsic. o Correct problem that prevented scalar numeric variables and array elements which appeared in the iolist of an output statement (WRITE, etc.) from participating in uninitialized variable analysis. o Add support for /CCDEFAULT switch. o In OPEN statement, if STATUS is not specified, default to UNKNOWN unless /NOF77 is specified, in which case default to NEW. o Eliminate internal compiler error for case involving EQUIVALENCEd POINTER variables not in COMMON. o Missing !DEC$ ENDIF no longer causes compiler abort. o Correct rules for when SAVE in a PURE procedure is allowed or not. o Correct parse of assignment to field of RECORD whose name begins with TYPE. o Eliminate E-level error when a BLOCK DATA subprogram name is the same as that of a COMMON block. A future revision will cause an appropriate diagnostic to appear. o Issue clearer error message when a module name is repeated in a USE statement. o Eliminate problem where UBOUND gave wrong value in certain cases. o Allow substrings in left hand side of FORALL. o Give proper error when a PARAMETER constant is CALLed. o Give proper error when a variable is CALLed. o In assignment statements, make sure that real constants are evaluated using the precision appropriate for their syntax (single/double/quad). o Fix problem which could cause incorrect code to be generated for certain uses of PACK, RESHAPE and UNPACK, primarily with CHARACTER arguments. o Correct f77 driver problems, such as invalid syntax passed to cpp when a .F file was compiled. o Speed up compilation of initialized nested structures. o Fix problem with incorrect code generated for use of nested SPREAD intrinsic. o Eliminate internal compiler errors for use of defined assignment in FORALL. o Speed up compilation where very large MODULEs are repeatedly used. Further work in this area remains. o Correct problem with PACK intrinsic where array is array of structures with an array field with constant subscript/substring values. o Improve generated code for SPREAD intrinsic. o Improve generated code for array reductions. o Improve generated code for UBOUND, LBOUND, SELECTED_ INT_KIND, SELECTED_REAL_KIND when the argument(s) are constants. o Improve generated code for SIZEOF when bounds are constants. o Eliminate internal compiler error for certain cases of integer (not F90) POINTER as a module variable. o Reduce severity of "variable has not been used" diagnostic to "informational". o Improve generated code for MINVAL/MAXVAL. o Improve generated code for SIZE(A(:)). o Improve generated code for SIZE with array argument that has vector subscripts. o Add new INT_PTR_KIND() intrinsic which returns the kind of an integer pointer (either 4 or 8). o Eliminate internal compiler error for use of allocatable array reference in a variable format expression. o Improve generated code for ILEN. o An end-of-file condition on READ no longer triggers an ERR= branch - this is to conform with clearer wording in the recent standard. If an EOF condition occurs and there is no END= or IOSTAT=, an error is signalled. o Add a NUL to the end of non-C character literals. This will not be reflected in the "length" of the constant. This matches the Compaq Fortran 77 behavior, which was undocumented. o %VAL/%REF now overrides any mechanism specified in an explicit interface. o Generate much better code for certain array constructors (such as (/0,I=1,500000/) and allow lowerbound, upperbound and stride to have different KINDs. o If /warn=declarations is specified, do not issue diagnostic for use of IMPLICIT NONE. o Eliminate internal compiler error for EOSHIFT with constant array argument. o Eliminate internal compiler error for program fragment that is "ifdef-ed out". o Report error for kind mismatch where an ac-value in an array constructor is an expression of a different kind than the other literal ac-values. o Report error for assumed-size array passed as actual to deferred-shape array. o Eliminate compiletime error for use of AIMAG in initialization expression when /real_size=128 is specified. o Eliminate internal compiler error for format in a PRINT statement being an expression with concatenation. o DFOR$PREFETCH, DFOR$PREFETCH_MODIFY, DFOR$PREFETCH_ EVICT_NEXT intrinsics now supported for Alpha processors. o Generate correct values for a PARAMETER array whose element values are computed in an implied DO loop involving indexing into another PARAMETER array. o Correct bad parse of .NE. as record field name. o Allow a dummy argument that has an INTENT attribute specified to be specified in a NAMELIST list. o Give standards warning for kind mismatch between source and pad arguments in RESHAPE. o Long source lines are now correctly compiled when standards checking is requested (warning is still given.) o Correct problem with incorrect error given for a particular complex module renaming case. o Allow as an extension (as does Compaq Fortran 77) a LOGICAL argument to an intrinsic which expects INTEGER. o Correctly parse format which contains ">" characters and a variable format expression. o Eliminate internal compiler error for a particularly complex and deeply nested structure reference in an IF. o Don't give error for passing section of an assumed size array to a deferred shape array. o Improve compilation speed for certain large DATA statements. o Eliminate internal compiler error for a certain complicated FORALL. o Correct problem with PUBLIC/PRIVATE attributes of a COMMON block in a MODULE. o Allow (A .EQ. .NOT. B) (an extension). o Correct problem with some COMPLEX*32 initialization expressions. o Eliminate spurious unused variable diagnostic for variable used in pointer assignment. o Correct problem where asking for standards checking disabled /define o Fix a case where two NaNs sometimes compared as equal. o Eliminate many unnecessary copies of assumed-shape arrays when passed as arguments to explicit shape arrays by keeping track of whether or not the array is known to be contiguous. o Automatically force the alignment of a COMMON block to be at least as large as that required by the widest variable in the COMMON block. o Fix a number of problems with WHERE inside of FORALL. o Make defined assignment in FORALL work properly. o Generate correct code for CSHIFT of a non-contiguous array slice. o Allow user-defined types to be named BYTE and DOUBLECOMPLEX. o Improve generated code for mixed COMPLEX-REAL multiplication and division. o In array constructors with only one implied-DO, and nothing else, avoid creating an unnecessary temp. o Allow SIZEOF(allocatable-array) o Improve generated code for SIZEOF(array) o Allow directory names specified with -module to be longer than 23 characters. o Prevent incorrect collapsing of implied-DO loop in an I/O statement where there are nested loops and the implied-DO variable of one loop is used as a bound of an inner loop. o When the error limit has been exceeded (default 30), simply suppress further messages rather than exiting the compiler. This means that the object file will get deleted appropriately, the listing file created, and subsequent source files on the command line will be processed. o Re-allow complex constants to be passed by value. The real and imaginary parts are passed as separate arguments. o Allow character array valued function as a format specifier. o Allow debugging of a character function whose length is computed based on the length of a passed-length character argument. o Solve a set of problems where the length of a character function is computed using a dummy array argument. o The use of an INTENT(OUT) argument with LOC is now considered a "definition" for the purpose of uninitialized variable checking. Also, the use of LOC(ARRAY(N)) is now considered a "use" of ARRAY for unused variable checking. o Eliminate internal compiler error for structure with %FILL component in module procedure. o When standards checking is requested, do not give a warning for fixed-form source line exactly 72 columns long. o Eliminate internal compiler error for assignment statement with variable whose name starts with an underscore. (Such names are not allowed, but a reasonable error should have been given.) o Correct the problem where if a program unit contains two internal subroutines which both use host-association to access the same variable, the second one gets an inappropriate error. o Eliminate internal compiler error for declaration of a derived type array with an initializer that is an implied-DO array constructor. o Eliminate inappropriate error message for initialization expression of an implied-DO array constructor of length zero. o When standards checking is enabled, give one warning, not three, for a !DEC$ ATTRIBUTES directive. o Generate correct code for certain cases involving overloading of the .AND. and .OR. operators. o Allow Variable Format Expression in a character literal when the I/O list has a subscripted array element. o Eliminate compiler abort with incorrect program that names the enclosing program unit in an ONLY clause. o Allow the extension syntax '101'B for a binary literal. o Correctly handle whitespace in -omp conditional compilation lines. o Fix problem where $INTEGER directive was not being properly handled. o Add support for KIND= keyword in MINLOC/MAXLOC o Add suppprt for KIND= keyword in various string intrinsics. o Prevent compiler abort for incorrect attempt to pass unsupported datatypes by value. o Properly report invalid declaration EXTERNAL,INTEGER and recover so that remainder of program is properly parsed. o Give standards warning for non-standard placement of NAMELIST. o Eliminate internal compiler error for particular type of concatenation of substrings when Fortran 95 standards checking is requested. o When converting a negative REAL value to COMPLEX, use +0.0 as the imaginary part rather than -0.0. o Allow PARAMETER constant in ALIGN= specification of !DEC$ PSECT. o Don't give shape mismatch for correct-shape RESHAPE in initialization expression. o Don't give inappropriate alignment warnings for certain convoluted EQUIVALENCE/ COMMON combinations. o Eliminate internal compiler error for initialization expression which contains a constant expression in a structure constructor. o Allow EXTERNAL :: FOO o The following changes were made to the Fortran 77 compiler: - /fast sets /arch=host/optimize=tune=host o The following changes were made to the run-time support: - An end-of-file or end-of-record status is no longer treated as an error status. This change was done to adhere to the Fortran 90 language standard. Prior to this change, if there was an ERR= specified and no END=|EOR= for a READ operation and the READ encountered an end-of-file or end-of-record situation, the ERR= path would be followed. With this change, this situation would now result in a fatal message being generated. - The runtime library now contains support for a new environment variable, FOR$CONVERT_ that allows a user to associate a foreign data conversion option with files of a particular file extension. See the documentation for more details. Complete release notes, including those for the V7.3 release, are provided by the kit in SYS$HELP:FORTRAN.RELEASE_NOTES Installation Overview --------------------- To install the ECO kit, perform the following steps: 1. Log in to the SYSTEM account or an account with the SYSPRV, CMKRNL, SYSNAM and SYSLCK privileges available. 2. If the ECO kit was provided as a file with a file type ending with EXE, that is a compressed archive. RUN the file to expand into two .PCSI kits. For example, if the kit file is FORTAVE01073.DCX_AXPEXE: $ RUN FORTAVE01073.DCX_AXPEXE Two files will be created: DEC-AXP-FORRTLECO_01_073-V0703-626-4.PCSI DEC-AXP-FORTECO_01_073-V0703-1-4.PCSI 3. Enable the SYSPRV, CMKRNL, SYSNAM and SYSLCK privileges: $ SET PROCESS /PRIVILEGE=(SYSPRV,CMKRNL,SYSNAM,SYSLCK) 4. Install the RTL and compiler updates $ PRODUCT INSTALL FORRTLECO_01_073 /SOURCE=disk:[dir] /HELP $ PRODUCT INSTALL FORTECO_01_073 /SOURCE=disk:[dir] /HELP where "disk:[dir]" is the disk and directory where the .PCSI files are located. For further installation details, see the Compaq Fortran Installation Guide for OpenVMS Alpha Systems. A reboot is not required after installation. If you have problems installing this ECO kit, please report the problem to your local Compaq support center or send Internet mail with details (and a log of the installation attempt) to fortran@compaq.com For more information on Compaq Fortran products, please visit our web site at http://www.compaq.com/fortran Copyright (c) Compaq Computer Corporation 2000. All Rights reserved. This software is proprietary to and embodies the confidential technology of Compaq Computer Corporation. Possession, use, or copying of this software and media is authorized only pursuant to a valid written license from Compaq or an authorized sublicensor. This ECO has not been through an exhaustive field test process. Due to the experimental stage of this ECO/workaround, Compaq makes no representations regarding its use or performance. The customer shall have the sole responsibility for adequate protection and back-up data used in conjunction with this ECO/workaround.