This file lists recent changes to the GNU Fortran compiler. Copyright
-(C) 1995, 1996 Free Software Foundation, Inc. You may copy,
+(C) 1995, 96, 97, 1998 Free Software Foundation, Inc. You may copy,
distribute, and modify it freely as long as you preserve this copyright
notice and permission notice.
This order is not strict--for example, some items involve a
combination of these elements.
-In `egcs' 1.1:
-==============
+ 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.
+
+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"
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 `Date_and_Time' intrinsic now is supported.
- * The F90 `SYSTEM_CLOCK' intrinsic allows the optional arguments
+ * 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:
-==========
+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
`-fargument-noalias-global', and the corresponding
alias-analysis code.
- (Version 1.0.1 of `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.)
+ (`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'.
- (Version 1.0.1 of `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.)
+ (`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.
some uses of the `T' format specifier, and perhaps some build
(porting) problems as well.
-In 0.5.22:
-==========
+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
* 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
+ * 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
* 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.
+ `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
like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
format string.)
- * Improve compilation of FORMAT expressions so that a null byte is
+ * 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'.
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.
+
+ *Note Actual Bugs We Haven't Fixed Yet: Actual Bugs, available in
+ plain-text format in `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:
==========