.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "GFORTRAN 1"
.TH GFORTRAN 1 "2011-09-22" "gcc-4.5.3" "GNU"
.SH "NAME"
gfortran \- GNU Fortran compiler
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
gfortran [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR]
         [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
         [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
         [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
         [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
         [\fB\-f\fR\fIoption\fR...]
         [\fB\-m\fR\fImachine-option\fR...]
         [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
.PP
Only the most useful options are listed here; see below for the
remainder.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBgfortran\fR command supports all the options supported by the
\&\fBgcc\fR command.  Only options specific to \s-1GNU\s0 Fortran are documented here.
.PP
All \s-1GCC\s0 and \s-1GNU\s0 Fortran options
are accepted both by \fBgfortran\fR and by \fBgcc\fR
(as well as any other drivers built at the same time,
such as \fBg++\fR),
since adding \s-1GNU\s0 Fortran to the \s-1GCC\s0 distribution
enables acceptance of \s-1GNU\s0 Fortran options
by all of the relevant drivers.
.PP
In some cases, options have positive and negative forms;
the negative form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.
This manual documents only one of these two forms, whichever
one is not the default.
.SH "OPTIONS"
.IX Header "OPTIONS"
Here is a summary of all the options specific to \s-1GNU\s0 Fortran, grouped
by type.  Explanations are in the following sections.
.IP "\fIFortran Language Options\fR" 4
.IX Item "Fortran Language Options"
\&\fB\-fall\-intrinsics  \-ffree\-form  \-fno\-fixed\-form 
\&\-fdollar\-ok  \-fimplicit\-none  \-fmax\-identifier\-length 
\&\-std=\fR\fIstd\fR \fB\-fd\-lines\-as\-code  \-fd\-lines\-as\-comments 
\&\-ffixed\-line\-length\-\fR\fIn\fR  \fB\-ffixed\-line\-length\-none 
\&\-ffree\-line\-length\-\fR\fIn\fR  \fB\-ffree\-line\-length\-none 
\&\-fdefault\-double\-8  \-fdefault\-integer\-8  \-fdefault\-real\-8 
\&\-fcray\-pointer  \-fopenmp  \-fno\-range\-check \-fbackslash \-fmodule\-private\fR
.IP "\fIPreprocessing Options\fR" 4
.IX Item "Preprocessing Options"
\&\fB\-cpp \-dD \-dI \-dM \-dN \-dU \-fworking\-directory 
\&\-imultilib\fR \fIdir\fR \fB\-iprefix\fR \fIfile\fR \fB\-isysroot\fR \fIdir\fR 
\&\fB\-iquote \-isystem\fR \fIdir\fR \fB\-nocpp \-nostdinc \-undef 
\&\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR \fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
\&\fB\-C \-CC \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \fB\-U\fR\fImacro\fR \fB\-H \-P\fR
.IP "\fIError and Warning Options\fR" 4
.IX Item "Error and Warning Options"
\&\fB\-fmax\-errors=\fR\fIn\fR 
\&\fB\-fsyntax\-only  \-pedantic  \-pedantic\-errors 
\&\-Wall  \-Waliasing  \-Wampersand  \-Warray\-bounds \-Wcharacter\-truncation 
\&\-Wconversion \-Wimplicit\-interface  \-Wimplicit\-procedure  \-Wline\-truncation 
\&\-Wintrinsics\-std  \-Wsurprising  \-Wno\-tabs  \-Wunderflow  \-Wunused\-parameter 
\&\-Wintrinsics\-shadow  \-Wno\-align\-commons\fR
.IP "\fIDebugging Options\fR" 4
.IX Item "Debugging Options"
\&\fB\-fdump\-parse\-tree  \-ffpe\-trap=\fR\fIlist\fR 
\&\fB\-fdump\-core \-fbacktrace\fR
.IP "\fIDirectory Options\fR" 4
.IX Item "Directory Options"
\&\fB\-I\fR\fIdir\fR  \fB\-J\fR\fIdir\fR \fB\-fintrinsic\-modules\-path\fR \fIdir\fR
.IP "\fILink Options\fR" 4
.IX Item "Link Options"
\&\fB\-static\-libgfortran\fR
.IP "\fIRuntime Options\fR" 4
.IX Item "Runtime Options"
\&\fB\-fconvert=\fR\fIconversion\fR  \fB\-fno\-range\-check
\&\-frecord\-marker=\fR\fIlength\fR   \fB\-fmax\-subrecord\-length=\fR\fIlength\fR
\&\fB\-fsign\-zero\fR
.IP "\fICode Generation Options\fR" 4
.IX Item "Code Generation Options"
\&\fB\-fno\-automatic  \-ff2c  \-fno\-underscoring 
\&\-fwhole\-file \-fsecond\-underscore 
\&\-fbounds\-check \-fcheck\-array\-temporaries  \-fmax\-array\-constructor =\fR\fIn\fR 
\&\fB\-fcheck=\fR\fI<all|array\-temps|bounds|do|mem|pointer|recursion>\fR
\&\fB\-fmax\-stack\-var\-size=\fR\fIn\fR 
\&\fB\-fpack\-derived  \-frepack\-arrays  \-fshort\-enums  \-fexternal\-blas 
\&\-fblas\-matmul\-limit=\fR\fIn\fR \fB\-frecursive \-finit\-local\-zero 
\&\-finit\-integer=\fR\fIn\fR \fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR 
\&\fB\-finit\-logical=\fR\fI<true|false>\fR \fB\-finit\-character=\fR\fIn\fR 
\&\fB\-fno\-align\-commons \-fno\-protect\-parens\fR
.Sh "Options controlling Fortran dialect"
.IX Subsection "Options controlling Fortran dialect"
The following options control the details of the Fortran dialect
accepted by the compiler:
.IP "\fB\-ffree\-form\fR" 4
.IX Item "-ffree-form"
.PD 0
.IP "\fB\-ffixed\-form\fR" 4
.IX Item "-ffixed-form"
.PD
Specify the layout used by the source file.  The free form layout
was introduced in Fortran 90.  Fixed form was traditionally used in
older Fortran programs.  When neither option is specified, the source
form is determined by the file extension.
.IP "\fB\-fall\-intrinsics\fR" 4
.IX Item "-fall-intrinsics"
This option causes all intrinsic procedures (including the GNU-specific
extensions) to be accepted.  This can be useful with \fB\-std=f95\fR to
force standard-compliance but get access to the full range of intrinsics
available with \fBgfortran\fR.  As a consequence, \fB\-Wintrinsics\-std\fR
will be ignored and no user-defined procedure with the same name as any
intrinsic will be called except when it is explicitly declared \f(CW\*(C`EXTERNAL\*(C'\fR.
.IP "\fB\-fd\-lines\-as\-code\fR" 4
.IX Item "-fd-lines-as-code"
.PD 0
.IP "\fB\-fd\-lines\-as\-comments\fR" 4
.IX Item "-fd-lines-as-comments"
.PD
Enable special treatment for lines beginning with \f(CW\*(C`d\*(C'\fR or \f(CW\*(C`D\*(C'\fR
in fixed form sources.  If the \fB\-fd\-lines\-as\-code\fR option is
given they are treated as if the first column contained a blank.  If the
\&\fB\-fd\-lines\-as\-comments\fR option is given, they are treated as
comment lines.
.IP "\fB\-fdefault\-double\-8\fR" 4
.IX Item "-fdefault-double-8"
Set the \f(CW\*(C`DOUBLE PRECISION\*(C'\fR type to an 8 byte wide type.  If
\&\fB\-fdefault\-real\-8\fR is given, \f(CW\*(C`DOUBLE PRECISION\*(C'\fR would
instead be promoted to 16 bytes if possible, and \fB\-fdefault\-double\-8\fR
can be used to prevent this.  The kind of real constants like \f(CW\*(C`1.d0\*(C'\fR will
not be changed by \fB\-fdefault\-real\-8\fR though, so also
\&\fB\-fdefault\-double\-8\fR does not affect it.
.IP "\fB\-fdefault\-integer\-8\fR" 4
.IX Item "-fdefault-integer-8"
Set the default integer and logical types to an 8 byte wide type.
Do nothing if this is already the default.  This option also affects
the kind of integer constants like \f(CW42\fR.
.IP "\fB\-fdefault\-real\-8\fR" 4
.IX Item "-fdefault-real-8"
Set the default real type to an 8 byte wide type.
Do nothing if this is already the default.  This option also affects
the kind of non-double real constants like \f(CW1.0\fR, and does promote
the default width of \f(CW\*(C`DOUBLE PRECISION\*(C'\fR to 16 bytes if possible, unless
\&\f(CW\*(C`\-fdefault\-double\-8\*(C'\fR is given, too.
.IP "\fB\-fdollar\-ok\fR" 4
.IX Item "-fdollar-ok"
Allow \fB$\fR as a valid non-first character in a symbol name. Symbols 
that start with \fB$\fR are rejected since it is unclear which rules to
apply to implicit typing as different vendors implement different rules.
Using \fB$\fR in \f(CW\*(C`IMPLICIT\*(C'\fR statements is also rejected.
.IP "\fB\-fbackslash\fR" 4
.IX Item "-fbackslash"
Change the interpretation of backslashes in string literals from a single
backslash character to \*(L"C\-style\*(R" escape characters. The following
combinations are expanded \f(CW\*(C`\ea\*(C'\fR, \f(CW\*(C`\eb\*(C'\fR, \f(CW\*(C`\ef\*(C'\fR, \f(CW\*(C`\en\*(C'\fR,
\&\f(CW\*(C`\er\*(C'\fR, \f(CW\*(C`\et\*(C'\fR, \f(CW\*(C`\ev\*(C'\fR, \f(CW\*(C`\e\e\*(C'\fR, and \f(CW\*(C`\e0\*(C'\fR to the \s-1ASCII\s0
characters alert, backspace, form feed, newline, carriage return,
horizontal tab, vertical tab, backslash, and \s-1NUL\s0, respectively.
Additionally, \f(CW\*(C`\ex\*(C'\fR\fInn\fR, \f(CW\*(C`\eu\*(C'\fR\fInnnn\fR and
\&\f(CW\*(C`\eU\*(C'\fR\fInnnnnnnn\fR (where each \fIn\fR is a hexadecimal digit) are
translated into the Unicode characters corresponding to the specified code
points. All other combinations of a character preceded by \e are
unexpanded.
.IP "\fB\-fmodule\-private\fR" 4
.IX Item "-fmodule-private"
Set the default accessibility of module entities to \f(CW\*(C`PRIVATE\*(C'\fR.
Use-associated entities will not be accessible unless they are explicitly
declared as \f(CW\*(C`PUBLIC\*(C'\fR.
.IP "\fB\-ffixed\-line\-length\-\fR\fIn\fR" 4
.IX Item "-ffixed-line-length-n"
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.
.Sp
Popular values for \fIn\fR include 72 (the
standard and the default), 80 (card image), and 132 (corresponding
to \*(L"extended\-source\*(R" options in some popular compilers).
\&\fIn\fR may also be \fBnone\fR, meaning that the entire line is meaningful
and that continued character constants never have implicit spaces appended
to them to fill out the line.
\&\fB\-ffixed\-line\-length\-0\fR means the same thing as
\&\fB\-ffixed\-line\-length\-none\fR.
.IP "\fB\-ffree\-line\-length\-\fR\fIn\fR" 4
.IX Item "-ffree-line-length-n"
Set column after which characters are ignored in typical free-form
lines in the source file. The default value is 132.
\&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful.
\&\fB\-ffree\-line\-length\-0\fR means the same thing as
\&\fB\-ffree\-line\-length\-none\fR.
.IP "\fB\-fmax\-identifier\-length=\fR\fIn\fR" 4
.IX Item "-fmax-identifier-length=n"
Specify the maximum allowed identifier length. Typical values are
31 (Fortran 95) and 63 (Fortran 2003 and Fortran 2008).
.IP "\fB\-fimplicit\-none\fR" 4
.IX Item "-fimplicit-none"
Specify that no implicit typing is allowed, unless overridden by explicit
\&\f(CW\*(C`IMPLICIT\*(C'\fR statements.  This is the equivalent of adding
\&\f(CW\*(C`implicit none\*(C'\fR to the start of every procedure.
.IP "\fB\-fcray\-pointer\fR" 4
.IX Item "-fcray-pointer"
Enable the Cray pointer extension, which provides C\-like pointer
functionality.
.IP "\fB\-fopenmp\fR" 4
.IX Item "-fopenmp"
Enable the OpenMP extensions.  This includes OpenMP \f(CW\*(C`!$omp\*(C'\fR directives
in free form
and \f(CW\*(C`c$omp\*(C'\fR, \f(CW*$omp\fR and \f(CW\*(C`!$omp\*(C'\fR directives in fixed form,
\&\f(CW\*(C`!$\*(C'\fR conditional compilation sentinels in free form
and \f(CW\*(C`c$\*(C'\fR, \f(CW\*(C`*$\*(C'\fR and \f(CW\*(C`!$\*(C'\fR sentinels in fixed form, 
and when linking arranges for the OpenMP runtime library to be linked
in.  The option \fB\-fopenmp\fR implies \fB\-frecursive\fR.
.IP "\fB\-fno\-range\-check\fR" 4
.IX Item "-fno-range-check"
Disable range checking on results of simplification of constant
expressions during compilation.  For example, \s-1GNU\s0 Fortran will give
an error at compile time when simplifying \f(CW\*(C`a = 1. / 0\*(C'\fR.
With this option, no error will be given and \f(CW\*(C`a\*(C'\fR will be assigned
the value \f(CW\*(C`+Infinity\*(C'\fR.  If an expression evaluates to a value
outside of the relevant range of [\f(CW\*(C`\-HUGE()\*(C'\fR:\f(CW\*(C`HUGE()\*(C'\fR],
then the expression will be replaced by \f(CW\*(C`\-Inf\*(C'\fR or \f(CW\*(C`+Inf\*(C'\fR
as appropriate.
Similarly, \f(CW\*(C`DATA i/Z'FFFFFFFF'/\*(C'\fR will result in an integer overflow
on most systems, but with \fB\-fno\-range\-check\fR the value will
\&\*(L"wrap around\*(R" and \f(CW\*(C`i\*(C'\fR will be initialized to \-1 instead.
.IP "\fB\-std=\fR\fIstd\fR" 4
.IX Item "-std=std"
Specify the standard to which the program is expected to conform, which
may be one of \fBf95\fR, \fBf2003\fR, \fBf2008\fR, \fBgnu\fR, or
\&\fBlegacy\fR.  The default value for \fIstd\fR is \fBgnu\fR, which
specifies a superset of the Fortran 95 standard that includes all of the
extensions supported by \s-1GNU\s0 Fortran, although warnings will be given for
obsolete extensions not recommended for use in new code.  The
\&\fBlegacy\fR value is equivalent but without the warnings for obsolete
extensions, and may be useful for old non-standard programs.  The
\&\fBf95\fR, \fBf2003\fR and \fBf2008\fR values specify strict
conformance to the Fortran 95, Fortran 2003 and Fortran 2008 standards,
respectively; errors are given for all extensions beyond the relevant
language standard, and warnings are given for the Fortran 77 features
that are permitted but obsolescent in later standards.
.Sh "Enable and customize preprocessing"
.IX Subsection "Enable and customize preprocessing"
Preprocessor related options. See section 
\&\fBPreprocessing and conditional compilation\fR for more detailed
information on preprocessing in \fBgfortran\fR.
.IP "\fB\-cpp\fR" 4
.IX Item "-cpp"
.PD 0
.IP "\fB\-nocpp\fR" 4
.IX Item "-nocpp"
.PD
Enable preprocessing. The preprocessor is automatically invoked if
the file extension is \fI.fpp\fR, \fI.FPP\fR,  \fI.F\fR, \fI.FOR\fR,
\&\fI.FTN\fR, \fI.F90\fR, \fI.F95\fR, \fI.F03\fR or \fI.F08\fR. Use
this option to manually enable preprocessing of any kind of Fortran file.
.Sp
To disable preprocessing of files with any of the above listed extensions,
use the negative form: \fB\-nocpp\fR.
.Sp
The preprocessor is run in traditional mode, be aware that any
restrictions of the file\-format, e.g. fixed-form line width,
apply for preprocessed output as well.
.IP "\fB\-dM\fR" 4
.IX Item "-dM"
Instead of the normal output, generate a list of \f(CW'#define'\fR
directives for all the macros defined during the execution of the
preprocessor, including predefined macros. This gives you a way
of finding out what is predefined in your version of the preprocessor.
Assuming you have no file \fIfoo.f90\fR, the command
.Sp
.Vb 1
\&          touch foo.f90; gfortran -cpp -dM foo.f90
.Ve
.Sp
will show all the predefined macros.
.IP "\fB\-dD\fR" 4
.IX Item "-dD"
Like \fB\-dM\fR except in two respects: it does not include the
predefined macros, and it outputs both the \f(CW\*(C`#define\*(C'\fR directives
and the result of preprocessing. Both kinds of output go to the
standard output file.
.IP "\fB\-dN\fR" 4
.IX Item "-dN"
Like \fB\-dD\fR, but emit only the macro names, not their expansions.
.IP "\fB\-dU\fR" 4
.IX Item "-dU"
Like \fBdD\fR except that only macros that are expanded, or whose
definedness is tested in preprocessor directives, are output; the 
output is delayed until the use or test of the macro; and \f(CW'#undef'\fR
directives are also output for macros tested but undefined at the time.
.IP "\fB\-dI\fR" 4
.IX Item "-dI"
Output \f(CW'#include'\fR directives in addition to the result
of preprocessing.
.IP "\fB\-fworking\-directory\fR" 4
.IX Item "-fworking-directory"
Enable generation of linemarkers in the preprocessor output that will
let the compiler know the current working directory at the time of
preprocessing. When this option is enabled, the preprocessor will emit,
after the initial linemarker, a second linemarker with the current
working directory followed by two slashes. \s-1GCC\s0 will use this directory,
when it's present in the preprocessed input, as the directory emitted
as the current working directory in some debugging information formats.
This option is implicitly enabled if debugging information is enabled,
but this can be inhibited with the negated form
\&\fB\-fno\-working\-directory\fR. If the \fB\-P\fR flag is present
in the command line, this option has no effect, since no \f(CW\*(C`#line\*(C'\fR
directives are emitted whatsoever.
.IP "\fB\-idirafter\fR \fIdir\fR" 4
.IX Item "-idirafter dir"
Search \fIdir\fR for include files, but do it after all directories
specified with \fB\-I\fR and the standard system directories have
been exhausted. \fIdir\fR is treated as a system include directory.
If dir begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced by
the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
.IP "\fB\-imultilib\fR \fIdir\fR" 4
.IX Item "-imultilib dir"
Use \fIdir\fR as a subdirectory of the directory containing target-specific
\&\*(C+ headers.
.IP "\fB\-iprefix\fR \fIprefix\fR" 4
.IX Item "-iprefix prefix"
Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
options. If the \fIprefix\fR represents a directory, you should include
the final \f(CW'/'\fR.
.IP "\fB\-isysroot\fR \fIdir\fR" 4
.IX Item "-isysroot dir"
This option is like the \fB\-\-sysroot\fR option, but applies only to
header files. See the \fB\-\-sysroot\fR option for more information.
.IP "\fB\-iquote\fR \fIdir\fR" 4
.IX Item "-iquote dir"
Search \fIdir\fR only for header files requested with \f(CW\*(C`#include "file"\*(C'\fR;
they are not searched for \f(CW\*(C`#include <file>\*(C'\fR, before all directories
specified by \fB\-I\fR and before the standard system directories. If
\&\fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced by the
sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
.IP "\fB\-isystem\fR \fIdir\fR" 4
.IX Item "-isystem dir"
Search \fIdir\fR for header files, after all directories specified by
\&\fB\-I\fR but before the standard system directories. Mark it as a
system directory, so that it gets the same special treatment as is
applied to the standard system directories. If \fIdir\fR begins with
\&\f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced by the sysroot prefix;
see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
.IP "\fB\-nostdinc\fR" 4
.IX Item "-nostdinc"
Do not search the standard system directories for header files. Only
the directories you have specified with \fB\-I\fR options (and the
directory of the current file, if appropriate) are searched.
.IP "\fB\-undef\fR" 4
.IX Item "-undef"
Do not predefine any system-specific or GCC-specific macros.
The standard predefined macros remain defined.
.IP "\fB\-A\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-Apredicate=answer"
Make an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
This form is preferred to the older form \-A predicate(answer), which is still
supported, because it does not use shell special characters.
.IP "\fB\-A\-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
.IX Item "-A-predicate=answer"
Cancel an assertion with the predicate \fIpredicate\fR and answer \fIanswer\fR.
.IP "\fB\-C\fR" 4
.IX Item "-C"
Do not discard comments. All comments are passed through to the output
file, except for comments in processed directives, which are deleted
along with the directive.
.Sp
You should be prepared for side effects when using \fB\-C\fR; it causes
the preprocessor to treat comments as tokens in their own right. For example,
comments appearing at the start of what would be a directive line have the
effect of turning that line into an ordinary source line, since the first
token on the line is no longer a \f(CW'#'\fR.
.Sp
Warning: this currently handles C\-Style comments only. The preprocessor
does not yet recognize Fortran-style comments.
.IP "\fB\-CC\fR" 4
.IX Item "-CC"
Do not discard comments, including during macro expansion. This is like
\&\fB\-C\fR, except that comments contained within macros are also passed
through to the output file where the macro is expanded.
.Sp
In addition to the side-effects of the \fB\-C\fR option, the \fB\-CC\fR
option causes all \*(C+\-style comments inside a macro to be converted to C\-style
comments. This is to prevent later use of that macro from inadvertently
commenting out the remainder of the source line. The \fB\-CC\fR option
is generally used to support lint comments.
.Sp
Warning: this currently handles C\- and \*(C+\-Style comments only. The
preprocessor does not yet recognize Fortran-style comments.
.IP "\fB\-D\fR\fIname\fR" 4
.IX Item "-Dname"
Predefine name as a macro, with definition \f(CW1\fR.
.IP "\fB\-D\fR\fIname\fR\fB=\fR\fIdefinition\fR" 4
.IX Item "-Dname=definition"
The contents of \fIdefinition\fR are tokenized and processed as if they
appeared during translation phase three in a \f(CW'#define'\fR directive.
In particular, the definition will be truncated by embedded newline
characters.
.Sp
If you are invoking the preprocessor from a shell or shell-like program
you may need to use the shell's quoting syntax to protect characters such
as spaces that have a meaning in the shell syntax.
.Sp
If you wish to define a function-like macro on the command line, write
its argument list with surrounding parentheses before the equals sign
(if any). Parentheses are meaningful to most shells, so you will need
to quote the option. With sh and csh, \f(CW\*(C`\-D'name(args...)=definition'\*(C'\fR
works.
.Sp
\&\fB\-D\fR and \fB\-U\fR options are processed in the order they are
given on the command line. All \-imacros file and \-include file options
are processed after all \-D and \-U options.
.IP "\fB\-H\fR" 4
.IX Item "-H"
Print the name of each header file used, in addition to other normal
activities. Each name is indented to show how deep in the \f(CW'#include'\fR
stack it is.
.IP "\fB\-P\fR" 4
.IX Item "-P"
Inhibit generation of linemarkers in the output from the preprocessor.
This might be useful when running the preprocessor on something that
is not C code, and will be sent to a program which might be confused
by the linemarkers.
.IP "\fB\-U\fR\fIname\fR" 4
.IX Item "-Uname"
Cancel any previous definition of \fIname\fR, either built in or provided
with a \fB\-D\fR option.
.Sh "Options to request or suppress errors and warnings"
.IX Subsection "Options to request or suppress errors and warnings"
Errors are diagnostic messages that report that the \s-1GNU\s0 Fortran compiler
cannot compile the relevant piece of source code.  The compiler will
continue to process the program in an attempt to report further errors
to aid in debugging, but will not produce any compiled output.  
.PP
Warnings are diagnostic messages that report constructions which
are not inherently erroneous but which are risky or suggest there is
likely to be a bug in the program.  Unless \fB\-Werror\fR is specified,
they do not prevent compilation of the program.
.PP
You can request many specific warnings with options beginning \fB\-W\fR,
for example \fB\-Wimplicit\fR to request warnings on implicit
declarations.  Each of these specific warning options also has a
negative form beginning \fB\-Wno\-\fR to turn off warnings;
for example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
two forms, whichever is not the default.
.PP
These options control the amount and kinds of errors and warnings produced
by \s-1GNU\s0 Fortran:
.IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
.IX Item "-fmax-errors=n"
Limits the maximum number of error messages to \fIn\fR, at which point
\&\s-1GNU\s0 Fortran bails out rather than attempting to continue processing the
source code.  If \fIn\fR is 0, there is no limit on the number of error
messages produced.
.IP "\fB\-fsyntax\-only\fR" 4
.IX Item "-fsyntax-only"
Check the code for syntax errors, but don't actually compile it.  This
will generate module files for each module present in the code, but no
other output file.
.IP "\fB\-pedantic\fR" 4
.IX Item "-pedantic"
Issue warnings for uses of extensions to Fortran 95.
\&\fB\-pedantic\fR also applies to C\-language constructs where they
occur in \s-1GNU\s0 Fortran source files, such as use of \fB\ee\fR in a
character constant within a directive like \f(CW\*(C`#include\*(C'\fR.
.Sp
Valid Fortran 95 programs should compile properly with or without
this option.
However, without this option, certain \s-1GNU\s0 extensions and traditional
Fortran features are supported as well.
With this option, many of them are rejected.
.Sp
Some users try to use \fB\-pedantic\fR to check programs for conformance.
They soon find that it does not do quite what they want\-\-\-it finds some
nonstandard practices, but not all.
However, improvements to \s-1GNU\s0 Fortran in this area are welcome.
.Sp
This should be used in conjunction with \fB\-std=f95\fR,
\&\fB\-std=f2003\fR or \fB\-std=f2008\fR.
.IP "\fB\-pedantic\-errors\fR" 4
.IX Item "-pedantic-errors"
Like \fB\-pedantic\fR, except that errors are produced rather than
warnings.
.IP "\fB\-Wall\fR" 4
.IX Item "-Wall"
Enables commonly used warning options pertaining to usage that
we recommend avoiding and that we believe are easy to avoid.
This currently includes \fB\-Waliasing\fR,
\&\fB\-Wampersand\fR, \fB\-Wsurprising\fR, \fB\-Wintrinsics\-std\fR,
\&\fB\-Wno\-tabs\fR, \fB\-Wintrinsic\-shadow\fR and \fB\-Wline\-truncation\fR.
.IP "\fB\-Waliasing\fR" 4
.IX Item "-Waliasing"
Warn about possible aliasing of dummy arguments. Specifically, it warns
if the same actual argument is associated with a dummy argument with
\&\f(CW\*(C`INTENT(IN)\*(C'\fR and a dummy argument with \f(CW\*(C`INTENT(OUT)\*(C'\fR in a call
with an explicit interface.
.Sp
The following example will trigger the warning.
.Sp
.Vb 7
\&          interface
\&            subroutine bar(a,b)
\&              integer, intent(in) :: a
\&              integer, intent(out) :: b
\&            end subroutine
\&          end interface
\&          integer :: a
.Ve
.Sp
.Vb 1
\&          call bar(a,a)
.Ve
.IP "\fB\-Wampersand\fR" 4
.IX Item "-Wampersand"
Warn about missing ampersand in continued character constants. The warning is
given with \fB\-Wampersand\fR, \fB\-pedantic\fR, \fB\-std=f95\fR,
\&\fB\-std=f2003\fR and \fB\-std=f2008\fR. Note: With no ampersand
given in a continued character constant, \s-1GNU\s0 Fortran assumes continuation
at the first non\-comment, non-whitespace character after the ampersand
that initiated the continuation.
.IP "\fB\-Warray\-temporaries\fR" 4
.IX Item "-Warray-temporaries"
Warn about array temporaries generated by the compiler.  The information
generated by this warning is sometimes useful in optimization, in order to
avoid such temporaries.
.IP "\fB\-Wcharacter\-truncation\fR" 4
.IX Item "-Wcharacter-truncation"
Warn when a character assignment will truncate the assigned string.
.IP "\fB\-Wline\-truncation\fR" 4
.IX Item "-Wline-truncation"
Warn when a source code line will be truncated.
.IP "\fB\-Wconversion\fR" 4
.IX Item "-Wconversion"
Warn about implicit conversions between different types.
.IP "\fB\-Wimplicit\-interface\fR" 4
.IX Item "-Wimplicit-interface"
Warn if a procedure is called without an explicit interface.
Note this only checks that an explicit interface is present.  It does not
check that the declared interfaces are consistent across program units.
.IP "\fB\-Wimplicit\-procedure\fR" 4
.IX Item "-Wimplicit-procedure"
Warn if a procedure is called that has neither an explicit interface
nor has been declared as \f(CW\*(C`EXTERNAL\*(C'\fR.
.IP "\fB\-Wintrinsics\-std\fR" 4
.IX Item "-Wintrinsics-std"
Warn if \fBgfortran\fR finds a procedure named like an intrinsic not
available in the currently selected standard (with \fB\-std\fR) and treats
it as \f(CW\*(C`EXTERNAL\*(C'\fR procedure because of this.  \fB\-fall\-intrinsics\fR can
be used to never trigger this behavior and always link to the intrinsic
regardless of the selected standard.
.IP "\fB\-Wsurprising\fR" 4
.IX Item "-Wsurprising"
Produce a warning when \*(L"suspicious\*(R" code constructs are encountered.
While technically legal these usually indicate that an error has been made.
.Sp
This currently produces a warning under the following circumstances:
.RS 4
.IP "*" 4
An \s-1INTEGER\s0 \s-1SELECT\s0 construct has a \s-1CASE\s0 that can never be matched as its
lower value is greater than its upper value.
.IP "*" 4
A \s-1LOGICAL\s0 \s-1SELECT\s0 construct has three \s-1CASE\s0 statements.
.IP "*" 4
A \s-1TRANSFER\s0 specifies a source that is shorter than the destination.
.IP "*" 4
The type of a function result is declared more than once with the same type.  If
\&\fB\-pedantic\fR or standard-conforming mode is enabled, this is an error.
.IP "*" 4
A \f(CW\*(C`CHARACTER\*(C'\fR variable is declared with negative length.
.RE
.RS 4
.RE
.IP "\fB\-Wtabs\fR" 4
.IX Item "-Wtabs"
By default, tabs are accepted as whitespace, but tabs are not members
of the Fortran Character Set.  For continuation lines, a tab followed
by a digit between 1 and 9 is supported.  \fB\-Wno\-tabs\fR will cause
a warning to be issued if a tab is encountered. Note, \fB\-Wno\-tabs\fR
is active for \fB\-pedantic\fR, \fB\-std=f95\fR, \fB\-std=f2003\fR,
\&\fB\-std=f2008\fR and \fB\-Wall\fR.
.IP "\fB\-Wunderflow\fR" 4
.IX Item "-Wunderflow"
Produce a warning when numerical constant expressions are
encountered, which yield an \s-1UNDERFLOW\s0 during compilation.
.IP "\fB\-Wintrinsic\-shadow\fR" 4
.IX Item "-Wintrinsic-shadow"
Warn if a user-defined procedure or module procedure has the same name as an
intrinsic; in this case, an explicit interface or \f(CW\*(C`EXTERNAL\*(C'\fR or
\&\f(CW\*(C`INTRINSIC\*(C'\fR declaration might be needed to get calls later resolved to
the desired intrinsic/procedure.
.IP "\fB\-Wunused\-parameter\fR" 4
.IX Item "-Wunused-parameter"
Contrary to \fBgcc\fR's meaning of \fB\-Wunused\-parameter\fR,
\&\fBgfortran\fR's implementation of this option does not warn
about unused dummy arguments, but about unused \f(CW\*(C`PARAMETER\*(C'\fR values.
\&\fB\-Wunused\-parameter\fR is not included in \fB\-Wall\fR but is
implied by \fB\-Wall \-Wextra\fR.
.IP "\fB\-Walign\-commons\fR" 4
.IX Item "-Walign-commons"
By default, \fBgfortran\fR warns about any occasion of variables being
padded for proper alignment inside a \s-1COMMON\s0 block. This warning can be turned
off via \fB\-Wno\-align\-commons\fR. See also \fB\-falign\-commons\fR.
.IP "\fB\-Werror\fR" 4
.IX Item "-Werror"
Turns all warnings into errors.
.PP
Some of these have no effect when compiling programs written in Fortran.
.Sh "Options for debugging your program or \s-1GNU\s0 Fortran"
.IX Subsection "Options for debugging your program or GNU Fortran"
\&\s-1GNU\s0 Fortran has various special options that are used for debugging
either your program or the \s-1GNU\s0 Fortran compiler.
.IP "\fB\-fdump\-parse\-tree\fR" 4
.IX Item "-fdump-parse-tree"
Output the internal parse tree before starting code generation.  Only
really useful for debugging the \s-1GNU\s0 Fortran compiler itself.
.IP "\fB\-ffpe\-trap=\fR\fIlist\fR" 4
.IX Item "-ffpe-trap=list"
Specify a list of \s-1IEEE\s0 exceptions when a Floating Point Exception
(\s-1FPE\s0) should be raised.  On most systems, this will result in a \s-1SIGFPE\s0
signal being sent and the program being interrupted, producing a core
file useful for debugging.  \fIlist\fR is a (possibly empty) comma-separated
list of the following \s-1IEEE\s0 exceptions: \fBinvalid\fR (invalid floating
point operation, such as \f(CW\*(C`SQRT(\-1.0)\*(C'\fR), \fBzero\fR (division by
zero), \fBoverflow\fR (overflow in a floating point operation),
\&\fBunderflow\fR (underflow in a floating point operation),
\&\fBprecision\fR (loss of precision during operation) and \fBdenormal\fR
(operation produced a denormal value).
.Sp
Some of the routines in the Fortran runtime library, like
\&\fB\s-1CPU_TIME\s0\fR, are likely to trigger floating point exceptions when
\&\f(CW\*(C`ffpe\-trap=precision\*(C'\fR is used. For this reason, the use of 
\&\f(CW\*(C`ffpe\-trap=precision\*(C'\fR is not recommended.
.IP "\fB\-fbacktrace\fR" 4
.IX Item "-fbacktrace"
Specify that, when a runtime error is encountered or a deadly signal is
emitted (segmentation fault, illegal instruction, bus error or
floating-point exception), the Fortran runtime
library should output a backtrace of the error.  This option
only has influence for compilation of the Fortran main program.
.IP "\fB\-fdump\-core\fR" 4
.IX Item "-fdump-core"
Request that a core-dump file is written to disk when a runtime error
is encountered on systems that support core dumps. This option is
only effective for the compilation of the Fortran main program.
.Sh "Options for directory search"
.IX Subsection "Options for directory search"
These options affect how \s-1GNU\s0 Fortran searches
for files specified by the \f(CW\*(C`INCLUDE\*(C'\fR directive and where it searches
for previously compiled modules.
.PP
It also affects the search paths used by \fBcpp\fR when used to preprocess
Fortran source.
.IP "\fB\-I\fR\fIdir\fR" 4
.IX Item "-Idir"
These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive
(as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR
preprocessor).
.Sp
Also note that the general behavior of \fB\-I\fR and
\&\f(CW\*(C`INCLUDE\*(C'\fR is pretty much the same as of \fB\-I\fR with
\&\f(CW\*(C`#include\*(C'\fR in the \fBcpp\fR preprocessor, with regard to
looking for \fIheader.gcc\fR files and other such things.
.Sp
This path is also used to search for \fI.mod\fR files when previously
compiled modules are required by a \f(CW\*(C`USE\*(C'\fR statement.
.IP "\fB\-J\fR\fIdir\fR" 4
.IX Item "-Jdir"
This option specifies where to put \fI.mod\fR files for compiled modules.
It is also added to the list of directories to searched by an \f(CW\*(C`USE\*(C'\fR
statement.
.Sp
The default is the current directory.
.IP "\fB\-fintrinsic\-modules\-path\fR \fIdir\fR" 4
.IX Item "-fintrinsic-modules-path dir"
This option specifies the location of pre-compiled intrinsic modules, if
they are not in the default location expected by the compiler.
.Sh "Influencing the linking step"
.IX Subsection "Influencing the linking step"
These options come into play when the compiler links object files into an 
executable output file. They are meaningless if the compiler is not doing 
a link step.
.IP "\fB\-static\-libgfortran\fR" 4
.IX Item "-static-libgfortran"
On systems that provide \fIlibgfortran\fR as a shared and a static
library, this option forces the use of the static version. If no
shared version of \fIlibgfortran\fR was built when the compiler was
configured, this option has no effect.
.Sh "Influencing runtime behavior"
.IX Subsection "Influencing runtime behavior"
These options affect the runtime behavior of programs compiled with \s-1GNU\s0 Fortran.
.IP "\fB\-fconvert=\fR\fIconversion\fR" 4
.IX Item "-fconvert=conversion"
Specify the representation of data for unformatted files.  Valid
values for conversion are: \fBnative\fR, the default; \fBswap\fR,
swap between big\- and little\-endian; \fBbig-endian\fR, use big-endian
representation for unformatted files; \fBlittle-endian\fR, use little-endian
representation for unformatted files.
.Sp
\&\fIThis option has an effect only when used in the main program.
The \f(CI\*(C`CONVERT\*(C'\fI specifier and the \s-1GFORTRAN_CONVERT_UNIT\s0 environment
variable override the default specified by \f(BI\-fconvert\fI.\fR
.IP "\fB\-fno\-range\-check\fR" 4
.IX Item "-fno-range-check"
Disable range checking of input values during integer \f(CW\*(C`READ\*(C'\fR operations.
For example, \s-1GNU\s0 Fortran will give an error if an input value is
outside of the relevant range of [\f(CW\*(C`\-HUGE()\*(C'\fR:\f(CW\*(C`HUGE()\*(C'\fR]. In other words,
with \f(CW\*(C`INTEGER (kind=4) :: i\*(C'\fR , attempting to read \-2147483648 will
give an error unless \fB\-fno\-range\-check\fR is given. 
.IP "\fB\-frecord\-marker=\fR\fIlength\fR" 4
.IX Item "-frecord-marker=length"
Specify the length of record markers for unformatted files.
Valid values for \fIlength\fR are 4 and 8.  Default is 4.
\&\fIThis is different from previous versions of\fR \fBgfortran\fR,
which specified a default record marker length of 8 on most
systems.  If you want to read or write files compatible
with earlier versions of \fBgfortran\fR, use \fB\-frecord\-marker=8\fR.
.IP "\fB\-fmax\-subrecord\-length=\fR\fIlength\fR" 4
.IX Item "-fmax-subrecord-length=length"
Specify the maximum length for a subrecord.  The maximum permitted
value for length is 2147483639, which is also the default.  Only
really useful for use by the gfortran testsuite.
.IP "\fB\-fsign\-zero\fR" 4
.IX Item "-fsign-zero"
When enabled, floating point numbers of value zero with the sign bit set
are written as negative number in formatted output and treated as
negative in the \f(CW\*(C`SIGN\*(C'\fR intrinsic.  \f(CW\*(C`fno\-sign\-zero\*(C'\fR does not
print the negative sign of zero values and regards zero as positive
number in the \f(CW\*(C`SIGN\*(C'\fR intrinsic for compatibility with F77.
Default behavior is to show the negative sign.
.Sh "Options for code generation conventions"
.IX Subsection "Options for code generation conventions"
These machine-independent options control the interface conventions
used in code generation.
.PP
Most of them have both positive and negative forms; the negative form
of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  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 \fBno\-\fR or adding
it.
.IP "\fB\-fno\-automatic\fR" 4
.IX Item "-fno-automatic"
Treat each program unit (except those marked as \s-1RECURSIVE\s0) as if the
\&\f(CW\*(C`SAVE\*(C'\fR statement were specified for every local variable and array
referenced in it. Does not affect common blocks. (Some Fortran compilers
provide this option under the name \fB\-static\fR or \fB\-save\fR.)
The default, which is \fB\-fautomatic\fR, uses the stack for local
variables smaller than the value given by \fB\-fmax\-stack\-var\-size\fR.
Use the option \fB\-frecursive\fR to use no static memory. 
.IP "\fB\-ff2c\fR" 4
.IX Item "-ff2c"
Generate code designed to be compatible with code generated
by \fBg77\fR and \fBf2c\fR.
.Sp
The calling conventions used by \fBg77\fR (originally implemented
in \fBf2c\fR) require functions that return type
default \f(CW\*(C`REAL\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, and
functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the values via an
extra argument in the calling sequence that points to where to
store the return value.  Under the default \s-1GNU\s0 calling conventions, such
functions simply return their results as they would in \s-1GNU\s0
C\-\-\-default \f(CW\*(C`REAL\*(C'\fR functions return the C type \f(CW\*(C`float\*(C'\fR, and
\&\f(CW\*(C`COMPLEX\*(C'\fR functions return the \s-1GNU\s0 C type \f(CW\*(C`complex\*(C'\fR.
Additionally, this option implies the \fB\-fsecond\-underscore\fR
option, unless \fB\-fno\-second\-underscore\fR is explicitly requested.
.Sp
This does not affect the generation of code that interfaces with
the \fBlibgfortran\fR library.
.Sp
\&\fICaution:\fR It is not a good idea to mix Fortran code compiled with
\&\fB\-ff2c\fR with code compiled with the default \fB\-fno\-f2c\fR
calling conventions as, calling \f(CW\*(C`COMPLEX\*(C'\fR or default \f(CW\*(C`REAL\*(C'\fR
functions between program parts which were compiled with different
calling conventions will break at execution time.
.Sp
\&\fICaution:\fR This will break code which passes intrinsic functions
of type default \f(CW\*(C`REAL\*(C'\fR or \f(CW\*(C`COMPLEX\*(C'\fR as actual arguments, as
the library implementations use the \fB\-fno\-f2c\fR calling conventions.
.IP "\fB\-fno\-underscoring\fR" 4
.IX Item "-fno-underscoring"
Do not transform names of entities specified in the Fortran
source file by appending underscores to them.
.Sp
With \fB\-funderscoring\fR in effect, \s-1GNU\s0 Fortran appends one
underscore to external names with no underscores.  This is done to ensure
compatibility with code produced by many \s-1UNIX\s0 Fortran compilers.
.Sp
\&\fICaution\fR: The default behavior of \s-1GNU\s0 Fortran is
incompatible with \fBf2c\fR and \fBg77\fR, please use the
\&\fB\-ff2c\fR option if you want object files compiled with
\&\s-1GNU\s0 Fortran to be compatible with object code created with these
tools.
.Sp
Use of \fB\-fno\-underscoring\fR is not recommended unless you are
experimenting with issues such as integration of \s-1GNU\s0 Fortran into
existing system environments (vis\-@`{a}\-vis existing libraries, tools,
and so on).
.Sp
For example, with \fB\-funderscoring\fR, and assuming other defaults like
\&\fB\-fcase\-lower\fR and that \f(CW\*(C`j()\*(C'\fR and \f(CW\*(C`max_count()\*(C'\fR are
external functions while \f(CW\*(C`my_var\*(C'\fR and \f(CW\*(C`lvar\*(C'\fR are local variables,
a statement like
.Sp
.Vb 1
\&        I = J() + MAX_COUNT (MY_VAR, LVAR)
.Ve
.Sp
is implemented as something akin to:
.Sp
.Vb 1
\&        i = j_() + max_count__(&my_var__, &lvar);
.Ve
.Sp
With \fB\-fno\-underscoring\fR, the same statement is implemented as:
.Sp
.Vb 1
\&        i = j() + max_count(&my_var, &lvar);
.Ve
.Sp
Use of \fB\-fno\-underscoring\fR allows direct specification of
user-defined names while debugging and when interfacing \s-1GNU\s0 Fortran
code with other languages.
.Sp
Note that just because the names match does \fInot\fR mean that the
interface implemented by \s-1GNU\s0 Fortran for an external name matches the
interface implemented by some other language for that same name.
That is, getting code produced by \s-1GNU\s0 Fortran 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.
.Sp
Also, note that with \fB\-fno\-underscoring\fR, 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.
.Sp
In future versions of \s-1GNU\s0 Fortran 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.
.IP "\fB\-fwhole\-file\fR" 4
.IX Item "-fwhole-file"
By default, \s-1GNU\s0 Fortran parses, resolves and translates each procedure
in a file separately.  Using this option modifies this such that the
whole file is parsed and placed in a single front-end tree.  During
resolution, in addition to all the usual checks and fixups, references
to external procedures that are in the same file effect resolution of
that procedure, if not already done, and a check of the interfaces. The
dependences are resolved by changing the order in which the file is
translated into the backend tree.  Thus, a procedure that is referenced
is translated before the reference and the duplication of backend tree
declarations eliminated.
.IP "\fB\-fsecond\-underscore\fR" 4
.IX Item "-fsecond-underscore"
By default, \s-1GNU\s0 Fortran appends an underscore to external
names.  If this option is used \s-1GNU\s0 Fortran appends two
underscores to names with underscores and one underscore to external names
with no underscores.  \s-1GNU\s0 Fortran also appends two underscores to
internal names with underscores to avoid naming collisions with external
names.
.Sp
This option has no effect if \fB\-fno\-underscoring\fR is
in effect.  It is implied by the \fB\-ff2c\fR option.
.Sp
Otherwise, with this option, an external name such as \f(CW\*(C`MAX_COUNT\*(C'\fR
is implemented as a reference to the link-time external symbol
\&\f(CW\*(C`max_count_\|_\*(C'\fR, instead of \f(CW\*(C`max_count_\*(C'\fR.  This is required
for compatibility with \fBg77\fR and \fBf2c\fR, and is implied
by use of the \fB\-ff2c\fR option.
.IP "\fB\-fcheck=\fR\fI<keyword>\fR" 4
.IX Item "-fcheck=<keyword>"
Enable the generation of run-time checks; the argument shall be
a comma-delimited list of the following keywords.
.RS 4
.IP "\fBall\fR" 4
.IX Item "all"
Enable all run-time test of \fB\-fcheck\fR.
.IP "\fBarray-temps\fR" 4
.IX Item "array-temps"
Warns at run time when for passing an actual argument a temporary array
had to be generated. The information generated by this warning is
sometimes useful in optimization, in order to avoid such temporaries.
.Sp
Note: The warning is only printed once per location.
.IP "\fBbounds\fR" 4
.IX Item "bounds"
Enable generation of run-time checks for array subscripts
and against the declared minimum and maximum values.  It also
checks array indices for assumed and deferred
shape arrays against the actual allocated bounds and ensures that all string
lengths are equal for character array constructors without an explicit
typespec.
.Sp
Some checks require that \fB\-fcheck=bounds\fR is set for
the compilation of the main program.
.Sp
Note: In the future this may also include other forms of checking, e.g.,
checking substring references.
.IP "\fBdo\fR" 4
.IX Item "do"
Enable generation of run-time checks for invalid modification of loop
iteration variables.
.IP "\fBmem\fR" 4
.IX Item "mem"
Enable generation of run-time checks for memory allocation.
Note: This option does not affect explicit allocations using the
\&\f(CW\*(C`ALLOCATE\*(C'\fR statement, which will be always checked.
.IP "\fBpointer\fR" 4
.IX Item "pointer"
Enable generation of run-time checks for pointers and allocatables.
.IP "\fBrecursion\fR" 4
.IX Item "recursion"
Enable generation of run-time checks for recursively called subroutines and
functions which are not marked as recursive. See also \fB\-frecursive\fR.
Note: This check does not work for OpenMP programs and is disabled if used
together with \fB\-frecursive\fR and \fB\-fopenmp\fR.
.RE
.RS 4
.RE
.IP "\fB\-fbounds\-check\fR" 4
.IX Item "-fbounds-check"
Deprecated alias for \fB\-fcheck=bounds\fR.
.IP "\fB\-fcheck\-array\-temporaries\fR" 4
.IX Item "-fcheck-array-temporaries"
Deprecated alias for \fB\-fcheck=array\-temps\fR.
.IP "\fB\-fmax\-array\-constructor=\fR\fIn\fR" 4
.IX Item "-fmax-array-constructor=n"
This option can be used to increase the upper limit permitted in 
array constructors.  The code below requires this option to expand
the array at compile time.
.Sp
.Vb 7
\&        C<program test>
\&        C<implicit none>
\&        C<integer j>
\&        C<integer, parameter :: n = 100000>
\&        C<integer, parameter :: i(n) = (/ (2*j, j = 1, n) /)>
\&        C<print '(10(I0,1X))', i>
\&        C<end program test>
.Ve
.Sp
\&\fICaution:  This option can lead to long compile times and excessively
large object files.\fR
.Sp
The default value for \fIn\fR is 65535.
.IP "\fB\-fmax\-stack\-var\-size=\fR\fIn\fR" 4
.IX Item "-fmax-stack-var-size=n"
This option specifies the size in bytes of the largest array that will be put
on the stack; if the size is exceeded static memory is used (except in
procedures marked as \s-1RECURSIVE\s0). Use the option \fB\-frecursive\fR to
allow for recursive procedures which do not have a \s-1RECURSIVE\s0 attribute or
for parallel programs. Use \fB\-fno\-automatic\fR to never use the stack.
.Sp
This option currently only affects local arrays declared with constant
bounds, and may not apply to all character variables.
Future versions of \s-1GNU\s0 Fortran may improve this behavior.
.Sp
The default value for \fIn\fR is 32768.
.IP "\fB\-fpack\-derived\fR" 4
.IX Item "-fpack-derived"
This option tells \s-1GNU\s0 Fortran to pack derived type members as closely as
possible.  Code compiled with this option is likely to be incompatible
with code compiled without this option, and may execute slower.
.IP "\fB\-frepack\-arrays\fR" 4
.IX Item "-frepack-arrays"
In some circumstances \s-1GNU\s0 Fortran may pass assumed shape array
sections via a descriptor describing a noncontiguous area of memory.
This option adds code to the function prologue to repack the data into
a contiguous block at runtime.
.Sp
This should result in faster accesses to the array.  However it can introduce
significant overhead to the function call, especially  when the passed data
is noncontiguous.
.IP "\fB\-fshort\-enums\fR" 4
.IX Item "-fshort-enums"
This option is provided for interoperability with C code that was
compiled with the \fB\-fshort\-enums\fR option.  It will make
\&\s-1GNU\s0 Fortran choose the smallest \f(CW\*(C`INTEGER\*(C'\fR kind a given
enumerator set will fit in, and give all its enumerators this kind.
.IP "\fB\-fexternal\-blas\fR" 4
.IX Item "-fexternal-blas"
This option will make \fBgfortran\fR generate calls to \s-1BLAS\s0 functions
for some matrix operations like \f(CW\*(C`MATMUL\*(C'\fR, instead of using our own
algorithms, if the size of the matrices involved is larger than a given
limit (see \fB\-fblas\-matmul\-limit\fR).  This may be profitable if an
optimized vendor \s-1BLAS\s0 library is available.  The \s-1BLAS\s0 library will have
to be specified at link time.
.IP "\fB\-fblas\-matmul\-limit=\fR\fIn\fR" 4
.IX Item "-fblas-matmul-limit=n"
Only significant when \fB\-fexternal\-blas\fR is in effect.
Matrix multiplication of matrices with size larger than (or equal to) \fIn\fR
will be performed by calls to \s-1BLAS\s0 functions, while others will be
handled by \fBgfortran\fR internal algorithms. If the matrices
involved are not square, the size comparison is performed using the
geometric mean of the dimensions of the argument and result matrices.
.Sp
The default value for \fIn\fR is 30.
.IP "\fB\-frecursive\fR" 4
.IX Item "-frecursive"
Allow indirect recursion by forcing all local arrays to be allocated
on the stack. This flag cannot be used together with
\&\fB\-fmax\-stack\-var\-size=\fR or \fB\-fno\-automatic\fR.
.IP "\fB\-finit\-local\-zero\fR" 4
.IX Item "-finit-local-zero"
.PD 0
.IP "\fB\-finit\-integer=\fR\fIn\fR" 4
.IX Item "-finit-integer=n"
.IP "\fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR\fB \fR" 4
.IX Item "-finit-real=<zero|inf|-inf|nan|snan> "
.IP "\fB\-finit\-logical=\fR\fI<true|false>\fR" 4
.IX Item "-finit-logical=<true|false>"
.IP "\fB\-finit\-character=\fR\fIn\fR" 4
.IX Item "-finit-character=n"
.PD
The \fB\-finit\-local\-zero\fR option instructs the compiler to
initialize local \f(CW\*(C`INTEGER\*(C'\fR, \f(CW\*(C`REAL\*(C'\fR, and \f(CW\*(C`COMPLEX\*(C'\fR
variables to zero, \f(CW\*(C`LOGICAL\*(C'\fR variables to false, and
\&\f(CW\*(C`CHARACTER\*(C'\fR variables to a string of null bytes.  Finer-grained
initialization options are provided by the
\&\fB\-finit\-integer=\fR\fIn\fR,
\&\fB\-finit\-real=\fR\fI<zero|inf|\-inf|nan|snan>\fR (which also initializes
the real and imaginary parts of local \f(CW\*(C`COMPLEX\*(C'\fR variables),
\&\fB\-finit\-logical=\fR\fI<true|false>\fR, and
\&\fB\-finit\-character=\fR\fIn\fR (where \fIn\fR is an \s-1ASCII\s0 character
value) options.  These options do not initialize components of derived
type variables, nor do they initialize variables that appear in an
\&\f(CW\*(C`EQUIVALENCE\*(C'\fR statement.  (This limitation may be removed in
future releases).
.Sp
Note that the \fB\-finit\-real=nan\fR option initializes \f(CW\*(C`REAL\*(C'\fR
and \f(CW\*(C`COMPLEX\*(C'\fR variables with a quiet NaN. For a signalling NaN
use \fB\-finit\-real=snan\fR; note, however, that compile-time
optimizations may convert them into quiet NaN and that trapping
needs to be enabled (e.g. via \fB\-ffpe\-trap\fR).
.IP "\fB\-falign\-commons\fR" 4
.IX Item "-falign-commons"
By default, \fBgfortran\fR enforces proper alignment of all variables in a
\&\s-1COMMON\s0 block by padding them as needed. On certain platforms this is mandatory,
on others it increases performance. If a \s-1COMMON\s0 block is not declared with
consistent data types everywhere, this padding can cause trouble, and
\&\fB\-fno\-align\-commons\fR  can be used to disable automatic alignment. The
same form of this option should be used for all files that share a \s-1COMMON\s0 block.
To avoid potential alignment issues in \s-1COMMON\s0 blocks, it is recommended to order
objects from largests to smallest.
.IP "\fB\-fno\-protect\-parens\fR" 4
.IX Item "-fno-protect-parens"
By default the parentheses in expression are honored for all optimization
levels such that the compiler does not do any re\-association. Using
\&\fB\-fno\-protect\-parens\fR allows the compiler to reorder \s-1REAL\s0 and
\&\s-1COMPLEX\s0 expressions to produce faster code. Note that for the re-association
optimization \fB\-fno\-signed\-zeros\fR and \fB\-fno\-trapping\-math\fR
need to be in effect.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
The \fBgfortran\fR compiler currently does not make use of any environment
variables to control its operation above and beyond those
that affect the operation of \fBgcc\fR.
.SH "BUGS"
.IX Header "BUGS"
For instructions on reporting bugs, see
<\fBhttp://gcc.gnu.org/bugs.html\fR>.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
\&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR,
\&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
.SH "AUTHOR"
.IX Header "AUTHOR"
See the Info entry for \fBgfortran\fR for contributors to \s-1GCC\s0 and
\&\s-1GNU\s0 Fortran.
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
.PP
Permission is granted to copy, distribute and/or modify this document
under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being \*(L"Funding Free Software\*(R", 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 \fIgfdl\fR\|(7) man page.
.PP
(a) The \s-1FSF\s0's Front-Cover Text is:
.PP
.Vb 1
\&     A GNU Manual
.Ve
.PP
(b) The \s-1FSF\s0's Back-Cover Text is:
.PP
.Vb 3
\&     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.
.Ve
