HP Fortran for Tru64 UNIX Alpha Systems Release Notes September 2005 These release notes contain information about HP Fortran for HP Tru64 UNIX Alpha systems. Software Version: HP Fortran Version 5.6 Hewlett-Packard Company Palo Alto, California ________________________________________________________________ © Copyright 2005 Hewlett-Packard Development Company, L.P. Confidential computer software. Valid license from HP 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. The information contained herein is subject to change without notice. The only warranties for HP products and services are set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. HP shall not be liable for technical or editorial errors or omissions contained herein. Printed in the US This document was prepared using DECdocument, Version 3.3- 1b. _________________________________________________________________ Contents 1 HP Fortran Version 5.6 Release Notes 1.1 Overview...................................... 1-1 1.2 Installation and Minimum Operating Systems Version....................................... 1-2 1.3 Contents of the Version 5.6 Kit............... 1-2 1.4 Known Problems in Version 5.6................. 1-4 1.5 Bug Fixes in Version 5.6 ..................... 1-4 2 Documentation Information 2.1 HP Fortran Documentation and Online Information................................... 2-1 2.2 Compaq HPF and Parallel Software Environment Documentation................................. 2-4 2.3 Other Sources of Information About Fortran 95/90......................................... 2-4 3 Release Notes for Prior Version 5 Releases 3.1 Product Terminology........................... 3-1 3.2 New Features, Corrections, and Known Problems in Version 5.5 ............................... 3-2 3.2.1 Version 5.5A Corrections.................. 3-2 3.2.2 Version 5.5A Known Problems............... 3-9 3.2.3 Known Limitations......................... 3-9 3.2.4 Version 5.5 ECO 1 Corrections............. 3-10 3.2.5 Version 5.5 New Features.................. 3-14 3.2.6 Version 5.5 Important Information......... 3-17 3.2.7 Version 5.5 Corrections................... 3-17 3.2.8 Version 5.5 Known Problems ............... 3-22 3.3 New Features, Corrections, and Known Problems in Version 5.4................................ 3-23 iii 3.3.1 Version v5.4A ECO #1 New Features......... 3-23 3.3.2 Version 5.4A New Features................. 3-27 3.3.3 Version 5.4 New Features.................. 3-32 3.3.4 Version 5.4 Important Information......... 3-38 3.3.5 Version 5.4 Corrections................... 3-38 3.3.6 Version 5.4 Known Problems ............... 3-42 3.4 New Features, Corrections, and Known Problems in Version 5.3................................ 3-43 3.4.1 Version 5.3 ECO 02 New Features........... 3-44 3.4.2 Version 5.3 ECO 01 New Features........... 3-45 3.4.3 Version 5.3 ECO 01 HPF New Features....... 3-53 3.4.4 Version 5.3 New Features.................. 3-59 3.4.5 Version 5.3 Important Information......... 3-62 3.4.6 Version 5.3 Corrections................... 3-62 3.4.7 HPF in Compaq Fortran Version 5.3 ........ 3-66 3.4.8 Version 5.3 Known Problems ............... 3-68 3.5 New Features, Corrections, and Known Problems in Version 5.2................................ 3-68 3.5.1 Version 5.2 ECO 01 New Features........... 3-68 3.5.2 Version 5.2 New Features.................. 3-77 3.5.3 Version 5.2 Important Information......... 3-78 3.5.4 Version 5.2 Corrections................... 3-80 3.6 High Performance Fortran (HPF) Support in Version 5.2................................... 3-87 3.6.1 Optimization.............................. 3-88 3.6.1.1 The -fast Compile-Time Option........... 3-88 3.6.1.2 Non-Parallel Execution of Code.......... 3-89 3.6.1.3 INDEPENDENT DO Loops Currently Parallelized............................ 3-89 3.6.1.4 Nearest-Neighbor Optimization........... 3-91 3.6.1.5 Widths Given with the SHADOW Directive Agree with Automatically Generated Widths.................................. 3-92 3.6.1.6 Using EOSHIFT Intrinsic for Nearest Neighbor Calculations................... 3-92 3.6.2 New Features.............................. 3-93 3.6.2.1 RANDOM_NUMBER Executes in Parallel...... 3-93 3.6.2.2 Improved Performance of TRANSPOSE Intrinsic............................... 3-93 3.6.2.3 Improved Performance of DO Loops Marked as INDEPENDENT.......................... 3-93 3.6.3 Corrections............................... 3-94 iv 3.6.4 Known Problems............................ 3-94 3.6.4.1 "Variable used before its value has been defined" Warning........................ 3-94 3.6.4.2 Mask Expressions Referencing Multiple FORALL Indices.......................... 3-94 3.6.5 Unsupported Features...................... 3-94 3.6.5.1 SMP Decomposition (OpenMP) not Currently Compatible with HPF..................... 3-94 3.6.5.2 Command Line Options not Compatible with the -wsf Option......................... 3-94 3.6.5.3 HPF_LOCAL Routines...................... 3-95 3.6.5.4 SORT_UP and SORT_DOWN Functions......... 3-95 3.6.5.5 Restricted Definition of PURE........... 3-95 3.6.5.6 Restrictions on Procedure Calls in INDEPENDENT DO and FORALL............... 3-96 3.6.5.7 Restrictions on Routines Compiled with -nowsf_main............................. 3-97 3.6.5.8 RAN and SECNDS Are Not PURE............. 3-97 3.6.5.9 Nonadvancing I/O on stdin and stdout.... 3-97 3.6.5.10 WHERE and Nested FORALL................. 3-98 3.6.6 Obsolete Features Deleted................. 3-100 3.6.6.1 GLOBAL_TO_PHYSICAL and GLOBAL_LBOUNDS are Deleted............................. 3-100 3.6.7 Miscellaneous............................. 3-100 3.6.7.1 What To Do When Encountering Unexpected Program Behavior........................ 3-100 3.6.7.1.1 Incompatible or Incomplete Libraries Installed.............................. 3-101 3.6.7.1.2 Segmentation Faults.................... 3-102 3.6.7.1.3 Programs that Hang..................... 3-102 3.6.7.1.4 Programs with Zero Sized Arrays........ 3-103 3.6.7.2 Stack and Data Space Usage.............. 3-103 3.6.7.3 Non-"-wsf" main programs................ 3-104 3.6.7.4 Using "-std" Disables HPF Directive Checking................................ 3-104 3.6.7.5 Use the Extended Form of HPF_ALIGNMENT........................... 3-104 3.6.7.6 EXTRINSIC(SCALAR) Changed to EXTRINSIC(HPF_SERIAL)................... 3-104 3.6.8 Example Programs.......................... 3-105 3.7 New Features and Corrections in Version 5.1... 3-106 3.7.1 Version 5.1 New Features.................. 3-106 3.7.2 Version 5.1 Corrections................... 3-112 v 3.7.3 HPF Version 5.1 New Features.............. 3-117 3.7.3.1 SHADOW Directive Now Supported.......... 3-117 3.7.3.2 Pointers Now Handled in Parallel........ 3-117 3.7.3.3 SHADOW Directive Required for Nearest-Neighbor POINTER or TARGET Arrays.................................. 3-117 3.7.3.4 Descriptive Mapping Directives are Now Obsolescent............................. 3-118 3.7.3.5 New support for HPF Local Library Routines GLOBAL_LBOUND and GLOBAL_UBOUND........................... 3-119 3.7.3.6 REDUCTION Clause in INDEPENDENT Directives.............................. 3-119 3.7.3.7 HPF_SERIAL Restriction Lifted for Procedures Called from INDEPENDENT DO Loops................................... 3-119 3.7.4 HPF Version 5.1 Corrections............... 3-119 3.8 New Features and Corrections in Version 5.0... 3-120 3.8.1 Version 5.0 New Features.................. 3-120 3.8.2 Version 5.0 Corrections................... 3-124 3.9 Additional Information........................ 3-130 3.9.1 HP Fortran Home Page...................... 3-130 3.9.2 Support for the Fortran 95 Standard Features.................................. 3-130 3.9.3 Preliminary Information on Support for Big Objects................................... 3-133 3.9.4 New Random Number Algorithm............... 3-135 3.9.5 Compaq Fortran 77 Pointers................ 3-136 3.9.6 Extended Precision REAL (KIND=16) Floating-Point Data....................... 3-137 3.9.7 Variable Format Expressions (VFEs)........ 3-137 3.9.8 Notes on Debugger Support................. 3-138 3.9.8.1 Ladebug Debugger Support Notes.......... 3-139 3.9.8.2 dbx Debugger Support Notes.............. 3-140 3.9.9 Notes on Fast Math Library Routines....... 3-141 3.9.10 The HP Fortran Array Descriptor Format.... 3-141 vi 4 New Features for Versions Prior to Version 5 4.1 New Features and Corrections in Version 4.1... 4-1 4.2 New Features in Version 4.0................... 4-9 4.3 New Features in Version 2.0................... 4-16 4.4 New Features in Version 1.3................... 4-17 4.5 New Features in Version 1.2................... 4-20 4.6 New Features in Version 1.1................... 4-24 vii 1 _________________________________________________________________ HP Fortran Version 5.6 Release Notes This chapter contains the following sections: o Section 1.1, Overview o Section 1.2, Installation and Minimum Operating Systems Version o Section 1.3, Contents of the Version 5.6 Kit o Section 1.4, Known Problems in Version 5.6 o Section 1.5, Bug Fixes in Version 5.6 1.1 Overview HP 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 HP 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. HP Fortran fully supports the Fortran 95 Standard (ISO/IEC 1539-1:1997(E)) and the multi-vendor OpenMP 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 HP Fortran 77 source language compatibility. Provided the types and shapes of the actual and formal arguments agree, routines compiled with HP Fortran 77 can call (or be called by) routines compiled with HP Fortran. HP Fortran Version 5.6 Release Notes 1-1 1.2 Installation and Minimum Operating Systems Version HP Fortran Version 5.6 requires Version 4.0F (or later) of the HP Tru64 UNIX operating system. For a detailed description of the installation procedure, see the HP Fortran Installation Guide for Tru64 UNIX Systems. You can also send comments, questions and suggestions about the HP Fortran product to the following mail address: fortran@hp.com Please note that this address is for informational inquiries and is not a formal support channel. The HP Fortran home page is located at: http://www.hp.com/go/fortran/ Click on "Fortran for Tru64 UNIX Alpha" for information about online documentation, software patch kits, example programs, and additional product information. 1.3 Contents of the Version 5.6 Kit The HP Fortran Version 5.6 kit consists of the following setld sets: o DFABASE560-HP Fortran 90 and 77 V5.6 for HP Tru64 UNIX Alpha Systems o DFADOC560 -HP Fortran V5.6 Release Notes and Man Page o DFACOM560 -HP Fortran V5.6 Tools & their Man Pages o DFARTL406-HP Fortran RTL #406 for HP Tru64 UNIX Alpha Systems o HPFLIBS192-HP Fortran V1.9-2 High Performance Fortran Runtime Libraries o XMDCOM520 -the CXML common subset files o XMDLIB4520-the CXML archive and shared libraries (serial and parallel) for EV4 systems o XMDLIB5520-the CXML archive and shared libraries (serial and parallel) for EV5 systems 1-2 HP Fortran Version 5.6 Release Notes o XMDLIB6520-the CXML archive and shared libraries (serial and parallel) for EV6 systems o XMDSCI520 -the SCIPORT Cray compatibility library and manpages o XMDMAN520 -the CXML manpages o XMDHTM520 -the CXML manpages in HTML format The OTABASEnnn-Compiled Code Support Library subset is no longer included on this kit. The HP Fortran DFABASE and DFACOM subsets include the HP Fortran 95/90 and HP 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 HP 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. For information including disk space requirements, see the HP Fortran Installation Guide for Tru64 UNIX Systems. If you need to delete an older version of the 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 HP Fortran kit no longer includes the OTABASE subset (Compiled Code Support Library). The OTA libraries are now available only on the web from the following location: ftp://ftp.compaq.com/pub/products/fortran/Tru64/OTABASE221.tar This is the latest parallel processing library subset. Use setld -l to install. HP Fortran Version 5.6 Release Notes 1-3 ________________________ Note ________________________ You may receive a message saying that the page cannot be displayed. However, the file is there, and you might have to access the file when the site is less congested. ______________________________________________________ The following changes occurred to the OSFCMPLRS operating system subset starting with Tru64 UNIX Version 4.0: o Beginning with 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.4 Known Problems in Version 5.6 Modules cannot be debugged unless the current Ladebug (which is Version 4.0-069) is installed. For information, see the Ladebug web page: http://www.hp.com/go/ladebug 1.5 Bug Fixes in Version 5.6 This release fixed a number of LOC-related problems, and corrected and enhanced module debugging capability. The following bugs were fixed: o 104652: Remove an erroneous warning regarding multiple initializations which occurs during compilation with the option -std95. o QXCM1000242932: Fix an infinite loop in the module- loading phase of compilation. o 104654: Fix incorrect handling of a pointer field when copying a record, which resulted in slow compilation, culminating with an "Insufficent virtual memory" failure. o Bug2878: FPE on system() call that goes away with -arch ev67. 1-4 HP Fortran Version 5.6 Release Notes o Bug2961: Change to default to -assume cc_omp when -omp is present. o BUG2973: allowing !$ conditional lines to compile. o Bug3264: Data corruption/namespace collision at -O2 and above. o Bug3279: Assignment of allocatable array of records problem. o Bug3292: PTR 221-1-3023. Assertion when making a DO variable private with -omp option. o Bug2794: Allow STATIC on COMMON data (scalar or or array); allow INTRINSIC in BLOCK DATA. o Bug3348: Fix inconsistency in adding generic nodes. Code was comparing declaring module with field from decl_rec_ desc, but when adding node, using as declaring module the module form the 'use' statement. As a result matches were not found; multiple entries were made. Memory was exhausted and compilation time was outrageous. o PTR 221-2-1067: QXCM1000208533: Compile-time failure for a function using some of its arguments to affect the size/shape of the return value for the function itself. o QXCM1000214854: F90-F-FATAL: ICE when compiling program with a record named OR when there is a subsequent use of the .OR. operand. o QXCM1000218797: Compilation with -omp option does not recognize "share" clause for array. o QXCM1000221329: ACTPOS processing causes bad address in executable. o QXCM1000214653: MCNP does not compile; internal compiler errors, OpenMP err. Don't diagnose common variables that are not explicitly attributed as shared, private, reduction, firstprivate, lastprivate if the common block is so attributed. o QXCM1000205813: Allocate of allocatable components results in a segmentation violation at run time. o QXCM1000221087: Public components of an object are inaccessible when the type name of that object is inaccessible. HP Fortran Version 5.6 Release Notes 1-5 o QXCM1000222701: Module procedure confused with nonstandard intrinsic FREE. o QXCM1000235122: Incorrectly diagnosing common variables that are not explicitly attributed as shared, private, reduction, firstprivate, lastprivate if the common block is so attributed. 1-6 HP Fortran Version 5.6 Release Notes 2 _________________________________________________________________ Documentation Information The sections in this chapter: o Describe HP Fortran documentation and online information (Section 2.1) o Describe the main Compaq Parallel Software Environment documents (Section 2.2) o List other sources of information about Fortran 95/90 (Section 2.3) The HP Fortran Web page is at: http://www.hp.com/go/fortran Click on "Fortran for Tru64 UNIX Alpha" for information about online documentation, software patch kits, example programs, and additional product information. 2.1 HP Fortran Documentation and Online Information The HP Fortran for Tru64 UNIX documentation is available at: http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/ 1,1701,7155,00.html#dfau The HP Fortran documentation set includes the following: o HP Fortran Installation Guide for Tru64 UNIX Systems Explains how to install HP Fortran (HP Fortran and HP Fortran 77) on an HP Tru64 UNIX Alpha system, including requirements. The installation guide is included with the HP Fortran kit. o Compaq Fortran Language Reference Manual (AA-Q66SD-TK) Documentation Information 2-1 Describes the HP 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. 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 HP Fortran Web site). o Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems (AA-Q66TE-TE) Describes the HP Fortran program development and run- time environment on Tru64 UNIX Alpha systems. It describes compiling, linking, running, and debugging HP 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 HP Fortran 77. It provides information common to HP Fortran and the Compaq Parallel Software Environment as well as information about using directed parallel processing using OpenMP and HP Fortran directives. The printed version of this document is included with the Compaq Fortran (95/90) document kit, QA-MV2AA-GZ and is on the Online Documentation Library CD-ROM in HTML form. The HP Fortran Software Product Description (SPD) is provided as a file on the Software Product Library CD-ROM (media CD-ROM). The following HP Fortran online information is available (once installed on the system): o HP Fortran online reference pages (man pages) 2-2 Documentation Information Describe the HP 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 HP Fortran online release notes Provide more information on this version of HP Fortran, including known problems and a summary of the HP 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 HP Fortran is installed: % more /usr/lib/cmplrs/fort90/relnotes90 To initiate a search within more, enter a slash (/) followed by the appropriate topic. For information about using the more command, see more(1). o HP Fortran online help file This ASCII file provides online access to HP 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 HP 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 this file. This help file is large and is not usually printed on a printer or read sequentially. The HP Fortran for Tru64 UNIX documentation is available at: http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/ 1,1701,7155,00.html#dfau Documentation Information 2-3 2.2 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 the following location: /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. 2.3 Other Sources of Information About Fortran 95/90 This section lists sources of information about Fortran 95/90 other than the HP Fortran documentation. The following publication is the copywritten standard for Fortran 90 and 95: o American National Standard Programming Language Fortran 90, ANSI X3.198-1991, and International Standards Organization Programming Language standard ISO/IEC 1539:1991. (Simply referred to in documentation as the "Fortran 90 Standard".) o American National Standard Programming Language Fortran 95, X3J3/96-007, and International Standards Organization Programming Language standard ISO/IEC 1539- 1:1996. (Simply referred to in documentation as the "Fortran 95 Standard".) Tutorial information about the Fortran 95/90 language is available in commercially published documents at major book stores or from their publishers. HP 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: 2-4 Documentation Information o Fortran 90 Explained by M. Metcalf and J. Reid, Published by Oxford University Press, ISBN 0-19-853772- 7. o Fortran 90/95 Explained by M. Metcalf and J. Reid, Published by Oxford University Press, ISBN 0-19-851888- 9. o Fortran 90/95 for Scientists and Engineers by S. Chapman, Published by WCB McGraw-Hill, ISBN 0-07-011938- 4. o Fortran 90 Handbook by J. Adams, W. Brainerd, J. Martin, B. Smith, and J. Wagener, Published by Intertext Publications (McGraw-Hill), ISBN 0-07-000406-4. o Fortran 90 Programming by T. Ellis, I. Philips, and T. Lahey, Published by Addison/Wesley, ISBN 0201-54446-6. o Introduction to Fortran 90/95 by S. Chapman, Published by WCB McGraw-Hill, ISBN 0-07-011969-4. o Programmer's Guide to Fortran 90, Second Edition by W. Brainerd, C. Goldberg, and J. Adams, Published by Unicomp, ISBN 0-07-000248-7. For information on parallel programming using OpenMP, see the following: o Parallel Programming in OpenMP by Rohit Chandra, Ramesh Menon, Leo Dagum, David Kohr, Dror Maydan, and Jeff MCDonald, Published by Morgan Kauffman, ISBN 1-55860- 671-8. For information on High Performance Fortran (HPF), see the following: o High Performance Fortran Language Specification, Version 2.0. This specification is available on the web at: http://www.crpc.rice.edu/HPFF/home.html Documentation Information 2-5 3 _________________________________________________________________ Release Notes for Prior Version 5 Releases This chapter contains the following sections: o Section 3.1 (Product Terminology) o Section 3.2 (New Features, Corrections, and Known Problems in Version 5.5 ) o Section 3.3 (New Features, Corrections, and Known Problems in Version 5.4) o Section 3.4 (New Features, Corrections, and Known Problems in Version 5.3) o Section 3.5 (New Features, Corrections, and Known Problems in Version 5.2) o Section 3.6 (High Performance Fortran (HPF) Support in Version 5.2) o Section 3.7 (New Features and Corrections in Version 5.1) o Section 3.8 (New Features and Corrections in Version 5.0) o Section 3.9 (Additional Information) 3.1 Product Terminology This document might use the following new or changed product names: o "HP Fortran" was previously called "Compaq Fortran 90". o "Compaq Fortran" was previously called "DIGITAL Fortran 90". o "HP Fortran 77" was previously called "Compaq Fortran 77". Release Notes for Prior Version 5 Releases 3-1 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. It is used interchangeably with the name "HP Fortran". 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}. 3.2 New Features, Corrections, and Known Problems in Version 5.5 Version 5.5A is a minor release that includes corrections to problems discovered since Version 5.5 was released. For the Version 5.5A subset numbers, see Section 1.3. The following topics are discussed: o Section 3.2.1 (Version 5.5A Corrections) o Section 3.2.2 (Version 5.5A Known Problems) o Section 3.2.4 (Version 5.5 ECO 1 Corrections) o Section 3.2.5 (Version 5.5 New Features) o Section 3.2.6 (Version 5.5 Important Information) o Section 3.2.7 (Version 5.5 Corrections) o Section 3.2.8 (Version 5.5 Known Problems ) 3.2.1 Version 5.5A Corrections From DFA551 X5.5-2602-48C8L to DFA55A V5.5A-3548-48D88, the following corrections have been made: o Fix a number of bugs in UNPACK. o Bug 2851. Note3136/CF90AU - Defer processing of character length expression on function definition if it has a forward reference to a currently unknown module procedure. 3-2 Release Notes for Prior Version 5 Releases o Optimize import by ignoring 'uses' which occur in 'private' modules where all 'public' symbols belong to the modules itself. o Change handling of mult_high intrinsic. Require its arguments to be INTEGER*8. o Detect unknown, unprintable character in lexeme. o Fix for allocation of module level symbols, particularly with equivalence. o bug2853.f90 When context is cray fortran pointee, scalar or array - accept external function or subroutine. o Fix for alignment of MODULE data. o Suppress multiple non-standard tab formatting warnings in a program unit. o Fix SIZE intrinsic when used with the optional DIM argument. Skip over those parts of array expressions that do not contribute to the SHAPE. Example: SIZE(A(2,4,6:10),1) must get the value 5. FORTRAN note 3134.1 o Bug2856: Accept !dec$ attributes no_arg_check in interface blocks and contained procedures. Disable check for scalar/array arg compatibility if arg has no_arg_ check attribute. o Bug2858. Prevent skipping to end of line on a '!' ikn C-style escape strings. o Allow multiple incarnations of derived type/fields, i.e. for each module procedure. o Allow KIND parameter of following intrinsics to be INTEGER*1 thru *8 instead of requiring default integer: aint, anint, ceiling, char, cmplx, floor, int, logical, nint, real. o Bug2860. Derived-type/structure references with dots and percents. o Improve performance of module import in interface blocks. Release Notes for Prior Version 5 Releases 3-3 o Bug2862. Fix overloading: public sin; interface sin; function sin in module. Fix passing 'sin' as argument of call where 'sin' imported from above module and also from second module with specific having different characteristics. o Fix another case where we CALL a FUNCTION (with awkward function return value). o Note 3159. Bug2865. Fix bad code. o Process optional KIND argument of ICHAR intrinsic. o Bug2872. Exclude from exported module those imported symbols which are not used; are not in name_list; have no initial values; are not in only list; are not renamed. Problem is that when a module variable matches a dummy argument in the using code - there is not enough context to eliminate the import. o Assign 'ANINT' as generic function associated with QNINT. o FIX SIZE= with ADVAVCE='YES'. o Modify text for message 563 (CVF19095). POINTER component following array component. o We need to get upper bound information for expressions like: C(i:), especially when requesting bounds checking. This is when "C" is character*(*) dummy argument, but other cases are possible. More rare than it sounds! CVF18791. o Fix various problems with array constructors with allocatable components. CVF18807. o Allow .XOR. to be user (re)defined for two logical operands. bug2882.f90 o Fixed FORTRAN:3074 - Added support for 64-bit addressed strings. o Bug2883 - force evaluation of triplet subscript components. o Bug2869. Having found a valid module procedure reference, check to see if there is another entry by same name with the EXTERNAL attribute. This takes precedence. 3-4 Release Notes for Prior Version 5 Releases o Bugs 2879 and bug2880 Issue standard warnings for too many continuations. o Bug2881.f Issue non-standard diagnostics for array constructor character elements of differing lengths. o Fix bug: data s.r2.r3.i /1/ o Bug2887. Allow constant array elements in array constructors: data a,b/x(1),p(3,4)/ where x and p are parameters. o Bug2885.f90 Free form, character string continuation. Must skip over continuation character and not include it in string. o bug2886.f Fix private.meas(1).gotit = 1 . o bug2891 Relax requirement the format items in format list be separated by delimiters. o Bug2892.f. Allow all combinations of "w.d" in format specs to be optional. Retain standard checking. o Bug 2897 - note 3183. Change variable type from INTEGER*16 to *32 to accomodate indices >= 32767. o Bug2895. When checking if symbol is in common, check also to see if it is equivalenced to common (named and blank). o Improve MODULE debug information. o Bug2899 - diagnose calls to non-pure intrinsics from pure procedure. o bug2900 - diagnose dummy arguments of pure functions which have intent(out) or intent(inout) . o bug2904 - include zero-size test when checking for missing length specification or '*' length. o bug2907. Issue standard warning for recursive reference to pure function when no RESULT clause given. o Bug2910 - Allow common block names, un-enclosed in slashes to be specified in ms_attributes C,ALIAS and DEFAULT directives. Release Notes for Prior Version 5 Releases 3-5 o Bug1189. Allow name conflict between use_associated name and local name provided the procedure does not reference the name. o bug1024.f90 - Diagnose references to hpf library routines on all platforms other than alpha unix - message 1877 o Allow cray pointers/pointees to be made public/private 81/41 =A; 82/41 =A . Bug2913. o Fix grammar in message 1875 o Bug2921.f90 ; accept attributes alias,extern and attributes extern,alias. o Bug 2917. Diagnose missing end on program/procedure. o Issue non-standard warning for forward reference to derived type. o bug2924. Recognize result value storage association for multiple entry points. No messages if result types match even if no explicit result assigned. o Handle: real a(5); !dec$ attributes c,extern::a; end o When checking for COMMON (to determine if shared) check common block (which is stGLOBAL) as well as variables which are in COMMON. Also - check for data with initial values. o bug2926 - Allocate blank common variables in program unit following imported blank common. Day 1 bug. If a use statement imported blank common, the local blank common was simply ignored. o Bug2925 - Diagnose use of statement function in specification expression. Add message 1884. Bug2925. Diagnose use of statement function in specification expression. o Bug2929. Fix the initialization of temporaries to store bounds expressions for multiple entry points. o Fixed Fortran:3205. 3-6 Release Notes for Prior Version 5 Releases o Fix problem with a type constructor with a character array argument whose elements are different lengths than those required by the TYPE. Example is id=id_ data((/"x","y","z"/)) where id_data has a character array where each element is length 20. From nagf95- f74.f90. o Bug2931. Diagnose missing private attribute on derived type which has a user-type component which is private. (Standard switch only). Add message 1885. o bug2932 Diagnose reference to array names or cross sections as operands of UNIT or FILE arguments of OPEN and CLOSE statements. o Change message 1886. Bug2932. "UNIT and FILE arguments to OPEN and CLOSE statements must be scalars and not arrays". o Bug2935. Be more rigorous in diagnosing/confirming types which are implicitly declared on parameter statements and then explicitly declared with type statements. o Bug2941. Allow parenthesized integer expression as unit specifier for I/O statements. o Return value for selected_int_kind(i) should be one for i <= 2 (all negative values). o Fix offset problem with structure constructor. This comes from Fortran note 3228. o Fix various problems with DO loop variables not getting made PRIVATE inside parallel regions. o Do not assert when array length is zero (testing for overlap). o Check if repeat count is non-zero before issuing diagnostic about having too many data values. Issue standard warning for multiple/overlapping data initialization of same location. o bug2947. Diagnose AGOTO reference to format label. o bug2794.f90 Diagnose parenthesized format specifiers in print and accept statements. Release Notes for Prior Version 5 Releases 3-7 o Numerous fixes for an allocatable dummy argument which is intent(in), especially where the array is type character(*) (bug2944.f90).) o Bug2951 - Diagnose the passing of an procedure argument, not specified as PURE, to a procedure requiring it to be PURE. o Bug 2954. Issue diagnostic for use of 'record/type' name in context which makes it look like a function or array reference. o Bug2955. FIX ".not..and." problem. o Note3248. Bug2957.f90 . Replace empty argument (originating from adjacent commas) by integer 0. (VAX fortran feature). o Bug2958 Allow '0' in column 6, fixed form dir, omp, dec directives. o bug2962 - Issue non-standard warnings for allocatable functions and dummies. Add error messages 1893 and 1894. o bug2963. Fixed form ends in col 72 or 132, not 1 before. o bug2961 - Eliminate useless reference to standard rule in message 9. (R730.4 - R730 is 'initialization-expr') o Reword message 371 to say 'may have' vs 'has' occurred when issuing diagnostic for a reference to a label to within an 'if' or 'do' block. o Report on disallowed directives uniformly, i.e. with an informational message rather than a warning or error. o The HPF man pages were updated to reflect its usage with MPI instead of PSE. o Disallowed directives now get informational message rather than a warning or an error. o Bug2965 - Imported blank common blocks are not extended by local blank common, nor do they extend local blank common. o Bug2966 - Recognize 'time' as keyword for arg of intrinsic procedure CPU_TIME(time=real). 3-8 Release Notes for Prior Version 5 Releases o Fortran note 3259 - When the "-D" command-line option was used, the text of the option was being saved incorrectly. o Allow -Dfoo from the command line, meaning "define foo to be the null string". o Fortran note 3262 - Fix a bug in USE processing. o Allow -DFOO=letters as a valid macro definition. This is the same as -DFOO="letters" but without the quotes. o When promoting parameter argument do not change the type of symbols which have an explicit kind. o Fix parsing bug that appeared when '0' found in column 6 of an OpenMP directive. o Fortran note 3252 - Fix optimizer error: Compiler internal error o Fortran note 3253 - Fix optimizer error: Wrong answers with -transform_loops 3.2.2 Version 5.5A Known Problems o Fortran note 3264 - The compiler dies at compile-time with the message "**Internal compiler error: internal abort**" in some codes that use MODULEs with PUBLIC and PRIVATE data. 3.2.3 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. Release Notes for Prior Version 5 Releases 3-9 o If you specify the -hpf (or -wsf) option to request parallel processing, the following Compaq Fortran language features are not supported: - REAL (KIND=16) (same as REAL*16) data type - Compaq Fortran 77 implementation of CRAY-style pointers - Variable format expressions (VFEs). For example: FORMAT(I4) - Initialization of Compaq Fortran 77 structures. For example: STRUCTURE /S/ INTEGER I / 100 / END STRUCTURE 3.2.4 Version 5.5 ECO 1 Corrections Capturing error numbers after OPEN has some complications. The recommended method is to use IOSTAT= and ERR= on the OPEN. ERRSNS returns the UNIX error number after OPEN. IERRNO returns some butg not all UNIX error numbers, depending on the failure. IOSTAT= is the more reliable way to diagnose an error on OPEN. From DFA550 V5.5-1877-48BBF to DFA551 X5.5-2602-48C8L, the following corrections have been made: o If -nowarn, suppress informationals too. o bug2699.f90 Another structure 'dot' problem where rewriting tree in correct precedence had a bug. o Bug2710.f IMPLICIT($) conflict. o When diagnosing unprintable strings, use '?'. o Detect unknown, unprintable character in lexeme. o Bug2713 - Allow '* -' adjacent operators with -std switch. o bug2715. Honor '-names as_is' option when initializing character table. Honor '-names as_is' when deriving implicit type of character. 3-10 Release Notes for Prior Version 5 Releases o Bug2716. Elim diag for use of boz constants as initializers in type statements; issue warning if -std switch set. o Bug2717. Diagnose mismatch between scalar actual arg and array vector arg. o At routine exit be more selective with deleting allocatable record components. In particular, avoid records declared SAVE, STATIC, or module record variables. CVF16613. o Avoid Integrity check when passing a large (more than IMAX) structure by value (when the POINTER to the structure is passed, actually). o Spell allocated correctly in error message. o Allow ASSIGN 10 to FNAME where FNAME is the current function name. o Bug2718.f90 ; message 1837 o Bug2725 Unary minus(kind constant). o Promote arguments to KISHFTC to integer*8. CVF16757 o Fix ISHC with integer*8 arguments. CVF16757 o Allow bktest to be passed as actual argument. o bug2731. Sort out multiple use of identifiers as vax- structures/f90-derived_types and other use with and without standard switch. o bug2727.f90 Associate 'type' determined from assignment context to typeless parameter constant. o Although LOG and LOG10 are NOT specific intrinsic names, allow them to be passed as actual arguments. This is equivalent to passing ALOG and ALOG10, respectively. o Explicitly encode required type for second argument of DCMPLX and QCMPLX . bug2747. o Correct wording of diagnostic 1203. Add new diagnostic 1839 for bug2746. Diagnose (error vs warning) case ranges where low not\ less than high in low:high construct. Release Notes for Prior Version 5 Releases 3-11 o Make ANINT generic; make ANINT and DNINT specifics of ANINT. Formerly ANINT and DNINT were incorrectly specifics of NINT. o Replace 'syntax error' message by 'FROM and TO arguments of MVBITS must have the same type and kind parameters'. o Bug2752. Diagnose invalid use of character string or hollerith string in arithmetic context if standard switch is set. o When an actual array argument needs to be copied (to make it contiguous), and when the user has requested /check:arg_temp_created, the message that the user sees may be corrupted OR the compilation may mysteriously\ die. The attempt to put out a zero character after the name of the called routine ends up dropping the zero one character too far, just BEYOND the string. This causes memory corruption at compile time, and (at least) one EXTRA character after the name of the called routine in the warning message. o Bug2758 - allow the use of a kind_constant parameter in statement function expressions... i.e. standard rule 1226.5 does not apply. o Get better locator information for ASSIGNED GOTO variable. o Fix bug with not-present optional argument used in pure specification function. bug2764 o bug2762. Issue standard warning for 'comma' between read/write i/O specs and iolist. o When calling an intrinsic that needs to know the size of the default integer kind, make sure that we look at the effects of !DEC$ INTEGER and/or OPTIONS /[NO]I4. BUG2766. o Never automatically deallocate allocatable components of dummy arguments upon routine exit, even when they are automatically "initialized" upon entry (OUT, but not IN intent). CVF17609. 3-12 Release Notes for Prior Version 5 Releases o Several fixes for allocatable dummy arguments, mostly for INTENT(OUT). The fixes are: DEALLOCATE an ALLOCATABLE dummy argument (if allocated, and INTENT(OUT)) in the prolog of the routine; Allow ALLOCATABLE dummy arguments in ENTRY points (same treatment as for routines); Only do this deallocation for routines/entry points where the argument is present. o Shorten long created external names, giving a new warning. This comes up most easily with a long Subroutine/Function name within a long Module name. Notice that the maximum name length depends upon the target platform (linker). bug2410. o Bug2793. Allow pointer components of derived types to be initialized with NULL(). o Bug2795. Fix typo in analysis of MATMUL arguments. Pick up left argument, then right argument and not right argument twice. o Bug2794. Disallow parens in print statement, ala: print (...) . o Major work on ASSOCIATED. Handle strings of zero length, avoid integrity checks, etc. o Prevent I/O loop collapsing when there are VFEs in the FORMAT. o Bug 2796. No statments, including FORMAT and DATA statements, may appear between SELECT statement first CASE statement. o Bug2803.f90 Elim standard check for what is an unconditional error, i.e. Data x /O"5"*100/ - 'An integer data type is requird in this context'. o Bug 2810. Allow KIQINT and KIQNNT to be passed as arguments. o bug2807. Generate error 1847: 'Allocatable fields of derived types are non-standard'. o Bug2808.f90 . Issue non-standard warning for use of a non-intrinsic elemental procedure as an actual argument. New diagnostic. 1848 'A non-intrinsic elemental procedure shall not be used as an actual argument'. Release Notes for Prior Version 5 Releases 3-13 o Bug2819.f Do not promote function with explicit INTRINSIC to external; diagnose and disallow if referenced with incorrect arg type(s). o Bug2817. With standard checking impose restriction that length for statement function character dummies be initialization expressions. o Bug2798, bug2105 and all recent analysis dealing with initialization/ specification expressions and standard enforcement. o Bug2822. Diagnose use of optional dummy argument as actual DIM argument to ubound, lbound, all, any and count intrinsics. o Fixed OMP loop index privitization bug. FORTRAN Note 3093. o Bug2844. Diag 1851 - If dummy arg is allocatable, actual arg must be a whole array and not a section. o Bug2847. Diag 1853 - An assumed-size array shall not be written as a whole array reference except as an actual argument in a procedure reference for which the shape is not required. Also - rewrite diag 364 . o Bug2846. Diag 1852 - The use of a scalar in a structure constructor for an allocatable array component is not allowed. o Bug2846. Diagnose the use of a scalar constant in a structure constructor for an allocatable array component. 3.2.5 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. 3-14 Release Notes for Prior Version 5 Releases - 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. - 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. 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. Release Notes for Prior Version 5 Releases 3-15 -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. 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 3.3.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 3-16 Release Notes for Prior Version 5 Releases 3.2.6 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 "@(.)" 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. 3.2.7 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. Release Notes for Prior Version 5 Releases 3-17 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. 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. 3-18 Release Notes for Prior Version 5 Releases 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. 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}. Release Notes for Prior Version 5 Releases 3-19 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. 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. 3-20 Release Notes for Prior Version 5 Releases 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. 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. Release Notes for Prior Version 5 Releases 3-21 o -fast => -assume cc_omp only when -omp seen. See FORTRAN 2999. 3.2.8 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: 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$_ 3-22 Release Notes for Prior Version 5 Releases 3.3 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 3.3.1 (Version v5.4A ECO #1 New Features) o Section 3.3.2 (Version 5.4A New Features) o Section 3.3.3 (Version 5.4 New Features) o Section 3.3.4 (Version 5.4 Important Information) o Section 3.3.5 (Version 5.4 Corrections) o Section 3.3.6 (Version 5.4 Known Problems ) 3.3.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. - 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)... . Release Notes for Prior Version 5 Releases 3-23 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. 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: 3-24 Release Notes for Prior Version 5 Releases 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. 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. Release Notes for Prior Version 5 Releases 3-25 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. 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. 3-26 Release Notes for Prior Version 5 Releases 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. 3.3.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. 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. Release Notes for Prior Version 5 Releases 3-27 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. 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. 3-28 Release Notes for Prior Version 5 Releases 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. 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 Release Notes for Prior Version 5 Releases 3-29 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. 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. 3-30 Release Notes for Prior Version 5 Releases 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) . 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. Release Notes for Prior Version 5 Releases 3-31 o Improve instruction scheduling {SLOT4}. 3.3.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. -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. 3-32 Release Notes for Prior Version 5 Releases -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. - 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. Release Notes for Prior Version 5 Releases 3-33 - 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 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 3-34 Release Notes for Prior Version 5 Releases 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. 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: Release Notes for Prior Version 5 Releases 3-35 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. - 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. 3-36 Release Notes for Prior Version 5 Releases - 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. - 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. Release Notes for Prior Version 5 Releases 3-37 o See the new features listed in Section 3.4.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 3.3.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. 3.3.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. 3-38 Release Notes for Prior Version 5 Releases 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. 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. Release Notes for Prior Version 5 Releases 3-39 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. 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. 3-40 Release Notes for Prior Version 5 Releases 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. 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. Release Notes for Prior Version 5 Releases 3-41 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." 3.3.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: 3-42 Release Notes for Prior Version 5 Releases 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$_ 3.4 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 3.4.1 (Version 5.3 ECO 02 New Features) o Section 3.4.2 (Version 5.3 ECO 01 New Features) o Section 3.4.3 (Version 5.3 ECO 01 HPF New Features) o Section 3.4.4 (Version 5.3 New Features) o Section 3.4.5 (Version 5.3 Important Information) o Section 3.4.6 (Version 5.3 Corrections) o Section 3.4.7 (HPF in Compaq Fortran Version 5.3 ) o Section 3.4.8 (Version 5.3 Known Problems ) Release Notes for Prior Version 5 Releases 3-43 3.4.1 Version 5.3 ECO 02 New Features The following new Compaq Fortran features are now supported: o COMMON blocks can be marked read-only using the NOWRT PSECT attribute. From DFA531 ECO 01 X5.3-1120-44A7B to DFA532 ECO 02 X5.3- 1155-44A8I, the following corrections have been made: o Eliminate internal compiler error for SIZE of a derived type component pointer array. o Eliminate more unnecessary copies of contiguous array arguments. o Speed up processing of EQUIVALENCE groups in COMMON blocks. o Properly handle SIZE(A(:)(I:J)) o Implement INT8 intrinsic (already documented) - UNIX) o Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX. o Allow omitted OPTIONAL arguments to be passed as optional arguments to intrinsics. o If "too many errors", suppress informational/warning messages as well. o Allow keyword specification of arguments A10, A20, etc. to MAX/MIN. o Eliminate internal compiler error for case of ADJUSTL with array argument. o Eliminate internal compiler error for particular use of nested STRUCTURE. o Disallow illegal ALLOCATED(A(:)) 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. 3-44 Release Notes for Prior Version 5 Releases 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. 3.4.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). 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. Release Notes for Prior Version 5 Releases 3-45 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. 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. 3-46 Release Notes for Prior Version 5 Releases 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