1@c Copyright (C) 2004-2022 Free Software Foundation, Inc.
2@c This is part of the GNU Fortran manual.
3@c For copying conditions, see the file gfortran.texi.
4
5@ignore
6@c man begin COPYRIGHT
7Copyright @copyright{} 2004-2022 Free Software Foundation, Inc.
8
9Permission is granted to copy, distribute and/or modify this document
10under the terms of the GNU Free Documentation License, Version 1.3 or
11any later version published by the Free Software Foundation; with the
12Invariant Sections being ``Funding Free Software'', the Front-Cover
13Texts being (a) (see below), and with the Back-Cover Texts being (b)
14(see below).  A copy of the license is included in the gfdl(7) man page.
15
16(a) The FSF's Front-Cover Text is:
17
18     A GNU Manual
19
20(b) The FSF's Back-Cover Text is:
21
22     You have freedom to copy and modify this GNU Manual, like GNU
23     software.  Copies published by the Free Software Foundation raise
24     funds for GNU development.
25@c man end
26@c Set file name and title for the man page.
27@setfilename gfortran
28@settitle GNU Fortran compiler.
29@c man begin SYNOPSIS
30gfortran [@option{-c}|@option{-S}|@option{-E}]
31         [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
32         [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
33         [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
34         [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
35         [@option{-f}@var{option}@dots{}]
36         [@option{-m}@var{machine-option}@dots{}]
37         [@option{-o} @var{outfile}] @var{infile}@dots{}
38
39Only the most useful options are listed here; see below for the
40remainder.
41@c man end
42@c man begin SEEALSO
43gpl(7), gfdl(7), fsf-funding(7),
44cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), dbx(1)
45and the Info entries for @file{gcc}, @file{cpp}, @file{gfortran}, @file{as},
46@file{ld}, @file{binutils} and @file{gdb}.
47@c man end
48@c man begin BUGS
49For instructions on reporting bugs, see
50@w{@value{BUGURL}}.
51@c man end
52@c man begin AUTHOR
53See the Info entry for @command{gfortran} for contributors to GCC and
54GNU Fortran.
55@c man end
56@end ignore
57
58@node Invoking GNU Fortran
59@chapter GNU Fortran Command Options
60@cindex GNU Fortran command options
61@cindex command options
62@cindex options, @command{gfortran} command
63
64@c man begin DESCRIPTION
65
66The @command{gfortran} command supports all the options supported by the
67@command{gcc} command.  Only options specific to GNU Fortran are documented
68here.
69
70@xref{Invoking GCC,,GCC Command Options,gcc,Using the GNU Compiler
71Collection (GCC)}, for information
72on the non-Fortran-specific aspects of the @command{gcc} command (and,
73therefore, the @command{gfortran} command).
74
75@cindex options, negative forms
76All GCC and GNU Fortran options
77are accepted both by @command{gfortran} and by @command{gcc}
78(as well as any other drivers built at the same time,
79such as @command{g++}),
80since adding GNU Fortran to the GCC distribution
81enables acceptance of GNU Fortran options
82by all of the relevant drivers.
83
84In some cases, options have positive and negative forms;
85the negative form of @option{-ffoo} would be @option{-fno-foo}.
86This manual documents only one of these two forms, whichever
87one is not the default.
88@c man end
89
90@menu
91* Option Summary::      Brief list of all @command{gfortran} options,
92                        without explanations.
93* Fortran Dialect Options::  Controlling the variant of Fortran language
94                             compiled.
95* Preprocessing Options::  Enable and customize preprocessing.
96* Error and Warning Options::     How picky should the compiler be?
97* Debugging Options::   Symbol tables, measurements, and debugging dumps.
98* Directory Options::   Where to find module files
99* Link Options ::       Influencing the linking step
100* Runtime Options::     Influencing runtime behavior
101* Code Gen Options::    Specifying conventions for function calls, data layout
102                        and register usage.
103* Interoperability Options::  Options for interoperability with other
104                              languages.
105* Environment Variables:: Environment variables that affect @command{gfortran}.
106@end menu
107
108@node Option Summary
109@section Option summary
110
111@c man begin OPTIONS
112
113Here is a summary of all the options specific to GNU Fortran, grouped
114by type.  Explanations are in the following sections.
115
116@table @emph
117@item Fortran Language Options
118@xref{Fortran Dialect Options,,Options controlling Fortran dialect}.
119@gccoptlist{-fall-intrinsics -fallow-argument-mismatch -fallow-invalid-boz @gol
120-fbackslash -fcray-pointer -fd-lines-as-code -fd-lines-as-comments @gol
121-fdec -fdec-char-conversions -fdec-structure -fdec-intrinsic-ints @gol
122-fdec-static -fdec-math -fdec-include -fdec-format-defaults @gol
123-fdec-blank-format-item -fdefault-double-8 -fdefault-integer-8 @gol
124-fdefault-real-8 -fdefault-real-10 -fdefault-real-16 -fdollar-ok @gol
125-ffixed-line-length-@var{n} -ffixed-line-length-none -fpad-source @gol
126-ffree-form -ffree-line-length-@var{n} -ffree-line-length-none @gol
127-fimplicit-none -finteger-4-integer-8 -fmax-identifier-length @gol
128-fmodule-private -ffixed-form -fno-range-check -fopenacc -fopenmp @gol
129-freal-4-real-10 -freal-4-real-16 -freal-4-real-8 -freal-8-real-10 @gol
130-freal-8-real-16 -freal-8-real-4 -std=@var{std} -ftest-forall-temp
131}
132
133@item Preprocessing Options
134@xref{Preprocessing Options,,Enable and customize preprocessing}.
135@gccoptlist{-A-@var{question}@r{[}=@var{answer}@r{]}
136-A@var{question}=@var{answer} -C -CC -D@var{macro}@r{[}=@var{defn}@r{]}
137-H -P @gol
138-U@var{macro} -cpp -dD -dI -dM -dN -dU -fworking-directory
139-imultilib @var{dir} @gol
140-iprefix @var{file} -iquote -isysroot @var{dir} -isystem @var{dir} -nocpp
141-nostdinc @gol
142-undef
143}
144
145@item Error and Warning Options
146@xref{Error and Warning Options,,Options to request or suppress errors
147and warnings}.
148@gccoptlist{-Waliasing -Wall -Wampersand -Warray-bounds @gol
149-Wc-binding-type -Wcharacter-truncation -Wconversion @gol
150-Wdo-subscript -Wfunction-elimination -Wimplicit-interface @gol
151-Wimplicit-procedure -Wintrinsic-shadow -Wuse-without-only @gol
152-Wintrinsics-std -Wline-truncation -Wno-align-commons @gol
153-Wno-overwrite-recursive -Wno-tabs -Wreal-q-constant -Wsurprising @gol
154-Wunderflow -Wunused-parameter -Wrealloc-lhs -Wrealloc-lhs-all @gol
155-Wfrontend-loop-interchange -Wtarget-lifetime -fmax-errors=@var{n} @gol
156-fsyntax-only -pedantic @gol
157-pedantic-errors @gol
158}
159
160@item Debugging Options
161@xref{Debugging Options,,Options for debugging your program or GNU Fortran}.
162@gccoptlist{-fbacktrace -fdump-fortran-optimized -fdump-fortran-original @gol
163-fdebug-aux-vars -fdump-fortran-global -fdump-parse-tree -ffpe-trap=@var{list} @gol
164-ffpe-summary=@var{list}
165}
166
167@item Directory Options
168@xref{Directory Options,,Options for directory search}.
169@gccoptlist{-I@var{dir}  -J@var{dir} -fintrinsic-modules-path @var{dir}}
170
171@item Link Options
172@xref{Link Options,,Options for influencing the linking step}.
173@gccoptlist{-static-libgfortran}
174
175@item Runtime Options
176@xref{Runtime Options,,Options for influencing runtime behavior}.
177@gccoptlist{-fconvert=@var{conversion} -fmax-subrecord-length=@var{length} @gol
178-frecord-marker=@var{length} -fsign-zero
179}
180
181@item Interoperability Options
182@xref{Interoperability Options,,Options for interoperability}.
183@gccoptlist{-fc-prototypes -fc-prototypes-external}
184
185@item Code Generation Options
186@xref{Code Gen Options,,Options for code generation conventions}.
187@gccoptlist{-faggressive-function-elimination -fblas-matmul-limit=@var{n} @gol
188-fbounds-check -ftail-call-workaround -ftail-call-workaround=@var{n} @gol
189-fcheck-array-temporaries @gol
190-fcheck=@var{<all|array-temps|bits|bounds|do|mem|pointer|recursion>} @gol
191-fcoarray=@var{<none|single|lib>} -fexternal-blas -ff2c @gol
192-ffrontend-loop-interchange -ffrontend-optimize @gol
193-finit-character=@var{n} -finit-integer=@var{n} -finit-local-zero @gol
194-finit-derived -finit-logical=@var{<true|false>} @gol
195-finit-real=@var{<zero|inf|-inf|nan|snan>}
196-finline-matmul-limit=@var{n} @gol
197-finline-arg-packing -fmax-array-constructor=@var{n} @gol
198-fmax-stack-var-size=@var{n} -fno-align-commons -fno-automatic @gol
199-fno-protect-parens -fno-underscoring -fsecond-underscore @gol
200-fpack-derived -frealloc-lhs -frecursive -frepack-arrays @gol
201-fshort-enums -fstack-arrays
202}
203@end table
204
205@node Fortran Dialect Options
206@section Options controlling Fortran dialect
207@cindex dialect options
208@cindex language, dialect options
209@cindex options, dialect
210
211The following options control the details of the Fortran dialect
212accepted by the compiler:
213
214@table @gcctabopt
215@item -ffree-form
216@itemx -ffixed-form
217@opindex @code{ffree-form}
218@opindex @code{ffixed-form}
219@cindex options, Fortran dialect
220@cindex file format, free
221@cindex file format, fixed
222Specify the layout used by the source file.  The free form layout
223was introduced in Fortran 90.  Fixed form was traditionally used in
224older Fortran programs.  When neither option is specified, the source
225form is determined by the file extension.
226
227@item -fall-intrinsics
228@opindex @code{fall-intrinsics}
229This option causes all intrinsic procedures (including the GNU-specific
230extensions) to be accepted.  This can be useful with @option{-std=} to
231force standard-compliance but get access to the full range of intrinsics
232available with @command{gfortran}.  As a consequence, @option{-Wintrinsics-std}
233will be ignored and no user-defined procedure with the same name as any
234intrinsic will be called except when it is explicitly declared @code{EXTERNAL}.
235
236@item -fallow-argument-mismatch
237@opindex @code{fallow-argument-mismatch}
238Some code contains calls to external procedures with mismatches
239between the calls and the procedure definition, or with mismatches
240between different calls. Such code is non-conforming, and will usually
241be flagged with an error.  This options degrades the error to a
242warning, which can only be disabled by disabling all warnings via
243@option{-w}.  Only a single occurrence per argument is flagged by this
244warning.  @option{-fallow-argument-mismatch} is implied by
245@option{-std=legacy}.
246
247Using this option is @emph{strongly} discouraged.  It is possible to
248provide standard-conforming code which allows different types of
249arguments by using an explicit interface and @code{TYPE(*)}.
250
251@item -fallow-invalid-boz
252@opindex @code{allow-invalid-boz}
253A BOZ literal constant can occur in a limited number of contexts in
254standard conforming Fortran.  This option degrades an error condition
255to a warning, and allows a BOZ literal constant to appear where the
256Fortran standard would otherwise prohibit its use.
257
258@item -fd-lines-as-code
259@itemx -fd-lines-as-comments
260@opindex @code{fd-lines-as-code}
261@opindex @code{fd-lines-as-comments}
262Enable special treatment for lines beginning with @code{d} or @code{D}
263in fixed form sources.  If the @option{-fd-lines-as-code} option is
264given they are treated as if the first column contained a blank.  If the
265@option{-fd-lines-as-comments} option is given, they are treated as
266comment lines.
267
268@item -fdec
269@opindex @code{fdec}
270DEC compatibility mode. Enables extensions and other features that mimic
271the default behavior of older compilers (such as DEC).
272These features are non-standard and should be avoided at all costs.
273For details on GNU Fortran's implementation of these extensions see the
274full documentation.
275
276Other flags enabled by this switch are:
277@option{-fdollar-ok} @option{-fcray-pointer} @option{-fdec-char-conversions}
278@option{-fdec-structure} @option{-fdec-intrinsic-ints} @option{-fdec-static}
279@option{-fdec-math} @option{-fdec-include} @option{-fdec-blank-format-item}
280@option{-fdec-format-defaults}
281
282If @option{-fd-lines-as-code}/@option{-fd-lines-as-comments} are unset, then
283@option{-fdec} also sets @option{-fd-lines-as-comments}.
284
285@item -fdec-char-conversions
286@opindex @code{fdec-char-conversions}
287Enable the use of character literals in assignments and @code{DATA} statements
288for non-character variables.
289
290@item -fdec-structure
291@opindex @code{fdec-structure}
292Enable DEC @code{STRUCTURE} and @code{RECORD} as well as @code{UNION},
293@code{MAP}, and dot ('.') as a member separator (in addition to '%'). This is
294provided for compatibility only; Fortran 90 derived types should be used
295instead where possible.
296
297@item -fdec-intrinsic-ints
298@opindex @code{fdec-intrinsic-ints}
299Enable B/I/J/K kind variants of existing integer functions (e.g. BIAND, IIAND,
300JIAND, etc...). For a complete list of intrinsics see the full documentation.
301
302@item -fdec-math
303@opindex @code{fdec-math}
304Enable legacy math intrinsics such as COTAN and degree-valued trigonometric
305functions (e.g. TAND, ATAND, etc...) for compatability with older code.
306
307@item -fdec-static
308@opindex @code{fdec-static}
309Enable DEC-style STATIC and AUTOMATIC attributes to explicitly specify
310the storage of variables and other objects.
311
312@item -fdec-include
313@opindex @code{fdec-include}
314Enable parsing of INCLUDE as a statement in addition to parsing it as
315INCLUDE line.  When parsed as INCLUDE statement, INCLUDE does not have to
316be on a single line and can use line continuations.
317
318@item -fdec-format-defaults
319@opindex @code{fdec-format-defaults}
320Enable format specifiers F, G and I to be used without width specifiers,
321default widths will be used instead.
322
323@item -fdec-blank-format-item
324@opindex @code{fdec-blank-format-item}
325Enable a blank format item at the end of a format specification i.e. nothing
326following the final comma.
327
328@item -fdollar-ok
329@opindex @code{fdollar-ok}
330@cindex @code{$}
331@cindex symbol names
332@cindex character set
333Allow @samp{$} as a valid non-first character in a symbol name. Symbols
334that start with @samp{$} are rejected since it is unclear which rules to
335apply to implicit typing as different vendors implement different rules.
336Using @samp{$} in @code{IMPLICIT} statements is also rejected.
337
338@item -fbackslash
339@opindex @code{backslash}
340@cindex backslash
341@cindex escape characters
342Change the interpretation of backslashes in string literals from a single
343backslash character to ``C-style'' escape characters. The following
344combinations are expanded @code{\a}, @code{\b}, @code{\f}, @code{\n},
345@code{\r}, @code{\t}, @code{\v}, @code{\\}, and @code{\0} to the ASCII
346characters alert, backspace, form feed, newline, carriage return,
347horizontal tab, vertical tab, backslash, and NUL, respectively.
348Additionally, @code{\x}@var{nn}, @code{\u}@var{nnnn} and
349@code{\U}@var{nnnnnnnn} (where each @var{n} is a hexadecimal digit) are
350translated into the Unicode characters corresponding to the specified code
351points. All other combinations of a character preceded by \ are
352unexpanded.
353
354@item -fmodule-private
355@opindex @code{fmodule-private}
356@cindex module entities
357@cindex private
358Set the default accessibility of module entities to @code{PRIVATE}.
359Use-associated entities will not be accessible unless they are explicitly
360declared as @code{PUBLIC}.
361
362@item -ffixed-line-length-@var{n}
363@opindex @code{ffixed-line-length-}@var{n}
364@cindex file format, fixed
365Set column after which characters are ignored in typical fixed-form
366lines in the source file, and, unless @code{-fno-pad-source}, through which
367spaces are assumed (as if padded to that length) after the ends of short
368fixed-form lines.
369
370Popular values for @var{n} include 72 (the
371standard and the default), 80 (card image), and 132 (corresponding
372to ``extended-source'' options in some popular compilers).
373@var{n} may also be @samp{none}, meaning that the entire line is meaningful
374and that continued character constants never have implicit spaces appended
375to them to fill out the line.
376@option{-ffixed-line-length-0} means the same thing as
377@option{-ffixed-line-length-none}.
378
379@item -fno-pad-source
380@opindex @code{fpad-source}
381By default fixed-form lines have spaces assumed (as if padded to that length)
382after the ends of short fixed-form lines.  This is not done either if
383@option{-ffixed-line-length-0}, @option{-ffixed-line-length-none} or
384if @option{-fno-pad-source} option is used.  With any of those options
385continued character constants never have implicit spaces appended
386to them to fill out the line.
387
388@item -ffree-line-length-@var{n}
389@opindex @code{ffree-line-length-}@var{n}
390@cindex file format, free
391Set column after which characters are ignored in typical free-form
392lines in the source file. The default value is 132.
393@var{n} may be @samp{none}, meaning that the entire line is meaningful.
394@option{-ffree-line-length-0} means the same thing as
395@option{-ffree-line-length-none}.
396
397@item -fmax-identifier-length=@var{n}
398@opindex @code{fmax-identifier-length=}@var{n}
399Specify the maximum allowed identifier length. Typical values are
40031 (Fortran 95) and 63 (Fortran 2003 and later).
401
402@item -fimplicit-none
403@opindex @code{fimplicit-none}
404Specify that no implicit typing is allowed, unless overridden by explicit
405@code{IMPLICIT} statements.  This is the equivalent of adding
406@code{implicit none} to the start of every procedure.
407
408@item -fcray-pointer
409@opindex @code{fcray-pointer}
410Enable the Cray pointer extension, which provides C-like pointer
411functionality.
412
413@item -fopenacc
414@opindex @code{fopenacc}
415@cindex OpenACC
416Enable the OpenACC extensions.  This includes OpenACC @code{!$acc}
417directives in free form and @code{c$acc}, @code{*$acc} and
418@code{!$acc} directives in fixed form, @code{!$} conditional
419compilation sentinels in free form and @code{c$}, @code{*$} and
420@code{!$} sentinels in fixed form, and when linking arranges for the
421OpenACC runtime library to be linked in.
422
423@item -fopenmp
424@opindex @code{fopenmp}
425@cindex OpenMP
426Enable the OpenMP extensions.  This includes OpenMP @code{!$omp} directives
427in free form
428and @code{c$omp}, @code{*$omp} and @code{!$omp} directives in fixed form,
429@code{!$} conditional compilation sentinels in free form
430and @code{c$}, @code{*$} and @code{!$} sentinels in fixed form,
431and when linking arranges for the OpenMP runtime library to be linked
432in.  The option @option{-fopenmp} implies @option{-frecursive}.
433
434@item -fno-range-check
435@opindex @code{frange-check}
436Disable range checking on results of simplification of constant
437expressions during compilation.  For example, GNU Fortran will give
438an error at compile time when simplifying @code{a = 1. / 0}.
439With this option, no error will be given and @code{a} will be assigned
440the value @code{+Infinity}.  If an expression evaluates to a value
441outside of the relevant range of [@code{-HUGE()}:@code{HUGE()}],
442then the expression will be replaced by @code{-Inf} or @code{+Inf}
443as appropriate.
444Similarly, @code{DATA i/Z'FFFFFFFF'/} will result in an integer overflow
445on most systems, but with @option{-fno-range-check} the value will
446``wrap around'' and @code{i} will be initialized to @math{-1} instead.
447
448@item -fdefault-integer-8
449@opindex @code{fdefault-integer-8}
450Set the default integer and logical types to an 8 byte wide type.  This option
451also affects the kind of integer constants like @code{42}. Unlike
452@option{-finteger-4-integer-8}, it does not promote variables with explicit
453kind declaration.
454
455@item -fdefault-real-8
456@opindex @code{fdefault-real-8}
457Set the default real type to an 8 byte wide type.  This option also affects
458the kind of non-double real constants like @code{1.0}.  This option promotes
459the default width of @code{DOUBLE PRECISION} and double real constants
460like @code{1.d0} to 16 bytes if possible.  If @code{-fdefault-double-8}
461is given along with @code{fdefault-real-8}, @code{DOUBLE PRECISION}
462and double real constants are not promoted.  Unlike @option{-freal-4-real-8},
463@code{fdefault-real-8} does not promote variables with explicit kind
464declarations.
465
466@item -fdefault-real-10
467@opindex @code{fdefault-real-10}
468Set the default real type to an 10 byte wide type.  This option also affects
469the kind of non-double real constants like @code{1.0}.  This option promotes
470the default width of @code{DOUBLE PRECISION} and double real constants
471like @code{1.d0} to 16 bytes if possible.  If @code{-fdefault-double-8}
472is given along with @code{fdefault-real-10}, @code{DOUBLE PRECISION}
473and double real constants are not promoted.  Unlike @option{-freal-4-real-10},
474@code{fdefault-real-10} does not promote variables with explicit kind
475declarations.
476
477@item -fdefault-real-16
478@opindex @code{fdefault-real-16}
479Set the default real type to an 16 byte wide type.  This option also affects
480the kind of non-double real constants like @code{1.0}.  This option promotes
481the default width of @code{DOUBLE PRECISION} and double real constants
482like @code{1.d0} to 16 bytes if possible.  If @code{-fdefault-double-8}
483is given along with @code{fdefault-real-16}, @code{DOUBLE PRECISION}
484and double real constants are not promoted.  Unlike @option{-freal-4-real-16},
485@code{fdefault-real-16} does not promote variables with explicit kind
486declarations.
487
488@item -fdefault-double-8
489@opindex @code{fdefault-double-8}
490Set the @code{DOUBLE PRECISION} type and double real constants
491like @code{1.d0} to an 8 byte wide type.  Do nothing if this
492is already the default.  This option prevents @option{-fdefault-real-8},
493@option{-fdefault-real-10}, and @option{-fdefault-real-16},
494from promoting @code{DOUBLE PRECISION} and double real constants like
495@code{1.d0} to 16 bytes.
496
497@item -finteger-4-integer-8
498@opindex @code{finteger-4-integer-8}
499Promote all @code{INTEGER(KIND=4)} entities to an @code{INTEGER(KIND=8)}
500entities.  If @code{KIND=8} is unavailable, then an error will be issued.
501This option should be used with care and may not be suitable for your codes.
502Areas of possible concern include calls to external procedures,
503alignment in @code{EQUIVALENCE} and/or @code{COMMON}, generic interfaces,
504BOZ literal constant conversion, and I/O.  Inspection of the intermediate
505representation of the translated Fortran code, produced by
506@option{-fdump-tree-original}, is suggested.
507
508@item  -freal-4-real-8
509@itemx -freal-4-real-10
510@itemx -freal-4-real-16
511@itemx -freal-8-real-4
512@itemx -freal-8-real-10
513@itemx -freal-8-real-16
514@opindex @code{freal-4-real-8}
515@opindex @code{freal-4-real-10}
516@opindex @code{freal-4-real-16}
517@opindex @code{freal-8-real-4}
518@opindex @code{freal-8-real-10}
519@opindex @code{freal-8-real-16}
520@cindex options, real kind type promotion
521Promote all @code{REAL(KIND=M)} entities to @code{REAL(KIND=N)} entities.
522If @code{REAL(KIND=N)} is unavailable, then an error will be issued.
523The @code{-freal-4-} flags also affect the default real kind and the
524@code{-freal-8-} flags also the double-precision real kind.  All other
525real-kind types are unaffected by this option.  The promotion is also
526applied to real literal constants of default and double-precision kind
527and a specified kind number of 4 or 8, respectively.
528However, @code{-fdefault-real-8}, @code{-fdefault-real-10},
529@code{-fdefault-real-10}, and @code{-fdefault-double-8} take precedence
530for the default and double-precision real kinds, both for real literal
531constants and for declarations without a kind number.
532Note that for @code{REAL(KIND=KIND(1.0))} the literal may get promoted and
533then the result may get promoted again.
534These options should be used with care and may not be suitable for your
535codes.  Areas of possible concern include calls to external procedures,
536alignment in @code{EQUIVALENCE} and/or @code{COMMON}, generic interfaces,
537BOZ literal constant conversion, and I/O and calls to intrinsic procedures
538when passing a value to the @code{kind=} dummy argument.  Inspection of the
539intermediate representation of the translated Fortran code, produced by
540@option{-fdump-fortran-original} or @option{-fdump-tree-original}, is suggested.
541
542@item -std=@var{std}
543@opindex @code{std=}@var{std} option
544Specify the standard to which the program is expected to conform,
545which may be one of @samp{f95}, @samp{f2003}, @samp{f2008},
546@samp{f2018}, @samp{gnu}, or @samp{legacy}.  The default value for
547@var{std} is @samp{gnu}, which specifies a superset of the latest
548Fortran standard that includes all of the extensions supported by GNU
549Fortran, although warnings will be given for obsolete extensions not
550recommended for use in new code.  The @samp{legacy} value is
551equivalent but without the warnings for obsolete extensions, and may
552be useful for old non-standard programs.  The @samp{f95},
553@samp{f2003}, @samp{f2008}, and @samp{f2018} values specify strict
554conformance to the Fortran 95, Fortran 2003, Fortran 2008 and Fortran
5552018 standards, respectively; errors are given for all extensions
556beyond the relevant language standard, and warnings are given for the
557Fortran 77 features that are permitted but obsolescent in later
558standards. The deprecated option @samp{-std=f2008ts} acts as an alias for
559@samp{-std=f2018}. It is only present for backwards compatibility with
560earlier gfortran versions and should not be used any more.
561
562@item -ftest-forall-temp
563@opindex @code{ftest-forall-temp}
564Enhance test coverage by forcing most forall assignments to use temporary.
565
566@end table
567
568@node Preprocessing Options
569@section Enable and customize preprocessing
570@cindex preprocessor
571@cindex options, preprocessor
572@cindex CPP
573@cindex FPP
574@cindex Conditional compilation
575@cindex Preprocessing
576@cindex preprocessor, include file handling
577
578Many Fortran compilers including GNU Fortran allow passing the source code
579through a C preprocessor (CPP; sometimes also called the Fortran preprocessor,
580FPP) to allow for conditional compilation.  In the case of GNU Fortran,
581this is the GNU C Preprocessor in the traditional mode.  On systems with
582case-preserving file names, the preprocessor is automatically invoked if the
583filename extension is @file{.F}, @file{.FOR}, @file{.FTN}, @file{.fpp},
584@file{.FPP}, @file{.F90}, @file{.F95}, @file{.F03} or @file{.F08}.  To manually
585invoke the preprocessor on any file, use @option{-cpp}, to disable
586preprocessing on files where the preprocessor is run automatically, use
587@option{-nocpp}.
588
589If a preprocessed file includes another file with the Fortran @code{INCLUDE}
590statement, the included file is not preprocessed.  To preprocess included
591files, use the equivalent preprocessor statement @code{#include}.
592
593If GNU Fortran invokes the preprocessor, @code{__GFORTRAN__}
594is defined.  The macros @code{__GNUC__}, @code{__GNUC_MINOR__} and
595@code{__GNUC_PATCHLEVEL__} can be used to determine the version of the
596compiler.  See @ref{Top,,Overview,cpp,The C Preprocessor} for details.
597
598GNU Fortran supports a number of @code{INTEGER} and @code{REAL} kind types
599in additional to the kind types required by the Fortran standard.
600The availability of any given kind type is architecture dependent.  The
601following pre-defined preprocessor macros can be used to conditionally
602include code for these additional kind types: @code{__GFC_INT_1__},
603@code{__GFC_INT_2__}, @code{__GFC_INT_8__}, @code{__GFC_INT_16__},
604@code{__GFC_REAL_10__}, and @code{__GFC_REAL_16__}.
605
606While CPP is the de-facto standard for preprocessing Fortran code,
607Part 3 of the Fortran 95 standard (ISO/IEC 1539-3:1998) defines
608Conditional Compilation, which is not widely used and not directly
609supported by the GNU Fortran compiler.  You can use the program coco
610to preprocess such files (@uref{http://www.daniellnagle.com/coco.html}).
611
612The following options control preprocessing of Fortran code:
613
614@table @gcctabopt
615@item -cpp
616@itemx -nocpp
617@opindex @code{cpp}
618@opindex @code{fpp}
619@cindex preprocessor, enable
620@cindex preprocessor, disable
621Enable preprocessing. The preprocessor is automatically invoked if
622the file extension is @file{.fpp}, @file{.FPP},  @file{.F}, @file{.FOR},
623@file{.FTN}, @file{.F90}, @file{.F95}, @file{.F03} or @file{.F08}. Use
624this option to manually enable preprocessing of any kind of Fortran file.
625
626To disable preprocessing of files with any of the above listed extensions,
627use the negative form: @option{-nocpp}.
628
629The preprocessor is run in traditional mode. Any restrictions of the
630file-format, especially the limits on line length, apply for
631preprocessed output as well, so it might be advisable to use the
632@option{-ffree-line-length-none} or @option{-ffixed-line-length-none}
633options.
634
635@item -dM
636@opindex @code{dM}
637@cindex preprocessor, debugging
638@cindex debugging, preprocessor
639Instead of the normal output, generate a list of @code{'#define'}
640directives for all the macros defined during the execution of the
641preprocessor, including predefined macros. This gives you a way
642of finding out what is predefined in your version of the preprocessor.
643Assuming you have no file @file{foo.f90}, the command
644@smallexample
645  touch foo.f90; gfortran -cpp -E -dM foo.f90
646@end smallexample
647will show all the predefined macros.
648
649@item -dD
650@opindex @code{dD}
651@cindex preprocessor, debugging
652@cindex debugging, preprocessor
653Like @option{-dM} except in two respects: it does not include the
654predefined macros, and it outputs both the @code{#define} directives
655and the result of preprocessing. Both kinds of output go to the
656standard output file.
657
658@item -dN
659@opindex @code{dN}
660@cindex preprocessor, debugging
661@cindex debugging, preprocessor
662Like @option{-dD}, but emit only the macro names, not their expansions.
663
664@item -dU
665@opindex @code{dU}
666@cindex preprocessor, debugging
667@cindex debugging, preprocessor
668Like @option{dD} except that only macros that are expanded, or whose
669definedness is tested in preprocessor directives, are output; the
670output is delayed until the use or test of the macro; and @code{'#undef'}
671directives are also output for macros tested but undefined at the time.
672
673@item -dI
674@opindex @code{dI}
675@cindex preprocessor, debugging
676@cindex debugging, preprocessor
677Output @code{'#include'} directives in addition to the result
678of preprocessing.
679
680@item -fworking-directory
681@opindex @code{fworking-directory}
682@cindex preprocessor, working directory
683Enable generation of linemarkers in the preprocessor output that will
684let the compiler know the current working directory at the time of
685preprocessing. When this option is enabled, the preprocessor will emit,
686after the initial linemarker, a second linemarker with the current
687working directory followed by two slashes. GCC will use this directory,
688when it is present in the preprocessed input, as the directory emitted
689as the current working directory in some debugging information formats.
690This option is implicitly enabled if debugging information is enabled,
691but this can be inhibited with the negated form
692@option{-fno-working-directory}. If the @option{-P} flag is present
693in the command line, this option has no effect, since no @code{#line}
694directives are emitted whatsoever.
695
696@item -idirafter @var{dir}
697@opindex @code{idirafter @var{dir}}
698@cindex preprocessing, include path
699Search @var{dir} for include files, but do it after all directories
700specified with @option{-I} and the standard system directories have
701been exhausted. @var{dir} is treated as a system include directory.
702If dir begins with @code{=}, then the @code{=} will be replaced by
703the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
704
705@item -imultilib @var{dir}
706@opindex @code{imultilib @var{dir}}
707@cindex preprocessing, include path
708Use @var{dir} as a subdirectory of the directory containing target-specific
709C++ headers.
710
711@item -iprefix @var{prefix}
712@opindex @code{iprefix @var{prefix}}
713@cindex preprocessing, include path
714Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix}
715options. If the @var{prefix} represents a directory, you should include
716the final @code{'/'}.
717
718@item -isysroot @var{dir}
719@opindex @code{isysroot @var{dir}}
720@cindex preprocessing, include path
721This option is like the @option{--sysroot} option, but applies only to
722header files. See the @option{--sysroot} option for more information.
723
724@item -iquote @var{dir}
725@opindex @code{iquote @var{dir}}
726@cindex preprocessing, include path
727Search @var{dir} only for header files requested with @code{#include "file"};
728they are not searched for @code{#include <file>}, before all directories
729specified by @option{-I} and before the standard system directories. If
730@var{dir} begins with @code{=}, then the @code{=} will be replaced by the
731sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
732
733@item -isystem @var{dir}
734@opindex @code{isystem @var{dir}}
735@cindex preprocessing, include path
736Search @var{dir} for header files, after all directories specified by
737@option{-I} but before the standard system directories. Mark it as a
738system directory, so that it gets the same special treatment as is
739applied to the standard system directories. If @var{dir} begins with
740@code{=}, then the @code{=} will be replaced by the sysroot prefix;
741see @option{--sysroot} and @option{-isysroot}.
742
743@item -nostdinc
744@opindex @code{nostdinc}
745Do not search the standard system directories for header files. Only
746the directories you have specified with @option{-I} options (and the
747directory of the current file, if appropriate) are searched.
748
749@item -undef
750@opindex @code{undef}
751Do not predefine any system-specific or GCC-specific macros.
752The standard predefined macros remain defined.
753
754@item -A@var{predicate}=@var{answer}
755@opindex @code{A@var{predicate}=@var{answer}}
756@cindex preprocessing, assertion
757Make an assertion with the predicate @var{predicate} and answer @var{answer}.
758This form is preferred to the older form -A predicate(answer), which is still
759supported, because it does not use shell special characters.
760
761@item -A-@var{predicate}=@var{answer}
762@opindex @code{A-@var{predicate}=@var{answer}}
763@cindex preprocessing, assertion
764Cancel an assertion with the predicate @var{predicate} and answer @var{answer}.
765
766@item -C
767@opindex @code{C}
768@cindex preprocessing, keep comments
769Do not discard comments. All comments are passed through to the output
770file, except for comments in processed directives, which are deleted
771along with the directive.
772
773You should be prepared for side effects when using @option{-C}; it causes
774the preprocessor to treat comments as tokens in their own right. For example,
775comments appearing at the start of what would be a directive line have the
776effect of turning that line into an ordinary source line, since the first
777token on the line is no longer a @code{'#'}.
778
779Warning: this currently handles C-Style comments only. The preprocessor
780does not yet recognize Fortran-style comments.
781
782@item -CC
783@opindex @code{CC}
784@cindex preprocessing, keep comments
785Do not discard comments, including during macro expansion. This is like
786@option{-C}, except that comments contained within macros are also passed
787through to the output file where the macro is expanded.
788
789In addition to the side-effects of the @option{-C} option, the @option{-CC}
790option causes all C++-style comments inside a macro to be converted to C-style
791comments. This is to prevent later use of that macro from inadvertently
792commenting out the remainder of the source line. The @option{-CC} option
793is generally used to support lint comments.
794
795Warning: this currently handles C- and C++-Style comments only. The
796preprocessor does not yet recognize Fortran-style comments.
797
798@item -D@var{name}
799@opindex @code{D@var{name}}
800@cindex preprocessing, define macros
801Predefine name as a macro, with definition @code{1}.
802
803@item -D@var{name}=@var{definition}
804@opindex @code{D@var{name}=@var{definition}}
805@cindex preprocessing, define macros
806The contents of @var{definition} are tokenized and processed as if they
807appeared during translation phase three in a @code{'#define'} directive.
808In particular, the definition will be truncated by embedded newline
809characters.
810
811If you are invoking the preprocessor from a shell or shell-like program
812you may need to use the shell's quoting syntax to protect characters such
813as spaces that have a meaning in the shell syntax.
814
815If you wish to define a function-like macro on the command line, write
816its argument list with surrounding parentheses before the equals sign
817(if any). Parentheses are meaningful to most shells, so you will need
818to quote the option. With sh and csh, @code{-D'name(args...)=definition'}
819works.
820
821@option{-D} and @option{-U} options are processed in the order they are
822given on the command line. All -imacros file and -include file options
823are processed after all -D and -U options.
824
825@item -H
826@opindex @code{H}
827Print the name of each header file used, in addition to other normal
828activities. Each name is indented to show how deep in the @code{'#include'}
829stack it is.
830
831@item -P
832@opindex @code{P}
833@cindex preprocessing, no linemarkers
834Inhibit generation of linemarkers in the output from the preprocessor.
835This might be useful when running the preprocessor on something that
836is not C code, and will be sent to a program which might be confused
837by the linemarkers.
838
839@item -U@var{name}
840@opindex @code{U@var{name}}
841@cindex preprocessing, undefine macros
842Cancel any previous definition of @var{name}, either built in or provided
843with a @option{-D} option.
844@end table
845
846
847@node Error and Warning Options
848@section Options to request or suppress errors and warnings
849@cindex options, warnings
850@cindex options, errors
851@cindex warnings, suppressing
852@cindex messages, error
853@cindex messages, warning
854@cindex suppressing warnings
855
856Errors are diagnostic messages that report that the GNU Fortran compiler
857cannot compile the relevant piece of source code.  The compiler will
858continue to process the program in an attempt to report further errors
859to aid in debugging, but will not produce any compiled output.
860
861Warnings are diagnostic messages that report constructions which
862are not inherently erroneous but which are risky or suggest there is
863likely to be a bug in the program.  Unless @option{-Werror} is specified,
864they do not prevent compilation of the program.
865
866You can request many specific warnings with options beginning @option{-W},
867for example @option{-Wimplicit} to request warnings on implicit
868declarations.  Each of these specific warning options also has a
869negative form beginning @option{-Wno-} to turn off warnings;
870for example, @option{-Wno-implicit}.  This manual lists only one of the
871two forms, whichever is not the default.
872
873These options control the amount and kinds of errors and warnings produced
874by GNU Fortran:
875
876@table @gcctabopt
877@item -fmax-errors=@var{n}
878@opindex @code{fmax-errors=}@var{n}
879@cindex errors, limiting
880Limits the maximum number of error messages to @var{n}, at which point
881GNU Fortran bails out rather than attempting to continue processing the
882source code.  If @var{n} is 0, there is no limit on the number of error
883messages produced.
884
885@item -fsyntax-only
886@opindex @code{fsyntax-only}
887@cindex syntax checking
888Check the code for syntax errors, but do not actually compile it.  This
889will generate module files for each module present in the code, but no
890other output file.
891
892@item -Wpedantic
893@itemx -pedantic
894@opindex @code{pedantic}
895@opindex @code{Wpedantic}
896Issue warnings for uses of extensions to Fortran.
897@option{-pedantic} also applies to C-language constructs where they
898occur in GNU Fortran source files, such as use of @samp{\e} in a
899character constant within a directive like @code{#include}.
900
901Valid Fortran programs should compile properly with or without
902this option.
903However, without this option, certain GNU extensions and traditional
904Fortran features are supported as well.
905With this option, many of them are rejected.
906
907Some users try to use @option{-pedantic} to check programs for conformance.
908They soon find that it does not do quite what they want---it finds some
909nonstandard practices, but not all.
910However, improvements to GNU Fortran in this area are welcome.
911
912This should be used in conjunction with @option{-std=f95},
913@option{-std=f2003}, @option{-std=f2008} or @option{-std=f2018}.
914
915@item -pedantic-errors
916@opindex @code{pedantic-errors}
917Like @option{-pedantic}, except that errors are produced rather than
918warnings.
919
920@item -Wall
921@opindex @code{Wall}
922@cindex all warnings
923@cindex warnings, all
924Enables commonly used warning options pertaining to usage that
925we recommend avoiding and that we believe are easy to avoid.
926This currently includes @option{-Waliasing}, @option{-Wampersand},
927@option{-Wconversion}, @option{-Wsurprising}, @option{-Wc-binding-type},
928@option{-Wintrinsics-std}, @option{-Wtabs}, @option{-Wintrinsic-shadow},
929@option{-Wline-truncation}, @option{-Wtarget-lifetime},
930@option{-Winteger-division}, @option{-Wreal-q-constant}, @option{-Wunused}
931and @option{-Wundefined-do-loop}.
932
933@item -Waliasing
934@opindex @code{Waliasing}
935@cindex aliasing
936@cindex warnings, aliasing
937Warn about possible aliasing of dummy arguments. Specifically, it warns
938if the same actual argument is associated with a dummy argument with
939@code{INTENT(IN)} and a dummy argument with @code{INTENT(OUT)} in a call
940with an explicit interface.
941
942The following example will trigger the warning.
943@smallexample
944  interface
945    subroutine bar(a,b)
946      integer, intent(in) :: a
947      integer, intent(out) :: b
948    end subroutine
949  end interface
950  integer :: a
951
952  call bar(a,a)
953@end smallexample
954
955@item -Wampersand
956@opindex @code{Wampersand}
957@cindex warnings, ampersand
958@cindex @code{&}
959Warn about missing ampersand in continued character constants. The
960warning is given with @option{-Wampersand}, @option{-pedantic},
961@option{-std=f95}, @option{-std=f2003}, @option{-std=f2008} and
962@option{-std=f2018}. Note: With no ampersand given in a continued
963character constant, GNU Fortran assumes continuation at the first
964non-comment, non-whitespace character after the ampersand that
965initiated the continuation.
966
967@item -Warray-temporaries
968@opindex @code{Warray-temporaries}
969@cindex warnings, array temporaries
970Warn about array temporaries generated by the compiler.  The information
971generated by this warning is sometimes useful in optimization, in order to
972avoid such temporaries.
973
974@item -Wc-binding-type
975@opindex @code{Wc-binding-type}
976@cindex warning, C binding type
977Warn if the a variable might not be C interoperable.  In particular, warn if
978the variable has been declared using an intrinsic type with default kind
979instead of using a kind parameter defined for C interoperability in the
980intrinsic @code{ISO_C_Binding} module.  This option is implied by
981@option{-Wall}.
982
983@item -Wcharacter-truncation
984@opindex @code{Wcharacter-truncation}
985@cindex warnings, character truncation
986Warn when a character assignment will truncate the assigned string.
987
988@item -Wline-truncation
989@opindex @code{Wline-truncation}
990@cindex warnings, line truncation
991Warn when a source code line will be truncated.  This option is
992implied by @option{-Wall}.  For free-form source code, the default is
993@option{-Werror=line-truncation} such that truncations are reported as
994error.
995
996@item -Wconversion
997@opindex @code{Wconversion}
998@cindex warnings, conversion
999@cindex conversion
1000Warn about implicit conversions that are likely to change the value of
1001the expression after conversion. Implied by @option{-Wall}.
1002
1003@item -Wconversion-extra
1004@opindex @code{Wconversion-extra}
1005@cindex warnings, conversion
1006@cindex conversion
1007Warn about implicit conversions between different types and kinds. This
1008option does @emph{not} imply @option{-Wconversion}.
1009
1010@item -Wextra
1011@opindex @code{Wextra}
1012@cindex extra warnings
1013@cindex warnings, extra
1014Enables some warning options for usages of language features which
1015may be problematic. This currently includes @option{-Wcompare-reals},
1016@option{-Wunused-parameter} and @option{-Wdo-subscript}.
1017
1018@item -Wfrontend-loop-interchange
1019@opindex @code{Wfrontend-loop-interchange}
1020@cindex warnings, loop interchange
1021@cindex loop interchange, warning
1022Warn when using @option{-ffrontend-loop-interchange} for performing loop
1023interchanges.
1024
1025@item -Wimplicit-interface
1026@opindex @code{Wimplicit-interface}
1027@cindex warnings, implicit interface
1028Warn if a procedure is called without an explicit interface.
1029Note this only checks that an explicit interface is present.  It does not
1030check that the declared interfaces are consistent across program units.
1031
1032@item -Wimplicit-procedure
1033@opindex @code{Wimplicit-procedure}
1034@cindex warnings, implicit procedure
1035Warn if a procedure is called that has neither an explicit interface
1036nor has been declared as @code{EXTERNAL}.
1037
1038@item -Winteger-division
1039@opindex @code{Winteger-division}
1040@cindex warnings, integer division
1041@cindex warnings, division of integers
1042Warn if a constant integer division truncates its result.
1043As an example, 3/5 evaluates to 0.
1044
1045@item -Wintrinsics-std
1046@opindex @code{Wintrinsics-std}
1047@cindex warnings, non-standard intrinsics
1048@cindex warnings, intrinsics of other standards
1049Warn if @command{gfortran} finds a procedure named like an intrinsic not
1050available in the currently selected standard (with @option{-std}) and treats
1051it as @code{EXTERNAL} procedure because of this.  @option{-fall-intrinsics} can
1052be used to never trigger this behavior and always link to the intrinsic
1053regardless of the selected standard.
1054
1055@item -Wno-overwrite-recursive
1056@opindex @code{Woverwrite-recursive}
1057@cindex  warnings, overwrite recursive
1058Do not warn when @option{-fno-automatic} is used with @option{-frecursive}. Recursion
1059will be broken if the relevant local variables do not have the attribute
1060@code{AUTOMATIC} explicitly declared. This option can be used to suppress the warning
1061when it is known that recursion is not broken. Useful for build environments that use
1062@option{-Werror}.
1063
1064@item -Wreal-q-constant
1065@opindex @code{Wreal-q-constant}
1066@cindex warnings, @code{q} exponent-letter
1067Produce a warning if a real-literal-constant contains a @code{q}
1068exponent-letter.
1069
1070@item -Wsurprising
1071@opindex @code{Wsurprising}
1072@cindex warnings, suspicious code
1073Produce a warning when ``suspicious'' code constructs are encountered.
1074While technically legal these usually indicate that an error has been made.
1075
1076This currently produces a warning under the following circumstances:
1077
1078@itemize @bullet
1079@item
1080An INTEGER SELECT construct has a CASE that can never be matched as its
1081lower value is greater than its upper value.
1082
1083@item
1084A LOGICAL SELECT construct has three CASE statements.
1085
1086@item
1087A TRANSFER specifies a source that is shorter than the destination.
1088
1089@item
1090The type of a function result is declared more than once with the same type.  If
1091@option{-pedantic} or standard-conforming mode is enabled, this is an error.
1092
1093@item
1094A @code{CHARACTER} variable is declared with negative length.
1095@end itemize
1096
1097@item -Wtabs
1098@opindex @code{Wtabs}
1099@cindex warnings, tabs
1100@cindex tabulators
1101By default, tabs are accepted as whitespace, but tabs are not members
1102of the Fortran Character Set.  For continuation lines, a tab followed
1103by a digit between 1 and 9 is supported.  @option{-Wtabs} will cause a
1104warning to be issued if a tab is encountered. Note, @option{-Wtabs} is
1105active for @option{-pedantic}, @option{-std=f95}, @option{-std=f2003},
1106@option{-std=f2008}, @option{-std=f2018} and
1107@option{-Wall}.
1108
1109@item -Wundefined-do-loop
1110@opindex @code{Wundefined-do-loop}
1111@cindex warnings, undefined do loop
1112Warn if a DO loop with step either 1 or -1 yields an underflow or an overflow
1113during iteration of an induction variable of the loop.
1114This option is implied by @option{-Wall}.
1115
1116@item -Wunderflow
1117@opindex @code{Wunderflow}
1118@cindex warnings, underflow
1119@cindex underflow
1120Produce a warning when numerical constant expressions are
1121encountered, which yield an UNDERFLOW during compilation. Enabled by default.
1122
1123@item -Wintrinsic-shadow
1124@opindex @code{Wintrinsic-shadow}
1125@cindex warnings, intrinsic
1126@cindex intrinsic
1127Warn if a user-defined procedure or module procedure has the same name as an
1128intrinsic; in this case, an explicit interface or @code{EXTERNAL} or
1129@code{INTRINSIC} declaration might be needed to get calls later resolved to
1130the desired intrinsic/procedure.  This option is implied by @option{-Wall}.
1131
1132@item -Wuse-without-only
1133@opindex @code{Wuse-without-only}
1134@cindex warnings, use statements
1135@cindex intrinsic
1136Warn if a @code{USE} statement has no @code{ONLY} qualifier and
1137thus implicitly imports all public entities of the used module.
1138
1139@item -Wunused-dummy-argument
1140@opindex @code{Wunused-dummy-argument}
1141@cindex warnings, unused dummy argument
1142@cindex unused dummy argument
1143@cindex dummy argument, unused
1144Warn about unused dummy arguments. This option is implied by @option{-Wall}.
1145
1146@item -Wunused-parameter
1147@opindex @code{Wunused-parameter}
1148@cindex warnings, unused parameter
1149@cindex unused parameter
1150Contrary to @command{gcc}'s meaning of @option{-Wunused-parameter},
1151@command{gfortran}'s implementation of this option does not warn
1152about unused dummy arguments (see @option{-Wunused-dummy-argument}),
1153but about unused @code{PARAMETER} values. @option{-Wunused-parameter}
1154is implied by @option{-Wextra} if also @option{-Wunused} or
1155@option{-Wall} is used.
1156
1157@item -Walign-commons
1158@opindex @code{Walign-commons}
1159@cindex warnings, alignment of @code{COMMON} blocks
1160@cindex alignment of @code{COMMON} blocks
1161By default, @command{gfortran} warns about any occasion of variables being
1162padded for proper alignment inside a @code{COMMON} block. This warning can be turned
1163off via @option{-Wno-align-commons}. See also @option{-falign-commons}.
1164
1165@item -Wfunction-elimination
1166@opindex @code{Wfunction-elimination}
1167@cindex function elimination
1168@cindex warnings, function elimination
1169Warn if any calls to impure functions are eliminated by the optimizations
1170enabled by the @option{-ffrontend-optimize} option.
1171This option is implied by @option{-Wextra}.
1172
1173@item -Wrealloc-lhs
1174@opindex @code{Wrealloc-lhs}
1175@cindex Reallocate the LHS in assignments, notification
1176Warn when the compiler might insert code to for allocation or reallocation of
1177an allocatable array variable of intrinsic type in intrinsic assignments.  In
1178hot loops, the Fortran 2003 reallocation feature may reduce the performance.
1179If the array is already allocated with the correct shape, consider using a
1180whole-array array-spec (e.g. @code{(:,:,:)}) for the variable on the left-hand
1181side to prevent the reallocation check. Note that in some cases the warning
1182is shown, even if the compiler will optimize reallocation checks away.  For
1183instance, when the right-hand side contains the same variable multiplied by
1184a scalar.  See also @option{-frealloc-lhs}.
1185
1186@item -Wrealloc-lhs-all
1187@opindex @code{Wrealloc-lhs-all}
1188Warn when the compiler inserts code to for allocation or reallocation of an
1189allocatable variable; this includes scalars and derived types.
1190
1191@item -Wcompare-reals
1192@opindex @code{Wcompare-reals}
1193Warn when comparing real or complex types for equality or inequality.
1194This option is implied by @option{-Wextra}.
1195
1196@item -Wtarget-lifetime
1197@opindex @code{Wtargt-lifetime}
1198Warn if the pointer in a pointer assignment might be longer than the its
1199target. This option is implied by @option{-Wall}.
1200
1201@item -Wzerotrip
1202@opindex @code{Wzerotrip}
1203Warn if a @code{DO} loop is known to execute zero times at compile
1204time.  This option is implied by @option{-Wall}.
1205
1206@item -Wdo-subscript
1207@opindex @code{Wdo-subscript}
1208Warn if an array subscript inside a DO loop could lead to an
1209out-of-bounds access even if the compiler cannot prove that the
1210statement is actually executed, in cases like
1211@smallexample
1212  real a(3)
1213  do i=1,4
1214    if (condition(i)) then
1215      a(i) = 1.2
1216    end if
1217  end do
1218@end smallexample
1219This option is implied by @option{-Wextra}.
1220
1221@item -Werror
1222@opindex @code{Werror}
1223@cindex warnings, to errors
1224Turns all warnings into errors.
1225@end table
1226
1227@xref{Warning Options,,Options to Request or Suppress Errors and
1228Warnings, gcc,Using the GNU Compiler Collection (GCC)}, for information on
1229more options offered by the GBE shared by @command{gfortran}, @command{gcc}
1230and other GNU compilers.
1231
1232Some of these have no effect when compiling programs written in Fortran.
1233
1234@node Debugging Options
1235@section Options for debugging your program or GNU Fortran
1236@cindex options, debugging
1237@cindex debugging information options
1238
1239GNU Fortran has various special options that are used for debugging
1240either your program or the GNU Fortran compiler.
1241
1242@table @gcctabopt
1243@item -fdump-fortran-original
1244@opindex @code{fdump-fortran-original}
1245Output the internal parse tree after translating the source program
1246into internal representation.  This option is mostly useful for
1247debugging the GNU Fortran compiler itself. The output generated by
1248this option might change between releases. This option may also
1249generate internal compiler errors for features which have only
1250recently been added.
1251
1252@item -fdump-fortran-optimized
1253@opindex @code{fdump-fortran-optimized}
1254Output the parse tree after front-end optimization.  Mostly useful for
1255debugging the GNU Fortran compiler itself. The output generated by
1256this option might change between releases.  This option may also
1257generate internal compiler errors for features which have only
1258recently been added.
1259
1260@item -fdump-parse-tree
1261@opindex @code{fdump-parse-tree}
1262Output the internal parse tree after translating the source program
1263into internal representation.  Mostly useful for debugging the GNU
1264Fortran compiler itself. The output generated by this option might
1265change between releases. This option may also generate internal
1266compiler errors for features which have only recently been added. This
1267option is deprecated; use @code{-fdump-fortran-original} instead.
1268
1269@item -fdebug-aux-vars
1270@opindex @code{fdebug-aux-vars}
1271Renames internal variables created by the gfortran front end and makes
1272them accessible to a debugger.  The name of the internal variables then
1273start with upper-case letters followed by an underscore.  This option is
1274useful for debugging the compiler's code generation together with
1275@code{-fdump-tree-original} and enabling debugging of the executable
1276program by using @code{-g} or @code{-ggdb3}.
1277
1278@item -fdump-fortran-global
1279@opindex @code{fdump-fortran-global}
1280Output a list of the global identifiers after translating into
1281middle-end representation. Mostly useful for debugging the GNU Fortran
1282compiler itself. The output generated by this option might change
1283between releases.  This option may also generate internal compiler
1284errors for features which have only recently been added.
1285
1286@item -ffpe-trap=@var{list}
1287@opindex @code{ffpe-trap=}@var{list}
1288Specify a list of floating point exception traps to enable.  On most
1289systems, if a floating point exception occurs and the trap for that
1290exception is enabled, a SIGFPE signal will be sent and the program
1291being aborted, producing a core file useful for debugging.  @var{list}
1292is a (possibly empty) comma-separated list of the following
1293exceptions: @samp{invalid} (invalid floating point operation, such as
1294@code{SQRT(-1.0)}), @samp{zero} (division by zero), @samp{overflow}
1295(overflow in a floating point operation), @samp{underflow} (underflow
1296in a floating point operation), @samp{inexact} (loss of precision
1297during operation), and @samp{denormal} (operation performed on a
1298denormal value).  The first five exceptions correspond to the five
1299IEEE 754 exceptions, whereas the last one (@samp{denormal}) is not
1300part of the IEEE 754 standard but is available on some common
1301architectures such as x86.
1302
1303The first three exceptions (@samp{invalid}, @samp{zero}, and
1304@samp{overflow}) often indicate serious errors, and unless the program
1305has provisions for dealing with these exceptions, enabling traps for
1306these three exceptions is probably a good idea.
1307
1308If the option is used more than once in the command line, the lists will
1309be joined: '@code{ffpe-trap=}@var{list1} @code{ffpe-trap=}@var{list2}'
1310is equivalent to @code{ffpe-trap=}@var{list1},@var{list2}.
1311
1312Note that once enabled an exception cannot be disabled (no negative form).
1313
1314Many, if not most, floating point operations incur loss of precision
1315due to rounding, and hence the @code{ffpe-trap=inexact} is likely to
1316be uninteresting in practice.
1317
1318By default no exception traps are enabled.
1319
1320@item -ffpe-summary=@var{list}
1321@opindex @code{ffpe-summary=}@var{list}
1322Specify a list of floating-point exceptions, whose flag status is printed
1323to @code{ERROR_UNIT} when invoking @code{STOP} and @code{ERROR STOP}.
1324@var{list} can be either @samp{none}, @samp{all} or a comma-separated list
1325of the following exceptions: @samp{invalid}, @samp{zero}, @samp{overflow},
1326@samp{underflow}, @samp{inexact} and @samp{denormal}. (See
1327@option{-ffpe-trap} for a description of the exceptions.)
1328
1329If the option is used more than once in the command line, only the
1330last one will be used.
1331
1332By default, a summary for all exceptions but @samp{inexact} is shown.
1333
1334@item -fno-backtrace
1335@opindex @code{fno-backtrace}
1336@cindex backtrace
1337@cindex trace
1338When a serious runtime error is encountered or a deadly signal is
1339emitted (segmentation fault, illegal instruction, bus error,
1340floating-point exception, and the other POSIX signals that have the
1341action @samp{core}), the Fortran runtime library tries to output a
1342backtrace of the error. @code{-fno-backtrace} disables the backtrace
1343generation. This option only has influence for compilation of the
1344Fortran main program.
1345
1346@end table
1347
1348@xref{Debugging Options,,Options for Debugging Your Program or GCC,
1349gcc,Using the GNU Compiler Collection (GCC)}, for more information on
1350debugging options.
1351
1352@node Directory Options
1353@section Options for directory search
1354@cindex directory, options
1355@cindex options, directory search
1356@cindex search path
1357@cindex @code{INCLUDE} directive
1358@cindex directive, @code{INCLUDE}
1359These options affect how GNU Fortran searches
1360for files specified by the @code{INCLUDE} directive and where it searches
1361for previously compiled modules.
1362
1363It also affects the search paths used by @command{cpp} when used to preprocess
1364Fortran source.
1365
1366@table @gcctabopt
1367@item -I@var{dir}
1368@opindex @code{I}@var{dir}
1369@cindex directory, search paths for inclusion
1370@cindex inclusion, directory search paths for
1371@cindex search paths, for included files
1372@cindex paths, search
1373@cindex module search path
1374These affect interpretation of the @code{INCLUDE} directive
1375(as well as of the @code{#include} directive of the @command{cpp}
1376preprocessor).
1377
1378Also note that the general behavior of @option{-I} and
1379@code{INCLUDE} is pretty much the same as of @option{-I} with
1380@code{#include} in the @command{cpp} preprocessor, with regard to
1381looking for @file{header.gcc} files and other such things.
1382
1383This path is also used to search for @file{.mod} files when previously
1384compiled modules are required by a @code{USE} statement.
1385
1386@xref{Directory Options,,Options for Directory Search,
1387gcc,Using the GNU Compiler Collection (GCC)}, for information on the
1388@option{-I} option.
1389
1390@item -J@var{dir}
1391@opindex @code{J}@var{dir}
1392@opindex @code{M}@var{dir}
1393@cindex paths, search
1394@cindex module search path
1395This option specifies where to put @file{.mod} files for compiled modules.
1396It is also added to the list of directories to searched by an @code{USE}
1397statement.
1398
1399The default is the current directory.
1400
1401@item -fintrinsic-modules-path @var{dir}
1402@opindex @code{fintrinsic-modules-path} @var{dir}
1403@cindex paths, search
1404@cindex module search path
1405This option specifies the location of pre-compiled intrinsic modules, if
1406they are not in the default location expected by the compiler.
1407@end table
1408
1409@node Link Options
1410@section Influencing the linking step
1411@cindex options, linking
1412@cindex linking, static
1413
1414These options come into play when the compiler links object files into an
1415executable output file. They are meaningless if the compiler is not doing
1416a link step.
1417
1418@table @gcctabopt
1419@item -static-libgfortran
1420@opindex @code{static-libgfortran}
1421On systems that provide @file{libgfortran} as a shared and a static
1422library, this option forces the use of the static version. If no
1423shared version of @file{libgfortran} was built when the compiler was
1424configured, this option has no effect.
1425@end table
1426
1427
1428@node Runtime Options
1429@section Influencing runtime behavior
1430@cindex options, runtime
1431
1432These options affect the runtime behavior of programs compiled with GNU Fortran.
1433
1434@table @gcctabopt
1435@item -fconvert=@var{conversion}
1436@opindex @code{fconvert=}@var{conversion}
1437Specify the representation of data for unformatted files.  Valid
1438values for conversion on most systems are: @samp{native}, the default;
1439@samp{swap}, swap between big- and little-endian; @samp{big-endian}, use
1440big-endian representation for unformatted files; @samp{little-endian}, use
1441little-endian representation for unformatted files.
1442
1443On POWER systems which suppport @option{-mabi=ieeelongdouble},
1444there are additional options, which can be combined with others with
1445commas.  Those are
1446@itemize @w{}
1447@item @option{-fconvert=r16_ieee} Use IEEE 128-bit format for
1448@code{REAL(KIND=16)}.
1449@item @option{-fconvert=r16_ibm} Use IBM long double format for
1450@code{REAL(KIND=16)}.
1451@end itemize
1452
1453@emph{This option has an effect only when used in the main program.
1454The @code{CONVERT} specifier and the GFORTRAN_CONVERT_UNIT environment
1455variable override the default specified by @option{-fconvert}.}
1456
1457@item -frecord-marker=@var{length}
1458@opindex @code{frecord-marker=}@var{length}
1459Specify the length of record markers for unformatted files.
1460Valid values for @var{length} are 4 and 8.  Default is 4.
1461@emph{This is different from previous versions of @command{gfortran}},
1462which specified a default record marker length of 8 on most
1463systems.  If you want to read or write files compatible
1464with earlier versions of @command{gfortran}, use @option{-frecord-marker=8}.
1465
1466@item -fmax-subrecord-length=@var{length}
1467@opindex @code{fmax-subrecord-length=}@var{length}
1468Specify the maximum length for a subrecord.  The maximum permitted
1469value for length is 2147483639, which is also the default.  Only
1470really useful for use by the gfortran testsuite.
1471
1472@item -fsign-zero
1473@opindex @code{fsign-zero}
1474When enabled, floating point numbers of value zero with the sign bit set
1475are written as negative number in formatted output and treated as
1476negative in the @code{SIGN} intrinsic.  @option{-fno-sign-zero} does not
1477print the negative sign of zero values (or values rounded to zero for I/O)
1478and regards zero as positive number in the @code{SIGN} intrinsic for
1479compatibility with Fortran 77. The default is @option{-fsign-zero}.
1480@end table
1481
1482@node Code Gen Options
1483@section Options for code generation conventions
1484@cindex code generation, conventions
1485@cindex options, code generation
1486@cindex options, run-time
1487
1488These machine-independent options control the interface conventions
1489used in code generation.
1490
1491Most of them have both positive and negative forms; the negative form
1492of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
1493one of the forms is listed---the one which is not the default.  You
1494can figure out the other form by either removing @option{no-} or adding
1495it.
1496
1497@table @gcctabopt
1498@item -fno-automatic
1499@opindex @code{fno-automatic}
1500@cindex @code{SAVE} statement
1501@cindex statement, @code{SAVE}
1502Treat each program unit (except those marked as RECURSIVE) as if the
1503@code{SAVE} statement were specified for every local variable and array
1504referenced in it. Does not affect common blocks. (Some Fortran compilers
1505provide this option under the name @option{-static} or @option{-save}.)
1506The default, which is @option{-fautomatic}, uses the stack for local
1507variables smaller than the value given by @option{-fmax-stack-var-size}.
1508Use the option @option{-frecursive} to use no static memory.
1509
1510Local variables or arrays having an explicit @code{SAVE} attribute are
1511silently ignored unless the @option{-pedantic} option is added.
1512
1513@item -ff2c
1514@opindex ff2c
1515@cindex calling convention
1516@cindex @command{f2c} calling convention
1517@cindex @command{g77} calling convention
1518@cindex libf2c calling convention
1519Generate code designed to be compatible with code generated
1520by @command{g77} and @command{f2c}.
1521
1522The calling conventions used by @command{g77} (originally implemented
1523in @command{f2c}) require functions that return type
1524default @code{REAL} to actually return the C type @code{double}, and
1525functions that return type @code{COMPLEX} to return the values via an
1526extra argument in the calling sequence that points to where to
1527store the return value.  Under the default GNU calling conventions, such
1528functions simply return their results as they would in GNU
1529C---default @code{REAL} functions return the C type @code{float}, and
1530@code{COMPLEX} functions return the GNU C type @code{complex}.
1531Additionally, this option implies the @option{-fsecond-underscore}
1532option, unless @option{-fno-second-underscore} is explicitly requested.
1533
1534This does not affect the generation of code that interfaces with
1535the @command{libgfortran} library.
1536
1537@emph{Caution:} It is not a good idea to mix Fortran code compiled with
1538@option{-ff2c} with code compiled with the default @option{-fno-f2c}
1539calling conventions as, calling @code{COMPLEX} or default @code{REAL}
1540functions between program parts which were compiled with different
1541calling conventions will break at execution time.
1542
1543@emph{Caution:} This will break code which passes intrinsic functions
1544of type default @code{REAL} or @code{COMPLEX} as actual arguments, as
1545the library implementations use the @option{-fno-f2c} calling conventions.
1546
1547@item -fno-underscoring
1548@opindex @code{fno-underscoring}
1549@cindex underscore
1550@cindex symbol names, underscores
1551@cindex transforming symbol names
1552@cindex symbol names, transforming
1553Do not transform names of entities specified in the Fortran
1554source file by appending underscores to them.
1555
1556With @option{-funderscoring} in effect, GNU Fortran appends one
1557underscore to external names with no underscores.  This is done to ensure
1558compatibility with code produced by many UNIX Fortran compilers.
1559
1560@emph{Caution}: The default behavior of GNU Fortran is
1561incompatible with @command{f2c} and @command{g77}, please use the
1562@option{-ff2c} option if you want object files compiled with
1563GNU Fortran to be compatible with object code created with these
1564tools.
1565
1566Use of @option{-fno-underscoring} is not recommended unless you are
1567experimenting with issues such as integration of GNU Fortran into
1568existing system environments (vis-@`{a}-vis existing libraries, tools,
1569and so on).
1570
1571For example, with @option{-funderscoring}, and assuming that @code{j()} and
1572@code{max_count()} are external functions while @code{my_var} and
1573@code{lvar} are local variables, a statement like
1574@smallexample
1575I = J() + MAX_COUNT (MY_VAR, LVAR)
1576@end smallexample
1577@noindent
1578is implemented as something akin to:
1579@smallexample
1580i = j_() + max_count__(&my_var__, &lvar);
1581@end smallexample
1582
1583With @option{-fno-underscoring}, the same statement is implemented as:
1584
1585@smallexample
1586i = j() + max_count(&my_var, &lvar);
1587@end smallexample
1588
1589Use of @option{-fno-underscoring} allows direct specification of
1590user-defined names while debugging and when interfacing GNU Fortran
1591code with other languages.
1592
1593Note that just because the names match does @emph{not} mean that the
1594interface implemented by GNU Fortran for an external name matches the
1595interface implemented by some other language for that same name.
1596That is, getting code produced by GNU Fortran to link to code produced
1597by some other compiler using this or any other method can be only a
1598small part of the overall solution---getting the code generated by
1599both compilers to agree on issues other than naming can require
1600significant effort, and, unlike naming disagreements, linkers normally
1601cannot detect disagreements in these other areas.
1602
1603Also, note that with @option{-fno-underscoring}, the lack of appended
1604underscores introduces the very real possibility that a user-defined
1605external name will conflict with a name in a system library, which
1606could make finding unresolved-reference bugs quite difficult in some
1607cases---they might occur at program run time, and show up only as
1608buggy behavior at run time.
1609
1610In future versions of GNU Fortran we hope to improve naming and linking
1611issues so that debugging always involves using the names as they appear
1612in the source, even if the names as seen by the linker are mangled to
1613prevent accidental linking between procedures with incompatible
1614interfaces.
1615
1616@item -fsecond-underscore
1617@opindex @code{fsecond-underscore}
1618@cindex underscore
1619@cindex symbol names, underscores
1620@cindex transforming symbol names
1621@cindex symbol names, transforming
1622@cindex @command{f2c} calling convention
1623@cindex @command{g77} calling convention
1624@cindex libf2c calling convention
1625By default, GNU Fortran appends an underscore to external
1626names.  If this option is used GNU Fortran appends two
1627underscores to names with underscores and one underscore to external names
1628with no underscores.  GNU Fortran also appends two underscores to
1629internal names with underscores to avoid naming collisions with external
1630names.
1631
1632This option has no effect if @option{-fno-underscoring} is
1633in effect.  It is implied by the @option{-ff2c} option.
1634
1635Otherwise, with this option, an external name such as @code{MAX_COUNT}
1636is implemented as a reference to the link-time external symbol
1637@code{max_count__}, instead of @code{max_count_}.  This is required
1638for compatibility with @command{g77} and @command{f2c}, and is implied
1639by use of the @option{-ff2c} option.
1640
1641@item -fcoarray=@var{<keyword>}
1642@opindex @code{fcoarray}
1643@cindex coarrays
1644
1645@table @asis
1646@item @samp{none}
1647Disable coarray support; using coarray declarations and image-control
1648statements will produce a compile-time error. (Default)
1649
1650@item @samp{single}
1651Single-image mode, i.e. @code{num_images()} is always one.
1652
1653@item @samp{lib}
1654Library-based coarray parallelization; a suitable GNU Fortran coarray
1655library needs to be linked.
1656@end table
1657
1658
1659@item -fcheck=@var{<keyword>}
1660@opindex @code{fcheck}
1661@cindex array, bounds checking
1662@cindex bit intrinsics checking
1663@cindex bounds checking
1664@cindex pointer checking
1665@cindex memory checking
1666@cindex range checking
1667@cindex subscript checking
1668@cindex checking subscripts
1669@cindex run-time checking
1670@cindex checking array temporaries
1671
1672Enable the generation of run-time checks; the argument shall be
1673a comma-delimited list of the following keywords.  Prefixing a check with
1674@option{no-} disables it if it was activated by a previous specification.
1675
1676@table @asis
1677@item @samp{all}
1678Enable all run-time test of @option{-fcheck}.
1679
1680@item @samp{array-temps}
1681Warns at run time when for passing an actual argument a temporary array
1682had to be generated. The information generated by this warning is
1683sometimes useful in optimization, in order to avoid such temporaries.
1684
1685Note: The warning is only printed once per location.
1686
1687@item @samp{bits}
1688Enable generation of run-time checks for invalid arguments to the bit
1689manipulation intrinsics.
1690
1691@item @samp{bounds}
1692Enable generation of run-time checks for array subscripts
1693and against the declared minimum and maximum values.  It also
1694checks array indices for assumed and deferred
1695shape arrays against the actual allocated bounds and ensures that all string
1696lengths are equal for character array constructors without an explicit
1697typespec.
1698
1699Some checks require that @option{-fcheck=bounds} is set for
1700the compilation of the main program.
1701
1702Note: In the future this may also include other forms of checking, e.g.,
1703checking substring references.
1704
1705@item @samp{do}
1706Enable generation of run-time checks for invalid modification of loop
1707iteration variables.
1708
1709@item @samp{mem}
1710Enable generation of run-time checks for memory allocation.
1711Note: This option does not affect explicit allocations using the
1712@code{ALLOCATE} statement, which will be always checked.
1713
1714@item @samp{pointer}
1715Enable generation of run-time checks for pointers and allocatables.
1716
1717@item @samp{recursion}
1718Enable generation of run-time checks for recursively called subroutines and
1719functions which are not marked as recursive. See also @option{-frecursive}.
1720Note: This check does not work for OpenMP programs and is disabled if used
1721together with @option{-frecursive} and @option{-fopenmp}.
1722@end table
1723
1724Example: Assuming you have a file @file{foo.f90}, the command
1725@smallexample
1726  gfortran -fcheck=all,no-array-temps foo.f90
1727@end smallexample
1728will compile the file with all checks enabled as specified above except
1729warnings for generated array temporaries.
1730
1731
1732@item -fbounds-check
1733@opindex @code{fbounds-check}
1734@c Note: This option is also referred in gcc's manpage
1735Deprecated alias for @option{-fcheck=bounds}.
1736
1737@item -ftail-call-workaround
1738@itemx -ftail-call-workaround=@var{n}
1739@opindex @code{tail-call-workaround}
1740Some C interfaces to Fortran codes violate the gfortran ABI by
1741omitting the hidden character length arguments as described in
1742@xref{Argument passing conventions}.  This can lead to crashes
1743because pushing arguments for tail calls can overflow the stack.
1744
1745To provide a workaround for existing binary packages, this option
1746disables tail call optimization for gfortran procedures with character
1747arguments.  With @option{-ftail-call-workaround=2} tail call optimization
1748is disabled in all gfortran procedures with character arguments,
1749with @option{-ftail-call-workaround=1} or equivalent
1750@option{-ftail-call-workaround} only in gfortran procedures with character
1751arguments that call implicitly prototyped procedures.
1752
1753Using this option can lead to problems including crashes due to
1754insufficient stack space.
1755
1756It is @emph{very strongly} recommended to fix the code in question.
1757The @option{-fc-prototypes-external} option can be used to generate
1758prototypes which conform to gfortran's ABI, for inclusion in the
1759source code.
1760
1761Support for this option will likely be withdrawn in a future release
1762of gfortran.
1763
1764The negative form, @option{-fno-tail-call-workaround} or equivalent
1765@option{-ftail-call-workaround=0}, can be used to disable this option.
1766
1767Default is currently @option{-ftail-call-workaround}, this will change
1768in future releases.
1769
1770@item -fcheck-array-temporaries
1771@opindex @code{fcheck-array-temporaries}
1772Deprecated alias for @option{-fcheck=array-temps}.
1773
1774@item -fmax-array-constructor=@var{n}
1775@opindex @code{fmax-array-constructor}
1776This option can be used to increase the upper limit permitted in
1777array constructors.  The code below requires this option to expand
1778the array at compile time.
1779
1780@smallexample
1781program test
1782implicit none
1783integer j
1784integer, parameter :: n = 100000
1785integer, parameter :: i(n) = (/ (2*j, j = 1, n) /)
1786print '(10(I0,1X))', i
1787end program test
1788@end smallexample
1789
1790@emph{Caution:  This option can lead to long compile times and excessively
1791large object files.}
1792
1793The default value for @var{n} is 65535.
1794
1795
1796@item -fmax-stack-var-size=@var{n}
1797@opindex @code{fmax-stack-var-size}
1798This option specifies the size in bytes of the largest array that will be put
1799on the stack; if the size is exceeded static memory is used (except in
1800procedures marked as RECURSIVE). Use the option @option{-frecursive} to
1801allow for recursive procedures which do not have a RECURSIVE attribute or
1802for parallel programs. Use @option{-fno-automatic} to never use the stack.
1803
1804This option currently only affects local arrays declared with constant
1805bounds, and may not apply to all character variables.
1806Future versions of GNU Fortran may improve this behavior.
1807
1808The default value for @var{n} is 65536.
1809
1810@item -fstack-arrays
1811@opindex @code{fstack-arrays}
1812Adding this option will make the Fortran compiler put all arrays of
1813unknown size and array temporaries onto stack memory.  If your program uses very
1814large local arrays it is possible that you will have to extend your runtime
1815limits for stack memory on some operating systems. This flag is enabled
1816by default at optimization level @option{-Ofast} unless
1817@option{-fmax-stack-var-size} is specified.
1818
1819@item -fpack-derived
1820@opindex @code{fpack-derived}
1821@cindex structure packing
1822This option tells GNU Fortran to pack derived type members as closely as
1823possible.  Code compiled with this option is likely to be incompatible
1824with code compiled without this option, and may execute slower.
1825
1826@item -frepack-arrays
1827@opindex @code{frepack-arrays}
1828@cindex repacking arrays
1829In some circumstances GNU Fortran may pass assumed shape array
1830sections via a descriptor describing a noncontiguous area of memory.
1831This option adds code to the function prologue to repack the data into
1832a contiguous block at runtime.
1833
1834This should result in faster accesses to the array.  However it can introduce
1835significant overhead to the function call, especially  when the passed data
1836is noncontiguous.
1837
1838@item -fshort-enums
1839@opindex @code{fshort-enums}
1840This option is provided for interoperability with C code that was
1841compiled with the @option{-fshort-enums} option.  It will make
1842GNU Fortran choose the smallest @code{INTEGER} kind a given
1843enumerator set will fit in, and give all its enumerators this kind.
1844
1845@item -finline-arg-packing
1846@opindex @code{finline-arg-packing}
1847When passing an assumed-shape argument of a procedure as actual
1848argument to an assumed-size or explicit size or as argument to a
1849procedure that does not have an explicit interface, the argument may
1850have to be packed, that is put into contiguous memory. An example is
1851the call to @code{foo} in
1852@smallexample
1853  subroutine foo(a)
1854     real, dimension(*) :: a
1855  end subroutine foo
1856  subroutine bar(b)
1857     real, dimension(:) :: b
1858     call foo(b)
1859  end subroutine bar
1860@end smallexample
1861
1862When @option{-finline-arg-packing} is in effect, this packing will be
1863performed by inline code. This allows for more optimization while
1864increasing code size.
1865
1866@option{-finline-arg-packing} is implied by any of the @option{-O} options
1867except when optimizing for size via @option{-Os}.  If the code
1868contains a very large number of argument that have to be packed, code
1869size and also compilation time may become excessive.  If that is the
1870case, it may be better to disable this option.  Instances of packing
1871can be found by using @option{-Warray-temporaries}.
1872
1873@item -fexternal-blas
1874@opindex @code{fexternal-blas}
1875This option will make @command{gfortran} generate calls to BLAS functions
1876for some matrix operations like @code{MATMUL}, instead of using our own
1877algorithms, if the size of the matrices involved is larger than a given
1878limit (see @option{-fblas-matmul-limit}).  This may be profitable if an
1879optimized vendor BLAS library is available.  The BLAS library will have
1880to be specified at link time.
1881
1882@item -fblas-matmul-limit=@var{n}
1883@opindex @code{fblas-matmul-limit}
1884Only significant when @option{-fexternal-blas} is in effect.
1885Matrix multiplication of matrices with size larger than (or equal to) @var{n}
1886will be performed by calls to BLAS functions, while others will be
1887handled by @command{gfortran} internal algorithms. If the matrices
1888involved are not square, the size comparison is performed using the
1889geometric mean of the dimensions of the argument and result matrices.
1890
1891The default value for @var{n} is 30.
1892
1893@item -finline-matmul-limit=@var{n}
1894@opindex @code{finline-matmul-limit}
1895When front-end optimization is active, some calls to the @code{MATMUL}
1896intrinsic function will be inlined.  This may result in code size
1897increase if the size of the matrix cannot be determined at compile
1898time, as code for both cases is generated.  Setting
1899@code{-finline-matmul-limit=0} will disable inlining in all cases.
1900Setting this option with a value of @var{n} will produce inline code
1901for matrices with size up to @var{n}. If the matrices involved are not
1902square, the size comparison is performed using the geometric mean of
1903the dimensions of the argument and result matrices.
1904
1905The default value for @var{n} is 30.  The @code{-fblas-matmul-limit}
1906can be used to change this value.
1907
1908@item -frecursive
1909@opindex @code{frecursive}
1910Allow indirect recursion by forcing all local arrays to be allocated
1911on the stack. This flag cannot be used together with
1912@option{-fmax-stack-var-size=} or @option{-fno-automatic}.
1913
1914@item -finit-local-zero
1915@itemx -finit-derived
1916@itemx -finit-integer=@var{n}
1917@itemx -finit-real=@var{<zero|inf|-inf|nan|snan>}
1918@itemx -finit-logical=@var{<true|false>}
1919@itemx -finit-character=@var{n}
1920@opindex @code{finit-local-zero}
1921@opindex @code{finit-derived}
1922@opindex @code{finit-integer}
1923@opindex @code{finit-real}
1924@opindex @code{finit-logical}
1925@opindex @code{finit-character}
1926The @option{-finit-local-zero} option instructs the compiler to
1927initialize local @code{INTEGER}, @code{REAL}, and @code{COMPLEX}
1928variables to zero, @code{LOGICAL} variables to false, and
1929@code{CHARACTER} variables to a string of null bytes.  Finer-grained
1930initialization options are provided by the
1931@option{-finit-integer=@var{n}},
1932@option{-finit-real=@var{<zero|inf|-inf|nan|snan>}} (which also initializes
1933the real and imaginary parts of local @code{COMPLEX} variables),
1934@option{-finit-logical=@var{<true|false>}}, and
1935@option{-finit-character=@var{n}} (where @var{n} is an ASCII character
1936value) options.
1937
1938With @option{-finit-derived}, components of derived type variables will be
1939initialized according to these flags.  Components whose type is not covered by
1940an explicit @option{-finit-*} flag will be treated as described above with
1941@option{-finit-local-zero}.
1942
1943These options do not initialize
1944@itemize @bullet
1945@item
1946objects with the POINTER attribute
1947@item
1948allocatable arrays
1949@item
1950variables that appear in an @code{EQUIVALENCE} statement.
1951@end itemize
1952(These limitations may be removed in future releases).
1953
1954Note that the @option{-finit-real=nan} option initializes @code{REAL}
1955and @code{COMPLEX} variables with a quiet NaN. For a signalling NaN
1956use @option{-finit-real=snan}; note, however, that compile-time
1957optimizations may convert them into quiet NaN and that trapping
1958needs to be enabled (e.g. via @option{-ffpe-trap}).
1959
1960The @option{-finit-integer} option will parse the value into an
1961integer of type @code{INTEGER(kind=C_LONG)} on the host.  Said value
1962is then assigned to the integer variables in the Fortran code, which
1963might result in wraparound if the value is too large for the kind.
1964
1965Finally, note that enabling any of the @option{-finit-*} options will
1966silence warnings that would have been emitted by @option{-Wuninitialized}
1967for the affected local variables.
1968
1969@item -falign-commons
1970@opindex @code{falign-commons}
1971@cindex alignment of @code{COMMON} blocks
1972By default, @command{gfortran} enforces proper alignment of all variables in a
1973@code{COMMON} block by padding them as needed. On certain platforms this is mandatory,
1974on others it increases performance. If a @code{COMMON} block is not declared with
1975consistent data types everywhere, this padding can cause trouble, and
1976@option{-fno-align-commons} can be used to disable automatic alignment. The
1977same form of this option should be used for all files that share a @code{COMMON} block.
1978To avoid potential alignment issues in @code{COMMON} blocks, it is recommended to order
1979objects from largest to smallest.
1980
1981@item -fno-protect-parens
1982@opindex @code{fno-protect-parens}
1983@cindex re-association of parenthesized expressions
1984By default the parentheses in expression are honored for all optimization
1985levels such that the compiler does not do any re-association. Using
1986@option{-fno-protect-parens} allows the compiler to reorder @code{REAL} and
1987@code{COMPLEX} expressions to produce faster code. Note that for the re-association
1988optimization @option{-fno-signed-zeros} and @option{-fno-trapping-math}
1989need to be in effect. The parentheses protection is enabled by default, unless
1990@option{-Ofast} is given.
1991
1992@item -frealloc-lhs
1993@opindex @code{frealloc-lhs}
1994@cindex Reallocate the LHS in assignments
1995An allocatable left-hand side of an intrinsic assignment is automatically
1996(re)allocated if it is either unallocated or has a different shape. The
1997option is enabled by default except when @option{-std=f95} is given. See
1998also @option{-Wrealloc-lhs}.
1999
2000@item -faggressive-function-elimination
2001@opindex @code{faggressive-function-elimination}
2002@cindex Elimination of functions with identical argument lists
2003Functions with identical argument lists are eliminated within
2004statements, regardless of whether these functions are marked
2005@code{PURE} or not. For example, in
2006@smallexample
2007  a = f(b,c) + f(b,c)
2008@end smallexample
2009there will only be a single call to @code{f}.  This option only works
2010if @option{-ffrontend-optimize} is in effect.
2011
2012@item -ffrontend-optimize
2013@opindex @code{frontend-optimize}
2014@cindex Front-end optimization
2015This option performs front-end optimization, based on manipulating
2016parts the Fortran parse tree.  Enabled by default by any @option{-O} option
2017except @option{-O0} and @option{-Og}.  Optimizations enabled by this option
2018include:
2019@itemize @bullet
2020@item inlining calls to @code{MATMUL},
2021@item elimination of identical function calls within expressions,
2022@item removing unnecessary calls to @code{TRIM} in comparisons and assignments,
2023@item replacing @code{TRIM(a)} with @code{a(1:LEN_TRIM(a))} and
2024@item short-circuiting of logical operators (@code{.AND.} and @code{.OR.}).
2025@end itemize
2026It can be deselected by specifying @option{-fno-frontend-optimize}.
2027
2028@item -ffrontend-loop-interchange
2029@opindex @code{frontend-loop-interchange}
2030@cindex loop interchange, Fortran
2031Attempt to interchange loops in the Fortran front end where
2032profitable.  Enabled by default by any @option{-O} option.
2033At the moment, this option only affects @code{FORALL} and
2034@code{DO CONCURRENT} statements with several forall triplets.
2035@end table
2036
2037@xref{Code Gen Options,,Options for Code Generation Conventions,
2038gcc,Using the GNU Compiler Collection (GCC)}, for information on more options
2039offered by the GBE
2040shared by @command{gfortran}, @command{gcc}, and other GNU compilers.
2041
2042@c man end
2043
2044@node Interoperability Options
2045@section Options for interoperability with other languages
2046
2047@table @asis
2048
2049@item -fc-prototypes
2050@opindex @code{c-prototypes}
2051@cindex Generating C prototypes from Fortran BIND(C) enteties
2052This option will generate C prototypes from @code{BIND(C)} variable
2053declarations, types and procedure interfaces and writes them to
2054standard output.  @code{ENUM} is not yet supported.
2055
2056The generated prototypes may need inclusion of an appropriate header,
2057such as @code{<stdint.h>} or @code{<stdlib.h>}.  For types which are
2058not specified using the appropriate kind from the @code{iso_c_binding}
2059module, a warning is added as a comment to the code.
2060
2061For function pointers, a pointer to a function returning @code{int}
2062without an explicit argument list is generated.
2063
2064Example of use:
2065@smallexample
2066$ gfortran -fc-prototypes -fsyntax-only foo.f90 > foo.h
2067@end smallexample
2068where the C code intended for interoperating with the Fortran code
2069then  uses @code{#include "foo.h"}.
2070
2071@item -fc-prototypes-external
2072@opindex @code{c-prototypes-external}
2073@cindex Generating C prototypes from external procedures
2074This option will generate C prototypes from external functions and
2075subroutines and write them to standard output.  This may be useful for
2076making sure that C bindings to Fortran code are correct.  This option
2077does not generate prototypes for @code{BIND(C)} procedures, use
2078@option{-fc-prototypes} for that.
2079
2080The generated prototypes may need inclusion of an appropriate
2081header, such as @code{<stdint.h>} or @code{<stdlib.h>}.
2082
2083This is primarily meant for legacy code to ensure that existing C
2084bindings match what @command{gfortran} emits.  The generated C
2085prototypes should be correct for the current version of the compiler,
2086but may not match what other compilers or earlier versions of
2087@command{gfortran} need.  For new developments, use of the
2088@code{BIND(C)} features is recommended.
2089
2090Example of use:
2091@smallexample
2092$ gfortran -fc-prototypes-external -fsyntax-only foo.f > foo.h
2093@end smallexample
2094where the C code intended for interoperating with the Fortran code
2095then  uses @code{#include "foo.h"}.
2096@end table
2097
2098@node Environment Variables
2099@section Environment variables affecting @command{gfortran}
2100@cindex environment variable
2101
2102@c man begin ENVIRONMENT
2103
2104The @command{gfortran} compiler currently does not make use of any environment
2105variables to control its operation above and beyond those
2106that affect the operation of @command{gcc}.
2107
2108@xref{Environment Variables,,Environment Variables Affecting GCC,
2109gcc,Using the GNU Compiler Collection (GCC)}, for information on environment
2110variables.
2111
2112@xref{Runtime}, for environment variables that affect the
2113run-time behavior of programs compiled with GNU Fortran.
2114@c man end
2115