Compaq_Fortran______________________________________ Release Notes for Compaq Tru64 UNIX Systems | | January 2001 | | This document contains information about Compaq | Fortran for Compaq[R] Tru64[TM] UNIX[R] (formerly DIGITAL[R] UNIX) Alpha Systems. Software Version: Compaq Fortran Version 5.4 Compaq Computer Corporation Houston, Texas ________________________________________________________________ First release, June 1994 Revision, September 1994 Revision, December 1994 Revision, March 1995 Revision, May 1995 Revision, March 1996 Revision, December 1996 Revision, September 1997 Revision, March 1998 Revision, December 1998 Revision, July 1999 Revision, December 1999 Revision, July 2000 Revision, September 2000 | Revision, January 2001 Compaq Computer Corporation makes no representations that the use of its products in the manner described in this publication will not infringe on existing or future patent rights, nor do the descriptions contained in this publication imply the granting of licenses to make, use, or sell equipment or software in accordance with the description. Possession, use, or copying of the software described in this publication is authorized only pursuant to a valid written license from Compaq or an authorized sublicensor. Compaq shall not be liable for technical or editorial errors or omissions contained herein. The information in this document is subject to change without notice. © 2001 Compaq Computer Corporation. All Rights Reserved. COMPAQ, the Compaq Logo, DEC, DECnet, DIGITAL, VAX, and VMS are registered in the U.S. Patent and Trademark Office. AlphaGeneration, AlphaServer, Bookreader, DECchip, DEC Fortran, DECwindows, DEC FUSE, DECwindows, OpenVMS, Tru64, ULTRIX, and VAX FORTRAN are trademarks of Compaq Computer Corporation. Microsoft, PowerStation, NT, and Windows are either trademarks or registered trademarks of Microsoft Corporation. CRAY is a trademark of Cray Research, Inc. IEEE is a registered trademark of the Institute of Electrical and Electronics Engineers, Inc. Linux is a trademark of Linus Torvalds. OpenMP is a trademark of the OpenMP Architecture Review Board. PostScript is a trademark of Adobe Systems, Inc. Motif, OSF, and OSF/1 are trademarks of the Open Software Foundation, Inc. | UNIX is a trademark in the United States and other | countries of The Open Group. All other trademarks and registered trademarks are the property of their respective holders. This document is available on CD-ROM. This document was prepared using VAX DOCUMENT Version 2.1. _________________________________________________________________ Contents 1 Compaq Fortran Version 5.4 Release Notes 1.1 Product Terminology Changes................... 1-2 1.2 Overview...................................... 1-2 1.3 Installation and Minimum Operating Systems Version....................................... 1-3 1.4 Software Versions............................. 1-3 1.4.1 Contents of the Version 5.4 kit........... 1-3 1.4.2 Contents of High Performance Fortran in Version 5.4............................... 1-4 1.4.3 Miscellaneous Information about the Version 5.4 Kit........................... 1-5 1.5 New Features, Corrections, and Known Problems in Version 5.4................................ 1-6 1.5.1 Version 5.4 New Features.................. 1-6 1.5.2 Version 5.4 Important Information......... 1-12 1.5.3 Version 5.4 Corrections................... 1-13 1.5.4 Version 5.4 Known Problems ............... 1-17 1.6 Known Limitations............................. 1-18 1.7 New Features, Corrections, and Known Problems in Version 5.3................................ 1-18 1.7.1 Version 5.3 ECO 02 New Features........... 1-19 1.7.2 Version 5.3 ECO 01 New Features........... 1-20 1.7.3 Version 5.3 ECO 01 HPF New Features....... 1-28 1.7.4 Version 5.3 New Features.................. 1-34 1.7.5 Version 5.3 Important Information......... 1-37 1.7.6 Version 5.3 Corrections................... 1-37 1.7.7 HPF in Compaq Fortran Version 5.3 ........ 1-41 1.7.8 Version 5.3 Known Problems ............... 1-43 1.8 New Features, Corrections, and Known Problems in Version 5.2................................ 1-43 1.8.1 Version 5.2 ECO 01 New Features........... 1-43 1.8.2 Version 5.2 New Features.................. 1-52 iii 1.8.3 Version 5.2 Important Information......... 1-53 1.8.4 Version 5.2 Corrections................... 1-55 1.9 High Performance Fortran (HPF) Support in Version 5.2................................... 1-62 1.9.1 Optimization.............................. 1-63 1.9.1.1 The -fast Compile-Time Option........... 1-63 1.9.1.2 Non-Parallel Execution of Code.......... 1-64 1.9.1.3 INDEPENDENT DO Loops Currently Parallelized............................ 1-64 1.9.1.4 Nearest-Neighbor Optimization........... 1-66 1.9.1.5 Widths Given with the SHADOW Directive Agree with Automatically Generated Widths.................................. 1-67 1.9.1.6 Using EOSHIFT Intrinsic for Nearest Neighbor Calculations................... 1-67 1.9.2 New Features.............................. 1-68 1.9.2.1 RANDOM_NUMBER Executes in Parallel...... 1-68 1.9.2.2 Improved Performance of TRANSPOSE Intrinsic............................... 1-68 1.9.2.3 Improved Performance of DO Loops Marked as INDEPENDENT.......................... 1-68 1.9.3 Corrections............................... 1-69 1.9.4 Known Problems............................ 1-69 1.9.4.1 "Variable used before its value has been defined" Warning........................ 1-69 1.9.4.2 Mask Expressions Referencing Multiple FORALL Indices.......................... 1-69 1.9.5 Unsupported Features...................... 1-69 1.9.5.1 SMP Decomposition (OpenMP) not Currently Compatible with HPF..................... 1-69 1.9.5.2 Command Line Options not Compatible with the -wsf Option......................... 1-69 1.9.5.3 HPF_LOCAL Routines...................... 1-70 1.9.5.4 SORT_UP and SORT_DOWN Functions......... 1-70 1.9.5.5 Restricted Definition of PURE........... 1-70 1.9.5.6 Restrictions on Procedure Calls in INDEPENDENT DO and FORALL............... 1-71 1.9.5.7 Restrictions on Routines Compiled with -nowsf_main............................. 1-72 1.9.5.8 RAN and SECNDS Are Not PURE............. 1-72 1.9.5.9 Nonadvancing I/O on stdin and stdout.... 1-72 1.9.5.10 WHERE and Nested FORALL................. 1-73 iv 1.9.6 Obsolete Features Deleted................. 1-75 1.9.6.1 GLOBAL_TO_PHYSICAL and GLOBAL_LBOUNDS are Deleted............................. 1-75 1.9.7 Miscellaneous............................. 1-75 1.9.7.1 What To Do When Encountering Unexpected Program Behavior........................ 1-75 1.9.7.1.1 Incompatible or Incomplete Libraries Installed.............................. 1-76 1.9.7.1.2 Segmentation Faults.................... 1-77 1.9.7.1.3 Programs that Hang..................... 1-77 1.9.7.1.4 Programs with Zero Sized Arrays........ 1-78 1.9.7.2 Stack and Data Space Usage.............. 1-78 1.9.7.3 Non-"-wsf" main programs................ 1-79 1.9.7.4 Using "-std" Disables HPF Directive Checking................................ 1-79 1.9.7.5 Use the Extended Form of HPF_ALIGNMENT........................... 1-79 1.9.7.6 EXTRINSIC(SCALAR) Changed to EXTRINSIC(HPF_SERIAL)................... 1-79 1.9.8 Example Programs.......................... 1-80 1.10 New Features and Corrections in Version 5.1... 1-81 1.10.1 Version 5.1 New Features.................. 1-81 1.10.2 Version 5.1 Corrections................... 1-87 1.10.3 HPF Version 5.1 New Features.............. 1-92 1.10.3.1 SHADOW Directive Now Supported.......... 1-92 1.10.3.2 Pointers Now Handled in Parallel........ 1-92 1.10.3.3 SHADOW Directive Required for Nearest-Neighbor POINTER or TARGET Arrays.................................. 1-92 1.10.3.4 Descriptive Mapping Directives are Now Obsolescent............................. 1-93 1.10.3.5 New support for HPF Local Library Routines GLOBAL_LBOUND and GLOBAL_UBOUND........................... 1-94 1.10.3.6 REDUCTION Clause in INDEPENDENT Directives.............................. 1-94 1.10.3.7 HPF_SERIAL Restriction Lifted for Procedures Called from INDEPENDENT DO Loops................................... 1-94 1.10.4 HPF Version 5.1 Corrections............... 1-94 1.11 New Features and Corrections in Version 5.0... 1-95 1.11.1 Version 5.0 New Features.................. 1-95 1.11.2 Version 5.0 Corrections................... 1-99 v 1.12 Additional Information........................ 1-105 1.12.1 The Compaq Fortran Home Page.............. 1-105 1.12.2 Support for the Fortran 95 Standard Features.................................. 1-105 1.12.3 Preliminary Information on Support for Big Objects................................... 1-108 1.12.4 New Random Number Algorithm............... 1-110 1.12.5 Compaq Fortran 77 Pointers................ 1-111 1.12.6 Extended Precision REAL (KIND=16) Floating-Point Data....................... 1-112 1.12.7 Variable Format Expressions (VFEs)........ 1-112 1.12.8 Notes on Debugger Support................. 1-113 1.12.8.1 Ladebug Debugger Support Notes.......... 1-114 1.12.8.2 dbx Debugger Support Notes.............. 1-115 1.12.9 Notes on Fast Math Library Routines....... 1-116 1.12.10 The Compaq Fortran Array Descriptor Format.................................... 1-116 2 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2.1 New Features and Corrections in Version 4.1... 2-1 2.2 New Features in Version 4.0................... 2-9 2.3 New Features in Version 2.0................... 2-16 2.4 New Features in Version 1.3................... 2-17 2.5 New Features in Version 1.2................... 2-20 2.6 New Features in Version 1.1................... 2-24 3 Documentation, Corrections, and Other Fortran Documentation 3.1 Compaq Fortran Documentation Corrections...... 3-1 3.1.1 Compaq Fortran Installation Guide for Tru64 UNIX Systems........................ 3-1 3.1.2 Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems................... 3-2 3.1.3 Compaq Fortran Language Reference Manual.................................... 3-2 3.2 Compaq Fortran Documentation and Online Information................................... 3-2 3.3 Compaq HPF and Parallel Software Environment Documentation................................. 3-5 vi 3.4 Other Sources of Information About Fortran 95/90......................................... 3-5 A Run-Time Messages Tables A-1 Run-Time Error Messages and Explanations.............................. A-2 vii 1 _________________________________________________________________ Compaq Fortran Version 5.4 Release Notes This chapter contains release notes for Compaq Fortran Version 5.4 (changes for this release are described in Section 1.5). This chapter contains the following sections: o Section 1.1 (Product Terminology Changes) o Section 1.2 (Overview) o Section 1.3 (Installation and Minimum Operating Systems Version) o Section 1.4 (Software Versions) o Section 1.5 (New Features, Corrections, and Known Problems in Version 5.4) o Section 1.6 (Known Limitations) o Section 1.7 (New Features, Corrections, and Known Problems in Version 5.3) o Section 1.8 (New Features, Corrections, and Known Problems in Version 5.2) o Section 1.9 (High Performance Fortran (HPF) Support in Version 5.2) o Section 1.10 (New Features and Corrections in Version 5.1) o Section 1.11 (New Features and Corrections in Version 5.0) o Section 1.12 (Additional Information) Compaq Fortran Version 5.4 Release Notes 1-1 1.1 Product Terminology Changes This document uses the following new or changed product names: o "Compaq Fortran" was previously called "DIGITAL Fortran 90". o "Compaq Fortran 77" was previously called "DIGITAL Fortran 77". o "Compaq Fortran" refers to the combined packaging of the Compaq Fortran 90 and Compaq Fortran 77 products. It also refers to the Compaq Fortran language. o Compaq Fortran 90 and Compaq Fortran 77 product version numbers are now the same. o The operating system formerly known as "DEC OSF/1" and "DIGITAL UNIX" is now called "Compaq Tru64 UNIX". o The Compaq Extended Math Libraries {CXML} was previously called the DIGITAL Extended Math Libraries {DXML}. 1.2 Overview Compaq Fortran conforms to the Fortran 95 Standard, Fortran 90 Standard, and previous Fortran standards. It also includes support for High Performance Fortran (HPF), and contains many but not all of Compaq Fortran 77's extensions to the FORTRAN-77 standard. Except in rare instances, a valid FORTRAN-77 program is also a valid Fortran 95 program. Compaq Fortran fully supports the Fortran 95 Standard (ISO/IEC 1539-1:1997(E)) and the multi-vendor OpenMP[TM] Fortran Specification, including support for directed parallel processing using OpenMP directives on shared memory multiprocessor systems. The Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems contains a detailed description of Compaq Fortran 77 source language compatibility. Provided the types and shapes of the actual and formal arguments agree, routines compiled with Compaq Fortran 77 can call (or be called by) routines compiled with Compaq Fortran. 1-2 Compaq Fortran Version 5.4 Release Notes 1.3 Installation and Minimum Operating Systems Version Compaq Fortran Version 5.4 requires Version 4.0 (or later) of the Compaq Tru64 UNIX operating system. Use of non-NUMA parallel features requires Version 4.0D (or later) of the Compaq Tru64 UNIX system. Use of NUMA (Non-Uniform Memory Access) parallel features requires Version 5.1 (or later) of the Compaq Tru64 UNIX operating system. For a detailed description of the installation procedure, see the Compaq Fortran Installation Guide for Tru64 UNIX Systems. You may also send comments, questions and suggestions about the Compaq Fortran product to the following mail address: fortran@compaq.com Please note that this address is for informational inquiries and is not a formal support channel. If you have Internet access and a World Wide Web (WWW) browser, you are welcome to view the Compaq Fortran home page, located at: http://www.compaq.com/fortran/ 1.4 Software Versions This section describes the contents of Compaq Fortran Version 5.4. 1.4.1 Contents of the Version 5.4 kit The Compaq Fortran Version 5.4 kit consists of the following setld sets: | | o DFABASE540-Compaq Fortran 90 and 77 v5.4 for Compaq | Tru64 UNIX Alpha Systems | | o DFADOC540 -Compaq Fortran v5.4 Release Notes and Man | Page | | o DFACOM540 -Compaq Fortran v5.4 Tools & their Man Pages | | o DFARTL393 -Compaq Fortran RTL #393 for Compaq Tru64 UNIX | Alpha Systems | | o OTABASE211-Compaq Compiled Code Support Library #211 | Compaq Fortran Version 5.4 Release Notes 1-3 | o HPFLIBS185-Compaq Fortran V5.4 High Performance Fortran | Runtime Libraries | | o XMDCOM410 -the CXML common subset files | | o XMDLIB4410-the CXML archive and shared libraries (serial | and parallel) for EV4 systems | | o XMDLIB5410-the CXML archive and shared libraries (serial | and parallel) for EV5 systems | | o XMDLIB6410-the CXML archive and shared libraries (serial | and parallel) for EV6 systems | | o XMDSCI410 -the SCIPORT Cray compatibility library and | manpages | | o XMDMAN410 -the CXML manpages | | o XMDHTM410 -the CXML manpages in HTML format | | The Compaq Fortran DFABASE and DFACOM subsets include the | Compaq Fortran 95/90 and Compaq Fortran 77 compilers and | associated documentation. The DFADOC subset contains the | compiler command manpages and release notes. | | The XMD subsets contain the CXML routines, included in the | Compaq Fortran kit as external routines. | | CXML is distributed as a Development kit that allows you | to link an application program with the CXML library and | then run the executable image. No license is required. The | CXML subsets are independent from one another, except that | the user must link in the CXML library (either serial or | parallel) after linking with the SCIPORT library. | 1.4.2 Contents of High Performance Fortran in Version 5.4 The following new Compaq Fortran features are now supported for HPF programs: o HPF Programs with MPI HPF programs can execute with the support of Message Passing Interface (MPI) software. Before Version 5.3 ECO 01 of Compaq Fortran, HPF programs executed with the support of the HPF component of Version 1.6 of the Parallel Software Environment (PSE). 1-4 Compaq Fortran Version 5.4 Release Notes The HPF/MPI connection enables development of programs that use both HPF and MPI together in the same application. In addition, MPI supports additional hardware configurations, some of which are faster than any supported by PSE. Finally, there are many tools available for debugging, profiling, and visualizing the execution of MPI programs. The Parallel Software Environment (PSE) runtime system is no longer available. Consequently, all HPF programs must now be run with the new HPF runtime system that uses MPI, instead of PSE, to perform its message passing. Section 1.7.3 (Version 5.3 ECO 01 HPF New Features) explains how to use the new runtime system. The HPFLIBS subset contains High Performance Fortran (HPF) support and contains: o Both the nonparallel (serial) and parallel versions of the High Performance Fortran (HPF) run-time library o Associated reference pages for HPF_LIBRARY and HPF_ LOCAL_LIBRARY, including intro(3hpf) In order to use the HPF Scalar libraries, the HPFLIBS subset must be installed. 1.4.3 Miscellaneous Information about the Version 5.4 Kit For more information including disk space requirements, see Section 3.1.1. If you need to delete an older version of the Compaq Fortran Run-Time Library, delete the older subset before you install a new version. If you have installed multiple versions of the Run-Time Library and you delete one, you must reinstall the desired Run-Time Library version before you can correctly link Fortran programs. The Compaq Fortran kit again includes the OTABASE subset (Compaq Compiled Code Support Library). The new OTABASE subset supports the use of parallel directives. Compaq Fortran Version 5.4 Release Notes 1-5 The following changes occurred to the OSFCMPLRS operating system subset starting with Compaq Tru64 UNIX (formerly DIGITAL UNIX) Version 4.0: o Beginning with DIGITAL UNIX Version 4.0, the OSFCMPLRS subset now consists of multiple subsets: OSFCMPLRS (required for program development), OSFSDE (profiling tools), OSFLIBA (archive libraries), OSFINCLUDE (include files), OSFATOM (atom tools). 1.5 New Features, Corrections, and Known Problems in Version 5.4 Version 5.4 is a minor release that includes corrections to problems discovered since Version 5.3 was released and certain new features. For the Version 5.4 subset numbers, see Section 1.4. The following topics are discussed: o Section 1.5.1 (Version 5.4 New Features) o Section 1.5.2 (Version 5.4 Important Information) o Section 1.5.3 (Version 5.4 Corrections) o Section 1.5.4 (Version 5.4 Known Problems ) | 1.5.1 Version 5.4 New Features | | The following new Compaq Fortran features are now | supported: | | o The following new features are now supported: | | - -pipeline is now the default at optimization level | -O4 (the default). | | - Nested parallel regions are now supported by -omp. | | - Parallel programs running on Non-Uniform Memory | Access (NUMA) machines have initial support using | the following directives, compiler options, and | environment variables: | | * !DEC$ MIGRATE_NEXT_TOUCH | | * !DEC$ MIGRATE_NEXT_TOUCH_NOPRESERVE 1-6 Compaq Fortran Version 5.4 Release Notes * !DEC$ OMP NUMA | | * !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE | | * !DEC$ ALIGN - same as !HPF$ ALIGN | | -numa Fortran 90 only. Enables NUMA parallel pr|cessing and the NUMA command line options -numa_memories and -numa_tp|. NUMA paral- lel processing is indicated by inserting certain|!DEC$ direc- tives in your source code. Option -omp must als| be specified. The default is -nonuma. | | -numa_memories num | Fortran 90 only. Specifies the number of memorie| (RADs) to be used for NUMA parallel processing. Option -numa|must also be specified. If -numa_memories does not appear on|the command line or if num is 0, the number of memories will|be chosen at run-time either from the NUMA_MEMORIES environme|t variable (if it is set) or by the system. | | -numa_tpm num | Fortran 90 only. Specifies the number of threads|per memory to be used for NUMA parallel processing. Option -n|ma must also be specified. num is the number of threads per p|ysical memory that will execute NUMA parallel features in the |rogram. If -numa_tpm does not appear on the command line or|if num is 0, the number of threads per memory will be chosen |t run-time either from the NUMA_TPM environment variable (i| it is set) or by the system. | | o The following new f90 command options are now supported. | See the f90(1) man page for details. | | - -arch ev67 | | - -ccdefault fortran | list | none | default | | - -annotations | | - -assume noprotect_constants | | - -check arg_temp_created | | o The following new run-time features are now supported: | | - The Fortran RTL has been changed so that it now | processes the [.m] (the minimum number of digits) | Compaq Fortran Version 5.4 Release Notes 1-7 | portion of the edit descriptor when w (the width | field) is Zero for I, B, O, and Z editing. | | - 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, FORT_CONVERT_ext that allows | a user to associate a foreign data conversion option | with files of a particular file extension. The values | of FORT_CONVERT_ext are the same as FOR_CONVERTn. | | - The runtime library has been changed to perform | more thorough edit checking on list directed input. | Previously, the RTL was liberal in what it accepted | for input to integer and real values. In accordance | with the F95 Standard, the RTL no longer accepts | "+", "-", ".", "D", "E", or "Q" without expressing at | least 1 digit. For example, the RTL used to allow | a single "+" to convert to a 0, but now the RTL | will return a FOR$IOS_LISIO_SYN error. In addition, | ambiguous expressions such as "+-" and "-" will be | rejected. | | - Support for the -fpscomp options are now implemented | in the Fortran RTL on UNIX: | | * -fpscomp all | | * -fpscomp general | | * -fpscomp ioformat | | * -fpscomp logicals | | * -fpscomp filesfromcmd | | This support includes the six Microsoft PowerStation | compatible file types as described in the Visual | Fortran Programmer's Guide: | | * MS Unformatted Sequential Access 1-8 Compaq Fortran Version 5.4 Release Notes * MS Unformatted Direct Access | | * MS Formatted Sequential Access | | * MS Formatted Direct Access | | * MS Binary Sequential Access | | * MS Binary Direct Access | | This includes all fpscomp behavior that does not | involve Windows-specific features. There is no | QuickWin-like support. The 'Filenames from Command | Line' option looks in the command line arguments for | unspecified filenames in an OPEN(...,FILE='',...) | statement and will also prompt for filenames at the | terminal, but does not implement the equivalent of | a Windows Dialog box, like a QuickWin application | would in the PC Windows environment. Windows-specific | physical device names used as filenames are given no | special consideration or handling. | | - Support for reading nondelimited character strings as | input for character NAMELIST items has been added. | | A character string does not need delimiting | apostrophes or quotation marks if the corresponding | NAMELIST item is of type default character, and the | following is true: | | * The character string does not contain a blank, | comma, slash, exclamation point (!), ampersand | (&), dollar sign ($), left parenthesis, equal sign | (=), percent sign (%), or period (.). | | * The character string is not continued across a | record boundary. | | * The first nonblank character in the string is not | an apostrophe or a quotation mark. | | * The leading character is not a string of digits | followed by an asterisk. | | A nondelimited character string is terminated by the | first blank, comma, slash, end-of-record, exclamation | point, ampersand, or dollar sign encountered. | Apostrophes and quotation marks within nondelimited | character strings are transferred as is. | Compaq Fortran Version 5.4 Release Notes 1-9 | Should an equal sign, percent sign, or period be | encountered while scanning for a nondelimited | character string, the string will be treated as | a variable name (or part thereof) and not as a | nondelimited character string. | | Be forewarned that nondelimited character strings | that are written out by using a NAMELIST write | may not be read in as expected by a corresponding | NAMELIST read. | | Given the following example code: | | NAMELIST/TEST/ CHARR | CHARACTER*3 CHARR(4) | DATA CHARR/'AAA', 'BBB', 'CCC', 'DDD'/ | OPEN (UNIT=1, FILE='NMLTEST.DAT') | WRITE (1, NML=TEST) | END | | The output file NMLTEST.DAT will contain: | | &TEST | CHARR = AAABBBCCCDDD | / | | Should an attempt be made to read the data in | NMLTEST.DAT back in with a NAMELIST read using | nondelimited character strings: | | NAMELIST/TEST/ CHARR | CHARACTER*3 CHARR(4) | DATA CHARR/4*' '/ | OPEN (UNIT=1, FILE='NMLTEST.DAT') | READ (1, NML=TEST) | PRINT *, 'CHARR read in >', CHARR(1),'< >',CHARR(2),'< >', | 1 CHARR(3), '< >', CHARR(4), '<' | END | | This will result in: | | CHARR read in >AAA< > < > < > < | | - New run-time jacket routines provided for Fortran | 3f lgamma, erf, erfc, short and long functions in | libUfor. See the appropriate 3f man page for details. 1-10 Compaq Fortran Version 5.4 Release Notes - The run-time now supports unlimited record sizes | for writes, reads, backspaces of variable length | unformatted files. Records greater than 2.1 giga- | bytes use a new scheme that may not be portable to | another vendor's Fortran. | | - When the DATE, TIME, or ZONE arguments to the DATE_ | AND_TIME intrinsic routine are not large enough to | hold the required information, a fatal run-time error | will now be generated. | | - The run-time support was enhanced to allow a REWIND | operation to be performed on a direct access file. | This is allowed without having to specify any command | line options. | | - New bits were defined in the for_set_fpe routine | interface to allow the compiler to specify counting | and messages for floating point inexact traps | (fpe:6). The runtime handler is updated to provide | this service. | | - New run-time jacket routines provided for Fortran | 3f lgamma, erf, erfc, short and long functions in | libUfor. New entry point interfaces are: | | float lgamma_ ( float *x ) ; | double dlgamma_ ( double *x ) ; | float erf_ ( float *x ) ; | double derf_ ( double *x ) ; | float erfc_ ( float *x ) ; | double derfc_ ( double *x ) ; | short short_ ( int *x ) ; | int long_ ( short *x ) ; | | - Support for generating traceback information has | been added to the run-time support. Traceback will be | produced for all severe errors. Traceback output can | be disabled by setting the environment variable FOR_ | DISABLE_STACK_TRACE to true. All diagnostic output, | which includes traceback, can be redirected to a file | defined by the FORT0 environment variable, which was | already supported. | Compaq Fortran Version 5.4 Release Notes 1-11 | - Namelist input was not handling slices and strides | of arrays, array segments with zero and negative | positions, and character substrings of arrays. Note: | this implementation adheres to the F90 Standard, so | nested array slices are illegal. | | - Support for the environment variable FORT_BUFFERED | was added. When it is set to TRUE, the run-time | library will assume that buffered I/O will be used | for output to all I/O units, except those whose | output is to the terminal. This provides a run-time | mechanism to support the behavior enabled by the | -assume buffered_io option. | | o See the new features listed in Section 1.7.2 (Version | 5.3 ECO 01 New Features) | | o The Compaq Extended Math Library (CXML) routines are | updated in the Compaq Fortran kit. See the CXML release | notes in: | | /usr/opt/XMDCOM410/docs/XMD410_release_note.txt | | 1.5.2 Version 5.4 Important Information | | Some important information to note about this release: | | o As of Compaq Fortran V5.3, the f77 command executes the | Compaq Fortran 90 compiler instead of the Compaq Fortran | 77 compiler. Use f77 -old_f77 to execute the Compaq | Fortran 77 compiler. | | o Object files created by Fortran 95 contain information | about when they were compiled and by what version of the | compiler. Use the command | | strings -a xxx.o | grep "@(.)" | | where xxx.o is the name of the object file. The strings | generated by the compiler are | | - "(#)tttt" is a what(1) string with the text from a | cDEC$ IDENT directive if present. | | - "@(c)Compaq Fortran Vn.n-eeee" is the version number | of the Fortran 95 compiler that generated this object | file. | | - "@(m)xxx" is the name of the first program unit in | the source used to produce this object file. 1-12 Compaq Fortran Version 5.4 Release Notes - "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this | object file was created. | | 1.5.3 Version 5.4 Corrections | | From DFA531 ECO 01 final X5.3-1120 -44A7B to DFA540 FT1 | T5.4-1130-46A7R, the following corrections have been made: | | o Eliminate internal compiler error for character function | whose length expression includes LEN_TRIM of a dummy | argument. | | o Eliminate internal compiler error for SIZE of a derived | type component pointer array. | | o Software pipelining is now enabled at the default | optimization level (-O4) | | o Eliminate more unnecessary copies of contiguous array | arguments. | | o Correct parsing error for certain record component | references using dots. | | o Eliminate internal compiler error for particular use of | RESHAPE. | | o Do not give an unused variable warning where the only | reference to a variable is as the argument to LOC. | | o Eliminate internal compiler error for particular use of | nested STRUCTURE. | | o Disallow illegal ALLOCATED(A(:)) | | o Allow, as an extension for compatibility with our | Fortran 77 compilers, a LOGICAL value as an argument | to intrinsics which accept INTEGER, such as ABS. | | o Diagnose ambiguous generic routine reference. | | o When an integer constant is assigned to a variable whose | KIND is smaller, don't change the KIND of the constant | for future references. | | o Allow IMPLICIT REAL with $. | | o Eliminate internal compiler error for RESHAPE of array | constructor | | Compaq Fortran Version 5.4 Release Notes 1-13 | From DFA540 FT1 T5.4-1130-46A7R to DFA540 FT2 T5.4-1170- | 46A97, the following corrections have been made: | | o Speed up processing of EQUIVALENCE groups in COMMON | blocks. | | o Properly handle SIZE(A(:)(I:J)) | | o Implement INT8 intrinsic (already documented) | | o Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX. | | o Allow omitted OPTIONAL arguments to be passed as | optional arguments to intrinsics. | | o If "too many errors", suppress informational/warning | messages as well. | | o Allow keyword specification of arguments A10, A20, etc. | to MAX/MIN. | | o Eliminate internal compiler error for case of ADJUSTL | with array argument. | | o Implement nested LASTPRIVATE for COMMON. | | o Where DATA initializations initialize the same array | element (not allowed according to the standard, but | supported by Compaq Fortran), preserve the order in | which initializations were specified, so that the last | one takes precedence. | | o Fix parsing error for typed function declaration with | MS-style argument passing specification in argument | list. | | o Resolve incorrect generic resolution between subroutine | with no arguments (but () specified as argument list) | and routine with one required argument. | | o Allow named constant to be used in specification | expression later in same statement where it was defined. | | o Give error instead of compiler abort for IF (expr) | SELECT CASE | | o For F90 standards checking, warn about I0, etc. in | FORMAT. | | o Warn about variables in BLOCK DATA subprogram that are | not in a COMMON. 1-14 Compaq Fortran Version 5.4 Release Notes o Fix problem with continuation in free-form source when | OpenMP conditional compilation is used. | | o Eliminate internal compiler failure for incorrect | ". AND." in free-form source. | | o Fix a case where two NaNs sometimes compared as equal. | | o Fix assertions caused by instruction scheduling at - | fpe1. | | From DFA540 FT2 T5.4-1170-46A97 to DF540 FT3 T5.4-1195- | 46AAC, the following corrections have been made: | | o Support the full range of format width specifiers as | documented. | | o Correct problem with page-alignment for POINTER objects. | | o Improve detection of contiguous array slices. | | o Allow EOSHIFT to work on REAL*16 and COMPLEX*32 arrays. | | o Correct support for SIZE with argument being array with | vector subscripts. | | o Eliminate internal compiler failure for incorrect | ". AND." in free-form source. | | o Correct problem with fixed form continuation with - | assume cc_omp. | | o Improve handling of continued C-string escape sequences. | | o Preserve order of data initializations where the same | location is initialized multiple times. While this is | not allowed by the standard, we do support it. | | o Eliminate spurious warnings for use of some intrinsics | when -double_size 128 is used. | | o Correct problem with module visibility and ONLY. | | o Eliminate internal compiler error for certain use of | POINTER and nested structures. | | o Eliminate inappropriate error about multiple matching | procedures when generic operators are used. | | o Correct parsing error of certain variable names in an | assignment following a logical IF. | Compaq Fortran Version 5.4 Release Notes 1-15 | o Eliminate inappropriate shape mismatch for certain use | of RESHAPE in a PARAMETER initialization expression. | | From DFA540 FT3 T5.4-1195-46AAC to DFA540 V5.4-1265-46ABA, | the following corrections have been made: | | o Add support for -mixed_str_len_arg switch on UNIX, | which puts character argument lengths next to their | addresses in the argument list (this is the default | Windows method). Add support for [NO]MIXED_STR_LEN_ARG | attribute in !DEC$ ATTRIBUTES. | | o Eliminate spurious error for declaration of RECORD array | in a COMMON block in a MODULE. | | o Correct handling of generics where several routines have | an optional argument at the same position. | | o In C strings, allow octals of the form \ooo to have 1, | 2 or 3 octal digits and hex objects of the form \Xxx to | have 1 or 2 hexadecimal characters. | | o Add support for -check arg_temp_created. | | o Annotations now are displayed on a per-routine basis. | | o Put out type information to the debugger for module | functions | | From DFA540 V5.4-1265-46ABA to DFA540 V5.4-1283-46ABA, the | following corrections have been made: | | o Allow Sequence/Nosequence directives on fields of | derived types with -hpf, whether or not numa switch | is set. | | o Add diagmostic "The NOSEQUENCE directive may not be | specified for a component of a derived type which has | the SEQUENCE attribute.". | | o Issue diagnostic if NOSEQUENCE directives are applied to | fields of 'sequence' derived types. | | o When calculating the size of an array to be allocated, | check the size computation for integer overflow. | | o Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC | et al. The mask has an expression for the dimension | bound(s). 1-16 Compaq Fortran Version 5.4 Release Notes o When a psect becomes too big, give a better error | message: "Psect xxx is too large. Reduce array sizes | or make arrays AUTOMATIC or ALLOCATABLE." | | 1.5.4 Version 5.4 Known Problems | | The following known problems exist with Compaq Fortran | Version 5.4: | | o The following is a list of known problems for -omp and | -mp parallel support in Version 5.4: | | - Global variables referenced by statement functions | inside parallel regions should not reference local | instances of those variable names. The following | example should print 42.0 {10 times} instead of 0.0: | | real x,y(10) | statement(a) = a + x | | x = 41.0 | !$par parallel local(x) | x = -1.0 | !$par pdo local(i) | do i=1,10 | y(i) = statement(1.0) | end do | !$par end parallel | type *,y | end | | o Please note that -warn decl gives an error level | message, not a warning level message. | | o When using Ladebug with certain versions of the UNIX | operating system, be aware that a trailing underscore | may be needed to display module variables. For example, | to display variable X in module MOD, if typing print | $MOD$X$ does not display the variable's value, type: | | print $MOD$X$_ | | Compaq Fortran Version 5.4 Release Notes 1-17 1.6 Known Limitations The following limitations exist in Version 5.4: o When using the -omp or -mp options, if you declare a parallel DO loop which accesses an INTEGER*1 array (one element at a time), the results may not be correct unless you also specify -granularity byte. In general, if a parallel loop tries to store things of "small" size into packed spaces, the granularity needs to be set to that size. However, while this "fixes" the program to do the right thing, it is a dreadful performance slowdown. | It would be better to execute such code serially. | | o If you specify the -hpf (or -wsf) option to request parallel processing, the following Compaq Fortran language features are not supported: - REAL (KIND=16) (same as REAL*16) data type - Compaq Fortran 77 implementation of CRAY-style pointers - Variable format expressions (VFEs). For example: FORMAT(I4) - Initialization of Compaq Fortran 77 structures. For example: STRUCTURE /S/ INTEGER I / 100 / END STRUCTURE 1.7 New Features, Corrections, and Known Problems in Version 5.3 Version 5.3 is a minor release that includes corrections to problems discovered since Version 5.2 was released and certain new features. The following topics are discussed: o Section 1.7.1 (Version 5.3 ECO 02 New Features) o Section 1.7.2 (Version 5.3 ECO 01 New Features) o Section 1.7.3 (Version 5.3 ECO 01 HPF New Features) o Section 1.7.4 (Version 5.3 New Features) o Section 1.7.5 (Version 5.3 Important Information) 1-18 Compaq Fortran Version 5.4 Release Notes o Section 1.7.6 (Version 5.3 Corrections) o Section 1.7.7 (HPF in Compaq Fortran Version 5.3 ) o Section 1.7.8 (Version 5.3 Known Problems ) 1.7.1 Version 5.3 ECO 02 New Features | | The following new Compaq Fortran features are now | supported: | | o COMMON blocks can be marked read-only using the NOWRT | PSECT attribute. | | From DFA531 ECO 01 X5.3-1120-44A7B to DFA532 ECO 02 X5.3- | 1155-44A8I, the following corrections have been made: | | o Eliminate internal compiler error for SIZE of a derived | type component pointer array. | | o Eliminate more unnecessary copies of contiguous array | arguments. | | o Speed up processing of EQUIVALENCE groups in COMMON | blocks. | | o Properly handle SIZE(A(:)(I:J)) | | o Implement INT8 intrinsic (already documented) - UNIX) | | o Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX. | | o Allow omitted OPTIONAL arguments to be passed as | optional arguments to intrinsics. | | o If "too many errors", suppress informational/warning | messages as well. | | o Allow keyword specification of arguments A10, A20, etc. | to MAX/MIN. | | o Eliminate internal compiler error for case of ADJUSTL | with array argument. | | o Eliminate internal compiler error for particular use of | nested STRUCTURE. | | o Disallow illegal ALLOCATED(A(:)) | Compaq Fortran Version 5.4 Release Notes 1-19 | o Allow, as an extension for compatibility with our | Fortran 77 compilers, a LOGICAL value as an argument | to intrinsics which accept INTEGER, such as ABS. | | o Diagnose ambiguous generic routine reference. | | o When an integer constant is assigned to a variable whose | KIND is smaller, don't change the KIND of the constant | for future references. | | o Allow IMPLICIT REAL with $. | | o Eliminate internal compiler error for RESHAPE of array | constructor. | | o Fix parsing error for typed function declaration with | MS-style argument passing specification in argument | list. | | o Resolve incorrect generic resolution between subroutine | with no arguments (but () specified as argument list) | and routine with one required argument. | | o Allow named constant to be used in specification | expression later in same statement where it was defined. | | o Give error instead of compiler abort for IF (expr) | SELECT CASE | | o For F90 standards checking, warn about I0, etc. in | FORMAT. | | o Warn about variables in BLOCK DATA subprogram that are | not in a COMMON. | | o Fix several compiler assertions including one from | instruction scheduling at -fpe1. | | 1.7.2 Version 5.3 ECO 01 New Features | | The following new Compaq Fortran features are now | supported: | | o The new INT_PTR_KIND() intrinsic returns the kind of an | integer pointer (ie, 8 for Tru64 UNIX/Alpha). 1-20 Compaq Fortran Version 5.4 Release Notes 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. | | The following new f90 command options are now supported: | | o -wsf_target for use with -wsf . | | Notice the change in spelling of both -wsf_target and | the environment variable DECF90_WSF_TARGET. | | o -assume [no]cc_omp [dis]allows the use of OpenMP | conditional compilation separate from -omp. | | o Compiling -omp -non_shared now adds -qlpset_r -lpset to | the link line. | | 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 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 The Compaq Extended Math Library (CXML) routines are not | updated in this ECO 01 Compaq Fortran kit. | | From released version V5.3-915-449BB to ECO 01 FT1 X5.3- | 953-44A17, the following corrections have been made: | | 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. | Compaq Fortran Version 5.4 Release Notes 1-21 | o In OPEN statement, if STATUS is not specified, default | to UNKNOWN unless -f66 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 parsing 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). | | From DFA531 ECO 01 FT1 X5.3-953-44A17 to FT2 T5.3-1034- | 44A3V, the following corrections have been made: | | 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 Driver now understands shorter "-ieee" switch name. 1-22 Compaq Fortran Version 5.4 Release Notes 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, and SELECTED_REAL_KIND when the argument(s) are | constants. | | o Improve generated code for SIZEOF when bounds are | constants. | | o Fix UNIX driver to pass ld's position-specific qualifier | within lib_list rather than cc_list. | | 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. | Compaq Fortran Version 5.4 Release Notes 1-23 | 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, and 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. 1-24 Compaq Fortran Version 5.4 Release Notes 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 -D (/define) | | o Fix a case where two NaNs sometimes compared as equal. | | From DFA531 ECO 01 FT2 T5.3-1034-44A3V to final X5.3-1120 | -44A7B, the following corrections have been made: | | 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. | Compaq Fortran Version 5.4 Release Notes 1-25 | 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. 1-26 Compaq Fortran Version 5.4 Release Notes 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. | Compaq Fortran Version 5.4 Release Notes 1-27 | 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 | | 1.7.3 Version 5.3 ECO 01 HPF New Features | | The following information pertains to HPF using MPI. 1-28 Compaq Fortran Version 5.4 Release Notes Overview of HPF and MPI | | The Compaq Fortran compiler now generates code that uses | MPI as its message-passing library instead of PSE's | HPF-specific support. The compiler provides a choice | of three different variants of MPI: one for Compaq's SC | supercomputer systems, one that supports shared-memory and | Memory Channel[TM] interconnects, and public domain MPI for | other interconnects that include Ethernet and FDDI. | | It is now possible to write HPF programs that also call | or use MPI (such as distributed-memory libraries that | invoke MPI). The compiler's MPI runtime library uses its | own private MPI "communicator" so it won't interfere with | other MPI code. A new example program, /usr/examples/hpf | /call_mpi.f90, illustrates this. | | You enable the new MPI-based runtime library, that supports | Compaq Fortran's HPF directives, by adding the -wsf_target | option. This option, which requires an argument, belongs in | the compilation and link commands. | | Compiling HPF Programs for MPI | | You must now specify which variant of MPI support you wish | to use for HPF programs by including the option -wsf_target | with an MPI selection (argument target) in the command to | the f90 compiler. An example is next that selects Compaq | MPI. | | % f90 -wsf 2 -wsf_target cmpi -c lu.f90 | | An expansion of this example is next that invokes both the | compiler and linker. | | % f90 -wsf 2 -wsf_target cmpi -o lu lu.f90 | | The values of target in the option -wsf_target target | appear next with their explanations. | Compaq Fortran Version 5.4 Release Notes 1-29 ___________________________________________________________ | target__Explanation________________________________________ | | smpi SC (Quadrics) MPI | This MPI comes installed on SC-series systems. It | works with the SC's RMS software that provides a | set of commands for launching MPI jobs, scheduling | these jobs on SC clusters, and performing other | miscellaneous tasks. | | cmpi Compaq MPI | This MPI is a version that is specifically tuned | for Alpha systems. It is distributed as a Compaq | layered product. Compaq MPI supports only Memory | Channel clusters and shared-memory (SMP) machines. | | gmpi Generic MPI | This target is for use with MPICH V1.2.0 or other | compatible libraries. MPICH is a public domain | implementation of the MPI specification that is | available for many platforms. You can obtain this | implementation from http://www-unix.mcs.anl.gov/mpi | /mpich/. MPICH V1.2.0 supports many interconnection | networks including Ethernet, FDDI, and other | hardware. Using Compaq Fortran and HPF with this | MPI is, officially, not supported. Compaq does not | guarantee support of problems caused by specifying | -wsf_target gmpi. However, Compaq remains quite | interested in receiving problem reports and will | ________attempt_to_respond_to_them.________________________ | | If the command to the f90 compiler includes -wsf_target | target, then the command must also include -wsf. | | Another way of specifying the version of MPI to the | compiler, instead of using the option -wsf_target, is to | set the environment variable DECF90_WSF_TARGET to a value | in the first column of the previous table. For example, the | command | | % f90 -wsf 2 -wsf_target cmpi -c lu.f90 | | is equivalent to the commands | | % setenv DECF90_WSF_TARGET cmpi | % f90 -wsf 2 -c lu.f90 | 1-30 Compaq Fortran Version 5.4 Release Notes If an f90 command contains -wsf_target with a value (such | as cmpi) and environment variable DECF90_WSF_TARGET is set | to a different value, then the value in the f90 command | overrides the value of the environment variable. | | Using the environment variable to select the desired MPI | variant is the recommended method. This will require | the fewest changes to existing scripts for building | HPF programs, and will allow users generating code for | more than one MPI variant to do so more easily. Compaq | additionally recommends setting the environment variable | in your shell initialization file (e.g. .cshrc if you | use 'csh'), particularly if you usually use only one MPI | variant. | | A table, showing all changes to HPF-related compiler | options between Fortran V5.3 and V5.3 ECO 01, is next. | | ___________________________________________________________ | Fortran_V5.3______Fortran_V5.3_ECO_01______________________ | | -assume No change | bigarrays | | -assume nozsize No change | | -hpf_matmul Deleted | | -nearest_ No change | neighbor | | -nowsf_main No change (but currently does not work) | | -pprof Use only with -wsf_target pse | | -show hpf* No change | | -show wsfinfo No change | | -wsf No change | | -_________________-wsf_target_target_______________________ | | Linking HPF Programs with MPI | | You must now specify which variant of MPI support you | wish to use for HPF programs by including the option - | wsf_target with an MPI selection (argument target) in the | link command. An example is next. | | % f90 -wsf 2 -wsf_target cmpi -o lu lu.o | | The values of target come from the table in the section | "Compiling HPF Programs for MPI". | Compaq Fortran Version 5.4 Release Notes 1-31 | If you specified generic MPI at compilation time, either | by including the -wsf_target gmpi option or by setting the | environment variable DECF90_WSF_TARGET to gmpi, you must | specify a path to the desired generic MPI library during | linking. Do this in one of these ways: | | - Set the environment variable DECF90_GMPILIB to the path | of the desired generic MPI library to link with | | - In the link command line, include -l (possibly along | with -L) with the path of the desired generic MPI | library to link with. Or, explicitly add the library | to the link command line. | | An example of a link command for a generic MPI library is | next. | | % f90 -wsf 2 -wsf_target gmpi -o lu lu.o /usr/users/me/libmpich.a | | In addition, you must have the Developer's Tool Kit | software installed on your computer to link properly with | the option -wsf_target gmpi. | | Finally, programs linked with -wsf_target and an MPI target | must be linked with -call_shared (which is the default); | the -non_shared option does not link correctly. | | Running HPF Programs Linked with MPI | | The dmpirun command executes program files created with | the -wsf_target cmpi option. Include the -n n option in | the command line where n is the same value of -wsf n in the | compilation command line. Or, if no value was given with | the -wsf option, then set n to the desired number of peers. | Also include the name of the program file. | | An example is next where the compilation command line | included -wsf 4 and the name of the program file is heat8. | | % dmpirun -n 4 heat8 | | If your AlphaServer SC system is running with Revision A | of the Quadrics switch, your boot log will contain the | message: | | elan0: Rev A Elite network detected - disabling adaptive routing (1) | 1-32 Compaq Fortran Version 5.4 Release Notes To make MPI programs (including HPF programs generated | with the "-wsf_target smpi" option) run properly with | Revision A hardware, you need to set the LIBELAN_GROUP_ | HWBCAST environment variable to DISABLE; for example, from | csh: | | % setenv LIBELAN_GROUP_HWBCAST DISABLE | | The manpage dmpirun contains a full description of this | command. | | The prun command executes program files created with the | -wsf_target smpi option. Include the -n n option in the | command line where n is the same value of -wsf n in the | compilation command line. Or, if no value was given with | the -wsf option, then set n to the desired number of peers. | Also include the name of the program file. | | An example is next where the compilation command line | included -wsf 4 and the name of the program file is heat8. | | % prun -n 4 -N 4 heat8 | | The mpirun command executes program files created with | the -wsf_target gmpi option. Include the -np n option in | the command line where n is the same value of -wsf n in | the compilation command line. Also include the name of the | program file. The mpirun command varies according to where | you installed the generic MPI. | | An example is next where the compilation command line | included -wsf 4 and the name of the program file is heat8. | | % /usr/users/me/mpirun -np 4 heat8 | | In the /usr/examples/hpf directory, there is a sample | script that will launch an HPF program for any variant | of MPI. This script, called "hpfrun", will even determine | the number of processors a source program was compiled | for (if that was specified at compile time), and invoke | the proper MPI run command with the number of processors | specified. Portions of the script, or the entire script, | may be useful for users automating the building and running | of HPF programs. | | Compaq Fortran Version 5.4 Release Notes 1-33 | Cleaning up After Running HPF Programs Linked with MPI | | Execution of the dmpirun command (but not the prun and | mpirun commands) may leave various system resources | allocated after the program has completed. To free them, | give the mpiclean with no arguments. An example is next. | | % mpiclean | | Changing HPF Programs for MPI | | There two changes you should make to Fortran source files | before compiling them for MPI. If a module contains an | EXTRINSIC (HPF_LOCAL) statement and it executes on a system | different from peer 0, then its output intended for stdout | may (depending on the variant of MPI used) go instead to | /dev/null. Change such modules or your execution commands | to have the extrinsic subroutine do input/output only from | peer 0. | | In addition, the ability to call parallel HPF subprograms | from non-parallel (Fortran or non-Fortran) main programs, | is not supported in this release. For more information, see | Chapter 6 of the DIGITAL High Performance Fortran 90 HPF | and PSE Manual. 1.7.4 Version 5.3 New Features The following new Compaq Fortran features are now supported: o The following new features are now supported: - You can now CALL a function. In other words, a routine that is declared to be a FUNCTION can be invoked by a CALL statement. The function's return value is discarded. - Compaq Fortran now supports COMPLEX(KIND=16), also spelled COMPLEX*32. This is a complex number composed of two 128-bit extended floating point numbers (ie, REAL(KIND=16)). Complete documentation is in the updated Compaq Fortran Language Reference Manual as well as the /usr/lib/cmplrs/fort90/decfortran90.hlp help file. Here are some highlights: * COMPLEX*32 or COMPLEX(KIND=16) declares a pair of REAL*16 128-bit reals as a complex pair. It is 32 bytes big. 1-34 Compaq Fortran Version 5.4 Release Notes * COMPLEX*32 constants are (x,y) where at least one of x and y is a REAL*16 constant, eg, (1,2Q0). * COMPLEX arithmetic supports + - * / ** . Mixed type arithmetic converts everything up to COMPLEX*32 since COMPLEX*32 is the biggest. * COMPLEX*32 can be read and written in all I/O forms. * Command line option "-real_size 128" forces "COMPLEX" to be COMPLEX*32 and DOUBLE COMPLEX to be COMPLEX*32. "-double_size 128" forces DOUBLE COMPLEX to be COMPLEX*32. * Intrinsic generic functions that take COMPLEX now take COMPLEX*32. New specific intrinsic functions for COMPLEX*32 are CQABS, QIMAG, QCONJG, CQCOS, CQEXP, CQLOG, QREAL, CQSIN, CQSQRT, QCMPLX. * Operations involving a COMPLEX*16 and a REAL*16 now produce a COMPLEX*32 result. These used to produce a COMPLEX*16 result. - The BUFFERED= keyword has been added to the OPEN and INQUIRE statements. The default is BUFFERED='NO' for all I/O, in which case the RTL empties its internal buffer for each WRITE. If BUFFERED='YES' is specified and the device is a disk, the internal buffer will be filled, possibly by many WRITE statements, before it is emptied. If the OPEN has BUFFERCOUNT and BLOCKSIZE arguments, their product is the size in bytes of the internal buffer. If these are not specified, the default size is 8192 bytes. This internal buffer will grow to hold the largest single record but will never shrink. - Character vector constructors may now have unequal length elements. The length of each element is the maximum of the element lengths. For example, (/ 'ab', 'abc', 'a' /) == (/ 'ab ', 'abc', 'a ' /) o The Compaq Extended Math Library (CXML) routines are updated in the Compaq Fortran kit. See the CXML release notes in: /usr/opt/XMDCOM360/docs/XMD360_release_note.txt Compaq Fortran Version 5.4 Release Notes 1-35 o The following new f90 command options are now supported: - -arch ev67 and -tune ev67 now provide instruction set support and performance tuning for the ev67 processor (21264A chip), which adds the count extension (CIX) instructions POPCNT, LEADZ, and TRAILZ. - -align sequence allows the components of a SEQUENCEd derived type to be aligned according to the alignment rules set by the user. The default alignment rules are to align components on natural boundaries. The default is -align nosequence which means components of a SEQUENCEd derived type will be packed, regardless of the current alignment rules set by the user. - -fast now sets -align sequence so that SEQUENCEd derived type components can be naturally aligned for improved performance. - -fast now sets -arch host -tune host. - -assume buffered_io turns on buffered I/O for all Fortran logical units opened for sequential writing. The default is -assume nobuffered_io. - -Dname=value now allows a quoted string as value. For example, -DDATE="Nov 20, 1999" passes the character string Nov 20, 1999 as the value of DATE to cpp(1) and to the Compaq Fortran 90 compiler. - -warn hpf tells the compiler to do both syntactic and semantics checking on HPF directives. The default is -warn nohpf unless -wsf is specified, in which case -warn hpf is assumed. - -f77rtl tells the compiler to use the run-time behavior of Compaq Fortran 77 instead of Compaq Fortran 90. For example, this affects the output form for NAMELIST. The default is -nof77rtl. - -mixed_str_len_arg tells the compiler that the hidden length passed for a character argument is to be placed immediately after its corresponding character argument in the argument list. The default is - nomixed_str_len_arg, which places the hidden lengths in sequential order at the end of the argument list. 1-36 Compaq Fortran Version 5.4 Release Notes - The file suffix .F90 now tells the driver that the file contains Fortran 90 free-form source that must be preprocessed by cpp(1). cpp(1) produces an intermediate .i90 file that is then compiled. 1.7.5 Version 5.3 Important Information Some important information to note about this release: o As of Compaq Fortran V5.3, the f77 command executes the Compaq Fortran 90 compiler instead of the Compaq Fortran 77 compiler. Use f77 -old_f77 to execute the Compaq Fortran 77 compiler. o There are four INCLUDE files in /usr/include that give definitions of DFAO RTL symbols: - for_fpe_flags.f - flags for for_set/get_fpe(3f) - fordef.f - return values for the fp_class intrinsic - foriosdef.f - values for STAT= IO status results - forompdef.f - interface blocks to the omp_* routines - forreent.f - flags for for_set_reentrancy(3f) o PARAMETER constants ae now alloacted in a read-only PSECT. o Files that contain declarations that will be INCLUDEd into source code should declare data fully so that command line options used to compile the source code do not unexpectedly affect the INCLUDEd declarations. For example, if I is declared INTEGER, then using the -i2 changes I from INTEGER*4 to INTEGER*2. If I is declared INTEGER*4, then its definition is not affected by -i2. 1.7.6 Version 5.3 Corrections From version X5.2-829-4296F ECO 01 to FT1 T5.3-860-4498G, the following corrections have been made: o Fix problem with wrong generated code if an OPTIONAL and omitted descriptor-based dummy argument is passed as an actual argument to a routine which declares that argument as OPTIONAL. Compaq Fortran Version 5.4 Release Notes 1-37 o Fix problem where ASSOCIATED did not always return the correct result for a pointer component that was transferred via pointer assignment. o Enable display of array bounds larger than 32 bits in listing summary. o Fix internal compiler error for certain uses of defined assignment where multiple defined operators appeared in the right-hand side of the assignment. o Add /ALIGN=SEQUENCE (/ALIGN:SEQUENCE, -align sequence) which specifies that SEQUENCE types may be padded for alignment. o Make the default for BLANK= in OPEN match the documentation when the -f66 (/NOF77) switch is specified, which is to default to BLANK='ZERO'. Previously, BLANK='NULL' was used regardless. o Allow array constructors to have scalar CHARACTER source elements of varying size. o Correct problem where a call to a routine with the C and VARYING attributes generates incorrect code. o Make sure that -g3 does not turn off optimization. o Fix internal compiler error for statement function which uses the function return variable of the host function. o Fix internal compiler error for incorrect program which uses an component of a derived type variable in an automatic array bounds expression, the derived type is undefined and IMPLICIT NONE is used. o Fix internal compiler error when RESULT variable has same name as a previously seen FUNCTION. o Fix problem with PUBLIC/PRIVATE attributes in a particular complicated module usage. o Eliminate spurious error message for valid generic procedure reference. o Fix problem with DATA initialization of zero-origin arrays. 1-38 Compaq Fortran Version 5.4 Release Notes o Fix problem where compiler would not allow "# linenum" to appear in a source file if a !DEC$ or !MS$ directive was seen. o Don't give "unused" warning for EQUIVALENCEd variable. o Properly treat INT(n,KIND=) in an array constructor. o Don't disable type checking for %LOC. o Properly parse generic INTERFACE whose name begins with TO. o When -align dcommons is used, make sure that POINTER objects in COMMON are aligned on quadword boundaries. o Correctly parse program with IF construct whose name begins with IF. o Fix a case where two NaNs sometimes compared as equal. o If an attempt is made to DEALLOCATE an item which is not DEALLOCATEable, such as an array slice, a run- time error is now given. Previously, the results were unpredictable. From version FT1 T5.3-860-4498G to FT2 T5.3-893-4499U, the following corrections have been made: o Allocate all PARAMETER constants in a read-only PSECT. o Ensure that locally-allocated derived-type arrays are naturally aligned. o Generate correct code for pointer assignment of an array generated from a section of a derived type. o Eliminate internal compiler error in certain cases with dummy argument that has OPTIONAL and INTENT(OUT) attributes. o Flag square-bracket array constructor syntax as an extension. o Eliminate internal compiler error for certain uses of TRANSFER. o Properly detect ambiguous generic reference when all distinguishing arguments are OPTIONAL. o Eliminate internal compiler error for a case involving a PRIVATE POINTER in a module. Compaq Fortran Version 5.4 Release Notes 1-39 o Eliminate spurious "this name has already been used as an external procedure" error for recursive function which returns a derived type. o "Directive not supported on this platform" diagnostic is now informational, not warning severity. o Allow array sections in DATA statement variable list. From version FT2 T5.3-893-4499U to V5.3-915-449BB, the following corrections have been made: o Eliminate access violation on some platforms for ALLOCATE of pointer in a derived type. o Correct problem where compiler could omit putting out declaration for a routine symbol. o Handle non-present, optional dummy arguments as third argument to INDEX, SPAN, and VERIFY. o Generate correct code when passing character array slices as arguments. o Fix case of contiguous array slice as first argument to TRANSFER. o Fix INQUIRE by IOLIST of ALLOCATABLE arrays. o Correct problem involving pointer assignment with sections of a derived type. o Eliminate inappropriate error messages when overloading SIGN intrinsic. o Eliminate internal compiler error when "-" defined as both unary and binary operators in separate modules. o Eliminate spurious unused warning for pointer target. o Implement OMP interpretation regarding DEFAULT(NONE). o Eliminate spurious standards diagnostic for !DEC$ UNROLL. o Correct problem with accessibility of NAMELIST names from module. o When -real_size 64 and -double_size 128 are used, make sure DOUBLE PRECISION gets REAL*16. 1-40 Compaq Fortran Version 5.4 Release Notes o Correct evaluation of FLOAT intrinsic with -real_size 64. o Correct problem with array constructors in format expressions. 1.7.7 HPF in Compaq Fortran Version 5.3 As in Fortran 90 Version 5.2, the HPFLIBS subset replaces the old PSESHPF subset. If you previously installed the PSESHPF subset you do not need to delete it. If you choose to delete it, delete it before you install the Fortran 90 V5.3 HPFLIBS170 subset. If you delete the PSESHPF subset after you install the Fortran HPFLIBS170 subset, you need to delete the HPFLIBS170 subset and then reinstall it. For information on using the setld command to check for and delete subsets, see the Compaq Fortran Installation Guide for Tru64 UNIX Systems. To execute HPF programs compiled with the -wsf switch you must have both PSE160 and Fortran 90 Version 5.3 with the HPFLIBS170 subset installed. For this release the order of the installation is important. You must first install PSE160 and then install Fortran 90 Version 5.3 with the HPFLIBS170 subset. The HPFLIBS170 subset must be installed last. If you do this it will be properly installed. If you also need to use the latest versions of MPI and PVM, you must install PSE180. PSE180 contains only MPI and PVM support. The support for HPF programs compiled with the -wsf option is only found in PSE160. Therefore you must install both versions of PSE and you must install PSE180 after PSE160. To install Compaq Fortran with HPF and MPI and PVM, install them in the following order. The order is very important. 1. Delete any old versions that you wish to delete. 2. Install PSE160. 3. Install Compaq Fortran Version 5.3 including the HPFLIBS170 subset. 4. Install PSE180. Compaq Fortran Version 5.4 Release Notes 1-41 The HPF runtime libraries in Compaq Fortran Version 5.3 are only compatible with PSE Version 1.6. Programs compiled with this version will not run correctly with older versions of PSE. In addition, programs compiled with older compilers will no longer run correctly when linked with programs compiled with this version. Relinking is not sufficient; programs must be recompiled and relinked. If you cannot install these in the order described, follow these directions to correct the installation: o If you have installed Fortran Version 5.3 but are missing PSE160, then install PSE160. Delete the HPFLIBS170 subset of Fortran V5.3 and then reinstall the HPFLIBS170 subset. o If you installed Fortran Version 5.3 first and then PSE160, then delete the HPFLIBS170 subset of Fortran V5.3. Next, reinstall the HPFLIBS170 subset. o If you already have Fortran Version 5.3 and PSE160 installed but did not install the HPFLIBS170 subset of Fortran V5.3, then simply install the HPFLIBS170 subset. o If you deleted any old PSESHPF subset after installing Fortran V5.3, this will also cause problems. In this case delete the HPFLIBS170 subset of Fortran Version 5.3 and then reinstall the HPFLIBS170 subset. o If you installed PSE180 before PSE160, then delete PSE180 and reinstall it now. For more information about installing PSE160, see the Compaq Parallel Software Environment Release Notes, Version 1.6. For more information about installing PSE180, see the Compaq Parallel Software Environment Release Notes, Version 1.8. 1-42 Compaq Fortran Version 5.4 Release Notes 1.7.8 Version 5.3 Known Problems The following known problems exist with Compaq Fortran Version 5.3: o The following is a list of known problems for -omp parallel support in Version 5.3: - Nested parallel regions are not supported by -omp. A program that contains nested parallel regions will cause the compiler to fail with an internal error. 1.8 New Features, Corrections, and Known Problems in Version 5.2 Version 5.2 is a minor release that includes corrections to problems discovered since Version 5.1 was released and certain new features. The following topics are discussed: o Section 1.8.1 (Version 5.2 ECO 01 New Features) o Section 1.8.2 (Version 5.2 New Features) o Section 1.8.3 (Version 5.2 Important Information) o Section 1.8.4 (Version 5.2 Corrections) 1.8.1 Version 5.2 ECO 01 New Features The following new Compaq Fortran (DIGITAL Fortran 90) features are now supported: o IVDEP Directive The IVDEP directive assists the compiler's dependence analysis. It can also be specified as INIT_DEP_FWD (INITialize DEPendences ForWarD). The IVDEP directive takes the following form: cDEC$ IVDEP c Is one of the following: C (or c), !, or *. The IVDEP directive is an assertion to the compiler's optimizer about the order of memory references inside a DO loop. Compaq Fortran Version 5.4 Release Notes 1-43 The IVDEP directive tells the compiler to begin dependence analysis by assuming all dependences occur in the same forward direction as their appearance in the normal scalar execution order. This contrasts with normal compiler behavior, which is for the dependence analysis to make no initial assumptions about the direction of a dependence. The IVDEP directive must precede the DO statement for each DO loop it affects. No source code lines, other than the following, can be placed between the IVDEP directive statement and the DO statement: o An UNROLL directive o A PARALLEL DO directive (TU*X only) o A PDO directive (TU*X only) o Placeholder lines o Comment lines o Blank lines The IVDEP directive is applied to a DO loop in which you know that dependences are in lexical order. For example, if two memory references in the loop touch the same memory location and one of them modifies the memory location, then the first reference to touch the location has to be the one that appears earlier lexically in the program source code. This assumes that the right-hand side of an assignment statement is "earlier" than the left-hand side. The IVDEP directive informs the compiler that the program would behave correctly if the statements were executed in certain orders other than the sequential execution order, such as executing the first statement or block to completion for all iterations, then the next statement or block for all iterations, and so forth. The optimizer can use this information, along with whatever else it can prove about the dependences, to choose other execution orders. Example 1-44 Compaq Fortran Version 5.4 Release Notes In the following example, the IVDEP directive provides more information about the dependences within the loop, which may enable loop transformations to occur: !DEC$ IVDEP DO I=1, N A(INDARR(I)) = A(INDARR(I)) + B(I) END DO In this case, the scalar execution order follows: 1. Retrieve INDARR(I). 2. Use the result from step 1 to retrieve A(INDARR(I)). 3. Retrieve B(I). 4. Add the results from steps 2 and 3. 5. Store the results from step 4 into the location indicated by A(INDARR(I)) from step 1. IVDEP directs the compiler to initially assume that when steps 1 and 5 access a common memory location, step 1 always accesses the location first because step 1 occurs earlier in the execution sequence. This approach lets the compiler reorder instructions, as long as it chooses an instruction schedule that maintains the relative order of the array references. o UNROLL Directive The UNROLL directive tells the compiler's optimizer how many times to unroll a DO loop. It takes the following form: cDEC$ UNROLL [(n)] c Is one of the following: C (or c), !, or *. n Is an integer constant. The range of "n" is 0 through 255. The UNROLL directive must precede the DO statement for each DO loop it affects. No source code lines, other than the following, can be placed between the UNROLL directive statement and the DO statement: o An IVDEP directive o A PARALLEL DO directive (TU*X only) Compaq Fortran Version 5.4 Release Notes 1-45 o A PDO directive (TU*X only) o Placeholder lines o Comment lines o Blank lines If "n" is specified, the optimizer unrolls the loop "n" times. If "n" is omitted, or if it is outside the allowed range, the optimizer picks the number of times to unroll the loop. The UNROLL directive overrides any setting of loop unrolling from the command line. Some important information to note about this release: o -fast now implies "-arch host -tune host" as defaults. These can be overridden with explicit options. Note that this has an impact on redistributed programs - if they are to run on older generation processors than the compiling host, -arch, at least, must be overridden. o The command line option "-source_listing" is not documented but it produces a listing file with a file extension of ".lis" {as opposed to "-V" which produces a .l listing file}. o This ECO release includes the two subsets XMDLOA351 (DXML serial libraries) and XMDPLL351 (DXML parallel libraries). o Note that there is an installation order issue with PSE: PSE160 should be installed BEFORE Fortran, since the Fortran kit has newer HPF libraries. If you are also using MPI and/or PVM, then there is also a dependency with the latest MPI/PVM kits, which are in PSE V1.8 (PSE180): the installation order needs to be PSE160 then Fortran then PSE180 OR PSE160 then PSE180 then Fortran. From version V5.2-705-428BH to X5.2-829-4296F, the following corrections have been made: o Correct a problem with PACK when the first argument is a two-dimensional slice of a three-dimensional array. o Correct problem with ADJUSTL, ADJUSTR and COTAN with array element arguments. 1-46 Compaq Fortran Version 5.4 Release Notes o Fix internal compiler error for certain uses of LL* intrinsics. o Prevent internal compiler error when the size of a return value is based on a call to a pure function with the argument to this function. o Correct problems with nested uses of SPREAD intrinsic. o Make ASSOCIATED return the correct result when the target is an element of a deferred-shape array. o Correct a problem with a USE...ONLY of some symbols from an EQUIVALENCE group in a module. Previously, the compiler might generate an external reference to the wrong symbol. o Correct a problem with EOSHIFT of a structure array with a multidimensional structure component. o Eliminate the unnecessary use of temporary array copies in many cases. o Add support for specific names IMVBITS, JMVBITS and KMVBITS (already documented). o Correct a problem where calling an ELEMENTAL routine with a pointer array may give incorrect results. o Fix transfer intrinsic where the MOLD is a character substring with non-zero base, e.g., TRANSFER(X, CH(I1:I2)). o Fix problem where CSHIFT of an array of derived type generated bad code. o Correct problem with pointer assignment when the right- hand-side is an array of derived types. o Correct problems involving function return value whose size depends on properties of input arguments. o Fix problem that caused internal compiler error with RESHAPE. o Fix problem where IBCLR of mixed-kind arguments gave wrong answer. o When fpp is invoked, have it also look in the current directory for include files. Compaq Fortran Version 5.4 Release Notes 1-47 o Correct problem with I/O of a slice of an assumed-size array. o Issue error message for lexically nested parallel regions. o In listing summary, list zero-length COMMON PSECTs. o Eliminate spurious warning when passing a POINTER or assumed-shape array in COMMON to a routine with a compatible dummy argument declaration. o Fix internal compiler error involving array-valued functions with entry points. o Generate correct code for unusual (and non-standard) dummy aliasing case involving an EQUIVALENCEd variable passed as an argument. o Fix problem with incorrect code for a call to ALLOCATE or DEALLOCATE where STAT= is specified using an array element. o -fast now implies -arch host -tune host as defaults. These can be overridden with explicit options. Note that this has an impact on redistributed programs - if they are to run on older generation processors than the compiling host, -arch, at least, must be overridden. o Fix internal compiler error for certain programs which CALL a function. o Correct compiler abort with ASSOCIATED (X,(Y)) o Don't give standards warning for ELEMENTAL PURE. o Consider FORALL index variables "used" for -warn unused purposes. o Disallow leading underscore in identifiers, as documented. o Correct problem with implied DO loop in non-INTEGER array constructors in initialization expressions. o Allow expression involving array constructors in an initialization expression. o %LOC is treated the same as LOC for type checking purposes. 1-48 Compaq Fortran Version 5.4 Release Notes o Correct problem involving generic routine resolution. o SEQUENCE now byte-packs fields, as the documentation says. o Correct compiler abort with RESHAPE in initialization expression. o Correct compiler abort for case with defined operators. o Correct compiler abort for syntax error X(;,:) o Give appropriate error if DO loop variable is too small for range. o Correct compiler abort for LEN_TRIM(array) in initialization expression. o Correct compiler abort for SIZE(non-array). o Correct problems with ISHFT(array) in initialization expression. o Allow SHAPE in initialization expression. o Don't give standards warning for use of INDEX in initialization expression. o Consider statement function dummy argument "used" for /warn=unused. o Correct compiler abort for invalid syntax in a Variable Format Expression (VFE). o Correct compiler abort for module procedure with ENTRY. o Allow full set of F95-permitted intrinsic functions in specification expressions. o Correct compiler abort with invalid VFE in FORMAT. o Correct problem with accessibility of MODULE symbols when two modules define the symbol but one has marked it PRIVATE. o Correct compiler abort for certain programs when -i8 and -wsf specified. o Correct problem with missing and duplicate alignment warnings. o Allow repeated NULL() in DATA initialization when variables have different types. Compaq Fortran Version 5.4 Release Notes 1-49 o Correct spurious "shapes do not conform" error. o Correct compiler abort for invalid program using wrong component in ASSOCIATED. o When -names as_is specified, don't make IMPLICIT case- sensitive. o Give standards warning for Q exponent letter in floating literals. o Generate correct code for generic which replaces MIN or MAX. o Give more reasonable error message when variable used as control construct name. o Eliminate spurious message for vector-valued subscript in defined assignment. o Give error if INTENT not properly specified for defined assignment. o Correct internal compiler error for overloaded MAX. o Eliminate spurious warning for FORALL. o Give warning when INTENT(IN) argument modified in PURE FUNCTION. o Eliminate spurious error for valid DATA with array subscript. o Allow ORDER in RESHAPE to be non-constant. o Fix compiler abort with RESHAPE. o Don't give unused warning for TARGET argument used in pointer assignment. o Properly distinguish STRUCTUREs with the same name in different CONTAINed routines. o Allow NULL() to initialize a pointer to derived type. o Incorrect warning for variable IF when -omp specified. o Don't give unused warning for array constructor implied- DO variable. o Allow INTRINSIC :: name (new in F95). 1-50 Compaq Fortran Version 5.4 Release Notes o Eliminate spurious standards warning for certain obscure uses of UNPACK. o Eliminate compiler abort when transformational intrinsic used (illegally) in statement function. o Raise limit of number of items in a FORMAT from 200 to 2048. o Disallow invalid INTENT keywords. o Allow CALL of a typed identifier (Compaq Fortran 77 extension). o Correct problem where USE-associated identifiers aren't seen in certain cases involving renaming. o Correctly evaluate CEIL intrinsic when used in a specification expression. o Allow SIZE intrinsic to be overloaded. o Don't issue spurious "function value has not been defined" warning for case involving ENTRY and RESULT. o Fix internal compiler error involving defined assignment. o Fix problem with incorrect CHARACTER initialization values and CHAR function. o Disallow array constructor being used to initialize a scalar. o Allow ALLOCATE/DEALLOCATE of argument to PURE SUBROUTINE. o Fix problem for certain uses of period separators for derived type fields. o Eliminate spurious syntax error for use-associated variable in NAMELIST. o Eliminate spurious syntax error for certain uses of variable format expression in FMT=. o Allow as an extension the use of a name previously seen in a CALL statement as an actual argument without an EXTERNAL statement or explicit interface. o Eliminate spurious overflow message for MS-style base-2 constant. Compaq Fortran Version 5.4 Release Notes 1-51 o Correct problem with generic routine matching. o Correct internal compiler error when function return value used in statement function expression. 1.8.2 Version 5.2 New Features Version 5.2 supports the following new features : o The following new features are now supported: - The f90 compiler now gives "uninitialized variable" warnings at optimization levels lower than -O4. - The RTL now has support for handling units *, 5 and 6 as separate units. Use of this feature, requires both RTL and compiler support. Programs must be compiled with a version of the compiler that implements this support and linked with or use a shareable RTL that implements the support. Older existing images will continue to work with the newer RTL. As a consequence of separating the units: if you were to connect unit 6 to a file, and then write to unit * - that write would produce output to the console (or stdout device). Previous to this, a write to unit * would go to the same file connected to unit 6. This new behavior is consistent to that of VMS and MS-FPS. - For F90, a NAMELIST input group can start with either an ampersand (&) or dollar sign ($) in any column and can be terminated by one of a slash (/), an ampersand (&) or a dollar sign($) in any column. o The DIGITAL Extended Math Library (DXML) routines are now included in the Compaq (DIGITAL) Fortran kit. o The following new f90 command options are now supported: - -assume gfullpath causes the full source file path to be included in the debug information. The default is -assume nogfullpath. - -assume [no]pthreads_lock lets you select the kind of locking used for an unnamed critical section (when parallel processing is requested with -mp or -omp). Using the default, -assume nopthreads_lock, provides the fastest performance by providing a single lock 1-52 Compaq Fortran Version 5.4 Release Notes for all unnamed critical sections (but does not lock out other process threads). To request more restrictive locking, specify -assume pthreads_lock. This locks out all other process threads in addition to all critical sections, which slows application performance. When using -assume nopthreads_lock (default), enter critical is used with the _OtsGlobalLock argument. With -assume pthreads_lock, enter critical is used with the _OtsPthreadLock argument. - -arch ev6 generates instructions for ev6 processors (21264 chips). This option permits the compiler to generate any EV6 instruction, including instructions contained in the BWX (Byte/Word manipulation instructions) or MAX (Multimedia instructions) extension, square root and floating-point convert, and count extension. Applications compiled with this option may incur emulation overhead on ev4, ev5, ev56, and pca56 processors, but will still run correctly. 1.8.3 Version 5.2 Important Information Some important information to note about this release: o UNIX Virtual Memory from the Compaq Tru64 UNIX docset There is a new manual in V4.0D of the docset: "System Configuration and Tuning". Section 4.7.3 from that book is "Increasing the Available Address Space". If your applications are memory-intensive, you may want to increase the available address space. Increasing the address space will cause only a small increase in the demand for memory. However, you may not want to increase the address space if your applications use many forked processes. The following attributes determine the available address space for processes: vm-maxvas Compaq Fortran Version 5.4 Release Notes 1-53 This attribute controls the maximum amount of virtual address space available to a process. The default value is 1 GB (1073741824). For Internet servers, you may want to increase this value to 10 GB. per-proc-address-space max-per-proc-address-size These attributes control the maximum amount of user process address space, which is the maximum number of valid virtual regions. The default value for both attributes is 1 GB. per-proc-stack-size max-per-proc-stack-size These attributes control the maximum size of a user process stack. The default value of the per-proc- stack-size attribute is 2097152 bytes. The default value of the max-per-proc-stack-size attribute is 33554432 bytes. You may need to increase these values if you receive cannot grow stack messages. per-proc-data-size max-per-proc-data-size These attributes control the maximum size of a user process data segment. The default value of the per- proc-data-size attribute is 134217728 bytes. The default value of the max-per-proc-data-size is 1 GB. You can use the setrlimit function to control the consumption of system resources by a parent process and its child processes. See setrlimit(2) for information. o If you try to link -non_shared a parallel application that uses -mp or -omp, you must explicitly add -lpset in addition to the libraries f90 links in. o The -noD command switch is now available to allow symbol definitions (using -D) to be passed to fpp but not to be passed to the conditional compilation facilty inside the f90 compiler. o When -arch ev6 is used, the f90 driver will add -qlm_ev6 before -lm on the cc command so ld will look for the EV6-tuned math library. 1-54 Compaq Fortran Version 5.4 Release Notes o Please note the behavior of NOWAIT reductions: each thread contributes its part, and proceeds without waiting for the final value of the reduction variable. The reduction variable's value is undefined until a synchronization operation has occurred, or the parallel region is left. o UNIX v4.0D contains ld options to restrict library searches to shared and archived libraries. See -no_ so, -no_archive, and -so_archive in the ld(1) man page. o Use the setld -D option to install the software to another root directory. Everything in the installation then hangs off that root. Commands like f90 can be pointed to by PATH, the DECF90 environment variable can point to where the compiler is, -L can tell f90 where the RTL is, and the LD_LIBRARY_PATH environment variable can be used to ensure that the desired version of shareable libraries are picked up at run time. 1.8.4 Version 5.2 Corrections From version V5.1-594-3882K to FT1 T5.2-682-4289P, the following corrections have been made: o Don't create stack temporary for character operands to ALL except when absolutely necessary. o Add -warn argument_checking warning for mismatch between INTEGER kinds with explicit interface. o Add -warn argument_checking warning for insufficent arguments. o Improve display of various diagnostic messages so that the "pointer" is more appropriate. o Fix internal compiler error when compiling a -mp or -omp program with any COMMON or EQUIVALENCED data declared in a PRIVATE, LASTPRIVATE, FIRSTPRIVATE, or REDUCTION list. o Fix problem with TRANSFER of CHARACTER items using non-1 substring offset. o Don't give use-before-defined warning for pointer structure assignment. o Allow LOC(intrinsic_name). o Allow RECORDs of empty STRUCTUREs. Compaq Fortran Version 5.4 Release Notes 1-55 o Allow repeat counts in FORMATs to be up to 2147483647. o Always quadword-align EQUIVALENCE groups. o Prevent internal compiler error with very long list of -D definitions. o Correct problem relating to use of an AUTOMATIC array in a parallel region. o Allow contained function result to have dimension bounds depend upon size of one of its array arguments. o Eliminate inappropriate argument mismatch warning with record structures when -wsf is specified. Add support for -assume gfullpath, which causes the full source file path to be included in the debug information. o If -check bounds is in effect, don't optimize implied- DO in I/O as this can prevent bounds checking from occurring. o Eliminate inappropriate use-before-defined warnings when passing array slices. o Improve generated code when calling routines with INTENT(IN). Prevent an output statement (WRITE, etc.) from inhibiting use-before-defined warnings. o Improve generated code when calling intrinsic functions. o -fast or -math_library fast implies -check nopower. o Fortran 90 interpretation 100 - ASSOCIATED of two zero- sized arrays always returns .FALSE.. o Eliminate internal compiler error for LOC(character- parameter-constant) o Eliminate "text handle table overflow" errors for certain programs that had very large and complicated single statements (e.g., DATA). o Allow structure field names which are the same as relational operators. o In pointer assignment, where the right-hand-side is a structure constructor, enforce the standard's requirement that the constructor expression be an allowable target. 1-56 Compaq Fortran Version 5.4 Release Notes o Allow a module procedure as an actual argument. o Eliminate inappropriate error about use of PRIVATE type declared later in the module. o Eliminate parsing error where a KIND specifier is continued across multiple source lines. o Eliminate parsing error involving an assignment to a variable whose name begins with "PARAMETER". o When passing an element of a named array constant as an actual argument, make sure that sequence association works as if it had been a variable. o Correct problem with visibility of inherited identifier. o Eliminate internal compiler error for PARAMETER declaration where the constant value is an undefined identifier. o Eliminate internal compiler error involving a statement function having the same name as another routine in the same compilation. o Make severity of -warnings declarations diagnostics warning instead of error. o Eliminate internal compiler error when all source is conditionalized away. o Eliminate internal compiler error for certain programs which use TRANSFER in a PARAMETER declaration. o Allow a tab character in a FORMAT. o Assume INTEGER type for bit constants where required. o Don't sign extend result of ICHAR in a PARAMETER definition. o Eliminate internal compiler error for certain programs using functions with mask arguments. o Make !DEC$ATTRIBUTES (no space) work in any column in fixed-form. o Give proper error instead of internal compiler error when QFLOAT used on platforms that don't support REAL*16. Compaq Fortran Version 5.4 Release Notes 1-57 o Don't consider a DECODE to modify the buffer argument for purposes of INTENT. o Eliminate internal compiler error for certain programs when -assume dummy_aliases is in effect. o Correct problem with certain programs using STRUCTUREs with %FILL fields. o When -real_size 64 is in effect, intrinsics with explicitly REAL*4 or COMPLEX*8 arguments are no longer inappropriately promoted to REAL*8/COMPLEX*16. o Do not cause internal compiler error for reference to undefined user operator. o Allow use of an array-constructor's implied DO variable in a specification expression. o Allow SIZE argument to be omitted to IISHFTC, JISHFTC, KISHFTC. o Make result type of IBSET, IBCLR, IBITS, etc. be type of the first argument. o Allow up to 256 arguments to an intrinsic function (e.g., MAX, MIN) in a specification expression - the previous limit was 8. o Give error for passing an array section with vector subscript to INTENT(INOUT) or INTENT(OUT) argument. o Fix internal compiler error for use in the length specification expression for a function LEN(concatenation) where one of the concatenation arguments is a passed-length argument to the function being declared. o Fix internal compiler error for use in the length specification expression for a function LEN(TRIM(arg)) where arg is a passed-length argument to the function being declared. o Treat a negative declared length for a CHARACTER variable as if it were zero. o Properly parse "ELSE IFCONSTRUCT" where CONSTRUCT is a construct name. 1-58 Compaq Fortran Version 5.4 Release Notes o Give an error when an AUTOMATIC variable is DATA initialized. o Properly propagate (or not) PRIVATE attribute for nested USE. o Eliminate undeserved argument conformance error in certain cases involving WHERE masks. o Ensure that the return kind of ICHAR is "default integer", no matter what kind that is (due to integer_ size switch). o Fix internal compiler error for type constructor with string argument for numeric element. o Fix internal compiler error when an INTERFACE TO block has certain syntax errors. o Correctly parse non-standard 'n syntax for REC= in I/O statement when the I/O list contains a quoted literal. o Fix problem relating to ONLY and nested USE. o Make variables whose names begin with $ have implicit INTEGER type. o Allow $ in the range for IMPLICIT (sorts after Z). o If a program has multiple USE statements where the module files cannot be found, give error messages for each of them. o Allow SIZEOF in EQUIVALENCE array index. o Fix internal compiler error with certain array initializers containing an implied DO. o Accept F95-style reference to MAXVAL, MINVAL, MAXLOC, MINLOC with a mask as a second non-keyword argument. o Accept F95-style reference to PRODUCT and SUM with a mask as a second non-keyword argument. o Don't give inappropriate alignment warnings for REAL*16 variables in COMMON. o Don't give error message for empty FORALL statement body. o Allow FORALL to be nested 7 deep (previous limit was 3). Compaq Fortran Version 5.4 Release Notes 1-59 o Correctly parse certain complex instances of named FORALL. o Allow RESULT of ENTRY to have same name as host FUNCTION. o Demote diagnostic for not using all active combinations of FORALL index names from error to warning. o Eliminate inappropriate error for certain uses of intrinsic functions in a specification expression. o Eliminate internal compiler error for a peculiar (and erroneous) case of a USE of a NAMELIST whose group contains a variable inherited from another module but which isn't visible due to an ONLY list. o Make OPTIONS /EXTEND_SOURCE persistent across an INCLUDE. o Add support for defined assignment statement from within a WHERE statement. o Allow a function result length to be computed using a field of an array element, where the array is a derived type passed as a dummy argument. o Fix problem with functions returning complex /doublecomplex. From version FT1 T5.2-682-4289P to FT2 T5.2-695-428AU, the following corrections have been made: o Allow an ALLOCATABLE variable to be PRIVATE in a parallel scope. o Support ISHC for INTEGER*8. o Correct problem with overlapping CHARACTER assignment in FORALL. o Correct debug information for CHARACTER POINTERs. o Correct problems with ISHFTC which can cause alignment errors. o Correct problem with FORALL and WHERE with non-default integer size. o Don't issue spurious UNUSED warning for argument whose interface comes from a MODULE. 1-60 Compaq Fortran Version 5.4 Release Notes o Fix internal compiler error for invalid IMPLICIT syntax. o Eliminate inappropriate type mismatch error for certain cases of references to a generic procedure with a procedure argument. o Allow use of . field separator in addition to % in ALLOCATE/DEALLOCATE. o Give warning of unused variable in module procedure when appropriate. o Do not allow a non-integer/logical expression in a logical IF. o Fix another case of recognizing a RECORD field that has the same name as a relational operator. o Correct compiler failure for CMPLX(R8,R8) when real_ size=64 is in effect. o Allow gaps in keyword names in MAX/MIN, for example MAX(A1=x,A4=y). o Correct compiler failure when a COMPLEX array is initialized with a REAL array constructor. o Correct compiler failure when the CHAR intrinsic is used in an initialization expression. o Correct compiler failure ("possible out of order or missing USE") in certain uses of nested MODULEs and ONLY. o Show correct source pointer for syntax error in declaration. From version FT2 T5.2-695-428AU to V5.2-705-428BH, the following corrections have been made: o The compiler now accepts a new DEFAULT keyword on the !DEC$ ATTRIBUTES directive. This tells the compiler to ignore any compiler options that change external routine or COMMON block naming or argument passing conventions, and uses just the other attributes specified (if any). The options which this affects are -names and -assume underscore. Compaq Fortran Version 5.4 Release Notes 1-61 o Avoid giving a spurious "Inconsistent THREADPRIVATE declaration of common block" error if one COMMON block has a name which is an initial substring of another and one of them is named in a THREADPRIVATE directive. o Prevent FUSE XREF from dying when !DEC$ ATTRIBUTES is used. o Add support for -source_listing option. The listing file has the extension .lis. o The f66 option now establishes OPEN defaults of STATUS='NEW' and BLANK='ZERO'. o Correct compiler failure with RESHAPE and SHAPE used in an initialization expression. o Eliminate spurious error when a defined operator is used in a specification expression o Correct compiler failure when undefined user-defined operator is seen. o Eliminate spurious error when component of derived type named constant is used in a context where a constant is required. o Correct problem with host association and contained procedure. o Correct compiler failure with WHERE when non-default integer_size is in effect. 1.9 High Performance Fortran (HPF) Support in Version 5.2 Compaq Fortran (DIGITAL Fortran 90) Version 5.2 supports the entire High Performance Fortran (HPF) Version 2.0 specification with the following exceptions: o Nested FORALL statements o WHERE statements within FORALL statements o Passing CYCLIC(N) arguments to EXTRINSIC (HPF_LOCAL) routines. See Section 1.9.5.3. o Accessing non-local data (other than arguments) within PURE functions in FORALL statements o SORT_UP library procedure 1-62 Compaq Fortran Version 5.4 Release Notes o SORT_DOWN library procedure In addition, the compiler supports many HPF Version 2.0 approved extensions including: o Extrinsic (HPF_LOCAL) routines o Extrinsic (HPF_SERIAL) routines o Mapping of derived type components o Pointers to mapped objects o Shadow-width declarations o All HPF_LOCAL_LIBRARY routines (except LOCAL_BLKCNT, LOCAL_LINDEX, and LOCAL_UINDEX). Other exceptions are the approved extensions to HPF_LOCAL_LIBRARY routines. o ON directive within INDEPENDENT loops o RESIDENT directive used with INDEPENDENT loops 1.9.1 Optimization This section contains release notes relevant to increasing code performance. You should also refer to Chapter 7 of the DIGITAL High Performance Fortran 90 HPF and PSE Manual for more detail. 1.9.1.1 The -fast Compile-Time Option To get optimal performance from the compiler, use the -fast option if possible. Use of the -fast option is not permitted in certain cases, such as programs with zero-sized data objects or with very small nearest-neighbor arrays. For More Information: o On the cases where use of -fast is not permitted, see the "Optimizing" and "Compiling" chapters of the DIGITAL High Performance Fortran 90 HPF and PSE Manual. Compaq Fortran Version 5.4 Release Notes 1-63 1.9.1.2 Non-Parallel Execution of Code The following constructs are not handled in parallel: o Reductions with non-constant DIM argument. o CSHIFT, EOSHIFT and SPREAD with non-constant DIM argument. o Some array-constructors o PACK, UNPACK, RESHAPE o xxx_PREFIX, xxx_SUFFIX, GRADE_UP, GRADE_DOWN o In the current implementation of Compaq Fortran 95/90, all I/O operations are serialized through a single processor; see Chapter 7 of the DIGITAL High Performance Fortran 90 HPF and PSE Manual for more details o Date and time intrinsics, including DATE_AND_TIME, SYSTEM_CLOCK, DATE, IDATE, TIME, and SECNDS If an expression contains a non-parallel construct, the entire statement containing the expression is executed in a nonparallel fashion. The use of such constructs can cause degradation of performance. Compaq recommends avoiding the use of constructs to which the above conditions apply in the computationally intensive kernel of a routine or program. 1.9.1.3 INDEPENDENT DO Loops Currently Parallelized Not all INDEPENDENT DO loops are currently parallelized. It is important to use the -show hpf or -show hpf_indep compile-time option, which will give a message whenever a loop marked INDEPENDENT is not parallelized. Currently, a nest of INDEPENDENT DO loops is parallelized whenever the following conditions are met: o When INDEPENDENT DO loops are nested, the NEW keyword must be used to assert that all loop variables (except the outer loop variable) are NEW. It is recommended that the outer DO loop variable be in the NEW list, as well. o The loop does not contain any of the constructs listed in Section 1.9.1.2 that cause non-parallel execution. 1-64 Compaq Fortran Version 5.4 Release Notes o Each subscript of each array reference must either - contain no references to INDEPENDENT DO loop variables, or - contain one reference to an INDEPENDENT DO loop variable and the subscript expression is an affine function of that DO loop variable. o At least one array reference must reference all the independent loops in a nest of independent loops. o The compiler must be able to prove that loop nest either - requires no inter-processor communication, or - can be made to require no inter-processor communication with compiler-generated copyin/copyout code around the loop nest. o Any reductions in an interior (i.e. any but the outer) loop may use an INDEPENDENT DO index as a subscript only if that index represents a serially distributed dimension of the array. An exception to this is the index of the outermost DO loop, which may be used as a subscript even if it represents a non-serially distributed array dimension. o There must not be any assignments to scalars, except for NEW or reduction variables. o Any procedure call inside an INDEPENDENT DO loop must either be PURE, or be encapsulated in an ON HOME RESIDENT region (see Section 1.9.5.6). When the entire loop nest is encapsulated in an ON HOME RESIDENT region, then only the first two restrictions apply. For More Information: o On enclosing INDEPENDENT DO loops in an ON HOME RESIDENT region, see Section 1.9.5.6 Compaq Fortran Version 5.4 Release Notes 1-65 1.9.1.4 Nearest-Neighbor Optimization The following is a list of conditions that must be satisfied in an array assignment, FORALL statement, or INDEPENDENT DO loop in order to take advantage of the nearest-neighbor optimization: o Relevant arrays with the POINTER or TARGET attributes must have shadow edges explicitly declared with the SHADOW directive. o The arrays involved in the nearest-neighbor style assignment statements should not be module variables or variables assigned by USE association. However, if both the actual and all associated dummies are assigned a shadow-edge width with the SHADOW directive, this restriction is lifted. o A value must be specified for the -wsf option on the command line. o Some interprocessor communication must be necessary in the statement. o Corresponding dimensions of an array must be distributed in the same way (though they can be offset using an ALIGN directive). If the -nearest_neighbor flag's optional nn field is used to specify a maximum shadow- edge width, only constructs with a subscript difference (adjusted for any ALIGN offset) less than or equal to the value specified by nn will be recognized as nearest neighbor. For example, the assignment statement (FORALL (i=1:n) A(i) = B(i-3)) has a subscript difference of 3. In a program compiled with the flag -nearest_neighbor 2, this assignment statement would not be eligible for the nearest neighbor optimization. o The left-hand side array must be distributed BLOCK in at least one dimension. o The arrays must not have complicated subscripts (no vector-valued subscripts, and any subscripts containing a FORALL index must be affine functions of one FORALL index; further, that FORALL index must not be repeated in any other subscript of a particular array reference). o Statements with scalar subscripts are eligible only if that array dimension is (effectively) mapped serially. 1-66 Compaq Fortran Version 5.4 Release Notes o Subscript triplet strides must be known at compile time and be greater than 0. o The arrays must be distributed BLOCK or serial (*) in each dimension. Compile with the -show hpf or -show hpf_nearest switch to see which lines are treated as nearest-neighbor. Nearest-neighbor communications are not profiled by the pprof profiler. See the section about the pprof Profile Analysis Tool in the Parallel Software Environment (PSE) Version 1.6 release notes. For More Information: o On profiling nearest-neighbor computations, see the section about the pprof Profile Analysis Tool in the Parallel Software Environment (PSE) Version 1.6 release notes. o On using EOSHIFT for nearest-neighbor computations, see Section 1.9.1.6 1.9.1.5 Widths Given with the SHADOW Directive Agree with Automatically Generated Widths When compiler-determined shadow widths don't agree with the widths given with the SHADOW directive, less efficient code will usually be generated. To avoid this problem, create a version of your program without the SHADOW directive, and compile with the -show hpf or -show hpf_near option. The compiler will generate messages that include the sizes of the compiler- determined shadow widths. Make sure that any widths you specify with the SHADOW directive match the compiler- generated widths. 1.9.1.6 Using EOSHIFT Intrinsic for Nearest Neighbor Calculations In the current compiler version, the compiler does not always recognize nearest-neighbor calculations coded using EOSHIFT. Also, EOSHIFT is sometimes converted into a series of statements, only some of which may be eligible for the nearest neighbor optimization. To avoid these problems, Compaq recommends using CSHIFT or FORALL instead of EOSHIFT if these alternatives meet the needs of your program. Compaq Fortran Version 5.4 Release Notes 1-67 1.9.2 New Features This section describes the new HPF features in this release of Compaq Fortran. 1.9.2.1 RANDOM_NUMBER Executes in Parallel The RANDOM_NUMBER intrinsic subroutine now executes in parallel for mapped data. The result is a significant decrease in execution time. 1.9.2.2 Improved Performance of TRANSPOSE Intrinsic The TRANSPOSE intrinsic will execute faster for most arrays that are mapped either * or BLOCK in all dimensions. 1.9.2.3 Improved Performance of DO Loops Marked as INDEPENDENT Certain induction variables are now recognized as affine functions of the INDEPENDENT DO loop indices, thus meeting the requirements listed in Section 1.9.1.3. Now, the compiler can parallelize array references containing such variables as subscripts. An example is next. ! Compiler now recognizes a loop as INDEPENDENT because it ! knows that variable k1 is k+1. PROGRAM gauss INTEGER, PARAMETER :: n = 1024 REAL, DIMENSION (n,n) :: A !HPF$ DISTRIBUTE A(*,CYCLIC) DO k = 1, n-1 k1 = k+1 !HPF$ INDEPENDENT, NEW(i) DO j = k1, n DO i = k1, n A(i,j) = A(i,j) - A(i,k) * A(k,j) ENDDO ENDDO ENDDO END PROGRAM gauss 1-68 Compaq Fortran Version 5.4 Release Notes 1.9.3 Corrections This section lists problems in previous versions that have been fixed in this version. o In programs compiled with the -wsf option, pointer assignments inside a FORALL did not work reliably. In many cases, incorrect program results occurred. o The ASSOCIATED intrinisc sometimes returned incorrect results in programs compiled with the -wsf compile-time option. o GRADE_UP and GRADE_DOWN were not stable sorts. 1.9.4 Known Problems 1.9.4.1 "Variable used before its value has been defined" Warning The compiler may inappropriately issue a "Variable is used before its value has been defined" warning. If the variable named in the warning does not appear in your program (e.g. var$0354), you should ignore the warning. 1.9.4.2 Mask Expressions Referencing Multiple FORALL Indices FORALL statements containing mask expressions referencing more than seven FORALL indices do not work properly. 1.9.5 Unsupported Features This section lists unsupported features in this release of Compaq Fortran. 1.9.5.1 SMP Decomposition (OpenMP) not Currently Compatible with HPF Manual decomposition directives for SMP (such as the OpenMP directives enabled with the -omp option, or the directives enabled with the -mp option) are not currently compatible with the -wsf option. 1.9.5.2 Command Line Options not Compatible with the -wsf Option The following command line options may not be used with the -wsf option: o The -feedback and -cord options are not compatible, since they require the use of -p, which is not compatible with -wsf. o -double_size 128 Compaq Fortran Version 5.4 Release Notes 1-69 o -gen_feedback o -p, -p1, -pg (use -pprof instead) o -fpe1, -fpe2, -fpe3, -fpe4 o -om o -mp o -omp 1.9.5.3 HPF_LOCAL Routines Arguments passed to HPF_LOCAL procedures cannot be distributed CYCLIC(n). Furthermore, they can have neither the inherit attribute nor a transcriptive distribution. Also, the following procedures in the HPF Local Routine Library are not supported in the current release: o ACTIVE_NUM_PROCS o ACTIVE_PROCS_SHAPE o HPF_MAP_ARRAY o HPF_NUMBER_MAPPED o LOCAL_BLKCNT o LOCAL_LINDEX o LOCAL_UINDEX 1.9.5.4 SORT_UP and SORT_DOWN Functions The SORT_UP and SORT_DOWN HPF library procedures are not supported. Instead, use GRADE_UP and GRADE_DOWN, respectively. 1.9.5.5 Restricted Definition of PURE In addition to the restrictions on PURE functions listed in the Fortran 95 language standard and in the High Performance Fortran Language Specification, Compaq Fortran adds the additional restriction that PURE functions must be resident. "Resident" means that the function can execute on each processor without reading or writing any data that is not local to that processor. Non-resident PURE functions are not handled. They will probably cause failure of the executable at run-time if used in FORALLs or in INDEPENDENT DO loops. 1-70 Compaq Fortran Version 5.4 Release Notes 1.9.5.6 Restrictions on Procedure Calls in INDEPENDENT DO and FORALL In order to execute in parallel, procedure calls from FORALL and DO INDEPENDENT constructs must be resident. "Resident" means that the function can execute on each processor without reading or writing any data that is not local to that processor. The compiler requires an explicit assertion that all procedure calls are resident. You can make this assertion in one of two ways: 1. by labeling every procedure called by the FORALL or INDEPENDENT DO loop as PURE 2. by encapsulating the entire body of the loop in an ON HOME RESIDENT region. Because of the restricted definition of PURE in Compaq Fortran (see Section 1.9.5.5), the compiler interprets PURE as an assertion by the program that a procedure is resident. Unlike procedures called from inside FORALLs, procedures called from inside INDEPENDENT DO loops are not required to be PURE. To assert to the compiler that any non-PURE procedures called from the loop are resident, you can encapsulate the entire body of the loop in an ON HOME RESIDENT region. If you incorrectly assert that a procedure is resident (using either PURE or ON HOME RESIDENT), the program will either fail at run time, or produce incorrect program results. Here is an example of an INDEPENDENT DO loop containing an ON HOME RESIDENT directive and a procedure call: !HPF$ INDEPENDENT DO i = 1, 10 !HPF$ ON HOME (B(i)), RESIDENT BEGIN A(i) = addone(B(i)) !HPF$ END ON END DO . . . Compaq Fortran Version 5.4 Release Notes 1-71 CONTAINS FUNCTION addone(x) INTEGER, INTENT(IN) :: x INTEGER addone addone = x + 1 END FUNCTION addone The ON HOME RESIDENT region does not impose any syntactic restrictions. It is merely an assertion that inter- processor communication will not actually be required at run time. For More Information: o On the requirements for parallel execution of INDEPENDENT DO loops, see Section 1.9.1.3 1.9.5.7 Restrictions on Routines Compiled with -nowsf_main The following are restrictions on dummy arguments to routines compiled with the -nowsf_main compile-time option: o The dummy must not be assumed-size o The dummy must not be of type CHARACTER*(*) o The dummy must not have the POINTER attribute o %LOC must not be applied to distributed arguments Failure to adhere to these restrictions may result in program failure, or incorrect program results. 1.9.5.8 RAN and SECNDS Are Not PURE The intrinsic functions RAN and SECNDS are serialized (not executed in parallel). As a result, they are not PURE functions, and cannot be used within a FORALL construct or statement. 1.9.5.9 Nonadvancing I/O on stdin and stdout Nonadvancing I/O does not work correctly on stdin and stdout. For example, this program is supposed to print the prompt ending with the colon and keep the cursor on that line. Unfortunately, the prompt does not appear until after the input is entered. 1-72 Compaq Fortran Version 5.4 Release Notes PROGRAM SIMPLE INTEGER STOCKPRICE WRITE (6,'(A)',ADVANCE='NO') 'Stock price1 : ' READ (5, *) STOCKPRICE WRITE (6,200) 'The number you entered was ', STOCKPRICE 200 FORMAT(A,I) END PROGRAM SIMPLE The work-around for this bug is to insert a CLOSE statement after the WRITE to stdout. This effectively flushes the buffer. PROGRAM SIMPLE INTEGER STOCKPRICE WRITE (6,'(A)',ADVANCE='NO') 'Stock price1 : ' CLOSE (6) ! Add close to get around bug READ (5, *) STOCKPRICE WRITE (6,200) 'The number you entered was ', STOCKPRICE 200 FORMAT(A,I) END PROGRAM SIMPLE 1.9.5.10 WHERE and Nested FORALL The following statements are not currently supported: o WHERE statements inside FORALLs o FORALLs inside WHEREs o Nested FORALL statements When nested DO loops are converted into FORALLs, nesting is ordinarily not necessary. For example, DO x=1, 6 DO y=1, 6 A(x, y) = B(x) + C(y) END DO END DO Compaq Fortran Version 5.4 Release Notes 1-73 can be converted into FORALL (x=1:6, y=1:6) A(x, y) = B(x) + C(y) In this example, both indices (x and y) can be defined in a single FORALL statement that produces the same result as the nested DO loops. In general, nested FORALLs are required only when the outer index is used in the definition of the inner index. For example, consider the following DO loop nest, which adds 3 to the elements in the upper triangle of a 6 x 6 array: DO x=1, 6 DO y=x, 6 A(x, y) = A(x, y) + 3 END DO END DO In Fortran 95/90, this DO loop nest can be replaced with the following nest of FORALL structures: FORALL (x=1:6) FORALL (y=x:6) A(x, y) = A(x, y) + 3 END FORALL END FORALL However, nested FORALL is not currently supported in parallel (i.e. with the -wsf option). A work-around is to use the INDEPENDENT directive: integer, parameter :: n=6 integer, dimension (n,n) :: A !hpf$ distribute A(block,block) A = 8 !hpf$ independent, new(i) do j=1,n !hpf$ independent do i=j,n A(i,j) = A(i,j) + 3 end do end do print "(6i3)", A 1-74 Compaq Fortran Version 5.4 Release Notes end All three of these code fragments would convert a matrix like this: [8 8 8 8 8 8 ] [8 8 8 8 8 8 ] [8 8 8 8 8 8 ] [ ] [8 8 8 8 8 8 ] [8 8 8 8 8 8 ] [8 8 8 8 8 8 ] [ ] into this matrix: [11 11 11 11 11 11 ] [ 8 11 11 11 11 11 ] [ 8 8 11 11 11 11 ] [ ] [ 8 8 8 11 11 11 ] [ 8 8 8 8 11 11 ] [ 8 8 8 8 8 11 ] [ ] 1.9.6 Obsolete Features Deleted 1.9.6.1 GLOBAL_TO_PHYSICAL and GLOBAL_LBOUNDS are Deleted The following obsolete HPF Local Library routines have been deleted: o GLOBAL_TO_PHYSICAL o GLOBAL_LBOUNDS 1.9.7 Miscellaneous This section contains miscellaneous release notes relevant to HPF. 1.9.7.1 What To Do When Encountering Unexpected Program Behavior This section gives some guidelines about what to do when your program displays unexpected behavior at runtime. The two most common problems are incorrect programs that either segmentation fault or hang at runtime. Before attempting to debug parallel HPF programs, it is important to verify first that the program runs correctly when compiled without the -wsf command line switch. Compaq Fortran Version 5.4 Release Notes 1-75 When the problem occurs only when compiled with the -wsf switch, the best way to debug these programs is to execute them with the -debug command line switch. In addition, programs with zero sized arrays which were compiled with -fast or -assume nozsize may behave erratically or fail to execute. 1.9.7.1.1 Incompatible or Incomplete Libraries Installed If your program displays unexpected behavior at runtime, your system might have incomplete or incompatible libraries installed. You must have PSE160 installed on your system to execute programs compiled with the -wsf switch. PSE180 is not sufficient. In addition, for this release, you must have first installed PSE160. Then you must have installed Fortran V5.2, including the HPFLIBS170 subset. Choose one of the following options to fix an incorrect installation: o If you have installed Fortran V5.2 but are missing PSE160, then install PSE160. Delete the HPFLIBS170 subset of Fortran V5.2 and then reinstall the HPFLIBS170 subset. o If you installed Fortran V5.2 first and then PSE160, then delete the HPFLIBS170 subset of Fortran V5.2. Next, reinstall the HPFLIBS170 subset. o If you already have Fortran V5.2 and PSE160 installed but did not install the HPFLIBS170 subset of Fortran V5.2, then simply install the HPFLIBS170 subset. o If you deleted any old PSESHPF subset after installing Fortran V5.2, this will also cause problems. In this case delete the HPFLIBS170 subset of Fortran V5.2 and then reinstall the HPFLIBS170 subset. o If you have installed PSE180 but not PSE160, then begin to correct this situation by deleting PSE180. Install PSE160. Next, reinstall PSE180. You need both PSE160 and PSE180; PSE180 must be installed last. Finish by deleting the HPFLIBS170 subset of Fortran V5.2 and then reinstalling the HPFLIBS170 subset. For more information about installing PSE160, see the Compaq Parallel Software Environment Release Notes, Version 1.6. 1-76 Compaq Fortran Version 5.4 Release Notes For more information about installing PSE180, see the Compaq Parallel Software Environment Release Notes, Version 1.8. 1.9.7.1.2 Segmentation Faults When a program segmentation faults at runtime it can be confusing because it may look like the program executed, even though no output is produced. The PSE does not always display an error message when the return status of the executed program is non zero. In particular, if the program segmentation faults it does not display an error message, the program just stops. In this example, program "bad" gets a segmentation fault at runtime. # bad -peers 4 # To see the execution status, type this csh command (other shells require different commands): # echo $status A status of -117 indicates a segmentation fault. See the section about known problems in the Parallel Software Environment (PSE) Version 1.6 release notes. Alternatively, you can run the program in the debugger. This is better because it shows what went wrong on each peer. To do this, use the -debug command line switch. # bad -peers 4 -debug See Chapter 9 of the DIGITAL High Performance Fortran 90 HPF and PSE Manual for more information. Note that some correct programs may segmentation fault at runtime due to lack of stack space and data space. See Section 1.9.7.2 for further details. 1.9.7.1.3 Programs that Hang If your program hangs at runtime, rerun it in the debugger. You can type /c in the debugger to get it to stop. Then look at the stack frames to determine where and why the program is hanging. Programs can hang for many reasons. Some of the more common reasons are: o Incorrect or incorrectly-spelled HPF directives o Incorrect usage of extrinsic routines Compaq Fortran Version 5.4 Release Notes 1-77 o Templates not large enough o Incorrect interfaces o Missing interface blocks o Allocatables aligned incorrectly o Arrays aligned outside of template bounds o Exceeding the available stack or data space (see Section 1.9.7.2) It is always best to compile, run, and debug the program without the -wsf switch first to verify program correctness. Since it is easier to debug scalar programs than parallel programs, this should always be done first. 1.9.7.1.4 Programs with Zero Sized Arrays Programs with zero sized arrays should not be compiled with the -fast or the -assume nozsize command line options; see Chapter 8 in the DIGITAL High Performance Fortran 90 HPF and PSE Manual. If you incorrectly compile this way there are several different types of behavior that might occur. The program might return an error status of -122 or -177 or 64. It might also hang (or timeout when the -timeout switch is used). Try compiling the program without these options and execute it to see if it works correctly. If it does, there is most likely a zero-sized array in the program. 1.9.7.2 Stack and Data Space Usage Exceeding the available stack or data space on a processor can cause the program execution to fail. The failure takes the form of a segmentation violation, which results in an error status of -117. (See the section about known problems in the Parallel Software Environment (PSE) Version 1.6 release notes.) This problem can often be corrected by increasing the stack and data space sizes or by reducing the stack and data requirements of the program. The following csh commands increase the sizes of the stack and data space up to system limits (other shells require different commands): limit stacksize unlimited limit datasize unlimited 1-78 Compaq Fortran Version 5.4 Release Notes If your system limits are not sufficient, contact your system administrator, and request that maxdsiz (the data space limit) and/or maxssiz (the stack limit) be increased. 1.9.7.3 Non-"-wsf" main programs The ability to call parallel HPF subprograms from non- parallel (Fortran or non-Fortran) main programs, is supported in this release. For more information, see Chapter 6 of the DIGITAL High Performance Fortran 90 HPF and PSE Manual. 1.9.7.4 Using "-std" Disables HPF Directive Checking Normally, all HPF directives are checked for syntactic and semantic correctness regardless of whether or not the -wsf switch is specified. To disable this checking, specify the -std option. 1.9.7.5 Use the Extended Form of HPF_ALIGNMENT Due to an anomaly in the High Performance Fortran Language Specification, the extended version of the HPF_ALIGNMENT library routine (High Performance Fortran Language Specification V.2 Section 12.2) is incompatible with the standard version (High Performance Fortran Language Specification V.2 Section 7.7). In particular, the DYNAMIC argument, which is valid only in the extended version, is not the final argument in the argument list. Because each compiler vendor must choose to implement only one version of this library routine, programs that use this routine are not portable from one compiler to another unless keywords are used for each of the optional arguments. Compaq chooses to support the extended version of this library routine. 1.9.7.6 EXTRINSIC(SCALAR) Changed to EXTRINSIC(HPF_SERIAL) EXTRINSIC(SCALAR) was renamed to EXTRINSIC(HPF_SERIAL) to be compatible with Versions 1.1 and later of the High Performance Fortran Language Specification. EXTRINSIC(SCALAR) continues to be supported in this release, but may not be supported in future releases. Compaq Fortran Version 5.4 Release Notes 1-79 1.9.8 Example Programs The /usr/examples/hpf directory contains example Fortran programs. Most of these programs are referred to in the HPF Tutorial section of the DIGITAL High Performance Fortran 90 HPF and PSE Manual. Others are just there to show examples of HPF code and PVM code. The provided makefile can be used to compile all these programs. o heat_example.f90 solves a heat flow distribution problem. It is referred to by the Solving Nearest Neighbor Problems section of the DIGITAL High Performance Fortran 90 HPF and PSE Manual. o io_example.f90 implements a network striped file. It is referred to by the Network Striped Files chapter of the DIGITAL High Performance Fortran 90 HPF and PSE Manual. This program is a good example of how to use EXTRINSIC(HPF_LOCAL) routines. o lu.f90 implements a LU Decomposition. It is referred to by the LU Decomposition chapter of DIGITAL High Performance Fortran 90 HPF and PSE Manual. o mandelbrot.f90 visualizes the Mandelbrot Set. It is referred to by the HPF Tutorial. This program uses the PURE attribute and non-Fortran subprograms within an HPF program. Mandelbrot also requires these files: simpleX.h, simpleX.c, and dope.h. Read the README.mandelbrot file to see how to compile and execute Mandelbrot. o pi_example.f90 calculates pi using four different Fortran 90 methods. This program contains a timing module which may be pulled out and used separately. o shallow.f90 is a optimized HPF version of the Shallow Water benchmark. o twin.f90 demonstrates Compaq Fortran's new non-wsf main program capability. o hpf_gexample.f is a Fortran program with explicit calls to PVM. It demonstrates some group and reduction operations in PVM. You must have PVM installed to run this program. 1-80 Compaq Fortran Version 5.4 Release Notes o hpf.tcl is a TK-based HPF data distribution learning aid. It illustrates the data distribution patterns represented by various data distributions, such as (BLOCK, *), (*, CYCLIC), (BLOCK, CYCLIC), etc. o fft.f90 performs a fast Fourier transform, achieving parallelism by means of EXTRINSIC(HPF_LOCAL) routines. 1.10 New Features and Corrections in Version 5.1 Version 5.1 is a major release that includes corrections to problems discovered since Version 5.0 was released. The following topics are discussed: o Version 5.1 New Features o Version 5.1 Corrections 1.10.1 Version 5.1 New Features The following new Compaq Fortran (DIGITAL Fortran 90) features are now supported: o DIGITAL Fortran 90 on UNIX contains full support for OpenMP. Here are some details from the OpenMP web site (http://www.openmp.org). The OpenMP application program interface (API) supports multi-platform shared-memory programming on UNIX platforms and Microsoft[R] Windows NT[TM] architectures. Jointly defined by a group of major computer hardware and software vendors, OpenMP is a portable, scalable model that gives shared-memory programmers a simple and flexible interface for developing parallel applications for platforms ranging from the desktop to the supercomputer. For more information on the OpenMP Fortran API, see the revised user manual. The following directives in OpenMP are supported by DIGITAL Fortran 90 Version 5.1: - !$OMP PARALLEL and !$OMP END PARALLEL - !$OMP DO and !$OMP END DO - !$OMP SECTIONS and !$OMP END SECTIONS and !$OMP SECTION Compaq Fortran Version 5.4 Release Notes 1-81 - !$OMP SINGLE and !$OMP END SINGLE - !$OMP PARALLEL DO and !$OMP END PARALLEL DO - !$OMP PARALLEL SECTIONS and !$OMP END PARALLEL SECTIONS - !$OMP MASTER and !$OMP END MASTER - !$OMP CRITICAL [(name)] and !$OMP END CRITICAL [(name)] - !$OMP BARRIER - !$OMP ATOMIC - !$OMP FLUSH - !$OMP ORDERED and !$OMP END ORDERED - !$OMP THREADPRIVATE The following clauses on directives in OpenMP are supported by DIGITAL Fortran 90 Version 5.1: - IF (exp) - PRIVATE(list) - SHARED(list) - DEFAULT (PRIVATE | SHARED | NONE) - FIRSTPRIVATE(list) - LASTPRIVATE(list) - REDUCTION({operator | intrinsic} : list) - COPYIN(list) - SCHEDULE(type[,chunksize]) - ORDERED o The following new features are now supported: - As of DIGITAL UNIX v4.0, constants in Fortran code are placed in read-only memory. An attempt to modify a constant (as in the example below) has always been an error but will now cause the program to abort: 1-82 Compaq Fortran Version 5.4 Release Notes CALL F (1) ... SUBROUTINE F (I) I = 2 - A change in the math library (libm) starting with DIGITAL UNIX v4.0B is that MOD(3.0,0.0) now returns "floating invalid"; it used to return "0". - Several new intrinsics are now available in DIGITAL Fortran 90. For more details, see the online Fortran 90 help file, located in: /usr/lib/cmplrs/fort90/decfortran90.hlp * ASM - execute in-line assembler code * LEADZ and TRAILZ - count leading and trailing 0 bits in an integer * POPCNT - count 1 bits in an integer * POPPAR - parity of the bits in an integer * MULT_HIGH - multiply two 64-bit unsigned integers - The X-Open Standard followed by DIGITAL UNIX made a change to its "pow" function that affects Fortran's "**" operation: (0.0)**Y for all negative values of Y {single or DOUBLE PRECISION} will now return "-Infinity" (using -fpe3); it used to return "+Infinity". o The following new f90 command options are now supported: - -align recNbyte Requests that fields of records and components of derived types be aligned on the smaller of: * The size byte boundary (N) specified (N is 1, 2, 4, or 8) * The boundary that will naturally align them Specifying -align recNbyte does not affect whether common blocks are naturally aligned or packed. - -altparam Compaq Fortran Version 5.4 Release Notes 1-83 Specifies if the alternate form of parameter constant declarations (without parenthesis) is recognized. The default is -altparam. - -assume minus0 Tells compiler to use Fortran 95 standard semantics for the treatment of the IEEE[R] floating value -0.0 {of all KINDs}. There are two places where Fortran 95 defines behavior on -0.0: * SIGN (data, -0.0) is "data" with a negative sign, whereas the Fortran 90 standard says SIGN (data, -0.0) is the same as SIGN (data, +0.0) which is "data" with a positive sign * Fortran 95 says that -0.0 prints as "-0.0", whereas Fortran 90 says it prints as "0.0" -assume nominus0 is the default {this is a change from DIGITAL Fortran 90 V5.0} and means that SIGN (data, -0.0) is the same as SIGN (data, +0.0) {the Fortran 90 and FORTRAN 77 standard semantics} The f95 command driver adds "-assume minus0" to the compiler command line (before any other options) so the f95 command will get the Fortran 95 standard semantics. - -check omp_bindings Provides run-time checking to enforce the OpenMP binding rules: * It is an error to enter a DO, SINGLE, or SECTIONS if you are already in a work-sharing construct, a CRITICAL SECTION, or a MASTER. * It is an error to attempt to execute a BARRIER if you are already in a work-sharing construct, a CRITICAL SECTION, or a MASTER. * It is an error to attempt to execute a MASTER directive if you are already in a work-sharing construct. * It is an error to execute an ORDERED directive if you are already in a CRITICAL SECTION. 1-84 Compaq Fortran Version 5.4 Release Notes * It is an error to execute an ORDERED directive unless you are already in an ORDERED DO. The default is -check noomp_bindings: * -omp implies -check omp_bindings * -fast -omp implies -check noomp_bindings, regardless of the placement of -fast * If the user wants the checking done on -mp, specify -check omp_bindings explicitly At run-time, the errors in example program t.f trigger an ASSERTION error and the program aborts: Example program t.f: real b(100) x = 0 !$omp paralleldo do i= 1, 100 b(i) = i !$omp single x = x + 1 !$omp end single end do print *, b, x end > f90 -omp t.f > a.out forrtl: severe (145): assertion error - -module directory Requests that the compiler create module files in the specified directory instead of the current directory. - -omp Enables recognition of OpenMP directives. - -std95 Enables Fortran 95 standards checking (-std90 or -std enable Fortran 90 standards checking). - -warn truncated_source Compaq Fortran Version 5.4 Release Notes 1-85 Requests that the compiler issues a warning diagnostic message when it reads a source line with a statement field that exceeds the maximum column width in fixed-format source files. The maximum column width for fixed-format files is column 72 or 132, depending whether the -extend_source option was specified. This option has no effect on truncation; lines that exceed the maximum column width are always truncated. This option does not apply to free-format source files. The default is -warn notruncated_source. o Additional support has been provided for directed parallel processing using the -omp and -mp options. For more information on the parallel directives, see the Compaq Fortran User Manual for Tru64 and Linux Alpha Systems. To allow task-local thread storage, you must be using Version 4.0D (code name PTmin) of the DIGITAL UNIX operating system. The following problem in the use of -omp and -mp parallel directives should be noted: In the following example test.f, the user should add "firstprivate(k,m)" to initialize the private variables k and m for use in the loop control expressions. Example test.f: dimension x(10) k = 1 m = 10 !$omp parallel !$omp do private(k,m) do i = k,m x(i) = i enddo !$omp end parallel print *, x end 1-86 Compaq Fortran Version 5.4 Release Notes > f90 -omp test.f f90: Warning: test.f, line 8: Variable K is used before its value has been defined do i = k,m ------^ f90: Warning: test.f, line 8: Variable M is used before its value has been defined do i = k,m ------^ o The following Fortran 95 features are have been implemented in Version 5.1: - Zero-length formats On output, when using I, B, O, Z, and F edit descriptors, the specified value of the field width can be zero. In such cases, the compiler selects the smallest possible positive actual field width that does not result in the field being filled with asterisks (*). o The command-line options -assume minus0 and -std95 (described previously in this section). 1.10.2 Version 5.1 Corrections Since Version 5.0, the following corrections have been made: o Using ASSOCIATED with f90 pointer now gives correct answer. o Using vector subscripts in MATMUL now gives correct answer. o Passing %REF argument to a routine with explicit INTERFACE no longer gets an internal error. o CSHIFT of an array pointer contained within a derived type no longer gets an internal error. o Compiling files that contain very long routine names with -V no longer gets an internal error. o Using assignments in a defined generic assignment subroutine when the subroutine is not RECURSIVE now gets an error. Compaq Fortran Version 5.4 Release Notes 1-87 o Parameter constant is allowed as argument of a LOC intrinsic. o Using UNION within derived type now gets correct result. o Having EQUIVALENCEd character array elements within a MODULE no longer gets internal error. o Duplicate SAVE statement no longer gets an error. o Parameter constant can be used as case-value in a SELECT CASE statement. o ALIAS attribute can now be specified in a cDEC$ ATTRIBUTE directive for a variable that has not been declared EXTERNAL (EXTERNAL is assumed). o Interface with optional function argument is now resolved properly. o Using record fields in multiply and add operations now produces correct result. o Using the following operators: ==, /=, <, >, <=, and >= no longer get non-standard conforming warnings. o Extra trailing blanks are now allowed and ignored when used in specifier of OPEN statement, e.g., FORM='formatted '. o Passing an array argument to a statement function now gets an error. o INTEGER*2 array now gets correct result when compiled with -integer_size 16. o Fix a bug related to module importing with modules that contain PRIVATE statement. o Parameter constant defined in a MODULE is now imported when its use is only in a variable format expression. o C attribute can be specified in a cDEC$ ATTRIBUTE directive for module variables. o Parameter constants are allowed in a structure constructor. o A derived type component having the same name as a common block no longer gets an internal error. 1-88 Compaq Fortran Version 5.4 Release Notes o IVDEP directive can be specified between PDO and DO statements. o A non-standard warning is issued if the first argument of a GENERIC assignment procedure is not INTENT(OUT) or INTENT(INOUT). o $PACK directive and the -align recNbyte option now affect alignment of data items in a SEQUENCE derived- type. o Using a structure constructor to initialize a multi- dimensional array component of a derived-type no longer causes an internal error. o Fix $omp parallel copyin (/common_block/) directive. o The -fpconstant option now works correctly for assignment to double complex variables. o Having a D line as the first non-comment line after a conditional $ENDIF directive no longer gets an error. o No longer flag ES format as non-standard. o Remove an internal limit on the number of entries of a NAMELIST o Using substring of a character array as argument of ICHAR intrinsic no longer gets internal error o Pointer assignment of an array of character substrings now gets correct result. For example: p=>a(:)(2:4) ) o Using array transformation intrinsics such as PACK, SPREAD, and RESHAPE with array of derived-type as argument in a PRINT statement now gets correct results o Allow an array with a name of TYPE o Specifying $NOFREEFORM in a .f90 file now sets the line size to 72 columns o Remove a limit of 256 number of arguments for subroutines and functions o An incorrect statement: "IF (ABS(I).GT 1) I=0" now gets an error message o An incorrect statement: "CHARACTER(LEN=1), PARAMETER :: CPSCLR = '' ''" now gets an error message Compaq Fortran Version 5.4 Release Notes 1-89 o Using record fields in multiply and subtract operations now produces correct results o Having a PRIVATE, EQUIVALENCE variable in a module no longer causes compile time segmentation violation o Specifying ONLY on one variable in a COMMON block now only declares the one variable (not the entire variables) in the COMMON block o Allow user-defined operator to be used as the format character expression in a PRINT or READ statement o Using modules and the AUTOMATIC statement in the same routine no longer gets internal error o Module variables with EXTERN attributes now work properly o Increase an internal limit so that large programs no longer get the "text handle table overflow" message o Using record fields in exponentiation and subtract operations now produce correct result o Flag incorrect usage of an entry dummy argument in an executable statement before its declaration in the entry statement o Disallow optional return dummy argument following other OPTIONAL dummy arguments o An invalid WRITE statement no longer gets an internal error o Allow passing NULL intrinsic function as argument to other routines o Allow AUTOMATIC variables to be used in an EQUIVALENCE statement o Using a structure constructor with scalar value to assign an array element now produces correct result o Using an array constructor with integer value to initialize a real or complex array now produces correct result o Flag common block name and routine name conflict o Fix elemental character function with varying length 1-90 Compaq Fortran Version 5.4 Release Notes o Fix problem where -assume dummy_aliases wasn't being taken into account in checks for overlap in array assignment. o If !DEC$ ATTRIBUTES C is specified in an INTERFACE block, and an argument is declared as having an array type, always pass that argument by reference even if the actual argument is a single array element. o Allow a concatenation expression as the first argument to TRANSFER. o Implement -std90 and -std95 options. o A STRUCTURE with no fields no longer causes a compiler failure. o No longer issue standards warning for certain cases with a relational operator followed by a unary minus. o Do not give spurious "more variables than values" warning for certain cases of data initialization of multi-dimensional arrays. o User-defined generic interface for IDATE no longer causes internal compiler error. o LOC(funcname) as an actual argument when used inside function "funcname" now properly returns the address of the return value variable and not the entry point. o The compiler no longer gives spurious errors (including internal compiler failures) in certain cases where a module file cannot be opened. o Certain incorrect programs which include a reference to fields of an undeclared STRUCTURE no longer cause an internal compiler error. o Give error when ALLOCATED is used on a non-ALLOCATABLE object. o Allow a recursive function name to be passed as an actual argument inside the function. o If an INCLUDE file includes a directive to change the source form, revert to the original setting after returning to the including source file. Compaq Fortran Version 5.4 Release Notes 1-91 The following limitations were fixed in Version 2.0 or previous releases: o The f90 command option -wsf and its related options are now supported. o Allocatable arrays that are allocated but not deallocated before routine exit are now deallocated upon exit from routine. o The f90 command options -cord and -feedback described in the documentation have now been implemented. 1.10.3 HPF Version 5.1 New Features 1.10.3.1 SHADOW Directive Now Supported The new SHADOW directive, as defined in Version 2.0 of the High Performance Fortran Language Specification, is now supported. SHADOW is now a separate HPF directive, rather than a keyword inside the DISTRIBUTE directive. 1.10.3.2 Pointers Now Handled in Parallel Mapped variables with the POINTER attribute are now handled in parallel. This capability is an approved extension of the High Performance Fortran Language Specification. 1.10.3.3 SHADOW Directive Required for Nearest-Neighbor POINTER or TARGET Arrays The compiler will not generate shadow edges automatically for arrays with the POINTER or TARGET attributes. In order to be eligible for the compiler's nearest-neighbor optimization, POINTER or TARGET arrays must explicitely be given shadow edges using the SHADOW directive. If pointer assignment is done, both the POINTER and the TARGET must have the same mapping, including shadow edges. For More Information: o On the conditions that must be satisfied for a statement to be eligible for the nearest-neighbor optimization, see Section 1.9.1.4 of these Release Notes. 1-92 Compaq Fortran Version 5.4 Release Notes 1.10.3.4 Descriptive Mapping Directives are Now Obsolescent In Version 1 of the HPF Language Specification, a special form of the DISTRIBUTE and ALIGN directives was used in interfaces and procedures when mapped arrays were passed to a procedure. Known as descriptive mapping, it was specified by an asterisk (*) appearing before the left parenthesis "(" in a DISTRIBUTE directive, or after the WITH in an ALIGN directive. For example, !HPF$ DISTRIBUTE R*(BLOCK, BLOCK) !HPF$ ALIGN S WITH *R Beginning with version 2.0 of the High Performance Fortran Language Specification (DIGITAL Fortran 90 Version 5.0), the meaning of descriptive syntax has changed. Descriptive mapping is now a weak assertion that the programmer believes that no data communication is required at the procedure interface. If this assertion is wrong, the data communication will in fact occur. Although there is now no semantic difference between the descriptive form and the ordinary prescriptive form, there is still some benefit in using the descriptive form. Compaq Fortran generates informational messages when a descriptive directive is specified if the compiler is unable to confirm that there will in fact be no communication. These messages can uncover subtle programming mistakes that cause performance degradation. Existing programs with descriptive mapping directives will continue to compile and run with no modification. In the future, DIGITAL may provide a command-line option that specifies that descriptive directives be treated as strong assertions that data communication will not be necessary at the procedure interface. This would allow the compiler to omit checking whether the mappings of the actual and dummy agree, leading to performance improvement in some cases. Compaq Fortran Version 5.4 Release Notes 1-93 1.10.3.5 New support for HPF Local Library Routines GLOBAL_LBOUND and GLOBAL_UBOUND The following HPF Local Library routines are now supported: o GLOBAL_LBOUND o GLOBAL_UBOUND 1.10.3.6 REDUCTION Clause in INDEPENDENT Directives The REDUCTION clause in INDEPENDENT directives is now supported. 1.10.3.7 HPF_SERIAL Restriction Lifted for Procedures Called from INDEPENDENT DO Loops Previous versions required procedures called from inside INDEPENDENT DO loops to HPF_SERIAL in order to obtain parallel execution. This restriction is now lifted. For More Information: o On the requirements for parallel execution of INDEPENDENT DO loops containing procedure calls, see Section 1.9.5.6 of these Release Notes. 1.10.4 HPF Version 5.1 Corrections This section lists problems in previous versions that have been fixed in this version. o Some bugs in implementing whole structure references in IO and assignment were fixed. o Aligning components of derived types is now supported. o The restriction that statements with scalar subscripts are not eligible for the nearest-neighbor optimization is now removed. Statements with scalar subscripts may now be eligible for the nearest-neighbor optimization if that array dimension is (effectively) mapped serially. o Nearest-neighbor assignments with derived types are now eligible for the nearest-neighbor optimization. 1-94 Compaq Fortran Version 5.4 Release Notes 1.11 New Features and Corrections in Version 5.0 Version 5.0 is a major release that also includes corrections to problems discovered since Version 4.1 was released. The following topics are discussed: o Version 5.0 New Features o Version 5.0 Corrections 1.11.1 Version 5.0 New Features The following new Compaq Fortran (DIGITAL Fortran 90) features are now supported: o The -mp compiler option enables parallel processing using directed decomposition. Parallel processing is directed by inserting !$PAR directives in your source code. This type of parallel processing is for shared memory multiprocessor systems. To enable parallel processing across clusters of servers or workstations with !HPF$ directives, continue to use the -wsf compiler option. On a shared memory system, you can use both the -mp and the -wsf options for the same program. This combination provides improved performance for certain programs running mostly on shared memory systems. The new parallel directives: o Use the !$PAR prefix o Are recognized only if compiled with the -mp option o Some of the parallel !$PAR directives include: PARALLEL and END PARALLEL PDO PARALLEL DO PSECTIONS CRITICAL SECTION TASK COMMON o Environment variables control the run-time behavior. For example, MP_THREAD_COUNT specifies how many threads to create. Compaq Fortran Version 5.4 Release Notes 1-95 To allow task-local thread storage, you must be using Version 4.0D (code name PTmin) of the DIGITAL UNIX operating system. For more information on these directives, see the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems. o The -warning_severity keyword compiler option allows you to: - Specify -warning_severity errors to make all compiler warning messages error-level instead of warning-level messages. - Specify -warning_severity stderrors to make standards checking compiler warning messages (-std option) error-level instead of warning-level messages. o The -warn nogranularity compiler option allows you to suppress the NONGRNACC warning message: Unable to generate code for requested granularity. o An internal procedure can now be used as an actual argument. o Support for certain new language extensions for compatibility with Compaq Visual Fortran (and Microsoft[R] Fortran PowerStation). These features include the following: - # Constants-constants using other than base 10 - C Strings-NULL terminated strings - Conditional Compilation And Metacommand Expressions ($define, $undefine, $if, $elseif, $else, $endif) - $FREEFORM, $NOFREEFORM, $FIXEDFORM-source file format - $INTEGER, $REAL-selects size - $FIXEDFORMLINESIZE-line length for fixed form source - $STRICT, $NOSTRICT-F90 conformance - $PACK-structure packing - $ATTRIBUTES ALIAS-external name for a subprogram or common block - $ATTRIBUTES C, STDCALL-calling and naming conventions 1-96 Compaq Fortran Version 5.4 Release Notes - $ATTRIBUTES VALUE, REFERENCE-calling conventions - \ Descriptor-prevents writing an end-of-record mark - Ew.dDe and Gw.dDe Edit Descriptors-similar to Ew.dEe and Gw.dEe - 7200 Character Statement Length - Free form infinite line length - $DECLARE and $NODECLARE == IMPLICIT NONE - $ATTRIBUTES EXTERN-variable allocated in another source file - $ATTRIBUTES VARYING-variable number of arguments - $ATTRIBUTES ALLOCATABLE-allocatable array - Mixing Subroutines/Functions in Generic Interfaces - $MESSAGE-output message during compilation - $LINE == C's #line - INT1 converts to one byte integer by truncating - INT2 converts to two byte integer by truncating - INT4 converts to four byte integer by truncating - COTAN returns cotangent - DCOTAN returns double precision cotangent - IMAG returns the imaginary part of complex number - IBCHNG reverses value of bit - ISHA shifts arithmetically left or right - ISHC performs a circular shift - ISHL shifts logically left or right The following new High Performance Fortran (HPF) features and corrections have been added for DIGITAL Fortran Version 5.0: o The new SHADOW directive, as defined in Version 2.0 of the HPF specification, is now supported. SHADOW is now a Compaq Fortran Version 5.4 Release Notes 1-97 separate HPF directive, rather than a keyword inside the DISTRIBUTE directive. o Mapped variables with the POINTER attribute are now handled in parallel. This capability is an approved extension of the HPF specification. o Beginning with version 2.0 of the HPF specification (DIGITAL Fortran Version 5.0), the meaning of descriptive syntax has changed. Descriptive mapping is now a weak assertion that the programmer believes that no data communication is required at the procedure interface. If this assertion is wrong, the data communication will in fact occur. Existing programs with descriptive mapping directives will continue to compile and run with no modification and no performance penalty. o The following HPF Local Library routines are now supported: - GLOBAL_LBOUND - GLOBAL_UBOUND o The REDUCTION clause in INDEPENDENT directives is now supported. o Previous versions required procedures called from inside INDEPENDENT DO loops to HPF_SERIAL in order to obtain parallel execution. This restriction is now lifted. o Some bugs in implementing whole structure references in IO and assignment were fixed. o Aligning components of derived types is now supported. o The restriction that statements with scalar subscripts are not eligible for the nearest-neighbor optimization is now removed. Statements with scalar subscripts may now be eligible for the nearest-neighbor optimization if that array dimension is (effectively) mapped serially. o Nearest-neighbor assignments with derived types are now eligible for the nearest-neighbor optimization. 1-98 Compaq Fortran Version 5.4 Release Notes 1.11.2 Version 5.0 Corrections Since Version 4.1, the following corrections have been made: o Fix SIGN intrinsic to handle -0. o Fix LOC intrinsic and %LOC of a derived type field. o Fixed debug information for dynamic character variable (such as character*(i) c). o Add debugging support for integer (Cray) pointers. o Fix storing to the return value of a function returning character in a containing internal routine. o Fix Nullification of a character*n pointer argument. o Fix using passed length argument in a containing internal routine. o Fix compiler abort when a source line is longer than 1024 characters in freeform source file. o Fix using IOLENGTH in a INQUIRE statement. o Fix FORALL problem of the form "X(X(I)) =." o Fix contained functions returning an implicitly initialized derived-type. o Better diagnostics for invalid programs. o Fix compiler abort when using Nullification of a pointer in a MODULE. o Fix a certain type of USE of a MODULE with rename list. o Fix using -extend_source:80 and -pad_source. o Fix compiler abort when using do-loop style implicitly initialized derived-types in a MODULE. o Sign-extending INTEGER*2 parameter constants. o Flag invalid nested internal procedures. o Fix compiler abort of USE of a MODULE with namelist variables in rename list. o Issue a warning message for a intrinsic with wrong argument type and treat it as an external. Compaq Fortran Version 5.4 Release Notes 1-99 o Issue a warning message for having a SAVE common block data object. o Fix compiler abort of USE of a MODULE with namelists. o Fix using SIZEOF(common_block_array) in a PARAMETER statement. o Fix using READONLY keyword as first keyword in an OPEN statement. o Allow record name to be the same as a structure name. o Fix parameter character constant with embedded NULL character. o Fix compiler abort when same name used as a structure and derived type. o Allow BLOCKSIZE keyword in an INQUIRE statement. o Allow a record in a SAVE statement. o Allow a module to have the name "procedures". o Do not flag IABS intrinsic function as nonstandard. o Do not flag DOUBLE COMPLEX as nonstandard. o Treat POPCNT, POPPAR, LEADZ as external functions. o Put out an error message for ptr => pack(...). o Treat C$DOACROSS as a comment. o Issue an error message for invalid derived type parameter constant. o Fix compiler abort when passing an array constructor as an actual argument. o Fix using derived-type components that are same as intrinsic names. o Fix an incorrect warning about "explicit-shaped array is being passed to a routine that expects a pointer or assumed-shape array". o Fix a problem with -warn:errors and -stand:f90 options. Nonstandard messages should be error messages. o Fix incorrect results when compiled a program with - assume:dummy_aliasing. 1-100 Compaq Fortran Version 5.4 Release Notes o Do not flag BOZ constant as nonstandard. o Do not flag Z format as nonstandard. o Allow 511 continuation lines. o Put out a standard warning for using character constant in DATA statement. o Fix using TRANSFER in initialization. o Fix a problem with user defined assignment statement. o Issue an error message when passing or receiving an optional argument by value. o Fix an invalid message about return value of a function is not defined when the function returns an initialized derived type. o Fix a compiler abort with "text handle table overflow" message. o Fix a compiler abort using a SAVE statement. o Fix a problem when an existing operator is overloaded. o Fix argument checking of intrinsic subroutines. o Fix generic interface of elemental functions. o Issue an argument mismatch warning message for using an integer with a statement function that takes real argument. o Fix compiler directives processing. o Fix a compiler abort using an invalid PARAMETER array. o Issue an error message for SAVE of an ENTRY result variable. o Fix using UNION within derive type. o Fix a compiler internal error when using C and REFERENCE attributes on a function name. o Fix a compiler internal error when using ASSOCIATED of a function returning a pointer. o Add support for passing complex by value. o Fix pointer assignment with a character substring. Compaq Fortran Version 5.4 Release Notes 1-101 o Allow using ICHAR in an array constructor within the initialization part of an array declaration. o Fix a problem with using UNION declaration within the derived type. o Allow exporting of a module procedure which has a name that is the same as a generic name. o Fix a problem with using user defined assignment operation. o Allow specifying NaNs in the PARAMETER statement. o Allow D source line to continue a non-D source line. o Fix a problem in array initialization processing. o Cray pointees that were being allocated statically are now correctly given no storage class. o Using assume shape array within a contained routine no longer produces an internal compiler error. o An error message is now given for invalid keyword values given for an I/O statement's keyword. o Declarations of the type "character, allocatable :: field*7(:)", in which the array shape specifier comes after the length specification in a deferred-shape character array no longer produces an internal compiler error. o When assigning a derived type variable with a structure constructor, if a character scalar is supplied to an character array component, every elements of the array is assigned with the character scalar value. o The MVBITS intrinsic now gives correct result if its 4th argument is a non-lowerbound subscripted array element. o Reference of a character function, where the length of its return value is dependent on one or more of its arguments, no longer produces an internal compiler error. o Pointer assignment should now work properly when the target is a component of an allocatable array with a lower bound different of 1. 1-102 Compaq Fortran Version 5.4 Release Notes o Long NAMELISTs no longer causes a compiler internal error. o The compiler now prints out better error messages for the PDONE directive. o When initializing a derived type variable with a structure constructor, if a scalar is supplied to an array component, every elements of the array is initialized with the scalar value. o Allow %fill in STRUCTURE declarations using F90 syntax, such as: integer :: %fill. o Using unary "-" operator with record fields should now give correct results. o Use of NEAREST with two different KIND REAL arguments no longer gets a nonstandard warning. o Allow SIZEOF of assumed size record field. o Module importing has been improved. If a module is USEd in both the host and its internal procedure, the module is now only imported once by the compiler. o A module that contains "PRIVATE" followed by "PUBLIC variable" no longer gets incorrect error message. o Optional comma in DO with label, such as: label: DO, JJ = 1, N, 1 no longer gets incorrect syntax error. o Allow a dummy argument to have the same name as a structure field. o A module that contains USE module, ONLY : var no longer gets internal compiler error. o A component of a derived-type with a name that starts with FILL no longer gets a syntax error. o A PDONE directive in a statically-scheduled PDO loop no longer gets an error message. o Allow a variable with '_' in its name to be used in a variable format expression. o Fix for array references in CRITICAL SECTION directive. o Set NOWAIT for paralleldo directive (the region waits, so do NOT make the loop wait as well). Compaq Fortran Version 5.4 Release Notes 1-103 o Allow variables in COMMON/EQUIVALENCE on local, lastlocal, and reduction lists. Create and use new local variables in parallel do scopes for these variables. o Allow c$copyin of EQUIVALENCE/COMMON variables. o Fix -mp (ordered) bug. o No longer import any definitions if a module is used with the "USE module_name, ONLY:" statement. o Fix a compile time stack overflow problem. o Fix a "$IF DEFINED()" problem when a routine is defined between the conditional compilation. o Put out error message for an invalid use of "TYPE (type_ name)" statement. o Allow RECORD in a NAMELIST. o Fix using "# line_number" in DATA statement. o The -pad_source option now properly pads Hollerith literals that are continued across source records. o Add standards warning for using two consecutive operators in an expression. o Allow POINTER attribute for character entities whose length is specified by a variable expression or an * (assumed length character). o Do not flag as nonstandard when all of the objects in the EQUIVALENCE set are of type default integer, default real, double precision, default complex, default logical, or numeric sequence type. o Add standards warning for assignment to the host associated variable in a PURE function. o Add standards warning for using a dummy argument in a specification-expr as the argument of one of the intrinsic functions BIT_SIZE, KIND, LEN, or the numeric inquiry functions. o Compiling BLOCK DATA with -recursive no longer causes a compiler internal error. o A special usage of equivalenced variables in parallel no longer causes a compiler internal error. 1-104 Compaq Fortran Version 5.4 Release Notes o DO loop variables are now set to be PRIVATE by default in a parallel region. o The scope of C$CHUNK and C$MP_SCHEDTYPE directives is restricted to one program unit. o Fix a bug in a special usage of passing internal procedure as argument. 1.12 Additional Information This section contains information that supplements the Compaq Fortran documentation. 1.12.1 The Compaq Fortran Home Page If you have Internet access and a World Wide Web (WWW) viewer, you are welcome to view the following: o The Compaq Fortran home page, located at the following URL: http://www.compaq.com/fortran o The Compaq Computer Corporation home page, located at the following URL: http://www.compaq.com 1.12.2 Support for the Fortran 95 Standard Features This section briefly describes the Fortran 95 language features that have been added to Compaq Fortran: o The FORALL statement and construct In Fortran 95/90, you could build array values element- by-element by using array constructors and the RESHAPE and SPREAD intrinsics. The Fortran 95 FORALL statement and construct offer an alternative method. FORALL allows array elements, array sections, character substrings, or pointer targets to be explicitly specified as a function of the element subscripts. A FORALL construct allows several array assignments to share the same element subscript control. FORALL is a generalization of WHERE. They both allow masked array assignment, but FORALL uses element subscripts, while WHERE uses the whole array. Compaq Fortran Version 5.4 Release Notes 1-105 Compaq Fortran previously provided the FORALL statement and construct as language extensions. o PURE procedures Pure user-defined procedures do not have side effects, such as changing the value of a variable in a common block. To specify a pure procedure, use the PURE prefix in the function or subroutine statement. Pure functions are allowed in specification statements. Compaq Fortran previously allowed pure procedures as a language extension. o ELEMENTAL procedures An elemental user-defined procedure is a restricted form of pure procedure. An elemental procedure can be passed an array, which is acted upon one element at a time. To specify an elemental procedure, use the ELEMENTAL prefix in the function or subroutine statement. o Pointer initialization In Fortran 95/90, there was no way to define the initial value of a pointer or to assign a null value to the pointer by using a pointer assignment operation. A Fortran 95/90 pointer had to be explicitly allocated, nullified, or associated with a target during execution before association status could be determined. Fortran 95 provides the NULL intrinsic function that can be used to nullify a pointer. o Derived-type structure default initialization Fortran 95 lets you specify, in derived-type definitions, default initial values for derived-type components. o Automatic deallocation of allocatable arrays Arrays declared using the ALLOCATABLE attribute can now be automatically deallocated in cases where Fortran 95/90 would have assigned them undefined allocation status. Compaq Fortran previously provided this feature as a language extension. o CPU_TIME intrinsic subroutine 1-106 Compaq Fortran Version 5.4 Release Notes This new intrinsic subroutine returns a processor- dependent approximation of processor time. o Enhanced CEILING and FLOOR intrinsic functions KIND can now be specified for these intrinsic functions. o Enhanced MAXLOC and MINLOC intrinsic functions DIM can now be specified for the MAXLOC and MINLOC intrinsic functions. DIM was allowed previously as a Compaq Fortran language extension. o Enhanced SIGN intrinsic function The SIGN function can now distinguish between positive and negative zero (if the processor is capable of doing so). o Enhanced WHERE construct The WHERE construct has been improved to allow nested WHERE constructs and a masked ELSEWHERE statement. WHERE constructs can now be named. o Comments allowed in namelist input Fortran 95 allows comments (beginning with !) in namelist input data. Compaq Fortran previously allowed this as a language extension. o Generic identifier to END INTERFACE statement The END INTERFACE statement of an interface block defining a generic routine now allows a generic identifier. o Zero-length formats On output, when using I, B, O, Z and F edit descriptors, the specified value of the field width can be zero (0). In such cases, the compiler selects the smallest possible positive actual field width that does not result in the field being filled with asterisks. o New obsolescent features Fortran 95 deletes several language features that were obsolescent in Fortran 90, and identifies new obsolescent features: - REAL and DOUBLE PRECISION DO variables - Branching to an ENDIF from outside its IF Compaq Fortran Version 5.4 Release Notes 1-107 - PAUSE statement - ASSIGN statement, assigned GOTO, and assigned FORMATs - H edit descriptor Compaq Fortran flags these deleted and obsolescent features, but fully supports them. 1.12.3 Preliminary Information on Support for Big Objects Big objects are data items whose size cannot be represented by a signed 32 bit integer. Compaq Fortran supports larger objects than Compaq Fortran 77. Big objects are good for massive machines and clusters used for numerical analysis, such as weather forecasting and high energy physics problems. Both special knowledge and very large hardware configurations are needed to use this feature. Your system and its operating system must be configured to: o Allow a very large stack space. o Allow a very large data space. o Allow large values for parameters, such as vm-maxvas. o Unless huge amounts of physical memory are present, enable lazy swapping. o Check the size of page/swap files and create larger files if needed. For more information, see the Compaq Tru64 UNIX system management documentation. For Compaq Tru64 UNIX Version 4.0, you can use the following check list: 1. Either have a large swap space or use deferred swap allocation. This involves either: o Have more swap space than the address space used by the largest program you want to run. The following command shows swap allocation: $ /usr/sbin/swapon -s 1-108 Compaq Fortran Version 5.4 Release Notes o Use the deferred mode of swap allocation. The following command displays the reference (man) page for swapon, which describes how to change the swap allocation $ man swapon 2. Reconfigure the UNIX kernel (for Version 4.0 or later) to change the following parameters as desired. For example, on one system, all values were set to 16 GB: ________________________________________________________ Parameter_____________Explanation_______________________ max-per-proc- Largest address space address-space max-per-proc-data- Largest data size size max-per-proc-stack- Largest stack size size vm-maxvas_____________Largest_virtual-memory____________ Also set the following per-process values: ________________________________________________________ Parameter_____________Explanation_______________________ per-proc-address- Default address space space per-proc-data-size Default data size per-proc-stack-size___Default_stack_size________________ The per-process limits can be checked and increased with the limit or ulimit commands. You can create big objects as static data, automatic data (stack), or dynamically allocated data (ALLOCATE statement or other means). The address space limitations depends on the Alpha processor generation in use: o Address space for ev4 Alpha generation processors is 2**42 o Address space for ev5 Alpha generation processors is 2**46 Compaq Fortran Version 5.4 Release Notes 1-109 Although the compiler produces code that computes 63-bit signed addresses, objects and addresses larger than the hardware limitations will not work. Limitations of using big objects include: o Initializing big objects by using a DATA statement or a TYPE declaration is not supported. o Big objects cannot be passed by value as program arguments. o Debug support for big objects is limited. o I/O of entire big objects is not supported, but I/O of parts of an array should work. The following small example program allocates a big character object: character xx(2_8**31+100_8) integer*8 i i = 10 xx(i) = 'A' i = 2_8**31 + 100_8 xx(i) = 'B' print *,xx(10_8) print *,xx(i) end 1.12.4 New Random Number Algorithm A new random_number intrinsic (Version 4.0 or later) uses a different algorithm than the one previously used. The test program below shows the use of the random_seed and random_number intrinsics. 1-110 Compaq Fortran Version 5.4 Release Notes program testrand intrinsic random_seed, random_number integer size, seed(2), gseed(2), hiseed(2), zseed(2) real harvest(10) data seed /123456789, 987654321/ data hiseed /-1, -1/ data zseed /0, 0/ call random_seed(SIZE=size) print *,"size ",size call random_seed(PUT=hiseed(1:size)) call random_seed(GET=gseed(1:size)) print *,"hiseed gseed", hiseed, gseed call random_seed(PUT=zseed(1:size)) call random_seed(GET=gseed(1:size)) print *,"zseed gseed ", zseed, gseed call random_seed(PUT=seed(1:size)) call random_seed(GET=gseed(1:size)) call random_number(HARVEST=harvest) print *, "seed gseed ", seed, gseed print *, "harvest" print *, harvest call random_seed(GET=gseed(1:size)) print *,"gseed after harvest ", gseed end program testrand When executed, the program produces the following output: % testrand size 2 hiseed gseed -1 -1 171 499 zseed gseed 0 0 2147483562 2147483398 seed gseed 123456789 987654321 123456789 987654321 harvest 0.6099895 0.9807594 0.2936640 0.9100146 0.8464803 0.4358687 2.5444610E-02 0.5457680 0.6483381 0.3045360 gseed after harvest 375533067 1869030476 1.12.5 Compaq Fortran 77 Pointers Compaq Fortran 77 pointers are CRAY[R] style pointers, an extension to the Fortran 90 standard. The POINTER statement establishes pairs of variables and pointers, as described in the Compaq Fortran Language Reference Manual. Compaq Fortran Version 5.4 Release Notes 1-111 1.12.6 Extended Precision REAL (KIND=16) Floating-Point Data The X_float data type is a little endian IEEE-based format that provides extended precision. It supports the REAL*16 Compaq Fortran Q intrinsic procedures. For example, the QCOS intrinsic procedure for the generic COS intrinsic procedure. The value of REAL (KIND=16) data is in the approximate range: 6.475175119438025110924438958227647Q-4966 to 1.189731495357231765085759326628007Q4932. Unlike other floating-point formats, there is little if any performance penalty from using denormalized extended- precision numbers, since accessing denormalized numbers do not result in an arithmetic trap (extended-precision is emulated in software). (The smallest normalized number is 3.362103143112093506262677817321753Q-4932.) The precision is approximately one part in 2**112 or typically 33 decimal digits. The X_float format is emulated in software. Although there is no standard IEEE little endian 16-byte REAL data type, the X_float format supports IEEE exceptional values. For more information, see the revised Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems and the Compaq Fortran Language Reference Manual. 1.12.7 Variable Format Expressions (VFEs) By enclosing an arithmetic expression in angle brackets, you can use it in a FORMAT statement wherever you can use an integer (except as the specification of the number of characters in the H field). For example: J = 5 FORMAT (I) For more information, see the Compaq Fortran Language Reference Manual. 1-112 Compaq Fortran Version 5.4 Release Notes 1.12.8 Notes on Debugger Support Compaq Tru64 UNIX provides both the dbx and the Compaq Ladebug (formerly DECladebug) debuggers in the programming environment subsets. These debuggers are very similar and use almost identical set of commands and command syntax. Both have a command- line interface as well as a Motif[R] windowing interface. A character-cell Ladebug (ladebug) interface is provided with Ladebug in the Compaq Tru64 UNIX operating system Programmer's Development Toolkit. To use the character-cell interface, use the ladebug command. When using Ladebug with certain versions of the UNIX operating system, be aware that a trailing underscore may be needed to display module variables. For example, to display variable X in module MOD, type: print $MOD$X$_ The Parallel Software Environment supports debugging parallel HPF programs (see the DIGITAL High Performance Fortran 90 HPF and PSE Manual). This section addresses scalar (nonparallel) debugging. When using the f90 command to create a program to be debugged using dbx or ladebug, consider using the following options: o Specify -g or -g2 to request symbol table and traceback information needed for debugging. o Avoid requesting optimization. When you specify - g or -g2, the optimization level is set to -O0 by default. Debugging optimized code is neither easy nor recommended. o When using the Ladebug debugger, you should specify the -ladebug option. The -ladebug option allows you to print and assign to dynamic arrays using standard Fortran syntax. For example, the following command creates the executable program proj_dbg.out for debugging with Ladebug: % f90 -g -ladebug -o proj_dbg.out file.f90 Compaq Fortran Version 5.4 Release Notes 1-113 You invoke the character-cell Ladebug debugger by using the ladebug command. For more information, see the debugger chapter in the revised Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems (Chapter 4). 1.12.8.1 Ladebug Debugger Support Notes The following improvements in Ladebug support for the Compaq Fortran language were added for DIGITAL UNIX Version 4.0: o Ladebug now includes a graphical window interface. o Ladebug now supports the display of array sections. o Ladebug now displays Fortran data types using Fortran 90 name syntax rather than C names (such as integer rather than int). o Ladebug provides improved support for debugging mixed- language C and Fortran applications. o These and other improvements are described in the debugger chapter (Chapter 4) of the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems. The following improvements in Ladebug support for the Fortran 90 language were added for DEC OSF/1 Version 3.2 (DECladebug V3.0-16): o Fortran and Fortran 90 language expression evaluation is built into the Ladebug command language, including: - Case-insensitive identifiers, variables, program names, and so on - Logical expressions, including: Relational operators (.LT., .LE., .EQ., .NE., .GT., .GE.) Logical operators (.XOR., .AND., .OR., .EQV., .NEQV., .NOT.) o Fortran 90 pointers o Fortran 90 array support, including: - Explicit-shape arrays - Assumed-shape arrays 1-114 Compaq Fortran Version 5.4 Release Notes - Automatic arrays - Assumed-size arrays - Deferred-shape arrays o COMMON block support, including: - Display of whole common block - Display of (optionally-qualified) common block members o COMPLEX variable support, including the display, assignment, and use of arithmetic expressions involving COMPLEX variables o Alternate entry points, including breakpoints, tracepoints, and stack tracing (where command) o Mixed-language debugging For more information on using Ladebug, see the debugger chapter in the revised Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems (Chapter 4). 1.12.8.2 dbx Debugger Support Notes When using dbx with Compaq Fortran programs, certain differences exist. For example, in dbx, assumed-shape arguments, allocatable arrays, and pointers to arrays are printed as a derived type. Consider the following program: module foo real x contains subroutine bar(a) integer a(:) a(1) = 1 end subroutine bar end module foo use foo integer b(100) call bar(b) end Compaq Fortran Version 5.4 Release Notes 1-115 If the above program were stopped inside BAR, the following would occur: (dbx) print a common / dim = 1 element_length = 4 ptr = 0x140000244 ies1 = 4 ub1 = 10 lb1 = 1 / The meaning of the fields are: dim - dimension of the object element_length - the length of each element in bytes ptr - the address of the object iesn - distance (in bytes) between elements in the nth dimension ubn - upper bound in the nth dimension lbn - lower bound in the nth dimension 1.12.9 Notes on Fast Math Library Routines The f90 option -math_library fast provides alternate math routine entry points to the following: o SQRT, EXP, LOG, LOG10, SIN, and COS intrinsic procedures o Power (**) in arithmetic expressions 1.12.10 The Compaq Fortran Array Descriptor Format In the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems, Chapter 10, Section 10.1.7 describes the Compaq Fortran array descriptor format. These notes are an initial attempt to provide a template for those C programmers creating an a .h file that lays out the Fortran array descriptor format. There are two varying parameters for this descriptor format: o The element type (shown in this section as ) o The rank (shown in this section as ) 1-116 Compaq Fortran Version 5.4 Release Notes Common information for all descriptors is the general layout of the header and the information for each dimension. One possible C @codefont(struct) definition for the per- dimension information is: struct _f90_array_dim_info { int inter_element_spacing; int pad1; int upper_bound; int pad2; int lower_bound; int pad3; }; The inter-element spacing is measured in 8-bit bytes, not in array elements. This presents a challenge in designing array descriptor definitions in C, since there is no completely clean way to interact with C's pointer arithmetic. One way to design the struct definition for an array descriptor is to use the template: struct _f90_array_desc_rank_ { unsigned char dim; unsigned char flags; unsigned char dtype; unsigned char class; int pad; long length; * pointer; long arrsize; void * addr_a0; struct _f90_array_dim_info dim_info[]; }; Where , and are the template parameters. Often and can be the same, but in cases where has non- identifier characters in it (for example, space or star) then a suitable should be devised. Compaq Fortran Version 5.4 Release Notes 1-117 The problem with this approach is that the element addressing, which uses the inter-element spacing, generates an offset in bytes. In order to use C's native pointer arithmetic, either casts need to be done or a division. For example: o Casting: *(( *) (((char *) desc->pointer) + byte_offset)) o Division: (desc->pointer)[byte_offset/sizeof()] Another way to design the struct definition for an array descriptor is to use the template: struct _f90_array_desc_rank_general { unsigned char dim; unsigned char flags; unsigned char dtype; unsigned char class; int pad; long length; char * pointer; long arrsize; void * addr_a0; struct _f90_array_dim_info dim_info[]; }; An advantage to this approach is that the same definition can be used for all arrays of the same rank. The problem with this approach is that it forces the programmer to cast: *(( *) (desc->pointer + byte_offset)) Another approach is to remove from the template as well, yielding: 1-118 Compaq Fortran Version 5.4 Release Notes struct _f90_array_desc_general { unsigned char dim; unsigned char flags; unsigned char dtype; unsigned char class; int pad; long length; char * pointer; long arrsize; void * addr_a0; struct _f90_array_dim_info dim_info[7]; }; On the last line, 7 is used since that is the maximum rank allowed by Fortran. Since the dim field should be checked, this definition can be used in many (perhaps most) of the places a rank-specific definition would be used, provided the programmer is aware that the dim_info fields beyond the actual rank are undefined. One place such a definition should NOT be used is when an object of this definition is used as part of an assignment. This usage is considered rare. For example: void ptr_assign_buggy(struct _f90_array_desc_general * ptr, struct _f90_array_desc_general * tgt) { *ptr = *tgt; } Example of Array Descriptor Format Use In this example, we have a 'struct tree' and a procedure prune_some_trees_() that takes a descriptor of a rank=3 array of such structs and calls prune_one_tree_() on each individual tree (by reference): Compaq Fortran Version 5.4 Release Notes 1-119 void prune_some_trees(struct _f90_array_desc_general * trees) { if (trees->dim != 3) { raise_an_error(); return; } else { int x,y,z; int xmin = trees->dim_info[0].lower_bound; int xmax = trees->dim_info[0].upper_bound; int xstp = trees->dim_info[0].inter_element_spacing; int ymin = trees->dim_info[1].lower_bound; int ymax = trees->dim_info[1].upper_bound; int ystp = trees->dim_info[1].inter_element_spacing; int zmin = trees->dim_info[2].lower_bound; int zmax = trees->dim_info[2].upper_bound; int zstp = trees->dim_info[2].inter_element_spacing; int xoffset,yoffset,zoffset; for (z = zmin, zoffset = 0; z <= zmax; z+= 1, zoffset += zstp) { for (y = ymin, yoffset = 0; y <= ymax; y+= 1, yoffset += ystp) { for (x = xmin, xoffset = 0; x <= xmax; x+= 1, xoffset += xstp) { struct tree * this_tree = (struct tree *) (trees->pointer + xoffset+yoffset+zoffset); prune_one_tree_(this_tree); } } } } } Compaq would appreciate feedback on which definitions of array descriptors users have found most useful. Note that the format for array descriptors used by HPF is more complicated and is not described at this time. 1-120 Compaq Fortran Version 5.4 Release Notes 2 _________________________________________________________________ New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases This chapter summarizes the new features for Compaq Fortran Versions prior to Version 5.0: o New Features and Corrections in Version 4.1 (Section 2.1) o New Features in Version 4.0 (Section 2.2) o New Features in Version 2.0 (Section 2.3) o New Features in Version 1.3 (Section 2.4) o New Features in Version 1.2 (Section 2.5) o New Features in Version 1.1 (Section 2.6) 2.1 New Features and Corrections in Version 4.1 Version 4.1 is a maintenance release that contains a limited number of new features and corrections to problems discovered since Version 4.0 was released. For additional information added to these release notes for Version 4.1, see Section 1.12.3. The following new features have been added for DIGITAL Fortran 90 Version 4.1: o This release includes a partial implementation of the proposed Fortran 95 standard. The following features of the proposed Fortran 95 standard have been implemented by this version of DIGITAL Fortran 90 and are supported when using the f90 or f95 commands: - FORALL statement and construct (implemented prior to Version 4.1) New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-1 - Automatic deallocation of ALLOCATABLE arrays (implemented prior to Version 4.1) - Dim argument to MAXLOC and MINLOC (implemented prior to Version 4.1) - PURE user-defined subprograms (implemented prior to Version 4.1) - ELEMENTAL user-defined subprograms (a restricted form of a pure procedure) - Pointer initialization (initial value) - The NULL intrinsic to nullify a pointer - Derived-type structure initialization - CPU_TIME intrinsic subroutine - Kind argument to CEILING and FLOOR intriniscs - Enhanced SIGN intrinsic function - Nested WHERE constructs, masked ELSEWHERE statement, and named WHERE constructs - Comments allowed in namelist input - Generic identifier in END INTERFACE statements - Detection of Obsolescent and/or Deleted features listed in the proposed Fortran 95 standard For more information on Fortran 95 features, see the Section 1.12.2. o The f95 command is now available for use with the -std option: - To perform standards conformance checking against the Fortran 90 standard, use the f90 command with -std. Using f90 with -std will issue messages for features (such as FORALL) that have recently been added to the proposed Fortran 95 standard (as well as other extensions to the Fortran 90 standard). - To perform standards conformance checking against the Fortran 95 standard, use the f95 command with -std. Using f95 with -std will not issue messages for features (such as FORALL) that have been added to the 2-2 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases proposed Fortran 95 standard, but will issue messages for extensions to the Fortran 95 standard. For more information on Fortran 95 features, see the Section 1.12.2. o The -intconstant option has been added. Specify the -intconstant option to use DIGITAL Fortran 77 rather than Fortran 90 semantics to determine kind of integer constants. If you do not specify -intconstant, Fortran 90 semantics are used. Fortran 77 semantics require that all constants are kept internally by the compiler in the highest precision possible. For example, if you specify -intconstant, an integer constant of 14 will be stored internally as INTEGER(KIND=8) and converted by the compiler upon reference to the corresponding proper size. Fortran 90 specifies that integer constants with not explicit KIND are kept internally in the default INTEGER kind (KIND=4 by default). Similarly, the internal precision for floating-point constants is controlled by the -fpconstant option. o The -pad_source option has been added. Specify the -pad_source option to request that source records shorter than the statement field width are to be padded with spaces on the right out to the end of the statement field. This affects the interpretation of character and Hollerith literals that are continued across source records. The default is -nopad_source, which causes a warning message to be displayed if a character or Hollerith literal that ends before the statement field ends is continued onto the next source record. To suppress this warning message, specify the -warn nousage option. Specifying -pad_source can prevent warning messages associated with -warn usage. o The -warn usage option has been added. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-3 Specify the -warn nousage option to suppress warning messages about questionable programming practices which, although allowed, often are the result of programming errors. For example, a continued character or Hollerith literal whose first part ends before the statement field ends and appears to end with trailing spaces is detected and reported by -warn usage. The default is -warn usage. o The -arch keyword option has been added. This option determines the type of Alpha chip code that will be generated for this program. The -arch keyword option uses the same keywords as the -tune keyword option. Whereas the -tune keyword option primarily applies to certain higher-level optimizations for instruction scheduling purposes, the -arch keyword option determines the type of code instructions generated for the program unit being compiled. DIGITAL UNIX Version 4.0 and subsequent releases provide an operating system kernel that includes an instruction emulator. This emulator allows new instructions, not implemented on the host processor chip, to execute and produce correct results. Applications using emulated instructions will run correctly, but may incur significant software emulation overhead at runtime. All Alpha processors implement a core set of instructions. Certain Alpha processor versions include additional instruction extensions. Supported -arch keywords are as follows: - -arch generic generates code that is appropriate for all Alpha processor generations. This is the default. Running programs compiled with the generic keyword will run all implementations of the Alpha architecture without any instruction emulation overhead. - -arch host generates code for the processor generation in use on the system being used for compilation. 2-4 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases Running programs compiled with this keyword on other implementations of the Alpha architecture might encounter instruction emulation overhead. - -arch ev4 generates code for the 21064, 21064A, 21066, and 21068 implementations of the Alpha architecture. Running programs compiled with the ev4 keyword will run without instruction emulation overhead on all Alpha processors. - -arch ev5 generates code for some 21164 chip implementations of the Alpha architecture that use only the base set of Alpha instructions (no extensions). Running programs compiled with the ev5 keyword will run without instruction emulation overhead on all Alpha processors. - -arch ev56 generates code for some 21164 chip implementations that use the byte and word manipulation instruction extensions of the Alpha architecture. Running programs compiled with the ev56 keyword might incur emulation overhead on ev4 and ev5 processors, but will still run correctly on DIGITAL UNIX Version 4.0 (or later) systems. - -arch pca56 generates code for the 21164PC chip implementation that uses the byte and word manipulation instruction extensions and multimedia instruction extensions of the Alpha architecture. Running programs compiled with the pca56 keyword might incur emulation overhead on ev4 and ev5 and ev56 processors, but will still run correctly on DIGITAL UNIX Version 4.0 (or later) systems. o In addition to ev4, ev5, generic, and host, The ev56 and pca56 keywords are now supported for the -tune option. The following new High Performance Fortran features have been added for DIGITAL Fortran 90 Version 4.1: o Transcriptive data distributions are now supported. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-5 o The INHERIT directive can now be used to inherit distributions, as well as alignments. o Distributed components of user-defined types are now handled in parallel. This is not part of standard High Performance Fortran (HPF), but is an approved extension. o The GLOBAL_SHAPE and GLOBAL_SIZE HPF Local Library routines are now supported. o There is a new compile-time option named -show hpf, which replaces the -show wsfinfo option. The -show hpf option provides performance information at compile time. Information is given about inter-processor communication, temporaries created at procedure boundaries, optimized nearest-neighbor computations, and code that is not handled in parallel. You can choose the level of detail you wish to see. o New example programs are available in the following directory: /usr/examples/HPF These new features are described in the DIGITAL High Performance Fortran 90 HPF and PSE Manual. The corrections made for DIGITAL Fortran 90 Version 4.1 include the following: o Fix compiler abort with certain types of pointer assignment. o Fix incorrect error message for nested STRUCTUREs. o Fix inconsistent severity for undeclared variable message with IMPLICIT NONE or command line switch. o Fix incorrect error about passing LOGICAL*4 to a LOGICAL*1 argument. o Add standards warning for non-integer expressions in computed GOTO. o Do not flag NAME= as nonstandard in INQUIRE. o Add standards warning for AND, OR, XOR intrinsics. o VOLATILE attribute now honored for COMMON variables. o Allow COMPLEX expression in variable format expression. 2-6 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases o Allow adjustable array to be declared AUTOMATIC (AUTOMATIC declaration is ignored.) o Honor -automatic (/RECURSIVE) in main program. o Fix incorrect parsing error when DO-loop has bounds of -32768,32767. o Fix compiler abort when extending generic intrinsic. o Fix SAVEd variable in inlined routine that didn't always get SAVEd. o Fix compiler abort with initialization of CHARACTER(LEN=0) variable o Correct values of PRECISION, DIGITS, etc. for floating types. o Fix incorrect value of INDEX with zero-length strings. o Correct value for SELECTED_REAL_KIND in PARAMETER statement. o Correct compile-time result of VERIFY. o For OpenVMS only, routine using IARGPTR or IARGCOUNT corrupts address of passed CHARACTER argument. o Standards warning for CMPLX() in initialization expression. o Fix compiler abort when %LOC(charvar) used in statement function. o Fix incorrect initialization of STRUCTURE array. o Fix compiler abort with large statement function. o RESHAPE of array with a zero bound aborts at runtime. o For OpenVMS only, /INTEGER_SIZE now correctly processed. o SIZEOF(SIZEOF()) is now 8. o Fix error parsing a derived type definition with a field name starting with "FILL_". o With OPTIONS /NOI4, compiler complained of IAND with arguments of an INTEGER*4 variable and a typeless PARAMETER constant. o Fix incorrect standards warning for DABS. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-7 o Add error message for ambiguous generic. o Corrected error parsing field array reference in IF. o Bit constants in argument lists are typed based on value, not "default integer". o Allow module to use itself. o Fix standards warning for Hollerith constant. o For OpenVMS only, FOR$RAB is always INTEGER*4. o For OpenVMS only, wrong values for TINY, HUGE for VAX floating. o For OpenVMS only, EXPONENT() with /FLOAT=D_FLOAT references non-existent math routine. o The Compaq Fortran run-time library incorrectly failed to release previously allocated memory when padding Fortran 90 input. o The Compaq Fortran run-time library would incorrectly go into an infinite loop when an embedded NULL character value was found while performing a list-directed read operation. o The Compaq Fortran run-time library would incorrectly treat an end-of-record marker as a value separator while performing a list-directed read operation. o The Compaq Fortran run-time library incorrectly produced a "recursive I/O operation" error after a user has made a call to flush() to flush a unit which was not previously opened, then attempted to perform any I/O operation on the unit o The Compaq Fortran run-time library would incorrectly fail to return an end-of-record error for certain non- advancing I/O operations. This occurred when attempting to read into successive array elements while running out of data. o The Compaq Fortran run-time library, when it encountered the ":" edit descriptor at the end of the input record did not stop reading the next record, causing errors like "input conversion". 2-8 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases o The Compaq Fortran run-time library did not handle implied DO loops on I/O lists when non-native file support (-convert or equivalent conversion method) was in use. The following are corrections for HPF users in this version: o Expanded I/O Support, including support for all features, including: complicated I/O statements containing function calls, assumed size arrays, or variables of derived types with pointer components, and array inquiry intrinsics using the implied DO loop index. In addition, non-advancing I/O (except on stdin and stdout) now works correctly if every PSE peer in the cluster has a recent version of the Fortran run-time library (fortrtl_371 or higher). o NUMBER_OF_PROCESSORS and PROCESSORS_SHAPE in EXTRINSIC(HPF_SERIAL) routines o Restriction lifted on user-defined types in some FORALLs o Declarations in the specification part of a module o EXTRINSIC(SCALAR) changed to EXTRINSIC(HPF_SERIAL) These new corrections are described in more detail in the Parallel Software Environment (PSE) release notes. 2.2 New Features in Version 4.0 The following f90 command options were added for DIGITAL Fortran 90 Version 4.0: o Specify the -assume byterecl option to:: - Indicate that the OPEN statement RECL unit for unformatted files is in byte units. If you omit - assume byterecl, Compaq Fortran expects the OPEN statement RECL value for unformatted files to be in longword (four-byte) units. - Return the record length value for an INQUIRE by output list (unformatted files) in byte units. If you omit -assume byterecl, Compaq Fortran returns the New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-9 RECL value for an INQUIRE by output list in longword (four-byte) units. o The -check nopower option allows arithmetic calculations that result in 0**0 or a negative number raised to an integer power of type real (such as -3**3.0) to be calculated, rather than stop the program. If you omit - check nopower for such calculations, an exception occurs and the program stops (default is -check:power). For example, if you specified -check:nopower, the calculation of the expression 0**0 results in 1 and the expression -3**3.0 results in -9. o Specify -hpf_matmul to use matrix multiplication from the HPF library. Omitting the -hpf_matmul option uses inlined intrinsic code that is faster for small matrices. For nonparallel compilations, specifying - hpf_matmul to use the HPF library routine is faster for large matrices. o The -names keyword option controls how DIGITAL Fortran 90 handles the case-sensitivity of letters in source code identifiers and external names: - Using -names as_is requests that Compaq Fortran distinguish between uppercase and lowercase letters in source code identifiers (treats uppercase and lowercase letters as different) and distinguish between uppercase and lowercase letters in external names. - Using -names lowercase (default) requests that Compaq Fortran not distinguish between uppercase and lowercase letters in source code identifiers (treats lowercase and uppercase letters as equivalent) and force all letters to be lowercase in external names. - Using -names uppercase requests that Compaq Fortran not distinguish between uppercase and lowercase letters in source code identifiers (treats lowercase and uppercase letters as equivalent) and force all letters to be uppercase in external names. 2-10 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases o The -noinclude option prevents searching for include files in the /usr/include directory. This option does not apply to the directories searched for module files or cpp files. o The -O5 option activates both the software pipelining optimization (-pipeline) and the loop transform optimizations (-transform_loops). You can also specify -notransform_loops or -nopipeline with -O5. If you also specify the -wsf option to request parallel processing, you cannot use the -O5 option. o The -pipeline option activates the only software pipelining optimization (previously done only by - O5). The software pipelining optimization applies instruction scheduling to certain innermost loops, allowing instructions within a loop to "wrap around" and execute in a different iteration of the loop. This can reduce the impact of long-latency operations, resulting in faster loop execution. Software pipelining also enables the prefetching of data to reduce the impact of cache misses. In certain cases, software pipelining improves run-time performance (separate timings are suggested). o The following -reentrancy keyword options specify the level of thread-safe reentrant run-time library support needed: ________________________________________________________ Option_Name________Description__________________________ -reentrancy none Informs the Compaq Fortran RTL that the program will not be relying on threaded or asynchronous reentrancy. Therefore the RTL need not guard against such interrupts inside the RTL. This is the default. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-11 ________________________________________________________ Option_Name________Description__________________________ -reentrancy Informs the Compaq Fortran RTL that asynch the program may contain asynchronous handlers that could call the RTL. Therefore the RTL will guard against asynchronous interrupts inside its own critical regions. -reentrancy Informs the Compaq Fortran RTL threaded that the program is multithreaded, such as those using the DECthreads library. Therefore the RTL will use thread locking to guard its own critical regions. To use the threaded libraries, also specify -threads. -noreentrancy______The_same_as_-reentrancy_none.________ o The -S option generates a .s file, which can be assembled. This option is intended for systems running Compaq Tru64 UNIX (DIGITAL UNIX) Version 4.0 or later, which has certain new Assembler features. Certain complex programs that use modules or common blocks compiled with -S may not generate code completely acceptable to the Assembler. o The -speculate keyword option supports the speculative execution optimization: o Use -speculate all to perform the speculative execution optimization on all routines in the program. All exceptions within the entire program will be quietly dismissed without calling any user- mode signal handler. o Use -speculate by_routine to perform the speculative execution optimization on all routines in the current compilation unit (set of routines being compiled), but speculative execution will not be performed for routines in other compilation units in the program. o Use -speculate none or -nospeculate to suppress the speculative execution optimization. This is the default. 2-12 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases The speculative execution optimization reduces instruction latency stalls to improve run-time performance for certain programs or routines. This optimization evaluates conditional code (including exceptions) and moves instructions that would otherwise be executed conditionally to a position before the test, so they are executed unconditionally. Speculative execution does not support some run-time error checking, since exception and signal processing (including SIGSEGV, SIGBUS, and SIGFPE) is conditional. When the program needs debugging or while testing for errors, use -speculate none (default). o Specifying -threads requests that the linker use threaded libraries. This is usually used with - reentrancy threaded. o The -transform_loops option supports a group of optimizations that improve the performance of the memory system and can apply to multiple nested loops. The loops chosen for loop transformation optimizations are always counted loops (counted loops include DO or IF loops, but not uncounted DO WHILE loops). In certain cases, loop transformation improves run-time performance (separate timings are suggested). o Specify -nowsf_main to indicate that the HPF global routine being compiled will be linked with a main program that was not compiled with -wsf. For more information on f90 command options, see the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems, Chapter 3, or f90(1). In addition to the f90 command-line options, the following new or changed features were added for Version 4.0: o The random_number intrinsic (as of Version 4.0) uses two separate congruential generators together to produce a period of approximately 10**18, and produces real pseudorandom results with a uniform distribution in (0,1). It accepts two integer seeds, the first of which is reduced to the range [1, 2147483562]. The second seed is reduced to the range [1, 2147483398]. This means that the generator effectively uses two 31-bit seeds. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-13 The new algorithm behaves differently from one provided prior to Version 4.0 in the following ways: - Both seeds are active and contribute to the random number being produced. - If the given seeds are not in the ranges given above, they will be reduced to be in those ranges. - The sequences of random numbers produced by the new generator will be different from the sequences produced by the old generator. For more information on the algorithm, see: o Communications of the ACM vol 31 num 6 June 1988, entitled Efficient and Portable Combined Random Number Generators by Pierre L'ecuyer o Springer-Verlag New York, N. Y. 2nd ed. 1987, entitled A Guide to Simulation by Bratley, P., Fox, B. L., and Schrage, L. E. For an example program, see Section 1.12.4. o The implementation of the MATMUL intrinsic procedure was changed for this release. Previously the compiler called a routine in the scalar HPF library to perform the operation. As of this release, the compiler generates optimized inline code for the MATMUL intrinsic with a significant increase in the performance when the size of the array arguments are small. To use previous implementation of the MATMUL intrinsic (routine in the scalar HPF library), specify -hpf_ matmul. o The cDEC$ ALIAS directive The cDEC$ ALIAS directive is now supported in the same manner as in Compaq Fortran 77. This directive provides the ability to specify that the external name of an external subprogram is different than the name by which it is referenced in the calling subprogram. This feature can be useful when porting code between OpenVMS and UNIX systems where different routine naming conventions are in use. 2-14 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases For more information on the cDEC$ ALIAS directive, see the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems. o The cDEC$ ATTRIBUTES directive The cDEC$ ATTRIBUTES directive lets you specify properties for data objects and procedures. These properties let you specify how data is passed and the rules for invoking procedures. This directive is intended to simplify mixed language calls with Compaq Fortran routines written in C or Assembler. For more information on the cDEC$ ATTRIBUTES directive, see Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems. o An additional math library allows use of optimizations for a series of square root calculations. The library file libm_4sqrt ships on the DIGITAL Fortran 90 Version 4.0 kit (and DIGITAL Fortran 77 Version 4.0). These optimizations improve run-time performance when a series of square root calculations occur within a counted loop. o Enhanced support for the FORALL statement and construct The FORALL construct now allows the following statements in the forall body: - Pointer assignment statement - FORALL statement or construct (nested FORALL) - WHERE statement or construct Please note that each statement in the FORALL body is executed completely before execution begins on the next FORALL body statement. The compiler now correctly defines the scope of a FORALL subscript name to be the scope of the FORALL construct. That is, the subscript name is valid only within the scope of the FORALL. Its value is undefined on completion of the FORALL construct. o OPTIONS statement options can now be abbreviated (for compatibility with DIGITAL Fortran 77). New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-15 o The -vms option now supports use of /LIST or /NOLIST in an INCLUDE statement (for compatibility with DIGITAL Fortran 77). o To improve run-time performance, new optimizations are now available and certain improvements have been made, including: - Certain intrinsic procedures specific to Fortran 90 (not available in FORTRAN-77) - Subprogram calls with array arguments - New command-line options that activate new optimizations, including the loop transformation optimizations (-transform_loops or -O5) and the speculative execution optimization (-speculate keyword). The software pipelining optimization is now activated by using -pipeline or -O5. o Variable formats expressions (VFEs) are now allowed in quoted strings. o Invalid formats in quoted strings are now detected at compile-time rather than run-time. For more information on compatibility with DIGITAL Fortran 77, see the revised Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems, Appendix A. 2.3 New Features in Version 2.0 New features for Version 2.0 include the LOC intrinsic function. LOC returns the internal address of its argument (same as the built-in function %LOC). In addition, the Compaq Ladebug debugger has added support for Compaq Fortran language features (see Section 1.12.8.1). 2-16 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2.4 New Features in Version 1.3 New features for Version 1.3 include the f90 command options that support the Compaq Parallel Software Environment. To request parallel execution, specify the -wsf or -wsf nn option . This compiles the program to run in parallel using the Compaq Parallel Software Environment product. The optional nn parameter specifies the number of processors on which the program is intended to execute. If not specified, the program will be compiled to execute on any number of processors. More efficient code is generated when nn is specified. If you specify the -wsf or -wsf nn option to request parallel execution, you can also use the following related options: o The -assume nozsize option assumes there are no zero- sized array sections. o The -nearest_neighbor or -nearest_neighbor nn option enables or disables the nearest neighbor parallel optimization. The optional nn parameter specifies the width of the shadow edge to use. If you omit nn, it is set to 1. o The -pprof string option allows parallel profiling of an application. Valid characters for string are s for sampling or i for interval. This option must be used with the -non_shared option (as well as -wsf or -wsf nn). This option must not be used with the -p1 option. o The -show wsfinfo option includes information about statements which cause interprocessor communication to be generated or are serialized in the listing file. Other Version 1.3 new features include the following: o Support for the DIGITAL Fortran 77 pointers (CRAY[R] style). This is an extension to the Fortran 95/90 and FORTRAN-77 standards. For more information, see the DEC Fortran Language Reference Manual and Section 1.12.5. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-17 o Bit constants with a trailing B or Z or leading X (a Compaq Fortran extension) are now supported for compatibility with Compaq Fortran 77: i = '001'B k = '0ff'Z j = X'00f' o The SYSTEM_CLOCK intrinsic procedure has been extended to allow integer arguments of any KIND rather than the default integer KIND . This allows the use of INTEGER*8 arguments to obtain a higher degree of magnitude and accuracy in timings (1,000,000 counts per second). For example: integer*8 count,count_max,count_rate call system_clock(count,count_rate,count_max) o When it is passed an INTEGER (KIND=4) value, the SYSTEM_ CLOCK intrinsic procedure now returns a value in terms of 10,000 instead of 1,000,000 counts per second. o Debugging support has been enhanced to allow breakpoints on CONTINUE, GOTO, and RETURN statements. Before Version 1.3, breakpoints could not be set on a CONTINUE statement and only on certain GOTO and RETURN statements. o The following DIGITAL Fortran 90 cDEC$ directives are now supported: - cDEC$ IDENT specifies a string that identifies the object file. - cDEC$ OPTIONS and cDEC$ END_OPTIONS controls alignment of fields in common blocks, record structures, and most derived-type structures. - cDEC$ PSECT modifies certain attributes of a common block, including the [NO]MULTILANGUAGE attribute for compatibility with DIGITAL Fortran 77. - cDEC$ TITLE and cDEC$ SUBTITLE specifies strings for the title and subtitle of a listing file header. o Any number raised to a floating point 2.0 (x ** 2.0) is now transformed to (x ** 2) for compatibility with DIGITAL Fortran 77. 2-18 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases o The Bessel function 3f library (jacket) routines are now supported (see bessel(3f)) o The following f90 command options were added for Version 1.3: - The -fuse_xref option requests that DIGITAL Fortran 90 generate a data file that the Compaq FUSE Database Manager uses to create a cross-reference database file. This improves the performance of the Compaq FUSE Call Graph Browser and Cross-Referencer that use the database file for their operations. - The -inline speed and -inline size options have been added in place of -inline automatic to provide more control over procedure inlining: Use -inline size (same as -inline space) to inline procedures that will likely improve run-time performance where inlining will not significantly increase program size. This option is meaningful only at optimization levels -O1 and higher. Use -inline speed to inline procedures that will likely improve run-time performance where inlining may significantly increase program size. Using - inline speed often results in larger executable program sizes (than -inline size). This type of inlining occurs automatically with the -O4 or -O5 optimization levels. This option is meaningful only at optimization levels -O1 and higher. Other -inline xxxx options include -inline none, -inline manual, and -inline all (see Section 2.5). - The -ladebug option includes additional symbolic information in the object file for the DIGITAL Ladebug debugger (see ladebug(1). This option enables Ladebug to print and assign to dynamic arrays using standard Fortran syntax, including array sections. - The -show map option includes a symbol map in the listing file (also specify -V). - The -version option displays DIGITAL Fortran 90 version number information. For more complete product information, see the Compaq Fortran documentation and the f90(1) reference (man) page. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-19 2.5 New Features in Version 1.2 DIGITAL Fortran 90 Version 1.2 contains the following changes since Version 1.1: o Support for REAL (KIND=16) (or REAL*16) X_float (extended precision) data type and its associated intrinsics (a DIGITAL Fortran extension). For more information see Section 1.12. o Support for variable format expressions (VFEs), a DIGITAL Fortran extension (see Section 1.12). o Support for OPTIONS statements, which allow you to specify command-line options in your source files. The OPTIONS statement is a DIGITAL Fortran extension. o Intrinsic procedures FP_CLASS and IMAG (a DIGITAL Fortran extension). o STATIC and AUTOMATIC declaration attributes and statements (a DIGITAL Fortran extension). o The following f90 command options were added for Version 1.2: - The -convert fgx and -convert fdx options allow conversion of unformatted OpenVMS Alpha DIGITAL Fortran 77 data files. Similarly, the FDX and FGX keywords are recognized for the OPEN statement CONVERT keyword and the FORT_CONVERTn environment variable names. Specifying -convert fdx indicates the data contains:: - Little endian integer format (INTEGER declarations of the appropriate size) - REAL*4 and COMPLEX*8 data in VAX F_float format - REAL*8 and COMPLEX*16 data in VAX D_float format - REAL*16 data in native X_float format Specifying -convert fgx indicates the data contains: - Little endian integer format (INTEGER declarations of the appropriate size) - REAL*4 and COMPLEX*8 data in VAX F_float format 2-20 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases - REAL*8 and COMPLEX*16 data in VAX G_float format - REAL*16 data in native X_float format - The -double_size 128 option specifies that DOUBLE PRECISION declarations are implemented as extended precision REAL (KIND=16) data rather than double precision REAL (KIND=8) data. - The -real_size 128 and -r16 options allow a REAL declaration to be interpreted using the REAL (KIND=16) data type. - The -inline xxxxx options can be used to specify the type of inlining done independent of the -On option (optimization level) specified: o To prevent inlining of procedures (except statement functions), use -inline none or -inline manual. This is the type of inlining done with -O0, -O1, -O2, or -O3. o The -inline automatic option was replaced at Version 1.3 with -inline size and -inline speed (see Section 2.4), allowing more control over inlining. o To inline every call that can possibly be inlined while generating correct code, including: statement functions, procedures that Compaq Fortran thinks will improve run-time performance, and any other procedures that can possibly be inlined while generating correct code (certain recursive routines cannot be inlined), use - inline all. This option is meaningful only at optimization levels -O1 and higher. - The -gen_feedback option requests additional profiling information needed for feedback file use. You can use -gen_feedback with any optimization level up to -O3 (to avoid inlining procedures). If you omit a -On option, the -gen_feedback option changes the default optimization level to -O0. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-21 A typical command-line sequence to create a feedback file (profsample.feedback) follows: % f90 -gen_feedback -o profsample -O3 profsample.f90 % pixie profsample % profsample.pixie % prof -pixie -feedback profsample.feedback profsample - The -feedback option now works with -cord or separately without -cord to specify a previously- created feedback file. For example: % f90 -feedback profsample.feedback -o profsample -O3 profsample.f90 The feedback file provides the compiler with actual execution information, which the compiler can use to perform such optimizations as inlining function calls. The same optimization level (-On option) must be specified for the f90 command with the -gen_feedback option and the f90 command with the -feedback name option. You can use the feedback file as input to the f90 compiler and cord, as follows: % f90 -cord -feedback profsample.feedback -o profsample -O3 profsample.f90 - The -tune keyword option selects processor-specific instruction tuning for implementations of the Alpha architecture. Regardless of the setting of -tune keyword, the generated code will run correctly on all implementations of the Alpha architecture. Tuning for a specific implementation can improve run-time performance; it is also possible that code tuned for a specific target may run slower on another target. Choose one of the following: o To generate and schedule code that will execute well for both types of chips, use -tune generic. This provides generally efficient code for those cases where both types of chips are likely to be used. If you do not specify any -tune keyword option, -tune generic is used (default). 2-22 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases o To generate and schedule code optimized for the type of chip in use on the system being used for compilation, use -tune host. o To generate and schedule code optimized for the 21064, 20164A, 21066, and 21068 implementations of the Alpha chip, use -tune ev4. o To generate and schedule code optimized for the 21164 implementation of the Alpha chip, use -tune ev5. - The -check noformat option disables the run- time message (number 61) associated with format mismatches. It also requests that the data item be formatted using the specified descriptor, unless the length of the item cannot accommodate the descriptor (for example, it is still an error to pass an INTEGER (KIND=2) item to an E edit descriptor). Using -check noformat allows such format mismatches as a REAL (KIND=4) item formatted with an I edit descriptor. If you omit the -vms option, the default is -check noformat. If you specify -vms and omit -check noformat, -check format is used. - The -check output_conversion option disables the run-time message (number 63) associated with format truncation. The data item is printed with asterisks. Error number 63 occurs when a number could not be output in the specified format field length without loss of significant digits (format truncation). If you omit the -vms option, the default is -check nooutput_conversion. If you specify -vms and omit -check nooutput_ conversion, -check output_conversion is used. - The -vms option now sets defaults for -check output_ conversion and -check format. For more complete product information, see the Compaq Fortran documentation and the f90(1) reference (man) page. New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 2-23 2.6 New Features in Version 1.1 DIGITAL Fortran 90 Version 1.1 contains the following changes since Version 1.0: o The following f90 command options were added for Version 1.1: - The -check bounds option generates additional code to detect out-of-bounds subscripts for array operations and character substring expressions at run-time. Use this option for debugging purposes. - The -Idir option specifies an additional directory to be searched for files specified with an INCLUDE statement or module files. For Version 1.0, this option specified an additional directory searched for module files only. - The -warn argument_checking option issues a warning message about argument mismatches between the calling and the called procedure when both program units are compiled together. o The fsplit command now accepts DIGITAL Fortran 90 free- form source files (see fsplit(1)). For example: % fsplit -f90 -free bigfile.f90 For more complete product information, see the Compaq Fortran documentation and the f90(1) reference (man) page. 2-24 New Features for Compaq Fortran Versions 4.n, 2.0, and 1.n Releases 3 _________________________________________________________________ Documentation, Corrections, and Other Fortran Documentation The sections in this chapter: o List known Compaq Fortran documentation corrections (Section 3.1) o Describe Compaq Fortran documentation and online information (Section 3.2) o Describe the main Compaq Parallel Software Environment documents (Section 3.3) o List other sources of information about Fortran 95/90 (Section 3.4) The Compaq Fortran Web page provides a wealth of information about Compaq Fortran products, including update (patch) kits: http://www.compaq.com/fortran 3.1 Compaq Fortran Documentation Corrections This section contains information that does not appear in the Compaq Fortran documentation. Included in each description is a notation of the first version to which it applies. 3.1.1 Compaq Fortran Installation Guide for Tru64 UNIX Systems The following corrections apply to the installation guide, order number AA-PW82G-TE (January 2001 on the inside title page): o No known corrections. Documentation, Corrections, and Other Fortran Documentation 3-1 3.1.2 Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems There are no known corrections to the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems, order number AA-Q66TD-TE (December 1999 on the inside title page). New features added for Version 5.4 are not shown in this manual (last updated for Version 5.3). 3.1.3 Compaq Fortran Language Reference Manual There are no known corrections to the Compaq Fortran Language Reference Manual, order number AA-Q66SD-TK (September 1999 on the inside title page). New features added for Version 5.4 are not shown in this multi-platform manual (last updated just before Version 5.3). 3.2 Compaq Fortran Documentation and Online Information The Compaq Fortran documentation set includes the following: o Compaq Fortran Installation Guide for Tru64 UNIX Systems (AA-PW82G-TE) Explains how to install Compaq Fortran (Compaq Fortran and Compaq Fortran 77) on a Compaq Tru64 UNIX Alpha system, including requirements. The installation guide is included with the Compaq Fortran (95/90) document kit, QA-MV2AA-GZ.5.n and the Compaq Fortran 77 kit, QA-MV2AB-GZ.5.n. It is also included in ASCII and PostScript[R] form on the Software Product Library CD-ROM (media CD-ROM) and is on the Online Documentation Library CD-ROM in HTML form. o Compaq Fortran Language Reference Manual (AA-Q66SD-TK) Describes the Compaq Fortran source language for reference purposes, including the format and use of statements, intrinsic procedures, and other language elements. It also provides an overview of new Fortran 95/90 features (not available in FORTRAN-77). It identifies extensions to the Fortran 95 standard by blue-green color in the printed and HTML forms of this document. 3-2 Documentation, Corrections, and Other Fortran Documentation The Compaq Fortran Language Reference Manual is included with the Compaq Fortran (95/90) document kit, QA-MV2AA- GZ and is available on the Online Documentation Library CD-ROM in HTML form. The Compaq Fortran Language Reference Manual has been translated into Japanese and is available. o Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems (AA-Q66TD-TE) Describes the Compaq Fortran program development and run-time environment on Compaq Tru64 UNIX Alpha systems. It describes compiling, linking, running, and debugging Compaq Fortran programs, performance guidelines, run- time I/O and error-handling support, data types, numeric data conversion, calling other procedures and library routines, and compatibility with Compaq Fortran 77. It provides information common to Compaq Fortran and the Compaq Parallel Software Environment as well as information about using directed parallel processing using OpenMP and Compaq Fortran directives. The printed version of this document is included with the Compaq Fortran (95/90) document kit, QA-MV2AA-GZ.5.n and is on the Online Documentation Library CD-ROM in HTML form. o Read Before Installing or Using Compaq Fortran Version 5.n for Compaq Tru64 UNIX Systems (AV-PW83N-TE) This cover letter contains information about installing Compaq Fortran (Compaq Fortran and Compaq Fortran 77) that may not be included in the installation guide or in the release notes. This cover letter is included with the Compaq Fortran (95/90) document kit, QA-MV2AA-GZ.5.n, and the Compaq Fortran 77 kit, QA-MV2AB-GZ.5.n. It is also included on the Software Product Library CD-ROM (media CD-ROM) in ASCII and PostScript form. The Compaq Fortran Software Product Description (SPD) is provided as a file on the Software Product Library CD-ROM (media CD-ROM). Documentation, Corrections, and Other Fortran Documentation 3-3 The following Compaq Fortran online information is available (once installed on the system): o Compaq Fortran online reference pages (man pages) Describe the Compaq Fortran software components, including f90(1), fpr(1), fsplit(1), intro(3f), numerous Fortran library routines listed in intro(3f), and numerous parallel High Performance Fortran library routines listed in intro(3hpf). o Compaq Fortran online release notes Provide more information on this version of Compaq Fortran, including known problems and a summary of the Compaq Fortran run-time error messages. These release notes are also provided on the Software Product Library CD-ROM (media CD-ROM). Once installed, the online release notes are located in: /usr/lib/cmplrs/fort90/relnotes90 To view this file, use the more command (or view or similar command) on a system where Compaq Fortran is installed: % more /usr/lib/cmplrs/fort90/relnotes90 To initiate a search within more, type a slash (/) followed by the appropriate topic. For information about using the more command, see more(1). o Compaq Fortran online help file This ASCII file provides online access to Compaq Fortran information, which includes error message descriptions, a summary of the language elements (statements, intrinsic functions, and so on), a glossary, and other information. The Compaq Fortran help file is located in: /usr/lib/cmplrs/fort90/decfortran90.hlp Use the more command or the view command to access the information available in these ASCII files. These help files are large and are not usually printed on a printer or read sequentially. 3-4 Documentation, Corrections, and Other Fortran Documentation The Compaq Fortran Installation Guide for Tru64 UNIX Systems, these online release notes, the "read first" cover letter, and the SPD are available on the Compaq Tru64 UNIX Software Product Library CD-ROM (media CD-ROM) in ASCII and PostScript format. All Compaq Fortran documents except the cover letter and SPD are available on the Compaq Tru64 UNIX Online Documentation Library CD-ROM in HTML format. 3.3 Compaq HPF and Parallel Software Environment Documentation The Compaq Parallel Software Environment product is no longer supported. The DIGITAL High Performance Fortran 90 HPF and PSE Manual (in the Compaq Parallel Software Environment documentation kit, QA-2ATAA-GZ), however, still contains important HPF documentation in Chapters 1-8. The DIGITAL High Performance Fortran 90 HPF and PSE Manual explains both the (now retired) Parallel Software Environment (PSE) and the (still current) High Performance Fortran (HPF) programming language. It contains a tutorial describing how to write programs using the HPF extensions to Compaq Fortran. 3.4 Other Sources of Information About Fortran 95/90 This section lists sources of information about Fortran 95/90 other than the Compaq Fortran documentation. The following publication is the copywritten standard for Fortran 90 and 95: o American National Standard Programming Language Fortran 90, ANSI X3.198-1991, and International Standards Organization Programming Language standard ISO/IEC 1539:1991. (Simply referred to in documentation as the "Fortran 90 Standard".) o American National Standard Programming Language Fortran 95, X3J3/96-007, and International Standards Organization Programming Language standard ISO/IEC 1539- 1:1996. (Simply referred to in documentation as the "Fortran 95 Standard".) Documentation, Corrections, and Other Fortran Documentation 3-5 Tutorial information about the Fortran 95/90 language is available in commercially published documents at major book stores or from their publishers. Compaq Fortran documentation does not usually provide such tutorial information. The following commercially published documents (listed in alphabetical order by title) in English provide reference or tutorial information about Fortran 90: o Fortran 90 Explained by M. Metcalf and J. Reid, Published by Oxford University Press, ISBN 0-19-853772- 7. o Fortran 90/95 Explained by M. Metcalf and J. Reid, Published by Oxford University Press, ISBN 0-19-851888- 9. o Fortran 90/95 for Scientists and Engineers by S. Chapman, Published by WCB McGraw-Hill, ISBN 0-07-011938- 4. o Fortran 90 Handbook by J. Adams, W. Brainerd, J. Martin, B. Smith, and J. Wagener, Published by Intertext Publications (McGraw-Hill), ISBN 0-07-000406-4. o Fortran 90 Programming by T. Ellis, I. Philips, and T. Lahey, Published by Addison/Wesley, ISBN 0201-54446-6. o Introduction to Fortran 90/95 by S. Chapman, Published by WCB McGraw-Hill, ISBN 0-07-011969-4. o Programmer's Guide to Fortran 90, Second Edition by W. Brainerd, C. Goldberg, and J. Adams, Published by Unicomp, ISBN 0-07-000248-7. For information on parallel programming using OpenMP, see the following: o Parallel Programming in OpenMP by Rohit Chandra, Ramesh Menon, Leo Dagum, David Kohr, Dror Maydan, and Jeff MCDonald, Published by Morgan Kauffman, ISBN 1-55860- 671-8. For information on High Performance Fortran (HPF), see the following: o High Performance Fortran Language Specification, Version 2.0. This specifications is available online on the World Wide Web as follows: 3-6 Documentation, Corrections, and Other Fortran Documentation http://www.crpc.rice.edu/HPFF/home.html Compaq provides this list of Fortran 90/95 documents (books) for the sole purpose of assisting customers who want to learn more about the Fortran 90/95 language. This list of documents does not comment-either positively or negatively-on any of the documents listed or any not yet listed. Any omissions are not intentional. Publications that become available after the revision of a Compaq Fortran document will be added at the next revision. Documentation, Corrections, and Other Fortran Documentation 3-7 A _________________________________________________________________ Run-Time Messages This appendix lists Compaq Fortran run-time messages. It is provided in ASCII form (only in the ASCII release notes) for quick look-up purposes. Table A-1 lists the errors processed by the Compaq Fortran RTL. For each error, the table provides the error number, the severity code, error message text, condition symbol name, and a detailed description of the errors. To define the condition symbol values (PARAMETER statements) in your program, include the following file: /usr/include/foriosdef.f The severity of the message determines whether program execution continues: ___________________________________________________________ Severity_____Description___________________________________ severe Must be corrected. The program's execution is terminated when the error is encountered, unless the program's I/O statements use the END, EOR, or ERR branch specifiers to transfer control, perhaps to a routine that uses the IOSTAT specifier. error Should be corrected. The program might continue execution, but the output from this execution may be incorrect. warning Should be investigated. The program continues execution, but output from this execution may be incorrect. info For informational purposes only; the program _____________continues.____________________________________ When a severe error occurs for which no recovery method is specified, an error message is displayed and execution Run-Time Messages A-1 stops. To prevent program termination, you must include either an appropriate I/O error-handling specifier (see the user manual) and recompile or, for certain errors, change the default action of a signal (see the user manual) before you run the program again. In Table A-1, the first column lists error numbers returned to IOSTAT variables when an I/O error is detected. The Compaq Fortran error numbers are compatible with Compaq Fortran 77. Certain messages are specific to Compaq Fortran on Tru64 UNIX systems, including most signal-related errors (such as error number 79, Process quit (SIGQUIT) and errors 130-139) listed in Table A-1. The first line of the second column provides the message as it is displayed (following forrtl:), including the severity level, message number, and the message text. The following lines of the second column contain the status condition symbol (such as FOR$IOS_INCRECTYP) and an explanation of the message. If you have installed the Compaq Parallel Software Environment and compiled a program for parallel execution, additional messages specific to parallel execution may appear (see the DIGITAL High Performance Fortran 90 HPF and PSE Manual). Table_A-1_Run-Time_Error_Messages_and_Explanations_______________ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ None[1]info: Fortran error message number is nnn The Compaq Fortran message catalog file was not found on this system. For information about the message file location, see the user manual or the Compaq Fortran installation guide. This error has no condition symbol. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-2 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ None[1]warning: Could not open message catalog: for_msg.cat The Compaq Fortran message catalog file was not found on this system. See the user manual or your Compaq Fortran installation guide for further information. This error has no condition symbol. None[1]info: Check environment variable NLSPATH and protection of path-name/for_msg.dat The Compaq Fortran message catalog file was not found. For more information, see the user manual or your Compaq Fortran installation guide. This error has no condition symbol. None[1]Insufficient memory to open Fortran RTL catalog: message 41 The Compaq Fortran message catalog file could not be opened because of insufficient virtual memory. To overcome this problem, increase the per-process data limit by using the limit (C shell) or ulimit (Bourne and Korn shells) commands (see Chapter 1 of the user manual) before running the program again. For more information, see error 41. This error has no condition symbol. 1[1] severe (1): Not a Fortran-specific error FOR$IOS_NOTFORSPE. An error in the user program or in the RTL was not a Compaq Fortran-specific error and was not reportable through any other Compaq Fortran run- time messages. If you call ERRSNS, an error of this kind returns a value of 1 (for more information on the ERRSNS subroutine, see the language reference manual). 8 severe (8): Internal consistency check failure FOR$IOS_BUG_CHECK. Internal error. Please check that the program is correct. Recompile if an error existed in the program. If this error persists, submit an SPR. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) Run-Time Messages A-3 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 9 severe (9): Permission to access file denied FOR$IOS_PERACCFIL. Check the mode (protection) of the specified file. Make sure the correct file was being accessed. Change the protection, specified file, or process used before rerunning program. 10 severe (10): Cannot overwrite existing file FOR$IOS_CAOVEEXI. Specified file xxx already exists when OPEN statement specified STATUS='NEW' (create new file) using I/O unit x. Make sure correct file name, directory path, unit, and so forth were specified in the source program. Decide whether to: o Rename or remove the existing file before rerunning the program. o Modify the source file to specify different file specification, I/O unit, or OPEN statement STATUS. 11 info (11)[1]: Unit not connected FOR$IOS_UNINOTCON. The specified unit was not open at the time of the attempted I/O operation. Check if correct unit number was specified. If appropriate, use an OPEN statement to explicitly open the file (connect the file to the unit number). 17 severe (17): Syntax error in NAMELIST input FOR$IOS_SYNERRNAM. The syntax of input to a namelist- directed READ statement was incorrect. 18 severe (18): Too many values for NAMELIST variable FOR$IOS_TOOMANVAL. An attempt was made to assign too many values to a variable during a namelist READ statement. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-4 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 19 severe (19): Invalid reference to variable in NAMELIST input FOR$IOS_INVREFVAR. One of the following conditions occurred: o The variable was not a member of the namelist group. o An attempt was made to subscript a scalar variable. o A subscript of the array variable was out-of-bounds. o An array variable was specified with too many or too few subscripts for the variable. o An attempt was made to specify a substring of a noncharacter variable or array name. o A substring specifier of the character variable was out-of-bounds. o A subscript or substring specifier of the variable was not an integer constant. o An attempt was made to specify a substring by using an unsubscripted array variable. 20 severe (20): REWIND error FOR$IOS_REWERR. One of the following conditions occurred: o The file was not a sequential file. o The file was not opened for sequential or append access. o The Compaq Fortran RTL I/O system detected an error condition during execution of a REWIND statement. (continued on next page) Run-Time Messages A-5 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 21 severe (21): Duplicate file specifications FOR$IOS_DUPFILSPE. Multiple attempts were made to specify file attributes without an intervening close operation. A DEFINE FILE statement was followed by another DEFINE FILE statement or an OPEN statement 22 severe (22): Input record too long FOR$IOS_INPRECTOO. A record was read that exceeded the explicit or default record length specified when the file was opened. To read the file, use an OPEN statement with a RECL= value (record length) of the appropriate size. 23 severe (23): BACKSPACE error FOR$IOS_BACERR. The Compaq Fortran RTL I/O system detected an error condition during execution of a BACKSPACE statement. 24[1] severe (24): End-of-file during read FOR$IOS_ENDDURREA. One of the following conditions occurred: o A Compaq Fortran RTL I/O system end-of-file condition was encountered during execution of a READ statement that did not contain an END, ERR, or IOSTAT specification. o An end-of-file record written by the ENDFILE statement was encountered during execution of a READ statement that did not contain an END, ERR, or IOSTAT specification. o An attempt was made to read past the end of an internal file character string or array during execution of a READ statement that did not contain an END, ERR, or IOSTAT specification. This error is returned by END and ERRSNS. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-6 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 25 severe (25): Record number outside range FOR$IOS_RECNUMOUT. A direct access READ, WRITE, or FIND statement specified a record number outside the range specified when the file was opened. 26 severe (26): OPEN or DEFINE FILE required FOR$IOS_OPEDEFREQ. A direct access READ, WRITE, or FIND statement was attempted for a file when no prior DEFINE FILE or OPEN statement with ACCESS='DIRECT' was performed for that file. 27 severe (27): Too many records in I/O statement FOR$IOS_TOOMANREC. An attempt was made to do one of the following: o Read or write more than one record with an ENCODE or DECODE statement. o Write more records than existed. 28 severe (28): CLOSE error FOR$IOS_CLOERR. An error condition was detected by the Compaq Fortran RTL I/O system during execution of a CLOSE statement. 29 severe (29): File not found FOR$IOS_FILNOTFOU. A file with the specified name could not be found during an open operation. (continued on next page) Run-Time Messages A-7 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 30 severe (30): Open failure FOR$IOS_OPEFAI. An error was detected by the Compaq Fortran RTL I/O system while attempting to open a file in an OPEN, INQUIRE, or other I/O statement. This message is issued when the error condition is not one of the more common conditions for which specific error messages are provided. It can occur when an OPEN operation was attempted for one of the following: o Segmented file that was not on a disk or a raw magnetic tape o Standard I/O file that had been closed 31 severe (31): Mixed file access modes FOR$IOS_MIXFILACC. An attempt was made to use any of the following combinations: o Formatted and unformatted operations on the same unit o An invalid combination of access modes on a unit, such as direct and sequential o A Compaq Fortran RTL I/O statement on a logical unit that was opened by a program coded in another language 32 severe (32): Invalid logical unit number FOR$IOS_INVLOGUNI. A logical unit number greater than 2,147,483,647 or less than zero was used in an I/O statement. (continued on next page) A-8 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 33 severe (33): ENDFILE error FOR$IOS_ENDFILERR. One of the following conditions occurred: o The file was not a sequential organization file with variable-length records. o The file was not opened for sequential or append access. o An unformatted file did not contain segmented records. o The Compaq Fortran RTL I/O system detected an error during execution of an ENDFILE statement. 34 severe (34): Unit already open FOR$IOS_UNIALROPE. A DEFINE FILE statement specified a logical unit that was already opened. 35 severe (35): Segmented record format error FOR$IOS_SEGRECFOR. An invalid segmented record control data word was detected in an unformatted sequential file. The file was probably either created with RECORDTYPE='FIXED' or 'VARIABLE' in effect, or was created by a program written in a language other than Fortran or Fortran 90. 36 severe (36): Attempt to access non-existent record FOR$IOS_ATTACCNON. A direct-access READ or FIND statement attempted to access beyond the end of a relative file (or a sequential file on disk with fixed-length records) or access a record that was previously deleted in a relative file. 37 severe (37): Inconsistent record length FOR$IOS_INCRECLEN. An attempt was made to open a direct access file without specifying a record length. (continued on next page) Run-Time Messages A-9 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 38 severe (38): Error during write FOR$IOS_ERRDURWRI. The Compaq Fortran RTL I/O system detected an error condition during execution of a WRITE statement. 39 severe (39): Error during read FOR$IOS_ERRDURREA. The Compaq Fortran RTL I/O system detected an error condition during execution of a READ statement. 40 severe (40): Recursive I/O operation FOR$IOS_RECIO_OPE. While processing an I/O statement for a logical unit, another I/O operation on the same logical unit was attempted, such as a function subprogram that performs I/O to the same logical unit that was referenced in an expression in an I/O list or variable format expression. 41 severe (41): Insufficient virtual memory FOR$IOS_INSVIRMEM. The Compaq Fortran RTL attempted to exceed its available virtual memory while dynamically allocating space. To overcome this problem, increase the per-process data limit by using the limit (C shell) or ulimit (Bourne and Korn shell) commands before you run this program again (see Chapter 1 of the user manual). To determine whether the maximum per-process data size is already allocated, check the value of the maxdsiz parameter in the sysconfigtab or system configuration file. If necessary, increase its value. Changes to do not take effect until the system has been rebooted (you do not need to rebuild the kernel if you modify sysconfigtab). For more information about system configuration parameters, see the Compaq Tru64 UNIX System Tuning and Performance Management guide. Before you try to run this program again, wait until the new system resources take effect. (continued on next page) A-10 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 42 severe (42): No such device FOR$IOS_NO_SUCDEV. A pathname included an invalid or unknown device name when an OPEN operation was attempted. 43 severe (43): File name specification error FOR$IOS_FILNAMSPE. A pathname or file name given to an OPEN or INQUIRE statement was not acceptable to the Compaq Fortran RTL I/O system. 44 severe (44): Inconsistent record type FOR$IOS_INCRECTYP. The RECORDTYPE value in an OPEN statement did not match the record type attribute of the existing file that was opened. 45 severe (45): Keyword value error in OPEN statement FOR$IOS_KEYVALERR. An improper value was specified for an OPEN or CLOSE statement specifier requiring a value. (continued on next page) Run-Time Messages A-11 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 46 severe (46): Inconsistent OPEN/CLOSE parameters FOR$IOS_INCOPECLO. Specifications in an OPEN or CLOSE statement were inconsistent. Some invalid combinations follow: o READONLY or ACTION='READ' with STATUS='NEW' or STATUS='SCRATCH' o READONLY with STATUS='REPLACE', ACTION='WRITE', or ACTION= 'READWRITE' o ACCESS='APPEND' with READONLY, ACTION='READ', STATUS='NEW', or STATUS='SCRATCH' o DISPOSE='SAVE', 'PRINT', or 'SUBMIT' with STATUS='SCRATCH' o DISPOSE='DELETE' with READONLY o CLOSE statement STATUS='DELETE' with OPEN statement READONLY o ACCESS='APPEND' with STATUS='REPLACE' o ACCESS='DIRECT' or 'KEYED' with POSITION='APPEND', 'ASIS', or 'REWIND' 47 severe (47): Write to READONLY file FOR$IOS_WRIREAFIL. A write operation was attempted to a file that was declared ACTION='READ' or READONLY in the OPEN statement that is currently in effect. 48 severe (48): Invalid argument to Fortran Run-Time Library FOR$IOS_INVARGFOR. The compiler passed an invalid or improperly coded argument to the Compaq Fortran RTL. This can occur if the compiler is newer than the RTL in use. 51 severe (51): Inconsistent file organization FOR$IOS_INCFILORG. The file organization specified in an OPEN statement did not match the organization of the existing file. (continued on next page) A-12 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 53 severe (53): No current record FOR$IOS_NO_CURREC. Attempted to execute a REWRITE statement to rewrite a record when the current record was undefined. To define the current record, execute a successful READ statement. You can optionally perform an INQUIRE statement on the logical unit after the READ statement and before the REWRITE statement. No other operations on the logical unit may be performed between the READ and REWRITE statements. 55 severe (55): DELETE error FOR$IOS_DELERR. An error condition was detected by the Compaq Fortran RTL I/O system during execution of a DELETE statement. 57 severe (57): FIND error FOR$IOS_FINERR. The Compaq Fortran RTL I/O system detected an error condition during execution of a FIND statement. 58[1] info (58): Format syntax error at or near xx FOR$IOS_FMTSYN. Check the statement containing xx, a character substring from the format string, for a format syntax error. For information about FORMAT statements, refer to the language reference manual. 59 severe (59): List-directed I/O syntax error FOR$IOS_LISIO_SYN[2]. The data in a list-directed input record had an invalid format, or the type of the constant was incompatible with the corresponding variable. The value of the variable was unchanged. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ [2]The ERR transfer is taken after completion of the I/O statement for error numbers 59, 61, 63, 64, and 68. The resulting file status and record position are the same as if no error had occurred. However, other I/O errors take the ERR transfer as soon as the error is detected, so file status and record position are undefined. (continued on next page) Run-Time Messages A-13 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 60 severe (60): Infinite format loop FOR$IOS_INFFORLOO. The format associated with an I/O statement that included an I/O list had no field descriptors to use in transferring those values. 61 severe or info[3] (61): Format/variable-type mismatch FOR$IOS_FORVARMIS[2]. An attempt was made either to read or write a real variable with an integer field descriptor (I, L, O, Z, B), or to read or write an integer or logical variable with a real field descriptor (D, E, or F). To suppress this error message, see the description of -check noformat in f90(1) or the user manual. 62 severe (62): Syntax error in format FOR$IOS_SYNERRFOR. A syntax error was encountered while the RTL was processing a format stored in an array or character variable. 63 error or info[3] (63): Output conversion error FOR$IOS_OUTCONERR[2]. During a formatted output operation, the value of a particular number could not be output in the specified field length without loss of significant digits. When this situation is encountered, the overflowed field is filled with asterisks to indicate the error in the output record. If no ERR address has been defined for this error, the program continues after the error message is displayed. To suppress this error message, see the description of -check nooutput_conversion in f90(1) or the user manual. [2]The_ERR_transfer_is_taken_after_completion_of_the_I/O_________ statement for error numbers 59, 61, 63, 64, and 68. The resulting file status and record position are the same as if no error had occurred. However, other I/O errors take the ERR transfer as soon as the error is detected, so file status and record position are undefined. [3]For errors 61 and 63, the severity depends on the -check keywords used during compilation (f90 command). (continued on next page) A-14 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 64 severe (64): Input conversion error FOR$IOS_INPCONERR[2]. During a formatted input operation, an invalid character was detected in an input field, or the input value overflowed the range representable in the input variable. The value of the variable was set to zero. 65 error (65): Floating invalid FOR$IOS_FLTINV. During an arithmetic operation, the floating-point values used in a calculation were invalid for the type of operation requested or invalid exceptional values. For example, when requesting a log of the floating-point values 0.0 or a negative number. For certain arithmetic expressions, specifying the -check nopower option can suppress this message (see f90(1) or the user manual) . For information on allowing exceptional IEEE values, see the user manual. ) 66 severe (66): Output statement overflows record FOR$IOS_OUTSTAOVE. An output statement attempted to transfer more data than would fit in the maximum record size. 67 severe (67): Input statement requires too much data FOR$IOS_INPSTAREQ. Attempted to read more data than exists in a record with an unformatted READ statement or with a formatted sequential READ statement from a file opened with a PAD specifier value of 'NO'. [2]The_ERR_transfer_is_taken_after_completion_of_the_I/O_________ statement for error numbers 59, 61, 63, 64, and 68. The resulting file status and record position are the same as if no error had occurred. However, other I/O errors take the ERR transfer as soon as the error is detected, so file status and record position are undefined. (continued on next page) Run-Time Messages A-15 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 68 severe (68): Variable format expression value error FOR$IOS_VFEVALERR[2]. The value of a variable format expression was not within the range acceptable for its intended use; for example, a field width was less than or equal to zero. A value of 1 was assumed, except for a P edit descriptor, for which a value of zero was assumed. 69[1] error (69): Process interrupted (SIGINT) FOR$IOS_SIGINT. The process received the signal SIGINT. Determine source of this interrupt signal (described in signal(3)). 70[1] severe (70): Integer overflow FOR$IOS_INTOVF. During an arithmetic operation, an integer value exceeded byte, word, or longword range. The result of the operation was the correct low-order part. See the Data Representation chapter in the user manual for ranges of the various integer data types. Consider specifying a larger integer data size. (modify source program or, for an INTEGER declaration, possibly use the f90 option -integer_size nn). 71[1] severe (71): Integer divide by zero FOR$IOS_INTDIV. During an integer arithmetic operation, an attempt was made to divide by zero. The result of the operation was set to the dividend, which is equivalent to division by 1. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ [2]The ERR transfer is taken after completion of the I/O statement for error numbers 59, 61, 63, 64, and 68. The resulting file status and record position are the same as if no error had occurred. However, other I/O errors take the ERR transfer as soon as the error is detected, so file status and record position are undefined. (continued on next page) A-16 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 72[1] error (72): Floating overflow FOR$IOS_FLTOVF. During an arithmetic operation, a floating-point value exceeded the largest representable value for that data type. See the Data Representation chapter in the user manual for ranges of the various data types. 73[1] error (73): Floating divide by zero FOR$IOS_FLTDIV. During a floating-point arithmetic operation, an attempt was made to divide by zero. 74[1] error (74): Floating underflow FOR$IOS_FLTUND. During an arithmetic operation, a floating-point value became less than the smallest finite value for that data type. Depending on the values of the -fpen option (see the user manual), the underflowed result was either set to zero or allowed to gradually underflow. See the Data Representation chapter in the user manual for ranges of the various data types. 75[1] error (75): Floating point exception FOR$IOS_SIGFPE. A floating-point exception occurred. Core dump file created. Possible causes include: o Division by zero o Overflow o Invalid operation, such as subtraction of infinite values, multiplication of zero by infinity (without signs), division of zero by zero or infinity by infinity o Conversion of floating-point to fixed-point format when an overflow prevents conversion [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) Run-Time Messages A-17 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 76[1] error (76): IOT trap signal FOR$IOS_SIGIOT. Core dump file created. Examine core dump for possible cause of this IOT signal. For more information about signals, see the user manual . ) 77[1] severe (77): Subscript out of range FOR$IOS_SUBRNG. An array reference was detected outside the declared array bounds. 78[1] error (78): Process killed (SIGTERM) FOR$IOS_SIGTERM. The process received the signal SIGTERM. Determine source of this software termination signal (described in signal(3)). 79[1] error (79): Process quit (SIGQUIT) FOR$IOS_SIGQUIT. The process received the signal SIGQUIT. Core dump file created. Determine source of this quit signal (described in signal(3)). [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-18 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 95[1] info (95): Floating-point conversion failed FOR$IOS_FLOCONFAI. The attempted unformatted read or write of nonnative floating-point data failed because the floating-point value: o Exceeded the allowable maximum value for the equivalent native format and was set equal to infinity (plus or minus) o Was infinity (plus or minus) and was set to infinity (plus or minus) o Was invalid and was set to not a number (NaN) Very small numbers are set to zero (0). This error could be caused by the specified nonnative floating-point format not matching the floating-point format found in the specified file. Check the following: o The correct file was specified. o The record layout matches the format Compaq Fortran is expecting. o The ranges for the data being used (the Data Representation chapter in the user manual) o The correct nonnative floating-point data format was specified (the Unformatted Data Conversion chapter in the user manual). 108 severe (108): Cannot stat file FOR$IOS_CANSTAFIL. Attempted stat operation on the indicated file failed. Make sure correct file and unit were specified. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) Run-Time Messages A-19 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 120 severe (120): Operation requires seek ability FOR$IOS_OPEREQSEE. Attempted an operation on a file that requires the ability to perform seek operations on that file. Make sure the correct unit, directory path, and file were specified. 130[1] severe (130): User breakpoint (SIGTRAP) FOR$IOS_BRK_USERBP. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. Examine core dump for possible cause. 131[1] severe (131): Kernel breakpoint (SIGTRAP) FOR$IOS_BRK_KERNELBP. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. Examine core dump for possible cause. 135[1] severe (135): User single step (SIGTRAP) FOR$IOS_BRK_SSTEPBP. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. Examine core dump for possible cause. 136[1] severe (136): Overflow check (SIGTRAP) FOR$IOS_BRK_OVERFLOW. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. The cause is an integer overflow. Try recompiling with the -check overflow option (perhaps with the decfort_dump_flag environment variable set) or examine the core dump file to determine the source code in error. 137[1] severe (137): Divide by zero check (SIGTRAP) FOR$IOS_BRK_DIVZERO. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. Examine core dump file for possible cause. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-20 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 138[1] severe (138): Array index out of bounds (SIGTRAP) FOR$IOS_BRK_RANGE. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. The cause is an array subscript that is outside the dimensioned boundaries of that array. Either recompile with the -check bounds option (perhaps with the decfort_dump_flag environment variable set) or examine the core dump file to determine the source code in error. 139[1] severe (139): Array index out of bounds for index nn (SIGTRAP) FOR$IOS_BRK_RANGE2. Break exception generated a SIGTRAP signal (described in signal(3)). Core dump file created. The cause is an array subscript that is outside the dimensioned boundaries of the array index n. Either recompile with the -check bounds option (perhaps with the decfort_dump_flag environment variable set) or examine the core dump file to determine the source code in error. 140[1] error (140): Floating inexact FOR$IOS_FLTINE. A floating-point arithmetic or conversion operation gave a result that differs from the mathematically exact result. This trap is reported if the rounded result of an IEEE operation is not exact. 144[1] severe (144): reserved operand FOR$IOS_ROPRAND. The Compaq Fortran RTL encountered an reserved operand. Please report the problem to Compaq. 145[1] severe (145): Assertion error FOR$IOS_ASSERTERR. The Compaq Fortran RTL encountered an assertion error. Please report the problem to Compaq. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) Run-Time Messages A-21 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 146[1] severe (146): Null pointer error FOR$IOS_NULPTRERR. Attempted to use a pointer that does not contain an address. Modify the source program, recompile, and relink. 147[1] severe (147): stack overflow FOR$IOS_STKOVF. The Compaq Fortran RTL encountered a stack overflow while executing your program. To increase your stack size limit, see the getting started chapter in the user manual. 148[1] severe (148): String length error FOR$IOS_STRLENERR. During a string operation, an integer value appears in a context where the value of the integer is outside the permissible string length range. Either recompile with the -check bounds option (perhaps with the decfort_dump_flag environment variable set) or examine the core file to determine the source code causing the error. 149[1] severe (149): Substring error FOR$IOS_SUBSTRERR. An array subscript is outside the dimensioned boundaries of an array. Either recompile with the -check bounds option (perhaps with the decfort_dump_flag environment variable set) or examine the core file to determine the source code causing the error. 150[1] severe (150): Range error FOR$IOS_RANGEERR. An integer value appears in a context where the value of the integer is outside the permissible range. 151[1] severe (151): Allocatable array is already allocated FOR$IOS_INVREALLOC. An allocatable array must not already be allocated when you attempt to allocate it. You must deallocate the array before it can again be allocated. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-22 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 152[1] severe (152): Unresolved contention for DEC Fortran RTL global resource FOR$IOS_RESACQFAI. Failed to acquire a Compaq Fortran RTL global resource for a reentrant routine. For a multithreaded program, the requested global resource is held by a different thread in your program. For a program using asynchronous handlers, the requested global resource is held by the calling part of the program (such as main program) and your asynchronous handler attempted to acquire the same global resource. 153[1] severe (153): Allocatable array is not allocated FOR$IOS_INVDEALLOC. A Fortran 90 allocatable array or pointer must already be allocated when you attempt to deallocate it. You must allocate the array or pointer before it can again be deallocated. 173[1] severe (173): A pointer passed to DEALLOCATE points to an array that cannot be deallocated FOR$IOS_INVDEALLOC2. A pointer that was passed to DEALLOCATE pointed to an explicit array, an array slice, or some other type of memory that could not be deallocated in a DEALLOCATE statement. Only whole arrays previous allocated with an ALLOCATE statement can be validly passed to DEALLOCATE. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) Run-Time Messages A-23 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 174[1] severe (174): SIGSEGV, message-text FOR$IOS_SIGSEGV. One of two possible messages (message- text above) appear for this error number: o severe (174): SIGSEGV, segmentation fault occurred This message indicates that the program attempted an invalid memory reference. Check the program for possible errors. o severe (174): SIGSEGV, possible program stack overflow occurred Program requirements exceed the maximum available stacksize resource limit. Contact your system administrator for help. 175 severe (175):DATE argument to DATE_AND_TIME is too short (LEN=n), required LEN=8 FOR$IOS_SHORTDATEARG. The number of characters associated with the DATE argument to the DATE_AND_TIME intrinsic was shorter than the required length. You must increase the passed in for this argument to be at least 8 characters in length. Verify that the TIME and ZONE arguments also meet their minimum lengths. 176 severe (176):TIME argument to DATE_AND_TIME is too short (LEN=n), required LEN=10 FOR$IOS_SHORTTIMEARG. The number of characters associated with the TIME argument to the DATE_AND_TIME intrinsic was shorter than the required length. You must increase the number of characters passed in for this argument to be at least 10 characters in length. Verify that the DATE and ZONE arguments also meet their minimum lengths. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-24 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 177 severe (177):ZONE argument to DATE_AND_TIME is too short (LEN=n), required LEN=5 FOR$IOS_SHORTZONEARG. The number of characters associated with the ZONE argument to the DATE_AND_TIME intrinsic was shorter than the required length. You must increase the number of characters passed in for this argument to be at least 5 characters in length. Verify that the TIME and DATE arguments also meet their minimum lengths. 178 severe (178): Divide by zero A floating point or integer divide by zero exception occurred. 179 severe (179): Cannot allocate array - overflow on array size calculation FOR$IOS_ARRSIZEOVF. An attempt to dynamically allocate storage for an array failed because the required storage size exceeds addressable memory. 256 severe (256): Unformatted I/O to unit open for formatted transfers FOR$IOS_UNFIO_FMT. Attempted unformatted I/O to a unit where the OPEN statement (FORM specifier) indicated the file was formatted. Check that the correct unit (file) was specified. If the FORM specifier was not present in the OPEN statement and the file contains unformatted data, specify FORM='UNFORMATTED' in the OPEN statement. Otherwise, if appropriate, use formatted I/O (such as list-directed or namelist I/O). (continued on next page) Run-Time Messages A-25 Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 257 severe (257): Formatted I/O to unit open for unformatted transfers FOR$IOS_FMTIO_UNF. Attempted formatted I/O (such as list-directed or namelist I/O) to a unit where the OPEN statement indicated the file was unformatted (FORM specifier). Check that the correct unit (file) was specified. If the FORM specifier was not present in the OPEN statement and the file contains formatted data, specify FORM='FORMATTED' in the OPEN statement. Otherwise, if appropriate, use unformatted I/O. 264 severe (264): operation requires file to be on disk or tape FOR$IOS_OPERREQDIS. Attempted to use a BACKSPACE statement on such devices as a terminal or pipe. 265 severe (265): operation requires sequential file organization and access FOR$IOS_OPEREQSEQ. Attempted to use a BACKSPACE statement on a file whose organization was not sequential or whose access was not sequential. A BACKSPACE statement can only be used for sequential files opened for sequential access. 266[1] error (266): Fortran abort routine called FOR$IOS_PROABOUSE. The program called abort to terminate the program. For more information on signals, see the user manual. 268[1] severe (268): End of record during read FOR$IOS_ENDRECDUR. An end-of-record condition was encountered during execution of a nonadvancing I/O READ statement that did not specify the EOR branch specifier. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ (continued on next page) A-26 Run-Time Messages Table_A-1_(Cont.)_Run-Time_Error_Messages_and_Explanations_______ Severity Level, Number, and Message Text; Condition Symbol Number_and_Explanation___________________________________________ 296[1] info (296): nn floating inexact traps FOR$IOS_FLOINEEXC. "The total number of floating- point inexact data traps encountered during program execution was nn. This summary message appears at program completion. 297[1] info (297): nn floating invalid traps FOR$IOS_FLOINVEXC. The total number of floating- point invalid data traps encountered during program execution was nn. This summary message appears at program completion. 298[1] info (298): nn floating overflow traps FOR$IOS_FLOOVFEXC. The total number of floating-point overflow traps encountered during program execution was nn. This summary message appears at program completion. 299[1] info (299): nn floating divide-by-zero traps FOR$IOS_FLODIV0EXC. The total number of floating- point divide-by-zero traps encountered during program execution was nn. This summary message appears at program completion. 300[1] info (300): nn floating underflow traps FOR$IOS_FLOUNDEXC. The total number of floating-point underflow traps encountered during program execution was nn. This summary message appears at program completion. [1]Identifies_errors_not_returned_by_IOSTAT._____________________ _________________________________________________________________ Run-Time Messages A-27