532 lines
21 KiB
Plaintext
532 lines
21 KiB
Plaintext
_Note:_ This file is automatically generated from the files
|
|
`news0.texi' and `news.texi'. `NEWS' is _not_ a source file, although
|
|
it is normally included within source distributions.
|
|
|
|
This file lists news about the GCC-3.2 version (and some other
|
|
versions) of the GNU Fortran compiler. Copyright (C)
|
|
1995,1996,1997,1998,1999,2000,2001,2002 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. Note that all such variants are
|
|
obsolete _as of July 1999_ - the information is retained here only for
|
|
its historical value.
|
|
|
|
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 mainline, development version of `g77' within `gcc') is available at
|
|
`http://www.gnu.org/software/gcc/onlinedocs/g77/News.html'.
|
|
|
|
The following information was last updated on 2002-10-28:
|
|
|
|
In `GCC' 3.2 versus `GCC' 3.1:
|
|
==============================
|
|
|
|
* Problem Reports fixed (in chronological order of submission):
|
|
`8308'
|
|
gcc-3.x does not compile files with suffix .r (RATFOR) [Fixed
|
|
in 3.2.1]
|
|
|
|
In `GCC' 3.1 (formerly known as g77-0.5.27) versus `GCC' 3.0:
|
|
=============================================================
|
|
|
|
* Problem Reports fixed (in chronological order of submission):
|
|
`947'
|
|
Data statement initialization with subscript of kind INTEGER*2
|
|
|
|
`3743'
|
|
Reference to intrinsic `ISHFT' invalid
|
|
|
|
`3807'
|
|
Function BESJN(integer,double) problems
|
|
|
|
`3957'
|
|
g77 -pipe -xf77-cpp-input sends output to stdout
|
|
|
|
`4279'
|
|
g77 -h" gives bogus output
|
|
|
|
`4730'
|
|
ICE on valid input using CALL EXIT(%VAL(...))
|
|
|
|
`4752'
|
|
g77 -v -c -xf77-version /dev/null -xnone causes ice
|
|
|
|
`4885'
|
|
BACKSPACE example that doesn't work as of gcc/g77-3.0.x
|
|
|
|
`5122'
|
|
g77 rejects accepted use of INTEGER*2 as type of DATA
|
|
statement loop index
|
|
|
|
`5397'
|
|
ICE on compiling source with 540 000 000 REAL array
|
|
|
|
`5473'
|
|
ICE on BESJN(integer*8,real)
|
|
|
|
`5837'
|
|
bug in loop unrolling
|
|
|
|
* `g77' now has its man page generated from the texinfo
|
|
documentation, to guarantee that it remains up to date.
|
|
|
|
* `g77' used to reject the following program on 32-bit targets:
|
|
PROGRAM PROG
|
|
DIMENSION A(140 000 000)
|
|
END
|
|
with the message:
|
|
prog.f: In program `prog':
|
|
prog.f:2:
|
|
DIMENSION A(140 000 000)
|
|
^
|
|
Array `a' at (^) is too large to handle
|
|
because 140 000 000 REALs is larger than the largest bit-extent
|
|
that can be expressed in 32 bits. However, bit-sizes never play a
|
|
role after offsets have been converted to byte addresses.
|
|
Therefore this check has been removed, and the limit is now 2
|
|
Gbyte of memory (around 530 000 000 REALs). Note: On GNU/Linux
|
|
systems one has to compile programs that occupy more than 1 Gbyte
|
|
statically, i.e. `g77 -static ...'.
|
|
|
|
* Based on work done by Juergen Pfeifer (<juergen.pfeifer@gmx.net>)
|
|
libf2c is now a shared library. One can still link in all objects
|
|
with the program by specifying the `-static' option.
|
|
|
|
* Robert Anderson (<rwa@alumni.princeton.edu>) thought up a two line
|
|
change that enables g77 to compile such code as:
|
|
SUBROUTINE SUB(A, N)
|
|
DIMENSION N(2)
|
|
DIMENSION A(N(1),N(2))
|
|
A(1,1) = 1.
|
|
END
|
|
Note the use of array elements in the bounds of the adjustable
|
|
array A.
|
|
|
|
* George Helffrich (<george@geo.titech.ac.jp>) implemented a change
|
|
in substring index checking (when specifying `-fbounds-check')
|
|
that permits the use of zero length substrings of the form
|
|
`string(1:0)'.
|
|
|
|
* Based on code developed by Pedro Vazquez
|
|
(<vazquez@penelope.iqm.unicamp.br>), the `libf2c' library is now
|
|
able to read and write files larger than 2 Gbyte on 32-bit target
|
|
machines, if the operating system supports this.
|
|
|
|
In 0.5.26, `GCC' 3.0 versus `GCC' 2.95:
|
|
=======================================
|
|
|
|
* When a REWIND was issued after a WRITE statement on an unformatted
|
|
file, the implicit truncation was performed by copying the
|
|
truncated file to /tmp and copying the result back. This has been
|
|
fixed by using the `ftruncate' OS function. Thanks go to the
|
|
GAMESS developers for bringing this to our attention.
|
|
|
|
* Using options `-g', `-ggdb' or `-gdwarf[-2]' (where appropriate
|
|
for your target) now also enables debugging information for COMMON
|
|
BLOCK and EQUIVALENCE items to be emitted. Thanks go to Andrew
|
|
Vaught (<andy@xena.eas.asu.edu>) and George Helffrich
|
|
(<george@geology.bristol.ac.uk>) for fixing this longstanding
|
|
problem.
|
|
|
|
* It is not necessary anymore to use the option `-femulate-complex'
|
|
to compile Fortran code using COMPLEX arithmetic, even on 64-bit
|
|
machines (like the Alpha). This will improve code generation.
|
|
|
|
* INTRINSIC arithmetic functions are now treated as routines that do
|
|
not depend on anything but their argument(s). This enables
|
|
further instruction scheduling, because it is known that they
|
|
cannot read or modify arbitrary locations.
|
|
|
|
* Upgrade to `libf2c' as of 2000-12-05.
|
|
|
|
This fixes a bug where a namelist containing initialization of
|
|
LOGICAL items and a variable starting with T or F would be read
|
|
incorrectly.
|
|
|
|
* The `TtyNam' intrinsics now set NAME to all spaces (at run time)
|
|
if the system has no `ttyname' implementation available.
|
|
|
|
* Upgrade to `libf2c' as of 1999-06-28.
|
|
|
|
This fixes a bug whereby input to a `NAMELIST' read involving a
|
|
repeat count, such as `K(5)=10*3', was not properly handled by
|
|
`libf2c'. The first item was written to `K(5)', but the remaining
|
|
nine were written elsewhere (still within the array), not
|
|
necessarily starting at `K(6)'.
|
|
|
|
In 0.5.25, `GCC' 2.95 (`EGCS' 1.2) versus `EGCS' 1.1.2:
|
|
=======================================================
|
|
|
|
* `g77' no longer generates bad code for assignments, or other
|
|
conversions, of `REAL' or `COMPLEX' constant expressions to type
|
|
`INTEGER(KIND=2)' (often referred to as `INTEGER*8').
|
|
|
|
For example, `INTEGER*8 J; J = 4E10' now works as documented.
|
|
|
|
* `g77' no longer truncates `INTEGER(KIND=2)' (usually `INTEGER*8')
|
|
subscript expressions when evaluating array references on systems
|
|
with pointers widers than `INTEGER(KIND=1)' (such as Alphas).
|
|
|
|
* `g77' no longer generates bad code for an assignment to a
|
|
`COMPLEX' variable or array that partially overlaps one or more of
|
|
the sources of the same assignment (a very rare construction). It
|
|
now assigns through a temporary, in cases where such partial
|
|
overlap is deemed possible.
|
|
|
|
* `libg2c' (`libf2c') no longer loses track of the file being worked
|
|
on during a `BACKSPACE' operation.
|
|
|
|
* `libg2c' (`libf2c') fixes a bug whereby input to a `NAMELIST' read
|
|
involving a repeat count, such as `K(5)=10*3', was not properly
|
|
handled by `libf2c'. The first item was written to `K(5)', but
|
|
the remaining nine were written elsewhere (still within the array),
|
|
not necessarily starting at `K(6)'.
|
|
|
|
* Automatic arrays now seem to be working on HP-UX systems.
|
|
|
|
* The `Date' intrinsic now returns the correct result on big-endian
|
|
systems.
|
|
|
|
* Fix `g77' so it no longer crashes when compiling I/O statements
|
|
using keywords that define `INTEGER' values, such as `IOSTAT=J',
|
|
where J is other than default `INTEGER' (such as `INTEGER*2').
|
|
Instead, it issues a diagnostic.
|
|
|
|
* Fix `g77' so it properly handles `DATA A/RPT*VAL/', where RPT is
|
|
not default `INTEGER', such as `INTEGER*2', instead of producing a
|
|
spurious diagnostic. Also fix `DATA (A(I),I=1,N)', where `N' is
|
|
not default `INTEGER' to work instead of crashing `g77'.
|
|
|
|
* The `-ax' option is now obeyed when compiling Fortran programs.
|
|
(It is passed to the `f771' driver.)
|
|
|
|
* The new `-fbounds-check' option causes `g77' to compile run-time
|
|
bounds checks of array subscripts, as well as of substring start
|
|
and end points.
|
|
|
|
* `libg2c' now supports building as multilibbed library, which
|
|
provides better support for systems that require options such as
|
|
`-mieee' to work properly.
|
|
|
|
* Source file names with the suffixes `.FOR' and `.FPP' now are
|
|
recognized by `g77' as if they ended in `.for' and `.fpp',
|
|
respectively.
|
|
|
|
* The order of arguments to the _subroutine_ forms of the `CTime',
|
|
`DTime', `ETime', and `TtyNam' intrinsics has been swapped. The
|
|
argument serving as the returned value for the corresponding
|
|
function forms now is the _second_ argument, making these
|
|
consistent with the other subroutine forms of `libU77' intrinsics.
|
|
|
|
* `g77' now warns about a reference to an intrinsic that has an
|
|
interface that is not Year 2000 (Y2K) compliant. Also, `libg2c'
|
|
has been changed to increase the likelihood of catching references
|
|
to the implementations of these intrinsics using the `EXTERNAL'
|
|
mechanism (which would avoid the new warnings).
|
|
|
|
* `g77' now warns about a reference to a function when the
|
|
corresponding _subsequent_ function program unit disagrees with
|
|
the reference concerning the type of the function.
|
|
|
|
* `-fno-emulate-complex' is now the default option. This should
|
|
result in improved performance of code that uses the `COMPLEX'
|
|
data type.
|
|
|
|
* The `-malign-double' option now reliably aligns _all_
|
|
double-precision variables and arrays on Intel x86 targets.
|
|
|
|
* Even without the `-malign-double' option, `g77' reliably aligns
|
|
local double-precision variables that are not in `EQUIVALENCE'
|
|
areas and not `SAVE''d.
|
|
|
|
* `g77' now open-codes ("inlines") division of `COMPLEX' operands
|
|
instead of generating a run-time call to the `libf2c' routines
|
|
`c_div' or `z_div', unless the `-Os' option is specified.
|
|
|
|
* `g77' no longer generates code to maintain `errno', a C-language
|
|
concept, when performing operations such as the `SqRt' intrinsic.
|
|
|
|
* `g77' developers can temporarily use the `-fflatten-arrays' option
|
|
to compare how the compiler handles code generation using C-like
|
|
constructs as compared to the Fortran-like method constructs
|
|
normally used.
|
|
|
|
* A substantial portion of the `g77' front end's code-generation
|
|
component was rewritten. It now generates code using facilities
|
|
more robustly supported by the `gcc' back end. One effect of this
|
|
rewrite is that some codes no longer produce a spurious "label LAB
|
|
used before containing binding contour" message.
|
|
|
|
* Support for the `-fugly' option has been removed.
|
|
|
|
* Improve documentation and indexing, including information on Year
|
|
2000 (Y2K) compliance, and providing more information on internals
|
|
of the front end.
|
|
|
|
* Upgrade to `libf2c' as of 1999-05-10.
|
|
|
|
In 0.5.24 versus 0.5.23:
|
|
========================
|
|
|
|
There is no `g77' version 0.5.24 at this time, or planned. 0.5.24
|
|
is the version number designated for bug fixes and, perhaps, some new
|
|
features added, to 0.5.23. Version 0.5.23 requires `gcc' 2.8.1, as
|
|
0.5.24 was planned to require.
|
|
|
|
Due to `EGCS' becoming `GCC' (which is now an acronym for "GNU
|
|
Compiler Collection"), and `EGCS' 1.2 becoming officially designated
|
|
`GCC' 2.95, there seems to be no need for an actual 0.5.24 release.
|
|
|
|
To reduce the confusion already resulting from use of 0.5.24 to
|
|
designate `g77' versions within `EGCS' versions 1.0 and 1.1, as well as
|
|
in versions of `g77' documentation and notices during that period,
|
|
"mainline" `g77' version numbering resumes at 0.5.25 with `GCC' 2.95
|
|
(`EGCS' 1.2), skipping over 0.5.24 as a placeholder version number.
|
|
|
|
To repeat, there is no `g77' 0.5.24, but there is now a 0.5.25.
|
|
Please remain calm and return to your keypunch units.
|
|
|
|
In `EGCS' 1.1.2 versus `EGCS' 1.1.1:
|
|
====================================
|
|
|
|
* Fix the `IDate' intrinsic (VXT) (in `libg2c') 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 `EGCS' 1.1.1 versus `EGCS' 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 `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' hierarchy, 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' hierarchy, 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
|
|
hierarchy, `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 hierarchy, `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 `EGCS' 1.1 versus `g77' 0.5.23:
|
|
==================================
|
|
|
|
* 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'.
|
|
|
|
* `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.
|
|
|
|
* Fix `g77' crash compiling code containing the construct
|
|
`CMPLX(0.)' or similar.
|
|
|
|
* `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.
|
|
|
|
* Fix `g77' crash (or apparently infinite run-time) when compiling
|
|
certain complicated expressions involving `COMPLEX' arithmetic
|
|
(especially multiplication).
|
|
|
|
* 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'.
|
|
|
|
* 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 previous versions:
|
|
=====================
|
|
|
|
Information on previous versions is not provided in this
|
|
`gcc/gcc/f/NEWS' file, to keep it short. See `gcc/gcc/f/news.texi', or
|
|
any of its other derivations (Info, HTML, dvi forms) for such
|
|
information.
|
|
|