OSDN Git Service

* lex.c (ffelex_hash_): Avoid eating one whole line after
[pf3gnuchains/gcc-fork.git] / gcc / f / g77.texi
index b799e6f..5709f54 100644 (file)
@@ -1,25 +1,15 @@
 \input texinfo  @c -*-texinfo-*-
-@c fix @set inside @example:
-@tex
-\gdef\set{\begingroup\catcode` =10 \parsearg\setxxx}
-\gdef\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-  \endgroup
-}
-@end tex
-
-@c %**start of header 
+@c %**start of header
 @setfilename g77.info
 
-@set last-up-date 1998-09-01
-@set version-g77 0.5.24
-@set email-general egcs@@cygnus.com
-@set email-bugs egcs-bugs@@cygnus.com
-@set path-g77 egcs/gcc/f
-@set path-libf2c egcs/libf2c
+@set last-update 2000-12-21
+@set copyrights-g77 1995,1996,1997,1998,1999,2000
+
+@include root.texi
+
+@c This tells @include'd files that they're part of the overall G77 doc
+@c set.  (They might be part of a higher-level doc set too.)
+@set DOC-G77
 
 @c @setfilename useg77.info
 @c @setfilename portg77.info
 @c and make sure the following does NOT begin with '@c':
 @c @clear USING
 
-@c (For FSF printing, turn on smallbook; that is all that is needed.)
+@c 6/27/96 FSF DO wants smallbook fmt for 1st bound edition. (from gcc.texi)
+@c @smallbook
 
-@c smallbook
+@c i also commented out the finalout command, so if there *are* any
+@c overfulls, you'll (hopefully) see the rectangle in the right hand
+@c margin. -- burley 1999-03-13 (from mew's comment in gcc.texi).
+@c @finalout
 
 @ifset INTERNALS
 @ifset USING
@@ -49,7 +43,7 @@
 @end ifclear
 @ifclear USING
 @settitle Porting GNU Fortran
-@end ifclear 
+@end ifclear
 @c then again, have some fun
 @ifclear INTERNALS
 @ifclear USING
 @syncodeindex fn cp
 @syncodeindex vr cp
 @c %**end of header
-@setchapternewpage odd
+
+@c Cause even numbered pages to be printed on the left hand side of
+@c the page and odd numbered pages to be printed on the right hand
+@c side of the page.  Using this, you can print on both sides of a
+@c sheet of paper and have the text on the same part of the sheet.
+
+@c The text on right hand pages is pushed towards the right hand
+@c margin and the text on left hand pages is pushed toward the left
+@c hand margin.
+@c (To provide the reverse effect, set bindingoffset to -0.75in.)
+
+@c @tex
+@c \global\bindingoffset=0.75in
+@c \global\normaloffset =0.75in
+@c @end tex
 
 @ifinfo
-This file explains how to use the GNU Fortran system.
+@dircategory Programming
+@direntry
+* g77: (g77).                  The GNU Fortran compiler.
+@end direntry
+@ifset INTERNALS
+@ifset USING
+This file documents the use and the internals of the GNU Fortran (@code{g77})
+compiler.
+It corresponds to the @value{which-g77} version of @code{g77}.
+@end ifset
+@end ifset
+@ifclear USING
+This file documents the internals of the GNU Fortran (@code{g77}) compiler.
+It corresponds to the @value{which-g77} version of @code{g77}.
+@end ifclear
+@ifclear INTERNALS
+This file documents the use of the GNU Fortran (@code{g77}) compiler.
+It corresponds to the @value{which-g77} version of @code{g77}.
+@end ifclear
 
 Published by the Free Software Foundation
 59 Temple Place - Suite 330
 Boston, MA 02111-1307 USA
 
-Copyright (C) 1995-1997 Free Software Foundation, Inc.
+Copyright (C) @value{copyrights-g77} Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -99,27 +125,36 @@ translations approved by the Free Software Foundation instead of in the
 original English.
 @end ifinfo
 
-Contributed by James Craig Burley (@email{burley@@gnu.org}).
+Contributed by James Craig Burley (@email{@value{email-burley}}).
 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}).
 
-@finalout
+@setchapternewpage odd
+@c @finalout
 @titlepage
-@comment The title is printed in a large font.
-@center @titlefont{Using GNU Fortran}
+@ifset INTERNALS
+@ifset USING
+@center @titlefont{Using and Porting GNU Fortran}
+
+@end ifset
+@end ifset
+@ifclear INTERNALS
+@title Using GNU Fortran
+@end ifclear
+@ifclear USING
+@title Porting GNU Fortran
+@end ifclear
 @sp 2
 @center James Craig Burley
 @sp 3
-@center Last updated @value{last-up-date}
+@center Last updated @value{last-update}
 @sp 1
-@c The version number appears some more times in this file.
-
 @center for version @value{version-g77}
 @page
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995-1997 Free Software Foundation, Inc.
+Copyright @copyright{} @value{copyrights-g77} Free Software Foundation, Inc.
 @sp 2
-For GNU Fortran Version @value{version-g77}*
+For the @value{which-g77} Version*
 @sp 1
 Published by the Free Software Foundation @*
 59 Temple Place - Suite 330@*
@@ -152,34 +187,50 @@ original English.
 
 @ifinfo
 
-@dircategory Programming
-@direntry
-* g77: (g77).                  The GNU Fortran compiler.
-@end direntry
 @node Top, Copying,, (DIR)
 @top Introduction
 @cindex Introduction
 
 @ifset INTERNALS
 @ifset USING
-This manual documents how to run, install and port the GNU Fortran
-compiler, as well as its new features and incompatibilities, and how to
-report bugs.  It corresponds to GNU Fortran version @value{version-g77}.
+This manual documents how to run, install and port @code{g77},
+as well as its new features and incompatibilities,
+and how to report bugs.
+It corresponds to the @value{which-g77} version of @code{g77}.
 @end ifset
 @end ifset
 
 @ifclear INTERNALS
-This manual documents how to run and install the GNU Fortran compiler,
+This manual documents how to run and install @code{g77},
 as well as its new features and incompatibilities, and how to report
-bugs.  It corresponds to GNU Fortran version @value{version-g77}.
+bugs.
+It corresponds to the @value{which-g77} version of @code{g77}.
 @end ifclear
 @ifclear USING
-This manual documents how to port the GNU Fortran compiler,
-as well as its new features and incompatibilities, and how to report
-bugs.  It corresponds to GNU Fortran version @value{version-g77}.
+This manual documents how to port @code{g77},
+as well as its new features and incompatibilities,
+and how to report bugs.
+It corresponds to the @value{which-g77} version of @code{g77}.
 @end ifclear
 
 @end ifinfo
+
+@ifset DEVELOPMENT
+@emph{Warning:} This document is still under development,
+and might not accurately reflect the @code{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} @code{g77}.
+
+In particular, while this document is intended to apply to
+the @value{which-g77} version of @code{g77},
+only an official @emph{release} of that version
+is expected to contain documentation that is
+most consistent with the @code{g77} product in that version.
+@end ifset
+
 @menu
 * Copying::         GNU General Public License says
                     how you can copy and share GNU Fortran.
@@ -210,6 +261,7 @@ bugs.  It corresponds to GNU Fortran version @value{version-g77}.
 @ifset INTERNALS
 * Adding Options::  Guidance on teaching @code{g77} about new options.
 * Projects::        Projects for @code{g77} internals hackers.
+* Front End::       Design and implementation of the @code{g77} front end.
 @end ifset
 
 * M: Diagnostics.   Diagnostics produced by @code{g77}.
@@ -556,11 +608,11 @@ the ``copyright'' line and a pointer to where the full notice is found.
 
 @smallexample
 @var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) 19@var{yy}  @var{name of author}
+Copyright (C) @var{year}  @var{name of author}
 
-This program is free software; you can redistribute it and/or modify 
-it under the terms of the GNU General Public License as published by 
-the Free Software Foundation; either version 2 of the License, or 
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
@@ -579,10 +631,10 @@ If the program is interactive, make it output a short notice like this
 when it starts in an interactive mode:
 
 @smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision version 69, Copyright (C) @var{year} @var{name of author}
 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.  
-This is free software, and you are welcome to redistribute it 
+type `show w'.
+This is free software, and you are welcome to redistribute it
 under certain conditions; type `show c' for details.
 @end smallexample
 
@@ -699,7 +751,7 @@ So far, this has resulted in the three, somewhat
 experimental, options added by @code{g77} to the @code{gcc}
 compiler and its back end.
 
-(These, in turn, have made their way into the @code{egcs}
+(These, in turn, had made their way into the @code{egcs}
 version of the compiler, and do not exist in @code{gcc}
 version 2.8 or versions of @code{g77} based on that version
 of @code{gcc}.)
@@ -775,8 +827,10 @@ without royalty; alteration is not permitted.
 @cindex improvements, funding
 
 Work on GNU Fortran is still being done mostly by its author,
-James Craig Burley (@email{burley@@gnu.org}), who is a volunteer
+James Craig Burley (@email{@value{email-burley}}), who is a volunteer
 for, not an employee of, the Free Software Foundation (FSF).
+(He has a web page at @uref{@value{www-burley}}.)
+
 As with other GNU software, funding is important because it can pay for
 needed equipment, personnel, and so on.
 
@@ -801,7 +855,7 @@ continuing operation of the FSF offices, their workstations, their
 network connections, and so on, which are invaluable to volunteers.
 (Similarly, hiring Cygnus Support can help a project like GNU
 Fortran---Cygnus has been a long-time donor of equipment usage to the author
-of GNU Fortran, and this too has been invaluable---@xref{Contributors}.)
+of GNU Fortran, and this too has been invaluable---see @ref{Contributors}.)
 
 Currently, the only way to directly fund the author of GNU Fortran
 in his work on that project is to hire him for the work you want
@@ -829,7 +883,7 @@ Email @email{@value{email-general}} to volunteer for this work.
 
 @node Look and Feel
 @chapter Protect Your Freedom---Fight ``Look And Feel''
-@c the above chapter heading overflows onto the next line. --mew 1/26/93 
+@c the above chapter heading overflows onto the next line. --mew 1/26/93
 
 To preserve the ability to write free software, including replacements
 for proprietary software, authors must be free to replicate the
@@ -863,7 +917,7 @@ Everyone except experienced @code{g77} users should
 see @ref{Invoking G77}.
 
 If you're acquainted with previous versions of @code{g77},
-you should see @ref{News}.
+you should see @ref{News,,News About GNU Fortran}.
 Further, if you've actually used previous versions of @code{g77},
 especially if you've written or modified Fortran code to
 be compiled by previous versions of @code{g77}, you
@@ -957,8 +1011,8 @@ to make big mistakes.
 
 @cindex debugger
 @cindex bugs, finding
-@cindex gdb command
-@cindex commands, gdb
+@cindex @code{gdb}, command
+@cindex commands, @code{gdb}
 @item
 They provide information in the generated machine code
 that can make it easier to find bugs in the program
@@ -967,8 +1021,8 @@ such as @code{gdb}).
 
 @cindex libraries
 @cindex linking
-@cindex ld command
-@cindex commands, ld
+@cindex @code{ld} command
+@cindex commands, @code{ld}
 @item
 They locate and gather machine code already generated
 to perform actions requested by statements in
@@ -1027,11 +1081,11 @@ of the language), how much time to spend making
 the generated machine code run faster, and so on.
 
 @cindex components of g77
-@cindex g77, components of
+@cindex @code{g77}, components of
 @code{g77} consists of several components:
 
-@cindex gcc command
-@cindex commands, gcc
+@cindex @code{gcc}, command
+@cindex commands, @code{gcc}
 @itemize @bullet
 @item
 A modified version of the @code{gcc} command, which also might be
@@ -1042,8 +1096,8 @@ might be a non-GNU compiler, or an older version
 of @code{gcc} considered more stable or that is
 used to build the operating system kernel.)
 
-@cindex g77 command
-@cindex commands, g77
+@cindex @code{g77}, command
+@cindex commands, @code{g77}
 @item
 The @code{g77} command itself, which also might be installed as the
 system's @code{f77} command.
@@ -1052,7 +1106,7 @@ system's @code{f77} command.
 @cindex libf2c library
 @cindex libraries, libf2c
 @cindex libraries, libg2c
-@cindex run-time library
+@cindex run-time, library
 @item
 The @code{libg2c} run-time library.
 This library contains the machine code needed to support
@@ -1070,11 +1124,11 @@ on the system.
 The maintainer of @code{libf2c} currently is
 @email{dmg@@bell-labs.com}.
 
-@cindex f771 program
-@cindex programs, f771
+@cindex @code{f771}, program
+@cindex programs, @code{f771}
 @cindex assembler
-@cindex as command
-@cindex commands, as
+@cindex @code{as} command
+@cindex commands, @code{as}
 @cindex assembly code
 @cindex code, assembly
 @item
@@ -1094,7 +1148,7 @@ preprocessing, compiling (in a variety of possible languages), assembling,
 and linking.
 
 @cindex driver, gcc command as
-@cindex gcc command as driver
+@cindex @code{gcc}, command as driver
 @cindex executable file
 @cindex files, executable
 @cindex cc1 program
@@ -1115,14 +1169,14 @@ As another example, the command @samp{gcc foo.cc} would do much the same as
 @samp{gcc foo.c}, but instead of using the C compiler named @code{cc1},
 @code{gcc} would use the C++ compiler (named @code{cc1plus}).
 
-@cindex f771 program
-@cindex programs, f771
+@cindex @code{f771}, program
+@cindex programs, @code{f771}
 In a GNU Fortran installation, @code{gcc} recognizes Fortran source
 files by name just like it does C and C++ source files.
 It knows to use the Fortran compiler named @code{f771}, instead of
 @code{cc1} or @code{cc1plus}, to compile Fortran files.
 
-@cindex gcc not recognizing Fortran source
+@cindex @code{gcc}, not recognizing Fortran source
 @cindex unrecognized file format
 @cindex file format not recognized
 Non-Fortran-related operation of @code{gcc} is generally
@@ -1132,8 +1186,8 @@ GNU Fortran version, @code{gcc} will not be able to compile
 and link Fortran programs---and since @code{g77} uses @code{gcc}
 to do most of the actual work, neither will @code{g77}!
 
-@cindex g77 command
-@cindex commands, g77
+@cindex @code{g77}, command
+@cindex commands, @code{g77}
 The @code{g77} command is essentially just a front-end for
 the @code{gcc} command.
 Fortran users will normally use @code{g77} instead of @code{gcc},
@@ -1192,7 +1246,7 @@ large chunks of code.
 
 @cindex GNU Back End (GBE)
 @cindex GBE
-@cindex gcc back end
+@cindex @code{gcc}, back end
 @cindex back end, gcc
 @cindex code generator
 One chunk is the so-called @dfn{GNU Back End}, or GBE,
@@ -1205,8 +1259,8 @@ whenever the distinction is important.
 
 @cindex GNU Fortran Front End (FFE)
 @cindex FFE
-@cindex g77 front end
-@cindex front end, g77
+@cindex @code{g77}, front end
+@cindex front end, @code{g77}
 The other chunk of @code{f771} is the
 majority of what is unique about GNU Fortran---the code that knows how
 to interpret Fortran programs to determine what they are intending to
@@ -1236,8 +1290,8 @@ of generated code (in terms of speed and size) is roughly similar
 @cindex compiling programs
 @cindex programs, compiling
 
-@cindex gcc command
-@cindex commands, gcc
+@cindex @code{gcc}, command
+@cindex commands, @code{gcc}
 A GNU Fortran installation includes a modified version of the @code{gcc}
 command.
 
@@ -1253,8 +1307,8 @@ but apply to other languages as well.
 for information on the way different languages are handled
 by the GNU CC compiler (@code{gcc}).
 
-@cindex g77 command
-@cindex commands, g77
+@cindex @code{g77}, command
+@cindex commands, @code{g77}
 Also provided as part of GNU Fortran is the @code{g77} command.
 The @code{g77} command is designed to make compiling and linking Fortran
 programs somewhat easier than when using the @code{gcc} command for
@@ -1263,7 +1317,7 @@ It does this by analyzing the command line somewhat and changing it
 appropriately before submitting it to the @code{gcc} command.
 
 @cindex -v option
-@cindex g77 options, -v
+@cindex @code{g77} options, -v
 @cindex options, -v
 Use the @samp{-v} option with @code{g77}
 to see what is going on---the first line of output is the invocation
@@ -1334,7 +1388,7 @@ by type.  Explanations are in the following sections.
 @item Shorthand Options
 @xref{Shorthand Options}.
 @smallexample
--ff66  -fno-f66  -ff77  -fno-f77  -fugly  -fno-ugly
+-ff66  -fno-f66  -ff77  -fno-f77  -fno-ugly
 @end smallexample
 
 @item Fortran Language Options
@@ -1392,6 +1446,7 @@ by type.  Explanations are in the following sections.
 -malign-double
 -ffloat-store  -fforce-mem  -fforce-addr  -fno-inline
 -ffast-math  -fstrength-reduce  -frerun-cse-after-loop
+-funsafe-math-optimizations -fno-trapping-math
 -fexpensive-optimizations  -fdelayed-branch
 -fschedule-insns  -fschedule-insn2  -fcaller-saves
 -funroll-loops  -funroll-all-loops
@@ -1413,10 +1468,11 @@ by type.  Explanations are in the following sections.
 -fpcc-struct-return  -freg-struct-return
 -fshort-double  -fno-common  -fpack-struct
 -fzeros  -fno-second-underscore
--fdebug-kludge  -fno-emulate-complex
+-fdebug-kludge  -femulate-complex
 -falias-check  -fargument-alias
 -fargument-noalias  -fno-argument-noalias-global
--fno-globals
+-fno-globals  -fflatten-arrays
+-fbounds-check  -ffortran-bounds-check
 @end smallexample
 @end table
 
@@ -1464,13 +1520,21 @@ Suffixes specific to GNU Fortran are listed below.
 information on suffixes recognized by GNU CC.
 
 @table @code
+@cindex .f filename suffix
+@cindex .for filename suffix
+@cindex .FOR filename suffix
 @item @var{file}.f
 @item @var{file}.for
+@item @var{file}.FOR
 Fortran source code that should not be preprocessed.
 
 Such source code cannot contain any preprocessor directives, such
 as @code{#include}, @code{#define}, @code{#if}, and so on.
 
+You can force @samp{.f} files to be preprocessed by @code{cpp} by using
+@samp{-x f77-cpp-input}.
+@xref{LEX}.
+
 @cindex preprocessor
 @cindex C preprocessor
 @cindex cpp preprocessor
@@ -1479,8 +1543,10 @@ as @code{#include}, @code{#define}, @code{#if}, and so on.
 @cindex programs, cpp
 @cindex .F filename suffix
 @cindex .fpp filename suffix
+@cindex .FPP filename suffix
 @item @var{file}.F
 @item @var{file}.fpp
+@item @var{file}.FPP
 Fortran source code that must be preprocessed (by the C preprocessor
 @code{cpp}, which is part of GNU CC).
 
@@ -1489,12 +1555,17 @@ files included by the @code{INCLUDE} directive---the @code{#include}
 preprocessor directive must be used instead.
 
 @cindex Ratfor preprocessor
-@cindex programs, ratfor
-@cindex .r filename suffix
+@cindex programs, @code{ratfor}
+@cindex @samp{.r} filename suffix
+@cindex @code{ratfor}
 @item @var{file}.r
 Ratfor source code, which must be preprocessed by the @code{ratfor}
-command, which is available separately (as it is not yet part of
-the GNU Fortran distribution).
+command, which is available separately (as it is not yet part of the GNU
+Fortran distribution).
+One version in Fortran, adapted for use with @code{g77}, is at
+@uref{ftp://members.aol.com/n8tm/rat7.uue} (of uncertain copyright
+status).  Another, public domain version in C is at
+@uref{http://sepwww.stanford.edu/sep/prof/ratfor.shar.2}.
 @end table
 
 UNIX users typically use the @file{@var{file}.f} and @file{@var{file}.F}
@@ -1567,20 +1638,32 @@ by the @code{g77} and @code{gcc} commands in a GNU Fortran installation:
 @cindex options, -fversion
 @cindex printing version information
 @cindex version information, printing
+@cindex consistency checks
+@cindex internal consistency checks
+@cindex checks, of internal consistency
 @item -fversion
 Ensure that the @code{g77}-specific version of the compiler phase is reported,
-if run.
-(This is supplied automatically when @samp{-v} or @samp{--verbose}
+if run,
+and, starting in @code{egcs} version 1.1,
+that internal consistency checks in the @file{f771} program are run.
+
+This option is supplied automatically when @samp{-v} or @samp{--verbose}
 is specified as a command-line option for @code{g77} or @code{gcc}
-and when the resulting commands compile Fortran source files.)
+and when the resulting commands compile Fortran source files.
 
 @cindex -fset-g77-defaults option
 @cindex options, -fset-g77-defaults
 @item -fset-g77-defaults
 @emph{Version info:}
-This option is obsolete in @code{egcs}
-as of version 1.1.
-
+This option was obsolete as of @code{egcs}
+version 1.1.
+The effect is instead achieved
+by the @code{lang_init_options} routine
+in @file{gcc/gcc/f/com.c}.
+
+@cindex consistency checks
+@cindex internal consistency checks
+@cindex checks, of internal consistency
 Set up whatever @code{gcc} options are to apply to Fortran
 compilations, and avoid running internal consistency checks
 that might take some time.
@@ -1606,10 +1689,10 @@ with a diagnostic if it detects an inconsistency.
 
 @cindex -fno-silent option
 @cindex options, -fno-silent
-@cindex @code{f2c} compatibility
-@cindex compatibility, @code{f2c}
+@cindex f2c compatibility
+@cindex compatibility, f2c
 @cindex status, compilation
-@cindex compilation status
+@cindex compilation, status
 @cindex reporting compilation status
 @cindex printing compilation status
 @item -fno-silent
@@ -1639,6 +1722,10 @@ for other options accepted by the compiler:
 @item -fugly
 @cindex ugly features
 @cindex features, ugly
+@emph{Note:} This option is no longer supported.
+The information, below, is provided to aid
+in the conversion of old scripts.
+
 Specify that certain ``ugly'' constructs are to be quietly accepted.
 Same as:
 
@@ -1653,14 +1740,6 @@ or well-maintained portable Fortran code, but widely used
 in old code.
 @xref{Distensions}, for more information.
 
-@emph{Note:} The @samp{-fugly} option is likely to
-be removed in a future version.
-Implicitly enabling all the @samp{-fugly-*} options
-is unlikely to be feasible, or sensible, in the future,
-so users should learn to specify only those
-@samp{-fugly-*} options they really need for a
-particular source file.
-
 @cindex -fno-ugly option
 @cindex options, -fno-ugly
 @item -fno-ugly
@@ -1696,10 +1775,10 @@ existing and obsolete Fortran implementations.
 @cindex options, -ff77
 @item -ff77
 @cindex UNIX f77
-@cindex @code{f2c} compatibility
-@cindex compatibility, @code{f2c}
-@cindex @code{f77} compatibility
-@cindex compatibility, @code{f77}
+@cindex f2c compatibility
+@cindex compatibility, f2c
+@cindex f77 compatibility
+@cindex compatibility, f77
 Specify that the program is written in idiomatic UNIX FORTRAN 77
 and/or the dialect accepted by the @code{f2c} product.
 Same as @samp{-fbackslash -fno-typeless-boz}.
@@ -1726,7 +1805,7 @@ existing and obsolete Fortran implementations.
 @node Fortran Dialect Options
 @section Options Controlling Fortran Dialect
 @cindex dialect options
-@cindex language dialect options
+@cindex language, dialect options
 @cindex options, dialect
 
 The following options control the dialect of Fortran
@@ -1737,10 +1816,10 @@ that the compiler accepts:
 @cindex options, -ffree-form
 @cindex -fno-fixed-form option
 @cindex options, -fno-fixed-form
-@cindex source file form
+@cindex source file format
 @cindex free form
 @cindex fixed form
-@cindex Fortran 90 features
+@cindex Fortran 90, features
 @item -ffree-form
 @item -fno-fixed-form
 Specify that the source file is written in free form
@@ -1748,7 +1827,7 @@ Specify that the source file is written in free form
 
 @cindex -ff90 option
 @cindex options, -ff90
-@cindex Fortran 90 features
+@cindex Fortran 90, features
 @item -ff90
 Allow certain Fortran-90 constructs.
 
@@ -1764,8 +1843,8 @@ current level of support for Fortran 90.)
 @cindex -fvxt option
 @cindex options, -fvxt
 @item -fvxt
-@cindex Fortran 90 features
-@cindex VXT features
+@cindex Fortran 90, features
+@cindex VXT extensions
 Specify the treatment of certain constructs that have different
 meanings depending on whether the code is written in
 GNU Fortran (based on FORTRAN 77 and akin to Fortran 90)
@@ -1905,14 +1984,16 @@ For example, automatic conversion between @code{INTEGER} and
 @cindex options, -fonetrip
 @item -fonetrip
 @cindex FORTRAN 66
-@cindex DO loops, one-trip
-@cindex one-trip DO loops
+@cindex @code{DO} loops, one-trip
+@cindex one-trip @code{DO} loops
+@cindex @code{DO} loops, zero-trip
+@cindex zero-trip @code{DO} loops
 @cindex compatibility, FORTRAN 66
-Imperative executable @code{DO} loops are to be executed at
+Executable iterative @code{DO} loops are to be executed at
 least once each time they are reached.
 
 ANSI FORTRAN 77 and more recent versions of the Fortran standard
-specify that the body of an imperative @code{DO} loop is not executed
+specify that the body of an iterative @code{DO} loop is not executed
 if the number of iterations calculated from the parameters of the
 loop is less than 1.
 (For example, @samp{DO 10 I = 1, 0}.)
@@ -1930,7 +2011,7 @@ standard did not specify this behavior.
 The @samp{-fonetrip} option specifies that the source file(s) being
 compiled require one-trip loops.
 
-This option affects only those loops specified by the (imperative) @code{DO}
+This option affects only those loops specified by the (iterative) @code{DO}
 statement and by implied-@code{DO} lists in I/O statements.
 Loops specified by implied-@code{DO} lists in @code{DATA} and
 specification (non-executable) statements are not affected.
@@ -2079,8 +2160,8 @@ variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
 @cindex -fbadu77-intrinsics-enable option
 @cindex options, -fbadu77-intrinsics-enable
 @item -fbadu77-intrinsics-enable
-@cindex badu77 intrinsics
-@cindex intrinsics, badu77
+@cindex @code{badu77} intrinsics
+@cindex intrinsics, @code{badu77}
 Specify status of UNIX intrinsics having inappropriate forms.
 @samp{-fbadu77-intrinsics-enable} is the default.
 @xref{Intrinsic Groups}.
@@ -2097,8 +2178,8 @@ Specify status of UNIX intrinsics having inappropriate forms.
 @cindex -ff2c-intrinsics-enable option
 @cindex options, -ff2c-intrinsics-enable
 @item -ff2c-intrinsics-enable
-@cindex f2c intrinsics
-@cindex intrinsics, f2c
+@cindex @code{f2c} intrinsics
+@cindex intrinsics, @code{f2c}
 Specify status of f2c-specific intrinsics.
 @samp{-ff2c-intrinsics-enable} is the default.
 @xref{Intrinsic Groups}.
@@ -2115,7 +2196,7 @@ Specify status of f2c-specific intrinsics.
 @cindex -ff90-intrinsics-enable option
 @cindex options, -ff90-intrinsics-enable
 @item -ff90-intrinsics-enable
-@cindex Fortran 90 intrinsics
+@cindex Fortran 90, intrinsics
 @cindex intrinsics, Fortran 90
 Specify status of F90-specific intrinsics.
 @samp{-ff90-intrinsics-enable} is the default.
@@ -2134,8 +2215,8 @@ Specify status of F90-specific intrinsics.
 @cindex options, -fgnu-intrinsics-enable
 @item -fgnu-intrinsics-enable
 @cindex Digital Fortran features
-@cindex COMPLEX intrinsics
-@cindex intrinsics, COMPLEX
+@cindex @code{COMPLEX} intrinsics
+@cindex intrinsics, @code{COMPLEX}
 Specify status of Digital's COMPLEX-related intrinsics.
 @samp{-fgnu-intrinsics-enable} is the default.
 @xref{Intrinsic Groups}.
@@ -2198,9 +2279,10 @@ Specify status of VXT intrinsics.
 @cindex options, -ffixed-line-length-@var{n}
 @item -ffixed-line-length-@var{n}
 @cindex source file format
-@cindex line length
+@cindex lines, length
 @cindex length of source lines
-@cindex fixed-form line length
+@cindex fixed form
+@cindex limits, lengths of source lines
 Set column after which characters are ignored in typical fixed-form
 lines in the source file, and through which spaces are assumed (as
 if padded to that length) after the ends of short fixed-form lines.
@@ -2221,8 +2303,8 @@ to them to fill out the line.
 
 @node Warning Options
 @section Options to Request or Suppress Warnings
-@cindex options to control warnings
-@cindex warning messages
+@cindex options, warnings
+@cindex warnings, suppressing
 @cindex messages, warning
 @cindex suppressing warnings
 
@@ -2396,12 +2478,12 @@ use, on occasion, in clean programs.
 @table @code
 @c @item -W
 @c Print extra warning messages for these events:
-@c 
+@c
 @c @itemize @bullet
 @c @item
 @c If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
 @c arguments.
-@c 
+@c
 @c @end itemize
 @c
 @cindex -Wsurprising option
@@ -2578,15 +2660,19 @@ information.
 @cindex common blocks
 @cindex equivalence areas
 @cindex missing debug features
-Support for this option in Fortran programs is incomplete.
+Support for this option in Fortran programs was incomplete up till
+version 0.5.26 of @code{g77}.
 In particular, names of variables and arrays in common blocks
-or that are storage-associated via @code{EQUIVALENCE} are
+or that are storage-associated via @code{EQUIVALENCE} were
 unavailable to the debugger.
 
 However, version 0.5.19 of @code{g77} does provide this information
 in a rudimentary way, as controlled by the
 @samp{-fdebug-kludge} option.
 
+Because version 0.5.26 of @code{g77} enables full debug information
+of COMMON BLOCK and EQUIVALENCE items, this option has been disabled.
+
 @xref{Code Gen Options,,Options for Code Generation Conventions},
 for more information.
 @end table
@@ -2633,11 +2719,7 @@ and data sets.
 this option does not apply, generally speaking, to Fortran
 code compiled by @code{g77}.
 
-@emph{Also note:} @samp{-malign-double} applies only to
-statically-allocated data.
-Double-precision data on the stack can still
-cause problems due to misalignment.
-@xref{Aligned Data}.
+@xref{Aligned Data}, for more information on alignment issues.
 
 @emph{Also also note:} The negative form of @samp{-malign-double}
 is @samp{-mno-align-double}, not @samp{-benign-double}.
@@ -2645,16 +2727,16 @@ is @samp{-mno-align-double}, not @samp{-benign-double}.
 @cindex -ffloat-store option
 @cindex options, -ffloat-store
 @item -ffloat-store
-@cindex IEEE conformance
-@cindex conformance, IEEE
-@cindex floating point precision
+@cindex IEEE 754 conformance
+@cindex conformance, IEEE 754
+@cindex floating-point, precision
 Might help a Fortran program that depends on exact IEEE conformance on
 some machines, but might slow down a program that doesn't.
 
-This option is effective when the floating point unit is set to work in
+This option is effective when the floating-point unit is set to work in
 IEEE 854 `extended precision'---as it typically is on x86 and m68k GNU
-systems---rather than IEEE 754 double precision.  @code{-ffloat-store}
-tries to remove the extra precision by spilling data from floating point
+systems---rather than IEEE 754 double precision.  @samp{-ffloat-store}
+tries to remove the extra precision by spilling data from floating-point
 registers into memory and this typically involves a big performance
 hit.  However, it doesn't affect intermediate results, so that it is
 only partially effective.  `Excess precision' is avoided in code like:
@@ -2667,8 +2749,8 @@ but not in code like:
       d = (b + c) * e
 @end smallexample
 
-@xref{Floating point precision} for another, potentially better way of
-controlling the precision.
+For another, potentially better, way of controlling the precision,
+see @ref{Floating-point precision}.
 
 @cindex -fforce-mem option
 @cindex options, -fforce-mem
@@ -2677,13 +2759,13 @@ controlling the precision.
 @cindex options, -fforce-addr
 @item -fforce-addr
 @cindex loops, speeding up
-@cindex speeding up loops
+@cindex speed, of loops
 Might improve optimization of loops.
 
 @cindex -fno-inline option
 @cindex options, -fno-inline
 @item -fno-inline
-@cindex in-line compilation
+@cindex in-line code
 @cindex compilation, in-line
 @c DL: Only relevant for -O3?
 Don't compile statement functions inline.
@@ -2694,16 +2776,32 @@ Note that if you are not optimizing, no functions can be expanded inline.
 @cindex -ffast-math option
 @cindex options, -ffast-math
 @item -ffast-math
-@cindex IEEE conformance
-@cindex conformance, IEEE
+@cindex IEEE 754 conformance
+@cindex conformance, IEEE 754
 Might allow some programs designed to not be too dependent
 on IEEE behavior for floating-point to run faster, or die trying.
+Sets @samp{-funsafe-math-optimizations}, and
+@samp{-fno-trapping-math}.
+
+@cindex -funsafe-math-optimizations option
+@cindex options, -funsafe-math-optimizations
+@item -funsafe-math-optimizations
+Allow optimizations that may be give incorrect results
+for certain IEEE inputs.
+
+@cindex -fno-trapping-math option
+@cindex options, -fno-trapping-math
+@item -fno-trapping-math
+Allow the compiler to assume that floating-point arithmetic
+will not generate traps on any inputs.  This is useful, for
+example, when running a program using IEEE "non-stop"
+floating-point arithmetic.
 
 @cindex -fstrength-reduce option
 @cindex options, -fstrength-reduce
 @item -fstrength-reduce
 @cindex loops, speeding up
-@cindex speeding up loops
+@cindex speed, of loops
 @c DL: normally defaulted?
 Might make some loops run faster.
 
@@ -2733,14 +2831,19 @@ Might improve performance on some code.
 @item -funroll-loops
 @cindex loops, unrolling
 @cindex unrolling loops
-@cindex loop optimization
+@cindex loops, optimizing
+@cindex indexed (iterative) @code{DO}
+@cindex iterative @code{DO}
 @c DL: fixme: Craig doesn't like `indexed' but f95 doesn't seem to
 @c provide a suitable term
-Typically improves performance on code using indexed @code{DO} loops by
+@c CB: I've decided on `iterative', for the time being, and changed
+@c my previous, rather bizarre, use of `imperative' to that
+@c (though `precomputed-trip' would be a more precise adjective)
+Typically improves performance on code using iterative @code{DO} loops by
 unrolling them and is probably generally appropriate for Fortran, though
-it is not turned on at any optimization level.  
+it is not turned on at any optimization level.
 Note that outer loop unrolling isn't done specifically; decisions about
-whether to unroll a loop are made on the basis of its instruction count.  
+whether to unroll a loop are made on the basis of its instruction count.
 
 @c DL: Fixme: This should obviously go somewhere else...
 Also, no `loop discovery'@footnote{@dfn{loop discovery} refers to the
@@ -2756,18 +2859,18 @@ constructed out of lower-level constructs (such as @code{IF} and
 @code{GOTO}) can lead to generation of more optimal code
 than otherwise.} is done, so only loops written with @code{DO}
 benefit from loop optimizations, including---but not limited
-to---unrolling.  Loops written with @code{IF} and @code{GOTO} will not
-be recognized as such.  This option only unrolls indexed @code{DO}
-loops, not @code{DO WHILE} loops.
+to---unrolling.  Loops written with @code{IF} and @code{GOTO} are not
+currently recognized as such.  This option unrolls only iterative
+@code{DO} loops, not @code{DO WHILE} loops.
 
 @cindex -funroll-all-loops option
 @cindex options, -funroll-all-loops
-@cindex @code{DO WHILE}
+@cindex DO WHILE
 @item -funroll-all-loops
 @c DL: Check my understanding of -funroll-all-loops v. -funroll-loops is correct.
 Probably improves performance on code using @code{DO WHILE} loops by
-unrolling them in addition to indexed @code{DO} loops.  In the absence
-of @code{DO WHILE}, this option is equivalent to @code{-funroll-loops}
+unrolling them in addition to iterative @code{DO} loops.  In the absence
+of @code{DO WHILE}, this option is equivalent to @samp{-funroll-loops}
 but possibly slower.
 
 @item -fno-move-all-movables
@@ -2840,7 +2943,7 @@ contains preprocessor directives.
 
 @node Directory Options
 @section Options for Directory Search
-@cindex directory options
+@cindex directory, options
 @cindex options, directory search
 @cindex search path
 
@@ -2864,9 +2967,10 @@ These options are:
 @cindex -Idir option
 @cindex options, -Idir
 @item -I@var{dir}
-@cindex directory search paths for inclusion
+@cindex directory, search paths for inclusion
 @cindex inclusion, directory search paths for
-@cindex searching for included files
+@cindex search paths, for included files
+@cindex paths, search
 These affect interpretation of the @code{INCLUDE} directive
 (as well as of the @code{#include} directive of the @code{cpp}
 preprocessor).
@@ -2888,9 +2992,9 @@ gcc,Using and Porting GNU CC}, for information on the @samp{-I} option.
 
 @node Code Gen Options
 @section Options for Code Generation Conventions
-@cindex code generation conventions
-@cindex options, code generation 
-@cindex run-time options
+@cindex code generation, conventions
+@cindex options, code generation
+@cindex run-time, options
 
 These machine-independent options control the interface conventions
 used in code generation.
@@ -2918,7 +3022,7 @@ the name @samp{-static}.)
 @item -finit-local-zero
 @cindex DATA statement
 @cindex statements, DATA
-@cindex initialization of local variables
+@cindex initialization, of local variables
 @cindex variables, initialization of
 @cindex uninitialized variables
 @cindex variables, uninitialized
@@ -2992,7 +3096,7 @@ generating code for an incompatible library.
 @cindex -fno-underscoring option
 @cindex options, -fno-underscoring
 @item -fno-underscoring
-@cindex underscores
+@cindex underscore
 @cindex symbol names, underscores
 @cindex transforming symbol names
 @cindex symbol names, transforming
@@ -3067,7 +3171,7 @@ interfaces.
 @cindex -fno-second-underscore option
 @cindex options, -fno-second-underscore
 @item -fno-second-underscore
-@cindex underscores
+@cindex underscore
 @cindex symbol names, underscores
 @cindex transforming symbol names
 @cindex symbol names, transforming
@@ -3132,6 +3236,10 @@ language mode, so temporarily switching to the C language mode to display the
 information is suggested.
 Use @samp{set language c} and @samp{set language fortran} to accomplish this.
 
+As of version 0.5.26 of @code{g77} this option has been disabled, as the
+compiler is now able to emit correct and complete debug information
+for COMMON BLOCK and EQUIVALENCE items.
+
 For example:
 
 @smallexample
@@ -3167,7 +3275,7 @@ $6 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 20 bytes"
 (gdb) p xx
 $7 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 1 bytes"
 (gdb) set language fortran
-(gdb) 
+(gdb)
 @end smallexample
 
 @noindent
@@ -3178,46 +3286,40 @@ which might make some programs noticeably larger.
 (and its negative form).
 Current plans call for this to happen when published versions of @code{g77}
 and @code{gdb} exist that provide proper access to debugging information on
-@code{COMMON} and @code{EQUIVALENCE} members.
-
-@cindex -fno-emulate-complex option
-@cindex options, -fno-emulate-complex
-@item -fno-emulate-complex
-Implement @code{COMPLEX} arithmetic using the facilities in
+@code{COMMON} and @code{EQUIVALENCE} members.  This is believed to have
+happened as of version 0.5.26 of @code{g77}, so that this option has been
+disabled starting with this release.
+
+@cindex -femulate-complex option
+@cindex options, -femulate-complex
+@item -femulate-complex
+Implement @code{COMPLEX} arithmetic via emulation,
+instead of using the facilities of
 the @code{gcc} back end that provide direct support of
-@code{complex} arithmetic, instead of emulating the arithmetic.
+@code{complex} arithmetic.
 
-@code{gcc} has some known problems in its back-end support
+(@code{gcc} had some bugs in its back-end support
 for @code{complex} arithmetic, due primarily to the support not being
-completed as of version 2.7.2.2.
-Other front ends for the @code{gcc} back end avoid this problem
-by emulating @code{complex} arithmetic at a higher level, so the
-back end sees arithmetic on the real and imaginary components.
-To make @code{g77} more portable to systems where @code{complex}
-support in the @code{gcc} back end is particularly troublesome,
-@code{g77} now defaults to performing the same kinds of emulations
-done by these other front ends.
-
-Use @samp{-fno-emulate-complex} to try the @code{complex} support
-in the @code{gcc} back end, in case it works and produces faster
-programs.
-So far, all the known bugs seem to involve compile-time crashes,
-rather than the generation of incorrect code.
+completed as of version 2.8.1 and @code{egcs} 1.1.2.)
+
+Use @samp{-femulate-complex} if you suspect code-generation bugs,
+or experience compiler crashes,
+that might result from @code{g77} using the @code{COMPLEX} support
+in the @code{gcc} back end.
+If using that option fixes the bugs or crashes you are seeing,
+that indicates a likely @code{g77} bugs
+(though, all compiler crashes are considered bugs),
+so, please report it.
+(Note that the known bugs, now believed fixed, produced compiler crashes
+rather than causing the generation of incorrect code.)
 
 Use of this option should not affect how Fortran code compiled
 by @code{g77} works in terms of its interfaces to other code,
 e.g. that compiled by @code{f2c}.
 
-@emph{Caution:} Future versions of @code{g77} are likely to change
-the default for this option to
-@samp{-fno-emulate-complex}, and perhaps someday ignore both forms
+@emph{Caution:} Future versions of @code{g77} might ignore both forms
 of this option.
 
-Also, it is possible that use of the @samp{-fno-emulate-complex} option
-could result in incorrect code being silently produced by @code{g77}.
-But, this is generally true of compilers anyway, so, as usual, test
-the programs you compile before assuming they are working.
-
 @cindex -falias-check option
 @cindex options, -falias-check
 @cindex -fargument-alias option
@@ -3258,6 +3360,8 @@ arguments.
 @item -fno-globals
 @cindex global names, warning
 @cindex warnings, global names
+@cindex in-line code
+@cindex compilation, in-line
 Disable diagnostics about inter-procedural
 analysis problems, such as disagreements about the
 type of a function or a procedure's argument,
@@ -3274,9 +3378,8 @@ code that would otherwise be diagnosed.
 
 As such, this option might be quite useful when
 compiling existing, ``working'' code that happens
-to have a few bugs that do not generally show
-themselves, but @code{g77} exposes via a
-diagnostic.
+to have a few bugs that do not generally show themselves,
+but which @code{g77} diagnoses.
 
 Use of this option therefore has the effect of
 instructing @code{g77} to behave more like it did
@@ -3290,853 +3393,149 @@ Without this option, @code{g77} defaults to performing
 the potentially inlining procedures as it started doing
 in version 0.5.20, but as of version 0.5.21, it also
 diagnoses disagreements that might cause such inlining
-to crash the compiler.
-@end table
+to crash the compiler as (fatal) errors,
+and warns about similar disagreements
+that are currently believed to not
+likely to result in the compiler later crashing
+or producing incorrect code.
+
+@cindex -fflatten-arrays option
+@item -fflatten-arrays
+@cindex array performance
+@cindex arrays, flattening
+Use back end's C-like constructs
+(pointer plus offset)
+instead of its @code{ARRAY_REF} construct
+to handle all array references.
+
+@emph{Note:} This option is not supported.
+It is intended for use only by @code{g77} developers,
+to evaluate code-generation issues.
+It might be removed at any time.
+
+@cindex -fbounds-check option
+@cindex -ffortran-bounds-check option
+@item -fbounds-check
+@itemx -ffortran-bounds-check
+@cindex bounds checking
+@cindex range checking
+@cindex array bounds checking
+@cindex subscript checking
+@cindex substring checking
+@cindex checking subscripts
+@cindex checking substrings
+Enable generation of run-time checks for array subscripts
+and substring start and end points
+against the (locally) declared minimum and maximum values.
+
+The current implementation uses the @code{libf2c}
+library routine @code{s_rnge} to print the diagnostic.
+
+However, whereas @code{f2c} generates a single check per
+reference for a multi-dimensional array, of the computed
+offset against the valid offset range (0 through the size of the array),
+@code{g77} generates a single check per @emph{subscript} expression.
+This catches some cases of potential bugs that @code{f2c} does not,
+such as references to below the beginning of an assumed-size array.
+
+@code{g77} also generates checks for @code{CHARACTER} substring references,
+something @code{f2c} currently does not do.
+
+Use the new @samp{-ffortran-bounds-check} option
+to specify bounds-checking for only the Fortran code you are compiling,
+not necessarily for code written in other languages.
+
+@emph{Note:} To provide more detailed information on the offending subscript,
+@code{g77} provides the @code{libg2c} run-time library routine @code{s_rnge}
+with somewhat differently-formatted information.
+Here's a sample diagnostic:
 
-@xref{Code Gen Options,,Options for Code Generation Conventions,
-gcc,Using and Porting GNU CC}, for information on more options
-offered by the GBE
-shared by @code{g77}, @code{gcc}, and other GNU compilers.
+@smallexample
+Subscript out of range on file line 4, procedure rnge.f/bf.
+Attempt to access the -6-th element of variable b[subscript-2-of-2].
+Aborted
+@end smallexample
 
-Some of these do @emph{not} work when compiling programs written in Fortran:
+The above message indicates that the offending source line is
+line 4 of the file @file{rnge.f},
+within the program unit (or statement function) named @samp{bf}.
+The offended array is named @samp{b}.
+The offended array dimension is the second for a two-dimensional array,
+and the offending, computed subscript expression was @samp{-6}.
 
-@table @code
-@cindex -fpcc-struct-return option
-@cindex options, -fpcc-struct-return
-@item -fpcc-struct-return
-@cindex -freg-struct-return option
-@cindex options, -freg-struct-return
-@item -freg-struct-return
-You should not use these except strictly the same way as you
-used them to build the version of @code{libg2c} with which
-you will be linking all code compiled by @code{g77} with the
-same option.
+For a @code{CHARACTER} substring reference, the second line has
+this appearance:
 
-@cindex -fshort-double option
-@cindex options, -fshort-double
-@item -fshort-double
-This probably either has no effect on Fortran programs, or
-makes them act loopy.
+@smallexample
+Attempt to access the 11-th element of variable a[start-substring].
+@end smallexample
 
-@cindex -fno-common option
-@cindex options, -fno-common
-@item -fno-common
-Do not use this when compiling Fortran programs,
-or there will be Trouble.
+This indicates that the offended @code{CHARACTER} variable or array
+is named @samp{a},
+the offended substring position is the starting (leftmost) position,
+and the offending substring expression is @samp{11}.
 
-@cindex -fpack-struct option
-@cindex options, -fpack-struct
-@item -fpack-struct
-This probably will break any calls to the @code{libg2c} library,
-at the very least, even if it is built with the same option.
+(Though the verbage of @code{s_rnge} is not ideal
+for the purpose of the @code{g77} compiler,
+the above information should provide adequate diagnostic abilities
+to it users.)
 @end table
 
-@node Environment Variables
-@section Environment Variables Affecting GNU Fortran
-@cindex environment variables
-
-GNU Fortran currently does not make use of any environment
-variables to control its operation above and beyond those
-that affect the operation of @code{gcc}.
-
-@xref{Environment Variables,,Environment Variables Affecting GNU CC,
-gcc,Using and Porting GNU CC}, for information on environment
-variables.
-
-@include news.texi
-
-@node Changes
-@chapter User-visible Changes
-@cindex versions, recent
-@cindex recent versions
-@cindex changes, user-visible
-@cindex user-visible changes
-
-This section describes changes to @code{g77} that are visible
-to the programmers who actually write and maintain Fortran
-code they compile with @code{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 @code{g77}.
-@xref{News,,News About GNU Fortran}, for information on
-such changes to @code{g77}.
-
-To find out about existing bugs and ongoing plans for GNU
-Fortran, retrieve @uref{ftp://alpha.gnu.org/g77.plan}
-or, if you cannot do that, email
-@email{fortran@@gnu.org} asking for a recent copy of the
-GNU Fortran @file{.plan} file.
-
-@heading In @code{egcs} 1.1 (versus 0.5.24):
-@itemize @bullet
-@cindex alignment
-@cindex double-precision performance
-@cindex -malign-double
-@item
-Align static double-precision variables and arrays
-on Intel x86 targets
-regardless of whether @samp{-malign-double} is specified.
-
-Generally, this affects only local variables and arrays
-having the @code{SAVE} attribute
-or given initial values via @code{DATA}.
-@end itemize
-
-@heading In @code{egcs} 1.1 (versus @code{egcs} 1.0.3):
-@itemize @bullet
-@item
-Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
-compile-time constant @code{INTEGER} expression.
-
-@item
-Fix @code{g77} @samp{-g} option so procedures that
-use @samp{ENTRY} can be stepped through, line by line,
-in @code{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
-@code{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.
-
-@item
-The @code{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 @code{g77} version is picked up.
-
-@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.
-@end itemize
-
-@heading In 0.5.24 and @code{egcs} 1.1 (versus 0.5.23):
-@itemize @bullet
-@item
-@code{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 @code{g77} actually generates code
-for these cases.
-
-Previously, @code{g77} treated these expressions
-as denoting special ``pointer'' arguments
-for the purposes of filewide analysis.
-
-@item
-The @code{g77} driver now ensures that @samp{-lg2c}
-is specified in the link phase prior to any
-occurrence of @samp{-lm}.
-This prevents accidentally linking to a routine
-in the SunOS4 @samp{-lm} library
-when the generated code wants to link to the one
-in @code{libf2c} (@code{libg2c}).
-
-@item
-@code{g77} emits more debugging information when
-@samp{-g} is used.
-
-This new information allows, for example,
-@kbd{which __g77_length_a} to be used in @code{gdb}
-to determine the type of the phantom length argument
-supplied with @samp{CHARACTER} variables.
-
-This information pertains to internally-generated
-type, variable, and other information,
-not to the longstanding deficiencies vis-a-vis
-@samp{COMMON} and @samp{EQUIVALENCE}.
-
-@item
-The F90 @samp{Date_and_Time} intrinsic now is
-supported.
-
-@item
-The F90 @samp{System_Clock} intrinsic allows
-the optional arguments (except for the @samp{Count}
-argument) to be omitted.
-@end itemize
-
-@heading In 0.5.23:
-@itemize @bullet
-@item
-This release contains several regressions against
-version 0.5.22 of @code{g77}, due to using the
-``vanilla'' @code{gcc} back end instead of patching
-it to fix a few bugs and improve performance in a
-few cases.
-
-@xref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet},
-available in plain-text format in @code{gcc/f/BUGS},
-for information on the known bugs in this version,
-including the regressions.
-
-Features that have been dropped from this version
-of @code{g77} due to their being implemented
-via @code{g77}-specific patches to the @code{gcc}
-back end in previous releases include:
-
-@itemize --
-@item
-Support for @code{__restrict__} keyword,
-the options @samp{-fargument-alias}, @samp{-fargument-noalias},
-and @samp{-fargument-noalias-global},
-and the corresponding alias-analysis code.
-
-(@code{egcs} has the alias-analysis
-code, but not the @code{__restrict__} keyword.
-@code{egcs} @code{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
-@samp{-fmove-all-movables},
-@samp{-freduce-all-givs},
-and @samp{-frerun-loop-opt}.
-
-(@code{egcs} supports these options.
-@code{g77} users of @code{egcs} benefit from them even if
-they are not explicitly specified,
-because the defaults are optimized for @code{g77} users.)
-
-@item
-Support for the @samp{-W} option warning about
-integer division by zero.
-
-@item
-The Intel x86-specific option @samp{-malign-double}
-applying to stack-allocated data
-as well as statically-allocate data.
-@end itemize
-
-@item
-Support @code{gcc} version 2.8,
-and remove support for prior versions of @code{gcc}.
-
-@cindex -@w{}-driver option
-@cindex g77 options, -@w{}-driver
-@cindex options, -@w{}-driver
-@item
-Remove support for the @samp{--driver} option,
-as @code{g77} now does all the driving,
-just like @code{gcc}.
-
-@item
-The @code{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 @code{g77} version is picked up.
-
-@item
-@code{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.
-
-@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.
-@end itemize
-
-@heading In 0.5.22:
-@itemize @bullet
-@item
-Fix @code{Signal} intrinsic so it offers portable
-support for 64-bit systems (such as Digital Alphas
-running GNU/Linux).
-
-@item
-Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
-compile-time constant @code{INTEGER} expression.
-
-@item
-Fix @code{g77} @samp{-g} option so procedures that
-use @samp{ENTRY} can be stepped through, line by line,
-in @code{gdb}.
-
-@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 @code{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}.
-
-@item
-Fix @samp{-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 @samp{-fgnu-intrinsics-*} and
-@samp{-fbadu77-intrinsics-*} options.
-@end itemize
-
-@heading In @code{egcs} 1.0.2 (versus @code{egcs} 1.0.1):
-@itemize @bullet
-@item
-Fix compiler so it accepts @samp{-fgnu-intrinsics-*} and
-@samp{-fbadu77-intrinsics-*} options.
-@end itemize
-
-@heading In @code{egcs} 1.0 (versus 0.5.21):
-@itemize @bullet
-@item
-Version 1.0 of @code{egcs}
-contains several regressions against
-version 0.5.21 of @code{g77},
-due to using the
-``vanilla'' @code{gcc} back end instead of patching
-it to fix a few bugs and improve performance in a
-few cases.
-
-@xref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet},
-available in plain-text format in @code{gcc/f/BUGS},
-for information on the known bugs in this version,
-including the regressions.
-
-Features that have been dropped from this version
-of @code{g77} due to their being implemented
-via @code{g77}-specific patches to the @code{gcc}
-back end in previous releases include:
-
-@itemize --
-@item
-Support for the C-language @code{restrict} keyword.
-
-@item
-Support for the @samp{-W} option warning about
-integer division by zero.
-
-@item
-The Intel x86-specific option @samp{-malign-double}
-applying to stack-allocated data
-as well as statically-allocate data.
-@end itemize
-
-@cindex -@w{}-driver option
-@cindex g77 options, -@w{}-driver
-@cindex options, -@w{}-driver
-@item
-Remove support for the @samp{--driver} option,
-as @code{g77} now does all the driving,
-just like @code{gcc}.
-
-@item
-Allow any numeric argument to intrinsics
-@code{Int2} and @code{Int8}.
-@end itemize
-
-@heading In 0.5.21:
-@itemize @bullet
-@item
-When the @samp{-W} option is specified, @code{gcc}, @code{g77},
-and other GNU compilers that incorporate the @code{gcc}
-back end as modified by @code{g77}, issue
-a warning about integer division by constant zero.
-
-@item
-New option @samp{-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 @code{g77}.
-
-@item
-New option @samp{-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 @samp{-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.
-
-@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 @samp{Status} argument.
-
-@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}.
-
-@item
-Add options @samp{-fbadu77-intrinsics-delete},
-@samp{-fbadu77-intrinsics-hide}, and so on.
-
-@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)}.
-
-@item
-@code{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 @code{ratfor} command, available
-separately.
-@end itemize
-
-@heading In 0.5.20:
-@itemize @bullet
-@item
-The @samp{-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 @samp{-ftypeless-boz} to cause such
-constants to be interpreted as typeless.
-
-(Version 0.5.19 introduced @samp{-fno-typeless-boz} and
-its inverse.)
-
-@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect},
-for information on the @samp{-ftypeless-boz} option.
-
-@item
-Options @samp{-ff90-intrinsics-enable} and
-@samp{-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, @samp{-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 @samp{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 @samp{ALWAYS_FLUSH} defined,
-you will have to modify @code{libf2c} accordingly before
-building it from this and future versions of @code{g77}.
-
-@xref{Output Assumed To Flush}, for more information.
-
-@item
-Dave Love's implementation of @code{libU77} has been
-added to the version of @code{libf2c} distributed with
-and built as part of @code{g77}.
-@code{g77} now knows about the routines in this library
-as intrinsics.
-
-@item
-New option @samp{-fvxt} specifies that the
-source file is written in VXT Fortran, instead of GNU Fortran.
-
-@xref{VXT Fortran}, for more information on the constructs
-recognized when the @samp{-fvxt} option is specified.
-
-@item
-The @samp{-fvxt-not-f90} option has been deleted,
-along with its inverse, @samp{-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 @code{g77}.
-
-@xref{Other Dialects}, for more information.
-
-@item
-The @samp{-fugly} option now issues a warning, as it
-likely will be removed in a future version.
-
-(Enabling all the @samp{-fugly-*} options is unlikely
-to be feasible, or sensible, in the future,
-so users should learn to specify only those
-@samp{-fugly-*} options they really need for a
-particular source file.)
-
-@item
-The @samp{-fugly-assumed} option, introduced in
-version 0.5.19, has been changed to
-better accommodate old and new code.
-@xref{Ugly Assumed-Size Arrays}, for more information.
-
-@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 @code{g77} front
-end, to avoid bugs in @code{complex} support in the
-@code{gcc} back end.
-New option @samp{-fno-emulate-complex}
-causes @code{g77} to revert the 0.5.19 behavior.
-
-@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 @samp{-fforce-addr}
-also is specified.
-
-New options @samp{-falias-check}, @samp{-fargument-alias},
-@samp{-fargument-noalias},
-and @samp{-fno-argument-noalias-global} control the
-way @code{g77} handles potential aliasing.
-
-@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 @code{g77}.
-
-@item
-New option @samp{-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, @code{g77} uses a separate memory location
-to hold assigned statement labels.)
-
-@xref{Ugly Assigned Labels}, for more information.
-
-@item
-@code{FORMAT} and @code{ENTRY} statements now are allowed to
-precede @code{IMPLICIT NONE} statements.
-
-@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 @code{f2c} users
-may make full use of its features via the @code{g77}
-version of @file{f2c.h} and the @code{INTEGER(KIND=2)}
-support routines in the @code{g77} version of @code{libf2c}.
-
-@item
-Improve @code{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, @samp{gnu}, has been added
-to contain the new @code{REALPART}, @code{IMAGPART},
-and @code{COMPLEX} intrinsics.
-An old group, @samp{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
-@samp{-ff90} option specifies Fortran 90 interpretation
-or new @samp{-fugly-complex} option, in conjunction with
-@samp{-fnot-f90}, specifies @code{f2c} interpretation.
-@end itemize
-
-@heading In 0.5.19:
-
-@itemize @bullet
-@item
-A temporary kludge option provides bare-bones information on
-@code{COMMON} and @code{EQUIVALENCE} members at debug time.
-@xref{Code Gen Options,,Options for Code Generation Conventions},
-for information on the @samp{-fdebug-kludge} option.
-
-@item
-New @samp{-fonetrip} option specifies FORTRAN-66-style
-one-trip @code{DO} loops.
-
-@item
-New @samp{-fno-silent} option causes names of program units
-to be printed as they are compiled, in a fashion similar to
-UNIX @code{f77} and @code{f2c}.
-
-@item
-New @samp{-fugly-assumed} option specifies that arrays
-dimensioned via @samp{DIMENSION X(1)}, for example, are to be
-treated as assumed-size.
-
-@item
-New @samp{-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(KIND=1)} constants.
-
-@item
-New @samp{-ff66} option is a ``shorthand'' option that specifies
-behaviors considered appropriate for FORTRAN 66 programs.
-
-@item
-New @samp{-ff77} option is a ``shorthand'' option that specifies
-behaviors considered appropriate for UNIX @code{f77} programs.
-
-@item
-New @samp{-fugly-comma} and @samp{-fugly-logint} options provided
-to perform some of what @samp{-fugly} used to do.
-@samp{-fugly} and @samp{-fno-ugly} are now ``shorthand'' options,
-in that they do nothing more than enable (or disable) other
-@samp{-fugly-*} options.
-
-@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
-Add options @samp{--help} and @samp{--version} to the
-@code{g77} command, to conform to GNU coding guidelines.
-Also add printing of @code{g77} version number when
-the @samp{--verbose} (@samp{-v}) option is used.
-@end itemize
-
-@heading In 0.5.18:
-
-@itemize @bullet
-@item
-The @code{BYTE} and @code{WORD} statements now are supported,
-to a limited extent.
-
-@item
-@code{INTEGER*1}, @code{INTEGER*2}, @code{INTEGER*8},
-and their @code{LOGICAL}
-equivalents, now are supported to a limited extent.
-Among the missing elements are complete intrinsic and constant
-support.
-
-@item
-Support automatic arrays in procedures.
-For example, @samp{REAL A(N)}, where @samp{A} is
-not a dummy argument, specifies that @samp{A} is
-an automatic array.
-The size of @samp{A} is calculated from the value
-of @samp{N} each time the procedure is called,
-that amount of space is allocated, and that space
-is freed when the procedure returns to its caller.
-
-@item
-Add @samp{-fno-zeros} option, enabled by default,
-to reduce compile-time CPU and memory usage for
-code that provides initial zero values for variables
-and arrays.
-
-@item
-Introduce three new options that apply to all compilations
-by @code{g77}-aware GNU compilers---@samp{-fmove-all-movables},
-@samp{-freduce-all-givs}, and @samp{-frerun-loop-opt}---which
-can improve the run-time performance of some programs.
-
-@item
-Replace much of the existing documentation with a single
-Info document.
-
-@item
-New option @samp{-fno-second-underscore}.
-@end itemize
-
-@heading In 0.5.17:
-
-@itemize @bullet
-@item
-The @code{ERF()} and @code{ERFC()} intrinsics now are generic
-intrinsics, mapping to @code{ERF}/@code{DERF} and
-@code{ERFC}/@code{DERFC}, respectively.
-@emph{Note:} Use @samp{INTRINSIC ERF,ERFC} in any code that
-might reference these as generic intrinsics, to
-improve the likelihood of diagnostics (instead of subtle run-time
-bugs) when using compilers that don't support these as intrinsics.
-
-@item
-New option @samp{-Wsurprising}.
-
-@item
-DO loops with non-@code{INTEGER} variables now diagnosed only when
-@samp{-Wsurprising} specified.
-Previously, this was diagnosed @emph{unless} @samp{-fpedantic} or
-@samp{-fugly} was specified.
-@end itemize
-
-@heading In 0.5.16:
-
-@itemize @bullet
-@item
-@code{libf2c} changed to output a leading zero (0) digit for floating-point
-values output via list-directed and formatted output (to bring @code{g77}
-more into line with many existing Fortran implementations---the
-ANSI FORTRAN 77 standard leaves this choice to the implementation).
-
-@item
-@code{libf2c} no longer built with debugging information
-intact, making it much smaller.
+@xref{Code Gen Options,,Options for Code Generation Conventions,
+gcc,Using and Porting GNU CC}, for information on more options
+offered by the GBE
+shared by @code{g77}, @code{gcc}, and other GNU compilers.
 
-@item
-Automatic installation of the @code{g77} command now works.
+Some of these do @emph{not} work when compiling programs written in Fortran:
 
-@item
-Diagnostic messages now more informative, a la @code{gcc},
-including messages like @samp{In function `foo':} and @samp{In file
-included from...:}.
+@table @code
+@cindex -fpcc-struct-return option
+@cindex options, -fpcc-struct-return
+@item -fpcc-struct-return
+@cindex -freg-struct-return option
+@cindex options, -freg-struct-return
+@item -freg-struct-return
+You should not use these except strictly the same way as you
+used them to build the version of @code{libg2c} with which
+you will be linking all code compiled by @code{g77} with the
+same option.
 
