 














                     HP Fortran for
                     OpenVMS_Alpha_Systems_________________________
                     Release Notes


                     October 2007

                     This document contains information about new and
                     changed features in this version of HP Fortran for
                     OpenVMS Alpha Systems.





                     Software Version:            HP Fortran V8.2

                     Operating System:            OpenVMS Alpha Systems
                                                  Version 7.3-2 and
                                                  higher












                     Hewlett-Packard Company
                     Palo Alto, California

 






              __________________________________________________________

               Copyright 2007 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 V8.2 Overview

           1.1   Operating System Compatibility...............    1-2
           1.2   Web Page.....................................    1-2
           1.3   Getting Help and Reporting Problems..........    1-2

     2  New and Changed Features

           2.1   New /ALIGN=COMMON=PAD_ALIGN_SIZE qualifier...    2-1
           2.2   New /ASSUME=64BIT_STRING_PARAMS qualifier....    2-1
           2.3   DEC$FORRTL no longer included in compiler
                 kit..........................................    2-2
           2.4   Extra FORSYSDEF included for OpenVMS V8.3....    2-2
           2.5   Bugs fixed in this release...................    2-3

     3  New and Changed Features in Previous Releases

           3.1   New and Changed Features in V8.0 ECO 01......    3-1
           3.2   New and Changed Features in V8.0.............    3-2
           3.2.1     CDD and DML Implemented..................    3-3
           3.2.2     EDT5249: Fix for pointers on OpenVMS.....    3-3
           3.2.3     Bugs Fixed in This Release...............    3-4
           3.3   New and Changed Features in V7.6.............    3-6
           3.4   New and Changed Features in V7.5 ECO 01......    3-9
           3.5   New and Changed Features in V7.5.............   3-15
           3.5.1     Changes Specific to Compaq Fortran.......   3-15
           3.5.1.1     New /ASSUME=F77RTL compile qualifier...   3-15
           3.5.1.2     Additional changes and corrected
                       problems in V7.5.......................   3-16
           3.5.2     Changes specific to Compaq Fortran 77....   3-19
           3.6   New and Changed Features in V7.4.............   3-20



                                                                  iii

 






              3.6.1     Changes Specific to Compaq Fortran.......   3-20
              3.6.1.1     Change in behavior for initialized
                          structures/derived types...............   3-20
              3.6.1.2     New /ASSUME=[NO]PROTECT_CONSTANTS
                          qualifier..............................   3-21
              3.6.1.3     New /ANNOTATIONS qualifier.............   3-21
              3.6.1.4     New /CHECK=[NO]ARG_TEMP_CREATED
                          qualifier..............................   3-22
              3.6.1.5     Optional KIND= specifier on selected
                          intrinsics.............................   3-22
              3.6.1.6     New INT_PTR_KIND intrinsic.............   3-22
              3.6.1.7     64-bit support for MALLOC/FREE.........   3-22
              3.6.1.8     Change in behavior for ERR=............   3-23
              3.6.1.9     Additional changes and corrected
                          problems in V7.4.......................   3-23
              3.6.2     Changes specific to Compaq Fortran 77....   3-34
              3.6.2.1     /FAST now implies
                          /ARCH=HOST/TUNE=HOST...................   3-34
              3.6.2.2     Additional changes and corrected
                          problems in V7.4.......................   3-34
              3.7   New and Changed Features in V7.3.............   3-34
              3.7.1     Changes common to both Compaq Fortran and
                        Compaq Fortran 77........................   3-34
              3.7.1.1     New EV67 keyword for /ARCHITECTURE and
                          /OPTIMIZE=TUNE=........................   3-35
              3.7.2     Changes specific to Compaq Fortran.......   3-35
              3.7.2.1     New COMPLEX*32 datatype................   3-35
              3.7.2.2     New /ALIGN=[NO]SEQUENCE qualifier......   3-36
              3.7.2.3     Changes to /FAST qualifier.............   3-36
              3.7.2.4     Additional changes and corrected
                          problems in V7.3.......................   3-37
              3.7.3     Changes specific to Compaq Fortran 77....   3-46
              3.8   New and Changed Features in V7.2.............   3-46
              3.8.1     Changes common to both Compaq Fortran and
                        Compaq Fortran 77........................   3-46
              3.8.1.1     FORTRAN command invokes Fortran 95
                          compiler...............................   3-46
              3.8.2     Changes specific to Compaq Fortran.......   3-48
              3.8.2.1     Support of data in 64-bit address
                          space..................................   3-48
              3.8.2.2     Support for DIGITAL Source Code
                          Analyzer...............................   3-49
              3.8.2.3     Additional changes and corrections.....   3-50


        iv

 






              3.9   New and Changed Features in V7.1.............   3-63
              3.9.1     Changes common to both Compaq Fortran and
                        Compaq Fortran 77........................   3-63
              3.9.1.1     FORRTL V7.1 or OpenVMS Alpha V7.1
                          Required...............................   3-63
              3.9.1.2     /ARCHITECTURE Compile Command
                          Qualifier..............................   3-64
              3.9.1.3     New /OPTIMIZE=TUNE Keywords............   3-65
              3.9.1.4     Problem with NFS-mounted sources
                          fixed..................................   3-65
              3.9.2     Changes specific to Compaq Fortran.......   3-66
              3.9.2.1     Partial Fortran 95 support.............   3-66
              3.9.2.2     /PAD_SOURCE Qualifier Now Supported....   3-67
              3.9.2.3     Additional changes and corrections.....   3-67
              3.9.3     Changes specific to Compaq Fortran 77....   3-70
              3.9.3.1     G Format Edit Descriptor for Integer
                          Variables..............................   3-71
              3.9.3.2     DATE_AND_TIME Intrinsic................   3-71
              3.9.3.3     Use of POINTER Variables in DEBUG......   3-71
              3.9.3.4     Improved DEBUG support for PARAMETER
                          constants..............................   3-73
              3.9.3.5     Additional changes and corrections.....   3-73
              3.9.3.6     Known problems in Compaq Fortran 77....   3-77
              3.10  New and Changed Features in V7.0.............   3-77
              3.10.1    Changes common to Compaq Fortran and
                        Compaq Fortran 77........................   3-77
              3.10.1.1    cDEC$ PSECT ALIGN= Keywords
                          Supported..............................   3-78
              3.10.1.2    DPROD Intrinsic Now Generic............   3-78
              3.10.1.3    /ASSUME=ACCURACY_SENSITIVE Changes.....   3-78
              3.10.1.4    /ASSUME=BYTERECL Command Qualifier.....   3-78
              3.10.1.5    /CHECK=NOPOWER Compile Command
                          Keyword................................   3-79
              3.10.1.6    New /OPTIMIZE features.................   3-79
              3.10.1.7    /REENTRANCY Compile Command
                          Qualifier..............................   3-80
              3.10.1.8    Improvements in IEEE constant
                          handling...............................   3-80
              3.10.1.9    Improved optimizations.................   3-80
              3.10.1.10   Enhanced DEBUG support for optimized
                          programs...............................   3-80
              3.10.1.11   USEROPEN routines must be INTEGER......   3-81



                                                                       v

 






              3.10.2    Changes specific to Compaq Fortran.......   3-81
              3.10.2.1    cDEC$ ALIAS directive now supported....   3-81
              3.10.2.2    cDEC$ ATTRIBUTES directive.............   3-81
              3.10.2.3    Variable Format Expressions in
                          character literals now supported.......   3-82
              3.10.2.4    Abbreviations allowed in OPTIONS
                          statement..............................   3-82
              3.10.2.5    Enhanced support for the FORALL
                          statement and construct................   3-82
              3.10.2.6    /NAMES qualifier now supported.........   3-82
              3.10.3    Changes specific to Compaq Fortran 77....   3-83


        4  General Information about HP Fortran

              4.1   Information common to HP Fortran and HP
                    Fortran 77...................................    4-1
              4.1.1     INQUIRE(RECL) on OpenVMS Alpha vs.
                        OpenVMS VAX..............................    4-1
              4.1.2     Additional Explanation of Certain Tuning
                        Options..................................    4-1
              4.1.3     Fully Specify Datatypes in MODULEs and
                        INCLUDE Files............................    4-2
              4.1.4     Year 2000 Problem........................    4-2
              4.1.5     Optimizations on References to Dummy
                        Arguments and COMMON.....................    4-3
              4.1.6     Form of logical constants in formatted
                        input....................................    4-4
              4.1.7     Control of Dynamic IEEE Rounding Modes...    4-4
              4.2   Information specific to HP Fortran...........    4-4
              4.2.1     Differences from HP Fortran 77...........    4-4
              4.2.2     Timezone support in DATE_AND_TIME
                        intrinsic................................    4-7
              4.2.3     cDEC$ ALIAS Directive....................    4-7
              4.2.4     cDEC$ ATTRIBUTES Directive...............    4-9

        5  Documentation Overview

              5.1   HP Fortran Documentation and Online
                    Information..................................    5-1





        vi

 






        Tables

              3-1       Pascal DEBUG Syntax for Fortran Pointee
                        Expressions..............................   3-72

              4-1       cDEC$ ATTRIBUTES Properties and Object
                        Types....................................    4-9

              4-2       C Property and External Names............   4-11

              4-3       C Property and Argument Passing..........   4-12


































                                                                     vii

 









                                                                       1
        ________________________________________________________________

                                        HP Fortran Version V8.2 Overview



              HP Fortran Version V8.2 provides new versions of the HP
              Fortran and HP Fortran 77 compilers which include new
              features as well as corrections to problems discovered in
              earlier versions.

              HP Fortran Version V8.2 requires OpenVMS Alpha Version
              V7.3-2 or higher. The HP Fortran product kit may be
              installed whether or not any earlier version of HP
              Fortran, Compaq Fortran, DIGITAL Fortran or DEC Fortran
              was previously installed. If DEC Fortran 90 V2.x was
              previously installed, it must be deinstalled (PRODUCT
              REMOVE FORTRAN90) before installing HP Fortran. For
              complete installation details, see the HP Fortran for
              OpenVMS Alpha Systems Installation Guide.

              This chapter provides general information about the
              HP Fortran product. The remaining chapters provide the
              following information:

              o  Chapter 2 highlights new and changed features in this
                 version of HP Fortran.

              o  Chapter 3 highlights new and changed features in
                 previous versions of HP Fortran.

              o  Chapter 4 provides detailed information about HP
                 Fortran features not described in other documentation
                 as well as general information on usage.

              o  Chapter 5 lists the organization of the HP Fortran
                 documentation set and describes changes and corrections
                 to the documentation.



                                    HP Fortran Version V8.2 Overview 1-1

 






        1.1 Operating System Compatibility

              HP Fortran is supported on OpenVMS Alpha versions V7.3-2
              through V8.3, the latest which has been released at the
              time of printing. It is likely that HP Fortran will work
              correctly on all later versions of OpenVMS Alpha. If you
              have questions about version compatibility, please contact
              us as described in Section 1.3.

              Applications compiled with HP Fortran version V8.2 require
              a compatible Fortran Run-Time Library, such as the one
              provided with the OpenVMS Alpha operating system.


        1.2 Web Page

              The HP Fortran web page is at:

              http://hp.com/go/fortran/

        1.3 Getting Help and Reporting Problems

              If you encounter a problem while using HP Fortran, report
              it to HP.

              If an error occurs while HP Fortran is in use and you
              believe the error is caused by a problem with HP Fortran,
              take one of the following actions:

              o  If you have a Software Product Services Support
                 Agreement, consider contacting HP Global Services by
                 telephone (in the United States, 1-800-354-9000) or by
                 using the electronic means provided with your support
                 agreement.

              o  Customers without a service contract can arrange for
                 per-call support.

              When you initially contact HP Global Services, please
              indicate the following:

              o  The name (OpenVMS Alpha) and version number of the
                 operating system you are using


        1-2 HP Fortran Version V8.2 Overview

 






              o  The name (HP Fortran or HP Fortran 77) and complete
                 version number of the compiler you are using (the
                 version number is displayed at the end of a compiler
                 listing file)

              o  The hardware system you are using (such as a model
                 number)

              o  How critical the problem is

              o  A very brief description of the problem (one sentence
                 if possible)

              When you submit information electronically or are speaking
              on the phone to the appropriate support specialist, you
              can provide more detailed information. This includes
              the specific commands used to compile and link the
              program, the error messages displayed, and relevant
              detailed information (possibly including source program
              listings). Please try to narrow the cause of the problem
              to a specific source module or lines of code.

              Support personnel might ask for additional information,
              such as listings of any command files, INCLUDE files,
              relevant data files, and so forth. If the program is
              longer than 50 lines, submit a copy of it electronically
              or provide machine-readable media.

              Experience shows that problem reports sometimes do not
              contain enough information to duplicate or identify the
              problem. Concise, complete information helps HP give
              accurate and timely service to software problems.

              To obtain information about purchasing HP support ser-
              vices, please contact your local HP sales representative.

              You can also send comments, questions and suggestions
              about the HP Fortran product to fortran@hp.com. Note that
              this address is for informational inquiries and is not a
              formal support channel.





                                    HP Fortran Version V8.2 Overview 1-3

 









                                                                       2
        ________________________________________________________________

                                                New and Changed Features



              This chapter describes new and changed features for this
              release. The image identification string for the Fortran
              95 compiler is V8.2-104939-50H96.

              The image identification string for the Fortran 77
              compiler is V8.2-198-50H96.

        2.1 New /ALIGN=COMMON=PAD_ALIGN_SIZE qualifier

              When the qualifier /ALIGN=COMMON=MULTILANGUAGE is in
              effect, COMMON blocks within the compiled Fortran source
              are padded at the end of each such COMMON block in the
              same way that the C compiler would pad it, i.e. by a pad
              size based on the data types in the block.

              HP Fortran 95 previously contained an error (fixed
              in V7.6) which caused the padding to be based on the
              alignment specified in a directive. This error would cause
              a COMMON block that was aligned on an 8K boundary to also
              be padded out to an 8K size, for example.

              The new /ALIGN=COMMON=PAD_ALIGN_SIZE qualifier provides
              the previous padding behavior in which the padding size is
              based on the alignment size specified.

        2.2 New /ASSUME=64BIT_STRING_PARAMS qualifier

              By default, when a string variable is passed as an
              argument, it is passed with a 32-bit descriptor. When
              a 64-bit descriptor is desired (for example, when calling
              a routine written in another language using 64-bit
              descriptors), you need to individually designate each
              string variable for which you would like the 64-bit
              descriptor.

                                            New and Changed Features 2-1

 






              Some customers have requested an option to allow all such
              string variables used within a source file to be passed
              or received with 64-bit descriptors without needing to so
              specify for each individual string variable.

              The new [NO]64BIT_STRING_PARAMS keyword for the /ASSUME
              qualifier can be used to specify that requested behavior.
              When /ASSUME=64BIT_STRING_PARAMS is in effect, then all
              string variables used as parameters will be so used with
              64-bit descriptors.

              ** This feature must be used with caution, as unexpected
              side effects may cause you problems. For example, because
              the Fortran Runtime Library expects to receive parameters
              with 32-bit addresses, statements that access the RTL
              either implicitly (e.g. print statements) or explicitly
              may fail when passed string parameters with 64-bit
              addresses.

              The default is /ASSUME=NO64BIT_STRING_PARAMS.

        2.3 DEC$FORRTL no longer included in compiler kit

              The Fortran Run-time Library (DEC$FORRTL) is included with
              the OpenVMS installation rather than with the compiler
              kit.

        2.4 Extra FORSYSDEF included for OpenVMS V8.3

              The HP Fortran compiler is built against the oldest cur-
              rently supported OpenVMS operating system. Consequently,
              the FORSYSDEF file that installs as part of the HP Fortran
              installation process was created based on OpenVMS V7.3-2.

              For the convenience of customers using the newest
              currently supported OpenVMS operating system (i.e. V8.3),
              a matching FORSYSDEF is installed, but with the name
              FORSYSDEF-V83R.TLB. Once the customer renames the file to
              FORSYSDEF.TLB, then V8.3 definitions will become available
              to the V8.2 Fortran compiler.





        2-2 New and Changed Features

 






        2.5 Bugs fixed in this release

        This section provides highlights of problems corrected in HP
        Fortran V8.2.

              o  QXCM1000375413: V8.0 no longer allows the OPEN/CLOSE
                 file= clause to refer to an array.

              o  QXCM1000378452: Using the DEC$FORRTL that is packaged
                 with V8.3, the user's application fails when calling
                 LIB$SIGNAL. The correction is available in remedial kit
                 VMS83A_FORRTL-V0100.

              o  QXCM1000453936: Unexpected compiler errors occur using
                 complex structures in HP Fortran V7.6 and above.

              o  QXCM1000413720: Unexpected compiler errors occur when
                 using complex structures in HP Fortran V7.6 and above.

              o  QXCM1000403722: Unexpected compiler errors moving from
                 F77 to F90.
























                                            New and Changed Features 2-3

 









                                                                       3
        ________________________________________________________________

                           New and Changed Features in Previous Releases



        3.1 New and Changed Features in V8.0 ECO 01

        This section provides highlights of problems corrected in Compaq
        FortranV8.0 ECO 01
              The image identification string for the Fortran 95
              compiler is V8.0-1-104669-48GBT.

              The image identification string for the Fortran 77
              compiler is V8.0-198-48GBT.

              o  QXCM1000372297: Erroneous %SYSTEM-F-NOCALLTRANS: A
                 program trying to call a VAX subroutine processed
                 through the VEST binary translator-although compiled
                 with the correct switch (/TIE) and linked with the
                 correct option (/NONATIVE)-results in an erroneous
                 %SYSTEM-F-NOCALLTRANS failure.

              o  QXCM1000362711: Erroneous FATAL error when defining 21
                 or more CDD dictionaries: When a source file defines
                 21 or more CDD dictionaries, the compiler fails with
                 F90-F-FATAL, Include files and/or DICTIONARY statements
                 nested too deeply although the DICTIONARY statements
                 are not nested.

              o  QXCM1000343352: Array element argument passed
                 incorrectly when the code is compiled nooptimized.

                 When the argument being passed is an array element
                 using a constant subscript, and the code is compiled
                 /NOOPT, the first element of the array is passed rather
                 than the specified element. When compiled /OPT, the
                 correct argument is passed.

              o  QXCM1000340837: Erroneous syntax errors are generated
                 for logical statements containing 2-level structure
                 records.

                       New and Changed Features in Previous Releases 3-1

 






                 When the source code contains logical expressions that
                 are not fully qualified with parentheses and those
                 expressions contain 2-level deep structure records,
                 incorrect error messages are generated by the compiler.

              o  IF425: Internal compiler error after processing an
                 INTENT attribute on an entry point name.

                 Although the compiler correctly diagnoses the invalid
                 statement, it continues on to fail with an internal
                 compiler error.

              o  IF424: Erroneous syntax errors are generated for
                 logical statements using .not. and multi-level
                 structure syntax.

              o  PTR 75-13-1667: %F90-F-FATAL internal compiler error
                 occurs following this valid I message. %F90-I-INFO,
                 A name that identifies a global entity is used to
                 identify another global entity in the same program.
                 [JSCT]

              o  IF417: Declaring an EXTERNAL routine with the same name
                 as a common block results in %F90-E-ERROR instead of
                 the expected %F90-I-INFO.

              o  IF415: F90 asserts when compiling an initialized UNION
                 definition.

              o  IF412: /SHOW=MAP emits no information for modules.

        3.2 New and Changed Features in V8.0

        This section provides highlights of problems corrected in HP
        Fortran V8.0.
              The image identification string for the Fortran 95
              compiler is V8.0-104655-48F7C.

              The image identification string for the Fortran 77
              compiler is V8.0-198-48F7C.





        3-2 New and Changed Features in Previous Releases

 






        3.2.1 CDD and DML Implemented

              CDD (Common Data Dictionary) and DML (Data Manipulation
              Language) support, which were previously available only in
              the Alpha F77 compiler, have now been implemented in the
              Alpha F90 compiler.

              Code previously compiled with the F77 compiler that does
              not compile with the F90 compiler should be reported
              through standard problem reporting mechanisms. Although it
              may not be possible to eliminate all differences between
              the two compiler versions, the HP Fortran development team
              will attempt to minimize these differences by enhancing
              the F90 compiler.

        3.2.2 EDT5249: Fix for pointers on OpenVMS

              Problems were corrected in the layout of Fortran 90
              pointer types. None of these problems affected the non-
              standard "integer pointers" (sometimes called "Cray
              pointers").

              When a F90 pointer appeared as a field in a record or
              derived data type, or as part of a COMMON block, compilers
              prior to V8.2 had the following errors:

              o  A pointer to a scalar type should occupy 8 bytes, but
                 the compiler was allocating 20 bytes.

              o  A pointer to an n-dimensional array in 64-bit space
                 should occupy 48 + 24*n bytes, but the compiler was
                 allocating 32 + 24*n bytes.

              o  A scalar pointer, or a pointer to any array in 64-bit
                 space, should always be aligned on an 8-byte boundary,
                 but the compiler was only providing 4-byte alignment.

              The most prominent effect of these problems was poor
              performance when using an array of records containing
              pointer fields, due to their incorrect alignment.

              Correcting these problems has introduced the possibility
              of incompatibility between newly-compiled code and code
              compiled with older Fortran 90 compilers. We recommend
              using the new compiler to recompile all code that uses F90
              pointers as a field of a record or derived data type, or
              as part of a COMMON block. You should also make sure to

                       New and Changed Features in Previous Releases 3-3

 






              recompile any code that shares those same records, derived
              data types, or COMMON blocks.

              These changes do not affect:

              o  The nonstandard "integer pointer" ("Cray pointer")
                 feature

              o  Local or module F90 pointer variables, not part of a
                 record, derived data type, or COMMON block

              o  F90 pointers used as arguments or function return
                 values

              o  Array pointers in the default 32-bit space

        3.2.3 Bugs Fixed in This Release

              o  Fixed a number of LOC-related problems.

              o  Corrected and enhanced module debugging capability.

              o  BUG2878 FPE on system() call that goes away with -arch
                 ev67.

              o  BUG2961 Change to default to "-assume cc_omp" when -omp
                 is present, 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.

        3-4 New and Changed Features in Previous Releases

 






              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 which 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 runtime.

              o  QXCM1000221087: Public components of an object are
                 inaccessible when the type name of that object is
                 inaccessible

              o  QXCM1000222701: Module procedure confused with
                 nonstandard intrinsic FREE.

              o  QXCM1000235122: Incorrectly diagnosing common variables
                 which are not explicitly attributed as shared, private,
                 reduction, firstprivate, lastprivate if the common
                 block is so attributed.

              o  EDT4748 Fix erroneous warning received when using -
                 std95

              o  EDT5398 While loading (not importing into symbol table)
                 a module - all symbols are 'recorded' in the load area
                 and are retrievable by a symbol id. The CIR is scanned
                 and along with various criteria - the symbol is either
                 added to the list to be examined by the importer or
                 not. If there are NO visible uses of the symbol in
                 the cir - it very likely will be eliminated from the
                 import list. However, it can occur that the symbol
                 is required (e.g. as a type for a dummy argument of a

                       New and Changed Features in Previous Releases 3-5

 






                 generic/specific procedures). In that case the symbols
                 is retrieved via the symbol id. Edit 5398 adjusts the
                 environment of the 'use' descriptor to pertain to the
                 current 'import', and to override similar, earlier
                 symbol retrieval in a different scope or environment.


        3.3 New and Changed Features in V7.6

        This section provides highlights of problems corrected in HP
        Fortran V7.6.
              The image identification string for the Fortran 95
              compiler is V7.6-3276-48D52.

              The image identification string for the Fortran 77
              compiler is V7.6-198-48D52.

              o  2632 - Generate correct code when character function
                 length expression references a module procedure later
                 in the module.

              o  2637 - Diagnose passing an assumed-size array to an
                 ELEMENTAL subroutine.

              o  2663 - Eliminate spurious error for integer POINTER
                 pointee being a procedure whose interface is visible
                 through a USE in a host scope when IMPLICIT NONE is
                 used.

              o  2668 - Properly handle the SIZE intrinsic when the
                 first argument is an array expression and the optional
                 DIM argument is used.

              o  2674 - Allow NO_ARG_CHECK attribute in contained
                 procedures. Allow it to disable the check for passing a
                 scalar to an array argument.

              o  2688 - Correct parsing problem for C-string literals
                 containing a "!" character.

              o  2691 - Allow the KIND argument to be any INTEGER kind
                 for the following intrinsics: AINT, ANINT, CEILING,
                 CHAR, CMPLX, FLOOR, INT, LOGICAL, NINT and REAL.

              o  2703 - Correct parsing error for certain expressions
                 containing dot field component separators.

              o  2762 - Eliminate internal compiler error for confusing
                 generic routine references.

        3-6 New and Changed Features in Previous Releases

 






              o  2770 - Suppress unused variable warning for RESULT
                 variable in INTERFACE.

              o  2792 - Allow optional KIND for ICHAR.

              o  2824 - Allow specific module procedure to have the same
                 name as the generic.

              o  2876 - Eliminate internal compiler error for certain
                 uses of character substring expression with no upper
                 bound (eg. C(i:)), when variable is a passed-length
                 variable in contexts where the upper bound is not
                 needed.

              o  2880 - Correct various problems involving array
                 constructors of entities with allocatable components.

              o  2883 - Allow .XOR. to be user (re)defined for two
                 logical operands.

              o  2887 - Do not sign-extend addresses when building 64-
                 bit descriptors.

              o  2906 - Allow A(N+1:) in DATA.

              o  2907 - Make EXTERNAL take precedence over a module
                 procedure of the same name.

              o  2908 - Issue standards warnings for too many continua-
                 tion lines.

              o  2909 - Issue standards warning for array constructor
                 character elements of differing lengths (extension to
                 F95, but to be standard in F200x!)

              o  2945 - Allow array constant elements in array
                 constructors.

              o  2946 - In free-form source, properly parse continued
                 character literal that ends with "!" characters.

              o  2947 - Correct parsing of field references to variables
                 named PUBLIC or PRIVATE when used with dot separators.

              o  2956 - Allow subobjects of constants in DATA.

              o  2958 - Don't require delimiter following repeat group
                 in FORMAT.

              o  2967 - Allow w and d specifications for FORMAT items to
                 be omitted in contexts where delimiters are omitted.

                       New and Changed Features in Previous Releases 3-7

 






              o  2968 - Allow initialized RECORD arrays of more than
                 32766 elements.

              o  2970 - Prevent EQUIVALENCE from causing symbol
                 "leakage" from modules.

              o  2993 - Disallow calls to non-pure intrinsics from pure
                 procedures.

              o  3002 - Correct problem when only use of use-associated
                 symbol is as a KIND specifier in the FUNCTION
                 statement.

              o  3010 - Diagnose INTENT(OUT) or (INOUT) arguments to
                 PURE functions.

              o  3012 - Allow CHARACTER(0) FUNCTION.

              o  3036 - Issue standards warning for recursive use of
                 function without RESULT.

              o  3042 - Do not require slashes around common block names
                 in ATTRIBUTES C, STDCALL, DEFAULT or ALIAS.

              o  3063 - Eliminate internal compiler error when the
                 pointer in an integer POINTER declaration is made
                 PRIVATE.

              o  3091 - Eliminate internal compiler error for TRANSFER
                 in an initialization expression.

              o  3158 - Correctly handle operator precedence in
                 expressions involving dot field separators.

              o  3172 - Eliminate internal compiler error processing
                 !DEC$ conditional compilation directives when an END
                 SUBROUTINE is missing.

              o  3173 - Disallow forward references to type declara-
                 tions.

              o  3187 - Suppress message abouy undefined function value
                 if value defined by storage association among ENTRYs.

              o  3193 - Correct bad code for blank common in MODULE that
                 is not USEd.

              o  3194 - Disallow statement function in specification
                 expression.

        3-8 New and Changed Features in Previous Releases

 






              o  3210 - Correct generated code for bounds expressions
                 computed for ENTRY points where arguments are in
                 different order.

              o  3223 - Significantly speed up compilation for
                 initialization of very large arrays to a single value.

              o  3224 - Eliminate spurious error for user definition
                 of OPERATOR(-) when ONLY is used to pull in the
                 definition.

              o  3239 - Diagnose as non-standard missing PRIVATE
                 attribute on derived type which contains PRIVATE user-
                 type component.

              o  3248 - Disallow array values for UNIT and FILE= in OPEN
                 (except that, as an extension, FILE may be a numeric
                 array.)

              o  3264 - Improve consistency of checks where an
                 implicitly typed named constant is named in a later
                 type declaration.

        3.4 New and Changed Features in V7.5 ECO 01

        This section provides highlights of new and changed features and
        problems corrected in Compaq FortranV7.5 ECO 01
              The image identification string for the Fortran 95
              compiler is V7.5-2630-48C8L.

              The image identification string for the Fortran 77
              compiler is X7.5-197-48C8L.

              o  1965 - Disallow situation where, through renaming, the
                 same entity could be known by more than one local name
                 in a scoping unit.

              o  1967 - Allow REAL(16), COMPLEX(8, 16), derived types to
                 be passed by value on all platforms.

              o  1968 - Eliminate internal compiler error for ini-
                 tialization expression involving array constructor
                 PARAMETER.

              o  1985 - Correct a problem where some old-format module
                 files could not be used by a newer compiler.

                       New and Changed Features in Previous Releases 3-9

 






              o  1992 - Allow the full appropriate range of signed
                 integer constants which contain an explicit kind
                 specifier.

              o  2002 - Promote mixed-kind arguments to shift intrinsics
                 to INTEGER(8) as needed.

              o  2005 - Eliminate internal compiler error for INTERFACE
                 block defining function with ALLOCATABLE result.

              o  2007 - Disallow an array from having the same name
                 as a derived type or STRUCTURE. This is not legal in
                 Fortran 90, as syntactically it looks like a structure
                 constructor, but it was allowed in Fortran 77 (which
                 didn't have structure constructors.) In some cases,
                 the compiler issued inappropriate and different error
                 messages and/or an internal compiler error.

              o  2008 - In structure constructor, allow typeless
                 PARAMETER constant to take type from context.

              o  2022 - Eliminate internal compiler error for TRANSFER
                 of long character literal to numeric array.

              o  2024 - Generate correct result of TRANSFER of array
                 constructor in initialization expression.

              o  2026 - Correct problem with visibility of sibling
                 contained procedure as specification function.

              o  2027 - Improve error message for I/O list with
                 extraneous parenthesis.

              o  2036 - Allow LOG and LOG10 to be passed as actual
                 arguments. Eliminate spurious diagnostic for use of
                 non-default kind in CASE that matches SELECT CASE.
                 Eliminate internal compiler error for EOSHIFT of
                 INTEGER(2) array. Give an error for an empty array
                 constructor.

              o  2037 - Allow combination of null ONLY list (ONLY:) and
                 non-null ONLY list in a later USE.

              o  2038 - Disallow COMPLEX*16 second argument to DCMPLX,
                 COMPLEX*32 second argument to QCMPLX.

              o  2039 - Give error for null CASE range.

        3-10 New and Changed Features in Previous Releases

 






              o  2063 - Correct import of COMMON variable in USE, ONLY
                 in contained procedure.

              o  2064 - Don't allow parenthesization of expression hide
                 compile-time overflow detection.

              o  2070 - Improve detection of duplicate signature
                 detection for generics.

              o  2075 - Make ANINT generic.

              o  2108 - Correct problem involving passing a discontigu-
                 ous pointer array slice as an actual argument where a
                 temporary is needed but wasn't being created.

              o  2115 - Give standards warning for use of character
                 literal constant in Hollerith context in WHERE.

              o  2126 - Eliminate possible internal compiler error
                 caused by attempt to put out ARG_TEMP_CREATED
                 diagnostic message.

              o  2137 - Eliminate internal compiler error for USE of
                 blank COMMON in a module.

              o  2157 - Don't give standards warning for use of host
                 associated PARAMETER constant as a constant kind
                 specifier in a statement function.

              o  2197 - Give standards warning for consecutive commas in
                 an argument list.

              o  2206 - Eliminate internal compiler error for omitted
                 optional argument to PURE function in specification
                 expression.

              o  2214 - Give standards warning for comma between control
                 list and I/O list.

              o  2216 - Make PACK directive take precedence over /ALIGN
                 compiler switch. Add 8 as a PACK option.

              o  2221 - Correct problem involving import of COMMON from
                 a module where different imports make different sets of
                 symbols visible.

              o  2223 - When calling an intrinsic that needs to know
                 the size of default integer (eg. DATE_AND_TIME), make
                 sure that we look at the effects of !DEC$ INTEGER and
                 OPTIONS /[NO]I4.

                      New and Changed Features in Previous Releases 3-11

 






              o  2245 - Disallow character literal scalar to match
                 character*1 array of same length in argument lists.

              o  2246 - Disallow use of an array as a substring bound.

              o  2248 - Correct problem involving nested renames.

              o  2249 - Allow ALLOCATED to be used on an ALLOCATABLE
                 derived type component.

              o  2260 - Do not automatically deallocate on exit
                 allocatable components of INTENT(OUT) dummy arguments
                 that have initialization.

              o  2264 - Allow logical operators to be extended with
                 non-numeric argument types.

              o  2267 - Improve way that source filespecs are handled so
                 that the compiler lets the OS determine what the syntax
                 of a valid filespec is, rather than looking for what it
                 thinks is a delimiter. In particular, embedded quotes
                 are now properly handled.

              o  2270 - Avoid corrupting descriptor for allocatable
                 array dummy argument when debugging information
                 was requested. The usual symptom of this was an
                 inappropriate array bounds violation error.

              o  2271 - Correct problem where ALLOCATED on an allocat-
                 able component passed as an actual argument might not
                 return the correct result.

              o  2275 - For INTENT(OUT) allocatable component dummy
                 arguments, deallocate them in the prologue of only
                 those entry points where the component is in the
                 argument list.

              o  2293 - If a compiler-generated external name would
                 exceed the maximum length supported by the platform's
                 linker, shorten it and give a warning.

              o  2329 - Disallow passing an element of a POINTER array
                 to a POINTER argument.

              o  2342 - Allow an pointer to derived type with allocat-
                 able component to be initialized to NULL().

              o  2344 - Eliminate spurious shape conformance error
                 message for nested MATMUL.

        3-12 New and Changed Features in Previous Releases

 






              o  2345 - Disallow "PRINT (101)".

              o  2361 - Correct miscellaneous ASSOCIATED problems.

              o  2363 - Eliminate I/O list-format synchronization
                 problems caused by inappropriate implied-DO loop
                 collapsing when format contains VFEs.

              o  2374 - Disallow any statements from appearing between a
                 SELECT CASE and the first CASE. We were allowing FORMAT
                 and DATA here.

              o  2376 - F95 Interp 80 - Do not allow a datatype to
                 be implicitly assigned to what looks like a function
                 reference to a host-associated EXTERNAL.

              o  2377 - Do not give standards warning for use of BOZ
                 constant as repeat count in DATA initializer when a
                 regular error would have been given anyway.

              o  2378 - Improve and correct diagnostics reflecting F95
                 interp 70.

              o  2389 - Correct behavior to reflect F95 interp 72
                 relating to generics and elemental references.

              o  2395 - Correct behavior to reflect F95 interp 83
                 regarding scope of implied-DO loop variable in array
                 constructors.

              o  2398 - F95 interp 70; allow length specification
                 of char-len-param-value or array spec to be a
                 specification expression if object is automatic.

              o  2399 - Allow KIQINT, KIQNNT to be passed as actual
                 arguments.

              o  2400 - Add F95 standards checking for F2K ehancements.

              o  2401 - Correct problem where if a module defines
                 a derived type and operators on that type, but a
                 USE imports ONLY the type and not the operator, the
                 compiler still makes the operator visible.

              o  2411 - Correct name of external math library routine
                 used when KIXINT is passed as an actual argument.

              o  2415 - Diagnose as non-standard the use of a non-
                 intrinsic elemental as an actual argument.

                      New and Changed Features in Previous Releases 3-13

 






              o  2435 - Allow passing a PURE procedure as an actual
                 argument when the corresponding dummy is not declared
                 PURE.

              o  2437 - If a routine name is explicitly declared
                 INTRINSIC, do not assume EXTERNAL if argument types
                 don't match.

              o  2455 - Change compiler to assume that dummy arguments
                 with TARGET attribute are aliased in all cases, not
                 just for pointer assignments.

              o  2457 - Disallow OPTIONAL dummy argument for DIM
                 argument to DIM, etc.

              o  2458 - Properly propagate TARGET attribute to
                 ALLOCATABLE subcomponents of POINTER object.

              o  2476 - Correct visibility problems for COMMON variables
                 in a module in the presence of only and renames.

              o  2477 - Detect invalid case of global symbol referred to
                 by two names through nested rename.

              o  2482 - More changes to accomodate F95 interpretation 70
                 dealing with what is allowed (or not) in an automatic
                 bounds or character length expression.

              o  2486 - Properly report error (instead of internal
                 compiler error) when ALLOCATED is used on non-
                 ALLOCATABLE derived type that contains an ALLOCATABLE
                 component.

              o  2559 - More work for COMMON variable with only and
                 rename.

              o  2560 - In FORALL, don't confuse subscript name with a
                 derived type component of the same name.

              o  2576 - Support %FILL in STRUCTUREs in MODULEs.

              o  2577 - Correct problem with defined operator visibil-
                 ity.

              o  2578 - Eliminate internal compiler error for reference
                 to PARAMETER structure array in structure constructor.

              o  2580 - Properly support use of pointer-returning
                 functions in ASSOCIATED.

        3-14 New and Changed Features in Previous Releases

 






              o  2582 - Eliminate spurious standards warning for dataype
                 of PURE function used in specification expression.

              o  2591 - Disallow passing array section to ALLOCATABLE
                 argument. Disallow passing assumed-size array to
                 elemental procedure where the shape is required.

              o  2594 - Eliminate internal compiler error for nested
                 TRANSFER in initialization expression.

              o  2595 - Disallow use of scalar in structure constructor
                 for allocatable component.

              o  2607 - Do not issue "unbalanced parentheses" diagnostic
                 for code that is not being compiled due to !DEC$ IF.

              o  2608 - Correct problems with LBOUND, UBOUND and SHAPE
                 of array components of nested derived type PARAMETERs.

              o  2612 - Eliminate internal compiler error when the
                 compiled module referenced in a nested USE can't be
                 opened.

        3.5 New and Changed Features in V7.5

        This section provides highlights of new and changed features and
        problems corrected in Compaq Fortran V7.5.
              The image identification string for the Fortran 95
              compiler is V7.5-1961-48BCD.

              The image identification string for the Fortran 77
              compiler is V7.5-197-48BCD.

        3.5.1 Changes Specific to Compaq Fortran

        3.5.1.1 New /ASSUME=F77RTL compile qualifier

              Version 7.5 adds support for the /ASSUME=[NO]F77RTL
              qualifier, for compatibility with the -f77rtl switch of
              Compaq Fortran on other platforms. If /ASSUME=F77RTL is
              in effect, I/O defaults change to match that of Compaq
              Fortran 77 compilers:

              o  In OPEN, the default is PAD='NO'.

              o  In NAMELIST output, the Compaq Fortran $ delimiters are
                 output.

                      New and Changed Features in Previous Releases 3-15

 






              The default is /ASSUME=NOF77RTL.

        3.5.1.2 Additional changes and corrected problems in V7.5

              o  1687 - Improve diagnostics for ONLY symbols not found.

              o  1707 - Correct a problem when, in a given program unit
                 a reference is made to a field whose type is private
                 when imported from one module, but public when imported
                 from another, the visible field is not recognized.

              o  1708 - When a typeless constant is passed as an actual
                 argument, always treat it as INTEGER(8), not "default
                 integer".

              o  1712 - Eliminate internal compiler error for nested
                 initialized pointer type.

              o  1713 - Eliminate invalid warnings when :: used with
                 initialization in STRUCTURE field declarations.

              o  1714 - Eliminate internal compiler error for invalid
                 use of array member in scalar structure constructor.

              o  1720 - Correct problems when omitted OPTIONAL arguments
                 passed to MAX and MIN.

              o  1723 - ASSOCIATED of POINTER and TARGET components
                 sometimes returns wrong result.

              o  1724 - Significantly improve compilation time for
                 certain large (and usually machine-generated) programs
                 when unitialized variable detection is not selected and
                 optimization level is 0.

              o  1739 - Disallow OPTIONAL argument in character length
                 specification expression.

              o  1743 - Correctly recognize accessibility of defined
                 assignment procedures imported from multiple modules.

              o  1754 - Eliminate internal compiler error when alternate
                 return specifier used with /ANALYSIS_DATA.

              o  1757 - Correct parsing error when field name matches
                 operator name and dot separators used.

              o  1758 - Diagnose ambiguous generic involving OPTIONAL
                 arguments.

        3-16 New and Changed Features in Previous Releases

 






              o  1774 - Give diagnostic rather than internal compiler
                 error for use of list-directed ENCODE/DECODE (not
                 supported).

              o  1778 - Eliminate internal compiler error when
                 /CHECK=BOUNDS used and a non-contiguous array copy
                 is passed.

              o  1779 - Eliminate internal compiler error for nested
                 WHERE and outer WHERE array is INTEGER(2).

              o  1785 - Correct offsets of UNIONs when compiled
                 /NOALIGN.

              o  1786 - Warning about unused statement functions is now
                 informational.

              o  1789 - Correct generated code for complex case of
                 user specification function used to declare size of
                 character function result.

              o  1794 - Eliminate internal compiler error for non-
                 standard program that uses intrinsics in array con-
                 structors for initialization of character parameters.

              o  1796 - 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 argument.

              o  1797 - Diagnose conflict between POINTER and COMMON.

              o  1802 - Diagnose invalid reference to component of
                 another function's result variable.

              o  1806 - Recognize use of renamed intrinsic in initial-
                 ization expression.

              o  1812 - Eliminate internal compiler error for CHARACTER
                 function whose result length is based on an argument
                 subcomponent.

              o  1813 - Diagnose a duplicate name for interfaces from
                 different modules if at least one, but not all, are
                 generic.

              o  1823 - Eliminate incorrect alignment warnings for case
                 involving COMMON and EQUIVALENCE.

                      New and Changed Features in Previous Releases 3-17

 






              o  1827 - Properly ignore END MODULE if it occurs within
                 a conditional compilation section that is not being
                 compiled.

              o  1828 - Properly handle a structure constructor with
                 variables in an argument list.

              o  1836 - Eliminate excessive virtual memory consumption
                 when compiling sources with very deeply nested USE
                 references.

              o  1837 - Allow INQUIRE(IOLENGTH=) for POINTER and
                 ALLOCATABLE array references.

              o  1841 - Eliminate internal compiler error for use
                 of certain expressions in array constructor in
                 initialization expression.

              o  1843 - Establish that STRUCTUREs with field initial-
                 ization imply SAVE semantics (compatible with past
                 Compaq/DEC implementations) but Fortran 90 derived
                 types with component initialization do NOT imply SAVE
                 (per F95 standard).

              o  1846 - Properly assign default integer type to an array
                 constructor whose elements are all typeless constants.

              o  1847 - Properly handle renaming of user-extended
                 intrinsics.

              o  1848 - Properly establish type of #nnnn constants in
                 CASE expressions.

              o  1858 - Eliminate erroneous overflow warning (and bad
                 generated code) for use of 64-bit integer constant as
                 argument to character function which uses the argument
                 to determine the result length.

              o  1865 - Disallow subcomponents of pointers as the
                 pointer argument to ASSOCIATED.

              o  1872 - Correct parsing error for expression involving
                 record fields with dot separator.

              o  1883 - Add /ASSUME=[NO]F77RTL.

              o  1888 - Correct parsing error for expression involving
                 record fields with dot separator.

        3-18 New and Changed Features in Previous Releases

 






              o  1896 - If IMPLICIT NONE is in effect, allow a
                 specification function to follow its use.

              o  1909 - Correct problem where call of LIB$ESTABLISH in a
                 function overwrites the function return value

              o  1911 - Allow IMPLICIT type ($)

              o  1914 - Fix problem with wrong value for certain
                 expressions in implied-DO-loop array constructors.

              o  1916 - Restore ability to USE certain MODULE files
                 generated by older compiler versions.

              o  1918 - Fix field alignment of substructure in UNION.

              o  1928 - Don't give standards warning for "*-" combi-
                 nation in a DATA initializer when the * is a repeat
                 count.

              o  1929 - Allow LEN of an INTENT(OUT) argument in a
                 specification expression.

              o  1930 - When /NAMES=AS_IS specified, keep track of
                 separate IMPLICIT entries for uppercase and lowercase
                 letters.

              o  1937 - Eliminate incorrect diagnostic for use of
                 bin/oct/hex constant in an initialization expression
                 in type statements, but give standards warning if
                 requested.

              o  1953 - Disallow passing a scalar actual argument to an
                 array dummy argument.

              o  1956 - Fix problem where allocatable components of a
                 module derived type were being incorrectly deallocated
                 on routine exit.

              o  1961 - Allow ASSIGN 10 TO FNAME where FNAME is the
                 current function.

        3.5.2 Changes specific to Compaq Fortran 77

              No functional changes - rebuilt using new optimizer/code-
              generator version.

                      New and Changed Features in Previous Releases 3-19

 






        3.6 New and Changed Features in V7.4

        This section provides highlights of new and changed features and
        problems corrected in Compaq Fortran V7.4B.
              The image identification string for the Fortran 95
              compiler is V7.4B-1684-46B5P.

              The image identification string for the Fortran 77
              compiler is V7.4B-197-46B5P.

        3.6.1 Changes Specific to Compaq Fortran

        3.6.1.1 Change in behavior for initialized structures/derived
                types

              The Fortran 95 specifies that a derived type object with
              component initialization does not acquire an implicit
              SAVE attribute, unlike objects of non-derived types. In
              addition, the standard specifies that derived type objects
              that are local (declared in a routine) and which do not
              have SAVE explicitly specified, have their component
              initializations reapplied on each entry to the routine.
              Prior to version 7.4B, the compiler treated all objects
              with initialization as implicitly SAVE, but 7.4B now
              correctly implements the standard's rules for derived
              type objects.

              This change has no impact on programs which use the DEC
              Fortran STRUCTURE extension with initialization specified
              for fields, for example:

                    STRUCTURE /STRUCT/
                      INTEGER F1 /3/
               END STRUCTURE

              As in earlier versions, variables of STRUCTURE type with
              initialized fields imply the SAVE attribute. This is
              the only significant difference in semantics between
              STRUCTURE/RECORD and Fortran 90 derived types. If you wish
              variables of derived type to be SAVEd, then explicitly
              name them in a SAVE declaration.




        3-20 New and Changed Features in Previous Releases

 






        3.6.1.2 New /ASSUME=[NO]PROTECT_CONSTANTS qualifier

              By default, when a constant is passed as an actual
              argument, attempting to modify the associated dummy
              argument results in an access violation, as the constant
              is allocated in read-only memory. Such attempts to
              modify a constant argument are disallowed by the Fortran
              standard, but some customers have requested an option
              to allow such modifications to succeed (without changing
              the original constant value) in much the same way that
              Compaq Fortran already allows modification of arguments
              associated with an expression.

              The new [NO]PROTECT_CONSTANTS keyword for the /ASSUME
              qualifier can be used to specify the behavior when
              constants are passed. The default is PROTECT_CONSTANTS,
              which disallows modification of or assignment to dummy
              arguments associated with constant actual arguments. If
              NOPROTECT_CONSTANTS is specified, the compiler passes a
              temporary copy of the constant instead. This copy can be
              modified and assigned to - the results will be discarded
              when the routine returns.

        3.6.1.3 New /ANNOTATIONS qualifier

              The new /ANNOTATIONS qualifier requests that annotations
              be added to the source listing indicating which of a set
              of optimizations were applied to particular parts of the
              source. Available keywords include CODE, DETAIL, FEEDBACK,
              INLINING, LOOP_TRANSFORMS, LOOP_UNROLLING, PREFETCHING,
              SHRINKWRAPPING, SOFTWARE_PIPELINING, TAIL_CALLS and TAIL_
              RECURSION. Keywords ALL or NONE may be used to specify
              all or no annotations. Annotation keywords may exist for
              optimizations not supported on this platform. Annotations
              can be helpful in understanding why the compiler was
              unable to optimize a particular code sequence or to see
              what optimizations were performed. For more details,
              please see HELP FORTRAN /ANNOTATIONS or the User Manual.







                      New and Changed Features in Previous Releases 3-21

 






        3.6.1.4 New /CHECK=[NO]ARG_TEMP_CREATED qualifier

              The new [NO]ARG_TENP_CREATED keyword for the /CHECK
              qualifier specifies whether or not the compiler generates
              code to provide run-time warnings when a temporary copy of
              an actual argument is made prior to a call. Such copies
              can often be time-consuming and are usually due to passing
              a deferred-shape array or array section to a routine for
              which there is no explicit interface or the interface
              specifies an explicit shape array. The default is to not
              issue the warning.

        3.6.1.5 Optional KIND= specifier on selected intrinsics

              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. Without the KIND= specifier, these intrinsics always
              return a result of default integer kind.

        3.6.1.6 New INT_PTR_KIND intrinsic

              The new INT_PTR_KIND() intrinsic returns the KIND number
              of an integer pointer for the platform being compiled on.
              This allows you to declare INTEGER variables which are big
              enough to hold an address without platform-specific code.
              The result of INT_PTR_KIND is 8 on OpenVMS Alpha, Tru64
              UNIX and Linux Alpha, 4 on Windows. INT_PTR_KIND may be
              used in the same contexts as SELECTED_INT_KIND - it does
              not take any arguments.

        3.6.1.7 64-bit support for MALLOC/FREE

              When the arguments to the MALLOC and FREE intrinsics are
              of type INTEGER*8, the corresponding 64-bit Run-Time
              Library routine will be called. This allows you to use
              MALLOC to allocate data in 64-bit (P3) space by specifying
              an INTEGER*8 size argument. Note that the 64-bit FREE
              routine can free storage allocated in either 64 or 32-bit
              space.




        3-22 New and Changed Features in Previous Releases

 






        3.6.1.8 Change in behavior for ERR=

              In order to comply with clarified wording in the Fortran
              standard, the compiler and run-time library have changed
              the behavior when an end-of-file condition occurs during a
              READ statement and there is an ERR= specifier but neither
              a END= nor IOSTAT= specifier. In previous versions, this
              condition would cause the ERR= branch to be taken for
              an end-of-file condition. However, the standard has new
              wording which makes it clear that the correct behavior
              is to terminate the program (with an error message).
              Similarly, if an end-of-record condition occurs and there
              is not an EOR= nor IOSTAT= specifier, an error will be
              signalled rather than take the ERR= branch.

              This change will be applied to programs which are
              recompiled with the new compiler - already-linked programs
              will continue the old, incorrect behavior. To ensure
              correct and portable behavior, be sure to use END=, EOR=
              and/or IOSTAT= where appropriate and do not assume that
              end-of-file or end-of-record conditions will trigger an
              ERR= branch.

        3.6.1.9 Additional changes and corrected problems in V7.4

              o  Eliminate many unnecessary copies of assumed-shape
                 arrays when passed as arguments to explicit shape
                 arrays by keeping track of whether or not the array
                 is known to be contiguous.

              o  When /SEPARATE_COMPILATION is used, and there are blank
                 lines following the END of the final program unit, do
                 not cause the object file to be deleted.

              o  Automatically force the alignment of a COMMON block
                 to be at least as large as that required by the widest
                 variable in the COMMON block.

              o  Fix a number of problems with WHERE inside of FORALL.

              o  Make defined assignment in FORALL work properly.

              o  Generate correct code for CSHIFT of a non-contiguous
                 array slice.

              o  Allow user-defined types to be named BYTE and
                 DOUBLECOMPLEX.

                      New and Changed Features in Previous Releases 3-23

 






              o  Improve generated code for mixed COMPLEX-REAL
                 multiplication and division.

              o  In array constructors with only one implied-DO, and
                 nothing else, avoid creating an unnecessary temp.

              o  Allow SIZEOF(allocatable-array)

              o  Improve generated code for SIZEOF(array)

              o  Prevent incorrect collapsing of implied-DO loop in
                 an I/O statement where there are nested loops and the
                 implied-DO variable of one loop is used as a bound of
                 an inner loop.

              o  When the error limit has been exceeded (default 30),
                 simply suppress further messages rather than exiting
                 the compiler. This means that the object file will
                 get deleted appropriately, the listing and diagnostic
                 (VMS) files created, and subsequent source files on the
                 command line will be processed.

              o  Re-allow complex constants to be passed by value.
                 The real and imaginary parts are passed as separate
                 arguments.

              o  Allow character array valued function as a format
                 specifier.

              o  Allow debugging of a character function whose length
                 is computed based on the length of a passed-length
                 character argument.

              o  Eliminate internal compiler error for character
                 function whose length expression includes LEN_TRIM
                 of a dummy argument.

              o  Eliminate internal compiler error for SIZE of a derived
                 type component pointer array.

              o  Elmininate 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)

        3-24 New and Changed Features in Previous Releases

 






              o  Allow omitted OPTIONAL arguments to be passed as
                 optional arguments to intrinsics.

              o  If "too many errors", suppress informational/warnin
                 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  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  Support the full range of format width specifiers as
                 documented.

              o  Correct problem where bounds for an adjustable array
                 were not being computed properly at an ENTRY.

              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  Add support for /ASSUME=[NO]PROTECT_CONSTANTS.

              o  Eliminate inappropriate error messages for certain
                 case involving multiple ENTRYs for a FUNCTION where two
                 ENTRYs have an array function result.

              o  Don't give standards warning for MAX(0,2-1).

              o  Make sure that variables of derived type where the
                 derived type has initialized components are SAVEd.

              o  Diagnose conflicting use of /IEEE_MODE and /ROUNDING_
                 MODE when VAX float is in use.

              o  Correct problem where IARGCOUNT could return wrong
                 result when /NOOPT.

              o  If argument to MALLOC/FREE is INTEGER*8, call the
                 corresponding 64-bit entry point.

                      New and Changed Features in Previous Releases 3-25

 






              o  Eliminate GEM assertion failure when DATA implied-DO
                 loop has negative stride.

              o  Correct problem with FORALL when overlap is detected
                 and datatype is CHARACTER.

              o  Improve performance by suppressing the copy-back of
                 arguments with INTENT(IN).

              o  Add support for -mixed_str_len_arg switch on UNIX,
                 which puts character argument lengths next to their
                 addresses in the argument list (this is the default
                 Windows method). Add support for [NO]MIXED_STR_LEN_ARG
                 attribute in !DEC$ ATTRIBUTES.

              o  Eliminate spurious error for declaration of RECORD
                 array in a COMMON block in a MODULE.

              o  Correct handling of generics where several routines
                 have an optional argument at the same position.

              o  In C strings, allow octals of the form \ooo to have 1,
                 2 or 3 octal digits and hex objects of the form \Xxx to
                 have 1 or 2 hexadecimal chars.

              o  Generate debug symbol table information for labels,
                 allowing SET BREAK %LABEL nnn.

              o  Add support for /check=arg_temp_created

              o  Annotations now are displayed on a per-routine basis.

              o  Enhance debug information for module functions.

              o  Eliminate internal error for SIZEOF of POINTER array
                 component of derived type.

              o  Check for overflow in computation of size for ALLOCATE

              o  Correct problem in certain cases of an omitted OPTIONAL
                 argument passed as the MASK argument to MAXLOC, etc.

              o  Allow character substring assignment in FORALL.

              o  Prevent blank COMMON definition from "leaking" from a
                 module when USE, ONLY does not name a COMMON variable.

              o  Correct problem involving PRIVATE component of non-
                 PRIVATE derived type.

        3-26 New and Changed Features in Previous Releases

 






              o  Fix internal compiler error when COMMON in a MODULE has
                 an ALIAS.

              o  Improve generated code for ISHC.

              o  When passing NINT as an actual argument, pass address
                 of JNINT, not ININT.

              o  When passing IDINT as an actual argument, pass address
                 of JIDINT, not IIDINT.

              o  Disallow CHARACTER value for RECL= in OPEN.

              o  Fix internal compiler error involving substring
                 assignment in FORALL.

              o  /STANDARD now means /STANDARD=F95.

              o  Eliminate spurious "shapes do not conform" error when
                 RESHAPE is used in a PARAMETER declaration.

              o  Eliminate spurious error when generic interface and
                 specific module procedure have the same name.

              o  Correctly diagnose error when procedure passed as
                 argument where interface calls for numeric.

              o  Diagnose prefetch arguments which are not variables
                 or array element references or structure component
                 references.

              o  Diagnose missing INTENT on PURE subroutine arguments
                 which are not procedures nor pointers.

              o  Diagnose mask expressions with incompatible shapes in
                 where constructs and contained where/elsewhere.

              o  Enforce standard's requirement that user-defined
                 operator names must consist of letters only.

              o  Don't give errors for "invalid continuation" in !DEC$
                 IF block that is not to be compiled.

              o  Correct the way that COMPLEX arguments are passed by
                 value, and eliminate internal compiler error for some
                 cases of passing COMPLEX by value. The correct way is
                 to treat a COMPLEX as a pair of REAL arguments.

              o  Do not issue "source line truncated" warnings when F95
                 standards checking is enabled unless /WARN=TRUNCATED_
                 SOURCE is specified.

                      New and Changed Features in Previous Releases 3-27

 






              o  Give proper error, instead of internal compiler error,
                 when a type is incorrectly superseded.

              o  Correct parsing problems in certain cases where dot
                 field separator is used and the name to the left of the
                 dot ends in digits.

              o  Correct problem with INQUIRE(IOLENGTH=FIELD%NAME).

              o  Detect more cases when copy-in/copy-out is not needed.

              o  Do not diagnose fields of private types as being
                 inaccessible within the defining module.

              o  Disallow ALLOW_NULL/REFERENCE attributes for assumed-
                 shape array arguments.

              o  Allow dummy arguments to be used as arguments to
                 inquiry functions in specification expressions without
                 requiring INTENT(IN).

              o  Fix problem with FORALL masks when /INTEGER_SIZE=64.

              o  Diagnose invalid value in bin/hex/octal constant when
                 used as operand to unary operator.

              o  Accept $ as the end of the range in IMPLICIT.

              o  Allow a run-time format to be a character array
                 element.

              o  Add EV68 as an option to /ARCH and /OPT=TUNE=.

              o  Correct problem where %LOC(funcname) inside the named
                 function sometimes returns the address of the function
                 rather than its result variable.

              o  Diagnose ambiguous generic if optional and non-optional
                 specifications match.

              o  Eliminate internal compiler error for untyped implied-
                 DO-in-DATA variable with IMPLICIT NONE.

              o  Correct problem with PACK when the MASK is .FALSE. or
                 is an expression whose value is not known at compile-
                 time.

              o  Diagnose attempt to assign to a field of an undeclared
                 derived type variable when there exists a function of
                 that name elsewhere in the compilation.

        3-28 New and Changed Features in Previous Releases

 






              o  Allow "self-referential" inquiry intrinsics in
                 specification expressions.

              o  Add support for KISHFTC.

              o  For typeless PARAMETER constant used in contexts where
                 a particular type is assumed, make sure that type is
                 used.

              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  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  Eliminate internal compile error if /DEFINE with no
                 list is seen.

              o  Allow CHARACTER*(n) %FILL without ::.

              o  Generate better debug information for procedure dummy
                 arguments.

              o  Allow and honor ADDRESS64 on COMMON blocks.

              o  Fix SIZE(A,DIM) where DIM is an optional argument.

              o  Allow MAX and MIN to have omitted, optional arguments.

              o  Prevent omitted, optional CHARACTER argument from being
                 passed anyway.

              o  Improve compile-time performance for USE inside of
                 INTERFACE.

              o  Make older !DEC$ ALIAS work in INTERFACE blocks.

              o  Fix IARGCOUNT when in a routine with no arguments.

              o  Don't give error for dummy argument used in specifica-
                 tion expression whose implicit datatype is confirmed by
                 a later type declaration.

              o  Correct debug information for CHARACTER*(*) array dummy
                 arguments.

              o  Improve generated code for ILEN.

                      New and Changed Features in Previous Releases 3-29

 






              o  Treat use of undefined preprocessor symbol in
                 expression as zero.

              o  Put out appropriate debug symbol table information for
                 all ENTRY points.

              o  Eliminate spurious syntax error for particular use of
                 period field separator in expression.

              o  Fix problem with WHERE in FORALL where WHERE mask
                 contains a reference to an elemental function.

              o  Objects of derived type whose type contains initializa-
                 tions are no longer implicitly SAVEd, as required by
                 the Fortran 95 standard. If such objects are local to a
                 procedure, the initialization is repeated on each entry
                 to the procedure. See Section 3.6.1.1 for more details.

              o  Correct handling of reference to SELECTED_REAL_KIND
                 with an omitted, OPTIONAL argument passed to it.

              o  Allow dot field separator in DATA implied DO expres-
                 sion.

              o  Eliminate spurious error involving generic with
                 procedure argument where that procedure has a pointer
                 argument.

              o  Eliminate internal compiler error for module import of
                 EQUIVALENCEd COMMON.

              o  Eliminate internal compiler error for reference to
                 contained pure function in specification expression of
                 another contained function.

              o  Eliminate spurious unused warning when only reference
                 is as an argument to a statement function.

              o  Diagnose as an extension the use of a BOZ constant
                 outside of DATA initialization.

              o  Correctly process ONLY: (with no list).

              o  Do not give warning for declaration of non-COMMON
                 variable in BLOCK DATA if that variable is used in
                 a DATA implied-DO.

              o  Correct parsing error for use of dot separator in
                 ALLOCATE.

        3-30 New and Changed Features in Previous Releases

 






              o  Eliminate internal compiler error for a particularly
                 complex and deeply nested structure reference in an IF.

              o  Don't give error for passing section of an assumed size
                 array to a deferred shape array.

              o  Improve compilation speed for certain large DATA
                 statements.

              o  Eliminate internal compiler error for a certain
                 complicated FORALL.

              o  Correct problem with PUBLIC/PRIVATE attributes of a
                 COMMON block in a MODULE.

              o  Allow (A .EQ. .NOT. B) (an extension).

              o  Correct problem with some COMPLEX*32 initialization
                 expressions.

              o  Eliminate spurious unused variable diagnostic for
                 variable used in pointer assignment.

              o  Correct problem where asking for standards checking
                 disabled /define (-D)

              o  The use of an INTENT(OUT) argument with LOC is
                 now considered a "definition" for the purpose of
                 uninitialized variable checking. Also, the use of
                 LOC(ARRAY(N)) is now considered a "use" of ARRAY for
                 unused variable checking.

              o  Eliminate internal compiler error for structure with
                 %FILL component in module procedure.

              o  When standards checking is requested, do not give a
                 warning for fixed-form source line exactly 72 columns
                 long.

              o  Eliminate internal compiler error for assignment
                 statement with variable whose name starts with an
                 underscore. (Such names are not allowed, but a
                 reasonable error should have been given.)

              o  Correct the problem where if a program unit contains
                 two internal subroutines which both use host-
                 association to access the same variable, the second
                 one gets an inappropriate error.

                      New and Changed Features in Previous Releases 3-31

 






              o  Eliminate internal compiler error for declaration of
                 a derived type array with an initializer that is an
                 implied-DO array constructor.

              o  Eliminate inappropriate error message for initializa-
                 tion expression of an implied-DO array constructor of
                 length zero.

              o  When standards checking is enabled, give one warning,
                 not three, for a !DEC$ ATTRIBUTES directive.

              o  Generate correct code for certain cases involving
                 overloading of the .AND. and .OR. operators.

              o  Allow Variable Format Expression in a character literal
                 when the I/O list has a subscripted array element.

              o  Eliminate compiler abort with incorrect program that
                 names the enclosing program unit in an ONLY clause.

              o  Allow the extension syntax '101'B for a binary literal.

              o  Fix problem where $INTEGER directive was not being
                 properly handled.

              o  Add support for KIND= keyword in MINLOC/MAXLOC

              o  Add suppprt for KIND= keyword in various string
                 intrinsics.

              o  Prevent compiler abort for incorrect attempt to pass
                 unsupported datatypes by value.

              o  Properly report invalid declaration EXTERNAL,INTEGER
                 and recover so that remainder of program is properly
                 parsed.

              o  Give standards warning for non-standard placement of
                 NAMELIST.

              o  Eliminate internal compiler error for particular
                 type of concatenation of substrings when Fortran 95
                 standards checking is requested.

              o  When converting a negative REAL value to COMPLEX, use
                 +0.0 as the imaginary part rather than -0.0.

              o  Allow PARAMETER constant in ALIGN= specification of
                 !DEC$ PSECT.

        3-32 New and Changed Features in Previous Releases

 






              o  Don't give shape mismatch for correct-shape RESHAPE in
                 initialization expression.

              o  Don't give inappropriate alignment warnings for certain
                 convoluted EQUIVALENCE/ COMMON combinations.

              o  Eliminate internal compiler error for initialization
                 expression which contains a constant expression in a
                 structure constructor.

              o  Allow EXTERNAL :: FOO

              o  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

              o  Correctly diagnose use of same name for COMMON and
                 BLOCK DATA.

              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.

                      New and Changed Features in Previous Releases 3-33

 






              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.

        3.6.2 Changes specific to Compaq Fortran 77

        3.6.2.1 /FAST now implies /ARCH=HOST/TUNE=HOST

              The Fortran 77 compiler now implements the feature,
              previously introduced in the Fortran 95 compiler in V7.3,
              where specifying /FAST implies /ARCH=HOST/TUNE=HOST. For
              more information on the implications of this change, see
              Section 3.7.1.1 and Section 3.7.2.3.

        3.6.2.2 Additional changes and corrected problems in V7.4

              o  Allow DFOR$PREFETCHxxx for COMPLEX data types S and F.

              o  Fix access to COMMON variables when /ASSUME=DUMMY_
                 ALIASED.

              o  Use of the DICTIONARY statement no longer results in an
                 inappropriate "Attribute not found" error message.

        3.7 New and Changed Features in V7.3

              This section provides highlights of new and changed
              features and problems corrected in Compaq Fortran V7.3

        3.7.1 Changes common to both Compaq Fortran and Compaq Fortran
              77





        3-34 New and Changed Features in Previous Releases

 






        3.7.1.1 New EV67 keyword for /ARCHITECTURE and /OPTIMIZE=TUNE=

              The EV67 keyword has been added to the list of pro-
              cessor types specifiable with the /ARCHITECTURE and
              /OPTIMIZE=TUNE= qualifiers. Specifying /ARCHITECTURE=EV67
              allows the compiler to generate instructions which are
              supported by the EV67 revision of the Alpha 21264 proces-
              sor architecture, including the CIX count instructions.
              If programs compiled with /ARCHITECTURE=EV67 are run on
              systems with earlier revisions of Alpha processors, the
              program may run slowly due to software emulation.

              Specifying /OPTIMIZE=TUNE=EV67 directs the compiler to
              choose optimizations which are best for EV67 processors.
              These optimizations may not be optimal for earlier
              revisions of the Alpha architecture.

              The default for both /ARCHITECTURE and /OPTIMIZE=TUNE is
              GENERIC, which assumes any Alpha architecture revision.
              However, if using the Fortan 95 (and Fortran 77 as of
              V7.3 ECO 01) compiler and /FAST is specified, the default
              changes to HOST, making the architecture revision selected
              the same as the compiling host system. This should be
              taken into account when distributing applications to run
              on other Alpha systems. The following changes are common
              to both Compaq Fortran and Compaq Fortran 77.

        3.7.2 Changes specific to Compaq Fortran

        3.7.2.1 New COMPLEX*32 datatype

              The compiler now supports the COMPLEX*32 (COMPLEX(KIND=16))
              datatype. This is a COMPLEX datatype whose real and
              imaginary parts are of type REAL*16 (IEEE X_float).
              All operations valid on COMPLEX datatypes are valid for
              COMPLEX*32, and the set of intrinsic functions has been
              expanded to support the type. See HELP FORTRAN Intrinsics
              for more details.
              Note that the OpenVMS debugger does not currently support
              this datatype - you will not be able to EXAMINE or DEPOSIT
              variables of this type. Support for COMPLEX*32 will be
              added in a future release of OpenVMS.



                      New and Changed Features in Previous Releases 3-35

 






              The Fortran and Mathematics run-time libraries have been
              enhanced to support COMPLEX*32. This means that if your
              application uses this type, it must be linked and run on a
              system which has the corresponding FORRTL kit installed.

        3.7.2.2 New /ALIGN=[NO]SEQUENCE qualifier

              In previous versions of Compaq Fortran, derived types
              with the SEQUENCE attribute were always close-packed,
              with no alignment padding inserted, even if fields were
              unaligned. This is still the default behavior. However, a
              new [NO]SEQUENCE keyword has been added to the /ALIGN
              qualifier. If /ALIGN=SEQUENCE is specified, SEQUENCE
              types participate in alignment padding according to the
              currently in effect alignment rules.

              The default is NOSEQUENCE, but if /FAST is specified, the
              default changes to /ALIGN=SEQUENCE. /ALIGN by itself or
              /ALIGN=ALL also enables /ALIGN=SEQUENCE.

        3.7.2.3 Changes to /FAST qualifier

              The /FAST qualifier is a quick way of selecting a number
              of other command-line options which usually improve run-
              time performance. In V7.3, /FAST additionally implies
              /ARCHITECTURE=HOST/OPTIMIZE=TUNE=HOST/ALIGN=SEQUENCE. The
              complete list of altered defaults specified by /FAST are:

              /ALIGN=(COMMONS=NATURAL,RECORDS=NATURAL,SEQUENCE)
              /ARCHITECTURE=HOST
              /ASSUME=NOACCURACY_SENSITIVE
              /MATH_LIBRARY=FAST
              /OPTIMIZE=TUNE=HOST

              You may specifiy individual qualifiers on the command line
              to override the /FAST defaults.

              It is important to note that the changed default of
              /ARCHITECTURE=HOST may make programs run slowly on systems
              with Alpha processors which implement earlier revisions of
              the Alpha architecture than the host.




        3-36 New and Changed Features in Previous Releases

 






        3.7.2.4 Additional changes and corrected problems in V7.3

              o  Eliminate internal compiler error for case involving
                 EQUIVALENCEd POINTER variables not in COMMON.

              o  Fix problem which could cause incorrect code to be
                 generated for certain uses of PACK, RESHAPE and UNPACK,
                 primarily with CHARACTER arguments.

              o  Speed up compilation of initialized nested structures.

              o  Fix problem with incorrect code generated for use of
                 nested SPREAD intrinsic.

              o  Correct problem where DO loop with loop ending value
                 of the largest integer value would instead create an
                 infinite loop.

              o  Eliminate internal compiler errors for use of defined
                 assignment in FORALL.

              o  Speed up compilation where very large MODULEs are
                 repeatedly used. Further work in this area remains.

              o  Correct problem with PACK intrinsic where array is
                 array of structures with an array field with constant
                 subscript/substring values.

              o  Improve generated code for SPREAD intrinsic.

              o  Improve generated code for array reductions.

              o  Improve generated code for UBOUND, LBOUND, SELECTED_
                 INT_KIND, SELECTED_REAL_KIND when the argument(s) are
                 constants.

              o  Improve generated code for SIZEOF when bounds are
                 constants.

              o  When generating temporary copies of arrays, don't
                 allocate them in 64-bit space unless we know that
                 64-bit addresses are acceptable.

              o  Eliminate internal compiler error for certain cases of
                 integer (not F90) POINTER as a module variable.

              o  Reduce severity of "variable has not been used"
                 diagnostic to "informational".

              o  Improve generated code for MINVAL/MAXVAL.

                      New and Changed Features in Previous Releases 3-37

 






              o  Improve generated code for SIZE(A(:)).

              o  Improve generated code for SIZE with array argument
                 that has vector subscripts.

              o  Add new INT_PTR_KIND() intrinsic which returns the
                 kind of an integer pointer (either 4 or 8).

              o  Eliminate internal compiler error for use of allocat-
                 able array reference in a variable format expression.

              o  Improve generated code for ILEN.

              o  An end-of-file condition on READ no longer triggers an
                 ERR= branch - this is to conform with clearer wording
                 in the recent standard. If an EOF condition occurs and
                 there is no END= or IOSTAT=, an error is signalled.

              o  Add a NUL to the end of non-C character literals. This
                 will not be reflected in the "length" of the constant.
                 This matches the Compaq Fortran 77 behavior, which was
                 undocumented.

              o  %VAL/%REF now overrides any mechanism specified in an
                 explicit interface.

              o  Generate much better code for certain array construc-
                 tors (such as (/0,I=1,500000/)) and allow lowerbound,
                 upperbound and stride to have different KINDs.

              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  Improve debug support of deferred-shape arrays of
                 derived types.

              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  Missing !DEC$ ENDIF no longer causes compiler abort.

              o  Correct rules for when SAVE in a PURE procedure is
                 allowed or not.

        3-38 New and Changed Features in Previous Releases

 






              o  Correct parse of assignment to field of RECORD whose
                 name begins with TYPE.

              o  Eliminate E-level error when a BLOCK DATA subprogram
                 name is the same as that of a COMMON block. A future
                 revision will cause an appropriate diagnostic to
                 appear.

              o  Issue clearer error message when a module name is
                 repeated in a USE statement.

              o  Eliminate problem where UBOUND gave wrong value in
                 certain cases.

              o  Allow substrings in left hand side of FORALL.

              o  Give proper error when a PARAMETER constant is CALLed.

              o  Give proper error when a variable is CALLed.

              o  In assignment statements, make sure that real constants
                 are evaluated using the precision appropriate for their
                 syntax (single/double/quad).

              o  Allow module ALLOCATABLE variables to be DLLIMPORTed.

              o  If -warn declarations is specified, do not issue
                 diagnostic for use of IMPLICIT NONE.

              o  Eliminate internal compiler error for EOSHIFT with
                 constant array argument.

              o  Eliminate internal compiler error for program fragment
                 that is "ifdef-ed out".

              o  Eliminate internal compiler error for DLLEXPORT of
                 ALLOCATABLE array.

              o  Report error for kind mismatch where an ac-value in an
                 array constructor is an expression of a different kind
                 than the other literal ac-values.

              o  Report error for assumed-size array passed as actual to
                 deferred-shape array.

              o  Eliminate compiletime error for use of AIMAG in
                 initialization expression when /real_size=128 is
                 specified.

              o  Eliminate internal compiler error for format in a PRINT
                 statement being an expression with concatenation.

                      New and Changed Features in Previous Releases 3-39

 






              o  DFOR$PREFETCH, DFOR$PREFETCH_MODIFY, DFOR$PREFETCH_
                 EVICT_NEXT intrinsics now supported for Alpha
                 processors.

              o  Generate correct values for a PARAMETER array whose
                 element values are computed in an implied DO loop
                 involving indexing into another PARAMETER array.

              o  Correct bad parse of .NE. as record field name.

              o  Allow a dummy argument that has an INTENT attribute
                 specified to be specified in a NAMELIST list.

              o  Give standards warning for kind mismatch between source
                 and pad arguments in RESHAPE.

              o  Long source lines are now correctly compiled when
                 standards checking is requested (warning is still
                 given.)

              o  Correct problem with incorrect error given for a
                 particular complex module renaming case.

              o  Allow as an extension (as does Compaq Fortran 77) a
                 LOGICAL argument to an intrinsic which expects INTEGER.

              o  Correctly parse format which contains ">" characters
                 and a variable format expression.

              o  Eliminate access violation on some platforms for
                 ALLOCATE of pointer in derived type.

              o  Correct problem where compiler could omit putting out
                 declaration for a routine symbol.

              o  Handle non-present, optional dummy arguments as third
                 argument to INDEX, SPAN and VERIFY.

              o  Generate correct code when passing character array
                 slices as arguments.

              o  Fix case of contiguous array slice as first argument to
                 TRANSFER.

              o  Fix INQUIRE by IOLIST of ALLOCATABLE arrays

              o  Correct problem involving pointer assignment with
                 sections of a derived type.

              o  Allocate all PARAMETER constants in a read-only PSECT.

        3-40 New and Changed Features in Previous Releases

 






              o  Ensure that locally-allocated derived-type arrays are
                 naturally aligned.

              o  Do COMMON/global-name conflict checking with /SEPARATE.

              o  With /ANALYSIS_DATA, give SCA the correct descriptor
                 datatype for D_float and IEEE_float.

              o  Generate correct code for pointer assignment of an
                 array generated from a section of a derived type.

              o  Eliminate internal compiler error in certain cases
                 with dummy argument that has OPTIONAL and INTENT(OUT)
                 attributes.

              o  Flag square-bracket array constructor syntax as an
                 extension.

              o  Eliminate internal compiler error for certain uses of
                 TRANSFER.

              o  Properly detect ambiguous generic reference when all
                 distinguishing arguments are OPTIONAL.

              o  Eliminate internal compiler error for a case involving
                 a PRIVATE POINTER in a module.

              o  "Directive not supported on this platform" diagnostic
                 is now informational, not warning

              o  Allow array sections in DATA statement variable list

              o  Eliminate GEM assertion for certain program compiled
                 /DEBUG/OPTIMIZE

              o  Correct problem with I/O of a slice of an assumed-size
                 array.

              o  In listing summary, list zero-length COMMON PSECTs.

              o  Eliminate spurious warning when passing a POINTER
                 or assumed-shape array in COMMON to a routine with
                 a compatible dummy argument declaration.

              o  Fix internal compiler error involving array-valued
                 functions with entry points.

              o  Generate correct code for unusual (and non-standard)
                 dummy aliasing case involving an EQUIVALENCEd variable
                 passed as an argument.

                      New and Changed Features in Previous Releases 3-41

 






              o  Fix problem with incorrect code for a call to ALLOCATE
                 or DEALLOCATE where STAT= is specified using an array
                 element.

              o  Fix internal compiler error for certain programs which
                 CALL a function.

              o  Correct compiler abort for module procedure with ENTRY.

              o  Allow full set of F95-permitted intrinsic functions in
                 specification expressions.

              o  Correct compiler abort with invalid VFE in FORMAT.

              o  Correct problem with accessibility of MODULE symbols
                 when two modules define the symbol but one has marked
                 it PRIVATE.

              o  Correct problem with missing and duplicate alignment
                 warnings.

              o  Allow repeated NULL() in DATA initialization when
                 variables have different types.

              o  Correct spurious "shapes do not conform" error.

              o  Correct compiler abort for invalid program using wrong
                 component in ASSOCIATED.

              o  When /names=as_is specified, don't make IMPLICIT case-
                 sensitive.

              o  Give standards warning for Q exponent letter in
                 floating literals.

              o  Generate correct code for generic which replaces MIN or
                 MAX.

              o  Give more reasonable error message when variable used
                 as control construct name.

              o  Eliminate spurious message for vector-valued subscript
                 in defined assignment.

              o  Give error if INTENT not properly specified for defined
                 assignment.

              o  Correct internal compiler error for overloaded MAX.

              o  Eliminate spurious warning for FORALL.

        3-42 New and Changed Features in Previous Releases

 






              o  Give warning when INTENT(IN) argument modified in PURE
                 FUNCTION.

              o  Eliminate spurious error for valid DATA with array
                 subscript.

              o  Allow ORDER in RESHAPE to be non-constant.

              o  Fix compiler abort with RESHAPE.

              o  Don't give unused warning for TARGET argument used in
                 pointer assignment.

              o  Properly distinguish STRUCTUREs with the same name in
                 different CONTAINed routines.

              o  Allow NULL() to initialize a pointer to derived type.

              o  Don't give unused warning for array constructor
                 implied- DO variable.

              o  Allow INTRINSIC :: name (new in F95)

              o  Eliminate spurious standards warning for certain
                 obscure uses of UNPACK.

              o  Eliminate compiler abort when transformational
                 intrinsic used (illegally) in statement function.

              o  Raise limit of number of items in a FORMAT from 200 to
                 2048.

              o  Disallow invalid INTENT keywords

              o  Allow CALL of a typed identifier (DIGITAL Fortran 77
                 extension)

              o  Correct problem where USE-associated identifiers aren't
                 seen in certain cases involving renaming.

              o  Correctly evaluate CEIL intrinsic when used in a
                 specification expression.

              o  Allow SIZE intrinsic to be overloaded.

              o  Don't issue spurious "function value has not been
                 defined" warning for case involving ENTRY and RESULT.

              o  Fix internal compiler error involving defined
                 assignment.

                      New and Changed Features in Previous Releases 3-43

 






              o  Fix problem with incorrect CHARACTER initialization
                 values and CHAR function.

              o  Disallow array constructor being used to initialize a
                 scalar.

              o  Allow ALLOCATE/DEALLOCATE of argument to PURE
                 SUBROUTINE.

              o  Fix problem for certain uses of period separators for
                 derived type fields.

              o  Eliminate spurious syntax error for use-associated
                 variable in NAMELIST.

              o  Eliminate spurious syntax error for certain uses of
                 variable format expression in FMT=.

              o  Allow as an extension the use of a name previously seen
                 in a CALL statement as an actual argument without an
                 EXTERNAL statement or explicit interface.

              o  Eliminate spurious overflow message for MS-style base-2
                 constant.

              o  Correct problem with generic routine matching.

              o  Correct internal compiler error when function return
                 value used in statement function expression.

              o  Fix problem with wrong generated code if an OPTIONAL
                 and omitted descriptor-based dummy argument is passed
                 as an actual argument to a routine which declares that
                 argument as OPTIONAL.

              o  Fix problem where ASSOCIATED did not always return
                 the correct result for a pointer component that was
                 transferred via pointer assignment.

              o  Enable display of array bounds larger than 32 bits in
                 listing summary.

              o  Fix internal compiler error for certain uses of defined
                 assignment where multiple defined operators appeared in
                 the right-hand side of the assignment.

              o  Don't put initialized descriptors in the $BSS$ PSECT,
                 as this prevents demand-zero compression and can lead
                 to much larger executable files.

        3-44 New and Changed Features in Previous Releases

 






              o  Make the default for BLANK= in OPEN match the
                 documentation when the /NOF77 switch is specified,
                 which is to default to BLANK='ZERO'. Previously,
                 BLANK='NULL' was used regardless.

              o  Allow array constructors to have scalar CHARACTER
                 source elements of varying size.

              o  Correct problem where a call to a routine with the C
                 and VARYING attributes generates incorrect code.

              o  Fix internal compiler error for statement function
                 which uses the function return variable of the host
                 function.

              o  Fix internal compiler error for incorrect program which
                 uses an component of a derived type variable in an
                 automatic array bounds expression, the derived type is
                 undefined and IMPLICIT NONE is used.

              o  Fix internal compiler error when RESULT variable has
                 same name as a previously seen FUNCTION.

              o  Fix problem with PUBLIC/PRIVATE attributes in a
                 particular complicated module usage.

              o  Eliminate spurious error message for valid generic
                 procedure reference.

              o  Fix problem with DATA initialization of zero-origin
                 arrays.

              o  Don't give "unused" warning for EQUIVALENCEd variable.

              o  Properly treat INT(n,KIND=) in an array constructor.

              o  Don't disable type checking for %LOC.

              o  Properly parse generic INTERFACE whose name begins with
                 TO.

              o  When /ALIGN=COMMONS=NATURAL is used, make sure that
                 POINTER objects in COMMON are aligned on quadword
                 boundaries.

              o  Correctly parse program with IF construct whose name
                 begins with IF.

                      New and Changed Features in Previous Releases 3-45

 






              o  If an attempt is made to DEALLOCATE an item which is
                 not DEALLOCATEable, such as an array slice, a run-
                 time error is now given. Previously, the results were
                 unpredictable.

        3.7.3 Changes specific to Compaq Fortran 77


              o  Avoid ACCVIO when RECORD statement conflicts with
                 previous use of name.

              o  Fix assertion when dummy arg name is the SAME as a
                 SUBROUTINE/FUNCTION/ENTRY name already seen.

        3.8 New and Changed Features in V7.2

        This section provides highlights of new and changed features and
        problems corrected in Compaq Fortran Version 7.2.

        3.8.1 Changes common to both Compaq Fortran and Compaq Fortran
              77

              The following changes are common to both Compaq Fortran
              and Compaq Fortran 77.

        3.8.1.1 FORTRAN command invokes Fortran 95 compiler

              With this release of Compaq Fortran, the FORTRAN verb
              invokes the Fortran 90/95 compiler by default. The Fortran
              77 compiler is invoked using FORTRAN/OLD_F77. The F90
              command continues to invoke the Fortran 95 (formerly
              Fortran 90) compiler.
              No further development or enhancement will be done to the
              Fortran 77 compiler, although maintenance will continue
              for some time. Compaq recommends use of the Fortran
              95 compiler for current development work - it accepts
              standard Fortran 77 (and Fortran IV/66) programs as
              well as nearly all DIGITAL Fortran 77 extensions. The
              significant DIGITAL Fortran 77 features not currently
              supported by Compaq Fortran include:

              o  DICTIONARY statement.

              o  Double-quote syntax for octal constants, eg, "7723.

        3-46 New and Changed Features in Previous Releases

 






              o  The /ASSUME=BACKSLASH, /CROSS_REFERENCE, /SHOW=DICTIONARY,
                 /STANDARD=(MIA,SYNTAX,SEMANTIC,SOURCE_FORM) qualifiers
                 or keyword values.

              o  Support of Language Sensitive Editor placeholders in
                 source.

              There are other minor language interpretation differences
              - please see the Compatibility appendix of the HP Fortran
              for OpenVMS User Manual for more details.

              System managers and/or individual users may choose to
              override the default selection of compiler. Two command
              definition files have been provided:

              o  SYS$LIBRARY:FORT$FORTRAN-F95.CLD - FORTRAN (and F90)
                 invokes Fortran 95, FORTRAN/OLD_F77 invokes Fortran 77.

              o  SYS$LIBRARY:FORT$FORTRAN-F77.CLD - FORTRAN invokes
                 Fortran 77, F90 invokes Fortran 95.

        Individual users may change the default by using SET COMMAND to
        establish the desired command set. For example:

              $ SET COMMAND SYS$LIBRARY:FORT$FORTRAN-F77

              This will change the command defaults for the current
              process. Note that spawned processes will not inherit
              command definition changes made in this fashion.

              System managers may change the system-wide default as
              follows:

              $ SET COMMAND /TABLES=SYS$LIBRARY:DCLTABLES -
                /OUTPUT=SYS$COMMON:[SYSLIB]DCLTABLES -
                SYS$LIBRARY:FORT$FORTRAN-F77
              $ INSTALL REPLACE SYS$LIBRARY:DCLTABLES

        The INSTALL command must be repeated on all Alpha nodes of a
        VMScluster. Users must log in again to see the new definitions,
        or do a:

              $ SET COMMAND /TABLES=SYS$LIBRARY:DCLTABLES

              If you have problems compiling your Fortran 77 code with
              the Fortran 90/95 compiler, please let us know by sending
              a summary (and small code example) to fortran@compaq.com.

                      New and Changed Features in Previous Releases 3-47

 






        3.8.2 Changes specific to Compaq Fortran


        3.8.2.1 Support of data in 64-bit address space

              Compaq Fortran version V7.2 adds support for data in
              64-bit address space. The default is that all data is
              allocated in 32-bit address space ("P0" or "P1") unless
              explicitly requested otherwise by means of the new
              ADDRESS64 attribute.
              The ADDRESS64 attribute is specified on a !DEC$ ATTRIBUTES
              directive (see the HP Fortran for OpenVMS Language
              Reference Manual) and specifies that the associated
              object resides in 64-bit space. The ADDRESS64 attribute
              may be applied to the following items and has the effect
              described:

              o  Local variable with ALLOCATABLE or POINTER attribute -
                 Memory obtained for the variable using ALLOCATE is in
                 64-bit space.

              o  Local variable without ALLOCATABLE or POINTER attribute
                 - Variable is statically allocated in 64-bit space.
                 This feature is available on OpenVMS Alpha V7.2 or
                 later, and linking requires use of LINKER64 as supplied
                 with the ADX072 Debugger kit. The variable may not be
                 DATA initialized nor may it be named in an AUTOMATIC
                 statement.

              o  COMMON block - COMMON block is statically allocated in
                 64-bit space. This feature is available on OpenVMS
                 Alpha V7.2 or later, and linking requires use of
                 LINKER64 as supplied with the ADX072 Debugger kit.
                 DATA initialization is not permitted. Note also that
                 a shareable image containing a 64-bit COMMON cannot
                 be INSTALLed using the /SHARE qualifier, due to a
                 restriction in OpenVMS 7.2. This may be relaxed in
                 a future version of OpenVMS.

              o  Dummy argument in procedure or INTERFACE block -
                 Specifies that the associated actual argument has the
                 ADDRESS64 attribute. Both actual and dummy arguments
                 must have ADDRESS64 or neither may. In a future
                 release, this restriction may be relaxed.

        3-48 New and Changed Features in Previous Releases

 






              o  Derived type containing a POINTER component - Not yet
                 implemented.

              Examples:

              ! Declare a local variable which is allocated in
              ! 64-bit space
              !
              REAL BIG_ARRAY (1000000)
              !DEC$ ATTRIBUTES ADDRESS64 :: BIG_ARRAY

              ! Declare an ALLOCATABLE array which is to be
              ! allocated in 64-bit space
              !
              REAL, ALLOCATABLE :: BIG_ARRAY (:)
              !DEC$ ATTRIBUTES ADDRESS64 :: BIG_ARRAY
              ...
              ALLOCATE (BIG_ARRAY(1000000)


              ! Declare an external routine which accepts 64-bit
              ! arguments
              !
              INTERFACE
              SUBROUTINE TAKES_BIG_ARRAY (BIG_ARRAY)
              REAL BIG_ARRAY (*)
              !DEC$ ATTRIBUTES ADDRESS64 :: BIG_ARRAY
              END SUBROUTINE
              END INTERFACE

        3.8.2.2 Support for DIGITAL Source Code Analyzer

        Compaq Fortran version 7.2 now supports the /ANALYSIS_DATA
        qualifier, which specifies that the compiler output information
        for use by the optional DIGITAL Source Code Analyzer product,
        part of the DECset package. The /DESIGN qualifier, which adds
        design information from structured comments, is not supported.
              The following limitations of the current implementation
              are known:

              o  Information about actual arguments in routine calls
                 is not provided, therefore CHECK CALLS won't verify
                 argument lists. Information about Formal (dummy)
                 arguments is provided.

                      New and Changed Features in Previous Releases 3-49

 






              o  The "machine datatype" associated with type decla-
                 rations reflects the default of /FLOAT=G_FLOAT. This
                 should have little or no effect on actual use.

              o  STRUCTURE and derived type declarations do not
                 have a lexical scope, and thus you can't ask what
                 STRUCTURE/type declaration "contains" a given field
                 declaration.

              o  The information generated by certain Fortran 90/95
                 constructs has not been extensively tested.

        We expect to correct these problems in a future update.

              If you notice incorrect or unexpected Analysis Data
              results, please report the problem to Compaq and include
              the smallest possible source which reproduces the
              problem.

        3.8.2.3 Additional changes and corrections

              The following changes are new in V7.2

              o  The compiler and run-time library now support all
                 Fortran 95 language features.

              o  Detection of uninitialized variables is done even if
                 /NOOPTIMIZE is specified.

              o  The ASM intrinsic is now supported to enable assembly
                 language code to be embedded in Fortran source. See
                 HELP F90 Intrinsic_Procedures ASM for more details.

              o  Support ISHC for INTEGER*8.

              o  Correct problem with overlapping CHARACTER assignment
                 in FORALL.

              o  Correct debug information for CHARACTER POINTERs.

              o  Correct problems with ISHFTC which can cause alignment
                 errors.

              o  Correct problem with FORALL and WHERE with non-default
                 integer size

              o  The compiler now accepts a new DEFAULT keyword on the
                 !DEC$ ATTRIBUTES directive. This tells the compiler
                 to ignore any compiler switches that change external
                 routine or COMMON block naming or argument passing

        3-50 New and Changed Features in Previous Releases

 






                 conventions, and uses just the other attributes
                 specified (if any). The switches which this affects
                 are /NAMES and /ASSUME=UNDERSCORE.

              o  The /NOF77 switch now establishes OPEN defaults of
                 STATUS='NEW' and BLANK='ZERO'.

              o  Correct a problem where calling an ELEMENTAL routine
                 with a pointer array may give incorrect results.

              o  Fix transfer intrinsic where the MOLD is a character
                 substring with non-zero base, e.g., TRANSFER(X,
                 CH(I1:I2))

              o  Fix problem where CSHIFT of an array of derived type
                 generated bad code.

              o  Correct problem with pointer assignment when the right-
                 hand-side is an array of derived types.

              o  Correct problem involving RANDOM_NUMBER of a VAX D_
                 float array.

              o  Correct problems involving function return value whose
                 size depends on properties of input arguments.

              o  Fix problem that caused internal compiler error with
                 RESHAPE.

              o  Fix problem where IBCLR of mixed-kind arguments got
                 wrong answer.

              o  Correct a problem with PACK when the first argument is
                 a two-dimensional slice of a three-dimensional array.

              o  Correct problem with ADJUSTL, ADJUSTR and COTAN with
                 array element arguments.

              o  Correct compiler abort with ASSOCIATED (X,(Y))

              o  Don't give standards warning for ELEMENTAL PURE.

              o  Consider FORALL index variables "used" for /warn=unused
                 purposes.

              o  Disallow leading underscore in identifiers, as
                 documented.

              o  Correct problem with implied DO loop in non-INTEGER
                 array constructors in initialization expressions.

                      New and Changed Features in Previous Releases 3-51

 






              o  Allow expression involving array constructors in an
                 initialization expression.

              o  %LOC is treated the same as LOC for type checking
                 purposes.

              o  Correct problem involving generic routine resolution.

              o  SEQUENCE now byte-packs fields, as the documentation
                 says.

              o  Correct compiler abort with RESHAPE in initialization
                 expression.

              o  Correct compiler abort for case with defined operators.

              o  Correct compiler abort for syntax error X(;,:)

              o  Give appropriate error if DO loop variable is too small
                 for range.

              o  Correct compiler abort for LEN_TRIM(array) in
                 initialization expression.

              o  Correct compiler abort for SIZE(non-array).

              o  Correct problems with ISHFT(array) in initialization
                 expression.

              o  Allow SHAPE in initialization expression.

              o  Don't give standards warning for use of INDEX in
                 initialization expression.

              o  Consider statement function dummy argument "used" for
                 /warn=unused.

              o  Correct compiler abort for invalid syntax in a Variable
                 Format Expression

              o  Fix internal compiler error for certain uses of LL*
                 intrinsics.

              o  Prevent internal compiler error in certain cases when
                 the size of a return value is based on a call to a pure
                 function with the argument to this function.

              o  Correct problems with nested uses of SPREAD intrinsic.

              o  Make ASSOCIATED return the correct result when the
                 target is an element of a deferred-shape array.

        3-52 New and Changed Features in Previous Releases

 






              o  Correct a problem with a USE..ONLY of some symbols
                 from an EQUIVALENCE group in a module. Previously, the
                 compiler might generate an external reference to the
                 wrong symbol.

              o  Correct a problem with EOSHIFT of a structure array
                 with a multidimensional structure component.

              o  Eliminate the unnecessary use of temporary array copies
                 in many cases.

              o  Add support for specific names IMVBITS, JMVBITS and
                 KMVBITS (already documented).

              o  Correct a problem where calling an ELEMENTAL routine
                 with a pointer array may give incorrect results.

              o  Don't issue spurious UNUSED warning for argument whose
                 interface comes from a MODULE.

              o  Fix internal compiler error for invalid IMPLICIT
                 syntax.

              o  Eliminate inappropriate type mismatch error for certain
                 cases of references to a generic procedure with a
                 procedure argument

              o  Allow use of . field separator in addition to % in
                 ALLOCATE/DEALLOCATE.

              o  Give warning of unused variable in module procedure
                 when appropriate.

              o  Do not allow a non-integer/logical expression in a
                 logical IF.

              o  Fix another case of recognizing a RECORD field that has
                 the same name as a relational operator.

              o  Correct compiler failure for CMPLX(R8,R8) when real_
                 size=64 is in effect

              o  Allow gaps in keyword names in MAX/MIN, for example
                 MAX(A1=x,A4=y)

              o  Correct compiler failure when a COMPLEX array is
                 initialized with a REAL array constructor

              o  Correct compiler failure when the CHAR intrinsic is
                 used in an initialization expression

                      New and Changed Features in Previous Releases 3-53

 






              o  Correct compiler failure ("possible out of order or
                 missing USE") in certain uses of nested MODULEs and
                 ONLY.

              o  Show correct source pointer for syntax error in
                 declaration.

              o  Correct compiler failure with RESHAPE and SHAPE used in
                 an initialization expression.

              o  Eliminate spurious error when a defined operator is
                 used in a specification expression

              o  Correct compiler failure when undefined user-defined
                 operator is seen.

              o  Eliminate spurious error when component of derived type
                 named constant is used in a context where a constant is
                 required.

              o  Correct problem with host association and contained
                 procedure. Correct compiler failure with WHERE when
                 non-default integer_size

              o  is in effect.

              The following changes appeared in V7.1 ECO 2.

              o  The new /ASSUME=[NO]ALTPARAM compile command qualifier
                 selects how the compiler treats the non-standard, non-
                 parenthesized PARAMETER syntax, for example PARAMETER
                 N = 1. If /ASSUME=ALTPARAM is in effect, the alternate
                 PARAMETER syntax is accepted. If /ASSUME=NOALTPARAM
                 is in effect, the alternate PARAMETER syntax is
                 not accepted and such statements will typically be
                 treated as assignment statements. The default is
                 /ASSUME=ALTPARAM.

              o  The new /ASSUME=[NO]MINUS0 compile command qualifier
                 selects how the SIGN intrinsic treats the case of
                 SIGN(X,-0). If /ASSUME=MINUS0 is in effect, the
                 result of SIGN(X,-0) is -X, in accordance with
                 the Fortran 95 standard. If /ASSUME=NOMINUS0 is in
                 effect, the result is X, which is consistent with
                 what Fortran 77 implementations typically produce.
                 The default is /ASSUME=NOMINUS0, which is a change from
                 earlier versions of Compaq Fortran 90. We made this
                 change because many of our customers' applications

        3-54 New and Changed Features in Previous Releases

 






                 were getting unexpected results with the MINUS0
                 semantics. (Note that this setting is applicable only
                 if /FLOAT=IEEE is in effect.)

              o  Using ASSOCIATED with F90 pointer now gives correct
                 answer.

              o  Using vector subscripts in MATMUL now gives correct
                 answer.

              o  Passing %REF argument to a routine with explicit
                 INTERFACE no longer gets an internal error.

              o  CSHIFT of an array pointer contained within a derived
                 type no longer gets an internal error.

              o  Using assignments in a defined generic assignment
                 subroutine when the subroutine is not RECURSIVE now
                 gets an error.

              o  Parameter constant is allowed as argument of a LOC
                 intrinsic.

              o  Using UNION within derived type now gets correct
                 result.

              o  Having EQUIVALENCEd character array elements within a
                 MODULE no longer gets internal error.

              o  Duplicate SAVE statement no longer gets an error.

              o  Parameter constant can be used as case-value in a
                 SELECT CASE statement.

              o  ALIAS attribute can now be specified in a cDEC$
                 ATTRIBUTES directive for an identifier that has not
                 been declared EXTERNAL (EXTERNAL is assumed).

              o  Interface with optional function argument is now
                 resolved properly.

              o  Extra trailing blanks are now allowed and ignored
                 when used in specifier of OPEN statement, e.g.,
                 FORM='formatted '.

              o  INTEGER*2 array now gets correct result when compiled
                 with /INTEGER_SIZE:16.

              o  Fix a bug related to module importing with modules that
                 contain PRIVATE statement.

                      New and Changed Features in Previous Releases 3-55

 






              o  Parameter constant defined in a MODULE is now imported
                 when its use is only in a variable format expression.

              o  Parameter constants are allowed in a structure
                 constructor.

              o  A derived type component having the same name as a
                 common block no longer gets an internal error.

              o  A non-standard warning is issued if the first argument
                 of a GENERIC assignment procedure is not INTENT(OUT) or
                 INTENT(INOUT).

              o  Fix a bug related to module importing with modules that
                 contain a PRIVATE statement.

              o  Using a structure constructor to initialize a multi-
                 dimensional array component of a derived-type no longer
                 causes an internal error.

              o  The /ASSUME=FPCONSTANT option now works correctly for
                 assignment to double complex variables.

              o  Having a D line as the first non-comment line after a
                 conditional $ENDIF directive no longer gets an error.

              o  Using substring of a character array as argument of
                 ICHAR intrinsic no longer gets internal error

              o  Pointer assignment of an array of character substrings
                 (e.g. p=>a(:)(2:4)) now gets correct result

              o  Using array transformation intrinsics such as PACK,
                 SPREAD, and RESHAPE with array of derived-type as
                 argument in a PRINT statement now gets correct results

              o  An incorrect statement: "IF (ABS(I).GT 1) I=0" now gets
                 an error message

              o  An incorrect statement: "CHARACTER(LEN=1), PARAMETER ::
                 CPSCLR = '' ''" now gets an error message

              o  Having a PRIVATE, EQUIVALENCE variable in a module no
                 longer causes compile time segmentation violation

              o  Specifying ONLY on one variable in a COMMON block now
                 only declares the one variable not the entire variables
                 in the COMMON block

        3-56 New and Changed Features in Previous Releases

 






              o  Allow user defined operator to be used as the format
                 character expression in a PRINT or READ statement

              o  Using modules and the AUTOMATIC statement in the same
                 routine no longer gets internal error

              o  Module variables with EXTERN attributes now work
                 properly

              o  Increase an internal limit so that large programs no
                 longer get the "text handle table overflow" message

              o  Flag incorrect usage of an entry dummy argument in
                 an executable statement before its declaration in the
                 entry statement

              o  Disallow optional return dummy argument following other
                 OPTIONAL dummy arguments

              o  An invalid WRITE statement no longer gets an internal
                 error

              o  Allow passing NULL intrinsic function as argument to
                 other routines

              o  Allow AUTOMATIC variables to be used in an EQUIVALENCE
                 statement

              o  Using a structure constructor with scalar value to
                 assign an array element now produces correct result

              o  Using an array constructor with integer value to
                 initialize a real or complex array now produces correct
                 result

              o  Flag common block name and routine name conflict

              o  Fix elemental character function with varying length

              o  CPU_TIME now returns CPU, not elapsed time. (Requires
                 FORRTL V7.1 ECO 1 library or later.)

              o  The debugger no longer reports a DST corruption error
                 for certain separately compiled programs which use a
                 module that defines an allocatable array.

              o  A compile-time evaluation of 0.0**0.0 (when /CHECK=POWER
                 is in effect) now always results in a compile-time
                 error instead of quietly giving zero.

                      New and Changed Features in Previous Releases 3-57

 






              o  DPROD of two REAL(8) arguments no longer results in a
                 compiler bugcheck.

              o  The compiler no longer bugchecks if a user-defined type
                 and a structure have the same name.

              o  Derived type initialization of an array component now
                 works.

              o  The compiler now correctly diagnoses incorrectly
                 spelled OPEN keyword values.

              o  SAVE in main program no longer results in warning.

              o  The compiler no longer bugchecks for syntax of the form
                 "character,allocatable :: c*7(:)".

              o  The compiler no longer incorrectly parses certain
                 expressions involving record fields and binary
                 operators.

              o  %FILL is now allowed as a field name when :: syntax is
                 used in a STRUCTURE field.

              o  NEAREST with arguments of different KINDs no longer
                 results in a standards warning.

              o  All internal compiler limits on the length of a
                 NAMELIST have been removed.

              o  The compiler now allows SIZEOF of a field of an
                 assumed-size record array.

              o  The compiler now correctly parses an array named
                 SELECT.

              o  A standards warning for concatenation of passed-
                 length character arguments is no longer given (was
                 non-standard in F77, but not in F90).

              o  Pointer assignment now works properly when the target
                 is a component of an allocatable array with a lower
                 bound other than 1.

              o  The compiler no longer bugchecks if a Hollerith literal
                 is passed to a CHARACTER(*) argument in the same file.

              o  A labelled DO with optional comma is now properly
                 parsed.

        3-58 New and Changed Features in Previous Releases

 






              o  Derived type members whose name start with "fill" are
                 now properly parsed.

              o  ONLY is no longer ignored for module variables.

              o  In a character literal VFE, variable names may now have
                 underscores.

              o  %ref is no longer ignored when passing a character
                 literal.

              o  RECORDs are now allowed in NAMELIST.

              o  TYPE definition with type name in parentheses now gives
                 standards warning.

              o  Consecutive operators now give standards warning where
                 appropriate.

              o  A CHARACTER, POINTER array whose character length
                 is given as LEN of a passed-length CHARACTER dummy
                 argument is now allowed.

              o  Unintended recursion in INTERFACE assignment is now
                 diagnosed.

              o  An ELEMENTAL function is no longer allowed to have an
                 adjustable length value.

              o  ALLOCATE of a REAL*16 array no longer causes a compiler
                 bugcheck.

              o  Operators such as ==, etc. no longer cause standards
                 warnings.

              o  ASSOCIATED() of a NULLIFIYed pointer now returns
                 .FALSE..

              o  An array argument to a statement function is now
                 properly diagnosed as erroneous.

              o  The ES format edit descriptor is no longer flagged as
                 non-standard.

              o  The compiler no longer bugchecks in certain situations
                 when the SIGN intrinsic is used with a VAX floating
                 array argument.

              o  The compiler now correctly parses programs with an
                 array named TYPE.

                      New and Changed Features in Previous Releases 3-59

 






              o  The compiler now allows an unlimited number of actual
                 and formal routine arguments. Note that the IARGCOUNT
                 intrinsic will return the low 8 bits only of the
                 argument count.

              o  A user-defined operator is now allowed as the format
                 specifier in an I/O statement.

              The following changes were included in V7.1 ECO 1.

              o  Significantly improve compilation speed of sources
                 which contain many USEs of the same module.

              o  Fix SIGN intrinsic to handle -0. (Fortran 95 feature)

              o  Fix LOC intrinsic and %LOC of a derived type field.

              o  Fixed debug information for dynamic character variable
                 (such as character*(i) c).

              o  Add debugging support for integer (Cray) pointers and
                 allocatable arrays.

              o  Fix storing to the return value of a function returning
                 character in a containing internal routine.

              o  Fix Nullification of a character*n pointer argument.

              o  Fix using passed length argument in a containing
                 internal routine.

              o  Fix compiler abort when a source line is longer than
                 1024 characters in freeform source file.

              o  Fix using IOLENGTH in a INQUIRE statement.

              o  Fix FORALL problem of the form "X(X(I)) =."

              o  Fix contained functions returning a implicitly
                 initialized derived-type.

              o  Better diagnostics for invalid programs.

              o  Fix compiler abort when using Nullification of a
                 pointer in a MODULE.

              o  Fix a certain types of USE of a MODULE with rename
                 list.

              o  Fix compiler abort when using do-loop style implicitly
                 initialized derived-types in a MODULE.

        3-60 New and Changed Features in Previous Releases

 






              o  Sign-extending INTEGER*2 parameter constants.

              o  Flag invalid nested internal procedures.

              o  Fix compiler abort of USE of a MODULE with namelist
                 variables in rename list.

              o  Issue a warning message for a intrinsic with wrong
                 argument type and treat it as an external.

              o  Issue a warning message for having a SAVE common block
                 data object.

              o  Fix compiler abort of USE of a MODULE with namelists.

              o  Fix using SIZEOF(common_block_array) in a PARAMETER
                 statement.

              o  Fix using READONLY keyword as first keyword in an OPEN
                 statement.

              o  Allow record name to be the same as a structure name.

              o  Fix parameter character constant with embedded NULL
                 character.

              o  Fix compiler abort when same name used as a structure
                 and derived type.

              o  Allow BLOCKSIZE keyword in an INQUIRE statement.

              o  Allow a record in a SAVE statement.

              o  Allow a module to have the name "procedures".

              o  Do not flag IABS intrinsic function as nonstandard.

              o  Do not flag DOUBLE COMPLEX as nonstandard.

              o  Put out an error message for ptr => pack(...).

              o  Issue an error message for invalid derived type
                 parameter constant.

              o  Fix compiler abort when passing an array constructor as
                 an actual argument.

              o  Fix using derived-type components that are same as
                 intrinsic names.

              o  Fix an incorrect warning about "explicit-shaped array
                 is being passed to a routine that expects a pointer or
                 assumed-shape array".

                      New and Changed Features in Previous Releases 3-61

 






              o  Fix incorrect results when compiled a program with -
                 assume:dummy_aliasing.

              o  Do not flag BOZ constant as nonstandard.

              o  Do not flag Z format as nonstandard.

              o  Put out a standard warning for using character constant
                 in DATA statement.

              o  Fix using TRANSFER in initialization.

              o  Fix a problem with user defined assignment statement.

              o  Issue an error message when passing or receiving an
                 optional argument by value.

              o  Fix an invalid message about return value of a function
                 is not defined when the function returns an initialized
                 derived type.

              o  Fix a compiler abort with "text handle table overflow"
                 message.

              o  Fix a compiler abort using a SAVE statement.

              o  Fix a problem when an existing operator is overloaded.

              o  Fix argument checking of intrinsic subroutines.

              o  Fix generic interface of elemental functions.

              o  Issue an argument mismatch warning message for using
                 an integer with a statement function that takes real
                 argument.

              o  Fix compiler directives processing.

              o  Fix a compiler abort using an invalid PARAMETER array.

              o  Issue an error message for SAVE of an ENTRY result
                 variable.

              o  Fix using UNION within derive type.

              o  Fix a compiler internal error when using C and
                 REFERENCE attributes on a function name.

              o  Fix a compiler internal error when using ASSOCIATED of
                 a function returning a pointer.

              o  Add support for passing complex by value.

        3-62 New and Changed Features in Previous Releases

 






              o  Fix pointer assignment with a character substring.

              o  Allow using ICHAR in an array constructor within the
                 initialization part of an array declaration.

              o  Fix a problem with using UNION declaration within the
                 derived type.

              o  Allow exporting of a module procedure which has a name
                 that is the same as a generic name.

              o  Fix a problem with using user defined assignment
                 operation.

              o  Allow specifying NaNs in the PARAMETER statement.

              o  Allow D source line to continue a non-D source line.

              o  Fix a problem in array initialization processing.

        3.9 New and Changed Features in V7.1

              This section provides highlights of new and changed
              features and problems corrected in Compaq Fortran V7.1.

        3.9.1 Changes common to both Compaq Fortran and Compaq Fortran
              77

              The following changes are common to both Compaq Fortran
              and Compaq Fortran 77.

        3.9.1.1 FORRTL V7.1 or OpenVMS Alpha V7.1 Required

              This version of Compaq Fortran requires installation of
              appropriate Fortran Run-Time Library support. This is
              provided in OpenVMS Alpha V7.1 (released version only, not
              "field test" versions) or by installing the accompanying
              FORRTL kit as described in the HP Fortran for OpenVMS
              Alpha Systems Installation Guide.
              The FORRTL V7.1 kit provides corrections to problems
              discovered since the release of OpenVMS Alpha V7.0 and
              adds support for the Fortran 90 NEAREST intrinsic. Compaq
              recommends that the FORRTL kit be installed on any system
              running a version of OpenVMS Alpha earlier than V7.1 on
              which Compaq Fortran programs will be run. The FORRTL kit

                      New and Changed Features in Previous Releases 3-63

 






              may be redistributed according to the terms of the Compaq
              Fortran Software Product Description and is licensed under
              the OpenVMS software license.

        3.9.1.2 /ARCHITECTURE Compile Command Qualifier

              The new /ARCHITECTURE compile command qualifier determines
              the type of Alpha processor code that will be generated
              for this program. The /ARCHITECTURE option uses the same
              keywords as the /OPTIMIZE=TUNE option.

              Whereas the /TUNE option is primarily used by certain
              higher-level optimizations for instruction scheduling
              purposes, the /ARCHITECTURE option determines the type
              of code instructions generated for the program unit being
              compiled.

              Compaq OpenVMS Version 7.1 and subsequent releases
              will provide an operating system kernel that includes
              an instruction emulator. This emulator allows new
              instructions, not implemented on the host processor chip,
              to execute and produce correct results. Applications using
              emulated instructions will run correctly, but may incur
              significant software emulation overhead at runtime.

              All Alpha processors implement a core set of instructions.
              Certain Alpha processor versions include additional
              instruction extensions.

              Supported /ARCHITECTURE keywords are as follows:

              -  GENERIC generates code that is appropriate for all
                 Alpha processor generations. This is the default.

                 Running programs compiled with the GENERIC keyword
                 will run all implementations of the Alpha architecture
                 without any instruction emulation overhead.

              -  HOST generates code for the processor generation in use
                 on the system being used for compilation.

                 Running programs compiled with this keyword on other
                 implementations of the Alpha architecture might
                 encounter instruction emulation overhead. If HOST is
                 specified, the actual processor model code used is
                 displayed in the listing qualifier summary.

              -  EV4 generates code for the 21064, 21064A, 21066, and
                 21068 implementations of the Alpha architecture.

        3-64 New and Changed Features in Previous Releases

 






                 Running programs compiled with the EV4 keyword will
                 run without instruction emulation overhead on all Alpha
                 processors.

              -  EV5 generates code for some 21164 processor implementa-
                 tions of the Alpha architecture that use only the base
                 set of Alpha instructions (no extensions).

                 Running programs compiled with the EV5 keyword will
                 run without instruction emulation overhead on all Alpha
                 processors. For the purposes of /ARCHITECTURE, the EV5
                 keyword is equivalent to specifying EV4.

              -  EV56 generates code for some 21164 processor imple-
                 mentations that use the byte and word manipulation
                 instruction extensions of the Alpha architecture.

                 Running programs compiled with the EV56 keyword might
                 incur emulation overhead on EV4 and EV5 processors, but
                 will still run correctly on Compaq OpenVMS Version 7.1
                 (or later) systems.

              -  PCA56 generates code for the 21164PC processor
                 implementation that uses the byte and word manipulation
                 instruction extensions and multimedia instruction
                 extensions of the Alpha architecture.

                 Running programs compiled with the PCA56 keyword might
                 incur emulation overhead on EV4 and EV5 and EV56
                 processors, but will still run correctly on Compaq
                 OpenVMS Version 7.1 (or later) systems.

        3.9.1.3 New /OPTIMIZE=TUNE Keywords

              The /OPTIMIZE=TUNE qualifier now accepts the EV56 and
              PCA56 keywords. In addition, use of HOST will cause
              the processor model used to be displayed in the listing
              qualifier summary.

        3.9.1.4 Problem with NFS-mounted sources fixed

              A problem was corrected in both compilers where the
              compiler would fail to read a source file from an NFS-
              mounted disk - the error message given was "RMS-F-COD,
              invalid or unsupported type field in XAB ".

                      New and Changed Features in Previous Releases 3-65

 






        3.9.2 Changes specific to Compaq Fortran


        3.9.2.1 Partial Fortran 95 support

              This release includes a partial implementation of the
              proposed Fortran 95 standard. The following features
              of the proposed Fortran 95 standard have already been
              implemented by previous versions of Compaq Fortran 90:

              -  FORALL statement and construct

              -  Automatic deallocation of ALLOCATABLE arrays

              -  Dim argument to MAXLOC and MINLOC

              The following features of the proposed Fortran 95
              standard have been implemented by this version of Compaq
              Fortran 90. See HELP F90 for information on most of these
              features.

              -  Initial association status for pointers

              -  Detection of Obsolescent and/or Deleted features listed
                 in the proposed Fortran 95 standard

              -  Masked ELSEWHERE statement

              -  Nested WHERE constructs

              -  NULL Intrinsic

              -  CPU_TIME intrinsic

              -  Generic identifier in END Interface Statements

              -  Kind argument to CEILING and FLOOR intriniscs

              -  Pure user-defined subprograms

              -  Automatic deallocation of ALLOCATABLE arrays

              -  Implicit initialization of derived-type objects (static
                 case only)

              The compiler is capable of checking for syntax conformance
              to either the Fortran 90 standard or the draft Fortran
              95 standard. The /STANDARD compile command qualifier has
              been enhanced to optionally allow one of the following
              keywords:

                 F90 - Check for conformance to Fortran 90

        3-66 New and Changed Features in Previous Releases

 






                 F95 - Check for conformance to Fortran 95
                 NONE - Do not check for standards conformance.

              The default is /NOSTANDARD which is the same as /STANDARD=NONE.
              If /STANDARD is specified without a keyword, the default
              is /STANDARD=F90. This default may change to F95 in a
              future release.

        3.9.2.2 /PAD_SOURCE Qualifier Now Supported

              Compaq Fortran now supports the /PAD_SOURCE qualifier in
              the same manner as Compaq Fortran 77. If /PAD_SOURCE is
              specified, the compiler will implicitly pad with blanks
              any fixed-form source records which are shorter than the
              source width in effect (72 or 132 columns, dependent
              on /EXTEND_SOURCE.) The default is /NOPAD_SOURCE, for
              compatibility with other Compaq Fortran compilers. /PAD_
              SOURCE can be used for compatibility with some non-Compaq
              Fortran compilers. This affects character constants which
              are continued across multiple source records.

        3.9.2.3 Additional changes and corrections

              The following additionalchanges and corrections are in
              this version of Compaq Fortran:

              o  If /REAL_SIZE=64 or =128 is specified, and a real
                 constant includes an explicit kind specifier but no
                 exponent letter, the compiler no longer gives an error.

              o  The compiler no longer fails if a derived type field is
                 named "fill".

              o  The compiler now allows a source line to begin with
                 a semicolon in free-form. This is an extension to the
                 standard and is flagged as such.

              o  The compiler now allows D-lines (/D_LINES) to be
                 continued.

              o  The unformatted indexed REWRITE statement no longer
                 causes OUTSTAOVE errors when transmitting an aggregate.

              o  BYTE or INTEGER*2 PARAMETER constants which are defined
                 using a constant value in the "unsigned" range are now
                 properly sign-extended when required.

                      New and Changed Features in Previous Releases 3-67

 






              o  The compiler no longer fails if two or more program
                 units in the same compiler invocation use the IARGCOUNT
                 intrinsic.

              o  The compiler now correctly treats a valueless OPEN
                 keyword (such as READONLY) as a keyword when it appears
                 at the start of the OPEN keyword list.

              o  The compiler no longer gives incorrect errors when a
                 structure and record have the same name.

              o  Compile-time evaluation of character intrinsics whose
                 arguments include a NUL character no longer produce
                 inconsistent results.

              o  The NEAREST intrinsic function now returns correct
                 values for VAX floating types. This requires new math
                 library support which is provided in the accompanying
                 FORRTL kit or in OpenVMS Alpha V7.1. On OpenVMS
                 versions earlier than V7.1, calling the NEAREST
                 intrinsic to obtain the next higher value from HUGE()
                 or the next lower value from TINY() will result in an
                 ACCVIO error rather than the correct math library error
                 reported. This will be fixed in OpenVMS Alpha V7.1.

              o  LOC(f90_pointer) no longer causes the compiler to fail.

              o  The compiler no longer generates code in certain
                 cases involving a string array element argument to
                 an intrinsic routine, such as ADJUSTL.

              o  The compiler no longer generates incorrect code for an
                 unformatted REWRITE of an array or record structure.

              o  Compile-time integer overflows are now warnings rather
                 than errors.

              o  The compiler no longer incorrectly merges rename lists
                 from a CONTAINed subprogram into those from the host
                 program unit.

              o  Compiler had limited INCLUDE files to 20 per compila-
                 tion unit. There is no longer any fixed limit for the
                 number of INCLUDE files. INCLUDE nesting depth limit is
                 20.

              o  Compiler limit of 99 continuation lines was raised to
                 511.

        3-68 New and Changed Features in Previous Releases

 






              o  Compiler did not completely honor OPTIONS /[NO]G_FLOAT.

              o  Compiler abort with certain types of pointer assign-
                 ment.

              o  Incorrect error message for nested STRUCTUREs.

              o  Inconsistent severity for undeclared variable message
                 with IMPLICIT NONE or command line switch.

              o  Incorrect error about passing LOGICAL*4 to a LOGICAL*1
                 argument.

              o  Lack of standards warning for non-integer expressions
                 in computed GOTO.

              o  Incorrect flag NAME= as nonstandard in INQUIRE.

              o  Lack of standards warning for AND, OR, XOR intrinsics.

              o  VOLATILE attribute not honored for COMMON variables.

              o  COMPLEX expression not allowed in variable format
                 expression.

              o  Adjustable array not allowed to be declared AUTOMATIC
                 (AUTOMATIC declaration is ignored.)

              o  /RECURSIVE not honored in main program.

              o  Parsing error with DO-loop has bounds of -32768,32767.

              o  Compiler abort when extending generic intrinsic.

              o  SAVEd variable in inlined routine didn't always get
                 SAVEd.

              o  Compiler abort with initialization of CHARACTER(LEN=0)
                 variable

              o  Incorrect values of PRECISION, DIGITS, etc. for
                 floating types.

              o  Incorrect value of INDEX with zero-length strings.

              o  Incorrect value for SELECTED_REAL_KIND in PARAMETER
                 statement.

              o  Incorrect compile-time result of VERIFY.

              o  Routine using IARGPTR or IARGCOUNT corrupts address of
                 passed CHARACTER argument.

                      New and Changed Features in Previous Releases 3-69

 






              o  Lack of standards warning for CMPLX() in initializa-
                 tion expression.

              o  Compiler abort when %LOC(charvar) used in statement
                 function.

              o  Incorrect initialization of STRUCTURE array.

              o  Compiler abort with large statement function.

              o  RESHAPE of array with a zero bound aborts at runtime.

              o  /INTEGER_SIZE not honored.

              o  SIZEOF(SIZEOF()) should be 8.

              o  Error parsing a derived type definition with a field
                 name starting with "FILL_".

              o  With OPTIONS /NOI4, compiler complained of IAND with
                 arguments of an INTEGER*4 variable and a typeless
                 PARAMETER constant.

              o  Incorrect standards warning for DABS.

              o  Lack of Error message for ambiguous generic.

              o  FOR$RAB was not always considered as returning an
                 INTEGER*4.

              o  Error parsing field array reference in IF.

              o  Bit constants in argument lists should be typed based
                 on value, not "default integer".

              o  Compiler did not allow module to use itself.

              o  Lack of standards warning for Hollerith constant.

              o  Wrong values for TINY, HUGE for VAX floating.

              o  EXPONENT() with /FLOAT=D_FLOAT references non-existent
                 math routine.

        3.9.3 Changes specific to Compaq Fortran 77

        3-70 New and Changed Features in Previous Releases

 






        3.9.3.1 G Format Edit Descriptor for Integer Variables

              If an integer variable is transmitted in formatted I/O
              using a G format edit descriptor, Compaq Fortran 77
              now adopts the Fortran 90 semantics of allowing this
              combination and using an equivalent I format. In some
              earlier releases, and on OpenVMS VAX, this combination
              was disallowed and would result in a FORVARMIS error.
              Some applications explicitly disabled this error (through
              ERRSET on VAX and /CHECK=NOFORMAT on Alpha), where the
              behavior would then be that the data was assumed to
              be REAL*4.) This change in behavior may affect some
              applications which use an integer variable in I/O to
              transmit data that may be real.

        3.9.3.2 DATE_AND_TIME Intrinsic

              The DATE_AND_TIME intrinsic from the Fortran 90 standard
              has been added to Compaq Fortran 77 to provide a standard
              interface for obtaining the date with a four-digit year
              format. Use of this routine, in place of the non-standard
              DATE or IDATE intrinsics, will allow an application to
              function correctly in the year 2000 and beyond.

              The interface to DATE_AND_TIME is as follows:

              CALL DATE_AND_TIME ([date] ,[time] ,[zone] ,[values]) date
              - CHARACTER*8 containing CCYYMMDD {CC is century} time
              - CHARACTER*10 containing hhmmss.sss zone - CHARACTER*5
              containing hhmm {difference from UTC} values - INTEGER*4
              (8) array containing 4-digit year, month, day, zone, hour,
              minutes, seconds, milliseconds

              Any of the arguments may be omitted, but any preceding
              commas for omitted arguments must be specified.

        3.9.3.3 Use of POINTER Variables in DEBUG

              Compaq Fortran now correctly describes pointees, declared
              in a POINTER statement, in the Debug Symbol Table
              information for use with the OpenVMS Debugger. However,
              the debugger does not contain full support for pointer-
              type variables in Fortran. Scalar numeric pointees can
              be examined by prefacing the pointee variable name with
              the "@" character. For example, given the following
              declarations:

                      New and Changed Features in Previous Releases 3-71

 








                    REAL X
                    POINTER (P,X)

              you could use the DEBUG command E @X to examine the
              contents of X (pointed to by P). If the pointee has a
              character, array or record type, however, the debugger
              will not properly access the contents. Until the debugger
              is enhanced in this area, a suitable workaround is to tell
              the debugger that the language is Pascal, by means of a
              SET LANGUAGE PASCAL DEBUG command, and use Pascal syntax,
              as follows:

              o  Place a caret "^" after the pointee variable name.

              o  Use square brackets "[]" instead of parentheses in
                 array and character references.

              As in Compaq Fortran, a period is used as a record field
              separator. Also, the debugger will properly use Fortran-
              style column-major order array indexing even though the
              language is set to Pascal. Note that the debugger does not
              support COMPLEX constants in expressions, but can examine
              COMPLEX variables.

              The following table shows equivalent Pascal syntax for
              accessing various Fortran variable types.

              Table 3-1 Pascal DEBUG Syntax for Fortran Pointee
              __________Expressions_____________________________________

              Fortran_Type____________________Pascal_DEBUG_Syntax_______

              Whole variable X                X^

              Character substring X(2:3)      X^[2:3]

              Array reference X(2,3)          X^[2,3]

              Field reference X.F             X^.F

              Field_array_reference_X(3).F____X^[3].F___________________

              OpenVMS Alpha V7.1 will contain Fortran DEBUG support for
              pointer variables.

        3-72 New and Changed Features in Previous Releases

 






        3.9.3.4 Improved DEBUG support for PARAMETER constants

              Compaq Fortran 77 now supports /DEBUG=PARAMETER=NONE |
              USED | ALL in the following manner:


                 /DEBUG not present

                    /DEBUG=(PARAMETERS=NONE,NOSYMBOLS,TRACEBACK)
                 /DEBUG alone

                    /DEBUG=(PARAMETERS=USED,SYMBOLS,TRACEBACK)
                 /DEBUG=ALL

                    /DEBUG=(PARAMETERS=ALL,SYMBOLS,TRACEBACK)
                 /DEBUG=NONE

                    /DEBUG=(PARAMETERS=NONE,NOSYMBOLS,NOTRACEBACK)

        Note that the behavior for Compaq Fortran 77 for OpenVMS Alpha
        differs in two ways from that of Compaq Fortran 77 for OpenVMS
        VAX:

                 /DEBUG=PARAMETER

                    Alpha: /DEBUG=(PARAMETERS=ALL,NOSYMBOLS,TRACEBACK)
                    VAX: /DEBUG=(PARAMETERS=ALL,SYMBOLS,TRACEBACK)
                 /DEBUG=PARAM=USED

                    Alpha: /DEBUG=(PARAMETERS=USED,NOSYMBOLS,TRACEBACK)
                    VAX: /DEBUG=(PARAMETERS=USED,SYMBOLS,TRACEBACK)

              In the OpenVMS VAX compiler, /DEBUG=PARAM is looked at
              only if /DEBUG=SYMBOLS is set whereas the Alpha compiler
              processes /DEBUG=PARAM independent of /DEBUG=SYMBOLS.

        3.9.3.5 Additional changes and corrections

              The following changes and corrections are in this version
              of Compaq Fortran 77:

                ________________________Note  ________________________

                /ASSUME=UNDERSCORE is available but as yet un-
                documented in Compaq Fortran 77. When set, a
                trailing underscore {"_"} is appended to ex-
                ternal names (which is the default convention

                      New and Changed Features in Previous Releases 3-73

 






                for Compaq Fortran 77 on Compaq UNIX.) The de-
                fault is /ASSUME=NOUNDERSCORE. Users should use
                /ASSUME=(ALL,NOUNDERSCORE) instead of /ASSUME=ALL if
                they do not want this UNIX behavior.

                _____________________________________________________

              o  Deferred function argument expression can cause
                 problems, eg, "IF(F(I,(.NOT.X).AND.Y))THEN".

              o  Be more tolerant of large typeless things like
                 SIZEOF(X'FFFFFFFFFFFFFFFFFFF').

              o  Do not delete adjustable array bounds that are
                 equivalenced into COMMON.

              o  Construct names can be a problem for .ANA files,
                 especially with no preceding real label.

              o  Allow CHARACTER C*10(20) syntax in addition to
                 CHARACTER C(20)*10.

              o  Fix large (INTEGER*8 sized) constant subscripts.

              o  Fix F90 automatic and pointer arrays with variable
                 bounds.

              o  Allow debugging with a pointer to an array in COMMON.

              o  Allow $FORT T1.F/LIS,T2.F/NOLIS or $FORT T1.F/OBJ,T2.F/NOOBJ.

              o  Allow SIZEOF(CHARACTER_ARRAY(1)) - do runtime
                 evaluation if necessary.

              o  Do NOT do .ANA file processing {eg, for USEROPEN}
                 without /ANA present.

              o  Fix IBITS to not overflow on small integer types.

              o  Fix (another) NAMELIST/SAVE/EQUIVALENCE problem.

              o  Use less memory at compile-time for routine prolog code
                 for adjustably dimensioned arrays (a(n,n),b(n,n)).

              o  Fix a.b.c offset computation.

              o  "Small integer*1 op small integer*2 constant" should
                 give integer*1 result (ala VAX).

              o  Change error message for YEAR2000 (suggest using DATE_
                 AND_TIME, not DATE).

        3-74 New and Changed Features in Previous Releases

 






              o  Data initialization incorrect for: "RECORD /S1/R1,/S2/R2"
                 (r2 used s1 initialization).

              o  Do not allow substrings to be merged in I/O lists
                 (N,STR(1:N) for example).

              o  Fix a bug in nested uninitialized STRUCTUREs.

              o  Allow CHARACTER *(*) C; PARAMETER (C='abcdefghijk')
                 even with /DEBUG=PARAM=ALL.

              o  Better "function type" message string when mismatch
                 between caller and called function.

              o  Give warning instead of assertion for REAL*4 X(10);
                 REAL*8 X.

              o  Fix IBITS on small integers so it doesn't overflow.

              o  Do NOT allow VOLATILE to apply to a function name.

              o  Fix illegal memory reference in compiler when the I/O
                 format is a CHARACTER function.

              o  "CALL FOO(LEN(C))" with argument checking now gives
                 "Integer/Logical*8" for type instead of "Unknown".

              o  Fix USEROPEN routine when using /ANA so a bad .ANA file
                 is not produced.

              o  Implement multiple entry point functions with mixed
                 COMPLEX entry names.

              o  Add /STAND=SEMANTICS warning of entry (of function)
                 name used before ENTRY statement.

              o  Optimize the representation of field references.

              o  Merge I/O lists with "simple" elements into a single
                 I/O call.

              o  Implement /ARCHITECTURE = EV4 | EV5 | EV56 | PCA56 |
                 GENERIC | HOST.

              o  An unused automatic data item no longer causes the
                 compiler to abort.

              o  Code generation bugs were fixed in /OPTIMIZE=LOOPS and
                 /OPTIMIZE=LEVEL > 3.

                      New and Changed Features in Previous Releases 3-75

 






              o  .AND. and .OR. expressions in logical IFs now evaluate
                 left-to-right more often, find more short circuits, and
                 generate better code.

              o  Allow dummy arguments to ENTRY statements to occur in
                 the declaration phase, eg: PARAMETER SX = SIZEOF (X)
                 where X only occurs as an ENTRY argument later.

              o  Allow %VAL(expression) as the argument to LIB$ESTABLISH.

              o  Make it easier for the debugger to find the start of a
                 routine.

              o  Make CPPFILERR a warning {not an error} so that # 2000
                 "xxx.F" is ignored when xxx.F is not present.

              o  Put out better information for FUNCTION/ENTRY names for
                 debugging.

              o  Make ALTRETOMI an informational for return with
                 alternate label when no * in any dummy argument list.

              o  Give better error message for bad character in
                 octal/hex constant.

              o  Allow I/O keywords to be blank padded (for compile time
                 constants).

              o  /INTEGER_SIZE= should affect constants in output
                 statements, e.g. TYPE *,1,2,3. This is an incompatible
                 change.

              o  Allow continued DICTIONARY statement.

              o  Let DICTIONARY definitions use their own /ALIGN setting
                 (instead of forcing /ALIGN=RECORD=PACKED).

              o  Give informational (BRNCHINTOBLK) for jumping into
                 block or loop from outside: "Questionable branch into
                 loop or block".

              o  Give an error (INVSUBUSE) when subroutine/entry names
                 are used as functions: "This name cannot be used as a
                 function reference".

              o  Make it possible to pass CHARACTER*(*) function names
                 again.

              o  Allow POINTER to functions/subroutines.

        3-76 New and Changed Features in Previous Releases

 






              o  Fix the listing of /BY_REF_CALL to list more than the
                 first routine name.

              o  Allow an optional ":" between CDEC$ TITLE | SUBTITLE
                 and the "[sub]title".

              o  Add YEAR2000 warning for DATA/IDATE, suppressed by
                 /WARN=NOUSAGE : "Two-digit year return value may cause
                 problems with the year 2000".

              o  Suppress BRNCHINTOBLK under /WARN=NOUSAGE.

              o  Don't issue CHACONCONTD more than once per statement.

              o  Fix variable lower bounds for second dimension so they
                 don't cause assertions.

              o  Give error message (BADRANDU) for incorrect arguments
                 to RANDU: "Intrinsic RANDU arguments should be:
                 (integer*2, integer*2, real*4)"

              o  Catch adjutable array used as namelist element (avoid
                 internal error).

              o  Code generation bugs were fixed in CHARACTER argument
                 setup, register reuse, loop reductions, and backwards
                 loops.

        3.9.3.6 Known problems in Compaq Fortran 77

              o  A bug in USEROPEN processing sometimes aborts the
                 compiler. The workaround is to compile with /ANALYSIS_
                 DATA specified.

        3.10 New and Changed Features in V7.0

              This section provides highlights of new and changed
              features in Compaq Fortran 7.0, as compared to the earlier
              separate products DEC Fortran 90 V2.0 and DEC Fortran
              V6.3.

        3.10.1 Changes common to Compaq Fortran and Compaq Fortran 77



                      New and Changed Features in Previous Releases 3-77

 






        3.10.1.1 cDEC$ PSECT ALIGN= Keywords Supported

              The cDEC$ PSECT ALIGN= specifier now supports the keywords
              BYTE, WORD, LONG, QUAD, OCTA and PAGE in addition to the
              integer constant expression previously allowed. These
              keywords are equivalent to the constants 0, 1, 2, 3, 4
              and 16, respectively. This feature is also supported by
              version 6.4 of Compaq Fortran for OpenVMS VAX Systems,
              where the keyword PAGE will be treated as if it were the
              constant 9 (the page size on OpenVMS VAX systems is 2**9
              (512) bytes.)

        3.10.1.2 DPROD Intrinsic Now Generic

              The DPROD intrinsic function has been extended to operate
              as a generic function which can accept arguments of types
              REAL*4 or REAL*8 (both arguments must be the same type.)
              If the arguments to DPROD are REAL*8, the function result
              is of type REAL*16. Note that if the DPROD intrinsic name
              is passed as an actual argument, the routine passed is the
              version with a REAL*8 function result.

        3.10.1.3 /ASSUME=ACCURACY_SENSITIVE Changes

              The compilers have been changed so that the optimization
              resulting in calls to a special "reciprocal square
              root" routine for expressions of the form 1.0/SQRT(x)
              or A/SQRT(B) will be enabled only if /ASSUME=NOACCURACY_
              SENSITIVE is in effect. The default is /ASSUME=ACCURACY_
              SENSITIVE. Note that /FAST enables /ASSUME=NOACCURACY_
              SENSITIVE.

        3.10.1.4 /ASSUME=BYTERECL Command Qualifier

              Compaq Fortran now supports the /ASSUME=BYTERECL qualifier
              on the command line. This controls the size of the unit
              used for the RECL= keyword in an OPEN or INQUIRE statement
              for unformatted files. The default, NOBYTERECL, specifies
              that RECL is in units of 4-byte longwords, compatible with
              current and past Compaq Fortran products. If BYTERECL is
              specified, the unit for RECL is one byte, which is used on
              some non-Compaq platforms.

              Use of the non-default BYTERECL value requires that
              the application be running on a system which has the
              associated Fortran Run-Time Library support. This support
              is provided by installing one of the following:

        3-78 New and Changed Features in Previous Releases

 






                 Compaq Fortran version V7.0 or later
                 OpenVMS Alpha V7.0 or later

              If a program which specifies /ASSUME=BYTERECL is run on
              a system without the proper Run-Time Library support, it
              will fail with an INVARGFOR, Invalid argument to Fortran
              Run-Time Library error.

        3.10.1.5 /CHECK=NOPOWER Compile Command Keyword

              By default, Compaq Fortran follows the Fortran standard
              and disallows (gives a compile-time or run-time error)
              for real exponentiation of 0.0**0.0 or for a negative
              real number raised to an integer-valued power. Other
              languages and other Fortran implementations may allow
              these expressions. The /CHECK=NOPOWER compile command
              qualifier may be used to specify that Compaq Fortran allow
              these expressions so that 0.0**0.0 gives a value of 1.0
              and that negative real bases to raised integer-valued real
              powers are treated as if the exponent were integer valued
              (for example, -3.0**3.0 results in -27.0).

        3.10.1.6 New /OPTIMIZE features

              /OPTIMIZE=LEVEL=5 now enables a new set of loop transfor-
              mation optimizations that apply to array references within
              loops, including:

              o  Loop blocking

              o  Loop distribution

              o  Loop fusion

              o  Loop interchange

              o  Loop scalar replacement

              o  Outer loop unrolling

              The loop transformations can be selectively disabled (as
              a group) by specifying /OPTIMIZE=NOTRANSFORM_LOOPS. Also,
              software pipelining, a set of optimizations previously
              enabled at optimization level 5, can be disabled using
              /OPTIMIZE=NOPIPELINE.

                      New and Changed Features in Previous Releases 3-79

 






        3.10.1.7 /REENTRANCY Compile Command Qualifier

              Compaq Fortran now supports writing applications which use
              multithread or AST reentrancy during RTL calls. The new
              /REENTRANCY qualifier allows you to specify keyword values
              to indicate what type of reentrancy to support. (Use of
              this qualifier requires OpenVMS Alpha V7.0 or later - it
              is ignored if an application is run on earlier versions of
              OpenVMS Alpha). See the online HELP for further details.

        3.10.1.8 Improvements in IEEE constant handling

              The compilers have improved handling of IEEE exceptional
              values (NaN, infinity) created during compile-time
              constant expression evaluation. If /FLOAT=IEEE is
              specified and a constant expression overflows or
              underflows or would result in a NaN, the correct
              exceptional value is used. This may result in run-time
              exceptions if the default /IEEE_MODE=FAST is in effect.

        3.10.1.9 Improved optimizations

              To improve run-time performance, new optimizations are
              now available and certain improvements have been made,
              including:

              -  Certain intrinsic procedures specific to Fortran 90
                 (not available in FORTRAN-77)

              -  Subprogram calls with array arguments

              -  New command-line qualifiers that activate new
                 optimizations, including the loop transformation
                 optimizations (/OPTIMIZE=LOOPS) or (/OPTIMIZE=LEVEL=5).
                 The software pipelining optimization is now activated
                 by using /OPTIMIZE=PIPELINE or /OPTIMIZE=LEVEL=5.

        3.10.1.10 Enhanced DEBUG support for optimized programs

              Compaq Fortran V7.0 contains enhanced support for
              debugging programs compiled with optimization as described
              in OpenVMS Version 7.1 New Features Manual.



        3-80 New and Changed Features in Previous Releases

 






        3.10.1.11 USEROPEN routines must be INTEGER

              If a program specifies a USEROPEN routine in an OPEN
              statement and the routine is declared explicitly as some
              type other than INTEGER*4 or INTEGER*8, the compiler
              will now give a "Name previously used with conflicting
              data type" (INVTYPUSE) error. If the routine was not
              explicitly given a type, the compiler now assigns it
              the INTEGER*4 type, even if an IMPLICIT statement would
              specify a different type. However, if IMPLICIT NONE is in
              effect, and the type was not specified explicitly, then
              an IMPNONE error will be generated. Previously, the type
              conflict was not detected nor was a warning generated if
              IMPLICIT NONE was in effect. USEROPEN routines must return
              an INTEGER*4 or INTEGER*8 function value.

        3.10.2 Changes specific to Compaq Fortran

        3.10.2.1 cDEC$ ALIAS directive now supported

              The cDEC$ ALIAS directive is now supported in the same
              manner as in Compaq Fortran 77. This directive provides
              the ability to specify that the external name of an
              external subprogram is different than the name by which
              it is referenced in the calling subprogram. For further
              details, see Section 4.2.3.

        3.10.2.2 cDEC$ ATTRIBUTES directive

              The cDEC$ ATTRIBUTES directive lets you specify properties
              for data objects and procedures. These properties let
              you specify how data is passed and the rules for invoking
              procedures. This directive is intended to simplify mixed
              language calls with Compaq Fortran routines written in C
              or Assembler.

              For more information on the cDEC$ ATTRIBUTES directive,
              see Section 4.2.4.







                      New and Changed Features in Previous Releases 3-81

 






        3.10.2.3 Variable Format Expressions in character literals now
                 supported

              Simple forms of Variable Format Expressions (VFEs) are
              now allowed in character literal constant formats. The
              VFE may contain a single constant or variable name, but
              not an expression. VFEs in FORMAT statements may contain
              expressions. In addition, invalid Format strings in
              character literal constants are now detected at compile-
              time rather than at run-time.

        3.10.2.4 Abbreviations allowed in OPTIONS statement

              The compiler now allows qualifier and keyword values in
              the OPTIONS statement to be abbreviated to the shortest
              unique value.

        3.10.2.5 Enhanced support for the FORALL statement and
                 construct

              The FORALL construct now allows the following statements
              in the forall body:

              -  Pointer assignment statement

              -  FORALL statement or construct (nested FORALL)

              -  WHERE statement or construct

              Please note that each statement in the FORALL body is
              executed completely before execution begins on the next
              FORALL body statement.

              The compiler now correctly defines the scope of a FORALL
              subscript name to be the scope of the FORALL construct.
              That is, the subscript name is valid only within the scope
              of the FORALL. Its value is undefined on completion of the
              FORALL construct.

        3.10.2.6 /NAMES qualifier now supported

              The /NAMES qualifier, with keyword values of UPPERCASE,
              LOWERCASE and ASIS, is now supported in the same manner
              as in Compaq Fortran 77. See the online HELP for further
              details.

        3-82 New and Changed Features in Previous Releases

 






        3.10.3 Changes specific to Compaq Fortran 77

              The following additional changes are in this version of
              Compaq Fortran 77:

              o  CDEC$ OPTIONS /[NO]WARNINGS[=[NO]ALIGNMENT]

                 The "CDEC$ OPTIONS" directive has been extended to
                 accept

                    /WARNINGS[=[NO]ALIGNMENT]
                    /NOWARNINGS

                 to turn off or on the local reporting of alignment
                 warnings in STRUCTUREs or COMMONs.

              o  The new directive

                   CDEC$ RESTRICT pointee [, pointee]...
                   CDEC$ RESTRICT *

                 advises the compiler that objects pointed to using
                 the POINTER statement are not accessed by any other
                 name than the name in the POINTER statement {"pointee"
                 above}. "*" means all such pointees are exclusively
                 accessed by their pointee name. This allows for
                 better optimizations of objects pointed to because
                 the compiler can assume the only way to access the
                 object is by its pointee name and no other.

              o  The following program shows a problem with Compaq
                 Fortran 77:

                       PROGRAM X
                       IMPLICIT NONE
                       INTEGER*2 Y(ICHAR('A'):ICHAR('Z'))
                       INTEGER*4 Z
                       Z = ICHAR('A')
                       END

                 reports a compile-time error of "untyped name ICHAR" in
                 the Y declaration. The work-around is to declare the
                 intrinsic:

                       INTEGER*4 ICHAR

                      New and Changed Features in Previous Releases 3-83

 









                                                                       4
        ________________________________________________________________

                                    General Information about HP Fortran



              This chapter provides general information applicable to HP
              Fortran.

        4.1 Information common to HP Fortran and HP Fortran 77


        4.1.1 INQUIRE(RECL) on OpenVMS Alpha vs. OpenVMS VAX

              INQUIRE(RECL) for unformatted files with the default RECL
              unit (longwords) gives different answers on OpenVMS VAX
              and OpenVMS Alpha if the existing file has a record length
              which is not a multiple of 4 bytes. Use /ASSUME=BYTERECL
              and specify the proper RECL in bytes in the OPEN
              statement.

        4.1.2 Additional Explanation of Certain Tuning Options

              Here is some additional information on the use of tuning
              options:

              o  /fast implies /arch=host

              o  The /arch setting establishes the floor for the
                 /opt=tune setting, so /opt=tune must be greater than or
                 equal to the /arch setting

              o  The compiler is aware of EV67, EV68, and EV7 and knows
                 how to tune for the caches on these Alphas.







                                General Information about HP Fortran 4-1

 






        4.1.3 Fully Specify Datatypes in MODULEs and INCLUDE Files

              When creating MODULEs and INCLUDE files that contain
              datatype declarations, HP recommends that such declara-
              tions explicitly specify the "kind" of the datatype, such
              as INTEGER(KIND=4) or INTEGER*4. If a kind is omitted,
              and the application which uses the declaration is compiled
              with a non-default /INTEGER_SIZE, /REAL_SIZE or /DOUBLE_
              SIZE qualifier value, the declarations in your module or
              INCLUDE file can be affected. When using the Fortran 95
              compiler, you can use the SELECTED_INT_KIND and SELECTED_
              REAL_KIND intrinsics to determine the appropriate kind
              values for the datatype size you desire - this is better
              than hard-coding the kind value. This mechanism is not
              available in the Fortran 77 compiler.

        4.1.4 Year 2000 Problem

              What is the Year 2000 Problem? It stems from the common
              practice of using two digits instead of four when writing
              dates and having multiple internal time formats. When this
              practice is extended into computer hardware and software,
              it causes arithmetic operations, comparisons, and data
              sorting procedures to yield incorrect results when working
              with years beyond 1999.

              As HP's customers begin to consider the readiness of their
              computing systems for the transition to the year 2000,
              many have begun asking what impact it will have on their
              OpenVMS systems.

              We are happy to answer that, because of insightful
              development by the engineers who created it, OpenVMS was
              born ready. The OpenVMS operating system base date uses a
              64-bit format that is totally unaffected by the transition
              to the year 2000.

              Customers who have consistently used the system base
              date and the associated system services that provide
              the ability to input and retrieve four digit ASCII year
              strings, will make a seamless transition into the year
              2000 when accessing their data.



        4-2 General Information about HP Fortran

 






              The HP Fortran compilers and their Run-Time Library
              are similarly unaffected by the transition to the year
              2000. However, applications which use the DATE or IDATE
              intrinsic subroutines may need to be modified, as these
              routines return the year in a two-digit format. To
              determine if your application uses DATE or IDATE, specify
              the /MAP/FULL/CROSS qualifiers to the LINK command when
              linking your application. Then use the OpenVMS SEARCH
              utility or a text editor to search the resulting .MAP file
              for references to one of the following routines:

                 DFOR$DATE_NUMERIC
                 DFOR$DATE_T_DS
                 DFOR$IDATE
                 DFOR$JDATE
                 DFOR$KDATE

              The cross-reference section of the linker map will list
              the names of the application modules which reference these
              routines. Then examine the code which uses the routines
              to determine if modifications are necessary. For further
              information on the DATE and IDATE intrinsic subroutines,
              see the HP Fortran for OpenVMS Language Reference Manual
              or DEC Fortran Language Reference Manual.

              Both the Fortran 95 and Fortran 77 compilers issue an
              informational diagnostic if DATE or IDATE is used in a
              program.

        4.1.5 Optimizations on References to Dummy Arguments and COMMON

              The HP Fortran compiler can may make local copies of
              dummy arguments and/or variables in COMMON blocks for
              improved performance. The compiler is careful to always
              copy values back or fetch new values when the language
              semantics require it, but some applications may have taken
              advantage of other implementations' limitations in this
              area and may produce incorrect results.

              For dummy arguments, it is important to specify /ASSUME=DUMMY_
              ALIASES or to declare the variable as VOLATILE if a dummy
              argument can be addressed through some path other than the
              argument name; for example, if a dummy argument is also a
              COMMON variable, or if the routine can be called with some
              arguments omitted. By default, HP Fortran assumes that

                                General Information about HP Fortran 4-3

 






              the application conforms to the Fortran 90 and FORTRAN-
              77 standards in that it does not alias dummy arguments
              and that all actual arguments agree in order, number
              and data type (or structure, for record arguments), with
              their corresponding dummy arguments. See the appropriate
              Language Reference Manual for more information on the
              /ASSUME=DUMMY_ALIASES option.

              For variables in COMMON, it is important to name in a
              VOLATILE statement any variables or COMMON blocks that
              can be referenced (either read or written) other than by
              direct reference or during a routine call. For example,
              if a variable in COMMON is referenced in an OpenVMS AST
              routine, condition handler or exit handler, or is in a
              shared global section, you must declare as VOLATILE that
              variable or the COMMON block to which it belongs. See the
              appropriate Language Reference Manual for more information
              on the VOLATILE statement.

        4.1.6 Form of logical constants in formatted input

              Please note that in formatted, list-directed, and NAMELIST
              input of logical values, any string that starts with "F"
              is accepted as .FALSE. and any string that starts with "T"
              is accepted as .TRUE.

        4.1.7 Control of Dynamic IEEE Rounding Modes

              The description of /ROUNDING_MODE=DYNAMIC is incorrect in
              saying that one can use the SYS$IEEE_SET_FP_CONTROL system
              service to control the dynamic rounding mode. Changing
              the dynamic rounding mode on OpenVMS requires use of an
              assembler routine at the present time.

        4.2 Information specific to HP Fortran

        4.2.1 Differences from HP Fortran 77

              This section lists significant HP Fortran 77 for OpenVMS
              Alpha features which are not implemented by HP Fortran.
              For further details, please see Appendix B of the HP
              Fortran for OpenVMS User Manual.



        4-4 General Information about HP Fortran

 






              The following FORTRAN command qualifiers and qualifier
              keywords are not supported by the F90 verb.

              o  /ASSUME=BACKSLASH

              o  /CHECK=ASSERTIONS

              o  /CROSS_REFERENCE

              o  /DESIGN

              o  /PAD_SOURCE

              o  /SHOW=(SINGLE)

              o  /STANDARD=(MIA,SEMANTIC,SOURCE_FORM,SYNTAX)

              o  /SYNTAX_ONLY

              o  /TERMINAL

              o  /WARNINGS=(UNREACHABLE)

              The following HP Fortran 77 language features are not
              supported by HP Fortran.

              o  Octal notation for integer constants ("0014)

              o  Dummy arguments with nonconstant bounds in a NAMELIST
                 group

              o  Extraneous parentheses in I/O lists

              The following semantic differences exist between HP
              Fortran and HP Fortran 77 for OpenVMS Alpha Systems.

              o  The Fortran-77 language specification did not define
                 a default value for the BLANK= setting when reading
                 from preconnected or internal files. For compatibility
                 with VAX FORTRAN (and earlier Fortran-66 programs), HP
                 Fortran 77 for OpenVMS uses BLANK='ZERO'. The Fortran
                 90 language specifies that the default for internal
                 files must be BLANK='NULL', therefore HP Fortran uses
                 that setting, which is different from HP Fortran 77
                 for OpenVMS. However, the Fortran 90 standard does not
                 specify the BLANK= setting for preconnected files and
                 HP Fortran for OpenVMS uses the same value, 'ZERO', as
                 does HP Fortran 77. (Note that if /NOVMS is specified,
                 the default changes to BLANK='NULL' for both internal
                 and preconnected files in both compilers.)

                                General Information about HP Fortran 4-5

 






              o  The Fortran-77 language did not allow a formatted READ
                 to require more characters than were present in the
                 external record. HP Fortran 77 implements an extension
                 called "short field termination" where if there are
                 insufficient characters remaining in the record to
                 satisfy a format edit descriptor's field width, that
                 width is reduced to the number of remaining characters.

                 For example, consider the following program:

                       READ (*,'(I5)') J
                       WRITE (*,*) J
                       END

                 If the program was compiled with HP Fortran 77 for
                 OpenVMS and input was taken from an interactive
                 terminal as follows:

                 123<Return>

                 HP Fortran 77 would reduce the format field width from
                 I5 to I3 and the program would display the value 123
                 for J.

                 The Fortran 90 language added a new feature, the
                 PAD= keyword to the OPEN statement, which specifies
                 how short records are to be treated during formatted
                 input. The default for all types of files is PAD='YES',
                 which causes short records to be treated as if they
                 were padded with blank characters to the required
                 width. Because the HP Fortran for OpenVMS default is
                 BLANK='ZERO' for preconnected files, the above example
                 would display a value of 12300 for J; the blanks used
                 for padding are treated as zeroes.

                 This change in behavior may cause problems for some
                 applications. To avoid problems in this area, HP
                 recommends adding an explicit BN format item to formats
                 used for interactive I/O on preconnected units.

                 If you have installed the HP Fortran Run-Time Library
                 ECO FORRTLAVE01070 (or a later version of the Run-
                 Time Library), the Fortran 90 default for BLANK= is
                 changed to be 'NULL' for all types of files. This
                 change will also appear in a version of OpenVMS Alpha
                 after V7.0. For more information, see the release notes
                 for FORRTLAVE01070.

        4-6 General Information about HP Fortran

 






              For further information on language constraints, see
              Appendix B of the HP Fortran for OpenVMS User Manual.

        4.2.2 Timezone support in DATE_AND_TIME intrinsic

              The DATE_AND_TIME intrinsic has an optional parameter
              which returns the timezone differential from Coordinated
              Universal Time (UTC). By default, OpenVMS systems do not
              maintain information on timezone differential unless
              DECnet/OSI is installed or the system manager defines
              the timezone using the SYS$MANAGER:UTC$CONFIGURE_TDF.COM
              command procedure. If the timezone information is not
              available, the DATE_AND_TIME intrinsic will return a
              blank for the character ZONE argument and -1 for the
              differential element of the VALUES argument.

              If timezone information is desired, the system manager
              should define the timezone differential using either
              DECnet/OSI procedures or SYS$MANAGER:UTC$CONFIGURE_TDF.COM
              if DECnet/OSI is not installed.

        4.2.3 cDEC$ ALIAS Directive

              The cDEC$ ALIAS directive is now supported in the same
              manner as in HP Fortran 77. This directive provides the
              ability to specify that the external name of an external
              subprogram is different than the name by which it is
              referenced in the calling subprogram.

              The syntax is:

              cDEC$ ALIAS internal-name, external-name

              The internal-name is the name of the subprogram as used
              in the current program unit and external-name is either a
              quoted character constant or a symbolic name.

              If external-name is a character constant, the value
              of that constant is used as the external name for the
              specified internal-name. The character constant is used as
              it appears, with no modifications for case or addition or
              removal of punctuation characters.

              The HP Fortran compiler will force the name into uppercase
              unless directed otherwise.

                                General Information about HP Fortran 4-7

 






              If external-name is a symbolic name, the symbolic name
              (in upper case) is used as the external name for the
              specified internal-name. Any other declaration of the
              specified symbolic name is ignored for the purposes of
              the ALIAS directive. Note that the OpenVMS linker may
              have restrictions on what may appear in an external
              name and that upper and lower case in external names is
              significant.

              For example, in the following program (free source form):

                PROGRAM ALIAS_EXAMPLE
                !DEC$ ALIAS ROUT1, 'ROUT1A'
                !DEC$ ALIAS ROUT2, 'routine2_'
                !DEC$ ALIAS ROUT3, rout3A
                      CALL ROUT1
                      CALL ROUT2
                      CALL ROUT3
                END PROGRAM ALIAS_EXAMPLE

              The three calls would be to external routines named
              ROUT1A, routine2_, and ROUT3A. Because rout3A was not
              in quotation marks (character constant), its name was
              converted to uppercase.

              This feature can be useful when porting code between
              UNIX and OpenVMS systems where different routine naming
              conventions are in use. On UNIX systems, calling C
              functions from Fortran use the convention of using a
              lowercase routine name with a trailing underscore. If you
              wrote a C routine intended to be called from Fortran, you
              would have to name it in accordance to this convention.
              For example, ROUT2 would be coded in C as routine2_.

              If this application were ported to OpenVMS where routine
              names are not generally modified, the result would be
              that the linker would not resolve the reference to ROUT2
              (aliased as routine2_), unless the cDEC$ ALIAS directive
              were removed.

              By adding or removing the cDEC$ ALIAS directive, you can
              specify an alternate routine name without recoding the
              application.


        4-8 General Information about HP Fortran

 






        4.2.4 cDEC$ ATTRIBUTES Directive

              The cDEC$ ATTRIBUTES directive lets you specify properties
              for data objects and procedures. It takes the following
              form:

               cDEC$ ATTRIBUTES att [,att]... :: object [,object]...

              Where:

                 c

                 Is the letter or character (c, C, *, !) that introduces
                 the directive (see your language reference manual).

                 att

                 Is one of the following:

                    C
                    ALIAS : external-name : internal-name
                    REFERENCE
                    VALUE

                 object

                 Is the name of a data object used as an argument or
                 procedure.

              Table 4-1 shows valid combinations of properties with the
              various types of objects:

              Table_4-1_cDEC$_ATTRIBUTES_Properties_and_Object_Types____

                         _________________Object_Types__________________

                         Argument      Common     Subprogram Specification
                         Data          Block      and EXTERNAL
              Property___Declarations__Names[1]___Statements____________

              C          Not allowed   Allowed    Allowed

              ALIAS      Not allowed   Not        Allowed
                                       allowed

              [1]Common_block_names_are_specified_as_[/]common-block-___

              name[/].

                                                (continued on next page)

                                General Information about HP Fortran 4-9

 






              Table 4-1 (Cont.) cDEC$ ATTRIBUTES Properties and Object
              __________________Types___________________________________

                         _________________Object_Types__________________

                         Argument      Common     Subprogram Specification
                         Data          Block      and EXTERNAL
              Property___Declarations__Names[1]___Statements____________

              REFERENCE  Allowed       Not        Not allowed
                                       allowed

              VALUE      Nonarrays     Not        Not allowed
                         only          allowed
              [1]Common_block_names_are_specified_as_[/]common-block-___

              name[/].
              __________________________________________________________

              For example, the C property can only be used with common
              block names and subprogram and EXTERNAL names, but not
              with variable declarations. The ALIAS property also
              applies to subprogram and EXTERNAL names (but not to other
              objects).

              In contrast, the REFERENCE and VALUE properties do not
              apply to subprogram and EXTERNAL procedure names (or
              common block names). They only apply to data declarations,
              but only REFERENCE (not VALUE) can be used for arrays or
              pointers to arrays.

              The cDEC$ ATTRIBUTES properties can be associated with
              function and subroutine definitions, in type declarations,
              and with the INTERFACE and ENTRY statements.

              Properties applied to entities available through use or
              host association are in effect during the association. For
              example (free source form):







        4-10 General Information about HP Fortran

 






               MODULE MOD1
               INTERFACE
                 SUBROUTINE SUB1
               !DEC$ ATTRIBUTES C :: SUB1
                 END SUBROUTINE
               END INTERFACE
               CONTAINS
                 SUBROUTINE SUB2
                 CALL SUB1
                 END SUBROUTINE
               END MODULE

              In this case, the call to SUB1 within SUB2 uses the C
              property specified in the interface block.

              The properties are described as follows:

              o  C

                 This property lets you specify how data is to be passed
                 when you use routines written in C or assembler with
                 Fortran routines.

                 When applied to a subprogram, the C property defines
                 the subprogram as having a specific set of calling
                 conventions. Note that HP Fortran on other platforms
                 will apply the appropriate defaults and C rules for
                 that platform.

                 Table 4-2 summarizes the differences between the
                 calling conventions:

              Table_4-2_C_Property_and_External_Names___________________

                              Fortran
              Item____________Default_________C_Property_Specified______

              Trailing        No              No
              underscore
              added to
              procedure
              names

                                                (continued on next page)

                               General Information about HP Fortran 4-11

 






              Table_4-2_(Cont.)_C_Property_and_External_Names___________

                              Fortran
              Item____________Default_________C_Property_Specified______

              Case of         Uppercase,      Uppercase, unless
              external        unless the      the ALIAS property is
              subprogram      ALIAS property  specified or /NAMES=ASIS
              names           is specified    or /NAMES=LOWERCASE is
                                              specified

              Argument        See Table 4-3   See Table 4-3
              passing___________________________________________________

                 In addition to the case of external names and the
                 trailing underscore, the C property affects how
                 arguments are passed, as described in Table 4-3.

              Table_4-3_C_Property_and_Argument_Passing_________________

                                                     C Property
              Argument Variable                      Specified for
              Type__________________Fortran_Default__Routine____________

              Scalar (includes      Passed by        Passed by value
              derived types)        reference

              Scalar, with VALUE    Passed by value  Passed by value
              specified

              Scalar, with          Passed by        Passed by reference
              REFERENCE specified   reference

              String                Passed by        String (1:1) padded
                                    descriptor       to integer length

              String, with VALUE    Error            String (1:1) padded
              specified                              to integer length

              String, with          Passed by        Passed by reference
              REFERENCE specified   reference

              Arrays, including     Always passed    Always passed by
              pointers_to_arrays____by_reference_____reference__________

                 If C is specified for a subprogram, arguments (except
                 for arrays and characters) are passed by value.

        4-12 General Information about HP Fortran

 






                 Subprograms using standard Fortran 90 conventions pass
                 arguments by reference.

                 Character arguments are passed as follows:

                 -  By Fortran default, passed by class S or NCA (for
                    arrays) descriptor.

                 -  If C is specified without VALUE or REFERENCE for
                    the arguments, the first character of the string is
                    passed (padded with zeros out to INTEGER*4 length).

                 -  If C is specified with REFERENCE for the argument
                    (or if only REFERENCE is specified), the string is
                    passed by reference.

                 When the C property is specified, the case of the
                 EXTERNAL name is forced to uppercase, even if
                 /NAMES=ASIS or /NAMES=UPPERCASE was specified during
                 compilation. To allow mixed case or lowercase names
                 when the C property is specified, specify the ALIAS
                 property for the same subprogram or EXTERNAL name.

              o  ALIAS

                 You can specify the ALIAS property as cDEC$ ALIAS or
                 as cDEC$ ATTRIBUTES ALIAS; both are equivalent. The
                 ALIAS property provides the ability to specify that the
                 external name of an external subprogram is different
                 than the name by which it is referenced in the calling
                 subprogram (see Section 4.2.3).

                 When both ALIAS and C properties are used for a
                 subprogram or EXTERNAL name, the ALIAS property takes
                 precedence over the C property. This allows you to
                 specify case-sensitive names (the C attribute sets them
                 to lowercase).

              o  REFERENCE and VALUE

                 These properties specify how a dummy argument is to be
                 passed.

                 REFERENCE specifies a dummy argument's memory location
                 is to be passed instead of the argument's value.

                 VALUE specifies a dummy argument's value is to be
                 passed instead of the argument's memory location.

                               General Information about HP Fortran 4-13

 






                 When a dummy argument has the VALUE property, the
                 actual argument passed to it can be of a different
                 type. If necessary, type conversion is performed before
                 the subprogram is called.

                 Character values, substrings, assumed-size arrays,
                 and adjustable arrays cannot be passed by value. When
                 REFERENCE is specified for a character argument, the
                 string is passed with no length.

                 VALUE is the default if the C property is specified in
                 the subprogram definition.

                 Consider the following free-form example which declares
                 a routine that accepts an integer argument by value:

                   interface
                     subroutine foo (a)
                      !DEC$ ATTRIBUTES C :: foo
                         integer a
                     end subroutine foo
                   end interface

                 This subroutine can be invoked from Fortran using the
                 name foo (no underscore):

                    integer i
                    i = 1
                    call foo(i)

                    end program

                 The actual subroutine code:

                     subroutine foo (i)
                      !DEC$ ATTRIBUTES C :: foo
                         integer i
                         i = i + 1
                         .
                         .
                     end subroutine foo




        4-14 General Information about HP Fortran

 









                                                                       5
        ________________________________________________________________

                                                  Documentation Overview



              The sections in this chapter:

              o  Describe HP Fortran documentation and online informa-
                 tion (Section 5.1)

        5.1 HP Fortran Documentation and Online Information

              The HP Fortran documentation set includes the following:

              o  HP Fortran Installation Guide for OpenVMS Alpha Systems

                 Explains how to install HP Fortran on an OpenVMS Alpha
                 operating system, including requirements.

                 The installation guide is included with the software
                 kit. It is not available in printed format.

              o  HP Fortran for OpenVMS Language Reference Manual
                 (BA368-90004)

                 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 features
                 (not available in FORTRAN-77).

                 This document is included with the HP Fortran document
                 kit.

              o  HP Fortran for OpenVMS User Manual (AA-QJRWD-TE)

                 Describes the HP Fortran program development and run-
                 time environment on OpenVMS 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 compatibility
                 with HP Fortran 77.

                                              Documentation Overview 5-1

 






                 This document is included with the HP Fortran document
                 kit.

              o  DEC Fortran Language Reference Manual (AA-PU45B-TK)

                 Describes the HP Fortran 77 source language for
                 reference purposes, including the format and use of
                 statements, intrinsic procedures, and other language
                 elements.

                 It identifies extensions to the Fortran 77 standard by
                 blue color in the printed document.

                 This document is included with the HP Fortran 77
                 document kit, QA-MV1AB-GZ.7.n.

              o  DEC Fortran User Manual for OpenVMS AXP Systems (AA-
                 PU39A-TE)

                 Describes the HP Fortran 77 program development and
                 run-time environment on OpenVMS Alpha systems. It
                 describes compiling, linking, running, and debugging
                 HP Fortran 77 programs, performance guidelines, run-
                 time I/O and error-handling support, data types,
                 numeric data conversion, calling other procedures,
                 and compatibility with HP Fortran on other platforms.

                 This document is included with the HP Fortran 77
                 document kit, QA-MV1AB-GZ.7.n.

              The HP Fortran Software Product Description (SPD) is
              provided on the Software Product Library CD-ROM.

              The following HP Fortran online information is available
              (once installed on the system):

              o  HP Fortran online release notes

                 Provide more information on this version of HP Fortran,
                 including known problems.

                 To display or print the HP Fortran release notes before
                 installing, use the PRODUCT EXTRACT RELEASE_NOTES
                 FORTRAN command (see the HP Fortran Installation Guide
                 for OpenVMS Alpha Systems).

                 Once installed, the ASCII version of the online release
                 notes are located in:

                    SYS$HELP:FORTRAN.RELEASE_NOTES

        5-2 Documentation Overview

 






                 Other forms of the release notes (PostScript and
                 Bookreader) are also provided, using the file name:

                    SYS$HELP:FORTRAN_RELEASE_NOTES.*

              o  HP Fortran online help

                 The HP Fortran HELP module in SYS$HELP:HELPLIB.HLB
                 provides online access to HP Fortran and HP Fortran 77
                 help, including descriptions of F90 command qualifiers,
                 a summary of the language elements (statements,
                 intrinsic procedures, and so on), error message
                 descriptions, and other information.

                 To view the online HP Fortran help file using the HELP
                 command, type:

                 $ HELP FORTRAN

                 for HP Fortran, or:

                 $ HELP F77

                 for HP Fortran 77.

                 You can specify topics to navigate the help hierarchy.
                 For example:

                 $ HELP FORTRAN /ALIGN
















                                              Documentation Overview 5-3
