OSDN Git Service

* COPYING: Update to current
[pf3gnuchains/gcc-fork.git] / gcc / f / g77.texi
index 6033fb4..a94f06a 100644 (file)
@@ -1,18 +1,16 @@
 \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-update 2000-11-27
+@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 To produce the full manual, use the "g77.info" setfilename, and
 @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
@@ -41,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
@@ -91,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 1997-09-09
+@center Last updated @value{last-update}
 @sp 1
-@c The version number appears some more times in this file.
-
-@center for version 0.5.21
+@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 0.5.21*
+For the @value{which-g77} Version*
 @sp 1
 Published by the Free Software Foundation @*
 59 Temple Place - Suite 330@*
@@ -144,34 +187,50 @@ original English.
 
 @ifinfo
 
-@dircategory Fortran Programming
-@direntry
-* g77: (g77).               The GNU Fortran compilation system.
-@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 0.5.21.
+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 0.5.21.
+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 0.5.21.
+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.
@@ -202,6 +261,7 @@ bugs.  It corresponds to GNU Fortran version 0.5.21.
 @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}.
@@ -548,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,
@@ -571,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
 
@@ -639,7 +699,7 @@ Jonathan Corbet
 @item
 Dr.@: Mark Fernyhough
 @item
-Takafumi Hayashi (The University of AIzu)---@email{takafumi@@u-aizu.ac.jp}
+Takafumi Hayashi (The University of Aizu)---@email{takafumi@@u-aizu.ac.jp}
 @item
 Kate Hedstrom
 @item
@@ -691,6 +751,11 @@ 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, 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}.)
+
 @item
 John Carr (@email{jfc@@mit.edu}) wrote the alias analysis improvements.
 
@@ -762,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.
 
@@ -788,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
@@ -810,13 +877,13 @@ Work is needed on documentation, testing, porting
 to various machines, and in some cases, coding (although major
 changes planned for version 0.6 make it difficult to add manpower to this
 area).
-Email @email{egcs@@cygnus.com} to volunteer for this work.
+Email @email{@value{email-general}} to volunteer for this work.
 
 @xref{Funding,,Funding Free Software}, for more information.
 
 @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
@@ -850,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
@@ -944,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
@@ -954,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
@@ -1014,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
@@ -1029,27 +1096,39 @@ 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.
 
+@cindex libg2c library
 @cindex libf2c library
 @cindex libraries, libf2c
-@cindex run-time library
+@cindex libraries, libg2c
+@cindex run-time, library
 @item
-The @code{libf2c} run-time library.
+The @code{libg2c} run-time library.
 This library contains the machine code needed to support
 capabilities of the Fortran language that are not directly
 provided by the machine code generated by the @code{g77}
 compilation phase.
 
-@cindex f771 program
-@cindex programs, f771
+@code{libg2c} is just the unique name @code{g77} gives
+to its version of @code{libf2c} to distinguish it from
+any copy of @code{libf2c} installed from @code{f2c}
+(or versions of @code{g77} that built @code{libf2c} under
+that same name)
+on the system.
+
+The maintainer of @code{libf2c} currently is
+@email{dmg@@bell-labs.com}.
+
+@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
@@ -1069,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
@@ -1090,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
@@ -1107,14 +1186,14 @@ 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},
 because @code{g77}
 knows how to specify the libraries needed to link with Fortran programs
-(@code{libf2c} and @code{lm}).
+(@code{libg2c} and @code{lm}).
 @code{g77} can still compile and link programs and
 source files written in other languages, just like @code{gcc}.
 
@@ -1127,7 +1206,7 @@ produces much more output than @samp{gcc -v} currently does.
 (If it produces an error message near the end of the output---diagnostics
 from the linker, usually @code{ld}---you might
 have an out-of-date @code{libf2c} that improperly handles
-complex arithmetic.)
+complex arithmetic.)
 In the output of this command, the line beginning @samp{GNU Fortran Front
 End} identifies the version number of GNU Fortran; immediately
 preceding that line is a line identifying the version of @code{gcc}
@@ -1150,14 +1229,15 @@ functions this way.
 Instead, operations like trigonometric
 functions are compiled by the @code{f771} compiler
 (invoked by @code{g77} when compiling Fortran code) into machine
-code that, when run, calls on functions in @code{libf2c}, so
-@code{libf2c} must be linked with almost every useful program
+code that, when run, calls on functions in @code{libg2c}, so
+@code{libg2c} must be linked with almost every useful program
 having any component compiled by GNU Fortran.
 (As mentioned above, the @code{g77} command takes
 care of all this for you.)
 
 The @code{f771} program represents most of what is unique to GNU Fortran.
-While much of the @code{libf2c} component is really part of @code{f2c},
+While much of the @code{libg2c} component comes from
+the @code{libf2c} component of @code{f2c},
 a free Fortran-to-C converter distributed by Bellcore (AT&T),
 plus @code{libU77}, provided by Dave Love,
 and the @code{g77} command is just a small front-end to @code{gcc},
@@ -1166,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,
@@ -1179,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
@@ -1210,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.
 
@@ -1227,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
@@ -1237,17 +1317,11 @@ 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
-@cindex -@w{}-driver option
-@cindex g77 options, -@w{}-driver
-@cindex options, -@w{}-driver
 Use the @samp{-v} option with @code{g77}
 to see what is going on---the first line of output is the invocation
 of the @code{gcc} command.
-Use @samp{--driver=true} to disable actual invocation
-of @code{gcc} (this works because @samp{true} is the name of a
-UNIX command that simply returns success status).
 
 @node Invoking G77
 @chapter GNU Fortran Command Options
@@ -1262,25 +1336,16 @@ for information
 on the non-Fortran-specific aspects of the @code{gcc} command (and,
 therefore, the @code{g77} command).
 
-The @code{g77} command supports one option not supported by
-the @code{gcc} command:
-
-@table @code
-@cindex -@w{}-driver option
-@cindex g77 options, -@w{}-driver
-@cindex options, -@w{}-driver
-@item --driver=@var{command}
-Specifies that @var{command}, rather than @code{gcc}, is to
-be invoked by @code{g77} to do its job.
-For example, within the @code{gcc} build directory after
-building GNU Fortran (but without having to install it),
-@kbd{./g77 --driver=./xgcc foo.f -B./}.
-@end table
-
 @cindex options, negative forms
 @cindex negative forms of options
-All other options are supported both by @code{g77} and by @code{gcc} as
-modified (and reinstalled) by the @code{g77} distribution.
+All @code{gcc} and @code{g77} options
+are accepted both by @code{g77} and by @code{gcc}
+(as well as any other drivers built at the same time,
+such as @code{g++}),
+since adding @code{g77} to the @code{gcc} distribution
+enables acceptance of @code{g77}-specific options
+by all of the relevant drivers.
+
 In some cases, options have positive and negative forms;
 the negative form of @samp{-ffoo} would be @samp{-fno-foo}.
 This manual documents only one of these two forms, whichever
@@ -1317,13 +1382,13 @@ by type.  Explanations are in the following sections.
 @item Overall Options
 @xref{Overall Options,,Options Controlling the Kind of Output}.
 @smallexample
---driver  -fversion  -fset-g77-defaults  -fno-silent
+-fversion  -fset-g77-defaults  -fno-silent
 @end smallexample
 
 @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
@@ -1402,10 +1467,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
 
@@ -1453,13 +1519,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
@@ -1468,8 +1542,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).
 
@@ -1478,12 +1554,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}
@@ -1528,7 +1609,7 @@ line being effectively commented out---unfortunate if that
 line is a non-comment line of important code!
 
 @emph{Note:} The @samp{-traditional} and @samp{-undef} flags are supplied
