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

@ignore
@c man begin COPYRIGHT
Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``GNU General Public License'' and ``Funding
Free Software'', the Front-Cover texts being (a) (see below), and with
the Back-Cover Texts being (b) (see below).  A copy of the license is
included in the gfdl(7) man page.
 
(a) The FSF's Front-Cover Text is:

     A GNU Manual

(b) The FSF's Back-Cover Text is:

     You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.
@c man end
@c Set file name and title for the man page.
@setfilename g77
@settitle GNU project Fortran 77 compiler.
@c man begin SYNOPSIS
g77 [@option{-c}|@option{-S}|@option{-E}]
    [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
    [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
    [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
    [@option{-o} @var{outfile}] @var{infile}@dots{}

Only the most useful options are listed here; see below for the
remainder.
@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7),
cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
@file{ld}, @file{binutils} and @file{gdb}.
@c man end
@c man begin BUGS
For instructions on reporting bugs, see
@w{@uref{http://gcc.gnu.org/bugs.html}}.  Use of the @command{gccbug}  
script to report bugs is recommended.
@c man end
@c man begin AUTHOR
See the Info entry for @command{g77} for contributors to GCC and G77@.
@c man end
@end ignore

@node Invoking G77
@chapter GNU Fortran Command Options
@cindex GNU Fortran command options
@cindex command options
@cindex options, GNU Fortran command

@c man begin DESCRIPTION

The @command{g77} command supports all the options supported by the
@command{gcc} command.
@xref{Invoking GCC,,GCC Command Options,gcc,Using the GNU Compiler
Collection (GCC)}, for information
on the non-Fortran-specific aspects of the @command{gcc} command (and,
therefore, the @command{g77} command).

@cindex options, negative forms
@cindex negative forms of options
All @command{gcc} and @command{g77} options
are accepted both by @command{g77} and by @command{gcc}
(as well as any other drivers built at the same time,
such as @command{g++}),
since adding @command{g77} to the @command{gcc} distribution
enables acceptance of @command{g77} options
by all of the relevant drivers.

In some cases, options have positive and negative forms;
the negative form of @option{-ffoo} would be @option{-fno-foo}.
This manual documents only one of these two forms, whichever
one is not the default.

@c man end

@menu
* Option Summary::      Brief list of all @command{g77} options,
                        without explanations.
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Shorthand Options::   Options that are shorthand for other options.
* Fortran Dialect Options::  Controlling the variant of Fortran language
                             compiled.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
* Environment Variables:: Env vars that affect GNU Fortran.
@end menu

@node Option Summary
@section Option Summary

@c man begin OPTIONS

Here is a summary of all the options specific to GNU Fortran, grouped
by type.  Explanations are in the following sections.

@table @emph
@item Overall Options
@xref{Overall Options,,Options Controlling the Kind of Output}.
@gccoptlist{
-fversion  -fset-g77-defaults  -fno-silent}

@item Shorthand Options
@xref{Shorthand Options}.
@gccoptlist{
-ff66  -fno-f66  -ff77  -fno-f77  -fno-ugly}

@item Fortran Language Options
@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect}.
@gccoptlist{
-ffree-form  -fno-fixed-form  -ff90 @gol
-fvxt  -fdollar-ok  -fno-backslash @gol
-fno-ugly-args  -fno-ugly-assign  -fno-ugly-assumed @gol
-fugly-comma  -fugly-complex  -fugly-init  -fugly-logint @gol
-fonetrip  -ftypeless-boz @gol
-fintrin-case-initcap  -fintrin-case-upper @gol
-fintrin-case-lower  -fintrin-case-any @gol
-fmatch-case-initcap  -fmatch-case-upper @gol
-fmatch-case-lower  -fmatch-case-any @gol
-fsource-case-upper  -fsource-case-lower @gol
-fsource-case-preserve @gol
-fsymbol-case-initcap  -fsymbol-case-upper @gol
-fsymbol-case-lower  -fsymbol-case-any @gol
-fcase-strict-upper  -fcase-strict-lower @gol
-fcase-initcap  -fcase-upper  -fcase-lower  -fcase-preserve @gol
-ff2c-intrinsics-delete  -ff2c-intrinsics-hide @gol
-ff2c-intrinsics-disable  -ff2c-intrinsics-enable @gol
-fbadu77-intrinsics-delete  -fbadu77-intrinsics-hide @gol
-fbadu77-intrinsics-disable  -fbadu77-intrinsics-enable @gol
-ff90-intrinsics-delete  -ff90-intrinsics-hide @gol
-ff90-intrinsics-disable  -ff90-intrinsics-enable @gol
-fgnu-intrinsics-delete  -fgnu-intrinsics-hide @gol
-fgnu-intrinsics-disable  -fgnu-intrinsics-enable @gol
-fmil-intrinsics-delete  -fmil-intrinsics-hide @gol
-fmil-intrinsics-disable  -fmil-intrinsics-enable @gol
-funix-intrinsics-delete  -funix-intrinsics-hide @gol
-funix-intrinsics-disable  -funix-intrinsics-enable @gol
-fvxt-intrinsics-delete  -fvxt-intrinsics-hide @gol
-fvxt-intrinsics-disable  -fvxt-intrinsics-enable @gol
-ffixed-line-length-@var{n}  -ffixed-line-length-none}

@item Warning Options
@xref{Warning Options,,Options to Request or Suppress Warnings}.
@gccoptlist{
-fsyntax-only  -pedantic  -pedantic-errors  -fpedantic @gol
-w  -Wno-globals  -Wimplicit  -Wunused  -Wuninitialized @gol
-Wall  -Wsurprising @gol
-Werror  -W}

@item Debugging Options
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
@gccoptlist{
-g}

@item Optimization Options
@xref{Optimize Options,,Options that Control Optimization}.
@gccoptlist{
-malign-double @gol
-ffloat-store  -fforce-mem  -fforce-addr  -fno-inline @gol
-ffast-math  -fstrength-reduce  -frerun-cse-after-loop @gol
-funsafe-math-optimizations -fno-trapping-math @gol
-fexpensive-optimizations  -fdelayed-branch @gol
-fschedule-insns  -fschedule-insn2  -fcaller-saves @gol
-funroll-loops  -funroll-all-loops @gol
-fno-move-all-movables  -fno-reduce-all-givs @gol
-fno-rerun-loop-opt}

@item Directory Options
@xref{Directory Options,,Options for Directory Search}.
@gccoptlist{
-I@var{dir}  -I-}

@item Code Generation Options
@xref{Code Gen Options,,Options for Code Generation Conventions}.
@gccoptlist{
-fno-automatic  -finit-local-zero  -fno-f2c @gol
-ff2c-library  -fno-underscoring  -fno-ident @gol
-fpcc-struct-return  -freg-struct-return @gol
-fshort-double  -fno-common  -fpack-struct @gol
-fzeros  -fno-second-underscore @gol
-femulate-complex @gol
-falias-check  -fargument-alias @gol
-fargument-noalias  -fno-argument-noalias-global @gol
-fno-globals  -fflatten-arrays @gol
-fbounds-check  -ffortran-bounds-check}
@end table

@c man end

@menu
* Overall Options::     Controlling the kind of output:
                        an executable, object files, assembler files,
                        or preprocessed source.
* Shorthand Options::   Options that are shorthand for other options.
* Fortran Dialect Options::  Controlling the variant of Fortran language
                             compiled.
* Warning Options::     How picky should the compiler be?
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
* Optimize Options::    How much optimization?
* Preprocessor Options:: Controlling header files and macro definitions.
                         Also, getting dependency information for Make.
* Directory Options::   Where to find header files and libraries.
                        Where to find the compiler executable files.
* Code Gen Options::    Specifying conventions for function calls, data layout
                        and register usage.
@end menu

@node Overall Options
@section Options Controlling the Kind of Output
@cindex overall options
@cindex options, overall

@c man begin OPTIONS

Compilation can involve as many as four stages: preprocessing, code
generation (often what is really meant by the term ``compilation''),
assembly, and linking, always in that order.  The first three
stages apply to an individual source file, and end by producing an
object file; linking combines all the object files (those newly
compiled, and those specified as input) into an executable file.

@cindex file name suffix
@cindex suffixes, file name
@cindex file name extension
@cindex extensions, file name
@cindex file type
@cindex types, file
For any given input file, the file name suffix determines what kind of
program is contained in the file---that is, the language in which the
program is written is generally indicated by the suffix.
Suffixes specific to GNU Fortran are listed below.
@xref{Overall Options,,Options Controlling the Kind of
Output,gcc,Using the GNU Compiler Collection (GCC)}, for
information on suffixes recognized by GNU CC.

@table @gcctabopt
@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 @command{cpp} by using
@option{-x f77-cpp-input}.
@xref{LEX}.

@cindex preprocessor
@cindex C preprocessor
@cindex cpp preprocessor
@cindex Fortran preprocessor
@cindex cpp program
@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
@command{cpp}, which is part of GNU CC).

Note that preprocessing is not extended to the contents of
files included by the @code{INCLUDE} directive---the @code{#include}
preprocessor directive must be used instead.

@cindex Ratfor preprocessor
@cindex programs, @command{ratfor}
@cindex @samp{.r} filename suffix
@cindex @command{ratfor}
@item @var{file}.r
Ratfor source code, which must be preprocessed by the @command{ratfor}
command, which is available separately (as it is not yet part of the GNU
Fortran distribution).
One version in Fortran, adapted for use with @command{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}
nomenclature.
Users of other operating systems, especially those that cannot
distinguish upper-case
letters from lower-case letters in their file names, typically use
the @file{@var{file}.for} and @file{@var{file}.fpp} nomenclature.

@cindex #define
@cindex #include
@cindex #if
Use of the preprocessor @command{cpp} allows use of C-like
constructs such as @code{#define} and @code{#include}, but can
lead to unexpected, even mistaken, results due to Fortran's source file
format.
It is recommended that use of the C preprocessor
be limited to @code{#include} and, in
conjunction with @code{#define}, only @code{#if} and related directives,
thus avoiding in-line macro expansion entirely.
This recommendation applies especially
when using the traditional fixed source form.
With free source form,
fewer unexpected transformations are likely to happen, but use of
constructs such as Hollerith and character constants can nevertheless
present problems, especially when these are continued across multiple
source lines.
These problems result, primarily, from differences between the way
such constants are interpreted by the C preprocessor and by a Fortran
compiler.

Another example of a problem that results from using the C preprocessor
is that a Fortran comment line that happens to contain any
characters ``interesting'' to the C preprocessor,
such as a backslash at the end of the line,
is not recognized by the preprocessor as a comment line,
so instead of being passed through ``raw'',
the line is edited according to the rules for the preprocessor.
For example, the backslash at the end of the line is removed,
along with the subsequent newline, resulting in the next
line being effectively commented out---unfortunate if that
line is a non-comment line of important code!

@emph{Note:} The @option{-traditional} and @option{-undef} flags are supplied
to @command{cpp} by default, to help avoid unpleasant surprises.
@xref{Preprocessor Options,,Options Controlling the Preprocessor,
gcc,Using the GNU Compiler Collection (GCC)}.
This means that ANSI C preprocessor features (such as the @samp{#}
operator) aren't available, and only variables in the C reserved
namespace (generally, names with a leading underscore) are liable to
substitution by C predefines.
Thus, if you want to do system-specific
tests, use, for example, @samp{#ifdef __linux__} rather than @samp{#ifdef linux}.
Use the @option{-v} option to see exactly how the preprocessor is invoked.

@cindex /*
Unfortunately, the @option{-traditional} flag will not avoid an error from
anything that @command{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 @command{g77} and @command{gcc} commands in a GNU Fortran installation:

@table @gcctabopt
@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 @command{g77} version of the compiler phase is reported,
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 @option{-v} or @option{--verbose}
is specified as a command-line option for @command{g77} or @command{gcc}
and when the resulting commands compile Fortran source files.

In GCC 3.1, this is changed back to the behaviour @command{gcc} displays
for @samp{.c} 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 @command{gcc} options are to apply to Fortran
compilations, and avoid running internal consistency checks
that might take some time.

This option is supplied automatically when compiling Fortran code
via the @command{g77} or @command{gcc} command.
The description of this option is provided so that users seeing
it in the output of, say, @samp{g77 -v} understand why it is
there.

@cindex modifying @command{g77}
@cindex @command{g77}, modifying
Also, developers who run @code{f771} directly might want to specify it
by hand to get the same defaults as they would running @code{f771}
via @command{g77} or @command{gcc}
However, such developers should, after linking a new @code{f771}
executable, invoke it without this option once,
e.g. via @kbd{./f771 -quiet < /dev/null},
to ensure that they have not introduced any
internal inconsistencies (such as in the table of
intrinsics) before proceeding---@command{g77} will crash
with a diagnostic if it detects an inconsistency.

@cindex -fno-silent option
@cindex options, -fno-silent
@cindex f2c compatibility
@cindex compatibility, f2c
@cindex status, compilation
@cindex compilation, status
@cindex reporting compilation status
@cindex printing compilation status
@item -fno-silent
Print (to @code{stderr}) the names of the program units as
they are compiled, in a form similar to that used by popular
UNIX @command{f77} implementations and @command{f2c}
@end table

@xref{Overall Options,,Options Controlling the Kind of Output,
gcc,Using the GNU Compiler Collection (GCC)}, for information
on more options that control the overall operation of the @command{gcc} command
(and, by extension, the @command{g77} command).

@node Shorthand Options
@section Shorthand Options
@cindex shorthand options
@cindex options, shorthand
@cindex macro options
@cindex options, macro

The following options serve as ``shorthand''
for other options accepted by the compiler:

@table @gcctabopt
@cindex -fugly option
@cindex options, -fugly
@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:

@smallexample
-fugly-args -fugly-assign -fugly-assumed
-fugly-comma -fugly-complex -fugly-init
-fugly-logint
@end smallexample

These constructs are considered inappropriate to use in new
or well-maintained portable Fortran code, but widely used
in old code.
@xref{Distensions}, for more information.

@cindex -fno-ugly option
@cindex options, -fno-ugly
@item -fno-ugly
@cindex ugly features
@cindex features, ugly
Specify that all ``ugly'' constructs are to be noisily rejected.
Same as:

@smallexample
-fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
-fno-ugly-comma -fno-ugly-complex -fno-ugly-init
-fno-ugly-logint
@end smallexample

@xref{Distensions}, for more information.

@cindex -ff66 option
@cindex options, -ff66
@item -ff66
@cindex FORTRAN 66
@cindex compatibility, FORTRAN 66
Specify that the program is written in idiomatic FORTRAN 66.
Same as @samp{-fonetrip -fugly-assumed}.

The @option{-fno-f66} option is the inverse of @option{-ff66}.
As such, it is the same as @samp{-fno-onetrip -fno-ugly-assumed}.

The meaning of this option is likely to be refined as future
versions of @command{g77} provide more compatibility with other
existing and obsolete Fortran implementations.

@cindex -ff77 option
@cindex options, -ff77
@item -ff77
@cindex UNIX 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 @command{f2c} product.
Same as @samp{-fbackslash -fno-typeless-boz}.

The meaning of this option is likely to be refined as future
versions of @command{g77} provide more compatibility with other
existing and obsolete Fortran implementations.

@cindex -fno-f77 option
@cindex options, -fno-f77
@item -fno-f77
@cindex UNIX f77
The @option{-fno-f77} option is @emph{not} the inverse
of @option{-ff77}.
It specifies that the program is not written in idiomatic UNIX
FORTRAN 77 or @command{f2c} but in a more widely portable dialect.
@option{-fno-f77} is the same as @option{-fno-backslash}.

The meaning of this option is likely to be refined as future
versions of @command{g77} provide more compatibility with other
existing and obsolete Fortran implementations.
@end table

@node Fortran Dialect Options
@section Options Controlling Fortran Dialect
@cindex dialect options
@cindex language, dialect options
@cindex options, dialect

The following options control the dialect of Fortran
that the compiler accepts:

@table @gcctabopt
@cindex -ffree-form option
@cindex options, -ffree-form
@cindex -fno-fixed-form option
@cindex options, -fno-fixed-form
@cindex source file format
@cindex free form
@cindex fixed form
@cindex Fortran 90, features
@item -ffree-form
@item -fno-fixed-form
Specify that the source file is written in free form
(introduced in Fortran 90) instead of the more-traditional fixed form.

@cindex -ff90 option
@cindex options, -ff90
@cindex Fortran 90, features
@item -ff90
Allow certain Fortran-90 constructs.

This option controls whether certain
Fortran 90 constructs are recognized.
(Other Fortran 90 constructs
might or might not be recognized depending on other options such as
@option{-fvxt}, @option{-ff90-intrinsics-enable}, and the
current level of support for Fortran 90.)

@xref{Fortran 90}, for more information.

@cindex -fvxt option
@cindex options, -fvxt
@item -fvxt
@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)
or VXT Fortran (more like VAX FORTRAN).

The default is @option{-fno-vxt}.
@option{-fvxt} specifies that the VXT Fortran interpretations
for those constructs are to be chosen.

@xref{VXT Fortran}, for more information.

@cindex -fdollar-ok option
@cindex options, -fdollar-ok
@item -fdollar-ok
@cindex dollar sign
@cindex symbol names
@cindex character set
Allow @samp{$} as a valid character in a symbol name.

@cindex -fno-backslash option
@cindex options, -fno-backslash
@item -fno-backslash
@cindex backslash
@cindex character constants
@cindex Hollerith constants
Specify that @samp{\} is not to be specially interpreted in character
and Hollerith constants a la C and many UNIX Fortran compilers.

For example, with @option{-fbackslash} in effect, @samp{A\nB} specifies
three characters, with the second one being newline.
With @option{-fno-backslash}, it specifies four characters,
@samp{A}, @samp{\}, @samp{n}, and @samp{B}.

Note that @command{g77} implements a fairly general form of backslash
processing that is incompatible with the narrower forms supported
by some other compilers.
For example, @samp{'A\003B'} is a three-character string in @command{g77}
whereas other compilers that support backslash might not support
the three-octal-digit form, and thus treat that string as longer
than three characters.

@xref{Backslash in Constants}, for
information on why @option{-fbackslash} is the default
instead of @option{-fno-backslash}.

@cindex -fno-ugly-args option
@cindex options, -fno-ugly-args
@item -fno-ugly-args
Disallow passing Hollerith and typeless constants as actual
arguments (for example, @samp{CALL FOO(4HABCD)}).

@xref{Ugly Implicit Argument Conversion}, for more information.

@cindex -fugly-assign option
@cindex options, -fugly-assign
@item -fugly-assign
Use the same storage for a given variable regardless of
whether it is used to hold an assigned-statement label
(as in @samp{ASSIGN 10 TO I}) or used to hold numeric data
(as in @samp{I = 3}).

@xref{Ugly Assigned Labels}, for more information.

@cindex -fugly-assumed option
@cindex options, -fugly-assumed
@item -fugly-assumed
Assume any dummy array with a final dimension specified as @samp{1}
is really an assumed-size array, as if @samp{*} had been specified
for the final dimension instead of @samp{1}.

For example, @samp{DIMENSION X(1)} is treated as if it
had read @samp{DIMENSION X(*)}.

@xref{Ugly Assumed-Size Arrays}, for more information.

@cindex -fugly-comma option
@cindex options, -fugly-comma
@item -fugly-comma
In an external-procedure invocation,
treat a trailing comma in the argument list
as specification of a trailing null argument,
and treat an empty argument list
as specification of a single null argument.

For example, @samp{CALL FOO(,)} is treated as
@samp{CALL FOO(%VAL(0), %VAL(0))}.
That is, @emph{two} null arguments are specified
by the procedure call when @option{-fugly-comma} is in force.
And @samp{F = FUNC()} is treated as @samp{F = FUNC(%VAL(0))}.

The default behavior, @option{-fno-ugly-comma}, is to ignore
a single trailing comma in an argument list.
So, by default, @samp{CALL FOO(X,)} is treated
exactly the same as @samp{CALL FOO(X)}.

@xref{Ugly Null Arguments}, for more information.

@cindex -fugly-complex option
@cindex options, -fugly-complex
@item -fugly-complex
Do not complain about @samp{REAL(@var{expr})} or
@samp{AIMAG(@var{expr})} when @var{expr} is a @code{COMPLEX}
type other than @code{COMPLEX(KIND=1)}---usually
this is used to permit @code{COMPLEX(KIND=2)}
(@code{DOUBLE COMPLEX}) operands.

The @option{-ff90} option controls the interpretation
of this construct.

@xref{Ugly Complex Part Extraction}, for more information.

@cindex -fno-ugly-init option
@cindex options, -fno-ugly-init
@item -fno-ugly-init
Disallow use of Hollerith and typeless constants as initial
values (in @code{PARAMETER} and @code{DATA} statements), and
use of character constants to
initialize numeric types and vice versa.

For example, @samp{DATA I/'F'/, CHRVAR/65/, J/4HABCD/} is disallowed by
@option{-fno-ugly-init}.

@xref{Ugly Conversion of Initializers}, for more information.

@cindex -fugly-logint option
@cindex options, -fugly-logint
@item -fugly-logint
Treat @code{INTEGER} and @code{LOGICAL} variables and
expressions as potential stand-ins for each other.

For example, automatic conversion between @code{INTEGER} and
@code{LOGICAL} is enabled, for many contexts, via this option.

@xref{Ugly Integer Conversions}, for more information.

@cindex -fonetrip option
@cindex options, -fonetrip
@item -fonetrip
@cindex FORTRAN 66
@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
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 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}.)
Such a loop is called a @dfn{zero-trip loop}.

Prior to ANSI FORTRAN 77, many compilers implemented @code{DO} loops
such that the body of a loop would be executed at least once, even
if the iteration count was zero.
Fortran code written assuming this behavior is said to require
@dfn{one-trip loops}.
For example, some code written to the FORTRAN 66 standard
expects this behavior from its @code{DO} loops, although that
standard did not specify this behavior.

The @option{-fonetrip} option specifies that the source file(s) being
compiled require one-trip loops.

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.

@cindex -ftypeless-boz option
@cindex options, -ftypeless-boz
@cindex prefix-radix constants
@cindex constants, prefix-radix
@cindex constants, types
@cindex types, constants
@item -ftypeless-boz
Specifies that prefix-radix non-decimal constants, such as
@samp{Z'ABCD'}, are typeless instead of @code{INTEGER(KIND=1)}.

You can test for yourself whether a particular compiler treats
the prefix form as @code{INTEGER(KIND=1)} or typeless by running the
following program:

@smallexample
EQUIVALENCE (I, R)
R = Z'ABCD1234'
J = Z'ABCD1234'
IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
END
@end smallexample

Reports indicate that many compilers process this form as
@code{INTEGER(KIND=1)}, though a few as typeless, and at least one
based on a command-line option specifying some kind of
compatibility.

@cindex -fintrin-case-initcap option
@cindex options, -fintrin-case-initcap
@item -fintrin-case-initcap
@cindex -fintrin-case-upper option
@cindex options, -fintrin-case-upper
@item -fintrin-case-upper
@cindex -fintrin-case-lower option
@cindex options, -fintrin-case-lower
@item -fintrin-case-lower
@cindex -fintrin-case-any option
@cindex options, -fintrin-case-any
@item -fintrin-case-any
Specify expected case for intrinsic names.
@option{-fintrin-case-lower} is the default.

@cindex -fmatch-case-initcap option
@cindex options, -fmatch-case-initcap
@item -fmatch-case-initcap
@cindex -fmatch-case-upper option
@cindex options, -fmatch-case-upper
@item -fmatch-case-upper
@cindex -fmatch-case-lower option
@cindex options, -fmatch-case-lower
@item -fmatch-case-lower
@cindex -fmatch-case-any option
@cindex options, -fmatch-case-any
@item -fmatch-case-any
Specify expected case for keywords.
@option{-fmatch-case-lower} is the default.

@cindex -fsource-case-upper option
@cindex options, -fsource-case-upper
@item -fsource-case-upper
@cindex -fsource-case-lower option
@cindex options, -fsource-case-lower
@item -fsource-case-lower
@cindex -fsource-case-preserve option
@cindex options, -fsource-case-preserve
@item -fsource-case-preserve
Specify whether source text other than character and Hollerith constants
is to be translated to uppercase, to lowercase, or preserved as is.
@option{-fsource-case-lower} is the default.

@cindex -fsymbol-case-initcap option
@cindex options, -fsymbol-case-initcap
@item -fsymbol-case-initcap
@cindex -fsymbol-case-upper option
@cindex options, -fsymbol-case-upper
@item -fsymbol-case-upper
@cindex -fsymbol-case-lower option
@cindex options, -fsymbol-case-lower
@item -fsymbol-case-lower
@cindex -fsymbol-case-any option
@cindex options, -fsymbol-case-any
@item -fsymbol-case-any
Specify valid cases for user-defined symbol names.
@option{-fsymbol-case-any} is the default.

@cindex -fcase-strict-upper option
@cindex options, -fcase-strict-upper
@item -fcase-strict-upper
Same as @samp{-fintrin-case-upper -fmatch-case-upper -fsource-case-preserve
-fsymbol-case-upper}.
(Requires all pertinent source to be in uppercase.)

@cindex -fcase-strict-lower option
@cindex options, -fcase-strict-lower
@item -fcase-strict-lower
Same as @samp{-fintrin-case-lower -fmatch-case-lower -fsource-case-preserve
-fsymbol-case-lower}.
(Requires all pertinent source to be in lowercase.)

@cindex -fcase-initcap option
@cindex options, -fcase-initcap
@item -fcase-initcap
Same as @samp{-fintrin-case-initcap -fmatch-case-initcap -fsource-case-preserve
-fsymbol-case-initcap}.
(Requires all pertinent source to be in initial capitals,
as in @samp{Print *,SqRt(Value)}.)

@cindex -fcase-upper option
@cindex options, -fcase-upper
@item -fcase-upper
Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-upper
-fsymbol-case-any}.
(Maps all pertinent source to uppercase.)

@cindex -fcase-lower option
@cindex options, -fcase-lower
@item -fcase-lower
Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-lower
-fsymbol-case-any}.
(Maps all pertinent source to lowercase.)

@cindex -fcase-preserve option
@cindex options, -fcase-preserve
@item -fcase-preserve
Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-preserve
-fsymbol-case-any}.
(Preserves all case in user-defined symbols,
while allowing any-case matching of intrinsics and keywords.
For example, @samp{call Foo(i,I)} would pass two @emph{different}
variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)

@cindex -fbadu77-intrinsics-delete option
@cindex options, -fbadu77-intrinsics-delete
@item -fbadu77-intrinsics-delete
@cindex -fbadu77-intrinsics-hide option
@cindex options, -fbadu77-intrinsics-hide
@item -fbadu77-intrinsics-hide
@cindex -fbadu77-intrinsics-disable option
@cindex options, -fbadu77-intrinsics-disable
@item -fbadu77-intrinsics-disable
@cindex -fbadu77-intrinsics-enable option
@cindex options, -fbadu77-intrinsics-enable
@item -fbadu77-intrinsics-enable
@cindex @code{badu77} intrinsics
@cindex intrinsics, @code{badu77}
Specify status of UNIX intrinsics having inappropriate forms.
@option{-fbadu77-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -ff2c-intrinsics-delete option
@cindex options, -ff2c-intrinsics-delete
@item -ff2c-intrinsics-delete
@cindex -ff2c-intrinsics-hide option
@cindex options, -ff2c-intrinsics-hide
@item -ff2c-intrinsics-hide
@cindex -ff2c-intrinsics-disable option
@cindex options, -ff2c-intrinsics-disable
@item -ff2c-intrinsics-disable
@cindex -ff2c-intrinsics-enable option
@cindex options, -ff2c-intrinsics-enable
@item -ff2c-intrinsics-enable
@cindex @command{f2c} intrinsics
@cindex intrinsics, @command{f2c}
Specify status of f2c-specific intrinsics.
@option{-ff2c-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -ff90-intrinsics-delete option
@cindex options, -ff90-intrinsics-delete
@item -ff90-intrinsics-delete
@cindex -ff90-intrinsics-hide option
@cindex options, -ff90-intrinsics-hide
@item -ff90-intrinsics-hide
@cindex -ff90-intrinsics-disable option
@cindex options, -ff90-intrinsics-disable
@item -ff90-intrinsics-disable
@cindex -ff90-intrinsics-enable option
@cindex options, -ff90-intrinsics-enable
@item -ff90-intrinsics-enable
@cindex Fortran 90, intrinsics
@cindex intrinsics, Fortran 90
Specify status of F90-specific intrinsics.
@option{-ff90-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -fgnu-intrinsics-delete option
@cindex options, -fgnu-intrinsics-delete
@item -fgnu-intrinsics-delete
@cindex -fgnu-intrinsics-hide option
@cindex options, -fgnu-intrinsics-hide
@item -fgnu-intrinsics-hide
@cindex -fgnu-intrinsics-disable option
@cindex options, -fgnu-intrinsics-disable
@item -fgnu-intrinsics-disable
@cindex -fgnu-intrinsics-enable option
@cindex options, -fgnu-intrinsics-enable
@item -fgnu-intrinsics-enable
@cindex Digital Fortran features
@cindex @code{COMPLEX} intrinsics
@cindex intrinsics, @code{COMPLEX}
Specify status of Digital's COMPLEX-related intrinsics.
@option{-fgnu-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -fmil-intrinsics-delete option
@cindex options, -fmil-intrinsics-delete
@item -fmil-intrinsics-delete
@cindex -fmil-intrinsics-hide option
@cindex options, -fmil-intrinsics-hide
@item -fmil-intrinsics-hide
@cindex -fmil-intrinsics-disable option
@cindex options, -fmil-intrinsics-disable
@item -fmil-intrinsics-disable
@cindex -fmil-intrinsics-enable option
@cindex options, -fmil-intrinsics-enable
@item -fmil-intrinsics-enable
@cindex MIL-STD 1753
@cindex intrinsics, MIL-STD 1753
Specify status of MIL-STD-1753-specific intrinsics.
@option{-fmil-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -funix-intrinsics-delete option
@cindex options, -funix-intrinsics-delete
@item -funix-intrinsics-delete
@cindex -funix-intrinsics-hide option
@cindex options, -funix-intrinsics-hide
@item -funix-intrinsics-hide
@cindex -funix-intrinsics-disable option
@cindex options, -funix-intrinsics-disable
@item -funix-intrinsics-disable
@cindex -funix-intrinsics-enable option
@cindex options, -funix-intrinsics-enable
@item -funix-intrinsics-enable
@cindex UNIX intrinsics
@cindex intrinsics, UNIX
Specify status of UNIX intrinsics.
@option{-funix-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -fvxt-intrinsics-delete option
@cindex options, -fvxt-intrinsics-delete
@item -fvxt-intrinsics-delete
@cindex -fvxt-intrinsics-hide option
@cindex options, -fvxt-intrinsics-hide
@item -fvxt-intrinsics-hide
@cindex -fvxt-intrinsics-disable option
@cindex options, -fvxt-intrinsics-disable
@item -fvxt-intrinsics-disable
@cindex -fvxt-intrinsics-enable option
@cindex options, -fvxt-intrinsics-enable
@item -fvxt-intrinsics-enable
@cindex VXT intrinsics
@cindex intrinsics, VXT
Specify status of VXT intrinsics.
@option{-fvxt-intrinsics-enable} is the default.
@xref{Intrinsic Groups}.

@cindex -ffixed-line-length-@var{n} option
@cindex options, -ffixed-line-length-@var{n}
@item -ffixed-line-length-@var{n}
@cindex source file format
@cindex lines, length
@cindex length of source lines
@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.

@cindex card image
@cindex extended-source option
Popular values for @var{n} include 72 (the
standard and the default), 80 (card image), and 132 (corresponds
to ``extended-source'' options in some popular compilers).
@var{n} may be @samp{none}, meaning that the entire line is meaningful
and that continued character constants never have implicit spaces appended
to them to fill out the line.
@option{-ffixed-line-length-0} means the same thing as
@option{-ffixed-line-length-none}.

@xref{Source Form}, for more information.
@end table

@node Warning Options
@section Options to Request or Suppress Warnings
@cindex options, warnings
@cindex warnings, suppressing
@cindex messages, warning
@cindex suppressing warnings

Warnings are diagnostic messages that report constructions which
are not inherently erroneous but which are risky or suggest there
might have been an error.

You can request many specific warnings with options beginning @option{-W},
for example @option{-Wimplicit} to request warnings on implicit
declarations.  Each of these specific warning options also has a
negative form beginning @option{-Wno-} to turn off warnings;
for example, @option{-Wno-implicit}.  This manual lists only one of the
two forms, whichever is not the default.

These options control the amount and kinds of warnings produced by GNU
Fortran:

@table @gcctabopt
@cindex syntax checking
@cindex -fsyntax-only option
@cindex options, -fsyntax-only
@item -fsyntax-only
Check the code for syntax errors, but don't do anything beyond that.

@cindex -pedantic option
@cindex options, -pedantic
@item -pedantic
Issue warnings for uses of extensions to ANSI FORTRAN 77.
@option{-pedantic} also applies to C-language constructs where they
occur in GNU Fortran source files, such as use of @samp{\e} in a
character constant within a directive like @samp{#include}.

Valid ANSI FORTRAN 77 programs should compile properly with or without
this option.
However, without this option, certain GNU extensions and traditional
Fortran features are supported as well.
With this option, many of them are rejected.

Some users try to use @option{-pedantic} to check programs for strict ANSI
conformance.
They soon find that it does not do quite what they want---it finds some
non-ANSI practices, but not all.
However, improvements to @command{g77} in this area are welcome.

@cindex -pedantic-errors option
@cindex options, -pedantic-errors
@item -pedantic-errors
Like @option{-pedantic}, except that errors are produced rather than
warnings.

@cindex -fpedantic option
@cindex options, -fpedantic
@item -fpedantic
Like @option{-pedantic}, but applies only to Fortran constructs.

@cindex -w option
@cindex options, -w
@item -w
Inhibit all warning messages.

@cindex -Wno-globals option
@cindex options, -Wno-globals
@item -Wno-globals
@cindex global names, warning
@cindex warnings, global names
Inhibit warnings about use of a name as both a global name
(a subroutine, function, or block data program unit, or a
common block) and implicitly as the name of an intrinsic
in a source file.

Also inhibit warnings about inconsistent invocations and/or
definitions of global procedures (function and subroutines).
Such inconsistencies include different numbers of arguments
and different types of arguments.

@cindex -Wimplicit option
@cindex options, -Wimplicit
@item -Wimplicit
@cindex implicit declaration, warning
@cindex warnings, implicit declaration
@cindex -u option
@cindex /WARNINGS=DECLARATIONS switch
@cindex IMPLICIT NONE, similar effect
@cindex effecting IMPLICIT NONE
Warn whenever a variable, array, or function is implicitly
declared.
Has an effect similar to using the @code{IMPLICIT NONE} statement
in every program unit.
(Some Fortran compilers provide this feature by an option
named @option{-u} or @samp{/WARNINGS=DECLARATIONS}.)

@cindex -Wunused option
@cindex options, -Wunused
@item -Wunused
@cindex unused variables
@cindex variables, unused
Warn whenever a variable is unused aside from its declaration.

@cindex -Wuninitialized option
@cindex options, -Wuninitialized
@item -Wuninitialized
@cindex uninitialized variables
@cindex variables, uninitialized
Warn whenever an automatic variable is used without first being initialized.

These warnings are possible only in optimizing compilation,
because they require data-flow information that is computed only
when optimizing.  If you don't specify @option{-O}, you simply won't
get these warnings.

These warnings occur only for variables that are candidates for
register allocation.  Therefore, they do not occur for a variable
@c that is declared @code{VOLATILE}, or
whose address is taken, or whose size
is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
arrays, even when they are in registers.

Note that there might be no warning about a variable that is used only
to compute a value that itself is never used, because such
computations may be deleted by data-flow analysis before the warnings
are printed.

These warnings are made optional because GNU Fortran is not smart
enough to see all the reasons why the code might be correct
despite appearing to have an error.  Here is one example of how
this can happen:

@example
SUBROUTINE DISPAT(J)
IF (J.EQ.1) I=1
IF (J.EQ.2) I=4
IF (J.EQ.3) I=5
CALL FOO(I)
END
@end example

@noindent
If the value of @code{J} is always 1, 2 or 3, then @code{I} is
always initialized, but GNU Fortran doesn't know this.  Here is
another common case:

@example
SUBROUTINE MAYBE(FLAG)
LOGICAL FLAG
IF (FLAG) VALUE = 9.4
@dots{}
IF (FLAG) PRINT *, VALUE
END
@end example

@noindent
This has no bug because @code{VALUE} is used only if it is set.

@cindex -Wall option
@cindex options, -Wall
@item -Wall
@cindex all warnings
@cindex warnings, all
The @option{-Wunused} and @option{-Wuninitialized} options combined.
These are all the
options which pertain to usage that we recommend avoiding and that we
believe is easy to avoid.
(As more warnings are added to @command{g77} some might
be added to the list enabled by @option{-Wall}.)
@end table

The remaining @option{-W@dots{}} options are not implied by @option{-Wall}
because they warn about constructions that we consider reasonable to
use, on occasion, in clean programs.

@table @gcctabopt
@c @item -W
@c Print extra warning messages for these events:
@c
@c @itemize @bullet
@c @item
@c If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
@c arguments.
@c
@c @end itemize
@c
@cindex -Wsurprising option
@cindex options, -Wsurprising
@item -Wsurprising
Warn about ``suspicious'' constructs that are interpreted
by the compiler in a way that might well be surprising to
someone reading the code.
These differences can result in subtle, compiler-dependent
(even machine-dependent) behavioral differences.
The constructs warned about include:

@itemize @bullet
@item
Expressions having two arithmetic operators in a row, such
as @samp{X*-Y}.
Such a construct is nonstandard, and can produce
unexpected results in more complicated situations such
as @samp{X**-Y*Z}.
@command{g77} along with many other compilers, interprets
this example differently than many programmers, and a few
other compilers.
Specifically, @command{g77} interprets @samp{X**-Y*Z} as
@samp{(X**(-Y))*Z}, while others might think it should
be interpreted as @samp{X**(-(Y*Z))}.

A revealing example is the constant expression @samp{2**-2*1.},
which @command{g77} evaluates to .25, while others might evaluate
it to 0., the difference resulting from the way precedence affects
type promotion.

(The @option{-fpedantic} option also warns about expressions
having two arithmetic operators in a row.)

@item
Expressions with a unary minus followed by an operand and then
a binary operator other than plus or minus.
For example, @samp{-2**2} produces a warning, because
the precedence is @samp{-(2**2)}, yielding -4, not
@samp{(-2)**2}, which yields 4, and which might represent
what a programmer expects.

An example of an expression producing different results
in a surprising way is @samp{-I*S}, where @var{I} holds
the value @samp{-2147483648} and @var{S} holds @samp{0.5}.
On many systems, negating @var{I} results in the same
value, not a positive number, because it is already the
lower bound of what an @code{INTEGER(KIND=1)} variable can hold.
So, the expression evaluates to a positive number, while
the ``expected'' interpretation, @samp{(-I)*S}, would
evaluate to a negative number.

Even cases such as @samp{-I*J} produce warnings,
even though, in most configurations and situations,
there is no computational difference between the
results of the two interpretations---the purpose
of this warning is to warn about differing interpretations
and encourage a better style of coding, not to identify
only those places where bugs might exist in the user's
code.

@cindex DO statement
@cindex statements, DO
@item
@code{DO} loops with @code{DO} variables that are not
of integral type---that is, using @code{REAL}
variables as loop control variables.
Although such loops can be written to work in the
``obvious'' way, the way @command{g77} is required by the
Fortran standard to interpret such code is likely to
be quite different from the way many programmers expect.
(This is true of all @code{DO} loops, but the differences
are pronounced for non-integral loop control variables.)

@xref{Loops}, for more information.
@end itemize

@cindex -Werror option
@cindex options, -Werror
@item -Werror
Make all warnings into errors.

@cindex -W option
@cindex options, -W
@item -W
@cindex extra warnings
@cindex warnings, extra
Turns on ``extra warnings'' and, if optimization is specified
via @option{-O}, the @option{-Wuninitialized} option.
(This might change in future versions of @command{g77}

``Extra warnings'' are issued for:

@itemize @bullet
@item
@cindex unused parameters
@cindex parameters, unused
@cindex unused arguments
@cindex arguments, unused
@cindex unused dummies
@cindex dummies, unused
Unused parameters to a procedure (when @option{-Wunused} also is
specified).

@item
@cindex overflow
Overflows involving floating-point constants (not available
for certain configurations).
@end itemize
@end table

@xref{Warning Options,,Options to Request or Suppress Warnings,
gcc,Using the GNU Compiler Collection (GCC)}, for information on more
options offered
by the GBE shared by @command{g77} @command{gcc} and other GNU compilers.

Some of these have no effect when compiling programs written in Fortran:

@table @gcctabopt
@cindex -Wcomment option
@cindex options, -Wcomment
@item -Wcomment
@cindex -Wformat option
@cindex options, -Wformat
@item -Wformat
@cindex -Wparentheses option
@cindex options, -Wparentheses
@item -Wparentheses
@cindex -Wswitch option
@cindex options, -Wswitch
@item -Wswitch
@cindex -Wtraditional option
@cindex options, -Wtraditional
@item -Wtraditional
@cindex -Wshadow option
@cindex options, -Wshadow
@item -Wshadow
@cindex -Wid-clash-@var{len} option
@cindex options, -Wid-clash-@var{len}
@item -Wid-clash-@var{len}
@cindex -Wlarger-than-@var{len} option
@cindex options, -Wlarger-than-@var{len}
@item -Wlarger-than-@var{len}
@cindex -Wconversion option
@cindex options, -Wconversion
@item -Wconversion
@cindex -Waggregate-return option
@cindex options, -Waggregate-return
@item -Waggregate-return
@cindex -Wredundant-decls option
@cindex options, -Wredundant-decls
@item -Wredundant-decls
@cindex unsupported warnings
@cindex warnings, unsupported
These options all could have some relevant meaning for
GNU Fortran programs, but are not yet supported.
@end table

@node Debugging Options
@section Options for Debugging Your Program or GNU Fortran
@cindex options, debugging
@cindex debugging information options

GNU Fortran has various special options that are used for debugging
either your program or @command{g77}

@table @gcctabopt
@cindex -g option
@cindex options, -g
@item -g
Produce debugging information in the operating system's native format
(stabs, COFF, XCOFF, or DWARF).  GDB can work with this debugging
information.

A sample debugging session looks like this (note the use of the breakpoint):
@smallexample
$ cat gdb.f
      PROGRAM PROG
      DIMENSION A(10)
      DATA A /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./
      A(5) = 4.
      PRINT*,A
      END
$ g77 -g -O gdb.f
$ gdb a.out
...
(gdb) break MAIN__ 
Breakpoint 1 at 0x8048e96: file gdb.f, line 4.
(gdb) run
Starting program: /home/toon/g77-bugs/./a.out 
Breakpoint 1, MAIN__ () at gdb.f:4
4             A(5) = 4.
Current language:  auto; currently fortran
(gdb) print a(5)
$1 = 5
(gdb) step 
5             PRINT*,A
(gdb) print a(5)
$2 = 4
...
@end smallexample
One could also add the setting of the breakpoint and the first run command
to the file @file{.gdbinit} in the current directory, to simplify the debugging
session.
@end table

@xref{Debugging Options,,Options for Debugging Your Program or GCC,
gcc,Using the GNU Compiler Collection (GCC)}, for more information on
debugging options.

@node Optimize Options
@section Options That Control Optimization
@cindex optimize options
@cindex options, optimization

Most Fortran users will want to use no optimization when
developing and testing programs, and use @option{-O} or @option{-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 @option{-O}, i.e.@: you
must use @option{-O} or @option{-O2} to get such diagnostics.

The following flags have particular applicability when
compiling Fortran programs:

@table @gcctabopt
@cindex -malign-double option
@cindex options, -malign-double
@item -malign-double
(Intel x86 architecture only.)

Noticeably improves performance of @command{g77} programs making
heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data
on some systems.
In particular, systems using Pentium, Pentium Pro, 586, and
686 implementations
of the i386 architecture execute programs faster when
@code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data are
aligned on 64-bit boundaries
in memory.

This option can, at least, make benchmark results more consistent
across various system configurations, versions of the program,
and data sets.

@emph{Note:} The warning in the @command{gcc} documentation about
this option does not apply, generally speaking, to Fortran
code compiled by @command{g77}

@xref{Aligned Data}, for more information on alignment issues.

@emph{Also also note:} The negative form of @option{-malign-double}
is @option{-mno-align-double}, not @option{-benign-double}.

@cindex -ffloat-store option
@cindex options, -ffloat-store
@item -ffloat-store
@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.  @option{-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
@item -fforce-mem
@cindex -fforce-addr option
@cindex options, -fforce-addr
@item -fforce-addr
@cindex loops, speeding up
@cindex speed, of loops
Might improve optimization of loops.

@cindex -fno-inline option
@cindex options, -fno-inline
@item -fno-inline
@cindex in-line code
@cindex compilation, in-line
@c DL: Only relevant for -O3? TM: No, statement functions are
@c inlined even at -O1.
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).
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 754 conformance
@cindex conformance, IEEE 754
Might allow some programs designed to not be too dependent
on IEEE behavior for floating-point to run faster, or die trying.
Sets @option{-funsafe-math-optimizations}, and
@option{-fno-trapping-math}.

@cindex -funsafe-math-optimizations option
@cindex options, -funsafe-math-optimizations
@item -funsafe-math-optimizations
Allow optimizations that may be give incorrect results
for certain IEEE inputs.

@cindex -fno-trapping-math option
@cindex options, -fno-trapping-math
@item -fno-trapping-math
Allow the compiler to assume that floating-point arithmetic
will not generate traps on any inputs.  This is useful, for
example, when running a program using IEEE "non-stop"
floating-point arithmetic.

@cindex -fstrength-reduce option
@cindex options, -fstrength-reduce
@item -fstrength-reduce
@cindex loops, speeding up
@cindex speed, of loops
@c DL: normally defaulted?
Might make some loops run faster.

@cindex -frerun-cse-after-loop option
@cindex options, -frerun-cse-after-loop
@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
@item -fdelayed-branch
@cindex -fschedule-insns option
@cindex options, -fschedule-insns
@item -fschedule-insns
@cindex -fschedule-insns2 option
@cindex options, -fschedule-insns2
@item -fschedule-insns2
@cindex -fcaller-saves option
@cindex options, -fcaller-saves
@item -fcaller-saves
Might improve performance on some code.

@cindex -funroll-loops option
@cindex options, -funroll-loops
@item -funroll-loops
@cindex loops, unrolling
@cindex unrolling loops
@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
@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 @option{-funroll-loops}
but possibly slower.

@item -fno-move-all-movables
@cindex -fno-move-all-movables option
@cindex options, -fno-move-all-movables
@item -fno-reduce-all-givs
@cindex -fno-reduce-all-givs option
@cindex options, -fno-reduce-all-givs
@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 @command{g77} based on @command{gcc} version 2.8.

Each of these might improve performance on some code.

Analysis of Fortran code optimization and the resulting
optimizations triggered by the above options were
contributed by Toon Moene (@email{toon@@moene.indiv.nluug.nl}).

These three options are intended to be removed someday, once
they have helped determine the efficacy of various
approaches to improving the performance of Fortran code.

Please let us know how use of these options affects
the performance of your production code.
We're particularly interested in code that runs faster
when these options are @emph{disabled}, and in
non-Fortran code that benefits when they are
@emph{enabled} via the above @command{gcc} command-line options.
@end table

@xref{Optimize Options,,Options That Control Optimization,
gcc,Using the GNU Compiler Collection (GCC)}, for more information on options
to optimize the generated machine code.

@node Preprocessor Options
@section Options Controlling the Preprocessor
@cindex preprocessor options
@cindex options, preprocessor
@cindex cpp program
@cindex programs, cpp

These options control the C preprocessor, which is run on each C source
file before actual compilation.

@xref{Preprocessor Options,,Options Controlling the Preprocessor,
gcc,Using the GNU Compiler Collection (GCC)}, for information on C
preprocessor options.

@cindex INCLUDE directive
@cindex directive, INCLUDE
Some of these options also affect how @command{g77} processes the
@code{INCLUDE} directive.
Since this directive is processed even when preprocessing
is not requested, it is not described in this section.
@xref{Directory Options,,Options for Directory Search}, for
information on how @command{g77} processes the @code{INCLUDE} directive.

However, the @code{INCLUDE} directive does not apply
preprocessing to the contents of the included file itself.

Therefore, any file that contains preprocessor directives
(such as @code{#include}, @code{#define}, and @code{#if})
must be included via the @code{#include} directive, not
via the @code{INCLUDE} directive.
Therefore, any file containing preprocessor directives,
if included, is necessarily included by a file that itself
contains preprocessor directives.

@node Directory Options
@section Options for Directory Search
@cindex directory, options
@cindex options, directory search
@cindex search path

These options affect how the @command{cpp} preprocessor searches
for files specified via the @code{#include} directive.
Therefore, when compiling Fortran programs, they are meaningful
when the preprocessor is used.

@cindex INCLUDE directive
@cindex directive, INCLUDE
Some of these options also affect how @command{g77} searches
for files specified via the @code{INCLUDE} directive,
although files included by that directive are not,
themselves, preprocessed.
These options are:

@table @gcctabopt
@cindex -I- option
@cindex options, -I-
@item -I-
@cindex -Idir option
@cindex options, -Idir
@item -I@var{dir}
@cindex directory, search paths for inclusion
@cindex inclusion, directory search paths for
@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 @command{cpp}
preprocessor).

Note that @option{-I@var{dir}} must be specified @emph{without} any
spaces between @option{-I} and the directory name---that is,
@option{-Ifoo/bar} is valid, but @option{-I foo/bar}
is rejected by the @command{g77} compiler (though the preprocessor supports
the latter form).
@c this is due to toplev.c's inflexible option processing
Also note that the general behavior of @option{-I} and
@code{INCLUDE} is pretty much the same as of @option{-I} with
@code{#include} in the @command{cpp} preprocessor, with regard to
looking for @file{header.gcc} files and other such things.

@xref{Directory Options,,Options for Directory Search,
gcc,Using the GNU Compiler Collection (GCC)}, for information on the
@option{-I} option.
@end table

@node Code Gen Options
@section Options for Code Generation Conventions
@cindex code generation, conventions
@cindex options, code generation
@cindex run-time, options

These machine-independent options control the interface conventions
used in code generation.

Most of them have both positive and negative forms; the negative form
of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
one of the forms is listed---the one which is not the default.  You
can figure out the other form by either removing @option{no-} or adding
it.

@table @gcctabopt
@cindex -fno-automatic option
@cindex options, -fno-automatic
@item -fno-automatic
@cindex SAVE statement
@cindex statements, SAVE
Treat each program unit as if the @code{SAVE} statement was specified
for every local variable and array referenced in it.
Does not affect common blocks.
(Some Fortran compilers provide this option under
the name @option{-static}.)

@cindex -finit-local-zero option
@cindex options, -finit-local-zero
@item -finit-local-zero
@cindex DATA statement
@cindex statements, DATA
@cindex initialization, of local variables
@cindex variables, initialization of
@cindex uninitialized variables
@cindex variables, uninitialized
Specify that variables and arrays that are local to a program unit
(not in a common block and not passed as an argument) are to be initialized
to binary zeros.

Since there is a run-time penalty for initialization of variables
that are not given the @code{SAVE} attribute, it might be a
good idea to also use @option{-fno-automatic} with @option{-finit-local-zero}.

@cindex -fno-f2c option
@cindex options, -fno-f2c
@item -fno-f2c
@cindex @command{f2c} compatibility
@cindex compatibility, @command{f2c}
Do not generate code designed to be compatible with code generated
by @command{f2c} use the GNU calling conventions instead.

The @command{f2c} calling conventions require functions that return
type @code{REAL(KIND=1)} to actually return the C type @code{double},
and functions that return type @code{COMPLEX} to return the
values via an extra argument in the calling sequence that points
to where to store the return value.
Under the GNU calling conventions, such functions simply return
their results as they would in GNU C---@code{REAL(KIND=1)} functions
return the C type @code{float}, and @code{COMPLEX} functions
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{libg2c} library.

However, because the @code{libg2c} library uses @command{f2c}
calling conventions, @command{g77} rejects attempts to pass
intrinsics implemented by routines in this library as actual
arguments when @option{-fno-f2c} is used, to avoid bugs when
they are actually called by code expecting the GNU calling
conventions to work.

For example, @samp{INTRINSIC ABS;CALL FOO(ABS)} is
rejected when @option{-fno-f2c} is in force.
(Future versions of the @command{g77} run-time library might
offer routines that provide GNU-callable versions of the
routines that implement the @command{f2c} intrinsics
that may be passed as actual arguments, so that
valid programs need not be rejected when @option{-fno-f2c}
is used.)

@strong{Caution:} If @option{-fno-f2c} is used when compiling any
source file used in a program, it must be used when compiling
@emph{all} Fortran source files used in that program.

@c seems kinda dumb to tell people about an option they can't use -- jcb
@c then again, we want users building future-compatible libraries with it.
@cindex -ff2c-library option
@cindex options, -ff2c-library
@item -ff2c-library
Specify that use of @code{libg2c} (or the original @code{libf2c})
is required.
This is the default for the current version of @command{g77}

Currently it is not
valid to specify @option{-fno-f2c-library}.
This option is provided so users can specify it in shell
scripts that build programs and libraries that require the
@code{libf2c} library, even when being compiled by future
versions of @command{g77} that might otherwise default to
generating code for an incompatible library.

@cindex -fno-underscoring option
@cindex options, -fno-underscoring
@item -fno-underscoring
@cindex underscore
@cindex symbol names, underscores
@cindex transforming symbol names
@cindex symbol names, transforming
Do not transform names of entities specified in the Fortran
source file by appending underscores to them.

With @option{-funderscoring} in effect, @command{g77} appends two underscores
to names with underscores and one underscore to external names with
no underscores.  (@command{g77} also appends two underscores to internal
names with underscores to avoid naming collisions with external names.
The @option{-fno-second-underscore} option disables appending of the
second underscore in all cases.)

This is done to ensure compatibility with code produced by many
UNIX Fortran compilers, including @command{f2c} which perform the
same transformations.

Use of @option{-fno-underscoring} is not recommended unless you are
experimenting with issues such as integration of (GNU) Fortran into
existing system environments (vis-a-vis existing libraries, tools, and
so on).

For example, with @option{-funderscoring}, and assuming other defaults like
@option{-fcase-lower} and that @samp{j()} and @samp{max_count()} are
external functions while @samp{my_var} and @samp{lvar} are local variables,
a statement like

@smallexample
I = J() + MAX_COUNT (MY_VAR, LVAR)
@end smallexample

@noindent
is implemented as something akin to:

@smallexample
i = j_() + max_count__(&my_var__, &lvar);
@end smallexample

With @option{-fno-underscoring}, the same statement is implemented as:

@smallexample
i = j() + max_count(&my_var, &lvar);
@end smallexample

Use of @option{-fno-underscoring} allows direct specification of
user-defined names while debugging and when interfacing @command{g77}
code with other languages.

Note that just because the names match does @emph{not} mean that the
interface implemented by @command{g77} for an external name matches the
interface implemented by some other language for that same name.
That is, getting code produced by @command{g77} to link to code produced
by some other compiler using this or any other method can be only a
small part of the overall solution---getting the code generated by
both compilers to agree on issues other than naming can require
significant effort, and, unlike naming disagreements, linkers normally
cannot detect disagreements in these other areas.

Also, note that with @option{-fno-underscoring}, the lack of appended
underscores introduces the very real possibility that a user-defined
external name will conflict with a name in a system library, which
could make finding unresolved-reference bugs quite difficult in some
cases---they might occur at program run time, and show up only as
buggy behavior at run time.

In future versions of @command{g77} we hope to improve naming and linking
issues so that debugging always involves using the names as they appear
in the source, even if the names as seen by the linker are mangled to
prevent accidental linking between procedures with incompatible
interfaces.

@cindex -fno-second-underscore option
@cindex options, -fno-second-underscore
@item -fno-second-underscore
@cindex underscore
@cindex symbol names, underscores
@cindex transforming symbol names
@cindex symbol names, transforming
Do not append a second underscore to names of entities specified
in the Fortran source file.

This option has no effect if @option{-fno-underscoring} is
in effect.

Otherwise, with this option, an external name such as @samp{MAX_COUNT}
is implemented as a reference to the link-time external symbol
@samp{max_count_}, instead of @samp{max_count__}.

@cindex -fno-ident option
@cindex options, -fno-ident
@item -fno-ident
Ignore the @samp{#ident} directive.

@cindex -fzeros option
@cindex options, -fzeros
@item -fzeros
Treat initial values of zero as if they were any other value.

As of version 0.5.18, @command{g77} normally treats @code{DATA} and
other statements that are used to specify initial values of zero
for variables and arrays as if no values were actually specified,
in the sense that no diagnostics regarding multiple initializations
are produced.

This is done to speed up compiling of programs that initialize
large arrays to zeros.

Use @option{-fzeros} to revert to the simpler, slower behavior
that can catch multiple initializations by keeping track of
all initializations, zero or otherwise.

@emph{Caution:} Future versions of @command{g77} might disregard this option
(and its negative form, the default) or interpret it somewhat
differently.
The interpretation changes will affect only non-standard
programs; standard-conforming programs should not be affected.

@cindex -femulate-complex option
@cindex options, -femulate-complex
@item -femulate-complex
Implement @code{COMPLEX} arithmetic via emulation,
instead of using the facilities of
the @command{gcc} back end that provide direct support of
@code{complex} arithmetic.

(@command{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.8.1 and @code{egcs} 1.1.2.)

Use @option{-femulate-complex} if you suspect code-generation bugs,
or experience compiler crashes,
that might result from @command{g77} using the @code{COMPLEX} support
in the @command{gcc} back end.
If using that option fixes the bugs or crashes you are seeing,
that indicates a likely @command{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 @command{g77} works in terms of its interfaces to other code,
e.g. that compiled by @command{f2c}

As of GCC version 3.0, this option is not necessary anymore.

@emph{Caution:} Future versions of @command{g77} might ignore both forms
of this option.

@cindex -falias-check option
@cindex options, -falias-check
@cindex -fargument-alias option
@cindex options, -fargument-alias
@cindex -fargument-noalias option
@cindex options, -fargument-noalias
@cindex -fno-argument-noalias-global option
@cindex options, -fno-argument-noalias-global
@item -falias-check
@item -fargument-alias
@item -fargument-noalias
@item -fno-argument-noalias-global
@emph{Version info:}
These options are not supported by
versions of @command{g77} based on @command{gcc} version 2.8.

These options specify to what degree aliasing
(overlap)
is permitted between
arguments (passed as pointers) and @code{COMMON} (external, or
public) storage.

The default for Fortran code, as mandated by the FORTRAN 77 and
Fortran 90 standards, is @option{-fargument-noalias-global}.
The default for code written in the C language family is
@option{-fargument-alias}.

Note that, on some systems, compiling with @option{-fforce-addr} in
effect can produce more optimal code when the default aliasing
options are in effect (and when optimization is enabled).

@xref{Aliasing Assumed To Work}, for detailed information on the implications
of compiling Fortran code that depends on the ability to alias dummy
arguments.

@cindex -fno-globals option
@cindex options, -fno-globals
@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,
that might cause a compiler crash when attempting
to inline a reference to a procedure within a
program unit.
(The diagnostics themselves are still produced, but
as warnings, unless @option{-Wno-globals} is specified,
in which case no relevant diagnostics are produced.)

Further, this option disables such inlining, to
avoid compiler crashes resulting from incorrect
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 which @command{g77} diagnoses.

Use of this option therefore has the effect of
instructing @command{g77} to behave more like it did
up through version 0.5.19.1, when it paid little or
no attention to disagreements between program units
about a procedure's type and argument information,
and when it performed no inlining of procedures
(except statement functions).

Without this option, @command{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 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 @command{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 @command{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),
@command{g77} generates a single check per @emph{subscript} expression.
This catches some cases of potential bugs that @command{f2c} does not,
such as references to below the beginning of an assumed-size array.

@command{g77} also generates checks for @code{CHARACTER} substring references,
something @command{f2c} currently does not do.

Use the new @option{-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,
@command{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 @command{g77} compiler,
the above information should provide adequate diagnostic abilities
to it users.)
@end table

@xref{Code Gen Options,,Options for Code Generation Conventions,
gcc,Using the GNU Compiler Collection (GCC)}, for information on more options
offered by the GBE
shared by @command{g77} @command{gcc} and other GNU compilers.

Some of these do @emph{not} work when compiling programs written in Fortran:

@table @gcctabopt
@cindex -fpcc-struct-return option
@cindex options, -fpcc-struct-return
@item -fpcc-struct-return
@cindex -freg-struct-return option
@cindex options, -freg-struct-return
@item -freg-struct-return
You should not use these except strictly the same way as you
used them to build the version of @code{libg2c} with which
you will be linking all code compiled by @command{g77} with the
same option.

@cindex -fshort-double option
@cindex options, -fshort-double
@item -fshort-double
This probably either has no effect on Fortran programs, or
makes them act loopy.

@cindex -fno-common option
@cindex options, -fno-common
@item -fno-common
Do not use this when compiling Fortran programs,
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{libg2c} library,
at the very least, even if it is built with the same option.
@end table

@c man end

@node Environment Variables
@section Environment Variables Affecting GNU Fortran
@cindex environment variables

@c man begin ENVIRONMENT

GNU Fortran currently does not make use of any environment
variables to control its operation above and beyond those
that affect the operation of @command{gcc}.

@xref{Environment Variables,,Environment Variables Affecting GCC,
gcc,Using the GNU Compiler Collection (GCC)}, for information on environment
variables.

@c man end
