HP Fortran
HP Fortran
Release Notes for Tru64 UNIX Systems
September 2003
This document contains information about HP Fortran for HP Tru64 UNIX
(formerly Compaq UNIX and DIGITAL UNIX) Alpha Systems.
Software Version:
HP Fortran Version 5.5A
Hewlett-Packard Company
Palo Alto, California
© 2003 Hewlett-Packard Development Company, L.P.
Proprietary 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.
Neither HP nor any of its subsidiaries shall be liable for technical or
editorial errors or omissions contained herein. The information in this
document is provided as is without warranty of any kind and is subject
to change without notice. The warranties for HP products are set forth
in the express limited warranty statements accompanying such products.
Nothing herein should be construed as constituting an additional
warranty.
Chapter 1
HP Fortran Version 5.5A Release Notes
This chapter contains the following sections:
1.1 Product Terminology Changes
This document uses the following new or changed product names:
- "HP Fortran" was previously called "Compaq Fortran
90".
- "Compaq Fortran" was previously called "DIGITAL
Fortran 90".
- "HP Fortran 77" was previously called "Compaq
Fortran 77".
- "Compaq Fortran 77" was previously called "DIGITAL
Fortran 77".
- "Compaq Fortran" refers to the combined packaging of the
Compaq Fortran 90 and Compaq Fortran 77 products. It also refers to the
Compaq Fortran language. It is used interchangeably with the name
"HP Fortran".
- Compaq Fortran 90 and Compaq Fortran 77 product version numbers are
now the same.
- The operating system formerly known as "DEC OSF/1" and
"DIGITAL UNIX" is now called "Compaq Tru64 UNIX".
- The Compaq Extended Math Libraries {CXML} was previously called the
DIGITAL Extended Math Libraries {DXML}.
1.2 Overview
HP Fortran conforms to the Fortran 95 Standard, Fortran 90 Standard,
and previous Fortran standards. It also includes support for High
Performance Fortran (HPF), and contains many but not all of HP Fortran
77's extensions to the FORTRAN-77 standard. Except in rare instances, a
valid FORTRAN-77 program is also a valid Fortran 95 program.
HP Fortran fully supports the Fortran 95 Standard (ISO/IEC
1539-1:1997(E)) and the multi-vendor OpenMP Fortran Specification,
including support for directed parallel processing using OpenMP
directives on shared memory multiprocessor systems.
The Compaq Fortran User Manual for Tru64 UNIX and Linux Alpha Systems contains a detailed description of HP Fortran 77
source language compatibility. Provided the types and shapes of the
actual and formal arguments agree, routines compiled with HP Fortran 77
can call (or be called by) routines compiled with HP Fortran.
HP Fortran Version 5.5A requires Version 4.0 (or
later) of the Compaq Tru64 UNIX operating system. Use of non-NUMA
parallel features requires Version 4.0D (or later) of the Compaq Tru64
UNIX system. Use of NUMA (Non-Uniform Memory Access) parallel features
requires Version 5.1 (or later) of the Compaq Tru64 UNIX operating
system.
For a detailed description of the installation procedure, see the
HP Fortran Installation Guide for Tru64 UNIX Systems.
You may also send comments, questions and suggestions about the HP
Fortran product to the following mail address:
Please note that this address is for informational inquiries and is not
a formal support channel.
The HP Fortran home page is located at:
http://www.hp.com/software/fortran/
|
This section describes the contents of HP Fortran Version 5.5A.
The HP Fortran Version 5.5A kit consists of the following setld
sets:
- DFABASE55A---HP Fortran 90 and 77 V5.5A for Compaq Tru64 UNIX Alpha
Systems
- DFADOC55A ---HP Fortran V5.5A Release Notes and Man Page
- DFACOM55A ---HP Fortran V5.5A Tools & their Man Pages
- DFARTL406 ---HP Fortran RTL #406 for Compaq Tru64 UNIX Alpha Systems
- HPFLIBS192---HP Fortran V1.9-2 High Performance Fortran Runtime
Libraries
- XMDCOM520 ---the CXML common subset files
- XMDLIB4520---the CXML archive and shared libraries (serial and
parallel) for EV4 systems
- XMDLIB5520---the CXML archive and shared libraries (serial and
parallel) for EV5 systems
- XMDLIB6520---the CXML archive and shared libraries (serial and
parallel) for EV6 systems
- XMDSCI520 ---the SCIPORT Cray compatibility library and manpages
- XMDMAN520 ---the CXML manpages
- XMDHTM520 ---the CXML manpages in HTML format
The OTABASEnnn---Compiled Code Support Library subset is no longer
included on this kit.
The HP Fortran DFABASE and DFACOM subsets include the HP Fortran 95/90
and HP Fortran 77 compilers and associated documentation. The DFADOC
subset contains the compiler command manpages and release notes.
The XMD subsets contain the CXML routines, included in the HP Fortran
kit as external routines.
CXML is distributed as a Development kit that allows you to link an
application program with the CXML library and then run the executable
image. No license is required. The CXML subsets are independent from
one another, except that the user must link in the CXML library (either
serial or parallel) after linking with the SCIPORT library.
For more information including disk space requirements, see the
HP Fortran Installation Guide for Tru64 UNIX Systems.
If you need to delete an older version of the Fortran Run-Time Library,
delete the older subset before you install a new version. If you have
installed multiple versions of the Run-Time Library and you delete one,
you must reinstall the desired Run-Time Library version before you can
correctly link Fortran programs.
The HP Fortran kit no longer includes the OTABASE subset (Compiled Code
Support Library). The OTA libraries are now available only on the web
from the following URL:
http://h21007.www2.hp.com/dspp/tech/tech_TechSoftwareDetailPage_IDX/
1,1703,5067,00.html
|
The following changes occurred to the OSFCMPLRS operating system subset
starting with Compaq Tru64 UNIX (formerly DIGITAL UNIX) Version 4.0:
- Beginning with DIGITAL UNIX Version 4.0, the OSFCMPLRS subset now
consists of multiple subsets: OSFCMPLRS (required for program
development), OSFSDE (profiling tools), OSFLIBA (archive libraries),
OSFINCLUDE (include files), OSFATOM (
atom
tools).
Version 5.5A is a minor release that includes corrections to
problems discovered since Version 5.5 was released.
For the Version 5.5A subset numbers, see Section 1.4.
The following topics are discussed:
1.5.1 Version 5.5A Corrections
From DFA551 X5.5-2602-48C8L to DFA55A V5.5A-3548-48D88, the following
corrections have been made:
- Fix a number of bugs in UNPACK.
- Bug 2851. Note3136/CF90AU - Defer processing of character length
expression on function definition if it has a forward reference to a
currently unknown module procedure.
- Optimize import by ignoring 'uses' which occur in 'private' modules
where all 'public' symbols belong to the modules itself.
- Change handling of mult_high intrinsic. Require its arguments to be
INTEGER*8.
- Detect unknown, unprintable character in lexeme.
- Fix for allocation of module level symbols, particularly with
equivalence.
- bug2853.f90 When context is cray fortran pointee, scalar or array -
accept external function or subroutine.
- Fix for alignment of MODULE data.
- Suppress multiple non-standard tab formatting warnings in a program
unit.
- Fix SIZE intrinsic when used with the optional DIM argument. Skip
over those parts of array expressions that do not contribute to the
SHAPE. Example: SIZE(A(2,4,6:10),1) must get the value 5. FORTRAN note
3134.1
- Bug2856: Accept !dec$ attributes no_arg_check in interface blocks
and contained procedures. Disable check for scalar/array arg
compatibility if arg has no_arg_check attribute.
- Bug2858. Prevent skipping to end of line on a '!' ikn C-style
escape strings.
- Allow multiple incarnations of derived type/fields, i.e. for each
module procedure.
- Allow KIND parameter of following intrinsics to be INTEGER*1 thru
*8 instead of requiring default integer: aint, anint, ceiling, char,
cmplx, floor, int, logical, nint, real.
- Bug2860. Derived-type/structure references with dots and percents.
- Improve performance of module import in interface blocks.
- Bug2862. Fix overloading: public sin; interface sin; function sin
in module. Fix passing 'sin' as argument of call where 'sin' imported
from above module and also from second module with specific having
different characteristics.
- Fix another case where we CALL a FUNCTION (with awkward function
return value).
- Note 3159. Bug2865. Fix bad code.
- Process optional KIND argument of ICHAR intrinsic.
- Bug2872. Exclude from exported module those imported symbols which
are not used; are not in name_list; have no initial values; are not in
only list; are not renamed. Problem is that when a module variable
matches a dummy argument in the using code - there is not enough
context to eliminate the import.
- Assign 'ANINT' as generic function associated with QNINT.
- FIX SIZE= with ADVAVCE='YES'.
- Modify text for message 563 (CVF19095). POINTER component following
array component.
- We need to get upper bound information for expressions like: C(i:),
especially when requesting bounds checking. This is when "C" is
character*(*) dummy argument, but other cases are possible. More rare
than it sounds! CVF18791.
- Fix various problems with array constructors with allocatable
components. CVF18807.
- Allow .XOR. to be user (re)defined for two logical operands.
bug2882.f90
- Fixed FORTRAN:3074 - Added support for 64-bit addressed strings.
- Bug2883 - force evaluation of triplet subscript components.
- Bug2869. Having found a valid module procedure reference, check to
see if there is another entry by same name with the EXTERNAL attribute.
This takes precedence.
- Bugs 2879 and bug2880 Issue standard warnings for too many
continuations.
- Bug2881.f Issue non-standard diagnostics for array constructor
character elements of differing lengths.
- Fix bug: data s.r2.r3.i /1/
- Bug2887. Allow constant array elements in array constructors: data
a,b/x(1),p(3,4)/ where x and p are parameters.
- Bug2885.f90 Free form, character string continuation. Must skip
over continuation character and not include it in string.
- bug2886.f Fix private.meas(1).gotit = 1 .
- bug2891 Relax requirement the format items in format list be
separated by delimiters.
- Bug2892.f. Allow all combinations of "w.d" in format specs to be
optional. Retain standard checking.
- Bug 2897 - note 3183. Change variable type from INTEGER*16 to *32
to accomodate indices >= 32767.
- Bug2895. When checking if symbol is in common, check also to see if
it is equivalenced to common (named and blank).
- Improve MODULE debug information.
- Bug2899 - diagnose calls to non-pure intrinsics from pure procedure.
- bug2900 - diagnose dummy arguments of pure functions which have
intent(out) or intent(inout) .
- bug2904 - include zero-size test when checking for missing length
specification or '*' length.
- bug2907. Issue standard warning for recursive reference to pure
function when no RESULT clause given.
- Bug2910 - Allow common block names, un-enclosed in slashes to be
specified in ms_attributes C,ALIAS and DEFAULT directives.
- Bug1189. Allow name conflict between use_associated name and local
name provided the procedure does not reference the name.
- bug1024.f90 - Diagnose references to hpf library routines on all
platforms other than alpha unix - message 1877
- Allow cray pointers/pointees to be made public/private 81/41 =A;
82/41 =A . Bug2913.
- Fix grammar in message 1875
- Bug2921.f90 ; accept attributes alias,extern and attributes
extern,alias.
- Bug 2917. Diagnose missing end on program/procedure.
- Issue non-standard warning for forward reference to derived type.
- bug2924. Recognize result value storage association for multiple
entry points. No messages if result types match even if no explicit
result assigned.
- Handle: real a(5); !dec$ attributes c,extern::a; end
- When checking for COMMON (to determine if shared) check common
block (which is stGLOBAL) as well as variables which are in COMMON.
Also - check for data with initial values.
- bug2926 - Allocate blank common variables in program unit following
imported blank common. Day 1 bug. If a use statement imported blank
common, the local blank common was simply ignored.
- Bug2925 - Diagnose use of statement function in specification
expression. Add message 1884. Bug2925. Diagnose use of statement
function in specification expression.
- Bug2929. Fix the initialization of temporaries to store bounds
expressions for multiple entry points.
- Fixed Fortran:3205.
- Fix problem with a type constructor with a character array argument
whose elements are different lengths than those required by the TYPE.
Example is id=id_data((/"x","y","z"/)) where id_data has a character
array where each element is length 20. From nagf95-f74.f90.
- Bug2931. Diagnose missing private attribute on derived type which
has a user-type component which is private. (Standard switch only). Add
message 1885.
- bug2932 Diagnose reference to array names or cross sections as
operands of UNIT or FILE arguments of OPEN and CLOSE statements.
- Change message 1886. Bug2932. "UNIT and FILE arguments to OPEN and
CLOSE statements must be scalars and not arrays".
- Bug2935. Be more rigorous in diagnosing/confirming types which are
implicitly declared on parameter statements and then explicitly
declared with type statements.
- Bug2941. Allow parenthesized integer expression as unit specifier
for I/O statements.
- Return value for selected_int_kind(i) should be one for i <= 2
(all negative values).
- Fix offset problem with structure constructor. This comes from
Fortran note 3228.
- Fix various problems with DO loop variables not getting made
PRIVATE inside parallel regions.
- Do not assert when array length is zero (testing for overlap).
- Check if repeat count is non-zero before issuing diagnostic about
having too many data values. Issue standard warning for
multiple/overlapping data initialization of same location.
- bug2947. Diagnose AGOTO reference to format label.
- bug2794.f90 Diagnose parenthesized format specifiers in print and
accept statements.
- Numerous fixes for an allocatable dummy argument which is
intent(in), especially where the array is type character(*)
(bug2944.f90).)
- Bug2951 - Diagnose the passing of an procedure argument, not
specified as PURE, to a procedure requiring it to be PURE.
- Bug 2954. Issue diagnostic for use of 'record/type' name in context
which makes it look like a function or array reference.
- Bug2955. FIX ".not..and." problem.
- Note3248. Bug2957.f90 . Replace empty argument (originating from
adjacent commas) by integer 0. (VAX fortran feature).
- Bug2958 Allow '0' in column 6, fixed form dir, omp, dec directives.
- bug2962 - Issue non-standard warnings for allocatable functions and
dummies. Add error messages 1893 and 1894.
- bug2963. Fixed form ends in col 72 or 132, not 1 before.
- bug2961 - Eliminate useless reference to standard rule in message
9. (R730.4 - R730 is 'initialization-expr')
- Reword message 371 to say 'may have' vs 'has' occurred when issuing
diagnostic for a reference to a label to within an 'if' or 'do' block.
- Report on disallowed directives uniformly, i.e. with an
informational message rather than a warning or error.
- The HPF man pages were updated to reflect its usage with MPI
instead of PSE.
- Disallowed directives now get informational message rather than a
warning or an error.
- Bug2965 - Imported blank common blocks are not extended by local
blank common, nor do they extend local blank common.
- Bug2966 - Recognize 'time' as keyword for arg of intrinsic
procedure CPU_TIME(time=real).
- Fortran note 3259 - When the "-D" command-line option was used, the
text of the option was being saved incorrectly.
- Allow -Dfoo from the command line, meaning "define foo to be the
null string".
- Fortran note 3262 - Fix a bug in USE processing.
- Allow -DFOO=letters as a valid macro definition. This is the same
as -DFOO="letters" but without the quotes.
- When promoting parameter argument do not change the type of symbols
which have an explicit kind.
- Fix parsing bug that appeared when '0' found in column 6 of an
OpenMP directive.
- Fortran note 3252 - Fix optimizer error: Compiler internal error
- Fortran note 3253 - Fix optimizer error: Wrong answers with
-transform_loops
- Fortran note 3264 - The compiler dies at compile-time with the
message "**Internal compiler error: internal abort**" in some codes
that use MODULEs with PUBLIC and PRIVATE data.
1.5.3 Version 5.5 ECO 1 Corrections
Capturing error numbers after OPEN has some complications. The
recommended method is to use IOSTAT= and ERR= on the OPEN. ERRSNS
returns the UNIX error number after OPEN. IERRNO returns some butg not
all UNIX error numbers, depending on the failure. IOSTAT= is the more
reliable way to diagnose an error on OPEN.
From DFA550 V5.5-1877-48BBF to DFA551 X5.5-2602-48C8L, the following
corrections have been made:
- If -nowarn, suppress informationals too.
- bug2699.f90 Another structure 'dot' problem where rewriting tree in
correct precedence had a bug.
- Bug2710.f IMPLICIT($) conflict.
- When diagnosing unprintable strings, use '?'.
- Detect unknown, unprintable character in lexeme.
- Bug2713 - Allow '* -' adjacent operators with -std switch.
- bug2715. Honor '-names as_is' option when initializing character
table. Honor '-names as_is' when deriving implicit type of character.
- Bug2716. Elim diag for use of boz constants as initializers in type
statements; issue warning if -std switch set.
- Bug2717. Diagnose mismatch between scalar actual arg and array
vector arg.
- At routine exit be more selective with deleting allocatable record
components. In particular, avoid records declared SAVE, STATIC, or
module record variables. CVF16613.
- Avoid Integrity check when passing a large (more than IMAX)
structure by value (when the POINTER to the structure is passed,
actually).
- Spell allocated correctly in error message.
- Allow ASSIGN 10 to FNAME where FNAME is the current function name.
- Bug2718.f90 ; message 1837
- Bug2725 Unary minus(kind constant).
- Promote arguments to KISHFTC to integer*8. CVF16757
- Fix ISHC with integer*8 arguments. CVF16757
- Allow bktest to be passed as actual argument.
- bug2731. Sort out multiple use of identifiers as
vax-structures/f90-derived_types and other use with and without
standard switch.
- bug2727.f90 Associate 'type' determined from assignment context to
typeless parameter constant.
- Although LOG and LOG10 are NOT specific intrinsic names, allow them
to be passed as actual arguments. This is equivalent to passing ALOG
and ALOG10, respectively.
- Explicitly encode required type for second argument of DCMPLX and
QCMPLX . bug2747.
- Correct wording of diagnostic 1203. Add new diagnostic 1839 for
bug2746. Diagnose (error vs warning) case ranges where low not\ less
than high in low:high construct.
- Make ANINT generic; make ANINT and DNINT specifics of ANINT.
Formerly ANINT and DNINT were incorrectly specifics of NINT.
- Replace 'syntax error' message by 'FROM and TO arguments of MVBITS
must have the same type and kind parameters'.
- Bug2752. Diagnose invalid use of character string or hollerith
string in arithmetic context if standard switch is set.
- When an actual array argument needs to be copied (to make it
contiguous), and when the user has requested /check:arg_temp_created,
the message that the user sees may be corrupted OR the compilation may
mysteriously\ die. The attempt to put out a zero character after the
name of the called routine ends up dropping the zero one character too
far, just BEYOND the string. This causes memory corruption at compile
time, and (at least) one EXTRA character after the name of the called
routine in the warning message.
- Bug2758 - allow the use of a kind_constant parameter in statement
function expressions... i.e. standard rule 1226.5 does not apply.
- Get better locator information for ASSIGNED GOTO variable.
- Fix bug with not-present optional argument used in pure
specification function. bug2764
- bug2762. Issue standard warning for 'comma' between read/write i/O
specs and iolist.
- When calling an intrinsic that needs to know the size of the
default integer kind, make sure that we look at the effects of !DEC$
INTEGER and/or OPTIONS /[NO]I4. BUG2766.
- Never automatically deallocate allocatable components of dummy
arguments upon routine exit, even when they are automatically
"initialized" upon entry (OUT, but not IN intent). CVF17609.
- Several fixes for allocatable dummy arguments, mostly for
INTENT(OUT). The fixes are: DEALLOCATE an ALLOCATABLE dummy argument
(if allocated, and INTENT(OUT)) in the prolog of the routine; Allow
ALLOCATABLE dummy arguments in ENTRY points (same treatment as for
routines); Only do this deallocation for routines/entry points where
the argument is present.
- Shorten long created external names, giving a new warning. This
comes up most easily with a long Subroutine/Function name within a long
Module name. Notice that the maximum name length depends upon the
target platform (linker). bug2410.
- Bug2793. Allow pointer components of derived types to be
initialized with NULL().
- Bug2795. Fix typo in analysis of MATMUL arguments. Pick up left
argument, then right argument and not right argument twice.
- Bug2794. Disallow parens in print statement, ala: print (...) .
- Major work on ASSOCIATED. Handle strings of zero length, avoid
integrity checks, etc.
- Prevent I/O loop collapsing when there are VFEs in the FORMAT.
- Bug 2796. No statments, including FORMAT and DATA statements, may
appear between SELECT statement first CASE statement.
- Bug2803.f90 Elim standard check for what is an unconditional error,
i.e. Data x /O"5"*100/ - 'An integer data type is requird in this
context'.
- Bug 2810. Allow KIQINT and KIQNNT to be passed as arguments.
- bug2807. Generate error 1847: 'Allocatable fields of derived types
are non-standard'.
- Bug2808.f90 . Issue non-standard warning for use of a non-intrinsic
elemental procedure as an actual argument. New diagnostic. 1848 'A
non-intrinsic elemental procedure shall not be used as an actual
argument'.
- Bug2819.f Do not promote function with explicit INTRINSIC to
external; diagnose and disallow if referenced with incorrect arg
type(s).
- Bug2817. With standard checking impose restriction that length for
statement function character dummies be initialization expressions.
- Bug2798, bug2105 and all recent analysis dealing with
initialization/ specification expressions and standard enforcement.
- Bug2822. Diagnose use of optional dummy argument as actual DIM
argument to ubound, lbound, all, any and count intrinsics.
- Fixed OMP loop index privitization bug. FORTRAN Note 3093.
- Bug2844. Diag 1851 - If dummy arg is allocatable, actual arg must
be a whole array and not a section.
- Bug2847. Diag 1853 - An assumed-size array shall not be written as
a whole array reference except as an actual argument in a procedure
reference for which the shape is not required. Also - rewrite diag 364 .
- Bug2846. Diag 1852 - The use of a scalar in a structure constructor
for an allocatable array component is not allowed.
- Bug2846. Diagnose the use of a scalar constant in a structure
constructor for an allocatable array component.
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
- f90 V5.5 contains the initial work to support allocatable
components of derived types.
- OpenMP enhancements: support for nested OpenMP parallel regions,
and added support for the num_threads clause which selects the number
of threads a parallel region will use based on a run time expression.
- Notice a difference between the Fortran 95 standard feature of
initialized derived types and the VAX Fortran extension of initialized
STRUCTUREs: initialized derived types are not SAVEd by default;
initialized STRUCTUREs are.
- Improved algorithm for making inlining decisions that will tend to
do more inlining, especially when many small routines are inlined into
one another.
- Improvements to general optimizer: prefetching, software
pipelining, strength, pulling branches out of loops, allowing more
existing optimizations to fire.
- Parallel programs running on Non-Uniform Memory Access (NUMA)
machines using the following directives, compiler options, and
environment variables is available but unsupported:
- !DEC$ MIGRATE_NEXT_TOUCH
- !DEC$ MIGRATE_NEXT_TOUCH_NOPRESERVE
- !DEC$ OMP NUMA
- !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE
- !DEC$ ALIGN - same as !HPF$ ALIGN
-numa
Fortran 90 only. Enables NUMA parallel processing and the NUMA
command line options -numa_memories and -numa_tpm. NUMA paral-
lel processing is indicated by inserting certain !DEC$ direc-
tives in your source code. Option -omp must also be specified.
The default is -nonuma.
-numa_memories num
Fortran 90 only. Specifies the number of memories (RADs) to be
used for NUMA parallel processing. Option -numa must also be
specified. If -numa_memories does not appear on the command
line or if num is 0, the number of memories will be chosen at
run-time either from the NUMA_MEMORIES environment variable (if
it is set) or by the system.
-numa_tpm num
Fortran 90 only. Specifies the number of threads per memory to
be used for NUMA parallel processing. Option -numa must also
be specified. num is the number of threads per physical memory
that will execute NUMA parallel features in the program. If
-numa_tpm does not appear on the command line or if num is 0,
the number of threads per memory will be chosen at run-time
either from the NUMA_TPM environment variable (if it is set) or
by the system.
|
The "Parallel Processing on Tru64 UNIX Systems" manual that
describes NUMA parallel processing in Compaq Fortran is available after
installation in /usr/lib/cmplrs/fort90/fort55_parallel_manual.ps .
- The following new
f90
command options are now supported. See the f90(1) man page for details.
- Nothing new in this version.
-
-hpf_target pse
is no longer supported.
- The following new run-time features are now supported:
- Nothing new in this version.
- See the new features listed in Section 1.7.1 (Version v5.4A ECO #1 New Features)
- The Compaq Extended Math Library (CXML) routines are unchanged in
the Compaq Fortran kit. See the CXML release notes in:
/usr/opt/XMDCOM410/docs/XMD410_release_note.txt
1.5.5 Version 5.5 Important Information
Some important information to note about this release:
- As of Compaq Fortran V5.3, the
f77
command executes the Compaq Fortran 90 compiler instead of the Compaq
Fortran 77 compiler. Use
f77 -old_f77
to execute the Compaq Fortran 77 compiler.
- Object files created by Fortran 95 contain information about when
they were compiled and by what version of the compiler. Use the command
strings -a xxx.o | grep "@(.)"
|
where
xxx.o
is the name of the object file. The strings generated by the compiler
are
- "(#)tttt" is a what(1) string with the text from a cDEC$ IDENT
directive if present.
- "@(c)Compaq Fortran Vn.n-eeee" is the version number of the Fortran
95 compiler that generated this object file.
- "@(m)xxx" is the name of the first program unit in the source used
to produce this object file.
- "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this object file
was created.
1.5.6 Version 5.5 Corrections
From DFA542 ECO #1 X5.4A-1684-46B5P to DFA550 FT1 T5.5-1736-48B88, the
following corrections have been made:
- Fix UNIX driver to diagnose -fpscomp with no argument.
- Allow 'null()' in structure constructors to initialize allocatable
fields.
- Accept and promote SUBRNAME/FUNCNAME symbols previously defined in
interface blocks as module procedures.
- Reset NUM_THREADS to NULL when processing a !$OMP PARALLEL
directive.
- Allow NUM_THREADS clause on an !$OMP PARALLEL SECTIONS directive.
- Resolve references to derived type fields by combining visibility
of various pieces of the hierarchy from different modules.
- Treat hex/oct - typeless constants as int8 when used as args of
call on 64-bit processors; when typeless constant parameters are used,
force to int8 and not to default integer type.
- Handle initialization of fields of structures of the form: type ::
variable = constant
- Diagnose attempt to initialize a scalar field with an array.
- Give a fatal error when NUM_THREADS is a constant value .le. zero.
- Add error message 1830: "Multiple OMP NUM_THREADS clauses in a
parallel region are not allowed".
- Possible to get wrong answer when MAX or MIN references an optional
argument.
- Begin generating MODULE debug information.
- Significantly improve compilation time for certain large (and
usually machine-generated) programs when uninitialized variable
detection is not selected and optimization level is 0.
From DFA550 FT1 T5.5-1736-48B88 to DFA550 FT2 T5.5-1775-48B9D, the
following corrections have been made:
- Additional (re)initialization to fix internal compiler errors when
compiling with /separate_compilation on vms.
- Additional (re)initialization to fix internal compiler errors when
the same file appears twice on command line.
- Correctly associate defined assignment generic procedures.
- Give -std warning for adjacent operators even if operand is numeric.
- When terminating a compilation because of too many diagnostics of a
given severity, msg_report would try to append an "s" to a string in
read-only memory. Manipulate a local character buffer instead.
- Add more module debugging information.
- Resolve one more conflict resulting from overloading of 'dot' as
field separator and as dotted_operator delimiter, when the field name
matches operator name, e.g. 'LT'.
- Treat 'optional' arguments as 'matching' arguments when comparing
generic specifications.
- We need to mark variables in a CRITICAL directive (both -mp and
-omp) as VOLATILE_READS and VOLATILE_WRITES.
- Add new error messages: 1831 - 'List directed ENCODE/DECODE not
supported'; and 1832 - 'Greater than 7 dimensions is non-standard'
- With standard switch - warn about use of greater than 7 dimensions.
- Disallow list directed ENCODE/DECODE.
- Enhance debug output for automatic interface generation.
From DFA550 FT2 T5.5-1775-48B9D to DFA550 V5.5-1877-48BBF, the
following corrections have been made:
- Fix CVF15588. ICE when passing a non-contiguous array with -check
bounds.
- Fix BUG2658. Nested WHERE with different data types can get ICE
when we put out an IAND without converting one of the data types. The
bug does NOT happen with a WHERE in a FORALL.
- Note 2953. Bug2661.f90. Correct alignment computations for unions.
Align each 'map' component to most demanding component.
- Change message about unused statement functions from warning to
info. Note 2954. Bug 2662.
- CVF15596. Determine correctly the length of a character function
that uses intrinsics.
- Bug2663. Note 15459. Fix incorrect handling of intrinsics in
SUBSTRS. Recognize possibility of null string in array constructors.
- CVF 15569. Make sure record/structure types of common variables are
exported {recursively}.
- Bug2665.f bug bug2666.f90 When dummy argument of procedure in an
interface block is an undetermined procedure (subroutine or function) -
issue diagnostic if the procedure is referenced with an actual array
arg.
- Bug2664.f90 - diagnose name which is both a pointee and a common
variable, regardless of which specification comes first.
- Bug2668.f90, Note 2959. Resolve symbols in bounds expressions even
if PRIVATE.
- Implement feature, under switch control, which causes all quoted
strings to be interpreted as 'c-strings', i.e. having trailing binary
null character; and which may contain escape sequences.
- Bug2667. Issue diagnostic for reference to function result field
outside its host associated scope: 'Use of this function name is not
valid in this context'.
- Bug2672.f90 Detect 'rename' when resolving intrinsic function
references.
- Issue message indicating conflict between identical names from
different modules - one generic and one specific.
- Cvf15747. Another place where "." was not equivalent to "%" in a
field reference.
- Bug2673. Elim erroneous diag of common equivalences.
- -fast => -assume cc_omp (unix driver only). DFB3612. {should
only happen if -omp is present}
- Bug2678.f90 . Recognize the fact that a record constructor does not
contain only constants but contains variable(s) as well.
- Support allocatable components of records. The changes support
assignment, automatic deallocation of locals at end of routine,
structure constructors, et. al. The biggest piece of code relates to
assignment, where we do nested deallocation/ allocation on where the
LHS contains allocatable components which are either not yet allocated
or allocated to a different size from the RHS.
- FORTRAN Note 2977. Enable code which inhibits reload of imported
module which has neither ONLYs nor renames.
- Allow inquire(iolength=l) for pointer and allocatable array fields.
- Improve handling of bad source line, free form, having only a
number of 10-digit integers. Use max of 5 digits in label construction.
- Refine test for complex number.
- Make initialized VAX structures SAVE but initialized DT not SAVEd.
- bug2680.f90 - Walk components of array constructor and if typeless
and untyped, attach type to components and to constructor. Inhibit
generation of diag for use of typeless constant in an array constructor
where there is one or more elements which are not typeless.
- When importing generic names and looking to see if name matches an
intrinsic, used renamed string, if any. bug2690.
- bug2691.f One more conflict resulting from overloading of 'dot' as
field separator and as dotted_operator delimeter.
- Bug2688.f90 For associated intrinsic - check attributes of
component of derived_type/vax_structure for pointer/target properties,
as well as of simple operand.
- Prevent using declaring module field as in if null, as for blank
common block entries. Bug2695
- Bug2689. Add diagnostic 1835: "Record fields or array elements or
sections of pointers are not themselves pointers." For associated
intrinsic - disallow use of array elements or array cross-sections or
fields of pointer records as 'pointer' operand. Issue diagnostics.
- bug2691.f Maintain left to right precedence in trees originating
from overloaded use of dot operator
- bug2697.f Compute array descriptors and record sizes as function
of platform.
- -fast => -assume cc_omp only when -omp seen. See FORTRAN 2999.
The following known problems exist with Compaq Fortran Version 5.5:
- The following is a list of known problems for
-omp
and
-mp
parallel support in Version 5.5:
- Global variables referenced by statement functions inside parallel
regions should not reference local instances of those variable names.
The following example should print 42.0 {10 times} instead of 0.0:
real x,y(10)
statement(a) = a + x
x = 41.0
!$par parallel local(x)
x = -1.0
!$par pdo local(i)
do i=1,10
y(i) = statement(1.0)
end do
!$par end parallel
type *,y
end
|
- Please note that
-warn decl
gives an error level message, not a warning level message.
- When using Ladebug with certain versions of the UNIX operating
system, be aware that a trailing underscore may be needed to display
module variables. For example, to display variable X in module MOD, if
typing
print $mod$x$
does not display the variable's value, type:
1.6 Known Limitations
The following limitations exist in Version 5.5A:
- When using the
-omp
or
-mp
options, if you declare a parallel DO loop which accesses an INTEGER*1
array (one element at a time), the results may not be correct unless
you also specify
-granularity byte
. In general, if a parallel loop tries to store things of "small" size
into packed spaces, the granularity needs to be set to that size.
However, while this "fixes" the program to do the right thing, it is a
dreadful performance slowdown. It would be better to execute such code
serially.
- If you specify the
-hpf
(or
-wsf
) option to request parallel processing, the following Compaq Fortran
language features are not supported:
- REAL (KIND=16) (same as REAL*16) data type
- Compaq Fortran 77 implementation of CRAY-style pointers
- Variable format expressions (VFEs). For example:
- Initialization of Compaq Fortran 77 structures. For example:
STRUCTURE /S/
INTEGER I / 100 /
END STRUCTURE
|
1.7 New Features, Corrections, and Known Problems in Version 5.4
Version v5.4A ECO #1 is a minor release that includes corrections to
problems discovered since Version 5.4A was released and certain new
features.
The following topics are discussed:
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
- Modify the way that complex (and double complex) arguments are
passed (and received) by value. This is an INCOMPATIBLE CHANGE. Old
objects/libraries will NOT work with new. The end result is that on ALL
platforms we will pass a complex (or double complex) as two real (or
double) values when the user requests passing by value.
- An undefined compile time variable in an expression now has the
value 0.
- Initialized records are re-initialized at every entry point.
- COUNT and ZEXT now allow optional 'KIND' argument.
- The IF DEFINED directive is documented in the LRM so that IF .NOT.
DEFINED(...) isn't allowed; but it is. DEFINED is like a logical
function and can be part of the expr in IF (expr)... .
From DFA541 V5.4A-1472-46B2F to DFA542 X5.4A-1684-46B5P, the following
corrections have been made:
- Fix incorrect processing of %fill(lb:ub).
- For otherwise unattributed parameter, assign to it the type of its
value (where, typeless constant value defaults to default-type-integer).
- 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.
- Do platform-specific diagnostics for open keyword specifiers.
- 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.
- Fix problem that resulted in incorrect warnings about RESHAPE
function and the size of the ORDER argument.
- Accept 'character*(length) %fill' without '::' separating
type/entity.
- In the Unix driver, don't link against libexc if the user is
compiling multi-threaded. When they compile multi-threaded, cc
automatically adds it in the correct place in the "lineup".
- Implement ALIGN=xx values consistently. Also, support ALIGN=PAGE on
all platforms (which is new) and set the alignment to whatever a "page"
means on that platform.
- Generate better debug information for dummy arguments which are
subroutines or functions. In particular, make a dummy argument which is
a subroutine look like a subroutine instead of a function. In addition,
if there is an INTERFACE specification for the dummy routine, put out
information about the arguments. For example:
SUBROUTINE FOO(BAR)
INTERFACE FUNCTION BAR(X,I)
DOUBLE PRECISION X
INTEGER I
END FUNCTION
END INTERFACE
...
END
|
We will now provide debug information for the arguments X and I.
- Collect ALL generic entries for a name from the set generated
during import. Multiple modules may validly contain generic
specifications for a single symbol.
- Process fpscomp options general and ldio_spacing in a left-to-right
order.
- Fix SIZE(A,DIM) where DIM is an optional argument.
- Correctly diagnose an incorrect number of arguments in a structure
constructor.
- Allow MAX and MIN to have optional arguments.
- Optimize module importing when 'use' occurs within interface blocks.
- Modify the way that complex (and double complex) arguments are
passed (and received) by value. This is an INCOMPATIBLE CHANGE. Old
objects/libraries will NOT work with new. The end result is that on ALL
platforms we will pass a complex (or double complex) as two real (or
double) values when the user requests passing by value. This will also
happen when the user requests that the routine have a "C" calling
standard. There are two motivations for this incompatible change: the
Alpha Calling Standard changed and the C++ standard is going to
introduce a COMPLEX data type, which will be implemented according to
the Alpha Calling Standard.
- Mark the array descriptor for an explicitly shaped array function
result as quadword aligned.
- Ignore migrate directives if -omp and -numa are not set.
- Treat use of undefined compile time variable in expression as
integer with value 0. Do not diagnose.
- Get debugging information put out at all (appropriate) ENTRY
points. In particular, put out prolog code for dynamic array bounds for
array dummy arguments and for f90 automatic arrays. Before this edit,
we were only putting out prolog code at the FIRST entry point
referencing the array as an argument (or the subroutine/function for
the case of an f90 automatic array).
- Handle generic defined operator, merging specifics from multiple
modules; honoring 'only' defined operator.
- VAX structures like F90 defined types.
- Fix bug in WHERE in FORALL where WHERE mask contains a call to an
elemental function.
- Initialized records need to be re-initialized at every entry point.
With edit 1213 we changed our handling of initialized records to give
them the SAVE attribute. This was in keeping with long-standing f77
practice and documentation. However, Fortran-95 prescribes that local
initialized defined-types (records) be initialized every time into a
routine. This requires a documentation change (to SAVE).
- Fix generated code for optional arguments to SELECTED_REAL_KIND.
- Recognize match between actual 'procedure' argument with pointer
attribute and dummy 'procedure' argument with pointer attribute.
- Accept a VAX scalar field name reference (x.y) where x currently
known as parameter object of structure type.
- Recognize renamed generic in 'use' where there also is an 'only'
clause.
- COUNT and ZEXT now allow optional 'KIND' argument.
- Get the LOCATOR correct for all ENTRY SYMBOLs. Debugging problem.
- Do NOT evaluate the argument to any numeric inquiry function (like
HUGE).
- Make actual argument which is a function returning a scalar pointer
work correctly.
- Fix access to module from path specified on command line.
- Array passing optimization was not working correctly for assumed
shape arrays being passed as explicit arrays.
1.7.2 Version 5.4A New Features
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
- When
-fast -std
is specified {using any of the
-std*
options, the
-align
options
dcommon
and
sequence
will not be set.
-
-hpf n
is now the preferred spelling for
-wsf n
.
From DFA540 V5.4-1265-46ABA to DFA541 V5.4A-1472-46B2F, the following
corrections have been made:
- Allow Sequence/Nosequence directives on fields of derived types
with -hpf, whether or not numa switch is set.
- Add diag :"The NOSEQUENCE directive may not be specified for a
component of a derived type which has the SEQUENCE attribute.",
- Issue diag if NOSEQUENCE directives are applied to fields of
'sequence' derived types.
- Use new RTL routine, for_check_mult_overflow(), to calculate the
size of an array to be allocated, passing flag returned to
for_allocate().
- Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC et al. The
mask has an expression for the dimension bound(s).
- Allow, without assertion violation - subroutines generated by
transform to be ignored during export.
- When a psect becomes too big, give a better error message:
ME_STOREQEXC "Psect !AD is too large. Reduce array sizes or make arrays
AUTOMATIC or ALLOCATABLE."
- Allow character substring assignment in forall.
- Export intrinsic function which is a module generic if it is
referenced.
- Make -fast set the align_dcommons bit. The effect is ONLY on the
listing (the code was already doing correct alignment; only the listing
was incorrect).
- Make much better locators when debugging programs with adjustably
dimensioned arrays.
- Deal with PRIVATE fields of a type that is not PRIVATE.
- Fix several problems with nested modules with rename and only.
- When exporting function/subroutines, walk 'used' parameter list and
collect those derived types which are needed, i.e. add to export list.
(Similar to collecting types of dummy args for export).
- Fix regression in inline_sizeof.
- Call foo(NINT) should pass JNINT instead of ININT.
- Add support for passing KIDNNT, KNINT and IQNINT as actual
arguments on Unix platforms.
- Passing IDINT should use integer*4 instead of integer*2 routine
names.
- Issue diagnostic for character string as arg to RECL= in OPEN
statement.
- If substring index in a FORALL assignment stmt uses one of the
indexing variables, need to calculate size differently, otherwise get
used before defined problems.
- Walk dummy arguments as well function result, parameters and
globals used as bound variables to pick up for export 'record types'
which are not otherwise used in module procedure.
- Fix problem with -warn truncated.
- If the argument to DFOR$PREFETCHxxx is any real or complex type,
use that type on the PREFETCH tuple. All other types continue to use
INT32.
- Diagnose prefetch arguments which are not variables, array element
references or structure component references.
- Diagnose missing intent attributes on pure (explicitly or
implicitly if elemental) subroutine args which are neither pointers nor
procedures.
- Diagnose mask expressions with incompatible shapes in where
constructs and contained where/elsewheres.
- Relax strict statement/token construction if errors encountered
while processing cdec directive 'if' or 'elseif' .
- When terminating nested do loops/constructs, recognize and process
OMP END DO.
- Impose standard restriction that defined-operator names consist
only of letters.
- Correctly pass complex by value on Alpha platforms. This fix makes
us follow the Alpha calling standard. Note: This is an INCOMPATIBLE
change.
- Allow -fpscomp [no]ldio_spacing.
- -fpscomp:general => -fpscomp:ldio_spacing.
- Handle leading 0s in subscript constants.
- Fix problem with dot as field separator.
- For default complex, special case ccos, cexp, clog, csin, csqrt to
be type of arg; similarly for default real type, special case alog,
alog10
- Fix inquire with IOLENGTH=FIELD%NAME or array element.
- Array in derived type and explicit-shaped array slices now avoids
temp creation and copy-in/copy-out when passing arrays.
- Do not diagnose fields of private types as inaccessible within the
defining module, just outside the module.
- Disallow ALLOW_NULL/REFERENCE attributes with assumed shape arrays.
- Make fields having a PRIVATE derived type invisible.
- Allow dummy args to be used as args to inquiry intrinsics in
specification statements without requiring intent IN. Force private
module variables used in specification statements of a procedure, even
as args to inquiry intrinsics, to be exported.
- Allow NUM_THREADS clause in a PARALLEL directive. This already was
handled properly in a PARALLELDO directive.
- Fix problem with FORALL masks with -integer_size 64.
- Alphabetize annotations, fpscomp options.
- When putting out a null for a not present optional argument, get
the arg position correct.
- Fix code in forall/elsewhere processing.
- Alphabetize show, warnings options. Restrict -warn hpf to unix.
- If /fpscomp:general, and STATUS omitted from OPEN, supply "default"
code rather than "new" or "unknown", because FPS had its own rule for
this that doesn't match what
- If not 'renamed' force the loading of generic/specific declaration
record whose generic name appears in source; resulting in the
collecting of individual specifics from different modules.
- Detect and diagnose illegal value in octal/hex/binary constant when
used as operand to unary operator
- Accept '$' at the end of a range of letters in the implicit
statement.
- Allow -hpf [n] on unix; treat like -wsf [n].
- Speed up compiling DATA initialization statements.
- For -assume dummy_alias, make all COMMON block variables and Module
variables always work.
- Change error code for edit 1396. Make 1813. 'ALLOW_NULL and
REFERENCE attribute pair is disallowed with assumed shape arrays.'
- When detecting end of statement function acceptability, and sitting
on array element/section assignment, conclude function result-variable
processing to make variable available to statement in progress.
- Consider duplicate if 'optional arg' specs match and if all
non-optional arg specs match.
- Fix PACK when the MASK is .FALSE. (or when the MASK is a scalar
expression whose value is not known at compile time).
- Fix "mapped" pointee checking problem. The code which attempts to
deliver an error when a pointee is HPF "mapped" cannot handle array
pointees.
- Fix INTEGER x(10), y(10); DATA x(1:10) /1/; DATA y/10*0/; END
- Integer*8 fixes for selected_xx_kind, passing integers, and added
for_kdate entry point.
- Within a procedure in a 'contain' scope, identify
<type-function-name> strings as type statements and not as
function definitions.
- To conditionally diagnose non-standard, calculable, recursive use
in type-parameter specification, of symbol being defined . CHARACTER ::
C(10)*(SIZE(C,1))
- Detect and diagnose the assignment to a function result of external
procedure, and not to function result of current
- Diagnose instead of generating assertion violation, non-calculable,
recursive use in bounds specification, of symbol being defined. INTEGER
:: A(KIND(A)),G(BIT_SIZE(G)),I(DIGITS(I)).
- Allow recursive reference to parameter by inquiry functions in
initialization expression if query is about known property. TYPE
PARAMETER :: EP = BIT_SIZE(EP), HP = DIGITS(HP), XP = EPSILON(XP) .
- Cause front end to generate warning diagnostics for integer
overflow, i.e. when I4 computation exceeds I4 capacity.
- Issue error for previously undiagnosed VOLATILE/PARAMETER
declaration.
- If -fast is set *and* -standard (however it's spelled) is set,
don't set the non-standard switches such as -align dcommons and -align
sequence.
- Improve instruction scheduling {SLOT4}.
1.7.3 Version 5.4 New Features
The following new Compaq Fortran features are now supported:
- The following new features are now supported:
-
-pipeline
is now the default at optimization level
-o4
(the default).
- Nested parallel regions are now supported by
-omp
.
- Parallel programs running on Non-Uniform Memory Access (NUMA)
machines have initial support using the following directives, compiler
options, and environment variables:
- !DEC$ MIGRATE_NEXT_TOUCH
- !DEC$ MIGRATE_NEXT_TOUCH_NOPRESERVE
- !DEC$ OMP NUMA
- !DEC$ DISTRIBUTE - same as !HPF$ DISTRIBUTE
- !DEC$ ALIGN - same as !HPF$ ALIGN
-numa Fortran 90 only. Enables NUMA parallel processing and the NUMA
command line options -numa_memories and -numa_tpm. NUMA paral-
lel processing is indicated by inserting certain !DEC$ direc-
tives in your source code. Option -omp must also be specified.
The default is -nonuma.
-numa_memories num
Fortran 90 only. Specifies the number of memories (RADs) to be
used for NUMA parallel processing. Option -numa must also be
specified. If -numa_memories does not appear on the command
line or if num is 0, the number of memories will be chosen at
run-time either from the NUMA_MEMORIES environment variable (if
it is set) or by the system.
-numa_tpm num
Fortran 90 only. Specifies the number of threads per memory to
be used for NUMA parallel processing. Option -numa must also
be specified. num is the number of threads per physical memory
that will execute NUMA parallel features in the program. If
-numa_tpm does not appear on the command line or if num is 0,
the number of threads per memory will be chosen at run-time
either from the NUMA_TPM environment variable (if it is set) or
by the system.
|
- The following new
f90
command options are now supported. See the f90(1) man page for details.
-
-arch ev67
-
-ccdefault
fortran
|
list
|
none
|
default
-
-annotations
-
-assume noprotect_constants
-
-check arg_temp_created
- The following new run-time features are now supported:
- The Fortran RTL has been changed so that it now processes the [.m]
(the minimum number of digits) portion of the edit descriptor when w
(the width field) is Zero for I, B, O, and Z editing.
- An end-of-file or end-of-record status is no longer treated as an
error status. This change was done to adhere to the Fortran 90 language
standard. Prior to this change, if there was an ERR= specified and no
END=|EOR= for a READ operation and the READ encountered an end-of-file
or end-of-record situation, the ERR= path would be followed. With this
change, this situation would now result in a fatal message being
generated.
- The runtime library now contains support for a new environment
variable, FORT_CONVERT_ext that allows a user to associate a foreign
data conversion option with files of a particular file extension. The
values of FORT_CONVERT_ext are the same as FOR_CONVERTn.
- The runtime library has been changed to perform more thorough edit
checking on list directed input. Previously, the RTL was liberal in
what it accepted for input to integer and real values. In accordance
with the F95 Standard, the RTL no longer accepts "+", "-", ".", "D",
"E", or "Q" without expressing at least 1 digit. For example, the RTL
used to allow a single "+" to convert to a 0, but now the RTL will
return a FOR$IOS_LISIO_SYN error. In addition, ambiguous expressions
such as "+-" and "--" will be rejected.
- Support for the -fpscomp options are now implemented in the Fortran
RTL on UNIX:
- -fpscomp all
- -fpscomp general
- -fpscomp ioformat
- -fpscomp logicals
- -fpscomp filesfromcmd
This support includes the six Microsoft PowerStation compatible
file types as described in the Visual Fortran Programmer's Guide:
- MS Unformatted Sequential Access
- MS Unformatted Direct Access
- MS Formatted Sequential Access
- MS Formatted Direct Access
- MS Binary Sequential Access
- MS Binary Direct Access
This includes all fpscomp behavior that does not involve
Windows-specific features. There is no QuickWin-like support. The
'Filenames from Command Line' option looks in the command line
arguments for unspecified filenames in an OPEN(...,FILE='',...)
statement and will also prompt for filenames at the terminal, but does
not implement the equivalent of a Windows Dialog box, like a QuickWin
application would in the PC Windows environment. Windows-specific
physical device names used as filenames are given no special
consideration or handling.
- Support for reading nondelimited character strings as input for
character NAMELIST items has been added.
A character string does
not need delimiting apostrophes or quotation marks if the corresponding
NAMELIST item is of type default character, and the following is true:
- The character string does not contain a blank, comma, slash,
exclamation point (!), ampersand (&), dollar sign ($), left
parenthesis, equal sign (=), percent sign (%), or period (.).
- The character string is not continued across a record boundary.
- The first nonblank character in the string is not an apostrophe or
a quotation mark.
- The leading character is not a string of digits followed by an
asterisk.
A nondelimited character string is terminated by the first blank,
comma, slash, end-of-record, exclamation point, ampersand, or dollar
sign encountered. Apostrophes and quotation marks within nondelimited
character strings are transferred as is.
Should an equal sign,
percent sign, or period be encountered while scanning for a
nondelimited character string, the string will be treated as a variable
name (or part thereof) and not as a nondelimited character string.
Be forewarned that nondelimited character strings that are written out
by using a NAMELIST write may not be read in as expected by a
corresponding NAMELIST read.
Given the following example code:
NAMELIST/TEST/ CHARR
CHARACTER*3 CHARR(4)
DATA CHARR/'AAA', 'BBB', 'CCC', 'DDD'/
OPEN (UNIT=1, FILE='NMLTEST.DAT')
WRITE (1, NML=TEST)
END
|
The output file NMLTEST.DAT will contain:
&TEST
CHARR = AAABBBCCCDDD
/
|
Should an attempt be made to read the data in NMLTEST.DAT back in
with a NAMELIST read using nondelimited character strings:
NAMELIST/TEST/ CHARR
CHARACTER*3 CHARR(4)
DATA CHARR/4*' '/
OPEN (UNIT=1, FILE='NMLTEST.DAT')
READ (1, NML=TEST)
PRINT *, 'CHARR read in >', CHARR(1),'< >',CHARR(2),'< >',
1 CHARR(3), '< >', CHARR(4), '<'
END
|
This will result in:
CHARR read in >AAA< > < > < > <
|
- New run-time jacket routines provided for Fortran 3f lgamma, erf,
erfc, short and long functions in libUfor. See the appropriate 3f man
page for details.
- The run-time now supports unlimited record sizes for writes, reads,
backspaces of variable length unformatted files. Records greater than
2.1 giga-bytes use a new scheme that may not be portable to another
vendor's Fortran.
- When the DATE, TIME, or ZONE arguments to the DATE_AND_TIME
intrinsic routine are not large enough to hold the required
information, a fatal run-time error will now be generated.
- The run-time support was enhanced to allow a REWIND operation to be
performed on a direct access file. This is allowed without having to
specify any command line options.
- New bits were defined in the for_set_fpe routine interface to allow
the compiler to specify counting and messages for floating point
inexact traps (fpe:6). The runtime handler is updated to provide this
service.
- New run-time jacket routines provided for Fortran 3f lgamma, erf,
erfc, short and long functions in libUfor. New entry point interfaces
are:
float lgamma_ ( float *x ) ;
double dlgamma_ ( double *x ) ;
float erf_ ( float *x ) ;
double derf_ ( double *x ) ;
float erfc_ ( float *x ) ;
double derfc_ ( double *x ) ;
short short_ ( int *x ) ;
int long_ ( short *x ) ;
|
- Support for generating traceback information has been added to the
run-time support. Traceback will be produced for all severe errors.
Traceback output can be disabled by setting the environment variable
FOR_DISABLE_STACK_TRACE to true. All diagnostic output, which includes
traceback, can be redirected to a file defined by the FORT0 environment
variable, which was already supported.
- Namelist input was not handling slices and strides of arrays, array
segments with zero and negative positions, and character substrings of
arrays. Note: this implementation adheres to the F90 Standard, so
nested array slices are illegal.
- Support for the environment variable FORT_BUFFERED was added. When
it is set to TRUE, the run-time library will assume that buffered I/O
will be used for output to all I/O units, except those whose output is
to the terminal. This provides a run-time mechanism to support the
behavior enabled by the
-assume buffered_io
option.
- See the new features listed in Section 1.8.2 (Version 5.3 ECO 01 New Features)
- The Compaq Extended Math Library (CXML) routines are updated in the
Compaq Fortran kit. See the CXML release notes in:
/usr/opt/XMDCOM410/docs/XMD410_release_note.txt
1.7.4 Version 5.4 Important Information
Some important information to note about this release:
- As of Compaq Fortran V5.3, the
f77
command executes the Compaq Fortran 90 compiler instead of the Compaq
Fortran 77 compiler. Use
f77 -old_f77
to execute the Compaq Fortran 77 compiler.
- Object files created by Fortran 95 contain information about when
they were compiled and by what version of the compiler. Use the command
strings -a xxx.o | grep "@(.)"
|
where
xxx.o
is the name of the object file. The strings generated by the compiler
are
- "(#)tttt" is a what(1) string with the text from a cDEC$ IDENT
directive if present.
- "@(c)Compaq Fortran Vn.n-eeee" is the version number of the Fortran
95 compiler that generated this object file.
- "@(m)xxx" is the name of the first program unit in the source used
to produce this object file.
- "@(d)dd-mmm-yyyy hh:mm:tt" is the date and time this object file
was created.
1.7.5 Version 5.4 Corrections
From DFA531 ECO 01 final X5.3-1120 -44A7B to DFA540 FT1
T5.4-1130-46A7R, the following corrections have been made:
- Eliminate internal compiler error for character function whose
length expression includes LEN_TRIM of a dummy argument.
- Eliminate internal compiler error for SIZE of a derived type
component pointer array.
- Software pipelining is now enabled at the default optimization
level (-O4)
- Eliminate more unnecessary copies of contiguous array arguments.
- Correct parsing error for certain record component references using
dots.
- Eliminate internal compiler error for particular use of RESHAPE.
- Do not give an unused variable warning where the only reference to
a variable is as the argument to LOC.
- Eliminate internal compiler error for particular use of nested
STRUCTURE.
- Disallow illegal ALLOCATED(A(:))
- 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.
- Diagnose ambiguous generic routine reference.
- When an integer constant is assigned to a variable whose KIND is
smaller, don't change the KIND of the constant for future references.
- Allow IMPLICIT REAL with $.
- Eliminate internal compiler error for RESHAPE of array constructor
From DFA540 FT1 T5.4-1130-46A7R to DFA540 FT2 T5.4-1170-46A97, the
following corrections have been made:
- Speed up processing of EQUIVALENCE groups in COMMON blocks.
- Properly handle SIZE(A(:)(I:J))
- Implement INT8 intrinsic (already documented)
- Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX.
- Allow omitted OPTIONAL arguments to be passed as optional arguments
to intrinsics.
- If "too many errors", suppress informational/warning messages as
well.
- Allow keyword specification of arguments A10, A20, etc. to MAX/MIN.
- Eliminate internal compiler error for case of ADJUSTL with array
argument.
- Implement nested LASTPRIVATE for COMMON.
- 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.
- Fix parsing error for typed function declaration with MS-style
argument passing specification in argument list.
- Resolve incorrect generic resolution between subroutine with no
arguments (but () specified as argument list) and routine with one
required argument.
- Allow named constant to be used in specification expression later
in same statement where it was defined.
- Give error instead of compiler abort for IF (expr) SELECT CASE
- For F90 standards checking, warn about I0, etc. in FORMAT.
- Warn about variables in BLOCK DATA subprogram that are not in a
COMMON.
- Fix problem with continuation in free-form source when OpenMP
conditional compilation is used.
- Eliminate internal compiler failure for incorrect ". AND." in
free-form source.
- Fix a case where two NaNs sometimes compared as equal.
- Fix assertions caused by instruction scheduling at -fpe1.
From DFA540 FT2 T5.4-1170-46A97 to DF540 FT3 T5.4-1195-46AAC, the
following corrections have been made:
- Support the full range of format width specifiers as documented.
- Correct problem with page-alignment for POINTER objects.
- Improve detection of contiguous array slices.
- Allow EOSHIFT to work on REAL*16 and COMPLEX*32 arrays.
- Correct support for SIZE with argument being array with vector
subscripts.
- Eliminate internal compiler failure for incorrect ". AND." in
free-form source.
- Correct problem with fixed form continuation with -assume cc_omp.
- Improve handling of continued C-string escape sequences.
- Preserve order of data initializations where the same location is
initialized multiple times. While this is not allowed by the standard,
we do support it.
- Eliminate spurious warnings for use of some intrinsics when
-double_size 128 is used.
- Correct problem with module visibility and ONLY.
- Eliminate internal compiler error for certain use of POINTER and
nested structures.
- Eliminate inappropriate error about multiple matching procedures
when generic operators are used.
- Correct parsing error of certain variable names in an assignment
following a logical IF.
- Eliminate inappropriate shape mismatch for certain use of RESHAPE
in a PARAMETER initialization expression.
From DFA540 FT3 T5.4-1195-46AAC to DFA540 V5.4-1265-46ABA, the
following corrections have been made:
- 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.
- Eliminate spurious error for declaration of RECORD array in a
COMMON block in a MODULE.
- Correct handling of generics where several routines have an
optional argument at the same position.
- In C strings, allow octals of the form \ooo to have 1, 2 or 3 octal
digits and hex objects of the form \Xxx to have 1 or 2 hexadecimal
characters.
- Add support for -check arg_temp_created.
- Annotations now are displayed on a per-routine basis.
- Put out type information to the debugger for module functions
From DFA540 V5.4-1265-46ABA to DFA540 V5.4-1283-46ABA, the following
corrections have been made:
- Allow Sequence/Nosequence directives on fields of derived types
with -hpf, whether or not numa switch is set.
- Add diagmostic "The NOSEQUENCE directive may not be specified for a
component of a derived type which has the SEQUENCE attribute.".
- Issue diagnostic if NOSEQUENCE directives are applied to fields of
'sequence' derived types.
- When calculating the size of an array to be allocated, check the
size computation for integer overflow.
- Fix obscure bug with OPTIONAL mask for intrinsics MAXLOC et al. The
mask has an expression for the dimension bound(s).
- When a psect becomes too big, give a better error message: "Psect
xxx is too large. Reduce array sizes or make arrays AUTOMATIC or
ALLOCATABLE."
1.7.6 Version 5.4 Known Problems
The following known problems exist with Compaq Fortran Version 5.4:
- The following is a list of known problems for
-omp
and
-mp
parallel support in Version 5.4:
- Global variables referenced by statement functions inside parallel
regions should not reference local instances of those variable names.
The following example should print 42.0 {10 times} instead of 0.0:
real x,y(10)
statement(a) = a + x
x = 41.0
!$par parallel local(x)
x = -1.0
!$par pdo local(i)
do i=1,10
y(i) = statement(1.0)
end do
!$par end parallel
type *,y
end
|
- Please note that
-warn decl
gives an error level message, not a warning level message.
- When using Ladebug with certain versions of the UNIX operating
system, be aware that a trailing underscore may be needed to display
module variables. For example, to display variable X in module MOD, if
typing
print $mod$x$
does not display the variable's value, type:
1.8 New Features, Corrections, and Known Problems in Version 5.3
Version 5.3 is a minor release that includes corrections to problems
discovered since Version 5.2 was released and certain new features.
The following topics are discussed:
The following new Compaq Fortran features are now supported:
- COMMON blocks can be marked read-only using the NOWRT PSECT
attribute.
From DFA531 ECO 01 X5.3-1120-44A7B to DFA532 ECO 02 X5.3-1155-44A8I,
the following corrections have been made:
- Eliminate internal compiler error for SIZE of a derived type
component pointer array.
- Eliminate more unnecessary copies of contiguous array arguments.
- Speed up processing of EQUIVALENCE groups in COMMON blocks.
- Properly handle SIZE(A(:)(I:J))
- Implement INT8 intrinsic (already documented) - UNIX)
- Implement !DEC$ PSECT NOWRT for COMMON blocks on UNIX.
- Allow omitted OPTIONAL arguments to be passed as optional arguments
to intrinsics.
- If "too many errors", suppress informational/warning messages as
well.
- Allow keyword specification of arguments A10, A20, etc. to MAX/MIN.
- Eliminate internal compiler error for case of ADJUSTL with array
argument.
- Eliminate internal compiler error for particular use of nested
STRUCTURE.
- Disallow illegal ALLOCATED(A(:))
- 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.
- Diagnose ambiguous generic routine reference.
- When an integer constant is assigned to a variable whose KIND is
smaller, don't change the KIND of the constant for future references.
- Allow IMPLICIT REAL with $.
- Eliminate internal compiler error for RESHAPE of array constructor.
- Fix parsing error for typed function declaration with MS-style
argument passing specification in argument list.
- Resolve incorrect generic resolution between subroutine with no
arguments (but () specified as argument list) and routine with one
required argument.
- Allow named constant to be used in specification expression later
in same statement where it was defined.
- Give error instead of compiler abort for IF (expr) SELECT CASE
- For F90 standards checking, warn about I0, etc. in FORMAT.
- Warn about variables in BLOCK DATA subprogram that are not in a
COMMON.
- Fix several compiler assertions including one from instruction
scheduling at -fpe1.
1.8.2 Version 5.3 ECO 01 New Features
The following new Compaq Fortran features are now supported:
- The new INT_PTR_KIND() intrinsic returns the kind of an integer
pointer (ie, 8 for Tru64 UNIX/Alpha).
- An optional KIND argument is now allowed on the intrinsics LEN,
SHAPE, SIZE, UBOUND, LBOUND, MAXLOC, MINLOC, INDEX, LEN_TRIM, SCAN, and
VERIFY. This allows these intrinsics to return a result that is other
than default integer kind.
The following new
f90
command options are now supported:
-
-wsf_target
for use with
-wsf
.
Notice the change in spelling of both
-wsf_target
and the environment variable
DECF90_WSF_TARGET
.
-
-assume [no]cc_omp
[dis]allows the use of OpenMP conditional compilation separate from
-omp
.
- Compiling
-omp -non_shared
now adds
-qlpset_r -lpset
to the link line.
Some important information to note about this release:
- 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.
- Add a NUL to the end of non-C character literals. This will not be
reflected in the "length" of the constant.
- %VAL/%REF now overrides any mechanism specified in an explicit
interface.
- The Compaq Extended Math Library (CXML) routines are not updated in
this ECO 01 Compaq Fortran kit.
From released version V5.3-915-449BB to ECO 01 FT1 X5.3-953-44A17, the
following corrections have been made:
- Improve compile time performance when USEing a module which
contains a large COMMON block with many (thousands) of EQUIVALENCEd
variables.
- Allow general CHARACTER expressions for the MOLD argument of the
TRANSFER intrinsic.
- 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.
- Add support for -ccdefault switch.
- In OPEN statement, if STATUS is not specified, default to UNKNOWN
unless -f66 is specified, in which case default to NEW.
- Eliminate internal compiler error for case involving EQUIVALENCEd
POINTER variables not in COMMON.
- Missing !DEC$ ENDIF no longer causes compiler abort.
- Correct rules for when SAVE in a PURE procedure is allowed or not.
- Correct parsing of assignment to field of RECORD whose name begins
with TYPE.
- 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.
- Issue clearer error message when a module name is repeated in a USE
statement.
- Eliminate problem where UBOUND gave wrong value in certain cases.
- Allow substrings in left hand side of FORALL.
- Give proper error when a PARAMETER constant is CALLed.
- Give proper error when a variable is CALLed.
- In assignment statements, make sure that real constants are
evaluated using the precision appropriate for their syntax
(single/double/quad).
From DFA531 ECO 01 FT1 X5.3-953-44A17 to FT2 T5.3-1034-44A3V, the
following corrections have been made:
- Fix problem which could cause incorrect code to be generated for
certain uses of PACK, RESHAPE and UNPACK, primarily with CHARACTER
arguments.
- Correct f77 driver problems, such as invalid syntax passed to cpp
when a .F file was compiled.
- Speed up compilation of initialized nested structures.
- Fix problem with incorrect code generated for use of nested SPREAD
intrinsic.
- Driver now understands shorter "-ieee" switch name.
- Eliminate internal compiler errors for use of defined assignment in
FORALL.
- Speed up compilation where very large MODULEs are repeatedly used.
Further work in this area remains.
- Correct problem with PACK intrinsic where array is array of
structures with an array field with constant subscript/substring values.
- Improve generated code for SPREAD intrinsic.
- Improve generated code for array reductions.
- Improve generated code for UBOUND, LBOUND, SELECTED_INT_KIND, and
SELECTED_REAL_KIND when the argument(s) are constants.
- Improve generated code for SIZEOF when bounds are constants.
- Fix UNIX driver to pass ld's position-specific qualifier within
lib_list rather than cc_list.
- Eliminate internal compiler error for certain cases of integer (not
F90) POINTER as a module variable.
- Reduce severity of "variable has not been used" diagnostic to
"informational".
- Improve generated code for MINVAL/MAXVAL.
- Improve generated code for SIZE(A(:)).
- Improve generated code for SIZE with array argument that has vector
subscripts.
- Add new INT_PTR_KIND() intrinsic which returns the kind of an
integer pointer (either 4 or 8).
- Eliminate internal compiler error for use of allocatable array
reference in a variable format expression.
- Improve generated code for ILEN.
- 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.
- 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.
- %VAL/%REF now overrides any mechanism specified in an explicit
interface.
- Generate much better code for certain array constructors (such as
(/0,I=1,500000/) and allow lowerbound, upperbound and stride to have
different KINDs.
- If -warn declarations is specified, do not issue diagnostic for use
of IMPLICIT NONE.
- Eliminate internal compiler error for EOSHIFT with constant array
argument.
- Eliminate internal compiler error for program fragment that is
"ifdef-ed out".
- 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.
- Report error for assumed-size array passed as actual to
deferred-shape array.
- Eliminate compiletime error for use of AIMAG in initialization
expression when -real_size 128 is specified.
- Eliminate internal compiler error for format in a PRINT statement
being an expression with concatenation.
- DFOR$PREFETCH, DFOR$PREFETCH_MODIFY, and DFOR$PREFETCH_EVICT_NEXT
intrinsics now supported for Alpha processors.
- Generate correct values for a PARAMETER array whose element values
are computed in an implied DO loop involving indexing into another
PARAMETER array.
- Correct bad parse of .NE. as record field name.
- Allow a dummy argument that has an INTENT attribute specified to be
specified in a NAMELIST list.
- Give standards warning for kind mismatch between source and pad
arguments in RESHAPE.
- Long source lines are now correctly compiled when standards
checking is requested (warning is still given).
- Correct problem with incorrect error given for a particular complex
module renaming case.
- Allow as an extension (as does Compaq Fortran 77) a LOGICAL
argument to an intrinsic which expects INTEGER.
- Correctly parse format which contains ">" characters and a
variable format expression.
- Eliminate internal compiler error for a particularly complex and
deeply nested structure reference in an IF.
- Don't give error for passing section of an assumed size array to a
deferred shape array.
- Improve compilation speed for certain large DATA statements.
- Eliminate internal compiler error for a certain complicated FORALL.
- Correct problem with PUBLIC/PRIVATE attributes of a COMMON block in
a MODULE.
- Allow (A .EQ. .NOT. B) (an extension).
- Correct problem with some COMPLEX*32 initialization expressions.
- Eliminate spurious unused variable diagnostic for variable used in
pointer assignment.
- Correct problem where asking for standards checking disabled -D
(/define)
- Fix a case where two NaNs sometimes compared as equal.
From DFA531 ECO 01 FT2 T5.3-1034-44A3V to final X5.3-1120 -44A7B, the
following corrections have been made:
- 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.
- 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.
- Fix a number of problems with WHERE inside of FORALL.
- Make defined assignment in FORALL work properly.
- Generate correct code for CSHIFT of a non-contiguous array slice.
- Allow user-defined types to be named BYTE and DOUBLECOMPLEX.
- Improve generated code for mixed COMPLEX-REAL multiplication and
division.
- In array constructors with only one implied-DO, and nothing else,
avoid creating an unnecessary temp.
- Allow SIZEOF(allocatable-array)
- Improve generated code for SIZEOF(array)
- Allow directory names specified with -module to be longer than 23
characters.
- 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.
- When the error limit has been exceeded (default 30), simply
suppress further messages rather than exiting the compiler. This means
that the object file will get deleted appropriately, the listing file
created, and subsequent source files on the command line will be
processed.
- Re-allow complex constants to be passed by value. The real and
imaginary parts are passed as separate arguments.
- Allow character array valued function as a format specifier.
- Allow debugging of a character function whose length is computed
based on the length of a passed-length character argument.
- Solve a set of problems where the length of a character function is
computed using a dummy array argument.
- 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.
- Eliminate internal compiler error for structure with %FILL
component in module procedure.
- When standards checking is requested, do not give a warning for
fixed-form source line exactly 72 columns long.
- 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.)
- 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.
- Eliminate internal compiler error for declaration of a derived type
array with an initializer that is an implied-DO array constructor.
- Eliminate inappropriate error message for initialization expression
of an implied-DO array constructor of length zero.
- When standards checking is enabled, give one warning, not three,
for a !DEC$ ATTRIBUTES directive.
- Generate correct code for certain cases involving overloading of
the .AND. and .OR. operators.
- Allow Variable Format Expression in a character literal when the
I/O list has a subscripted array element.
- Eliminate compiler abort with incorrect program that names the
enclosing program unit in an ONLY clause.
- Allow the extension syntax '101'B for a binary literal.
- Correctly handle whitespace in -omp conditional compilation lines.
- Fix problem where $INTEGER directive was not being properly handled.
- Add support for KIND= keyword in MINLOC/MAXLOC.
- Add suppprt for KIND= keyword in various string intrinsics.
- Prevent compiler abort for incorrect attempt to pass unsupported
data types by value.
- Properly report invalid declaration EXTERNAL, INTEGER and recover
so that remainder of program is properly parsed.
- Give standards warning for non-standard placement of NAMELIST.
- Eliminate internal compiler error for particular type of
concatenation of substrings when Fortran 95 standards checking is
requested.
- When converting a negative REAL value to COMPLEX, use +0.0 as the
imaginary part rather than -0.0.
- Allow PARAMETER constant in ALIGN= specification of !DEC$ PSECT.
- Don't give shape mismatch for correct-shape RESHAPE in
initialization expression.
- Don't give inappropriate alignment warnings for certain convoluted
EQUIVALENCE/COMMON combinations.
- Eliminate internal compiler error for initialization expression
which contains a constant expression in a structure constructor.
- Allow EXTERNAL :: FOO