-to @code{cpp} by default, to avoid unpleasant surprises.
+to @code{cpp} by default, to help avoid unpleasant surprises.
 @xref{Preprocessor Options,,Options Controlling the Preprocessor,
 gcc,Using and Porting GNU CC}.
 This means that ANSI C preprocessor features (such as the @samp{#}
@@ -1539,37 +1620,53 @@ Thus, if you want to do system-specific
 tests, use, for example, @samp{#ifdef __linux__} rather than @samp{#ifdef linux}.
 Use the @samp{-v} option to see exactly how the preprocessor is invoked.
 
+@cindex /*
+Unfortunately, the @samp{-traditional} flag will not avoid an error from
+anything that @code{cpp} sees as an unterminated C comment, such as:
+@smallexample
+C Some Fortran compilers accept /* as starting
+C an inline comment.
+@end smallexample
+@xref{Trailing Comment}.
+
 The following options that affect overall processing are recognized
 by the @code{g77} and @code{gcc} commands in a GNU Fortran installation:
 
 @table @code
-@item --driver=@var{command}
-This works when invoking only the @code{g77} command, not
-when invoking the @code{gcc} command.
-@xref{Invoking G77,,GNU Fortran Command Options}, for
-information on this option.
-
 @cindex -fversion option
 @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 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.
 
-As of version 0.5.20, this is equivalent to @samp{-fmove-all-movables
--freduce-all-givs -frerun-loop-opt -fargument-noalias-global}.
-
 This option is supplied automatically when compiling Fortran code
 via the @code{g77} or @code{gcc} command.
 The description of this option is provided so that users seeing
@@ -1591,10 +1688,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
@@ -1624,6 +1721,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:
 
@@ -1638,14 +1739,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
@@ -1681,10 +1774,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}.
@@ -1711,7 +1804,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
@@ -1722,10 +1815,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
@@ -1733,7 +1826,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.
 
@@ -1749,8 +1842,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)
@@ -1890,17 +1983,19 @@ 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}.)
+(For example, @samp{DO 10 I = 1, 0}.)
 Such a loop is called a @dfn{zero-trip loop}.
 
 Prior to ANSI FORTRAN 77, many compilers implemented @code{DO} loops
@@ -1915,7 +2010,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.
@@ -2064,8 +2159,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}.
@@ -2082,8 +2177,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}.
@@ -2100,7 +2195,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.
@@ -2119,8 +2214,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}.
@@ -2183,9 +2278,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.
@@ -2206,8 +2302,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
 
@@ -2381,12 +2477,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
@@ -2563,15 +2659,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
@@ -2587,6 +2687,9 @@ gcc,Using and Porting GNU CC}, for more information on debugging options.
 Most Fortran users will want to use no optimization when
 developing and testing programs, and use @samp{-O} or @samp{-O2} when
 compiling programs for late-cycle testing and for production use.
+However, note that certain diagnostics---such as for uninitialized
+variables---depend on the flow analysis done by @samp{-O}, i.e.@: you
+must use @samp{-O} or @samp{-O2} to get such diagnostics.
 
 The following flags have particular applicability when
 compiling Fortran programs:
@@ -2595,7 +2698,7 @@ compiling Fortran programs:
 @cindex -malign-double option
 @cindex options, -malign-double
 @item -malign-double
-(Intel 386 architecture only.)
+(Intel x86 architecture only.)
 
 Noticeably improves performance of @code{g77} programs making
 heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data
@@ -2615,9 +2718,7 @@ and data sets.
 this option does not apply, generally speaking, to Fortran
 code compiled by @code{g77}.
 
-@emph{Also note:} @code{g77} fixes a @code{gcc} backend bug to allow
-@samp{-malign-double} to work generally, not just with
-statically-allocated 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}.
@@ -2625,10 +2726,30 @@ 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
-Might help a Fortran program that depends on exact IEEE conformance
-on some machines, but might slow down a program that doesn't.
+@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
+IEEE 854 `extended precision'---as it typically is on x86 and m68k GNU
+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:
+@smallexample
+a = b + c
+d = a * e
+@end smallexample
+but not in code like:
+@smallexample
+      d = (b + c) * e
+@end smallexample
+
+For another, potentially better, way of controlling the precision,
+see @ref{Floating-point precision}.
 
 @cindex -fforce-mem option
 @cindex options, -fforce-mem
@@ -2637,14 +2758,15 @@ on some machines, but might slow down a program that doesn't.
 @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.
 Might reduce the size of a program unit---which might be at
 expense of some speed (though it should compile faster).
@@ -2653,8 +2775,8 @@ 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.
 
@@ -2662,7 +2784,8 @@ on IEEE behavior for floating-point to run faster, or die trying.
 @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.
 
 @cindex -frerun-cse-after-loop option
@@ -2670,6 +2793,7 @@ Might make some loops run faster.
 @item -frerun-cse-after-loop
 @cindex -fexpensive-optimizations option
 @cindex options, -fexpensive-optimizations
+@c DL: This is -O2?
 @item -fexpensive-optimizations
 @cindex -fdelayed-branch option
 @cindex options, -fdelayed-branch
@@ -2690,12 +2814,47 @@ Might improve performance on some code.
 @item -funroll-loops
 @cindex loops, unrolling
 @cindex unrolling loops
-Definitely improves performance on some code.
+@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
+@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.
+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.
+
+@c DL: Fixme: This should obviously go somewhere else...
+Also, no `loop discovery'@footnote{@dfn{loop discovery} refers to the
+process by which a compiler, or indeed any reader of a program,
+determines which portions of the program are more likely to be executed
+repeatedly as it is being run.  Such discovery typically is done early
+when compiling using optimization techniques, so the ``discovered''
+loops get more attention---and more run-time resources, such as
+registers---from the compiler.  It is easy to ``discover'' loops that are
+constructed out of looping constructs in the language
+(such as Fortran's @code{DO}).  For some programs, ``discovering'' loops
+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} 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 DO WHILE
 @item -funroll-all-loops
-Definitely improves performance on some code.
+@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 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
 @cindex -fno-move-all-movables option
@@ -2706,6 +2865,10 @@ Definitely improves performance on some code.
 @item -fno-rerun-loop-opt
 @cindex -fno-rerun-loop-opt option
 @cindex options, -fno-rerun-loop-opt
+@emph{Version info:}
+These options are not supported by
+versions of @code{g77} based on @code{gcc} version 2.8.
+
 Each of these might improve performance on some code.
 
 Analysis of Fortran code optimization and the resulting
@@ -2763,14 +2926,14 @@ contains preprocessor directives.
 
 @node Directory Options
 @section Options for Directory Search
-@cindex directory options
+@cindex directory, options
 @cindex options, directory search
 @cindex search path
 
 These options affect how the @code{cpp} preprocessor searches
 for files specified via the @code{#include} directive.
 Therefore, when compiling Fortran programs, they are meaningful
-when the preproecssor is used.
+when the preprocessor is used.
 
 @cindex INCLUDE directive
 @cindex directive, INCLUDE
@@ -2787,9 +2950,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).
@@ -2811,9 +2975,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.
@@ -2841,7 +3005,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
@@ -2873,9 +3037,9 @@ return the GNU C type @code{complex} (or its @code{struct}
 equivalent).
 
 This does not affect the generation of code that interfaces with the
-@code{libf2c} library.
+@code{libg2c} library.
 
-However, because the @code{libf2c} library uses @code{f2c}
+However, because the @code{libg2c} library uses @code{f2c}
 calling conventions, @code{g77} rejects attempts to pass
 intrinsics implemented by routines in this library as actual
 arguments when @samp{-fno-f2c} is used, to avoid bugs when
@@ -2900,7 +3064,8 @@ source file used in a program, it must be used when compiling
 @cindex -ff2c-library option
 @cindex options, -ff2c-library
 @item -ff2c-library
-Specify that use of @code{libf2c} is required.
+Specify that use of @code{libg2c} (or the original @code{libf2c})
+is required.
 This is the default for the current version of @code{g77}.
 
 Currently it is not
@@ -2914,7 +3079,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
@@ -2989,7 +3154,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
@@ -3054,6 +3219,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
@@ -3089,7 +3258,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
@@ -3100,46 +3269,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
@@ -3152,6 +3315,10 @@ the programs you compile before assuming they are working.
 @item -fargument-alias
 @item -fargument-noalias
 @item -fno-argument-noalias-global
+@emph{Version info:}
+These options are not supported by
+versions of @code{g77} based on @code{gcc} version 2.8.
+
 These options specify to what degree aliasing
 (overlap)
 is permitted between
@@ -3176,6 +3343,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,
@@ -3192,9 +3361,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
@@ -3208,7 +3376,92 @@ 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.
+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:
+
+@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
+
+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}.
+
+For a @code{CHARACTER} substring reference, the second line has
+this appearance:
+
+@smallexample
+Attempt to access the 11-th element of variable a[start-substring].
+@end smallexample
+
+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}.
+
+(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
 
 @xref{Code Gen Options,,Options for Code Generation Conventions,
@@ -3226,7 +3479,7 @@ Some of these do @emph{not} work when compiling programs written in Fortran:
 @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{libf2c} with which
+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.
 
@@ -3245,7 +3498,7 @@ or there will be Trouble.
 @cindex -fpack-struct option
 @cindex options, -fpack-struct
 @item -fpack-struct
-This probably will break any calls to the @code{libf2c} library,
+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
 
@@ -3263,462 +3516,9 @@ 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 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 names
-to strip trailing spaces from them, for consistency
-with other implementations.
-
-@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
-@code{CTIME} intrinsic now accepts any @code{INTEGER}
-argument, not just @code{INTEGER(KIND=2)}.
-@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 by @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 systems, this won't make a noticable 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.
-@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.
-
-@item
-Automatic installation of the @code{g77} command now works.
-
-@item
-Diagnostic messages now more informative, a la @code{gcc},
-including messages like @samp{In function `foo':} and @samp{In file
-included from...:}.
-
-@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}.
-
-@item
-@samp{-funix-intrinsics-@{delete,hide,disable,enable@}}
-options added.
-
-@item
-@samp{-fno-underscoring} option added.
-
-@item
-@samp{--driver} option added to the @code{g77} command.
-
-@item
-Support for the @code{gcc} options @samp{-fident} and @samp{-fno-ident}
-added.
-
-@item
-@samp{g77 -v} returns much more version info, making the submission
-of better bug reports easily.
-
-@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}.
-
-@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
@@ -3729,8 +3529,10 @@ way through the compilation process instead of being lost.
 GNU Fortran supports a variety of extensions to, and dialects
 of, the Fortran language.
 Its primary base is the ANSI FORTRAN 77 standard, currently available on
-the network at @uref{http://kumo.swcp.com/fortran/F77_std/f77_std.html}
-or in @uref{ftp://ftp.ast.cam.ac.uk/pub/michael/}.
+the network at
+@uref{http://www.fortran.com/fortran/F77_std/rjcnf0001.html}
+or as monolithic text at
+@uref{http://www.fortran.com/fortran/F77_std/f77_std.html}.
 It offers some extensions that are popular among users
 of UNIX @code{f77} and @code{f2c} compilers, some that
 are popular among users of other compilers (such as Digital
@@ -3741,7 +3543,10 @@ by GNU Fortran.
 @cindex textbooks
 (If you need a text on Fortran,
 a few freely available electronic references have pointers from
-@code{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
@@ -3775,13 +3580,15 @@ Extensions to the ANSI FORTRAN 77 standard:
 * Control Statements::
 * Functions and Subroutines::
 * Scope and Classes of Names::
+* I/O::
+* Fortran 90 Features::
 @end menu
 
 @node Direction of Language Development
 @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.
@@ -3888,7 +3695,7 @@ As such, GNU users rarely need consider just what kind of underlying
 hardware (or, in many cases, operating system) they are using at any
 particular time.
 They can use and write software designed for a general-purpose,
-widely portable, heteregenous environment---the GNU environment.
+widely portable, heterogenous environment---the GNU environment.
 
 In line with this philosophy, GNU Fortran must evolve into a product
 that is widely ported and portable not only in the sense that it can
@@ -3926,8 +3733,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
 
@@ -4158,7 +3965,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}.''
@@ -4202,6 +4009,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
@@ -4218,8 +4026,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:
@@ -4231,7 +4044,7 @@ Otherwise, it is treated as an indicator of a continuation
 line.
 
 @item
-The exclamation point appears outside a character or hollerith
+The exclamation point appears outside a character or Hollerith
 constant.
 Otherwise, the exclamation point is considered part of the
 constant.
@@ -4243,14 +4056,15 @@ 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:
 
 @itemize @bullet
 @item
-The semicolon appears outside a character or hollerith
+The semicolon appears outside a character or Hollerith
 constant.
 Otherwise, the semicolon is considered part of the
 constant.
@@ -4309,6 +4123,7 @@ for the relevant aspects of GNU Fortran.)
 * Statement Labels::
 * Order::
 * INCLUDE::
+* Cpp-style directives::
 @end menu
 
 @node Character Set
@@ -4321,43 +4136,72 @@ Letters include uppercase letters (the twenty-six characters
 of the English alphabet) and lowercase letters (their lowercase
 equivalent).
 Generally, lowercase letters may be used in place of uppercase
-letters, though in character and hollerith constants, they
+letters, though in character and Hollerith constants, they
 are distinct.
 
 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
@@ -4367,7 +4211,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}.
 
@@ -4375,8 +4221,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
@@ -4407,7 +4253,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
@@ -4418,7 +4264,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).
 
@@ -4447,10 +4295,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.)
 
@@ -4564,7 +4412,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:
@@ -4648,6 +4496,19 @@ An @code{INCLUDE} directive may be continued across multiple
 lines as if it were a statement.
 This permits long names to be used for @var{filename}.
 
+@node Cpp-style directives
+@subsection Cpp-style directives
+@cindex #
+@cindex preprocessor
+
+@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}
+directives.)
+
 @node Data Types and Constants
 @section Data Types and Constants
 
@@ -5157,6 +5018,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.
 
@@ -5199,6 +5065,7 @@ is 11, and so on.)
 
 (Corresponds to Section 4.8 of ANSI X3.9-1978 FORTRAN 77.)
 
+@cindex double quoted character constants
 A character constant may be delimited by a pair of double quotes
 (@samp{"}) instead of apostrophes.
 In this case, an apostrophe within the constant represents
@@ -5282,16 +5149,17 @@ arguments (those not passed using a construct such as @code{%VAL()})
 by reference or descriptor, depending on the type of
 the actual argument.
 Thus, given @samp{INTEGER I}, @samp{CALL FOO(I)} would
-seem to mean the same thing as @samp{CALL FOO(%LOC(I))}, and
+seem to mean the same thing as @samp{CALL FOO(%VAL(%LOC(I)))}, and
 in fact might compile to identical code.
 
-However, @samp{CALL FOO(%LOC(I))} emphatically means ``pass the
-address of @samp{I} in memory''.
+However, @samp{CALL FOO(%VAL(%LOC(I)))} emphatically means
+``pass, by value, the address of @samp{I} in memory''.
 While @samp{CALL FOO(I)} might use that same approach in a
 particular version of @code{g77}, another version or compiler
 might choose a different implementation, such as copy-in/copy-out,
 to effect the desired behavior---and which will therefore not
-necessarily compile to the same code as would @samp{CALL FOO(%LOC(I))}
+necessarily compile to the same code as would
+@samp{CALL FOO(%VAL(%LOC(I)))}
 using the same version or compiler.
 
 @xref{Debugging and Interfacing}, for detailed information on
@@ -5317,9 +5185,30 @@ for the relevant aspects of GNU Fortran.)
 @cindex NAMELIST statement
 @cindex statements, NAMELIST
 
-The @code{NAMELIST} statement, and related I/O constructs, are
-supported by the GNU Fortran language in essentially the same
-way as they are by @code{f2c}.
+The @code{NAMELIST} statement, and related I/O constructs, are
+supported by the GNU Fortran language in essentially the same
+way as they are by @code{f2c}.
+
+This follows Fortran 90 with the restriction that on @code{NAMELIST}
+input, subscripts must have the form
+@smallexample
+@var{subscript} [ @code{:} @var{subscript} [ @code{:} @var{stride}]]
+@end smallexample
+i.e.@:
+@smallexample
+&xx x(1:3,8:10:2)=1,2,3,4,5,6/
+@end smallexample
+is allowed, but not, say,
+@smallexample
+&xx x(:3,8::2)=1,2,3,4,5,6/
+@end smallexample
+
+As an extension of the Fortran 90 form, @code{$} and @code{$END} may be
+used in place of @code{&} and @code{/} in @code{NAMELIST} input, so that
+@smallexample
+$&xx x(1:3,8:10:2)=1,2,3,4,5,6 $end
+@end smallexample
+could be used instead of the example above.
 
 @node DOUBLE COMPLEX
 @subsection @code{DOUBLE COMPLEX} Statement
@@ -5347,10 +5236,13 @@ for the relevant aspects of GNU Fortran.)
 @node DO WHILE
 @subsection DO WHILE
 @cindex DO WHILE
+@cindex DO
 @cindex MIL-STD 1753
 
 The @code{DO WHILE} statement, a feature of both the MIL-STD 1753 and
 Fortran 90 standards, is provided by the GNU Fortran language.
+The Fortran 90 ``do forever'' statement comprising just @code{DO} is
+also supported.
 
 @node END DO
 @subsection END DO
@@ -5415,6 +5307,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.
@@ -5652,7 +5548,7 @@ While that is a likely implementation choice, other
 implementation choices are available that preserve the
 pass-by-reference semantics without passing a pointer to
 the argument, @var{arg}.
-(For example, a copy-in/copy-out implementation.)
+(For example, a copy-in/copy-out implementation.)
 And, future versions of @code{g77} might change the
 way descriptors are implemented, such as passing a
 single argument pointing to a record containing the
@@ -5751,12 +5647,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
@@ -5859,7 +5755,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
@@ -5871,7 +5767,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
@@ -5894,10 +5790,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})},
@@ -5954,8 +5850,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()}
@@ -6087,7 +5983,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
@@ -6118,7 +6014,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
@@ -6133,11 +6029,127 @@ 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).
 
+@node I/O
+@section I/O
+
+@cindex dollar sign
+A dollar sign at the end of an output format specification suppresses
+the newline at the end of the output.
+
+@cindex <> edit descriptor
+@cindex edit descriptor, <>
+Edit descriptors in @code{FORMAT} statements may contain compile-time
+@code{INTEGER} constant expressions in angle brackets, such as
+@smallexample
+10    FORMAT (I<WIDTH>)
+@end smallexample
+
+The @code{OPEN} specifier @code{NAME=} is equivalent to @code{FILE=}.
+
+These Fortran 90 features are supported:
+@itemize @bullet
+@item
+@cindex FORMAT descriptors
+@cindex Z edit descriptor
+@cindex edit descriptor, Z
+@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'}
+specifier is supported.
+@end itemize
+
+@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.
+@xref{Characters Lines Sequence,,@asis{Characters, Lines, and Execution Sequence}},
+for information on additional fixed source form lexical issues.
+@cindex @samp{-ffree-form}
+Further, the free source form is supported through the
+@samp{-ffree-form} option.
+@cindex @samp{-ff90}
+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
+@item Character assignments
+@cindex character assignments
+In character assignments, the variable being assigned may occur on the
+right hand side of the assignment.
+@item Character strings
+@cindex double quoted character constants
+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}.
+@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}.
+@item @code{DO WHILE}
+@xref{DO WHILE}.
+@item @code{END} decoration
+@xref{Statements}.
+@item @code{END DO}
+@xref{END DO}.
+@item @code{KIND}
+@item @code{IMPLICIT NONE}
+@item @code{INCLUDE} statements
+@xref{INCLUDE}.
+@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}.
+@item Specification statements
+A limited subset of the Fortran 90 syntax and semantics for variable
+declarations is supported, including @code{KIND}.  @xref{Kind Notation}.
+(@code{KIND} is of limited usefulness in the absence of the
+@code{KIND}-related intrinsics, since these intrinsics permit writing
+more widely portable code.)  An example of supported @code{KIND} usage
+is:
+@smallexample
+INTEGER (KIND=1) :: FOO=1, BAR=2
+CHARACTER (LEN=3) FOO
+@end smallexample
+@code{PARAMETER} and @code{DIMENSION} attributes aren't supported.
+@end table
+
 @node Other Dialects
 @chapter Other Dialects
 
@@ -6170,8 +6182,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
@@ -6220,7 +6232,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
@@ -6254,8 +6267,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
 
@@ -6281,7 +6293,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
 
@@ -6307,6 +6319,12 @@ continuation line, imitating the behavior of @code{f2c}.
 @node Trailing Comment
 @section Trailing Comment
 
+@cindex trailing comment
+@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.
@@ -6326,6 +6344,7 @@ error (though it would likely behave incorrectly).
 @node Debug Line
 @section Debug Line
 @cindex debug line
+@cindex comment line, debug
 
 Use of @samp{D} or @samp{d} as the first character (column 1) of
 a source line denotes a debug line.
@@ -6438,7 +6457,7 @@ consistent with these source switches---in the sense that input will be
 expected to meet the same requirements as source code in terms
 of matching symbol names and keywords (for the exponent letters).
 
-Currently, however, @code{NAMELIST} is supported by @code{libf2c},
+Currently, however, @code{NAMELIST} is supported by @code{libg2c},
 which uppercases @code{NAMELIST} input and symbol names for matching.
 This means not only that @code{NAMELIST} output currently shows symbol
 (and keyword) names in uppercase even if lower-case source
@@ -6459,7 +6478,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
@@ -6472,7 +6491,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:
 
@@ -6666,7 +6685,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
@@ -6677,7 +6696,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
@@ -6698,7 +6717,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
@@ -6709,7 +6729,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)
@@ -6732,7 +6752,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.
@@ -6820,7 +6840,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
@@ -6939,18 +6959,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}.
@@ -7085,8 +7093,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
 
@@ -7243,7 +7252,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)
@@ -7300,6 +7309,7 @@ of work!}
 
 @menu
 * Compiler Limits::
+* Run-time Environment Limits::
 * Compiler Types::
 * Compiler Constants::
 * Compiler Intrinsics::
@@ -7318,6 +7328,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.
@@ -7333,9 +7345,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
@@ -7391,7 +7709,7 @@ architectures.
 These rules are based on the configuration that is in force for the
 version of @code{gcc} built in the same release as @code{g77} (and
 which was therefore used to build both the @code{g77} compiler
-components and the @code{libf2c} run-time library):
+components and the @code{libg2c} run-time library):
 
 @table @code
 @cindex REAL(KIND=1) type
@@ -7464,7 +7782,7 @@ Two @code{REAL(KIND=2)} scalars.
 
 @cindex *@var{n} notation
 @item @var{numeric-type}*@var{n}
-(Where @var{numeric-type} is any type other than @code{CHARACTER}.)
+(Where @var{numeric-type} is any type other than @code{CHARACTER}.)
 Same as whatever @code{gcc} type occupies @var{n} times the storage
 space of a @code{gcc} @code{char} item.
 
@@ -7734,11 +8052,15 @@ argument will become two arguments on the C side: a @code{char *}
 and an @code{int} length.
 
 Much of this compatibility results from the fact that
-@code{g77} uses the same run-time library, @code{libf2c}, used by
-@code{f2c}.
+@code{g77} uses the same run-time library,
+@code{libf2c}, used by @code{f2c},
+though @code{g77} gives its version the name @code{libg2c}
+so as to avoid conflicts when linking,
+installing them in the same directories,
+and so on.
 
 Other compilers might or might not generate code that
-is object-compatible with @code{libf2c} and current @code{g77},
+is object-compatible with @code{libg2c} and current @code{g77},
 and some might offer such compatibility only when explicitly
 selected via a command-line option to the compiler.
 
@@ -7809,13 +8131,18 @@ This should cause future versions of @code{g77} either to produce
 compatible code (at the expense of the availability of some features and
 performance), or at the very least, to produce diagnostics.
 
+(The library @code{g77} produces will no longer be named @file{libg2c}
+when it is no longer generally compatible with @file{libf2c}.
+It will likely be referred to, and, if installed as a distinct
+library, named @code{libg77}, or some other as-yet-unused name.)
+
 @node Compilers Other Than f2c
 @section Compilers Other Than @code{f2c}
 
 On systems with Fortran compilers other than @code{f2c} and @code{g77},
 code compiled by @code{g77} is not expected to work
 well with code compiled by the native compiler.
-(This is true for @code{f2c}-compiled objects as well.)
+(This is true for @code{f2c}-compiled objects as well.)
 Libraries compiled with the native compiler probably will have
 to be recompiled with @code{g77} to be used with @code{g77}-compiled code.
 
@@ -7862,7 +8189,7 @@ command.
 of work!}
 
 @menu
-* Interoperating with C and C++::  
+* Interoperating with C and C++::
 @end menu
 
 @node Interoperating with C and C++
@@ -7872,7 +8199,7 @@ of work!}
 @cindex C++, linking with
 @cindex linking with C
 The following discussion assumes that you are running @code{g77} in @code{f2c}
-compatibility mode, i.e.@ not using @samp{-fno-f2c}.
+compatibility mode, i.e.@: not using @samp{-fno-f2c}.
 It provides some
 advice about quick and simple techniques for linking Fortran and C (or
 C++), the most common requirement.
@@ -7903,7 +8230,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}}.
@@ -7914,7 +8241,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@.
@@ -7927,12 +8254,12 @@ It can be used in @code{f2c} mode with
 @cindex types, Fortran/C
 Generally, C code written to link with
 @code{g77} code---calling and/or being
-called from Fortran---should @samp{#include <f2c.h>} to define the C
+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
-@code{integer}, a type defined by @file{f2c.h}.
-@file{f2c.h} is installed where @code{gcc} will find it by
+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
 @code{g77}, probably built at the same time as @code{g77}.
 
@@ -7941,24 +8268,25 @@ default, assuming you use a copy of @code{gcc} compatible with
 
 @pindex f2c
 @cindex -fno-second-underscore
-A simple and foolproof way to write @code{g77}-callable C routines---e.g.@ to
+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.
 (There are some errors otherwise commonly made in generating C
-interfaces with f2c conventions, such as not using @code{doublereal} as
-the return type of a @code{REAL} @code{FUNCTION}.)
+interfaces with @code{f2c} conventions,
+such as not using @code{doublereal}
+as the return type of a @code{REAL} @code{FUNCTION}.)
 
 @pindex ftnchek
 @code{f2c} also can help with calling Fortran from C, using its
 @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
@@ -7968,7 +8296,7 @@ prototype information.
 @code{#include} this in the C which has to call
 the Fortran routines to make sure you get it right.
 
-@xref{Arrays,,Arrays (DIMENSION}, for information on the differences
+@xref{Arrays,,Arrays (DIMENSION)}, for information on the differences
 between the way Fortran (including compilers like @code{g77}) and
 C handle arrays.
 
@@ -7990,25 +8318,150 @@ avoid clashes with C++ reserved words in addition to those in C@.
 @subsection Startup Code
 
 @cindex startup code
-@cindex runtime initialization
-@cindex initialization, runtime
-Unlike with some runtime systems, it shouldn't be necessary (unless there are
-bugs) to use a Fortran main program to ensure the
-runtime---specifically the i/o system---is initialized.
-However, to use
-the @code{g77} intrinsics @code{GETARG()} and @code{IARGC()} the
-@code{main()} routine from the @file{libf2c} library must be used, either
-explicitly or implicitly by using a Fortran main program.
-This
-@code{main()} program calls @code{MAIN__()} (where the names are C-type
-@code{extern} names, i.e.@ not mangled).
-You need to provide this
-nullary procedure as the entry point for your C code if using
-@file{libf2c}'s @code{main}.
-In some cases it might be necessary to
-provide a dummy version of this to avoid linkers complaining about
-failure to resolve @code{MAIN__()} if linking against @file{libf2c} and
-not using @code{main()} from it.
+@cindex run-time, initialization
+@cindex initialization, run-time
+Unlike with some runtime systems,
+it shouldn't be necessary
+(unless there are bugs)
+to use a Fortran main program unit to ensure the
+runtime---specifically the I/O system---is initialized.
+
+However, to use the @code{g77} intrinsics @code{GETARG} and @code{IARGC},
+either the @code{main} routine from the @file{libg2c} library must be used,
+or the @code{f_setarg} routine
+(new as of @code{egcs} version 1.1 and @code{g77} version 0.5.23)
+must be called with the appropriate @code{argc} and @code{argv} arguments
+prior to the program calling @code{GETARG} or @code{IARGC}.
+
+To provide more flexibility for mixed-language programming
+involving @code{g77} while allowing for shared libraries,
+as of @code{egcs} version 1.1 and @code{g77} version 0.5.23,
+@code{g77}'s @code{main} routine in @code{libg2c}
+does the following, in order:
+
+@enumerate
+@item
+Calls @code{f_setarg}
+with the incoming @code{argc} and @code{argv} arguments,
+in the same order as for @code{main} itself.
+
+This sets up the command-line environment
+for @code{GETARG} and @code{IARGC}.
+
+@item
+Calls @code{f_setsig} (with no arguments).
+
+This sets up the signaling and exception environment.
+
+@item
+Calls @code{f_init} (with no arguments).
+
+This initializes the I/O environment,
+though that should not be necessary,
+as all I/O functions in @code{libf2c}
+are believed to call @code{f_init} automatically,
+if necessary.
+
+(A future version of @code{g77} might skip this explicit step,
+to speed up normal exit of a program.)
+
+@item
+Arranges for @code{f_exit} to be called (with no arguments)
+when the program exits.
+
+This ensures that the I/O environment is properly shut down
+before the program exits normally.
+Otherwise, output buffers might not be fully flushed,
+scratch files might not be deleted, and so on.
+
+The simple way @code{main} does this is
+to call @code{f_exit} itself after calling
+@code{MAIN__} (in the next step).
+
+However, this does not catch the cases where the program
+might call @code{exit} directly,
+instead of using the @code{EXIT} intrinsic
+(implemented as @code{exit_} in @code{libf2c}).
+
+So, @code{main} attempts to use
+the operating environment's @code{onexit} or @code{atexit}
+facility, if available,
+to cause @code{f_exit} to be called automatically
+upon any invocation of @code{exit}.
+
+@item
+Calls @code{MAIN__} (with no arguments).
+
+This starts executing the Fortran main program unit for
+the application.
+(Both @code{g77} and @code{f2c} currently compile a main
+program unit so that its global name is @code{MAIN__}.)
+
+@item
+If no @code{onexit} or @code{atexit} is provided by the system,
+calls @code{f_exit}.
+
+@item
+Calls @code{exit} with a zero argument,
+to signal a successful program termination.
+
+@item
+Returns a zero value to the caller,
+to signal a successful program termination,
+in case @code{exit} doesn't exit on the system.
+@end enumerate
+
+All of the above names are C @code{extern} names,
+i.e.@: not mangled.
+
+When using the @code{main} procedure provided by @code{g77}
+without a Fortran main program unit,
+you need to provide @code{MAIN__}
+as the entry point for your C code.
+(Make sure you link the object file that defines that
+entry point with the rest of your program.)
+
+To provide your own @code{main} procedure
+in place of @code{g77}'s,
+make sure you specify the object file defining that procedure
+@emph{before} @samp{-lg2c} on the @code{g77} command line.
+Since the @samp{-lg2c} option is implicitly provided,
+this is usually straightforward.
+(Use the @samp{--verbose} option to see how and where
+@code{g77} implicitly adds @samp{-lg2c} in a command line
+that will link the program.
+Feel free to specify @samp{-lg2c} explicitly,
+as appropriate.)
+
+However, when providing your own @code{main},
+make sure you perform the appropriate tasks in the
+appropriate order.
+For example, if your @code{main} does not call @code{f_setarg},
+make sure the rest of your application does not call
+@code{GETARG} or @code{IARGC}.
+
+And, if your @code{main} fails to ensure that @code{f_exit}
+is called upon program exit,
+some files might end up incompletely written,
+some scratch files might be left lying around,
+and some existing files being written might be left
+with old data not properly truncated at the end.
+
+Note that, generally, the @code{g77} operating environment
+does not depend on a procedure named @code{MAIN__} actually
+being called prior to any other @code{g77}-compiled code.
+That is, @code{MAIN__} does not, itself,
+set up any important operating-environment characteristics
+upon which other code might depend.
+This might change in future versions of @code{g77},
+with appropriate notification in the release notes.
+
+For more information, consult the source code for the above routines.
+These are in @file{@value{path-libf2c}/libF77/}, named @file{main.c},
+@file{setarg.c}, @file{setsig.c}, @file{getarg_.c}, and @file{iargc_.c}.
+
+Also, the file @file{@value{path-g77}/com.c} contains the code @code{g77}
+uses to open-code (inline) references to @code{IARGC}.
 
 @include g77install.texi
 
@@ -8079,35 +8532,35 @@ described in this section.
 @cindex statements, PROGRAM
 
 When @code{g77} compiles a main program unit, it gives it the public
-procedure name @samp{MAIN__}.
-The @code{libf2c} library has the actual @code{main()} procedure
+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{libf2c} are designed so that you need not
+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
 can be written in C or some other language.
 Especially for I/O handling, this is the case, although @code{g77} version 0.5.16
-includes a bug fix for @code{libf2c} that solved a problem with using the
+includes a bug fix for @code{libg2c} that solved a problem with using the
 @code{OPEN} statement as the first Fortran I/O activity in a program
 without a Fortran main program unit.
 
 However, if you don't intend to use @code{g77} (or @code{f2c}) to compile
 your main program unit---that is, if you intend to compile a @code{main()}
 procedure using some other language---you should carefully
-examine the code for @code{main()} in @code{libf2c}, found in the source
-file @file{gcc/f/runtime/libF77/main.c}, to see what kinds of things
+examine the code for @code{main()} in @code{libg2c}, found in the source
+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()
-For example, @code{libf2c}'s @code{main()} sets up the information used by
+@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{libf2c}'s @code{main()}
+Bypassing @code{libg2c}'s @code{main()}
 without providing a substitute for this activity would mean
 that invoking @code{IARGC} and @code{GETARG} would produce undefined
 results.
@@ -8119,13 +8572,13 @@ results.
 @cindex .gdbinit
 When debugging, one implication of the fact that @code{main()}, which
 is the place where the debugged program ``starts'' from the
-debugger's point of view, is in @code{libf2c} is that you won't be
+debugger's point of view, is in @code{libg2c} is that you won't be
 starting your Fortran program at a point you recognize as your
 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
@@ -8142,7 +8595,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
@@ -8172,7 +8625,7 @@ The second argument is appended to the end of the user-specified
 calling sequence and is named @samp{__g77_length_@var{x}}, where @var{x}
 is the user-specified name.
 This argument is of the C type @code{ftnlen}
-(see @file{gcc/f/runtime/f2c.h.in} for information on that type) and
+(see @file{@value{path-libf2c}/g2c.h.in} for information on that type) and
 is the number of characters the caller has allocated in the
 array pointed to by the first argument.
 
@@ -8275,7 +8728,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
@@ -8284,7 +8737,8 @@ as how casing is handled.
 
 External names---names of entities that are public, or ``accessible'',
 to all modules in a program---normally have an underscore (@samp{_})
-appended by @code{g77}, to generate code that is compatible with f2c.
+appended by @code{g77},
+to generate code that is compatible with @code{f2c}.
 External names include names of Fortran things like common blocks,
 external procedures (subroutines and functions, but not including
 statement functions, which are internal procedures), and entry point
@@ -8304,7 +8758,7 @@ When @samp{-funderscoring} is in force, any name (external or local)
 that already has at least one underscore in it is
 implemented by @code{g77} by appending two underscores.
 (This second underscore can be disabled via the
-@samp{-fno-second-underscore} option.)
+@samp{-fno-second-underscore} option.)
 External names are changed this way for @code{f2c} compatibility.
 Local names are changed this way to avoid collisions with external names
 that are different in the source code---@code{f2c} does the same thing, but
@@ -8374,11 +8828,12 @@ 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 f2c does,
-for compatibility with f2c.
+@code{g77} names and lays out @code{COMMON} areas
+the same way @code{f2c} does,
+for compatibility with @code{f2c}.
 
 Currently, @code{g77} does not emit ``true'' debugging information for
 members of a @code{COMMON} area, due to an apparent bug in the GBE.
@@ -8398,6 +8853,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.
 
@@ -8488,7 +8947,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
 
@@ -8516,11 +8975,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
@@ -8929,7 +9383,7 @@ assigned-label uses of a variable.
 @cindex messages, run-time
 @cindex I/O, errors
 
-The @code{libf2c} library currently has the following table to relate
+The @code{libg2c} library currently has the following table to relate
 error code numbers, returned in @code{IOSTAT=} variables, to messages.
 This information should, in future versions of this document, be
 expanded upon to include detailed descriptions of each message.
@@ -8942,7 +9396,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
@@ -9036,7 +9490,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.
@@ -9046,25 +9501,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
@@ -9202,6 +9746,9 @@ savings of resources, such as on systems where @file{/dev/null} or
 @file{/dev/zero} represent bottlenecks in the systems' performance,
 because @code{g77} simply asks for fewer zeros from the operating
 system than @code{f2c}.
+(Avoiding spurious use of zero bytes, each byte typically have
+eight zero bits, also reduces the liabilities in case
+Microsoft's rumored patent on the digits 0 and 1 is upheld.)
 
 @node Block Data and Libraries
 @section Block Data and Libraries
@@ -9209,8 +9756,8 @@ system than @code{f2c}.
 @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
@@ -9233,12 +9780,12 @@ The implementation @code{g77} currently uses to make this work is
 one of the few things not compatible with @code{f2c} as currently
 shipped.
 @code{f2c} currently does nothing with @samp{EXTERNAL FOO} except
-issue a warning that @samp{FOO} is not otherwise referenced, and for
-@samp{BLOCK DATA FOO}, f2c doesn't generate a dummy procedure with the
-name @samp{FOO}.
+issue a warning that @samp{FOO} is not otherwise referenced,
+and, for @samp{BLOCK DATA FOO},
+@code{f2c} doesn't generate a dummy procedure with the name @samp{FOO}.
 The upshot is that you shouldn't mix @code{f2c} and @code{g77} in
 this particular case.
-If you use f2c to compile @samp{BLOCK DATA FOO},
+If you use @code{f2c} to compile @samp{BLOCK DATA FOO},
 then any @code{g77}-compiled program unit that says @samp{EXTERNAL FOO}
 will result in an unresolved reference when linked.
 If you do the
@@ -9310,7 +9857,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 @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.
 
@@ -9494,6 +10041,8 @@ tracking down bugs in such programs.
 * Aliasing Assumed To Work::
 * Output Assumed To Flush::
 * Large File Unit Numbers::
+* Floating-point precision::
+* Inconsistent Calling Sequences::
 @end menu
 
 @node Not My Type
@@ -9551,7 +10100,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
@@ -9576,7 +10125,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
 
@@ -9644,7 +10193,7 @@ of floating-point constants under certain circumstances.
 @node Surprising Interpretations of Code
 @subsection Surprising Interpretations of Code
 
-The @samp{-Wsuprising} option can help find bugs involving
+The @samp{-Wsurprising} option can help find bugs involving
 expression evaluation or in
 the way @code{DO} loops with non-integral iteration variables
 are handled.
@@ -9683,13 +10232,20 @@ The @samp{-falias-check}, @samp{-fargument-alias},
 and @samp{-fno-argument-noalias-global} options,
 introduced in version 0.5.20 and
 @code{g77}'s version 2.7.2.2.f.2 of @code{gcc},
-control the assumptions regarding aliasing
-(overlapping)
-of writes and reads to main memory (core) made
+were withdrawn as of @code{g77} version 0.5.23
+due to their not being supported by @code{gcc} version 2.8.
+
+These options control the assumptions regarding aliasing
+(overlapping) of writes and reads to main memory (core) made
 by the @code{gcc} back end.
 
-They are effective only when compiling with @samp{-O} (specifying
-any level other than @samp{-O0}) or with @samp{-falias-check}.
+The information below still is useful, but applies to
+only those versions of @code{g77} that support the
+alias analysis implied by support for these options.
+
+These options are effective only when compiling with @samp{-O}
+(specifying any level other than @samp{-O0})
+or with @samp{-falias-check}.
 
 The default for Fortran code is @samp{-fargument-noalias-global}.
 (The default for C code and code written in other C-based languages
@@ -9813,8 +10369,7 @@ Static analysis is certainly imperfect, as is run-time analysis,
 since neither can catch all violations.
 (Static analysis can catch all likely violations, and some that
 might never actually happen, while run-time analysis can catch
-only those violations that actually happen during a particular
-run.
+only those violations that actually happen during a particular run.
 Neither approach can cope with programs mixing Fortran code with
 routines written in other languages, however.)
 
@@ -9839,7 +10394,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
@@ -9849,21 +10404,22 @@ relevant @code{ERR=} and @code{IOSTAT=} mechanism.
 
 Because of the adverse effects this approach had on the performance
 of many programs, @code{g77} no longer configures @code{libf2c}
+(now named @code{libg2c} in its @code{g77} incarnation)
 to always flush output.
 
 If your program depends on this behavior, either insert the
 appropriate @samp{CALL FLUSH} statements, or modify the sources
-to the @code{libf2c}, rebuild and reinstall @code{g77}, and
+to the @code{libg2c}, rebuild and reinstall @code{g77}, and
 relink your programs with the modified library.
 
-(Ideally, @code{libf2c} would offer the choice at run-time, so
+(Ideally, @code{libg2c} would offer the choice at run-time, so
 that a compile-time option to @code{g77} or @code{f2c} could
 result in generating the appropriate calls to flushing or
 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{libf2c}
-can be built and installed with the @samp{ALWAYS_FLUSH} macro defined.
+the @code{g77} source tree so that a version of @code{libg2c}
+can be built and installed with the @code{ALWAYS_FLUSH} macro defined.
 
 @node Large File Unit Numbers
 @subsection Large File Unit Numbers
@@ -9875,25 +10431,24 @@ can be built and installed with the @samp{ALWAYS_FLUSH} macro defined.
 
 If your program crashes at run time with a message including
 the text @samp{illegal unit number}, that probably is
-a message from the run-time library, @code{libf2c}, used, and
-distributed with, @code{g77}.
+a message from the run-time library, @code{libg2c}.
 
 The message means that your program has attempted to use a
 file unit number that is out of the range accepted by
-@code{libf2c}.
+@code{libg2c}.
 Normally, this range is 0 through 99, and the high end
-of the range is controlled by a @code{libf2c} source-file
-macro named @samp{MXUNIT}.
+of the range is controlled by a @code{libg2c} source-file
+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{libf2c} so you can build and
-install a new version of @code{libf2c} that supports the larger
+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.
 
-@emph{Note:} While @code{libf2c} places a limit on the range
+@emph{Note:} While @code{libg2c} places a limit on the range
 of Fortran file-unit numbers, the underlying library and operating
 system might impose different kinds of limits.
 For example, some systems limit the number of files simultaneously
@@ -9901,6 +10456,65 @@ 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
+
+@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 @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 @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
+(@pxref{Floating-point Exception Handling}).
+The control word could be set to double precision by some code like this
+one:
+@smallexample
+#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}.
+
+@node Inconsistent Calling Sequences
+@subsection Inconsistent Calling Sequences
+
+@pindex ftnchek
+@cindex floating-point, errors
+@cindex ix86 FPU stack
+@cindex x86 FPU stack
+Code containing inconsistent calling sequences in the same file is
+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}}.)
+
+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
+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
+executed later.  Similarly if, say, external C routines are written
+incorrectly.
+
 @node Overly Convenient Options
 @section Overly Convenient Command-line Options
 @cindex overly convenient options
@@ -9977,15 +10591,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
@@ -9996,7 +10601,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},
@@ -10013,12 +10618,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})
@@ -10040,8 +10646,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.
@@ -10071,7 +10677,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.
@@ -10094,6 +10700,26 @@ generally relevant to Fortran,
 but using it will force @code{COMMON} to be padded if necessary to align
 @code{DOUBLE PRECISION} data.
 
+When @code{DOUBLE PRECISION} data is forcibly aligned
+in @code{COMMON} by @code{g77} due to specifying @samp{-malign-double},
+@code{g77} issues a warning about the need to
+insert padding.
+
+In this case, each and every program unit that uses
+the same @code{COMMON} area
+must specify the same layout of variables and their types
+for that area
+and be compiled with @samp{-malign-double} as well.
+@code{g77} will issue warnings in each case,
+but as long as every program unit using that area
+is compiled with the same warnings,
+the resulting object files should work when linked together
+unless the program makes additional assumptions about
+@code{COMMON} area layouts that are outside the scope
+of the FORTRAN 77 standard,
+or uses @code{EQUIVALENCE} or different layouts
+in ways that assume no padding is ever inserted by the compiler.
+
 @item
 Ensure that @file{crt0.o} or @file{crt1.o}
 on your system guarantees a 64-bit
@@ -10110,6 +10736,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
 
@@ -10155,30 +10788,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
@@ -10200,20 +10828,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.
@@ -10307,7 +10935,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 @code{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.
 
@@ -10322,31 +10950,31 @@ 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}).
 
 If this happens to you, try appending @samp{-lc} to the command you
 use to link the program, e.g. @samp{g77 foo.f -lc}.
-@code{g77} already specifies @samp{-lf2c -lm} when it calls the linker,
+@code{g77} already specifies @samp{-lg2c -lm} when it calls the linker,
 but it cannot also specify @samp{-lc} because not all systems have a
 file named @file{libc.a}.
 
 It is unclear at this point whether there are legitimately installed
-systems where @samp{-lf2c -lm} is insufficient to resolve code produced
+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
-loaded by specifying @samp{-lf2c -lm} when it invokes the @code{gcc}
+loaded by specifying @samp{-lg2c -lm} when it invokes the @code{gcc}
 command to do the actual link.
 (Use the @samp{-v} option to discover
 more about what actually happens when you use the @code{g77} and @code{gcc}
@@ -10359,8 +10987,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
@@ -10371,15 +10999,19 @@ 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}.
 Inadequate investigation as of the release of 0.5.16 results in not
 knowing which products are the culprit, but @file{gdb-4.14} definitely
 crashes when, for example, an attempt is made to print the contents
-of a @code{COMPLEX(KIND=2)} dummy array, on at least some GNU/Linux machines, plus
-some others.
+of a @code{COMPLEX(KIND=2)} dummy array, on at least some GNU/Linux
+machines, plus some others.
+Attempts to access assumed-size arrays are
+also known to crash recent versions of @code{gdb}.
+(@code{gdb}'s Fortran support was done for a different compiler
+and isn't properly compatible with @code{g77}.)
 
 @node NeXTStep Problems
 @subsection NeXTStep Problems
@@ -10425,7 +11057,7 @@ ebadexec: file: a.out appears to be executable
 %
 @end smallexample
 
-Browsing through @file{gcc/f/Makefile.in},
+Browsing through @file{@value{path-g77}/Makefile.in},
 you will find that the @code{f771} program itself also has to be
 linked with these flags---it has large statically allocated
 data structures.
@@ -10437,7 +11069,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.
@@ -10489,9 +11121,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,
@@ -10499,7 +11131,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.
 
@@ -10555,6 +11187,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
@@ -10568,18 +11202,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
@@ -10626,7 +11262,7 @@ power of two (in Fortran, by @samp{2**N}) that typically is between
 is negative.
 
 So, a value like 0.2 is exactly represented in decimal---since
-it is a fraction, @samp{2/10}, with a denomenator that is compatible
+it is a fraction, @samp{2/10}, with a denominator that is compatible
 with the base of the number system (base 10).
 However, @samp{2/10} cannot be represented by any finite number
 of sums of any of 1.0, 0.5, 0.25, and so on, so 0.2 cannot
@@ -10660,13 +11296,13 @@ When compiled by @code{g77}, the above program might output
 executable that outputs @samp{0.2}.
 
 This particular difference is due to the fact that, currently,
-conversion of floating-point values by the @code{libf2c} library,
+conversion of floating-point values by the @code{libg2c} library,
 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.
@@ -10702,12 +11338,57 @@ PRINT *, 0.2D0
 END
 @end smallexample
 
-Future versions of @code{g77} and/or @code{libf2c} might convert
+Future versions of @code{g77} and/or @code{libg2c} might convert
 single-precision values directly to decimal,
 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
+Goldberg, `What Every Computer Scientist Should Know About
+Floating-Point Arithmetic', Computing Surveys, 23, March 1991, pp.@:
+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.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.
+
 @include bugs.texi
 
 @node Missing Features
@@ -10722,6 +11403,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::
@@ -10729,6 +11411,7 @@ GNU Fortran language:
 * Array Bounds Expressions::
 * POINTER Statements::
 * Sensible Non-standard Constructs::
+* READONLY Keyword::
 * FLUSH Statement::
 * Expressions in FORMAT Statements::
 * Explicit Assembler Code::
@@ -10740,9 +11423,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::
@@ -10751,8 +11436,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::
@@ -10768,7 +11455,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::
@@ -10812,11 +11501,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
@@ -10860,6 +11549,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
 
@@ -10884,6 +11589,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
@@ -10893,7 +11599,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
@@ -10926,8 +11633,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.
@@ -10939,7 +11648,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}).
@@ -10955,8 +11667,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
@@ -11048,6 +11760,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
 
@@ -11064,7 +11804,7 @@ specifiers.
 
 @code{g77} doesn't support @samp{FORMAT(I<J>)} and the like.
 Supporting this requires a significant redesign or replacement
-of @code{libf2c}.
+of @code{libg2c}.
 
 However, @code{g77} does support
 this construct when the expression is constant
@@ -11110,11 +11850,12 @@ code to specify explicit assembler code.
 @subsection Q Edit Descriptor
 @cindex FORMAT statement
 @cindex Q edit descriptor
+@cindex edit descriptor, Q
 
 The @code{Q} edit descriptor in @code{FORMAT}s isn't supported.
 (This is meant to get the number of characters remaining in an input record.)
 Supporting this requires a significant redesign or replacement
-of @code{libf2c}.
+of @code{libg2c}.
 
 A workaround might be using internal I/O or the stream-based intrinsics.
 @xref{FGetC Intrinsic (subroutine)}.
@@ -11170,7 +11911,7 @@ replaced by @samp{READ fmt,list}.
 This set of extensions is quite a bit
 lower on the list of large, important things to add to @code{g77}, partly
 because it requires a great deal of work either upgrading or
-replacing @code{libf2c}.
+replacing @code{libg2c}.
 
 @node OPEN CLOSE and INQUIRE Keywords
 @subsection @code{OPEN}, @code{CLOSE}, and @code{INQUIRE} Keywords
@@ -11185,7 +11926,27 @@ replacing @code{libf2c}.
 @code{g77} doesn't have support for keywords such as @code{DISP='DELETE'} in
 the @code{OPEN}, @code{CLOSE}, and @code{INQUIRE} statements.
 These extensions are easy to add to @code{g77} itself, but
-require much more work on @code{libf2c}.
+require much more work on @code{libg2c}.
+
+@cindex FORM='PRINT'
+@cindex ANS carriage control
+@cindex carriage control
+@pindex asa
+@pindex fpr
+@code{g77} doesn't support @code{FORM='PRINT'} or an equivalent to
+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
+a version of @code{asa} from
+@uref{ftp://sunsite.unc.edu/pub/Linux/devel/lang/fortran} for GNU
+systems which will probably build easily on other systems.
+Alternatively, @code{fpr} is in BSD distributions in various archive
+sites.
+
+@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}
@@ -11244,6 +12005,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
 
@@ -11290,18 +12089,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/
@@ -11309,6 +12108,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
 
@@ -11316,33 +12133,45 @@ 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
 
 The @code{gcc} backend and, consequently, @code{g77}, currently provides no
-control over whether or not floating-point exceptions are trapped or
+general control over whether or not floating-point exceptions are trapped or
 ignored.
 (Ignoring them typically results in NaN values being
-propagated in systems that conform to IEEE 754.)@ 
-The behaviour is inherited from the system-dependent startup code.
+propagated in systems that conform to IEEE 754.)
+The behaviour is normally inherited from the system-dependent startup
+code, though some targets, such as the Alpha, have code generation
+options which change the behaviour.
 
 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>
-void __attribute__ ((constructor))
-trapfpe () @{
-  (void) __setfpucw (_FPU_DEFAULT &
-                     ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
+#define _GNU_SOURCE 1
+#include <fenv.h>
+static void __attribute__ ((constructor))
+trapfpe ()
+@{
+  /* Enable some exceptions.  At startup all exceptions are masked.  */
+  
+  feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
 @}
 @end smallexample
 
+A convenient trick is to compile this something like:
+@smallexample
+gcc -o libtrapfpe.a trapfpe.c
+@end smallexample
+and then use it by adding @samp{-trapfpe} to the @code{g77} command line
+when linking.
+
 @node Nonportable Conversions
 @subsection Nonportable Conversions
 @cindex nonportable conversions
@@ -11355,7 +12184,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
@@ -11373,12 +12202,79 @@ allocation of automatic arrays in heap storage.
 @cindex threads
 @cindex parallel processing
 
-Neither the code produced by @code{g77} nor the @code{libf2c} library
+Neither the code produced by @code{g77} nor the @code{libg2c} library
 are thread-safe, nor does @code{g77} have support for parallel processing
 (other than the instruction-level parallelism available on some
 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
 
@@ -11547,14 +12443,119 @@ 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
+@node Portable Unformatted Files
+@subsection Portable Unformatted Files
+
+@cindex unformatted files
+@cindex file formats
+@cindex binary data
+@cindex byte ordering
+@code{g77} has no facility for exchanging unformatted files with systems
+using different number formats---even differing only in endianness (byte
+order)---or written by other compilers.  Some compilers provide
+facilities at least for doing byte-swapping during unformatted I/O.
+
+It is unrealistic to expect to cope with exchanging unformatted files
+with arbitrary other compiler runtimes, but the @code{g77} runtime
+should at least be able to read files written by @code{g77} on systems
+with different number formats, particularly if they differ only in byte
+order.
+
+In case you do need to write a program to translate to or from
+@code{g77} (@code{libf2c}) unformatted files, they are written as
+follows:
+@table @asis
+@item Sequential
+Unformatted sequential records consist of
+@enumerate
+@item
+A number giving the length of the record contents;
+@item
+the length of record contents again (for backspace).
+@end enumerate
 
-@code{g77} should offer run-time bounds-checking of array/subscript references
-in a fashion similar to @code{f2c}.
+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.
+Consequently such files cannot be exchanged between 64-bit and 32-bit
+systems, even with the same basic number format.
+@item Direct access
+Unformatted direct access files form a byte stream of length
+@var{records}*@var{recl} bytes, where @var{records} is the maximum
+record number (@code{REC=@var{records}}) written and @var{recl} is the
+record length in bytes specified in the @code{OPEN} statement
+(@code{RECL=@var{recl}}).  Data appear in the records as determined by
+the relevant @code{WRITE} statement.  Dummy records with arbitrary
+contents appear in the file in place of records which haven't been
+written.
+@end table
 
-Note that @code{g77} already warns about references to out-of-bounds
-elements of arrays when it detects these at compile time.
+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 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}.
+
+If necessary, it is possible to do byte-oriented i/o with @code{g77}'s
+@code{FGETC} and @code{FPUTC} intrinsics.  Byte-swapping can be done in
+Fortran by equivalencing larger sized variables to an @code{INTEGER*1}
+array or a set of scalars.
+
+@cindex HDF
+@cindex PDB
+If you need to exchange binary data between arbitrary system and
+compiler variations, we recommend using a portable binary format with
+Fortran bindings, such as NCSA's HDF (@uref{http://hdf.ncsa.uiuc.edu/})
+or PACT's PDB@footnote{No, not @emph{that} one.}
+(@uref{http://www.llnl.gov/def_sci/pact/pact_homepage.html}).  (Unlike,
+say, CDF or XDR, HDF-like systems write in the native number formats and
+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
@@ -11584,7 +12585,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,
@@ -11604,8 +12605,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
@@ -11667,8 +12668,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},
@@ -11900,7 +12901,8 @@ number---producing different computational results.)
 
 The reason this misfeature is dangerous is that a slight,
 apparently innocuous change to the source code can change
-the computational results.  Consider:
+the computational results.
+Consider:
 
 @smallexample
 REAL ALMOST, CLOSE
@@ -11959,7 +12961,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).
 
@@ -12017,6 +13019,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
@@ -12082,7 +13098,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
@@ -12136,22 +13152,6 @@ Please consider offering useful answers to these questions!
 
 @itemize @bullet
 @item
-How do system administrators and users manage multiple incompatible
-Fortran compilers on their systems?
-How can @code{g77} contribute to this, or at least avoiding
-intefering with it?
-
-Currently, @code{g77} provides rudimentary ways to choose whether to
-overwrite portions of other Fortran compilation systems
-(such as the @code{f77} command and the @code{libf2c} library).
-Is this sufficient?
-What happens when users choose not to overwrite these---does
-@code{g77} work properly in all such installations, picking
-up its own versions, or does it pick up the existing ``alien''
-versions it didn't overwrite with its own, possibly leading
-to subtle bugs?
-
-@item
 @code{LOC()} and other intrinsics are probably somewhat misclassified.
 Is the a need for more precise classification of intrinsics, and if so,
 what are the appropriate groupings?
@@ -12174,7 +13174,7 @@ If it isn't known, then you should report the problem.
 Reporting a bug might help you by bringing a solution to your problem, or
 it might not.
 (If it does not, look in the service directory; see
-@ref{Service}.)
+@ref{Service}.)
 In any case, the principal function of a bug report is
 to help the entire community by making the next version of GNU Fortran work
 better.
