Compaq_Fortran______________________________________ Release Notes for Compaq Tru64 UNIX Systems | | January 2002 | | 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.5 | 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 Revision, April 2001 Revision, June 2001 | Revision, January 2002 Confidential computer software. Valid license from Compaq required for possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard commercial license. Compaq shall not be liable for technical or editorial errors or omissions contained herein. The information in this document is provided "as is" without warranty of any kind and is subject to change without notice. The warranties for Compaq products are set forth in the express limited warranty statements accompanying such products. Nothing herein should be construed as constituting an additional warranty. | | © 2002 Compaq Information Technologies Group, L.P. | | AlphaGeneration, AlphaServer, COMPAQ, the Compaq Logo, | DEC, DEC Fortran, DEC FUSE, DIGITAL, OpenVMS, Tru64, | ULTRIX, VAX, VAX FORTRAN, and VMS are trademarks of Compaq | Information Technologies Group, L.P. in the United States | and/or other countries. Microsoft, PowerStation, NT, and Windows are either trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. 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, OSF/1, and UNIX are trademarks of the Open Software Foundation in the United States and/or other countries. All other product names mentioned herein may be trademarks of their respective companies. This document is available on CD-ROM. This document was prepared using VAX DOCUMENT Version 2.1. _________________________________________________________________ Contents 1 Compaq Fortran Version 5.5 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.5 kit........... 1-3 1.4.2 Contents of High Performance Fortran in Version 5.4A.............................. 1-4 1.4.3 Miscellaneous Information about the Version 5.5 Kit........................... 1-5 1.5 New Features, Corrections, and Known Problems in Version 5.5................................ 1-6 1.5.1 Version 5.5 New Features.................. 1-6 1.5.2 Version 5.5 Important Information......... 1-8 1.5.3 Version 5.5 Corrections................... 1-9 1.5.4 Version 5.5 Known Problems ............... 1-13 1.6 Known Limitations............................. 1-14 1.7 New Features, Corrections, and Known Problems in Version 5.4................................ 1-15 1.7.1 Version v5.4A ECO #1 New Features......... 1-15 1.7.2 Version 5.4A New Features................. 1-19 1.7.3 Version 5.4 New Features.................. 1-24 1.7.4 Version 5.4 Important Information......... 1-30 1.7.5 Version 5.4 Corrections................... 1-31 1.7.6 Version 5.4 Known Problems ............... 1-35 1.8 New Features, Corrections, and Known Problems in Version 5.3................................ 1-35 1.8.1 Version 5.3 ECO 02 New Features........... 1-36 1.8.2 Version 5.3 ECO 01 New Features........... 1-37 1.8.3 Version 5.3 ECO 01 HPF New Features....... 1-45 1.8.4 Version 5.3 New Features.................. 1-51 iii 1.8.5 Version 5.3 Important Information......... 1-54 1.8.6 Version 5.3 Corrections................... 1-54 1.8.7 HPF in Compaq Fortran Version 5.3 ........ 1-58 1.8.8 Version 5.3 Known Problems ............... 1-60 1.9 New Features, Corrections, and Known Problems in Version 5.2................................ 1-60 1.9.1 Version 5.2 ECO 01 New Features........... 1-60 1.9.2 Version 5.2 New Features.................. 1-69 1.9.3 Version 5.2 Important Information......... 1-70 1.9.4 Version 5.2 Corrections................... 1-72 1.10 High Performance Fortran (HPF) Support in Version 5.2................................... 1-79 1.10.1 Optimization.............................. 1-80 1.10.1.1 The -fast Compile-Time Option........... 1-80 1.10.1.2 Non-Parallel Execution of Code.......... 1-81 1.10.1.3 INDEPENDENT DO Loops Currently Parallelized............................ 1-81 1.10.1.4 Nearest-Neighbor Optimization........... 1-83 1.10.1.5 Widths Given with the SHADOW Directive Agree with Automatically Generated Widths.................................. 1-84 1.10.1.6 Using EOSHIFT Intrinsic for Nearest Neighbor Calculations................... 1-84 1.10.2 New Features.............................. 1-85 1.10.2.1 RANDOM_NUMBER Executes in Parallel...... 1-85 1.10.2.2 Improved Performance of TRANSPOSE Intrinsic............................... 1-85 1.10.2.3 Improved Performance of DO Loops Marked as INDEPENDENT.......................... 1-85 1.10.3 Corrections............................... 1-86 1.10.4 Known Problems............................ 1-86 1.10.4.1 "Variable used before its value has been defined" Warning........................ 1-86 1.10.4.2 Mask Expressions Referencing Multiple FORALL Indices.......................... 1-86 1.10.5 Unsupported Features...................... 1-86 1.10.5.1 SMP Decomposition (OpenMP) not Currently Compatible with HPF..................... 1-86 1.10.5.2 Command Line Options not Compatible with the -wsf Option......................... 1-86 1.10.5.3 HPF_LOCAL Routines...................... 1-87 1.10.5.4 SORT_UP and SORT_DOWN Functions......... 1-87 1.10.5.5 Restricted Definition of PURE........... 1-87 iv 1.10.5.6 Restrictions on Procedure Calls in INDEPENDENT DO and FORALL............... 1-88 1.10.5.7 Restrictions on Routines Compiled with -nowsf_main............................. 1-89 1.10.5.8 RAN and SECNDS Are Not PURE............. 1-89 1.10.5.9 Nonadvancing I/O on stdin and stdout.... 1-90 1.10.5.10 WHERE and Nested FORALL................. 1-90 1.10.6 Obsolete Features Deleted................. 1-92 1.10.6.1 GLOBAL_TO_PHYSICAL and GLOBAL_LBOUNDS are Deleted............................. 1-92 1.10.7 Miscellaneous............................. 1-93 1.10.7.1 What To Do When Encountering Unexpected Program Behavior........................ 1-93 1.10.7.1.1 Incompatible or Incomplete Libraries Installed.............................. 1-93 1.10.7.1.2 Segmentation Faults.................... 1-94 1.10.7.1.3 Programs that Hang..................... 1-95 1.10.7.1.4 Programs with Zero Sized Arrays........ 1-95 1.10.7.2 Stack and Data Space Usage.............. 1-96 1.10.7.3 Non-"-wsf" main programs................ 1-96 1.10.7.4 Using "-std" Disables HPF Directive Checking................................ 1-96 1.10.7.5 Use the Extended Form of HPF_ALIGNMENT........................... 1-96 1.10.7.6 EXTRINSIC(SCALAR) Changed to EXTRINSIC(HPF_SERIAL)................... 1-97 1.10.8 Example Programs.......................... 1-97 1.11 New Features and Corrections in Version 5.1... 1-98 1.11.1 Version 5.1 New Features.................. 1-98 1.11.2 Version 5.1 Corrections................... 1-104 1.11.3 HPF Version 5.1 New Features.............. 1-109 1.11.3.1 SHADOW Directive Now Supported.......... 1-109 1.11.3.2 Pointers Now Handled in Parallel........ 1-109 1.11.3.3 SHADOW Directive Required for Nearest-Neighbor POINTER or TARGET Arrays.................................. 1-109 1.11.3.4 Descriptive Mapping Directives are Now Obsolescent............................. 1-110 1.11.3.5 New support for HPF Local Library Routines GLOBAL_LBOUND and v GLOBAL_UBOUND........................... 1-111 1.11.3.6 REDUCTION Clause in INDEPENDENT Directives.............................. 1-111 1.11.3.7 HPF_SERIAL Restriction Lifted for Procedures Called from INDEPENDENT DO Loops................................... 1-111 1.11.4 HPF Version 5.1 Corrections............... 1-111 1.12 New Features and Corrections in Version 5.0... 1-112 1.12.1 Version 5.0 New Features.................. 1-112 1.12.2 Version 5.0 Corrections................... 1-116 1.13 Additional Information........................ 1-122 1.13.1 The Compaq Fortran Home Page.............. 1-122 1.13.2 Support for the Fortran 95 Standard Features.................................. 1-122 1.13.3 Preliminary Information on Support for Big Objects................................... 1-125 1.13.4 New Random Number Algorithm............... 1-127 1.13.5 Compaq Fortran 77 Pointers................ 1-128 1.13.6 Extended Precision REAL (KIND=16) Floating-Point Data....................... 1-129 1.13.7 Variable Format Expressions (VFEs)........ 1-129 1.13.8 Notes on Debugger Support................. 1-130 1.13.8.1 Ladebug Debugger Support Notes.......... 1-131 1.13.8.2 dbx Debugger Support Notes.............. 1-132 1.13.9 Notes on Fast Math Library Routines....... 1-133 1.13.10 The Compaq Fortran Array Descriptor Format.................................... 1-133 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 vi 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 3.4 Other Sources of Information About Fortran 95/90......................................... 3-5 A Run-Time Messages vii 1 _________________________________________________________________ Compaq Fortran Version 5.5 Release Notes This chapter contains release notes for Compaq Fortran Version 5.5 (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.5) o Section 1.6 (Known Limitations) o Section 1.7 (New Features, Corrections, and Known Problems in Version 5.4) o Section 1.8 (New Features, Corrections, and Known Problems in Version 5.3) o Section 1.9 (New Features, Corrections, and Known Problems in Version 5.2) o Section 1.10 (High Performance Fortran (HPF) Support in Version 5.2) o Section 1.11 (New Features and Corrections in Version 5.1) o Section 1.12 (New Features and Corrections in Version 5.0) o Section 1.13 (Additional Information) Compaq Fortran Version 5.5 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.5 Release Notes 1.3 Installation and Minimum Operating Systems Version Compaq Fortran Version 5.5 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.5. | | 1.4.1 Contents of the Version 5.5 kit | | The Compaq Fortran Version 5.5 kit consists of the | following setld sets: | | o DFABASE550-Compaq Fortran 90 and 77 V5.5 for Compaq | Tru64 UNIX Alpha Systems | | o DFADOC550 -Compaq Fortran V5.5 Release Notes and Man | Page | | o DFACOM550 -Compaq Fortran V5.5 Tools & their Man Pages | | o DFARTL402 -Compaq Fortran RTL #402 for Compaq Tru64 UNIX | Alpha Systems | | o OTABASE219-Compaq Compiled Code Support Library #219 | Compaq Fortran Version 5.5 Release Notes 1-3 | o HPFLIBS190-Compaq Fortran V5.4A ECO #1 High Performance | Fortran Runtime Libraries | | o XMDCOM510 -the CXML common subset files | | o XMDLIB4510-the CXML archive and shared libraries (serial | and parallel) for EV4 systems | | o XMDLIB5510-the CXML archive and shared libraries (serial | and parallel) for EV5 systems | | o XMDLIB6510-the CXML archive and shared libraries (serial | and parallel) for EV6 systems | | o XMDSCI510 -the SCIPORT Cray compatibility library and | manpages | | o XMDMAN510 -the CXML manpages | | o XMDHTM510 -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.4A 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.5 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.8.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.5 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.5 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.5 | | Version 5.5 is a minor release that includes corrections | to problems discovered since Version 5.4 was released and | certain new features. | | For the Version 5.5 subset numbers, see Section 1.4. | | The following topics are discussed: | | o Section 1.5.1 (Version 5.5 New Features) | | o Section 1.5.2 (Version 5.5 Important Information) | | o Section 1.5.3 (Version 5.5 Corrections) | | o Section 1.5.4 (Version 5.5 Known Problems ) | | 1.5.1 Version 5.5 New Features | | The following new Compaq Fortran features are now | supported: | | o The following new features are now supported: | | - f90 V5.5 contains the initial work to support | allocatable components of derived types. | | - OpenMP enhancements: support for nested OpenMP | parallel regions, and added support for the num_ | threads clause which selects the number of threads | a parallel region will use based on a run time | expression. 1-6 Compaq Fortran Version 5.5 Release Notes - Notice a difference between the Fortran 95 standard | feature of initialized derived types and the | VAX Fortran extension of initialized STRUCTUREs: | initialized derived types are not SAVEd by default; | initialized STRUCTUREs are. | | - Improved algorithm for making inlining decisions that | will tend to do more inlining, especially when many | small routines are inlined into one another. | | - Improvements to general optimizer: prefetching, | software pipelining, strength, pulling branches out | of loops, allowing more existing optimizations to | fire. | | - Parallel programs running on Non-Uniform Memory | Access (NUMA) machines using the following | directives, compiler options, and environment | variables is available but unsupported: | | * !DEC$ MIGRATE_NEXT_TOUCH | | * !DEC$ MIGRATE_NEXT_TOUCH_NOPRESERVE | | * !DEC$ OMP NUMA | | * !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE | | * !DEC$ ALIGN - same as !HPF$ ALIGN | | -numa | Fortran 90 only. Enables NUMA parallel processing and|the NUMA command line options -numa_memories and -numa_tpm. NU|A paral- lel processing is indicated by inserting certain !DEC$|direc- tives in your source code. Option -omp must also be s|ecified. The default is -nonuma. | | -numa_memories num | Fortran 90 only. Specifies the number of memories (RA|s) to be used for NUMA parallel processing. Option -numa must |lso be specified. If -numa_memories does not appear on the c|mmand line or if num is 0, the number of memories will be ch|sen at run-time either from the NUMA_MEMORIES environment var|able (if it is set) or by the system. | Compaq Fortran Version 5.5 Release Notes 1-7 | -numa_tpm num | Fortran 90 only. Specifies the number of threads per memory to | be used for NUMA parallel processing. Option -numa must also | be specified. num is the number of threads per physical memory | that will execute NUMA parallel features in the program. If | -numa_tpm does not appear on the command line or if num is 0, | the number of threads per memory will be chosen at run-time | either from the NUMA_TPM environment variable (if it is set) or | by the system. | | The "Parallel Processing on Tru64 UNIX Systems" | manual that describes NUMA parallel processing in | Compaq Fortran is available after installation in | /usr/lib/cmplrs/fort90/fort55_parallel_manual.ps . | | o The following new f90 command options are now supported. | See the f90(1) man page for details. | | - Nothing new in this version. | | - -hpf_target pse is no longer supported. | | o The following new run-time features are now supported: | | - Nothing new in this version. | | o See the new features listed in Section 1.7.1 (Version | v5.4A ECO #1 New Features) | | o The Compaq Extended Math Library (CXML) routines are | unchanged in the Compaq Fortran kit. See the CXML | release notes in: | | /usr/opt/XMDCOM410/docs/XMD410_release_note.txt | | 1.5.2 Version 5.5 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 "@(.)" | 1-8 Compaq Fortran Version 5.5 Release Notes 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. | | - "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this | object file was created. | | 1.5.3 Version 5.5 Corrections | | From DFA542 ECO #1 X5.4A-1684-46B5P to DFA550 FT1 T5.5- | 1736-48B88, the following corrections have been made: | | o Fix UNIX driver to diagnose -fpscomp with no argument. | | o Allow 'null()' in structure constructors to initialize | allocatable fields. | | o Accept and promote SUBRNAME/FUNCNAME symbols previously | defined in interface blocks as module procedures. | | o Reset NUM_THREADS to NULL when processing a !$OMP | PARALLEL directive. | | o Allow NUM_THREADS clause on an !$OMP PARALLEL SECTIONS | directive. | | o Resolve references to derived type fields by combining | visibility of various pieces of the hierarchy from | different modules. | | o Treat hex/oct - typeless constants as int8 when used | as args of call on 64-bit processors; when typeless | constant parameters are used, force to int8 and not to | default integer type. | | o Handle initialization of fields of structures of the | form: type :: variable = constant | | o Diagnose attempt to initialize a scalar field with an | array. | Compaq Fortran Version 5.5 Release Notes 1-9 | o Give a fatal error when NUM_THREADS is a constant value | .le. zero. | | o Add error message 1830: "Multiple OMP NUM_THREADS | clauses in a parallel region are not allowed". | | o Possible to get wrong answer when MAX or MIN references | an optional argument. | | o Begin generating MODULE debug information. | | o Significantly improve compilation time for certain | large (and usually machine-generated) programs when | uninitialized variable detection is not selected and | optimization level is 0. | | From DFA550 FT1 T5.5-1736-48B88 to DFA550 FT2 T5.5-1775- | 48B9D, the following corrections have been made: | | o Additional (re)initialization to fix internal compiler | errors when compiling with /separate_compilation on vms. | | o Additional (re)initialization to fix internal compiler | errors when the same file appears twice on command line. | | o Correctly associate defined assignment generic | procedures. | | o Give -std warning for adjacent operators even if operand | is numeric. | | o When terminating a compilation because of too many | diagnostics of a given severity, msg_report would | try to append an "s" to a string in read-only memory. | Manipulate a local character buffer instead. | | o Add more module debugging information. | | o Resolve one more conflict resulting from overloading | of 'dot' as field separator and as dotted_operator | delimiter, when the field name matches operator name, | e.g. 'LT'. | | o Treat 'optional' arguments as 'matching' arguments when | comparing generic specifications. | | o We need to mark variables in a CRITICAL directive (both | -mp and -omp) as VOLATILE_READS and VOLATILE_WRITES. 1-10 Compaq Fortran Version 5.5 Release Notes o Add new error messages: 1831 - 'List directed ENCODE | /DECODE not supported'; and 1832 - 'Greater than 7 | dimensions is non-standard' | | o With standard switch - warn about use of greater than 7 | dimensions. | | o Disallow list directed ENCODE/DECODE. | | o Enhance debug output for automatic interface generation. | | From DFA550 FT2 T5.5-1775-48B9D to DFA550 V5.5-1877-48BBF, | the following corrections have been made: | | o Fix CVF15588. ICE when passing a non-contiguous array | with -check bounds. | | o Fix BUG2658. Nested WHERE with different data types can | get ICE when we put out an IAND without converting one | of the data types. The bug does NOT happen with a WHERE | in a FORALL. | | o Note 2953. Bug2661.f90. Correct alignment computations | for unions. Align each 'map' component to most demanding | component. | | o Change message about unused statement functions from | warning to info. Note 2954. Bug 2662. | | o CVF15596. Determine correctly the length of a character | function that uses intrinsics. | | o Bug2663. Note 15459. Fix incorrect handling of | intrinsics in SUBSTRS. Recognize possibility of null | string in array constructors. | | o CVF 15569. Make sure record/structure types of common | variables are exported {recursively}. | | o Bug2665.f bug bug2666.f90 When dummy argument of | procedure in an interface block is an undetermined | procedure (subroutine or function) - issue diagnostic | if the procedure is referenced with an actual array arg. | | o Bug2664.f90 - diagnose name which is both a pointee and | a common variable, regardless of which specification | comes first. | | o Bug2668.f90, Note 2959. Resolve symbols in bounds | expressions even if PRIVATE. | Compaq Fortran Version 5.5 Release Notes 1-11 | o Implement feature, under switch control, which causes | all quoted strings to be interpreted as 'c-strings', | i.e. having trailing binary null character; and which | may contain escape sequences. | | o Bug2667. Issue diagnostic for reference to function | result field outside its host associated scope: 'Use of | this function name is not valid in this context'. | | o Bug2672.f90 Detect 'rename' when resolving intrinsic | function references. | | o Issue message indicating conflict between identical | names from different modules - one generic and one | specific. | | o Cvf15747. Another place where "." was not equivalent to | "%" in a field reference. | | o Bug2673. Elim erroneous diag of common equivalences. | | o -fast => -assume cc_omp (unix driver only). DFB3612. | {should only happen if -omp is present} | | o Bug2678.f90 . Recognize the fact that a record | constructor does not contain only constants but contains | variable(s) as well. | | o Support allocatable components of records. The changes | support assignment, automatic deallocation of locals | at end of routine, structure constructors, et. al. The | biggest piece of code relates to assignment, where we | do nested deallocation/ allocation on where the LHS | contains allocatable components which are either not yet | allocated or allocated to a different size from the RHS. | | o FORTRAN Note 2977. Enable code which inhibits reload of | imported module which has neither ONLYs nor renames. | | o Allow inquire(iolength=l) for pointer and allocatable | array fields. | | o Improve handling of bad source line, free form, having | only a number of 10-digit integers. Use max of 5 digits | in label construction. | | o Refine test for complex number. | | o Make initialized VAX structures SAVE but initialized DT | not SAVEd. 1-12 Compaq Fortran Version 5.5 Release Notes o bug2680.f90 - Walk components of array constructor and | if typeless and untyped, attach type to components and | to constructor. Inhibit generation of diag for use of | typeless constant in an array constructor where there is | one or more elements which are not typeless. | | o When importing generic names and looking to see if | name matches an intrinsic, used renamed string, if any. | bug2690. | | o bug2691.f One more conflict resulting from overloading | of 'dot' as field separator and as dotted_operator | delimeter. | | o Bug2688.f90 For associated intrinsic - check attributes | of component of derived_type/vax_structure for pointer | /target properties, as well as of simple operand. | | o Prevent using declaring module field as in if null, as | for blank common block entries. Bug2695 | | o Bug2689. Add diagnostic 1835: "Record fields or array | elements or sections of pointers are not themselves | pointers." For associated intrinsic - disallow use of | array elements or array cross-sections or fields of | pointer records as 'pointer' operand. Issue diagnostics. | | o bug2691.f Maintain left to right precedence in trees | originating from overloaded use of dot operator | | o bug2697.f Compute array descriptors and record sizes as | function of platform. | | o -fast => -assume cc_omp only when -omp seen. See FORTRAN | 2999. | | 1.5.4 Version 5.5 Known Problems | | The following known problems exist with Compaq Fortran | Version 5.5: | | o The following is a list of known problems for -omp and | -mp parallel support in Version 5.5: | | - 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: | Compaq Fortran Version 5.5 Release Notes 1-13 | 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$_ | | 1.6 Known Limitations | | The following limitations exist in Version 5.5: | | 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 1-14 Compaq Fortran Version 5.5 Release Notes - 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.4 Version v5.4A ECO #1 is a minor release that includes corrections to problems discovered since Version 5.4A was released and certain new features. The following topics are discussed: o Section 1.7.1 (Version v5.4A ECO #1 New Features) o Section 1.7.2 (Version 5.4A New Features) o Section 1.7.3 (Version 5.4 New Features) o Section 1.7.4 (Version 5.4 Important Information) o Section 1.7.5 (Version 5.4 Corrections) o Section 1.7.6 (Version 5.4 Known Problems ) 1.7.1 Version v5.4A ECO #1 New Features The following new Compaq Fortran features are now supported: o The following new features are now supported: - Modify the way that complex (and double complex) arguments are passed (and received) by value. This is an INCOMPATIBLE CHANGE. Old objects/libraries will NOT work with new. The end result is that on ALL platforms we will pass a complex (or double complex) as two real (or double) values when the user requests passing by value. - An undefined compile time variable in an expression now has the value 0. Compaq Fortran Version 5.5 Release Notes 1-15 - Initialized records are re-initialized at every entry point. - COUNT and ZEXT now allow optional 'KIND' argument. - The IF DEFINED directive is documented in the LRM so that IF .NOT. DEFINED(...) isn't allowed; but it is. DEFINED is like a logical function and can be part of the expr in IF (expr)... . From DFA541 V5.4A-1472-46B2F to DFA542 X5.4A-1684-46B5P, the following corrections have been made: o Fix incorrect processing of %fill(lb:ub). o For otherwise unattributed parameter, assign to it the type of its value (where, typeless constant value defaults to default-type-integer). o Fix problem which occurs when a symbol which exists in a public list, is visible in one 'use' chain, and is mistakenly treated as 'public' when imported from a second use chain where it is private and invisible. o Do platform-specific diagnostics for open keyword specifiers. o Issue diagnostic for an actual argument which has a vector subscript if dummy has intent(out) or intent(inout). Do this even if arg of defined_assignment subroutine. o Fix problem that resulted in incorrect warnings about RESHAPE function and the size of the ORDER argument. o Accept 'character*(length) %fill' without '::' separating type/entity. o In the UNIX driver, don't link against libexc if the user is compiling multi-threaded. When they compile multi-threaded, cc automatically adds it in the correct place in the "lineup". o Implement ALIGN=xx values consistently. Also, support ALIGN=PAGE on all platforms (which is new) and set the alignment to whatever a "page" means on that platform. 1-16 Compaq Fortran Version 5.5 Release Notes o Generate better debug information for dummy arguments which are subroutines or functions. In particular, make a dummy argument which is a subroutine look like a subroutine instead of a function. In addition, if there is an INTERFACE specification for the dummy routine, put out information about the arguments. For example: SUBROUTINE FOO(BAR) INTERFACE FUNCTION BAR(X,I) DOUBLE PRECISION X INTEGER I END FUNCTION END INTERFACE ... END We will now provide debug information for the arguments X and I. o Collect ALL generic entries for a name from the set generated during import. Multiple modules may validly contain generic specifications for a single symbol. o Process fpscomp options general and ldio_spacing in a left-to-right order. o Fix SIZE(A,DIM) where DIM is an optional argument. o Correctly diagnose an incorrect number of arguments in a structure constructor. o Allow MAX and MIN to have optional arguments. o Optimize module importing when 'use' occurs within interface blocks. o Modify the way that complex (and double complex) arguments are passed (and received) by value. This is an INCOMPATIBLE CHANGE. Old objects/libraries will NOT work with new. The end result is that on ALL platforms we will pass a complex (or double complex) as two real (or double) values when the user requests passing by value. This will also happen when the user requests that the routine have a "C" calling standard. There are two motivations for this incompatible change: the Alpha Calling Standard changed and the C++ standard is going to introduce a COMPLEX data type, which will be implemented according to the Alpha Calling Standard. Compaq Fortran Version 5.5 Release Notes 1-17 o Mark the array descriptor for an explicitly shaped array function result as quadword aligned. o Ignore migrate directives if -omp and -numa are not set. o Treat use of undefined compile time variable in expression as integer with value 0. Do not diagnose. o Get debugging information put out at all (appropriate) ENTRY points. In particular, put out prolog code for dynamic array bounds for array dummy arguments and for f90 automatic arrays. Before this edit, we were only putting out prolog code at the FIRST entry point referencing the array as an argument (or the subroutine /function for the case of an f90 automatic array). o Handle generic defined operator, merging specifics from multiple modules; honoring 'only' defined operator. o VAX structures like F90 defined types. o Fix bug in WHERE in FORALL where WHERE mask contains a call to an elemental function. o Initialized records need to be re-initialized at every entry point. With edit 1213 we changed our handling of initialized records to give them the SAVE attribute. This was in keeping with long-standing f77 practice and documentation. However, Fortran-95 prescribes that local initialized defined-types (records) be initialized every time into a routine. This requires a documentation change (to SAVE). o Fix generated code for optional arguments to SELECTED_ REAL_KIND. o Recognize match between actual 'procedure' argument with pointer attribute and dummy 'procedure' argument with pointer attribute. o Accept a VAX scalar field name reference (x.y) where x currently known as parameter object of structure type. o Recognize renamed generic in 'use' where there also is an 'only' clause. o COUNT and ZEXT now allow optional 'KIND' argument. o Get the LOCATOR correct for all ENTRY SYMBOLs. Debugging problem. 1-18 Compaq Fortran Version 5.5 Release Notes o Do NOT evaluate the argument to any numeric inquiry function (like HUGE). o Make actual argument which is a function returning a scalar pointer work correctly. o Fix access to module from path specified on command line. o Array passing optimization was not working correctly for assumed shape arrays being passed as explicit arrays. 1.7.2 Version 5.4A New Features The following new Compaq Fortran features are now supported: o The following new features are now supported: - When -fast -std is specified {using any of the -std* options, the -align options dcommon and sequence will not be set. - -hpf n is now the preferred spelling for -wsf n. From DFA540 V5.4-1265-46ABA to DFA541 V5.4A-1472-46B2F, 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 diag :"The NOSEQUENCE directive may not be specified for a component of a derived type which has the SEQUENCE attribute.", o Issue diag if NOSEQUENCE directives are applied to fields of 'sequence' derived types. o Use new RTL routine, for_check_mult_overflow(), to calculate the size of an array to be allocated, passing flag returned to for_allocate(). o Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC et al. The mask has an expression for the dimension bound(s). o Allow, without assertion violation - subroutines generated by transform to be ignored during export. Compaq Fortran Version 5.5 Release Notes 1-19 o When a psect becomes too big, give a better error message: ME_STOREQEXC "Psect !AD is too large. Reduce array sizes or make arrays AUTOMATIC or ALLOCATABLE." o Allow character substring assignment in forall. o Export intrinsic function which is a module generic if it is referenced. o Make -fast set the align_dcommons bit. The effect is ONLY on the listing (the code was already doing correct alignment; only the listing was incorrect). o Make much better locators when debugging programs with adjustably dimensioned arrays. o Deal with PRIVATE fields of a type that is not PRIVATE. o Fix several problems with nested modules with rename and only. o When exporting function/subroutines, walk 'used' parameter list and collect those derived types which are needed, i.e. add to export list. (Similar to collecting types of dummy args for export). o Fix regression in inline_sizeof. o Call foo(NINT) should pass JNINT instead of ININT. o Add support for passing KIDNNT, KNINT and IQNINT as actual arguments on UNIX platforms. o Passing IDINT should use integer*4 instead of integer*2 routine names. o Issue diagnostic for character string as arg to RECL= in OPEN statement. o If substring index in a FORALL assignment stmt uses one of the indexing variables, need to calculate size differently, otherwise get used before defined problems. o Walk dummy arguments as well function result, parameters and globals used as bound variables to pick up for export 'record types' which are not otherwise used in module procedure. o Fix problem with -warn truncated. 1-20 Compaq Fortran Version 5.5 Release Notes o If the argument to DFOR$PREFETCHxxx is any real or complex type, use that type on the PREFETCH tuple. All other types continue to use INT32. o Diagnose prefetch arguments which are not variables, array element references or structure component references. o Diagnose missing intent attributes on pure (explicitly or implicitly if elemental) subroutine args which are neither pointers nor procedures. o Diagnose mask expressions with incompatible shapes in where constructs and contained where/elsewheres. o Relax strict statement/token construction if errors encountered while processing cdec directive 'if' or 'elseif' . o When terminating nested do loops/constructs, recognize and process OMP END DO. o Impose standard restriction that defined-operator names consist only of letters. o Correctly pass complex by value on Alpha platforms. This fix makes us follow the Alpha calling standard. Note: This is an INCOMPATIBLE change. o Allow -fpscomp [no]ldio_spacing. o -fpscomp:general => -fpscomp:ldio_spacing. o Handle leading 0s in subscript constants. o Fix problem with dot as field separator. o For default complex, special case ccos, cexp, clog, csin, csqrt to be type of arg; similarly for default real type, special case alog, alog10 o Fix inquire with IOLENGTH=FIELD%NAME or array element. o Array in derived type and explicit-shaped array slices now avoids temp creation and copy-in/copy-out when passing arrays. o Do not diagnose fields of private types as inaccessible within the defining module, just outside the module. Compaq Fortran Version 5.5 Release Notes 1-21 o Disallow ALLOW_NULL/REFERENCE attributes with assumed shape arrays. o Make fields having a PRIVATE derived type invisible. o Allow dummy args to be used as args to inquiry intrinsics in specification statements without requiring intent IN. Force private module variables used in specification statements of a procedure, even as args to inquiry intrinsics, to be exported. o Allow NUM_THREADS clause in a PARALLEL directive. This already was handled properly in a PARALLELDO directive. o Fix problem with FORALL masks with -integer_size 64. o Alphabetize annotations, fpscomp options. o When putting out a null for a not present optional argument, get the arg position correct. o Fix code in forall/elsewhere processing. o Alphabetize show, warnings options. Restrict -warn hpf to unix. o If /fpscomp:general, and STATUS omitted from OPEN, supply "default" code rather than "new" or "unknown", because FPS had its own rule for this that doesn't match what o If not 'renamed' force the loading of generic/specific declaration record whose generic name appears in source; resulting in the collecting of individual specifics from different modules. o Detect and diagnose illegal value in octal/hex/binary constant when used as operand to unary operator o Accept '$' at the end of a range of letters in the implicit statement. o Allow -hpf [n] on unix; treat like -wsf [n]. o Speed up compiling DATA initialization statements. o For -assume dummy_alias, make all COMMON block variables and Module variables always work. 1-22 Compaq Fortran Version 5.5 Release Notes o Change error code for edit 1396. Make 1813. 'ALLOW_NULL and REFERENCE attribute pair is disallowed with assumed shape arrays.' o When detecting end of statement function acceptability, and sitting on array element/section assignment, conclude function result-variable processing to make variable available to statement in progress. o Consider duplicate if 'optional arg' specs match and if all non-optional arg specs match. o Fix PACK when the MASK is .FALSE. (or when the MASK is a scalar expression whose value is not known at compile time). o Fix "mapped" pointee checking problem. The code which attempts to deliver an error when a pointee is HPF "mapped" cannot handle array pointees. o Fix INTEGER x(10), y(10); DATA x(1:10) /1/; DATA y/10*0 /; END o Integer*8 fixes for selected_xx_kind, passing integers, and added for_kdate entry point. o Within a procedure in a 'contain' scope, identify strings as type statements and not as function definitions. o To conditionally diagnose non-standard, calculable, recursive use in type-parameter specification, of symbol being defined . CHARACTER :: C(10)*(SIZE(C,1)) o Detect and diagnose the assignment to a function result of external procedure, and not to function result of current o Diagnose instead of generating assertion violation, non-calculable, recursive use in bounds specification, of symbol being defined. INTEGER :: A(KIND(A)),G(BIT_ SIZE(G)),I(DIGITS(I)). o Allow recursive reference to parameter by inquiry functions in initialization expression if query is about known property. TYPE PARAMETER :: EP = BIT_SIZE(EP), HP = DIGITS(HP), XP = EPSILON(XP) . Compaq Fortran Version 5.5 Release Notes 1-23 o Cause front end to generate warning diagnostics for integer overflow, i.e. when I4 computation exceeds I4 capacity. o Issue error for previously undiagnosed VOLATILE /PARAMETER declaration. o If -fast is set *and* -standard (however it's spelled) is set, don't set the non-standard switches such as -align dcommons and -align sequence. o Improve instruction scheduling {SLOT4}. 1.7.3 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 * !DEC$ OMP NUMA * !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE * !DEC$ ALIGN - same as !HPF$ ALIGN -numa Fortran 90 only. Enables NUMA parallel processing and the NUMA command line options -numa_memories and -numa_tpm. NUMA paral- lel processing is indicated by inserting certain !DEC$ direc- tives in your source code. Option -omp must also be specified. The default is -nonuma. 1-24 Compaq Fortran Version 5.5 Release Notes -numa_memories num Fortran 90 only. Specifies the number of memories (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 environment 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 -numa must also be specified. num is the number of threads per physical memory that will execute NUMA parallel features in the program. If -numa_tpm does not appear on the command line or if num is 0, the number of threads per memory will be chosen at run-time either from the NUMA_TPM environment variable (if 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) 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. Compaq Fortran Version 5.5 Release Notes 1-25 - 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 * MS Unformatted Direct Access * MS Formatted Sequential Access * MS Formatted Direct Access * MS Binary Sequential Access * MS Binary Direct Access 1-26 Compaq Fortran Version 5.5 Release Notes 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. 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. Compaq Fortran Version 5.5 Release Notes 1-27 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. - 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. 1-28 Compaq Fortran Version 5.5 Release Notes - 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. - 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. Compaq Fortran Version 5.5 Release Notes 1-29 - 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.8.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.7.4 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. - "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this object file was created. 1-30 Compaq Fortran Version 5.5 Release Notes 1.7.5 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 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. Compaq Fortran Version 5.5 Release Notes 1-31 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. 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. 1-32 Compaq Fortran Version 5.5 Release Notes 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. o Eliminate inappropriate shape mismatch for certain use of RESHAPE in a PARAMETER initialization expression. Compaq Fortran Version 5.5 Release Notes 1-33 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). 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-34 Compaq Fortran Version 5.5 Release Notes 1.7.6 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$_ 1.8 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.8.1 (Version 5.3 ECO 02 New Features) o Section 1.8.2 (Version 5.3 ECO 01 New Features) Compaq Fortran Version 5.5 Release Notes 1-35 o Section 1.8.3 (Version 5.3 ECO 01 HPF New Features) o Section 1.8.4 (Version 5.3 New Features) o Section 1.8.5 (Version 5.3 Important Information) o Section 1.8.6 (Version 5.3 Corrections) o Section 1.8.7 (HPF in Compaq Fortran Version 5.3 ) o Section 1.8.8 (Version 5.3 Known Problems ) 1.8.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. 1-36 Compaq Fortran Version 5.5 Release Notes 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. 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.8.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). Compaq Fortran Version 5.5 Release Notes 1-37 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. 1-38 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-39 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. 1-40 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-41 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. 1-42 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-43 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. 1-44 Compaq Fortran Version 5.5 Release Notes 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 data types 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.8.3 Version 5.3 ECO 01 HPF New Features The following information pertains to HPF using MPI. Compaq Fortran Version 5.5 Release Notes 1-45 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. 1-46 Compaq Fortran Version 5.5 Release Notes ___________________________________________________________ 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 Compaq Fortran Version 5.5 Release Notes 1-47 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". 1-48 Compaq Fortran Version 5.5 Release Notes 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) Compaq Fortran Version 5.5 Release Notes 1-49 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. 1-50 Compaq Fortran Version 5.5 Release Notes 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.8.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. Compaq Fortran Version 5.5 Release Notes 1-51 * 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 1-52 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-53 - 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.8.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.8.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. 1-54 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-55 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. 1-56 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-57 o Correct evaluation of FLOAT intrinsic with -real_size 64. o Correct problem with array constructors in format expressions. 1.8.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. 1-58 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-59 1.8.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.9 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.9.1 (Version 5.2 ECO 01 New Features) o Section 1.9.2 (Version 5.2 New Features) o Section 1.9.3 (Version 5.2 Important Information) o Section 1.9.4 (Version 5.2 Corrections) 1.9.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. 1-60 Compaq Fortran Version 5.5 Release Notes 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 Compaq Fortran Version 5.5 Release Notes 1-61 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) 1-62 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-63 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. 1-64 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-65 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. 1-66 Compaq Fortran Version 5.5 Release Notes 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). Compaq Fortran Version 5.5 Release Notes 1-67 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. 1-68 Compaq Fortran Version 5.5 Release Notes o Correct problem with generic routine matching. o Correct internal compiler error when function return value used in statement function expression. 1.9.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 Compaq Fortran Version 5.5 Release Notes 1-69 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.9.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 1-70 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-71 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.9.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. 1-72 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-73 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. 1-74 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-75 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). 1-76 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-77 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. 1-78 Compaq Fortran Version 5.5 Release Notes 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.10 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.10.5.3. o Accessing non-local data (other than arguments) within PURE functions in FORALL statements o SORT_UP library procedure Compaq Fortran Version 5.5 Release Notes 1-79 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.10.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.10.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. 1-80 Compaq Fortran Version 5.5 Release Notes 1.10.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.10.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.10.1.2 that cause non-parallel execution. Compaq Fortran Version 5.5 Release Notes 1-81 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.10.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.10.5.6 1-82 Compaq Fortran Version 5.5 Release Notes 1.10.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. Compaq Fortran Version 5.5 Release Notes 1-83 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.10.1.6 1.10.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.10.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. 1-84 Compaq Fortran Version 5.5 Release Notes To avoid these problems, Compaq recommends using CSHIFT or FORALL instead of EOSHIFT if these alternatives meet the needs of your program. 1.10.2 New Features This section describes the new HPF features in this release of Compaq Fortran. 1.10.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.10.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.10.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.10.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 Compaq Fortran Version 5.5 Release Notes 1-85 1.10.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.10.4 Known Problems 1.10.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.10.4.2 Mask Expressions Referencing Multiple FORALL Indices FORALL statements containing mask expressions referencing more than seven FORALL indices do not work properly. 1.10.5 Unsupported Features This section lists unsupported features in this release of Compaq Fortran. 1.10.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.10.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. 1-86 Compaq Fortran Version 5.5 Release Notes o -double_size 128 o -gen_feedback o -p, -p1, -pg (use -pprof instead) o -fpe1, -fpe2, -fpe3, -fpe4 o -om o -mp o -omp 1.10.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.10.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.10.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. Compaq Fortran Version 5.5 Release Notes 1-87 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.10.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.10.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: 1-88 Compaq Fortran Version 5.5 Release Notes !HPF$ INDEPENDENT DO i = 1, 10 !HPF$ ON HOME (B(i)), RESIDENT BEGIN A(i) = addone(B(i)) !HPF$ END ON END DO . . . 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.10.1.3 1.10.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.10.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. Compaq Fortran Version 5.5 Release Notes 1-89 1.10.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. 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.10.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 1-90 Compaq Fortran Version 5.5 Release Notes 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 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 Compaq Fortran Version 5.5 Release Notes 1-91 !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 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.10.6 Obsolete Features Deleted 1.10.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-92 Compaq Fortran Version 5.5 Release Notes 1.10.7 Miscellaneous This section contains miscellaneous release notes relevant to HPF. 1.10.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. 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.10.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. Compaq Fortran Version 5.5 Release Notes 1-93 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. For more information about installing PSE180, see the Compaq Parallel Software Environment Release Notes, Version 1.8. 1.10.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 1-94 Compaq Fortran Version 5.5 Release Notes 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.10.7.2 for further details. 1.10.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 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.10.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.10.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. Compaq Fortran Version 5.5 Release Notes 1-95 1.10.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 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.10.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.10.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.10.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. 1-96 Compaq Fortran Version 5.5 Release Notes 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.10.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. 1.10.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. Compaq Fortran Version 5.5 Release Notes 1-97 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. 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.11 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.11.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 1-98 Compaq Fortran Version 5.5 Release Notes 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 - !$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) Compaq Fortran Version 5.5 Release Notes 1-99 - 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: 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 1-100 Compaq Fortran Version 5.5 Release Notes 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 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. Compaq Fortran Version 5.5 Release Notes 1-101 * 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. * 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. 1-102 Compaq Fortran Version 5.5 Release Notes - -omp Enables recognition of OpenMP directives. - -std95 Enables Fortran 95 standards checking (-std90 or -std enable Fortran 90 standards checking). - -warn truncated_source 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 Compaq Fortran Version 5.5 Release Notes 1-103 !$omp parallel !$omp do private(k,m) do i = k,m x(i) = i enddo !$omp end parallel print *, x end > 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.11.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. 1-104 Compaq Fortran Version 5.5 Release Notes 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. 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. Compaq Fortran Version 5.5 Release Notes 1-105 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. 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 1-106 Compaq Fortran Version 5.5 Release Notes 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 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 Compaq Fortran Version 5.5 Release Notes 1-107 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 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. 1-108 Compaq Fortran Version 5.5 Release Notes 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. 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.11.3 HPF Version 5.1 New Features 1.11.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.11.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.11.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. Compaq Fortran Version 5.5 Release Notes 1-109 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.10.1.4 of these Release Notes. 1.11.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. 1-110 Compaq Fortran Version 5.5 Release Notes 1.11.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.11.3.6 REDUCTION Clause in INDEPENDENT Directives The REDUCTION clause in INDEPENDENT directives is now supported. 1.11.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.10.5.6 of these Release Notes. 1.11.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. Compaq Fortran Version 5.5 Release Notes 1-111 1.12 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.12.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. 1-112 Compaq Fortran Version 5.5 Release Notes 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 Compaq Fortran Version 5.5 Release Notes 1-113 - $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 1-114 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-115 1.12.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. 1-116 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-117 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. 1-118 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-119 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). 1-120 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-121 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.13 Additional Information This section contains information that supplements the Compaq Fortran documentation. 1.13.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.13.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. 1-122 Compaq Fortran Version 5.5 Release Notes 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 Compaq Fortran Version 5.5 Release Notes 1-123 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 1-124 Compaq Fortran Version 5.5 Release Notes - 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.13.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 Compaq Fortran Version 5.5 Release Notes 1-125 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 1-126 Compaq Fortran Version 5.5 Release Notes 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.13.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. Compaq Fortran Version 5.5 Release Notes 1-127 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.13.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. 1-128 Compaq Fortran Version 5.5 Release Notes 1.13.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.13.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. Compaq Fortran Version 5.5 Release Notes 1-129 1.13.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 1-130 Compaq Fortran Version 5.5 Release Notes 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.13.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 Compaq Fortran Version 5.5 Release Notes 1-131 - 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.13.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 1-132 Compaq Fortran Version 5.5 Release Notes 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.13.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.13.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 ) Compaq Fortran Version 5.5 Release Notes 1-133 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. 1-134 Compaq Fortran Version 5.5 Release Notes 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: Compaq Fortran Version 5.5 Release Notes 1-135 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): 1-136 Compaq Fortran Version 5.5 Release Notes 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. Compaq Fortran Version 5.5 Release Notes 1-137 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.13.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.13.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.13.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.13.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.13.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.13.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.13. o Support for variable format expressions (VFEs), a DIGITAL Fortran extension (see Section 1.13). 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 other than version number is 5.5 (or later). 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-Q66TE-TE (January 2002 on the inside title page). 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 (see the Compaq Fortran Web site). o Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems (AA-Q66TE-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-PW83P-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 printed Compaq Fortran documents (except the cover letter and SPD are available) on the Compaq Tru64 UNIX Online Documentation Library CD-ROM in HTML format. The | printed Compaq Fortran documentation is also available on | the Compaq Fortran Web site (see Section 1.13.1). | 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 | "Parallel Processing on Tru64 UNIX Systems" manual that | describes NUMA parallel processing in Compaq Fortran is | available after installation in /usr/lib/cmplrs/fort90 | /fort55_parallel_manual.ps .) | 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".) Documentation, Corrections, and Other Fortran Documentation 3-5 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".) 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. 3-6 Documentation, Corrections, and Other Fortran Documentation 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: 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 describes Compaq Fortran run-time messages. The printed Compaq Fortran documentation is also available | on the Compaq Fortran Web site. For example, to access the | list of run-time errors in the user manual: | | 1. Use a Web browser to access the main Compaq Fortran Web | page (see Section 1.13.1) | | 2. In the left margin, click Online Documentation | | 3. Scroll to the section for Compaq Fortran for Tru64 UNIX | Systems | | 4. Click the title Compaq Fortran User Manual for Tru64 | UNIX and Linux Alpha | | 5. Scroll to and click the Contents button | | 6. Click the title Run-Time Errors and Signals | | 7. Click the title List of Run-Time Messages | | The severity of the Compaq Fortran run-time 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. Run-Time Messages A-1 ___________________________________________________________ Severity_____Description___________________________________ 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 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. To define the condition symbol values (PARAMETER statements) in your program, include the following file: /usr/include/foriosdef.f For more information, see the Handling Run-Time Errors chapter in the Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems. A-2 Run-Time Messages