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