 |
» |
|
|
 |
|  |  |
This section describes problems that have been fixed in current
and previous versions of HP Fortran for HP-UX: Current
fixes |  |
The following list describes problems that have been fixed
and included in this version of HP Fortran v2.7 for HP-UX. There was a
10%+ performance improvement if transpose folded into matmul. Inquire on an open file by
name incorrectly padded out strings longer than the file name, resulting
in garbage character in the string. There was poor scalability
for auto in parallel. When compiling a file not
in the current directory with +cpp_keep, the filename was given in
error and warning messages were incorrect. The compiler aborted on large
real const (overflows). Misaligned store caused segv. The address of pruned block
taken in block was not being pruned. The DEFINE FILE statement
aborted the bridge. There was a front end abort
on assumed size array. There was an unsupported
intrinsic SECNDS(real*8). There was a TCG assert in
bld_iltype_array.c. The compiler aborted on a
TSRUCTCON. There was a failure to deallocate
memory. There was a need to handle
TDECLARE allocatable DVAR as a pointer. There was an unraveled type
from ARRAYTYPE. There was a wrong answer
due to optimizing reductions even when +Ofltacc was specified. A Caliper error sometimes
resulted with errant unwind info; should be backed out. There was a blockstack overflow. '$OPTIMIZE level
X off' should default to command line opt level setting. Occasionally, Wcount1 failed. +objdebug was missing line
numbers. There was a tcg assert on
ICUP.
Occasionally,
the semantic analyzer was not checking for a derived type prior
to accessing the underlying type, thus causing a compiler error.
The compiler
aborted with the PREFETCH directive inside an OMP DO block. The compiler aborted when
+i8 was used with values greater than 2**31. The compiler issued an internal
error message when the first argument to an elemental procedure
was not an array.
Inlined routines
containing static (or Fortran SAVE) variables were giving wrong
answers when compiled with +Oparallel or +Oopenmp. The compiler aborted at +O3
in replace_interval. Wrong answers were received
from code within OMP locks. Program aborted during runtime
in $$divoI. The compiler aborted during
compiling rshift. Segmentation fault when executing
subroutines with a large number of arguments. The compiler issued Error
215, Dummy argument or a private procedure cannot have a type that
is private. Performance problem caused
by extra prefetches when using default cache line size. Poor performance with multiple
memory moves on some allocatable array types. Subscript range error not
detected in I/O implied DO. The compiled program aborted
when named parameters were used in some calls.
Previous
version fixes |  |
The following list describes problems that were fixed in previous
versions of HP Fortran for HP-UX. The compiler
did not allow character function results to be used as unit numbers. The compiler was generating
a bogus error message. The compiler failed to setup
register r29 correctly. The compiler did not call
routines to print context during assert. The compiler was performing
an unnecessary error check. The compiler was performing
an illegal check. The compiler was not ignoring
C$Par when +Oopenmp is used.
Improved alias
analysis for allocatable and automatic arrays. Fixed symbolic handling of
min/max expressions to avoid exponential expression growth. Suppressed check when the
array is null. Fixed branch->skip
conversion in wide mode. A better check was provided
to autopromote entity-type. Increased the nametable size
from 128 to 1024. Prevent temporary copy of
descriptor base address. MIN1 and MAX1 calls are now
coverted internally to MIN0 and MAX0 when integer arguments are
specified. The compiler did not look
for the alias name for function and subroutine interfaces. The compiler aborts with
redefinition of macro type. Updated the compiler to accept
label formats. The compiler maintained context
beyond the statement function context. Emit subtype alignment of
16 bits for item.
The optimizer
was hoisting a load without hoisting the associated store instruction, creating
an uninitialized use of a reference. The compiler was incorrectly
calculating map region offsets. The compiler was incorreclty
optimizing away a variable that was still in use. The compiler did not correctly
output the SLT entry before the exit. The compiler needed to extend
array(1) to the end of the commonblock for alias purposes. The compiler did not default
to the correct type under the +i2 flag for BOZ constants. The compiler should have
issued a meaningul error diagnostic message. The compiler's type checking
was too strict and has been relaxed for IAND calls. The compiler's type checking
was too strict and has been relaxed for intrinsic calls. The mechanism for handling
the Open MP ORDERED directive needed to be enhanced. The compiler has been changed
to handle OPTIMIZE directives. The compiler has been changed
to handle SAVE_LOCALS directives. Fixed symbolic handling of
min/max expressions to avoid exponential expression growth. The compiler did not issue
a diagnostic message for undeclared function reference in a call. The compiler did not allow
iint to translate to int2 and int4 as appropriate. The compiler did not pass
int4 dimension to intrinsic. The compiler incorrectly
generated subscript checks on a zero sized array. The compiler incorrectly
determined that a variable equivalenced within a common block could
be type-size promoted to match the size of address. The namespace table was not
large enough to handle the source file.
The compiler
needed to check for valid frame size before running with bad input. The compiler assumed loop
indices to be integer*4 regardless of the compilation mode, causing
unnecessary conversions during rutime. An invalid but common idiom
of equivalencing length 1 array to the beginning of a common block
caused over optimization. The compiler was incorrectly
optimizing addresses to the LOC function. The compiler did not correctly
handle a boundary condition when writing a symbol across heaps. An error in optimization
caused incorrect code generation. The compiler was not correctly
generating line number references. The present intrinsic returned
wrong results. The compiler was not checking
to see if common blocks were indirect within functions and subroutines. The compiler generated names
incorrectly by using the kind precision instead of the type precision. The parser did not allow
f77 notation for 2 byte and 4 byte integer constants. Error handing getarg and
getarg1. The compiler generated an
error on a valid construct due to incorrect error checking. An error in bounds checking
prevented valid values as parameters to char. Needed to encode the fact
that fstream on typeint2 returns int4. The compiler had a problem
converting Holleriths to integers when using a bit or logical intrinsic. The compiler turned on +Olibcalls
even though the user specified _Onolibcalls.
The compiler
was stuck in an infinite recursive call loop when compiling an incomplete type. The compiler needed to recognize
and correctly handle the $SHORT directive. There was a bug coding the
determination of the index intrinsic parameter. The +i8 switch was not compatible
with some of the OMP internal intrinsics. The compiler incorrectly
reported the hash line number instead of the line number. The compiler failed to convert
some types. The compiler did not allow
dimension as a function result attribute.
The CRAY target
object was not being handled properly by intrinsics. The function result type
attributes were not being checked correctly. The compiler recognized a
hollerith field as an unnamed variable and issued invalid debug
information. C$pragma was not recognized,
the compiler has been changed to ignore it. The compiler was constant
folding divides by zero. The compiler created temporary
variables but failed to privatize them in the parallel region. A USE statement of a module
which exported an operator definition within a nested scope caused
an abort due to failure to clear the pushed operator count.
Fixed problem
with line number handling. Fixed problem with type conversion
on array constants. Fixed problem with graceful
handling of error situation. Fixed problem with more than
one thread saving the result. The compiler stored subspace
lengths as integers; changed to use unsigned integers. Changed the compiler to suppress
errors for c$doacross, c$$, *$$, and !$$. Multiple use statements caused
a name collision. Fixed the compiler to allow
C$$$ to be a comment. Fixed problem with #line
directives throwing off the line countin the original source file. Fixed problem with missing
label from replicated nodes resulting from parallelization. The data limit was too small;
increased to 400 megabytes
Fixed uninitialized
register problem causing intermittent wrong answers at high optimization
levels. Fixed problem with code to
determine where the character length is stored is aborting. Fixed problem of over-writing
memory due to overflow of 16 bit field describing debugger position. Fixed handling of the 'type'
form of the print statement so that the label is recognized.
The compiler
did not correctly infer data type for BOZ (typeless) constants from
context. Fixed bug in handling of
the data statement. Fixed the internal compiler
assertion. Fixed the bug in handling
the +Ofaster compile option.
Fixed a problem
with strength reduction of 64 bit multiplication by unsigned consants. Removed an unused warning
message "invalid arc calculation". Added support for multiple
arguments to the +U option. To be consistent with f77,
updated the compiler to accept 'type' as a synonym for 'print' when
not within a declaration. Fixed the compiler to resolve
the omp_memcpy reference. Fixed the OMP intrinsic assertion
problem resulting from parameter mismatch. Enhanced the compiler to
allow up to 300 continuation lines. Error in algorithm was causing
the compiler to use workload/2 to guide scheduling. Changed this
to use workload/numthreads. Fixed the internal compiler
error generated on a pack intrinsic. Fixed the internal compiler
error resulting in TCG in_descriptor.c assertion. Fixed the compiler internal
error. Placement of $HP$SHARED_COMMON
directive contrary to documentation was permitted in F77. Upgraded
the f90 compiler to allow the f77 placement. Fixed problem with intrinsic
handling of dope vector array, resulting in bus error. Fixed problem so that OMP
directives are not lost. Fixed bug in compiler for
implicit open of file with unit number greater than 99.
Occasionally,
there was inferior performance for automatic and allocatable arrays. Compiling at +O3 sometimes
resulted in the compiler running out of memory in codes that accumulate
a result from a large number of min or max expressions. f90 option -C - reported
an error with zero-sized array. Implemented +A alignment
option for backward f77 compatibility. There were occasional wrong
answers at +O2 +DA2.0W. The compiler sometimes aborted
with internal error 1000. The compiler sometimes aborted
with name table overflow. The compiler occsionally
had wrong answers at +O3 with automatic arrays. The compiler issued an error
message when MIN1 and MAX1 were called with integer arguments. The $HP$ALIAS directive on
interfaces was not always being honored. The compiler was looking
up constant operands in the dictionary table. The compiler aborted on use
of a format label with OpenMP; legal code was rejected. The compiler gave wrong answers
in 64 bit mode when using statement functions. The compiler aborted for
+A compilation of a 2 byte aligned common item.
Occasionally
there were extremely long (infinite) compiles on case statements. When using allocatable arrays
embedded in a f90 record type, the program would bus error or seg
fault during the program execution. The compiler aborted when
-g was specified with union map regions containing only one component. The program received wrong
answers at +O2. GDB could not stop at the
end of a program due to missing SLT entry. The executable received wrong
answers with parmsoverlap at optimization level +O3. Request for O'400' and
Z'400'to be treated as 2 bytes for intrinsic calls. The compiler aborted when
a PARAMETER statement redefined a COMMON definition. The compiler rejected IAND
(I4, i2const) with +i2. IAND and IOR did not accept
a mixture of INTEGER*2 and INTEGER*4 arguments. The compiler mishandled the
ORDERED clause within nested parallel directives. The compiler did not honor
f77 style OPTIMIZE directives. The compiler did not honor
f77 style SAVE_LOCALS directives. Compiling at +O3 resulted
in the compiler running out of memory in codes that accumulate a
result from a large number of min or max expressions. The compiler aborted when
an undeclared function reference was used in a call. Intrinsic iint was not allowed
with type int. The compiler aborted with
+i8 on SIZE(array, dim) intrinsic. The compiler generated runtime
checks causing the program to abort when -C was used with zero-sized
arrays. The compiler aborted on NASTRAN
code. The compiler aborted on very
large source files.
The compiler
aborted with an internal error with large real*8 arrays. Inefficient code was generated
in 64-bit mode for loop indices. The compiler issued internal
error messages. A wrong answer was received
at optimization level +O2 due to use of EQUIVALENCE. A wrong answer was received
at optimization level +O2 when using the LOC intrinsic. The ocmpiler was slow to
compile case selectors with a range. The compiler issued a bogus
error. The compiler generated wrong
answers in wide mode at optimization level +O3 when using integer*8
induction variables. The debugger was not setting
breakpoints in functions included via header files. The present intrinsic returned
the wrong result when an optional parameter was not passed by the
calling program. Incorrect code was generated
when an indirect common block was used in a subroutine. The compiler generated incorrect
names for complex types for use by the debugger. There was an f77 compatibility
issue regarding nnnnl and nnnJ notation. The compiler generated an
internal error on call to getarg when using +getarg1. The compiler occasionally
aborted with an assertion error. The compiler generated an
error when values greater than 127 were passed to the char intrinsic
in a PARAMETER statement. The compiler generated low-level
optimizer internal error messages. The compiler aborted with
a segmentation violation when a function with alernate returns was
called. The compiler aborted on fstream
with integer*2 result assignment. There was an error compiling
hollerith constants when used with the IAND intrinsic. The compiler ignored +Onolibcalls
at optimization level +O2.
The compiler
aborted when parallelizing OpenMP programs with parallel sections. The compiler aborted in a
segmentation fault when compiling an incomplete type at +O3. The compiler did not recognize
the $SHORT directive, which is needed for f77 backward compatibility. The compiler aborted using
+i8 when compiling the index intrinsic. The compiler aborted in wide
mode with the +i8 switch when compiling OMP intrinsics. The compiler reported the
wrong line number in error messages when the -I include path is
used. The compiler gave incorrect
results for integer*1. The compiler aborted compiling
set_num_threads call using +autodbl in 64-bit mode. The compiler issued an error
300 message when compiling a generic function. The compiler issued an error
message for a character array argument whose length was different
that a specific formal parameter character array argument.
The debugger
did not stop at the correct line number. The compiler aborted with
segmentation fault after correctly reporting errors. Random wrong results sometimes
occurred in Open MP code. The compiler did not correctly
handle BOZ constants in intrinsic function calls. Code produced at optimization
level +O2 aborted with a bus error. There was a compiler error
when compiling a recursive function; abnormal exit from bridge. The compiler aborted when
the source file contained only comments and blank lines The compiler asserted with
"Backend Error" when PARAMETER was used with RESHAPE. The compiler did not accept
the incremental linking options +ild and +ildrelink. The compiler asserted on
the data statement which uses rep and has another overlapping data
statement The compiler aborted with
f90: Signal 6 Use of the +Ofaster compile
option caused a bus error There was a problem shifting
a 64 bit integer by 64 bits The compiler gave an internal
error with array assignment. Wrong answers were occasionally
received for reentrant subroutines The use of 300 continuation
lines sometimes caused internal compiler error. The label on a 'type' statement
was lost. The compiler aborted when
-C was used The compiler aborted with
a low-level optimizer message The compiler was changed
to suppress errors for c$doacross, c$$, *$$, and !$$. The compiler emited a warning
for an OMP parallel directive. The compiler aborted when
a module was used multiple times within the same source file. The compiler issued an error
message for c$$$. The compiler generated a
missing label assertion on Open MP code. The compiler appeared to
limit initialized DATA to 42 megabytes, much smaller than F77. The compiler emited an assert
on operator in INTERFACE definition. The compiler asserted with
-g on a program with a hollerith constant. The compiler issued an error
with +Oopenmp a pragma directive. There was a problem with
compile-time evaluation of math function calls with constant arguments. The compiler issued an error
message when defining a generic function using an INTERFACE block
when the function specification contains a RESULT clause. The compiler aborted during
handling of a CRAY pointer object. The compiler encountered
an internal error in low-level optimizer file RaDf.c.
There was a
compiler internal error with the parallel directive. The $alias directive was
not being accepted. Character declarations which
follow the equivalence declarations were syntactic errors due to
the grammar specification. There was no debugger support
for Cray Pointees. Wrong answers were received
with assigned GOTO compiled at +O3. A mixed multiple entry caused
an abort. There was poor optimization
of arrays with descriptors at +O3. Array declaration rejected
when it involved specifying array size based on a previous arrays
size declaration. Certain uses of zero-sized
arrays/character variables caused compiler asserts. Poor performance sometimes
resulted on array sections as actual arguments. There was occasionally execessive
compile time for data statements that create large initialized arrays. +Ostore_ordering was not
being honored. Exact +cat option placement
on command line changed behavior. Empty directive nests were
not being supported. The omp_set_num_threads intrinsic
did not behave as expected. There were problems with
-exec/-dynamic/-minshared interactions. There was a +DD64 assigned
format compiler abort. Interference between c$dir
and c$omp.+ild/+ildrelink was not recognized correctly. There was an application
bus error. There was an assert on multi-diminsional
array constant in record. The REPEAT constructor compiler
asserted. Pack intrinsic / parenthisised
expression; compiler assert. A compiler internal error
occurred when importing private structure. Wrong answers were received
for some parallel loops. The compiler sometimes didn't
support enough continuation lines. SELECT CASE (chartype) caused
a compiler assert. TYPE statement in declarative
region rejected with syntax error. OpenMP integer*8 loops were
not shared. OpenMP loops were not always
trip counted. There was an occasional abnormal
exit from the compiler. The source with the includes
files was not fully debugable. Wrong answer was received
at +DD64 +O2 +i8. The compiler aborted with
privatived USE. There was a compiler error
with allocatable arrays and the save statement. There was a module not found
error messages none: Not linking with the IA64 unwind library. OMP Copyin clauses were not
correct. Undocumented M edit descriptor
from F77 needed to be supported in F90. Externally declared omp callables
were not getting the right linkages. There was an assert on an
unexpected DLABEL. OMP callables required treatment
as external rather than intrinsic. Reduction on subtract incorrectly
subtracted. There was somtimes a memory
corruption on large OMP codes.
There was an
occasional problem with automatic arrays privatized in parallel
region. Some OpenMP reductions were
not recognized as valid. The OMP fmt label refs caused
error.
SEGV was received
while compiling at +O4.
Occasionally,
there were problems with type keyword placement. There was a TCG in_descriptor.C assert. When compiling ftn code,
a compiler error resulted. An unused warning, "invalid
arc calculation," was removed. There was a problem with
zero sized array for SELECT CASE (char). Private structure was imported. Data statement on pointer
was using null.
PHSS_
24771 (10.20) and PHSS_24772 (11.x)Occasionally,
there was a problem when using +FPD combined with certain optimizations. The compiler did not recognize
the !$ALIAS form of the $ALIAS directive. The compiler now returns
an error message if an end do statement does not have a matching do statement. The compiler was incorrectly
calculating the destination address. Occasionally, there was a
problem with quadword results for entry statements. The compiler included the
concatenated file plus all of the individual files in the compile and
link. The compiler would occasionally
assert when parallelizing a loop with an inlined routine. The cputime routine did not return the correct value. Occasionally, the compiler
removed some necessary code. The incorrect version of
the error message file was built in the compiler. There was a problem with
the variable step transformation. The compiler generated
SAVE tags for an automatic variable. The compiler did not clear
the USEASSOCIATED bit for use variables which were privatized. An INTERFACE assignment definition
prvented the compiler from resolving an operator. The compiler was using the
incorrect variable hashlinenumber, which did not always track line
number. When propogating type tags
from uplevel imported module to the nested routine, the compiler
was not checking to see if the type tags had already been set. The compiler inadvertantly
modified loops not directly attached to OMP DO directives. The compiler was not correctly
typing I*8 induction variables. The compiler was incorrectly
using the address of the repetition count instead of the repetition
count.
PHSS_23025
(10.20) and PHSS_23026 (11.x)The compiler
asserted on source with large number of tokens. Occasionally, there was an
internal compiler error using +Oopenmp. Return 0 was not handled
properly. The compiler now returns
an error for the non-supported Complex(16). The use of the PRIVATE directive
caused an internal compiler abort with bad dictionary reference.
PHSS_23243
(10.20) and PHSS_23244 (11.x)The compiler
did not allow a called "C" subroutine to modify
a string literal parameter.
PHSS_23351
(10.20) and PHSS_23352 (11.x)The compiler
did not allow common blocks to be mapped to system shared memory regions. FORTRAN 77 and Fortran 90
processes could not shared memory whose size was not a multiple
of 8 bytes. The compiler did not unroll
a simple loop in a timely manner. The Fortran 90 compiler was
taking over 100 times longer to compile a series of logical/equivalence
statements that the FORTRAN 77 compiler.
PHSS_23724
(10.20) and PHSS_23725 (11.x)The compiler
returned an internal error when passing a character substring as
a parameter. The compiler did not recognize
and default to generate code for PA2.0 architecture on L class machines. The compiler did not handle ".." in
relative source path correctly. Occasionally, the shared
common directive was not processed correctly.
PHSS_23952
(10.20) and PHSS_23953 (11.x)The prefetch
directive occasionally caused an internal compiler error. The wrong answer problem
with intrinsic function NINT was corrected. The low level optimization
of 64-bit code occasionally caused an internal compiler error. When using +U77, there was a core dump and memory fault problem. Using -g+z and +O2 caused an internal compiler error. The compiler was updated
to accept READONLY as a key word in OPEN. This was mapped to ACTION='READ'. Compile-time performance
for large array initialization was improved. The M and N edit descriptors
were implemented for f77 compatibility. The compiler aborted in the
presence of redundant module uses. The compiler was updated
to allow the use of the intrinsic "size" function
in array declarations. Occasionally, the compiler
aborted on very large arrays. There was a compile-time
performance problem with producing debug information at +O1. The compiler failed to create
threads if the user set CPS_STACK_SIZE too large. The compiler now allows an
EQUIVALENCE statement to follow variable declaration. The compiler was updated
to allow % as a comment character (FORTRAN 77 issue). The compiler was updated
to handle debug symbol indexes above 2**20. The compiler aborted on nested
routines with ALIAS directives. An upgrade of the compiler
now results in copy out semantics to optimize for contiguous memory
when pointers to arrays are passed as parameters. Wrong answers resulted when
copying large string constants. The compiler now allows "
SAVE" to be specified more than once for a
variable. The Fortran 90 compiler generated
different output than the FORTRAN 77 compiler for 2**(-1). An internal error resulted
when evaluating a parameter statement that used the INT intrinsic. The compiler now initializes
character variables with length*. The compiler calculated incorrect
results for -10**30 when compiling using free-format. The SAVE statement was fixed so that when no arguments
are specified, it does not try to save values not valid for a save
list. Occasionally, there was a
problem when using +O3 +Oall +Oautopar +Oparallel +Ovectorize.
PHSS_22538
(10.20) and PHSS_22539 (11.x)Fortran did
not inline x**r, where r is a real constant with an integral value. The basic block optimizer
in the LLO disposed of a store that it incorrectly determined was
redundant. The optimizer tried to parallelize
a loop with multiple exits and aborted. This type of loop cannot
be parallelized. A warning message is now generated by the compiler
and continues to compiler without parallelizing the loop. The compiler was producing
an unexpected type of initializer for an array of derived type when
the initial value was an array constructor composed of structure
constructors. The compiler was using an
incorrect memory area when several reduction variables were needed
within a loop. The compiler now generates
an error message when unable to handle a disallowed variable. The link process caused 2.0
libraries to get pulled in. 1.1 libraries are now pulled in. The compiler now supports
+multi_open to allow a file to be used in multiple Fortran
OPEN statements.
PHSS_22464
(10.20) and PHSS_22465 (11.x)Internal compiler
tables were increased in size to resolve Compiler Internal Errors referencing
f90numtab overflow with large data initialization. The compiler failed to handle
an extra set of parentheses in a character variable as an intrinsic
argument. IXOR of logical*1 was not
supported. A new switch, +io77, was
added to support E and G format treatment of leading zeros to match
FORTRAN 77 compiler output for easier comparison of prior results. +fastallocatable caused errors
with allocatable arrays that were SAVEd. There was a Compiler Internal
Error when a module defined a COMMON block and USEd another module
that also defined the same COMMON block.
PHSS_22290
(10.20) and PHSS_22291 (11.x)The compiler
failed to correctly handle a constant argument to sizeof. EQUIVALENCE statements with
shared common were not handled correctly by the compiler.
PHSS_22112
(10.20) and PHSS_22113 (11.x)Some OpenMP
directives caused compiler internal errors when used with Modules. When multiple load options
occurred in a single compile line and the later options were shorter
than the earlier options, incorrect behavior occurred. The zero-based getarg solution provided by PHSS_20578 caused incompatibilities
for some customers using shared library calls to getarg. FSTREAM instrinsic only returned
the lower 32 bits of FILE *fp pointer, causing problems for applications
using wide mode (+DA2.0W). Hollerith literals that extended
beyond a single line behaved differently in FORTRAN 77 +es than with Fortran with +extend_source. Request for closer correspondence
of I/O output between FORTRAN 77 and Fortran 90.
PHSS_21787
(10.20) and PHSS_21788 (11.x)The use of
OpenMP runtime routines not yet available (such as omp_get_thread_num, omp_set_lock, omp_unset_lock, omp_test_lock) caused an abnormal exit from the compiler instead
of returning an appropriate error message. There were instances of a
segmentation fault in the Fortran front end after an invalid alternate
return was detected. The use of +fastallocatable building module occasionally returned an error. Previously, there was a problem
with SPEC 191.fma3d. The compiler aborted when
a PARAMETER value was placed in a CHARACTER declaration. Assigning 65535 to an integer*2
generated an error message. Parallel reduction overflows
were not handled correctly. There was a difference in
literal printing between f77 +es and f90 +extend_source. Issues with Union overlapping
other variables were resolved. Assigned format labels in
wide mode were not being handled correctly. LOGICAL FUNCTION G*1() syntax was not accepted by f90, but was accepted
by f77. The OpenMP directive error
handling was inadequate.
PHSS_21485
(10.20) and PHSS_21486 (11.x)Integer exponentiation
of negative numbers by negative numbers resulted in incorrect results. Some variables beginning
with Z in data statements were not being handled properly. Logical statement functions
containing floating points returned incorrect results. Occasionally, there was a
backend assert while compiling +O3 +oparallel for a loop that had a multiple of 2 loop stride. Alternate return arguments
in an external subroutine call that was part of an IF statement caused an internal compiler error. REAL*4 constants that exceeded the range of REAL*4 variables caused a compiler time error to be generated. There was a need to support
the OpenMP model of threadprivate.
Occasionally,
there was an optimization problem with the use of the option +O2.
Different results were calculated if the binary was compiled with
different optimization levels. When compiled in 64-bit mode, the executable received
a bus error. The debug information for arrays of characters passed
by descriptor character cstring_arr (:,:)*(*) was incorrect. Occasionally, v2.3 did not autopar parallelize the
indicated loop. When using +Onolimit +Odataprefetch +O3 +Oprocelim +Olibcalls, ccom entered an infinite loop. Previously, +Onoloop_transform inhibited loop parallelization. Fortran range checking displayed line #0 instead
of the actual line number. +Onoinline did not work for call sites that were transformed
from indirect calls to direct calls. Fortran ignored 17 loop_parallel directives in LS-DYNA. +DA1.1 +Odataprefetch generated an internal code error. Inlining dropped the register storage class of certain
variables. The compiler would occasionally have an abnormal
termination when compiling at optimization level +O3 or higher. Wrong answers were generated when computing polynomials
at +Oparallel. Occasionally, inlined code created a situation where
loop recognition failed to recognize a perfect nest, thereby disabling
a critical interchange. The HLO loop recognition phase has been
improved to handle such cases. Previously, +i8 +O2 caused an infinite loop in the compiler. Using +i8 and +O2 occasionally resulted in an internal error with
the Fortran compiler. There were instances when
the compiler produced an internal error if you were using '-g' . The Fortran driver was updated
to infer +DA<model> machine parameters. A new command-line flag—
+sharedlibF90 —resolves potential issues with the F90 driver
trying to link with the shared version of libF90. See Command-line
flags elsewhere in this document. The PACK intrinsic has been
corrected to properly handle nonstandard LOGICAL values. Previously,
a segmentation fault would occur if nonstandard LOGICAL values were encountered
by this intrinsic. In previous versions of the
compiler, the MERGE intrinsic was unimplemented, resulting in compiler
aborts. Instances where this happened included when the compiler encountered
complicated expressions involving derived types or character strings.
The MERGE intrinsic has been corrected so that it properly handles
complicated expressions. (HP-UX 11.0 only) Fortran
has been corrected so that it works in wide mode (64-bit addressing)
when a derived-type selector is used on an array. The LBOUND, UBOUND, and SHAPE
intrinsics asserted when their result array was non-contiguous. The Fortran compiler previously
declared some variables as thread_private when they were not. The
Fortran memory classes have been changed to correct this. (HP-UX 11.0 only) In certain
situations, Fortran would abort at +O3 +Oparallel. In certain situations, Fortran
would abort at +O3 +Opal. (HP-UX 11.0 only) Using CXperf
profiling support option +pal with optimization enabled caused Fortran to assert. Using +autodbl occasionally resulted in an assert. (HP-UX 11.0 only) The HP
Performance Analysis Tool CXperf can now profile Fortran applications
with empty routines and compiled with +pa. This is a Fortran fix which corrects the previous
problem of a resulting coredump. Wrong answers were generated
by Fortran at +O3. When the code specified loop
interchange, the compiler would not honor c$dir no_loop_transform in certain situations. -g +objdebug now works in the same manner as +objdebuf -g so that +objdebug takes precedence. The compiler would occasionally
run out of memory at optimization level +O3. SELECT CASE statements with REAL*4 ranges/values failed when +autodbl4 used. Explicit double precision constants (3.0D4) were
corrupted when +autodbl was specified. The ADJUSTL intrinsic returned wrong answers when
its argument was a parenthesized character constant. modulo(x,y) returned incorrect results when -1 < x/y < 0. The ES format descriptor printed zero values incorrectly. A never-referenced variable name which was also
a common block name caused syntax errors when used in an EQUIVALENCE
statement. Using 4-byte integer DO loop indices in wide mode
(+DA2.0W) incorrectly inhibited a wide range of optimizations
and auto-parallelization. Certain uses of variable length character variables
with the POINTER attribute caused intermittent aborts at runtime. NAMELIST input of character arrays was not compatible
with FORTRAN 77 (non-standard usage of a scalar subscript but multiple
values is now accepted). NAMELIST READs in wide mode (+DA.0W) sometimes corrupted memory and caused unpredictable
aborts. Some character expressions in a SELECT CASE statement
were evaluated more than once. SYSTEM_CLOCK sometimes returned an invalid value. Short Hollerith initializers (i.e., 1h3) in DATA
statements for REAL variables caused an internal error. Using an INTENT(IN) dummy argument in a subsequent
initialization expression sometimes caused an internal error. Referencing a character variable via a substring
and later as if it were a function caused an internal error. Now
a syntax error is issued. Routines which indirectly used the same module many
times caused the compilers symbol table to become corrupted. The
compiler now detects and ignores the indirect redundant USE statements
(it has always ignored directly visible redundant USE statements). Several internal errors caused by the +DA2.0 flag have been fixed. All of the compiler directive code has been reimplemented.
Many observed and undiscovered bugs with memory class and loop-based
directives have been fixed. An unsubscripted integer array used as a FORMAT
is now assumed to be a character string format, and not an ASSIGN
statement format. Zero-length character type array constructors caused
an internal error. The ftnxx environment variables were ignored in wide mode. When a library (.a file) was listed several times
on the command line, all but one of them was (incorrectly) removed. Cray-style pointers were only 32 bits in wide mode
unless +autodbl[4] was used. Now they are always 8 bytes in wide
mode. In previous versions of Fortran, space deallocation
could potentially fail. This occurred when initialized commons were
used in the presence of equivalences. Additional NULL pointer checks have been added to
the Fortran compiler. This fixes compile-time aborts in the optimizer
portion of the compiler.
|