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