@c Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
@c This is part of the G77 manual.
@c For copying conditions, see the file g77.texi.

@c The text of this file appears in the file NEWS
@c in the G77 distribution, as well as in the G77 manual.

@c Keep this the same as the dates above, since it's used
@c in the standalone derivations of this file (e.g. NEWS).
@set copyrights-news 1995,1996,1997,1998,1999,2000,2001

@set last-update-news 2001-11-20

@include root.texi

@ifset DOC-NEWS
@c The immediately following lines apply to the NEWS file
@c which is derived from this file.
@emph{Note:} This file is automatically generated from the files
@file{news0.texi} and @file{news.texi}.
@file{NEWS} is @emph{not} a source file,
although it is normally included within source distributions.

This file lists news about the @value{which-g77} version
(and some other versions) of the GNU Fortran compiler.
Copyright (C) @value{copyrights-news} Free Software Foundation, Inc.
You may copy, distribute, and modify it freely as long as you preserve
this copyright notice and permission notice.

@node Top,,, (dir)
@chapter News About GNU Fortran
@end ifset

@ifset DOC-G77
@ifset USERVISONLY
@node Changes
@chapter User-visible Changes
@cindex versions, recent
@cindex recent versions
@cindex changes, user-visible
@cindex user-visible changes

This chapter describes changes to @command{g77} that are visible
to the programmers who actually write and maintain Fortran
code they compile with @command{g77}.
Information on changes to installation procedures,
changes to the documentation, and bug fixes is
not provided here, unless it is likely to affect how
users use @command{g77}.
@xref{News,,News About GNU Fortran}, for information on
such changes to @command{g77}.
@end ifset

@ifclear USERVISONLY
@node News
@chapter News About GNU Fortran
@cindex versions, recent
@cindex recent versions
@end ifclear
@end ifset

@ifclear USERVISONLY
Changes made to recent versions of GNU Fortran are listed
below, with the most recent version first.

The changes are generally listed in order:

@enumerate
@item
Code-generation and run-time-library bug-fixes

@item
Compiler and run-time-library crashes involving valid code
that have been fixed

@item
New features

@item
Fixes and enhancements to existing features

@item
New diagnostics

@item
Internal improvements

@item
Miscellany
@end enumerate

This order is not strict---for example, some items
involve a combination of these elements.
@end ifclear

Note that two variants of @command{g77} are tracked below.
The @code{egcs} variant is described vis-a-vis
previous versions of @code{egcs} and/or
an official FSF version, as appropriate.
Note that all such variants are obsolete @emph{as of July 1999} -
the information is retained here only for its historical value.