-@item
-New group of intrinsics called @samp{unix}, including @code{ABORT},
-@code{DERF}, @code{DERFC}, @code{ERF}, @code{ERFC}, @code{EXIT},
-@code{FLUSH}, @code{GETARG}, @code{GETENV}, @code{SIGNAL}, and
-@code{SYSTEM}.
+@cindex -fshort-double option
+@cindex options, -fshort-double
+@item -fshort-double
+This probably either has no effect on Fortran programs, or
+makes them act loopy.
 
-@item
-@samp{-funix-intrinsics-@{delete,hide,disable,enable@}}
-options added.
+@cindex -fno-common option
+@cindex options, -fno-common
+@item -fno-common
+Do not use this when compiling Fortran programs,
+or there will be Trouble.
 
-@item
-@samp{-fno-underscoring} option added.
+@cindex -fpack-struct option
+@cindex options, -fpack-struct
+@item -fpack-struct
+This probably will break any calls to the @code{libg2c} library,
+at the very least, even if it is built with the same option.
+@end table
 
-@item
-@samp{--driver} option added to the @code{g77} command.
+@node Environment Variables
+@section Environment Variables Affecting GNU Fortran
+@cindex environment variables
 
-@item
-Support for the @code{gcc} options @samp{-fident} and @samp{-fno-ident}
-added.
+GNU Fortran currently does not make use of any environment
+variables to control its operation above and beyond those
+that affect the operation of @code{gcc}.
 
