1624 lines
67 KiB
Plaintext
1624 lines
67 KiB
Plaintext
This file lists recent changes to the GNU Fortran compiler. Copyright
|
|
(C) 1995, 1996 Free Software Foundation, Inc. You may copy,
|
|
distribute, and modify it freely as long as you preserve this copyright
|
|
notice and permission notice.
|
|
|
|
News About GNU Fortran
|
|
**********************
|
|
|
|
Changes made to recent versions of GNU Fortran are listed below,
|
|
with the most recent version first.
|
|
|
|
The changes are generally listed in order:
|
|
|
|
1. Code-generation and run-time-library bug-fixes
|
|
|
|
2. Compiler and run-time-library crashes involving valid code that
|
|
have been fixed
|
|
|
|
3. New features
|
|
|
|
4. Fixes and enhancements to existing features
|
|
|
|
5. New diagnostics
|
|
|
|
6. Internal improvements
|
|
|
|
7. Miscellany
|
|
|
|
This order is not strict--for example, some items involve a
|
|
combination of these elements.
|
|
|
|
Note that two variants of `g77' are tracked below. The `egcs'
|
|
variant is described vis-a-vis previous versions of `egcs' and/or an
|
|
official FSF version, as appropriate.
|
|
|
|
Therefore, `egcs' versions sometimes have multiple listings to help
|
|
clarify how they differ from other versions, though this can make
|
|
getting a complete picture of what a particular `egcs' version contains
|
|
somewhat more difficult.
|
|
|
|
An online, "live" version of this document (derived directly from
|
|
the up-to-date mainline version of `g77' within `egcs') is available at
|
|
`http://egcs.cygnus.com/onlinedocs/g77_news.html'.
|
|
|
|
In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1):
|
|
=====================================================
|
|
|
|
* Fix the `IDate' Intrinsic (VXT) so the returned year is in the
|
|
documented, non-Y2K-compliant range of 0-99, instead of being
|
|
returned as 100 in the year 2000.
|
|
|
|
* Fix the `Date_and_Time' intrinsic (in `libg2c') to return the
|
|
milliseconds value properly in VALUES(8).
|
|
|
|
* Fix the `LStat' intrinsic (in `libg2c') to return device-ID
|
|
information properly in SARRAY(7).
|
|
|
|
* Improve documentation.
|
|
|
|
In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1):
|
|
===================================================
|
|
|
|
* Fix `libg2c' so it performs an implicit `ENDFILE' operation (as
|
|
appropriate) whenever a `REWIND' is done.
|
|
|
|
(This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
|
|
version of `libf2c'.)
|
|
|
|
* Fix `libg2c' so it no longer crashes with a spurious diagnostic
|
|
upon doing any I/O following a direct formatted write.
|
|
|
|
(This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
|
|
version of `libf2c'.)
|
|
|
|
* Fix `g77' so it no longer crashes compiling references to the
|
|
`Rand' intrinsic on some systems.
|
|
|
|
* Fix `g77' portion of installation process so it works better on
|
|
some systems (those with shells requiring `else true' clauses on
|
|
`if' constructs for the completion code to be set properly).
|
|
|
|
In `egcs' 1.1 (versus 0.5.24):
|
|
==============================
|
|
|
|
* Fix `g77' crash compiling code containing the construct
|
|
`CMPLX(0.)' or similar.
|
|
|
|
* Fix `g77' crash (or apparently infinite run-time) when compiling
|
|
certain complicated expressions involving `COMPLEX' arithmetic
|
|
(especially multiplication).
|
|
|
|
* Fix a code-generation bug that afflicted Intel x86 targets when
|
|
`-O2' was specified compiling, for example, an old version of the
|
|
`DNRM2' routine.
|
|
|
|
The x87 coprocessor stack was being mismanaged in cases involving
|
|
assigned `GOTO' and `ASSIGN'.
|
|
|
|
* Align static double-precision variables and arrays on Intel x86
|
|
targets regardless of whether `-malign-double' is specified.
|
|
|
|
Generally, this affects only local variables and arrays having the
|
|
`SAVE' attribute or given initial values via `DATA'.
|
|
|
|
In `egcs' 1.1 (versus `egcs' 1.0.3):
|
|
====================================
|
|
|
|
* Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte
|
|
beyond the end of its `CHARACTER' argument, and in the `libU77'
|
|
intrinsics `GMTime' and `LTime' that overwrote their arguments.
|
|
|
|
* Assumed arrays with negative bounds (such as `REAL A(-1:*)') no
|
|
longer elicit spurious diagnostics from `g77', even on systems
|
|
with pointers having different sizes than integers.
|
|
|
|
This bug is not known to have existed in any recent version of
|
|
`gcc'. It was introduced in an early release of `egcs'.
|
|
|
|
* Valid combinations of `EXTERNAL', passing that external as a dummy
|
|
argument without explicitly giving it a type, and, in a subsequent
|
|
program unit, referencing that external as an external function
|
|
with a different type no longer crash `g77'.
|
|
|
|
* `CASE DEFAULT' no longer crashes `g77'.
|
|
|
|
* The `-Wunused' option no longer issues a spurious warning about
|
|
the "master" procedure generated by `g77' for procedures
|
|
containing `ENTRY' statements.
|
|
|
|
* Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
|
|
`INTEGER' expression.
|
|
|
|
* Fix `g77' `-g' option so procedures that use `ENTRY' can be
|
|
stepped through, line by line, in `gdb'.
|
|
|
|
* Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
|
|
|
|
* Use `tempnam', if available, to open scratch files (as in
|
|
`OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment
|
|
variable, if present, is used.
|
|
|
|
* `g77''s version of `libf2c' separates out the setting of global
|
|
state (such as command-line arguments and signal handling) from
|
|
`main.o' into distinct, new library archive members.
|
|
|
|
This should make it easier to write portable applications that
|
|
have their own (non-Fortran) `main()' routine properly set up the
|
|
`libf2c' environment, even when `libf2c' (now `libg2c') is a
|
|
shared library.
|
|
|
|
* `g77' no longer installs the `f77' command and `f77.1' man page in
|
|
the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok'
|
|
file exists in the source or build directory. See the
|
|
installation documentation for more information.
|
|
|
|
* `g77' no longer installs the `libf2c.a' library and `f2c.h'
|
|
include file in the `/usr' or `/usr/local' heirarchy, even if the
|
|
`f2c-install-ok' or `f2c-exists-ok' files exist in the source or
|
|
build directory. See the installation documentation for more
|
|
information.
|
|
|
|
* The `libf2c.a' library produced by `g77' has been renamed to
|
|
`libg2c.a'. It is installed only in the `gcc' "private" directory
|
|
heirarchy, `gcc-lib'. This allows system administrators and users
|
|
to choose which version of the `libf2c' library from `netlib' they
|
|
wish to use on a case-by-case basis. See the installation
|
|
documentation for more information.
|
|
|
|
* The `f2c.h' include (header) file produced by `g77' has been
|
|
renamed to `g2c.h'. It is installed only in the `gcc' "private"
|
|
directory heirarchy, `gcc-lib'. This allows system administrators
|
|
and users to choose which version of the include file from
|
|
`netlib' they wish to use on a case-by-case basis. See the
|
|
installation documentation for more information.
|
|
|
|
* The `g77' command now expects the run-time library to be named
|
|
`libg2c.a' instead of `libf2c.a', to ensure that a version other
|
|
than the one built and installed as part of the same `g77' version
|
|
is picked up.
|
|
|
|
* During the configuration and build process, `g77' creates
|
|
subdirectories it needs only as it needs them. Other cleaning up
|
|
of the configuration and build process has been performed as well.
|
|
|
|
* `install-info' now used to update the directory of Info
|
|
documentation to contain an entry for `g77' (during installation).
|
|
|
|
* Some diagnostics have been changed from warnings to errors, to
|
|
prevent inadvertent use of the resulting, probably buggy, programs.
|
|
These mostly include diagnostics about use of unsupported features
|
|
in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and
|
|
about truncations of various sorts of constants.
|
|
|
|
* Improve compilation of `FORMAT' expressions so that a null byte is
|
|
appended to the last operand if it is a constant. This provides a
|
|
cleaner run-time diagnostic as provided by `libf2c' for statements
|
|
like `PRINT '(I1', 42'.
|
|
|
|
* Improve documentation and indexing.
|
|
|
|
* The upgrade to `libf2c' as of 1998-06-18 should fix a variety of
|
|
problems, including those involving some uses of the `T' format
|
|
specifier, and perhaps some build (porting) problems as well.
|
|
|
|
In 0.5.24 and `egcs' 1.1 (versus 0.5.23):
|
|
=========================================
|
|
|
|
* `g77' no longer produces incorrect code and initial values for
|
|
`EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural"
|
|
ordering of members vis-a-vis their types, require initial padding.
|
|
|
|
* `g77' no longer crashes when compiling code containing
|
|
specification statements such as `INTEGER(KIND=7) PTR'.
|
|
|
|
* `g77' no longer crashes when compiling code such as `J = SIGNAL(1,
|
|
2)'.
|
|
|
|
* `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary"
|
|
expressions when they are used as arguments in procedure calls.
|
|
This change applies only to global (filewide) analysis, making it
|
|
consistent with how `g77' actually generates code for these cases.
|
|
|
|
Previously, `g77' treated these expressions as denoting special
|
|
"pointer" arguments for the purposes of filewide analysis.
|
|
|
|
* The `g77' driver now ensures that `-lg2c' is specified in the link
|
|
phase prior to any occurrence of `-lm'. This prevents
|
|
accidentally linking to a routine in the SunOS4 `-lm' library when
|
|
the generated code wants to link to the one in `libf2c' (`libg2c').
|
|
|
|
* `g77' emits more debugging information when `-g' is used.
|
|
|
|
This new information allows, for example, `which __g77_length_a'
|
|
to be used in `gdb' to determine the type of the phantom length
|
|
argument supplied with `CHARACTER' variables.
|
|
|
|
This information pertains to internally-generated type, variable,
|
|
and other information, not to the longstanding deficiencies
|
|
vis-a-vis `COMMON' and `EQUIVALENCE'.
|
|
|
|
* The F90 `Date_and_Time' intrinsic now is supported.
|
|
|
|
* The F90 `System_Clock' intrinsic allows the optional arguments
|
|
(except for the `Count' argument) to be omitted.
|
|
|
|
* Upgrade to `libf2c' as of 1998-06-18.
|
|
|
|
* Improve documentation and indexing.
|
|
|
|
In 0.5.23 (versus 0.5.22):
|
|
==========================
|
|
|
|
* This release contains several regressions against version 0.5.22
|
|
of `g77', due to using the "vanilla" `gcc' back end instead of
|
|
patching it to fix a few bugs and improve performance in a few
|
|
cases.
|
|
|
|
See `egcs/gcc/f/BUGS', for information on the known bugs in this
|
|
version, including the regressions.
|
|
|
|
Features that have been dropped from this version of `g77' due to
|
|
their being implemented via `g77'-specific patches to the `gcc'
|
|
back end in previous releases include:
|
|
|
|
- Support for `__restrict__' keyword, the options
|
|
`-fargument-alias', `-fargument-noalias', and
|
|
`-fargument-noalias-global', and the corresponding
|
|
alias-analysis code.
|
|
|
|
(`egcs' has the alias-analysis code, but not the
|
|
`__restrict__' keyword. `egcs' `g77' users benefit from the
|
|
alias-analysis code despite the lack of the `__restrict__'
|
|
keyword, which is a C-language construct.)
|
|
|
|
- Support for the GNU compiler options `-fmove-all-movables',
|
|
`-freduce-all-givs', and `-frerun-loop-opt'.
|
|
|
|
(`egcs' supports these options. `g77' users of `egcs'
|
|
benefit from them even if they are not explicitly specified,
|
|
because the defaults are optimized for `g77' users.)
|
|
|
|
- Support for the `-W' option warning about integer division by
|
|
zero.
|
|
|
|
- The Intel x86-specific option `-malign-double' applying to
|
|
stack-allocated data as well as statically-allocate data.
|
|
|
|
Note that the `gcc/f/gbe/' subdirectory has been removed from this
|
|
distribution as a result of `g77' no longer including patches for
|
|
the `gcc' back end.
|
|
|
|
* Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte
|
|
beyond the end of its `CHARACTER' argument, and in the `libU77'
|
|
intrinsics `GMTime' and `LTime' that overwrote their arguments.
|
|
|
|
* Support `gcc' version 2.8, and remove support for prior versions
|
|
of `gcc'.
|
|
|
|
* Remove support for the `--driver' option, as `g77' now does all
|
|
the driving, just like `gcc'.
|
|
|
|
* `CASE DEFAULT' no longer crashes `g77'.
|
|
|
|
* Valid combinations of `EXTERNAL', passing that external as a dummy
|
|
argument without explicitly giving it a type, and, in a subsequent
|
|
program unit, referencing that external as an external function
|
|
with a different type no longer crash `g77'.
|
|
|
|
* `g77' no longer installs the `f77' command and `f77.1' man page in
|
|
the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok'
|
|
file exists in the source or build directory. See the
|
|
installation documentation for more information.
|
|
|
|
* `g77' no longer installs the `libf2c.a' library and `f2c.h'
|
|
include file in the `/usr' or `/usr/local' heirarchy, even if the
|
|
`f2c-install-ok' or `f2c-exists-ok' files exist in the source or
|
|
build directory. See the installation documentation for more
|
|
information.
|
|
|
|
* The `libf2c.a' library produced by `g77' has been renamed to
|
|
`libg2c.a'. It is installed only in the `gcc' "private" directory
|
|
heirarchy, `gcc-lib'. This allows system administrators and users
|
|
to choose which version of the `libf2c' library from `netlib' they
|
|
wish to use on a case-by-case basis. See the installation
|
|
documentation for more information.
|
|
|
|
* The `f2c.h' include (header) file produced by `g77' has been
|
|
renamed to `g2c.h'. It is installed only in the `gcc' "private"
|
|
directory heirarchy, `gcc-lib'. This allows system administrators
|
|
and users to choose which version of the include file from
|
|
`netlib' they wish to use on a case-by-case basis. See the
|
|
installation documentation for more information.
|
|
|
|
* The `g77' command now expects the run-time library to be named
|
|
`libg2c.a' instead of `libf2c.a', to ensure that a version other
|
|
than the one built and installed as part of the same `g77' version
|
|
is picked up.
|
|
|
|
* The `-Wunused' option no longer issues a spurious warning about
|
|
the "master" procedure generated by `g77' for procedures
|
|
containing `ENTRY' statements.
|
|
|
|
* `g77''s version of `libf2c' separates out the setting of global
|
|
state (such as command-line arguments and signal handling) from
|
|
`main.o' into distinct, new library archive members.
|
|
|
|
This should make it easier to write portable applications that
|
|
have their own (non-Fortran) `main()' routine properly set up the
|
|
`libf2c' environment, even when `libf2c' (now `libg2c') is a
|
|
shared library.
|
|
|
|
* During the configuration and build process, `g77' creates
|
|
subdirectories it needs only as it needs them, thus avoiding
|
|
unnecessary creation of, for example, `stage1/f/runtime' when
|
|
doing a non-bootstrap build. Other cleaning up of the
|
|
configuration and build process has been performed as well.
|
|
|
|
* `install-info' now used to update the directory of Info
|
|
documentation to contain an entry for `g77' (during installation).
|
|
|
|
* Some diagnostics have been changed from warnings to errors, to
|
|
prevent inadvertent use of the resulting, probably buggy, programs.
|
|
These mostly include diagnostics about use of unsupported features
|
|
in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and
|
|
about truncations of various sorts of constants.
|
|
|
|
* Improve documentation and indexing.
|
|
|
|
* Upgrade to `libf2c' as of 1998-04-20.
|
|
|
|
This should fix a variety of problems, including those involving
|
|
some uses of the `T' format specifier, and perhaps some build
|
|
(porting) problems as well.
|
|
|
|
In 0.5.22 (versus 0.5.21):
|
|
==========================
|
|
|
|
* Fix code generation for iterative `DO' loops that have one or more
|
|
references to the iteration variable, or to aliases of it, in
|
|
their control expressions. For example, `DO 10 J=2,J' now is
|
|
compiled correctly.
|
|
|
|
* Fix a code-generation bug that afflicted Intel x86 targets when
|
|
`-O2' was specified compiling, for example, an old version of the
|
|
`DNRM2' routine.
|
|
|
|
The x87 coprocessor stack was being mismanaged in cases involving
|
|
assigned `GOTO' and `ASSIGN'.
|
|
|
|
* Fix `DTime' intrinsic so as not to truncate results to integer
|
|
values (on some systems).
|
|
|
|
* Fix `Signal' intrinsic so it offers portable support for 64-bit
|
|
systems (such as Digital Alphas running GNU/Linux).
|
|
|
|
* Fix run-time crash involving `NAMELIST' on 64-bit machines such as
|
|
Alphas.
|
|
|
|
* Fix `g77' version of `libf2c' so it no longer produces a spurious
|
|
`I/O recursion' diagnostic at run time when an I/O operation (such
|
|
as `READ *,I') is interrupted in a manner that causes the program
|
|
to be terminated via the `f_exit' routine (such as via `C-c').
|
|
|
|
* Fix `g77' crash triggered by `CASE' statement with an omitted
|
|
lower or upper bound.
|
|
|
|
* Fix `g77' crash compiling references to `CPU_Time' intrinsic.
|
|
|
|
* Fix `g77' crash (or apparently infinite run-time) when compiling
|
|
certain complicated expressions involving `COMPLEX' arithmetic
|
|
(especially multiplication).
|
|
|
|
* Fix `g77' crash on statements such as `PRINT *,
|
|
(REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'.
|
|
|
|
* Fix a `g++' crash.
|
|
|
|
* Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
|
|
`INTEGER' expression.
|
|
|
|
* Fix `g77' `-g' option so procedures that use `ENTRY' can be
|
|
stepped through, line by line, in `gdb'.
|
|
|
|
* Fix a profiling-related bug in `gcc' back end for Intel x86
|
|
architecture.
|
|
|
|
* Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
|
|
|
|
* Allow any numeric argument to intrinsics `Int2' and `Int8'.
|
|
|
|
* Use `tempnam', if available, to open scratch files (as in
|
|
`OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment
|
|
variable, if present, is used.
|
|
|
|
* Rename the `gcc' keyword `restrict' to `__restrict__', to avoid
|
|
rejecting valid, existing, C programs. Support for `restrict' is
|
|
now more like support for `complex'.
|
|
|
|
* Fix `-fpedantic' to not reject procedure invocations such as
|
|
`I=J()' and `CALL FOO()'.
|
|
|
|
* Fix `-fugly-comma' to affect invocations of only external
|
|
procedures. Restore rejection of gratuitous trailing omitted
|
|
arguments to intrinsics, as in `I=MAX(3,4,,)'.
|
|
|
|
* Fix compiler so it accepts `-fgnu-intrinsics-*' and
|
|
`-fbadu77-intrinsics-*' options.
|
|
|
|
* Improve diagnostic messages from `libf2c' so it is more likely
|
|
that the printing of the active format string is limited to the
|
|
string, with no trailing garbage being printed.
|
|
|
|
(Unlike `f2c', `g77' did not append a null byte to its compiled
|
|
form of every format string specified via a `FORMAT' statement.
|
|
However, `f2c' would exhibit the problem anyway for a statement
|
|
like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
|
|
format string.)
|
|
|
|
* Improve compilation of `FORMAT' expressions so that a null byte is
|
|
appended to the last operand if it is a constant. This provides a
|
|
cleaner run-time diagnostic as provided by `libf2c' for statements
|
|
like `PRINT '(I1', 42'.
|
|
|
|
* Fix various crashes involving code with diagnosed errors.
|
|
|
|
* Fix cross-compilation bug when configuring `libf2c'.
|
|
|
|
* Improve diagnostics.
|
|
|
|
* Improve documentation and indexing.
|
|
|
|
* Upgrade to `libf2c' as of 1997-09-23. This fixes a formatted-I/O
|
|
bug that afflicted 64-bit systems with 32-bit integers (such as
|
|
Digital Alpha running GNU/Linux).
|
|
|
|
In `egcs' 1.0.2 (versus `egcs' 1.0.1):
|
|
======================================
|
|
|
|
* Fix `g77' crash triggered by `CASE' statement with an omitted
|
|
lower or upper bound.
|
|
|
|
* Fix `g77' crash on statements such as `PRINT *,
|
|
(REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'.
|
|
|
|
* Fix `-fPIC' (such as compiling for ELF targets) on the Intel x86
|
|
architecture target so invalid assembler code is no longer
|
|
produced.
|
|
|
|
* Fix `-fpedantic' to not reject procedure invocations such as
|
|
`I=J()' and `CALL FOO()'.
|
|
|
|
* Fix `-fugly-comma' to affect invocations of only external
|
|
procedures. Restore rejection of gratuitous trailing omitted
|
|
arguments to intrinsics, as in `I=MAX(3,4,,)'.
|
|
|
|
* Fix compiler so it accepts `-fgnu-intrinsics-*' and
|
|
`-fbadu77-intrinsics-*' options.
|
|
|
|
In `egcs' 1.0.1 (versus `egcs' 1.0):
|
|
====================================
|
|
|
|
* Fix run-time crash involving `NAMELIST' on 64-bit machines such as
|
|
Alphas.
|
|
|
|
In `egcs' 1.0 (versus 0.5.21):
|
|
==============================
|
|
|
|
* Version 1.0 of `egcs' contains several regressions against version
|
|
0.5.21 of `g77', due to using the "vanilla" `gcc' back end instead
|
|
of patching it to fix a few bugs and improve performance in a few
|
|
cases.
|
|
|
|
See `egcs/gcc/f/BUGS', for information on the known bugs in this
|
|
version, including the regressions.
|
|
|
|
Features that have been dropped from this version of `g77' due to
|
|
their being implemented via `g77'-specific patches to the `gcc'
|
|
back end in previous releases include:
|
|
|
|
- Support for the C-language `restrict' keyword.
|
|
|
|
- Support for the `-W' option warning about integer division by
|
|
zero.
|
|
|
|
- The Intel x86-specific option `-malign-double' applying to
|
|
stack-allocated data as well as statically-allocate data.
|
|
|
|
Note that the `gcc/f/gbe/' subdirectory has been removed from this
|
|
distribution as a result of `g77' being fully integrated with the
|
|
`egcs' variant of the `gcc' back end.
|
|
|
|
* Fix code generation for iterative `DO' loops that have one or more
|
|
references to the iteration variable, or to aliases of it, in
|
|
their control expressions. For example, `DO 10 J=2,J' now is
|
|
compiled correctly.
|
|
|
|
* Fix `DTime' intrinsic so as not to truncate results to integer
|
|
values (on some systems).
|
|
|
|
* Remove support for non-`egcs' versions of `gcc'.
|
|
|
|
* Remove support for the `--driver' option, as `g77' now does all
|
|
the driving, just like `gcc'.
|
|
|
|
* Allow any numeric argument to intrinsics `Int2' and `Int8'.
|
|
|
|
* Improve diagnostic messages from `libf2c' so it is more likely
|
|
that the printing of the active format string is limited to the
|
|
string, with no trailing garbage being printed.
|
|
|
|
(Unlike `f2c', `g77' did not append a null byte to its compiled
|
|
form of every format string specified via a `FORMAT' statement.
|
|
However, `f2c' would exhibit the problem anyway for a statement
|
|
like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
|
|
format string.)
|
|
|
|
* Upgrade to `libf2c' as of 1997-09-23. This fixes a formatted-I/O
|
|
bug that afflicted 64-bit systems with 32-bit integers (such as
|
|
Digital Alpha running GNU/Linux).
|
|
|
|
In 0.5.21:
|
|
==========
|
|
|
|
* Fix a code-generation bug introduced by 0.5.20 caused by loop
|
|
unrolling (by specifying `-funroll-loops' or similar). This bug
|
|
afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
|
|
C++, Fortran, and so on).
|
|
|
|
* Fix a code-generation bug manifested when combining local
|
|
`EQUIVALENCE' with a `DATA' statement that follows the first
|
|
executable statement (or is treated as an executable-context
|
|
statement as a result of using the `-fpedantic' option).
|
|
|
|
* Fix a compiler crash that occured when an integer division by a
|
|
constant zero is detected. Instead, when the `-W' option is
|
|
specified, the `gcc' back end issues a warning about such a case.
|
|
This bug afflicted all code compiled by version 2.7.2.2.f.2 of
|
|
`gcc' (C, C++, Fortran, and so on).
|
|
|
|
* Fix a compiler crash that occurred in some cases of procedure
|
|
inlining. (Such cases became more frequent in 0.5.20.)
|
|
|
|
* Fix a compiler crash resulting from using `DATA' or similar to
|
|
initialize a `COMPLEX' variable or array to zero.
|
|
|
|
* Fix compiler crashes involving use of `AND', `OR', or `XOR'
|
|
intrinsics.
|
|
|
|
* Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
|
|
variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
|
|
|
|
* Fix compiler crashes due to using the name of a some non-standard
|
|
intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
|
|
a procedure or common block. Such dual use of a name in a program
|
|
is allowed by the standard.
|
|
|
|
* Place automatic arrays on the stack, even if `SAVE' or the
|
|
`-fno-automatic' option is in effect. This avoids a compiler
|
|
crash in some cases.
|
|
|
|
* The `-malign-double' option now reliably aligns `DOUBLE PRECISION'
|
|
optimally on Pentium and Pentium Pro architectures (586 and 686 in
|
|
`gcc').
|
|
|
|
* New option `-Wno-globals' disables warnings about "suspicious" use
|
|
of a name both as a global name and as the implicit name of an
|
|
intrinsic, and warnings about disagreements over the number or
|
|
natures of arguments passed to global procedures, or the natures
|
|
of the procedures themselves.
|
|
|
|
The default is to issue such warnings, which are new as of this
|
|
version of `g77'.
|
|
|
|
* New option `-fno-globals' disables diagnostics about potentially
|
|
fatal disagreements analysis problems, such as disagreements over
|
|
the number or natures of arguments passed to global procedures, or
|
|
the natures of those procedures themselves.
|
|
|
|
The default is to issue such diagnostics and flag the compilation
|
|
as unsuccessful. With this option, the diagnostics are issued as
|
|
warnings, or, if `-Wno-globals' is specified, are not issued at
|
|
all.
|
|
|
|
This option also disables inlining of global procedures, to avoid
|
|
compiler crashes resulting from coding errors that these
|
|
diagnostics normally would identify.
|
|
|
|
* Diagnose cases where a reference to a procedure disagrees with the
|
|
type of that procedure, or where disagreements about the number or
|
|
nature of arguments exist. This avoids a compiler crash.
|
|
|
|
* Fix parsing bug whereby `g77' rejected a second initialization
|
|
specification immediately following the first's closing `/' without
|
|
an intervening comma in a `DATA' statement, and the second
|
|
specification was an implied-DO list.
|
|
|
|
* Improve performance of the `gcc' back end so certain complicated
|
|
expressions involving `COMPLEX' arithmetic (especially
|
|
multiplication) don't appear to take forever to compile.
|
|
|
|
* Fix a couple of profiling-related bugs in `gcc' back end.
|
|
|
|
* Integrate GNU Ada's (GNAT's) changes to the back end, which
|
|
consist almost entirely of bug fixes. These fixes are circa
|
|
version 3.10p of GNAT.
|
|
|
|
* Include some other `gcc' fixes that seem useful in `g77''s version
|
|
of `gcc'. (See `gcc/ChangeLog' for details--compare it to that
|
|
file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.)
|
|
|
|
* Fix `libU77' routines that accept file and other names to strip
|
|
trailing blanks from them, for consistency with other
|
|
implementations. Blanks may be forcibly appended to such names by
|
|
appending a single null character (`CHAR(0)') to the significant
|
|
trailing blanks.
|
|
|
|
* Fix `CHMOD' intrinsic to work with file names that have embedded
|
|
blanks, commas, and so on.
|
|
|
|
* Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
|
|
argument.
|
|
|
|
* Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
|
|
arguments in the correct order. Documentation fixed accordingly,
|
|
and for `GMTIME()' and `LTIME()' as well.
|
|
|
|
* Make many changes to `libU77' intrinsics to support existing code
|
|
more directly.
|
|
|
|
Such changes include allowing both subroutine and function forms
|
|
of many routines, changing `MCLOCK()' and `TIME()' to return
|
|
`INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
|
|
return `INTEGER(KIND=2)' values, and placing functions that are
|
|
intended to perform side effects in a new intrinsic group,
|
|
`badu77'.
|
|
|
|
* Improve `libU77' so it is more portable.
|
|
|
|
* Add options `-fbadu77-intrinsics-delete',
|
|
`-fbadu77-intrinsics-hide', and so on.
|
|
|
|
* Fix crashes involving diagnosed or invalid code.
|
|
|
|
* `g77' and `gcc' now do a somewhat better job detecting and
|
|
diagnosing arrays that are too large to handle before these cause
|
|
diagnostics during the assembler or linker phase, a compiler
|
|
crash, or generation of incorrect code.
|
|
|
|
* Make some fixes to alias analysis code.
|
|
|
|
* Add support for `restrict' keyword in `gcc' front end.
|
|
|
|
* Support `gcc' version 2.7.2.3 (modified by `g77' into version
|
|
2.7.2.3.f.1), and remove support for prior versions of `gcc'.
|
|
|
|
* Incorporate GNAT's patches to the `gcc' back end into `g77''s, so
|
|
GNAT users do not need to apply GNAT's patches to build both GNAT
|
|
and `g77' from the same source tree.
|
|
|
|
* Modify `make' rules and related code so that generation of Info
|
|
documentation doesn't require compilation using `gcc'. Now, any
|
|
ANSI C compiler should be adequate to produce the `g77'
|
|
documentation (in particular, the tables of intrinsics) from
|
|
scratch.
|
|
|
|
* Add `INT2' and `INT8' intrinsics.
|
|
|
|
* Add `CPU_TIME' intrinsic.
|
|
|
|
* Add `ALARM' intrinsic.
|
|
|
|
* `CTIME' intrinsic now accepts any `INTEGER' argument, not just
|
|
`INTEGER(KIND=2)'.
|
|
|
|
* Warn when explicit type declaration disagrees with the type of an
|
|
intrinsic invocation.
|
|
|
|
* Support `*f771' entry in `gcc' `specs' file.
|
|
|
|
* Fix typo in `make' rule `g77-cross', used only for cross-compiling.
|
|
|
|
* Fix `libf2c' build procedure to re-archive library if previous
|
|
attempt to archive was interrupted.
|
|
|
|
* Change `gcc' to unroll loops only during the last invocation (of
|
|
as many as two invocations) of loop optimization.
|
|
|
|
* Improve handling of `-fno-f2c' so that code that attempts to pass
|
|
an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
|
|
rejected due to the fact that the run-time-library routine is,
|
|
effectively, compiled with `-ff2c' in effect.
|
|
|
|
* Fix `g77' driver to recognize `-fsyntax-only' as an option that
|
|
inhibits linking, just like `-c' or `-S', and to recognize and
|
|
properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
|
|
and `-Xlinker' options.
|
|
|
|
* Upgrade to `libf2c' as of 1997-08-16.
|
|
|
|
* Modify `libf2c' to consistently and clearly diagnose recursive I/O
|
|
(at run time).
|
|
|
|
* `g77' driver now prints version information (such as produced by
|
|
`g77 -v') to `stderr' instead of `stdout'.
|
|
|
|
* The `.r' suffix now designates a Ratfor source file, to be
|
|
preprocessed via the `ratfor' command, available separately.
|
|
|
|
* Fix some aspects of how `gcc' determines what kind of system is
|
|
being configured and what kinds are supported. For example, GNU
|
|
Linux/Alpha ELF systems now are directly supported.
|
|
|
|
* Improve diagnostics.
|
|
|
|
* Improve documentation and indexing.
|
|
|
|
* Include all pertinent files for `libf2c' that come from
|
|
`netlib.bell-labs.com'; give any such files that aren't quite
|
|
accurate in `g77''s version of `libf2c' the suffix `.netlib'.
|
|
|
|
* Reserve `INTEGER(KIND=0)' for future use.
|
|
|
|
In 0.5.20:
|
|
==========
|
|
|
|
* The `-fno-typeless-boz' option is now the default.
|
|
|
|
This option specifies that non-decimal-radix constants using the
|
|
prefixed-radix form (such as `Z'1234'') are to be interpreted as
|
|
`INTEGER' constants. Specify `-ftypeless-boz' to cause such
|
|
constants to be interpreted as typeless.
|
|
|
|
(Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
|
|
|
|
* Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
|
|
now are the defaults.
|
|
|
|
Some programs might use names that clash with intrinsic names
|
|
defined (and now enabled) by these options or by the new `libU77'
|
|
intrinsics. Users of such programs might need to compile them
|
|
differently (using, for example, `-ff90-intrinsics-disable') or,
|
|
better yet, insert appropriate `EXTERNAL' statements specifying
|
|
that these names are not intended to be names of intrinsics.
|
|
|
|
* The `ALWAYS_FLUSH' macro is no longer defined when building
|
|
`libf2c', which should result in improved I/O performance,
|
|
especially over NFS.
|
|
|
|
*Note:* If you have code that depends on the behavior of `libf2c'
|
|
when built with `ALWAYS_FLUSH' defined, you will have to modify
|
|
`libf2c' accordingly before building it from this and future
|
|
versions of `g77'.
|
|
|
|
* Dave Love's implementation of `libU77' has been added to the
|
|
version of `libf2c' distributed with and built as part of `g77'.
|
|
`g77' now knows about the routines in this library as intrinsics.
|
|
|
|
* New option `-fvxt' specifies that the source file is written in
|
|
VXT Fortran, instead of GNU Fortran.
|
|
|
|
* The `-fvxt-not-f90' option has been deleted, along with its
|
|
inverse, `-ff90-not-vxt'.
|
|
|
|
If you used one of these deleted options, you should re-read the
|
|
pertinent documentation to determine which options, if any, are
|
|
appropriate for compiling your code with this version of `g77'.
|
|
|
|
* The `-fugly' option now issues a warning, as it likely will be
|
|
removed in a future version.
|
|
|
|
(Enabling all the `-fugly-*' options is unlikely to be feasible,
|
|
or sensible, in the future, so users should learn to specify only
|
|
those `-fugly-*' options they really need for a particular source
|
|
file.)
|
|
|
|
* The `-fugly-assumed' option, introduced in version 0.5.19, has
|
|
been changed to better accommodate old and new code.
|
|
|
|
* Make a number of fixes to the `g77' front end and the `gcc' back
|
|
end to better support Alpha (AXP) machines. This includes
|
|
providing at least one bug-fix to the `gcc' back end for Alphas.
|
|
|
|
* Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
|
|
and `%LOC()' construct now return values of integer type that is
|
|
the same width (holds the same number of bits) as the pointer type
|
|
on the machine.
|
|
|
|
On most machines, this won't make a difference, whereas on Alphas,
|
|
the type these constructs return is `INTEGER*8' instead of the
|
|
more common `INTEGER*4'.
|
|
|
|
* Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
|
|
in `complex' support in the `gcc' back end. New option
|
|
`-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
|
|
|
|
* Fix bug whereby `REAL A(1)', for example, caused a compiler crash
|
|
if `-fugly-assumed' was in effect and A was a local (automatic)
|
|
array. That case is no longer affected by the new handling of
|
|
`-fugly-assumed'.
|
|
|
|
* Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
|
|
`foo.f' before issuing other diagnostics, and so the `-x' option
|
|
is properly handled.
|
|
|
|
* Enable inlining of subroutines and functions by the `gcc' back end.
|
|
This works as it does for `gcc' itself--program units may be
|
|
inlined for invocations that follow them in the same program unit,
|
|
as long as the appropriate compile-time options are specified.
|
|
|
|
* Dummy arguments are no longer assumed to potentially alias
|
|
(overlap) other dummy arguments or `COMMON' areas when any of
|
|
these are defined (assigned to) by Fortran code.
|
|
|
|
This can result in faster and/or smaller programs when compiling
|
|
with optimization enabled, though on some systems this effect is
|
|
observed only when `-fforce-addr' also is specified.
|
|
|
|
New options `-falias-check', `-fargument-alias',
|
|
`-fargument-noalias', and `-fno-argument-noalias-global' control
|
|
the way `g77' handles potential aliasing.
|
|
|
|
* The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
|
|
|
|
* The bug-fix for 0.5.19.1 has been re-done. The `g77' compiler has
|
|
been changed back to assume `libf2c' has no aliasing problems in
|
|
its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
|
|
intrinsics. The `libf2c' has been changed to have no such
|
|
problems.
|
|
|
|
As a result, 0.5.20 is expected to offer improved performance over
|
|
0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
|
|
this change alone.
|
|
|
|
*Note:* This change requires version 0.5.20 of `libf2c', at least,
|
|
when linking code produced by any versions of `g77' other than
|
|
0.5.19.1. Use `g77 -v' to determine the version numbers of the
|
|
`libF77', `libI77', and `libU77' components of the `libf2c'
|
|
library. (If these version numbers are not printed--in
|
|
particular, if the linker complains about unresolved references to
|
|
names like `g77__fvers__'--that strongly suggests your
|
|
installation has an obsolete version of `libf2c'.)
|
|
|
|
* New option `-fugly-assign' specifies that the same memory
|
|
locations are to be used to hold the values assigned by both
|
|
statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally,
|
|
`g77' uses a separate memory location to hold assigned statement
|
|
labels.)
|
|
|
|
* `FORMAT' and `ENTRY' statements now are allowed to precede
|
|
`IMPLICIT NONE' statements.
|
|
|
|
* Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
|
|
type, instead of crashing, at compile time.
|
|
|
|
* Fix crashes involving diagnosed or invalid code.
|
|
|
|
* Change approach to building `libf2c' archive (`libf2c.a') so that
|
|
members are added to it only when truly necessary, so the user
|
|
that installs an already-built `g77' doesn't need to have write
|
|
access to the build tree (whereas the user doing the build might
|
|
not have access to install new software on the system).
|
|
|
|
* Support `gcc' version 2.7.2.2 (modified by `g77' into version
|
|
2.7.2.2.f.2), and remove support for prior versions of `gcc'.
|
|
|
|
* Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
|
|
procedures.
|
|
|
|
* Improve general build procedures for `g77', fixing minor bugs
|
|
(such as deletion of any file named `f771' in the parent directory
|
|
of `gcc/').
|
|
|
|
* Enable full support of `INTEGER*8' available in `libf2c' and
|
|
`f2c.h' so that `f2c' users may make full use of its features via
|
|
the `g77' version of `f2c.h' and the `INTEGER*8' support routines
|
|
in the `g77' version of `libf2c'.
|
|
|
|
* Improve `g77' driver and `libf2c' so that `g77 -v' yields version
|
|
information on the library.
|
|
|
|
* The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
|
|
instead of synonyms for the generic intrinsic `REAL'.
|
|
|
|
* New intrinsics have been added. These are `REALPART', `IMAGPART',
|
|
`COMPLEX', `LONG', and `SHORT'.
|
|
|
|
* A new group of intrinsics, `gnu', has been added to contain the
|
|
new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old
|
|
group, `dcp', has been removed.
|
|
|
|
* Complain about industry-wide ambiguous references `REAL(EXPR)' and
|
|
`AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
|
|
other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
|
|
interpretation or new `-fugly-complex' option, in conjunction with
|
|
`-fnot-f90', specifies `f2c' interpretation.
|
|
|
|
* Make improvements to diagnostics.
|
|
|
|
* Speed up compiler a bit.
|
|
|
|
* Improvements to documentation and indexing, including a new
|
|
chapter containing information on one, later more, diagnostics
|
|
that users are directed to pull up automatically via a message in
|
|
the diagnostic itself.
|
|
|
|
(Hence the menu item `M' for the node `Diagnostics' in the
|
|
top-level menu of the Info documentation.)
|
|
|
|
In 0.5.19.1:
|
|
============
|
|
|
|
* Code-generation bugs afflicting operations on complex data have
|
|
been fixed.
|
|
|
|
These bugs occurred when assigning the result of an operation to a
|
|
complex variable (or array element) that also served as an input
|
|
to that operation.
|
|
|
|
The operations affected by this bug were: `CONJG()', `DCONJG()',
|
|
`CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
|
|
`CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
|
|
COMPLEX' operand to an `INTEGER' power. (The related generic and
|
|
`Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
|
|
|
|
For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
|
|
is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
|
|
|
|
In 0.5.19:
|
|
==========
|
|
|
|
* Fix `FORMAT' statement parsing so negative values for specifiers
|
|
such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
|
|
negative.
|
|
|
|
* Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
|
|
second argument.
|
|
|
|
* A temporary kludge option provides bare-bones information on
|
|
`COMMON' and `EQUIVALENCE' members at debug time.
|
|
|
|
* New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
|
|
loops.
|
|
|
|
* New `-fno-silent' option causes names of program units to be
|
|
printed as they are compiled, in a fashion similar to UNIX `f77'
|
|
and `f2c'.
|
|
|
|
* New `-fugly-assumed' option specifies that arrays dimensioned via
|
|
`DIMENSION X(1)', for example, are to be treated as assumed-size.
|
|
|
|
* New `-fno-typeless-boz' option specifies that non-decimal-radix
|
|
constants using the prefixed-radix form (such as `Z'1234'') are to
|
|
be interpreted as `INTEGER' constants.
|
|
|
|
* New `-ff66' option is a "shorthand" option that specifies
|
|
behaviors considered appropriate for FORTRAN 66 programs.
|
|
|
|
* New `-ff77' option is a "shorthand" option that specifies
|
|
behaviors considered appropriate for UNIX `f77' programs.
|
|
|
|
* New `-fugly-comma' and `-fugly-logint' options provided to perform
|
|
some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are
|
|
now "shorthand" options, in that they do nothing more than enable
|
|
(or disable) other `-fugly-*' options.
|
|
|
|
* Fix parsing of assignment statements involving targets that are
|
|
substrings of elements of `CHARACTER' arrays having names such as
|
|
`READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
|
|
|
|
* Fix crashes involving diagnosed code.
|
|
|
|
* Fix handling of local `EQUIVALENCE' areas so certain cases of
|
|
valid Fortran programs are not misdiagnosed as improperly
|
|
extending the area backwards.
|
|
|
|
* Support `gcc' version 2.7.2.1.
|
|
|
|
* Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
|
|
procedures.
|
|
|
|
* Change code generation for list-directed I/O so it allows for new
|
|
versions of `libf2c' that might return non-zero status codes for
|
|
some operations previously assumed to always return zero.
|
|
|
|
This change not only affects how `IOSTAT=' variables are set by
|
|
list-directed I/O, it also affects whether `END=' and `ERR='
|
|
labels are reached by these operations.
|
|
|
|
* Add intrinsic support for new `FTELL' and `FSEEK' procedures in
|
|
`libf2c'.
|
|
|
|
* Modify `fseek_()' in `libf2c' to be more portable (though, in
|
|
practice, there might be no systems where this matters) and to
|
|
catch invalid `whence' arguments.
|
|
|
|
* Some useless warnings from the `-Wunused' option have been
|
|
eliminated.
|
|
|
|
* Fix a problem building the `f771' executable on AIX systems by
|
|
linking with the `-bbigtoc' option.
|
|
|
|
* Abort configuration if `gcc' has not been patched using the patch
|
|
file provided in the `gcc/f/gbe/' subdirectory.
|
|
|
|
* Add options `--help' and `--version' to the `g77' command, to
|
|
conform to GNU coding guidelines. Also add printing of `g77'
|
|
version number when the `--verbose' (`-v') option is used.
|
|
|
|
* Change internally generated name for local `EQUIVALENCE' areas to
|
|
one based on the alphabetically sorted first name in the list of
|
|
names for entities placed at the beginning of the areas.
|
|
|
|
* Improvements to documentation and indexing.
|
|
|
|
In 0.5.18:
|
|
==========
|
|
|
|
* Add some rudimentary support for `INTEGER*1', `INTEGER*2',
|
|
`INTEGER*8', and their `LOGICAL' equivalents. (This support works
|
|
on most, maybe all, `gcc' targets.)
|
|
|
|
Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
|
|
the patch for this!
|
|
|
|
Among the missing elements from the support for these features are
|
|
full intrinsic support and constants.
|
|
|
|
* Add some rudimentary support for the `BYTE' and `WORD'
|
|
type-declaration statements. `BYTE' corresponds to `INTEGER*1',
|
|
while `WORD' corresponds to `INTEGER*2'.
|
|
|
|
Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
|
|
the patch for this!
|
|
|
|
* The compiler code handling intrinsics has been largely rewritten
|
|
to accommodate the new types. No new intrinsics or arguments for
|
|
existing intrinsics have been added, so there is, at this point,
|
|
no intrinsic to convert to `INTEGER*8', for example.
|
|
|
|
* Support automatic arrays in procedures.
|
|
|
|
* Reduce space/time requirements for handling large *sparsely*
|
|
initialized aggregate arrays. This improvement applies to only a
|
|
subset of the general problem to be addressed in 0.6.
|
|
|
|
* Treat initial values of zero as if they weren't specified (in DATA
|
|
and type-declaration statements). The initial values will be set
|
|
to zero anyway, but the amount of compile time processing them
|
|
will be reduced, in some cases significantly (though, again, this
|
|
is only a subset of the general problem to be addressed in 0.6).
|
|
|
|
A new option, `-fzeros', is introduced to enable the traditional
|
|
treatment of zeros as any other value.
|
|
|
|
* With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
|
|
returning a `REAL' result, instead of as a `DOUBLE PRECISION'
|
|
result. (Here, `Z' is `DOUBLE COMPLEX'.)
|
|
|
|
With `-fno-f90' in force, the interpretation remains unchanged,
|
|
since this appears to be how at least some F77 code using the
|
|
`DOUBLE COMPLEX' extension expected it to work.
|
|
|
|
Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
|
|
extended F77, it appears to be the same as `REAL(REAL(Z))'.
|
|
|
|
* An expression involving exponentiation, where both operands were
|
|
type `INTEGER' and the right-hand operand was negative, was
|
|
erroneously evaluated.
|
|
|
|
* Fix bugs involving `DATA' implied-`DO' constructs (these involved
|
|
an errant diagnostic and a crash, both on good code, one involving
|
|
subsequent statement-function definition).
|
|
|
|
* Close `INCLUDE' files after processing them, so compiling source
|
|
files with lots of `INCLUDE' statements does not result in being
|
|
unable to open `INCLUDE' files after all the available file
|
|
descriptors are used up.
|
|
|
|
* Speed up compiling, especially of larger programs, and perhaps
|
|
slightly reduce memory utilization while compiling (this is *not*
|
|
the improvement planned for 0.6 involving large aggregate
|
|
areas)--these improvements result from simply turning off some
|
|
low-level code to do self-checking that hasn't been triggered in a
|
|
long time.
|
|
|
|
* Introduce three new options that implement optimizations in the
|
|
`gcc' back end (GBE). These options are `-fmove-all-movables',
|
|
`-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
|
|
default, for Fortran compilations. These optimizations are
|
|
intended to help toon Fortran programs.
|
|
|
|
* Patch the GBE to do a better job optimizing certain kinds of
|
|
references to array elements.
|
|
|
|
* Due to patches to the GBE, the version number of `gcc' also is
|
|
patched to make it easier to manage installations, especially
|
|
useful if it turns out a `g77' change to the GBE has a bug.
|
|
|
|
The `g77'-modified version number is the `gcc' version number with
|
|
the string `.f.N' appended, where `f' identifies the version as
|
|
enhanced for Fortran, and N is `1' for the first Fortran patch for
|
|
that version of `gcc', `2' for the second, and so on.
|
|
|
|
So, this introduces version 2.7.2.f.1 of `gcc'.
|
|
|
|
* Make several improvements and fixes to diagnostics, including the
|
|
removal of two that were inappropriate or inadequate.
|
|
|
|
* Warning about two successive arithmetic operators, produced by
|
|
`-Wsurprising', now produced *only* when both operators are,
|
|
indeed, arithmetic (not relational/boolean).
|
|
|
|
* `-Wsurprising' now warns about the remaining cases of using
|
|
non-integral variables for implied-`DO' loops, instead of these
|
|
being rejected unless `-fpedantic' or `-fugly' specified.
|
|
|
|
* Allow `SAVE' of a local variable or array, even after it has been
|
|
given an initial value via `DATA', for example.
|
|
|
|
* Introduce an Info version of `g77' documentation, which supercedes
|
|
`gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'. These files
|
|
will be removed in a future release. The files `gcc/f/BUGS',
|
|
`gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
|
|
the texinfo source when distributions are made.
|
|
|
|
This effort was inspired by a first pass at translating
|
|
`g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
|
|
(<ronis@onsager.chem.mcgill.ca>).
|
|
|
|
* New `-fno-second-underscore' option to specify that, when
|
|
`-funderscoring' is in effect, a second underscore is not to be
|
|
appended to Fortran names already containing an underscore.
|
|
|
|
* Change the way iterative `DO' loops work to follow the F90
|
|
standard. In particular, calculation of the iteration count is
|
|
still done by converting the start, end, and increment parameters
|
|
to the type of the `DO' variable, but the result of the
|
|
calculation is always converted to the default `INTEGER' type.
|
|
|
|
(This should have no effect on existing code compiled by `g77',
|
|
but code written to assume that use of a *wider* type for the `DO'
|
|
variable will result in an iteration count being fully calculated
|
|
using that wider type (wider than default `INTEGER') must be
|
|
rewritten.)
|
|
|
|
* Support `gcc' version 2.7.2.
|
|
|
|
* Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
|
|
procedures.
|
|
|
|
Note that the email addresses related to `f2c' have changed--the
|
|
distribution site now is named `netlib.bell-labs.com', and the
|
|
maintainer's new address is <dmg@bell-labs.com>.
|
|
|
|
In 0.5.17:
|
|
==========
|
|
|
|
* *Fix serious bug* in `g77 -v' command that can cause removal of a
|
|
system's `/dev/null' special file if run by user `root'.
|
|
|
|
*All users* of version 0.5.16 should ensure that they have not
|
|
removed `/dev/null' or replaced it with an ordinary file (e.g. by
|
|
comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
|
|
If the output isn't basically the same, contact your system
|
|
administrator about restoring `/dev/null' to its proper status).
|
|
|
|
This bug is particularly insidious because removing `/dev/null' as
|
|
a special file can go undetected for quite a while, aside from
|
|
various applications and programs exhibiting sudden, strange
|
|
behaviors.
|
|
|
|
I sincerely apologize for not realizing the implications of the
|
|
fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
|
|
that `ld' tries to *remove* the executable it is supposed to build
|
|
(especially if it reports unresolved references, which it should
|
|
in this case)!
|
|
|
|
* Fix crash on `CHARACTER*(*) FOO' in a main or block data program
|
|
unit.
|
|
|
|
* Fix crash that can occur when diagnostics given outside of any
|
|
program unit (such as when input file contains `@foo').
|
|
|
|
* Fix crashes, infinite loops (hangs), and such involving diagnosed
|
|
code.
|
|
|
|
* Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
|
|
arguments, and issue clearer error message in cases where target
|
|
of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
|
|
should never happen).
|
|
|
|
* Make `libf2c' build procedures work on more systems again by
|
|
eliminating unnecessary invocations of `ld -r -x' and `mv'.
|
|
|
|
* Fix omission of `-funix-intrinsics-...' options in list of
|
|
permitted options to compiler.
|
|
|
|
* Fix failure to always diagnose missing type declaration for
|
|
`IMPLICIT NONE'.
|
|
|
|
* Fix compile-time performance problem (which could sometimes crash
|
|
the compiler, cause a hang, or whatever, due to a bug in the back
|
|
end) involving exponentiation with a large `INTEGER' constant for
|
|
the right-hand operator (e.g. `I**32767').
|
|
|
|
* Fix build procedures so cross-compiling `g77' (the `fini' utility
|
|
in particular) is properly built using the host compiler.
|
|
|
|
* Add new `-Wsurprising' option to warn about constructs that are
|
|
interpreted by the Fortran standard (and `g77') in ways that are
|
|
surprising to many programmers.
|
|
|
|
* Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
|
|
`ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
|
|
|
|
*Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
|
|
you might use these as generic intrinsics, to improve likelihood
|
|
of diagnostics (instead of subtle run-time bugs) when using a
|
|
compiler that doesn't support these as intrinsics (e.g. `f2c').
|
|
|
|
* Remove from `-fno-pedantic' the diagnostic about `DO' with
|
|
non-`INTEGER' index variable; issue that under `-Wsurprising'
|
|
instead.
|
|
|
|
* Clarify some diagnostics that say things like "ignored" when that's
|
|
misleading.
|
|
|
|
* Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
|
|
|
|
* Minor improvements to code generation for various operations on
|
|
`LOGICAL' operands.
|
|
|
|
* Minor improvement to code generation for some `DO' loops on some
|
|
machines.
|
|
|
|
* Support `gcc' version 2.7.1.
|
|
|
|
* Upgrade to `libf2c' as of 1995-11-15.
|
|
|
|
In 0.5.16:
|
|
==========
|
|
|
|
* Fix a code-generation bug involving complicated `EQUIVALENCE'
|
|
statements not involving `COMMON'.
|
|
|
|
* Fix code-generation bugs involving invoking "gratis" library
|
|
procedures in `libf2c' from code compiled with `-fno-f2c' by
|
|
making these procedures known to `g77' as intrinsics (not affected
|
|
by -fno-f2c). This is known to fix code invoking `ERF()',
|
|
`ERFC()', `DERF()', and `DERFC()'.
|
|
|
|
* Update `libf2c' to include netlib patches through 1995-08-16, and
|
|
`#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
|
|
consistent with other Fortran implementations by outputting
|
|
leading zeros in formatted and list-directed output.
|
|
|
|
* Fix a code-generation bug involving adjustable dummy arrays with
|
|
high bounds whose primaries are changed during procedure
|
|
execution, and which might well improve code-generation
|
|
performance for such arrays compared to `f2c' plus `gcc' (but
|
|
apparently only when using `gcc-2.7.0' or later).
|
|
|
|
* Fix a code-generation bug involving invocation of `COMPLEX' and
|
|
`DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
|
|
COMPLEX' divides, when the result of the invocation or divide is
|
|
assigned directly to a variable that overlaps one or more of the
|
|
arguments to the invocation or divide.
|
|
|
|
* Fix crash by not generating new optimal code for `X**I' if `I' is
|
|
nonconstant and the expression is used to dimension a dummy array,
|
|
since the `gcc' back end does not support the necessary mechanics
|
|
(and the `gcc' front end rejects the equivalent construct, as it
|
|
turns out).
|
|
|
|
* Fix crash on expressions like `COMPLEX**INTEGER'.
|
|
|
|
* Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
|
|
`DOUBLE COMPLEX' constant to an `INTEGER' constant power.
|
|
|
|
* Fix crashes and such involving diagnosed code.
|
|
|
|
* Diagnose, instead of crashing on, statement function definitions
|
|
having duplicate dummy argument names.
|
|
|
|
* Fix bug causing rejection of good code involving statement function
|
|
definitions.
|
|
|
|
* Fix bug resulting in debugger not knowing size of local equivalence
|
|
area when any member of area has initial value (via `DATA', for
|
|
example).
|
|
|
|
* Fix installation bug that prevented installation of `g77' driver.
|
|
Provide for easy selection of whether to install copy of `g77' as
|
|
`f77' to replace the broken code.
|
|
|
|
* Fix `gcc' driver (affects `g77' thereby) to not gratuitously
|
|
invoke the `f771' program (e.g. when `-E' is specified).
|
|
|
|
* Fix diagnostic to point to correct source line when it immediately
|
|
follows an `INCLUDE' statement.
|
|
|
|
* Support more compiler options in `gcc'/`g77' when compiling
|
|
Fortran files. These options include `-p', `-pg', `-aux-info',
|
|
`-P', correct setting of version-number macros for preprocessing,
|
|
full recognition of `-O0', and automatic insertion of
|
|
configuration-specific linker specs.
|
|
|
|
* Add new intrinsics that interface to existing routines in `libf2c':
|
|
`ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
|
|
`GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'. Note that
|
|
`ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
|
|
subroutines, not functions (since they have side effects), so to
|
|
get the return values from `SIGNAL' and `SYSTEM', append a final
|
|
argument specifying an `INTEGER' variable or array element (e.g.
|
|
`CALL SYSTEM('rm foo',ISTAT)').
|
|
|
|
* Add new intrinsic group named `unix' to contain the new intrinsics,
|
|
and by default enable this new group.
|
|
|
|
* Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
|
|
group.
|
|
|
|
* Improve `g77' so that `g77 -v' by itself (or with certain other
|
|
options, including `-B', `-b', `-i', `-nostdlib', and `-V')
|
|
reports lots more useful version info, and so that long-form
|
|
options `gcc' accepts are understood by `g77' as well (even in
|
|
truncated, unambiguous forms).
|
|
|
|
* Add new `g77' option `--driver=name' to specify driver when
|
|
default, `gcc', isn't appropriate.
|
|
|
|
* Add support for `#' directives (as output by the preprocessor) in
|
|
the compiler, and enable generation of those directives by the
|
|
preprocessor (when compiling `.F' files) so diagnostics and
|
|
debugging info are more useful to users of the preprocessor.
|
|
|
|
* Produce better diagnostics, more like `gcc', with info such as `In
|
|
function `foo':' and `In file included from...:'.
|
|
|
|
* Support `gcc''s `-fident' and `-fno-ident' options.
|
|
|
|
* When `-Wunused' in effect, don't warn about local variables used as
|
|
statement-function dummy arguments or `DATA' implied-`DO' iteration
|
|
variables, even though, strictly speaking, these are not uses of
|
|
the variables themselves.
|
|
|
|
* When `-W -Wunused' in effect, don't warn about unused dummy
|
|
arguments at all, since there's no way to turn this off for
|
|
individual cases (`g77' might someday start warning about
|
|
these)--applies to `gcc' versions 2.7.0 and later, since earlier
|
|
versions didn't warn about unused dummy arguments.
|
|
|
|
* New option `-fno-underscoring' that inhibits transformation of
|
|
names (by appending one or two underscores) so users may experiment
|
|
with implications of such an environment.
|
|
|
|
* Minor improvement to `gcc/f/info' module to make it easier to build
|
|
`g77' using the native (non-`gcc') compiler on certain machines
|
|
(but definitely not all machines nor all non-`gcc' compilers).
|
|
Please do not report bugs showing problems compilers have with
|
|
macros defined in `gcc/f/target.h' and used in places like
|
|
`gcc/f/expr.c'.
|
|
|
|
* Add warning to be printed for each invocation of the compiler if
|
|
the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
|
|
bits, since `g77' is known to not work well for such cases (to be
|
|
fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
|
|
Actual Bugs.).
|
|
|
|
* Lots of new documentation (though work is still needed to put it
|
|
into canonical GNU format).
|
|
|
|
* Build `libf2c' with `-g0', not `-g2', in effect (by default), to
|
|
produce smaller library without lots of debugging clutter.
|
|
|
|
In 0.5.15:
|
|
==========
|
|
|
|
* Fix bad code generation involving `X**I' and temporary, internal
|
|
variables generated by `g77' and the back end (such as for `DO'
|
|
loops).
|
|
|
|
* Fix crash given `CHARACTER A;DATA A/.TRUE./'.
|
|
|
|
* Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
|
|
|
|
* Fix crash or other erratic behavior when null character constant
|
|
(`''') is encountered.
|
|
|
|
* Fix crash or other erratic behavior involving diagnosed code.
|
|
|
|
* Fix code generation for external functions returning type `REAL'
|
|
when the `-ff2c' option is in force (which it is by default) so
|
|
that `f2c' compatibility is indeed provided.
|
|
|
|
* Disallow `COMMON I(10)' if `I' has previously been specified with
|
|
an array declarator.
|
|
|
|
* New `-ffixed-line-length-N' option, where N is the maximum length
|
|
of a typical fixed-form line, defaulting to 72 columns, such that
|
|
characters beyond column N are ignored, or N is `none', meaning no
|
|
characters are ignored. does not affect lines with `&' in column
|
|
1, which are always processed as if `-ffixed-line-length-none' was
|
|
in effect.
|
|
|
|
* No longer generate better code for some kinds of array references,
|
|
as `gcc' back end is to be fixed to do this even better, and it
|
|
turned out to slow down some code in some cases after all.
|
|
|
|
* In `COMMON' and `EQUIVALENCE' areas with any members given initial
|
|
values (e.g. via `DATA'), uninitialized members now always
|
|
initialized to binary zeros (though this is not required by the
|
|
standard, and might not be done in future versions of `g77').
|
|
Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
|
|
those with members of more than one type), the uninitialized
|
|
members were initialized to spaces, to cater to `CHARACTER' types,
|
|
but it seems no existing code expects that, while much existing
|
|
code expects binary zeros.
|
|
|
|
In 0.5.14:
|
|
==========
|
|
|
|
* Don't emit bad code when low bound of adjustable array is
|
|
nonconstant and thus might vary as an expression at run time.
|
|
|
|
* Emit correct code for calculation of number of trips in `DO' loops
|
|
for cases where the loop should not execute at all. (This bug
|
|
affected cases where the difference between the begin and end
|
|
values was less than the step count, though probably not for
|
|
floating-point cases.)
|
|
|
|
* Fix crash when extra parentheses surround item in `DATA'
|
|
implied-`DO' list.
|
|
|
|
* Fix crash over minor internal inconsistencies in handling
|
|
diagnostics, just substitute dummy strings where necessary.
|
|
|
|
* Fix crash on some systems when compiling call to `MVBITS()'
|
|
intrinsic.
|
|
|
|
* Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
|
|
string of one or more digits.
|
|
|
|
* Fix crash on `DCMPLX()' with a single `INTEGER' argument.
|
|
|
|
* Fix various crashes involving code with diagnosed errors.
|
|
|
|
* Support `-I' option for `INCLUDE' statement, plus `gcc''s
|
|
`header.gcc' facility for handling systems like MS-DOS.
|
|
|
|
* Allow `INCLUDE' statement to be continued across multiple lines,
|
|
even allow it to coexist with other statements on the same line.
|
|
|
|
* Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
|
|
fixes a bug involving infinite loops reading EOF with empty
|
|
list-directed I/O list.
|
|
|
|
* Remove all the `g77'-specific auto-configuration scripts, code,
|
|
and so on, except for temporary substitutes for bsearch() and
|
|
strtoul(), as too many configure/build problems were reported in
|
|
these areas. People will have to fix their systems' problems
|
|
themselves, or at least somewhere other than `g77', which expects
|
|
a working ANSI C environment (and, for now, a GNU C compiler to
|
|
compile `g77' itself).
|
|
|
|
* Complain if initialized common redeclared as larger in subsequent
|
|
program unit.
|
|
|
|
* Warn if blank common initialized, since its size can vary and hence
|
|
related warnings that might be helpful won't be seen.
|
|
|
|
* New `-fbackslash' option, on by default, that causes `\' within
|
|
`CHARACTER' and Hollerith constants to be interpreted a la GNU C.
|
|
Note that this behavior is somewhat different from `f2c''s, which
|
|
supports only a limited subset of backslash (escape) sequences.
|
|
|
|
* Make `-fugly-args' the default.
|
|
|
|
* New `-fugly-init' option, on by default, that allows
|
|
typeless/Hollerith to be specified as initial values for variables
|
|
or named constants (`PARAMETER'), and also allows
|
|
character<->numeric conversion in those contexts--turn off via
|
|
`-fno-ugly-init'.
|
|
|
|
* New `-finit-local-zero' option to initialize local variables to
|
|
binary zeros. This does not affect whether they are `SAVE'd, i.e.
|
|
made automatic or static.
|
|
|
|
* New `-Wimplicit' option to warn about implicitly typed variables,
|
|
arrays, and functions. (Basically causes all program units to
|
|
default to `IMPLICIT NONE'.)
|
|
|
|
* `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
|
|
`-O' not specified, since `-Wuninitialized' requires `-O'), and
|
|
implies `-Wunused' as well.
|
|
|
|
* `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
|
|
names (since they are assumed to refer to block data program
|
|
units, to make use of libraries more reliable).
|
|
|
|
* Support `%LOC()' and `LOC()' of character arguments.
|
|
|
|
* Support null (zero-length) character constants and expressions.
|
|
|
|
* Support `f2c''s `IMAG()' generic intrinsic.
|
|
|
|
* Support `ICHAR()', `IACHAR()', and `LEN()' of character
|
|
expressions that are valid in assignments but not normally as
|
|
actual arguments.
|
|
|
|
* Support `f2c'-style `&' in column 1 to mean continuation line.
|
|
|
|
* Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
|
|
`BLOCK DATA', even though these are not allowed by the standard.
|
|
|
|
* Allow `RETURN' in main program unit.
|
|
|
|
* Changes to Hollerith-constant support to obey Appendix C of the
|
|
standard:
|
|
|
|
- Now padded on the right with zeros, not spaces.
|
|
|
|
- Hollerith "format specifications" in the form of arrays of
|
|
non-character allowed.
|
|
|
|
- Warnings issued when non-space truncation occurs when
|
|
converting to another type.
|
|
|
|
- When specified as actual argument, now passed by reference to
|
|
`INTEGER' (padded on right with spaces if constant too small,
|
|
otherwise fully intact if constant wider the `INTEGER' type)
|
|
instead of by value.
|
|
|
|
*Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
|
|
which it treats exactly the same as `CALL FOO('X')', but which the
|
|
standard and `g77' treat as `CALL FOO(%REF('X '))' (padded with
|
|
as many spaces as necessary to widen to `INTEGER'), essentially.
|
|
|
|
* Changes and fixes to typeless-constant support:
|
|
|
|
- Now treated as a typeless double-length `INTEGER' value.
|
|
|
|
- Warnings issued when overflow occurs.
|
|
|
|
- Padded on the left with zeros when converting to a larger
|
|
type.
|
|
|
|
- Should be properly aligned and ordered on the target machine
|
|
for whatever type it is turned into.
|
|
|
|
- When specified as actual argument, now passed as reference to
|
|
a default `INTEGER' constant.
|
|
|
|
* `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
|
|
the expression plus a length for the expression just as if it were
|
|
a `CHARACTER' expression. For example, `CALL FOO(%DESCR(D))',
|
|
where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
|
|
|
|
* Name of multi-entrypoint master function changed to incorporate
|
|
the name of the primary entry point instead of a decimal value, so
|
|
the name of the master function for `SUBROUTINE X' with alternate
|
|
entry points is now `__g77_masterfun_x'.
|
|
|
|
* Remove redundant message about zero-step-count `DO' loops.
|
|
|
|
* Clean up diagnostic messages, shortening many of them.
|
|
|
|
* Fix typo in `g77' man page.
|
|
|
|
* Clarify implications of constant-handling bugs in `f/BUGS'.
|
|
|
|
* Generate better code for `**' operator with a right-hand operand of
|
|
type `INTEGER'.
|
|
|
|
* Generate better code for `SQRT()' and `DSQRT()', also when
|
|
`-ffast-math' specified, enable better code generation for `SIN()'
|
|
and `COS()'.
|
|
|
|
* Generate better code for some kinds of array references.
|
|
|
|
* Speed up lexing somewhat (this makes the compilation phase
|
|
noticeably faster).
|
|
|