Therefore, @code{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 @code{egcs} version contains
somewhat more difficult.

@ifset DOC-G77
For information on bugs in the @value{which-g77} version of @command{g77},
see @ref{Known Bugs,,Known Bugs In GNU Fortran}.
@end ifset

@ifset DOC-BUGS
For information on bugs in the @value{which-g77} version of @command{g77},
see @file{@value{path-g77}/BUGS}.
@end ifset

@ifset DEVELOPMENT
@emph{Warning:} The information below is still under development,
and might not accurately reflect the @command{g77} code base
of which it is a part.
Efforts are made to keep it somewhat up-to-date,
but they are particularly concentrated
on any version of this information
that is distributed as part of a @emph{released} @command{g77}.

In particular, while this information is intended to apply to
the @value{which-g77} version of @command{g77},
only an official @emph{release} of that version
is expected to contain documentation that is
most consistent with the @command{g77} product in that version.

Nevertheless, information on @emph{previous} releases of @command{g77}, below,
is likely to be more up-to-date and accurate
than the equivalent information that accompanied
those releases,
assuming the last-updated date of the information below
is later than the dates of those releases.

That's due to attempts to keep this development version
of news about previous @command{g77} versions up-to-date.
@end ifset

@ifclear USERVISONLY
An online, ``live'' version of this document
(derived directly from the mainline, development version
of @command{g77} within @command{gcc})
is available at
@uref{http://www.gnu.org/software/gcc/onlinedocs/g77_news.html}.
@end ifclear

The following information was last updated on @value{last-update-news}:

@heading In development, 0.5.27, @code{GCC} 3.1 versus @code{GCC} 3.0:
@itemize @bullet
@item
@command{g77} now has its man page generated from the texinfo documentation,
to guarantee that it remains up to date.

@item
@command{g77} used to reject the following program on 32-bit targets:
@smallexample
PROGRAM PROG
DIMENSION A(140 000 000)
END
@end smallexample
with the message:
@smallexample
prog.f: In program `prog':
prog.f:2: 
         DIMENSION A(140 000 000)
                   ^
Array `a' at (^) is too large to handle
@end smallexample
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.
Note: On GNU/Linux systems one has to compile programs that occupy more
than 1 Gbyte statically, i.e.@: @code{g77 -static ...}.

@item
Based on work done by Juergen Pfeifer (@email{juergen.pfeifer@@gmx.net})
libf2c is now a shared library.  One can still link in all objects with
the program by specifying the @option{-static} option.

@item
Robert Anderson (@email{rwa@@alumni.princeton.edu}) thought up a two
line change that enables g77 to compile such code as:
@smallexample
SUBROUTINE SUB(A, N)
DIMENSION N(2)
DIMENSION A(N(1),N(2))
A(1,1) = 1.
END
@end smallexample
Note the use of array elements in the bounds of the adjustable array A.

@item
George Helffrich (@email{george@@geo.titech.ac.jp}) implemented a change
in substring index checking (when specifying @option{-fbounds-check})
that permits the use of zero length substrings of the form
@code{string(1:0)}.

@item
Based on code developed by Pedro Vazquez (@email{vazquez@@penelope.iqm.unicamp.br}),
the @code{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.
@end itemize

@heading In 0.5.26, @code{GCC} 3.0 versus @code{GCC} 2.95:
@itemize @bullet
@item
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 @code{ftruncate} OS function.  Thanks go to the GAMESS developers
for bringing this to our attention.

@item
Using options @option{-g}, @option{-ggdb} or @option{-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 (@email{andy@@xena.eas.asu.edu}) and
George Helffrich (@email{george@@geology.bristol.ac.uk}) for
fixing this longstanding problem.

@item
It is not necessary anymore to use the option @option{-femulate-complex}
to compile Fortran code using COMPLEX arithmetic, even on 64-bit machines
(like the Alpha).  This will improve code generation.

@item
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.

@ifclear USERVISONLY
@item
Upgrade to @code{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.

@item
The @code{TtyNam} intrinsics now set @var{Name} to all spaces (at run time)
if the system has no @code{ttyname} implementation available.

@item
Upgrade to @code{libf2c} as of 1999-06-28.

This fixes a bug whereby
input to a @code{NAMELIST} read involving a repeat count,
such as @samp{K(5)=10*3},
was not properly handled by @code{libf2c}.
The first item was written to @samp{K(5)},
but the remaining nine were written elsewhere (still within the array),
not necessarily starting at @samp{K(6)}.
@end ifclear
@end itemize

@heading In 0.5.25, @code{GCC} 2.95 (@code{EGCS} 1.2) versus @code{EGCS} 1.1.2:
@itemize @bullet
@ifclear USERVISONLY
@item
@command{g77} no longer generates bad code for assignments,
or other conversions,
of @code{REAL} or @code{COMPLEX} constant expressions
to type @code{INTEGER(KIND=2)}
(often referred to as @code{INTEGER*8}).

For example, @samp{INTEGER*8 J; J = 4E10} now works as documented.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer truncates @code{INTEGER(KIND=2)}
(usually @code{INTEGER*8})
subscript expressions when evaluating array references
on systems with pointers widers than @code{INTEGER(KIND=1)}
(such as Alphas).
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer generates bad code
for an assignment to a @code{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.
@end ifclear

@ifclear USERVISONLY
@item
@code{libg2c} (@code{libf2c}) no longer loses track
of the file being worked on
during a @code{BACKSPACE} operation.
@end ifclear

@ifclear USERVISONLY
@item
@code{libg2c} (@code{libf2c}) fixes a bug whereby
input to a @code{NAMELIST} read involving a repeat count,
such as @samp{K(5)=10*3},
was not properly handled by @code{libf2c}.
The first item was written to @samp{K(5)},
but the remaining nine were written elsewhere (still within the array),
not necessarily starting at @samp{K(6)}.
@end ifclear

@ifclear USERVISONLY
@item
@c Tim Prince reported this, regarding the TEST_FPU benchmark.
Automatic arrays now seem to be working on HP-UX systems.
@end ifclear

@ifclear USERVISONLY
@item
The @code{Date} intrinsic now returns the correct result
on big-endian systems.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} so it no longer crashes when compiling
I/O statements using keywords that define @code{INTEGER} values,
such as @samp{IOSTAT=@var{j}},
where @var{j} is other than default @code{INTEGER}
(such as @code{INTEGER*2}).
Instead, it issues a diagnostic.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} so it properly handles @samp{DATA A/@var{rpt}*@var{val}/},
where @var{rpt} is not default @code{INTEGER}, such as @code{INTEGER*2},
instead of producing a spurious diagnostic.
Also fix @samp{DATA (A(I),I=1,N)},
where @samp{N} is not default @code{INTEGER}
to work instead of crashing @command{g77}.
@end ifclear

@ifclear USERVISONLY
@item
The @option{-ax} option is now obeyed when compiling Fortran programs.
(It is passed to the @file{f771} driver.)
@end ifclear

@item
The new @option{-fbounds-check} option
causes @command{g77} to compile run-time bounds checks
of array subscripts, as well as of substring start and end points.

@item
@code{libg2c} now supports building as multilibbed library,
which provides better support for systems
that require options such as @option{-mieee}
to work properly.

@item
Source file names with the suffixes @samp{.FOR} and @samp{.FPP}
now are recognized by @command{g77}
as if they ended in @samp{.for} and @samp{.fpp}, respectively.

@item
The order of arguments to the @emph{subroutine} forms of the
@code{CTime}, @code{DTime}, @code{ETime}, and @code{TtyNam}
intrinsics has been swapped.
The argument serving as the returned value
for the corresponding function forms
now is the @emph{second} argument,
making these consistent with the other subroutine forms
of @code{libU77} intrinsics.

@item
@command{g77} now warns about a reference to an intrinsic
that has an interface that is not Year 2000 (Y2K) compliant.
Also, @code{libg2c} has been changed to increase the likelihood
of catching references to the implementations of these intrinsics
using the @code{EXTERNAL} mechanism
(which would avoid the new warnings).

@ifset DOC-G77
@xref{Year 2000 (Y2K) Problems}, for more information.
@end ifset

@ifclear USERVISONLY
@item
@command{g77} now warns about a reference to a function
when the corresponding @emph{subsequent} function program unit
disagrees with the reference concerning the type of the function.
@end ifclear

@item
@option{-fno-emulate-complex} is now the default option.
This should result in improved performance
of code that uses the @code{COMPLEX} data type.

@cindex alignment
@cindex double-precision performance
@cindex -malign-double
@item
The @option{-malign-double} option
now reliably aligns @emph{all} double-precision variables and arrays
on Intel x86 targets.

@ifclear USERVISONLY
@item
Even without the @option{-malign-double} option,
@command{g77} reliably aligns local double-precision variables
that are not in @code{EQUIVALENCE} areas
and not @code{SAVE}'d.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} now open-codes (``inlines'') division of @code{COMPLEX} operands
instead of generating a run-time call to
the @code{libf2c} routines @code{c_div} or @code{z_div},
unless the @option{-Os} option is specified.
@end ifclear

@item
@command{g77} no longer generates code to maintain @code{errno},
a C-language concept,
when performing operations such as the @code{SqRt} intrinsic.

@ifclear USERVISONLY
@item
@command{g77} developers can temporarily use
the @option{-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.
@end ifclear

@ifclear USERVISONLY
@item
A substantial portion of the @command{g77} front end's code-generation component
was rewritten.
It now generates code using facilities more robustly supported
by the @command{gcc} back end.
One effect of this rewrite is that some codes no longer produce
a spurious ``label @var{lab} used before containing binding contour''
message.
@end ifclear

@item
Support for the @option{-fugly} option has been removed.

@ifclear USERVISONLY
@item
Improve documentation and indexing,
including information on Year 2000 (Y2K) compliance,
and providing more information on internals of the front end.
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{libf2c} as of 1999-05-10.
@end ifclear
@end itemize

@heading In 0.5.24 versus 0.5.23:

There is no @command{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 @command{gcc} 2.8.1,
as 0.5.24 was planned to require.

Due to @code{EGCS} becoming @code{GCC}
(which is now an acronym for ``GNU Compiler Collection''),
and @code{EGCS} 1.2 becoming officially designated @code{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 @command{g77} versions within @code{EGCS} versions 1.0 and 1.1,
as well as in versions of @command{g77} documentation and notices
during that period,
``mainline'' @command{g77} version numbering resumes
at 0.5.25 with @code{GCC} 2.95 (@code{EGCS} 1.2),
skipping over 0.5.24 as a placeholder version number.

To repeat, there is no @command{g77} 0.5.24, but there is now a 0.5.25.
Please remain calm and return to your keypunch units.

@c 1999-03-15: EGCS 1.1.2 released.
@heading In @code{EGCS} 1.1.2 versus @code{EGCS} 1.1.1:
@ifclear USERVISONLY
@itemize @bullet
@item
Fix the @code{IDate} intrinsic (VXT) (in @code{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.

@ifset DOC-G77
@xref{IDate Intrinsic (VXT)},
for more information.
@end ifset

@item
Fix the @code{Date_and_Time} intrinsic (in @code{libg2c})
to return the milliseconds value properly
in @var{Values}(8).

@item
Fix the @code{LStat} intrinsic (in @code{libg2c})
to return device-ID information properly
in @var{SArray}(7).

@item
Improve documentation.
@end itemize
@end ifclear

@c 1998-12-04: EGCS 1.1.1 released.
@heading In @code{EGCS} 1.1.1 versus @code{EGCS} 1.1:
@ifclear USERVISONLY
@itemize @bullet
@item
Fix @code{libg2c} so it performs an implicit @code{ENDFILE} operation
(as appropriate)
whenever a @code{REWIND} is done.

(This bug was introduced in 0.5.23 and @code{egcs} 1.1 in
@command{g77}'s version of @code{libf2c}.)

@item
Fix @code{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 @code{egcs} 1.1 in
@command{g77}'s version of @code{libf2c}.)

@item
Fix @command{g77} so it no longer crashes compiling references
to the @code{Rand} intrinsic on some systems.

@item
Fix @command{g77} portion of installation process so it works
better on some systems
(those with shells requiring @samp{else true} clauses
on @code{if} constructs
for the completion code to be set properly).
@end itemize
@end ifclear

@c 1998-09-03: EGCS 1.1 released.
@heading In @code{EGCS} 1.1 versus @code{EGCS} 1.0.3:
@itemize @bullet
@ifclear USERVISONLY
@item
Fix bugs in the @code{libU77} intrinsic @code{HostNm}
that wrote one byte beyond the end of its @code{CHARACTER}
argument,
and in the @code{libU77} intrinsics
@code{GMTime} and @code{LTime}
that overwrote their arguments.
@end ifclear

@ifclear USERVISONLY
@item
Assumed arrays with negative bounds
(such as @samp{REAL A(-1:*)})
no longer elicit spurious diagnostics from @command{g77},
even on systems with pointers having
different sizes than integers.

This bug is not known to have existed in any
recent version of @command{gcc}.
It was introduced in an early release of @code{egcs}.
@end ifclear

@ifclear USERVISONLY
@item
Valid combinations of @code{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 @command{g77}.
@end ifclear

@ifclear USERVISONLY
@item
@code{CASE DEFAULT} no longer crashes @command{g77}.
@end ifclear

@ifclear USERVISONLY
@item
The @option{-Wunused} option no longer issues a spurious
warning about the ``master'' procedure generated by
@command{g77} for procedures containing @code{ENTRY} statements.
@end ifclear

@item
Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
compile-time constant @code{INTEGER} expression.

@item
Fix @command{g77} @option{-g} option so procedures that
use @code{ENTRY} can be stepped through, line by line,
in @command{gdb}.

@item
Allow any @code{REAL} argument to intrinsics
@code{Second} and @code{CPU_Time}.

@item
Use @code{tempnam}, if available, to open scratch files
(as in @samp{OPEN(STATUS='SCRATCH')})
so that the @code{TMPDIR} environment variable,
if present, is used.

@item
@command{g77}'s version of @code{libf2c} separates out
the setting of global state
(such as command-line arguments and signal handling)
from @file{main.o} into distinct, new library
archive members.

This should make it easier to write portable applications
that have their own (non-Fortran) @code{main()} routine
properly set up the @code{libf2c} environment, even
when @code{libf2c} (now @code{libg2c}) is a shared library.

@ifclear USERVISONLY
@item
@command{g77} no longer installs the @file{f77} command
and @file{f77.1} man page
in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f77-install-ok} file exists
in the source or build directory.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer installs the @file{libf2c.a} library
and @file{f2c.h} include file
in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f2c-install-ok} or @file{f2c-exists-ok} files exist
in the source or build directory.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
The @file{libf2c.a} library produced by @command{g77} has been
renamed to @file{libg2c.a}.
It is installed only in the @command{gcc} ``private''
directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the @code{libf2c} library from @code{netlib} they
wish to use on a case-by-case basis.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
The @file{f2c.h} include (header) file produced by @command{g77}
has been renamed to @file{g2c.h}.
It is installed only in the @command{gcc} ``private''
directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the include file from @code{netlib} they
wish to use on a case-by-case basis.
See the installation documentation for more information.
@end ifclear

@item
The @command{g77} command now expects the run-time library
to be named @code{libg2c.a} instead of @code{libf2c.a},
to ensure that a version other than the one built and
installed as part of the same @command{g77} version is picked up.

@ifclear USERVISONLY
@item
During the configuration and build process,
@command{g77} creates subdirectories it needs only as it
needs them.
Other cleaning up of the configuration and build process
has been performed as well.
@end ifclear

@ifclear USERVISONLY
@item
@code{install-info} now used to update the directory of
Info documentation to contain an entry for @command{g77}
(during installation).
@end ifclear

@item
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 @code{OPEN}, @code{INQUIRE}, @code{READ}, and
@code{WRITE} statements,
and about truncations of various sorts of constants.

@ifclear USERVISONLY
@item
Improve compilation of @code{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 @code{libf2c} for statements like @samp{PRINT '(I1', 42}.
@end ifclear

@ifclear USERVISONLY
@item
Improve documentation and indexing.
@end ifclear

@ifclear USERVISONLY
@item
The upgrade to @code{libf2c} as of 1998-06-18
should fix a variety of problems, including
those involving some uses of the @code{T} format
specifier, and perhaps some build (porting) problems
as well.
@end ifclear
@end itemize

@c 1998-09-03: EGCS 1.1 released.
@heading In @code{EGCS} 1.1 versus @command{g77} 0.5.23:
@itemize @bullet
@ifclear USERVISONLY
@cindex DNRM2
@cindex stack, 387 coprocessor
@cindex Intel x86
@cindex -O2
@item
Fix a code-generation bug that afflicted
Intel x86 targets when @option{-O2} was specified
compiling, for example, an old version of
the @code{DNRM2} routine.

The x87 coprocessor stack was being
mismanaged in cases involving assigned @code{GOTO}
and @code{ASSIGN}.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer produces incorrect code
and initial values
for @code{EQUIVALENCE} and @code{COMMON}
aggregates that, due to ``unnatural'' ordering of members
vis-a-vis their types, require initial padding.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash compiling code
containing the construct @samp{CMPLX(0.)} or similar.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer crashes when compiling code
containing specification statements such as
@samp{INTEGER(KIND=7) PTR}.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer crashes when compiling code
such as @samp{J = SIGNAL(1, 2)}.
@end ifclear

@item
@command{g77} now treats @samp{%LOC(@var{expr})} and
@samp{LOC(@var{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 @command{g77} actually generates code
for these cases.

Previously, @command{g77} treated these expressions
as denoting special ``pointer'' arguments
for the purposes of filewide analysis.

@ifclear USERVISONLY
@item
Fix @command{g77} crash
(or apparently infinite run-time)
when compiling certain complicated expressions
involving @code{COMPLEX} arithmetic
(especially multiplication).
@end ifclear

@cindex alignment
@cindex double-precision performance
@cindex -malign-double
@item
Align static double-precision variables and arrays
on Intel x86 targets
regardless of whether @option{-malign-double} is specified.

Generally, this affects only local variables and arrays
having the @code{SAVE} attribute
or given initial values via @code{DATA}.

@item
The @command{g77} driver now ensures that @option{-lg2c}
is specified in the link phase prior to any
occurrence of @option{-lm}.
This prevents accidentally linking to a routine
in the SunOS4 @option{-lm} library
when the generated code wants to link to the one
in @code{libf2c} (@code{libg2c}).

@item
@command{g77} emits more debugging information when
@option{-g} is used.

This new information allows, for example,
@kbd{which __g77_length_a} to be used in @command{gdb}
to determine the type of the phantom length argument
supplied with @code{CHARACTER} variables.

This information pertains to internally-generated
type, variable, and other information,
not to the longstanding deficiencies vis-a-vis
@code{COMMON} and @code{EQUIVALENCE}.

@item
The F90 @code{Date_and_Time} intrinsic now is
supported.

@item
The F90 @code{System_Clock} intrinsic allows
the optional arguments (except for the @code{Count}
argument) to be omitted.

@ifclear USERVISONLY
@item
Upgrade to @code{libf2c} as of 1998-06-18.
@end ifclear

@ifclear USERVISONLY
@item
Improve documentation and indexing.
@end ifclear
@end itemize

@ifset DOC-NEWS
@heading In previous versions:

Information on previous versions is not provided
in this @file{@value{path-g77}/NEWS} file,
to keep it short.
See @file{@value{path-g77}/news.texi},
or any of its other derivations
(Info, HTML, dvi forms)
for such information.
@end ifset

@ifclear DOC-NEWS
@c 1998-05-20: 0.5.23 released.
@heading In 0.5.23 versus 0.5.22:
@itemize @bullet
@item
This release contains several regressions against
version 0.5.22 of @command{g77}, due to using the
``vanilla'' @command{gcc} back end instead of patching
it to fix a few bugs and improve performance in a
few cases.

Features that have been dropped from this version
of @command{g77} due to their being implemented
via @command{g77}-specific patches to the @command{gcc}
back end in previous releases include:

@itemize @minus
@item
Support for @code{__restrict__} keyword,
the options @option{-fargument-alias}, @option{-fargument-noalias},
and @option{-fargument-noalias-global},
and the corresponding alias-analysis code.

(@code{egcs} has the alias-analysis
code, but not the @code{__restrict__} keyword.
@code{egcs} @command{g77} users benefit from the alias-analysis
code despite the lack of the @code{__restrict__} keyword,
which is a C-language construct.)

@item
Support for the GNU compiler options
@option{-fmove-all-movables},
@option{-freduce-all-givs},
and @option{-frerun-loop-opt}.

(@code{egcs} supports these options.
@command{g77} users of @code{egcs} benefit from them even if
they are not explicitly specified,
because the defaults are optimized for @command{g77} users.)

@item
Support for the @option{-W} option warning about
integer division by zero.

@item
The Intel x86-specific option @option{-malign-double}
applying to stack-allocated data
as well as statically-allocate data.
@end itemize

@ifclear USERVISONLY
Note that the @file{gcc/f/gbe/} subdirectory has been removed
from this distribution as a result of @command{g77} no longer
including patches for the @command{gcc} back end.
@end ifclear

@ifclear USERVISONLY
@item
Fix bugs in the @code{libU77} intrinsic @code{HostNm}
that wrote one byte beyond the end of its @code{CHARACTER}
argument,
and in the @code{libU77} intrinsics
@code{GMTime} and @code{LTime}
that overwrote their arguments.
@end ifclear

@item
Support @command{gcc} version 2.8,
and remove support for prior versions of @command{gcc}.

@cindex -@w{}-driver option
@cindex @command{g77} options, -@w{}-driver
@cindex options, -@w{}-driver
@item
Remove support for the @option{--driver} option,
as @command{g77} now does all the driving,
just like @command{gcc}.

@ifclear USERVISONLY
@item
@code{CASE DEFAULT} no longer crashes @command{g77}.
@end ifclear

@ifclear USERVISONLY
@item
Valid combinations of @code{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 @command{g77}.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer installs the @file{f77} command
and @file{f77.1} man page
in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f77-install-ok} file exists
in the source or build directory.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} no longer installs the @file{libf2c.a} library
and @file{f2c.h} include file
in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f2c-install-ok} or @file{f2c-exists-ok} files exist
in the source or build directory.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
The @file{libf2c.a} library produced by @command{g77} has been
renamed to @file{libg2c.a}.
It is installed only in the @command{gcc} ``private''
directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the @code{libf2c} library from @code{netlib} they
wish to use on a case-by-case basis.
See the installation documentation for more information.
@end ifclear

@ifclear USERVISONLY
@item
The @file{f2c.h} include (header) file produced by @command{g77}
has been renamed to @file{g2c.h}.
It is installed only in the @command{gcc} ``private''
directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the include file from @code{netlib} they
wish to use on a case-by-case basis.
See the installation documentation for more information.
@end ifclear

@item
The @command{g77} command now expects the run-time library
to be named @code{libg2c.a} instead of @code{libf2c.a},
to ensure that a version other than the one built and
installed as part of the same @command{g77} version is picked up.

@ifclear USERVISONLY
@item
The @option{-Wunused} option no longer issues a spurious
warning about the ``master'' procedure generated by
@command{g77} for procedures containing @code{ENTRY} statements.
@end ifclear

@item
@command{g77}'s version of @code{libf2c} separates out
the setting of global state
(such as command-line arguments and signal handling)
from @file{main.o} into distinct, new library
archive members.

This should make it easier to write portable applications
that have their own (non-Fortran) @code{main()} routine
properly set up the @code{libf2c} environment, even
when @code{libf2c} (now @code{libg2c}) is a shared library.

@ifclear USERVISONLY
@item
During the configuration and build process,
@command{g77} creates subdirectories it needs only as it
needs them, thus avoiding unnecessary creation of, for example,
@file{stage1/f/runtime} when doing a non-bootstrap build.
Other cleaning up of the configuration and build process
has been performed as well.
@end ifclear

@ifclear USERVISONLY
@item
@code{install-info} now used to update the directory of
Info documentation to contain an entry for @command{g77}
(during installation).
@end ifclear

@item
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 @code{OPEN}, @code{INQUIRE}, @code{READ}, and
@code{WRITE} statements,
and about truncations of various sorts of constants.

@ifclear USERVISONLY
@item
Improve documentation and indexing.
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{libf2c} as of 1998-04-20.

This should fix a variety of problems, including
those involving some uses of the @code{T} format
specifier, and perhaps some build (porting) problems
as well.
@end ifclear
@end itemize

@c 1998-03-16: 0.5.22 released.
@heading In 0.5.22 versus 0.5.21:
@itemize @bullet
@ifclear USERVISONLY
@item
Fix code generation for iterative @code{DO} loops that
have one or more references to the iteration variable,
or to aliases of it, in their control expressions.
For example, @samp{DO 10 J=2,J} now is compiled correctly.
@end ifclear

@ifclear USERVISONLY
@cindex DNRM2
@cindex stack, 387 coprocessor
@cindex Intel x86
@cindex -O2
@item
Fix a code-generation bug that afflicted
Intel x86 targets when @option{-O2} was specified
compiling, for example, an old version of
the @code{DNRM2} routine.

The x87 coprocessor stack was being
mismanaged in cases involving assigned @code{GOTO}
and @code{ASSIGN}.
@end ifclear

@ifclear USERVISONLY
@item
Fix @code{DTime} intrinsic so as not to truncate
results to integer values (on some systems).
@end ifclear

@item
Fix @code{Signal} intrinsic so it offers portable
support for 64-bit systems (such as Digital Alphas
running GNU/Linux).

@ifclear USERVISONLY
@item
Fix run-time crash involving @code{NAMELIST} on 64-bit
machines such as Alphas.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} version of @code{libf2c} so it no longer
produces a spurious @samp{I/O recursion} diagnostic at run time
when an I/O operation (such as @samp{READ *,I}) is interrupted
in a manner that causes the program to be terminated
via the @code{f_exit} routine (such as via @kbd{C-c}).
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash triggered by @code{CASE} statement with
an omitted lower or upper bound.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash compiling references to @code{CPU_Time}
intrinsic.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash
(or apparently infinite run-time)
when compiling certain complicated expressions
involving @code{COMPLEX} arithmetic
(especially multiplication).
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash on statements such as
@samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
@samp{Z} is @code{DOUBLE COMPLEX}.
@end ifclear

@ifclear USERVISONLY
@item
Fix a @command{g++} crash.
@end ifclear

@item
Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
compile-time constant @code{INTEGER} expression.

@item
Fix @command{g77} @option{-g} option so procedures that
use @code{ENTRY} can be stepped through, line by line,
in @command{gdb}.

@ifclear USERVISONLY
@item
Fix a profiling-related bug in @command{gcc} back end for
Intel x86 architecture.
@end ifclear

@item
Allow any @code{REAL} argument to intrinsics
@code{Second} and @code{CPU_Time}.

@item
Allow any numeric argument to intrinsics
@code{Int2} and @code{Int8}.

@item
Use @code{tempnam}, if available, to open scratch files
(as in @samp{OPEN(STATUS='SCRATCH')})
so that the @code{TMPDIR} environment variable,
if present, is used.

@item
Rename the @command{gcc} keyword @code{restrict} to
@code{__restrict__}, to avoid rejecting valid, existing,
C programs.
Support for @code{restrict} is now more like support
for @code{complex}.

@ifclear USERVISONLY
@item
Fix @option{-fpedantic} to not reject procedure invocations
such as @samp{I=J()} and @samp{CALL FOO()}.
@end ifclear

@item
Fix @option{-fugly-comma} to affect invocations of
only external procedures.
Restore rejection of gratuitous trailing omitted
arguments to intrinsics, as in @samp{I=MAX(3,4,,)}.

@item
Fix compiler so it accepts @option{-fgnu-intrinsics-*} and
@option{-fbadu77-intrinsics-*} options.

@ifclear USERVISONLY
@item
Improve diagnostic messages from @code{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 @command{f2c}, @command{g77} did not append
a null byte to its compiled form of every
format string specified via a @code{FORMAT} statement.
However, @command{f2c} would exhibit the problem
anyway for a statement like @samp{PRINT '(I)garbage', 1}
by printing @samp{(I)garbage} as the format string.)
@end ifclear

@ifclear USERVISONLY
@item
Improve compilation of @code{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 @code{libf2c} for statements like @samp{PRINT '(I1', 42}.
@end ifclear

@ifclear USERVISONLY
@item
Fix various crashes involving code with diagnosed errors.
@end ifclear

@ifclear USERVISONLY
@item
Fix cross-compilation bug when configuring @code{libf2c}.
@end ifclear

@ifclear USERVISONLY
@item
Improve diagnostics.
@end ifclear

@ifclear USERVISONLY
@item
Improve documentation and indexing.
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{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).
@end ifclear
@end itemize

@c 1998-03-18: EGCS 1.0.2 released.
@heading In @code{EGCS} 1.0.2 versus @code{EGCS} 1.0.1:
@itemize @bullet
@ifclear USERVISONLY
@item
Fix @command{g77} crash triggered by @code{CASE} statement with
an omitted lower or upper bound.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} crash on statements such as
@samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
@samp{Z} is @code{DOUBLE COMPLEX}.
@end ifclear

@ifclear USERVISONLY
@cindex ELF support
@cindex support, ELF
@cindex -fPIC option
@cindex options, -fPIC
@item
Fix @option{-fPIC} (such as compiling for ELF targets)
on the Intel x86 architecture target
so invalid assembler code is no longer produced.
@end ifclear

@ifclear USERVISONLY
@item
Fix @option{-fpedantic} to not reject procedure invocations
such as @samp{I=J()} and @samp{CALL FOO()}.
@end ifclear

@ifclear USERVISONLY
@item
Fix @option{-fugly-comma} to affect invocations of
only external procedures.
Restore rejection of gratuitous trailing omitted
arguments to intrinsics, as in @samp{I=MAX(3,4,,)}.
@end ifclear

@item
Fix compiler so it accepts @option{-fgnu-intrinsics-*} and
@option{-fbadu77-intrinsics-*} options.
@end itemize

@c 1998-01-06: EGCS 1.0.1 released.
@heading In @code{EGCS} 1.0.1 versus @code{EGCS} 1.0:
@ifclear USERVISONLY
@itemize @bullet
@item
Fix run-time crash involving @code{NAMELIST} on 64-bit
machines such as Alphas.
@end itemize
@end ifclear

@c 1997-12-03: EGCS 1.0 released.
@heading In @code{EGCS} 1.0 versus @command{g77} 0.5.21:
@itemize @bullet
@item
Version 1.0 of @code{egcs}
contains several regressions against
version 0.5.21 of @command{g77},
due to using the
``vanilla'' @command{gcc} back end instead of patching
it to fix a few bugs and improve performance in a
few cases.

Features that have been dropped from this version
of @command{g77} due to their being implemented
via @command{g77}-specific patches to the @command{gcc}
back end in previous releases include:

@itemize @minus
@item
Support for the C-language @code{restrict} keyword.

@item
Support for the @option{-W} option warning about
integer division by zero.

@item
The Intel x86-specific option @option{-malign-double}
applying to stack-allocated data
as well as statically-allocate data.
@end itemize

@ifclear USERVISONLY
Note that the @file{gcc/f/gbe/} subdirectory has been removed
from this distribution as a result of @command{g77}
being fully integrated with
the @code{egcs} variant of the @command{gcc} back end.
@end ifclear

@ifclear USERVISONLY
@item
Fix code generation for iterative @code{DO} loops that
have one or more references to the iteration variable,
or to aliases of it, in their control expressions.
For example, @samp{DO 10 J=2,J} now is compiled correctly.
@end ifclear

@ifclear USERVISONLY
@item
Fix @code{DTime} intrinsic so as not to truncate
results to integer values (on some systems).
@end ifclear

@ifclear USERVISONLY
@item
@c Toon Moene discovered these.
Some Fortran code, miscompiled
by @command{g77} built on @command{gcc} version 2.8.1
on m68k-next-nextstep3 configurations
when using the @option{-O2} option,
is now compiled correctly.
It is believed that a C function known to miscompile
on that configuration
when using the @samp{-O2 -funroll-loops} options
also is now compiled correctly.
@end ifclear

@ifclear USERVISONLY
@item
Remove support for non-@code{egcs} versions of @command{gcc}.
@end ifclear

@cindex -@w{}-driver option
@cindex @command{g77} options, -@w{}-driver
@cindex options, -@w{}-driver
@item
Remove support for the @option{--driver} option,
as @command{g77} now does all the driving,
just like @command{gcc}.

@item
Allow any numeric argument to intrinsics
@code{Int2} and @code{Int8}.

@ifclear USERVISONLY
@item
Improve diagnostic messages from @code{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 @command{f2c}, @command{g77} did not append
a null byte to its compiled form of every
format string specified via a @code{FORMAT} statement.
However, @code{f2c} would exhibit the problem
anyway for a statement like @samp{PRINT '(I)garbage', 1}
by printing @samp{(I)garbage} as the format string.)
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{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).
@end ifclear
@end itemize

@c 1997-09-09: 0.5.21 released.
@heading In 0.5.21:
@itemize @bullet
@ifclear USERVISONLY
@item
Fix a code-generation bug introduced by 0.5.20
caused by loop unrolling (by specifying
@option{-funroll-loops} or similar).
This bug afflicted all code compiled by
version 2.7.2.2.f.2 of @command{gcc} (C, C++,
Fortran, and so on).
@end ifclear

@ifclear USERVISONLY
@item
Fix a code-generation bug manifested when
combining local @code{EQUIVALENCE} with a
@code{DATA} statement that follows
the first executable statement (or is
treated as an executable-context statement
as a result of using the @option{-fpedantic}
option).
@end ifclear

@ifclear USERVISONLY
@item
Fix a compiler crash that occurred when an
integer division by a constant zero is detected.
Instead, when the @option{-W} option is specified,
the @command{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 @command{gcc} (C, C++,
Fortran, and so on).
@end ifclear
@ifset USERVISONLY
@item
When the @option{-W} option is specified, @command{gcc}, @command{g77},
and other GNU compilers that incorporate the @command{gcc}
back end as modified by @command{g77}, issue
a warning about integer division by constant zero.
@end ifset

@ifclear USERVISONLY
@item
Fix a compiler crash that occurred in some cases
of procedure inlining.
(Such cases became more frequent in 0.5.20.)
@end ifclear

@ifclear USERVISONLY
@item
Fix a compiler crash resulting from using @code{DATA}
or similar to initialize a @code{COMPLEX} variable or
array to zero.
@end ifclear

@ifclear USERVISONLY
@item
Fix compiler crashes involving use of @code{AND}, @code{OR},
or @code{XOR} intrinsics.
@end ifclear

@ifclear USERVISONLY
@item
Fix compiler bug triggered when using a @code{COMMON}
or @code{EQUIVALENCE} variable
as the target of an @code{ASSIGN}
or assigned-@code{GOTO} statement.
@end ifclear

@ifclear USERVISONLY
@item
Fix compiler crashes due to using the name of a some
non-standard intrinsics (such as @code{FTell} or
@code{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.
@end ifclear

@c @command{g77}'s version of @code{libf2c} has been modified
@c so that the external names of library's procedures do not
@c conflict with names used for Fortran procedures compiled
@c by @command{g77}.
@c An additional layer of jacket procedures has been added
@c to @code{libf2c} to map the old names to the new names,
@c for automatic use by programs that interface to the
@c library procedures via the external-procedure mechanism.
@c 
@c For example, the intrinsic @code{FPUTC} previously was
@c implemented by @command{g77} as a call to the @code{libf2c}
@c routine @code{fputc_}.
@c This would conflict with a Fortran procedure named @code{FPUTC}
@c (using default compiler options), and this conflict
@c would cause a crash under certain circumstances.
@c 
@c Now, the intrinsic @code{FPUTC} calls @code{G77_fputc_0},
@c which does not conflict with the @code{fputc_} external
@c that implements a Fortran procedure named @code{FPUTC}.
@c 
@c Programs that refer to @code{FPUTC} as an external procedure
@c without supplying their own implementation will link to
@c the new @code{libf2c} routine @code{fputc_}, which is
@c simply a jacket routine that calls @code{G77_fputc_0}.

@ifclear USERVISONLY
@item
Place automatic arrays on the stack, even if
@code{SAVE} or the @option{-fno-automatic} option
is in effect.
This avoids a compiler crash in some cases.
@end ifclear

@ifclear USERVISONLY
@item
The @option{-malign-double} option now reliably aligns
@code{DOUBLE PRECISION} optimally on Pentium and
Pentium Pro architectures (586 and 686 in @command{gcc}).
@end ifclear

@item
New option @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 @command{g77}.

@item
New option @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 @option{-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.

@ifclear USERVISONLY
@item
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.
@end ifclear

@ifclear USERVISONLY
@item
Fix parsing bug whereby @command{g77} rejected a
second initialization specification immediately
following the first's closing @samp{/} without
an intervening comma in a @code{DATA} statement,
and the second specification was an implied-DO list.
@end ifclear

@ifclear USERVISONLY
@item
Improve performance of the @command{gcc} back end so
certain complicated expressions involving @code{COMPLEX}
arithmetic (especially multiplication) don't appear to
take forever to compile.
@end ifclear

@ifclear USERVISONLY
@item
Fix a couple of profiling-related bugs in @command{gcc}
back end.
@end ifclear

@ifclear USERVISONLY
@item
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.
@end ifclear

@ifclear USERVISONLY
@item
Include some other @command{gcc} fixes that seem useful in
@command{g77}'s version of @command{gcc}.
(See @file{gcc/ChangeLog} for details---compare it
to that file in the vanilla @code{gcc-2.7.2.3.tar.gz}
distribution.)
@end ifclear

@item
Fix @code{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 (@samp{CHAR(0)})
to the significant trailing blanks.

@item
Fix @code{CHMOD} intrinsic to work with file names
that have embedded blanks, commas, and so on.

@item
Fix @code{SIGNAL} intrinsic so it accepts an
optional third @code{Status} argument.

@ifclear USERVISONLY
@item
Fix @code{IDATE()} intrinsic subroutine (VXT form)
so it accepts arguments in the correct order.
Documentation fixed accordingly, and for
@code{GMTIME()} and @code{LTIME()} as well.
@end ifclear

@item
Make many changes to @code{libU77} intrinsics to
support existing code more directly.

Such changes include allowing both subroutine and
function forms of many routines, changing @code{MCLOCK()}
and @code{TIME()} to return @code{INTEGER(KIND=1)} values,
introducing @code{MCLOCK8()} and @code{TIME8()} to
return @code{INTEGER(KIND=2)} values,
and placing functions that are intended to perform
side effects in a new intrinsic group, @code{badu77}.

@ifclear USERVISONLY
@item
Improve @code{libU77} so it is more portable.
@end ifclear

@item
Add options @option{-fbadu77-intrinsics-delete},
@option{-fbadu77-intrinsics-hide}, and so on.

@ifclear USERVISONLY
@item
Fix crashes involving diagnosed or invalid code.
@end ifclear

@ifclear USERVISONLY
@item
@command{g77} and @command{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.
@end ifclear

@ifclear USERVISONLY
@item
Make some fixes to alias analysis code.
@end ifclear

@ifclear USERVISONLY
@item
Add support for @code{restrict} keyword in @command{gcc}
front end.
@end ifclear

@ifclear USERVISONLY
@item
Support @command{gcc} version 2.7.2.3
(modified by @command{g77} into version 2.7.2.3.f.1),
and remove
support for prior versions of @command{gcc}.
@end ifclear

@ifclear USERVISONLY
@item
Incorporate GNAT's patches to the @command{gcc} back
end into @command{g77}'s, so GNAT users do not need
to apply GNAT's patches to build both GNAT and @command{g77}
from the same source tree.
@end ifclear

@ifclear USERVISONLY
@item
Modify @command{make} rules and related code so that
generation of Info documentation doesn't require
compilation using @command{gcc}.
Now, any ANSI C compiler should be adequate to
produce the @command{g77} documentation (in particular,
the tables of intrinsics) from scratch.
@end ifclear

@item
Add @code{INT2} and @code{INT8} intrinsics.

@item
Add @code{CPU_TIME} intrinsic.

@item
Add @code{ALARM} intrinsic.

@item
@code{CTIME} intrinsic now accepts any @code{INTEGER}
argument, not just @code{INTEGER(KIND=2)}.

@ifclear USERVISONLY
@item
Warn when explicit type declaration disagrees with
the type of an intrinsic invocation.
@end ifclear

@ifclear USERVISONLY
@item
Support @samp{*f771} entry in @command{gcc} @file{specs} file.
@end ifclear

@ifclear USERVISONLY
@item
Fix typo in @command{make} rule @command{g77-cross}, used only for
cross-compiling.
@end ifclear

@ifclear USERVISONLY
@item
Fix @code{libf2c} build procedure to re-archive library
if previous attempt to archive was interrupted.
@end ifclear

@ifclear USERVISONLY
@item
Change @command{gcc} to unroll loops only during the last
invocation (of as many as two invocations) of loop
optimization.
@end ifclear

@ifclear USERVISONLY
@item
Improve handling of @option{-fno-f2c} so that code that
attempts to pass an intrinsic as an actual argument,
such as @samp{CALL FOO(ABS)}, is rejected due to the fact
that the run-time-library routine is, effectively,
compiled with @option{-ff2c} in effect.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} driver to recognize @option{-fsyntax-only}
as an option that inhibits linking, just like @option{-c} or
@option{-S}, and to recognize and properly handle the
@option{-nostdlib}, @option{-M}, @option{-MM}, @option{-nodefaultlibs},
and @option{-Xlinker} options.
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{libf2c} as of 1997-08-16.
@end ifclear

@ifclear USERVISONLY
@item
Modify @code{libf2c} to consistently and clearly diagnose
recursive I/O (at run time).
@end ifclear

@item
@command{g77} driver now prints version information (such as produced
by @kbd{g77 -v}) to @code{stderr} instead of @code{stdout}.

@item
The @samp{.r} suffix now designates a Ratfor source file,
to be preprocessed via the @command{ratfor} command, available
separately.

@ifclear USERVISONLY
@item
Fix some aspects of how @command{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.
@end ifclear

@ifclear USERVISONLY
@item
Improve diagnostics.
@end ifclear

@ifclear USERVISONLY
@item
Improve documentation and indexing.
@end ifclear

@ifclear USERVISONLY
@item
Include all pertinent files for @code{libf2c} that come
from @code{netlib.bell-labs.com}; give any such files
that aren't quite accurate in @command{g77}'s version of
@code{libf2c} the suffix @samp{.netlib}.
@end ifclear

@ifclear USERVISONLY
@item
Reserve @code{INTEGER(KIND=0)} for future use.
@end ifclear
@end itemize

@c 1997-02-28: 0.5.20 released.
@heading In 0.5.20:
@itemize @bullet
@item
The @option{-fno-typeless-boz} option is now the default.

This option specifies that non-decimal-radix
constants using the prefixed-radix form (such as @samp{Z'1234'})
are to be interpreted as @code{INTEGER(KIND=1)} constants.
Specify @option{-ftypeless-boz} to cause such
constants to be interpreted as typeless.

(Version 0.5.19 introduced @option{-fno-typeless-boz} and
its inverse.)

@ifset DOC-G77
@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect},
for information on the @option{-ftypeless-boz} option.
@end ifset

@item
Options @option{-ff90-intrinsics-enable} and
@option{-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 @code{libU77} intrinsics.
Users of such programs might need to compile them
differently (using, for example, @option{-ff90-intrinsics-disable})
or, better yet, insert appropriate @code{EXTERNAL}
statements specifying that these names are not intended
to be names of intrinsics.

@item
The @code{ALWAYS_FLUSH} macro is no longer defined when
building @code{libf2c}, which should result in improved
I/O performance, especially over NFS.

@emph{Note:} If you have code that depends on the behavior
of @code{libf2c} when built with @code{ALWAYS_FLUSH} defined,
you will have to modify @code{libf2c} accordingly before
building it from this and future versions of @command{g77}.

@ifset DOC-G77
@xref{Output Assumed To Flush}, for more information.
@end ifset

@item
Dave Love's implementation of @code{libU77} has been
added to the version of @code{libf2c} distributed with
and built as part of @command{g77}.
@command{g77} now knows about the routines in this library
as intrinsics.

@item
New option @option{-fvxt} specifies that the
source file is written in VXT Fortran, instead of GNU Fortran.

@ifset DOC-G77
@xref{VXT Fortran}, for more information on the constructs
recognized when the @option{-fvxt} option is specified.
@end ifset

@item
The @option{-fvxt-not-f90} option has been deleted,
along with its inverse, @option{-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 @command{g77}.

@ifset DOC-G77
@xref{Other Dialects}, for more information.
@end ifset

@item
The @option{-fugly} option now issues a warning, as it
likely will be removed in a future version.

(Enabling all the @option{-fugly-*} options is unlikely
to be feasible, or sensible, in the future,
so users should learn to specify only those
@option{-fugly-*} options they really need for a
particular source file.)

@item
The @option{-fugly-assumed} option, introduced in
version 0.5.19, has been changed to
better accommodate old and new code.

@ifset DOC-G77
@xref{Ugly Assumed-Size Arrays}, for more information.
@end ifset

@ifclear USERVISONLY
@item
Make a number of fixes to the @command{g77} front end and
the @command{gcc} back end to better support Alpha (AXP)
machines.
This includes providing at least one bug-fix to the
@command{gcc} back end for Alphas.
@end ifclear

@item
Related to supporting Alpha (AXP) machines, the @code{LOC()}
intrinsic and @code{%LOC()} construct now return
values of @code{INTEGER(KIND=0)} type,
as defined by the GNU Fortran language.

This type is wide enough
(holds the same number of bits)
as the character-pointer type on the machine.

On most machines, this won't make a difference,
whereas, on Alphas and other systems with 64-bit pointers,
the @code{INTEGER(KIND=0)} type is equivalent to @code{INTEGER(KIND=2)}
(often referred to as @code{INTEGER*8})
instead of the more common @code{INTEGER(KIND=1)}
(often referred to as @code{INTEGER*4}).

@item
Emulate @code{COMPLEX} arithmetic in the @command{g77} front
end, to avoid bugs in @code{complex} support in the
@command{gcc} back end.
New option @option{-fno-emulate-complex}
causes @command{g77} to revert the 0.5.19 behavior.

@ifclear USERVISONLY
@item
Fix bug whereby @samp{REAL A(1)}, for example, caused
a compiler crash if @option{-fugly-assumed} was in effect
and @var{A} was a local (automatic) array.
That case is no longer affected by the new
handling of @option{-fugly-assumed}.
@end ifclear

@ifclear USERVISONLY
@item
Fix @command{g77} command driver so that @samp{g77 -o foo.f}
no longer deletes @file{foo.f} before issuing other
diagnostics, and so the @option{-x} option is properly
handled.
@end ifclear

@ifclear USERVISONLY
@item
Enable inlining of subroutines and functions by the @command{gcc}
back end.
This works as it does for @command{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.
@end ifclear

@item
Dummy arguments are no longer assumed to potentially alias
(overlap)
other dummy arguments or @code{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 @option{-fforce-addr}
also is specified.

New options @option{-falias-check}, @option{-fargument-alias},
@option{-fargument-noalias},
and @option{-fno-argument-noalias-global} control the
way @command{g77} handles potential aliasing.

@ifset DOC-G77
@xref{Aliasing Assumed To Work}, for detailed information on why the
new defaults might result in some programs no longer working the way they
did when compiled by previous versions of @command{g77}.
@end ifset

@ifclear USERVISONLY
@item
The @code{CONJG()} and @code{DCONJG()} intrinsics now
are compiled in-line.
@end ifclear

@ifclear USERVISONLY
@item
The bug-fix for 0.5.19.1 has been re-done.
The @command{g77} compiler has been changed back to
assume @code{libf2c} has no aliasing problems in
its implementations of the @code{COMPLEX} (and
@code{DOUBLE COMPLEX}) intrinsics.
The @code{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.

@emph{Note:} This change requires version 0.5.20 of
@code{libf2c}, at least, when linking code produced
by any versions of @command{g77} other than 0.5.19.1.
Use @samp{g77 -v} to determine the version numbers
of the @code{libF77}, @code{libI77}, and @code{libU77}
components of the @code{libf2c} library.
(If these version numbers are not printed---in
particular, if the linker complains about unresolved
references to names like @samp{g77__fvers__}---that
strongly suggests your installation has an obsolete
version of @code{libf2c}.)
@end ifclear

@item
New option @option{-fugly-assign} specifies that the
same memory locations are to be used to hold the
values assigned by both statements @samp{I = 3} and
@samp{ASSIGN 10 TO I}, for example.
(Normally, @command{g77} uses a separate memory location
to hold assigned statement labels.)

@ifset DOC-G77
@xref{Ugly Assigned Labels}, for more information.
@end ifset

@item
@code{FORMAT} and @code{ENTRY} statements now are allowed to
precede @code{IMPLICIT NONE} statements.

@ifclear USERVISONLY
@item
Produce diagnostic for unsupported @code{SELECT CASE} on
@code{CHARACTER} type, instead of crashing, at compile time.
@end ifclear

@ifclear USERVISONLY
@item
Fix crashes involving diagnosed or invalid code.
@end ifclear

@ifclear USERVISONLY
@item
Change approach to building @code{libf2c} archive
(@file{libf2c.a}) so that members are added to it
only when truly necessary, so the user that installs
an already-built @command{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).
@end ifclear

@ifclear USERVISONLY
@item
Support @command{gcc} version 2.7.2.2
(modified by @command{g77} into version 2.7.2.2.f.2),
and remove
support for prior versions of @command{gcc}.
@end ifclear

@ifclear USERVISONLY
@item
Upgrade to @code{libf2c} as of 1997-02-08, and
fix up some of the build procedures.
@end ifclear

@ifclear USERVISONLY
@item
Improve general build procedures for @command{g77},
fixing minor bugs (such as deletion of any file
named @file{f771} in the parent directory of @code{gcc/}).
@end ifclear

@item
Enable full support of @code{INTEGER(KIND=2)}
(often referred to as @code{INTEGER*8})
available in
@code{libf2c} and @file{f2c.h} so that @command{f2c} users
may make full use of its features via the @command{g77}
version of @file{f2c.h} and the @code{INTEGER(KIND=2)}
support routines in the @command{g77} version of @code{libf2c}.

@item
Improve @command{g77} driver and @code{libf2c} so that @samp{g77 -v}
yields version information on the library.

@item
The @code{SNGL} and @code{FLOAT} intrinsics now are
specific intrinsics, instead of synonyms for the
generic intrinsic @code{REAL}.

@item
New intrinsics have been added.
These are @code{REALPART}, @code{IMAGPART},
@code{COMPLEX},
@code{LONG}, and @code{SHORT}.

@item
A new group of intrinsics, @code{gnu}, has been added
to contain the new @code{REALPART}, @code{IMAGPART},
and @code{COMPLEX} intrinsics.
An old group, @code{dcp}, has been removed.

@item
Complain about industry-wide ambiguous references
@samp{REAL(@var{expr})} and @samp{AIMAG(@var{expr})},
where @var{expr} is @code{DOUBLE COMPLEX} (or any
complex type other than @code{COMPLEX}), unless
@option{-ff90} option specifies Fortran 90 interpretation
or new @option{-fugly-complex} option, in conjunction with
@option{-fnot-f90}, specifies @command{f2c} interpretation.

@ifclear USERVISONLY
@item
Make improvements to diagnostics.
@end ifclear

@ifclear USERVISONLY
@item
Speed up compiler a bit.
@end ifclear

@ifclear USERVISONLY
@item
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 @code{M} for the node
@code{Diagnostics} in the top-level menu of
the Info documentation.)
@end ifclear
@end itemize

@ifclear DOC-OLDNEWS
@heading In previous versions:

Information on previous versions is archived
in @file{@value{path-g77}/news.texi}
following the test of the @code{DOC-OLDNEWS} macro.
@end ifclear

@ifset DOC-OLDNEWS
@c 1997-02-01: 0.5.19.1 released.
@heading In 0.5.19.1:
@itemize @bullet
@item
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: @code{CONJG()},
@code{DCONJG()}, @code{CCOS()}, @code{CDCOS()},
@code{CLOG()}, @code{CDLOG()}, @code{CSIN()}, @code{CDSIN()},
@code{CSQRT()}, @code{CDSQRT()}, complex division, and
raising a @code{DOUBLE COMPLEX} operand to an @code{INTEGER}
power.
(The related generic and @samp{Z}-prefixed intrinsics,
such as @code{ZSIN()}, also were affected.)

For example, @samp{C = CSQRT(C)}, @samp{Z = Z/C}, and @samp{Z = Z**I}
(where @samp{C} is @code{COMPLEX} and @samp{Z} is
@code{DOUBLE COMPLEX}) have been fixed.
@end itemize

@c 1996-12-07: 0.5.19 released.
@heading In 0.5.19:
@itemize @bullet
@item
Fix @code{FORMAT} statement parsing so negative values for
specifiers such as @code{P} (e.g. @samp{FORMAT(-1PF8.1)})
are correctly processed as negative.

@item
Fix @code{SIGNAL} intrinsic so it once again accepts a
procedure as its second argument.

@item
A temporary kludge option provides bare-bones information on
@code{COMMON} and @code{EQUIVALENCE} members at debug time.

@item
New @option{-fonetrip} option specifies FORTRAN-66-style
one-trip @code{DO} loops.

@item
New @option{-fno-silent} option causes names of program units
to be printed as they are compiled, in a fashion similar to
UNIX @command{f77} and @command{f2c}.

@item
New @option{-fugly-assumed} option specifies that arrays
dimensioned via @samp{DIMENSION X(1)}, for example, are to be
treated as assumed-size.

@item
New @option{-fno-typeless-boz} option specifies that non-decimal-radix
constants using the prefixed-radix form (such as @samp{Z'1234'})
are to be interpreted as @code{INTEGER} constants.

@item
New @option{-ff66} option is a ``shorthand'' option that specifies
behaviors considered appropriate for FORTRAN 66 programs.

@item
New @option{-ff77} option is a ``shorthand'' option that specifies
behaviors considered appropriate for UNIX @command{f77} programs.

@item
New @option{-fugly-comma} and @option{-fugly-logint} options provided
to perform some of what @option{-fugly} used to do.
@option{-fugly} and @option{-fno-ugly} are now ``shorthand'' options,
in that they do nothing more than enable (or disable) other
@option{-fugly-*} options.

@item
Fix parsing of assignment statements involving targets that
are substrings of elements of @code{CHARACTER} arrays having
names such as @samp{READ}, @samp{WRITE}, @samp{GOTO}, and
@samp{REALFUNCTIONFOO}.

@item
Fix crashes involving diagnosed code.

@item
Fix handling of local @code{EQUIVALENCE} areas so certain cases
of valid Fortran programs are not misdiagnosed as improperly
extending the area backwards.

@item
Support @command{gcc} version 2.7.2.1.

@item
Upgrade to @code{libf2c} as of 1996-09-26, and
fix up some of the build procedures.

@item
Change code generation for list-directed I/O so it allows
for new versions of @code{libf2c} that might return non-zero
status codes for some operations previously assumed to always
return zero.

This change not only affects how @code{IOSTAT=} variables
are set by list-directed I/O, it also affects whether
@code{END=} and @code{ERR=} labels are reached by these
operations.

@item
Add intrinsic support for new @code{FTELL} and @code{FSEEK}
procedures in @code{libf2c}.

@item
Modify @code{fseek_()} in @code{libf2c} to be more portable
(though, in practice, there might be no systems where this
matters) and to catch invalid @code{whence} arguments.

@item
Some useless warnings from the @option{-Wunused} option have
been eliminated.

@item
Fix a problem building the @file{f771} executable
on AIX systems by linking with the @option{-bbigtoc} option.

@item
Abort configuration if @command{gcc} has not been patched
using the patch file provided in the @file{gcc/f/gbe/}
subdirectory.

@item
Add options @option{--help} and @option{--version} to the
@command{g77} command, to conform to GNU coding guidelines.
Also add printing of @command{g77} version number when
the @option{--verbose} (@option{-v}) option is used.

@item
Change internally generated name for local @code{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.

@item
Improvements to documentation and indexing.
@end itemize

@c 1996-04-01: 0.5.18 released.
@heading In 0.5.18:
@itemize @bullet
@item
Add some rudimentary support for @code{INTEGER*1},
@code{INTEGER*2}, @code{INTEGER*8},
and their @code{LOGICAL} equivalents.
(This support works on most, maybe all, @command{gcc} targets.)

Thanks to Scott Snyder (@email{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.

@item
Add some rudimentary support for the @code{BYTE} and
@code{WORD} type-declaration statements.
@code{BYTE} corresponds to @code{INTEGER*1},
while @code{WORD} corresponds to @code{INTEGER*2}.

Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
for providing the patch for this!

@item
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 @code{INTEGER*8},
for example.

@item
Support automatic arrays in procedures.

@item
Reduce space/time requirements for handling large
@emph{sparsely} initialized aggregate arrays.
This improvement applies to only a subset of
the general problem to be addressed in 0.6.

@item
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, @option{-fzeros}, is introduced to
enable the traditional treatment of zeros as any
other value.

@item
With @option{-ff90} in force, @command{g77} incorrectly
interpreted @samp{REAL(Z)} as returning a @code{REAL}
result, instead of as a @code{DOUBLE PRECISION}
result.
(Here, @samp{Z} is @code{DOUBLE COMPLEX}.)

With @option{-fno-f90} in force, the interpretation remains
unchanged, since this appears to be how at least some
F77 code using the @code{DOUBLE COMPLEX} extension expected
it to work.

Essentially, @samp{REAL(Z)} in F90 is the same as
@samp{DBLE(Z)}, while in extended F77, it appears to
be the same as @samp{REAL(REAL(Z))}.

@item
An expression involving exponentiation, where both operands
were type @code{INTEGER} and the right-hand operand
was negative, was erroneously evaluated.

@item
Fix bugs involving @code{DATA} implied-@code{DO} constructs
(these involved an errant diagnostic and a crash, both on good
code, one involving subsequent statement-function definition).

@item
Close @code{INCLUDE} files after processing them, so compiling source
files with lots of @code{INCLUDE} statements does not result in
being unable to open @code{INCLUDE} files after all the available
file descriptors are used up.

@item
Speed up compiling, especially of larger programs, and perhaps
slightly reduce memory utilization while compiling (this is
@emph{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.

@item
Introduce three new options that
implement optimizations in the @command{gcc} back end (GBE).
These options are @option{-fmove-all-movables}, @option{-freduce-all-givs},
and @option{-frerun-loop-opt}, which are enabled, by default,
for Fortran compilations.
These optimizations are intended to help toon Fortran programs.

@item
Patch the GBE to do a better job optimizing certain
kinds of references to array elements.

@item
Due to patches to the GBE, the version number of @command{gcc}
also is patched to make it easier to manage installations,
especially useful if it turns out a @command{g77} change to the
GBE has a bug.

The @command{g77}-modified version number is the @command{gcc}
version number with the string @samp{.f.@var{n}} appended,
where @samp{f} identifies the version as enhanced for
Fortran, and @var{n} is @samp{1} for the first Fortran
patch for that version of @command{gcc}, @samp{2} for the
second, and so on.

So, this introduces version 2.7.2.f.1 of @command{gcc}.

@item
Make several improvements and fixes to diagnostics, including
the removal of two that were inappropriate or inadequate.

@item
Warning about two successive arithmetic operators, produced
by @option{-Wsurprising}, now produced @emph{only} when both
operators are, indeed, arithmetic (not relational/boolean).

@item
@option{-Wsurprising} now warns about the remaining cases
of using non-integral variables for implied-@code{DO}
loops, instead of these being rejected unless @option{-fpedantic}
or @option{-fugly} specified.

@item
Allow @code{SAVE} of a local variable or array, even after
it has been given an initial value via @code{DATA}, for example.

@item
Introduce an Info version of @command{g77} documentation, which
supersedes @file{gcc/f/CREDITS}, @file{gcc/f/DOC}, and
@file{gcc/f/PROJECTS}.
These files will be removed in a future release.
The files @file{gcc/f/BUGS}, @file{gcc/f/INSTALL}, and
@file{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
@file{g77-0.5.16/f/DOC} that was contributed to Craig by
David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).

@item
New @option{-fno-second-underscore} option to specify
that, when @option{-funderscoring} is in effect, a second
underscore is not to be appended to Fortran names already
containing an underscore.

@item
Change the way iterative @code{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 @code{DO} variable, but
the result of the calculation is always converted to
the default @code{INTEGER} type.

(This should have no effect on existing code compiled
by @command{g77}, but code written to assume that use
of a @emph{wider} type for the @code{DO} variable
will result in an iteration count being fully calculated
using that wider type (wider
than default @code{INTEGER}) must be rewritten.)

@item
Support @command{gcc} version 2.7.2.

@item
Upgrade to @code{libf2c} as of 1996-03-23, and
fix up some of the build procedures.

Note that the email addresses related to @command{f2c}
have changed---the distribution site now is
named @code{netlib.bell-labs.com}, and the
maintainer's new address is @email{dmg@@bell-labs.com}.
@end itemize

@c 1995-11-18: 0.5.17 released.
@heading In 0.5.17:
@itemize @bullet
@item
@strong{Fix serious bug} in @samp{g77 -v} command that can cause removal of a
system's @file{/dev/null} special file if run by user @code{root}.

@strong{All users} of version 0.5.16 should ensure that
they have not removed @file{/dev/null} or replaced it with an ordinary
file (e.g. by comparing the output of @samp{ls -l /dev/null} with
@samp{ls -l /dev/zero}.
If the output isn't basically the
same, contact your system
administrator about restoring @file{/dev/null} to its proper status).

This bug is particularly insidious because removing @file{/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 @samp{g77 -v} runs the @command{ld} command
with @samp{-o /dev/null} that @command{ld} tries to @emph{remove} the executable
it is supposed to build (especially if it reports unresolved
references, which it should in this case)!

@item
Fix crash on @samp{CHARACTER*(*) FOO} in a main or block data program unit.

@item
Fix crash that can occur when diagnostics given outside of any
program unit (such as when input file contains @samp{@@foo}).

@item
Fix crashes, infinite loops (hangs), and such involving diagnosed code.

@item
Fix @code{ASSIGN}'ed variables so they can be @code{SAVE}'d or dummy arguments,
and issue clearer error message in cases where target of @code{ASSIGN}
or @code{ASSIGN}ed @code{GOTO}/@code{FORMAT} is too small (which should
never happen).

@item
Make @code{libf2c} build procedures work on more systems again by
eliminating unnecessary invocations of @samp{ld -r -x} and @command{mv}.

@item
Fix omission of @option{-funix-intrinsics-@dots{}} options in list of permitted
options to compiler.

@item
Fix failure to always diagnose missing type declaration for
@code{IMPLICIT NONE}.

@item
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 @code{INTEGER}
constant for the right-hand operator (e.g. @samp{I**32767}).

@item
Fix build procedures so cross-compiling @command{g77} (the @command{fini}
utility in particular) is properly built using the host compiler.

@item
Add new @option{-Wsurprising} option to warn about constructs that are
interpreted by the Fortran standard (and @command{g77}) in ways that
are surprising to many programmers.

@item
Add @code{ERF()} and @code{ERFC()} as generic intrinsics mapping to existing
@code{ERF}/@code{DERF} and @code{ERFC}/@code{DERFC} specific intrinsics.

@emph{Note:} You should
specify @samp{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. @command{f2c}).

@item
Remove from @option{-fno-pedantic} the diagnostic about @code{DO}
with non-@code{INTEGER} index variable; issue that under
@option{-Wsurprising} instead.

@item
Clarify some diagnostics that say things like ``ignored'' when that's
misleading.

@item
Clarify diagnostic on use of @code{.EQ.}/@code{.NE.} on @code{LOGICAL}
operands.

@item
Minor improvements to code generation for various operations on
@code{LOGICAL} operands.

@item
Minor improvement to code generation for some @code{DO} loops on some
machines.

@item
Support @command{gcc} version 2.7.1.

@item
Upgrade to @code{libf2c} as of 1995-11-15.
@end itemize

@c 1995-08-30: 0.5.16 released.
@heading In 0.5.16:
@itemize @bullet
@item
Fix a code-generation bug involving complicated @code{EQUIVALENCE} statements
not involving @code{COMMON}.

@item
Fix code-generation bugs involving invoking ``gratis'' library procedures
in @code{libf2c} from code compiled with @option{-fno-f2c} by making these
procedures known to @command{g77} as intrinsics (not affected by -fno-f2c).
This is known to fix code invoking @code{ERF()}, @code{ERFC()},
@code{DERF()}, and @code{DERFC()}.

@item
Update @code{libf2c} to include netlib patches through 1995-08-16, and
@code{#define} @code{WANT_LEAD_0} to 1 to make @command{g77}-compiled code more
consistent with other Fortran implementations by outputting
leading zeros in formatted and list-directed output.

@item
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 @command{f2c} plus @command{gcc} (but apparently only when using
@file{gcc-2.7.0} or later).

@item
Fix a code-generation bug involving invocation of @code{COMPLEX} and
@code{DOUBLE COMPLEX} @code{FUNCTION}s and doing @code{COMPLEX} and
@code{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.

@item
Fix crash by not generating new optimal code for @samp{X**I} if @samp{I} is
nonconstant and the expression is used to dimension a dummy
array, since the @command{gcc} back end does not support the necessary
mechanics (and the @command{gcc} front end rejects the equivalent
construct, as it turns out).

@item
Fix crash on expressions like @samp{COMPLEX**INTEGER}.

@item
Fix crash on expressions like @samp{(1D0,2D0)**2}, i.e. raising a
@code{DOUBLE COMPLEX} constant to an @code{INTEGER} constant power.

@item
Fix crashes and such involving diagnosed code.

@item
Diagnose, instead of crashing on, statement function definitions
having duplicate dummy argument names.

@item
Fix bug causing rejection of good code involving statement function
definitions.

@item
Fix bug resulting in debugger not knowing size of local equivalence
area when any member of area has initial value (via @code{DATA},
for example).

@item
Fix installation bug that prevented installation of @command{g77} driver.
Provide for easy selection of whether to install copy of @command{g77}
as @command{f77} to replace the broken code.

@item
Fix @command{gcc} driver (affects @command{g77} thereby) to not
gratuitously invoke the
@code{f771} program (e.g. when @option{-E} is specified).

@item
Fix diagnostic to point to correct source line when it immediately
follows an @code{INCLUDE} statement.

@item
Support more compiler options in @command{gcc}/@command{g77} when
compiling Fortran files.
These options include @option{-p}, @option{-pg}, @option{-aux-info}, @option{-P},
correct setting of version-number macros for preprocessing, full
recognition of @option{-O0}, and
automatic insertion of configuration-specific linker specs.

@item
Add new intrinsics that interface to existing routines in @code{libf2c}:
@code{ABORT}, @code{DERF}, @code{DERFC}, @code{ERF}, @code{ERFC}, @code{EXIT},
@code{FLUSH}, @code{GETARG}, @code{GETENV}, @code{IARGC},
@code{SIGNAL}, and @code{SYSTEM}.
Note that @code{ABORT}, @code{EXIT}, @code{FLUSH}, @code{SIGNAL}, and
@code{SYSTEM} are intrinsic subroutines, not functions (since they
have side effects), so to get the return values from @code{SIGNAL}
and @code{SYSTEM}, append a final argument specifying an @code{INTEGER}
variable or array element (e.g. @samp{CALL SYSTEM('rm foo',ISTAT)}).

@item
Add new intrinsic group named @code{unix} to contain the new intrinsics,
and by default enable this new group.

@item
Move @code{LOC()} intrinsic out of the @code{vxt} group to the new
@code{unix} group.

@item
Improve @command{g77} so that @samp{g77 -v} by itself (or with
certain other options, including @option{-B}, @option{-b}, @option{-i},
@option{-nostdlib}, and @option{-V}) reports lots more useful
version info, and so that long-form options @command{gcc} accepts are
understood by @command{g77} as well (even in truncated, unambiguous forms).

@item
Add new @command{g77} option @option{--driver=name} to specify driver when
default, @command{gcc}, isn't appropriate.

@item
Add support for @samp{#} directives (as output by the preprocessor) in the
compiler, and enable generation of those directives by the
preprocessor (when compiling @samp{.F} files) so diagnostics and debugging
info are more useful to users of the preprocessor.

@item
Produce better diagnostics, more like @command{gcc}, with info such as
@samp{In function `foo':} and @samp{In file included from...:}.

@item
Support @command{gcc}'s @option{-fident} and @option{-fno-ident} options.

@item
When @option{-Wunused} in effect, don't warn about local variables used as
statement-function dummy arguments or @code{DATA} implied-@code{DO} iteration
variables, even though, strictly speaking, these are not uses
of the variables themselves.

@item
When @samp{-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 (@command{g77} might someday start warning about these)---applies
to @command{gcc} versions 2.7.0 and later, since earlier versions didn't
warn about unused dummy arguments.

@item
New option @option{-fno-underscoring} that inhibits transformation of names
(by appending one or two underscores) so users may experiment
with implications of such an environment.

@item
Minor improvement to @file{gcc/f/info} module to make it easier to build
@command{g77} using the native (non-@command{gcc}) compiler on certain machines
(but definitely not all machines nor all non-@command{gcc} compilers).
Please
do not report bugs showing problems compilers have with
macros defined in @file{gcc/f/target.h} and used in places like
@file{gcc/f/expr.c}.

@item
Add warning to be printed for each invocation of the compiler
if the target machine @code{INTEGER}, @code{REAL}, or @code{LOGICAL} size
is not 32 bits,
since @command{g77} is known to not work well for such cases.

@item
Lots of new documentation (though work is still needed to put it into
canonical GNU format).

@item
Build @code{libf2c} with @option{-g0}, not @option{-g2}, in effect
(by default), to produce
smaller library without lots of debugging clutter.
@end itemize

@c 1995-05-19: 0.5.15 released.
@heading In 0.5.15:
@itemize @bullet
@item
Fix bad code generation involving @samp{X**I} and temporary, internal variables
generated by @command{g77} and the back end (such as for @code{DO} loops).

@item
Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}.

@item
Replace crash with diagnostic given @samp{CHARACTER A;DATA A/1.0/}.

@item
Fix crash or other erratic behavior when null character constant
(@samp{''}) is encountered.

@item
Fix crash or other erratic behavior involving diagnosed code.

@item
Fix code generation for external functions returning type @code{REAL} when
the @option{-ff2c} option is in force (which it is by default) so that
@command{f2c} compatibility is indeed provided.

@item
Disallow @samp{COMMON I(10)} if @samp{I} has previously been specified
with an array declarator.

@item
New @option{-ffixed-line-length-@var{n}} option, where @var{n} is the
maximum length
of a typical fixed-form line, defaulting to 72 columns, such
that characters beyond column @var{n} are ignored, or @var{n} is @samp{none},
meaning no characters are ignored.
does not affect lines
with @samp{&} in column 1, which are always processed as if
@option{-ffixed-line-length-none} was in effect.

@item
No longer generate better code for some kinds of array references,
as @command{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.

@item
In @code{COMMON} and @code{EQUIVALENCE} areas with any members given initial
values (e.g. via @code{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 @command{g77}).
Previously, in some @code{COMMON}/@code{EQUIVALENCE} areas
(essentially those with members of more than one type), the
uninitialized members were initialized to spaces, to
cater to @code{CHARACTER} types, but it seems no existing code expects
that, while much existing code expects binary zeros.
@end itemize

@heading In 0.5.14:
@itemize @bullet
@item
Don't emit bad code when low bound of adjustable array is nonconstant
and thus might vary as an expression at run time.

@item
Emit correct code for calculation of number of trips in @code{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.)

@item
Fix crash when extra parentheses surround item in
@code{DATA} implied-@code{DO} list.

@item
Fix crash over minor internal inconsistencies in handling diagnostics,
just substitute dummy strings where necessary.

@item
Fix crash on some systems when compiling call to @code{MVBITS()} intrinsic.

@item
Fix crash on array assignment @samp{TYPE@var{ddd}(@dots{})=@dots{}}, where @var{ddd}
is a string of one or more digits.

@item
Fix crash on @code{DCMPLX()} with a single @code{INTEGER} argument.

@item
Fix various crashes involving code with diagnosed errors.

@item
Support @option{-I} option for @code{INCLUDE} statement, plus @command{gcc}'s
@file{header.gcc} facility for handling systems like MS-DOS.

@item
Allow @code{INCLUDE} statement to be continued across multiple lines,
even allow it to coexist with other statements on the same line.

@item
Incorporate Bellcore fixes to @code{libf2c} through 1995-03-15---this
fixes a bug involving infinite loops reading EOF with empty list-directed
I/O list.

@item
Remove all the @command{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 @command{g77}, which expects a working ANSI C
environment (and, for now, a GNU C compiler to compile @command{g77} itself).

@item
Complain if initialized common redeclared as larger in subsequent program
unit.

@item
Warn if blank common initialized, since its size can vary and hence
related warnings that might be helpful won't be seen.

@item
New @option{-fbackslash} option, on by default, that causes @samp{\}
within @code{CHARACTER}
and Hollerith constants to be interpreted a la GNU C.
Note that
this behavior is somewhat different from @command{f2c}'s, which supports only
a limited subset of backslash (escape) sequences.

@item
Make @option{-fugly-args} the default.

@item
New @option{-fugly-init} option, on by default, that allows typeless/Hollerith
to be specified as initial values for variables or named constants
(@code{PARAMETER}), and also allows character<->numeric conversion in
those contexts---turn off via @option{-fno-ugly-init}.

@item
New @option{-finit-local-zero} option to initialize
local variables to binary zeros.
This does not affect whether they are @code{SAVE}d, i.e. made
automatic or static.

@item
New @option{-Wimplicit} option to warn about implicitly typed variables, arrays,
and functions.
(Basically causes all program units to default to @code{IMPLICIT NONE}.)

@item
@option{-Wall} now implies @option{-Wuninitialized} as with @command{gcc}
(i.e. unless @option{-O} not specified, since @option{-Wuninitialized}
requires @option{-O}), and implies @option{-Wunused} as well.

@item
@option{-Wunused} no longer gives spurious messages for unused
@code{EXTERNAL} names (since they are assumed to refer to block data
program units, to make use of libraries more reliable).

@item
Support @code{%LOC()} and @code{LOC()} of character arguments.

@item
Support null (zero-length) character constants and expressions.

@item
Support @command{f2c}'s @code{IMAG()} generic intrinsic.

@item
Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of
character expressions that are valid in assignments but
not normally as actual arguments.

@item
Support @command{f2c}-style @samp{&} in column 1 to mean continuation line.

@item
Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE}
in @code{BLOCK DATA}, even though these are not allowed by the standard.

@item
Allow @code{RETURN} in main program unit.

@item
Changes to Hollerith-constant support to obey Appendix C of the
standard:

@itemize @minus
@item
Now padded on the right with zeros, not spaces.

@item
Hollerith ``format specifications'' in the form of arrays of
non-character allowed.

@item
Warnings issued when non-space truncation occurs when converting
to another type.

@item
When specified as actual argument, now passed
by reference to @code{INTEGER} (padded on right with spaces if constant
too small, otherwise fully intact if constant wider the @code{INTEGER}
type) instead of by value.
@end itemize

@strong{Warning:} @command{f2c} differs on the
interpretation of @samp{CALL FOO(1HX)}, which it treats exactly the
same as @samp{CALL FOO('X')}, but which the standard and @command{g77} treat
as @samp{CALL FOO(%REF('X   '))} (padded with as many spaces as necessary
to widen to @code{INTEGER}), essentially.

@item
Changes and fixes to typeless-constant support:

@itemize @minus
@item
Now treated as a typeless double-length @code{INTEGER} value.

@item
Warnings issued when overflow occurs.

@item
Padded on the left with zeros when converting
to a larger type.

@item
Should be properly aligned and ordered on
the target machine for whatever type it is turned into.

@item
When specified as actual argument, now passed as reference to
a default @code{INTEGER} constant.
@end itemize

@item
@code{%DESCR()} of a non-@code{CHARACTER} expression now passes a pointer to
the expression plus a length for the expression just as if
it were a @code{CHARACTER} expression.
For example, @samp{CALL FOO(%DESCR(D))}, where
@samp{D} is @code{REAL*8}, is the same as @samp{CALL FOO(D,%VAL(8)))}.

@item
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 @samp{SUBROUTINE X}
with alternate entry points is now @samp{__g77_masterfun_x}.

@item
Remove redundant message about zero-step-count @code{DO} loops.

@item
Clean up diagnostic messages, shortening many of them.

@item
Fix typo in @command{g77} man page.

@item
Clarify implications of constant-handling bugs in @file{f/BUGS}.

@item
Generate better code for @samp{**} operator with a right-hand operand of
type @code{INTEGER}.

@item
Generate better code for @code{SQRT()} and @code{DSQRT()},
also when @option{-ffast-math}
specified, enable better code generation for @code{SIN()} and @code{COS()}.

@item
Generate better code for some kinds of array references.

@item
Speed up lexing somewhat (this makes the compilation phase noticeably
faster).
@end itemize

@end ifset
@end ifclear