-@item
-@samp{g77 -v} returns much more version info, making the submission
-of better bug reports easily.
+@xref{Environment Variables,,Environment Variables Affecting GNU CC,
+gcc,Using and Porting GNU CC}, for information on environment
+variables.
 
-@item
-Many improvements to the @code{g77} command to better fulfill its role as
-a front-end to the @code{gcc} driver.
-For example, @code{g77} now
-recognizes @samp{--verbose} as a verbose way of specifying @samp{-v}.
+@include news.texi
 
-@item
-Compiling preprocessed (@file{*.F} and @file{*.fpp}) files now
-results in better diagnostics and debugging information, as the
-source-location info now is passed all the
-way through the compilation process instead of being lost.
-@end itemize
+@set USERVISONLY
+@include news.texi
+@clear USERVISONLY
 
 @node Language
 @chapter The GNU Fortran Language
@@ -4161,7 +3560,10 @@ by GNU Fortran.
 @cindex textbooks
 (If you need a text on Fortran,
 a few freely available electronic references have pointers from
-@uref{http://www.fortran.com/fortran/Books/}.)
+@uref{http://www.fortran.com/fortran/Books/}.  There is a `cooperative
+net project', @cite{User Notes on Fortran Programming} at
+@uref{ftp://vms.huji.ac.il/fortran/} and mirrors elsewhere; some of this
+material might not apply specifically to @code{g77}.)
 
 Part of what defines a particular implementation of a Fortran
 system, such as @code{g77}, is the particular characteristics
@@ -4203,7 +3605,7 @@ Extensions to the ANSI FORTRAN 77 standard:
 @section Direction of Language Development
 @cindex direction of language development
 @cindex features, language
-@cindex language features
+@cindex language, features
 
 The purpose of the following description of the GNU Fortran
 language is to promote wide portability of GNU Fortran programs.
@@ -4348,8 +3750,8 @@ of @code{g77}).
 @node Standard Support
 @section ANSI FORTRAN 77 Standard Support
 @cindex ANSI FORTRAN 77 support
-@cindex standard support
-@cindex support for ANSI FORTRAN 77
+@cindex standard, support for
+@cindex support, FORTRAN 77
 @cindex compatibility, FORTRAN 77
 @cindex FORTRAN 77 compatibility
 
@@ -4580,7 +3982,7 @@ For example: @samp{PRINT *, 'My name is Bob'}.
 @item
 A metasyntactic variable---that is, a name used in this document
 to serve as a placeholder for whatever text is used by the
-user or programmer--appears as shown in the following example:
+user or programmer---appears as shown in the following example:
 
 ``The @code{INTEGER @var{ivar}} statement specifies that
 @var{ivar} is a variable or array of type @code{INTEGER}.''
@@ -4624,6 +4026,7 @@ for the relevant aspects of GNU Fortran.)
 
 (Corresponds to Section 2.2 of ANSI X3.9-1978 FORTRAN 77.)
 
+@cindex limits, lengths of names
 In GNU Fortran, a symbolic name is at least one character long,
 and has no arbitrary upper limit on length.
 However, names of entities requiring external linkage (such as
@@ -4640,8 +4043,13 @@ character (which must be a letter).
 
 (Corresponds to Section 2.3 of ANSI X3.9-1978 FORTRAN 77.)
 
-@cindex comments, trailing
-@cindex trailing comments
+@cindex trailing comment
+@cindex comment
+@cindex characters, comment
+@cindex !
+@cindex exclamation point
+@cindex continuation character
+@cindex characters, continuation
 Use of an exclamation point (@samp{!}) to begin a
 trailing comment (a comment that extends to the end of the same
 source line) is permitted under the following conditions:
@@ -4665,7 +4073,8 @@ That is, a trailing comment may contain exclamation points
 in their commentary text.
 @end itemize
 
-@cindex semicolons
+@cindex ;
+@cindex semicolon
 @cindex statements, separated by semicolon
 Use of a semicolon (@samp{;}) as a statement separator
 is permitted under the following conditions:
@@ -4751,36 +4160,65 @@ Special characters include:
 
 @itemize @bullet
 @item
+@cindex ;
+@cindex semicolon
 Semicolon (@samp{;})
 
 @item
+@cindex !
+@cindex exclamation point
 Exclamation point (@samp{!})
 
 @item
+@cindex "
+@cindex double quote
 Double quote (@samp{"})
 
 @item
+@cindex \
+@cindex backslash
 Backslash (@samp{\})
 
 @item
+@cindex ?
+@cindex question mark
 Question mark (@samp{?})
 
 @item
+@cindex #
+@cindex hash mark
+@cindex pound sign
 Hash mark (@samp{#})
 
 @item
+@cindex &
+@cindex ampersand
 Ampersand (@samp{&})
 
 @item
+@cindex %
+@cindex percent sign
 Percent sign (@samp{%})
 
 @item
+@cindex _
+@cindex underscore
 Underscore (@samp{_})
 
 @item
+@cindex <
+@cindex open angle
+@cindex left angle
+@cindex open bracket
+@cindex left bracket
 Open angle (@samp{<})
 
 @item
+@cindex >
+@cindex close angle
+@cindex right angle
+@cindex close bracket
+@cindex right bracket
 Close angle (@samp{>})
 
 @item
@@ -4790,7 +4228,9 @@ The FORTRAN 77 special characters (@key{SPC}, @samp{=},
 and @samp{:})
 @end itemize
 
-@cindex blanks (spaces)
+@cindex blank
+@cindex space
+@cindex SPC
 Note that this document refers to @key{SPC} as @dfn{space},
 while X3.9-1978 FORTRAN 77 refers to it as @dfn{blank}.
 
@@ -4798,8 +4238,8 @@ while X3.9-1978 FORTRAN 77 refers to it as @dfn{blank}.
 @subsection Lines
 @cindex lines
 @cindex source file format
-@cindex source form
-@cindex files, source
+@cindex source format
+@cindex file, source
 @cindex source code
 @cindex code, source
 @cindex fixed form
@@ -4830,7 +4270,7 @@ stream-based text file is translated to GNU Fortran lines as follows:
 A newline in the file is the character that represents the end of
 a line of text to the underlying system.
 For example, on ASCII-based systems, a newline is the @key{NL}
-character, which has ASCII value 12 (decimal).
+character, which has ASCII value 10 (decimal).
 
 @item
 Each newline in the file serves to end the line of text that precedes
@@ -4841,7 +4281,9 @@ The end-of-file marker (@code{EOF}) also serves to end the line
 of text that precedes it (and that does not contain a newline).
 
 @item
-@cindex blanks (spaces)
+@cindex blank
+@cindex space
+@cindex SPC
 Any line of text that is shorter than 72 characters is padded to that length
 with spaces (called ``blanks'' in the standard).
 
@@ -4870,10 +4312,10 @@ line containing 72 spaces.
 
 @node Continuation Line
 @subsection Continuation Line
-@cindex continuation lines, number of
+@cindex continuation line, number of
 @cindex lines, continuation
 @cindex number of continuation lines
-@cindex limits on continuation lines
+@cindex limits, continuation lines
 
 (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.)
 
@@ -4987,7 +4429,7 @@ An @code{END BLOCK DATA} statement, if the program unit is a block data.
 
 @node INCLUDE
 @subsection Including Source Text
-@cindex INCLUDE
+@cindex INCLUDE directive
 
 Additional source text may be included in the processing of
 the source file via the @code{INCLUDE} directive:
@@ -5076,8 +4518,9 @@ This permits long names to be used for @var{filename}.
 @cindex #
 @cindex preprocessor
 
-@code{cpp} output-style @code{#} directives @xref{C Preprocessor
-Output,,, cpp, The C Preprocessor}, are recognized by the compiler even
+@code{cpp} output-style @code{#} directives
+(@pxref{C Preprocessor Output,,, cpp, The C Preprocessor})
+are recognized by the compiler even
 when the preprocessor isn't run on the input (as it is when compiling
 @samp{.F} files).  (Note the distinction between these @code{cpp}
 @code{#} @emph{output} directives and @code{#line} @emph{input}
@@ -5592,6 +5035,11 @@ and @samp{0123456789ABCDEFabcdef}, respectively.
 (The value for @samp{A} (and @samp{a}) is 10, for @samp{B} and @samp{b}
 is 11, and so on.)
 
+A prefix-radix constant, such as @samp{Z'ABCD'}, can optionally be
+treated as typeless.  @xref{Fortran Dialect Options,, Options
+Controlling Fortran Dialect}, for information on the
+@samp{-ftypeless-boz} option.
+
 Typeless constants have values that depend on the context in which
 they are used.
 
@@ -5876,6 +5324,10 @@ as appropriate.
 @node CYCLE and EXIT
 @subsection The @code{CYCLE} and @code{EXIT} Statements
 
+@cindex CYCLE statement
+@cindex EXIT statement
+@cindex statements, CYCLE
+@cindex statements, EXIT
 The @code{CYCLE} and @code{EXIT} statements specify that
 the remaining statements in the current iteration of a
 particular active (enclosing) @code{DO} loop are to be skipped.
@@ -6212,12 +5664,12 @@ are given arguments that do not conform to their stated requirements:
 @smallexample
       PROGRAM JCB002
 C Version 1:
+C Modified 1999-02-15 (Burley) to delete my email address.
 C Modified 1997-05-21 (Burley) to accommodate compilers that implement
 C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
 C
 C Version 0:
 C Written by James Craig Burley 1997-02-20.
-C Contact via Internet email: burley@@gnu.org
 C
 C Purpose:
 C Determine how compilers handle non-standard IDIM
@@ -6320,7 +5772,7 @@ These disagreements strongly suggest that Fortran programmers,
 and certainly existing Fortran programs, disagree about the
 meaning of such invocations.
 
-The first version of @samp{JCB002} didn't accommodate some compilers'
+The first version of @code{JCB002} didn't accommodate some compilers'
 treatment of @samp{INT(I1-I2)} where @samp{I1} and @samp{I2} are
 @code{INTEGER*2}.
 In such a case, these compilers apparently convert both
@@ -6332,7 +5784,7 @@ However, the results of the careful analyses done on the outputs
 of programs compiled by these various compilers show that they
 all implement either @samp{Interp 1} or @samp{Interp 2} above.
 
-Specifically, it is believed that the new version of @samp{JCB002}
+Specifically, it is believed that the new version of @code{JCB002}
 above will confirm that:
 
 @itemize @bullet
@@ -6355,10 +5807,10 @@ worth adding to the above list, please let us know the details
 
 @node REAL() and AIMAG() of Complex
 @subsection @code{REAL()} and @code{AIMAG()} of Complex
-@cindex REAL intrinsic
-@cindex intrinsics, REAL
-@cindex AIMAG intrinsic
-@cindex intrinsics, AIMAG
+@cindex @code{Real} intrinsic
+@cindex intrinsics, @code{Real}
+@cindex @code{AImag} intrinsic
+@cindex intrinsics, @code{AImag}
 
 The GNU Fortran language disallows @code{REAL(@var{expr})}
 and @code{AIMAG(@var{expr})},
@@ -6415,8 +5867,8 @@ treated as @samp{REAL(REALPART(@var{expr}))}.
 
 @node CMPLX() of DOUBLE PRECISION
 @subsection @code{CMPLX()} of @code{DOUBLE PRECISION}
-@cindex CMPLX intrinsic
-@cindex intrinsics, CMPLX
+@cindex @code{Cmplx} intrinsic
+@cindex intrinsics, @code{Cmplx}
 
 In accordance with Fortran 90 and at least some (perhaps all)
 other compilers, the GNU Fortran language defines @code{CMPLX()}
@@ -6548,7 +6000,7 @@ and definable by, invocation of the intrinsic (a combination of
 the requirements of @code{INTENT(IN)} and @code{INTENT(OUT)}.
 
 @item
-@xref{Kind Notation} for explanation of @code{KIND}.
+@xref{Kind Notation}, for an explanation of @code{KIND}.
 @end itemize
 
 @ifinfo
@@ -6579,7 +6031,7 @@ did not exist, would leave this document in far worse shape!)
 
 @node Scope and Classes of Names
 @section Scope and Classes of Symbolic Names
-@cindex symbolic names
+@cindex symbol names, scope and classes
 @cindex scope
 
 (The following information augments or overrides the information in
@@ -6594,7 +6046,7 @@ for the relevant aspects of GNU Fortran.)
 
 @node Underscores in Symbol Names
 @subsection Underscores in Symbol Names
-@cindex underscores
+@cindex underscore
 
 Underscores (@samp{_}) are accepted in symbol names after the first
 character (which must be a letter).
@@ -6616,12 +6068,16 @@ Edit descriptors in @code{FORMAT} statements may contain compile-time
 
 The @code{OPEN} specifier @code{NAME=} is equivalent to @code{FILE=}.
 
-These Fortran 90 features are supported: 
+These Fortran 90 features are supported:
 @itemize @bullet
 @item
+@cindex FORMAT descriptors
 @cindex Z edit descriptor
 @cindex edit descriptor, Z
-The @code{Z} edit descriptor is supported.
+@cindex O edit descriptor
+@cindex edit descriptor, O
+The @code{O} and @code{Z} edit descriptors are supported for I/O of
+integers in octal and hexadecimal formats, respectively.
 @item
 The @code{FILE=} specifier may be omitted in an @code{OPEN} statement if
 @code{STATUS='SCRATCH'} is supplied.  The @code{STATUS='REPLACE'}
@@ -6631,25 +6087,21 @@ specifier is supported.
 @node Fortran 90 Features
 @section Fortran 90 Features
 @cindex Fortran 90
+@cindex extensions, from Fortran 90
 
 For convenience this section collects a list (probably incomplete) of
 the Fortran 90 features supported by the GNU Fortran language, even if
 they are documented elsewhere.
-@c makeinfo 1.68 objects to the nested parens
-@ifnotinfo
-@xref{Characters Lines Sequence,,{Characters, Lines, and Execution Sequence}},
-@end ifnotinfo
-@ifinfo
-@xref{Characters Lines Sequence},
-@end ifinfo
-for information on additional fixed source form lexical issues.  In
-addition, the free source form is supported through the
+@xref{Characters Lines Sequence,,@asis{Characters, Lines, and Execution Sequence}},
+for information on additional fixed source form lexical issues.
 @cindex @samp{-ffree-form}
-@samp{-ffree-form} option.  @xref{Fortran 90} for other Fortran 90
-features be turned on by the
+Further, the free source form is supported through the
+@samp{-ffree-form} option.
 @cindex @samp{-ff90}
-@samp{-ff90} option.  @xref{Table of Intrinsic Functions} for
-information on the Fortran 90 intrinsics available.
+Other Fortran 90 features can be turned on by the @samp{-ff90} option;
+see @ref{Fortran 90}.
+For information on the Fortran 90 intrinsics available,
+see @ref{Table of Intrinsic Functions}.
 
 @table @asis
 @item Automatic arrays in procedures
@@ -6663,12 +6115,11 @@ Strings may have zero length and substrings of character constants are
 permitted.  Character constants may be enclosed in double quotes
 (@code{"}) as well as single quotes.  @xref{Character Type}.
 @item Construct names
-(Symbolic tags on blocks.)  @xref{Construct Names }.
+(Symbolic tags on blocks.)  @xref{Construct Names}.
 @item @code{CYCLE} and @code{EXIT}
 @xref{CYCLE and EXIT,,The @code{CYCLE} and @code{EXIT} Statements}.
 @item @code{DOUBLE COMPLEX}
-@xref{DOUBLE COMPLEX,,@code{DOUBLE COMPLEX} Statement
-}.
+@xref{DOUBLE COMPLEX,,@code{DOUBLE COMPLEX} Statement}.
 @item @code{DO WHILE}
 @xref{DO WHILE}.
 @item @code{END} decoration
@@ -6679,21 +6130,29 @@ permitted.  Character constants may be enclosed in double quotes
 @item @code{IMPLICIT NONE}
 @item @code{INCLUDE} statements
 @xref{INCLUDE}.
-@item List directed and namelist i/o on internal files
+@item List-directed and namelist I/O on internal files
 @item Binary, octal and hexadecimal constants
 These are supported more generally than required by Fortran 90.
 @xref{Integer Type}.
+@item @samp{O} and @samp{Z} edit descriptors
 @item @code{NAMELIST}
 @xref{NAMELIST}.
 @item @code{OPEN} specifiers
 @code{STATUS='REPLACE'} is supported.
+The @code{FILE=} specifier may be omitted in an @code{OPEN} statement if
+@code{STATUS='SCRATCH'} is supplied.
+@item @code{FORMAT} edit descriptors
+@cindex FORMAT descriptors
+@cindex Z edit descriptor
+@cindex edit descriptor, Z
+The @code{Z} edit descriptor is supported.
 @item Relational operators
 The operators @code{<}, @code{<=}, @code{==}, @code{/=}, @code{>} and
 @code{>=} may be used instead of @code{.LT.}, @code{.LE.}, @code{.EQ.},
 @code{.NE.}, @code{.GT.} and @code{.GE.} respectively.
 @item @code{SELECT CASE}
-Not fully implemented.  @xref{SELECT CASE on CHARACTER Type,,
-@code{SELECT CASE} on @code{CHARACTER} Type}.
+Not fully implemented.
+@xref{SELECT CASE on CHARACTER Type,, @code{SELECT CASE} on @code{CHARACTER} Type}.
 @item Specification statements
 A limited subset of the Fortran 90 syntax and semantics for variable
 declarations is supported, including @code{KIND}.  @xref{Kind Notation}.
@@ -6740,8 +6199,8 @@ of work!}
 @node Source Form
 @section Source Form
 @cindex source file format
-@cindex source form
-@cindex files, source
+@cindex source format
+@cindex file, source
 @cindex source code
 @cindex code, source
 @cindex fixed form
@@ -6790,7 +6249,8 @@ inside such constants.
 
 @node Tabs
 @subsection Tabs
-@cindex tab characters
+@cindex tab character
+@cindex horizontal tab
 
 A source line with a @key{TAB} character anywhere in it is treated as
 entirely significant---however long it is---instead of ending in
@@ -6824,8 +6284,7 @@ the way continued character/Hollerith constants are interpreted).
 @node Short Lines
 @subsection Short Lines
 @cindex short source lines
-@cindex space-padding
-@cindex spaces
+@cindex space, padding with
 @cindex source lines, short
 @cindex lines, short
 
@@ -6851,7 +6310,7 @@ like @samp{-ffixed-line-length-none}, for example.
 @node Long Lines
 @subsection Long Lines
 @cindex long source lines
-@cindex truncation
+@cindex truncation, of long lines
 @cindex lines, long
 @cindex source lines, long
 
@@ -6878,8 +6337,11 @@ continuation line, imitating the behavior of @code{f2c}.
 @section Trailing Comment
 
 @cindex trailing comment
-@cindex comment, trailing
+@cindex comment
+@cindex characters, comment
 @cindex /*
+@cindex !
+@cindex exclamation point
 @code{g77} supports use of @samp{/*} to start a trailing
 comment.
 In the GNU Fortran language, @samp{!} is used for this purpose.
@@ -7033,7 +6495,7 @@ but that seems to be overkill for a product in beta test.
 
 Note 2: Rules for InitialCaps names are:
 
-@itemize --
+@itemize @minus
 @item
 Must be a single uppercase letter, @strong{or}
 @item
@@ -7046,7 +6508,7 @@ valid InitialCaps names, but @samp{AB}, @samp{A2}, and @samp{ABC} are
 not.
 Note that most, but not all, built-in names meet these
 requirements---the exceptions are some of the two-letter format
-specifiers, such as @samp{BN} and @samp{BZ}.
+specifiers, such as @code{BN} and @code{BZ}.
 
 Here are the names of the corresponding command-line options:
 
@@ -7240,7 +6702,7 @@ meaning is to be assumed.
 
 @code{g77} treats double-quote (@samp{"})
 as beginning an octal constant of @code{INTEGER(KIND=1)} type
-when the @code{-fvxt} option is specified.
+when the @samp{-fvxt} option is specified.
 The form of this octal constant is
 
 @example
@@ -7251,7 +6713,7 @@ The form of this octal constant is
 where @var{octal-digits} is a nonempty string of characters in
 the set @samp{01234567}.
 
-For example, the @code{-fvxt} option permits this:
+For example, the @samp{-fvxt} option permits this:
 
 @example
 PRINT *, "20
@@ -7272,7 +6734,8 @@ both constructs in the general case, since statements like
 
 @node Exclamation Point
 @subsection Meaning of Exclamation Point in Column 6
-@cindex exclamation points
+@cindex !
+@cindex exclamation point
 @cindex continuation character
 @cindex characters, continuation
 @cindex comment character
@@ -7283,7 +6746,7 @@ a fixed-form source file
 as a continuation character rather than
 as the beginning of a comment
 (as it does in any other column)
-when the @code{-fvxt} option is specified.
+when the @samp{-fvxt} option is specified.
 
 The following program, when run, prints a message indicating
 whether it is interpreted according to GNU Fortran (and Fortran 90)
@@ -7306,7 +6769,7 @@ marks a line as a continuation line when it appears in column 6.)
 @node Fortran 90
 @section Fortran 90
 @cindex compatibility, Fortran 90
-@cindex Fortran 90 compatibility
+@cindex Fortran 90, compatibility
 
 The GNU Fortran language includes a number of features that are
 part of Fortran 90, even when the @samp{-ff90} option is not specified.
@@ -7394,7 +6857,7 @@ provided for by that standard.
 Automatic conversion of numeric
 expressions to @code{INTEGER(KIND=1)} in contexts such as:
 
-@itemize --
+@itemize @minus
 @item
 Array-reference indexes.
 @item
@@ -7513,18 +6976,6 @@ portable constructs, are accepted.
 These are humorously referred to as ``distensions'',
 extensions that just plain look ugly in the harsh light of day.
 
-@emph{Note:} The @samp{-fugly} option, which currently serves
-as shorthand to enable all of the distensions below, is likely to
-be removed in a future version of @code{g77}.
-That's because it's likely new distensions will be added that
-conflict with existing ones in terms of assigning meaning to
-a given chunk of code.
-(Also, it's pretty clear that users should not use @samp{-fugly}
-as shorthand when the next release of @code{g77} might add a
-distension to that that causes their existing code, when recompiled,
-to behave differently---perhaps even fail to compile or run
-correctly.)
-
 @menu
 * Ugly Implicit Argument Conversion::  Disabled via @samp{-fno-ugly-args}.
 * Ugly Assumed-Size Arrays::           Enabled via @samp{-fugly-assumed}.
@@ -7659,8 +7110,9 @@ without conversion.
 
 @node Ugly Null Arguments
 @subsection Ugly Null Arguments
-@cindex trailing commas
-@cindex commas, trailing
+@cindex trailing comma
+@cindex comma, trailing
+@cindex characters, comma
 @cindex null arguments
 @cindex arguments, null
 
@@ -7817,7 +7269,7 @@ ASSIGN 10 TO I
 Normally, for portability and improved diagnostics, @code{g77}
 reserves distinct storage for a ``sibling'' of @samp{I}, used
 only for @code{ASSIGN} statements to that variable (along with
-the corresponding assigned-@code{GOTO} and assigned-@samp{FORMAT}-I/O
+the corresponding assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O
 statements that reference the variable).
 
 However, some code (that violates the ANSI FORTRAN 77 standard)
@@ -7874,6 +7326,7 @@ of work!}
 
 @menu
 * Compiler Limits::
+* Run-time Environment Limits::
 * Compiler Types::
 * Compiler Constants::
 * Compiler Intrinsics::
@@ -7892,6 +7345,8 @@ symbols in a program, and so on.
 @cindex -Nl option
 @cindex options, -Nx
 @cindex -Nx option
+@cindex limits, continuation lines
+@cindex limits, lengths of names
 For example, some other Fortran compiler have an option
 (such as @samp{-Nl@var{x}}) to increase the limit on the
 number of continuation lines.
@@ -7907,9 +7362,315 @@ limits in these areas.
 @cindex maximum rank
 @cindex number of dimensions, maximum
 @cindex maximum number of dimensions
+@cindex limits, rank
+@cindex limits, array dimensions
 @code{g77} does currently limit the number of dimensions in an array
 to the same degree as do the Fortran standards---seven (7).
-This restriction might well be lifted in a future version.
+This restriction might be lifted in a future version.
+
+@node Run-time Environment Limits
+@section Run-time Environment Limits
+@cindex limits, run-time library
+@cindex wraparound
+
+As a portable Fortran implementation,
+@code{g77} offers its users direct access to,
+and otherwise depends upon,
+the underlying facilities of the system
+used to build @code{g77},
+the system on which @code{g77} itself is used to compile programs,
+and the system on which the @code{g77}-compiled program is actually run.
+(For most users, the three systems are of the same
+type---combination of operating environment and hardware---often
+the same physical system.)
+
+The run-time environment for a particular system
+inevitably imposes some limits on a program's use
+of various system facilities.
+These limits vary from system to system.
+
+Even when such limits might be well beyond the
+possibility of being encountered on a particular system,
+the @code{g77} run-time environment
+has certain built-in limits,
+usually, but not always, stemming from intrinsics
+with inherently limited interfaces.
+
+Currently, the @code{g77} run-time environment
+does not generally offer a less-limiting environment
+by augmenting the underlying system's own environment.
+
+Therefore, code written in the GNU Fortran language,
+while syntactically and semantically portable,
+might nevertheless make non-portable assumptions
+about the run-time environment---assumptions that
+prove to be false for some particular environments.
+
+The GNU Fortran language,
+the @code{g77} compiler and run-time environment,
+and the @code{g77} documentation
+do not yet offer comprehensive portable work-arounds for such limits,
+though programmers should be able to
+find their own in specific instances.
+
+Not all of the limitations are described in this document.
+Some of the known limitations include:
+
+@menu
+* Timer Wraparounds::
+* Year 2000 (Y2K) Problems::
+* Array Size::
+* Character-variable Length::
+* Year 10000 (Y10K) Problems::
+@end menu
+
+@node Timer Wraparounds
+@subsection Timer Wraparounds
+
+Intrinsics that return values computed from system timers,
+whether elapsed (wall-clock) timers,
+process CPU timers,
+or other kinds of timers,
+are prone to experiencing wrap-around errors
+(or returning wrapped-around values from successive calls)
+due to insufficient ranges
+offered by the underlying system's timers.
+
+@cindex negative time
+@cindex short time
+@cindex long time
+Some of the symptoms of such behaviors include
+apparently negative time being computed for a duration,
+an extremely short amount of time being computed for a long duration,
+and an extremely long amount of time being computed for a short duration.
+
+See the following for intrinsics
+known to have potential problems in these areas
+on at least some systems:
+@ref{CPU_Time Intrinsic},
+@ref{DTime Intrinsic (function)}, @ref{DTime Intrinsic (subroutine)},
+@ref{ETime Intrinsic (function)}, @ref{ETime Intrinsic (subroutine)},
+@ref{MClock Intrinsic}, @ref{MClock8 Intrinsic},
+@ref{Secnds Intrinsic},
+@ref{Second Intrinsic (function)}, @ref{Second Intrinsic (subroutine)},
+@ref{System_Clock Intrinsic},
+@ref{Time Intrinsic (UNIX)}, @ref{Time Intrinsic (VXT)},
+@ref{Time8 Intrinsic}.
+
+@node Year 2000 (Y2K) Problems
+@subsection Year 2000 (Y2K) Problems
+@cindex Y2K compliance
+@cindex Year 2000 compliance
+
+While the @code{g77} compiler itself is believed to
+be Year-2000 (Y2K) compliant,
+some intrinsics are not,
+and, potentially, some underlying systems are not,
+perhaps rendering some Y2K-compliant intrinsics
+non-compliant when used on those particular systems.
+
+Fortran code that uses non-Y2K-compliant intrinsics
+(listed below)
+is, itself, almost certainly not compliant,
+and should be modified to use Y2K-compliant intrinsics instead.
+
+Fortran code that uses no non-Y2K-compliant intrinsics,
+but which currently is running on a non-Y2K-compliant system,
+can be made more Y2K compliant by compiling and
+linking it for use on a new Y2K-compliant system,
+such as a new version of an old, non-Y2K-compliant, system.
+
+Currently, information on Y2K and related issues
+is being maintained at
+@uref{http://www.gnu.org/software/year2000-list.html}.
+
+See the following for intrinsics
+known to have potential problems in these areas
+on at least some systems:
+@ref{Date Intrinsic},
+@ref{IDate Intrinsic (VXT)}.
+
+@cindex y2kbuggy
+@cindex date_y2kbuggy_0
+@cindex vxtidate_y2kbuggy_0
+@cindex G77_date_y2kbuggy_0
+@cindex G77_vxtidate_y2kbuggy_0
+The @code{libg2c} library
+shipped with any @code{g77} that warns
+about invocation of a non-Y2K-compliant intrinsic
+has renamed the @code{EXTERNAL} procedure names
+of those intrinsics.
+This is done so that
+the @code{libg2c} implementations of these intrinsics
+cannot be directly linked to
+as @code{EXTERNAL} names
+(which normally would avoid the non-Y2K-intrinsic warning).
+
+The renamed forms of the @code{EXTERNAL} names
+of these renamed procedures
+may be linked to
+by appending the string @samp{_y2kbug}
+to the name of the procedure
+in the source code.
+For example:
+
+@smallexample
+CHARACTER*20 STR
+INTEGER YY, MM, DD
+EXTERNAL DATE_Y2KBUG, VXTIDATE_Y2KBUG
+CALL DATE_Y2KBUG (STR)
+CALL VXTIDATE_Y2KBUG (MM, DD, YY)
+@end smallexample
+
+(Note that the @code{EXTERNAL} statement
+is not actually required,
+since the modified names are not recognized as intrinsics
+by the current version of @code{g77}.
+But it is shown in this specific case,
+for purposes of illustration.)
+
+The renaming of @code{EXTERNAL} procedure names of these intrinsics
+causes unresolved references at link time.
+For example, @samp{EXTERNAL DATE; CALL DATE(STR)}
+is normally compiled by @code{g77}
+as, in C, @samp{date_(&str, 20);}.
+This, in turn, links to the @code{date_} procedure
+in the @code{libE77} portion of @code{libg2c},
+which purposely calls a nonexistent procedure
+named @code{G77_date_y2kbuggy_0}.
+The resulting link-time error is designed, via this name,
+to encourage the programmer to look up the
+index entries to this portion of the @code{g77} documentation.
+
+Generally, we recommend that the @code{EXTERNAL} method
+of invoking procedures in @code{libg2c}
+@emph{not} be used.
+When used, some of the correctness checking
+normally performed by @code{g77}
+is skipped.
+
+In particular, it is probably better to use the
+@code{INTRINSIC} method of invoking
+non-Y2K-compliant procedures,
+so anyone compiling the code
+can quickly notice the potential Y2K problems
+(via the warnings printing by @code{g77})
+without having to even look at the code itself.
+
+If there are problems linking @code{libg2c}
+to code compiled by @code{g77}
+that involve the string @samp{y2kbug},
+and these are not explained above,
+that probably indicates
+that a version of @code{libg2c}
+older than @code{g77}
+is being linked to,
+or that the new library is being linked
+to code compiled by an older version of @code{g77}.
+
+That's because, as of the version that warns about
+non-Y2K-compliant intrinsic invocation,
+@code{g77} references the @code{libg2c} implementations
+of those intrinsics
+using new names, containing the string @samp{y2kbug}.
+
+So, linking newly-compiled code
+(invoking one of the intrinsics in question)
+to an old library
+might yield an unresolved reference
+to @code{G77_date_y2kbug_0}.
+(The old library calls it @code{G77_date_0}.)
+
+Similarly, linking previously-compiled code
+to a new library
+might yield an unresolved reference
+to @code{G77_vxtidate_0}.
+(The new library calls it @code{G77_vxtidate_y2kbug_0}.)
+
+The proper fix for the above problems
+is to obtain the latest release of @code{g77}
+and related products
+(including @code{libg2c})
+and install them on all systems,
+then recompile, relink, and install
+(as appropriate)
+all existing Fortran programs.
+
+(Normally, this sort of renaming is steadfastly avoided.
+In this case, however, it seems more important to highlight
+potential Y2K problems
+than to ease the transition
+of potentially non-Y2K-compliant code
+to new versions of @code{g77} and @code{libg2c}.)
+
+@node Array Size
+@subsection Array Size
+@cindex limits, array size
+@cindex array size
+
+Currently, @code{g77} uses the default @code{INTEGER} type
+for array indexes,
+which limits the sizes of single-dimension arrays
+on systems offering a larger address space
+than can be addressed by that type.
+(That @code{g77} puts all arrays in memory
+could be considered another limitation---it
+could use large temporary files---but that decision
+is left to the programmer as an implementation choice
+by most Fortran implementations.)
+
+@c ??? Investigate this, to offer a more clear statement
+@c than the following paragraphs do.  -- burley 1999-02-17
+It is not yet clear whether this limitation
+never, sometimes, or always applies to the
+sizes of multiple-dimension arrays as a whole.
+
+For example, on a system with 64-bit addresses
+and 32-bit default @code{INTEGER},
+an array with a size greater than can be addressed
+by a 32-bit offset
+can be declared using multiple dimensions.
+Such an array is therefore larger
+than a single-dimension array can be,
+on the same system.
+
+@cindex limits, multi-dimension arrays
+@cindex multi-dimension arrays
+@cindex arrays, dimensioning
+Whether large multiple-dimension arrays are reliably supported
+depends mostly on the @code{gcc} back end (code generator)
+used by @code{g77}, and has not yet been fully investigated.
+
+@node Character-variable Length
+@subsection Character-variable Length
+@cindex limits, on character-variable length
+@cindex character-variable length
+
+Currently, @code{g77} uses the default @code{INTEGER} type
+for the lengths of @code{CHARACTER} variables
+and array elements.
+
+This means that, for example,
+a system with a 64-bit address space
+and a 32-bit default @code{INTEGER} type
+does not, under @code{g77},
+support a @code{CHARACTER*@var{n}} declaration
+where @var{n} is greater than 2147483647.
+
+@node Year 10000 (Y10K) Problems
+@subsection Year 10000 (Y10K) Problems
+@cindex Y10K compliance
+@cindex Year 10000 compliance
+
+Most intrinsics returning, or computing values based on,
+date information are prone to Year-10000 (Y10K) problems,
+due to supporting only 4 digits for the year.
+
+See the following for examples:
+@ref{FDate Intrinsic (function)}, @ref{FDate Intrinsic (subroutine)},
+@ref{IDate Intrinsic (UNIX)},
+@ref{Time Intrinsic (VXT)},
+@ref{Date_and_Time Intrinsic}.
 
 @node Compiler Types
 @section Compiler Types
@@ -8445,7 +8206,7 @@ command.
 of work!}
 
 @menu
-* Interoperating with C and C++::  
+* Interoperating with C and C++::
 @end menu
 
 @node Interoperating with C and C++
@@ -8486,7 +8247,7 @@ options @code{g77} passes by running @samp{g77 -v}.
 @pindex f2c
 @cindex cfortran.h
 @cindex Netlib
-Even if you don't actually use it as a compiler, @samp{f2c} from
+Even if you don't actually use it as a compiler, @code{f2c} from
 @uref{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
 interfacing (linking) Fortran and C@.
 @xref{f2c Skeletons and Prototypes,,Generating Skeletons and Prototypes with @code{f2c}}.
@@ -8497,7 +8258,7 @@ build the @file{src} directory from the distribution, consult the
 @code{f2c} program on your path.
 
 Something else that might be useful is @samp{cfortran.h} from
-@uref{ftp://zebra/desy.de/cfortran}.
+@uref{ftp://zebra.desy.de/cfortran}.
 This is a fairly general tool which
 can be used to generate interfaces for calling in both directions
 between Fortran and C@.
@@ -8513,7 +8274,7 @@ Generally, C code written to link with
 called from Fortran---should @samp{#include <g2c.h>} to define the C
 versions of the Fortran types.
 Don't assume Fortran @code{INTEGER} types
-correspond to C @samp{int}s, for instance; instead, declare them as
+correspond to C @code{int}s, for instance; instead, declare them as
 @code{integer}, a type defined by @file{g2c.h}.
 @file{g2c.h} is installed where @code{gcc} will find it by
 default, assuming you use a copy of @code{gcc} compatible with
@@ -8528,7 +8289,7 @@ A simple and foolproof way to write @code{g77}-callable C routines---e.g.@: to
 interface with an existing library---is to write a file (named, for
 example, @file{fred.f}) of dummy Fortran
 skeletons comprising just the declaration of the routine(s) and dummy
-arguments plus @samp{END} statements.
+arguments plus @code{END} statements.
 Then run @code{f2c} on file @file{fred.f} to produce @file{fred.c}
 into which you can edit
 useful code, confident the calling sequence is correct, at least.
@@ -8542,7 +8303,7 @@ as the return type of a @code{REAL} @code{FUNCTION}.)
 @samp{-P} option to generate C prototypes appropriate for calling the
 Fortran.@footnote{The files generated like this can also be used for
 inter-unit consistency checking of dummy and actual arguments, although
-the @samp{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
+the @code{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
 or @uref{ftp://ftp.dsm.fordham.edu} is
 probably better for this purpose.}
 If the Fortran code containing any
@@ -8574,8 +8335,8 @@ avoid clashes with C++ reserved words in addition to those in C@.
 @subsection Startup Code
 
 @cindex startup code
-@cindex runtime initialization
-@cindex initialization, runtime
+@cindex run-time, initialization
+@cindex initialization, run-time
 Unlike with some runtime systems,
 it shouldn't be necessary
 (unless there are bugs)
@@ -8788,11 +8549,11 @@ described in this section.
 @cindex statements, PROGRAM
 
 When @code{g77} compiles a main program unit, it gives it the public
-procedure name @samp{MAIN__}.
+procedure name @code{MAIN__}.
 The @code{libg2c} library has the actual @code{main()} procedure
 as is typical of C-based environments, and
 it is this procedure that performs some initial start-up
-activity and then calls @samp{MAIN__}.
+activity and then calls @code{MAIN__}.
 
 Generally, @code{g77} and @code{libg2c} are designed so that you need not
 include a main program unit written in Fortran in your program---it
@@ -8810,10 +8571,10 @@ file @file{@value{path-libf2c}/libF77/main.c}, to see what kinds of things
 might need to be done by your @code{main()} in order to provide the
 Fortran environment your Fortran code is expecting.
 
-@cindex IARGC() intrinsic
-@cindex intrinsics, IARGC()
-@cindex GETARG() intrinsic
-@cindex intrinsics, GETARG()
+@cindex @code{IArgC} intrinsic
+@cindex intrinsics, @code{IArgC}
+@cindex @code{GetArg} intrinsic
+@cindex intrinsics, @code{GetArg}
 For example, @code{libg2c}'s @code{main()} sets up the information used by
 the @code{IARGC} and @code{GETARG} intrinsics.
 Bypassing @code{libg2c}'s @code{main()}
@@ -8834,7 +8595,7 @@ Fortran code.
 
 The standard way to get around this problem is to set a break
 point (a one-time, or temporary, break point will do) at
-the entrance to @samp{MAIN__}, and then run the program.
+the entrance to @code{MAIN__}, and then run the program.
 A convenient way to do so is to add the @code{gdb} command
 
 @example
@@ -8851,7 +8612,7 @@ unit of your program.
 
 Of course, if you really want to set a break point at some
 other place in your program and just start the program
-running, without first breaking at @samp{MAIN__},
+running, without first breaking at @code{MAIN__},
 that should work fine.
 
 @node Procedures
@@ -8984,7 +8745,7 @@ functions return @code{float}.
 @node Names
 @section Names
 @cindex symbol names
-@cindex transformation of symbol names
+@cindex transforming symbol names
 
 Fortran permits each implementation to decide how to represent
 names as far as how they're seen in other contexts, such as debuggers
@@ -9084,8 +8845,8 @@ could be used to inhibit the appending of the underscore to the name.
 @node Common Blocks
 @section Common Blocks (COMMON)
 @cindex common blocks
-@cindex COMMON statement
-@cindex statements, COMMON
+@cindex @code{COMMON} statement
+@cindex statements, @code{COMMON}
 
 @code{g77} names and lays out @code{COMMON} areas
 the same way @code{f2c} does,
@@ -9109,6 +8870,10 @@ in conjunction with a contemporary version of @code{gdb},
 properly supports Fortran-language debugging, including access
 to members of @code{COMMON} areas.)
 
+Version 0.5.26 of @code{g77} is believed to provide correct and
+complete debug information for COMMON BLOCK and EQUIVALENCE items -
+hence the @samp{-fdebug-kludge} option has been disabled.
+
 @xref{Code Gen Options,,Options for Code Generation Conventions},
 for information on the @samp{-fdebug-kludge} option.
 
@@ -9199,7 +8964,7 @@ previous method in the documentation.)
 @node Complex Variables
 @section Complex Variables (COMPLEX)
 @cindex complex variables
-@cindex imaginary part of complex
+@cindex imaginary part
 @cindex COMPLEX statement
 @cindex statements, COMPLEX
 
@@ -9227,11 +8992,6 @@ mode afterward.
 (In @code{gdb}, this is accomplished via @samp{set lang c} and
 either @samp{set lang fortran} or @samp{set lang auto}.)
 
-@emph{Note:} Compiling with the @samp{-fno-emulate-complex} option
-avoids the debugging problem, but is known to cause other problems
-like compiler crashes and generation of incorrect code, so it is
-not recommended.
-
 @node Arrays
 @section Arrays (DIMENSION)
 @cindex DIMENSION statement
@@ -9653,7 +9413,7 @@ Instead, make a separate @code{INCLUDE} file that defines
 so you can more easily change the actual numbers in the future.
 
 The information below is culled from the definition
-of @samp{F_err} in @file{f/runtime/libI77/err.c} in the
+of @code{F_err} in @file{f/runtime/libI77/err.c} in the
 @code{g77} source tree.
 
 @smallexample
@@ -9747,7 +9507,8 @@ is not intended to be comprehensive.
 
 @menu
 * Language Extensions::  Features used by Fortran code.
-* Compiler Options::     Features helpful during development.
+* Diagnostic Abilities:: Abilities to spot problems early.
+* Compiler Options::     Features helpful to accommodate legacy code, etc.
 * Compiler Speed::       Speed of the compilation process.
 * Program Speed::        Speed of the generated, optimized code.
 * Ease of Debugging::    Debugging ease-of-use at the source level.
@@ -9757,25 +9518,114 @@ is not intended to be comprehensive.
 @node Language Extensions
 @subsection Language Extensions
 
-@code{g77} offers several extensions to the Fortran language that @code{f2c}
-doesn't.
+@code{g77} offers several extensions to FORTRAN 77 language that @code{f2c}
+doesn't:
+
+@itemize @bullet
+@item
+Automatic arrays
+
+@item
+@code{CYCLE} and @code{EXIT}
+
+@item
+Construct names
+
+@item
+@code{SELECT CASE}
+
+@item
+@code{KIND=} and @code{LEN=} notation
+
+@item
+Semicolon as statement separator
+
+@item
+Constant expressions in @code{FORMAT} statements
+(such as @samp{FORMAT(I<J>)},
+where @samp{J} is a @code{PARAMETER} named constant)
+
+@item
+@code{MvBits} intrinsic
+
+@item
+@code{libU77} (Unix-compatibility) library,
+with routines known to compiler as intrinsics
+(so they work even when compiler options are used
+to change the interfaces used by Fortran routines)
+@end itemize
+
+@code{g77} also implements iterative @code{DO} loops
+so that they work even in the presence of certain ``extreme'' inputs,
+unlike @code{f2c}.
+@xref{Loops}.
+
+However, @code{f2c} offers a few that @code{g77} doesn't, such as:
+
+@itemize @bullet
+@item
+Intrinsics in @code{PARAMETER} statements
+
+@item
+Array bounds expressions (such as @samp{REAL M(N(2))})
+
+@item
+@code{AUTOMATIC} statement
+@end itemize
 
-However, @code{f2c} offers a few that @code{g77} doesn't, like
-fairly complete support for @code{INTEGER*2}.
 It is expected that @code{g77} will offer some or all of these missing
 features at some time in the future.
-(Version 0.5.18 of @code{g77} offers some rudimentary support for some
-of these features.)
+
+@node Diagnostic Abilities
+@subsection Diagnostic Abilities
+
+@code{g77} offers better diagnosis of problems in @code{FORMAT} statements.
+@code{f2c} doesn't, for example, emit any diagnostic for
+@samp{FORMAT(XZFAJG10324)},
+leaving that to be diagnosed, at run time, by
+the @code{libf2c} run-time library.
 
 @node Compiler Options
 @subsection Compiler Options
 
-@code{g77} offers a whole bunch of compiler options that @code{f2c} doesn't.
+@code{g77} offers compiler options that @code{f2c} doesn't,
+most of which are designed to more easily accommodate
+legacy code:
+
+@itemize @bullet
+@item
+Two that control the automatic appending of extra
+underscores to external names
+
+@item
+One that allows dollar signs (@samp{$}) in symbol names
+
+@item
+A variety that control acceptance of various
+``ugly'' constructs
+
+@item
+Several that specify acceptable use of upper and lower case
+in the source code
+
+@item
+Many that enable, disable, delete, or hide
+groups of intrinsics
+
+@item
+One to specify the length of fixed-form source lines
+(normally 72)
+
+@item
+One to specify the the source code is written in
+Fortran-90-style free-form
+@end itemize
 
-However, @code{f2c} offers a few that @code{g77} doesn't, like an
-option to generate code to check array subscripts at run time.
-It is expected that @code{g77} will offer some or all of these
-missing options at some time in the future.
+However, @code{f2c} offers a few that @code{g77} doesn't,
+like an option to have @code{REAL} default to @code{REAL*8}.
+It is expected that @code{g77} will offer all of the
+missing options pertinent to being a Fortran compiler
+at some time in the future.
 
 @node Compiler Speed
 @subsection Compiler Speed
@@ -9923,8 +9773,8 @@ Microsoft's rumored patent on the digits 0 and 1 is upheld.)
 @cindex BLOCK DATA statement
 @cindex statements, BLOCK DATA
 @cindex libraries, containing BLOCK DATA
-@cindex @code{f2c} compatibility
-@cindex compatibility, @code{f2c}
+@cindex f2c compatibility
+@cindex compatibility, f2c
 
 To ensure that block data program units are linked, especially a concern
 when they are put into libraries, give each one a name (as in
@@ -10024,7 +9874,7 @@ The meaning of a @code{DO} loop in Fortran is precisely specified
 in the Fortran standard@dots{}and is quite different from what
 many programmers might expect.
 
-In particular, Fortran indexed @code{DO} loops are implemented as if
+In particular, Fortran iterative @code{DO} loops are implemented as if
 the number of trips through the loop is calculated @emph{before}
 the loop is entered.
 
@@ -10208,7 +10058,7 @@ tracking down bugs in such programs.
 * Aliasing Assumed To Work::
 * Output Assumed To Flush::
 * Large File Unit Numbers::
-* Floating point precision::
+* Floating-point precision::
 * Inconsistent Calling Sequences::
 @end menu
 
@@ -10267,7 +10117,7 @@ are given types and then evaluated.
 @node Variables Assumed To Be Zero
 @subsection Variables Assumed To Be Zero
 @cindex zero-initialized variables
-@cindex variables assumed to be zero
+@cindex variables, assumed to be zero
 @cindex uninitialized variables
 
 Many Fortran programs were developed on systems that provided
@@ -10292,7 +10142,7 @@ options using @code{g77}.
 
 @node Variables Assumed To Be Saved
 @subsection Variables Assumed To Be Saved
-@cindex variables retaining values across calls
+@cindex variables, retaining values across calls
 @cindex saved variables
 @cindex static variables
 
@@ -10402,13 +10252,9 @@ introduced in version 0.5.20 and
 were withdrawn as of @code{g77} version 0.5.23
 due to their not being supported by @code{gcc} version 2.8.
 
-These options, which control the assumptions regarding aliasing
+These options control the assumptions regarding aliasing
 (overlapping) of writes and reads to main memory (core) made
-by the @code{gcc} back end,
-might well be added back (in some form) in a future version
-of @code{gcc}.
-
-However, these options @emph{are} supported by @code{egcs}.
+by the @code{gcc} back end.
 
 The information below still is useful, but applies to
 only those versions of @code{g77} that support the
@@ -10565,7 +10411,7 @@ it provides either form of detection are welcome.
 
 For several versions prior to 0.5.20, @code{g77} configured its
 version of the @code{libf2c} run-time library so that one of
-its configuration macros, @samp{ALWAYS_FLUSH}, was defined.
+its configuration macros, @code{ALWAYS_FLUSH}, was defined.
 
 This was done as a result of a belief that many programs expected
 output to be flushed to the operating system (under UNIX, via
@@ -10590,7 +10436,7 @@ non-flushing library routines.)
 
 @xref{Always Flush Output}, for information on how to modify
 the @code{g77} source tree so that a version of @code{libg2c}
-can be built and installed with the @samp{ALWAYS_FLUSH} macro defined.
+can be built and installed with the @code{ALWAYS_FLUSH} macro defined.
 
 @node Large File Unit Numbers
 @subsection Large File Unit Numbers
@@ -10609,13 +10455,13 @@ file unit number that is out of the range accepted by
 @code{libg2c}.
 Normally, this range is 0 through 99, and the high end
 of the range is controlled by a @code{libg2c} source-file
-macro named @samp{MXUNIT}.
+macro named @code{MXUNIT}.
 
 If you can easily change your program to use unit numbers
 in the range 0 through 99, you should do so.
 
 Otherwise, see @ref{Larger File Unit Numbers}, for information on how
-to change @samp{MXUNIT} in @code{libg2c} so you can build and
+to change @code{MXUNIT} in @code{libg2c} so you can build and
 install a new version of @code{libg2c} that supports the larger
 unit numbers you need.
 
@@ -10627,59 +10473,62 @@ open by a running program.
 Information on how to increase these limits should be found
 in your system's documentation.
 
-@node Floating point precision
-@subsection Floating point precision
+@node Floating-point precision
+@subsection Floating-point precision
 
-@cindex IEEE 754
-@cindex IEEE conformance
-@cindex conformance, IEEE
-@cindex floating point precision
-If your program depends on exact IEEE 754 floating point handling it may
+@cindex IEEE 754 conformance
+@cindex conformance, IEEE 754
+@cindex floating-point, precision
+@cindex ix86 floating-point
+@cindex x86 floating-point
+If your program depends on exact IEEE 754 floating-point handling it may
 help on some systems---specifically x86 or m68k hardware---to use
-the @code{-ffloat-store} option or to reset the precision flag on the
-floating point unit @xref{Optimize Options}.
+the @samp{-ffloat-store} option or to reset the precision flag on the
+floating-point unit.
+@xref{Optimize Options}.
 
 However, it might be better simply to put the FPU into double precision
-mode and not take the performance hit of @code{-ffloat-store}.  On x86
+mode and not take the performance hit of @samp{-ffloat-store}.  On x86
 and m68k GNU systems you can do this with a technique similar to that
-for turning on floating point exceptions @xref{Floating-point Exception
-Handling}.  The control word could be set to double precision by
-replacing the @code{__setfpucw} call with one like this:
+for turning on floating-point exceptions
+(@pxref{Floating-point Exception Handling}).
+The control word could be set to double precision by some code like this
+one:
 @smallexample
-  __setfpucw ((_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE);
+#include <fpu_control.h>
+@{
+  fpu_control_t cw = (_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE;
+  _FPU_SETCW(cw);
+@}
 @end smallexample
 (It is not clear whether this has any effect on the operation of the GNU
 maths library, but we have no evidence of it causing trouble.)
 
 Some targets (such as the Alpha) may need special options for full IEEE
-conformance @xref{Submodel Options,,Hardware Models and
-Configurations,gcc,Using and Porting GNU CC}.
+conformance.
+@xref{Submodel Options,,Hardware Models and Configurations,gcc,Using and Porting GNU CC}.
 
 @node Inconsistent Calling Sequences
 @subsection Inconsistent Calling Sequences
 
 @pindex ftnchek
-@cindex floating point errors
+@cindex floating-point, errors
+@cindex ix86 FPU stack
 @cindex x86 FPU stack
 Code containing inconsistent calling sequences in the same file is
-normally rejected @xref{GLOBALS}.  (Use, say, @code{ftnchek} to ensure
-consistency across source files 
-@c makeinfo 1.68 objects to the nested parens
-@ifinfo
-@xref{f2c Skeletons and Prototypes}.)
-@end ifinfo
-@ifnotinfo
+normally rejected---see @ref{GLOBALS}.
+(Use, say, @code{ftnchek} to ensure
+consistency across source files.
 @xref{f2c Skeletons and Prototypes,,
-{Generating Skeletons and Prototypes with @code{f2c}}}.)
-@end ifnotinfo
+Generating Skeletons and Prototypes with @code{f2c}}.)
 
 Mysterious errors, which may appear to be code generation problems, can
 appear specifically on the x86 architecture with some such
-inconsistencies.  On x86 hardware, floating point return values of
-functions are placed on the floating point unit's register stack, not
+inconsistencies.  On x86 hardware, floating-point return values of
+functions are placed on the floating-point unit's register stack, not
 the normal stack.  Thus calling a @code{REAL} or @code{DOUBLE PRECISION}
 @code{FUNCTION} as some other sort of procedure, or vice versa,
-scrambles the floating point stack.  This may break unrelated code
+scrambles the floating-point stack.  This may break unrelated code
 executed later.  Similarly if, say, external C routines are written
 incorrectly.
 
@@ -10759,15 +10608,6 @@ Currently, @code{g77} supports only automatic arrays, not
 @code{RECURSIVE} procedures or other means of explicitly
 specifying that variables or arrays are automatic.
 
-@cindex -fugly option
-@cindex options, -fugly
-@item -fugly
-Fix the source code so that @samp{-fno-ugly} will work.
-Note that, for many programs, it is difficult to practically
-avoid using the features enabled via @samp{-fugly-init}, and these
-features pose the lowest risk of writing nonportable code, among the
-various ``ugly'' features.
-
 @cindex -f@var{group}-intrinsics-hide option
 @cindex options, -f@var{group}-intrinsics-hide
 @item -f@var{group}-intrinsics-hide
@@ -10778,7 +10618,7 @@ It is easy to find these using @samp{-f@var{group}-intrinsics-disable}.
 
 @node Faster Programs
 @section Faster Programs
-@cindex speeding up programs
+@cindex speed, of programs
 @cindex programs, speeding up
 
 Aside from the usual @code{gcc} options, such as @samp{-O},
@@ -10795,12 +10635,13 @@ it working).
 
 @node Aligned Data
 @subsection Aligned Data
+@cindex alignment
 @cindex data, aligned
 @cindex stack, aligned
 @cindex aligned data
 @cindex aligned stack
 @cindex Pentium optimizations
-@cindex optimizations, Pentium
+@cindex optimization, for Pentium
 
 On some systems, such as those with Pentium Pro CPUs, programs
 that make heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION})
@@ -10822,8 +10663,8 @@ There are a variety of approaches to use to address this problem:
 
 @itemize @bullet
 @item
-@cindex COMMON, layout
-@cindex layout of common blocks
+@cindex @code{COMMON} layout
+@cindex layout of @code{COMMON} blocks
 Order your @code{COMMON} and @code{EQUIVALENCE} areas such
 that the variables and arrays with the widest alignment
 guidelines come first.
@@ -10853,7 +10694,7 @@ avoid having to carefully count the number of bytes
 occupied by each entity to determine whether the
 actual alignment of each subsequent entity meets the
 alignment guidelines for the type of that entity.
+
 If you don't ensure correct alignment of @code{COMMON} elements, the
 compiler may be forced by some systems to violate the Fortran semantics by
 adding padding to get @code{DOUBLE PRECISION} data properly aligned.
@@ -10896,12 +10737,6 @@ of the FORTRAN 77 standard,
 or uses @code{EQUIVALENCE} or different layouts
 in ways that assume no padding is ever inserted by the compiler.
 
-@emph{Note:} @samp{-malign-double} applies only to
-statically-allocated data.
-Double-precision data on the stack can still
-cause problems due to misalignment.
-@xref{Aligned Data}.
-
 @item
 Ensure that @file{crt0.o} or @file{crt1.o}
 on your system guarantees a 64-bit
@@ -10918,6 +10753,13 @@ Progress is being made on making this work
 @code{gcc}, and some of the relevant operating systems
 (such as GNU/Linux).
 
+@cindex alignment testing
+@cindex testing alignment
+A package that tests the degree to which a Fortran compiler
+(such as @code{g77})
+aligns 64-bit floating-point variables and arrays
+is available at @uref{ftp://alpha.gnu.org/gnu/g77/align/}.
+
 @node Prefer Automatic Uninitialized Variables
 @subsection Prefer Automatic Uninitialized Variables
 
@@ -10963,30 +10805,25 @@ compiler, typically @code{gcc}.)
 
 @node Use Submodel Options
 @subsection Use Submodel Options
-@cindex Pentium optimizations
-@cindex optimizations, Pentium
-@cindex 586/686 CPUs
 @cindex submodels
 
 Using an appropriate @samp{-m} option to generate specific code for your
 CPU may be worthwhile, though it may mean the executable won't run on
 other versions of the CPU that don't support the same instruction set.
 @xref{Submodel Options,,Hardware Models and Configurations,gcc,Using and
-Porting GNU CC}.
-
-For recent CPUs that don't have explicit support in
-the released version of @code{gcc}, it may still be possible to get
-improvements.
-For instance, the flags recommended for 586/686
-(Pentium(Pro)) chips for building the Linux kernel are:
+Porting GNU CC}.  For instance on an x86 system the compiler might have
+been built---as shown by @samp{g77 -v}---for the target
+@samp{i386-pc-linux-gnu}, i.e.@: an @samp{i386} CPU@.  In that case to
+generate code best optimized for a Pentium you could use the option
+@samp{-march=pentium}.
 
-@smallexample
--m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
--fomit-frame-pointer
-@end smallexample
+For recent CPUs that don't have explicit support in the released version
+of @code{gcc}, it @emph{might} still be possible to get improvements
+with certain @samp{-m} options.
 
-@noindent @samp{-fomit-frame-pointer} will, however, inhibit debugging
-on x86 systems.
+@samp{-fomit-frame-pointer} can help performance on x86 systems and
+others.  It will, however, inhibit debugging on the systems on which it
+is not turned on anyway by @samp{-O}.
 
 @node Trouble
 @chapter Known Causes of Trouble with GNU Fortran
@@ -11008,20 +10845,20 @@ or installing @code{g77} is not provided here.
 @xref{Problems Installing}.
 
 To find out about major bugs discovered in the current release and
-possible workarounds for them, retrieve
+possible workarounds for them, see
 @uref{ftp://alpha.gnu.org/g77.plan}.
 
 (Note that some of this portion of the manual is lifted
 directly from the @code{gcc} manual, with minor modifications
 to tailor it to users of @code{g77}.
 Anytime a bug seems to have more to do with the @code{gcc}
-portion of @code{g77},
-@xref{Trouble,,Known Causes of Trouble with GNU CC,
+portion of @code{g77}, see
+@ref{Trouble,,Known Causes of Trouble with GNU CC,
 gcc,Using and Porting GNU CC}.)
 
 @menu
 * But-bugs::         Bugs really in other programs or elsewhere.
-* Actual Bugs::      Bugs and misfeatures we will fix later.
+* Known Bugs::       Bugs known to be in this version of @code{g77}.
 * Missing Features:: Features we already know we want to add later.
 * Disappointments::  Regrettable things we can't change.
 * Non-bugs::         Things we think are right, but some others disagree.
@@ -11115,7 +10952,7 @@ How to cope with such problems is well beyond the scope
 of this manual.
 
 However, users of Linux-based systems (such as GNU/Linux)
-should review @uref{http://www.bitwizard.nl/sig11}, a source
+should review @uref{http://www.bitwizard.nl/sig11/}, a source
 of detailed information on diagnosing hardware problems,
 by recognizing their common symptoms.
 
@@ -11130,8 +10967,8 @@ a reference to it in future versions of this manual.
 @cindex unresolved reference (various)
 @cindex linking error for user code
 @cindex code, user
-@cindex ld error for user code
-@cindex ld can't find strange names
+@cindex @code{ld}, error linking user code
+@cindex @code{ld}, can't find strange names
 On some systems, perhaps just those with out-of-date (shared?)
 libraries, unresolved-reference errors happen when linking @code{g77}-compiled
 programs (which should be done using @code{g77}).
@@ -11147,10 +10984,10 @@ systems where @samp{-lg2c -lm} is insufficient to resolve code produced
 by @code{g77}.
 
 @cindex undefined reference (_main)
-@cindex linking error for user code
-@cindex ld error for user code
+@cindex linking error, user code
+@cindex @code{ld}, error linking user code
 @cindex code, user
-@cindex ld can't find _main
+@cindex @code{ld}, can't find @samp{_main}
 If your program doesn't link due to unresolved references to names
 like @samp{_main}, make sure you're using the @code{g77} command to do the
 link, since this command ensures that the necessary libraries are
@@ -11167,8 +11004,8 @@ command line, in case that helps.
 @subsection Large Common Blocks
 @cindex common blocks, large
 @cindex large common blocks
-@cindex linker errors
-@cindex ld errors
+@cindex linking, errors
+@cindex @code{ld}, errors
 @cindex errors, linker
 On some older GNU/Linux systems, programs with common blocks larger
 than 16MB cannot be linked without some kind of error
@@ -11179,7 +11016,7 @@ more recent versions of @code{binutils}, such as version 2.6.
 
 @node Debugger Problems
 @subsection Debugger Problems
-@cindex @code{gdb} support
+@cindex @code{gdb}, support
 @cindex support, @code{gdb}
 There are some known problems when using @code{gdb} on code
 compiled by @code{g77}.
@@ -11249,7 +11086,7 @@ not enough.)
 
 @node Stack Overflow
 @subsection Stack Overflow
-@cindex stack overflow
+@cindex stack, overflow
 @cindex segmentation violation
 @code{g77} code might fail at runtime (probably with a ``segmentation
 violation'') due to overflowing the stack.
@@ -11301,9 +11138,9 @@ simply too large for the system, or buggy.)
 @node Nothing Happens
 @subsection Nothing Happens
 @cindex nothing happens
-@cindex naming programs @samp{test}
-@cindex @samp{test} programs
-@cindex programs named @samp{test}
+@cindex naming programs
+@cindex @code{test} programs
+@cindex programs, @code{test}
 It is occasionally reported that a ``simple'' program,
 such as a ``Hello, World!'' program, does nothing when
 it is run, even though the compiler reported no errors,
@@ -11311,7 +11148,7 @@ despite the program containing nothing other than a
 simple @code{PRINT} statement.
 
 This most often happens because the program has been
-compiled and linked on a UNIX system and named @samp{test},
+compiled and linked on a UNIX system and named @code{test},
 though other names can lead to similarly unexpected
 run-time behavior on various systems.
 
@@ -11367,6 +11204,8 @@ themselves as @emph{visible} problems some time later.
 Overflowing the bounds of an array---usually by writing beyond
 the end of it---is one of two kinds of bug that often occurs
 in Fortran code.
+(Compile your code with the @samp{-fbounds-check} option
+to catch many of these kinds of errors at program run time.)
 
 The other kind of bug is a mismatch between the actual arguments
 passed to a procedure and the dummy arguments as declared by that
@@ -11380,18 +11219,20 @@ That is, these bugs can be quite sensitive to data, including
 data representing the placement of other data in memory (that is,
 pointers, such as the placement of stack frames in memory).
 
-Plans call for improving @code{g77} so that it can offer the
+@code{g77} now offers the
 ability to catch and report some of these problems at compile, link, or
 run time, such as by generating code to detect references to
-beyond the bounds of an array, or checking for agreement between
-calling and called procedures.
+beyond the bounds of most arrays (except assumed-size arrays),
+and checking for agreement between calling and called procedures.
+Future improvements are likely to be made in the procedure-mismatch area,
+at least.
 
 In the meantime, finding and fixing the programming
 bugs that lead to these behaviors is, ultimately, the user's
 responsibility, as difficult as that task can sometimes be.
 
-@cindex ``infinite spaces'' printed
-@cindex spaces, endless printing of
+@cindex infinite spaces printed
+@cindex space, endless printing of
 @cindex libc, non-ANSI or non-default
 @cindex C library
 @cindex linking against non-standard library
@@ -11478,7 +11319,7 @@ used by @code{g77}, handles only double-precision values.
 Since @samp{0.2} in the program is a single-precision value, it
 is converted to double precision (still in binary notation)
 before being converted back to decimal.
-The conversion to binary appends _binary_ zero digits to the
+The conversion to binary appends @emph{binary} zero digits to the
 original value---which, again, is an inexact approximation of
 0.2---resulting in an approximation that is much less exact
 than is connoted by the use of double precision.
@@ -11520,24 +11361,50 @@ instead of converting them to double precision first.
 This would tend to result in output that is more consistent
 with that produced by some other Fortran implementations.
 
-A useful source of information on floating point computation is David
+A useful source of information on floating-point computation is David
 Goldberg, `What Every Computer Scientist Should Know About
 Floating-Point Arithmetic', Computing Surveys, 23, March 1991, pp.@:
-5--48.  At the time of writing this is available online under
-@uref{http://docs.sun.com} and there is a supplemented version at
-@uref{http://www.validgh.com/}.  Information related to the IEEE 754
-floating point standard by a leading light can be found at
-@uref{http://http.cs.berkeley.edu/%7Ewkahan/ieee754status }; see also
-slides from the short course referenced from
+5-48.
+An online version is available at
+@uref{http://docs.sun.com/},
+and there is a supplemented version, in PostScript form, at
+@uref{http://www.validgh.com/goldberg/paper.ps}.
+
+Information related to the IEEE 754
+floating-point standard by a leading light can be found at
+@uref{http://http.cs.berkeley.edu/%7Ewkahan/ieee754status/};
+see also slides from the short course referenced from
 @uref{http://http.cs.berkeley.edu/%7Efateman/}.
-@uref{http://www.suburbia.net/%7Ebillm/floating-point/} has a brief
-guide to IEEE 754, a somewhat x86 GNU/Linux-specific FAQ and library
-code for GNU/Linux x86 systems.
+@uref{http://www.linuxsupportline.com/%7Ebillm/} has a brief
+guide to IEEE 754, a somewhat x86-GNU/Linux-specific FAQ,
+and library code for GNU/Linux x86 systems.
+
+The supplement to the PostScript-formatted Goldberg document,
+referenced above, is available in HTML format.
+See `Differences Among IEEE 754 Implementations' by Doug Priest,
+available online at
+@uref{http://www.validgh.com/goldberg/addendum.html}.
+This document explores some of the issues surrounding computing
+of extended (80-bit) results on processors such as the x86,
+especially when those results are arbitrarily truncated
+to 32-bit or 64-bit values by the compiler
+as ``spills''.
+
+@cindex spills of floating-point results
+@cindex 80-bit spills
+@cindex truncation, of floating-point values
+(@emph{Note:} @code{g77} specifically, and @code{gcc} generally,
+does arbitrarily truncate 80-bit results during spills
+as of this writing.
+It is not yet clear whether a future version of
+the GNU compiler suite will offer 80-bit spills
+as an option, or perhaps even as the default behavior.)
+
 @c xref would be different between editions:
 The GNU C library provides routines for controlling the FPU, and other
 documentation about this.
 
-@xref{Floating point precision}, regarding IEEE 754 conformance.
+@xref{Floating-point precision}, regarding IEEE 754 conformance.
 
 @include bugs.texi
 
@@ -11553,6 +11420,7 @@ GNU Fortran language:
 * Better Source Model::
 * Fortran 90 Support::
 * Intrinsics in PARAMETER Statements::
+* Arbitrary Concatenation::
 * SELECT CASE on CHARACTER Type::
 * RECURSIVE Keyword::
 * Popular Non-standard Types::
@@ -11560,6 +11428,7 @@ GNU Fortran language:
 * Array Bounds Expressions::
 * POINTER Statements::
 * Sensible Non-standard Constructs::
+* READONLY Keyword::
 * FLUSH Statement::
 * Expressions in FORMAT Statements::
 * Explicit Assembler Code::
@@ -11571,9 +11440,11 @@ GNU Fortran dialects:
 * STRUCTURE UNION RECORD MAP::
 * OPEN CLOSE and INQUIRE Keywords::
 * ENCODE and DECODE::
+* AUTOMATIC Statement::
 * Suppressing Space Padding::
 * Fortran Preprocessor::
 * Bit Operations on Floating-point Data::
+* Really Ugly Character Assignments::
 
 New facilities:
 * POSIX Standard::
@@ -11582,8 +11453,10 @@ New facilities:
 * Large Automatic Arrays::
 * Support for Threads::
 * Increasing Precision/Range::
+* Enabling Debug Lines::
 
 Better diagnostics:
+* Better Warnings::
 * Gracefully Handle Sensible Bad Code::
 * Non-standard Conversions::
 * Non-standard Intrinsics::
@@ -11599,8 +11472,9 @@ Better diagnostics:
 
 Run-time facilities:
 * Uninitialized Variables at Run Time::
-* Bounds Checking at Run Time::
 * Portable Unformatted Files::
+* Better List-directed I/O::
+* Default to Console I/O::
 
 Debugging:
 * Labels Visible to Debugger::
@@ -11644,11 +11518,11 @@ but one of the most frequent bugs encountered by new users is
 accidentally writing fixed-form source code into and beyond
 column 73.
 So, maybe the users of old code would be able to more easily handle
-having to specify, say, a @code{-Wno-col73to80} option.
+having to specify, say, a @samp{-Wno-col73to80} option.
 
 @node Fortran 90 Support
 @subsection Fortran 90 Support
-@cindex Fortran 90 support
+@cindex Fortran 90, support
 @cindex support, Fortran 90
 
 @code{g77} does not support many of the features that
@@ -11692,6 +11566,22 @@ But, if the @code{gcc} back end is enhanced to provide
 such a facility, @code{g77} will likely use that facility
 in implementing this feature soon afterwards.
 
+@node Arbitrary Concatenation
+@subsection Arbitrary Concatenation
+@cindex concatenation
+@cindex CHARACTER*(*)
+@cindex run-time, dynamic allocation
+
+@code{g77} doesn't support arbitrary operands for concatenation
+in contexts where run-time allocation is required.
+For example:
+
+@smallexample
+SUBROUTINE X(A)
+CHARACTER*(*) A
+CALL FOO(A // 'suffix')
+@end smallexample
+
 @node SELECT CASE on CHARACTER Type
 @subsection @code{SELECT CASE} on @code{CHARACTER} Type
 
@@ -11716,6 +11606,7 @@ but the result is not pretty.
 @node Increasing Precision/Range
 @subsection Increasing Precision/Range
 @cindex -r8
+@cindex -qrealsize=8
 @cindex -i8
 @cindex f2c
 @cindex increasing precision
@@ -11725,7 +11616,8 @@ but the result is not pretty.
 @cindex Toolpack
 @cindex Netlib
 
-Some compilers, such as @code{f2c}, have an option (@samp{-r8} or
+Some compilers, such as @code{f2c}, have an option (@samp{-r8},
+@samp{-qrealsize=8} or
 similar) that provides automatic treatment of @code{REAL}
 entities such that they have twice the storage size, and
 a corresponding increase in the range and precision, of what
@@ -11758,8 +11650,10 @@ alleviate this problem).
 
 @node Popular Non-standard Types
 @subsection Popular Non-standard Types
-@cindex INTEGER*2 support
-@cindex LOGICAL*1 support
+@cindex @code{INTEGER*2} support
+@cindex types, @code{INTEGER*2}
+@cindex @code{LOGICAL*1} support
+@cindex types, @code{LOGICAL*1}
 
 @code{g77} doesn't fully support @code{INTEGER*2}, @code{LOGICAL*1},
 and similar.
@@ -11771,7 +11665,10 @@ for them.
 @node Full Support for Compiler Types
 @subsection Full Support for Compiler Types
 
-@cindex REAL*16 support
+@cindex @code{REAL*16} support
+@cindex types, @code{REAL*16}
+@cindex @code{INTEGER*8} support
+@cindex types, @code{INTEGER*8}
 @code{g77} doesn't support @code{INTEGER}, @code{REAL}, and @code{COMPLEX} equivalents
 for @emph{all} applicable back-end-supported types (@code{char}, @code{short int},
 @code{int}, @code{long int}, @code{long long int}, and @code{long double}).
@@ -11787,8 +11684,8 @@ This is scheduled for version 0.6.
 @cindex array elements, in adjustable array bounds
 @cindex function references, in adjustable array bounds
 @cindex array bounds, adjustable
-@cindex DIMENSION statement
-@cindex statements, DIMENSION
+@cindex @code{DIMENSION} statement
+@cindex statements, @code{DIMENSION}
 
 @code{g77} doesn't support more general expressions to dimension
 arrays, such as array element references, function
@@ -11880,6 +11777,34 @@ specification of an attribute), please submit a
 bug report with an explanation, so we can consider
 fixing @code{g77} just for cases like yours.
 
+@node READONLY Keyword
+@subsection @code{READONLY} Keyword
+@cindex READONLY
+
+Support for @code{READONLY}, in @code{OPEN} statements,
+requires @code{libg2c} support,
+to make sure that @samp{CLOSE(@dots{},STATUS='DELETE')}
+does not delete a file opened on a unit
+with the @code{READONLY} keyword,
+and perhaps to trigger a fatal diagnostic
+if a @code{WRITE} or @code{PRINT}
+to such a unit is attempted.
+
+@emph{Note:} It is not sufficient for @code{g77} and @code{libg2c}
+(its version of @code{libf2c})
+to assume that @code{READONLY} does not need some kind of explicit support
+at run time,
+due to UNIX systems not (generally) needing it.
+@code{g77} is not just a UNIX-based compiler!
+
+Further, mounting of non-UNIX filesystems on UNIX systems
+(such as via NFS)
+might require proper @code{READONLY} support.
+
+@cindex SHARED
+(Similar issues might be involved with supporting the @code{SHARED}
+keyword.)
+
 @node FLUSH Statement
 @subsection @code{FLUSH} Statement
 
@@ -12022,11 +11947,11 @@ require much more work on @code{libg2c}.
 
 @cindex FORM='PRINT'
 @cindex ANS carriage control
-@cindex carraige control
+@cindex carriage control
 @pindex asa
 @pindex fpr
 @code{g77} doesn't support @code{FORM='PRINT'} or an equivalent to
-translate the traditional `carraige control' characters in column 1 of
+translate the traditional `carriage control' characters in column 1 of
 output to use backspaces, carriage returns and the like.  However
 programs exist to translate them in output files (or standard output).
 These are typically called either @code{fpr} or @code{asa}.  You can get
@@ -12036,8 +11961,9 @@ systems which will probably build easily on other systems.
 Alternatively, @code{fpr} is in BSD distributions in various archive
 sites.
 
-I think both programs can either be used in a pipeline.
-
+@c (Can both programs can be used in a pipeline,
+@c with a named input file,
+@c and/or with a named output file???)
 
 @node ENCODE and DECODE
 @subsection @code{ENCODE} and @code{DECODE}
@@ -12096,6 +12022,44 @@ with:
 It is entirely possible that @code{ENCODE} and @code{DECODE} will
 be supported by a future version of @code{g77}.
 
+@node AUTOMATIC Statement
+@subsection @code{AUTOMATIC} Statement
+@cindex @code{AUTOMATIC} statement
+@cindex statements, @code{AUTOMATIC}
+@cindex automatic variables
+@cindex variables, automatic
+
+@code{g77} doesn't support the @code{AUTOMATIC} statement that
+@code{f2c} does.
+
+@code{AUTOMATIC} would identify a variable or array
+as not being @code{SAVE}'d, which is normally the default,
+but which would be especially useful for code that, @emph{generally},
+needed to be compiled with the @samp{-fno-automatic} option.
+
+@code{AUTOMATIC} also would serve as a hint to the compiler that placing
+the variable or array---even a very large array--on the stack is acceptable.
+
+@code{AUTOMATIC} would not, by itself, designate the containing procedure
+as recursive.
+
+@code{AUTOMATIC} should work syntactically like @code{SAVE},
+in that @code{AUTOMATIC} with no variables listed should apply to
+all pertinent variables and arrays
+(which would not include common blocks or their members).
+
+Variables and arrays denoted as @code{AUTOMATIC}
+would not be permitted to be initialized via @code{DATA}
+or other specification of any initial values,
+requiring explicit initialization,
+such as via assignment statements.
+
+@cindex UNSAVE
+@cindex STATIC
+Perhaps @code{UNSAVE} and @code{STATIC},
+as strict semantic opposites to @code{SAVE} and @code{AUTOMATIC},
+should be provided as well.
+
 @node Suppressing Space Padding
 @subsection Suppressing Space Padding of Source Lines
 
@@ -12142,18 +12106,18 @@ files included via the @code{INCLUDE} directive.
 
 @node Bit Operations on Floating-point Data
 @subsection Bit Operations on Floating-point Data
-@cindex AND intrinsic
-@cindex intrinsics, AND
-@cindex OR intrinsic
-@cindex intrinsics, OR
-@cindex SHIFT intrinsic
-@cindex intrinsics, SHIFT
+@cindex @code{And} intrinsic
+@cindex intrinsics, @code{And}
+@cindex @code{Or} intrinsic
+@cindex intrinsics, @code{Or}
+@cindex @code{Shift} intrinsic
+@cindex intrinsics, @code{Shift}
 
 @code{g77} does not allow @code{REAL} and other non-integral types for
-arguments to intrinsics like @code{AND}, @code{OR}, and @code{SHIFT}.
+arguments to intrinsics like @code{And}, @code{Or}, and @code{Shift}.
 
 For example, this program is rejected by @code{g77}, because
-the intrinsic @code{IAND} does not accept @code{REAL} arguments:
+the intrinsic @code{Iand} does not accept @code{REAL} arguments:
 
 @smallexample
 DATA A/7.54/, B/9.112/
@@ -12161,6 +12125,24 @@ PRINT *, IAND(A, B)
 END
 @end smallexample
 
+@node Really Ugly Character Assignments
+@subsection Really Ugly Character Assignments
+
+An option such as @samp{-fugly-char} should be provided
+to allow
+
+@smallexample
+REAL*8 A1
+DATA A1 / '12345678' /
+@end smallexample
+
+and:
+
+@smallexample
+REAL*8 A1
+A1 = 'ABCDEFGH'
+@end smallexample
+
 @node POSIX Standard
 @subsection @code{POSIX} Standard
 
@@ -12168,8 +12150,8 @@ END
 
 @node Floating-point Exception Handling
 @subsection Floating-point Exception Handling
-@cindex floating point exceptions
-@cindex exceptions, floating point
+@cindex floating-point, exceptions
+@cindex exceptions, floating-point
 @cindex FPE handling
 @cindex NaN values
 
@@ -12186,15 +12168,17 @@ Most systems provide some C-callable mechanism to change this; this can
 be invoked at startup using @code{gcc}'s @code{constructor} attribute.
 For example, just compiling and linking the following C code with your
 program will turn on exception trapping for the ``common'' exceptions
-on an x86-based GNU system:
+on a GNU system using glibc 2.2 or newer:
 
 @smallexample
-#include <fpu_control.h>
+#define _GNU_SOURCE 1
+#include <fenv.h>
 static void __attribute__ ((constructor))
 trapfpe ()
 @{
-  __setfpucw (_FPU_DEFAULT &
-              ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
+  /* Enable some exceptions.  At startup all exceptions are masked.  */
+  
+  feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
 @}
 @end smallexample
 
@@ -12202,7 +12186,7 @@ A convenient trick is to compile this something like:
 @smallexample
 gcc -o libtrapfpe.a trapfpe.c
 @end smallexample
-and then use it by adding @code{-trapfpe} to the @code{g77} command line
+and then use it by adding @samp{-trapfpe} to the @code{g77} command line
 when linking.
 
 @node Nonportable Conversions
@@ -12217,7 +12201,7 @@ is type @code{REAL}), that other compilers might
 quietly accept.
 
 Some of these conversions are accepted by @code{g77}
-when the @samp{-fugly} option is specified.
+when the @samp{-fugly-logint} option is specified.
 Perhaps it should accept more or all of them.
 
 @node Large Automatic Arrays
@@ -12241,6 +12225,73 @@ are thread-safe, nor does @code{g77} have support for parallel processing
 processors).
 A package such as PVM might help here.
 
+@node Enabling Debug Lines
+@subsection Enabling Debug Lines
+@cindex debug line
+@cindex comment line, debug
+
+An option such as @samp{-fdebug-lines} should be provided
+to turn fixed-form lines beginning with @samp{D}
+to be treated as if they began with a space,
+instead of as if they began with a @samp{C}
+(as comment lines).
+
+@node Better Warnings
+@subsection Better Warnings
+
+Because of how @code{g77} generates code via the back end,
+it doesn't always provide warnings the user wants.
+Consider:
+
+@smallexample
+PROGRAM X
+PRINT *, A
+END
+@end smallexample
+
+Currently, the above is not flagged as a case of
+using an uninitialized variable,
+because @code{g77} generates a run-time library call that looks,
+to the GBE, like it might actually @emph{modify} @samp{A} at run time.
+(And, in fact, depending on the previous run-time library call,
+it would!)
+
+Fixing this requires one of the following:
+
+@itemize @bullet
+@item
+Switch to new library, @code{libg77}, that provides
+a more ``clean'' interface,
+vis-a-vis input, output, and modified arguments,
+so the GBE can tell what's going on.
+
+This would provide a pretty big performance improvement,
+at least theoretically, and, ultimately, in practice,
+for some types of code.
+
+@item
+Have @code{g77} pass a pointer to a temporary
+containing a copy of @samp{A},
+instead of to @samp{A} itself.
+The GBE would then complain about the copy operation
+involving a potentially uninitialized variable.
+
+This might also provide a performance boost for some code,
+because @samp{A} might then end up living in a register,
+which could help with inner loops.
+
+@item
+Have @code{g77} use a GBE construct similar to @code{ADDR_EXPR}
+but with extra information on the fact that the
+item pointed to won't be modified
+(a la @code{const} in C).
+
+Probably the best solution for now, but not quite trivial
+to implement in the general case.
+Worth considering after @code{g77} 0.6 is considered
+pretty solid.
+@end itemize
+
 @node Gracefully Handle Sensible Bad Code
 @subsection Gracefully Handle Sensible Bad Code
 
@@ -12409,15 +12460,6 @@ some kinds of uninitialized variables at run time.
 Note that use of the options @samp{-O -Wuninitialized} can catch
 many such bugs at compile time.
 
-@node Bounds Checking at Run Time
-@subsection Bounds Checking at Run Time
-
-@code{g77} should offer run-time bounds-checking of array/subscript references
-in a fashion similar to @code{f2c}.
-
-Note that @code{g77} already warns about references to out-of-bounds
-elements of arrays when it detects these at compile time.
-
 @node Portable Unformatted Files
 @subsection Portable Unformatted Files
 
@@ -12448,6 +12490,7 @@ A number giving the length of the record contents;
 @item
 the length of record contents again (for backspace).
 @end enumerate
+
 The record length is of C type
 @code{long}; this means that it is 8 bytes on 64-bit systems such as
 Alpha GNU/Linux and 4 bytes on other systems, such as x86 GNU/Linux.
@@ -12467,7 +12510,7 @@ written.
 Thus for exchanging a sequential or direct access unformatted file
 between big- and little-endian 32-bit systems using IEEE 754 floating
 point it would be sufficient to reverse the bytes in consecutive words
-in the file @emph{iff} only @code{REAL*4}, @code{COMPLEX},
+in the file if, and @emph{only} if, only @code{REAL*4}, @code{COMPLEX},
 @code{INTEGER*4} and/or @code{LOGICAL*4} data have been written to it by
 @code{g77}.
 
@@ -12488,6 +12531,49 @@ only incur overhead when they are read on a system with a different
 format.)  A future @code{g77} runtime library should use such
 techniques.
 
+@node Better List-directed I/O
+@subsection Better List-directed I/O
+
+Values output using list-directed I/O
+(@samp{PRINT *, R, D})
+should be written with a field width, precision, and so on
+appropriate for the type (precision) of each value.
+
+(Currently, no distinction is made between single-precision
+and double-precision values
+by @code{libf2c}.)
+
+It is likely this item will require the @code{libg77} project
+to be undertaken.
+
+In the meantime, use of formatted I/O is recommended.
+While it might be of little consolation,
+@code{g77} does support @samp{FORMAT(F<WIDTH>.4)}, for example,
+as long as @samp{WIDTH} is defined as a named constant
+(via @code{PARAMETER}).
+That at least allows some compile-time specification
+of the precision of a data type,
+perhaps controlled by preprocessing directives.
+
+@node Default to Console I/O
+@subsection Default to Console I/O
+
+The default I/O units,
+specified by @samp{READ @var{fmt}},
+@samp{READ (UNIT=*)},
+@samp{WRITE (UNIT=*)}, and
+@samp{PRINT @var{fmt}},
+should not be units 5 (input) and 6 (output),
+but, rather, unit numbers not normally available
+for use in statements such as @code{OPEN} and @code{CLOSE}.
+
+Changing this would allow a program to connect units 5 and 6
+to files via @code{OPEN},
+but still use @samp{READ (UNIT=*)} and @samp{PRINT}
+to do I/O to the ``console''.
+
+This change probably requires the @code{libg77} project.
+
 @node Labels Visible to Debugger
 @subsection Labels Visible to Debugger
 
@@ -12516,7 +12602,7 @@ way around them for now.
 @cindex external names
 @cindex common blocks
 @cindex name space
-@cindex underscores
+@cindex underscore
 
 The current external-interface design, which includes naming of
 external procedures, COMMON blocks, and the library interface,
@@ -12536,8 +12622,8 @@ with popular existing compilers.
 @cindex block data
 @cindex BLOCK DATA statement
 @cindex statements, BLOCK DATA
-@cindex COMMON statement
-@cindex statements, COMMON
+@cindex @code{COMMON} statement
+@cindex statements, @code{COMMON}
 @cindex naming conflicts
 
 @code{g77} doesn't allow a common block and an external procedure or
@@ -12599,8 +12685,8 @@ we do not make because we think GNU Fortran is better without them.
 @node Backslash in Constants
 @subsection Backslash in Constants
 @cindex backslash
-@cindex f77 support
-@cindex support, f77
+@cindex @code{f77} support
+@cindex support, @code{f77}
 
 In the opinion of many experienced Fortran users,
 @samp{-fno-backslash} should be the default, not @samp{-fbackslash},
@@ -12892,7 +12978,7 @@ could be very helpful.
 @cindex logical expressions, comparing
 
 Use of @code{.EQ.} and @code{.NE.} on @code{LOGICAL} operands
-is not supported, except via @samp{-fugly}, which is not
+is not supported, except via @samp{-fugly-logint}, which is not
 recommended except for legacy code (where the behavior expected
 by the @emph{code} is assumed).
 
@@ -12950,6 +13036,20 @@ that were well-designed in the first place.
 you, without knowing more context, whether the @samp{&} and @samp{-}
 operators are infix (binary) or unary!)
 
+Most dangerous of all is the fact that,
+even assuming consensus on its meaning,
+an expression like @samp{L.AND.M.EQ.N},
+if it is the result of a typographical error,
+doesn't @emph{look} like it has such a typo.
+Even experienced Fortran programmers would not likely notice that
+@samp{L.AND.M.EQV.N} was, in fact, intended.
+
+So, this is a prime example of a circumstance in which
+a quality compiler diagnoses the code,
+instead of leaving it up to someone debugging it
+to know to turn on special compiler options
+that might diagnose it.
+
 @node Order of Side Effects
 @subsection Order of Side Effects
 @cindex side effects, order of evaluation
@@ -13015,7 +13115,7 @@ warnings.
 Each kind has a different purpose:
 
 @itemize @w{}
-@item 
+@item
 @emph{Errors} report problems that make it impossible to compile your
 program.
 GNU Fortran reports errors with the source file name, line
@@ -13100,7 +13200,7 @@ Bug reports are your contribution to the maintenance of GNU Fortran.
 Since the maintainers are very overloaded, we cannot respond to every
 bug report.
 However, if the bug has not been fixed, we are likely to
-send you a patch and ask you to tell us whether it works. 
+send you a patch and ask you to tell us whether it works.
 
 In order for a bug report to serve its purpose, you must include the
 information that makes for fixing the bug.
@@ -13409,24 +13509,32 @@ the bug in the current version of GNU Fortran.
 @cindex preprocessor
 @cindex cpp program
 @cindex programs, cpp
+@pindex cpp
 A complete input file that will reproduce the bug.
-If the bug is in the compiler proper (@file{f771}) and
-you are using the C preprocessor, run your
-source file through the C preprocessor by doing @samp{g77 -E
-@var{sourcefile} > @var{outfile}}, then include the contents of
-@var{outfile} in the bug report.  (When you do this, use the same
-@samp{-I}, @samp{-D} or @samp{-U} options that you used in actual
+
+If your source file(s) require preprocessing
+(for example, their names have suffixes like
+@samp{.F}, @samp{.fpp}, @samp{.FPP}, and @samp{.r}),
+and the bug is in the compiler proper (@file{f771})
+or in a subsequent phase of processing,
+run your source file through the C preprocessor
+by doing @samp{g77 -E @var{sourcefile} > @var{newfile}}.
+Then, include the contents of @var{newfile} in the bug report.
+(When you do this, use the same preprocessor options---such as
+@samp{-I}, @samp{-D}, and @samp{-U}---that you used in actual
 compilation.)
 
 A single statement is not enough of an example.
 In order to compile it,
-it must be embedded in a complete file of compiler input; and the bug
-might depend on the details of how this is done.
+it must be embedded in a complete file of compiler input.
+The bug might depend on the details of how this is done.
 
-Without a real example one can compile, all anyone can do about your bug
-report is wish you luck.  It would be futile to try to guess how to
-provoke the bug.  For example, bugs in register allocation and reloading
-frequently depend on every little detail of the function they happen in.
+Without a real example one can compile,
+all anyone can do about your bug report is wish you luck.
+It would be futile to try to guess how to provoke the bug.
+For example, bugs in register allocation and reloading
+can depend on every little detail of the source and include files
+that trigger them.
 
 @item
 @cindex included files
@@ -13798,13 +13906,13 @@ when compiling most any kind of program.
 which is used during the build of @code{gcc} to
 build a list of all options that are accepted by
 at least one language's compiler.
-This list goes into the @samp{lang_options} array
+This list goes into the @code{documented_lang_options} array
 in @file{gcc/toplev.c}, which uses this array to
 determine whether a particular option should be
 offered to the linked-in front end for processing
-by calling @samp{lang_option_decode}, which, for
+by calling @code{lang_option_decode}, which, for
 @code{g77}, is in @file{@value{path-g77}/com.c} and just
-calls @samp{ffe_decode_option}.
+calls @code{ffe_decode_option}.
 
 If the linked-in front end ``rejects'' a
 particular option passed to it, @file{toplev.c}
@@ -13814,7 +13922,7 @@ language's compiler is willing to accept it.
 This allows commands like @samp{gcc -fno-asm foo.c bar.f}
 to work, even though Fortran compilation does
 not currently support the @samp{-fno-asm} option;
-even though the @code{f771} version of @samp{lang_decode_option}
+even though the @code{f771} version of @code{lang_decode_option}
 rejects @samp{-fno-asm}, @file{toplev.c} doesn't
 produce a diagnostic because some other language (C)
 does accept it.
@@ -13827,7 +13935,7 @@ a warning about this would be helpful if it were
 possible.
 
 Code that processes Fortran options is found in
-@file{@value{path-g77}/top.c}, function @samp{ffe_decode_option}.
+@file{@value{path-g77}/top.c}, function @code{ffe_decode_option}.
 This code needs to check positive and negative forms
 of each option.
 
@@ -13847,9 +13955,9 @@ Accessor macros for Fortran options, used by code
 in the @code{g77} FFE, are defined in @file{@value{path-g77}/top.h}.
 
 @emph{Compiler options} are listed in @file{gcc/toplev.c}
-in the array @samp{f_options}.
-An option not listed in @samp{lang_options} is
-looked up in @samp{f_options} and handled from there.
+in the array @code{f_options}.
+An option not listed in @code{lang_options} is
+looked up in @code{f_options} and handled from there.
 
 The defaults for compiler options are set in the
 global definitions for the corresponding variables,
@@ -13857,11 +13965,25 @@ some of which are in @file{gcc/toplev.c}.
 
 You can set different defaults for @emph{Fortran-oriented}
 or @emph{Fortran-reticent} compiler options by changing
-the way @code{f771} handles the @samp{-fset-g77-defaults}
+the source code of @code{g77} and rebuilding.
+How to do this depends on the version of @code{g77}:
+
+@table @code
+@item G77 0.5.24 (EGCS 1.1)
+@itemx G77 0.5.25 (EGCS 1.2 - which became GCC 2.95)
+Change the @code{lang_init_options} routine in @file{gcc/gcc/f/com.c}.
+
+(Note that these versions of @code{g77}
+perform internal consistency checking automatically
+when the @samp{-fversion} option is specified.)
+
+@item G77 0.5.23
+@itemx G77 0.5.24 (EGCS 1.0)
+Change the way @code{f771} handles the @samp{-fset-g77-defaults}
 option, which is always provided as the first option when
 called by @code{g77} or @code{gcc}.
 
-This code is in @samp{ffe_decode_options} in @file{@value{path-g77}/top.c}.
+This code is in @code{ffe_decode_options} in @file{@value{path-g77}/top.c}.
 Have it change just the variables that you want to default
 to a different setting for Fortran compiles compared to
 compiles of other languages.
@@ -13880,6 +14002,7 @@ It is in @file{@value{path-g77}/lang-specs.h} that @samp{-fset-g77-defaults},
 even when the user has not explicitly specified them.
 Other ``internal'' options such as @samp{-quiet} also
 are passed via this mechanism.
+@end table
 
 @node Projects
 @chapter Projects
@@ -13914,7 +14037,7 @@ them show up only given certain kinds of (popular) input.
 
 @itemize @bullet
 @item
-Improve @samp{malloc} package and its uses to specify more info about
+Improve @code{malloc} package and its uses to specify more info about
 memory pools and, where feasible, use obstacks to implement them.
 
 @item
@@ -13941,11 +14064,11 @@ unimplemented-statement catch-all.
 
 @item
 Throughout @code{g77}, don't pass line/column pairs where
-a simple @samp{ffewhere} type, which points to the error as much as is
-desired by the configuration, will do, and don't pass @samp{ffelexToken} types
-where a simple @samp{ffewhere} type will do.
+a simple @code{ffewhere} type, which points to the error as much as is
+desired by the configuration, will do, and don't pass @code{ffelexToken} types
+where a simple @code{ffewhere} type will do.
 Then, allow new default
-configuration of @samp{ffewhere} such that the source line text is not
+configuration of @code{ffewhere} such that the source line text is not
 preserved, and leave it to things like Emacs' next-error function
 to point to them (now that @samp{next-error} supports column,
 or, perhaps, character-offset, numbers).
@@ -13995,7 +14118,7 @@ that are at all worth inlining.
 @item
 When doing @samp{CHAR_VAR = CHAR_FUNC(@dots{})},
 and it's clear that types line up
-and @samp{CHAR_VAR} is addressable or not a @samp{VAR_DECL},
+and @samp{CHAR_VAR} is addressable or not a @code{VAR_DECL},
 make @samp{CHAR_VAR}, not a
 temporary, be the receiver for @samp{CHAR_FUNC}.
 (This is now done for @code{COMPLEX} variables.)
@@ -14043,7 +14166,7 @@ external names for @code{COMPLEX} functions in some cases once @code{g77} uses
 @code{gcc} rather than @code{f2c} calling conventions.)
 
 @item
-Do something useful with @samp{doiter} references where possible.
+Do something useful with @code{doiter} references where possible.
 For example, @samp{CALL FOO(I)} cannot modify @samp{I} if within
 a @code{DO} loop that uses @samp{I} as the
 iteration variable, and the back end might find that info useful
@@ -14118,12 +14241,6 @@ sprinkled throughout.
 It is not worth repeating them here.
 
 @item
-@cindex concatenation
-@cindex CHARACTER*(*)
-Support arbitrary operands for concatenation, even in contexts where
-run-time allocation is required.
-
-@item
 Consider adding a @code{NUMERIC} type to designate typeless numeric constants,
 named and unnamed.
 The idea is to provide a forward-looking, effective
@@ -14199,7 +14316,7 @@ provides it via its configuration.
 
 @itemize @bullet
 @item
-Switch to using @samp{REAL_VALUE_TYPE} to represent floating-point constants
+Switch to using @code{REAL_VALUE_TYPE} to represent floating-point constants
 exclusively so the target float format need not be required.
 This
 means changing the way @code{g77} handles initialization of aggregate areas
@@ -14228,6 +14345,9 @@ Better info on how @code{g77} works and how to port it is needed.
 Much of this should be done only after the redesign planned for
 0.6 is complete.
 
+@xref{Front End}, which contains some information
+on @code{g77} internals.
+
 @node Internals Improvements
 @section Internals Improvements
 
@@ -14252,13 +14372,13 @@ Come up with better naming conventions for @samp{-D} to establish requirements
 to achieve desired implementation dialect via @file{proj.h}.
 
 @item
-Clean up used tokens and @samp{ffewhere}s in @samp{ffeglobal_terminate_1}.
+Clean up used tokens and @code{ffewhere}s in @code{ffeglobal_terminate_1}.
 
 @item
-Replace @file{sta.c} @samp{outpooldisp} mechanism with @samp{malloc_pool_use}.
+Replace @file{sta.c} @code{outpooldisp} mechanism with @code{malloc_pool_use}.
 
 @item
-Check for @samp{opANY} in more places in @file{com.c}, @file{std.c},
+Check for @code{opANY} in more places in @file{com.c}, @file{std.c},
 and @file{ste.c}, and get rid of the @samp{opCONVERT(opANY)} kludge
 (after determining if there is indeed no real need for it).
 
@@ -14300,22 +14420,22 @@ to the official standard, or put documentation of the rules as used
 in the code@dots{}uh@dots{}in the code.
 
 @item
-Some @samp{ffebld_new} calls (those outside of @file{ffeexpr.c} or
-inside but invoked via paths not involving @samp{ffeexpr_lhs} or
-@samp{ffeexpr_rhs}) might be creating things
+Some @code{ffebld_new} calls (those outside of @file{ffeexpr.c} or
+inside but invoked via paths not involving @code{ffeexpr_lhs} or
+@code{ffeexpr_rhs}) might be creating things
 in improper pools, leading to such things staying around too long or
 (doubtful, but possible and dangerous) not long enough.
 
 @item
-Some @samp{ffebld_list_new} (or whatever) calls might not be matched by
-@samp{ffebld_list_bottom} (or whatever) calls, which might someday matter.
+Some @code{ffebld_list_new} (or whatever) calls might not be matched by
+@code{ffebld_list_bottom} (or whatever) calls, which might someday matter.
 (It definitely is not a problem just yet.)
 
 @item
 Probably not doing clean things when we fail to @code{EQUIVALENCE} something
 due to alignment/mismatch or other problems---they end up without
-@samp{ffestorag} objects, so maybe the backend (and other parts of the front
-end) can notice that and handle like an @samp{opANY} (do what it wants, just
+@code{ffestorag} objects, so maybe the backend (and other parts of the front
+end) can notice that and handle like an @code{opANY} (do what it wants, just
 don't complain or crash).
 Most of this seems to have been addressed
 by now, but a code review wouldn't hurt.
@@ -14333,7 +14453,7 @@ clutter.
 @item
 When @code{FUNCTION} and @code{ENTRY} point types disagree (@code{CHARACTER}
 lengths, type classes, and so on),
-@samp{ANY}-ize the offending @code{ENTRY} point and any @emph{new} dummies
+@code{ANY}-ize the offending @code{ENTRY} point and any @emph{new} dummies
 it specifies.
 
 @item
@@ -14354,6 +14474,9 @@ END
 is processed in the context of executable, not specification,
 statements.)
 @end itemize
+
+@include ffe.texi
+
 @end ifset
 
 @ifset USING
@@ -14399,7 +14522,8 @@ as the above is just a sample, no such section exists.
 * INTGLOB::     Intrinsic also used as name of global.
 * LEX::         Various lexer messages
 * GLOBALS::     Disagreements about globals.
-* LINKFAIL::    When linking @samp{f771} fails.
+* LINKFAIL::    When linking @code{f771} fails.
+* Y2KBAD::      Use of non-Y2K-compliant intrinsic.
 @end menu
 
 @node CMPAMBIG
@@ -14517,8 +14641,8 @@ expects the Fortran 90 interpretation, you can:
 @itemize @bullet
 @item
 Change it to @samp{DBLE(@var{expr})} (if @var{intrinsic} is
-@samp{REAL}) or @samp{DIMAG(@var{expr})} (if @var{intrinsic}
-is @samp{AIMAG})
+@code{REAL}) or @samp{DIMAG(@var{expr})} (if @var{intrinsic}
+is @code{AIMAG})
 if it expected the Fortran 90 interpretation.
 
 This assumes @var{expr} is @code{COMPLEX(KIND=2)}---if it is
@@ -14571,7 +14695,6 @@ The following sample program might help:
       PROGRAM JCB003
 C
 C Written by James Craig Burley 1997-02-23.
-C Contact via Internet email: burley@@gnu.org
 C
 C Determine how compilers handle non-standard REAL
 C and AIMAG on DOUBLE COMPLEX operands.
@@ -14747,6 +14870,8 @@ was not specified on the command line to compile it.
 Free form is a newer form for Fortran code.
 The older, classic form is called fixed form.
 
+@cindex continuation character
+@cindex characters, continuation
 Fixed-form code is visually fairly distinctive, because
 numerical labels and comments are all that appear in
 the first five columns of a line, the sixth column is
@@ -14755,8 +14880,15 @@ and actual statements start at or beyond column 7.
 Spaces generally are not significant, so if you
 see statements such as @samp{REALX,Y} and @samp{DO10I=1,100},
 you are looking at fixed-form code.
+@cindex *
+@cindex asterisk
 Comment lines are indicated by the letter @samp{C} or the symbol
 @samp{*} in column 1.
+@cindex trailing comment
+@cindex comment
+@cindex characters, comment
+@cindex !
+@cindex exclamation point
 (Some code uses @samp{!} or @samp{/*} to begin in-line comments,
 which many compilers support.)
 
@@ -14798,13 +14930,13 @@ C On XYZZY systems, remove "C" on next line:
      CALL XYZZY_RESET
 @end smallexample
 
-However, that leaves the first @samp{C} in the @samp{CALL}
+However, that leaves the first @samp{C} in the @code{CALL}
 statement in column 6, making it a comment line, which is
 not really what the author intended, and which is likely
 to result in one of the above-listed diagnostics.
 
 @emph{Replacing} the @samp{C} in column 1 with a space
-is the proper change to make, to ensure the @samp{CALL}
+is the proper change to make, to ensure the @code{CALL}
 keyword starts in or after column 7.
 
 Another common mistake like this is to forget that fixed-form
@@ -14822,15 +14954,24 @@ A source file containing lines beginning with @code{#define},
 @code{#include}, @code{#if}, and so on is likely one that
 requires preprocessing.
 
-If the file's suffix is @samp{.f} or @samp{.for}, the file
-will normally be compiled @emph{without} preprocessing by @code{g77}.
+If the file's suffix is @samp{.f}, @samp{.for}, or @samp{.FOR},
+the file normally will be compiled @emph{without} preprocessing
+by @code{g77}.
 
-Change the file's suffix from @samp{.f} to @samp{.F} (or, on
-systems with case-insensitive file names, to @samp{.fpp}) or
-from @samp{.for} to @samp{.fpp}.
+Change the file's suffix from @samp{.f} to @samp{.F}
+(or, on systems with case-insensitive file names,
+to @samp{.fpp} or @samp{.FPP}),
+from @samp{.for} to @samp{.fpp},
+or from @samp{.FOR} to @samp{.FPP}.
 @code{g77} compiles files with such names @emph{with}
 preprocessing.
 
+@pindex cpp
+@cindex preprocessor
+@cindex cpp program
+@cindex programs, cpp
+@cindex @samp{-x f77-cpp-input} option
+@cindex options, @samp{-x f77-cpp-input}
 Or, learn how to use @code{gcc}'s @samp{-x} option to specify
 the language @samp{f77-cpp-input} for Fortran files that
 require preprocessing.
@@ -14865,29 +15006,54 @@ Argument #@var{n} of @var{name} is @dots{}
 @end smallexample
 
 These messages all identify disagreements about the
-global procedure named @var{name} among different program
-units (usually including @var{name} itself).
-
-These disagreements, if not diagnosed, could result in a
-compiler crash if the compiler attempted to inline a reference
-to @var{name} within a calling program unit that disagreed
-with the @var{name} program unit regarding whether the
-procedure is a subroutine or function, the type of the
-return value of the procedure (if it is a function), the
-number of arguments the procedure accepts, or the type
-of each argument.
-
-Such disagreements @emph{should} be fixed in the Fortran
-code itself.
-However, if that is not immediately practical, and the code
-has been working for some time, it is possible it will work
-when compiled by @code{g77} with the @samp{-fno-globals} option.
-
-The @samp{-fno-globals} option disables these diagnostics, and
-also disables all inlining of references to global procedures
-to avoid compiler crashes.
-The diagnostics are actually produced, but as warnings, unless
-the @samp{-Wno-globals} option also is specified.
+global procedure named @var{name} among different program units
+(usually including @var{name} itself).
+
+Whether a particular disagreement is reported
+as a warning or an error
+can depend on the relative order
+of the disagreeing portions of the source file.
+
+Disagreements between a procedure invocation
+and the @emph{subsequent} procedure itself
+are, usually, diagnosed as errors
+when the procedure itself @emph{precedes} the invocation.
+Other disagreements are diagnosed via warnings.
+
+@cindex forward references
+@cindex in-line code
+@cindex compilation, in-line
+This distinction, between warnings and errors,
+is due primarily to the present tendency of the @code{gcc} back end
+to inline only those procedure invocations that are
+@emph{preceded} by the corresponding procedure definitions.
+If the @code{gcc} back end is changed
+to inline ``forward references'',
+in which invocations precede definitions,
+the @code{g77} front end will be changed
+to treat both orderings as errors, accordingly.
+
+The sorts of disagreements that are diagnosed by @code{g77} include
+whether a procedure is a subroutine or function;
+if it is a function, the type of the return value of the procedure;
+the number of arguments the procedure accepts;
+and the type of each argument.
+
+Disagreements regarding global names among program units
+in a Fortran program @emph{should} be fixed in the code itself.
+However, if that is not immediately practical,
+and the code has been working for some time,
+it is possible it will work
+when compiled with the @samp{-fno-globals} option.
+
+The @samp{-fno-globals} option
+causes these diagnostics to all be warnings
+and disables all inlining of references to global procedures
+(to avoid subsequent compiler crashes and bad-code generation).
+Use of the @samp{-Wno-globals} option as well as @samp{-fno-globals}
+suppresses all of these diagnostics.
+(@samp{-Wno-globals} by itself disables only the warnings,
+not the errors.)
 
 After using @samp{-fno-globals} to work around these problems,
 it is wise to stop using that option and address them by fixing
@@ -14914,7 +15080,7 @@ the problem by editing $@{srcdir@}/proj.c, and what else to do.
 this problem,
 which occurs only in releases of @code{g77}
 based on @code{gcc}.
-(It does not occur in @code{egcs}.)
+(It did not occur in @code{egcs}.)
 
 On AIX 4.1, @code{g77} might not build with the native (non-GNU) tools
 due to a linker bug in coping with the @samp{-bbigtoc} option which
@@ -14929,6 +15095,24 @@ might solve this problem, e.g.@: by adding
 BOOT_CFLAGS='-mminimal-toc -O2 -g'
 @end smallexample
 to the @code{make bootstrap} command line.
+
+@node Y2KBAD
+@section @code{Y2KBAD}
+@cindex Y2K compliance
+@cindex Year 2000 compliance
+
+@noindent
+@smallexample
+Intrinsic `@var{name}', invoked at (^), known to be non-Y2K-compliant@dots{}
+@end smallexample
+
+This diagnostic indicates that
+the specific intrinsic invoked by the name @var{name}
+is known to have an interface
+that is not Year-2000 (Y2K) compliant.
+
+@xref{Year 2000 (Y2K) Problems}.
+
 @end ifset
 
 @node Index