@@ -12183,7 +13183,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.
@@ -12297,7 +13297,7 @@ If your code works with any of these combinations, that is not
 proof that the bug isn't in @code{g77}---a @code{g77} bug exposed
 by your code might simply be avoided, or have a different, more subtle
 effect, when different options are used---but it can be a
-strong indicator that your code is making unawarranted assumptions
+strong indicator that your code is making unwarranted assumptions
 about the Fortran dialect and/or underlying machine it is
 being compiled and run on.
 
@@ -12307,10 +13307,10 @@ for information on the @samp{-fno-automatic} and
 their use into selective changes in your own code.
 
 @item
-@pindex ftncheck
+@pindex ftnchek
 Validate your code with @code{ftnchek} or a similar code-checking
 tool.
-@code{ftncheck} can be found at @uref{ftp://ftp.netlib.org/fortran}
+@code{ftnchek} can be found at @uref{ftp://ftp.netlib.org/fortran}
 or @uref{ftp://ftp.dsm.fordham.edu}.
 
 @pindex make
@@ -12385,8 +13385,8 @@ exposes it more readily than other compilers.
 @node Bug Lists
 @section Where to Report Bugs
 @cindex bug report mailing lists
-@kindex egcs-bugs@@cygnus.com
-Send bug reports for GNU Fortran to @email{egcs-bugs@@cygnus.com}.
+@kindex @value{email-bugs}
+Send bug reports for GNU Fortran to @email{@value{email-bugs}}.
 
 Often people think of posting bug reports to a newsgroup instead of
 mailing them.
@@ -12492,24 +13492,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
@@ -12722,7 +13730,7 @@ we should be able to reproduce the crash ourselves.
 If you would like to write bug fixes or improvements for the GNU Fortran
 compiler, that is very helpful.
 Send suggested fixes to the bug report
-mailing list, @email{egcs-bugs@@cygnus.com}.
+mailing list, @email{@value{email-bugs}}.
 
 Please follow these guidelines so we can study your patches efficiently.
 If you don't follow these guidelines, your information might still be
@@ -12847,7 +13855,7 @@ The service directory is found in the file named @file{SERVICE} in the
 GNU CC distribution.
 
 @item
-Send a message to @email{egcs@@cygnus.com}.
+Send a message to @email{@value{email-general}}.
 @end itemize
 
 @end ifset
@@ -12877,17 +13885,17 @@ when compiling most any kind of program.
 @end itemize
 
 @emph{Fortran options} are listed in the file
-@file{gcc/f/lang-options.h},
+@file{@value{path-g77}/lang-options.h},
 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{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
-@code{g77}, is in @file{gcc/f/com.c} and just
-calls @samp{ffe_decode_option}.
+by calling @code{lang_option_decode}, which, for
+@code{g77}, is in @file{@value{path-g77}/com.c} and just
+calls @code{ffe_decode_option}.
 
 If the linked-in front end ``rejects'' a
 particular option passed to it, @file{toplev.c}
@@ -12897,7 +13905,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.
@@ -12910,14 +13918,14 @@ a warning about this would be helpful if it were
 possible.
 
 Code that processes Fortran options is found in
-@file{gcc/f/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.
 
 The defaults for Fortran options are set in their
-global definitions, also found in @file{gcc/f/top.c}.
+global definitions, also found in @file{@value{path-g77}/top.c}.
 Many of these defaults are actually macros defined
-in @file{gcc/f/target.h}, since they might be
+in @file{@value{path-g77}/target.h}, since they might be
 machine-specific.
 However, since, in practice, GNU compilers
 should behave the same way on all configurations
@@ -12927,12 +13935,12 @@ is likely to be deprecated and, ultimately, stopped
 in future versions of @code{g77}.
 
 Accessor macros for Fortran options, used by code
-in the @code{g77} FFE, are defined in @file{gcc/f/top.h}.
+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,
@@ -12940,29 +13948,44 @@ 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{gcc/f/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.
 
 The @samp{-fset-g77-defaults} option is passed to @code{f771}
 automatically because of the specification information
-kept in @file{gcc/f/lang-specs.h}.
+kept in @file{@value{path-g77}/lang-specs.h}.
 This file tells the @code{gcc} command how to recognize,
 in this case, Fortran source files (those to be preprocessed,
 and those that are not), and further, how to invoke the
 appropriate programs (including @code{f771}) to process
 those source files.
 
-It is in @file{gcc/f/lang-specs.h} that @samp{-fset-g77-defaults},
+It is in @file{@value{path-g77}/lang-specs.h} that @samp{-fset-g77-defaults},
 @samp{-fversion}, and other options are passed, as appropriate,
 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
@@ -12971,6 +13994,8 @@ are passed via this mechanism.
 If you want to contribute to @code{g77} by doing research,
 design, specification, documentation, coding, or testing,
 the following information should give you some ideas.
+More relevant information might be available from
+@uref{ftp://alpha.gnu.org/gnu/g77/projects/}.
 
 @menu
 * Efficiency::               Make @code{g77} itself compile code faster.
@@ -12995,7 +14020,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
@@ -13022,11 +14047,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).
@@ -13068,7 +14093,7 @@ the feature-adding work.
 @itemize @bullet
 @item
 Do the equivalent of the trick of putting @samp{extern inline} in front
-of every function definition in @code{libf2c} and #include'ing the resulting
+of every function definition in @code{libg2c} and #include'ing the resulting
 file in @code{f2c}+@code{gcc}---that is, inline all run-time-library functions
 that are at all worth inlining.
 (Some of this has already been done, such as for integral exponentiation.)
@@ -13076,7 +14101,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.)
@@ -13103,7 +14128,7 @@ Among the important things the library would do are:
 @item
 Be a one-stop-shop-type
 library, hence shareable and usable by all, in that what are now
-library-build-time options in @code{libf2c} would be moved at least to the
+library-build-time options in @code{libg2c} would be moved at least to the
 @code{g77} compile phase, if not to finer grains (such as choosing how
 list-directed I/O formatting is done by default at @code{OPEN} time, for
 preconnected units via options or even statements in the main program
@@ -13124,7 +14149,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
@@ -13146,7 +14171,7 @@ very useful.
 
 @itemize @bullet
 @item
-A new library (replacing @code{libf2c}) should improve portability as well as
+A new library (replacing @code{libg2c}) should improve portability as well as
 produce more optimal code.
 Further, @code{g77} and the new library should
 conspire to simplify naming of externals, such as by removing unnecessarily
@@ -13199,12 +14224,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
@@ -13223,7 +14242,7 @@ Support @samp{OPEN(@dots{},KEY=(@dots{}),@dots{})}.
 @item
 Support arbitrary file unit numbers, instead of limiting them
 to 0 through @samp{MXUNIT-1}.
-(This is a @code{libf2c} issue.)
+(This is a @code{libg2c} issue.)
 
 @item
 @samp{OPEN(NOSPANBLOCKS,@dots{})} is treated as
@@ -13247,7 +14266,7 @@ for @code{%FILL} in @code{STRUCTURE} and related syntax,
 whereas the rest of the
 stuff has at least some parsing support.
 This requires either major
-changes to @code{libf2c} or its replacement.
+changes to @code{libg2c} or its replacement.
 
 @item
 F90 and @code{g77} probably disagree about label scoping relative to
@@ -13280,7 +14299,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
@@ -13309,6 +14328,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
 
@@ -13333,13 +14355,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).
 
@@ -13381,22 +14403,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.
@@ -13414,7 +14436,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
@@ -13435,6 +14457,9 @@ END
 is processed in the context of executable, not specification,
 statements.)
 @end itemize
+
+@include ffe.texi
+
 @end ifset
 
 @ifset USING
@@ -13480,6 +14505,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 @code{f771} fails.
+* Y2KBAD::      Use of non-Y2K-compliant intrinsic.
 @end menu
 
 @node CMPAMBIG
@@ -13597,8 +14624,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
@@ -13651,7 +14678,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.
@@ -13827,6 +14853,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
@@ -13835,8 +14863,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.)
 
@@ -13848,7 +14883,7 @@ Consecutive keywords must be separated by spaces, so
 @samp{REALX,Y} is not valid, while @samp{REAL X,Y} is.
 There are no comment lines per se, but @samp{!} starts a
 comment anywhere in a line (other than within a character or
-hollerith constant).
+Hollerith constant).
 
 @xref{Source Form}, for more information.
 
@@ -13878,13 +14913,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
@@ -13902,15 +14937,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.
@@ -13924,7 +14968,7 @@ someone examining the source file itself.
 Examples of errors resulting from preprocessor macro expansion
 include exceeding the line-length limit, improperly starting,
 terminating, or incorporating the apostrophe or double-quote in
-a character constant, improperly forming a hollerith constant,
+a character constant, improperly forming a Hollerith constant,
 and so on.
 
 @xref{Overall Options,,Options Controlling the Kind of Output},
@@ -13945,29 +14989,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
@@ -13978,6 +15047,55 @@ In particular, the code might appear to work on a particular
 system, but have bugs that affect the reliability of the data
 without exhibiting any other outward manifestations of the bugs.
 
+@node LINKFAIL
+@section @code{LINKFAIL}
+
+@noindent
+@smallexample
+If the above command failed due to an unresolved reference
+to strtoul, _strtoul, bsearch, _bsearch, or similar, see
+[info -f g77 M LINKFAIL] (a node in the g77 documentation)
+for information on what causes this, how to work around
+the problem by editing $@{srcdir@}/proj.c, and what else to do.
+@end smallexample
+
+@xref{Missing strtoul or bsearch}, for more information on
+this problem,
+which occurs only in releases of @code{g77}
+based on @code{gcc}.
+(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
+leads to a @samp{Relocation overflow} error.  The GNU linker is not
+recommended on current AIX versions, though; it was developed under a
+now-unsupported version.  This bug is said to be fixed by `update PTF
+U455193 for APAR IX75823'.
+
+Compiling with @samp{-mminimal-toc}
+might solve this problem, e.g.@: by adding
+@smallexample
+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